From: Martin Mares Date: Fri, 20 Nov 2009 14:04:17 +0000 (+0100) Subject: Prvni verze zapisku o KMP. X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=fd8ac1b9d8e24b32f15bc32c2a8d20a2fb2245bd;p=ads2.git Prvni verze zapisku o KMP. --- diff --git a/6-kmp/6-kmp.tex b/6-kmp/6-kmp.tex new file mode 100644 index 0000000..1666010 --- /dev/null +++ b/6-kmp/6-kmp.tex @@ -0,0 +1,167 @@ +\input lecnotes.tex + +\prednaska{6}{Vyhledávání v textu}{(zapsal: Petr Jankovský)} + +Nyní se budeme vìnovat následujícímu problému. V~textu délky $S$ (Senu) budeme chtít najít v¹echny výskyty hledaného slova délky $J$ (Jehly). Nejprve se podívejme na~jeden primitivní algoritmus, který nefunguje. Je ale zajímavé rozmyslet si, proè. + +\h{Hloupý algoritmus} +Zaèneme prvním písmenkem hledaného slova a~budeme postupnì procházet text, a¾ najdeme první výskyt poèáteèního písmenka. Poté budeme testovat, zda souhlasí i~písmenka dal¹í. Pokud nastane neshoda, v~hledaném slovì se vrátíme na~zaèátek a~v~textu pokraèujeme znakem, ve~kterém neshoda nastala. Podívejme se na~pøíklad. + +\s{Pøíklad:} Budeme hledat slovo |jehla| v~textu |jevkupcejejehla|. Vezmeme si tedy první písmenko |j| v~hledaném slovì a~zjistíme, ¾e v~textu se nachází hned na~zaèátku. Vezmeme tedy dal¹í písmenko |e|, které se vyskytuje jako druhé i v~textu. Pøi tøetím písmenku ale narazíme na~neshodu. V~tuto chvíli tedy zresetujeme a~opìt hledáme výskyt písmenka |j|, tentokrát v¹ak a¾ od~tøetího písmene v~textu. Takto postupujeme postupnì dál, a¾ narazíme na~dal¹í |je|, které ov¹em není následováno písmenem |h|, tudí¾ opìt zresetujeme a~nakonec najdeme shodu s~celým hledaným øetìzcem. V~tomto pøípadì tedy algoritmus na¹el hledané slovo. + +Tento algoritmus v¹ak zjevnì mù¾e hanebnì selhat. Mù¾e se stát, ¾e zaèneme porovnávat, a¾ v~jednu chvíli narazíme na~neshodu. Celý tento kus tedy pøeskoèíme. Pøi tom se ale v~tomto kusu textu mohl vyskytovat nìjaký pøekrývající se výskyt hledané \uv{jehly}. Hledejme napøíklad øetìzec |kokos| v~textu |clanekokokosu|. Algoritmus tedy zaène porovnávat. Ve~chvíli kdy najde prefix |koko| a~na~vstupu dostane |k|, dochází k~neshodì. Proto algoritmus zresetuje a~pokraèuje v~hledání od~tohoto znaku. Najde sice je¹tì výskyt |ko|, ov¹em s~dal¹ím písmenkem |s| ji¾ dochází k~neshodì a~algotimus sel¾e. Nesprávnì se toti¾ \uv{upnul} na~první nalezené |koko| a~s~dal¹ím |k| pak \uv{zahodil} i~správný zaèátek. + +Máme tedy algoritmus, který i~kdy¾ je ¹patnì, tak funguje urèitì kdykoli se první písmenko hledaného slova v~tomto slovì u¾ nikde jinde nevyskytuje - co¾ |jehla| splòovala, ale |kokos| u¾ nikoliv. + +{\I Hloupý algoritmus} se na~ka¾dé písmenko textu podívá jednou, tudí¾ èasová slo¾itost bude lineární s~délkou textu ve~kterém hledáme - tedy $\O(S)$. + +\h{Pomalý algoritmus} +Zkusíme algoritmus vylep¹it tak, aby fungoval správnì: pokud nastane nìjaká neshoda, vrátíme se zpátky tìsnì za~zaèátek toho, kdy se nám to zaèalo shodovat. To je ov¹em vlastnì skoro toté¾, jako brát postupnì v¹echny mo¾né zaèátky v~\uv{senì} a~pro ka¾dý z~nìj ovìøit, jestli se tam \uv{jehla} nachází èi nikoliv. + +Tento algoritmus evidentnì funguje. Bì¾í v¹ak v~èase: $S$ mo¾ných zaèátkù, krát èas potøebný na~jedno potovnání (zda se na~dané pozici nenachází \uv{jehla}), co¾ nám mù¾e trvat a¾ $J$. Proto je èasová slo¾itost $\O(SJ)$. V praxi bude algoritus èasto rychlej¹í, proto¾e typicky velmi brzo zjistíme, ¾e se øetìzce neshodují, ale je mo¾né vymyslet vstup, kde bude potøeba porovnání opravdu tolik. + +Nyní se pokusme najít takový algoritmus, který by byl tak rychlý, jako {\I Hloupý algoritmus}, ale chytrý, jako ten {\I Pomalý}. + +\h{Chytrý algoritmus} +Ne¾ vlastní algoritmus vybudujeme, zkusíme se cestou nauèit pøemý¹let o~øetìzcích obèas trochu pøekrouceným zpùsobem. Podívejme se na~je¹tì jeden pøíklad. + +\s{Pøíklad:}Vezmìme si napøíklad staré italské pøízvisko |barbarossa|, které znamená Rudovous. Pøedstavme si, ¾e takovéto slovo hledám v~nìjakém textu, který zaèíná |barbar|. Víme, ¾e a¾ sem se nám hledaný øetìzec shodoval. Øeknìme, ¾e dal¹í písmenko textu se shodovat pøestane - místo |o| naèteme napøíklad opìt |b|. {\I Hloupý algoritmus} by velil vrátit se k~|a| a~od~nìj hledat dál. Uvìdomme si ale, ¾e kdy¾ se vracíme z~|barbar| do~|arbar| (tedy øetìzce, který ji¾ známe), mù¾eme si pøedpoèítat, jak dopadne hledání, kdy¾ ho pustíme na~nìj. V~pøedpoèítaném bychom tedy chtìli ukládat, ¾e kdy¾ máme øtìzec |arbar|, tak |ar| a~|r| nám do~hledaného nepasuje a~a¾~|bar| se bude shodovat. Tedy místo toho, abychom spustili nové hledání od~|a|, mù¾eme ho spustit a¾~od~|b|. Co víc, my dokonce víme, jak dopadne to - pokud toti¾ nastane neshoda po~pøeètení |barbar|, je to stejné, jako kdybychom pøeèetli pouze |bar|, na~které se (pùvodne neshodující se) |b| u¾ navázat dá. Kdyby se nedalo navázat ani tam, tak bychom opìt zkracovali... Nejen, ¾e tedy víme, kam se máme vrátit, ale víme dokonce i~to, co tam najdeme. + +My¹lenka, ke které míøíme, je pøedpoèítat si nìjakou tabulku, která nám bude øíkat, jak se máme pøi hledání vracet a~jak to dopadne, a~pak u¾ jenom prohlédávat s~pou¾itím této tabulky. + +Aby se nám o~pøepisových algoritmech lépe mluvila a~pøedev¹ím psalo, pojïme si povìdìt nìkolik definic. + +\s{Definice:} +\itemize\ibull +\:{\I Abeceda $\Sigma$} je koneèná mno¾ina znakù \foot{Mù¾eme pøi tom jít a¾~do~extrémù. Pøíkladem extrémních abeced je binární abeceda slo¾ená pouze z~nul a~jednièek. Pøíklad z~druhého konce (který rádi dìlají lingvisti) je abeceda, která má jako abecedu v¹echna èeská slova. V¹echny èeské vìty, pak nejsou nic jiného, ne¾ slova nad touto abecedou. Pou¾itá abeceda tedy mù¾e být i~relativnì obrovská. Dal¹ím takovým pøíkladem mù¾e být unicode. Pro na¹e potøeby ale zatím budeme pøedpokládat, ¾e abeceda je nejen konstantnì velká, ale i~rozumnì malá. Budeme si moci tedy dovolit napøíklad indexovat pole znakem abecedy (kdybychom nemohli, tak bychom místo pole pou¾ili napøíklad hashovací tabulku, èi nìco podobného\dots) .}, ze~kterých tvoøíme text, øetìzce, slova. + + +\:{\I $\Sigma^*$} je mno¾ina v¹ech slov nad abecedou $\Sigma$. Èili mno¾ina v¹ech neprázdných koneèných posloupností znakù ze $\Sigma$. +\endlist +\s{Znaèení:} +Aby se nám nepletlo znaèení, budeme rozli¹ovat promìnné pro slova, promìnné pro písmenka a~promìnné pro èísla. + +\itemize\ibull +\:{\I Slova} budeme znaèit malými písmenky øecké abecedy $\alpha$,$\beta$... . +\:$\iota$ bude oznaèovat \uv{jehlu} +\:$\sigma$ bude oznaèovat \uv{seno} +\:{\I Znaky} oznaèíme malými písmeny latinky $a$,$b$\dots . +\:{\I Èísla} budeme znaèit velkými písmeny $A$, $B$\dots . +\:{\I Délka slova} $\vert \alpha \vert$ pro $\alpha \in \Sigma^*$ je poèet jeho znakù. +\:{\I Prázdné slovo} znaèíme písmenem $\varepsilon$, $\vert \varepsilon \vert = 0$. +\:{\I Zøetìzení} $\alpha\beta$ vznikne zapsáním slov $\alpha$ a $\beta$ za sebe. Platí $\vert \alpha\beta \vert=\vert \alpha \vert+\vert \beta \vert$, $\alpha\varepsilon=\varepsilon\alpha=\alpha$. +\:$\alpha[k]$ je $k$-tý znak slova $\alpha$, indexujeme od $0$. +\:$\alpha[k:l]$ je podslovo zaèínající $k$-tým znakem a~$l$-tý znak je první, který v~nìm není. Jedná se tedy o podslovo skládající se z~$\alpha[k]$,$\alpha[k+1]$,\dots,$\alpha[l-1]$. Platí tedy: $\alpha[k:k]=\varepsilon$, $\alpha[k:k+1]=\alpha[k]$. Jedu (èi obì) meze mù¾eme i~vynechat, tento zápis pak bude znamenat buï \uv{od zaèátku slova a¾ nìkam}, nebo \uv{od nìkud a¾ do konce}. +\:$\alpha[:k]$ je {\I prefix} obsahující prvních $k$ znakù slova $\alpha$ ($\alpha[0]$,\dots,$\alpha[k-1]$) . +\:$\alpha[k:]$ je {\I suffix} obsahující znaky slova $\alpha$ poèínaje $k$-tým znakem a¾ do konce. +\:$\alpha[:] = \alpha$ +\endlist + +V¹imnìme si, ¾e prázdné slovo je prefixem, suffixem i~podslovem jekéhokoliv slova vèetnì sebe sama. +Ka¾dé slovo je také prefixem, suffixem i~podslovem sebe sama. +To se nám nìkdy nebude hodit. Nìkdy budeme chtít øíct, ¾e nìjaké slovo je {\I vlastním} prefixem nebo suffixem. To bude znamenat, ¾e to nebude celé slovo. + +\> $\alpha$ je {\I vlastní prefix} slova $\beta \equiv \alpha$ je prefix $\beta~\&~\alpha \neq \beta$. + +\h{Vyhledávací automat (Knuth, Morris, Pratt)} +{\I Vyhledávací automat} bude graf, jeho¾ vrcholùm budeme øíkat stavy. Jejich jména budou prefixy hledaného slova a~hrany budou odpovídat tomu, jak jeden prefix mù¾eme získat z~pøedchozího prefixu pøidáním jednoho stavu. Poèáteèní stav je prázdné slovo $\varepsilon$ a~koncový je celá $\iota$. Dopøedné hrany grafu budou popisovat pøechod mezi stavy ve~smyslu zvìt¹ení délky jména stavu (dopøedná funkce $h(\alpha)$, urèující znak na~dopøedné hranì z $\alpha$). Zpìtné hrany grafu budou popisovat pøechod (zpìtná funkce $z(\alpha)$) mezi stavem $\alpha$ a~nejdel¹ím vlastním suffixem $\alpha$, který je prefixem $\iota$, kdy¾ nastane neshoda. + +\figure{barb.eps}{Vyhledávací automat.}{4.2in} + +\s{Hledej($\sigma$):} +\algo +\:$\alpha \leftarrow \varepsilon$. +\:Pro $x\in\sigma$ postupnì: +\:$\indent$Dokud $h(\alpha) \neq x~\&~\alpha \neq \varepsilon : \alpha \leftarrow z(\alpha)$. +\:$\indent$Pokud $h(\alpha) = x: \alpha \leftarrow \alpha x$. +\:$\indent$Pokud $\alpha = \iota$, ohlásíme výskyt. +\endalgo + +\>Vstupem je $\iota$ hledané slovo (jehla) délky $J=\vert \iota \vert$ a $\sigma$ text (seno) délky $S=\vert \sigma \vert$. +\>Výstupem jsou v¹echny výskyty hledaného slova $\iota$ v textu $\sigma$: $\left\{ k\vert \sigma[k:k+J]=\iota \right\}$ + +Pojïme nyní dokázat, ¾e tento algoritmus správnì ohlásí v¹echny výskyty. + +\s{Definice}: $\alpha(\tau) := $ stav automatu po pøeètení $\tau$ + +\s{Invariant:} Pokud algoritmus pøeète nìjaký vstup, nachází se ve stavu, který je nejdel¹ím suffixem pøeèteného vstupu, který je nìjakým stavem. +$\alpha(\tau) =$ nejdel¹í stav (nejdel¹í prefix jehly), který je suffixem $\tau$ (pøeèteného vstupu). +Pojïme si rozmyslet, ¾e z tohoto invariantu ihnet plyne, ¾e algoritmus najde to, co má. Kdykoli toti¾ ohlásí nìjaký výskyt, tak tam tento výskyt opravdu je. Kdykoli pak má nìjaký výskyt ohlásit, tak se v této situaci jako suffix toho právì pøeèteného textu vyskytuje hledané slovo, pøièem¾ hledané slovo je urèitì stav a zároveò nejdel¹í ze v¹ech existujících stavù. Tak¾e invariant opravdu øíká, ¾e jsme právì v koncovém stavu a algoritmus nám tedy ohlásí výskyt. + +\proof +Indukcí podle kroku algoritmu. Na zaèátku pro prázdný naètený vstup invariant triviálnì platí, tedy prázdný suffix $\tau$ je prefixem $\iota$. V~kroku $n$ máme naètený vstup $\tau$ a k~nìmu naèteme znak $x$. Invariant nám øíká, ¾e nejdel¹í stav, který je suffixem, je nejdel¹í suffix, který je stavem. Nyní se ptáme, jaký je nejdel¹í stav, který se dá \uv{napasovat} na konec øetìzce $\tau x$. Kdykoli v¹ak takovýto suffix máme, tak z nìj mù¾eme $x$ na konci odebrat, èím¾ dostaneme suffix slova $\tau$. + +\>Tedy: pokud $\beta$ je neprázdným suffixem slova $\tau x$, pak $\beta = \gamma x$, kde $\gamma$ je suffix $\tau$. + +Suffix, který máme sestrojit, tedy vznikne z nìjakého suffixu slova $\tau$ pøipsáním~$x$. Chceme najít nejdel¹í suffix slova $\tau x$, který je stavem, tak¾e chceme najít i nejdel¹í suffix pùvodního slova $\tau$, za který se dá pøidat $x$ tak, aby vy¹lo jméno stavu. Staèí tedy u¾ jen \uv{probírat} suffixy $\tau$ od nejdel¹ího po nejkrat¹í, zkou¹et k nim pøidávat $x$ a a¾ to pùjde, tak jsme na¹li nejdel¹í suffix $\tau x$. Pøesnì toto ov¹em algoritmus dìlá, nebo» zpìtná funkce mu v¾dy øekne nejbli¾¹í krat¹í suffix, který je stavem. Pokud pak nemù¾eme $x$ pøidat ani do $\varepsilon$, pak je øe¹ením prázdný suffix. Algoritmus tedy funguje. \qed + +Nyní pojïmì zkoumat to, jak je ve skuteènosti ná¹ algoritmus rychlý. K tomu bychom si ale nejdøív mìli øíct, jak pøesnì budeme automat reprezentovat. V algoritmu vystupují nìjaká porovnávání stavù, pøièem¾ není úplnì jasné, jak zaøídit, aby v¹e trvalo konstantnì dlouho. Vyjde nám to ale docela snadno. K reprezentaci automatu nám toti¾ budou staèit pouze dvì pole. + +\s{Reprezentace automatu:} +Oèíslujeme si stavy délkami pøíslu¹ných prefixù tedy $0 \dots J$. Poté je¹tì potøebujeme nìjakým zpùsobem zakódovat dopøedné a zpìtné hrany. Vzhledem k tomu, ¾e z ka¾dého vrcholu vede v¾dy nejvý¹e jedna dopøedná a nejvý¹e jedna zpìtná, tak nám evidentnì staèí pamatovat si pro ka¾dý typ hran pouze jedno èíslo na vrchol. Budeme mít tedy nìjaké pole dopøedných hran, které nám pro ka¾dý stav øekne, jakým písmenkem je nadepsaná dopøedná hrana ze stavu $I$ do $I+1$. To jsou ale pøesnì písmenky jehly, tak¾e si staèí pamatovat jehlu samotnou. Èili z $I$ do $I+1$ vede hrana nadepsaná $\iota [I]$. Pro zpìtné hrany pak budeme potøebovat pole $Z$, které nám pro stav $I$ øekne èíslo stavu, do kterého vede zpìtná hrana. Tedy $Z[I]$ je cíl zpìtné hrany ze stavu $I$. +S touto reprezentací ji¾ doká¾eme na¹i hledací proceduru pøímoèaøe pøepsat tak, aby sahala pouze do tìchto dvou polí: +\algo +\:$I \leftarrow 0$. +\:Pro znaky $x$ z textu: +\:$\indent$Dokud $\iota[I] \neq x~\&~I \neq 0: I \leftarrow Z[I]$. +\:$\indent$Pokud $\iota[I] = x, pak I \leftarrow I + 1$. +\:$\indent$Pokud $I = J$, ohlásíme výskyt. +\endalgo + +Zatím se v algoritmu je¹tì skrývá drobná chyba -- toti¾ algoritmus se obèas zeptá na dopøednou hranu z posledního stavu. Pokud jsme právì ohlásili výskyt (jsme tedy v posledním stavu) a pøijde nìjaký dal¹í znak, algoritmus se ptá, zda je roven tomu, co je na dopøedné hranì z posledního stavu. Ta ale ov¹em neexistuje. Jednodu¹e to ale napravíme tak, ¾e si pøidáme fiktivní hranu, na které se vyskytuje nìjaké \uv{nepísmenko} -- nìco co se nerovná ¾ádnému jinému písmenku. Zajistíme tak, ¾e se po této hranì nikdy nevydáme. Dodefinujeme tedy $\iota[J]$ odli¹nì od v¹ech znakù. (V jazyce C se toto dodefinování provede vlastnì zadarmo, nebo» ka¾dý øetìzec je v nìm ukonèen znakem s kódem nula, který se ve vstupu nevyskytne\dots Algoritmus bude tedy fungovat i bez tohoto dodefinování. V jiných jazycích je ale na nìj tøeba nezapomenout!) + +\s{Lemma:} Funkce Hledej bì¾í v~èase $\O(S)$. + +\proof +Fonkce {\I Hledej} chodí po dopøedných a zpìtných hranách. Dopøedných hran projdeme urèitì maximálnì tolik, kolik je délka sena. Pro ka¾dý znak pøeètený ze sena toti¾ jdeme nejvý¹e jednou po dopøedné hranì. Se zpìtnými hranami se to má tak, ¾e na jeden pøeètený znak z textu se mù¾eme po zpìtné hranì vracet maximálnì $J$-krát. Z tohoto by nám v¹ak vy¹la slo¾itost $\O(JS)$, èím¾ bychom si nepomohli. Zachrání nás ale pøímoèarý potenciál. Uvìdomme si, ¾e chùze po dopøedné hranì zvý¹í $I$ o jedna a chùze po zpìtné hranì $I$ sní¾í alespoò o jedna. Vzhledem k tomu, ¾e $I$ není nikdy záporné a na zaèátku je nulové, zjistíme, ¾e krokù zpìt mù¾e být maximálnì tolik, kolik krokù dopøedu. Èasová slo¾itost hledání je tedy lineární vzhledem k délce sena. \qed + +Nyní nám zbývá na první pohled malièkost -- toti¾ zkonstruovat automat. Zkonstruovat dopøedné hrany zvládneme zjevnì snadno, jsou toti¾ explicitnì popsané hledaným slovem. Tì¾¹í u¾ to bude pro hrany zpìtné. Vyu¾ijeme k tomu následující pozorování: + +\s{Pozorování:} +Pøedstavme si, ¾e automat u¾ máme hotový a tím, ¾e budeme sledovat jeho chování, chceme zjistit, jak v nìm vedou zpìtné hrany. +Vezmìme si nìjaký stav $\beta$. To, kam z nìj vede zpìtná hrana zjistíme tak, ¾e spustíme automat na øetìzec $\beta$ bez prvního písmenka a stav, ve kterém se automat zastaví je pøesnì ten, kam má vést i zpìtná hrana z $\beta$. Jinými slovy víme, ¾e $z(\beta) = \alpha (\beta[1:])$. +Proè takováto vìc funguje? V¹imìme si, ¾e definice $z$ a to, co nám o $\alpha$ øíká invariant je témìø toto¾ná -- $z(\beta)$ je nejdel¹í vlastní suffix $\beta$, který je stavem, $\alpha(\beta)$ je nejdel¹í suffix $\beta$, který je stavem. Jediná odli¹nost je v tom, ¾e definice $z$ narozdíl od definice $\alpha$ zakazuje nevlastní suffixy. Jak nyní vylouèit suffix $\beta$, který by byl roven $\beta$ samotné? Zkrátíme $\beta$ o první znak. Tím pádem v¹echny suffixy $\beta$ bez prvního znaku jsou stejné jako v¹echny vlastní suffixy $\beta$. + +K èemu je toto pozorování dobré? Rozmysleme si, ¾e pomocí nìj u¾ doká¾eme zkonstruovat zpìtné hrany. Není to ale trochu divné, kdy¾ pøi simulování automatu na øetìzec bez prvního znaku u¾ zpìtné hrany potøebujeme? Není. Za chvíli zjistíme, ¾e takto mù¾eme zji¹»ovat zpìtné hrany postupnì s tím, ¾e pou¾íváme v¾dy jenom ty, které jsme u¾ sestrojili. +Takovémuhle pøístupu, kdy pøi konstruování chtìného u¾ pou¾íváme to, co chceme sestrojit, ale pouze ten kousek, který ji¾ máme hotový, se v angliètinì øíká {\I bootstrapping}\foot{Z tohoto slova vzniklo i {\I bootování} poèítaèù, kdy operaèní systém v podstatì zavádí sám seme. Bootstrap znamená èesky ¹truple -- tedy oèko na konci boty, které slou¾í k usnadnìní nazouvání. A jak souvisí ¹truple s algoritmem? To se zase musíme vrátit k pøíbìzích o baronu Prá¹ilovi, mezi nimi¾ je i ten, ve kterém baron Prá¹il vypráví o tom, jak sám sebe vytáhl z ba¾iny za ¹truple. Stejnì tak i my budeme algoritmus konstruovat tím, ¾e se budeme sami vytahovat za ¹truple, tedy bootstrappovat.}. +V¹imnìme si, ¾e pøi výpoètu se vstupem $\beta$ projde automat jenom prvních $\vert \beta \vert$ stavù. Automat se evidentnì nemù¾e dostat dál, proto¾e na ka¾dý krok dopøedu (doprava) spotøebuje písmenko $\beta$. Tak¾e krokù doprava je maximálnì tolik, kolik je $\vert \beta \vert$. Jinými slovy kdybychom ji¾ mìli zkonstruované zpìtné hrany pro prvních $\vert \beta \vert$ stavù (tedy $0 \dots \vert \beta \vert - 1$), tak pøi tomto výpoètu, kt +erý potøebujeme na zkonstuovíní zpìtné hrany z $\beta$, je¹tì tuto zpìtnou hranu nemù¾eme potøebovat. Vystaèíme si s tìmi, které ji¾ máme zkonstruované. +Nabízí se tedy zaèít zpìtnou hranou z prvního znaku (která vede evidentnì do $\varepsilon$), pak postupnì brát dal¹í stavy a pro ka¾dý z nich si spoèítáme kdy spustíme automat na jméno stavu bez prvního znaku a tím získáme dal¹í zpìtnou hranu. Toto funguje, ale je to kvadratické \dots. Máme toti¾ $J$ stavù a pro ka¾dý z nich nám automat bì¾í v èase a¾ lineárním s $J$. Jak z toho ven? +Z prvního stavu povede zpìtná funkce do $\varepsilon$. Prodl¹í stavy chceme spoèítat zpìtnou funkci. Z druhého stavu $\iota[0:2]$ tedy automat spustíme na $\iota[1:2]$, dále pak na $\iota[1:3]$, $\iota[1:4]$, atd. Ty øetìzce, pro které potøebujeme spo¹tìt automat, abychom dostali zpìtné hrany, jsou tedy ve skuteènosti takové, ¾e ka¾dý dal¹í dostaneme roz¹íøením pøedchozího o jeden znak. To jsou ale pøesnì ty stavy, kterými projde automat pøi spracovávání øetezce $\iota$ od prvního znaku dál. Jedním prùchodem automatu nad jehlou bez prvního písmenka, se tím pádem rovnou dozvíme v¹echny údaje, které potøebujeme. +Z pøedchozího pozorování plyne, ¾e nikdy nebudeme potøebovat zpìtnou hranu, kterou jsme je¹tì nezkonstruovali a jeliko¾ víme, jedno prohledání trvá lineárnì s délkou toto v èem hledáme, tak toto celé pobì¾í v lineárním èase. Dostaneme tedy následující algoritmus: + +\s{Konstrukce zpìtné funkce:} +\algo +\:$Z[0] \leftarrow ?$, $Z[1] \leftarrow 0.$ +\:$I \leftarrow 0$ +\:pro $k = 2$ do $J$ +\:$\indent$$I \leftarrow krok( I , \iota [k])$ +\:$\indent$$Z[k] \leftarrow I$ +\endalgo + +Zaèínáme tím, ¾e nastavíme zpìtnou hranu z prvních dvou stavù, pøièem¾ $z[0]$ je nedefinované, proto¾e tuto zpìtnou hranu nikdy nepou¾íváme. Dále postupnì simulujeme výpoèet automatu nad slovem bez prvního znaku a po ka¾dém kroku se dozvíme novou zpìtnou hranu. {\I Krokem} automatu pak není nic jiného ne¾ vnitøek (3. a 4. bod) na¹í hledací procedury. To, kam jsme se dostali pak zaznamenáme jako zpìtnou funkci z $k$. +Èili pou¹tíme automat nanjehlu bez prvního písmenka, provedeme v¾dy jeden krok automatu (pøes dal¹í písmenko jehly) a zapamatujeme si, jakou zpìtnou funkci jsme zrovna dostali. Díky pozorováním navíc víme, ¾e zpìtné hrany konstruujeme správnì, nikdy nepou¾ijeme zpìtnou hranu, kterou jsme je¹tì nesestrojili a víme i to, ¾e celou konstrukci zvládneme v lineárním èase s délkou jehly. + +\s{Vìta:} Algoritmus KMP najde v¹echny výskyty v èase $O(J+S)$. +Linéární èas s délkou jehly potøebujeme na postavení automatu, lineární èas s délkou sena pak potøebujeme na samotné vyhledání. + + + + + +\s{Vysvìtlení:} V¹imnìte si, ¾e $z(i)$ je pøesnì stav, do nej¾ se dostaneme pøi spu¹tìní na¹eho vyhledávacího algoritmu na øetìzec $\iota [2:i]$, èili na $i$-tý prefix bez prvního písmenka. Proè to tak je? Zpìtná funkce øíká, jaký je nejdel¹í vlastní suffix daného stavu, který je také stavem, zatímco $\alpha$ oznaèuje nejdel¹í suffix textu, který je stavem. Tyto dvì vìci se pøeci li¹í jen v~tom, ¾e ta druhá pøipou¹tí i nevlastní suffixy, a právì tomu zabráníme odstranìním prvního znaku. Tak¾e $z()$ získáme tak, ¾e spustíme vyhledávání na èást samotného slova $\iota$. Jen¾e k~vyhledávání zase potøebujeme zpìtnou funkci $z$. Proto budeme zpìtnou funkci vytváøet postupne od nejkrat¹ích prefixù. Zøejmì $z(1) = \varepsilon$. Pokud ji¾ máme $z(i)$, pak výpoèet $z(i+1)$ odpovídá spu¹tení automatu na slovo délky $i$ a pritom budeme zpìtnou funkci potøebovat jen pro stavy délky $i$ nebo men¹í, pro které ji ji¾ máme hotovou. + +Navíc nemusíme pro jednotlivé prefixy spou¹tìt výpoèet v¾dy znovu od zaèátku, proto¾e $(i+1)$-ní prefix +je prodlou¾ením $i$-tého prefixu o~jeden znak. Staèí tedy spustit algoritmus na celý øetìzec $\iota$ a sledovat, jakými stavy bude procházet. To budou pøesnì hodnoty zpìtné funkce. Vytvoøení zpìtné funkce se tak nakonec zredukovalo na jediné vyhledávání v~textu o~délce $J-1$, a proto pobì¾í v èase $\O(J)$. Èasová slo¾itost celého algoritmu tedy bude $\O(S+J)$. + +\h{Algoritmus Rabin \& Karp} +Tento algoritmus funguje tak, ¾e porovnává hash hledaného øetìzce s~hashem aktuálního podøetìzce (\uv{posuvné okénko} stejné délky jako hledaný øetìzec) v~textu a aktuální podøetìzec porovná se vzorkem pouze v~pøípadì, kdy¾ mají shodný hash. Kdy¾ si zvolíme tu správnou hashovací funkci, budeme moci vypoèítat hash následujíciho podøetìzce na základe hashe toho aktuálního. Jako hashovací funkci $h: \Sigma^J \rightarrow \bb Z$ pou¾ijeme následující: $h(x_{0},...,x_{J-1}) = ( \sum_{i=0}^{J-1} x_{i}.p^{J-1-i}) \bmod N$, kde $N$ je velikost prostoru, do kterého hashujeme. Jak zjistíme hash následujícího podøetìzce? +\itemize\ibull +\:$h = x_{0}.p^{J} + x_{1}.p^{J-1} + ... + x_{J-1}.p^{1}$ +\:$h^{'} = x_{1}.p^{J} + x_{2}.p^{J-1} + ... + x_{J}.p^{1}$ +\:$h^{'} = (h - x_{0}.p^{J}).p + x_{J}.p^{1}$ +\endlist +Tady mù¾eme vidìt, ¾e hash následujícího øetìzce lze pøepoèítat na základì toho pøedchozího v konstantním èase. +Èasová slo¾itost je v nejlep¹ím pøípadì lineární vzhledem k~délce textu, zatímco nejhor¹í pøípad mú¾e trvat a¾ $\Theta(JS)$. + +\bye diff --git a/6-kmp/Makefile b/6-kmp/Makefile new file mode 100644 index 0000000..1831d14 --- /dev/null +++ b/6-kmp/Makefile @@ -0,0 +1,3 @@ +P=6-kmp + +include ../Makerules diff --git a/6-kmp/barb.eps b/6-kmp/barb.eps new file mode 100644 index 0000000..a136c1f --- /dev/null +++ b/6-kmp/barb.eps @@ -0,0 +1,2644 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: inkscape 0.46 +%%Pages: 1 +%%Orientation: Portrait +%%BoundingBox: 1 666 595 775 +%%HiResBoundingBox: 1.6 666.74151 594.29565 774.11124 +%%EndComments +%%Page: 1 1 +0 842 translate +0.8 -0.8 scale +0 0 0 setrgbcolor +[] 0 setdash +1 setlinewidth +0 setlinejoin +0 setlinecap +gsave [1 0 0 1 0 0] concat +gsave [0.4054521 0 0 0.4054521 18.60297 20.583106] concat +gsave +0 0 0 setrgbcolor +newpath +174.28572 329.50504 moveto +174.28572 335.81361 169.16572 340.93361 162.85715 340.93361 curveto +156.54858 340.93361 151.42858 335.81361 151.42858 329.50504 curveto +151.42858 323.19646 156.54858 318.07646 162.85715 318.07646 curveto +169.16572 318.07646 174.28572 323.19646 174.28572 329.50504 curveto +closepath +fill +grestore +grestore +gsave [0.4054521 0 0 0.4054521 96.60297 20.583106] concat +gsave +0 0 0 setrgbcolor +newpath +174.28572 329.50504 moveto +174.28572 335.81361 169.16572 340.93361 162.85715 340.93361 curveto +156.54858 340.93361 151.42858 335.81361 151.42858 329.50504 curveto +151.42858 323.19646 156.54858 318.07646 162.85715 318.07646 curveto +169.16572 318.07646 174.28572 323.19646 174.28572 329.50504 curveto +closepath +fill +grestore +grestore +gsave [0.4054521 0 0 0.4054521 174.60297 20.583106] concat +gsave +0 0 0 setrgbcolor +newpath +174.28572 329.50504 moveto +174.28572 335.81361 169.16572 340.93361 162.85715 340.93361 curveto +156.54858 340.93361 151.42858 335.81361 151.42858 329.50504 curveto +151.42858 323.19646 156.54858 318.07646 162.85715 318.07646 curveto +169.16572 318.07646 174.28572 323.19646 174.28572 329.50504 curveto +closepath +fill +grestore +grestore +gsave [0.4054521 0 0 0.4054521 252.60297 20.583106] concat +gsave +0 0 0 setrgbcolor +newpath +174.28572 329.50504 moveto +174.28572 335.81361 169.16572 340.93361 162.85715 340.93361 curveto +156.54858 340.93361 151.42858 335.81361 151.42858 329.50504 curveto +151.42858 323.19646 156.54858 318.07646 162.85715 318.07646 curveto +169.16572 318.07646 174.28572 323.19646 174.28572 329.50504 curveto +closepath +fill +grestore +grestore +gsave [0.4054521 0 0 0.4054521 330.60297 20.583106] concat +gsave +0 0 0 setrgbcolor +newpath +174.28572 329.50504 moveto +174.28572 335.81361 169.16572 340.93361 162.85715 340.93361 curveto +156.54858 340.93361 151.42858 335.81361 151.42858 329.50504 curveto +151.42858 323.19646 156.54858 318.07646 162.85715 318.07646 curveto +169.16572 318.07646 174.28572 323.19646 174.28572 329.50504 curveto +closepath +fill +grestore +grestore +gsave [0.4054521 0 0 0.4054521 408.60297 20.583106] concat +gsave +0 0 0 setrgbcolor +newpath +174.28572 329.50504 moveto +174.28572 335.81361 169.16572 340.93361 162.85715 340.93361 curveto +156.54858 340.93361 151.42858 335.81361 151.42858 329.50504 curveto +151.42858 323.19646 156.54858 318.07646 162.85715 318.07646 curveto +169.16572 318.07646 174.28572 323.19646 174.28572 329.50504 curveto +closepath +fill +grestore +grestore +gsave [0.4054521 0 0 0.4054521 486.60297 20.583106] concat +gsave +0 0 0 setrgbcolor +newpath +174.28572 329.50504 moveto +174.28572 335.81361 169.16572 340.93361 162.85715 340.93361 curveto +156.54858 340.93361 151.42858 335.81361 151.42858 329.50504 curveto +151.42858 323.19646 156.54858 318.07646 162.85715 318.07646 curveto +169.16572 318.07646 174.28572 323.19646 174.28572 329.50504 curveto +closepath +fill +grestore +grestore +gsave [0.4054521 0 0 0.4054521 564.60297 20.583106] concat +gsave +0 0 0 setrgbcolor +newpath +174.28572 329.50504 moveto +174.28572 335.81361 169.16572 340.93361 162.85715 340.93361 curveto +156.54858 340.93361 151.42858 335.81361 151.42858 329.50504 curveto +151.42858 323.19646 156.54858 318.07646 162.85715 318.07646 curveto +169.16572 318.07646 174.28572 323.19646 174.28572 329.50504 curveto +closepath +fill +grestore +grestore +gsave [0.4054521 0 0 0.4054521 -59.397034 20.582993] concat +gsave +0 0 0 setrgbcolor +newpath +174.28572 329.50504 moveto +174.28572 335.81361 169.16572 340.93361 162.85715 340.93361 curveto +156.54858 340.93361 151.42858 335.81361 151.42858 329.50504 curveto +151.42858 323.19646 156.54858 318.07646 162.85715 318.07646 curveto +169.16572 318.07646 174.28572 323.19646 174.28572 329.50504 curveto +closepath +fill +grestore +grestore +gsave [0.4054521 0 0 0.4054521 646.60297 20.582936] concat +gsave +0 0 0 setrgbcolor +newpath +174.28572 329.50504 moveto +174.28572 335.81361 169.16572 340.93361 162.85715 340.93361 curveto +156.54858 340.93361 151.42858 335.81361 151.42858 329.50504 curveto +151.42858 323.19646 156.54858 318.07646 162.85715 318.07646 curveto +169.16572 318.07646 174.28572 323.19646 174.28572 329.50504 curveto +closepath +fill +grestore +grestore +gsave +0 0 0 setrgbcolor +newpath +10.354191 130.68182 moveto +9.2204018 131.59589 lineto +8.4996932 131.05097 7.8258658 130.77851 7.1989174 130.7785 curveto +6.6832888 130.77851 6.3053595 130.91621 6.0651283 131.19159 curveto +5.8307506 131.46699 5.7135632 131.76289 5.7135658 132.07928 curveto +5.7135632 132.48945 5.8893443 132.83222 6.2409096 133.1076 curveto +6.5924686 133.37714 7.108093 133.51191 7.7877846 133.5119 curveto +7.8756704 133.51191 8.0221546 133.50898 8.2272377 133.50311 curveto +8.2272377 134.83026 lineto +8.0397327 134.82441 7.8991079 134.82148 7.8053627 134.82147 curveto +6.9674682 134.82148 6.3844609 134.98261 6.0563393 135.30487 curveto +5.734071 135.62714 5.5729383 135.99042 5.5729408 136.39471 curveto +5.5729383 136.81073 5.7370007 137.16229 6.0651283 137.4494 curveto +6.39325 137.73065 6.782898 137.87128 7.2340736 137.87128 curveto +8.0602405 137.87128 8.8336772 137.48749 9.5543861 136.71991 curveto +10.688175 137.67792 lineto +9.7506685 138.67401 8.5846541 139.17206 7.1901283 139.17206 curveto +6.0944222 139.17206 5.2770402 138.89374 4.7379799 138.3371 curveto +4.1989163 137.78046 3.9293853 137.133 3.9293861 136.39471 curveto +3.9293853 135.33417 4.4450098 134.58124 5.4762611 134.13593 curveto +4.6149315 133.6496 4.1842678 132.9787 4.184269 132.12323 curveto +4.1842678 131.42597 4.4391504 130.80195 4.9489174 130.25116 curveto +5.4586806 129.69453 6.2409064 129.41621 7.2955971 129.4162 curveto +8.5026229 129.41621 9.5221531 129.83808 10.354191 130.68182 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +83.15136 138.49641 moveto +81.683586 138.49641 lineto +81.683586 125.61165 lineto +83.265617 125.61165 lineto +83.265617 130.20833 lineto +83.933583 129.37045 84.786121 128.9515 85.823235 128.95149 curveto +86.397447 128.9515 86.939439 129.06869 87.449211 129.30305 curveto +87.964829 129.53158 88.386703 129.85677 88.714836 130.27864 curveto +89.048812 130.69466 89.309554 131.19857 89.497063 131.79036 curveto +89.684554 132.38216 89.778303 133.01497 89.778313 133.6888 curveto +89.778303 135.28841 89.382796 136.52474 88.591789 137.39778 curveto +87.800766 138.27083 86.851549 138.70735 85.744133 138.70735 curveto +84.642566 138.70735 83.778309 138.24739 83.15136 137.32747 curveto +83.15136 138.49641 lineto +83.133781 133.75911 moveto +83.133779 134.87825 83.286122 135.68685 83.590813 136.18489 curveto +84.088856 136.99935 84.762683 137.40657 85.612297 137.40657 curveto +86.303698 137.40657 86.901353 137.10774 87.405266 136.51009 curveto +87.909165 135.90657 88.161118 135.01009 88.161125 133.82063 curveto +88.161118 132.60189 87.917954 131.70248 87.431633 131.12239 curveto +86.951158 130.54232 86.368151 130.25228 85.68261 130.25227 curveto +84.991199 130.25228 84.393543 130.55404 83.889641 131.15755 curveto +83.385732 131.75521 83.133779 132.6224 83.133781 133.75911 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +157.47488 138.77879 moveto +156.00711 138.77879 lineto +156.00711 125.89403 lineto +157.58914 125.89403 lineto +157.58914 130.49071 lineto +158.25711 129.65283 159.10965 129.23388 160.14676 129.23387 curveto +160.72097 129.23388 161.26296 129.35107 161.77274 129.58543 curveto +162.28835 129.81396 162.71023 130.13915 163.03836 130.56102 curveto +163.37234 130.97704 163.63308 131.48095 163.82059 132.07274 curveto +164.00808 132.66454 164.10183 133.29735 164.10184 133.97118 curveto +164.10183 135.57079 163.70632 136.80712 162.91531 137.68016 curveto +162.12429 138.55321 161.17507 138.98973 160.06766 138.98973 curveto +158.96609 138.98973 158.10183 138.52977 157.47488 137.60985 curveto +157.47488 138.77879 lineto +157.45731 134.04149 moveto +157.4573 135.16063 157.60965 135.96923 157.91434 136.46727 curveto +158.41238 137.28172 159.08621 137.68895 159.93582 137.68895 curveto +160.62722 137.68895 161.22488 137.39012 161.72879 136.79247 curveto +162.23269 136.18895 162.48464 135.29247 162.48465 134.10301 curveto +162.48464 132.88427 162.24148 131.98485 161.75516 131.40477 curveto +161.27468 130.8247 160.69168 130.53466 160.00613 130.53465 curveto +159.31472 130.53466 158.71707 130.83642 158.21317 131.43993 curveto +157.70926 132.03759 157.4573 132.90478 157.45731 134.04149 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +172.12625 137.62743 moveto +171.54031 138.12547 170.97488 138.47704 170.42996 138.68211 curveto +169.89089 138.88719 169.31082 138.98973 168.68973 138.98973 curveto +167.66433 138.98973 166.87625 138.74071 166.32547 138.24266 curveto +165.77469 137.73876 165.4993 137.09715 165.4993 136.31786 curveto +165.4993 135.86083 165.60184 135.44481 165.80692 135.06981 curveto +166.01785 134.68895 166.29031 134.38427 166.6243 134.15575 curveto +166.96414 133.92724 167.345 133.75438 167.76688 133.63719 curveto +168.07742 133.55517 168.54617 133.47606 169.17313 133.39989 curveto +170.45046 133.24755 171.39089 133.06591 171.99442 132.85497 curveto +172.00027 132.63817 172.0032 132.50048 172.0032 132.44188 curveto +172.0032 131.79736 171.85378 131.34325 171.55496 131.07957 curveto +171.15066 130.72216 170.55007 130.54345 169.7532 130.54344 curveto +169.00906 130.54345 168.45828 130.67529 168.10086 130.93895 curveto +167.7493 131.19677 167.48855 131.65673 167.31863 132.31883 curveto +165.77176 132.10789 lineto +165.91238 131.44579 166.14383 130.91259 166.46609 130.50829 curveto +166.78836 130.09814 167.25418 129.78466 167.86356 129.56786 curveto +168.47293 129.34521 169.17898 129.23388 169.98172 129.23387 curveto +170.77859 129.23388 171.42605 129.32763 171.9241 129.51512 curveto +172.42214 129.70263 172.78835 129.93993 173.02274 130.22704 curveto +173.2571 130.50829 173.42116 130.86572 173.51492 131.2993 curveto +173.56765 131.56884 173.59402 132.05517 173.59402 132.75829 curveto +173.59402 134.86766 lineto +173.59402 136.33837 173.62624 137.27001 173.6907 137.66258 curveto +173.76101 138.0493 173.89577 138.42137 174.095 138.77879 curveto +172.44266 138.77879 lineto +172.27859 138.45067 172.17312 138.06688 172.12625 137.62743 curveto +171.99442 134.09422 moveto +171.42019 134.3286 170.55886 134.52782 169.41043 134.69188 curveto +168.76004 134.78563 168.30008 134.8911 168.03055 135.00829 curveto +167.76101 135.12548 167.55301 135.29833 167.40652 135.52684 curveto +167.26004 135.7495 167.1868 135.99852 167.1868 136.27391 curveto +167.1868 136.69579 167.345 137.04735 167.66141 137.3286 curveto +167.98367 137.60985 168.45242 137.75047 169.06766 137.75047 curveto +169.67703 137.75047 170.21902 137.61864 170.69363 137.35497 curveto +171.16824 137.08544 171.51687 136.71923 171.73953 136.25633 curveto +171.90945 135.89891 171.99441 135.37157 171.99442 134.6743 curveto +171.99442 134.09422 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +229.00638 138.77878 moveto +227.5386 138.77878 lineto +227.5386 125.89401 lineto +229.12064 125.89401 lineto +229.12064 130.49069 lineto +229.7886 129.65281 230.64114 129.23387 231.67825 129.23386 curveto +232.25247 129.23387 232.79446 129.35105 233.30423 129.58542 curveto +233.81985 129.81394 234.24172 130.13914 234.56985 130.561 curveto +234.90383 130.97703 235.16457 131.48093 235.35208 132.07272 curveto +235.53957 132.66453 235.63332 133.29734 235.63333 133.97116 curveto +235.63332 135.57077 235.23781 136.8071 234.44681 137.68015 curveto +233.65578 138.55319 232.70657 138.98972 231.59915 138.98972 curveto +230.49758 138.98972 229.63333 138.52975 229.00638 137.60983 curveto +229.00638 138.77878 lineto +228.9888 134.04147 moveto +228.9888 135.16062 229.14114 135.96921 229.44583 136.46725 curveto +229.94387 137.28171 230.6177 137.68894 231.46732 137.68893 curveto +232.15872 137.68894 232.75637 137.39011 233.26028 136.79245 curveto +233.76418 136.18894 234.01614 135.29245 234.01614 134.103 curveto +234.01614 132.88425 233.77297 131.98484 233.28665 131.40475 curveto +232.80618 130.82468 232.22317 130.53465 231.53763 130.53464 curveto +230.84622 130.53465 230.24856 130.8364 229.74466 131.43991 curveto +229.24075 132.03757 228.9888 132.90476 228.9888 134.04147 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +243.65775 137.62741 moveto +243.0718 138.12546 242.50637 138.47702 241.96146 138.6821 curveto +241.42239 138.88718 240.84231 138.98972 240.22122 138.98972 curveto +239.19583 138.98972 238.40774 138.74069 237.85696 138.24265 curveto +237.30618 137.73874 237.03079 137.09714 237.03079 136.31784 curveto +237.03079 135.86081 237.13333 135.4448 237.33841 135.06979 curveto +237.54935 134.68894 237.82181 134.38425 238.15579 134.15573 curveto +238.49563 133.92722 238.87649 133.75437 239.29837 133.63718 curveto +239.60891 133.55515 240.07766 133.47605 240.70462 133.39987 curveto +241.98196 133.24753 242.92239 133.06589 243.52591 132.85495 curveto +243.53176 132.63816 243.53469 132.50046 243.5347 132.44186 curveto +243.53469 131.79734 243.38528 131.34324 243.08646 131.07956 curveto +242.68215 130.72215 242.08157 130.54343 241.2847 130.54343 curveto +240.54055 130.54343 239.98977 130.67527 239.63235 130.93893 curveto +239.28079 131.19675 239.02005 131.65671 238.85013 132.31882 curveto +237.30325 132.10788 lineto +237.44388 131.44578 237.67532 130.91258 237.99759 130.50827 curveto +238.31985 130.09812 238.78567 129.78465 239.39505 129.56784 curveto +240.00442 129.34519 240.71048 129.23387 241.51321 129.23386 curveto +242.31008 129.23387 242.95754 129.32762 243.4556 129.51511 curveto +243.95364 129.70262 244.31985 129.93992 244.55423 130.22702 curveto +244.7886 130.50828 244.95266 130.8657 245.04642 131.29929 curveto +245.09914 131.56882 245.12551 132.05515 245.12552 132.75827 curveto +245.12552 134.86765 lineto +245.12551 136.33835 245.15774 137.26999 245.2222 137.66257 curveto +245.2925 138.04929 245.42727 138.42136 245.6265 138.77878 curveto +243.97415 138.77878 lineto +243.81008 138.45065 243.70461 138.06686 243.65775 137.62741 curveto +243.52591 134.09421 moveto +242.95168 134.32859 242.09036 134.52781 240.94193 134.69186 curveto +240.29153 134.78562 239.83157 134.89109 239.56204 135.00827 curveto +239.29251 135.12546 239.0845 135.29831 238.93802 135.52682 curveto +238.79153 135.74948 238.71829 135.99851 238.71829 136.2739 curveto +238.71829 136.69577 238.87649 137.04733 239.1929 137.32858 curveto +239.51516 137.60983 239.98391 137.75046 240.59915 137.75046 curveto +241.20852 137.75046 241.75051 137.61862 242.22513 137.35495 curveto +242.69973 137.08542 243.04836 136.71921 243.27103 136.25632 curveto +243.44094 135.8989 243.5259 135.37155 243.52591 134.67429 curveto +243.52591 134.09421 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +247.56888 138.77878 moveto +247.56888 129.44479 lineto +248.99271 129.44479 lineto +248.99271 130.85983 lineto +249.35598 130.19773 249.68997 129.76121 249.99466 129.55026 curveto +250.3052 129.33933 250.64505 129.23387 251.01419 129.23386 curveto +251.54739 129.23387 252.08938 129.40379 252.64017 129.74362 curveto +252.09525 131.2114 lineto +251.70852 130.98289 251.3218 130.86863 250.93509 130.86862 curveto +250.58938 130.86863 250.27884 130.9741 250.00345 131.18503 curveto +249.72805 131.39011 249.53177 131.67722 249.41458 132.04636 curveto +249.2388 132.60886 249.15091 133.2241 249.15091 133.89206 curveto +249.15091 138.77878 lineto +247.56888 138.77878 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +304.35175 138.77879 moveto +302.88397 138.77879 lineto +302.88397 125.89403 lineto +304.466 125.89403 lineto +304.466 130.49071 lineto +305.13397 129.65283 305.98651 129.23388 307.02362 129.23387 curveto +307.59783 129.23388 308.13983 129.35107 308.6496 129.58543 curveto +309.16521 129.81396 309.58709 130.13915 309.91522 130.56102 curveto +310.2492 130.97704 310.50994 131.48095 310.69745 132.07274 curveto +310.88494 132.66454 310.97869 133.29735 310.9787 133.97118 curveto +310.97869 135.57079 310.58318 136.80712 309.79218 137.68016 curveto +309.00115 138.55321 308.05193 138.98973 306.94452 138.98973 curveto +305.84295 138.98973 304.9787 138.52977 304.35175 137.60985 curveto +304.35175 138.77879 lineto +304.33417 134.04149 moveto +304.33416 135.16063 304.48651 135.96923 304.7912 136.46727 curveto +305.28924 137.28172 305.96307 137.68895 306.81268 137.68895 curveto +307.50408 137.68895 308.10174 137.39012 308.60565 136.79247 curveto +309.10955 136.18895 309.3615 135.29247 309.36151 134.10301 curveto +309.3615 132.88427 309.11834 131.98485 308.63202 131.40477 curveto +308.15154 130.8247 307.56854 130.53466 306.883 130.53465 curveto +306.19158 130.53466 305.59393 130.83642 305.09003 131.43993 curveto +304.58612 132.03759 304.33416 132.90478 304.33417 134.04149 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +319.00311 137.62743 moveto +318.41717 138.12547 317.85174 138.47704 317.30682 138.68211 curveto +316.76776 138.88719 316.18768 138.98973 315.56659 138.98973 curveto +314.5412 138.98973 313.75311 138.74071 313.20233 138.24266 curveto +312.65155 137.73876 312.37616 137.09715 312.37616 136.31786 curveto +312.37616 135.86083 312.4787 135.44481 312.68378 135.06981 curveto +312.89471 134.68895 313.16717 134.38427 313.50116 134.15575 curveto +313.841 133.92724 314.22186 133.75438 314.64374 133.63719 curveto +314.95428 133.55517 315.42303 133.47606 316.04999 133.39989 curveto +317.32733 133.24755 318.26775 133.06591 318.87128 132.85497 curveto +318.87713 132.63817 318.88006 132.50048 318.88007 132.44188 curveto +318.88006 131.79736 318.73064 131.34325 318.43182 131.07957 curveto +318.02752 130.72216 317.42694 130.54345 316.63007 130.54344 curveto +315.88592 130.54345 315.33514 130.67529 314.97772 130.93895 curveto +314.62616 131.19677 314.36541 131.65673 314.1955 132.31883 curveto +312.64862 132.10789 lineto +312.78924 131.44579 313.02069 130.91259 313.34296 130.50829 curveto +313.66522 130.09814 314.13104 129.78466 314.74042 129.56786 curveto +315.34979 129.34521 316.05584 129.23388 316.85858 129.23387 curveto +317.65545 129.23388 318.30291 129.32763 318.80096 129.51512 curveto +319.299 129.70263 319.66521 129.93993 319.8996 130.22704 curveto +320.13396 130.50829 320.29803 130.86572 320.39178 131.2993 curveto +320.44451 131.56884 320.47088 132.05517 320.47089 132.75829 curveto +320.47089 134.86766 lineto +320.47088 136.33837 320.5031 137.27001 320.56757 137.66258 curveto +320.63787 138.0493 320.77263 138.42137 320.97186 138.77879 curveto +319.31952 138.77879 lineto +319.15545 138.45067 319.04998 138.06688 319.00311 137.62743 curveto +318.87128 134.09422 moveto +318.29705 134.3286 317.43572 134.52782 316.28729 134.69188 curveto +315.6369 134.78563 315.17694 134.8911 314.90741 135.00829 curveto +314.63788 135.12548 314.42987 135.29833 314.28339 135.52684 curveto +314.1369 135.7495 314.06366 135.99852 314.06366 136.27391 curveto +314.06366 136.69579 314.22186 137.04735 314.53827 137.3286 curveto +314.86053 137.60985 315.32928 137.75047 315.94452 137.75047 curveto +316.55389 137.75047 317.09588 137.61864 317.5705 137.35497 curveto +318.0451 137.08544 318.39373 136.71923 318.61639 136.25633 curveto +318.78631 135.89891 318.87127 135.37157 318.87128 134.6743 curveto +318.87128 134.09422 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +322.91425 138.77879 moveto +322.91425 129.44481 lineto +324.33807 129.44481 lineto +324.33807 130.85985 lineto +324.70135 130.19775 325.03534 129.76122 325.34003 129.55028 curveto +325.65057 129.33935 325.99041 129.23388 326.35956 129.23387 curveto +326.89276 129.23388 327.43475 129.4038 327.98553 129.74364 curveto +327.44061 131.21141 lineto +327.05389 130.9829 326.66717 130.86864 326.28046 130.86864 curveto +325.93475 130.86864 325.6242 130.97411 325.34882 131.18504 curveto +325.07342 131.39013 324.87713 131.67724 324.75995 132.04637 curveto +324.58416 132.60888 324.49627 133.22411 324.49628 133.89207 curveto +324.49628 138.77879 lineto +322.91425 138.77879 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +330.40253 138.77879 moveto +328.93475 138.77879 lineto +328.93475 125.89403 lineto +330.51678 125.89403 lineto +330.51678 130.49071 lineto +331.18475 129.65283 332.03729 129.23388 333.0744 129.23387 curveto +333.64861 129.23388 334.19061 129.35107 334.70038 129.58543 curveto +335.216 129.81396 335.63787 130.13915 335.966 130.56102 curveto +336.29998 130.97704 336.56072 131.48095 336.74823 132.07274 curveto +336.93572 132.66454 337.02947 133.29735 337.02948 133.97118 curveto +337.02947 135.57079 336.63396 136.80712 335.84296 137.68016 curveto +335.05193 138.55321 334.10272 138.98973 332.9953 138.98973 curveto +331.89373 138.98973 331.02948 138.52977 330.40253 137.60985 curveto +330.40253 138.77879 lineto +330.38495 134.04149 moveto +330.38495 135.16063 330.53729 135.96923 330.84198 136.46727 curveto +331.34002 137.28172 332.01385 137.68895 332.86346 137.68895 curveto +333.55486 137.68895 334.15252 137.39012 334.65643 136.79247 curveto +335.16033 136.18895 335.41228 135.29247 335.41229 134.10301 curveto +335.41228 132.88427 335.16912 131.98485 334.6828 131.40477 curveto +334.20233 130.8247 333.61932 130.53466 332.93378 130.53465 curveto +332.24237 130.53466 331.64471 130.83642 331.14081 131.43993 curveto +330.6369 132.03759 330.38495 132.90478 330.38495 134.04149 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +376.90637 138.77878 moveto +375.4386 138.77878 lineto +375.4386 125.89401 lineto +377.02063 125.89401 lineto +377.02063 130.49069 lineto +377.6886 129.65281 378.54113 129.23387 379.57825 129.23386 curveto +380.15246 129.23387 380.69445 129.35105 381.20422 129.58542 curveto +381.71984 129.81394 382.14172 130.13914 382.46985 130.561 curveto +382.80382 130.97703 383.06457 131.48093 383.25208 132.07272 curveto +383.43957 132.66453 383.53332 133.29734 383.53333 133.97116 curveto +383.53332 135.57077 383.13781 136.8071 382.3468 137.68015 curveto +381.55578 138.55319 380.60656 138.98972 379.49915 138.98972 curveto +378.39758 138.98972 377.53332 138.52975 376.90637 137.60983 curveto +376.90637 138.77878 lineto +376.88879 134.04147 moveto +376.88879 135.16062 377.04113 135.96921 377.34583 136.46725 curveto +377.84387 137.28171 378.5177 137.68894 379.36731 137.68893 curveto +380.05871 137.68894 380.65637 137.39011 381.16028 136.79245 curveto +381.66418 136.18894 381.91613 135.29245 381.91614 134.103 curveto +381.91613 132.88425 381.67297 131.98484 381.18665 131.40475 curveto +380.70617 130.82468 380.12316 130.53465 379.43762 130.53464 curveto +378.74621 130.53465 378.14856 130.8364 377.64465 131.43991 curveto +377.14074 132.03757 376.88879 132.90476 376.88879 134.04147 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +391.55774 137.62741 moveto +390.9718 138.12546 390.40637 138.47702 389.86145 138.6821 curveto +389.32238 138.88718 388.74231 138.98972 388.12122 138.98972 curveto +387.09582 138.98972 386.30774 138.74069 385.75696 138.24265 curveto +385.20618 137.73874 384.93079 137.09714 384.93079 136.31784 curveto +384.93079 135.86081 385.03332 135.4448 385.2384 135.06979 curveto +385.44934 134.68894 385.7218 134.38425 386.05579 134.15573 curveto +386.39563 133.92722 386.77649 133.75437 387.19836 133.63718 curveto +387.50891 133.55515 387.97766 133.47605 388.60461 133.39987 curveto +389.88195 133.24753 390.82238 133.06589 391.4259 132.85495 curveto +391.43176 132.63816 391.43469 132.50046 391.43469 132.44186 curveto +391.43469 131.79734 391.28527 131.34324 390.98645 131.07956 curveto +390.58215 130.72215 389.98156 130.54343 389.18469 130.54343 curveto +388.44055 130.54343 387.88977 130.67527 387.53235 130.93893 curveto +387.18078 131.19675 386.92004 131.65671 386.75012 132.31882 curveto +385.20325 132.10788 lineto +385.34387 131.44578 385.57532 130.91258 385.89758 130.50827 curveto +386.21985 130.09812 386.68567 129.78465 387.29504 129.56784 curveto +387.90442 129.34519 388.61047 129.23387 389.41321 129.23386 curveto +390.21008 129.23387 390.85754 129.32762 391.35559 129.51511 curveto +391.85363 129.70262 392.21984 129.93992 392.45422 130.22702 curveto +392.68859 130.50828 392.85265 130.8657 392.94641 131.29929 curveto +392.99914 131.56882 393.0255 132.05515 393.02551 132.75827 curveto +393.02551 134.86765 lineto +393.0255 136.33835 393.05773 137.26999 393.12219 137.66257 curveto +393.1925 138.04929 393.32726 138.42136 393.52649 138.77878 curveto +391.87415 138.77878 lineto +391.71008 138.45065 391.60461 138.06686 391.55774 137.62741 curveto +391.4259 134.09421 moveto +390.85168 134.32859 389.99035 134.52781 388.84192 134.69186 curveto +388.19152 134.78562 387.73156 134.89109 387.46204 135.00827 curveto +387.1925 135.12546 386.98449 135.29831 386.83801 135.52682 curveto +386.69153 135.74948 386.61828 135.99851 386.61829 136.2739 curveto +386.61828 136.69577 386.77649 137.04733 387.0929 137.32858 curveto +387.41516 137.60983 387.88391 137.75046 388.49915 137.75046 curveto +389.10852 137.75046 389.65051 137.61862 390.12512 137.35495 curveto +390.59973 137.08542 390.94836 136.71921 391.17102 136.25632 curveto +391.34094 135.8989 391.4259 135.37155 391.4259 134.67429 curveto +391.4259 134.09421 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +395.46887 138.77878 moveto +395.46887 129.44479 lineto +396.8927 129.44479 lineto +396.8927 130.85983 lineto +397.25598 130.19773 397.58996 129.76121 397.89465 129.55026 curveto +398.2052 129.33933 398.54504 129.23387 398.91418 129.23386 curveto +399.44738 129.23387 399.98937 129.40379 400.54016 129.74362 curveto +399.99524 131.2114 lineto +399.60852 130.98289 399.2218 130.86863 398.83508 130.86862 curveto +398.48938 130.86863 398.17883 130.9741 397.90344 131.18503 curveto +397.62805 131.39011 397.43176 131.67722 397.31458 132.04636 curveto +397.13879 132.60886 397.0509 133.2241 397.0509 133.89206 curveto +397.0509 138.77878 lineto +395.46887 138.77878 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +402.95715 138.77878 moveto +401.48938 138.77878 lineto +401.48938 125.89401 lineto +403.07141 125.89401 lineto +403.07141 130.49069 lineto +403.73938 129.65281 404.59191 129.23387 405.62903 129.23386 curveto +406.20324 129.23387 406.74523 129.35105 407.255 129.58542 curveto +407.77062 129.81394 408.1925 130.13914 408.52063 130.561 curveto +408.85461 130.97703 409.11535 131.48093 409.30286 132.07272 curveto +409.49035 132.66453 409.5841 133.29734 409.58411 133.97116 curveto +409.5841 135.57077 409.18859 136.8071 408.39758 137.68015 curveto +407.60656 138.55319 406.65734 138.98972 405.54993 138.98972 curveto +404.44836 138.98972 403.5841 138.52975 402.95715 137.60983 curveto +402.95715 138.77878 lineto +402.93958 134.04147 moveto +402.93957 135.16062 403.09192 135.96921 403.39661 136.46725 curveto +403.89465 137.28171 404.56848 137.68894 405.41809 137.68893 curveto +406.10949 137.68894 406.70715 137.39011 407.21106 136.79245 curveto +407.71496 136.18894 407.96691 135.29245 407.96692 134.103 curveto +407.96691 132.88425 407.72375 131.98484 407.23743 131.40475 curveto +406.75695 130.82468 406.17394 130.53465 405.4884 130.53464 curveto +404.79699 130.53465 404.19934 130.8364 403.69543 131.43991 curveto +403.19153 132.03757 402.93957 132.90476 402.93958 134.04147 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +417.60852 137.62741 moveto +417.02258 138.12546 416.45715 138.47702 415.91223 138.6821 curveto +415.37316 138.88718 414.79309 138.98972 414.172 138.98972 curveto +413.1466 138.98972 412.35852 138.74069 411.80774 138.24265 curveto +411.25696 137.73874 410.98157 137.09714 410.98157 136.31784 curveto +410.98157 135.86081 411.08411 135.4448 411.28918 135.06979 curveto +411.50012 134.68894 411.77258 134.38425 412.10657 134.15573 curveto +412.44641 133.92722 412.82727 133.75437 413.24915 133.63718 curveto +413.55969 133.55515 414.02844 133.47605 414.6554 133.39987 curveto +415.93273 133.24753 416.87316 133.06589 417.47668 132.85495 curveto +417.48254 132.63816 417.48547 132.50046 417.48547 132.44186 curveto +417.48547 131.79734 417.33605 131.34324 417.03723 131.07956 curveto +416.63293 130.72215 416.03234 130.54343 415.23547 130.54343 curveto +414.49133 130.54343 413.94055 130.67527 413.58313 130.93893 curveto +413.23156 131.19675 412.97082 131.65671 412.8009 132.31882 curveto +411.25403 132.10788 lineto +411.39465 131.44578 411.6261 130.91258 411.94836 130.50827 curveto +412.27063 130.09812 412.73645 129.78465 413.34583 129.56784 curveto +413.9552 129.34519 414.66125 129.23387 415.46399 129.23386 curveto +416.26086 129.23387 416.90832 129.32762 417.40637 129.51511 curveto +417.90441 129.70262 418.27062 129.93992 418.505 130.22702 curveto +418.73937 130.50828 418.90343 130.8657 418.99719 131.29929 curveto +419.04992 131.56882 419.07629 132.05515 419.07629 132.75827 curveto +419.07629 134.86765 lineto +419.07629 136.33835 419.10851 137.26999 419.17297 137.66257 curveto +419.24328 138.04929 419.37804 138.42136 419.57727 138.77878 curveto +417.92493 138.77878 lineto +417.76086 138.45065 417.65539 138.06686 417.60852 137.62741 curveto +417.47668 134.09421 moveto +416.90246 134.32859 416.04113 134.52781 414.8927 134.69186 curveto +414.24231 134.78562 413.78235 134.89109 413.51282 135.00827 curveto +413.24328 135.12546 413.03528 135.29831 412.88879 135.52682 curveto +412.74231 135.74948 412.66907 135.99851 412.66907 136.2739 curveto +412.66907 136.69577 412.82727 137.04733 413.14368 137.32858 curveto +413.46594 137.60983 413.93469 137.75046 414.54993 137.75046 curveto +415.1593 137.75046 415.70129 137.61862 416.1759 137.35495 curveto +416.65051 137.08542 416.99914 136.71921 417.2218 136.25632 curveto +417.39172 135.8989 417.47668 135.37155 417.47668 134.67429 curveto +417.47668 134.09421 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +451.87943 138.77879 moveto +450.41165 138.77879 lineto +450.41165 125.89403 lineto +451.99368 125.89403 lineto +451.99368 130.49071 lineto +452.66165 129.65283 453.51419 129.23388 454.5513 129.23387 curveto +455.12551 129.23388 455.6675 129.35107 456.17728 129.58543 curveto +456.69289 129.81396 457.11477 130.13915 457.4429 130.56102 curveto +457.77688 130.97704 458.03762 131.48095 458.22513 132.07274 curveto +458.41262 132.66454 458.50637 133.29735 458.50638 133.97118 curveto +458.50637 135.57079 458.11086 136.80712 457.31985 137.68016 curveto +456.52883 138.55321 455.57961 138.98973 454.4722 138.98973 curveto +453.37063 138.98973 452.50637 138.52977 451.87943 137.60985 curveto +451.87943 138.77879 lineto +451.86185 134.04149 moveto +451.86184 135.16063 452.01419 135.96923 452.31888 136.46727 curveto +452.81692 137.28172 453.49075 137.68895 454.34036 137.68895 curveto +455.03176 137.68895 455.62942 137.39012 456.13333 136.79247 curveto +456.63723 136.18895 456.88918 135.29247 456.88919 134.10301 curveto +456.88918 132.88427 456.64602 131.98485 456.1597 131.40477 curveto +455.67922 130.8247 455.09622 130.53466 454.41068 130.53465 curveto +453.71926 130.53466 453.12161 130.83642 452.61771 131.43993 curveto +452.1138 132.03759 451.86184 132.90478 451.86185 134.04149 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +466.53079 137.62743 moveto +465.94485 138.12547 465.37942 138.47704 464.8345 138.68211 curveto +464.29544 138.88719 463.71536 138.98973 463.09427 138.98973 curveto +462.06888 138.98973 461.28079 138.74071 460.73001 138.24266 curveto +460.17923 137.73876 459.90384 137.09715 459.90384 136.31786 curveto +459.90384 135.86083 460.00638 135.44481 460.21146 135.06981 curveto +460.42239 134.68895 460.69485 134.38427 461.02884 134.15575 curveto +461.36868 133.92724 461.74954 133.75438 462.17142 133.63719 curveto +462.48196 133.55517 462.95071 133.47606 463.57767 133.39989 curveto +464.85501 133.24755 465.79543 133.06591 466.39896 132.85497 curveto +466.40481 132.63817 466.40774 132.50048 466.40775 132.44188 curveto +466.40774 131.79736 466.25832 131.34325 465.9595 131.07957 curveto +465.5552 130.72216 464.95461 130.54345 464.15775 130.54344 curveto +463.4136 130.54345 462.86282 130.67529 462.5054 130.93895 curveto +462.15384 131.19677 461.89309 131.65673 461.72318 132.31883 curveto +460.1763 132.10789 lineto +460.31692 131.44579 460.54837 130.91259 460.87064 130.50829 curveto +461.1929 130.09814 461.65872 129.78466 462.2681 129.56786 curveto +462.87747 129.34521 463.58352 129.23388 464.38626 129.23387 curveto +465.18313 129.23388 465.83059 129.32763 466.32864 129.51512 curveto +466.82668 129.70263 467.19289 129.93993 467.42728 130.22704 curveto +467.66164 130.50829 467.82571 130.86572 467.91946 131.2993 curveto +467.97219 131.56884 467.99856 132.05517 467.99857 132.75829 curveto +467.99857 134.86766 lineto +467.99856 136.33837 468.03078 137.27001 468.09525 137.66258 curveto +468.16555 138.0493 468.30031 138.42137 468.49954 138.77879 curveto +466.8472 138.77879 lineto +466.68313 138.45067 466.57766 138.06688 466.53079 137.62743 curveto +466.39896 134.09422 moveto +465.82473 134.3286 464.9634 134.52782 463.81497 134.69188 curveto +463.16458 134.78563 462.70462 134.8911 462.43509 135.00829 curveto +462.16555 135.12548 461.95755 135.29833 461.81107 135.52684 curveto +461.66458 135.7495 461.59134 135.99852 461.59134 136.27391 curveto +461.59134 136.69579 461.74954 137.04735 462.06595 137.3286 curveto +462.38821 137.60985 462.85696 137.75047 463.4722 137.75047 curveto +464.08157 137.75047 464.62356 137.61864 465.09818 137.35497 curveto +465.57278 137.08544 465.92141 136.71923 466.14407 136.25633 curveto +466.31399 135.89891 466.39895 135.37157 466.39896 134.6743 curveto +466.39896 134.09422 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +470.44193 138.77879 moveto +470.44193 129.44481 lineto +471.86575 129.44481 lineto +471.86575 130.85985 lineto +472.22903 130.19775 472.56302 129.76122 472.86771 129.55028 curveto +473.17825 129.33935 473.51809 129.23388 473.88724 129.23387 curveto +474.42044 129.23388 474.96243 129.4038 475.51321 129.74364 curveto +474.96829 131.21141 lineto +474.58157 130.9829 474.19485 130.86864 473.80814 130.86864 curveto +473.46243 130.86864 473.15188 130.97411 472.8765 131.18504 curveto +472.6011 131.39013 472.40481 131.67724 472.28763 132.04637 curveto +472.11184 132.60888 472.02395 133.22411 472.02396 133.89207 curveto +472.02396 138.77879 lineto +470.44193 138.77879 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +477.93021 138.77879 moveto +476.46243 138.77879 lineto +476.46243 125.89403 lineto +478.04446 125.89403 lineto +478.04446 130.49071 lineto +478.71243 129.65283 479.56497 129.23388 480.60208 129.23387 curveto +481.17629 129.23388 481.71829 129.35107 482.22806 129.58543 curveto +482.74368 129.81396 483.16555 130.13915 483.49368 130.56102 curveto +483.82766 130.97704 484.0884 131.48095 484.27591 132.07274 curveto +484.4634 132.66454 484.55715 133.29735 484.55716 133.97118 curveto +484.55715 135.57079 484.16164 136.80712 483.37064 137.68016 curveto +482.57961 138.55321 481.6304 138.98973 480.52298 138.98973 curveto +479.42141 138.98973 478.55716 138.52977 477.93021 137.60985 curveto +477.93021 138.77879 lineto +477.91263 134.04149 moveto +477.91263 135.16063 478.06497 135.96923 478.36966 136.46727 curveto +478.8677 137.28172 479.54153 137.68895 480.39114 137.68895 curveto +481.08254 137.68895 481.6802 137.39012 482.18411 136.79247 curveto +482.68801 136.18895 482.93996 135.29247 482.93997 134.10301 curveto +482.93996 132.88427 482.6968 131.98485 482.21048 131.40477 curveto +481.73 130.8247 481.147 130.53466 480.46146 130.53465 curveto +479.77005 130.53466 479.17239 130.83642 478.66849 131.43993 curveto +478.16458 132.03759 477.91263 132.90478 477.91263 134.04149 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +492.58157 137.62743 moveto +491.99563 138.12547 491.4302 138.47704 490.88528 138.68211 curveto +490.34622 138.88719 489.76614 138.98973 489.14505 138.98973 curveto +488.11966 138.98973 487.33157 138.74071 486.78079 138.24266 curveto +486.23001 137.73876 485.95462 137.09715 485.95462 136.31786 curveto +485.95462 135.86083 486.05716 135.44481 486.26224 135.06981 curveto +486.47317 134.68895 486.74563 134.38427 487.07962 134.15575 curveto +487.41946 133.92724 487.80032 133.75438 488.2222 133.63719 curveto +488.53274 133.55517 489.00149 133.47606 489.62845 133.39989 curveto +490.90579 133.24755 491.84622 133.06591 492.44974 132.85497 curveto +492.45559 132.63817 492.45852 132.50048 492.45853 132.44188 curveto +492.45852 131.79736 492.30911 131.34325 492.01028 131.07957 curveto +491.60598 130.72216 491.0054 130.54345 490.20853 130.54344 curveto +489.46438 130.54345 488.9136 130.67529 488.55618 130.93895 curveto +488.20462 131.19677 487.94388 131.65673 487.77396 132.31883 curveto +486.22708 132.10789 lineto +486.36771 131.44579 486.59915 130.91259 486.92142 130.50829 curveto +487.24368 130.09814 487.7095 129.78466 488.31888 129.56786 curveto +488.92825 129.34521 489.6343 129.23388 490.43704 129.23387 curveto +491.23391 129.23388 491.88137 129.32763 492.37943 129.51512 curveto +492.87746 129.70263 493.24367 129.93993 493.47806 130.22704 curveto +493.71242 130.50829 493.87649 130.86572 493.97025 131.2993 curveto +494.02297 131.56884 494.04934 132.05517 494.04935 132.75829 curveto +494.04935 134.86766 lineto +494.04934 136.33837 494.08156 137.27001 494.14603 137.66258 curveto +494.21633 138.0493 494.3511 138.42137 494.55032 138.77879 curveto +492.89798 138.77879 lineto +492.73391 138.45067 492.62844 138.06688 492.58157 137.62743 curveto +492.44974 134.09422 moveto +491.87551 134.3286 491.01418 134.52782 489.86575 134.69188 curveto +489.21536 134.78563 488.7554 134.8911 488.48587 135.00829 curveto +488.21634 135.12548 488.00833 135.29833 487.86185 135.52684 curveto +487.71536 135.7495 487.64212 135.99852 487.64212 136.27391 curveto +487.64212 136.69579 487.80032 137.04735 488.11673 137.3286 curveto +488.43899 137.60985 488.90774 137.75047 489.52298 137.75047 curveto +490.13235 137.75047 490.67434 137.61864 491.14896 137.35497 curveto +491.62356 137.08544 491.97219 136.71923 492.19485 136.25633 curveto +492.36477 135.89891 492.44973 135.37157 492.44974 134.6743 curveto +492.44974 134.09422 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +496.49271 138.77879 moveto +496.49271 129.44481 lineto +497.91653 129.44481 lineto +497.91653 130.85985 lineto +498.27981 130.19775 498.6138 129.76122 498.91849 129.55028 curveto +499.22903 129.33935 499.56887 129.23388 499.93802 129.23387 curveto +500.47122 129.23388 501.01321 129.4038 501.564 129.74364 curveto +501.01907 131.21141 lineto +500.63235 130.9829 500.24563 130.86864 499.85892 130.86864 curveto +499.51321 130.86864 499.20266 130.97411 498.92728 131.18504 curveto +498.65188 131.39013 498.45559 131.67724 498.33841 132.04637 curveto +498.16263 132.60888 498.07473 133.22411 498.07474 133.89207 curveto +498.07474 138.77879 lineto +496.49271 138.77879 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +524.89874 138.77878 moveto +523.43097 138.77878 lineto +523.43097 125.89401 lineto +525.013 125.89401 lineto +525.013 130.49069 lineto +525.68097 129.65281 526.5335 129.23387 527.57062 129.23386 curveto +528.14483 129.23387 528.68682 129.35105 529.19659 129.58542 curveto +529.71221 129.81394 530.13409 130.13914 530.46222 130.561 curveto +530.7962 130.97703 531.05694 131.48093 531.24445 132.07272 curveto +531.43194 132.66453 531.52569 133.29734 531.5257 133.97116 curveto +531.52569 135.57077 531.13018 136.8071 530.33917 137.68015 curveto +529.54815 138.55319 528.59893 138.98972 527.49152 138.98972 curveto +526.38995 138.98972 525.52569 138.52975 524.89874 137.60983 curveto +524.89874 138.77878 lineto +524.88116 134.04147 moveto +524.88116 135.16062 525.03351 135.96921 525.3382 136.46725 curveto +525.83624 137.28171 526.51007 137.68894 527.35968 137.68893 curveto +528.05108 137.68894 528.64874 137.39011 529.15265 136.79245 curveto +529.65655 136.18894 529.9085 135.29245 529.90851 134.103 curveto +529.9085 132.88425 529.66534 131.98484 529.17902 131.40475 curveto +528.69854 130.82468 528.11553 130.53465 527.42999 130.53464 curveto +526.73858 130.53465 526.14093 130.8364 525.63702 131.43991 curveto +525.13311 132.03757 524.88116 132.90476 524.88116 134.04147 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +539.55011 137.62741 moveto +538.96417 138.12546 538.39874 138.47702 537.85382 138.6821 curveto +537.31475 138.88718 536.73468 138.98972 536.11359 138.98972 curveto +535.08819 138.98972 534.30011 138.74069 533.74933 138.24265 curveto +533.19855 137.73874 532.92316 137.09714 532.92316 136.31784 curveto +532.92316 135.86081 533.0257 135.4448 533.23077 135.06979 curveto +533.44171 134.68894 533.71417 134.38425 534.04816 134.15573 curveto +534.388 133.92722 534.76886 133.75437 535.19073 133.63718 curveto +535.50128 133.55515 535.97003 133.47605 536.59698 133.39987 curveto +537.87432 133.24753 538.81475 133.06589 539.41827 132.85495 curveto +539.42413 132.63816 539.42706 132.50046 539.42706 132.44186 curveto +539.42706 131.79734 539.27764 131.34324 538.97882 131.07956 curveto +538.57452 130.72215 537.97393 130.54343 537.17706 130.54343 curveto +536.43292 130.54343 535.88214 130.67527 535.52472 130.93893 curveto +535.17315 131.19675 534.91241 131.65671 534.74249 132.31882 curveto +533.19562 132.10788 lineto +533.33624 131.44578 533.56769 130.91258 533.88995 130.50827 curveto +534.21222 130.09812 534.67804 129.78465 535.28741 129.56784 curveto +535.89679 129.34519 536.60284 129.23387 537.40558 129.23386 curveto +538.20245 129.23387 538.84991 129.32762 539.34796 129.51511 curveto +539.846 129.70262 540.21221 129.93992 540.44659 130.22702 curveto +540.68096 130.50828 540.84502 130.8657 540.93878 131.29929 curveto +540.99151 131.56882 541.01787 132.05515 541.01788 132.75827 curveto +541.01788 134.86765 lineto +541.01787 136.33835 541.0501 137.26999 541.11456 137.66257 curveto +541.18487 138.04929 541.31963 138.42136 541.51886 138.77878 curveto +539.86652 138.77878 lineto +539.70245 138.45065 539.59698 138.06686 539.55011 137.62741 curveto +539.41827 134.09421 moveto +538.84405 134.32859 537.98272 134.52781 536.83429 134.69186 curveto +536.1839 134.78562 535.72393 134.89109 535.45441 135.00827 curveto +535.18487 135.12546 534.97686 135.29831 534.83038 135.52682 curveto +534.6839 135.74948 534.61065 135.99851 534.61066 136.2739 curveto +534.61065 136.69577 534.76886 137.04733 535.08527 137.32858 curveto +535.40753 137.60983 535.87628 137.75046 536.49152 137.75046 curveto +537.10089 137.75046 537.64288 137.61862 538.11749 137.35495 curveto +538.5921 137.08542 538.94073 136.71921 539.16339 136.25632 curveto +539.33331 135.8989 539.41827 135.37155 539.41827 134.67429 curveto +539.41827 134.09421 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +543.46124 138.77878 moveto +543.46124 129.44479 lineto +544.88507 129.44479 lineto +544.88507 130.85983 lineto +545.24835 130.19773 545.58233 129.76121 545.88702 129.55026 curveto +546.19757 129.33933 546.53741 129.23387 546.90656 129.23386 curveto +547.43975 129.23387 547.98174 129.40379 548.53253 129.74362 curveto +547.98761 131.2114 lineto +547.60089 130.98289 547.21417 130.86863 546.82745 130.86862 curveto +546.48175 130.86863 546.1712 130.9741 545.89581 131.18503 curveto +545.62042 131.39011 545.42413 131.67722 545.30695 132.04636 curveto +545.13116 132.60886 545.04327 133.2241 545.04327 133.89206 curveto +545.04327 138.77878 lineto +543.46124 138.77878 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +550.94952 138.77878 moveto +549.48175 138.77878 lineto +549.48175 125.89401 lineto +551.06378 125.89401 lineto +551.06378 130.49069 lineto +551.73175 129.65281 552.58429 129.23387 553.6214 129.23386 curveto +554.19561 129.23387 554.7376 129.35105 555.24738 129.58542 curveto +555.76299 129.81394 556.18487 130.13914 556.513 130.561 curveto +556.84698 130.97703 557.10772 131.48093 557.29523 132.07272 curveto +557.48272 132.66453 557.57647 133.29734 557.57648 133.97116 curveto +557.57647 135.57077 557.18096 136.8071 556.38995 137.68015 curveto +555.59893 138.55319 554.64971 138.98972 553.5423 138.98972 curveto +552.44073 138.98972 551.57647 138.52975 550.94952 137.60983 curveto +550.94952 138.77878 lineto +550.93195 134.04147 moveto +550.93194 135.16062 551.08429 135.96921 551.38898 136.46725 curveto +551.88702 137.28171 552.56085 137.68894 553.41046 137.68893 curveto +554.10186 137.68894 554.69952 137.39011 555.20343 136.79245 curveto +555.70733 136.18894 555.95928 135.29245 555.95929 134.103 curveto +555.95928 132.88425 555.71612 131.98484 555.2298 131.40475 curveto +554.74932 130.82468 554.16631 130.53465 553.48077 130.53464 curveto +552.78936 130.53465 552.19171 130.8364 551.68781 131.43991 curveto +551.1839 132.03757 550.93194 132.90476 550.93195 134.04147 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +565.60089 137.62741 moveto +565.01495 138.12546 564.44952 138.47702 563.9046 138.6821 curveto +563.36553 138.88718 562.78546 138.98972 562.16437 138.98972 curveto +561.13897 138.98972 560.35089 138.74069 559.80011 138.24265 curveto +559.24933 137.73874 558.97394 137.09714 558.97394 136.31784 curveto +558.97394 135.86081 559.07648 135.4448 559.28156 135.06979 curveto +559.49249 134.68894 559.76495 134.38425 560.09894 134.15573 curveto +560.43878 133.92722 560.81964 133.75437 561.24152 133.63718 curveto +561.55206 133.55515 562.02081 133.47605 562.64777 133.39987 curveto +563.9251 133.24753 564.86553 133.06589 565.46906 132.85495 curveto +565.47491 132.63816 565.47784 132.50046 565.47784 132.44186 curveto +565.47784 131.79734 565.32842 131.34324 565.0296 131.07956 curveto +564.6253 130.72215 564.02471 130.54343 563.22784 130.54343 curveto +562.4837 130.54343 561.93292 130.67527 561.5755 130.93893 curveto +561.22394 131.19675 560.96319 131.65671 560.79327 132.31882 curveto +559.2464 132.10788 lineto +559.38702 131.44578 559.61847 130.91258 559.94073 130.50827 curveto +560.263 130.09812 560.72882 129.78465 561.3382 129.56784 curveto +561.94757 129.34519 562.65362 129.23387 563.45636 129.23386 curveto +564.25323 129.23387 564.90069 129.32762 565.39874 129.51511 curveto +565.89678 129.70262 566.26299 129.93992 566.49738 130.22702 curveto +566.73174 130.50828 566.8958 130.8657 566.98956 131.29929 curveto +567.04229 131.56882 567.06866 132.05515 567.06866 132.75827 curveto +567.06866 134.86765 lineto +567.06866 136.33835 567.10088 137.26999 567.16534 137.66257 curveto +567.23565 138.04929 567.37041 138.42136 567.56964 138.77878 curveto +565.9173 138.77878 lineto +565.75323 138.45065 565.64776 138.06686 565.60089 137.62741 curveto +565.46906 134.09421 moveto +564.89483 134.32859 564.0335 134.52781 562.88507 134.69186 curveto +562.23468 134.78562 561.77472 134.89109 561.50519 135.00827 curveto +561.23565 135.12546 561.02765 135.29831 560.88116 135.52682 curveto +560.73468 135.74948 560.66144 135.99851 560.66144 136.2739 curveto +560.66144 136.69577 560.81964 137.04733 561.13605 137.32858 curveto +561.45831 137.60983 561.92706 137.75046 562.5423 137.75046 curveto +563.15167 137.75046 563.69366 137.61862 564.16827 137.35495 curveto +564.64288 137.08542 564.99151 136.71921 565.21417 136.25632 curveto +565.38409 135.8989 565.46905 135.37155 565.46906 134.67429 curveto +565.46906 134.09421 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +569.51202 138.77878 moveto +569.51202 129.44479 lineto +570.93585 129.44479 lineto +570.93585 130.85983 lineto +571.29913 130.19773 571.63311 129.76121 571.93781 129.55026 curveto +572.24835 129.33933 572.58819 129.23387 572.95734 129.23386 curveto +573.49053 129.23387 574.03253 129.40379 574.58331 129.74362 curveto +574.03839 131.2114 lineto +573.65167 130.98289 573.26495 130.86863 572.87823 130.86862 curveto +572.53253 130.86863 572.22198 130.9741 571.94659 131.18503 curveto +571.6712 131.39011 571.47491 131.67722 571.35773 132.04636 curveto +571.18194 132.60886 571.09405 133.2241 571.09406 133.89206 curveto +571.09406 138.77878 lineto +569.51202 138.77878 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +574.95245 134.11179 moveto +574.95245 132.38328 575.43292 131.103 576.39386 130.27097 curveto +577.19659 129.57957 578.17511 129.23387 579.32941 129.23386 curveto +580.6126 129.23387 581.66143 129.65574 582.47589 130.49948 curveto +583.29034 131.33738 583.69756 132.49753 583.69757 133.97995 curveto +583.69756 135.18113 583.51592 136.12741 583.15265 136.81882 curveto +582.79522 137.50437 582.27081 138.03757 581.57941 138.41843 curveto +580.89385 138.79929 580.14385 138.98972 579.32941 138.98972 curveto +578.02276 138.98972 576.96515 138.57077 576.15656 137.73288 curveto +575.35382 136.89499 574.95245 135.68796 574.95245 134.11179 curveto +576.57843 134.11179 moveto +576.57843 135.3071 576.83917 136.20359 577.36066 136.80124 curveto +577.88214 137.39304 578.53839 137.68894 579.32941 137.68893 curveto +580.11456 137.68894 580.76788 137.39011 581.28937 136.79245 curveto +581.81084 136.1948 582.07159 135.28366 582.07159 134.05905 curveto +582.07159 132.90476 581.80791 132.03171 581.28058 131.43991 curveto +580.75909 130.84226 580.1087 130.54343 579.32941 130.54343 curveto +578.53839 130.54343 577.88214 130.83933 577.36066 131.43112 curveto +576.83917 132.02293 576.57843 132.91648 576.57843 134.11179 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +656.14789 138.17416 moveto +654.68011 138.17416 lineto +654.68011 125.2894 lineto +656.26215 125.2894 lineto +656.26215 129.88608 lineto +656.93011 129.0482 657.78265 128.62925 658.81976 128.62924 curveto +659.39398 128.62925 659.93597 128.74644 660.44574 128.9808 curveto +660.96136 129.20933 661.38323 129.53452 661.71136 129.95639 curveto +662.04534 130.37241 662.30608 130.87632 662.49359 131.46811 curveto +662.68108 132.05991 662.77483 132.69272 662.77484 133.36655 curveto +662.77483 134.96616 662.37932 136.20249 661.58832 137.07553 curveto +660.79729 137.94858 659.84808 138.3851 658.74066 138.3851 curveto +657.63909 138.3851 656.77484 137.92514 656.14789 137.00522 curveto +656.14789 138.17416 lineto +656.13031 133.43686 moveto +656.13031 134.556 656.28265 135.3646 656.58734 135.86264 curveto +657.08538 136.6771 657.75921 137.08432 658.60883 137.08432 curveto +659.30023 137.08432 659.89788 136.78549 660.40179 136.18784 curveto +660.90569 135.58432 661.15765 134.68784 661.15765 133.49838 curveto +661.15765 132.27964 660.91448 131.38023 660.42816 130.80014 curveto +659.94769 130.22007 659.36468 129.93003 658.67914 129.93002 curveto +657.98773 129.93003 657.39007 130.23179 656.88617 130.8353 curveto +656.38226 131.43296 656.13031 132.30015 656.13031 133.43686 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +670.79926 137.0228 moveto +670.21331 137.52084 669.64788 137.87241 669.10297 138.07748 curveto +668.5639 138.28256 667.98382 138.3851 667.36273 138.3851 curveto +666.33734 138.3851 665.54925 138.13608 664.99847 137.63803 curveto +664.44769 137.13413 664.1723 136.49252 664.1723 135.71323 curveto +664.1723 135.2562 664.27484 134.84018 664.47992 134.46518 curveto +664.69086 134.08432 664.96332 133.77964 665.2973 133.55112 curveto +665.63714 133.32261 666.018 133.14975 666.43988 133.03256 curveto +666.75042 132.95054 667.21917 132.87143 667.84613 132.79526 curveto +669.12347 132.64292 670.0639 132.46128 670.66742 132.25034 curveto +670.67327 132.03354 670.6762 131.89585 670.67621 131.83725 curveto +670.6762 131.19273 670.52679 130.73862 670.22797 130.47495 curveto +669.82366 130.11753 669.22308 129.93882 668.42621 129.93881 curveto +667.68206 129.93882 667.13128 130.07066 666.77386 130.33432 curveto +666.4223 130.59214 666.16156 131.0521 665.99164 131.7142 curveto +664.44476 131.50327 lineto +664.58539 130.84116 664.81683 130.30796 665.1391 129.90366 curveto +665.46136 129.49351 665.92718 129.18003 666.53656 128.96323 curveto +667.14593 128.74058 667.85199 128.62925 668.65472 128.62924 curveto +669.45159 128.62925 670.09905 128.723 670.59711 128.91049 curveto +671.09515 129.098 671.46136 129.33531 671.69574 129.62241 curveto +671.93011 129.90366 672.09417 130.26109 672.18793 130.69467 curveto +672.24065 130.96421 672.26702 131.45054 672.26703 132.15366 curveto +672.26703 134.26303 lineto +672.26702 135.73374 672.29925 136.66538 672.36371 137.05795 curveto +672.43401 137.44467 672.56878 137.81674 672.76801 138.17416 curveto +671.11566 138.17416 lineto +670.95159 137.84604 670.84612 137.46225 670.79926 137.0228 curveto +670.66742 133.48959 moveto +670.09319 133.72397 669.23187 133.92319 668.08344 134.08725 curveto +667.43304 134.181 666.97308 134.28647 666.70355 134.40366 curveto +666.43402 134.52085 666.22601 134.6937 666.07953 134.92221 curveto +665.93304 135.14487 665.8598 135.39389 665.8598 135.66928 curveto +665.8598 136.09116 666.018 136.44272 666.33441 136.72397 curveto +666.65667 137.00522 667.12542 137.14584 667.74066 137.14584 curveto +668.35003 137.14584 668.89202 137.01401 669.36664 136.75034 curveto +669.84124 136.48081 670.18987 136.1146 670.41254 135.6517 curveto +670.58245 135.29428 670.66741 134.76694 670.66742 134.06967 curveto +670.66742 133.48959 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +674.71039 138.17416 moveto +674.71039 128.84018 lineto +676.13422 128.84018 lineto +676.13422 130.25522 lineto +676.49749 129.59312 676.83148 129.15659 677.13617 128.94565 curveto +677.44671 128.73472 677.78656 128.62925 678.1557 128.62924 curveto +678.6889 128.62925 679.23089 128.79917 679.78168 129.13901 curveto +679.23676 130.60678 lineto +678.85003 130.37827 678.46331 130.26402 678.0766 130.26401 curveto +677.73089 130.26402 677.42035 130.36948 677.14496 130.58041 curveto +676.86956 130.7855 676.67328 131.07261 676.55609 131.44174 curveto +676.38031 132.00425 676.29242 132.61948 676.29242 133.28745 curveto +676.29242 138.17416 lineto +674.71039 138.17416 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +682.19867 138.17416 moveto +680.7309 138.17416 lineto +680.7309 125.2894 lineto +682.31293 125.2894 lineto +682.31293 129.88608 lineto +682.98089 129.0482 683.83343 128.62925 684.87054 128.62924 curveto +685.44476 128.62925 685.98675 128.74644 686.49652 128.9808 curveto +687.01214 129.20933 687.43401 129.53452 687.76215 129.95639 curveto +688.09612 130.37241 688.35686 130.87632 688.54437 131.46811 curveto +688.73186 132.05991 688.82561 132.69272 688.82562 133.36655 curveto +688.82561 134.96616 688.43011 136.20249 687.6391 137.07553 curveto +686.84808 137.94858 685.89886 138.3851 684.79144 138.3851 curveto +683.68988 138.3851 682.82562 137.92514 682.19867 137.00522 curveto +682.19867 138.17416 lineto +682.18109 133.43686 moveto +682.18109 134.556 682.33343 135.3646 682.63812 135.86264 curveto +683.13617 136.6771 683.80999 137.08432 684.65961 137.08432 curveto +685.35101 137.08432 685.94866 136.78549 686.45258 136.18784 curveto +686.95647 135.58432 687.20843 134.68784 687.20844 133.49838 curveto +687.20843 132.27964 686.96526 131.38023 686.47894 130.80014 curveto +685.99847 130.22007 685.41546 129.93003 684.72992 129.93002 curveto +684.03851 129.93003 683.44085 130.23179 682.93695 130.8353 curveto +682.43304 131.43296 682.18109 132.30015 682.18109 133.43686 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +696.85004 137.0228 moveto +696.26409 137.52084 695.69866 137.87241 695.15375 138.07748 curveto +694.61468 138.28256 694.0346 138.3851 693.41351 138.3851 curveto +692.38812 138.3851 691.60003 138.13608 691.04926 137.63803 curveto +690.49847 137.13413 690.22308 136.49252 690.22308 135.71323 curveto +690.22308 135.2562 690.32562 134.84018 690.5307 134.46518 curveto +690.74164 134.08432 691.0141 133.77964 691.34808 133.55112 curveto +691.68793 133.32261 692.06878 133.14975 692.49066 133.03256 curveto +692.80121 132.95054 693.26995 132.87143 693.89691 132.79526 curveto +695.17425 132.64292 696.11468 132.46128 696.7182 132.25034 curveto +696.72405 132.03354 696.72698 131.89585 696.72699 131.83725 curveto +696.72698 131.19273 696.57757 130.73862 696.27875 130.47495 curveto +695.87444 130.11753 695.27386 129.93882 694.47699 129.93881 curveto +693.73284 129.93882 693.18206 130.07066 692.82465 130.33432 curveto +692.47308 130.59214 692.21234 131.0521 692.04242 131.7142 curveto +690.49554 131.50327 lineto +690.63617 130.84116 690.86761 130.30796 691.18988 129.90366 curveto +691.51214 129.49351 691.97796 129.18003 692.58734 128.96323 curveto +693.19671 128.74058 693.90277 128.62925 694.70551 128.62924 curveto +695.50237 128.62925 696.14983 128.723 696.64789 128.91049 curveto +697.14593 129.098 697.51214 129.33531 697.74652 129.62241 curveto +697.98089 129.90366 698.14495 130.26109 698.23871 130.69467 curveto +698.29143 130.96421 698.3178 131.45054 698.31781 132.15366 curveto +698.31781 134.26303 lineto +698.3178 135.73374 698.35003 136.66538 698.41449 137.05795 curveto +698.48479 137.44467 698.61956 137.81674 698.81879 138.17416 curveto +697.16644 138.17416 lineto +697.00237 137.84604 696.8969 137.46225 696.85004 137.0228 curveto +696.7182 133.48959 moveto +696.14398 133.72397 695.28265 133.92319 694.13422 134.08725 curveto +693.48382 134.181 693.02386 134.28647 692.75433 134.40366 curveto +692.4848 134.52085 692.27679 134.6937 692.13031 134.92221 curveto +691.98382 135.14487 691.91058 135.39389 691.91058 135.66928 curveto +691.91058 136.09116 692.06878 136.44272 692.38519 136.72397 curveto +692.70746 137.00522 693.1762 137.14584 693.79144 137.14584 curveto +694.40081 137.14584 694.9428 137.01401 695.41742 136.75034 curveto +695.89202 136.48081 696.24065 136.1146 696.46332 135.6517 curveto +696.63323 135.29428 696.71819 134.76694 696.7182 134.06967 curveto +696.7182 133.48959 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +700.76117 138.17416 moveto +700.76117 128.84018 lineto +702.185 128.84018 lineto +702.185 130.25522 lineto +702.54828 129.59312 702.88226 129.15659 703.18695 128.94565 curveto +703.49749 128.73472 703.83734 128.62925 704.20648 128.62924 curveto +704.73968 128.62925 705.28167 128.79917 705.83246 129.13901 curveto +705.28754 130.60678 lineto +704.90081 130.37827 704.51409 130.26402 704.12738 130.26401 curveto +703.78167 130.26402 703.47113 130.36948 703.19574 130.58041 curveto +702.92035 130.7855 702.72406 131.07261 702.60687 131.44174 curveto +702.43109 132.00425 702.3432 132.61948 702.3432 133.28745 curveto +702.3432 138.17416 lineto +700.76117 138.17416 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +706.2016 133.50717 moveto +706.2016 131.77866 706.68207 130.49839 707.64301 129.66635 curveto +708.44574 128.97495 709.42425 128.62925 710.57855 128.62924 curveto +711.86175 128.62925 712.91058 129.05113 713.72504 129.89487 curveto +714.53948 130.73277 714.94671 131.89292 714.94672 133.37534 curveto +714.94671 134.57651 714.76507 135.5228 714.40179 136.2142 curveto +714.04436 136.89975 713.51995 137.43295 712.82855 137.81381 curveto +712.143 138.19467 711.393 138.3851 710.57855 138.3851 curveto +709.27191 138.3851 708.21429 137.96616 707.4057 137.12827 curveto +706.60297 136.29038 706.2016 135.08335 706.2016 133.50717 curveto +707.82758 133.50717 moveto +707.82757 134.70249 708.08832 135.59897 708.6098 136.19662 curveto +709.13128 136.78842 709.78753 137.08432 710.57855 137.08432 curveto +711.3637 137.08432 712.01702 136.78549 712.53851 136.18784 curveto +713.05999 135.59018 713.32073 134.67905 713.32074 133.45444 curveto +713.32073 132.30015 713.05706 131.4271 712.52972 130.8353 curveto +712.00823 130.23765 711.35784 129.93882 710.57855 129.93881 curveto +709.78753 129.93882 709.13128 130.23472 708.6098 130.82651 curveto +708.08832 131.41831 707.82757 132.31186 707.82758 133.50717 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +716.17719 135.38803 moveto +717.74164 135.14194 lineto +717.82953 135.76889 718.07269 136.24936 718.47113 136.58334 curveto +718.87542 136.91733 719.43792 137.08432 720.15863 137.08432 curveto +720.88519 137.08432 721.42425 136.93784 721.77582 136.64487 curveto +722.12737 136.34604 722.30315 135.99741 722.30316 135.59897 curveto +722.30315 135.24155 722.14788 134.9603 721.83734 134.75522 curveto +721.62054 134.6146 721.08148 134.43589 720.22015 134.21909 curveto +719.05999 133.92612 718.25433 133.67417 717.80316 133.46323 curveto +717.35785 133.24643 717.018 132.95054 716.78363 132.57553 curveto +716.55511 132.19468 716.44086 131.77573 716.44086 131.3187 curveto +716.44086 130.90269 716.53461 130.5189 716.72211 130.16733 curveto +716.91547 129.80991 717.17621 129.51402 717.50433 129.27963 curveto +717.75043 129.098 718.08441 128.94566 718.50629 128.8226 curveto +718.93402 128.6937 719.39105 128.62925 719.87738 128.62924 curveto +720.6098 128.62925 721.2514 128.73472 721.80219 128.94565 curveto +722.35882 129.15659 722.76897 129.4437 723.03265 129.80698 curveto +723.29632 130.16441 723.47796 130.64487 723.57758 131.24838 curveto +722.0307 131.45932 lineto +721.96038 130.97886 721.7553 130.60386 721.41547 130.33432 curveto +721.08148 130.0648 720.60687 129.93003 719.99164 129.93002 curveto +719.26507 129.93003 718.74652 130.05015 718.43597 130.29037 curveto +718.12542 130.53062 717.97015 130.81187 717.97015 131.13412 curveto +717.97015 131.33921 718.0346 131.52378 718.16351 131.68784 curveto +718.29242 131.85776 718.49456 131.99839 718.76996 132.10971 curveto +718.92816 132.16831 719.39398 132.30308 720.16742 132.51401 curveto +721.28655 132.81284 722.06585 133.05893 722.50531 133.25229 curveto +722.95062 133.43979 723.29925 133.71518 723.55121 134.07846 curveto +723.80315 134.44175 723.92913 134.89292 723.92914 135.43198 curveto +723.92913 135.95932 723.77386 136.45737 723.46332 136.92612 curveto +723.15862 137.38901 722.71624 137.74936 722.13617 138.00717 curveto +721.55609 138.25912 720.89984 138.3851 720.16742 138.3851 curveto +718.95453 138.3851 718.02875 138.13315 717.39008 137.62924 curveto +716.75726 137.12534 716.35297 136.37827 716.17719 135.38803 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +725.17719 135.38803 moveto +726.74164 135.14194 lineto +726.82953 135.76889 727.07269 136.24936 727.47113 136.58334 curveto +727.87542 136.91733 728.43792 137.08432 729.15863 137.08432 curveto +729.88519 137.08432 730.42425 136.93784 730.77582 136.64487 curveto +731.12737 136.34604 731.30315 135.99741 731.30316 135.59897 curveto +731.30315 135.24155 731.14788 134.9603 730.83734 134.75522 curveto +730.62054 134.6146 730.08148 134.43589 729.22015 134.21909 curveto +728.05999 133.92612 727.25433 133.67417 726.80316 133.46323 curveto +726.35785 133.24643 726.018 132.95054 725.78363 132.57553 curveto +725.55511 132.19468 725.44086 131.77573 725.44086 131.3187 curveto +725.44086 130.90269 725.53461 130.5189 725.72211 130.16733 curveto +725.91547 129.80991 726.17621 129.51402 726.50433 129.27963 curveto +726.75043 129.098 727.08441 128.94566 727.50629 128.8226 curveto +727.93402 128.6937 728.39105 128.62925 728.87738 128.62924 curveto +729.6098 128.62925 730.2514 128.73472 730.80219 128.94565 curveto +731.35882 129.15659 731.76897 129.4437 732.03265 129.80698 curveto +732.29632 130.16441 732.47796 130.64487 732.57758 131.24838 curveto +731.0307 131.45932 lineto +730.96038 130.97886 730.7553 130.60386 730.41547 130.33432 curveto +730.08148 130.0648 729.60687 129.93003 728.99164 129.93002 curveto +728.26507 129.93003 727.74652 130.05015 727.43597 130.29037 curveto +727.12542 130.53062 726.97015 130.81187 726.97015 131.13412 curveto +726.97015 131.33921 727.0346 131.52378 727.16351 131.68784 curveto +727.29242 131.85776 727.49456 131.99839 727.76996 132.10971 curveto +727.92816 132.16831 728.39398 132.30308 729.16742 132.51401 curveto +730.28655 132.81284 731.06585 133.05893 731.50531 133.25229 curveto +731.95062 133.43979 732.29925 133.71518 732.55121 134.07846 curveto +732.80315 134.44175 732.92913 134.89292 732.92914 135.43198 curveto +732.92913 135.95932 732.77386 136.45737 732.46332 136.92612 curveto +732.15862 137.38901 731.71624 137.74936 731.13617 138.00717 curveto +730.55609 138.25912 729.89984 138.3851 729.16742 138.3851 curveto +727.95453 138.3851 727.02875 138.13315 726.39008 137.62924 curveto +725.75726 137.12534 725.35297 136.37827 725.17719 135.38803 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +740.90082 137.0228 moveto +740.31487 137.52084 739.74944 137.87241 739.20453 138.07748 curveto +738.66546 138.28256 738.08538 138.3851 737.46429 138.3851 curveto +736.4389 138.3851 735.65082 138.13608 735.10004 137.63803 curveto +734.54925 137.13413 734.27386 136.49252 734.27386 135.71323 curveto +734.27386 135.2562 734.3764 134.84018 734.58148 134.46518 curveto +734.79242 134.08432 735.06488 133.77964 735.39886 133.55112 curveto +735.73871 133.32261 736.11957 133.14975 736.54144 133.03256 curveto +736.85199 132.95054 737.32074 132.87143 737.94769 132.79526 curveto +739.22503 132.64292 740.16546 132.46128 740.76898 132.25034 curveto +740.77483 132.03354 740.77776 131.89585 740.77777 131.83725 curveto +740.77776 131.19273 740.62835 130.73862 740.32953 130.47495 curveto +739.92523 130.11753 739.32464 129.93882 738.52777 129.93881 curveto +737.78363 129.93882 737.23285 130.07066 736.87543 130.33432 curveto +736.52386 130.59214 736.26312 131.0521 736.0932 131.7142 curveto +734.54633 131.50327 lineto +734.68695 130.84116 734.91839 130.30796 735.24066 129.90366 curveto +735.56293 129.49351 736.02875 129.18003 736.63812 128.96323 curveto +737.24749 128.74058 737.95355 128.62925 738.75629 128.62924 curveto +739.55316 128.62925 740.20062 128.723 740.69867 128.91049 curveto +741.19671 129.098 741.56292 129.33531 741.7973 129.62241 curveto +742.03167 129.90366 742.19573 130.26109 742.28949 130.69467 curveto +742.34222 130.96421 742.36858 131.45054 742.36859 132.15366 curveto +742.36859 134.26303 lineto +742.36858 135.73374 742.40081 136.66538 742.46527 137.05795 curveto +742.53557 137.44467 742.67034 137.81674 742.86957 138.17416 curveto +741.21722 138.17416 lineto +741.05315 137.84604 740.94769 137.46225 740.90082 137.0228 curveto +740.76898 133.48959 moveto +740.19476 133.72397 739.33343 133.92319 738.185 134.08725 curveto +737.5346 134.181 737.07464 134.28647 736.80511 134.40366 curveto +736.53558 134.52085 736.32757 134.6937 736.18109 134.92221 curveto +736.0346 135.14487 735.96136 135.39389 735.96136 135.66928 curveto +735.96136 136.09116 736.11957 136.44272 736.43597 136.72397 curveto +736.75824 137.00522 737.22699 137.14584 737.84222 137.14584 curveto +738.45159 137.14584 738.99359 137.01401 739.4682 136.75034 curveto +739.9428 136.48081 740.29144 136.1146 740.5141 135.6517 curveto +740.68401 135.29428 740.76897 134.76694 740.76898 134.06967 curveto +740.76898 133.48959 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +623.5993 139.35719 moveto +623.5993 137.55544 lineto +625.40106 137.55544 lineto +625.40106 139.35719 lineto +623.5993 139.35719 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +628.59149 139.35719 moveto +628.59149 137.55544 lineto +630.39325 137.55544 lineto +630.39325 139.35719 lineto +628.59149 139.35719 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +633.58368 139.35719 moveto +633.58368 137.55544 lineto +635.38544 137.55544 lineto +635.38544 139.35719 lineto +633.58368 139.35719 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +39.691288 177.70506 moveto +38.223515 177.70506 lineto +38.223515 164.8203 lineto +39.805546 164.8203 lineto +39.805546 169.41698 lineto +40.473511 168.5791 41.326049 168.16015 42.363163 168.16014 curveto +42.937376 168.16015 43.479367 168.27734 43.98914 168.5117 curveto +44.504757 168.74023 44.926632 169.06542 45.254765 169.48729 curveto +45.58874 169.90331 45.849482 170.40722 46.036991 170.99901 curveto +46.224482 171.59081 46.318232 172.22362 46.318241 172.89745 curveto +46.318232 174.49706 45.922724 175.73339 45.131718 176.60643 curveto +44.340695 177.47948 43.391477 177.916 42.284061 177.916 curveto +41.182495 177.916 40.318238 177.45604 39.691288 176.53612 curveto +39.691288 177.70506 lineto +39.67371 172.96776 moveto +39.673707 174.0869 39.826051 174.8955 40.130741 175.39354 curveto +40.628784 176.20799 41.302612 176.61522 42.152225 176.61522 curveto +42.843626 176.61522 43.441282 176.31639 43.945194 175.71873 curveto +44.449093 175.11522 44.701046 174.21874 44.701054 173.02928 curveto +44.701046 171.81054 44.457882 170.91112 43.971561 170.33104 curveto +43.491086 169.75097 42.908079 169.46093 42.222538 169.46092 curveto +41.531127 169.46093 40.933472 169.76269 40.429569 170.3662 curveto +39.92566 170.96386 39.673707 171.83105 39.67371 172.96776 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +124.23328 176.5537 moveto +123.64734 177.05174 123.08191 177.40331 122.53699 177.60838 curveto +121.99792 177.81346 121.41785 177.916 120.79676 177.916 curveto +119.77136 177.916 118.98328 177.66698 118.4325 177.16893 curveto +117.88172 176.66502 117.60633 176.02342 117.60633 175.24413 curveto +117.60633 174.7871 117.70887 174.37108 117.91394 173.99608 curveto +118.12488 173.61522 118.39734 173.31054 118.73133 173.08202 curveto +119.07117 172.85351 119.45203 172.68065 119.87391 172.56346 curveto +120.18445 172.48144 120.6532 172.40233 121.28016 172.32616 curveto +122.55749 172.17382 123.49792 171.99218 124.10144 171.78123 curveto +124.1073 171.56444 124.11023 171.42675 124.11023 171.36815 curveto +124.11023 170.72362 123.96081 170.26952 123.66199 170.00584 curveto +123.25769 169.64843 122.6571 169.46972 121.86023 169.46971 curveto +121.11609 169.46972 120.56531 169.60156 120.20789 169.86522 curveto +119.85632 170.12304 119.59558 170.583 119.42566 171.2451 curveto +117.87879 171.03416 lineto +118.01941 170.37206 118.25086 169.83886 118.57312 169.43456 curveto +118.89539 169.02441 119.36121 168.71093 119.97058 168.49413 curveto +120.57996 168.27148 121.28601 168.16015 122.08875 168.16014 curveto +122.88562 168.16015 123.53308 168.2539 124.03113 168.44139 curveto +124.52917 168.6289 124.89538 168.8662 125.12976 169.15331 curveto +125.36413 169.43456 125.52819 169.79198 125.62195 170.22557 curveto +125.67468 170.49511 125.70104 170.98144 125.70105 171.68456 curveto +125.70105 173.79393 lineto +125.70104 175.26464 125.73327 176.19628 125.79773 176.58885 curveto +125.86804 176.97557 126.0028 177.34764 126.20203 177.70506 curveto +124.54969 177.70506 lineto +124.38562 177.37694 124.28015 176.99315 124.23328 176.5537 curveto +124.10144 173.02049 moveto +123.52722 173.25487 122.66589 173.45409 121.51746 173.61815 curveto +120.86707 173.7119 120.4071 173.81737 120.13758 173.93456 curveto +119.86804 174.05175 119.66004 174.2246 119.51355 174.45311 curveto +119.36707 174.67577 119.29382 174.92479 119.29383 175.20018 curveto +119.29382 175.62206 119.45203 175.97362 119.76844 176.25487 curveto +120.0907 176.53612 120.55945 176.67674 121.17469 176.67674 curveto +121.78406 176.67674 122.32605 176.54491 122.80066 176.28123 curveto +123.27527 176.01171 123.6239 175.64549 123.84656 175.1826 curveto +124.01648 174.82518 124.10144 174.29784 124.10144 173.60057 curveto +124.10144 173.02049 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +198.03504 177.70506 moveto +198.03504 168.37108 lineto +199.45887 168.37108 lineto +199.45887 169.78612 lineto +199.82214 169.12402 200.15613 168.68749 200.46082 168.47655 curveto +200.77136 168.26562 201.11121 168.16015 201.48035 168.16014 curveto +202.01355 168.16015 202.55554 168.33007 203.10633 168.66991 curveto +202.56141 170.13768 lineto +202.17468 169.90917 201.78796 169.79491 201.40125 169.79491 curveto +201.05554 169.79491 200.745 169.90038 200.46961 170.11131 curveto +200.19421 170.3164 199.99793 170.60351 199.88074 170.97264 curveto +199.70496 171.53515 199.61707 172.15038 199.61707 172.81834 curveto +199.61707 177.70506 lineto +198.03504 177.70506 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +280.40613 177.70506 moveto +278.93836 177.70506 lineto +278.93836 164.8203 lineto +280.52039 164.8203 lineto +280.52039 169.41698 lineto +281.18835 168.5791 282.04089 168.16015 283.07801 168.16014 curveto +283.65222 168.16015 284.19421 168.27734 284.70398 168.5117 curveto +285.2196 168.74023 285.64148 169.06542 285.96961 169.48729 curveto +286.30358 169.90331 286.56433 170.40722 286.75183 170.99901 curveto +286.93933 171.59081 287.03308 172.22362 287.03308 172.89745 curveto +287.03308 174.49706 286.63757 175.73339 285.84656 176.60643 curveto +285.05554 177.47948 284.10632 177.916 282.99891 177.916 curveto +281.89734 177.916 281.03308 177.45604 280.40613 176.53612 curveto +280.40613 177.70506 lineto +280.38855 172.96776 moveto +280.38855 174.0869 280.54089 174.8955 280.84558 175.39354 curveto +281.34363 176.20799 282.01746 176.61522 282.86707 176.61522 curveto +283.55847 176.61522 284.15613 176.31639 284.66004 175.71873 curveto +285.16394 175.11522 285.41589 174.21874 285.4159 173.02928 curveto +285.41589 171.81054 285.17273 170.91112 284.68641 170.33104 curveto +284.20593 169.75097 283.62292 169.46093 282.93738 169.46092 curveto +282.24597 169.46093 281.64832 169.76269 281.14441 170.3662 curveto +280.6405 170.96386 280.38855 171.83105 280.38855 172.96776 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +359.95594 176.5537 moveto +359.36999 177.05174 358.80456 177.40331 358.25965 177.60838 curveto +357.72058 177.81346 357.1405 177.916 356.51941 177.916 curveto +355.49402 177.916 354.70593 177.66698 354.15516 177.16893 curveto +353.60437 176.66502 353.32898 176.02342 353.32898 175.24413 curveto +353.32898 174.7871 353.43152 174.37108 353.6366 173.99608 curveto +353.84754 173.61522 354.12 173.31054 354.45398 173.08202 curveto +354.79382 172.85351 355.17468 172.68065 355.59656 172.56346 curveto +355.90711 172.48144 356.37585 172.40233 357.00281 172.32616 curveto +358.28015 172.17382 359.22058 171.99218 359.8241 171.78123 curveto +359.82995 171.56444 359.83288 171.42675 359.83289 171.36815 curveto +359.83288 170.72362 359.68347 170.26952 359.38465 170.00584 curveto +358.98034 169.64843 358.37976 169.46972 357.58289 169.46971 curveto +356.83874 169.46972 356.28796 169.60156 355.93055 169.86522 curveto +355.57898 170.12304 355.31824 170.583 355.14832 171.2451 curveto +353.60144 171.03416 lineto +353.74207 170.37206 353.97351 169.83886 354.29578 169.43456 curveto +354.61804 169.02441 355.08386 168.71093 355.69324 168.49413 curveto +356.30261 168.27148 357.00867 168.16015 357.81141 168.16014 curveto +358.60827 168.16015 359.25573 168.2539 359.75379 168.44139 curveto +360.25183 168.6289 360.61804 168.8662 360.85242 169.15331 curveto +361.08679 169.43456 361.25085 169.79198 361.34461 170.22557 curveto +361.39733 170.49511 361.4237 170.98144 361.42371 171.68456 curveto +361.42371 173.79393 lineto +361.4237 175.26464 361.45593 176.19628 361.52039 176.58885 curveto +361.59069 176.97557 361.72546 177.34764 361.92469 177.70506 curveto +360.27234 177.70506 lineto +360.10827 177.37694 360.0028 176.99315 359.95594 176.5537 curveto +359.8241 173.02049 moveto +359.24988 173.25487 358.38855 173.45409 357.24012 173.61815 curveto +356.58972 173.7119 356.12976 173.81737 355.86023 173.93456 curveto +355.5907 174.05175 355.38269 174.2246 355.23621 174.45311 curveto +355.08972 174.67577 355.01648 174.92479 355.01648 175.20018 curveto +355.01648 175.62206 355.17468 175.97362 355.49109 176.25487 curveto +355.81336 176.53612 356.2821 176.67674 356.89734 176.67674 curveto +357.50671 176.67674 358.0487 176.54491 358.52332 176.28123 curveto +358.99792 176.01171 359.34655 175.64549 359.56922 175.1826 curveto +359.73913 174.82518 359.82409 174.29784 359.8241 173.60057 curveto +359.8241 173.02049 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +433.75769 177.70506 moveto +433.75769 168.37108 lineto +435.18152 168.37108 lineto +435.18152 169.78612 lineto +435.5448 169.12402 435.87878 168.68749 436.18348 168.47655 curveto +436.49402 168.26562 436.83386 168.16015 437.20301 168.16014 curveto +437.7362 168.16015 438.2782 168.33007 438.82898 168.66991 curveto +438.28406 170.13768 lineto +437.89734 169.90917 437.51062 169.79491 437.12391 169.79491 curveto +436.7782 169.79491 436.46765 169.90038 436.19226 170.11131 curveto +435.91687 170.3164 435.72058 170.60351 435.6034 170.97264 curveto +435.42761 171.53515 435.33972 172.15038 435.33973 172.81834 curveto +435.33973 177.70506 lineto +433.75769 177.70506 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +509.08875 173.03807 moveto +509.08875 171.30956 509.56922 170.02929 510.53016 169.19725 curveto +511.33289 168.50585 512.3114 168.16015 513.4657 168.16014 curveto +514.7489 168.16015 515.79773 168.58203 516.61219 169.42577 curveto +517.42663 170.26366 517.83386 171.42382 517.83387 172.90623 curveto +517.83386 174.10741 517.65222 175.0537 517.28894 175.7451 curveto +516.93151 176.43065 516.4071 176.96385 515.7157 177.34471 curveto +515.03015 177.72557 514.28015 177.916 513.4657 177.916 curveto +512.15906 177.916 511.10144 177.49706 510.29285 176.65916 curveto +509.49012 175.82128 509.08875 174.61425 509.08875 173.03807 curveto +510.71473 173.03807 moveto +510.71472 174.23339 510.97547 175.12987 511.49695 175.72752 curveto +512.01843 176.31932 512.67468 176.61522 513.4657 176.61522 curveto +514.25085 176.61522 514.90417 176.31639 515.42566 175.71873 curveto +515.94714 175.12108 516.20788 174.20995 516.20789 172.98534 curveto +516.20788 171.83105 515.94421 170.958 515.41687 170.3662 curveto +514.89538 169.76855 514.24499 169.46972 513.4657 169.46971 curveto +512.67468 169.46972 512.01843 169.76562 511.49695 170.35741 curveto +510.97547 170.94921 510.71472 171.84276 510.71473 173.03807 curveto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +585.04383 177.70506 moveto +585.04383 175.90331 lineto +586.84558 175.90331 lineto +586.84558 177.70506 lineto +585.04383 177.70506 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +590.03601 177.70506 moveto +590.03601 175.90331 lineto +591.83777 175.90331 lineto +591.83777 177.70506 lineto +590.03601 177.70506 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +595.0282 177.70506 moveto +595.0282 175.90331 lineto +596.82996 175.90331 lineto +596.82996 177.70506 lineto +595.0282 177.70506 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +670.56141 176.5537 moveto +669.97546 177.05174 669.41003 177.40331 668.86512 177.60838 curveto +668.32605 177.81346 667.74597 177.916 667.12488 177.916 curveto +666.09949 177.916 665.3114 177.66698 664.76062 177.16893 curveto +664.20984 176.66502 663.93445 176.02342 663.93445 175.24413 curveto +663.93445 174.7871 664.03699 174.37108 664.24207 173.99608 curveto +664.45301 173.61522 664.72547 173.31054 665.05945 173.08202 curveto +665.39929 172.85351 665.78015 172.68065 666.20203 172.56346 curveto +666.51257 172.48144 666.98132 172.40233 667.60828 172.32616 curveto +668.88562 172.17382 669.82605 171.99218 670.42957 171.78123 curveto +670.43542 171.56444 670.43835 171.42675 670.43836 171.36815 curveto +670.43835 170.72362 670.28894 170.26952 669.99012 170.00584 curveto +669.58581 169.64843 668.98523 169.46972 668.18836 169.46971 curveto +667.44421 169.46972 666.89343 169.60156 666.53601 169.86522 curveto +666.18445 170.12304 665.92371 170.583 665.75379 171.2451 curveto +664.20691 171.03416 lineto +664.34754 170.37206 664.57898 169.83886 664.90125 169.43456 curveto +665.22351 169.02441 665.68933 168.71093 666.29871 168.49413 curveto +666.90808 168.27148 667.61414 168.16015 668.41687 168.16014 curveto +669.21374 168.16015 669.8612 168.2539 670.35926 168.44139 curveto +670.8573 168.6289 671.22351 168.8662 671.45789 169.15331 curveto +671.69226 169.43456 671.85632 169.79198 671.95008 170.22557 curveto +672.0028 170.49511 672.02917 170.98144 672.02918 171.68456 curveto +672.02918 173.79393 lineto +672.02917 175.26464 672.0614 176.19628 672.12586 176.58885 curveto +672.19616 176.97557 672.33093 177.34764 672.53016 177.70506 curveto +670.87781 177.70506 lineto +670.71374 177.37694 670.60827 176.99315 670.56141 176.5537 curveto +670.42957 173.02049 moveto +669.85534 173.25487 668.99402 173.45409 667.84558 173.61815 curveto +667.19519 173.7119 666.73523 173.81737 666.4657 173.93456 curveto +666.19617 174.05175 665.98816 174.2246 665.84168 174.45311 curveto +665.69519 174.67577 665.62195 174.92479 665.62195 175.20018 curveto +665.62195 175.62206 665.78015 175.97362 666.09656 176.25487 curveto +666.41882 176.53612 666.88757 176.67674 667.50281 176.67674 curveto +668.11218 176.67674 668.65417 176.54491 669.12879 176.28123 curveto +669.60339 176.01171 669.95202 175.64549 670.17469 175.1826 curveto +670.3446 174.82518 670.42956 174.29784 670.42957 173.60057 curveto +670.42957 173.02049 lineto +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +gsave +0 0 0 setrgbcolor +newpath +fill +grestore +0 0 0 setrgbcolor +[] 0 setdash +1 setlinewidth +0 setlinejoin +0 setlinecap +newpath +83.509975 164.51929 moveto +60.542102 190.63893 35.300495 196.8634 5.651051 164.51929 curveto +stroke +gsave [0.74330631 0.81086111 -0.81086111 0.74330631 6.3943573 165.33015] concat +gsave +0 0 0 setrgbcolor +newpath +8.7185878 4.0337352 moveto +-2.2072895 0.016013256 lineto +8.7185884 -4.0017078 lineto +6.97309 -1.6296469 6.9831476 1.6157441 8.7185878 4.0337352 curveto +closepath +eofill +grestore +grestore +0 0 0 setrgbcolor +[] 0 setdash +1 setlinewidth +0 setlinejoin +0 setlinecap +newpath +13.185786 153.96139 moveto +78.486819 153.96139 lineto +stroke +gsave [-1.1 0 0 -1.1 77.386819 153.96139] concat +gsave +0 0 0 setrgbcolor +newpath +8.7185878 4.0337352 moveto +-2.2072895 0.016013256 lineto +8.7185884 -4.0017078 lineto +6.97309 -1.6296469 6.9831476 1.6157441 8.7185878 4.0337352 curveto +closepath +eofill +grestore +grestore +0 0 0 setrgbcolor +[] 0 setdash +1 setlinewidth +0 setlinejoin +0 setlinecap +newpath +90.747017 153.9613 moveto +156.04805 153.9613 lineto +stroke +gsave [-1.1 0 0 -1.1 154.94805 153.9613] concat +gsave +0 0 0 setrgbcolor +newpath +8.7185878 4.0337352 moveto +-2.2072895 0.016013256 lineto +8.7185884 -4.0017078 lineto +6.97309 -1.6296469 6.9831476 1.6157441 8.7185878 4.0337352 curveto +closepath +eofill +grestore +grestore +0 0 0 setrgbcolor +[] 0 setdash +1 setlinewidth +0 setlinejoin +0 setlinecap +newpath +168.72226 153.9613 moveto +234.02329 153.9613 lineto +stroke +gsave [-1.1 0 0 -1.1 232.92329 153.9613] concat +gsave +0 0 0 setrgbcolor +newpath +8.7185878 4.0337352 moveto +-2.2072895 0.016013256 lineto +8.7185884 -4.0017078 lineto +6.97309 -1.6296469 6.9831476 1.6157441 8.7185878 4.0337352 curveto +closepath +eofill +grestore +grestore +0 0 0 setrgbcolor +[] 0 setdash +1 setlinewidth +0 setlinejoin +0 setlinecap +newpath +245.95329 153.96121 moveto +311.25432 153.96121 lineto +stroke +gsave [-1.1 0 0 -1.1 310.15432 153.96121] concat +gsave +0 0 0 setrgbcolor +newpath +8.7185878 4.0337352 moveto +-2.2072895 0.016013256 lineto +8.7185884 -4.0017078 lineto +6.97309 -1.6296469 6.9831476 1.6157441 8.7185878 4.0337352 curveto +closepath +eofill +grestore +grestore +0 0 0 setrgbcolor +[] 0 setdash +1 setlinewidth +0 setlinejoin +0 setlinecap +newpath +323.85853 153.9613 moveto +389.15956 153.9613 lineto +stroke +gsave [-1.1 0 0 -1.1 388.05956 153.9613] concat +gsave +0 0 0 setrgbcolor +newpath +8.7185878 4.0337352 moveto +-2.2072895 0.016013256 lineto +8.7185884 -4.0017078 lineto +6.97309 -1.6296469 6.9831476 1.6157441 8.7185878 4.0337352 curveto +closepath +eofill +grestore +grestore +0 0 0 setrgbcolor +[] 0 setdash +1 setlinewidth +0 setlinejoin +0 setlinecap +newpath +401.50851 153.9613 moveto +466.80954 153.9613 lineto +stroke +gsave [-1.1 0 0 -1.1 465.70954 153.9613] concat +gsave +0 0 0 setrgbcolor +newpath +8.7185878 4.0337352 moveto +-2.2072895 0.016013256 lineto +8.7185884 -4.0017078 lineto +6.97309 -1.6296469 6.9831476 1.6157441 8.7185878 4.0337352 curveto +closepath +eofill +grestore +grestore +0 0 0 setrgbcolor +[] 0 setdash +1 setlinewidth +0 setlinejoin +0 setlinecap +newpath +480.48321 153.9613 moveto +545.78425 153.9613 lineto +stroke +gsave [-1.1 0 0 -1.1 544.68425 153.9613] concat +gsave +0 0 0 setrgbcolor +newpath +8.7185878 4.0337352 moveto +-2.2072895 0.016013256 lineto +8.7185884 -4.0017078 lineto +6.97309 -1.6296469 6.9831476 1.6157441 8.7185878 4.0337352 curveto +closepath +eofill +grestore +grestore +0 0 0 setrgbcolor +[] 0 setdash +1 setlinewidth +0 setlinejoin +0 setlinecap +newpath +558.48215 153.9613 moveto +623.78318 153.9613 lineto +stroke +gsave [-1.1 0 0 -1.1 622.68318 153.9613] concat +gsave +0 0 0 setrgbcolor +newpath +8.7185878 4.0337352 moveto +-2.2072895 0.016013256 lineto +8.7185884 -4.0017078 lineto +6.97309 -1.6296469 6.9831476 1.6157441 8.7185878 4.0337352 curveto +closepath +eofill +grestore +grestore +0 0 0 setrgbcolor +[] 0 setdash +1 setlinewidth +0 setlinejoin +0 setlinecap +newpath +638.59633 153.9613 moveto +703.89736 153.9613 lineto +stroke +gsave [-1.1 0 0 -1.1 702.79736 153.9613] concat +gsave +0 0 0 setrgbcolor +newpath +8.7185878 4.0337352 moveto +-2.2072895 0.016013256 lineto +8.7185884 -4.0017078 lineto +6.97309 -1.6296469 6.9831476 1.6157441 8.7185878 4.0337352 curveto +closepath +eofill +grestore +grestore +0 0 0 setrgbcolor +[] 0 setdash +1 setlinewidth +0 setlinejoin +0 setlinecap +newpath +160.62469 178.6356 moveto +103.11439 214.93588 51.117239 212.64411 3.651051 178.6356 curveto +stroke +gsave [0.89417844 0.64065975 -0.64065975 0.89417844 4.5452294 179.27626] concat +gsave +0 0 0 setrgbcolor +newpath +8.7185878 4.0337352 moveto +-2.2072895 0.016013256 lineto +8.7185884 -4.0017078 lineto +6.97309 -1.6296469 6.9831476 1.6157441 8.7185878 4.0337352 curveto +closepath +eofill +grestore +grestore +0 0 0 setrgbcolor +[] 0 setdash +1 setlinewidth +0 setlinejoin +0 setlinecap +newpath +241.11151 117.89139 moveto +160.02376 69.180736 82.359446 79.809701 6.2789455 117.89139 curveto +stroke +gsave [0.98365551 -0.49236352 0.49236352 0.98365551 7.262601 117.39903] concat +gsave +0 0 0 setrgbcolor +newpath +8.7185878 4.0337352 moveto +-2.2072895 0.016013256 lineto +8.7185884 -4.0017078 lineto +6.97309 -1.6296469 6.9831476 1.6157441 8.7185878 4.0337352 curveto +closepath +eofill +grestore +grestore +0 0 0 setrgbcolor +[] 0 setdash +1 setlinewidth +0 setlinejoin +0 setlinecap +newpath +319.79709 118.68308 moveto +234.48869 66.453676 158.66445 84.678135 84.96452 118.68308 curveto +stroke +gsave [0.99880898 -0.46084772 0.46084772 0.99880898 85.963329 118.22223] concat +gsave +0 0 0 setrgbcolor +newpath +8.7185878 4.0337352 moveto +-2.2072895 0.016013256 lineto +8.7185884 -4.0017078 lineto +6.97309 -1.6296469 6.9831476 1.6157441 8.7185878 4.0337352 curveto +closepath +eofill +grestore +grestore +0 0 0 setrgbcolor +[] 0 setdash +1 setlinewidth +0 setlinejoin +0 setlinecap +newpath +397.16706 119.82255 moveto +317.23195 75.067632 238.9209 74.162508 162.33449 119.82255 curveto +stroke +gsave [0.9448267 -0.56329611 0.56329611 0.9448267 163.27932 119.25925] concat +gsave +0 0 0 setrgbcolor +newpath +8.7185878 4.0337352 moveto +-2.2072895 0.016013256 lineto +8.7185884 -4.0017078 lineto +6.97309 -1.6296469 6.9831476 1.6157441 8.7185878 4.0337352 curveto +closepath +eofill +grestore +grestore +0 0 0 setrgbcolor +[] 0 setdash +1 setlinewidth +0 setlinejoin +0 setlinecap +newpath +473.93389 173.72993 moveto +393.31902 208.79011 314.69794 213.94352 239.10133 173.72993 curveto +stroke +gsave [0.97114563 0.51660058 -0.51660058 0.97114563 240.07248 174.24653] concat +gsave +0 0 0 setrgbcolor +newpath +8.7185878 4.0337352 moveto +-2.2072895 0.016013256 lineto +8.7185884 -4.0017078 lineto +6.97309 -1.6296469 6.9831476 1.6157441 8.7185878 4.0337352 curveto +closepath +eofill +grestore +grestore +gsave +0 0 0 setrgbcolor +newpath +525.80261 196.2317 moveto +524.66882 197.14577 lineto +523.94811 196.60085 523.27429 196.32839 522.64734 196.32838 curveto +522.13171 196.32839 521.75378 196.46609 521.51355 196.74147 curveto +521.27917 197.01687 521.16198 197.31277 521.16199 197.62917 curveto +521.16198 198.03933 521.33777 198.3821 521.68933 198.65749 curveto +522.04089 198.92702 522.55651 199.06179 523.23621 199.06178 curveto +523.32409 199.06179 523.47058 199.05886 523.67566 199.05299 curveto +523.67566 200.38014 lineto +523.48815 200.37429 523.34753 200.37136 523.25378 200.37135 curveto +522.41589 200.37136 521.83288 200.53249 521.50476 200.85475 curveto +521.18249 201.17702 521.02136 201.5403 521.02136 201.9446 curveto +521.02136 202.36061 521.18542 202.71218 521.51355 202.99928 curveto +521.84167 203.28053 522.23132 203.42116 522.6825 203.42116 curveto +523.50866 203.42116 524.2821 203.03737 525.00281 202.26979 curveto +526.1366 203.2278 lineto +525.19909 204.22389 524.03308 204.72194 522.63855 204.72194 curveto +521.54284 204.72194 520.72546 204.44362 520.1864 203.88698 curveto +519.64734 203.33034 519.37781 202.68288 519.37781 201.9446 curveto +519.37781 200.88405 519.89343 200.13112 520.92468 199.68581 curveto +520.06335 199.19948 519.63269 198.52859 519.63269 197.67311 curveto +519.63269 196.97585 519.88757 196.35183 520.39734 195.80104 curveto +520.9071 195.24441 521.68933 194.96609 522.74402 194.96608 curveto +523.95104 194.96609 524.97057 195.38796 525.80261 196.2317 curveto +fill +grestore +0 0 0 setrgbcolor +[] 0 setdash +1 setlinewidth +0 setlinejoin +0 setlinecap +newpath +553.1751 160.12402 moveto +557.10653 179.41906 543.9716 187.33653 528.05932 193.40244 curveto +stroke +gsave [1.0278486 -0.39182551 0.39182551 1.0278486 529.08717 193.01061] concat +gsave +0 0 0 setrgbcolor +newpath +8.7185878 4.0337352 moveto +-2.2072895 0.016013256 lineto +8.7185884 -4.0017078 lineto +6.97309 -1.6296469 6.9831476 1.6157441 8.7185878 4.0337352 curveto +closepath +eofill +grestore +grestore +0 0 0 setrgbcolor +[] 0 setdash +1 setlinewidth +0 setlinejoin +0 setlinecap +newpath +631.03403 159.49613 moveto +609.41147 191.856 574.44081 198.85447 536.22195 199.68138 curveto +stroke +gsave [1.0997426 -0.023794225 0.023794225 1.0997426 537.32169 199.65759] concat +gsave +0 0 0 setrgbcolor +newpath +8.7185878 4.0337352 moveto +-2.2072895 0.016013256 lineto +8.7185884 -4.0017078 lineto +6.97309 -1.6296469 6.9831476 1.6157441 8.7185878 4.0337352 curveto +closepath +eofill +grestore +grestore +0 0 0 setrgbcolor +[] 0 setdash +1 setlinewidth +0 setlinejoin +0 setlinecap +newpath +713.28821 160.75192 moveto +670.74734 221.47065 606.06284 227.41306 531.82669 209.72769 curveto +stroke +gsave [1.070054 0.2549203 -0.2549203 1.070054 532.89674 209.98261] concat +gsave +0 0 0 setrgbcolor +newpath +8.7185878 4.0337352 moveto +-2.2072895 0.016013256 lineto +8.7185884 -4.0017078 lineto +6.97309 -1.6296469 6.9831476 1.6157441 8.7185878 4.0337352 curveto +closepath +eofill +grestore +grestore +grestore +showpage +%%EOF diff --git a/6-kmp/barb.svg b/6-kmp/barb.svg new file mode 100644 index 0000000..467c6ab --- /dev/null +++ b/6-kmp/barb.svg @@ -0,0 +1,431 @@ + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + ε + b + ba + bar + barb + barba + barbar + barbaro + barbarossa + ... + b a r b a r o ... a + + + + + + + + + + + + + + + + ε + + + + +