summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--abstract.tex13
-rw-r--r--conclusion.tex9
-rw-r--r--cover.tex15
-rw-r--r--edit-lens/src/Control/DFST.lhs4
-rw-r--r--edit-lens/src/Control/DFST/Lens.lhs25
-rw-r--r--edit-lens/src/Control/Edit.lhs8
-rw-r--r--edit-lens/src/Control/Edit/String.lhs4
-rw-r--r--edit-lens/src/Control/Edit/String/Affected.lhs2
-rw-r--r--edit-lens/src/Control/FST.lhs33
-rw-r--r--edit-lens/src/Control/FST/Lens.tex4
-rw-r--r--edit-lens/src/Control/Lens/Edit.lhs12
-rw-r--r--implementation.tex19
-rw-r--r--intro.tex47
-rw-r--r--org.tex14
-rw-r--r--sigillum.pdfbin0 -> 69369 bytes
-rw-r--r--sigillum.pdf_tex58
-rw-r--r--sigillum.svg19
-rw-r--r--template.tex488
-rw-r--r--thesis.args2
-rw-r--r--thesis.deps8
-rw-r--r--thesis.meta.yml.gup43
-rw-r--r--thesis.tex6
-rw-r--r--title.tex28
23 files changed, 753 insertions, 108 deletions
diff --git a/abstract.tex b/abstract.tex
new file mode 100644
index 0000000..9b8949a
--- /dev/null
+++ b/abstract.tex
@@ -0,0 +1,13 @@
1\section*{Zusammenfassung}
2
3Parser, die bekannte Texte nach einer kleinen Änderung neu analysieren können, ohne die ganze Eingabe erneut zu betrachten, nennt man inkrementell.
4
5Inkrementelle Parser sind seit den 1970er-Jahren bekannt und inzwischen umfangreich erforscht.
6
7Edit-lenses sind eine vergleichsweise neue algebraische Darstellung von Programmen, die algebraisch strukturierte Änderungen zwischen Strukturen übersetzen.
8
9Wir demonstrieren, dass sich Inkrementelle Parser in der Sprache von edit-lenses fassen lassen, anhand einer besonders einfachen Klasse von Parsern, den deterministic finite state transducers.
10
11Hierzu speichern wir im unterliegenden Zustand der assoziierten edit-lens die Ausgabe-Wirkung des DFST als balancierten Binärbaum um Teile davon effizient austauschen zu können.
12
13Im Rahmen dessen stellen wir eine Implementierung von edit-lenses im Allgemeinen und unserem Verfahren in möglichst idiomatischem Haskell vor.
diff --git a/conclusion.tex b/conclusion.tex
index c604841..b0b8ae7 100644
--- a/conclusion.tex
+++ b/conclusion.tex
@@ -1,4 +1,9 @@
1Wir haben Definitionen von edit-lenses, finite-state-automata und manchen nützlichen algebraischen Operationen (Wort-DFST, Produkt von FSTs) darauf, sowohl menschenlesbar als auch in lauffähigem und idiomatischen Haskell gegeben.
2Wir haben zudem ein Verfahren dargelegt, um aus einem gegebenen DFST einen inkrementellen Parser abzuleiten und diesen direkt als edit-lens konstruiert, um später Wiederverwendbarkeit zu gewährleisten.
3Die gewünschte Laufzeitcharakteristik erreichen wir indem wir als Komplement einen balancierten Binärbaum von Transducer-Wirkungen speichern und, soweit möglich, nur Teilbäume davon betrachten müssen, um einen edit zu propagieren.
4Zudem beschreiben wir ein interaktives Demonstrationsprogramm für das dargelegte Verfahren, das wir zusammen mit der Haskell-Implementierung ausliefern und geben einen groben Überblick über die bestehende Forschung in diesem Gebiet.
5
1Unsere konkrete Implementierung hat, wie in Abschnitt \ref{performance} besprochen, Performance-Charakteristik, die sie für den tatsächlichen Einsatz untauglich macht. 6Unsere konkrete Implementierung hat, wie in Abschnitt \ref{performance} besprochen, Performance-Charakteristik, die sie für den tatsächlichen Einsatz untauglich macht.
2Aufgrund der Struktur unserer Implementierung lässt sich jedoch eine der unterliegenden Ideen, das Komplement der edit-lens als Binärbaum von Wirkungen darzustellen und durch effizientes Austauschen von Baumfragmenten die gewünschte Laufzeit-Charakteristik zu erreichen, in Zukunft recht einfach auf andere Parser anwenden. 7Aufgrund der Struktur unserer Implementierung (siehe Abschnitt \ref{ausblick-anwendbarkeit-der-implementierung-auf-andere-parser}) lässt sich jedoch eine der unterliegenden Ideen, das Komplement der edit-lens als Binärbaum von Wirkungen darzustellen und durch effizientes Austauschen von Baumfragmenten die gewünschte Laufzeit-Charakteristik zu erreichen, in Zukunft recht einfach auf andere Parser anwenden.
3 8
4Zusammenfassend haben wir eine neue und non-triviale Anwendung von edit-lenses vorgestellt. 9Zusammenfassend haben wir eine neue und nicht-triviale Anwendung von edit-lenses vorgestellt.
diff --git a/cover.tex b/cover.tex
new file mode 100644
index 0000000..3055f48
--- /dev/null
+++ b/cover.tex
@@ -0,0 +1,15 @@
1{\sffamily
2 \centering
3 {\scshape\LARGE Ludwig-Maximilians-Universität München\par}
4 \vspace{1cm}
5 \def\svgwidth{0.33 \textwidth}
6 \input{sigillum.pdf_tex}\par\vspace{1cm}
7 \vspace{1cm}
8 %{\huge \uppercase{Bachelorarbeit}\par}
9 %\vspace{0.5cm}
10 {\fontsize{1cm}{1.5cm}\selectfont Inkrementelle Parser als edit-lenses anhand von DFSTs \par}
11 \vfill
12 {\LARGE Gregor \textsc{Kleen}\par}
13% Bottom of the page
14 {\LARGE \the\year\par}
15}
diff --git a/edit-lens/src/Control/DFST.lhs b/edit-lens/src/Control/DFST.lhs
index eb838ae..48feaf9 100644
--- a/edit-lens/src/Control/DFST.lhs
+++ b/edit-lens/src/Control/DFST.lhs
@@ -41,7 +41,7 @@ import Text.Dot
41\begin{defn}[deterministic finite state transducer] 41\begin{defn}[deterministic finite state transducer]
42 Wir nennen einen FST \emph{deterministic}, wenn jedes Paar aus Ausgabezustand und Eingabesymbol maximal eine Transition zulässt, $\epsilon$-Transitionen keine Schleifen bilden und die Menge von initialen Zuständen einelementig ist. 42 Wir nennen einen FST \emph{deterministic}, wenn jedes Paar aus Ausgabezustand und Eingabesymbol maximal eine Transition zulässt, $\epsilon$-Transitionen keine Schleifen bilden und die Menge von initialen Zuständen einelementig ist.
43 43
44 Zusätzlich ändern wir die Darstellung indem wir $\epsilon$-Transitionen kontrahieren. 44 Zusätzlich ändern wir die Darstellung, indem wir $\epsilon$-Transitionen kontrahieren.
45 Wir erweitern hierfür die Ausgabe pro Transition von einem einzelnen Zeichen zu einem Wort beliebiger Länge und fügen, bei jeder Kontraktion einer $\epsilon$-Transition $A \rightarrow B$, die Ausgabe der Transition vorne an die Ausgabe aller Transitionen $B \rightarrow \ast$ von $B$ an. 45 Wir erweitern hierfür die Ausgabe pro Transition von einem einzelnen Zeichen zu einem Wort beliebiger Länge und fügen, bei jeder Kontraktion einer $\epsilon$-Transition $A \rightarrow B$, die Ausgabe der Transition vorne an die Ausgabe aller Transitionen $B \rightarrow \ast$ von $B$ an.
46\end{defn} 46\end{defn}
47 47
@@ -92,7 +92,7 @@ toFST DFST{..} = flip execState initialFST $ forM_ (Map.toList stTransition) han
92\end{comment} 92\end{comment}
93 93
94Das Ausführen eines DFST auf eine gegebene Eingabe ist komplett analog zum Ausführen eines FST. 94Das Ausführen eines DFST auf eine gegebene Eingabe ist komplett analog zum Ausführen eines FST.
95Unsere Implementierung nutzt die restriktivere Struktur aus unserer Definition von DFSTs um den Determinismus bereits im Typsystem zu kodieren. 95Unsere Implementierung nutzt die restriktivere Struktur aus unserer Definition von DFSTs, um den Determinismus bereits im Typsystem zu kodieren.
96 96
97\begin{code} 97\begin{code}
98runDFST :: forall state input output. (Ord state, Ord input) => DFST state input output -> Seq input -> Maybe (Seq output) 98runDFST :: forall state input output. (Ord state, Ord input) => DFST state input output -> Seq input -> Maybe (Seq output)
diff --git a/edit-lens/src/Control/DFST/Lens.lhs b/edit-lens/src/Control/DFST/Lens.lhs
index 56f37a0..04dade5 100644
--- a/edit-lens/src/Control/DFST/Lens.lhs
+++ b/edit-lens/src/Control/DFST/Lens.lhs
@@ -68,7 +68,7 @@ import Data.Universe (Finite(..))
68\begin{defn}[Ausgabe-Wirkung von DFSTs] 68\begin{defn}[Ausgabe-Wirkung von DFSTs]
69Wir definieren zunächst die \emph{Ausgabe-Wirkung}\footnote{Wir schreiben im Folgenden auch nur \emph{Wirkung}} eines DFST auf einen festen String als eine Abbildung \texttt{state -> (Seq output, Maybe state)}, die den aktuellen Zustand vor dem Parsen des Strings auf den Zustand danach und die (womöglich leere) Ausgabe schickt. 69Wir definieren zunächst die \emph{Ausgabe-Wirkung}\footnote{Wir schreiben im Folgenden auch nur \emph{Wirkung}} eines DFST auf einen festen String als eine Abbildung \texttt{state -> (Seq output, Maybe state)}, die den aktuellen Zustand vor dem Parsen des Strings auf den Zustand danach und die (womöglich leere) Ausgabe schickt.
70Wir annotieren Wirkungen zudem mit dem konsumierten String. 70Wir annotieren Wirkungen zudem mit dem konsumierten String.
71Diese Wirkungen bilden einen Monoiden analog zu Endomorphismen, wobei die Resultat-Strings concateniert werden. 71Diese Wirkungen bilden einen Monoiden analog zu Endomorphismen, wobei die Resultat-Strings konkateniert werden.
72 72
73\begin{code} 73\begin{code}
74data DFSTAction state input output = DFSTAction 74data DFSTAction state input output = DFSTAction
@@ -132,13 +132,13 @@ Wir bedienen uns hierbei einer bestehenden Programmbibliothek \cite{composition-
132 \begin{figure}[H] 132 \begin{figure}[H]
133 \centering 133 \centering
134 \pinclude{presentation/switchdfst.tex} 134 \pinclude{presentation/switchdfst.tex}
135 \caption{\label{fig:switchdfst} Ein einfacher DFST, der zwischen zwei Zustanden wechselt und Ausgabe abhängig vom aktuellen Zustand erzeugt} 135 \caption{\label{fig:switchdfst} Ein einfacher DFST, der zwischen zwei Zuständen wechselt und Ausgabe abhängig vom aktuellen Zustand erzeugt}
136 \end{figure} 136 \end{figure}
137 137
138 Auf $s$ wechselt der DFST seinen Zustand, auf $p$ produziert er, abhängig vom aktuellen Zustand, genau ein Zeichen. 138 Auf $s$ wechselt der DFST seinen Zustand, auf $p$ produziert er, abhängig vom aktuellen Zustand, genau ein Zeichen.
139 139
140 Wir stellen die Wirkung des DFST auf den Eingabe-String $spp$ grafisch analog zur Baumstruktur von \texttt{Compositions} dar. 140 Wir stellen die Wirkung des DFST auf den Eingabe-String $spp$ grafisch analog zur Baumstruktur von \texttt{Compositions} dar.
141 Wir bedienen uns hier der Darstellung von Automaten-Wirkungen als \emph{Schaltboxen} aus \cite{hofmann2011automatentheorie}, angepasst für DFSTs indem wir die Ausgabe des transducers an den Pfaden innerhalb der Schaltbox annotieren. 141 Wir bedienen uns hier der Darstellung von Automaten-Wirkungen als \emph{Schaltboxen} aus \cite{hofmann2011automatentheorie}, angepasst für DFSTs, indem wir die Ausgabe des transducers an den Pfaden innerhalb der Schaltbox annotieren.
142 142
143 \begin{figure}[H] 143 \begin{figure}[H]
144 \centering 144 \centering
@@ -160,22 +160,23 @@ dfstaProduces = fmap fst . runDFSTAction'
160\end{code} 160\end{code}
161\end{comment} 161\end{comment}
162 162
163Für $\Rrightarrow$ können wir die alte DFST-Wirkung zunächst anhand des Intervalls in dem der input-String von allen gegebenen edits betroffen ist (\texttt{affected}) in einen unveränderten Prefix und einen womöglich betroffenen Suffix unterteilen. 163Für $\Rrightarrow$ können wir die alte DFST-Wirkung zunächst, anhand des Intervalls, in dem der input-String von allen gegebenen edits betroffen ist (\texttt{affected}), in einen unveränderten Prefix und einen womöglich betroffenen Suffix unterteilen.
164 164
165Da wir wissen welche Stelle im input-String vom ersten gegebenen edit betroffen ist können wir, anhand der Wirkung des Teilstücks bis zu jener Stelle, den betroffenen Suffix wiederum teilen. 165Da wir wissen welche Stelle im input-String vom ersten gegebenen edit betroffen ist, können wir, anhand der Wirkung des Teilstücks bis zu jener Stelle, den betroffenen Suffix wiederum teilen.
166Die Wirkung ab der betroffenen Stelle im input-String können wir als Komposition der Wirkung der durch den edit betroffenen Stelle und derer aller Zeichen danach bestimmen. 166Die Wirkung ab der betroffenen Stelle im input-String können wir als Komposition der Wirkung der durch den edit betroffenen Stelle und derer aller Zeichen danach bestimmen.
167Nun gilt es nur noch die Differenz (als `StringEdits`) des vorherigen Suffixes im output-String und des aus der gerade berechneten Wirkung zu bestimmen, wir bedienen uns hierzu dem Unix Standard-Diff-Algorithmus zwischen der ursprünglichen Ausgabe und dem Ergebnis der Iteration des Verfahrens auf alle gegebenen edits. 167Nun gilt es nur noch die Differenz (als `StringEdits`) des vorherigen Suffixes im output-String und des aus der gerade berechneten Wirkung zu bestimmen.
168Wir bedienen uns hierzu dem Unix Standard-Diff-Algorithmus zwischen der ursprünglichen Ausgabe und dem Ergebnis der Iteration des Verfahrens auf alle gegebenen edits.
168 169
169Für die asymmetrische edit-lens entgegen der DFST-Richtung $\Lleftarrow$ verwenden wir Breitensuche über die Zustände des DFST innerhalb des von allen gegeben edits betroffenen Intervalls: 170Für die asymmetrische edit-lens entgegen der DFST-Richtung $\Lleftarrow$ verwenden wir Breitensuche über die Zustände des DFST innerhalb des von allen gegeben edits betroffenen Intervalls:
170 171
171Wir unterteilen zunächst das Komplement an den Grenzen des betroffenen Intervalls im output-String in drei Teile (durch Akkumulation der Elemente des Komplements bis die gewünschte Länge erreicht ist). 172Wir unterteilen zunächst das Komplement an den Grenzen des betroffenen Intervalls im output-String in drei Teile durch Akkumulation der Elemente des Komplements bis die gewünschte Länge erreicht ist.
172 173
173Wir transformieren dann den DFST in einen FST, dessen Ausgabe wir mit \texttt{restrictOutput} auf das gewünschte Fragment einschränken, setzen als initialen Zustand des FST den Zustand am linken Rand des von den edits betroffenen Intervalls und akzeptieren jene Zustände, von denen aus das Komplement-Fragment ab dem rechten Rand des betroffenen Intervalls zu einem im ursprünglichen DFST akzeptierenden Zustand führt. 174Wir transformieren dann den DFST in einen FST, dessen Ausgabe wir mit \texttt{restrictOutput} auf das gewünschte Fragment einschränken, setzen als initialen Zustand des FST den Zustand am linken Rand des von den edits betroffenen Intervalls und akzeptieren jene Zustände, von denen aus das Komplement-Fragment ab dem rechten Rand des betroffenen Intervalls zu einem im ursprünglichen DFST akzeptierenden Zustand führt.
174 175
175Wir verwenden dann gewöhnliche Breitensuche über die Zustände und Transitionen des soeben konstruierten FSTs um einen Lauffragment zu bestimmen, dass wir in das betroffene Intervall einsetzen können. 176Wir verwenden dann gewöhnliche Breitensuche über die Zustände und Transitionen des soeben konstruierten FSTs, um einen Lauffragment zu bestimmen, das wir in das betroffene Intervall einsetzen können.
176Hierbei sind sämtliche Randbedingungen (korrekte Ausgabe, Übereinstimmung an den Intervallgrenzen) bereits in den FST kodiert sodass wir nur noch prüfen müssen, dass der gefunde Lauf in einem akzeptierenden Zustand endet. 177Hierbei sind sämtliche Randbedingungen (korrekte Ausgabe, Übereinstimmung an den Intervallgrenzen) bereits in den FST kodiert, sodass wir nur noch prüfen müssen, dass der gefundene Lauf in einem akzeptierenden Zustand endet.
177 178
178Die input-edits können nun wiederum, unter Beachtung der Verschiebung der Indices um die Länge der Eingabe vor der linken Intervallgrenze, mit dem Unix Standard-Diff-Algorithmus berechnet werden. 179Die input-edits können nun wiederum, unter Beachtung der Verschiebung der Indizes um die Länge der Eingabe vor der linken Intervallgrenze, mit dem Unix Standard-Diff-Algorithmus berechnet werden.
179 180
180\begin{comment} 181\begin{comment}
181\begin{code} 182\begin{code}
@@ -323,7 +324,7 @@ bfs outgoing predicate
323 Wie auch im ursprünglichen DFST sind alle Zustände akzeptierend. 324 Wie auch im ursprünglichen DFST sind alle Zustände akzeptierend.
324 325
325 Wir müssen nun bestimmen welche Zustände, unter $\text{act}_\text{R}$, zu einem akzeptierenden Zustand führen. 326 Wir müssen nun bestimmen welche Zustände, unter $\text{act}_\text{R}$, zu einem akzeptierenden Zustand führen.
326 Da alle Zustände akzeptieren ist hier jeder Zustand geeignet. 327 Da alle Zustände akzeptieren, ist hier jeder Zustand geeignet.
327 328
328 Wir müssen nun (vermöge Breitensuche) den kürzesten Pfad im Produkt-FST zwischen $Q_\text{L}$ und einem der Zustände finden, der unter $\text{act}_\text{R}$ zu einem akzeptierenden Zustand im ursprünglichen transducer führt. 329 Wir müssen nun (vermöge Breitensuche) den kürzesten Pfad im Produkt-FST zwischen $Q_\text{L}$ und einem der Zustände finden, der unter $\text{act}_\text{R}$ zu einem akzeptierenden Zustand im ursprünglichen transducer führt.
329 Der leere Pfad ist geeignet. 330 Der leere Pfad ist geeignet.
@@ -339,7 +340,7 @@ bfs outgoing predicate
339 \text{\tt \textbackslash n} \cdot e = \epsilon 340 \text{\tt \textbackslash n} \cdot e = \epsilon
340 \end{equation*} 341 \end{equation*}
341 Man beachte das $\text{\tt \textbackslash n}$ und $\epsilon$ hierbei die \emph{Eingaben} von $\text{act}_{e^\prime}$ bzw. $\text{act}_0$ sind. 342 Man beachte das $\text{\tt \textbackslash n}$ und $\epsilon$ hierbei die \emph{Eingaben} von $\text{act}_{e^\prime}$ bzw. $\text{act}_0$ sind.
342 Nach Behandlung der Indices ergibt sich $e = \rho_{80}$. 343 Nach Behandlung der Indizes ergibt sich $e = \rho_{80}$.
343 344
344 Als neues Komplement erhalten wir: 345 Als neues Komplement erhalten wir:
345 346
diff --git a/edit-lens/src/Control/Edit.lhs b/edit-lens/src/Control/Edit.lhs
index 80c143a..98fa8c4 100644
--- a/edit-lens/src/Control/Edit.lhs
+++ b/edit-lens/src/Control/Edit.lhs
@@ -6,10 +6,10 @@ module Control.Edit
6\end{code} 6\end{code}
7\end{comment} 7\end{comment}
8 8
9Um das intuitive Verhalten von Änderungen auf Texten\footnote{Im folgenden \emph{edits}} und ihre interne algebraische Struktur zu fassen formalisieren wir sie als \emph{Moduln}: 9Um das intuitive Verhalten von Änderungen auf Texten\footnote{Im folgenden \emph{edits}} und ihre interne algebraische Struktur zu fassen, formalisieren wir sie als \emph{Moduln}:
10 10
11\begin{defn}[Moduln] 11\begin{defn}[Moduln]
12Ein \emph{Modul} $M$ ist eine partielle Monoidwirkung zusammen mit einem schwach-initialen Element\footnote{Gemeint ist hier die übliche Definition von \emph{schwach-initial} aus der Kategorientheorie—ein Modul $M$ bildet eine Kategorie mit Objekten aus $\Dom M$ und Morphismen von $x$ nach $y$ den Monoidelementen $\partial x \in \partial M$ sodass $x \cdot \partial x = y$} (bzgl. der Monoidwirkung) auf dem Träger, d.h. $M = (\Dom M, \partial M, \init_M)$ ist ein Tupel aus einer Trägermenge $\Dom M$, einem Monoid $\partial M$ zusammen mit mit einer partiellen Funktion $\cdot \colon \Dom M \times \partial M \to \Dom$, die \emph{kompatibel} ist mit der Monoid-Struktur: 12Ein \emph{Modul} $M$ ist eine partielle Monoidwirkung zusammen mit einem schwach-initialen Element\footnote{Gemeint ist hier die übliche Definition von \emph{schwach-initial} aus der Kategorientheorie—ein Modul $M$ bildet eine Kategorie mit Objekten aus $\Dom M$ und Morphismen von $x$ nach $y$ den Monoidelementen $\partial x \in \partial M$ sodass $x \cdot \partial x = y$} (bzgl. der Monoidwirkung) auf dem Träger. D.h. $M = (\Dom M, \partial M, \init_M)$ ist ein Tupel aus einer Trägermenge $\Dom M$, einem Monoid $\partial M$ zusammen mit einer partiellen Funktion $\cdot \colon \Dom M \times \partial M \to \Dom M$, die \emph{kompatibel} ist mit der Monoid-Struktur:
13 13
14\begin{itemize} 14\begin{itemize}
15 \item $\forall m \in \Dom M \colon m \cdot 1_{\partial M} = m$ 15 \item $\forall m \in \Dom M \colon m \cdot 1_{\partial M} = m$
@@ -22,7 +22,7 @@ $$\forall m \in \Dom M \ \exists \partial m \in \partial M \colon m = \init_M \c
22 22
23Wir führen außerdem eine Abbildung $(\init_M \cdot)^{-1} \colon \Dom M \to \partial m$ ein, die ein $m$ auf ein arbiträr gewähltes $\partial m$ abbildet für das $\init_M \cdot \partial m = m$ gilt. 23Wir führen außerdem eine Abbildung $(\init_M \cdot)^{-1} \colon \Dom M \to \partial m$ ein, die ein $m$ auf ein arbiträr gewähltes $\partial m$ abbildet für das $\init_M \cdot \partial m = m$ gilt.
24 24
25In Haskell charakterisieren wir Moduln über ihren Monoid, d.h. die Wahl des Monoiden \texttt{m} legt den Träger \texttt{Domain m}, die Wirkung \texttt{apply}, das initiale Element \texttt{init} und $(\init_M \cdot)^{-1}$ eindeutig fest\footnote{Betrachten wir mehrere Moduln über dem selben Träger (oder mit verschiedenen Wirkungen) führen wir neue, isomorphe Typen ein (\texttt{newtype}-Wrapper)}. 25In Haskell charakterisieren wir Moduln über ihren Monoid, d.h. die Wahl des Monoiden \texttt{m} legt den Träger \texttt{Domain m}, die Wirkung \texttt{apply}, das initiale Element \texttt{init} und $(\init_M \cdot)^{-1}$ eindeutig fest\footnote{Betrachten wir mehrere Moduln über dem selben Träger (oder mit verschiedenen Wirkungen), führen wir neue, isomorphe Typen ein (\texttt{newtype}-Wrapper)}.
26Eine Repräsentierung als Typklasse bietet sich an: 26Eine Repräsentierung als Typklasse bietet sich an:
27 27
28\begin{code} 28\begin{code}
@@ -50,7 +50,7 @@ apply' md e = flip apply e =<< md
50\end{code} 50\end{code}
51\end{defn} 51\end{defn}
52 52
53Wir weichen von der originalen Definition von Moduln aus \cite{hofmann2012edit} darin ab, dass wir für das ausgezeichnete Element $\init_X$ des Trägers explizit (und konstruktiv\footnote{$(\init_M \cdot)^{-1}$}) fordern, dass es ein schwach-initiales Element bzgl. der Monoidwirkung sei. 53Wir weichen von der originalen Definition von Moduln aus \cite{hofmann2012edit} ab, indem wir für das ausgezeichnete Element $\init_X$ des Trägers explizit (und konstruktiv\footnote{$(\init_M \cdot)^{-1}$}) fordern, dass es ein schwach-initiales Element bzgl. der Monoidwirkung sei.
54 54
55\begin{comment} 55\begin{comment}
56\begin{defn}[Modulhomomorphismen] 56\begin{defn}[Modulhomomorphismen]
diff --git a/edit-lens/src/Control/Edit/String.lhs b/edit-lens/src/Control/Edit/String.lhs
index c1411cf..f0ca588 100644
--- a/edit-lens/src/Control/Edit/String.lhs
+++ b/edit-lens/src/Control/Edit/String.lhs
@@ -24,7 +24,7 @@ import Data.Monoid
24\end{comment} 24\end{comment}
25 25
26\begin{defn}[Atomare edits of strings] 26\begin{defn}[Atomare edits of strings]
27Wir betrachten, zur Einfachheit, ein minimiales Set von Edits auf Strings\footnote{Wie in der Konstruktion zum Longest Common Subsequence Problem}, bestehend nur aus Einfügung eines einzelnen Zeichens $\sigma$ an einer bestimmten Position $\iota_n(\sigma)$ und löschen des Zeichens an einer einzelnen Position $\rho_n$: 27Wir betrachten zur Einfachheit ein minimiales Set von Edits auf Strings\footnote{Wie in der Konstruktion zum Longest Common Subsequence Problem} bestehend nur aus Einfügung eines einzelnen Zeichens $\sigma$ an einer bestimmten Position $\iota_n(\sigma)$ und löschen des Zeichens an einer einzelnen Position $\rho_n$:
28 28
29\begin{code} 29\begin{code}
30data StringEdit pos char = Insert { _sePos :: pos, _seInsertion :: char } 30data StringEdit pos char = Insert { _sePos :: pos, _seInsertion :: char }
@@ -38,7 +38,7 @@ data StringEdit pos char = Insert { _sePos :: pos, _seInsertion :: char }
38makeLenses ''StringEdit 38makeLenses ''StringEdit
39\end{code} 39\end{code}
40 40
41Atomare edits werden, als Liste, zu edits komponiert. 41Atomare edits werden als Liste zu edits komponiert.
42Wir führen einen speziellen edit ein, der nicht-Anwendbarkeit der edits repräsentiert: 42Wir führen einen speziellen edit ein, der nicht-Anwendbarkeit der edits repräsentiert:
43\begin{code} 43\begin{code}
44data StringEdits pos char = StringEdits (Seq (StringEdit pos char)) 44data StringEdits pos char = StringEdits (Seq (StringEdit pos char))
diff --git a/edit-lens/src/Control/Edit/String/Affected.lhs b/edit-lens/src/Control/Edit/String/Affected.lhs
index 851267b..15f73af 100644
--- a/edit-lens/src/Control/Edit/String/Affected.lhs
+++ b/edit-lens/src/Control/Edit/String/Affected.lhs
@@ -29,7 +29,7 @@ import Data.Maybe (fromMaybe, maybeToList, listToMaybe, catMaybes, isNothing, is
29\end{comment} 29\end{comment}
30 30
31Um eine obere Schranke an das von einer Serie von edits betroffene Intervall zu bestimmen ordnen wir zunächst jeder von mindestens einem atomaren edit betroffenen Position $n$ im Eingabe-Wort einen $\text{offset}_n = \text{\# deletions} - \text{\# inserts}$ zu. 31Um eine obere Schranke an das von einer Serie von edits betroffene Intervall zu bestimmen ordnen wir zunächst jeder von mindestens einem atomaren edit betroffenen Position $n$ im Eingabe-Wort einen $\text{offset}_n = \text{\# deletions} - \text{\# inserts}$ zu.
32Das gesuchte Intervall ist nun $(\text{minK}, \text{maxK})$, mit $\text{minK}$ der Position im Eingabe-Wort mit niedrigstem $\text{offset}$ und $\text{maxK}$ die Position im Eingabe-Wort mit höchstem $\text{offset}$, $\text{maxK}^\prime$, modifiziert um das Maximum aus $\{ 0 \} \cup \{ \text{maxK}_n \colon n \in \{ 0 \ldots \text{maxK}^\prime \} \}$ wobei $\text{maxK}_n = -1 \cdot (n + \text{offset}_n)$ an Position $n$ ist. 32Das gesuchte Intervall ist nun $(\text{minK}, \text{maxK})$, mit $\text{minK}$ der Position im Eingabe-Wort mit niedrigstem $\text{offset}$ und $\text{maxK}$ die Position im Eingabe-Wort mit höchstem $\text{offset}$ $\text{maxK}^\prime$ modifiziert um das Maximum aus $\{ 0 \} \cup \{ \text{maxK}_n \colon n \in \{ 0 \ldots \text{maxK}^\prime \} \}$ wobei $\text{maxK}_n = -1 \cdot (n + \text{offset}_n)$ an Position $n$ ist.
33 33
34\begin{code} 34\begin{code}
35affected :: forall char. StringEdits Natural char -> Maybe (Interval Natural) 35affected :: forall char. StringEdits Natural char -> Maybe (Interval Natural)
diff --git a/edit-lens/src/Control/FST.lhs b/edit-lens/src/Control/FST.lhs
index 9cc7524..165f247 100644
--- a/edit-lens/src/Control/FST.lhs
+++ b/edit-lens/src/Control/FST.lhs
@@ -47,12 +47,12 @@ import Text.Dot
47\end{comment} 47\end{comment}
48 48
49\begin{defn}[Finite State Transducers] 49\begin{defn}[Finite State Transducers]
50Unter einem \emph{finite state transducer} verstehen wir ein 6-Tupel $(\Sigma, \Delta, Q, I, F, E)$ mit $\Sigma$ dem endlichen Eingabe-Alphabet, $\Delta$ dem endlichen Ausgabe-Alphabet, $Q$ einer endlichen Menge an Zuständen, $I \subset Q$ der Menge von initialen Zuständen, $F \subset Q$ der Menge von akzeptierenden Endzuständen, und $E \subset Q \times (\Sigma \cup \{ \epsilon \}) \times (\Delta \cup \{ \epsilon \}) \times Q$ der Transitionsrelation. 50Unter einem \emph{finite state transducer} verstehen wir ein 6-Tupel $(\Sigma, \Delta, Q, I, F, E)$ mit $\Sigma$ dem endlichen Eingabe-Alphabet, $\Delta$ dem endlichen Ausgabe-Alphabet, $Q$ einer endlichen Menge an Zuständen, $I \subset Q$ der Menge von initialen Zuständen, $F \subset Q$ der Menge von akzeptierenden Endzuständen und $E \subset Q \times (\Sigma \cup \{ \epsilon \}) \times (\Delta \cup \{ \epsilon \}) \times Q$ der Transitionsrelation.
51 51
52Semantisch ist ein finite state transducer ein endlicher Automat erweitert um die Fähigkeit bei Zustandsübergängen ein Symbol aus seinem Ausgabe-Alphabet an ein Ausgabe-Wort anzuhängen. 52Semantisch ist ein finite state transducer ein endlicher Automat, erweitert um die Fähigkeit bei Zustandsübergängen ein Symbol aus seinem Ausgabe-Alphabet an ein Ausgabe-Wort anzuhängen (Siehe Definition \ref{defn:fst-eval}).
53 53
54In Haskell lockern wir die Anforderung, dass die Ein- und Ausgabe-Alphabete endlich sein müssen und annotieren sie nur im Typsystem. 54In Haskell lockern wir die Anforderung, dass die Ein- und Ausgabe-Alphabete endlich sein müssen und annotieren sie nur im Typsystem.
55Zudem speichern wir die Transitionsrelation als multimap um effiziente lookups von Zustand-Eingabe-Paaren zu ermöglichen. 55Zudem speichern wir die Transitionsrelation als multimap, um effiziente lookups von Zustand-Eingabe-Paaren zu ermöglichen.
56 56
57\begin{code} 57\begin{code}
58data FST state input output = FST 58data FST state input output = FST
@@ -64,7 +64,7 @@ data FST state input output = FST
64\end{defn} 64\end{defn}
65 65
66\begin{eg} \label{eg:linebreak} 66\begin{eg} \label{eg:linebreak}
67 Als wiederkehrendes Beispiel betrachten wir einen Transducer $L_{80} = (\Sigma, \Delta, Q, I, F, E)$, der für ein beliebiges Alphabet $\Sigma \supseteq \{ \text{\tt ' '}, \text{\tt \textbackslash n} \}$ durch Umwandlung zwischen Leerzeichen und Zeilenumbrüchen sicherstellt, dass jede Zeile des Ausgabetextes möglichst wenige aber mindestens 80 Zeichen enthält, und nur an Wortgrenzen umbricht: 67 Als wiederkehrendes Beispiel betrachten wir einen Transducer $L_{80} = (\Sigma, \Delta, Q, I, F, E)$, der für ein beliebiges Alphabet $\Sigma \supseteq \{ \text{\tt ' '}, \text{\tt \textbackslash n} \}$ durch Umwandlung zwischen Leerzeichen und Zeilenumbrüchen sicherstellt, dass jede Zeile des Ausgabetextes möglichst wenige, aber mindestens 80 Zeichen enthält und nur an Wortgrenzen umbricht:
68 68
69 \begin{align*} 69 \begin{align*}
70 \Delta & = \Sigma \\ 70 \Delta & = \Sigma \\
@@ -103,7 +103,7 @@ data FST state input output = FST
103 \draw[-] (rest)--(i.north); 103 \draw[-] (rest)--(i.north);
104 \draw[-] (rest)--(si.west); 104 \draw[-] (rest)--(si.west);
105 \end{tikzpicture} 105 \end{tikzpicture}
106 \caption{\label{fig:linebreak} Ein Transducer der, durch Übersetzung zwischen Leerzeichen und Zeilenumbrüchen, sicher stellt, dass jede Zeile eines Texts mindestens 80 Zeichen hat} 106 \caption{\label{fig:linebreak} Ein Transducer der durch Übersetzung zwischen Leerzeichen und Zeilenumbrüchen sicher stellt, dass jede Zeile eines Texts mindestens 80 Zeichen hat}
107 \end{figure} 107 \end{figure}
108\end{eg} 108\end{eg}
109 109
@@ -131,8 +131,8 @@ instance (Show state, Show input, Show output, Ord state, Ord input, Ord output)
131\end{code} 131\end{code}
132\end{comment} 132\end{comment}
133 133
134\begin{defn}[Auswertung von FSTs] 134\begin{defn}[Auswertung von FSTs] \label{defn:fst-eval}
135Wir definieren die \emph{Auswertung} von finite state transducers induktiv indem wir zunächst angeben wie ein einzelner Auswertungs-Schritt erfolgt. 135Wir definieren die \emph{Auswertung} von finite state transducers induktiv, indem wir zunächst angeben, wie ein einzelner Auswertungs-Schritt erfolgt.
136 136
137Hierzu kommentieren wir die Haskell-Implementierung eines Auswertungs-Schritts. 137Hierzu kommentieren wir die Haskell-Implementierung eines Auswertungs-Schritts.
138Notwendigerweise ist die Auswertung eines FSTs nicht deterministisch, wir produzieren daher eine Liste von möglichen Resultaten in keiner besonderen Reihenfolge. 138Notwendigerweise ist die Auswertung eines FSTs nicht deterministisch, wir produzieren daher eine Liste von möglichen Resultaten in keiner besonderen Reihenfolge.
@@ -145,7 +145,7 @@ step :: forall input output state. (Ord input, Ord output, Ord state)
145 -> [(Maybe input, state, Maybe output)] -- ^ Tuples of unconsumed input, next state, and produced output 145 -> [(Maybe input, state, Maybe output)] -- ^ Tuples of unconsumed input, next state, and produced output
146step FST{..} Nothing inS = (\s -> (inS, s, Nothing)) <$> Set.toList stInitial 146step FST{..} Nothing inS = (\s -> (inS, s, Nothing)) <$> Set.toList stInitial
147\end{code} 147\end{code}
148Ist kein vorheriger Schritt erfolgt so wählen wir einen initialen Zustand, konsumieren keine Eingabe, und produzieren keine Ausgabe. 148Ist kein vorheriger Schritt erfolgt, so wählen wir einen initialen Zustand, konsumieren keine Eingabe und produzieren keine Ausgabe.
149 149
150\begin{code} 150\begin{code}
151step FST{..} (Just c) inS = let 151step FST{..} (Just c) inS = let
@@ -154,7 +154,7 @@ step FST{..} (Just c) inS = let
154 in Set.toList $ Set.map (\(n, mOut) -> (Nothing, n, mOut)) consuming `Set.union` Set.map (\(n, mOut) -> (inS, n, mOut)) unconsuming 154 in Set.toList $ Set.map (\(n, mOut) -> (Nothing, n, mOut)) consuming `Set.union` Set.map (\(n, mOut) -> (inS, n, mOut)) unconsuming
155\end{code} 155\end{code}
156Ansonsten wählen wir einen Eintrag aus der Transitionstabelle für den aktuellen Zustand, der entweder keine oder die gegebene Eingabe konsumiert. 156Ansonsten wählen wir einen Eintrag aus der Transitionstabelle für den aktuellen Zustand, der entweder keine oder die gegebene Eingabe konsumiert.
157Im Ergebnis geben wir den nächsten Zustand, die Ausgabe aus der Transitionstabelle, und ob die Eingabe konsumiert wurde an. 157Im Ergebnis geben wir den nächsten Zustand, die Ausgabe aus der Transitionstabelle und ob die Eingabe konsumiert wurde, an.
158 158
159\begin{code} 159\begin{code}
160runFST' :: forall input output state. (Ord input, Ord output, Ord state) 160runFST' :: forall input output state. (Ord input, Ord output, Ord state)
@@ -199,9 +199,8 @@ akzeptierenden Endzustände liegt.
199\end{comment} 199\end{comment}
200\end{defn} 200\end{defn}
201 201
202Es ist gelegentlich nützlich nur die möglichen Ausgaben eines FST auf gegebener 202Es ist gelegentlich nützlich nur die möglichen Ausgaben eines FST auf gegebener Eingabe zu bestimmen.
203Eingabe zu bestimmen, wir führen eine Hilfsfunktion auf Basis von 203Wir führen eine Hilfsfunktion auf Basis von {\ttfamily runFST'} ein:
204{\ttfamily runFST'} ein:
205 204
206\begin{code} 205\begin{code}
207runFST :: forall input output state. (Ord input, Ord output, Ord state) => FST state input output -> Seq input -> [Seq output] 206runFST :: forall input output state. (Ord input, Ord output, Ord state) => FST state input output -> Seq input -> [Seq output]
@@ -216,14 +215,14 @@ runFST = fmap (map $ catMaybes . fmap (view _2) . view _2) . runFST'
216\end{comment} 215\end{comment}
217 216
218Wir können das Produkt zweier FSTs definieren. 217Wir können das Produkt zweier FSTs definieren.
219Intuitiv wollen wir beide FSTs gleichzeitig ausführen und dabei sicherstellen, dass Ein- und Ausgabe der FSTs übereinstimmen\footnote{Da wir $\epsilon$-Transitionen in FSTs erlauben müssen wir uns festlegen wann eine $\epsilon$-Transition übereinstimmt mit einer anderen Transition. Wir definieren, dass $\epsilon$ als Eingabe ausschließlich mit $\epsilon$ übereinstimmt.}. 218Intuitiv wollen wir beide FSTs gleichzeitig ausführen und dabei sicherstellen, dass Ein- und Ausgabe der FSTs übereinstimmen\footnote{Da wir $\epsilon$-Transitionen in FSTs erlauben, müssen wir uns festlegen, wann eine $\epsilon$-Transition übereinstimmt mit einer anderen Transition. Wir definieren, dass $\epsilon$ als Eingabe ausschließlich mit $\epsilon$ übereinstimmt.}.
220 219
221Hierfür berechnen wir das Graphen-Produkt der FSTs: 220Hierfür berechnen wir das Graphen-Produkt der FSTs:
222 221
223\begin{defn}[FST-Produkt] 222\begin{defn}[FST-Produkt]
224 Gegeben zwei finite state transducer $T = (\Sigma, \Delta, Q, I, F, E)$ und $T^\prime = (\Sigma^\prime, \Delta^\prime, Q^\prime, I^\prime, F^\prime, E^\prime)$ nennen wir $T^\times = (\Sigma^\times, \Delta^\times, Q^\times, I^\times, F^\times, E^\times)$ das Produkt $T^\times = T \times T^\prime$ von $T$ und $T^\prime$. 223 Gegeben zwei finite state transducer $T = (\Sigma, \Delta, Q, I, F, E)$ und $T^\prime = (\Sigma^\prime, \Delta^\prime, Q^\prime, I^\prime, F^\prime, E^\prime)$ nennen wir $T^\times = (\Sigma^\times, \Delta^\times, Q^\times, I^\times, F^\times, E^\times)$ das Produkt $T^\times = T \times T^\prime$ von $T$ und $T^\prime$.
225 224
226 $T^\times$ bestimmt sich als das Graphenprodukt der beiden, die FSTs unterliegenden, Graphen wobei wir die Zustandsübergänge als Kanten mit Gewichten aus dem Boolschen Semiring auffassen: 225 $T^\times$ wird bestimmt als das Graphenprodukt der beiden die FSTs unterliegenden Graphen wobei wir die Zustandsübergänge als Kanten mit Gewichten aus dem Boolschen Semiring auffassen:
227 226
228 \begin{align*} 227 \begin{align*}
229 \Sigma^\times & = \Sigma \cap \Sigma^\prime \\ 228 \Sigma^\times & = \Sigma \cap \Sigma^\prime \\
@@ -271,7 +270,7 @@ productFST fst1 fst2 = FST
271Es ist später erforderlich einen FST derart einzuschränken, dass er eine gegebene Ausgabe produziert. 270Es ist später erforderlich einen FST derart einzuschränken, dass er eine gegebene Ausgabe produziert.
272 271
273Hierzu nehmen wir das FST-Produkt mit einem FST, der, ungeachtet der Eingabe, immer die gewünschte Ausgabe produziert. 272Hierzu nehmen wir das FST-Produkt mit einem FST, der, ungeachtet der Eingabe, immer die gewünschte Ausgabe produziert.
274Da die Ausgaben der beiden FSTs übereinstimmen müssen produziert das Produkt mit einem derartigen FST (solange dessen Ausgabe in keinem Sinne von der Eingabe abhängt) die gewünschte Ausgabe. 273Da die Ausgaben der beiden FSTs übereinstimmen müssen, produziert das Produkt mit einem derartigen FST (solange dessen Ausgabe in keinem Sinne von der Eingabe abhängt) die gewünschte Ausgabe.
275 274
276Zur Konstruktion eines derartigen \emph{Wort-FST}s nehmen wir Indizes im Ausgabe-Wort (natürliche Zahlen) als Zustände. 275Zur Konstruktion eines derartigen \emph{Wort-FST}s nehmen wir Indizes im Ausgabe-Wort (natürliche Zahlen) als Zustände.
277Übergänge sind immer entweder der Form $n \rightarrow \text{succ}(n)$, konsumieren keine Eingabe ($\epsilon$) und produzieren als Ausgabe das Zeichen am Index $n$ im Ausgabe-Wort, oder der Form $n \overset{(\sigma, \epsilon)}{\rightarrow} n$, für jedes Eingabesymbol $\sigma$ (um die Unabhängigkeit von der Eingabe sicherzustellen). 276Übergänge sind immer entweder der Form $n \rightarrow \text{succ}(n)$, konsumieren keine Eingabe ($\epsilon$) und produzieren als Ausgabe das Zeichen am Index $n$ im Ausgabe-Wort, oder der Form $n \overset{(\sigma, \epsilon)}{\rightarrow} n$, für jedes Eingabesymbol $\sigma$ (um die Unabhängigkeit von der Eingabe sicherzustellen).
@@ -335,7 +334,7 @@ wordFST inps outs = FST
335 \end{figure} 334 \end{figure}
336\end{eg} 335\end{eg}
337 336
338Da \texttt{wordFST} zur Konstruktion eine komprehensive Menge aller Eingabesymbole benötigt verwenden wir im folgenden eine optimierte Variante des Produkts mit einem Wort-FST. 337Da \texttt{wordFST} zur Konstruktion eine komprehensive Menge aller Eingabesymbole benötigt, verwenden wir im Folgenden eine optimierte Variante des Produkts mit einem Wort-FST.
339 338
340\begin{code} 339\begin{code}
341restrictOutput :: forall state input output. (Ord state, Ord input, Ord output) => Seq output -> FST state input output -> FST (Natural, state) input output 340restrictOutput :: forall state input output. (Ord state, Ord input, Ord output) => Seq output -> FST state input output -> FST (Natural, state) input output
@@ -381,7 +380,7 @@ restrictOutput :: forall state input output. (Ord state, Ord input, Ord output)
381\begin{rem} 380\begin{rem}
382 Es ist bemerkenswert, dass in Beispiel \ref{eg:l80timesw100} die zirkuläre Struktur von $L_{80}$ durch das Produkt mit einem Wort verloren geht. 381 Es ist bemerkenswert, dass in Beispiel \ref{eg:l80timesw100} die zirkuläre Struktur von $L_{80}$ durch das Produkt mit einem Wort verloren geht.
383 382
384 I.\@A.\@ ist das Produkt eines beliebigen FST mit einem Wort-FST zwar nicht azyklisch, erbt jedoch die lineare Struktur des Wort-FST in dem Sinne, dass Fortschritt in Richtung der akzeptierenden Zustände nur möglich ist indem der $(i, \sigma, w_i, i + 1)$-Klasse von Transitionen des Wort-FSTs gefolgt wird. 383 I.\@A.\@ ist das Produkt eines beliebigen FST mit einem Wort-FST zwar nicht azyklisch, erbt jedoch die lineare Struktur des Wort-FST in dem Sinne, dass Fortschritt in Richtung der akzeptierenden Zustände nur möglich ist, indem der $(i, \sigma, w_i, i + 1)$-Klasse von Transitionen des Wort-FSTs gefolgt wird.
385\end{rem} 384\end{rem}
386 385
387\begin{comment} 386\begin{comment}
diff --git a/edit-lens/src/Control/FST/Lens.tex b/edit-lens/src/Control/FST/Lens.tex
index 31af317..7e9e9e3 100644
--- a/edit-lens/src/Control/FST/Lens.tex
+++ b/edit-lens/src/Control/FST/Lens.tex
@@ -1,4 +1,4 @@
1Es stellt sich die Frage, ob das obig beschriebene Verfahren zur Konstruktion einer edit-lens sich auch auf nondeterminische finite state transducers anwenden lässt. 1Es stellt sich die Frage, ob das obig beschriebene Verfahren zur Konstruktion einer edit-lens sich auch auf nicht determinische finite state transducers anwenden lässt.
2 2
3Eine natürlich Erweiterung von \texttt{DFSTAction} wäre: 3Eine natürlich Erweiterung von \texttt{DFSTAction} wäre:
4\begin{lstlisting}[language=Haskell] 4\begin{lstlisting}[language=Haskell]
@@ -9,7 +9,7 @@ data FSTAction state input output = FSTAction
9\end{lstlisting} 9\end{lstlisting}
10wobei die Liste aller möglichen output-Strings in der rechten Seite von \texttt{runFSTAction} in aller Regel unendlich ist. 10wobei die Liste aller möglichen output-Strings in der rechten Seite von \texttt{runFSTAction} in aller Regel unendlich ist.
11 11
12$\Rrightarrow$ würde sich notwendigerweise arbiträr auf einen der möglichen output-Strings festlegen aber ansonsten wohl identisch zum DFST-Fall implementieren lassen. 12$\Rrightarrow$ würde sich notwendigerweise arbiträr auf einen der möglichen output-Strings festlegen, aber ansonsten wohl identisch zum DFST-Fall implementieren lassen.
13 13
14$\Lleftarrow$ basiert fundamental darauf im Komplement anhand der erzeugten output-Strings zu suchen (um das betroffene Intervall im output-String auf das Komplement zu übertragen). 14$\Lleftarrow$ basiert fundamental darauf im Komplement anhand der erzeugten output-Strings zu suchen (um das betroffene Intervall im output-String auf das Komplement zu übertragen).
15Um sicher zu stellen, dass jene Suche immer terminiert, müsste die Aufzählung der i.A. unendlich vielen zulässigen output-Strings in \texttt{FSTAction} geschickt gewählt sein. 15Um sicher zu stellen, dass jene Suche immer terminiert, müsste die Aufzählung der i.A. unendlich vielen zulässigen output-Strings in \texttt{FSTAction} geschickt gewählt sein.
diff --git a/edit-lens/src/Control/Lens/Edit.lhs b/edit-lens/src/Control/Lens/Edit.lhs
index 5cf8662..84216bd 100644
--- a/edit-lens/src/Control/Lens/Edit.lhs
+++ b/edit-lens/src/Control/Lens/Edit.lhs
@@ -12,7 +12,7 @@ import Control.Edit
12\end{comment} 12\end{comment}
13 13
14\begin{defn}[Zustandsbehaftete Monoidhomomorphismen] 14\begin{defn}[Zustandsbehaftete Monoidhomomorphismen]
15Gegeben eine Menge $C$ von \emph{Komplementen} und zwei Monoiden $M$ und $N$ nennen wir eine partielle Funktion $\psi \colon C \times M \to C \times N$ einen \emph{zustandsbehafteten Monoidhomomorphismus} wenn sie den folgenden Ansprüchen genügt: 15Gegeben eine Menge $C$ von \emph{Komplementen} und zwei Monoiden $M$ und $N$ nennen wir eine partielle Funktion $\psi \colon C \times M \to C \times N$ einen \emph{zustandsbehafteten Monoidhomomorphismus}, wenn sie den folgenden Ansprüchen genügt:
16 16
17\begin{itemize} 17\begin{itemize}
18 \item $\forall c \in C \colon \psi(1_M, c) = (1_N, c)$ 18 \item $\forall c \in C \colon \psi(1_M, c) = (1_N, c)$
@@ -28,7 +28,7 @@ type StateMonoidHom s m n = (s, m) -> (s, n)
28\end{defn} 28\end{defn}
29 29
30\begin{defn}[edit-lenses] 30\begin{defn}[edit-lenses]
31Für Moduln $M$ und $N$ besteht eine \emph{symmetrische edit-lens} zwischen $M$ und $N$ aus zwei zustandsbehafteten Monoidhomomorphismen $\Rrightarrow \colon C \times \partial M \to C \times \partial N$ und $\Lleftarrow \colon C \times \partial N \to C \times \partial M$, mit kompatiblem Komplement $C$, einem ausgezeichneten Element $\ground_C \in C$ und einer \emph{Konsistenzrelation} $K \subset \Dom M \times C \times \Dom N$ sodass gilt: 31Für Moduln $M$ und $N$ besteht eine \emph{symmetrische edit-lens} zwischen $M$ und $N$ aus zwei zustandsbehafteten Monoidhomomorphismen $\Rrightarrow \colon C \times \partial M \to C \times \partial N$ und $\Lleftarrow \colon C \times \partial N \to C \times \partial M$, mit kompatiblem Komplement $C$, einem ausgezeichneten Element $\ground_C \in C$ und einer \emph{Konsistenzrelation} $K \subset \Dom M \times C \times \Dom N$, sodass gilt:
32 32
33\begin{itemize} 33\begin{itemize}
34 \item $(\init_M, \ground_C, \init_N) \in K$ 34 \item $(\init_M, \ground_C, \init_N) \in K$
@@ -43,7 +43,7 @@ Für Moduln $M$ und $N$ besteht eine \emph{symmetrische edit-lens} zwischen $M$
43 43
44Wir schreiben auch nur \emph{edit-lens} für den symmetrischen Fall\footnote{Für den asymmetrischen Fall siehe \cite{johnson2016unifying}}. 44Wir schreiben auch nur \emph{edit-lens} für den symmetrischen Fall\footnote{Für den asymmetrischen Fall siehe \cite{johnson2016unifying}}.
45 45
46In Haskell erwähnen wir die Konsistenzrelation nicht in der Erwartung, dass $\Rrightarrow$ und $\Lleftarrow$ nur auf konsistente Zustände angewandt werden (und somit auch entweder einen konsistenten Zustand erzeugen oder nicht definiert sind): 46In Haskell erwähnen wir die Konsistenzrelation nicht, in der Erwartung, dass $\Rrightarrow$ und $\Lleftarrow$ nur auf konsistente Zustände angewandt werden (und somit auch entweder einen konsistenten Zustand erzeugen oder nicht definiert sind):
47 47
48\begin{code} 48\begin{code}
49data EditLens c m n where 49data EditLens c m n where
@@ -67,12 +67,12 @@ instance (Module m, Module n) => HasEditLens (EditLens c m n) m n where
67\end{code} 67\end{code}
68\end{defn} 68\end{defn}
69 69
70\subsection{Kompatibilität mit bestehenden lens frameworks} 70\subsection{Kompatibilität mit bestehenden lens Frameworks}
71 71
72Das einschlägige bestehende lens framework \cite{lens} konstruiert seine Linsen à la \citeauthor{laarhoven} wie folgt: 72Das einschlägige bestehende lens framework \cite{lens} konstruiert seine Linsen à la \citeauthor{laarhoven} wie folgt:
73 73
74\begin{defn}[lenses à la Laarhoven] 74\begin{defn}[lenses à la Laarhoven]
75Für Typen $n$ und $m$ ist eine \emph{lens} $\ell$ von $n$ in $m$ eine Abbildung\footnote{Gdw. die betrachtete Linse einen Isomorphismus kodiert wird auch über den verwendeten Profunktor anstatt $\to$ quantifiziert} folgender Struktur: 75Für Typen $n$ und $m$ ist eine \emph{lens} $\ell$ von $n$ in $m$ eine Abbildung\footnote{Gdw. die betrachtete Linse einen Isomorphismus kodiert, wird auch über den verwendeten Profunktor anstatt $\to$ quantifiziert} folgender Struktur:
76 76
77$$ \forall f \, \text{Funktor} \colon \left ( \ell \colon \left ( m \to f(m) \right ) \to \left ( n \to f(n) \right ) \right )$$ 77$$ \forall f \, \text{Funktor} \colon \left ( \ell \colon \left ( m \to f(m) \right ) \to \left ( n \to f(n) \right ) \right )$$
78 78
@@ -80,7 +80,7 @@ Durch geschickte Wahl des Funktors\footnote{\texttt{Const m} bzw. \texttt{Identi
80\end{defn} 80\end{defn}
81 81
82Es liegt nun nahe $\nearrow \colon (m \to m) \to (n \to n)$ mit $\Rrightarrow \colon \partial m \to \partial n$ zu identifizieren. 82Es liegt nun nahe $\nearrow \colon (m \to m) \to (n \to n)$ mit $\Rrightarrow \colon \partial m \to \partial n$ zu identifizieren.
83Und in der Tat, eine Funktion $\text{map} \colon (o \to o) \to \partial o$ für $o \in \{ m, n \}$ würde van Laarhoven-lenses in edit-lenses einbetten. 83In der Tat, eine Funktion $\text{map} \colon (o \to o) \to \partial o$ für $o \in \{ m, n \}$ würde van Laarhoven-lenses in edit-lenses einbetten.
84Die charakteristische Eigenschaft der Betrachtung als edit-lens, nämlich die algebraische Struktur von $\partial o$, würde hierbei jedoch notwendigerweise verloren gehen. 84Die charakteristische Eigenschaft der Betrachtung als edit-lens, nämlich die algebraische Struktur von $\partial o$, würde hierbei jedoch notwendigerweise verloren gehen.
85 85
86Wegen diesem Argument haben wir entschieden keine Komponierbarkeit (durch $\text{id} \colon a \to a$ und $\circ \colon (b \to c) \to (a \to b) \to (a \to c)$, wie in \cite{lens}) von edit-lenses mit van Laarhoven-lenses anzustreben. 86Wegen diesem Argument haben wir entschieden keine Komponierbarkeit (durch $\text{id} \colon a \to a$ und $\circ \colon (b \to c) \to (a \to b) \to (a \to c)$, wie in \cite{lens}) von edit-lenses mit van Laarhoven-lenses anzustreben.
diff --git a/implementation.tex b/implementation.tex
index 3a68e04..26ee2c7 100644
--- a/implementation.tex
+++ b/implementation.tex
@@ -1,7 +1,8 @@
1Im Rahmen dieser Arbeit haben wir die in den vorherigen Abschnitten beschriebenen Verfahren und Konstruktionen in Haskell implementiert. 1Im Rahmen dieser Arbeit haben wir die in den vorherigen Abschnitten beschriebenen Verfahren und Konstruktionen in Haskell implementiert.
2 2
3Es hat sich hierbei die oben beschriebene Konstruktion von $\Lleftarrow$ als Komposition algebraischer Transformationen und generischer, wohlbekannter, Algorithmen (Breitensuche auf einem beliebigem Graph) ergeben. 3Es hat sich hierbei die oben beschriebene Konstruktion von $\Lleftarrow$ als Komposition algebraischer Transformationen und generischer, wohlbekannter Algorithmen (Breitensuche auf einem beliebigem Graph) ergeben.
4Unsere vorherigen Versuche $\Lleftarrow$ in einem imperativeren Stil zu implementieren blieben Erfolglos; größte Schwierigkeiten hat bereitet die diversen Randbedingungen (Anfangs- und Endzustand, zu produzierende Ausgabe) innerhalb des Algorithmus zur Breitensuche zu wahren. 4Unsere vorherigen Versuche, $\Lleftarrow$ in einem imperativeren Stil zu implementieren, blieben erfolglos;
5Größte Schwierigkeiten hat bereitet, die diversen Randbedingungen (Anfangs- und Endzustand, zu produzierende Ausgabe) innerhalb des Algorithmus zur Breitensuche zu wahren.
5 6
6\subsubsection{Struktur der Implementierung} 7\subsubsection{Struktur der Implementierung}
7 8
@@ -12,7 +13,7 @@ Die Module innerhalb von \texttt{edit-lens} entsprechen im wesentlichen den Sekt
12\item[Control.Edit] 13\item[Control.Edit]
13 Definition von Moduln 14 Definition von Moduln
14\item[Control.Lens.Edit] 15\item[Control.Lens.Edit]
15 Definition von zustandsbehafteten Monoidhomomorphismen und, damit, edit-lenses sowohl als Typklasse als auch als existentiell quantifizierter Datentyp 16 Definition von zustandsbehafteten Monoidhomomorphismen und edit-lenses sowohl als Typklasse als auch als existentiell quantifizierter Datentyp
16\item[Control.Edit.String] 17\item[Control.Edit.String]
17 Eine simple edit-Sprache auf Strings 18 Eine simple edit-Sprache auf Strings
18\item[Control.Edit.String.Affected] 19\item[Control.Edit.String.Affected]
@@ -46,11 +47,11 @@ Die Module innerhalb von \texttt{edit-lens} entsprechen im wesentlichen den Sekt
46\begin{figure}[h] 47\begin{figure}[h]
47 \begin{center} 48 \begin{center}
48 \includegraphics{screenshot} 49 \includegraphics{screenshot}
49 \caption{Der interaktive Editor (im Modus \texttt{json-newl}) nach import einer kleinen JSON-Datei} 50 \caption{Der interaktive Editor (im Modus \texttt{json-newl}) nach Import einer kleinen JSON-Datei}
50 \end{center} 51 \end{center}
51\end{figure} 52\end{figure}
52 53
53Der interaktive editor kann von der Befehlseingabe gestartet werden wie folgt: 54Der interaktive Editor kann von der Befehlseingabe gestartet werden wie folgt:
54\begin{lstlisting}[language=bash] 55\begin{lstlisting}[language=bash]
55 $ stack build 56 $ stack build
56 $ stack exec interact <dfst> 57 $ stack exec interact <dfst>
@@ -88,4 +89,10 @@ Nach Auswahl wird der Inhalt der Datei am Cursor eingefügt.
88 89
89Bei der Implementierung wurde nicht auf Performance geachtet. 90Bei der Implementierung wurde nicht auf Performance geachtet.
90Es ist daher die Laufzeit des interaktiven Editors bereits bei kleinen Eingaben inakzeptabel lang (mehrere Sekunden für ein Kilobyte JSON). 91Es ist daher die Laufzeit des interaktiven Editors bereits bei kleinen Eingaben inakzeptabel lang (mehrere Sekunden für ein Kilobyte JSON).
91Es lässt sich allerdings der Speedup beim Propagieren kleiner edits gut beobachten; die Propagation eines ein-Buchstaben-edits nach rechts ist ca. einen Faktor 200 schneller als das komplett neue Parsen einer Datei (ca. ein Kilobyte JSON). 92Es lässt sich allerdings der Speedup beim Propagieren kleiner edits gut beobachten; die Propagation eines ein-Buchstaben-edits nach rechts ist um ca. einen Faktor 200 schneller als das komplett neue Parsen einer Datei (ca. ein Kilobyte JSON).
93
94Eine konkrete Quelle der Performance-Einbußen lies sich nicht bestimmen.
95Es wäre möglich einschlägige Profiling-Werkzeuge\footnote{\url{https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/profiling.html}}\textsuperscript{, }\footnote{\url{https://jaspervdj.be/posts/2014-02-25-profiteur-ghc-prof-visualiser.html}} anzusetzen, dies ist jedoch, der eher theoretischen Ausrichtung der Arbeit folgend, nicht geschehen.
96
97Simplere Methoden als Profiling und eingehende Analyse der entstehenden Reports lassen sich, wegen Haskells strikter Behandlung von Seiteneffekten und dem Ziel den unterliegenden Algorithmus Seiteneffekt-frei zu halten, nicht anwenden.
98Es wurde aber zumindest in das interaktive Demonstrationsprogramm Funktionalität eingebaut, um, im Seiteneffekt-behafteten Teil, Laufzeitmessungen anzufertigen (\texttt{ctrl + p}).
diff --git a/intro.tex b/intro.tex
index 43d909d..56d1ef3 100644
--- a/intro.tex
+++ b/intro.tex
@@ -1,18 +1,18 @@
1\subsubsection{Motivation} 1\subsection{Motivation}
2 2
3Unter einem inkrementellen Parser \cite{ghezzi1979incremental} verstehen wir ein Programm, das, nach einem initialen Parsevorgang, gegeben eine Spezifikation einer Änderung der textuellen Eingabe i.A. schneller ein neues Ergebnis erzeugt als es ohne zusätzlichen Kontext möglich wäre (gewöhnlicherweise in logarithmischer Zeit in der Länge der Eingabe). 3Unter einem inkrementellen Parser \cite{ghezzi1979incremental} verstehen wir ein Programm, das, nach einem initialen Parsevorgang, gegeben eine Spezifikation einer Änderung der textuellen Eingabe i.A. schneller, gewöhnlicherweise in logarithmischer Zeit in der Länge der Eingabe, ein neues Ergebnis erzeugt als es ohne zusätzlichen Kontext möglich wäre.
4 4
5Es ist nun prinzipiell wünschenswert die algebraische Struktur derartiger Klassen von Programmen zu untersuchen, mit dem Ziel neue Parser mit generischen Mitteln aus bereits Bekannten konstruieren zu können. 5Es ist nun prinzipiell wünschenswert die algebraische Struktur derartiger Klassen von Programmen zu untersuchen mit dem Ziel, neue Parser mit generischen Mitteln aus bereits Bekannten konstruieren zu können.
6 6
7In dieser Arbeit versuchen wir, anhand von finite state transducern als Spezialfall, inkrementelle Parser und die unterliegenden edits mit neuerer algebraischer Struktur, edit-lenses \cite{hofmann2012edit}, zu versehen um Komponierbarkeit zu vereinfachen. 7In dieser Arbeit versuchen wir, anhand von finite state transducern als Spezialfall, inkrementelle Parser und die unterliegenden edits mit neuerer algebraischer Struktur, edit-lenses \cite{hofmann2012edit}, zu versehen um Komponierbarkeit zu vereinfachen.
8Vor allem versuchen wir somit zu demonstrieren, dass sich bekannte Klassen von Programmen, unter Erhalt ihrer vollen Struktur, als edit-lenses auffassen lassen, auch wenn die Darstellung als konventionelle funktionale Linse unzufriedenstellend wäre. 8Vor Allem versuchen wir somit zu demonstrieren, dass sich bekannte Klassen von Programmen unter Erhalt ihrer vollen Struktur als edit-lenses auffassen lassen, auch dann, wenn die Darstellung als konventionelle funktionale Linse unzufriedenstellend wäre.
9 9
10\subsubsection{Inhalt} 10\subsection{Inhalt}
11 11
12Wir stellen in Abschnitt \ref{edit-lenses} die Definitionen und Konstruktion von edit-lenses aus \cite{hofmann2012edit} vor und diskutieren kurz die Kompatibilität unserer Implementierung und edit-lenses im Allgemeinen mit etablierten frameworks für funktionale Linsen in Haskell. 12Wir stellen in Abschnitt \ref{edit-lenses} die Definitionen und Konstruktion von edit-lenses aus \cite{hofmann2012edit} vor und diskutieren kurz die Kompatibilität unserer Implementierung und edit-lenses im Allgemeinen mit etablierten Frameworks für funktionale Linsen in Haskell.
13In Abschnitt \ref{finite-state-transducers} präsentieren wir eine etablierte Version von finite state transducern, für die folgenden Teile relevante Konstruktionen darauf und einige assoziierte Beispiele. 13In Abschnitt \ref{finite-state-transducers} präsentieren wir eine etablierte Version von finite state transducern, für die folgenden Teile relevante Konstruktionen darauf und einige assoziierte Beispiele.
14Abschnitt \ref{edit-lenses-fuxfcr-deterministic-finite-state-transducers} beschreibt eine Methode beliebige deterministische finite state transducers als edit-lenses aufzufassen und stellt somit eine non-triviale Anwendung der Methoden und Konzepte aus \cite{hofmann2012edit} dar. 14Abschnitt \ref{edit-lenses-fuxfcr-deterministic-finite-state-transducers} beschreibt eine Methode, beliebige deterministische finite state transducers als edit-lenses aufzufassen und stellt somit eine nicht triviale Anwendung der Methoden und Konzepte aus \cite{hofmann2012edit} dar.
15In Abschnitt \ref{ausblick-edit-lenses-fuxfcr-non-determinische-finite-state-transducers} stellen wir kurz einen Ansatz dar unsere Konstruktion aus \ref{edit-lenses-fuxfcr-deterministic-finite-state-transducers} auch auf non-deterministische finite state transducer zu erweitern. 15In Abschnitt \ref{ausblick-edit-lenses-fuxfcr-non-determinische-finite-state-transducers} stellen wir kurz einen Ansatz vor, unsere Konstruktion aus \ref{edit-lenses-fuxfcr-deterministic-finite-state-transducers} auch auf nicht-deterministische finite state transducers zu erweitern.
16In Abschnitt \ref{implementierung} kommentieren wir den Implementierungsprozess der Arbeit und die Schlüsse, die wir aus der Implementierung als solcher ziehen konnten. 16In Abschnitt \ref{implementierung} kommentieren wir den Implementierungsprozess der Arbeit und die Schlüsse, die wir aus der Implementierung als solcher ziehen konnten.
17Abschnitt \ref{ausblick-anwendbarkeit-der-implementierung-auf-andere-parser} beschreibt kurz wie sich das dargestellte Verfahren auf andere Sorten von Parsern anwenden ließe. 17Abschnitt \ref{ausblick-anwendbarkeit-der-implementierung-auf-andere-parser} beschreibt kurz wie sich das dargestellte Verfahren auf andere Sorten von Parsern anwenden ließe.
18 18
@@ -43,22 +43,22 @@ Bidirektionale, inkrementelle, und kombinierbare Parser und ihre Analyse sind ei
43 43
44\begin{description} % TODO: more 44\begin{description} % TODO: more
45 \item[1979] \cite{ghezzi1979incremental} präsentieren, in einer der ersten Arbeiten zu dem Thema, einen Ansatz zum inkrementellen Parsen von deterministischen und kontextfreien Sprachen basierend auf dem $LR$-Ansatz. 45 \item[1979] \cite{ghezzi1979incremental} präsentieren, in einer der ersten Arbeiten zu dem Thema, einen Ansatz zum inkrementellen Parsen von deterministischen und kontextfreien Sprachen basierend auf dem $LR$-Ansatz.
46 \item[1992] \cite{hedin1992incremental} präsentieren einen Formalismus zur inkrementellen \emph{semantischen} Analyse (d.h. das Versehen des Syntax-Baums eines Programms mit Attributen wie z.B. Typen) basierend auf (modifizierten) Attribut-Grammatiken. 46 \item[1992] \cite{hedin1992incremental} präsentieren einen Formalismus zur inkrementellen \emph{semantischen} Analyse\footnote{Das Versehen des Syntax-Baums eines Programms mit Attributen wie z.B. Typen} basierend auf (modifizierten) Attribut-Grammatiken.
47 \item[1997] \cite{wagner1997general} stellen einen Algorithmus zur inkrementellen lexikalischen Analyse (tokenizing) der auf den selben Spezifikationen arbeiten kann wie die UNIX-Tools \texttt{lex} und \texttt{flex}. 47 \item[1997] \cite{wagner1997general} stellen einen Algorithmus zur inkrementellen lexikalischen Analyse (tokenizing) der auf den selben Spezifikationen arbeiten kann wie die UNIX-Tools \texttt{lex} und \texttt{flex}.
48 \item[1998] \cite{wagner1998efficient} stellen neue, Laufzeit- und Speicher-optimale, Methoden zur Konstruktion inkrementeller Parser auf Basis beliebiger $LR(k)$-Grammatiken vor. 48 \item[1998] \cite{wagner1998efficient} stellen neue Laufzeit- und Speicher-optimale Methoden zur Konstruktion inkrementeller Parser auf Basis beliebiger $LR(k)$-Grammatiken vor.
49 \item[2001] \cite{swierstra2001combinator} demonstriert den Nutzen Kombinator-basierter Parser-Konstruktion in der Praxis 49 \item[2001] \cite{swierstra2001combinator} demonstriert den Nutzen Kombinator-basierter Parser-Konstruktion in der Praxis.
50 \item[2004] \cite{hu2004programmable} spezifizieren eine algebraisch strukturierte Sprache für bidirektionale Baum-Transformationen unter einer programmierbaren Konsistenzrelation mit Blick auf direkte Anwendung im Editieren von bestehenden Baum-Dokumenten 50 \item[2004] \cite{hu2004programmable} spezifizieren eine algebraisch strukturierte Sprache für bidirektionale Baum-Transformationen unter einer programmierbaren Konsistenzrelation mit Blick auf direkte Anwendung im Editieren von bestehenden Baum-Dokumenten.
51 \item[2007] \cite{foster2007combinators} präsentieren sowohl eine Sprache bidirektionaler Baum-Transformationen als konventionelle funktionale Linsen im Speziellen, als auch mathematische Resultate für funktionale Linsen und Sammlungen davon im Allgemeinen. 51 \item[2007] \cite{foster2007combinators} präsentieren sowohl eine Sprache bidirektionaler Baum-Transformationen als konventionelle funktionale Linsen im Speziellen, als auch mathematische Resultate für funktionale Linsen und Sammlungen dieser im Allgemeinen.
52 Auch enthalten ist eine nützliche Klassifikation und ein historischer Überblick diverser bidirektionalen Programmiertechniken. 52 Auch enthalten ist eine nützliche Klassifikation und ein historischer Überblick diverser bidirektionaler Programmiertechniken.
53 \item[2008] Analog zur Sprache bidirektionaler Baum-Transformation aus \cite{foster2007combinators} stellen \cite{bohannon2008boomerang} eine Sprache für semi-strukturierten Text (als Serie von vertauschbaren Schlüssel-Wert-Assoziationen) vor 53 \item[2008] Analog zur Sprache bidirektionaler Baum-Transformation aus \cite{foster2007combinators}, stellen \cite{bohannon2008boomerang} eine Sprache für semi-strukturierten Text als Serie von vertauschbaren Schlüssel-Wert-Assoziationen vor.
54 \item[2009] \cite{bernardy2009lazy} implementieren, im Rahmen der Arbeit am Text-Editor Yi, eine Kombinator-basierte Programmbibliothek zum inkrementellen Parsen basierend auf lazy evaluation und aggressivem Caching in Haskell 54 \item[2009] \cite{bernardy2009lazy} implementieren, im Rahmen der Arbeit am Text-Editor Yi, eine Kombinator-basierte Programmbibliothek zum inkrementellen Parsen basierend auf lazy evaluation und aggressivem Caching in Haskell.
55 \item[2011] \cite{hofmann2011symmetric} definieren symmetrische \emph{set-based}-lenses (funktionale Linsen im konventionellen Sinn), d.h. ohne strukturierte edits. 55 \item[2011] \cite{hofmann2011symmetric} definieren symmetrische \emph{set-based}-lenses (funktionale Linsen im konventionellen Sinn), d.h. ohne strukturierte edits.
56 Es wird auch die umfangreiche algebraische Struktur symmetrischer Linsen besprochen. 56 Es wird auch die umfangreiche algebraische Struktur symmetrischer Linsen besprochen.
57 Vieles hiervon vererbt sich direkt auf edit-lenses als Spezialfall symmetrischer Linsen. 57 Vieles hiervon lassen sich direkt auf edit-lenses als Spezialfall symmetrischer Linsen vererben.
58 \item[2012] \cite{hofmann2012edit} definieren edit-lenses. 58 \item[2012] \cite{hofmann2012edit} definieren edit-lenses.
59 In Abgrenzung zu bestehenden Formalismen symmetrischer funktionaler Linsen arbeiten edit-lenses ausschließlich auf algebraisch strukturierten edit-Sprachen, was sie besonders attraktiv macht. 59 In Abgrenzung zu bestehenden Formalismen symmetrischer funktionaler Linsen arbeiten edit-lenses ausschließlich auf algebraisch strukturierten edit-Sprachen, was sie besonders attraktiv macht.
60 \item[2013] \cite{hofmann2013edit} stellen eine generelle edit-Sprache (zur Verwendung mit und basierend auf edit-lenses) für eine weite Klasse von container-Datentypen (Listen, Bäume, Graphen, ...) vor 60 \item[2013] \cite{hofmann2013edit} stellen eine generelle edit-Sprache (zur Verwendung mit und basierend auf edit-lenses) für eine weite Klasse von container-Datentypen (Listen, Bäume, Graphen, ...) vor
61 \item[2014] \cite{zaytsev2014parsing} geben einen nützlichen Überblick über die, historisch inkonsistente, Terminologie und Konzepte im Zusammenhang mit Parsing 61 \item[2014] \cite{zaytsev2014parsing} geben einen nützlichen Überblick über die historisch inkonsistente Terminologie und Konzepte im Zusammenhang mit Parsing.
62 \item[2016] \cite{johnson2016unifying} betrachten Zusammenhänge diverser Klassen funktionaler Linsen (inkl. edit-lenses) und geben dabei einen umfangreichen Überblick über die bestehende Forschung. 62 \item[2016] \cite{johnson2016unifying} betrachten Zusammenhänge diverser Klassen funktionaler Linsen (inkl. edit-lenses) und geben dabei einen umfangreichen Überblick über die bestehende Forschung.
63 Ein relevantes Resultat ist hierbei ein Begriff von asymmetrischen edit-lenses kompatibel mit dem symmetrischen Fall. 63 Ein relevantes Resultat ist hierbei ein Begriff von asymmetrischen edit-lenses kompatibel mit dem symmetrischen Fall.
64\end{description} 64\end{description}
@@ -68,16 +68,19 @@ Bidirektionale, inkrementelle, und kombinierbare Parser und ihre Analyse sind ei
68Obwohl wir detailliertere Definitionen der folgenden Konzepte im Laufe der Arbeit geben, ist es dennoch nützlich vorab die Bedeutung der verwendeten Begriffe kurz anzuschneiden: 68Obwohl wir detailliertere Definitionen der folgenden Konzepte im Laufe der Arbeit geben, ist es dennoch nützlich vorab die Bedeutung der verwendeten Begriffe kurz anzuschneiden:
69 69
70\begin{description} 70\begin{description}
71 \item[FST] \emph{Finite-State-Transducer} sind endliche Automaten, die bei jedem Zustandsübergang die Möglichkeit haben ein Zeichen an eine sich akkumulierende Ausgabe anzuhängen 71 \item[FST] \emph{Finite-State-Transducer} sind endliche Automaten, die bei jedem Zustandsübergang die Möglichkeit haben ein Zeichen an eine sich akkumulierende Ausgabe anzuhängen.
72 \item[DFST] \emph{Deterministic Finite-State-Transducer} sind FSTs bei denen für jeden Zustand jedes gelesene Zeichen maximal einen Zustandsübergang zulässt 72 \item[DFST] \emph{Deterministic Finite-State-Transducer} sind FSTs bei denen für jeden Zustand jedes gelesene Zeichen maximal einen Zustandsübergang zulässt.
73 \item[Monoid] \emph{Monoiden} sind algebraisch zwischen Halbgruppen und Gruppen angesiedelt. 73 \item[Monoid] \emph{Monoiden} sind algebraisch zwischen Halbgruppen und Gruppen angesiedelt.
74 Wir sagen eine Menge hat Monoidstruktur bzgl. einer zweistelligen Verknüpfung auf jener Menge, wenn sie ein neutrales Element enthält und die Verknüpfung assoziativ ist. 74 Wir sagen eine Menge hat Monoidstruktur bzgl. einer zweistelligen Verknüpfung auf jener Menge, wenn sie ein neutrales Element enthält und die Verknüpfung assoziativ ist.
75 \item[Moduln & edits] \emph{Moduln} verknüpfen eine Trägermenge mit einer Menge von \emph{edits} (mit monoidaler Struktur) auf jener Menge. 75 \item[Moduln & edits] \emph{Moduln} verknüpfen eine Trägermenge mit einer Menge von \emph{edits} (mit monoidaler Struktur) auf jener Menge.
76 Edits beschreiben jeweils eine partielle Abbildung innerhalb der Trägermenge. 76 Edits beschreiben jeweils eine partielle Abbildung innerhalb der Trägermenge.
77 \item[Funktionale Linsen] Eine \emph{Funktionale Linse} von $s$ in $a$ in der üblichen Definition (\emph{set-based}) ist ein Paar von Abbildungen $\searrow \colon s \to a$ und $\nearrow \colon (a \to a) \to (s \to s)$ mit umfangreicher algebraischer Struktur, die die Komposition komplexer Linsen aus Einfacheren ermöglicht. 77 \item[Funktionale Linsen] Eine \emph{Funktionale Linse} von $s$ in $a$ in der üblichen Definition (\emph{set-based}) ist ein Paar von Abbildungen $\searrow \colon s \to a$ und $\nearrow \colon (a \to a) \to (s \to s)$ mit umfangreicher algebraischer Struktur, die die Komposition komplexer Linsen aus Einfacheren ermöglicht.
78 Wir finden es hilfreich von einer Projektion ($\searrow$) und einem \emph{edit-Propagator} ($\nearrow$) zu sprechen. 78 Wir finden es hilfreich von einer Projektion ($\searrow$) und einem \emph{edit-Propagator} ($\nearrow$) zu sprechen.
79 \item[Van-Laarhoven Linsen] In \cite{laarhoven} wurde eine Darstellung als eine (über einen Funktor parametrisierte) Funktion dargelegt, die unter anderem auch die soeben beschriebenen funktionalen Linsen einbetten kann 79 \item[Van-Laarhoven Linsen] In \cite{laarhoven} wurde eine Darstellung als eine über einen Funktor parametrisierte Funktion dargelegt, die unter anderem auch die soeben beschriebenen funktionalen Linsen einbetten kann.
80 \item[edit-lenses] \emph{edit-lenses} verknüpfen zwei Moduln-Trägermengen indem sie edits des einen Modul in die des Anderen übersetzen. 80 \item[edit-lenses] \emph{edit-lenses} verknüpfen zwei Moduln-Trägermengen indem sie edits des einen Moduls in die des Anderen übersetzen.
81 Hierbei wird ein, mit den jeweiligen Elementen der Trägermengen konsistenter, unterliegender Zustand, das \emph{Komplement} der edit-lens, gewahrt. 81 Hierbei wird ein, mit den jeweiligen Elementen der Trägermengen konsistenter, unterliegender Zustand, das \emph{Komplement} der edit-lens, gewahrt.
82 Intuitiv speichert das Komplement genau jene Information, die nicht in beiden Darstellungen vorkommt. 82 Intuitiv speichert das Komplement genau jene Information, die nicht in beiden Darstellungen vorkommt.
83 \item[Parser] \emph{Parser} sind Programme, die einen Text (als Liste von Symbolen $\Sigma^\star$ aus einem Alphabet $\Sigma$) Seiteneffekt-frei verarbeiten $\Sigma^\star \to a$.
84 \item[Inkrementelle Parser] \emph{Inkrementelle Parser} sind Programme, die sowohl in der Lage sind als Parser zu agieren $\Sigma^\star \to a$, als auch, nach einem vorhergehenden konventionellen Parsevorgang, eine Änderung am Eingabetext in eine Änderung am Ergebnis zu übersetzen $\partial \left ( \Sigma^\star \right ) \to \partial a$.
85 Hierbei muss die Laufzeitcharakteristik i.A. besser sein als die Änderung auf die alte Eingabe anzuwenden und schlichtweg neu zu Parsen.
83\end{description} 86\end{description}
diff --git a/org.tex b/org.tex
index d0c6ed4..38f26d4 100644
--- a/org.tex
+++ b/org.tex
@@ -1,16 +1,10 @@
1\pagebreak 1\section*{Erklärung der Eigenständigkeit}
2
3Diese Arbeit ist entstanden unter Betreuung durch Stephan Barth.
4
5Verantwortliche Hochschullehrer sind \textdagger Prof. Martin Hoffmann PhD und Dr. Steffen Jost.
6
7\vfill
8 2
9\noindent Ich erkläre hiermit, dass ich die vorliegende Arbeit 3\noindent Ich erkläre hiermit, dass ich die vorliegende Arbeit
10selbstständig angefertigt, alle Zitate als solche kenntlich gemacht 4selbstständig angefertigt, alle Zitate als solche kenntlich gemacht,
11sowie alle benutzten Quellen und Hilfsmittel angegeben habe. 5sowie alle benutzten Quellen und Hilfsmittel angegeben habe.
12 6
13\bigskip 7\vspace{1cm}
14 8
15\makebox[.5\linewidth][r]{}{\xleaders\hbox to .2em{\d{}}\hfill\d{}}\smallskip \\ 9\makebox[.5\linewidth][r]{}{\xleaders\hbox to .2em{\d{}}\hfill\d{}}\smallskip \\
16\hspace*{.5\linewidth}Gregor Kleen \\ 10\hspace*{.5\linewidth}Gregor Kleen \\
@@ -19,5 +13,3 @@ sowie alle benutzten Quellen und Hilfsmittel angegeben habe.
19%% \bigskip\noindent München, \today 13%% \bigskip\noindent München, \today
20 14
21%% \vspace{4ex}\noindent\makebox[7cm]{\dotfill} 15%% \vspace{4ex}\noindent\makebox[7cm]{\dotfill}
22
23\pagebreak
diff --git a/sigillum.pdf b/sigillum.pdf
new file mode 100644
index 0000000..5db4e00
--- /dev/null
+++ b/sigillum.pdf
Binary files differ
diff --git a/sigillum.pdf_tex b/sigillum.pdf_tex
new file mode 100644
index 0000000..fb8a15d
--- /dev/null
+++ b/sigillum.pdf_tex
@@ -0,0 +1,58 @@
1%% Creator: Inkscape inkscape 0.92.4, www.inkscape.org
2%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010
3%% Accompanies image file 'sigillum.pdf' (pdf, eps, ps)
4%%
5%% To include the image in your LaTeX document, write
6%% \input{<filename>.pdf_tex}
7%% instead of
8%% \includegraphics{<filename>.pdf}
9%% To scale the image, write
10%% \def\svgwidth{<desired width>}
11%% \input{<filename>.pdf_tex}
12%% instead of
13%% \includegraphics[width=<desired width>]{<filename>.pdf}
14%%
15%% Images with a different path to the parent latex file can
16%% be accessed with the `import' package (which may need to be
17%% installed) using
18%% \usepackage{import}
19%% in the preamble, and then including the image with
20%% \import{<path to file>}{<filename>.pdf_tex}
21%% Alternatively, one can specify
22%% \graphicspath{{<path to file>/}}
23%%
24%% For more information, please see info/svg-inkscape on CTAN:
25%% http://tug.ctan.org/tex-archive/info/svg-inkscape
26%%
27\begingroup%
28 \makeatletter%
29 \providecommand\color[2][]{%
30 \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}%
31 \renewcommand\color[2][]{}%
32 }%
33 \providecommand\transparent[1]{%
34 \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}%
35 \renewcommand\transparent[1]{}%
36 }%
37 \providecommand\rotatebox[2]{#2}%
38 \newcommand*\fsize{\dimexpr\f@size pt\relax}%
39 \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}%
40 \ifx\svgwidth\undefined%
41 \setlength{\unitlength}{425.1663821bp}%
42 \ifx\svgscale\undefined%
43 \relax%
44 \else%
45 \setlength{\unitlength}{\unitlength * \real{\svgscale}}%
46 \fi%
47 \else%
48 \setlength{\unitlength}{\svgwidth}%
49 \fi%
50 \global\let\svgwidth\undefined%
51 \global\let\svgscale\undefined%
52 \makeatother%
53 \begin{picture}(1,1.01676314)%
54 \lineheight{1}%
55 \setlength\tabcolsep{0pt}%
56 \put(0,0){\includegraphics[width=\unitlength,page=1]{sigillum.pdf}}%
57 \end{picture}%
58\endgroup%
diff --git a/sigillum.svg b/sigillum.svg
new file mode 100644
index 0000000..7853823
--- /dev/null
+++ b/sigillum.svg
@@ -0,0 +1,19 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<svg xmlns="http://www.w3.org/2000/svg" width="567.529" height="576.949" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
3 <metadata>
4 <rdf:RDF>
5 <cc:Work>
6 <dc:format>
7 image/svg+xml
8 </dc:format>
9 <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
10 <dc:title/>
11 </cc:Work>
12 </rdf:RDF>
13 </metadata>
14 <path d="M564.606 273.092c-.62-1.18 1.7-4.845 2.59-5.654.133-3.844.01-18.296-3.06-27.097-.614-2.3-4.967-3.47-3.533-6.83 1.883-9.42-.47-8.82-.47-15.31-3.074-4.82-6.02-11.7-8.477-16.73.614-.84.295-5.21.702-6.26-3.278-7.96-4.184-15.09-10.58-19.98-2.05-2.51-2.933-7.04-1.91-9.55-4.713-7.33-4.016-14.62-10.98-20.7-5.172-1.35-4.5-6.13-4.295-10.11-5.325-6.49-8.754-16.59-15.913-20.38-8.274-4.37-3.42-7.88-9.865-13.93-3.89-6.5-8.195-11.46-16.627-14.09-.345-2.04.193-4.06-.955-5.89-5.65-5.89-12.838-11.15-17.583-15.68-2.534-1.59-4.56.73-7.02-1.16-.463-1.12-.135-2.24-1.294-3.62C449.21 54.84 441.04 48 436.68 45.47c-3.51-3.19-6.12.273-7.32-2.07-6.77-7.727-18.94-12.9-27.14-16.88-5.21-2.136-4.7-.32-7.8-1.356-5.73-7.34-13.15-8.09-21.96-9.554-3.688-2.31-5.51 1.79-8.99-1.353-4.858-4.38-16.87-8.44-23.79-9.313-5.53-1.26-6.317 1.474-10.58 1.35-4.27-.123-6.05-7.272-25.94-5.254-2.665 1.26-5.557 1.64-8.83 1.433L288.86.63c-8.192-.64-19.572-.644-26.572 2.78-1.2.587-3.884-1.644-7.002-1.75-6.623-.23-15.87.913-22.833 1.91l-5.25 3.98c-6.603.716-4.417-2.01-7.08-1.592-9.07 2.07-22.212 5.257-26.73 10.986-1.194 1.513-2.517-2.29-5.65-1.67-5.626 1.108-14.12 5.927-19.252 8.756-1.64 4.817-2.86 5.573-12.57 5.414-1.43-.026-20.66 7.563-23.86 18.47-1.88-.176-4.56-.515-6.36 0-6.68 4.06-12.57 9.657-18.13 14.013-.82 2.722-.26 3.11-2.3 5.412-6.57-2.66-18.94 12.65-20.85 15.92-1.54 2.6-1.88 5.66-2.92 7.8-8.53-.56-9.11 4.51-12.35 8.12-4.16 4.63-7.41 8.85-10.98 13.45 1.02 6.91-1.08 5.81-6.08 7.63-3.48 7.96-15.7 16.57-12.08 27.45-2.25 2.72-5.34 1.33-7.59 4.06-3.89 9.01-12.78 18.11-8.88 29.01-.41 2.3-2.03 4.97-5.95 3.88-.44-.12-5.69 14.94-8.18 22.06-1.84 5.24 6.97 15.32-3.64 16.36-2.1 2.56-2.96 18.99-4.55 25.34-.42 3.77 6.18 8.33-.63 15.15-.6 12.52.01 25.02 3.11 32.63-1.43 1.89-2.74 3.52-3.36 5.61 2.66 8.6-2.33 16.66 7.5 24.78.2 1.88-2.36 1.72-3.79 2.76.87 9.23 0 23.05 6.47 24.69.17 1.97-1.08 1.71-.95 3.97 3.19 11.91 1.73 27.97 13.63 32.55.62 2.31-2.35 1.99-2.76 3.88 1.64 5.24.09 8.2 4.92 13.04 3.11 4.49 7.28 8.5 7.08 14.16-2.76 2.24 1.04 2.85.74 6.36 3.83 5.81 7.58 18.06 15.83 16.52.35 4.92-1.91 4.45-.86 7.68 1.13 3.45 6.91 9.67 11.48 15.8 1.74 1.61 6.21 2.17 7.08 3.45.69 8.98 9.45 14.57 13.55 19.6 2.87 3.12 5.04 7.97 9.75 7.34 3.28.84 3.04.62 3.45 3.97 6.65 6.1 11.27 14.71 18.99 17.44 1.44.51 7.77.61 10.1 1.56 1.73.78-.21 4.6 2.25 6.91 7.17 3.77 13.99 10.2 21.57 13.56 7.38-1.26 9.32-1.38 12.21 5.41 8.81 2.93 16.87 12.55 28.95 8.06 1.24-.46.95 3.62 1.56 3.88 8.2 3.51 15.82 6.76 24.83 8.86 7.44 2.41 16.42 4.29 38.87 6.8 26.89 2.96 54.41 1.79 63.51.5 10.44-.42 50.99-9.71 51.8-11.78 3.3-8.44 3.53-2.83 7.77-2.59 1.81.1 17.66-5.65 29.9-13.9 1.5-1.5 1.77-4.02 2.59-5.66.82-.84 2.83.63 3.45 1.89 3.08 4.13 8.81-1.9 12.48-3.81 4.31-3.46 11.54-4.73 12.56-10.81 1.41-4 6.02-.41 8.48-1.88 6.56-4.25 14.08-9.04 19.42-16.4 1.51-2.08.52-1.56 1.21-3.63 1.07-3.21 7.02-3.13 8.46-3.54 4.3-1.89 6.78-7.34 10.26-9.85 4.1-2.94 2.23-5.72 4.69-9.7 1.84-2.1 4.81-.63 7.06-1.89 4.4-5.76 11.7-14.09 15.31-26.15 1.43-1.89 3.06-1.03 5.65-1.41 4.14-6.7 11.56-14.81 10.62-23.27.69-1.82 6.82-1.47 8.45-8.78 3.11-13.68 10.36-13.67 6.83-22.86 1.64-1.47 2.86-.26 4.71-2.36 2.06-5.2 4.19-10.01 5.38-16.36.59-3.12.78-6.91.99-10.75 5.12-2.73 4.47-5.19 5.89-9.19 3.77-6.84 1.56-15.12.94-19.8 2.59-5.89 4.55-10.97 4.96-14.33-.82-6.92 2.93-10.79-2.6-16.31-1.45-2.95 1.39-5.47 2.83-7.77 0-9.43 1.77-24.62-1.65-29.45zm-5.18-22.62c1.012 2.955 1.882 4.242 2.118 6.598 0 0-.324 3.948-1.03 5.833-.854 2.277-2.33-12.174-3.208-16.908l1.648-.706c1.303.88.47 5.18.47 5.18zm-8.18-41.022s.64 3.726 1.43 6.53c1.123 3.98 1.452 6.342 2.944 9.87 0 0-1.23.232-1.512-1.512 0 0-1.42-4.23-1.352-4.06-2.18-4.064-4.058-8.36-4.058-11.624 0-3.097 2.547.796 2.547.796zm-10.423-26.59c1.51 4.537 2.242 7.033 3.898 11.225 0 0 1.36 2.707.96 2.787-.39.08-1.03-.24-1.03-.24-4.05-6.59-7.4-19.345-6.52-19.743.88-.4 2.71 5.97 2.71 5.97zm-15.118-31.29l2.228 3.982c3.05 4.678 1.913 2.3 3.82 7.165l.715 2.15s-.427.038-1.91-2.548c-1.777-3.1-3.868-5.88-5.49-9.16 0 0-1.51-2.79-1.033-3.03.478-.24 1.67 1.43 1.67 1.43zm-22.753-34.233c1.755.74 2.946 3.57 4.057 5.095 1.26 1.724 4.13 6.926 4.13 6.926 3.15 2.69 3.18 4.06 3.42 4.3l-.48.397c-2.63-1.99-1.02-1.056-3.58-3.9l-1.75-2.47c-2.41-2.804-5.77-5.414-6.1-9.52l.29-.83zm-16.707-21.02c1.273 2.15 4.12 3.488 7.478 7.485 0 0 1.36 2.832-.08 1.433-3.28-3.186-8.432-8.677-12.092-11.862-1.06-.93-.55-1.99.08-1.91.64.08 4.62 4.855 4.62 4.855zM455.217 67.26l6.126 6.45c5.92 4.114 11.767 10.12 9.944 8.756-3.818-2.858-7.754-5.11-10.6-8.564-1.14-.95-2.382-1.455-3.56-2.502 0 0-1.91-1.512-2.626-2.786-.71-1.275.72-1.354.72-1.354zm-27.13-17.117c.08-1.672 5.568 4.14 9.467 5.255 1.057.302 5.25 3.662 5.25 3.662 3.76 2.082 2.228.557 4.615 3.583 0 0-1.66.045-4.3-1.434-3.91-2.19-5.97-4.22-10.53-6.92 0 0-4.6-2.48-4.52-4.15zm-34.052-19.266c.476-1.672 12.252 6.847 17.582 9.474 0 0 4.215 2.23 3.74 2.31-.478.08-5.35-1.62-11.14-4.69l-5.727-2.54s-4.932-2.86-4.455-4.54zm-30.073-12.26c.875-.956 9.375 3.074 10.82 3.9 1.75.877 3.102.797 6.842 2.708 0 0-.125.688-3.42-.16-3.038-.782-4.82-.693-7.664-2.255l-6.42-2.283s-1.033-.954-.158-1.91zm-27.447-7.006C337.23 10.5 349.96 14 349.96 14c-.058-.027.3.896.24.875-.508-.208-1.815.032-3.263-.08-3.38-.266-7.08-1.035-10.103-1.672 0 0-1.035-.398-.32-1.513zM298.01 6.68c4.058-.08 11.787.496 16.866 2.15 1.81.05.116 1.186-1.193.954-6.763-1.193-13.367.24-14.798-1.035-1.432-1.28-.876-2.07-.876-2.07zm-34.368.796c.496-2.2 5.334-1.018 6.637-.935.89.06 6.66.4 7.12-.02 0 0 4.45 1.12 2.86 1.36-1.59.24-15.28.72-15.28.72l-1.35-1.11zm-35.72 4.46c1.762-1.43 6.188-.862 8.91-1.115 2.19-.2 9.705-1.11 9.705-1.11 2.61.86 1.432 0 1.512.64l-2.31.48c-2.07.14-5.65 1.06-8.04 1.6-4.61 1.03-4.54.8-6.96 1.02l-2.36-.22-.48-1.27zm-17.82 3.74s4.295-1.592 5.33-1.592c1.033 0-.876 1.116-.876 1.116-3.968 2.538-4.768 2.172-9.468 3.344l-4.35 2.075s-3.685-.49-1.855-1.76 11.217-3.19 11.217-3.19zM173.108 29.45c.606-1.428.515-.256 2.068-.876 1.024-.404 4.932-1.83 4.932-1.83 1.253-.467 3.053-2.23 4.376-2.23 1.25 0 2.24-.66 3.24-1.03l-1.888 1.668c-3.058 2.09-4.068 2.1-7.24 3.423l-4.773 2.39c-.418-1.065-1.054-.708-.715-1.513zm-30.95 16.003c1.194-2.07 3.117-2.257 4.934-3.265l2.943-1.99c1.387-.3 2.626-1.274 3.42-1.115 0 0-1.437 1.602-5.01 3.5l-4.456 3.186-1.83-.32zM114.156 66.31s4.55-3.534 6.284-5.016c2.76-2.352 3.82-3.66 7.24-5.492l.955-.477-.875 1.51c-2.864 2.07-5.33 2.63-7.797 6.45-1.25 1.938-5.57 4.22-5.57 4.22-.697-.426-.658-.62-.238-1.194zM92.12 85.252c.396-.716 8.352-8.518 10.18-8.916 1.83-.4-2.465 2.468-2.465 2.468-2.873 3.08-4.166 4.204-6.84 6.926 0 0-1.274.24-.876-.477zM67.633 111.58c2.528-4.036 4.153-5.388 7.46-8.733l.478.16s.28.634-1.51 2.786c-1.89 2.284-3.34 4.3-5.23 6.646l-1.19-.86zm-19.708 28.893c1.728-5.973 5.402-9.788 9.06-13.728v1.73c-2.195 5.102-7.162 13.38-7.853 13.38-.69 0-1.207-1.382-1.207-1.382zM28.34 176.997c1.508-1.702 2.676-5.35 3.797-7.34 1.726-3.06 1.984-5.093 4.4-8.374l-.517 2.59c-1.752 5.783-4.832 10.188-7.42 16.146l-1.146-.57.887-2.46zm-7.074 19.685l.432 1.555c-.173 2.59.087 3.62-1.985 8.462l-1.898 3.71c-.192-5.94 3.45-13.73 3.45-13.73zm-9.577 38.854s.73 8.034-1.62 13.244l-.8-.552c-.09-3.022.95-6.993 2.41-12.692zm-5.1 39.458l.17-4.426.08-2.05c3.08 1.302 1.29 8.72 1.29 8.72-.17 4.232.86 7.512.1 10.04l-1.19.357c-1.5-1.33.4-4.813-.47-12.64zm1.46 38.852l-1.04-9.238.43-2.33c.69.862 1.12 2.762 1.12 2.762-.6 2.183.46 4.29.77 6.562.43 3.108 1.12 8.03.25 8.03-.86 0-1.39-3.045-1.55-5.786zm6.73 41.187c-.17-2.494-1.36-5.615-1.9-9.41-.36-2.555-.43-3.8-.6-5.96l.34-.17c.33-.544 1.79 4.372 1.79 4.372l1.74 11.082-1.38.086zm7.68 24.434c-2.29-3.647-2.33-9.238-2.59-9.41h.08c3.24 2.617 2.15 1.726 2.13 1.773l1.32 6.687-.95.95zm12.73 30.78c.29 1.857-.53 1.03-1.01.993l-2.25-4.316c-2.37-4.945-1.97-3.813-3.62-8.375 0 0 2.09 1.32 3.71 5.61.8 2.1 2.12 3.28 3.19 5.27l-.03.81zm14.18 27.847l-1.13.085c-.42-.43-.36-.51-1.64-2.85-.77-1.4-1.56-4.75-1.56-4.75.7 1.37-.17-1.72.51 0 1.38 3.45 1.64 3.11 3.67 5.85l.12 1.66zm13.07 20.65c-3.06-3.574-4.36-5.63-4.27-6.06l.77-.432c2.15 1.382 3.02 4.49 4.83 5.87 0 0 2.76 4.06 2.15 4.32-.61.258-3.5-3.7-3.5-3.7zm27.13 32.364c-3.02-3.195-9.47-10.817-13.03-15.283l1.55-.605c1.4 1.833.43 2.33 3.53 4.058 3.82 2.12 5.61 7.305 8.45 8.635l1.29 3.022-1.81.172zm27.18 22.796c-2.42-2.33-6.31-5.334-8.89-7.518-1.88-1.594-2.88-3.354-4.92-4.397l1.98.08c4.05 3.62 8.88 7.77 13.2 10.7l-.17 1.21-1.21-.09zm35.03 22.016c-2.87.42-9.05-5.44-11.7-7.04-1.68-1.02-5.13-1.33-5.13-1.33l-1.38-3.11h.86c2.4.82 4.41 1.834 6.47 3.11l10.18 6.3zm31.14 13.907c-2.01.296-6.33-2.668-8.54-3.8-3.03.012-1.8-.947-3.2-1.295-1.74-.242-3.44-.712-4.92-1.47-1.31-.67-4.14-2.16-4.14-2.16.44-1.07.13-.564.86-.775 1.15-.326 2.7 1.267 3.36 1.21l13.37 5.784 2.76 1.04.43 1.47zm218.01-7.18c-2.36 3.534-13.31 6.05-15.54 6.833l3.53-2.358c4.06-1.58 4.19-2.075 7.77-4.712l4.23.235zm15.83-7.48c.48-1.168 12.37-8.778 16.89-8.778 0 0-17.53 10.31-16.9 8.77zM459 508.21c-4.573 3.453-15.444 11.656-15.7 11.224-.26-.43 3.063-3.65 3.063-3.65 5.476-2.307 6.355-5.89 10.83-8.48zm13.027-12l3.06-5.165c1.414-1.65 1.007-2.77 4.474-5.42 0 0 1.21-2.463 3.43-2.055 2.22.406-10.96 12.64-10.96 12.64zm30.545-36.783c2.59-1.413-1.66 4.845-4.66 7.858-1.9 1.91-3.71 5.088-5.52 7.34l-.088-1.123c2.93-4.145 7.68-12.66 10.26-14.074zm15.79-20.552c-2.276 3.958-2.878 5.166-4.055 5.873 0 0 4.106-10.957 7.4-10.957 1.89 0-3.35 5.09-3.35 5.09zm19.76-33.76c-1.55 2.245-3.03 5.76-5.178 9.67l-.4 2.512c-1.5 2.583-1.24-.18-1.24-.18 2.03-4.224 5.61-15.455 5.61-15.455l.86-.52.34 3.97zm7.94-19.944c-.6-.6 1.03-7.76 3.97-11.57 0 0 .71.18.52.78-.19.6-3.886 11.4-4.49 10.8zm4.4-38.68l.21 5.07c-1.19 5.86-4.91 11.01-5.39 16.26.01.18 1.727 1.72 1.727 1.9 0 3.73-1.89 4.33-3.71 7.08-.55 1.49-1.59 1.76-2.5 3.2-1.44 2.27-3.88 10.1-4.49 11.92-.81 2.44 2.26.89 3.53 2.25l-.08 1.99c-3.96 2.55-6.84 4.31-8.98 8.29-.76 1.42 1.47 1.3-.43 5.36-.56 1.19-1.74-.16-3.1 1.47-2.23 2.67-5.23 7.98-6.01 10.29.16.39.66 1.02.66 1.02.44.87 3.28-1.3 3.02.78-.04.34-1.12 2.59-1.12 2.59-2.25.91-4.57 2.59-6.82 3.97-2.5 1.54-10.96 14.31-10.96 14.33 0 .57-2.6 3.5-1.5 4.4 0 0 4.87-1.21 4.43 1.04-.2 1.04-2.55 2.03-2.55 2.03-2.51 1.39-5.32 2.42-7.29 3.93-5.18 5.79-9.1 10.1-14.87 17.79-.02.15-1.35 2.07-1.35 2.07-.17 1.55 1.36 2.83-.51 4.01l-5.18 3.3c-5.02 2.13-9.18 7.54-9.18 7.54l-2.82 2.83c-1.56 1.53-2.4 1.58-2.31 1.81l-1.94 2.67c.33.43 4.02 2.3 1.66 4.18-.55.44-1.56.25-3.2.43-2.68 1.56-5.18 1.3-5.18 1.3-3.45.09-4.51 2.81-11.19 8.23-2.53 2.05-9.89 4.71-10.83 6.36-.94 1.65 2.59 3.77 2.59 3.77l-2.83 1.18c-6.06-.13-7.9-.1-12.95 2.83-2.91 1.69-8.27 4.76-11.54 5.89-.62.66-3.82 2.05-3.56 3.6.1.61 3.6.52 4.03 1.12l-1.09 1.74-2.85-.43c-9.65-2.59-15.91 3.05-27.84 8.59l-1.88 3.54s-3.33-2.42-4.72-2.84l-4.01-1.05-.57.6-.23.53c-2.88 6.64-7.9 9.85-13.79 10.87-2.85.49-14.24 3.03-17.89 4.14-6.79 2.05-16.35 4.96-23.29 5.07-5.53 1.59-7.62 1.33-13.44 1.3-5.18-.03-20.12 1.04-20.12 1.04-23.12-1.47-42.98-1.51-71.94-15.88-3.56-1.66-9.67-2.84-13.42-4.95l-2.36-2.59-3.53-3.06c-6.92-5.35-10.22-8.49-16.95-9.95-2.02-.94-4.07-2.72-6.38-3.54-.71-.1-1.88-.22-2.24.78-.33.91 1.34 4.32-.95 3.54l-2.33-1.9s-5-11.05-25.8-20.29c-.24.27-1.47.61-1.47.61-.71.95-1.64 3.88-2.76 3.71-1.12-.17-2.25-2.73-2.25-2.73l-.13-.27c-1.06-2.23-3.68-6.97-5.12-9-5.52-5.18-9.87-9.49-17.77-13.73-.49.02-1.7-.55-2.16-.09l-1.12 1.12-1.38-1.38c-.87-2.07-1.67-3.74-1.84-5.53-.09-.96-.52-1.07-.83-1.8-.26-.32-5.09-5.18-5.09-5.18-4.23-5.5-6.56-8.98-11.73-12.44-.6.39-3.06 1.27-3.63 1.21l-1.13-.1-.77-1.7-.13-.61c-.57-3.23-1-5.29-1.86-8.22-2.28-4.74-6.3-8.7-9.62-13.25l-1.09-1.49s-.09-1.41-1.55-1.41l-2.5 2.33-.78-1.99c.26-6.13-.26-10.53-3.89-14.07-2.28-2.23-2.89-5.89-4.22-8.46-.58-1.05-2.03.07-3.28.17-1.35.09-1.96-.9-2.25-4.41.03-.45-.26-1.82-.26-2.25 0-4.93-1.28-8.47-3.11-12.52-1.13-2.51-3.44-5.47-4.14-8.2-1.43-1.44-.76-.45-2.07-.78l-2.07-1.9c.18-1.38.6-3.66.6-5.01 0-5.69.09-8.38-2.42-13.99l-1.9-8.38s-.55-.91-1.3-1.9l-2.95-1.12c-.77-.3-.52-3.18-.52-3.2.65-2.19 1.12-4.72 1.12-6.9 0-4.32-1.43-8.58-2.42-12.78 0 0-1.17-4.61-1.29-5.18-.25-.19-3.11-.52-3.11-.52-1.04-.74-.63-1.72-.35-2.25.69-1.52 1.9-5.05 1.9-6.65 0-2.23-.17-4.16-.69-6.56-.55-2.59-.77-6.13-1.72-9.07-.17-.53-.91-2.21-.87-2.77-1.33-1.91-1.95-3.66-1.95-5.74 0-3.32 1.63-3.27 2.81-6.44.79-2.1 1.54-15.93 1.54-16.72 0-3.68.96-3.57-.33-5.73l-3.71-3.02c.1-4.14 3.45-7.9 4.83-11.31 1.45-3.6 2.08-8.64 2.09-12.92 0 0 5.75-15.49 2.79-15.94-1.69-.25-2.01.15-2.74.36l-.51-1.9c1.81-2.84 3.05-4.54 5.52-7.94 0 0 1.77-3.55 1.9-3.71.1-.3 2.15-6.13 2.15-6.13 1.34-3.84 2.76-6.62 2.76-10.62 0-1.52-.94-3.54-.87-4.75l.37-1.74c4.88-3.86 8.42-8.79 11.18-18.37l3.02-5.26c.19-.98 2.24-2.88 2.24-4.24 0-1.66-1.26-.58-2.25-1.81l-.95-.77 2.07-2.07c7.88-4.28 11.24-12.73 16.13-20.21l2.93-4.57c.9-.62 2.25-2.09 2.58-2.76.43-.87 1.61-1.6 1.16-2.65-.4-.93-1.91-.64-2.71-.88-.38-.11-.78-1.34-.4-1.51 1.99-.87 3.01-2.78 4.61-3.18 5.87-3.44 8.98-8.13 13.17-13.6 0 0 5.09-5.23 5.41-5.65.48-1.59-1.54-3.18-1.54-3.7 0-.49 3.92-3.3 3.92-3.3 9.86-3.1 12.17-7.88 19.41-15.44.48-2.86.55-3.24 2.46-4.38l3.26-.87c2.78-.63 10.74-7.64 17.65-11.77 0 0 2.72-1.64 3.03-1.91.06-.22.56-1.99.56-1.99-.72-1.75.25-2.61 2.63-3.18 5.27-1.28 29.43-8.67 28.8-14.88l1.15-1.65 8.95-.41c3.26-2.15 5.93-2.81 12.53-5.59 0 0 3.7.1 4.34-4.28 2.53-.93 8.48-.74 10.18-.72 0 0 4.59-.95 4.773-.95 2.12-1.24 4.49-1.89 6.8-2.49 3.48-.91 5.3.1 5.38-3.8l3.66-.79s14.79.4 22.78-1.18c0 0 5.77-.65 6.89-1.37 1.91-1.51.35-3.21 1.35-3.5 1.46-.43 4.72 1.33 7.08 2.55.25.01 10.9-.08 10.9-.08 6.19.47 9.62 1.04 15.19.23-.24-4.22 6.92-1.59 9.54-.16 2.06 1.13 8.91.48 8.91.48l10.58 2.39c3.68.51.88-1.12 2.31-1.44 3.23-.72 3.65-1.37 5.41 0 .83.64 3.56 2.62 4.45 2.95 6.68 1.51 13.56 3.14 19.49 3.66l5.73.4 1.27 1.27c1.8 1.96.45.7 2.78 1.75 1.88.85 10.3 2.56 12.01 3.98 2.1.62 4.32 1.11 6.2 2.31 15.27 9.71 8.45.34 9.62-.08 1.11-.4 8.04 7.48 8.04 7.48 1.43 1.44 6.403 3.14 12.88 7.02 3.282 1.97 8.1 5.86 8.36 4.84 1.75-6.76 7.76 5.02 11.38 7.25 2.07 1.28 3.573 2.45 5.17 3.5-.53-.19 7.92 5.14 8.51 5.98 5.57 7.8 5.97.63 6.765.31s5.81 8.04 5.81 8.04c-.24 2.23 6.79 7.29 10.9 10.43 2.76 2.1 4.31 7.37 5.73 6.61 5.17-2.78 4.38-2.94 7.88 5.89 1.26 3.18 7.48 8.68 7.48 8.68 2.71 3.66 1.75 3.34 3.26 4.86 2.75 2.76 1.44 3.37 5.02 2.39l1.35.48c1.1 1.58 1.99 5.8 2.46 7.57.45 1.71 3.27 4.15 4.213 5.5 0 0 9.63 16.32 10.82 16.4 1.2.08 2.55-2.79 3.27-2.31.71.48.95 5.17.95 5.17l.4 1.99c.62 4.91 3.27 8.88 5.25 13.14 1.81 3.93 3.02 6.05 5.17 10.35 0 4.7 3.7 2.35 4.53 3.11.453-.23.1 2.19.396 2.23l1.04 4.14c.77 5.17 1.43 10.09 4.3 14.25l1.12 4.22c-.35 2.32 2.6.91 4.57 1.82l-.25-.06c.98.09.66 1.58.57 2.36-.06.57-1.38 3.02-.41 7.81.09.42 3.06 9.66 3.06 9.66 1.16 5.71 1.47 7.83 5.89 11.78 0 0-.33 6.07-1.18 8.48-1.26 3.54 1.172 8.06 1.172 9.66 0 1.44-1.24 3.3-.23 4.71 1.74 2.54 1.34 2.84 1.642 5.89.4 4-.99 7.78 2.59 9.89l1.88 1.18c-.4 3.12-4.8 2.55-3.06 24.03.32 3.86-3.32 2.54-.94 5.66l3.77 3.06-1.33 3.43c-1.41 2.79-3.72 4.09-3.85 7.17l-.23 9.66c.05-1.6-.93 2.66-1.35 6.22-.44 3.78 5.78.95.69 9.76-.29.51.37 1.04.17 1.73-.37 1.3-2.66.71-3.02 1.73zm5.09 10.62s-.7 3.69-1.38 3.37c-.68-.32 1.207-15.28 2.416-15.19 1.204.09 0 3.28 0 3.28l-.03 3.24c-.316 1.86-.3 1.07-1.01 5.32zm3.71-30.65l-.345 2.94-.863 4.32c-1.41-1.65-.044-3.53.154-6.65.08-1.21.157-4.31 0-4.95 0 0-.11-4.4.708-5.65l2.12-1.65-.215 2.68c-1.65 3.06-1.1 4.31-1.55 8.98zm3.184-29.32s-2.59-15.31-.705-15.55c1.89-.23 1.42 3.3 1.42 3.3.12 3.88-.7 12.26-.7 12.26z"/>
15 <path d="M183.934 557.13l.224-7.512c-.268 2.433-.545 5.307-.224 7.513zm43.382-435.193c.456 2.97-3.312 1.028-.914 4.914-1.484 2.18-4.002 3.64-6.112 2.37-2.68-2.71-9.99-5.79-2.91-7.05-2.398-2.97-.237-3.51 1.028-4.57 3.167.43 6.28-.68 8.908 4.34zm81.878 1.713c-1.14 2.972-4.01 5.504-4.224 8.457-3.372.845-5.277-1.56-6.966-3.885 0-2.112 7.194-2.97-.172-6.595 1.69-2.744 11.997-2.2 11.362 2.023zm-50.588-1.142c1.112-.544 2.226-2.078 3.312-2.056 1.024.02 1.94 1.6 2.398 3.428.31 1.24 2.007 1.377 1.94 2.628-.113 2.172-1.448 4.053-3.767 4.686-.69-.74-1.38-1.747-2.06-1.714-2.06 1.143-4 2.972-5.71-2.172.12-1.058.94-.955 1.14-1.714-.57-1.143-.36-2.09.11-2.743.67-.41 1.66.13 2.62-.34zm92.828 5.258c.42 4.647-4.64 3.59-5.906 6.97-2.53.21-3.168-2.535-5.488-2.953-1.474-1.484-3.377-2.75-2.53-5.072 1.056-1.68 4.64-.42 4.01-3.37 3.586-5.91 9.494-.42 9.914 4.43zm-126.402 18.512c.454.257 1.257.8.457 3.543 1.14 1.03 1.37-2.97 2.96-2.28 3.99 2.29-4.57 5.94-2.63 8.46-3.88 4.57-7.23.45-8.5-2.08-.35-1.83.15-3.85 2.32-4.2.23-1.37.92-2.41 1.6-3.77 1.84-.79 2.25-.51 3.77.34zm43.454 3.562c0 3.38-2.32 3.8-1.478 7.39-1.478 1.902-4.006.635-6.12 1.055-2.95-1.055-1.685-5.275-4.852-6.543-.21-1.48.21-2.536 1.478-3.377 4.01 2.743 8.44-3.594 10.972 1.475zm67.748 6.77v2.96c-3.164 1.057.21 4.435-2.95 5.49-1.692-4.223-8.87.212-7.6-6.125 4.217-1.897 1.898-6.965 6.543-8.445 3.165.846.63 4.86 4.007 6.12zm-45.986-3.75c-1.053 2.533-2.11 5.486-4.43 6.963-1.9.216-3.586-.21-5.067-1.477-.84-2.953-.2-4.008 1.06-6.543 2.75.422 6.97-2.958 8.44 1.057zm64.822.73c-2.532 1.69-2.532 7.178-6.54 5.486-1.478-2.11-5.27-1.686-4.85-4.85 2.533-.425 4.218-3.17 6.964-3.593 1.894.423 3.796.845 4.425 2.958zm-45.432 2.954c-.21 1.477-1.685 2.957-2.956 3.168-4.637 1.056-5.48-3.378-7.17-6.12 0-1.48.843-2.114 2.11-2.536 4.85-1.265 4.85 4.01 8.016 5.488zm-60.398 9.506c-1.296 1.384-3.117 1.897-4.597 1.473-2.532-1.478-9.037 1.237-8.19-4.674 4.224-1.49 3.34-7.36 8.016-5.37l4.77 8.56zm101.227 4.658c0 2.75-1.056 6.548-4.435 6.548-1.685-2.112-8.262 1.383-6.574-3.894 2.74-2.957 8.477-7.93 11.01-2.654zm-22.315 5.168c-2.322 2.744-6.38-.458-8.068 3.34-1.27.212-2.742 0-2.958-1.48.846-2.74-1.486-4.935 1.89-6.202 2.957 1.477 8.29.54 9.136 4.342zm-99.342 3.95c-2.11 1.896.634 5.91-2.53 7.388-5.067.845-3.59-5.067-6.333-6.548-.63-2.322 2.11-2.742 3.376-4.01 2.532-.42 4.01 1.482 5.487 3.17zm126.52 10.334c1.687.636 1.6 2.785 1.6 4.687-4.222 1.477-6.076 2.873-11.354 2.237-1.685-1.686-2.036-3.896-.98-6.01 1.69-2.32 3.936-4.546 6.47-3.07 1.264 3.38 2.576.26 4.265 2.157zm-15.187 5.03c-.335 3-.05 8.154-2.2 8.8-2.116.214-4.413.854-5.68-1.258 1.686-3.378-2.974-3.81-1.287-6.55 3.586 0 6-4.582 9.167-.992zm-118.298 7.712c1.897 2.96 1.054 5.492-.846 8.024-2.11 1.477-2.53-1.056-2.96-2.532-1.9-1.478-5.7-.636-5.49-4.436.42-1.69 2.11-2.746 3.79-2.533 1.26 2.113 3.8 2.324 5.49 1.477zm133.943 11.728c1.26 1.475 1.685 3.376 1.475 5.49-1.475 2.106-3.797 3.374-5.907 2.106-1.69-2.95-6.328-5.275-4.646-9.08 1.054-1.477 2.535-1.477 4.012-1.477 1.69 1.05 2.53 4.22 5.066 2.96zm-18.04 12.572c1.474 2.743-.217 6.12-2.957 6.543-2.95-1.477-6.75-4.646-7.59-8.025 2.96-3.8 8.44-1.267 10.55 1.482zm-110.972 11.182c.636 1.902-1.896 3.17-2.954 4.014-2.108-.845-4.01 1.687-5.484-.637 1.265-2.95-.846-6.12 1.898-8.44 3.798-.84 7.176.85 6.54 5.07zm126.63-1.34c1.472 2.323-.42 4.857-2.113 6.123-4.223.846-7.383-1.266-10.34-3.588.846-2.12 1.48-5.5 4.432-5.92 3.798-.43 4.854 2.53 8.02 3.38zm-23.872 7.906c-.213 2.113-2.53 2.957-4.01 4.015-1.686.42-3.162-.635-3.586-1.902-1.055-2.534-.42-6.754 2.95-6.543 4.013-1.692 2.956 2.96 4.646 4.43zm8.632 8.08c-1.27 5.067 6.328 2.323 4.642 7.6-2.11.636-3.376 2.747-6.122 1.9-3.798-1.69-2.32-5.7-3.37-8.443.42-2.323 3.79-2.533 4.85-1.056zm22.05 7.936c-.844 2.533-1.057 6.333-4.428 6.964-1.69 0-3.375-.21-4.432-1.898 1.057-3.168.42-7.178 3.37-9.08 1.908-.42 3.802 2.532 5.49 4.014zm-8.516 13.478c1.055 3.8-3.802 3.166-5.487 2.536-1.267-1.48-2.996-1.178-3.59-2.962l.594-3.723c2.315 1.686 7.216.772 8.48 4.15z"/>
16 <path d="M254.837 398.7c0 .845-.35 1.756-1.667 1.492-3.248-3.864-4.74-3.513-6.747-5.85-.21-1.052-.328-1.77.515-2.406 3.796.424 5.53 5.183 7.9 6.763zm.35-7.38c-1.264 2.536-1.403.528-2.895-.087-1.053-2.744-7.834-4.472-5.09-7.64 3.51 1.14 7.372 4.742 7.986 7.728zm-19.282-93.06c1.4.11 1.4.863 1.077 2.05-2.32 1.69-4.417 1.724-6.68-.755 0 0-1.402-1.078 2.263-1.078.646 0 1.94-.325 3.34-.216zm-.647-2.264c-.862-2.48-3.986-.107-3.124.216-.423 1.053 1.508 1.4 2.694 1.078 0 0 .538-.108.43-1.294zm-6.015-7.878c.424 2.112-1.42 2.703-2.065 4.104-1.51.324-3.156-.562-4.634-1.617-.42-2.534 1.724-3.558 3.746-3.963 1.268 0 2.11.42 2.953 1.476zm10.432-.964c.213 2.533-2.303 1.05-3.36 2.737-1.477-.21-2.372-.28-3.427-1.76-.63-1.48.56-2.81 1.615-3.23 2.322.21 4.963-.9 5.172 2.27zm44.607-24.258c-1.057 1.898-1.12 2.406-3.016 3.882-2.532-.42-4.278-.953-6.172-3.067 1.055-3.79 4.88-.7 7.573-2 .88-.42 1.615 1.19 1.615 1.19zm-7.865-10.027l.69.83c1.9.84 5.905-2.72 6.96.24.54 4.42-4.79 3.69-7.11 4.53-4.43-1.27-.548-7.12-5.82-7.12-2.11.21-3.945-1.06-5.635-2.11-.29-4.04 4.344-3.93 3.912-4.69-.43-.76-3.556.43-2.91-2.27 9.05-3.99 7.802 5.71 9.913 10.56zm98.786-142.56s-.828.91-.162-.72c.28-2.06 1.62-3.15 2.12-5.16.4-.14-.53-7.28.27-12.57l.67-4.63c-1.11-3.34-1.51-9.38-2.08-13.72-.66-6.35-1.62-11.3-2.41-17.12-.17-1.25-1.34-2.09-1.32-3.31l1.06-2.52c2.5-2.69 3.44-4.5 4.37-7.28.27-.81.06-4.87-.27-5.69-.22-.27-1.98-1.99-1.98-1.99-2.74-3.38-9.25-1.46-9.25-1.46-2.13 1.55-3.11 1.3-3.43 3.7-.24 4.13 1.04 8.16 2.25 9.26l1.99.13h.27c-2.65 6.75-1.7 11.62-3.17 17.86-2.69 11.32-5.82 27.39-1.43 38.03l.37 1.35-1.72-1.54c-4.08-1.17-9.3-7.2-12.03-10.32-1.4-1.6-2.65-1.14-4.06-2.27l-.91-.73 2.06-.32c.67-.38 1.01-.33 1.98-.27 1.02.06 1.46 2.91 3.44 2.25.28-.1 2.25-.53 1.99-3.31-2.24-1.85-4.49-2.1-4.49-3.84 0-.84.63-1.98.8-2.78.18-.92 0-1.8 0-2.52 0-1.37-3.57.66-2.64-.66 1.59-2.28-2.25-2.25-2.25-2.25l3.3-2.91c1.79-1.63 2.21-1.28 2.21-3.17 0-.66-.14-1.32-.37-1.95-.77-2.03-3.7-4.12-3.94-5.07-.07-.27 3.44-2.38 3.44-2.65 0-1.43 1.1-8.06-.4-10.06-.4-.53 2.29-1.55 5.85-4.4l.42-2.43c.24-.93.43-1.7.43-2.38 0-.75-.89-3.9-1.48-4.52-.82-1.43-1.95-1.87-3.25-2.37-1.1-.43-1.68-.19-2.64-1.24 0 0-.12-3.84-.12-4.76 0-1.83-.26-2.76-1.34-3.98-3.65-2.74-10.6-.87-10.6-.87l-.12.03c-1.56.84-1.1.95-2.09 2.96l-.66 2.12c.05.46.95-.12.92.26-.41 4.62-5.16 4.37-6.13 6.41l-.5 1c-.21.68-.31 1.33-.31 1.95 0 4.29.21 8.51 6.92 10.33l.31.2 1.58.89c-1.08.66-6.23 3.08-4.63 3.44-2.11 4.63.93 8.73 3.05 10.19l1.46.4-3.2 2.57c-.93 2.11-1.43 3.33-1.43 5.49 0 1.22 1.11 1.86 1.59 3.17.92.53 1.63 2.02 1.84 2.69.06.21.09.41.09.61 0 .73-1.67.67-2.05 1.33-.38.68-.53 1.72-.53 1.72l.14.26c-.99.8 1.97 3.23.66 3.44-2.28.37-8.86-.62-8.86 1.19 0 .1-.01 2.68 0 2.78 1.37 1.14 7.79.48 9.52.4 1.7-.08 1.36-.85 3.17.4l-3.31 4.24c-2.8 3.67-8.41 8.6-11.19 11.92l-.45.68-9.22-9.95s-4.91-4.57-7.42-7.43c-.13.12-2.06.1-2.06.1-2.32-1.81-5.46-2.62-6.54-1.28-.25.32 2.78.84 2.33 1.41-1.28 1.57-1.37 1.83-2.86 3.08l-3.89 3.77c-2.73 2.4-5.59 7.09-9.19 9.13l-.44.02-.24-.35c-2.6-3.77-7.09-8.6-10.1-11.88l-3.43-3.42.57-1.26c1.99.98 5.29.3 6.88.43 1.35.12 2.18-.9 2.78-1.45.3-.27-.46-1.98-.39-2.65-1.12-.37-7.44-1.28-9.95-1.52-1.96-.18 1.36-2.18 1.36-2.18 1.38-1.1 1.43-5.22.53-6.49-.56-.69-2.25-2.61-2.25-3.31 0-1.23 2.73-2.4 3.31-3.44.45-.83-.53-3.36-.4-4.13l.02-.13.06-.11c.3-.58-.08-1.2-.08-1.72 0-1.41-.44-2.58-1.41-3.87-.91-1.21-1.97-.07-1.97-1.42 0-.2.02-.4.07-.6.22-1.05 3.72-1.65 2.67-6.28.66-5.24-2.06-5.61-1.46-5.96 2.51-1.46 5.29-.53 7.58-8.74l.46-2.17c.27-.84-2.03-3.04-3.08-3.85-2-1.53-4.74-.85-4.74-3.75 0-.71.83-2.67.19-5.03.08-2.7-1.82-3.33-4.93-4.12l-3-.95c-1.33-.5-2.59-.16-3.41.22-1.74.78-3.84 2.63-4.52 4.43-.13.48-.17.99-.17 1.51 0 .79.1 1.62.21 2.42.09.78 1.06 3.25.45 4.01-.61.77-3 1.37-4.36 1.59-.6 1.38-1.02 2.2-1.02 4.48 0 .93.26 4.27.57 5.2.56 1.46 1.51 1.56 2.83 1.72 1.43.16 2.95.37 3.86 2.71l.17.42s-2.96.95-1.61 7.46c.23 1.11.18 2.3.54 3.4.11.64.82 1.23 1.5 1.8l1.24.47c-.31 1.31-.26.79-1.2 1.08-2.38.73-1.49 4.1-1.89 5.61-1.28 4.81 1.54 5.06 3.1 6.15l.48.34-.18.56c-.76 2.26-2.69.38-2.69 2.92 0 1.06-.63 6.68-.34 7.73l.18.63-.58.29c-1.07.54-4.92.71-6.12.61-3.17-.27-1.6 1.66-2.51 3.44-.79 3.7 4.53 1.37 7.14.92 1.99-.34 5.42 1.06 5.42 1.06s-4.75 5.41-7.14 7.94c-2.25 2.38-4.63 5.69-8.14 9.03l-.23.39-1.3-1.58-13.36-13.26.34-2.17c-.11-.33-1.72-1.67-1.72-1.93 0-.5 7.79 1.72 10.19 1.51 1.3-.12 1.05-3.03 1.23-3.58 0 0 .01-.02.01-.06 0-.21-.22-1-2.21-2.81-1.54 0-3.69.63-4.2-.06-.28-.38-.38-.8-.38-1.25 0-.7 1.59-1.76 1.85-2.51.29-.87.23-1.43.23-2.03 0-.8-4.32-3.02-4.32-3.02l.72-.87c1.454-1.76 4.29-4.38 4.29-6.09 0-1.31-2.79-3.76-3.08-5.18-.29-1.47 2.03-2.63 2.03-4.18 0-1.24-.65-1.31-.12-2.63.02-.15-.32-5.54-.32-5.54l.69-.06c1.01-.08 2.08-.44 2.86-1.56.51-.74 2.15-2.15 2.29-4.33-.02-.16-.05-.33-.05-.51 0-.79-.22-1.74-.09-2.62.14-.88.28-1.78.28-2.64 0-.68-.12-1.32-.37-1.93l-.86-.5c-3.002-1.71-6.452-.24-5.5-4.3-1.78-2.37-2.27-6.45-5.49-7.4h-6.33c-1.71.84-1 2.32-2.33 3.88 0 .11-1.49.91-1.49 1.02 0 8.51-1.55 5.26-2.99 7.29-1.08 1.54-.47 4.33-.47 6.09 0 1.54 1.19 2.16 3.22 3.7l.85.06c.72.32 2.08.9 2.08 2.29 0 .32-.99 1.07-1.15 1.47 0 0-2.03.12-2.03 2.39 0 1.3-.95 3.04-.712 4.42.958 3.34 2.92 4.68 2.92 5.68 0 1.39-1.76 2.31-2.56 3.51-.952 1.43-1.484 2.31-1.484 3.53 0 1.04.44 2.03 1.67 2.99.91.35 3.58 2 3.84 3.14.03.14.04.29.04.42 0 1.06-.67 1.44-1.855 1.79-.65.19-1.25.75-1.25 1.15 0 .02.336 1.7.34 1.71l.1.49-.76.56c-1.08.81-2.89.29-2.92 1.43 0 .01-.56.96-.56.97 0 .15 1.09 1.92 1.59 2.34 2.626.72 3.31.57 5.14 1.03l.8.68-1.26 2.06c-2.28 2.52-4.564 7.2-7.31 7.55-.68 2.97-1.25 4.34-3.88 5.6l-2.104.78.37-1.81c.57-2.81 1.39-8.72 1.39-11.34 0-4.93-.64-6.18-1.48-11.06-.86-5-1.25-10.4-1.91-15.89-.08-.73.02-1.47.05-2.22l-.9-8.28c-.01-.69-.04-1.38-.02-2.06.33-7.64 3.07-4.77 4.23-10.11-.08-3.39-2.83-5.53-5.95-8.54-2.65-.18-4.92.28-6.62 1.28-1.89 1.72-3.54 5.07-3.52 7.25 0 0 0 .54.03.51.59 1.97.59 4.82 3.45 5.66l1.2 1.41-.02.45c-.28 6.74-1.39 10.34-2.73 17.12-1.5 7.59-2.4 13.96-3.38 22.21-1.18 9.83.82 12.6 3.34 17.89l.43 2.23-1.37 2.4c-.714 2.24-2.63 6.72-2.63 8.91 0 1.54.76 3.08 1.72 4.47 0 0 1.146.8 1.83.87 0 0-.09 1.29.23 1.77.62.06 3.31 2.17 3.31 2.17l1.71 2.17c-2.17-.46-4.26-.06-5.02-1.83-.553-1.3-1.42-1.39-2.17-1.03-.52.25-1.88 1.49-2.173 2.76-.07.24-.1.48-.1.71 0 1.55 1.12 2.92 2.16 3.5.33-.08 2.06-.12 2.06-.12 1.47-.47 4.11 0 5.71.69l-.32 1.19-.09 1.99s.11 1.08.97 1.08l.54 6.36s-1.075 9.49-.43 11.43c.65 1.94.11 8.84.11 8.84.46 3.472.34 7.513.324 9.28.76 2.37 0 28.68 0 28.68s-.75 17.36-.43 21.89c.29 3.99.33 16.17.33 16.17s1.19 9.38.65 10.67c-2 4.81-.11 13.91-.11 13.91s.65 5.39.11 6.69c-3.04 7.31-.32 9.28-.32 9.28s.64 2.05.21 2.69c-2.41 3.61-.104 7.44-.104 7.44l.11 6.47s1.83 27.49-1.51 27.71c-3.34.21-1.61-18.76-1.61-18.76s1.84-11.11.54-16.18.11-21.46.22-23.83c.11-2.37-.32-6.688-.32-6.688v-37.3l.54-6.58-.43-16.28v-33.3c-.48-6.39-.81-4.73-.49-7-.15-5.35-.26-8.53-.26-8.53l.43-13.91-.65-1.51c-2.43.19-4.09 2.26-4.63 6.25.74 9.73 1.08 3.34.75 13.69-.21 6.71.47 16.21.32 25.71-.38 25.11-.67 80.19-.87 98.21-.14 13.16.44 16.36.44 38.62 0 3.83.06 15.74.08 19.5v.21l-.11.18c-2.37 4.12-4.87 9.41-4.87 13.74 0 1.62.33 3.21 1.11 4.73 2.29 3.35 3.44 6.49 3.44 9.82 0 4.49-1.93 2.98-2.46 6.08-.44 2.54.03 1.65-2.11 6.67-.69 1.3.47-1.27-1.4 9.49-.69 2.56.7 5.97.7 5.97 4.65 2.99 4.74 9.577 4.74 12.47 0 2-3.07 1.41-5 9.84l-2.28 1.85c-1.85 2.53-1.23 2.36-1.23 5.27 0 .64.05 2.83.26 3.51 1.85 3.51 4.01 2.25 4.92 5.84-.09 3.72-.03 6.8.14 12.13.58 3.7.25 32.3.25 35.81 0 3.53.5 10.34.29 14.15l.29 14.1c-.64 6.46 1.11 16.28.35 20.38.01 4.52-.82 5.7-.23 9.87-.48 4.21.36 4.7.36 4.7-.1 1.45-5.04 11.33 21.07 17.31 7.04 2.56 10.6 2.66 18.5 4.82 20.55 5.73 54.38 4.02 84.7 4.54 10.31-.97 20.53-3.76 30.45-5.88 8.29-1.56 9.61-3.5 17.36-6.93 0 0 5.26-10.35 5.98-14.57.43-2.55.87-2.95.95-4.446.77-14.66-.24-26.31.07-27.6.33-11.78-.3-9.9-.17-26.5 0-27.08-.38-20.64-.6-48.88l1.47-1.84 2.51-.29c.865-.87 5.875-5.3 0-10.22-.44-1.96 1.125-2.27.19-3.96-2.02-3.66-1.2-5.83-.77-8.44.15-.88 1.56-2.38 1.79-3.23.383-1.92 1.93-3.18 3.124-4.58.95-1.11.44-2.69.87-3.9 0 0 1.88-1.307 1.88-4.63 0-3.26.45-6.25-.43-9.697-.87-3.44-1.73-6.51-1.73-9.98 0-3.38-2.03-4.19-.44-7.67.07-.18 2.69-3.46 2.69-3.46.51-1.44 2.03-6.52 2.03-7.88 0-.92-.25-1.8-.89-2.59-2.38-1.11-11.06-6.54-11.06-8.06 0-.35-4.3-9.57-3.32-9.98 1.74-.72 4.34 12.44 10.55 13.89 1.26.3.66-3.73-.31-4.41l-.33-.23-.01-.4c-.01-.7.28-2.13.28-2.84 0-5.89.78-7.41.53-14.23-.02-.6.36-10.93.35-11.54-.11-4.34-.8-2.4 0-10.054.4-3.86-1.94-5.25-.46-9.71l-.69-4.91c.03-2.64-.38-6.34.27-11.78-.43-8.85-.08-9.9-.08-18.94.46-2.39-.13-8.1-.13-10.66 0-2.81-.21-14.09-.39-16.9-.18-2.81 0-11.97 0-14.74 0-1.17-.06-1.38.02-2.5.14-6.59-.28-13.65-.13-18.75-.35-7.66 0-25.13 0-32.8 0-4.6.68-6.63.45-10.51V144.3c-.58-1.64-.91-7.75-.91-9.48 0-.58-1.14-3.08-1.14-3.08.57-1.49 5.18-1.11 6.51-1.14 2.9-.07 2.53-1.12 3.35-3.91.09-.24.14-.45.14-.64 0-.55-.37-1-.94-1.64l-.84-1.18c-.91-.41-1.39-.09-2.22.63-.83.72-1.62 2.18-3.42 1.34l-.39-.18-.06-.42c-.23-1.44.36-2.97.72-4.76.41-2.02.44-3.89.26-5.28s.2 1.44.01 0-.75-3.12-2.31-3.87l-.57-.46v.014zm-14.576 435.14c-3.205 5.95-.635 7.3-6.308 9.04-2.63 1.72-4.02 2.29-9.53 3.56-3.8 1.39-6.39 1.97-10.16 3.08-7 2.07-11.45 3.31-19.09 4.23-6.51 1.43-17 .32-23 .29-5.36-.07-11.89.31-20.17-.29l-14.94-.38c-27.03-4.47-36.92-5.47-59.24-17.2l-.38-.22s.87-14.97-.54-18.48c-.09-15.03-.84-30.86-1.69-45.21-.97-16.46-.21-34.63-1.06-45.86.39-2.84-.56-3.91-.03-5.43.52-1.49 1.31-2.11 4.29-3.11l1.93.48s8.99.7 9.04.7c0 0 11.5-.88 23.79-1.06 13.64-.2 29.21.75 33.35 1.58 1.06.21 2.43-1.05 5-1.06 16.15 1.84 38.09-.5 62.93 1.23 2.46-.04 3.66-.69 6.05-.71 1.45-.01 2.88 1.33 4.3 1.32 2.59-.02 4.06-1.82 6.49-1.85 2.64-.03 6.32 1.8 8.71 1.78l.36-.01.23.26c.47 3.24.63 3.67.63 7.09 0 1.65-.16 3.37-.33 5.17l-.38 6.16.45 27.73c.16 15.51-.29 28.4-.29 43.49 0 6.73.24 9.1.09 19l-.6 4.63h-.01zm-139.59-133.58c-.383 1.49-1.366 1.99-2.105 4.04-.413 1.14-.29 3.95-1.054 4.83-2.28 2.63-3.518 4.78-4.936 5.9-2.875 2.26-2.035-.44-2.035-.44 2.67-3.8 4.464-10.15 6.97-14.43 0 0 3.507-8.06 4.695-8.6 1.187-.54 1.434.66 1.434.66-.844 1.9-2.35 5.63-2.968 8.02zm10.973-16.16c.175 3.16-2.72 9.31-2.81 17.48l-1.755 6.58s-.058 1.99-1.316 1.4c-2.64-1.23-1.94-6.24-1.94-6.24 1.93-5.54 1.93-7.64 2.19-9.05.26-1.41 3.32-7.2 3.13-10.31 0 0 .9-.94 1.6-1.12.7-.18.88 1.23.88 1.23zm-6.76-6.94c.176-3.08 6.557-9.62 7.988-11.95 1.404-2.29 5.003-5.1 6.232-6.59.006-.01 5.354-5.18 4.037-5.62-.823-.28-6.407 4.48-9.2 5.76-2.497 2.34-4.14 5.48-6.686 8.82-6.49 7.38-7.02 12.21-13.51 24.59-.17 3.33-1.01 4.56-1.93 6.76 0 0-1.75 6.14-2.9 6.23-1.14.09-.35-3.43-.35-3.43 2.73-14.55 2.37-9.93 4.13-18.54 2.55-9.23 12.56-21.61 15.45-24.68 2.27-2.41 5.79-4.31 5.88-5.45.09-1.14-2-.47-2.46-.62-.86-.27-2.05 2.31-2.77 2.69 0 0-3.2 3.27-3.72 2.83-.52-.44-.41-1.34-.41-1.34l2.54-3.22c1.34-1.54 6.83-7.23 6.48-8.02-.35-.79-4.12-1.5-4.12-1.5s-1.14-.88.44-1.58c1.58-.7 3.06.49 4.13.35 2.13-.28 3.37-1.09 5.78-.48 3.95 1.02 7.36 3.45 9.13 6.52l.11.18v.22c0 2.43-.49 2.63-1.66 4.02-.92 1.11-1.84 1.84-2.87 2.6 0 0-13.63 15.23-16.61 19.71 0 0-8.34 15.38-8.42 14.14-.35-5.01 5.23-10.25 5.36-12.47zm44.572-182.37c-1.858.91-3.404 2.07-5.48.2l-1.207-.78c2.068-1.49 3.518-2.03 5.177-1.6.692.18 1.8-.97 2.17-1.09.14-.07.292 2.21.216 2.26l-.875.98zm-6.002 5.82c1.887-.72 3.876-1.29 5.884-1.39l8.536-2.83s7.883-1.94 10.452-.33c2.91 1.83-9.18 2.37-9.16 2.37l-9.578 2.34c-1.95.26-3.247 1.39-5.074 1.97-1.43.54-4.365 1.79-5.603 2.37 0 0-.41 0-2.036.05-1.62.06-.66-1.43-.66-1.43.05-.03.16-.08.16-.08 2.3-1.31 4.66-2.29 7.09-3.06zm14.635-10.8l6.833.07s2.218-.83 3.295-.51c1.078.32-.215 2.59-.215 2.59l-2.072.78-3.3-.59s-.662-.85-1.847-.74c-3.02.27-2.7-1.62-2.7-1.62zm36.902 85.97c.145 2.6.145 3.61 2.747 4.92l2.023 1.3s.68-.02 1.59.58c1.275.83 2.185 2.07 2.747 4.34.103.41 1.156 1.44.514 2.1l-1.237 1.8-1.59-2.61c-1.61-2.79-5.31-4.3-7.66-5.79-2.71-1.71-2.02-1.74-3.46-6.08-.55-1.25.29-2.1.29-3.25 0-.36.01-.71.02-1.05.01-.34.02-.67.02-.98 0-1.57-1.62-3.36-3.21-4.41-.52.29-5.53-4.76-5.53-4.76l-2.41-2.91c-.65-3.03-1.44-4.34-1.01-6.65.43-2.32 1.01-1.16 1.01-1.16.57.68.5.72.83 3.18.33 2.46 2.9 7.18 4.96 7.81 3.13.96 8.78 4.73 8.78 8.61 0 .36-.05.75-.1 1.14 1.17 1.17.64 2.35.72 3.84zm-5.06-17.94l8.53 6.8s1.042 2.42 1.046 2.5c.005 0 .02-.01.02-.01l.3 1.27c.223.62 1.236 4.47 2.103 7.65l7.372 5.78 2.457 6.94s.723 3.76 3.614 7.81c3.01 4.22-2.11 1.87-2.75.58-2.46-4.92-5.64-13.89-5.64-13.89l-1.74-.72-1.45-1.88-3.62-2.75c-1.36-.35-2.17-10.27-2.75-12.15-.01-.02-6.36-5.65-6.36-5.65s-1.02-1.3-1.01-1.3c-.02-.06-.15-1.01-.15-1.01zm-1.592-17.79l.768-.26c1.003-.34 1.137.61 1.494 1.05l.49.56s.615 1.65.293 2.19c-.324.54-1.078-.11-1.078-.11l-1.967-3.45zm-46.464 9.89c-1.96-.99-2.74-2.16-3.26-5.11l-.67-6.51.43-3.78c.91 0 2.18 11.6 2.59 12.07l.63 1.33.36.33-.07 1.66zM298 290.63c.518-.672 2.55-.462 6.97-5.206.718-.77 2.91-4.317 4.42-3.02l.918 3.83-.918.59c-.746.25-.88 1.22-1.834 1.94-1.98 1.505-6.25 2.91-9.434 2.952l-.585-.49.465-.6zm5.95 8.92c4.08 2.837 9.54 3.47 9.54 3.47 5.856-.464 10.745 5.42 13.587 8.97 2.577 3.207 10.12 6.365 10.12 6.365l6.938.87c5.605 1.817 5.64 5.93 9.688 12.005 4.137 2.455 4.255 3.56 5.78 7.234 0 0 3.14 8.52 2.748 8.967-2.02 2.32-1.44 1.16-1.44 1.16-2.31-8.1-9.97-15.04-11.42-15.47-1.44-.43-7.66-6.76-10.4-9.4-2.11-.56-3.02-1.34-4.91-2.31-1.96-1.01-4.81-1.47-7.8-3.76s-6.36-11.57-17.2-11.13c-5.36.22-7.33-2.21-11.16-6.52l-.19-.23s.12-2.2.12-2.37c0-.94.15-2.05 1.25-2.71l2.62 1.71 2.17 3.18zm16.478-27.34l-.58-1.3c.006.014 2.024.145 2.024.145 2.11 1.33 4.914 4.486 4.914 6.077 0 10.126 3.615 8.68 8.963 14.32l1.31 3.697 2.15 7.15 3.32 3.47s1.44 4.34-.15 4.34-1.59-3.76-1.59-3.76-2.75-1.74-3.91-3.77-1.16-8.68-3.72-11.62c-1.01-1.16-2.5-2.7-2.5-2.7 1.3.65-2.93-1.31-3.47-3.62-.55-2.34-2.07-7.51-3.47-9.26-.02-.04-3.3-3.15-3.32-3.18zm-58.76 23.91l-.047-2s1.81-2.86 2.62-2.67c.81.19.38 1.86.38 1.86l-.52.573-1.19 1.855-1.24.382zm86.62 6.534c-.237-.86-.846-1.66-1.484-2.51-.944-1.25-3.105-3.528-3.105-5.226v-5.35l-3.18-3.33s4.04.72 4.62 1.88c.57 1.157-.44 6.943 2.31 8.97 2.74 2.023 4.6 4.483 5.35 7.23l5.2 5.79s-.29 1.735-2.46.143c-2.17-1.59-5.49-4.63-7.08-4.05-1.59.58-1.01 1.16-1.01 1.16l-.29 2.32s-1.59.73-1.59-3.18c0-2.31-4.63-4.92-5.21-7.08-.58-2.17.29-6.51-1.59-9.26-1.88-2.74-4.05-4.48-2.32-4.62 1.74-.15 3.04 3.76 3.04 3.76s2.31 6.36 2.17 8.1c-.15 1.73 4.33 5.21 4.33 5.21s3.83 6.2 2.28.06zm-24.464 38.55c-2.312 2.17-5.3 1.645-7.01.36l-.395-.3.09-.485c.09-.45.3-4.93-3.89-1.82-.39 0-6.29.43-8.8.76 0 0-.86-.79.71-1.34.9-.32.87-1.09 5.27-.94 1.8.05 3.33-1.86 5.99-3.33 3.26-1.81 4.1-3.12 7.67-3.96l1.8-.25s3 2.08 4.55 1.95c2.67-.22 3.91-2.22 6.93 1.23 0 0-.93 2.61-2.97 3.54-1.81.82-4.05.94-4.05.94-.87 0-5.6 3.86-5.93 3.61zm2.457 2.314l.22 1.52c-.95.592-1.73 2.17-4.04 3.615-.63.968-.39 2.298-1.08 2.243-1.2-.08.07-2.25-2.31-2.53l-3.54-2.75-.14-2.386c1.58-1.37 2.59 2.653 4.63 2.89 2.33.273 2.36-1.49 2.82-2.603h3.47zm-75.09-.868l-1.81-1.025c-2.57-.75-5.7-.71-5.85 1.892 5.64.574 5.52 1.33 7.45.98 0 0 .27-.405.79-.84l-.58-1.012zm6.65 17.36c1.58 0 4.42 2.26 6.15 3.254l3.9 2.1.15.65-2.38-.146c-1.39.51-5.44-2.886-5.56-2.97l-3.18-2.53.94-.36zm-28.29-80.627c2.6-1.252 4.48-2.86 6.84-1.675l.14.07.1.11c.74.816 1.68 1.33 2.67 1.87 1.36.744 3.97 2.12 5.03 3.853l.12.19-.35 2.05c.01 1.48-.86 1.3 3.34 3.89.22 3.24-2.47 1-3.45 3.02-.62 1.29.89 1.75.43 3.67-.32 1.37-1.4 2.81-1.72 5.72-2.48-.21-2.14 1.43-2.69 2.05-3.52 2.21-7.86 3.35-11.49.74l-.12-.02-.11-.06c-4.18-2.41-15.1-13.26-10.36-15.96-.25-1.29.43-3.34 1.16-4.79l.01-.31 2.72-.61c2.04-3.83 2.48-4.1 7.76-3.77v-.01zm32.16 23.47l2.02-1.723c.46-.43 1.06-3.955 2.24-3.848 1.19.105 1.03 1.51 1.03 1.51v2.495s-2 2.892-3.61 2.785c-1.61-.107-1.68-1.223-1.68-1.223zm29.91-59.047c-.32 5.823 1.94 7.224 1.94 7.224.54 4.633-.23 8.16-2.59 14.34-1.33 3.48-2.69 6.04-6.79 5.82-1.19-.064-1.76 1.1-2.69 1.187-7.6.72-10.76-6.474-14.22-12.833l-3.44-5.93-.16-3.81c-.23-1.134-.48-2.16-.48-3.2 0-3.65.44-5.07 2.59-7.44 1.37-1.512 1.4-3.126 1.94-3.665.54-2.27-.25-2.78-.75-3.24 0 0-1.94.54-2.15.11-.22-.43 1.94-2.81 1.94-2.81l1.23.08-.05 2.18c4.74.75 11.58.62 15.63.21 3.23-.33 3.45-3.02 7.11-2.59l2.51.39 2.13 1.11c-.2.36 4.31 4.96 4.31 6.26 0 .89-1.35 1.87-1.72 1.18-5.82-10.89-12.38-5.97-12.07-3.13.22 1.94 4.01 3.11 3.77 4.2l2.05 4.31zm-2.37-.216c.21-1.62-5.27-1.525-6.18-1.525l-3.41.66v-.864c.85-.64 4.88-2.9 4.83-3.15-1.06-.19-1.96-.46-3.54-.51 0 0-1.43.29-1.95.41-1.54.88-2.08 1.68-2.08 2.6 0 .81.08 1.03 1.35 2.93.65.97 1.23 1.94 1.4 3.13 2.35 1.43 4.98.6 7.26-1.06l2.34-2.6zm-28.31-14.947c-.46-.15 1.72-1.4 1.72-1.4s1.03-1.58 2.13-1.554c1.11.02 1.25.82 1.25.82l-2.13 2.13s-2.5.15-2.96 0zM285.58 292s-1.11-.02-1.62.218c-.92.42-1.34 1.223-1.83 1.293-.755.11-3.018-2.48-3.018-2.48.54-.32-5.856-4.62-5.856-4.62l-.937-1.37 1.66.14c1.57.9 4.75 1.73 5.45 2.73.58.83 2.51 1.82 3.45 2.05l3.13-.43s1.18 3.02 2.69 3.02h-.44c.54.75 1.9.73 2.49.43 1.49-.75 2.84.35 3.86 1.19.82.69.51 3.99.04 4.4l-.49.47-.47.33-1.54.07c-1.04.11-1.99-.26-2.83-.96-.49-.4-1.36-.65-1.4-1.29.21-1.29.75-3.34-.54-3.45-1.3-.11-1.83-1.72-1.83-1.72zm-1.56 42.66c.34.19.76.643.66 1.077-.1.436-.4 2.517-.748 2.714l-1.36-.1v-.73c0-.37.077-3.71 1.44-2.95zm-6.45 6.26c3.042-6.224 1.91.62 3.61.65 2.18.04 5.474.24 6.5 0 3.32-.767 2.68-2.016 5.665-.898l.12.825-2.537 2.656c-4.76-.457-5.05 1.104-10.688.96l-2.71-1.194s-4.45-1.92-4.23-2.64c.21-.72 4.26-.36 4.26-.36zm12.79-11.79c-.186-.07-.033-.64-.033-1.128 0-.667 1.767-1.517 1.995-2.045.234-.544.375-.916.375-1.215 0-.25-.21-.448-.458-.658-3.62-.92-2.82-3.702-2.35-4.155l.11-.11.13-.06c1.55-.7 2.68-.94 3.25-2.64.65-1.95-.52-4.78 1.97-5.17l.79-.13s4.75 1.03-.31 9.85c.2.13 0 .99.14 1.01 1.38.21 4.2-4.56 5.57-5.86l1.01.36c-.79 5.16-1.44 6-4.48 11.28 0 0-.36.91-1.19 1.26-.75.32-4.8.04-6.54-.61zm12.134-3.36c.456-2.91 2.345-3.215 2.345-3.215s1.35-2.82 1.89-2.835c1.36-.04.35 3.768-.87 5.52-.74 1.06-.47 1.45-.61 2.534l-1.1 1.25-1.21.71c-1.03.26-3.67.61-3.63.156.04-.452 1.09-1.17 1.09-1.17l2.07-2.95zm6.946-1.197c-.793-.216-.793-1.08-.793-1.08l1.05-2.685 1.55-.57.793.432s.433 1.59-.144 2.24c-.58.65-1.66 1.88-2.46 1.663zm9.325 12.3c-.073-.728 6.07-3.04 6.07-3.04l1.23-.58 1.944.21-1.3 1.524s-7.88 2.605-7.95 1.88zm-11.315-81.85l.43 4.85s.4 8.285-.322 7.44c-.16-.19-1.4-1.797-1.722-3.56-.53-2.907-.21-6.58-.533-7.55-1.4-4.17-5.495-3.665-5.82-5.606-.32-1.94-1.613-6.36-.86-6.47.753-.106 2.8 4.854 2.8 4.854.42.45 3.165 2.52 3.517 2.52l.577.51 1.94 3.02zm-22.09 21.457c3.34-2.264 7.003-2.265 12.714 2.155l.215 3.45c.08 1.73.68 2.515-.68 4.22l-.15.184-.23.07c-3.88 1.29-5.52-.49-11.34 1.23-2.48-1.65-3.23-5.29-3.45-7.01-.22-1.73-2.05-3.13-2.05-3.13l.75-.65c1.13-.13 2.88-.1 4.2-.54zm5.925-54.02c.505.158 1.44 2.457 1.8 2.91l-.186 1.62c-.64.23-2.02.3-2.95.066l-.52-.13-.08-.53c-.13-.893 1.31-.22 1.81-.81.64-.754-5.02-3.17-4.53-3.02l-6.36-.54s.75-2.26 3.88-1.83c3.12.43 7.11 2.263 7.11 2.263zm-31.465-22.1l.66 1.483v1.584l-1.475.43-.156-1.554.32-1.618.64-.324zm16.27-.86l-1.51-.648.11-2.158h.752l1.292 1.618-.647 1.186zm3.156 26.99l3.846-.465s.97-.324 1.723.54c.754.862-2.91 1.94-2.91 1.94l-6.356-.108-4.64-1.294-1.4-1.4v-1.725h2.37l3.77 2.263 2.26.43 1.32-.18zm-6.928-7.69c-2.377 1.01-4.095 1.08-6.573 1.942-2.113.734-3.6 1.065-6.034 1.94l-1.07-1.295c.54-4.96 6.66-4.52 10.02-5.067l3.88-2.154 2.48-.324.33-.216c.65-.216 1.86-.496 1.89-.503.73-.34 1.5-.487 2.3-.55 2.1-.43 5.63-1.32 6.92-.995 1.3.324 2.16 1.726 2.7 2.588.54.862-2.8.97-2.8.97-1.27.58-3.96 1.102-5.38 1.078-.6-.01-2.67.4-3.23.433-.37.075-2.48.54-5.07 1.725l-.32.43zm-12.176 64.046c.558-.605 1.292-2.02 1.292-2.695 0-.73-.567-2.76-.9-3.77-.315-.94-.65-3.01-.65-3.01 0-.03-.027-.05-.027-.08-.04-1.22 1.36-1.43 1.36-1.43.755 1.08.254 1.17.25 1.5.03.79.485 2.32 1.26 3.25.7.84 2.26.4 2.26 1.62 0 .71-1.01 2.14-1.776 2.98.03.21.06.42.06.61 0 1.62-.22 1-.96 2.27-.71 1.22-1.41 7.31-3.24 8.28 0 0-.74-.05-1.72.65-2.58 1.83.93 4.54-1.83 6.04-1.38.75-2.37-.43-3.88-.75-1.3-.28-3.98 1.08-2.91-.54 1.1-1.65 3.31-.76 3.31-.76-.02.02-.03.04-.05.04l-1.96-2.4h1.94c1.19.33 7.11-2.91 6.04-7.54-.21-.91 1.94-2.48 2.16-4.2h.01zm-3.01-73.072c-.526 1.5-2.557 2.257-4.04 2.808l-.816-.143-.755-.97-.54-.87 1.62-.76c1.18-.86 1.91-2.17 3.4-2.5l.56-.13.29.49c.53.87.44 1.59.29 2.05zm-.378 50.564s1.987 4.18 1.017 4.503c-.97.33-2.56-1.56-2.56-1.56l-.56-2.75s.22-2.04 1.19-2.26c.97-.21.92 2.08.92 2.08zm-17.3 8.922l-2.586.97c-1.507.075-2.586-.11-4.848-1.295-2.726-1.428-3.233-1.725-6.804 1.278l-.54.788-1.815.1c-1.72-.1-3.65.45-4.31 1.08-2.48 2.37-2.05 4.42-2.05 4.42-.71 1.72-1.03.52-2.47 2.27-4.2 5.07-5.06 8.95-.52 14.3l3.76 5.33h-1.29l-5.54-5.28c-2.6-.14-2.02 2.46-2.32 2.16-1.11-1.1.43-2.37 1.3-3.77-3.23-2.48-.44-12.73-2.26-18.87 1.08-2.37 1.11-.62 3.37-2.65l.6-.83 1.74-4.6 4.96-2.15c4.53-4.37 6.04-5.5 10.24-4.42 1.9 0 3.81-.57 6.25-.32 9.81 2.59 14.87 3.45 20.38 12.85l.13.21-.01.24c-.22 4.57.02 5.2 1.52 8.75l.46 1.1-.27 3.07c-.54 0-2.91 0-4.53 1.4-.72.63 2.24 4.29 1.51 4.32-5.17.21-5.43-4.19-5.6-4.64-.54-1.4 6.68-1.72 3.51-4.21l-.46-.11-.11-.46c-.23-6.53-5.32-5.81-7.88-7.93-1.49-1.23-3.44-3.02-3.44-3.02zm-31.677 39.032l-.313-6.315.204-2.205 1.51-3.126 3.77 2.91c.86.97.74 1.162 3.555 3.666l6.053 4.643-.2.52c-.57 1.48-1.542 1.47-2.512 2.71-.94 1.203-1.67 1.994-2.263 3.45-4.3 5.744-3.44 7.763-3.01 9.38.43 1.617-1.18 6.04-1.18 6.04 0-.003 1.08 2.802 1.08 5.82 0 1.614-1.23 3.75-1.4 3.126-.97-3.66-3.03.28-3.99-.75-4.31-4.63-1.08-4.81-1.07-7.87-.07-1.35.65-2.9-1.4-4.96-.1-.1.91-.14 1.08-1.94.37-3.98.18-11.52-.1-11.75-1.26-1.01-.97-3.66.22-3.34zm44.772 41.31c.7.79.7 1.405-.09 1.757-.95.42-1.76-.27-1.76-.27s-1.42-.74-.53-1.23c.89-.5 1.57-1.16 2.37-.27zm-40.73-.263c1.06.85 1.95 1.32 3.68 3.51 4.65 5.88 6.88 6.09 10.71 5.64l1.26-.01-.29 1.12c-.19.73-4.47 4.49-6.07 5.1-1.2 1.76-2.42 4.35-3.86 5.7-1.97 1.84-2.02 3.33-3.08 4.04l-1.31-1.77c-.09-2.27.25-3.91-.23-5.53-.49-1.66-1.03-3.51-1.03-5.25 0-1.95 3.09-2.65 6.16-2.13-.29-2.12-2.38-1.71-3.95-3.08l-3.16-2.28-.81-5.38 1.95.29zm28.08 58.49c1.14 1.49.08 1.87-.23 3.44-.53 2.7-1.42 5.58-2.76 8.94 0 0-3.43 2.46-4.09 1.89-.66-.58 1.36-6.2 1.36-6.2 1.36-8.27 2.88-28.03 3.77-27.5.89.53 1.4 6.58 1.4 6.58.26 4.57.74 9.15.52 12.82zm6.49-6.06c.78 2.53 4.47 3.51 6.02 6.58.26.53 1.01-.17 1.75-.9-.95-2.67-3.85-6.48-6.37-7.97-2.37-.79-1.41 2.28-1.41 2.28zm-2.11-1.41s.52-2.9-.62-4.39c-1.14-1.5-.62-3.08-.62-3.08-.02-.04.35-1.76.35-1.76-.79-2.11-.55-3.62-.7-7.82-.18-4.83.52-4.74 1.93-6.85-.04-.27 1.31-2.9 1.31-2.9s.34-1.2 1.23-.97c0 0 1.05 0 .5 1.41-.61 1.57-1.26 4.65-.07 6.47l.69 1.07c3.78.97 5.18 2.55 8.34 2.73 1.23-.96 2.56-4 3.51-5.19 1.31-1.64 1.58-2.38 2.11-3.48l1.45-.59.29 6.26c-2.64 3.16-2.69 8.31-4.3 11.33 0 0-2.2 9.93-2.11 11.42.09 1.49-1.61 6.49-2.36 11.52l-.07.43-.41.17c-1 .43-1.12 3.81-1.12 5.26 0 0-1.23 3.34-1.84 2.28-.61-1.06-.5-3.61-.5-3.61-.03-2.02-.82-3.86-1.88-5.97-.35-.7 1.67-1.94-.26-2.11-1.93-.18-1.93 2.55-2.55 2.28-.61-.27-.61-3.78-.61-3.78-1.46-1.62-1.43-3.92-1.31-5.89l-.35-3.34-.09-.97zm19.66 18.7s-4.75 4.67-5.27 3.74c-.52-.93.25-2.21.25-2.21.54-4.85.63-9.35 2.74-12.69.89-5.09 1.58-10.36 1.84-14.58 1.58-1.93 2.59-6.05 3.86-9.05l1.84-1.14c-.61 3.46-1.41 7.5-1.58 11.41-.42 9.51-2.2 18.27-3.69 24.5zm10.09-21.43c1.23 7.46-1.23 18.79-1.23 18.79s-3.78 6.06-4.04 4.48c-.27-1.58.52-3.4.52-4.66 0-2.43.17-5.62.84-7.75-.17-1.15.21-.87.21-1.92 0-3.88.94-7.76 2.02-11.24 0 0 1.01-4.86 1.91-5.59.9-.74 1.55.28 1.55.28-.31 4.51-2.38 4.09-1.8 7.59zm-4.16-46.82l2.02.5 3.54.07c3.83.72 3.17 1.53 6.87 3.11 2.39 1.02 8.56 3.84 11.18 4.34l1.67 1.59 1.23 3.47c2.24 2.31 3.69 4.69 1.81 6.22-.51 2.17-5.59 1.91-8.03 1.73-1.95-.15-3.25-.63-4.27-.44l-3.55.07c-4.26-.29-1.29 2.81-6.5.65l-5.21-1.01s-1.23-.58-2.97-1.01l-3.6-1.4-.66-.64s.94-1.43 2.67-.64l3.4 1.38 3.54.5c.92-.23-.53-1.82.51-2.1 6.43-1.74.87-2.1-.65-2.53-4.63-1.23-5.24-3.05-8.1-4.27-2.53-1.08-3.24-.93-5.49-2.89l-1.37-2.39 1.3.14c1.14.16 4.63 3.16 6.36 3.76 7.73 2.68 10.62 4.48 11.56 3.11-.4-1.15-2.46-2.53-7.3-3.98 0 0-4.91-1.09-9.76-5.79l-2.96.29-.14-1.88c2.02-.15 5.06-1.16 9.68 2.82.63.54 1.23-.15 1.88-.51-.65-2.02 1.3-2.31 1.3-2.31zm7.95 7.01c.5-1.23-4.77-4.63-7.95-3.62-1.79.57 7.44 4.84 7.95 3.61zm25.69 47.52c.92 1.23.03 2.42 1.17 5.85 1.97 5.93 8.05 11.41 6.46 11.89-2.02.61-5.62-5.1-5.62-5.1s-2.07-5.82-5.18-11.95c-1.87-3.69-4.46-6.63-6.23-10.89-2.81-6.77-4.47-15.82-3.69-15.82.79 0 2.37 4.21 2.37 4.21s3.77 12.56 10.71 21.78zm-3.25 20.15l-.61.13c-5.26 1.2-8.87.71-11.59-2.63l-1.93-4.71c-.45-1.95-1.79-8.89-1.79-8.89l-.07-.32c-.81-4.52-1.76-5.35-1.66-9.72.14-6.15.18-23.09.18-23.09 2.69.99 2.78 1.61 3.25 3.86.33 1.65.61 4.65 1.66 7.55 0 0 1.4 10.98 6.84 19.5 3.63 5.69 11.23 11.68 5.71 17.68l-.01.62zm21.46-9.56c-3.93 1.22-4.83 4.6-6.02 4.71-1.19.11-2.64-3.05-2.64-3.05-3.5-3.07-1.85-1.99-4.83-7.26 0 0-2.12-4.27-2.11-4.22-2.28-6.15-8.53-14.18-8.95-21.12l-.18-2.77 1.61 2.26c1.92 2.72 2.44 4.42 3.56 7.39 1.62 4.34 3.36 9.5 7.1 12.73 1.62-.51 1.85-4.78 1.85-6.59 0-.62-.04-1.3-.1-2.06-.05-.71-.11-1.44-.11-2.11 0-.49.03-.93.11-1.32-.37-6.59-2.35-8.49-4.47-14.45-1.38-3.9-2.48-10.11-3.33-14.14-.28-.28-4.92-5.53-6.41-6.85-.39-.35-7.11-2.72-7.11-2.72-.88-1.23 7.68-3.24 10.88.7 3.07 3.77 3.9-1.07 2.98-3.6-.74-2.03-2.98-1.58-2.28-2.2.3-.26 1.06-1.49 5.09 1.49 7.2-2.81 7.99-1.4 7.99-1.4s4.39 4.66 3.43 5.18c-.97.52-7.23-2.19-9.75-1.67-3.87.79.27 1.78-.44 2.28-.88.61-2.64 1.31-1.49 2.54 1.14 1.23 4.74 2.39 4.74 4.3 0 1.07-.18 3.07.53 4.39.48.91 1.54 1.39.96 2.11-3.51 4.39-.92 4.79 1.13 5.95l.88 1.34s.17 5.71.61 6.32c.44.61-.18 2.54.08 7.81.26 12.82-4.91 16.69-3.19 18.98 1.06 1.4 2.33 1.2 3.8 1.05 2.02-3.34 4.57-3.21 4.57-6.76 0 0 .97-5.53.97-5.54-1.17-.35-.93-2.03-.35-3.08.48-.88 1.02-5.04 1.02-5.04l.12-13.06c.96-2.46 1.14-2.46.61-3.17-4.28-5.73-2.54-6.43-3.42-6.94-2.98-1.76-4.52-3.44-5.7-6.16 0 0-4.22-2.28-2.9-2.45 1.32-.18 3.96.42 3.96.42 1.35.55 2.25 1.67 3.33 2.47 3.78 1.58 6.95 7.41 10.36 12.91 1.31 4.55 2.55 11.38 2.55 16.95 0 2.56.7 5.53-.3 8.04-3.7 4.06-5.95 8.46-7.07 12.33-.31 1.82-.86 3.51-1.7 4.97zm35.7-4.49c0 2.16-2.93 3.78-3.14 3.65-1.39.49-.58-8.31-2.64-8.02-2.13.3-2.43 6.29-3.99 7.6l-.15.2-1.14 5.69c-1.51 1.07-1.93 1.83-3.61 2.76l-1.46.89s-1.02.71-1.93.2c-.91-.51 2.23-8.63 4.36-9.64.46-.22-.29-1.24.61-2.74.87-1.46 5.88-11.81 5.88-13.5 0-.15.79-2.88.79-2.88 1.23-4.53 1.53-5.41 2.45-9.29.94-4.01 1.78-8.89 3.95-12.48l1.62-2.95h.71c.03.68-.51 2.06-.51 2.74 0 3.49-.8 6.82-1.83 10.45-1.72 12.58 0 27.27 0 27.3zm7.61-9.03s-.41 1.11.5 4.16c.91 3.04-1.42 10.55-1.42 10.55s.71 3.24-1.11 3.14c-2.63-.15-.31-.71-3.25-1.02-2.94-.31 1.32-4.47 1.83-5.48.51-1.02.3-2.64.3-2.64s1.21-1.73.61-3.15c-.61-1.42-1.42-4.77-1.42-4.77l-.01-4.38c-1.31-8.31 1.82-24.2 2.13-26.27.61-3.96-2.03-8.42-1.22-11.77.33-1.37 2.13-.61 2.63-1.12.51-.51-1.11-3.65-1.11-3.65l-1.22-.21c-.45.17-3.25 3.55-2.44 5.48-.87 1.31-1.95.09-2.43.61 0 0-1.2.95-1.22.91-3.95 4.77-4.93 13.32-6.69 19.07-2.06 6.77-3.08 16.45-10.34 28.51 0 0-5.88 6.15-6.97 7.82-1.02 1.55-2.06 3.16-3.79 4.24l-1.69 1.05.5-1.92c.72-2.78 2.81-5.05 5.03-7.47 1.86-2.04 5.78-7.88 6.91-10.33 3.1-7.36 2.37-8.89 4.76-16.44 3.84-12.1 3.25-23.44 12.07-30.85l.43-2.14c-1.71-1.44-.68-4-1.88-5.71-1.55-2.2-2.96-4.92-5.2-5.93-.43.44-2.02-2.93-2.02-1.96 0 .07-.95.58-.94.65-.15.22.14.73.14.73.97.88 1.67 2.88 2.06 4.03 0 0 .76 1.05.44 1.33-.33.29-1.37-.3-1.37-.3-.99-.22-2.5-5.28-5.95-3.99-.33.17 0 1.54 0 1.83 0 .25 3.37 3.6 3.64 4.23 0 0 1.69 4.09.82 3.94-.5.43-3.97-6.37-7.23-5.57-2.11.52 7.49 9.96 6.14 10.63-2.53-.51-4.62-5.64-8.82-6.51-3.61.51 6.28 9.51 4.05 10.42-1.08.29-4.04-4.94-7.22-6.15-3.11.07 7.01 9.33 5.64 11.14-.66.02-8.45-9.04-9.32-7.23-1.88 1.23 8.67 13.02 6.8 15.76-1.59 1.04-2.15-2.87-3.62-4.99-.74-1.07-2.1-.65-3.11-4.05-.76-1.13-1.71-1.21-2.53-2.1-2.98-3.2-5.86-5.72-5.86-5.72l2.02-2.39 4.19-5.97c2.83-3.07 6.36-5.93 8.38-9.51l4.84-.87c.51-.73-.36-1.45-3.64-1.89l-.1-.39.25-.31c1.68-.31 2.36-.08 4.14.12 1.3.14-1.09 1.74.79 2.03 1.88.29 3.76-3.11 2.46-3.4-1.3-.29-2.62-.51-3.11-1.45-1.49-.66-1.62-2.55-2.53-3.83-4.53-5.71-11.18-4.84-11.18-4.84-3.65-4.06-4.66-1.22-5.27-2.94-.6-1.73-5.8-8.78-5.8-8.78l-1.38-.87c-.2-.14-4.79-.39-4.99-.51-.26.04-4.92-.72-8.02-1.59l-2.17-1.59-.07-.07-4.56-2.97c-1.77 0-2.87-2.31-4.92-1.59-1.63.57-4.29 1.42-6 1.7l.01.11c-2.69-.07-2.16 1.16-2.11 1.23.38 0 2.17 1.44 2.17 1.44l-1.16 5.64c-3.9 1.74-4.48 6.65-8.73 12.49l-.92 1.27-.1.07c-5.48 4.06-9.49 2.67-14.45.4l-1.69-.77h-.09l-3.31-3.72c-4.25-3.81-6.62-7.26-9.6-6.27-.4.63-.63 1.28-.63 1.96 0 .99 1.65 3.98.49 6.43.33.19 1.16 1.43 1.16 1.43.81.4 3.4.94 4.04 1.9l-.87 2.17-.29 1.15c-7.08.58-6.07 2.17-9.25 1.59-.95-.48-3.9-2.16-4.77-3.03l-.14-1.3 1.39-.21c1.17-.4 2.28-.9 2.49-2.11.12-.28.17-.55.17-.81 0-1.33-1.51-1.94-2.61-2.51-2.21.08-4.93-1.7-6.33-2.91-1.82-1.58-3-2.49-5.04-.63 1.14 2 2.3 4.14 2.99 6.43 1.72 5.7.83 10.11 7.95 9.84l7.09 1.45c4.26-.5 6.89-2.76 10.12.29l1.15 2.31s-1.16 1.3-.73 3.9c.26 1.57-3.84.72-5.5.29-2.65-.69-6.88-.42-9.1 1.44l-1.15-1.16h-4.62c-6.38-.01-9.32-1.46-12-8.97-4.66-7.94-1.44-16.05.87-17.79l1.56-5.13.13-.12c6.39-5.45 11.2-1.1 11.88-2.12 1.73-2.61 4.71-1.92 8.08-4.7l.16-.13.21-.04c7.74-2.08 10.29 1.64 13.96 5.3 3.23 3.22 5.63 8.39 11.27 8.1 2.05-1.4 4.26-4.98 5.2-7.24 1.44-3.47 6.07-5.93.58-6.37 0-.43 1.45-.87 1.45-.87s-.72-.87-2.03-2.32c-.53-2.13 4.08-6.09 6.07-6.94 1.01.15 4.77 1.16 4.77 1.16.36.72 2.17 1.15 2.6 2.31l-.29 1.3c-6.9 1.74-6.5 1.59-8.24 2.89-1.3 1.45.72 1.3.72 1.3 2.95-.38 2.46-.03 5.21-1.01l5.06-2.75 6.36 1.3 7.37 5.5-.44-.29 1.09.22c1.73.15 3.22.38 4.64 1.11.66-.01 9.65 2.11 9.88 3.02l1.08 2.32s3.61 6.29 7.51 7.52c3.91 1.23 5.42.44 7.66 1.81s6.29 6.44 6.29 6.44L346 336c4.26 4.99 11.56 10.63 12.14 14.68l2.22.23c1.05.24 1.02.55 1.63 1.46l1.12 1.83 2.84 1.92c-.61 1.9-.1.71-1.01 1.32l-.1.3.3 1.32c.21.91-1.13 2.42-.81 3.85.23 1 1.29 2.25 1.83 2.94l.65 2.14.06.6c.67 2.26.34 4.78-.41 6.29-1.83 3.65-4.664 17.86-3.55 23.44l.81 1.82 1.22 2.13zm4.86-360.7l-1.48 1.14-2-.67-.07-1.97 1.37-1.03 1.48.8s.8.91.68 1.71zM349.05 99l-3.62-2.374-1.75-1.057-.26-2.64h1.213l1.78 2.07 14.39 12.22s1.03 3.59-2.4.57c-2.852-2.52-7.307-8-9.362-8.8zm-5.257-16l-2.17.8-3.31-1.257-.454-1.83 2.97-.23 1.6.227 1.48 1.03m.8 6.4l-3.09-.687-4.11.57-2.63-1.256v-1.03l3.54.23 5.59-.115s1.83 1.713.69 2.285zm24.2 90.28v-6.515s.91-2.514.68-4.113c-.23-1.6-.91-10.515-.91-10.515l.23-2.058.23-5.49c-.49-1.59-.45-4.46.8-6.29l2.06 4v4l-.68 6.28-.68 3.65.68 11.31.12 6.85V322.5s-1.83 3.317-2.63 1.03c-.8-2.285 0-7.885 0-7.885l.11-45.37v-91.87zm4.19-63.16l.1.127.04.165c.38 1.396.18 2.864-.55 4.025-.67 1.08-1.75 1.8-3.02 2.033l-.28.05-.24-.134c-1.51-.825-2.59-2.44-2.74-4.12-.14-1.466.42-2.79 1.57-3.732l.17-.147.23-.025c2.01-.253 3.5.304 4.72 1.76v-.003zm-5.84-44.345l.81-2.58.34 2.486c-.76 5.04-.37 8.53-.27 12.71.07 2.82.8 14.03-1.19 14.42-1.98.4-1.63-6.49-1.63-6.49.44-6.73-.22-13.63 1.94-20.53zm-34.8-31.965l-.15-.46.34-.345c.97-.974 3.09-.623 4.29-.803 1.71-.257 2.36-.528 2.77-1.72l-1.58-5.16.97-2h.79l1.54-.004c.67.34.85 1.058.99 1.58l.16.47-.21 1.013-.26 1.33c-.26 1.75-3.7 4.92 3.57 6.35l1.32-.33c1.68.25 3.57.53 4.45 2.48l.2.42-.28.38c-2.22 3.02-4.57 1.82-6.29.95-1.82-.92-2.91-1.37-4.3.17l-.37.35-2.16-.58c-2.25-.54-4.81-1.16-5.77-4.05zm7.75 33.073c-.71-.238-1.15-.596-1.34-1.097-.29-.753.13-1.465.46-2.033l.35-.732.19-.45.28-.11c1.67-.71 2.35.6 2.64 1.16l.24.4.34.79-.14.36c-.36.93-.91 2.33-3.01 1.73m3.06-12.29c-1.29.19-3.04.21-4.03-.74-.32-.31-.69-.85-.69-1.69 0-.07.02-.15.02-.22-.08-.29-.16-.57-.16-.82 0-1.42 1.27-2.08 2.1-2.5l1.2-.79.37-.28h.24c.9 0 1.46.65 1.87 1.13l.47.49.34.46.06 1.51c.12 1.11.29 2.8-1.77 3.47zm-17.41 64.18l-.23.69c-.18.99-.33 3.04-1.82 3.77-1.81.61-2.72-.17-3.55-1.01l-.91-.81-.31-.27-.04-.29c-.21-1.66 1.09-2.54 2.14-3.24l1.03-.79.2-.16 1.67-.15c1.72-.49 1.15.66 1.85 1.42l.36.38-.38.49zm-44.98-1.65c2.06-.4 3.67.62 4.12 2.61l.03.14-.02.15c-.21 1.46-1.12 1.94-2.01 2.77l-.7.42-.38-.05c-1.46-.21-1.74.65-3.11-1.21l-.78-.82-.04-.24c-.31-1.86 1.03-3.4 2.89-3.76zm52.29-18.46l-.57 1.37-1.71 2.18c-2.4 2.06-3.54 3.77-6.28 5.83-.74.56-.76.58-1.37 1.03 0 0-.68 3.31-2.97.46-2.28-2.86-13.59-15.77-13.59-15.77s-1.6 0-1.82-1.02c-.54-2.46-1.83-2.51-1.83-2.51-1.37.35-1.52.71-1.6.8l-4.91 5.49s-3.77 3.2-7.53 8.34c-1.71 2.33-3.43 4.57-3.43 4.57s-1.48.69-2.51 0c-1.03-.68-.69-.8-.69-.8l.22.57-5.91-7.8-2.53-2.53-4.35-4.06.12.35-2.51-3.89-2.2-2.4c-2.18-3.19-4.56-.35-4.79.11-.23.46-6.74 7.08-8.91 9.94s-5.48 9.03-6.97 7.88c-1.36-1.04 5.02-7.66 5.02-7.66s9.01-10.04 10.38-11.64c1.37-1.6 1.6.8 1.6.8l2.61-.55 1.06-1.17s1.66.55 1.69.58l1.83 3.08 2.28 2.53v.1l4.21 4.88 2.53 2.53 6.97 6.07h1.03l9.02-11.2 4.34-4.91 5.71-1.49s.69-.23 1.49 1.6l8.79 9.83s-.46 1.6 1.82 2.29c2.28.69 2.51 1.72 3.43 2.86.92 1.15 2.17 2.4 3.31 1.26 0 0 1.37-1.26 2.51-2.29.59-.59 5.48-6.86 5.48-6.86l.69-.45-.58.69 1.49-2.29 5.25-5.83s.69-1.26 1.95 0-4.57 6.86-4.57 6.86l-1.59 1.6-1.14.69zm-70.24-50.33l-.15.02-.15-.04c-1.9-.54-2.86-2.38-3.09-3.79l.15-.5.39-1.1c.17-.78.09-1.6 1.68-1.8l.26.01h1.59c.99.34 2.6 1.08 3.35 2.38l.1.18v.22c0 2.16-1.81 3.22-4.14 4.44v.01zm3.77 8.58l-1.18 2.3-.37.24c-1.22.76-2.23 1-3.48.23-1.02-.63-1.55-1.67-1.44-2.85l.01-.12.05-.12c.67-1.61 2.21-2.52 3.74-2.21 1.35.27 2.68 1.01 2.68 2.52h.01zm-7.04 13.85c.39-1.16 1.84-1.29 2.56-1.41.41-.06 4.16-.26 4.66.46.18.29 1.82.12 1.61.84l-1.48.76-.06.1c-1.34 2.09-3.23 1.34-4.49.84L260.8 77l-1.012-.25-.12-.848h-.002zm-1.52 7.66c.43-1.08 1.72-.42 2.84-.49 1.39-.08 5.82.32 6.57 1.67l.33.61-.56.42c-1.71.19-6.16-.31-7.17-.72l-1.29-.38-1.06-.27.32-.82zm1.88-58.64l.36-3.23c1.37-.55 1.17-1.29 1.55-.96.92.79 1.91.24 1.84 6.15v1.45l1.98 1.23-3.1-.12c-.9-.49-1.82-1.8-2.03-2.75l-.6-1.79zm-2.86 10.74l-.24-2.39c2.26-.91 4.9-.36 6.92.12 2.05.48 7.76-.6 7.04 1.55 0 0 .05 2.49-1.67 2.99-.78.5-1.55.72-6.32-1.31-1.67-.26-2.8.58-3.7.36l-2.02-1.31zm-13.55 86.16l.16.19.02.24c.13 1.74-.33 3.07-1.71 3.91-1.27.78-2.01.73-3.41-.14l-.19-.12-.1-.2c-1.09-2.18-.55-4.26.94-5.22 1.39-.89 2.76-.61 4.31 1.33zm-14.97-65.39c-.62 1.31-1.56 2.44-2.77 2.75l-.58.15c-1.34.27-2.76-1.18-3.32-1.76l-.38-.39-.05-.2c-.05-2.09 1.03-3.52 2.55-5.04l.27-.02.99-.02c.89-.08 2.51.5 3.18 2.04l-.01-.01v.02h-.01c.24.53.36 1.02.36 1.48 0 .36-.08.7-.23 1.02h.01zm-1.11 13.76c-.47.22-.77.37-.9.67l-.16.39-.41.08c-1.51.31-3.56-1.71-4.32-2.97l-.19-.31.11-.34c.45-1.35 1.52-3.04 3.06-3.36.71-.15 1.79-.07 2.91 1.18l.1.11.05.13c.78 1.95.43 4.12-.27 4.44zm-8.81-32.06l-.1-.3.13-.28c.71-1.57 2.59-.4 3.42-.35.97.07.63-.99.82-1.93.06-.62-1.15-1.76.29-4.39.84-1.55-1.92-1.77.94-3.27 1.16-.29 1.25.43 1.8 1l.41.43.05.21c.41 1.64-.26 2.55-.94 4.03-.48 1.04-1.06 2.51-.84 3.11.15.43.79.83 1.76 1.15l2.78.08c1.72-.11 3.14.26 4.91 2.34l.29.34-.15.42c-.37 1.13-1.14 1.7-2.26 1.96-.85.2-1.66-.03-2.28-.64-1.18-1.18-2.56-.67-4.34-.88-1.31-.16-3.94.83-6.71-3.03zm2.46 40.35l.8-.54c2.25.23 5.29-.88 6.81.14l.69 1.72s-2.98 2.44-1.56 2.67c2.58.42 3.16 2.86-2.33 1.9-.61-.1-5.25-1.1-5.25-2.05 0-.95 1.86-.92 1.86-.92l-1.02-2.91zm.99 14.23c.23.46-8.22 10.63-8.22 10.63-1.03 2.86-3.89 4.92-4.69 5.6-.8.69-1.02-.11-1.02-.11s5.71-7.88 6.73-9.03c1.02-1.14 6.51-8 6.51-8l1.37.46 1.03-.81 1.36.81 5.71 6.51h-.11l12.56 13.85-.02.02.1.07-.77 1.49s-.68-.22-.69-.23c-.1-.06-1.33-1.3-1.33-1.3-3.01-3.15-9.29-10.23-12.15-13.54h-.11l-5.72-6.59m83.74 137.38c-4.09-2.65-9.2-10.33-11.08-15.48l-.06-.17.02-.17c.67-7.13 1.84-13.6 6.36-19.26.51-1.88-.94-3.38-2.81-3.96-3.43.13-5.24-1.12-7.31 1.21-1.85 2.07 1.94 4.1-3.88 3.45-1.32.33-2.6 2.21-3.45 1.72-1.43-.83-4.01.83-4.42-.86-.36-1.5.21-6.11-.73-6.62-.68-.36-2.82-1.4-4.12-.93-1.77.97-2.96-.45-3.23 1.41-.87 5.82 1.83 6.68-1.51 7.98l-.66.5-.22-.07c-.85.53-3.17.14-3.97.42-.82.3-.9.79-2.11.55l-.47-.08-.35-1.2c-.53-1.85-.31-2.49-1.28-4.22-1.19-1.61-5.61-1.61-6.58.87 0 .37.1 4.85.1 4.85s1.62 3.13-1.61 3.67c-.95.16.35 1.41-.54 1.62-2.37.54-4.84 3.89-5.49 3.99-.64.11.46-3.32.37-3.5-.31-.59-1.52-1.22-2.55-1.25-3.68-.92-7.09 1.75-9.95 4.37-.15.2-.23.41-.23.62 0 .08.01.16.02.24.22.89 1.38 1.83 2.39 2.35 10.49.09 13.26 8.86 18.27 14.7l.76 1.99-.04.28c-1.9 3.04-.22 5.52-1.39 9.33l-.85 7.64s-4.11-2.57-7.55-6.34c-3-3.27-5.69-3.52-6.04-4.63-1.4-4.53-8.34-13.75-7.87-21.67.21-3.56-.76-7.72-.22-11.53 2.69-18.87 15.35-33.5 34.58-36.66 8.15-.74 13.73.58 20.15 2.8 2.84.98 4.78 1.27 7.97 2.05l5.39 3.45s1.9 1.39 3.88 2.58c3.44 2.06 7.7 8.77 9.59 12.72 0 9.7 3.66 10.89 4.2 18.76.36 5.26-2.29 12.47-4.31 16.93.08.34-.76-.01-.86 1.18-.17 2.03-.82 4.1-1.83 5.07-2.69 2.59-4.53-.65-4.53-.65v.01zm6.25 4.53c0 .06 1.44-2.53 1.94-2.26 4.95-6.79 7.54-17.91 7.54-27.6 0-7.41-1.29-10.46-3.66-16.92-4.61-8.67-9.65-13.84-17.86-18.84l-2.79-1.7c-.27-.07-7.69-3.07-7.69-3.07-8.51-2.32-18.06-5.66-27.26-2.37-13.92 3.69-29.18 14.53-32.76 29.86-5.23 15.49-2.41 34.97 7.98 47.44 2.14 3.03 5.28 5.76 8.62 7.12 3.45 1.4 5.06 3.78 5.06 3.78l.64 1.29c.38 3.22.78.61-.76 2.92l-1.04 4.55-1 .08c-10.54-6.4-26.29-7.87-33.08-.76-1.39.77-2.97.58-3.77 1.62-.19.19-3.67 4.85-4.42 4.96-.75.11-1.18-5.39-1.18-5.39 2.48-4.42.43-28.25.43-39.84 0-21.12-.33-34.5-.33-56.33 0-3.38-.22-7.04-.22-10.46 0 0 .2-11.91-.22-13.15-.4-1.17-.93-.88-1.73-2.27-.51-.88-.03-2.06.94-2.81l.22-.16h.27c1.38 0 5.53.21 6.42-1.95.57-2.85-2.39-4.79-3.77-4.91h-1.6l-.68-.8c.68-.69 1.8-1.45 2.22-1.92l.58-.58c-.12-.49-.41-3.1-.41-3.1-.36-1.35-.8-.64-.8-2.17 0-.46-.3-1.04-.22-1.53l.03-.2.11-.15c.67-.92 2.01-1.2 2.7-2.12.8-2.74 5.71-8.91 9.71-13.48l1.83-1.15c2.84.54 4.17 2.97 6.17 6.4l3.89 3.68.22.32-1.49 2.86c1.03 11.66-1.14 17.6 1.94 18.74l1.54.9-.16.59c-.34 1.16.44 3.67 1.7 5.37 1.38 1.83 2.75 0 8.57 1.37 1.19.28 1.26-3.2 1.03-5.6.79-.29-.74-.01-.45-1.14.34-1.37 4.74-1.23 4.72-1.59-.02-.34.87-1.27.19-2.87-.35-.82-3.56.7-2.97.12.4-.39 2.63-3.08 1.53-6.3l-.09-.09-.06-.11c-.09-.18-2.18-4.81-2.18-4.81 5.94-6.86 7.88-9.94 12.55-15.67l2.49-2.1h.29l3.17.85s9.36 7.61 9.71 11.43c.11 1.26.73 7.4 1.37 5.6l-2.74.69-1.14 2.05c-1.49 2.97-2.63 2.7-2.63 5.83 0 .39 1.52 2.78 1.6 3.2.63 1.34.94 2.35 1.94 3.43 1.53 1.68 2.71.73 2.71 3.17 0 .41-.09.87-.19 1.33.13.24.33 1.67.33 1.67 1.49 3.88 4.44 3.55 6 3.71l1.06-.15c2.39-.32 3.53-4.15 4.81-6.34.39-2.17.47-3.51 2.64-5.68.69-.69.23-5.26.23-7.89 0-1.47-1.7-1.93-2.51-3.43-.35-.92 2.01-3.79 2.52-4.34 2.04-2.2 3.43-3.77 5.37-6.05 1.65-1.95 3.2-4.04 3.2-4.04 2.74.04 3.88-1.96 5.7-1.9 3.08.09 5.65 5.84 8 8.57l-2.26-.14-.07.38c-.02.11-.03.21-.03.31 0 .82.63 1.4 1.6 2.22l2.96 2.67.36.35-.4.53c-2.27 2.35-2.16 2.35-1.82 4.63 0 0-2.14 9.7-2.18 10.21.18.33.46.42 1.49.36 1-.05 2.84-1.05 3.6.47l.12.25-.05.26c-.08.4 0 .8-.12 1.15-1.15 3.64 2.27 4.94 3.87 5.81 2.17-.57 6.97-1.48 7.77-4.22-.18-.46-1.48-1.89-1.48-2.28 0-1.55.7.1 1.63-.71.98-.85 1.59-1.43 1.59-2.24 0-.26-.07-.55-.21-.89l-.22-.51.41-.38c1.39-1.27 2.96-4.17 2.96-5.42 0-1-.28-1.9-.54-2.54-1.46-1.73-2.94-3.01-3.16-5.04l-.01-.41s4.5-7.32 9.06-9.61c2.16-1.08 0-4.57 5.71-5.71 0 0-.11-.99 1.14-1.14 1.94-.22 4.68 4.23 4.68 4.23l11.08 9.72c.36 1.71-.95 3.12-1.14 4.69-.28 2.3 0 7.89 3.89 8 0 0 5.94.23 5.71 1.6-.23 1.37-6.4 1.03-6.4 1.03l-2.3-2.5c-1.08-.3-3.98.14-4.81 2.22.96 3.36 2.26 4.25 5.62 4.62 0 0 .7.32.91.35.8.12.86.35 1.71.35l.1 1.28c.47 8.09 1.05 9.35.13 15.86l.57 9.71V211c.11 32.172 1.17 69.84-.07 101.01l-.05 1.302-1.14-.65c-6.45-3.7-7.97-12.91-10.15-19.16-2.91-8.36-3.06-12.493-13.08-12.82l-.96.5-4.57-2.765c-1.37-1.836-.76-2.3-.34-4.57.62-3.39.2-6.637-3.86-7.8-1.23-.52-3.07-1.42-4.48-1.64-3.11-.49-7.05-.52-8.69-4.16l-.58-7.165c1.51-3.99-7.22-8.95-8.6-10.49-2.5-2.79 3.09-7.42 3.09-7.42l1.42-.75zM204.47 402.48c-.324-1.996-.79-4.493-.44-6.5.656-3.733 3.52-8.086 3.777-15.28.05-1.532.3-3.05.23-3.8-.1-2.795-.97-3.01-1.37-4.63-.17-.68-.55-1.28-.53-1.98l-.025-3.945 1.54-.32c1.52 4.91 3.833 7.31 4.45 11.79.78 5.68-3.6 10.894-5.62 18.008-.7 1.93.44 6.41.44 6.41s-.52 4.92-1.75 3.51c-.46-.53-.46-1.75-.704-3.25h.006zm-8.26-361.81v-3.48l.54-.178c1.004-.336 1.675.5 2.038.95l.4.5c.37.738-.717 2.203-.717 2.203h-2.27zm-1.553 52.91c.16-.11.955-4.655 1.075-6.924.19-3.615 1.48-10.816 1.67-15.76.14-1.11.43-3.008.83-4.06.97-1.45.41-1.823.59 1.552-.37 1.16 0 1.6-.28 2.71-.12.88-.19 1.79-.19 2.71 0 1.66.14 3.37.29 5.05.14 1.68.23 3.93-.31 5.4-1.67 4.56 1.21 7.5 0 9.43l-1.79 2.03-1.91-2.15zm6.295 27.38l-.21-.03-1.34-.39c-1.26-.3-2.84-.67-3.23-2.46-.44-1.46-.06-2.823 1.03-3.75 1.27-1.07 3.24-1.33 4.69-.62 1.17.58 1.8 1.72 1.73 3.12l-.02.258-.16.2c-.17.2-.21.65-.25 1.1-.08.9-.23 2.57-2.278 2.57l.004-.008zM316.72 88.82c.02-.12.46-1.572.34-1.813-.253-.536-.782-1.002-1.17-1.157l-2.54-.005c-1.623.066-.787-.402-2.163-1.01l-.508-.228.04-.563c.1-1.198.17-2.198.17-2.767 0-.334 1.46-2.33 1.46-2.33.39-2.83-1.3-2.638-2.63-2.75 0 0-2.03-.51-2.03-1.995 0-1.486 2.17-4.915 2.74-6.857.76-2.582 2.23-3.14 2.23-4.8 0-1.31-.63-2.49-2.17-3.667l-.35-.267.04-.45c.14-1.43 1.12-2.56 1.86-3.45.5-.59.93-1.17 1.18-1.8l-.28-1.5c-.4-2.41-.33-4.59-2.2-5.6l-1.33-.93 6.35-3.38c1.84-1.65 1.88-1.1 2.9-3.52.31-.67.45-1.3.45-1.91 0-2.51-3.4-5.61-5.88-7.72 0 0-3.7-.98-3.86-1.77l-.09-.49.4-.3c.6-.45.79-1.81.79-2.7 0-1.01-.25-2.05-.4-2.7-2.06-2.51-4.67-3.97-8.31-4.68-4.6.28-6.89 1.64-7.24 4.23-1 2.47-.47 3.2-.47 4.05 0 2.47 1.45 1.6-.34 2.84-1.85 1.28-5.44-.95-5.52 1.5-.04.31-.05.6-.05.89 0 2.77-3.88 8.67 3.55 12.2.6 1.11 1.42 1.27 2.83 1.45l2.27.53s4 .98 2.67 2.44c-1.32 1.46-4.76 0-4.76 0-1.94 1.17-2.23.72-2.23 3.17 0 .91.16 1.85.49 2.74.12.59.52.86 1.16 1.27.64.41 3.48 2.51 3.48 3.67 0 .31-1.87.17-2.02.56l-.09.24-.21.14c-2.67 1.84-2.82 5.06-2.82 7.81v.81l.84 1.27c.52.89 5.73 2.75 3.89 4.26l-2.09.2-.82.7c-1.46 1.26-.96.75-.96 1.97 0 .08.01.16.01.25.81 2.71 4.38.88 4.38 2.18 0 1.8-4.01.13-4.23.93l.13 2.12 1.32 2.78c-1.24.82-4.51.65-5.58.83-1.15.19-2.06.46-2.88 1.29l.16.31c.36.72-.09 2.13.62 2.6 3.84.93 5.95.27 7.94.14 1.35-.09-.38-1.9 1.58-3.18 2.17-1.41 7.05-.89 9.39.93 0 0 .61 2.32.63 2.37l4 .67c3.53.46 3.17.4 5.82 0zm-16.88-65.452c.48-.963 1.56-1.495 3.022-1.495l.76.04.537 1.68c.08 1.365.26 5.03.39 6.354l-1.88-.185c-.92-.924-3.43-4.097-2.84-6.383zm-5.2 14.772l-.53-.794-.08-5.005.81-.16c4.822.66 11.275 1.51 15.533 2.91l1.72 2.25-3.44 2.91c0 1.22-4.377-.66-7.94-2.52-3.04-1.59-3.895.76-6.08.4zm10.973 42.74c-.93.53-6-.517-6-.517v-2.27l1.48-.34 3.324.625c0 .058 2.115 1.985 1.19 2.514zm1.32-19.45c-.19 1.167-1.56 2.56-3.24 3.677l-.307.204-.354-.11c-2.435-.7-3.943-1.92-4.346-3.52l-.062-.25.1-.23c.653-1.63 2.635-2.91 4.416-2.83 1.42.06 2.79.63 3.264 2.14l.53.93zm-1.58-6.85l-.136.053h-.143c-2.287 0-4.693-1.34-4.786-3.81-.348-1.25.555-2.08 1.224-2.68l.776-.82.296-.345.28-.04c1.962-.243 3.78 1.178 4.33 3.386l.264.267c.3 2.4-.274 3.32-2.11 4.01z"/>
17 <path d="M346.262 512.832c0-12.343-.68-25.316-1.252-35.294.04-6.272 1.02-13.666 1.252-20.442-.415-3.375 2.988-9.74-.1-12.452-10.788 1.265-25.06 1.237-32.867 1.87-10.106 1.324-16.487 4.398-21.476 7.206-4.63 2.604-7.6 4.485-9.61 7.01-.62.776-6.44-8.533-11.71-8.954-9.7-1.86-2.02-1.62-21.44-1.665-2.21 0-3.71-.97-6.4-1.36-10.39-1.49-13.15-3.18-18.37-4.78-4.38-1.34-8.13-1.7-9.43-1.84-1.71-.18-.54 8 .82 13.01.05 5.15-.61 10.6.62 14.94-1.11 1.99-1.45 22.2-.05 26.59-1.4 6.76-.79 18.95-.92 28.34-.69 4.58-2.72 7.46-4.08 10.66-.01 1.58.48 2.67.37 3.99-.12 1.37-.96 2.12.9 3.61 2.39.85 5.3 1.33 7.76 2.11 15.52 5.62 32.6 8.46 49.06 6.44 6.46-1.44 12.24 5.79 19.95 4.44 17.35-5.49 34.02-3.57 49.72-6.07 4.53-3.37 7.42-.53 10.79-4.34-1.36-12.31-.97-26.42-3.57-32.98zm-124.902-12.27c.745-9.784-.934-19.777-.046-19.743l-.045-5.05c-.98-1.41-.4-15.45-1.47-18.2-.14-.36 0-.76.01-1.14 0-.29 0-.56.01-.84-.29-1.17-.01-1.98-.76-3.03-.09-.13.22-.81.23-.96l1.12-.09c.49 1.23 1.81 2.39 1.81 3.75 0 .04-.01.07-.01.1.14.54.11 1.26.07 1.8-.09 1.49.26 1.75.26 2.85 0 .38.57 3.37.57 9.17.16 1.6.69 2.75.62 2.89l-.79 3.94.13 3.95s-.44 22.5-1.14 22.02c0 0-.49.13-.62-1.45zm29.504 43.867l-7.803-.18-8.94-2.9c-5.96-1.14-5.22-2.28-8.81-5.53l-2.63-.14-.09-1.93c2.55-7.11 2.52-10.99 3.42-18.25 2.59-20.75 3.16-39.4.46-58.98l-.24-1.6s.14-.68.88-1.31 2.63-.5 2.63-.5c8.41 3.12 7.37 4.87 26.14 3.92l12.33 1.76c2.28.96 4.1.73 5.11 1.64 1.02.91 3.19 3.82 1.82 4.1-.83.17-4.94-2.17-4.94-2.17-2.18-.31-10.81-1.04-12.57.45 0 .04 0 .08-.01.12-.09 2.45 7.47 1.31 12.01 2.96 0 0 10.34 3.64 10.23 4.43-.11.79-20.33-2.99-20.33-2.99-.98-.16-1.29 0-1.36.06 0 0-.04.09-.1.3-.08.18-.59.36-.59.52 0 .67 1.6 1.1 1.65 1.14 3.47 1.13 6.38 1.7 10.06 2.5l5.29.96s3.07 1.03 2.79 1.54c-.28.51-18.53-1.56-19.2-1.59-.75.67-1.23.56-1.23 1.21 0 .17.03.36.08.54.13.16.79.68.98.92 1.98.37 4.56-.21 6.71.17 3.18.57 14.49 2.27 14.49 3.13 0 .85-3.86.57-3.86.57l-5.57.28c-4.55-.46-8.3-1.37-12.38-.35-.04.14-.09.28-.09.41 0 .37.13.67.27.89.34.52.95.88 1.55.88l3.03.03c5.29 1.76 8.33.14 12.66 2.05l2.45 1.58-1.02 1.08c.31-.06-9.09-.79-10.4-1.08-3.96-.87-8.86-.74-8.92 1.31 1.14 1.54 5.55.79 8.58 1.37 2.39.46 7.27 2.3 9.49 3.13l5.84.72-.16 1.53c-2.66.35-6.74-.98-9.37-1.18-3.81-.29-14.37-1.82-14.77-.51-.57 1.82 5.12 1.63 7.61 1.76 1.27.06.94-.09 1.82.34l3.18.91s10.34 1.53 10.34 2.5-5.68.28-5.68.28c-2.95.89-7.32.37-9.83.06-2.95-.37-7.38-.34-7.89.97-.15.39 1.16 1.63 2.1 1.64 3.18.53 2.73-.21 6.37-.27l10.8 1.88s3.87.05 3.47.74c-.39.68-9.21.41-12.1.45-6.93.11-10.57-.34-11.02 1.99-.09.78 1.58 1.55 1.99 1.81.31.02 22.14.77 21.99 2.85-.14 2.08-11.53 0-11.53 0-3.75-.06-9.54.09-13.01.57-1.31 1.93.06 2.9.06 2.9 1.59.51 17.72.73 19.82.57 1.26-.09 4.13.66 5.35.91 0 0 1.05.08 1.32.84s-1.49.7-1.49.7c-1.25-.65-3.68-.62-5.45-.62h-.13c-2.06 0-18.82-.56-19.77.49-.33.36-.49.86-.49 1.5v.17c.03 2.36 4.9 2.25 7.1 2.09 0 0 3.07-.01 2.97-.03l14.73.43.07 1.57-12.04-.04c-4.54-.05-11.08.58-11.08.62 0 .25-2.16 1.02-1.93 2.61.23 1.59 2.21 1.29 2.73 1.31 3.5-.64 6.76-.82 10-.74 0 0 10.89.52 11.13 1.53.24 1.01-14.32 1.42-18.35 1.82-4.76.47-5.95-.72-6.54 2.47l.9.9c.6 0 26.03-.59 26.37 1.34.27 1.55-20.48 1.05-21.93.96-2.24-.14-4.72.12-4.78 1.94.3 1.21 1.19 1.85 1.65 1.94 0 0 19.78-1.25 20-.51.23.74-10.28 1.88-10.28 1.88-2.5.85-5.33.69-8.18.8-3.55.14-3.01 1.08-3.24 1.54 0 .48 1.25 1.65 1.25 1.65l2.05.45 10.29-.46h8.13c.65-.65 6.25-.34 6.37.29.12.63-1.01 1.12-1.82 1.25-3.7-.35-8.83.97-14.4 1.06-5.57.09-14.47-1.71-14.47-1.71zm90.857-5.82l-1.82 2.27c-1.97.39-.61 2.27-2.89 2.76-21.78-.09-30.08-1.45-44.63 2.74l-.14.04-1.99.02c-2.11-.18.44-2.81-.79-4.61l-.08-8.16-.25-.33.03-.3c.53-6.85.18-7.82.18-14.95 0-2.39-.29-4.75-.3-7.11 0 0 .53-16.54.7-14.39l-.61-34.71 1.32-1.58c.87.02 3.73-.44 8.73-3.95 8.44-2.1 6.93-1.23 10.08-3.07 1.3.88 21.44-3.17 24.03-1.98 1.12.51.7.86 1.1 2.09l.06.14-.01.15c.32 4.03.52 8.91.74 12.61.92 15.4.49 29.75 2.15 44.88l2.28 15.83c.53 3.55 1.38 4.03 1.66 6.86l.55 4.21-.04.48zm-.95-71.59c-.32.94.77 16.01-.09 16.1-.86.09-1.55-4.01-1.44-3.47l-.38-14.76c-.01-.03-.28-1.45-.29-1.48h-.01c0-.05 0-.13-.01-.19-.15-.58.03-.37.03-.9 0-.11.04-.21.04-.32-.13-1.02-.33-1.99-.33-3.06 0-2.08-.87-4.84.1-6.42l1.73-.96 1.73.57c.46.92-.25 2.94-.25 3.74 0 1.22-.45 10.07-.8 11.1zm-207.62-57.8c-1.34-.15-2.39-.45-1.79-1.35.6-.9 10.62 0 10.62 0 4.94 3.29 10.32 4.18 10.32 4.18s3.14 1.49 12.11 10.62c9.88 10.05 8.08 33.66 8.08 33.66s.15 4.49-.6 11.22c-.74 6.73 4.94 6.28 4.94 6.28 4.49 4.19 5.98 2.54 5.98 2.54s1.5 2.09 2.84 1.49c1.35-.6-.15-2.84-.59-4.19-.45-1.35-1.79-30.82-1.79-30.82.45-9.28-5.38-22.9-5.38-22.9-2.84-10.47-18.69-19.15-20.33-19.6-1.65-.45-8.37-3.6-8.37-3.6.45-1.05-2.24-3.29-2.24-3.29s8.67-1.05 13.31-1.5c4.64-.45 23.03 2.39 22.88-.9-.38-9.54-.2-19.41-1.05-28.73-.15-1.65.78-2.34.9-5.09.21-4.93-.3-13.16-.3-18.55 0-17.36.6-27.09.44-52.18-.1-16.27-.07-25.3-.14-41.04l-.45-7.03c.45-1.95 2.1-4.34 4.2-5.38.49-.16.99-.62 1.3-1.35.19-.47.29-1.01.29-1.55 0-.66-.14-1.32-.42-1.85-1.01-1.59-.88-3.35-3.27-3.2-1.5.09-2.04-.77-2.04-.77 3.23-1.03 2.84-3.26 3.69-4.2.86-.94 1.44-.1 1.44-1.12v-.17l.07-.16c.54-1.26.72-2.9.43-4.07-1.1-4.41-1.49-4.34-2.87-7.26l-.23-.27.05-.35c.18-1.7.61-4.27 1.45-5.59l.64-1.02c.35-1.32.5-2.55.5-3.71 0-4.01-3.05-5.88-5.12-9.47 0 0-2.32-3.05-2.63-3.61-1.66-.6-2.16-.63-2.99-.15-1.3.75-1.27 2.94-2.45 5.01-1.58 2.77-2.03 3.67-3.07 6.51-.21 1.4-.45 1.45-.45 2.84 0 2.47.51 3.57.51 3.57l.08.09c.63.82 1.66 3.61 1.66 4.27 0 1.34-2.39 7.18-2.39 7.18-.45 1.44-.9 1.27-.9 2.69 0 1.07 1.65 2.69 2.43 3.51l-.89 1.25-10.36-7.76c-5.08-6.58-9.87-13.92-10.77-26.01-.23-.72-.37-1.38-.37-1.92 0-1.27.51-2.1 1.04-2.62 1.8-1.74 3.41-1.84 5.16-1.17 2.04-.62 2.42-2.58 2.42-4.41-.03-.73-.21-1.25-.53-1.54-.61-.55-1.65-.95-2.93-.79-1.18.14-2.86.63-3.89.3v-3.74l2.4-4.34c0-.6-.02-2.05-.3-2.99-.44-1.5-.25-2.39-1.49-4.49-1.23-2.07 1.8-4.79 1.5-11.07-.06-1.23-1.49-3.29-2.99-5.54.13-.59-3.11-3.53-3.11-4.2 0-3.07.46-4.69-1.13-6.42-.34-.06-1.39-.22-2.04.16 0 0-.09.28-.52.47-.71 1.3-.54 4.72-1.57 5.96-2.05 2.44-4.49 7.48-3.89 9.87.22.88 1.95 3.89 1.95 3.89 1.19 1.5 2.17 1.99 1.94 3.14-.15.75-1.43.81-3.29 1.79-1.39 1.66-3.24 5.31-3.14 7.33.45 8.53 4.91 7.54 5.5 9.58l-.41.89s-3 .12-3.36.12c-2.02 1.15-8.07-.74-8.07 1 0 .39.78 4.79 2.46 6.2.9.75 7.03.3 7.03.3l1.8 1.49c-.15 4.63.66 5.57-.45 9.72-.49 1.86-.62 5.66-.74 7.33-.49 1.33-1.34.85-2.09 2.1-2.84 9.72-13.47 15.33-19.26 11.98l-1.22.14s.9-2.55.6-3.15l-.89-2.85c.42-.73.89-2.1.89-4.1.01-1.13-2.81-3.84-3.13-4.73-.75-2.1 2.24-1.59 2.24-4.49 0-3.93-4.74-9.69-5.98-13.47-1.36-1.61-1.19-3.74-3.9-3.19l-1.39 1.43c-1.88 3.7-4.46 7.55-5.61 11.14-.28.78-.4 1.53-.4 2.27 0 1.81 2.34 3.33 3.09 5.11 0 0 .6 1.05-1.79 5.24-.28.48-1.2 2.54-.45 4.81.29 1.36.97 1.64 1.84 2.57 1.02 1.1 2.08 2.23 2.32 4l.03.23-.09.2c-.63 1.55-2.52 2.29-5.04 1.96-1.49.29-2.69-.17-3.55 1.56l-.37.72c-.04.27-.07.52-.07.76 0 2.29-1.27 4.39 1.8 5.48 1.61.58 2.84-1.79 4.19.3l.9 8.08-1.19 7.48c.89 4.19.58 6.57.58 10.06 0 1.34-.52 10.09-.74 11.34 0 32.62.44 58.37.44 96.95 0 6.97 1.32 21.32 1.35 28.28 1.94 4.94 6.7.89 9.87 1.8 3.14.9 12.83.19 13.92.11 2.49-.2 6.02.15 7.19 3.64l.26.76-1.92-.01s-2.69-.15-3.89-.15c-1.19 0-10.46 2.39-10.46 2.39s-11.81 2.24-13.91 3.89c-2.17 1.7 2.84 4.19 4.63 2.69 1.8-1.49 13.31-4.63 20.49-5.23 7.18-.6 13.31 1.19 17.79 2.69 4.49 1.49 17.65 6.28 18.09 7.48.45 1.2 1.95 2.99 1.95 2.99 1.05.15 3.29 2.09 3.29 2.69 0 .6 4.64 8.38 5.68 8.97 1.05.6 1.65 2.55 1.65 2.55l2.39 9.73.45 22.59.15 5.08s.3 6.43.15 7.78-2.84.3-2.84.3.15-1.35-.3-1.95c-.44-.6-.44-3.74-.44-3.74s.15-19.3-.15-29.92c-.3-10.62-11.06-19.9-11.06-19.9s-1.35-.15-1.35-1.65-13.453-9.58-22.723-11.97c-9.27-2.39-18.83.45-18.83.45l-5.23.45s-3.59 2.09-7.62 2.54c-6.55.73-2.24 2.4-1.05 4.34 1.2 1.95 5.23.3 8.075-1.05 2.84-1.35 12.41-1.65 12.41-1.65.3 0 2.54 1.95-.3 1.95-4.507 0-6.43.6-6.43.6-1.94 0-4.78 1.5-4.78 1.5s-2.54.9-5.087.75c-2.54-.15-1.65 3.59-1.65 3.59-1.2 0-6.88-10.77-6.88-10.77-1.944-2.25-3.14-3.59-5.533-6.59L96.75 393c-10.686-17.463-12.3-27.99-20.34-55.96-5.39-24.39-6.24-47.082-5.04-64.29l.556-9.92c1.6-13.27 3.734-24.09 7.322-36.96 8.09-31.11 24.67-59.55 47.696-86.03 10.013-10.62 15.712-15.51 25.71-23.94 1.306-1.093 3.665-2.06 5.834-3.59.93-.65 1.48-1.78 2.46-2.45 5.91-4.03 12.245-8.03 12.245-8.03 3.393-1.64 13.26-8.97 12.214-10.02-1.2-1.642-11.35 5.47-16.15 8.08-5.385 4.19-7.765 5.4-12.41 8.83-11.96 8.826-23.177 17.805-32.746 29.476-9.88 10.44-18.05 22.063-25.56 34.41-.78 1.29-1.18 2.877-1.94 4.19-.76 1.317-2.45 2.01-3.18 3.35-13.31 24.36-22.15 52.77-25.97 86.87-.67 5.775-1.05 9.55-1.05 14.96 0 9.55-.4 19.33.05 29.03.12 2.497 1.5 5.896 1.75 8.376.23 2.26-.67 3.6-.3 5.84.02 0 3.59 13.62 3.59 13.62 2.54 12.72 5.38 16.904 8.07 24.684 4.41 12.75 12.06 28.106 19.1 39.85l8.06 13.87c.02 0 8.71 10.54 8.71 10.54 5.77 7.23 15.31 18.43 22.45 24.467 5.53 6.14 8.81 8.16 15.25 12.27 4.48 2.86 7.47 6.14 12.71 8.98 1.94 1.05 1.9-1.85 2.99.45.96 2.04 6.22 5.38 13.6 8.08 2.1.95 1.98 2.15 4.97 1.52.84-.822.02-2.072-1.15-3.12-2.14-1.54-3.48-1.92-5.88-2.84-3.29-1.944-10.22-2.1-9.9-8.125 1.49-28.576-1.36-33.39-5.09-42.043-7.92-12.72-15.99-14.664-24.82-17.206-1.94-.15-5.98-.9-7.32-1.05zm-28.12-219.8l.91-.9 1.96 2.05c-.08.16-.04.3.16.71l.22 1.52-.53 1.4s-2.24.3-3.29-.6c-1.04-.9.59-4.19.59-4.19zm3.75 21.99c-.73.09-1.69-1.25-2.09-1.65-.71-.69-.06-4.65-.06-4.65l2.16-.74c2.21-.26 3.1.47 3.59 2.54l.01 1.47-.3.75c-.27.75-1.47 2.8-3.29 2.26zm70.57-18.85l1.5-.3c.55 1.41 1.44 4.91 1.05 6.73l-2.48 1.91-.46.12c-1.11.29-1.77-.43-2.3-1.01l-.38-.42-.06-.22c2.84-2.19.85-6.15 3.14-6.83zm-1.79 21.69c.49-2.26 2.75-4.5 4.19-3.59 2.4 1.49 2.81 5.12 2.81 5.12l-1.03.99c-1.09 1.09-2.92 2.92-4.76 1.24l-.22-.21-.37-1.46-.6-2.1zm-11.66 19l2.7-.17 2.09 3.76s-.59 60.15.75 65.68c1.35 5.53-.82 24.8-.3 53.71l-.3 23.04-1.8.1-.35.03c-7.18.6-14.88.31-16.08 1.66l-3.74-.6-1.58-1.98c-1.06-22.63.24-49.95-.06-72.54-.2-15.67.6-26.19.15-41.9l1.68-11.23.1-.19c5.56-9.84 12.27-15.21 16.76-19.4zm-21.6-90.67l1.63.69.68 3.8c-1.19 2.24-1.73 3.24-2.39 3.14-1.94-.3-1.47-2.02-1.94-2.85l.59-1.5c-.02-1-.06-2.51 1.44-3.29zm-1.3 20.78c0-.96.44-1.73 1.27-2.18 1.46-.81 4-.35 5.03.9.73 1.29.76 2.96.16 4.19-.4.81-1.05 1.33-1.84 1.5-.97.8-2.1.95-3.06.33-.97-.63-1.56-1.89-1.56-3.19 0-.28.05-.56.11-.84-.06-.25-.09-.5-.09-.73zm-3.86 43.56l2.55-5.84.6-16.21 1.2-.7s.9-1.2 2.39-.9c0 0 .6.3 0 2.99 0 0 0 7.33-.44 8.97-.45 1.65-5.08 14.51-7.62 17.06-2.54 2.54-7.62 8.83-18.09 11.52 0 0-1.04-1.05-.89 2.24 0 0-11.96.6-12.86 0-.89-.6.75-.9 5.24-1.8 2.24-.45 2.4-.75 10.47-3 8.08-2.25 17.2-11.22 17.5-14.36zm-3.88 13.31c4.16-4.16 5.95-5.28 8.98-9.73l1.35-1.65 2.09.15 1.35 4.49 3.44 3.59c3.66 3.48 2.87 3.18 6.13 6.71l.17.18-.01 3.27-5.23 6.88c-1.19.89-2.01-.36-3.43 1.94-1 1.98-.9 2.69-1.95 4.49-1.16 1.98-1.23.29-2.01 2.34l-.17.45-.46.04c-2.5.26-4.27-.45-5.54-2.22-1.54-3.12-.59-3.62-3.17-6.01-3.28-3.04-5.83-3-7.78-6.29l-.98-3.17 7.26-5.5zm41.03 8.91s-.45-2.23.69-1.89c1.14.34 4.49-.9 4.49-.9s1.2-.01 1.65 1.04c.45 1.05-1.04 1.05-1.04 1.05zm.69 122.75l.3 10.32s1.5 1.34.75 2.09c-1.52 1.52-.56 21.34-.56 21.34l-.41.2c-3.82 1.86-6.2-.45-10.93.08-1.98.22-4.04 0-6.03-.09-.63 0-7.32.3-7.32.3h-5.98l-3.44-.15-5.25.12-22.25 1.07c-14.05.3-8.52-2.99-8.52-2.99l30.65.15c2.93-.52 2.33-4.97 2.54-7.94l-.6-3.14v-30.52s.75-33.52-.59-35.76l.45-8.23-.15-39.5c.1-.23.3-4.91.75-5.09.75-.3 1.5.75 1.64-.45.24-1.88 3.6-6.58 3.74-4.19.15 2.54-3.14 5.23-3.14 5.23s.3 25.14-1.04 32.02c-.45 2.35.75 6.73.75 6.73l.6 43.69v25.59-.3s-.33 16.28-.28 17.56c.13 3.37.15 2.97 1.78 3.54h.15l7.78.3c.02 0 4.64.45 4.64.45-1.01.09 1.07-.84 3.22-.74 3.68 0 13.29-.02 13.67-.02 1.79-1.01.48-13.6.53-15.53.03-1.54-.08-18.58.82-20.97l-.45-15.26v-69.4s.15-20.05-.75-23.49c-.9-3.45-.3-7.34 2.24-7.19l1.2 6.88-.3 19.3s1.65 3.59 1.8 5.99c.15 2.39-2.39 3.29-2.39 3.29l1.05 5.68s-1.05 28.88.15 30.52c1.19 1.64.59 34.86-.15 35.91-.75 1.04.74 7.03.59 8.53-.15 1.5-1.19 4.04-1.19 4.04zm-41.89-106.21s-5.42-4.52-3.29-4.34c1.8.15 4.79 4.19 4.79 4.19l3.29 3.29s1.5 2.09 0 2.39c-2.2.44-4.78-5.54-4.78-5.54zm1.8-67.48l10.17-.3s2.99-.15 3.29.6c.3.75-5.53 1.19-5.53 1.19l-9.12.6s-2.09-1.8 1.2-2.1zm33.34 47.13c.9.3 2.1.9-2.09 2.09-4.18 1.19-7.92 5.83-9.12 4.93-1.19-.9 2.54-2.99 5.23-4.34 2.69-1.35.9-3.14.9-3.14l-7.62-6.74s-8.88-11.53-10.49-14.91c-1.02-2.15-1.5-6.22-.87-6.49 1.05-.45 2.99 5.53 4.64 9.72l4 4.62 3.93 5.55c7.93 9.87 10.23 8.25 11.52 8.68zm-60.84 7.63c-3.29-.3-2.09 7.48-2.09 7.48s.75 9.42.75 10.32c0 .89-.59 8.82-.59 8.82s.45 3.29 0 3.59c-.45.3.15 8.98.15 8.98-.9 1.19.15 9.42.15 9.42-.9 1.79-.3 20.5-.3 20.5s1.2.89.6 1.49c-1.35 1.35-.44 8.83-.44 8.83-1.19 2.09.45 7.48.45 7.48v21.09l-.15 26.48c.9 2.69-.29 8.68-.29 8.68s2.1 6.58-.89 6.58-1.19-4.94-1.19-4.94l-.15-21.85-.3-33.97-.15-32.17s.75-22.59-.45-24.54c-1.19-1.95.6-3.74.6-3.74s0-26.34.6-29.33c.6-2.99 2.39-.3 2.39-.3l10.77.3 3.29 2.69 2.69.15c1.9.97 5.2 3.31 5.23 4.04.04.74-4.18-2.1-2.69 1.04 7.63 5.69 5.23 9.63 8.23 14.96l.74 10.67v.13c-.81 17.14-.52 33.93-.21 51.7.3 17.36-1.13 33.99-.2 53.6v.14l-.48 7.19-17.8 1.94s-3.58-1.58-4.4-2.58c-.82-1.01.67-7.29.37-12.98-.2-3.9.56-8.39.3-12.42-1.34-27.08.09-52.09-.45-74.66-.28-11.69-.64-26.8-.57-38.92v-.29l.17-.22c.8-1 1.9-2.32 3.4-3.82 0 0 .45-1.5-4.04-1.35 0 0 .3 0-2.99-.3zm55.77 235.06l-.83.5-2.45-.95c-20.33-13.17-49.79-45.94-48.74-48.63 1.05-2.69 8.52-4.94 8.52-4.94 1.65.3 3.44.3 5.24 0 3.13-.52 4.96.65 4.96.65l8.05 1.06c9.13 2.34 12.01 3.51 18.85 11.17 8.82 9.88 6.58 31.13 6.43 41.15zM384.04 96.75c2.803 1.73 11.65 5.923 12.692 7.17 2.41 1.4 10.64 7.27 19.28 13.016 7.42 6.67 17.48 17.615 28.94 28.804 23.53 25.95 39.21 55.553 47.33 86.573 4.2 12.533 4.43 23.904 6.03 37.134l.89 8.5c1.2 17.157-.63 36.533-6.04 60.85-8.07 27.89-15.87 47.874-26.16 65.77l-.79 1.88c-.11 1.923-4.59-1.19-6.13-2l-.84-.465c-3.53-2.04-7.46-3.4-11.26-4.72l-6.302-1.96v-1.01c-.575-1.44 5.23-3.03 7.72-2.82 1.084.09 2.11.17 2.886.01 3.996.22 11.98-1.43 14.692-1.37 5.774.11 4.77.29 5.926-3.18.03-6.94-1-15.55-1-22.49 0-36.707.45-47.183-.442-76.296-.03-3.73-.345-5.22-.29-6.94-.065-5.637.686-29.87.29-30.81-2.024-4.77-1.46-5.795 0-9.835l1.01-.58.075-.14c1.2-1.01 2.88-1.61 4.495-2.19 3.077-1.09 4.75-1.28 4.75-3.56 0-.24 0-5.02-2.65-5.3-2.558-.38-6.11-.16-6.75-1.71l-.088-.2.03-.22c.24-1.76-.36-3.48 2.162-5.25.944-.66 2.425-1.77 2.72-3.13.232-.58.34-1.13.34-1.68 0-2.67-5.49-6-6.015-6.77-.53-.77 1.72-4.41 1.72-4.41.75-1.78 1.42-3.22 1.53-5.16.04-.73-.12-1.48-.4-2.25-1.15-3.58-6.43-5.46-8.21-10.5l-1.4-1.43c-1.61-.37-1.89.33-3.25 1.93-.94 4.64-3.31 7.83-3.31 11.74 0 2.9 1.8 4.07 2.93 6.72l.85 3.03-3.21 2.56c-1.41 1.55-1.76 3.48-1.76 4.88 0 .6.19 1.25.61 1.98l.29.54c.38.68 1.12 1.88 1.12 2.8 0 .16.27.98-.31 1.13-.58.15-2.6-.57-2.6-.57l-5.95-4.22c-3.15-7.36-4.44-4.17-8.23-11.08-.12-1.67-3.5-9.28-3.69-11.74-.33-4.27-2.74-10.42.47-14.39 0 0 4.04-.56 5.4-.46 2.19.17 2.43-.47 3.31-.96.17-.46.66-.61.66-1 0-1.74-.85-4.4-3.12-4.93-4.63 1.1-5.67-1.07-5.95-1.74-.28-.66 1.33-2.75 1.33-2.75.59-2.03-1.61-.49-1.61-2.46 0-2.02 1.41-3.55.95-5.77-1.51-1.42-3.12-3.27-3.12-5.31 0-1.18 1.85-3.18 1.85-3.18l.08-.11c-.13-.49.34-2.05.34-2.96 0-1.89-1.16-4.09-3.21-6.53-1.03-1.23-4.35-2.74-4.41-4.54-.42-.18-1.14-.48-1.14-.48-.65-.38-1.67-.33-2.01-.27-3.13 2.12 1.14 1.52-3.88 9.09-.37.56-.13 2.92 0 3.5.79 1.39 1.88 5.08 2.27 6.25.57 1.71-2.12.64-3.36 2.7-1.25 2.1-2.45 4.12-2.45 6.38 0 .98.23 2.01.77 3.11l3.99 4.75-.91.29c-1.03.34-2.26.18-3.45.04-1.27-.17-5.33-.71-5.94-.17-.32.28-.5.8-.53 1.53 0 .83 1.18 1.32 2.24 2.2.85 3.03 2.55 2.49 3.66 2.82 2.3 1.06 4.56.17 6.37 1.91.54.52.29.91.29 2.18 0 .54 0 3.98-1.23 6.35 0 10.45-.52 14.46-6.15 19.66 0 0-.43 3.91-2.89 5.35-2.45 1.44-4.33 4.19-4.33 4.19-.29.29-3.47-.46-4.05.44-1.3 2.02-2.95 5.54-4.19 1.59 0 0 1.62-1.71 1.59-1.88-.14-7.67-.46-6.45-1.14-7.16-.79-.83-3.95-2.74-3.95-4.08 0-.66.47-1.34.47-1.34l1.16-3.47c1.98-1.37 1.88-2.02 2.17-5.35.09-1.01-.43-4.19-.14-4.91-3.32-3.33-3.84-4.14-4.48-7.23-.48-2.32-.42-5.33-1.73-6.07-.83-.48-3.08-.44-4.75.16l-2.1 3.81c-2.08 3.58-3.94 7.65-3.94 11.65 0 1.16.15 2.38.51 3.7l.64 1.02c.85 1.32 2.85 3.68 2.85 4.12 0 .43-1.3.72-1.3.72l-1.45 3.61c-2.46 2.17-3.47 2.32-4.48 7.81-.22 1.18 1.84 2.35 2.38 3.61l.07.16v.17c0 1.01 1.1 1.59 1.59 2.76.29.69-.66 1.85-.14 3.15 0 0 1.01 1.3 1.01 1.88 0 .58-2.39 1.42-3.9 1.45-1.52.02-2.51-.52-3.53 1.07-.28.53-.42 1.19-.42 1.85 0 .53.09 1.07.29 1.54.3.73 1.73 2.78 2.22 2.93 4.01 0 3.99-.96 5.85 2.04l.13.2v.24c-.07 15.7.23 33.96-.2 50.18-.47 18.22-.14 36.43-.14 54.39 0 15.75 1.59 29.07.87 43.97.41.33 3.69 2.95 4.01 3.21h27.94s2.74.26 2.74 1.56-2.14 1.06-2.14 1.06c-14.16 2.94-25.47 6.61-33.27 16.25-2.99 3.19-6.46 6.85-6.83 11.13-3.74 8.63-4.61 18.35-4.83 28.12-.13 5.37.01 12.99-.58 18.8-.41 4.04-1.64 7.15-1.64 8.3 0 2.79-1.54 5.98-1.54 5.98-.19 1.06-.14 1.45.29 2.31.67 1.34-2.31.77-.82 3.1 4.1.75 17.88-8.28 20.34-10.96 1.94-2.11.45.9 6.71-3.575 6.23-4.45 27.64-18.31 32.41-24.835 8.84-7.43 15.99-15.37 20.35-20.8 0 0 .23-.45 7.83-10.29 7.6-9.85 18.1-29.76 18.1-29.76 1.28-2.79 1.33-4.49 2.79-7.46.97-1.97 2.31-5.15 3.88-9.15.6-1.53 2.06-2.53 2.79-4.51 2.84-7.73 4.56-15.32 7.31-22.72 0 0 2.89-13.43 2.91-13.42 2.41-14.19 3.13-17.23 4.02-31.54.34-5.38 1.05-20.63.45-26.39-6.03-57.49-23.92-93.73-52.09-127.51-4.47-6.08-16.53-19.66-32.95-33.3-6.33-5.26-11.96-8.64-16.66-12.66-7.88-5.57-11.16-5.91-15.17-8.52l-5.79-2.92c-1.78.71-1.99 2.02-2.14 3.64.94.84 3.08 1.38 5.38 2.99zm83.043 102.98h.76s1.487.91.92 2.425c-.57 1.52-1.783 1.97-2.36 2.03-.575.06-1.805-1.07-1.805-1.07l.222-1.52c.19-.4.232-.55.152-.71l2.11-1.14zm-2.953 20.008c.496-2.062 2.47-3.38 4.682-3.123 0 0 2.315.22 2.125 2.49-.09 1.07-1.38 2.38-2.1 3.07-.404.39-3.32 2.04-4.05 1.95-1.82.53-.764-1.81-1.04-2.56l.324-1.58.06-.26zm-42.08-41.28l6.65-.29 6.204-.472c.964.746 4.286.312 4.202 1.05l-1.3 1.012-4.193.58c-.297-.1-7.415.6-7.66-.148-.254-.772-4.48-.435-3.903-1.736zm32.892 51.068c.178-.737 2.325-.44 3.01-.44.69 0 2.666.723 2.856 1.576.18.852-.57-.19-1.23.19-.67.378.28 2.556-.29 2.46-.57-.093-4.35-3.786-4.35-3.786zm15.14 6.25s2.27-1.23 2.364-.19c.095 1.042-1.798 1.137-1.798 1.137s-.19 1.135-2.09.757c-1.9-.38 1.51-1.7 1.51-1.7zm-15.54 9.837l.13-.02c1.934-.25 3.376.308 4.542 1.756l.17.22.004.29c-1.21 12.91.46 23.45.38 35.62-.15 22.57-2.15 46.06-.15 70.59-.27 4.02.35 8.13.58 12.01.3 5.16 1.11 9.7.29 14.41l-.11.65s-21.29 1-22.01-.16c-.73-1.16 0-4.34 0-4.34l-.44-13.88c-.77-17.02.86-22.42-.29-36.74-.09-1.02.87-1.96.89-3.09.2-11.76.84-29.74-.9-34.22-.05-4.34.457-9.1.29-13.45-.05-1.39.397-4.01.397-4.01l.04-.14c2.58-8.98 7.09-19.15 16.05-25.42l.115-.06zm-23.85-96.88l.322-.763 1.407-.07c1.51.785.78 2.73.76 3.727l-.01.6-.74.694c-.47.83-.68.86-1.13.95-.66.13-.88.01-1.51-.48l-.38-3.03 1.3-1.63zm-2.623 17.16c1.03-1.244 3.02-1.515 4.63-1.42.95.058 1.8.946 2.74 2.272.13.187.61.88.56 1.126.06.28.11.56.11.84 0 1.29-2.48 1.89-3.46 2.51-.96.61-2.1.47-3.08-.33-.8-.16-1.45-.68-1.85-1.49-.6-1.22-.41-2.2.32-3.49zm1.23 37.593l.66-3.504s.09-13.92 1.13-13.257c1.04.663 1.8.19 1.98 1.99.19 1.798-.48 6.627-.48 6.627l.05 3.793 1.47 1.13s.57.57.85 4.168c.29 3.598 4.45 7.007 4.45 7.007l.1 1.707 4.17 5.49s.29.757-.85-.19c-1.13-.947-6.34-6.06-6.62-8.71-.28-2.653-4.26-7.956-4.26-7.956s-.94-2.65-2.17 2.66-3.03 9.95-6.91 13.26c0 0-8.42 10.23-11.83 11.27 0 0 .28 1.23-2.75 2.09 0 0-6.53 3.6-7.19 1.33-.52-1.79.85-2.66.85-2.66s.57-.1.66.66c0 0 .85 1.89 6.43-1.52s2.1-1.39 4.73-2.84c.39-.22-2.48 1.79.85-.57s10.59-11.16 12.11-15.15c1.52-3.98 2.56-6.82 2.56-6.82zm20.5 34.71c-1.84 2.816-3.61 3.36-5.93 5.496-2.59 2.384-5.1 4.85-6.65 7.956-1.29 1.765-3.04 3.902-7.09 3.18 0 0-.73-1.3-1.3-3.18-.63-2.05-2.48-2.08-3.47-4.05-1.44-2.296-4.9-4.857-6.94-6.51l-3.04-2.896s-2.24-3.525-.18-6.246c2.06-2.72.17-.18.17-.18 4.34-3.11 7.89-9.47 11.57-12.95l4.77-4.34s2.02-.86 3.76 1.31c1.73 2.17 2.31 4.2 3.61 5.5 1.3 1.3 3.61 2.9 6.79 6.51l6.65 4.77c-.32 1.27-1.02 3.91 2.02 4.63 0 0 4.48-2.02 5.49-2.46 1.01-.43 1.59.15 1.88.58.29.44 4.04 3.47 4.04 3.47s.58 1.01-.29 1.01c-.87 0-2.17-1.59-2.46-.72-.29.87-.14 2.75 1.3 2.9 1.45.14-.29 1.45-.29 1.45s-1.3 4.92.43 5.21c1.73.29 1.88 2.894 1.59 4.05-.29 1.16-.87 35.15-.87 35.15v62.2l.87 20.102-.29 14.03s1.44 3.474-2.17 3.185c-3.62-.29-2.39-1.062-9.83-.576-6.65.43-16.48-.29-16.48-.29l-16.91.43-10.12.723-10.55.29s-3.18 1.734-4.77-1.74c0 0-1.59-9.546-.72-10.56.87-1.01 0-10.85 0-10.85l-.43-33.412v-84.04l-.29-5.21s-1.3-3.47 0-4.913c1.3-1.45.72-3.185.72-3.185s.58 4.196.58 5.354c0 1.15.73 2.17.73 8.39v40.64l.73 56.12.29 36.45s.87 4.19 3.33 3.76l26.02-.437s4.34.29 4.48-1.016c.15-1.3-.14-11.86-.14-11.86l-.58-27.19-.72-41.37.44-24.3s1.59-12.58-2.02-17.36c0 0-6.51-13.16-9.69-15.33-3.18-2.17-12-9.26-17.06-9.69-5.06-.43-1.01-1.3-.43-1.16.58.15 9.54 1.59 11.56 4.63 0 0 9.98 8.25 10.7 9.55.72 1.3 5.64 9.26 5.64 9.26s1.16 2.32 2.17.44 1.15 1.01 1.15 1.01-.29 5.07 2.02.87c2.31-4.19 7.8-12.29 8.96-11.14 1.15 1.16-8.1 8.1-8.97 15.62l-1.73 3.62-.29 34.57v40.07l1.44 37.9s.15 3.04 3.18 3.33c3.04.29 15.32.73 18.65-.14 3.32-.87 7.37.58 7.37.58s2.45 1.16 2.02-3.04c0 0 1.01-6.8-.15-13.02l-.87-24.73s.87-5.79-.72-9.84c0 0 1.59-15.48.72-17.79l-.15-20.83s-.14-34.57-.43-36.74c0 0 1.44-16.2-1.3-16.78 0 0-3.33.58-6.36-1.74 0 0-4.19 1.01-6.36 3.33l-3.04 2.46s-3.32 2.03 1.16-2.02c4.48-4.05 5.2-4.92 5.2-4.92s2.02-3.9-2.17-1.3zm-55.56-43.984l.31-.827.26-.686.77-1.22c2.29.68 2.41 5.5 2.31 5.93l-1.14.67-.39.41c-.52.58-1.18 1.3-2.31 1.01l-.46-.12-.1-.47c-.39-1.81.18-3.27.73-4.67zm-.33 22.634l1.24-1.505 1.44.44c.73 0 2.61.73 3.91 2.32l-.43 2.75-1.22 3.11-.22.2c-1.85 1.69-2.51-.34-3.6-1.43l-1.73-1.3.64-4.58zm10.57 164.26l-.36-.033s-1.76.464-2.19-1.417c-.44-1.88 1.3-3.905 1.3-3.905-1.16-28.2-1.36-50.44-1.41-76.76-.02-5.54.24-11.93.12-16.6l-.32-37.11s0-1.16 1.73-2.02c1.73-.87 4.04.15 4.04.15 7.22 4.48 10.12 9.84 16.19 18.95l2.78 5.41v.22c-.17 15.51-.24 41.96-.62 57.58-.29 11.72.92 4.63-.15 27.19l.72 20.25-.16 7.04c-8.22.05-14.73.2-21.73 1.06zM399 470.103l-.81-3.656.096-7.53.483-9.16c-.68-5.02.86-11.67 5.3-19.77 5.16-9.43 15.89-10.65 25.41-11.66l6.45-.12 4.95.77c3.37.52 6.19-.13 6.48 1.49.38 2.08 1.96 2.66 3.98 3.33 0 0 4.25-2.91 3.35-5.82-.54-1.77-9.61-3.8-9.61-3.8-.45-1.34-9.62-2.46-9.62-2.46-6.04-3.36-18.11.89-20.35.89-2.24 0-5.38 3.3-5.38 3.3-5.52.67-5.22 4.262-5.8 4.52-.58.25 0 .23-.67-.22s-2.01 0-2.01.67-1.85 3.21-1.85 3.21c-5.78 3.66-7.68 24.953-7.68 24.953s1.27 19.04 1.27 22.393c0 3.36-1.34 2.688-1.34 2.688s-.67-5.82-.67-6.94-.9-22.82-.9-22.82c.67-1.34 2.68-12.97 2.68-12.97 1.78-1.56 1.55-3.58 1.79-4.47 1.3-4.95 9-9.87 9-9.87 1.83-1.54 1.5-1.98 1.5-1.98 3.45-3.44 11.57-5.69 17.58-6.5 3.35-.45 6.65-.09 6.65-.09 8.67.09 10.2 1.67 10.2 1.67 1.56.9 17.44 6.04 17.44 6.04 5.81-3.58.89-5.59.89-5.59-15.43-7.38-31.53-6.93-31.53-6.93-2.01 0-6.04-.89-16.99 3.58-10.95 4.48-20.12 17.9-20.12 17.9-2.91 1.57-.07 5.12-.67 5.82-2.6 2.98-2.02 7.83-2.02 7.83s-1.74 11.06-1.34 25.95c.11 4.05-.9 10.74-.9 10.74-1.34 3.58-3.13 4.03-1.56-1.12 1.57-5.14.22-14.54.22-14.54-.9-1.34-.22-2.68-.22-2.68 2.01-2.68 0-7.38 0-7.38-2.02-10.07 5.81-28.41 5.81-28.41 2.46-2.01 2.01-1.79 2.01-1.79.89-3.13 3.8-3.8 7.15-7.83 3.35-4.02 10.95-7.6 10.95-7.6 2.01-.67 12.52-3.13 12.52-3.13 6.26.89 8.5-.67 8.5-.67.89.44 5.14.89 5.81.67l3.35-1.12c6.71 4.47 12.52 4.25 12.52 4.25 4.03 3.8 9.84 4.92 9.84 4.92 2.24-.22 1.79 1.12 1.79 1.12s-9.61 14.09-11.4 15.88l-4.7 4.7-13.19 15.43c-.52.18-11.37 10.44-31.42 24.94l-7.76 5.55-1.11 1.66-3.74 1.25s-3.74 1.52.14-1.11c0 0 1.94-.41 2.49-1.66 0 0 1.8.14 2.77-1.52 0 0 5.34-3.27 3.92-5.17zM69.43 357.78c2.024 6.97 4.79 14.374 7.47 21.657-3.64 4.79-5.17-3.067-9.575-1.15-6.624 2.825-13.022 6.323-19.34 8.622-1.06.52-2.987 1.57-4.023 2.1-1.34 1.91 4.022 4.6.958 6.13-5.17 3.06-3.993-7.53-5.612-9.99-1.618-2.46-2.43-5.33-3.238-8.2 2.227-3.28 4.497 2.83 7.126 3.24 2.845-.83 4.404-1.73 7.852-3.45 3.895-.37 7.504-1.51 10.93-3.04 1.964-.87 3.815-.23 5.73-2.91 2.43-3.41-3.888-6.94-7.085-8.24-5.17-2.11-9.767.38-11.49-3.07-2.21-4.43 9.383-3.64 17.043-6.9 2.062-.88 3.255 5.17 3.255 5.17zm2.108 28.555c2.508-.837 4.927-3.693 6.51-2.107 1.916 1.916 8.044 16.864 13.98 25.87.766.383-.19 4.6-4.787-.383-8.03.002-4.13 2.306-11.68 5.365-.37.416-1.45.675-2.49 1.15-1.13.52-1.57 1.7-3.06 2.3-4.55 1.83-9.36 3.556-8.61 6.324.58 4.79-1.26 3.477-2.68 3.066-1.72-5.558-6.59-9.98-8.62-15.715.81-1.436 1.64-2.682 3.26-2.682.77 4.6 3.54 7.196 5.36 5.557 8.1-4.51 15.48-6.894 23.17-12.84 0-2.05.24-2.948-.57-4.79-4.78-5.174-16.66-4.6-15.89-8.24-.1-.933 1.54-1.34 6.13-2.875zm30.065 38.71c.81 1.436 4.02 2.875 1.532 4.984-4.213.95-3.256-4.03-6.894-2.5-3.64 3.48-17.13 13.52-20.1 16.29-2.68 2.49 7.28 10.73.19 9.2-4.24-5.75-16.27-18.78-12.44-19.74 2.3-2.11 5.42 4.01 7.09 3.83 3.83-1.35 6.46-4.12 8.81-7.09 5.17-3.07 13.29-6.32 13.41-8.63.58-11.5 5.75-.77 8.43 3.64zm25.277 32.387c.134 6.032-3.83 11.306-9.383 17.247-2.344 2.06-5.167 3.31-7.66 4.98-3.064-.19-5.214-.05-8.043-.58-4.475-2.43-7.085-7.86-9-12.27-1.213-4.51-9.49.18-7.468-5.56 9-3.07 8.234-7.29 10.15-6.13.207 3.64.352 9.28 1.34 12.83.828 2.98 2.2 4.12 5.17 5.17 8.043 1.34 17.59-8.34 17.81-12.08.19-3.26 1.53-6.71.574-9.2-1.26-3.27-4.988-5.81-8.234-5.56-2.49.19-7.098 5.78-6.894 8.43.19 2.49 3.315 5.17.766 5.94-1.915.57-10.35-10.29-13.788-14.18.202-1.23.88-2.07 2.298-2.69 2.427-1.23 3.552 3.39 5.17 1.34 2.834-1.84 5.955-4.53 9.192-5.55 7.468-1.54 15.895 11.49 18 17.82zm12.256 6.133c2.023 3.486 11.047 5.265 8.618 9.773-3.035 1.23-5.042-2.98-7.47-1.342-3.828 7.282-14.17 17.44-14.17 22.614-.202 2.458 4.788 3.45 2.49 6.707-5.058-1.437-11.826-7.85-16.277-10.923-.766-7.475 3.125.246 5.553-.576 6.033-4.886 11.682-14.18 16.852-19.93.916-2.068-.096-3.306-.383-4.79-2.88-1.342-.95-2.258-1.15-2.875 2.68-3.45 2.9.932 5.93 1.342zm33.514 26.062c1.914.574 4.24-1.598 6.06-1.19 2.025.618 2.184 1.834 1.98 3.68-2.022 1.845-5.552 7.283-6.892 7.283-1.34 0-7.66-16.864-14.797-17.208-2.82.727-5.88 1.303-2.63 8.777 10.92 12.45 13.75 15.36 12.64 25.87-2.83 3.48-6.72 5.26-11.1 3.64-8.81-3.26-11.49-11.12-15.13-13.42-1.42.61-6.81 1.24-6.89.19-.13-1.73 1.5-2.82 2.11-3.64 2.03-1.85 3.26-4.03 4.6-3.26 5.18 2.96 7.53 14.5 14.37 15.52.43 1.09 1.15-.62 1.92-.77.61-.37 1.62 1.4 2.3.96 1.59-1.06 2.72-4.51 2.3-5.94-5.26-7.99-17.97-13.26-14.93-24.53 1.22-3.9 5.54-7.26 9.38-7.67 10.73 2.49 12.83 11.11 14.75 11.69zm337.435-131.12c.855 2.09-1.068 5.015-3.627 5.43-2.136-1.46-1.478-1.74-3.4-3.827-.213-2.924.4-1.257 1.254-3.764 2.717-1.254 4.705-.344 5.773 2.162zm16.59 3.695c.637 1.253-.538 4.87-2.247 6.123-1.708.837-1.935.99-4.652.99-2.988-2.508.645-4.607-.208-7.322 2.562-1.88 5.395-2.507 7.106.21zm-24.037-222.95c1.045 3.766-2.608 3.485-3.25 2.025.212-1.673-1.313-3.07-3.02-3.906-4.83 1.85-9.405 6.28-14.42 11.3-3.563 3.57-8.058 4.97-8.152 7.32-.096 2.41 2.09 5.23 4.39 5.86 4.153 1.14 10.852 1.29 11.076 2.3.218.99-2.035 1.99-4.18 3.35-1.96 1.25-3.74 2.86-5.373 3.66-5.98-5.64-8.09-12.45-13.86-17.67-.22-1.67-1.47-3.35 1.25-3.76 3.71-.57 9.92-7.95 14.83-10.87 3.63-2.5 11.49-5.23 8.15-10.45 1.07-1.46 2.27-1.25 3.55-.21l8.98 11.09zm20.9 39.53c-3.142-9.426-14.004-29.28-15.884-28.235-1.88 1.046-.647 8.158.42 10.667-.875.655-1.845.466-2.718 1.046-7.48 4.973-14.746 8.39-20.482 15.685-.918 3.293.297 5.01 1.462 7.53 1.275 2.758 2.66 6.273 5.225 8.784 2.57.41 2.25 3.34 4.6 1.46 9.2-3.77 17.34-12.76 27.59-11.92 3.63-.42 1.08-2.93-.21-5.02zm-10.71 3.87c-5.14 2.647-10.366 7.308-16.25 8.678l-3.553-.836s-3.344-3.137-3.344-6.483c.67-5.33 5.79-6.72 9.83-8.57 2.75-1.26 7.44-4.76 8.96-5.46l2.35-.99.24-.1 2.89-.35c2.78 1.81 5.11 5.41 6.27 10.23l.08.42-7.44 3.48zm18.235 13.278c-2.134-4.176 1.32-1.888-1.88-5.437-2.136-.836-3.284 1.75-3.71 3.006-6.193 4.38-16 7.66-22.834 10.79-3.85 4.38-5.16-4.6-8.57-1.26 8.52 18.14 1.25 11.71 13.37 23.84 9.82.21 19.51-2.94 25.91-11.51.42-3.97 2.51-13.39-2.3-19.45zm1.414 12.095c-1.833 2.546-6.64 5.474-11.5 8.134-2.172 1.18-6.306 3.52-8.515 4.66-2.278.56-4.4.66-6.48-.84l-1.807-1.44-2.37-3.58 1.46-2.93c4.595-3.13 11.713-5.69 16.93-8.16 0 0 7.13-4.16 7.317-4.22 2.143-.26 4.387 3.17 4.387 3.17s2.41 2.64.57 5.19zm12.59 53.368c1.67.627 4.387 14.64.625 13.595-5.434-6.902-6.06-.628-11.076 0-3.63 0-14.042 5.73-13.585 8.784.63 4.183 14.7 3.767 21.32 6.065 4.06 1.464 1.6-6.69 5.02-5.437 2.72 2.3-2.51 7.11 2.09 8.783-1.07.416.84 6.274-1.67 6.485-2.71-.21-1.63-4.604-3.55-5.648-8.75-2.09-23.23-4.818-31.77-8.784-1.28-1.67-.67-2.34-.46-4.638 11.12-7.91 27.64-14.603 29.72-14.603.42-.837 1.68-5.23 3.35-4.602zM516.85 306.36c8.064 1.48 18.184.418 25.707 1.463 2.15-.29-.208-5.647 3.97-4.6 2.35 4.597.42 11.084-.417 18.823-1.068.208-1.87.416-2.508-.628-2.717-.21.21-5.437-2.717-6.692-9.823.21-18.183-2.092-26.125-.836.21 3.137.646 7.02-1.49 8.274-.852 0-2.103-.137-2.348-1.044-2.014-7.44 2.166-17.688 1.33-20.826 3.843-3.76 2.676 4.396 4.598 6.066zm26.125 27.19c2.933 4.983 0 11.292-3.135 16.73-.595 2.158 2.51 3.765.836 6.065-.96 1.32-6.06-2.51-6.06-2.51l-9.823-.208c-1.283-1.673-.233-3.138.835-4.183 7.733 1.045 7.942 2.3 11.914-2.51 2.032-2.462 2.945-7.114 2.09-9.62-2.134-3.55-7.66-3.557-11.078-4.183-5.978.63-12.87-3.54-16.928 3.14-.854 2.93-4.39 7.32.208 10.46 1.493.21 1.882 1.26 3.972 2.3.21 2.09-4.85 1.13-6.348.92-2.134-.42-3.672-4.05-4.102-6.35 1.462-6.48 1.88-13.8 6.598-16.62 12.003-2.2 14.935.31 24.333.94 2.3 1.26 4.337 2.31 6.688 5.65zm0-93.908s2.298-2.51-1.045-5.438c-3.344-2.928-12.123-5.647-18.81-3.137-6.687 2.51-17.973 6.902-14.63 21.542 3.345 14.64 22.154 7.52 22.154 7.52s15.624-4.42 13.376-17.36c-.836-4.81-3.553 5.02-3.553 5.02s-7.315 3.34-7.733 5.02c0 0-10.24 2.93-11.285 3.76 0 0-11.5 2.3-10.45-10.04 0 0 15.04-10.04 21.31-10.25 6.27-.21 6.48-1.05 8.57 1.88s2.09 1.46 2.09 1.46zM500.02 376.028c.404 1.417 1.62 2.024 2.83 2.43 7.278 4.045 19.57 10.998 21.824 11.29 2.253.295 5.06-4.312 6.372-3.562 1.312.75-2.085 7.468-4.31 10.503-5.624 1.31-14.55 1.2-20.617.18-.61.6-3.59 1.05-1.32 2.81 4.12 3.18 10.47 9.02 13.3 13.88-2.83 4.24-6.18 11.93-9.21 15.58-1.22.4-2.97 1.48-3.91-1.33-.38-3.57 5.43-6.38 2.71-8.7-6.88-5.87-15.65-10.17-23.33-13.81-2.63-.41-2.25 6-5.81 4.87-.94-2.63 5.46-12.56 7.87-16.7 1.41-.61 2.22 1.05 2.62 2.06-1.5 5.63 6.71 5.6 9.74 8.44 0 0 10.24 9 11.99 7.69 1.5-1.13-6.09-7.39-10.12-11.82-1.35-1.48-.55-3.69-1.31-3.76-2.06-.19-4.73-3.06-6.03-4.32-5.41-5.25 4.15-3.19 4.15-3.19 5.46 1.82 17.99 2.25 19.12 2.25s-12.75-8.06-18.56-9.75c-.96-.02-1.1 1.74-1.88 2.06-1.42 0-2.81-.38-2.81-2.25 2.62-5.44 2.81-9.01 4.87-9.19 2.43-.61 1.77 2.26 1.77 4.28zm-61.93 85.177c1.022-1.022 5.644.52 7.87 1.126 3.75 1.32 8.247.57 10.186.71.184 4.39 1.337 10.42 1.435 15.62-1.5 4.32-.86 6.66-.93 8.63 0 0-1.68-1.12-4.12 2.07 0 0-3 1.88-6.18-2.63-3.18-4.5-8.99-10.5-9.56-11.63-.56-1.12 0-5.25-3.37-7.12 0 0 2.82-1.5.94-4.31 0 0 2.07-.75 3.75-2.44zm-4.686 1.314c-4.685 1.12-5.886 6.23-9.757 8.21 0 0-3.516 1.39-2.425 2.66 1.125 1.31 4.685-2.25 5.06.37 3.04 2.18 5.435 7.13 5.435 7.13 6.177 5.66 5.247 5.06 11.62 15.19.14.95-2.433 2.83-2.436 3.75 0 .76 0 1.69 1.32 1.69 5.44-3.94 12-8.88 17.06-13.13 3.94-7.13 12.93-9.38 11.13-12.86-3.07-4.4-5.36 2.09-7.38.48-.49-1.5-.75-3.57-.18-5.07-2.25-2.26-3.32-4.17-2.81-5.82 8.81-1.69 10.68-.38 13.5.75 3.44 1.21-5.43 3 .57 6.94 3.75-1.13 3.56-6.57 10.5-10.13.61-1.22 5.87-6.61 4.25-7.42-1.01 0-3.27.39-3.87 1.6-2.24 0-1.8 2.75-3.37 2.81-4.87-3.38-13.63-1.73-19.68-1.88 0 0-.18-12-2.62-15.57-2.43-3.57-2.43-3.75-6.18-.57-3.75 3.19-3.21 5.15-3.21 5.15.58 2.73 4.2-.02 6.02-.84 1.31-1.5 3.46 8.4.75 11.25-2.02 2.13-2.06-2.44-10.12-1.32-1.5-1.69 4.31-1.31 0-5.82-5.26 2.02-4.87 3.75-8.81 7.5 0 0-4.12 2.63-4.31 4.88zm27.922-23.26c4.124-3.57 11.995.56 15.932 2.06 9.933 2.81 17.43 6.75 18.74 6.19 1.314-.57 5.81-6.94 5.25-8.82-.563-1.88-19.426-22.01-19.426-22.01-.81-2.23-3.44-6.88-4.377-5.38-.937 1.5-8.505 8.48-6.56 10.13 2.436 2.06 4.498-.38 4.498-.38 4.123-.94 5.333 1.77 6.747 3.19-2.02 2.43-5.81 9.56-8.996 7.87-.958-.82-6.185-1.13-2.06-4.5 0-1.32-.938-1.88-2.25-1.88-6.067 1.01-5.53 5.16-9.37 9-5.623 6.56.765 5.46 1.872 4.5zm18.4-4.3l-.56-.37.504-.45c.45-.4 1.446-3.15 1.71-3.91.38-1.08 2.378-1.07 3.375-1.5.657-.29 2.107.82 3.185 1.31 3.37 2.53 7.493 8.79 7.026 10.11-.466 1.32-11.754-2.97-15.24-5.22zm-60.19 47.62c3.636 5.87 8.847 10.03 10.87 16.5 1.21 2.43 3.18 4.43 5.81 2.81 3.185.56 2.81 1.5 2.06 3-3.795.85-4.132 3.64-6.56 2.62-4.684-2.25-11.344-5.56-16.4-9-.806-.21-1.415.4-1.82 1.01.98 7.42 1.368 11.84 1.166 18.11-3.64.8-9.934 7.87-12.183 4.31-1.13-2.44 2.24-4.32 1.68-5.63-2.44-5.69-6.69-11.52-12.56-19.88-1.73-2.46-6.75 2.06-5.06-2.25 0 0 10.73-6.21 12.3-6.77 1.57-.55 2.41.71 1.94 2.26-.39 1.26-4.31 3.37-1.31 5.81 1.68 1.69.07 2.63.93 3.94 3.93 4.87 5.57 11.12 8.81 12.94 3.56-10.88-1.82-16.75-2.63-23.63 3.23-1.82 2.35 1.7 5.99 1.5 9.37 3.56 11.11 7.93 12.93 7.12-1.82-4.25-7.5-11.26-11.62-15.38-.04-.01-4.42 1.64-5.25-.56 0-1.34.37-1.69 4.12-2.82 1.34-.41 2.28-2.4 3.75-3.38 2.25-1.5 3 7.31 3 7.31zm-255.2-425.99c4.676 6.86 9.965 14.77 14.847 21.63 3.007 2.26 3.964-1.75 6.203-1.13 4.886 4.32-.378 2.81-2.82 4.89-2.644 1.45-8.02 7.77-11.277 7.15-1.13-1.88 1.6-4.26 1.5-5.27-.46-4.4-3.39-7.37-6.77-10.91-1.7-1.78-3.43-5.84-5.27-7.71-2.26-2.3-2.85-4-4.89-6.02-1.63.21-3.86 3.05-5.08 2.63-.82 0-2.45-.94-2.07-2.82 0 0 3.74-2.89 6.58-4.89 3.19-2.26 7.89-3.95 7.89-3.95 4.7 1.12-.71 4.31 1.13 6.39zm-23.496 6.58c2.068 3.57 4.887 8.27 3.935 11.7-.552 1.98-13.52-.8-19.16 4.28-1.15 2.03-3.066 2.52-2.254 5.64 3.46 3.94 6.15.75 10.01 1.58 7.53-2.29 18.82-7.41 25.33-1.59 2.04 1.66 2.66 5.61 2.26 7.9-1.53 6.51-4.72 7.56-9.4 10.53-1.08.68-4.35 1.2-5.45 1.88-1.08.66-1.01 3.8-2.06 4.52-1.82 1.25-3.94 3.2-5.45 4.88-.94.94-4.13 1.51-2.25-3.95 1.13-3.01.94-5.64 1.51-8.65 3.01-3.01 7.52-1.13 12.59-1.5 3.57-.96 5.93-4.31 4.7-9.41-12.4-7.69-20.86 10.91-36.09.94.21-4.16-1.94-11.76 1.32-14.67 5.9-6.45 13.07-2.06 16.73-12.04 1.84-.21 3.76-4.35 3.76-2.07zm-20.486 47.03c-3.76-.38-5.827 1.69-6.766 1.13-.94-.57 1.315-7.72 0-12.04-1.316-4.33-6.58-4.33-13.533-3.76-.785.59-.878 2.21-1.692 3-4.51 2.07-7.454 6.93-10.713 11.1-1.627 2.91-8.458 4.89-3.76 9.4 3.196-.38 2.49-4.58 5.336-4.16l15.866 14.76c1.933 1.97 5.224 4.29 5.865 8.02.168.98-3.384 2.07-.94 4.51 3.383.75 6.578-8.65 12.525-11.87 0 0 .624-1.66 0-2.08-2.188-1.48-2.748 1.78-4.444 2.47-3.57-2.07-3.57-.19-3.57-.19-4.7-1.13-3.75-4.95-6.39-8.28-.753-2.82 2.38-3.27 3.194-4.52 4.272.2 8.458 1.69 13.533 3.95 3.863 1.45 10.034-2.75 9.774-6.4-.19-2.64-8.28.37-14.29-5.08zm-15.224 5.83c-1.44 1.68-4.18.48-6.166-1.3-.6-1-.82-1.81-1.728-2.47-1.433-1.05-1.88-1.13-2.444-3.01.166-2.05.438-4.26 3.57-6.4l2.86-.82c1.705.13 4.757.89 6.163 3.45 0 0-.08 7.2-2.255 10.53zm-45.673 48.34c0 2.25 4.548 3.96 9.022 9.78.2 1.87 7.89 6.96 5.82 9.03-2.07 2.06-24.81-2.07-24.81-2.07-3.05-1.04 2.44-4.14-.94-6.02-3.87-.42-3.03 4.88-5.27 6.96-.21 2.91-5.45 5.76-3.01 8.46 5.49-1.04 1.88-2.26 6.58-1.13 8.13 0 33.74 4.8 34.77.94 1.03-3.86.08-4.4-.94-5.65-4.22-6.2-9.17-13.14-12.97-17.12-2.06-2.16-4.51-2.64-4.51-3.76 0-1.55-3.77-9.06-3.76.56z"/>
18 <path d="M59.27 159.48c-1.222 1.04-3.81 7.434-5.64 6.395-4.135-2.822 2.256-11.286 4.7-12.602.94-3.198 3.563-6.267 4.987-8.967 2.338-5.08 5.725-13.416 9.86-15.297 1.89-.86 1.88-4.18 2.955-4.46 2.073-.55 4.94-.06 7.947 4.08 1.71 2.36 5.07 1.88 3.94 4.32-1.52 3.28-15.42-3.2-18.05 5.26-1.02 2.49-5.47 2.52-4.14 6.58 3.05 2.49 7.03 6.92 10.9 7.33 6.71-1.87-4.57-12.05 3.57-9.97 1.22 2.91 9.58 5.08 9.02 8.09-2.24.83-8.27.94-7.52 5.07 2.03 4.16 7.25 5.27 10.71 7.14 2.84-4.58 5.26-7.72 4.7-13.17-2.24-1.25-1.63-7.16-2.45-9.03 4.47-3.74 7.97 4.33 11.84 6.21.2 2.7-4.32 6.18-5.64 8.84-3.39 6.77-7.54 12.84-12.22 18.24-2.03-.21-.74-2.44-.94-4.52-8.54-5.82-16.92-12.6-27.37-16.45 0 1.25-1.52.82-1.39 3.85 0 0 .75.94.19 3.01zm-17.293 39.31c6.916 2.496 18.49 6.642 24.998 9.97 3.254 2.078 3.57-7.148 6.767-2.446-.813 4.573-3.384 4.703-4.837 15.03-.61.832-1.178 1.146-2.442.414-2.683-3.218 1.055-2.9-3.623-6.228-4.518-.71-15.036-6.96-24.058-9.216-1.65.112-1.315 2.82-3.383 3.574-2.07.752-2.82-.94-2.82-.94-.21-5.614 4.6-11.86 5.82-17.68 6.01-1.318-1.31 6.9 3.57 7.523zm-6.767 14.67c-.61 3.12-1.68 5.747.753 6.396 8.458 2.258 29.133 7.524 29.885 8.653.752 1.12-.863 7.07-1.88 9.78-3.57 2.82-21.293 1.19-27.598 3.68-2.238.62-4.68.62-6.713 2.08 6.592 1.72 18.523 2.51 26.98 3.64 1.626-.47 1.395-2.51 2.632-3.39 1.31-.75 2.76-1.02 3.38.56.62 1.58-2.11 13.65-3.2 13.35-3.39-.94-1.13-4.14-3.01-5.08-5.15-2.76-13.82-2.39-19.17-3.76-3.26 1.04-11.47-4.52-10.53 3.01-2.04 1.25-3.53 1.32-4.14-.76.1-1.25 1.4-2.21 1.5-3.58.3-4.11-.34-8.86 2.25-11.66 8.74-3.12 33.08-2.45 34.02-4.33.94-1.88-25.94-7.34-27.44-7.15-1.51.19-1.7 3.76-4.16 3.23-3.96-.85.39-7.74.39-7.74l1.69-8.09c2.44-.84 3.3.09 4.32 1.13zm22.038 50.1c4.277-1.196 2.773 22.692 1.862 24.387-.453.842-3.255 2.495-3.255 2.495-10.577 0-19.76-.428-28.914-.428-3.05.413-.74 2.063-3.38 4.702-.56.563-1.88 1.504-3.19 0 .45-3.378 1.19-6.516 1.32-9.405-.56-6.39-.28-9.8 1.13-9.4 2.82-.94 2.16 4.78 3.76 4.7 8.46-.37 17.98 2.57 26.32 1.32 4.27-2.7 3.95-6.58 3.24-11.78l-1.62-3.12c-2.93-.89-18.34-2.02-27.82-1.87 0 0-1.42 3.04-3.49 3.23-2.06.19-.94-10.91.57-13.16 2.45-2.49 2.78 4.39 5.45 4.52 16.36.76 21.06.76 28.06 3.83zm377.1-165.01c1.67-8.07 4.465-14.833 6.674-21.15-.6-2.003-2.846-3.972-4.45-4.174-8.063 4.174-19.185 14.75-28.083 21.15-1.21-1.404-2.43-1.112-5.29-4.175-1.61-.6-3.92-2.2-3.32-4.2 2.68-3.96 5.3-8.98 7.49-14.16.28-2.78 2.49-7.78 5-10.29 8.9 2.51 2.46 13.34 6.95 16.14 2.22 1.39 7.78-10.57 7.23-11.96-.35-.87-12.28-8.05-20.58-12.8-4.95-2.83-7.82-4.59-8.34-4.17-1.39 1.11-8.34 12.24-5.29 12.52.95.09 2.53-2.44 5-3.61 3.89.56 7.68-1.81 9.73-.55-5.01 8.35-9.18 18.65-12.79 26.16-2.61.6-10.29-4.17-10.29-1.95 0 6.68 13.9 7.55 18.35 13.36 4.45 3.06 11.68 9.18 12.51 6.96.83-2.22-6.4-6.96 3.61-9.46 2.78 2.78 6.34 4.6 8.34 6.4.8 2.8-1.59 5.11-1.39 7.51-1.2 1.21-3.89-4.45-5-1.11-3.06 1.95 10.34 12.15 11.4 10.02 1.94-3.89-2.5-4.73-2.23-5.84.4-1.59 2.94-5.57 4.73-10.57zm-5.84-3.62c-.653.57-1.743-.29-1.743-.29s-4.652-2.492-6.042-4.16c-1.39-1.67 6.952-6.958 6.952-6.958l6.395-3.34c.835 2.506-3.824 13.243-5.56 14.75zm48.106 11.967c.277 2.226-7.33 6.01-9.732 10.017-6.118 1.392 1.032-9.572.833-10.574-1.112-3.34-1.945-5.287-3.336-6.678-7.81 5.81-16.41 17.81-19.47 22.54.8 1.2 4.07 3.955 3.87 5.557-3.87 5.85-2.7-1.03-4.71-.83-.35-1-1.12 1.11-3.06-1.67-3.62-3.62-9.48-5.73-7.23-9.18 2.2-.61 4.12 2.63 6.12.83 5.2-7.21 13.97-15.82 20.57-21.43-1.39-.98-3.19-.99-4.73-1.67-1.54-.69-2.82-2.04-4.45-1.95-2.5 1.39-3.62 2.78-6.31 3.09-1 0-2.2.2-2.81-1 2.71-4.6 5.36-6.88 7.76-9.69h2.2l24.45 22.62zm-93.348 397.306c.81 1.845 1.784 2.954-1.215 4.267-2.99 3-5.62 1.37-6.87-1.808-1.21-2.256-.92-3.73.7-4.757 2.23-.614 6.39.454 7.4 2.298zm7.83 16.12c.81 2.252 1.27 4.77-1.36 5.59-2.02.41-3.853 2.308-5.32-.672-1.053-2.14-2.343-4.64-.116-6.08 5.248-2.06 5.583-.06 6.795 1.17zm76.88-392.828s-6.724-5.604.757-6.057c6.242-.38 5.487.757 5.676 2.27.18 1.515-1.52 4.734-2.46 5.112-.95.38-3.98-1.325-3.98-1.325zm-10.592 11.925s1.154 3.476 5.296-.946c2.838-3.03-.032-4.316-.756-4.922-2.27-1.892-7.944 1.135-6.81 3.975 1.135 2.84 2.27 1.894 2.27 1.894zM58.92 335.905s7.816.293 4.347 8.442c-2.94 6.907-7.158-.127-7.158-.127s-4.61-7.548 2.81-8.315zm-13.803 4.86s8.052.895 6.39 5.884c-1.66 4.98-9.458 5.24-9.842.76-.383-4.48 1.407-6.78 3.452-6.65z"/>
19</svg>
diff --git a/template.tex b/template.tex
new file mode 100644
index 0000000..44a7322
--- /dev/null
+++ b/template.tex
@@ -0,0 +1,488 @@
1% Options for packages loaded elsewhere
2\PassOptionsToPackage{unicode$for(hyperrefoptions)$,$hyperrefoptions$$endfor$}{hyperref}
3\PassOptionsToPackage{hyphens}{url}
4$if(colorlinks)$
5\PassOptionsToPackage{dvipsnames,svgnames*,x11names*}{xcolor}
6$endif$
7$if(dir)$
8$if(latex-dir-rtl)$
9\PassOptionsToPackage{RTLdocument}{bidi}
10$endif$
11$endif$
12%
13\documentclass[
14$if(fontsize)$
15 $fontsize$,
16$endif$
17$if(lang)$
18 $babel-lang$,
19$endif$
20$if(papersize)$
21 $papersize$paper,
22$endif$
23$if(beamer)$
24 ignorenonframetext,
25$if(handout)$
26 handout,
27$endif$
28$if(aspectratio)$
29 aspectratio=$aspectratio$,
30$endif$
31$endif$
32$for(classoption)$
33 $classoption$$sep$,
34$endfor$
35]{$documentclass$}
36$if(beamer)$
37$if(background-image)$
38\usebackgroundtemplate{%
39 \includegraphics[width=\paperwidth]{$background-image$}%
40}
41$endif$
42\usepackage{pgfpages}
43\setbeamertemplate{caption}[numbered]
44\setbeamertemplate{caption label separator}{: }
45\setbeamercolor{caption name}{fg=normal text.fg}
46\beamertemplatenavigationsymbols$if(navigation)$$navigation$$else$empty$endif$
47$for(beameroption)$
48\setbeameroption{$beameroption$}
49$endfor$
50% Prevent slide breaks in the middle of a paragraph
51\widowpenalties 1 10000
52\raggedbottom
53$if(section-titles)$
54\setbeamertemplate{part page}{
55 \centering
56 \begin{beamercolorbox}[sep=16pt,center]{part title}
57 \usebeamerfont{part title}\insertpart\par
58 \end{beamercolorbox}
59}
60\setbeamertemplate{section page}{
61 \centering
62 \begin{beamercolorbox}[sep=12pt,center]{part title}
63 \usebeamerfont{section title}\insertsection\par
64 \end{beamercolorbox}
65}
66\setbeamertemplate{subsection page}{
67 \centering
68 \begin{beamercolorbox}[sep=8pt,center]{part title}
69 \usebeamerfont{subsection title}\insertsubsection\par
70 \end{beamercolorbox}
71}
72\AtBeginPart{
73 \frame{\partpage}
74}
75\AtBeginSection{
76 \ifbibliography
77 \else
78 \frame{\sectionpage}
79 \fi
80}
81\AtBeginSubsection{
82 \frame{\subsectionpage}
83}
84$endif$
85$endif$
86$if(beamerarticle)$
87\usepackage{beamerarticle} % needs to be loaded first
88$endif$
89$if(fontfamily)$
90\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$}
91$else$
92\usepackage{lmodern}
93$endif$
94$if(linestretch)$
95\usepackage{setspace}
96$endif$
97\usepackage{amssymb,amsmath}
98\usepackage{ifxetex,ifluatex}
99\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
100 \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc}
101 \usepackage[utf8]{inputenc}
102 \usepackage{textcomp} % provide euro and other symbols
103\else % if luatex or xetex
104$if(mathspec)$
105 \ifxetex
106 \usepackage{mathspec}
107 \else
108 \usepackage{unicode-math}
109 \fi
110$else$
111 \usepackage{unicode-math}
112$endif$
113 \defaultfontfeatures{Scale=MatchLowercase}
114 \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1}
115$if(mainfont)$
116 \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$}
117$endif$
118$if(sansfont)$
119 \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$}
120$endif$
121$if(monofont)$
122 \setmonofont[$for(monofontoptions)$$monofontoptions$$sep$,$endfor$]{$monofont$}
123$endif$
124$for(fontfamilies)$
125 \newfontfamily{$fontfamilies.name$}[$for(fontfamilies.options)$$fontfamilies.options$$sep$,$endfor$]{$fontfamilies.font$}
126$endfor$
127$if(mathfont)$
128$if(mathspec)$
129 \ifxetex
130 \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$}
131 \else
132 \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$}
133 \fi
134$else$
135 \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$}
136$endif$
137$endif$
138$if(CJKmainfont)$
139 \ifxetex
140 \usepackage{xeCJK}
141 \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$}
142 \fi
143$endif$
144$if(luatexjapresetoptions)$
145 \ifluatex
146 \usepackage[$for(luatexjapresetoptions)$$luatexjapresetoptions$$sep$,$endfor$]{luatexja-preset}
147 \fi
148$endif$
149$if(CJKmainfont)$
150 \ifluatex
151 \usepackage[$for(luatexjafontspecoptions)$$luatexjafontspecoptions$$sep$,$endfor$]{luatexja-fontspec}
152 \setmainjfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$}
153 \fi
154$endif$
155\fi
156$if(beamer)$
157$if(theme)$
158\usetheme[$for(themeoptions)$$themeoptions$$sep$,$endfor$]{$theme$}
159$endif$
160$if(colortheme)$
161\usecolortheme{$colortheme$}
162$endif$
163$if(fonttheme)$
164\usefonttheme{$fonttheme$}
165$endif$
166$if(mainfont)$
167\usefonttheme{serif} % use mainfont rather than sansfont for slide text
168$endif$
169$if(innertheme)$
170\useinnertheme{$innertheme$}
171$endif$
172$if(outertheme)$
173\useoutertheme{$outertheme$}
174$endif$
175$endif$
176% Use upquote if available, for straight quotes in verbatim environments
177\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
178\IfFileExists{microtype.sty}{% use microtype if available
179 \usepackage[$for(microtypeoptions)$$microtypeoptions$$sep$,$endfor$]{microtype}
180 \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
181}{}
182$if(indent)$
183$else$
184\makeatletter
185\@ifundefined{KOMAClassName}{% if non-KOMA class
186 \IfFileExists{parskip.sty}{%
187 \usepackage{parskip}
188 }{% else
189 \setlength{\parindent}{0pt}
190 \setlength{\parskip}{6pt plus 2pt minus 1pt}}
191}{% if KOMA class
192 \KOMAoptions{parskip=half}}
193\makeatother
194$endif$
195$if(verbatim-in-note)$
196\usepackage{fancyvrb}
197$endif$
198\usepackage{xcolor}
199\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available
200\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}}
201\hypersetup{
202$if(title-meta)$
203 pdftitle={$title-meta$},
204$endif$
205$if(author-meta)$
206 pdfauthor={$author-meta$},
207$endif$
208$if(subject)$
209 pdfsubject={$subject$},
210$endif$
211$if(keywords)$
212 pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$},
213$endif$
214$if(colorlinks)$
215 colorlinks=true,
216 linkcolor=$if(linkcolor)$$linkcolor$$else$Maroon$endif$,
217 filecolor=$if(filecolor)$$filecolor$$else$Maroon$endif$,
218 citecolor=$if(citecolor)$$citecolor$$else$Blue$endif$,
219 urlcolor=$if(urlcolor)$$urlcolor$$else$Blue$endif$,
220$else$
221 hidelinks,
222$endif$
223 pdfcreator={LaTeX via pandoc}}
224\urlstyle{same} % disable monospaced font for URLs
225$if(verbatim-in-note)$
226\VerbatimFootnotes % allow verbatim text in footnotes
227$endif$
228$if(geometry)$
229\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry}
230$endif$
231$if(beamer)$
232\newif\ifbibliography
233$endif$
234$if(listings)$
235\usepackage{listings}
236\newcommand{\passthrough}[1]{#1}
237\lstset{defaultdialect=[5.3]Lua}
238\lstset{defaultdialect=[x86masm]Assembler}
239$endif$
240$if(lhs)$
241\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{}
242$endif$
243$if(highlighting-macros)$
244$highlighting-macros$
245$endif$
246$if(tables)$
247\usepackage{longtable,booktabs}
248$if(beamer)$
249\usepackage{caption}
250% Make caption package work with longtable
251\makeatletter
252\def\fnum@table{\tablename~\thetable}
253\makeatother
254$else$
255% Correct order of tables after \paragraph or \subparagraph
256\usepackage{etoolbox}
257\makeatletter
258\patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{}
259\makeatother
260% Allow footnotes in longtable head/foot
261\IfFileExists{footnotehyper.sty}{\usepackage{footnotehyper}}{\usepackage{footnote}}
262\makesavenoteenv{longtable}
263$endif$
264$endif$
265$if(graphics)$
266\usepackage{graphicx,grffile}
267\makeatletter
268\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi}
269\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi}
270\makeatother
271% Scale images if necessary, so that they will not overflow the page
272% margins by default, and it is still possible to overwrite the defaults
273% using explicit options in \includegraphics[width, height, ...]{}
274\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio}
275% Set default figure placement to htbp
276\makeatletter
277\def\fps@figure{htbp}
278\makeatother
279$endif$
280$if(links-as-notes)$
281% Make links footnotes instead of hotlinks:
282\DeclareRobustCommand{\href}[2]{#2\footnote{\url{#1}}}
283$endif$
284$if(strikeout)$
285\usepackage[normalem]{ulem}
286% Avoid problems with \sout in headers with hyperref
287\pdfstringdefDisableCommands{\renewcommand{\sout}{}}
288$endif$
289\setlength{\emergencystretch}{3em} % prevent overfull lines
290\providecommand{\tightlist}{%
291 \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
292$if(numbersections)$
293\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$}
294$else$
295\setcounter{secnumdepth}{-\maxdimen} % remove section numbering
296$endif$
297$if(beamer)$
298$else$
299$if(block-headings)$
300% Make \paragraph and \subparagraph free-standing
301\ifx\paragraph\undefined\else
302 \let\oldparagraph\paragraph
303 \renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}}
304\fi
305\ifx\subparagraph\undefined\else
306 \let\oldsubparagraph\subparagraph
307 \renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}}
308\fi
309$endif$
310$endif$
311$if(pagestyle)$
312\pagestyle{$pagestyle$}
313$endif$
314$for(header-includes)$
315$header-includes$
316$endfor$
317$if(lang)$
318\ifxetex
319 % Load polyglossia as late as possible: uses bidi with RTL langages (e.g. Hebrew, Arabic)
320 \usepackage{polyglossia}
321 \setmainlanguage[$polyglossia-lang.options$]{$polyglossia-lang.name$}
322$for(polyglossia-otherlangs)$
323 \setotherlanguage[$polyglossia-otherlangs.options$]{$polyglossia-otherlangs.name$}
324$endfor$
325\else
326 \usepackage[shorthands=off,$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=$babel-lang$]{babel}
327$if(babel-newcommands)$
328 $babel-newcommands$
329$endif$
330\fi
331$endif$
332$if(dir)$
333\ifxetex
334 % Load bidi as late as possible as it modifies e.g. graphicx
335 \usepackage{bidi}
336\fi
337\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
338 \TeXXeTstate=1
339 \newcommand{\RL}[1]{\beginR #1\endR}
340 \newcommand{\LR}[1]{\beginL #1\endL}
341 \newenvironment{RTL}{\beginR}{\endR}
342 \newenvironment{LTR}{\beginL}{\endL}
343\fi
344$endif$
345$if(natbib)$
346\usepackage[$natbiboptions$]{natbib}
347\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$}
348$endif$
349$if(biblatex)$
350\usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex}
351$for(bibliography)$
352\addbibresource{$bibliography$}
353$endfor$
354$endif$
355
356$if(title)$
357\title{$title$$if(thanks)$\thanks{$thanks$}$endif$}
358$endif$
359$if(subtitle)$
360$if(beamer)$
361$else$
362\usepackage{etoolbox}
363\makeatletter
364\providecommand{\subtitle}[1]{% add subtitle to \maketitle
365 \apptocmd{\@title}{\par {\large #1 \par}}{}{}
366}
367\makeatother
368$endif$
369\subtitle{$subtitle$}
370$endif$
371$if(author)$
372\author{$for(author)$$author$$sep$ \and $endfor$}
373$endif$
374\date{$date$}
375$if(beamer)$
376$if(institute)$
377\institute{$for(institute)$$institute$$sep$ \and $endfor$}
378$endif$
379$if(titlegraphic)$
380\titlegraphic{\includegraphics{$titlegraphic$}}
381$endif$
382$if(logo)$
383\logo{\includegraphics{$logo$}}
384$endif$
385$endif$
386
387\begin{document}
388$if(has-frontmatter)$
389\frontmatter
390$endif$
391$if(title)$
392$if(beamer)$
393\frame{\titlepage}
394$else$
395\maketitle
396$endif$
397$if(abstract)$
398\begin{abstract}
399$abstract$
400\end{abstract}
401$endif$
402$endif$
403
404$for(include-before)$
405$include-before$
406
407$endfor$
408$if(toc)$
409$if(toc-title)$
410\renewcommand*\contentsname{$toc-title$}
411$endif$
412$if(beamer)$
413\begin{frame}
414$if(toc-title)$
415 \frametitle{$toc-title$}
416$endif$
417 \tableofcontents[hideallsubsections]
418\end{frame}
419$else$
420{
421$if(colorlinks)$
422\hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$$endif$}
423$endif$
424\setcounter{tocdepth}{$toc-depth$}
425\tableofcontents
426}
427$endif$
428$endif$
429$if(lot)$
430\listoftables
431$endif$
432$if(lof)$
433\listoffigures
434$endif$
435$if(linestretch)$
436\setstretch{$linestretch$}
437$endif$
438$if(has-frontmatter)$
439\mainmatter
440$endif$
441$body$
442
443$if(has-frontmatter)$
444\backmatter
445$endif$
446$if(natbib)$
447$if(bibliography)$
448$if(biblio-title)$
449$if(has-chapters)$
450\renewcommand\bibname{$biblio-title$}
451$else$
452\renewcommand\refname{$biblio-title$}
453$endif$
454$endif$
455$if(beamer)$
456\begin{frame}[allowframebreaks]{$biblio-title$}
457 \bibliographytrue
458$endif$
459 \bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$}
460$if(beamer)$
461\end{frame}
462$endif$
463
464$endif$
465$endif$
466$if(biblatex)$
467$if(beamer)$
468\begin{frame}[allowframebreaks]{$biblio-title$}
469 \bibliographytrue
470 \printbibliography[heading=none]
471\end{frame}
472$else$
473\printbibliography[
474$if(biblio-title)$
475 title=$biblio-title$,
476$endif$
477$if(biblio-heading)$
478 heading=$biblio-heading$,
479$endif$
480]
481$endif$
482
483$endif$
484$for(include-after)$
485$include-after$
486
487$endfor$
488\end{document}
diff --git a/thesis.args b/thesis.args
index bf836dc..3416ee6 100644
--- a/thesis.args
+++ b/thesis.args
@@ -1 +1 @@
--table-of-contents \ No newline at end of file --template=template.tex \ No newline at end of file
diff --git a/thesis.deps b/thesis.deps
index b1cfe6a..4460750 100644
--- a/thesis.deps
+++ b/thesis.deps
@@ -1,3 +1,9 @@
1presentation/switchdfst.tex 1presentation/switchdfst.tex
2presentation/comptree.tex 2presentation/comptree.tex
3screenshot.png \ No newline at end of file 3screenshot.png
4sigillum.pdf_tex
5sigillum.pdf
6cover.tex
7title.tex
8abstract.tex
9org.tex \ No newline at end of file
diff --git a/thesis.meta.yml.gup b/thesis.meta.yml.gup
index b13ea3a..8f4a69c 100644
--- a/thesis.meta.yml.gup
+++ b/thesis.meta.yml.gup
@@ -4,24 +4,37 @@ gup -u literature.bibtex
4 4
5cat >$1 <<'EOF' 5cat >$1 <<'EOF'
6--- 6---
7title: Inkrementelle Parser als edit-lenses anhand von DFSTs 7include-before:
8abstract: |- 8 - |-
9 Parser, die bekannte Texte nach einer kleinen Änderung neu analysieren können, ohne die ganze Eingabe erneut zu betrachten, nennt man inkrementell. 9 \pagenumbering{gobble}
10 10 \pagestyle{empty}
11 Inkrementelle Parser sind seit den 1970er-Jahren bekannt und inzwischen umfangreich erforscht. 11 - \input{./cover.tex}
12 12 - \input{./title.tex}
13 Edit-lenses sind eine vergleichsweise neue algebraische Darstellung von Programmen, die algebraisch strukturierte Änderungen zwischen Strukturen übersetzen. 13 - \cleardoublepage
14 14 - |-
15 Wir demonstrieren, dass sich Inkrementelle Parser in der Sprache von edit-lenses fassen lassen, anhand einer besonders einfachen Klasse von Parsern, den deterministic finite state transducers. 15 \pagenumbering{roman}
16 16 \pagestyle{plain}
17 Hierzu speichern wir im unterliegenden Zustand der assoziierten edit-lens die Ausgabe-Wirkung des DFST als balancierten Binärbaum um Teile davon effizient austauschen zu können. 17 - \input{./abstract.tex}
18 18 - \cleardoublepage
19 Im Rahmen dessen stellen wir eine Implementierung von edit-lenses im Allgemeinen und unserem Verfahren in möglichst idiomatischem Haskell vor. 19 - |-
20 \setcounter{tocdepth}{3}
21 \tableofcontents
22include-after:
23 - \cleardoublepage
24 - |-
25 \pagenumbering{gobble}
26 \pagestyle{empty}
27 - \input{./org.tex}
20lang: de-de 28lang: de-de
21link-citations: true 29link-citations: true
22bibliography: literature.bibtex 30bibliography: literature.bibtex
23author: Gregor Kleen
24date: \formatdate{30}{05}{2019}
25numbersections: true 31numbersections: true
32biblatexoptions:
33 - style=alphabetic
34 - citestyle=alphabetic
35has-frontmatter: true
36biblio-heading: bibintoc
37classoption:
38 - twoside
26... 39...
27EOF 40EOF
diff --git a/thesis.tex b/thesis.tex
index e24e544..7172abc 100644
--- a/thesis.tex
+++ b/thesis.tex
@@ -1,5 +1,3 @@
1\input{./org.tex}
2
3\section{Einführung} 1\section{Einführung}
4\input{./intro.tex} 2\input{./intro.tex}
5 3
@@ -22,7 +20,7 @@ Dabei werden wir die Definitionen aus \cite{hofmann2012edit} sowohl in natürlic
22\input{./edit-lens/src/Control/DFST/Lens.lhs.tex} 20\input{./edit-lens/src/Control/DFST/Lens.lhs.tex}
23\input{./edit-lens/src/Control/Edit/String/Affected.lhs.tex} 21\input{./edit-lens/src/Control/Edit/String/Affected.lhs.tex}
24 22
25\subsection{Ausblick: Edit-lenses für non-determinische finite state transducers} 23\subsection{Ausblick: Edit-lenses für nicht-determinische finite state transducers}
26 24
27\input{./edit-lens/src/Control/FST/Lens.tex} 25\input{./edit-lens/src/Control/FST/Lens.tex}
28 26
@@ -36,6 +34,6 @@ Dabei werden wir die Definitionen aus \cite{hofmann2012edit} sowohl in natürlic
36 34
37\input{./edit-lens/src/Control/Lens/Edit/ActionTree.lhs.tex} 35\input{./edit-lens/src/Control/Lens/Edit/ActionTree.lhs.tex}
38 36
39\section{Fazit} 37\section{Zusammenfassung}
40 38
41\input{conclusion.tex} 39\input{conclusion.tex}
diff --git a/title.tex b/title.tex
new file mode 100644
index 0000000..9353f5d
--- /dev/null
+++ b/title.tex
@@ -0,0 +1,28 @@
1\begin{titlepage}
2 \centering
3 {\scshape\LARGE Ludwig-Maximilians-Universität München\par}
4 Institut für Informatik\par
5 Lehr- und Forschungseinheit für Theoretische Informatik\par
6 %\vspace{1cm}
7 %\def\svgwidth{0.33 \textwidth}
8 %\input{sigillum.pdf_tex}\par\vspace{1cm}
9 \vspace{0.75cm}
10 {\scshape\Large Bachelorarbeit\par}
11 %\vspace{1cm}
12 \vfill
13 {\huge Inkrementelle Parser als edit-lenses anhand von DFSTs \par}
14 \vspace{1.5cm}
15 {\LARGE Gregor \textsc{Kleen}\par}
16 \vfill
17 Betreuer\par
18 Stephan \textsc{Barth}\par
19 \vspace{1cm}
20 Verantwortliche Hochschullehrer\par
21 \textdagger Prof.~Martin \textsc{Hofmann}, PhD \par
22 Dr.~Steffen \textsc{Jost}
23
24 \vfill
25
26% Bottom of the page
27 {\LARGE \today\par}
28\end{titlepage}