]> mj.ucw.cz Git - ads2.git/commitdiff
FFT: Vyhrabana z archivu
authorMartin Mares <mj@ucw.cz>
Wed, 30 Nov 2011 18:40:28 +0000 (19:40 +0100)
committerMartin Mares <mj@ucw.cz>
Wed, 30 Nov 2011 18:40:28 +0000 (19:40 +0100)
7-fft/7-fft.tex [new file with mode: 0644]
7-fft/Makefile [new file with mode: 0644]
7-fft/img.eps [new file with mode: 0644]
old/9-fft/9-fft.tex [deleted file]
old/9-fft/Makefile [deleted file]
old/9-fft/img.eps [deleted file]

diff --git a/7-fft/7-fft.tex b/7-fft/7-fft.tex
new file mode 100644 (file)
index 0000000..9f7f51c
--- /dev/null
@@ -0,0 +1,391 @@
+\def\scharfs{\char"19}
+\input lecnotes.tex
+\def\imply{\Rightarrow}
+\prednaska{9}{Fourierova transformace}{}
+
+Násobení polynomù mù¾e mnohým pøipadat jako pomìrnì (algoritmicky) snadný
+problém. Asi ka¾dého hned napadne \uv{hloupý} algoritmus -- vezmeme
+koeficienty prvního polynomu a~vynásobíme ka¾dý se v¹emi koeficienty druhého
+polynomu a~pøíslu¹nì u~toho seèteme i~exponenty (stejnì jako to dìláme, kdy¾
+násobíme polynomy na~papíøe). Pokud stupeò prvního polynomu je $n$ a~druhého
+$m$, strávíme tím èas $\Omega(mn)$. Pro $m=n$ je to kvadraticky pomalé.
+Na~první pohled se mù¾e zdát, ¾e rychleji to prostì nejde (pøeci musíme
+v¾dy vynásobit \uv{ka¾dý s~ka¾dým}). Ve skuteènosti to ale rychleji fungovat
+mù¾e, ale k~tomu je potøeba znát trochu tajemný algoritmus FFT neboli {\I Fast
+Fourier Transform}.
+
+
+\ss{Trochu algebry na~zaèátek}
+Celé polynomy oznaèujeme velkými písmeny, jednotlivé èleny polynomù pøíslu¹nými
+malými písmeny (pø.: polynom $W$ stupnì $d$ má koeficienty $w_{0}, w_{1},
+w_{2},\ldots, w_{d}$).
+
+Libovolný polynom $P$ stupnì (nejvý¹e) $d$ lze reprezentovat
+jednak jeho koeficienty, tedy èísly $p_{0}, p_{1}, \ldots ,p_{d}$, druhak
+i~pomocí hodnot:
+
+\>{\bf Lemma:} Polynom stupnì nejvý¹e $d$ je jednoznaènì urèeò svými
+hodnotami v~$d+1$ rùzných bodech.
+
+\>{\it Dùkaz:}
+Polynom stupnì $d$ má maximálnì $d$ koøenù (indukcí -- je-li
+$k$ koøenem $P$, pak lze $P$ napsat jako $(x-k)Q$ kde $Q$ je polynom stupnì
+o~jedna men¹í, pøitom polynom stupnì 1 má jediný koøen); uvá¾íme-li
+dva rùzné polynomy $P$ a~$Q$ stupnì $d$ nabývající v~daných bodech stejných
+hodnot, tak $P-Q$ je polynom stupnì maximálnì $d$, ka¾dé
+z $x_{0}\ldots x_{d}$ je koøenem tohoto polynomu $\imply$ spor, polynom stupnì
+$d$ má $d+1$ koøenù $\imply$ $P-Q$ musí být nulový polynom $\imply$ $P=Q$.
+\qed
+\medskip       
+
+Pov¹imnìme si jedné skuteènosti -- máme-li dva polynomy $A$ a~$B$ stupnì $d$
+a~body $x_{0}, \ldots, x_{n}$, dále polynom $C=A \cdot B$ (stupnì $2d$), pak
+platí $C(x_{j}) = A(x_{j}) \cdot B(x_{j})$ pro $j = 0,1,2, \ldots, n$. Toto
+èiní tento druhý zpùsob reprezentace polynomu velice atraktivním pro násobení
+-- máme-li $A$ i $B$ reprezentované hodnotami v $n \geq 2d+1$ bodech, pak
+snadno (v $\Theta(n)$) spoèteme takovou reprezentaci $C$.
+Problémem je, ¾e typicky máme polynom zadaný koeficienty, a~ne hodnotami
+v~bodech. Tím pádem potøebujeme nìjaký hodnì rychlý algoritmus (tj.
+rychlej¹í ne¾ kvadratický, jinak bychom si nepomohli oproti hloupému
+algoritmu) na~pøevod polynomu z jedné reprezentace do druhé a~zase zpìt.
+
+\s{Idea, jak by mìl algoritmus pracovat:}
+\algo
+\:Vybereme $n\geq 2d+1$ bodù $x_{0}, x_{1}, \ldots , x_{n-1}$.
+\:V tìchto bodech vyhodnotíme polynomy $A$ a~$B$.
+\:Nyní ji¾ v~lineárním èase získáme hodnoty polynomu $C$ v~tìchto bodech:
+       $C(x_i) = A(x_i)\cdot B(x_i)$
+\:Pøevedeme hodnoty polynomu $C$ na~jeho koeficienty.
+\endalgo
+
+\>Je vidìt, ¾e klíèové jsou kroky 2 a~4.
+Celý trik spoèívá v~chytrém vybrání onìch bodù, ve kterých budeme polynomy
+vyhodnocovat -- zvolí-li se obecná $x_j$, tak se to rychle neumí, pro speciální
+$x_j$ ale uká¾eme, ¾e to rychle jde.
+
+\ss{Vyhodnocení polynomu metodou Rozdìl a~panuj (algoritmus FFT):}
+Mìjme polynom $P$ stupnì $\leq d$ a~chtìjme jej vyhodnotit v~$n$ bodech.
+Vybereme si body tak, aby byly spárované, èili $\pm x_{0}, \pm x_{1},
+\ldots , \pm x_{n/2-1} $. To nám výpoèet urychlí, proto¾e pak se druhé
+mocniny $x_{j}$ shodují s~druhými mocninami $-x_{j}$.
+
+Polynom $P$ rozlo¾íme na~dvì èásti, první obsahuje èleny se sudými exponenty,
+druhá s~lichými:
+$$P(x) = (p_{0}x^{0} + p_{2}x^{2} + \ldots + p_{d-2}x^{d-2}) + (p_{1}x^{1} +
+       p_{3}x^{3} + \ldots + p_{d-1}x^{d-1})$$
+\>se zavedením znaèení:
+$$P_s(t) = p_0t^0 + p_{2}t^{1} + \ldots + p_{d - 2}t^{d - 2\over 2}$$
+$$P_l(t) = p_1t^0 + p_3t^1 + \ldots + p_{d - 1}t^{d - 2\over 2}$$
+
+\>bude $P(x) = P_s(x^{2}) + xP_l(x^{2})$ a~$P(-x) = P_s(x^{2}) -
+xP_l(x^{2})$. Jinak øeèeno, vyhodnocování polynomu $P$ v~$n$ bodech se nám
+smrskne na~vyhodnocení $P_s$ a~$P_l$ v~$n/2$ bodech -- oba jsou polynomy
+stupnì nejvý¹e $d/2$ a~vyhodnocujeme je v~$x^{2}$ (vyu¾íváme
+rovnosti $(x_{i})^{2} = (-x_{i})^{2}$).
+
+\s{Pøíklad:}
+$3 + 4x + 6x^{2} + 2x^{3} + x^{4} + 10x^{5} = (3 + 6x^{2} + x^{4}) + x(4 +
+2x^{2} + 10x^{4})$.
+
+Teï nám ov¹em vyvstane problém s~oním párováním -- druhá mocnina pøece nemù¾e
+být záporná a~tím pádem u¾ v~druhé úrovni rekurze body spárované nebudou.
+Z~tohoto dùvodu musíme pou¾ít komplexní èísla -- tam druhé mocniny záporné býti
+mohou.
+
+% komplex
+\h{Komplexní intermezzo}
+\def\i{{\rm i}}
+\def\\{\hfil\break}
+
+\s{Základní operace}
+
+\itemize\ibull
+\:Definice: ${\bb C} = \{a + b\i \mid a,b \in {\bb R}\}$
+
+\:Sèítání: $(a+b\i)\pm(p+q\i) = (a\pm p) + (b\pm q)\i$. \\
+Pro $\alpha\in{\bb R}$ je $\alpha(a+b\i) = \alpha a + \alpha b\i$.
+
+\:Komplexní sdru¾ení: $\overline{a+b\i} = a-b\i$. \\
+$\overline{\overline x} = x$, $\overline{x\pm y} = \overline{x} \pm
+\overline{y}$, $\overline{x\cdot y} = \overline x \cdot \overline y$, $x
+\cdot \overline x \in {\bb R}$.
+
+\:Absolutní hodnota: $\vert x \vert = \sqrt{x\cdot\overline{x}}$, tak¾e $\vert
+a+b\i \vert = \sqrt{a^2+b^2}$. \\
+Také $\vert \alpha x \vert = \vert \alpha\vert \cdot \vert x \vert$.
+
+\:Dìlení: $x/y = (x\cdot \overline{y}) / (y \cdot \overline{y})$.
+\endlist
+
+\s{Gau{\scharfs}ova rovina a goniometrický tvar}
+
+\itemize\ibull
+\:Komplexním èíslùm pøiøadíme body v~${\bb R}^2$: $a+b\i \leftrightarrow (a,b)$.
+
+\:$\vert x\vert$ je vzdálenost od~bodu $(0,0)$.
+
+\:$\vert x\vert = 1$ pro èísla le¾ící na~jednotkové kru¾nici ({\I komplexní jednotky}). \\
+Pak platí $x=\cos\varphi + \i\sin\varphi$ pro nìjaké $\varphi\in\left[
+0,2\pi \right)$.
+
+\:Pro libovolné $x\in{\bb C}$: $x=\vert x \vert \cdot (\cos\varphi(x) +
+\i\sin\varphi(x))$. \\
+Èíslu $\varphi(x)\in\left[ 0,2\pi \right)$ øíkáme {\I argument}
+èísla~$x$, nìkdy znaèíme $\mathop{\rm arg} x$.
+
+\:Navíc $\varphi({\overline{x}}) = -\varphi(x)$.
+\endlist
+
+\s{Exponenciální tvar}
+
+\itemize\ibull
+\:Eulerova formule: $e^{i\varphi} = \cos\varphi + \i\sin\varphi$.
+
+\:Ka¾dé $x\in{\bb C}$ lze tedy zapsat jako $\vert x\vert \cdot e^{\i\cdot
+\varphi(x)}$.
+
+\:Násobení: $xy = \left(\vert x\vert\cdot e^{\i\cdot\varphi(x)}\right) \cdot
+       \left(\vert y\vert\cdot e^{\i\cdot\varphi(y)}\right) = \vert x\vert
+       \cdot \vert y\vert \cdot e^{\i\cdot(\varphi(x) + \varphi(y))}$. \\
+(absolutní hodnoty se násobí, argumenty sèítají)
+
+\:Umocòování: $x^\alpha = \left(\vert x\vert\cdot e^{\i\cdot\varphi(x)}\right)^
+       \alpha = {\vert x\vert}^\alpha\cdot e^{\i \alpha \varphi(x)}$.
+
+\:Odmocòování: $\root n\of x = {\vert x\vert}^{1/n} \cdot e^{\i\cdot
+\varphi(x)/n}$. \\
+Pozor -- odmocnina není jednoznaèná: $1^4=(-1)^4=\i^4=(-\i)^4=1$.
+\endlist
+
+\s{Odmocniny z~jednièky}
+
+\itemize\ibull
+\:Je-li nìjaké $x\in{\bb C}$ $n$-tou odmocninou z~jednièky, musí platit:
+$\vert x \vert = 1$, tak¾e $x=e^{\i\varphi}$ pro nìjaké~$\varphi$.
+Proto $x^n = e^{\i\varphi n} = \cos{\varphi n} + \i\sin\varphi n = 1$.
+Platí tedy $\varphi n = 2k\pi$ pro nìjaké $k\in{\bb Z}$.
+
+\:Z~toho plyne: $\varphi = 2k\pi/n$ \\
+(pro $k=0,\ldots,n-1$ dostáváme rùzné $n$-té odmocniny).
+
+\:Obecné odmocòování: $\root n \of x = {\vert x\vert}^{1/n} \cdot e^{\i\varphi
+       (x)/n} \cdot u$, kde $u=\root n\of 1$.
+
+\:Je-li $x$ odmocninou z 1, pak $\overline{x} = x^{-1}$ -- je toti¾ $1 = \vert
+x\cdot \overline{x}\vert = x\cdot \overline{x}$.
+\endlist
+
+\s{Primitivní odmocniny}
+
+\s{Definice:} $x$ je {\I primitivní} $k$-tá odmocnina z 1 $\equiv x^k=1 \land \forall j: 0<j<k \Rightarrow x^j \neq 1$.
+
+\>Tuto definici splòují napøíklad èísla $\omega = e^{2\pi \i / k}$ a $\overline\omega = e^{-2\pi\i/k}$.
+Platí toti¾, ¾e $\omega^j = e^{2\pi\i j/k}$, co¾ je rovno~1 právì tehdy,
+je-li $j$ násobkem~$k$ (jednotlivé mocniny èísla~$\omega$ postupnì obíhají
+jednotkovou kru¾nici). Analogicky pro~$\overline\omega$.
+
+\>Uka¾me si nìkolik pozorování fungujících pro libovolné èíslo~$\omega$,
+které je primitivní $k$-tou odmocninou z~jednièky (nìkdy budeme potøebovat,
+aby navíc $k$ bylo sudé):
+
+\itemize\ibull
+\:Pro $0\leq j<l<k$ je $\omega^j \neq \omega^l$, nebo» $\omega^l /
+\omega^j = \omega^{l-j} \neq 1$, proto¾e $l-j < k$ a $\omega$ je primitivní.
+\:$\omega^{k/2} = -1$, proto¾e $(\omega^{k/2})^2 = 1$, a tedy
+$\omega^{k/2}$ je druhá odmocnina z~1. Takové odmocniny jsou dvì:
+1 a $-1$, ov¹em 1 to být nemù¾e, proto¾e $\omega$ je primitivní.
+\:$\omega^j = - \omega^{k/2 + j}$ -- pøímý dùsledek pøedchozího bodu, pro
+nás ale velice zajímavý: $\omega^0,\omega^1,\ldots,\omega^{k-1}$ jsou po dvou
+spárované.
+\:$\omega^2$ je $k/2$-tá primitivní odmocnina z 1 -- dosazením.
+\endlist
+
+\h{Konec intermezza}
+% end komplex
+
+\bigskip
+
+Vra»me se nyní k algoritmu. Z poslední èásti komplexního intermezza se zdá,
+¾e by nemusel být ¹patný nápad zkusit vyhodnocovat polynom v mocninách
+$n$-té primitivní odmocniny z~jedné (tedy za $x_0,x_1,\ldots,x_{n-1}$
+z~pùvodního algoritmu zvolíme $\omega^0,\omega^1,\ldots,\omega^{n-1}$).
+Aby nám v¹e vycházelo pìknì, zvolíme $n$ jako mocninu dvojky.
+
+\ss{Celý algoritmus bude vypadat takto:}
+\>FFT($P$, $ \omega$)
+
+\>{\sl Vstup:} $p_{0}, \ldots , p_{n-1}$, koeficienty polynomu $P$ stupnì
+nejvý¹e $n-1$, a~$\omega$,
+$n$-tá primitivní odmocina z jedné.
+
+\>{\sl Výstup:} Hodnoty polynomu v~bodech $1, \omega, \omega^{2}, \ldots ,
+\omega^{n - 1}$, èili èísla $P(1), P(\omega), P(\omega^{2}),$ $\ldots ,
+P(\omega^{n - 1})$.
+
+\algo
+\:Pokud $n = 1$, vrátíme $p_{0}$ a~skonèíme.
+\:Jinak rozdìlíme $P$ na èleny se sudými a lichými exponenty (jako v pùvodní
+my¹lence) a~rekurzivnì zavoláme FFT($P_s$, $\omega^{2}$) a~FFT($P_l$,
+$\omega^{2}$) -- $P_l$ i~$P_s$ jsou stupnì max. $n/2-1$, $\omega^2$ je
+$n/2$-tá primitivní odmocnina, a mocniny $\omega^2$ jsou stále po dvou
+spárované ($n$ je mocnina dvojky, a tedy i $n/2$ je sudé; popø. $n=2$ a je to
+zøejmé).
+\:Pro $j = 0, \ldots , n/2 - 1$ spoèítáme:
+
+\:\qquad $P(\omega^{j}) = P_s(\omega^{2j}) + \omega^{j}\cdot P_l(\omega^{2j})$.
+
+\:\qquad $P(\omega^{j+n/2})=P_s(\omega^{2j})-\omega^{j}\cdot P_l(\omega^{2j})$.
+
+\endalgo
+
+
+\s{Èasová slo¾itost:}
+\>$T(n)=2T(n/2) + \Theta(n) \Rightarrow$ slo¾itost $\Theta(n \log n)$, jako
+MergeSort.
+
+
+Máme tedy algoritmus, který pøevede koeficienty polynomu na~hodnoty tohoto
+polynomu v~rùzných bodech. Potøebujeme ale také algoritmus, který doká¾e
+reprezentaci polynomu pomocí hodnot pøevést zpìt na~koeficienty polynomu.
+K~tomu nám pomù¾e podívat se na~ná¹ algoritmus trochu obecnìji.
+
+
+\s{Definice:}
+\>{\I Diskrétní Fourierova transformace} $(DFT)$
+je zobrazení $f: { {\bb C} ^n} \rightarrow { {\bb C} ^n}$, kde $$y=f(x) \equiv
+\forall j \ y_{j} = \sum \limits ^{n-1}_{k=0} x_{k} \cdot \omega ^{jk}$$
+(DFT si lze mimo jiné pøedstavit jako funkci vyhodnocující polynom
+s~koeficienty $x_k$ v~bodech $\omega^j$). Takovéto zobrazení je lineární
+a~tedy popsatelné maticí $\Omega$ s~prvky $\Omega_{jk} = \omega^{jk}$.
+Chceme-li umìt pøevádìt z~hodnot polynomu na koeficienty, zajímá nás inverze
+této matice.
+
+
+\ss{Jak najít inverzní matici?}
+Znaème $\overline{\Omega}$ matici, její¾ prvky
+jsou komplexnì sdru¾ené odpovídajícím prvkùm $\Omega$, a vyu¾ijme následující
+lemma:
+
+\ss{Lemma:}$\quad \Omega\cdot \overline{\Omega} = n\cdot E$.
+
+\proof $$ (\Omega\cdot \overline{\Omega})_{jk} = \sum_{l=0}^{n-1} \omega^{jl}
+\cdot \overline{\omega^{lk}} = \sum \omega^{jl} \cdot \overline{\omega}^{lk} =
+\sum \omega^{jl} \cdot \omega^{-lk} = \sum \omega^{l(j-k)}\hbox{.}$$
+\itemize\ibull
+\:Pokud $j=k$, pak $ \sum \limits ^{n-1}_{l=0} (\omega ^{0}) ^{l} = n$.
+
+\:Pokud $j\neq k$, pou¾ijeme vzoreèek pro souèet geometrické øady
+s kvocientem $\omega ^{(j-k) }$ a~dostaneme ${{\omega^{(j-k)n} -1} \over
+{\omega^{(j-k)} -1}} ={1-1 \over \neq 0} = 0$ (
+$\omega^{j-k} - 1$ je jistì $\neq 0$, nebo» $\omega$ je $n$-tá primitivní
+odmoncina a $j-k<n$).
+\endlist
+\qed
+
+
+\>Na¹li jsme inverzi:
+$\Omega({1 \over n} \overline{\Omega}) = {1 \over n}\Omega \cdot
+\overline{\Omega} = E$, \quad $\Omega^{-1}_{jk} = {1 \over n}\overline{\omega^
+{jk}} = {1 \over n}\omega^{-jk} = {1 \over n} {(\omega^{-1})}^{jk}$, \quad
+(pøipomínáme, $\omega^{-1}$ je $\overline{\omega}$).
+
+Vyhodnocení polynomu lze provést vynásobením $\Omega$, pøevod do pùvodní
+reprezentace vynásobením $\Omega^{-1}$. My jsme si ale v¹imli chytrého
+spárování, a vyhodnocujeme polynom rychleji ne¾ kvadraticky (proto FFT,
+jako¾e {\it fast}, ne jako {\it fuj}). Uvìdomíme-li si, ¾e $\overline \omega =
+\omega^{-1}$ je také $n$-tá primitivní odmocnina z 1 (má akorát
+úhel s opaèným znaménkem), tak mù¾eme stejným trikem vyhodnotit i~zpìtný
+pøevod -- nejprve vyhodnotíme $A$ a $B$ v $\omega^j$, poté pronásobíme
+hodnoty a~dostaneme tak hodnoty polynomu $C=A\cdot B$, a pustíme na nì
+stejný algoritmus s~$\omega^{-1}$ (hodnoty $C$
+vlastnì budou v~algoritmu \uv{koeficienty polynomu}). Nakonec jen získané
+hodnoty vydìlíme $n$ a~máme chtìné koeficienty.
+
+\s{Výsledek:} Pro $n= 2^k$ lze DFT na~${\bb C}^n$ spoèítat v~èase $\Theta(n
+\log n)$ a~DFT$^{-1}$ takté¾.
+
+\s{Dùsledek:}
+Polynomy stupnì $n$ lze násobit v~èase $\Theta(n \log n)$:
+$\Theta(n \log n)$ pro vyhodnocení, $\Theta(n)$ pro vynásobení a~$\Theta(n
+\log n)$ pro pøevedení zpìt.
+
+\s{Pou¾ití FFT:}
+
+\itemize\ibull
+
+\:Zpracování signálu -- rozklad na~siny a~cosiny o~rùzných frekvencích
+$\Rightarrow$ spektrální rozklad.
+\:Komprese dat -- napøíklad formát JPEG.
+\:Násobení dlouhých èísel v~èase $\Theta(n \log n)$.
+\endlist
+
+\s{Paralelní implementace FFT}
+
+\figure{img.eps}{Pøíklad prùbìhu algoritmu na~vstupu velikosti 8}{3in}
+
+Zkusme si prùbìh algoritmu FFT znázornit graficky (podobnì, jako jsme kreslili
+hradlové sítì). Na~levé stranì obrázku se nachází vstupní vektor $x_0,\ldots,x_{n-1}$
+(v~nìjakém poøadí), na~pravé stranì pak výstupní vektor $y_0,\ldots,y_{n-1}$.
+Sledujme chod algoritmu pozpátku: Výstup spoèítáme z~výsledkù \uv{polovièních}
+transformací vektorù $x_0,x_2,\ldots,x_{n-2}$ a $x_1,x_3,\ldots,x_{n-1}$.
+Èerné krou¾ky pøitom odpovídají výpoètu lineární kombinace $a+\omega^kb$,
+kde $a,b$ jsou vstupy krou¾ku a $k$~nìjaké pøirozené èíslo závislé na poloze
+krou¾ku. Ka¾dá z~polovièních transformací se poèítá analogicky z~výsledkù
+transformace velikosti $n/4$ atd. Celkovì výpoèet probíhá v~$\log_2 n$ vrstvách
+po~$\Theta(n)$ operacích.
+
+Jeliko¾ operace na~ka¾dé vrstvì probíhají na sobì nezávisle, mù¾eme je poèítat
+paralelnì. Ná¹ diagram tedy popisuje hradlovou sí» pro paralelní výpoèet FFT
+v~èase $\Theta(\log n\cdot T)$ a prostoru $\O(n\cdot S)$, kde $T$ a~$S$ znaèí
+èasovou a prostorovou slo¾itost výpoètu lineární kombinace dvou komplexních èísel.
+
+\s{Cvièení:} Doka¾te, ¾e permutace vektoru $x_0,\ldots,x_{n-1}$ odpovídá bitovému
+zrcadlení, tedy ¾e na pozici~$b$ shora se vyskytuje prvek $x_d$, kde~$d$ je
+èíslo~$b$ zapsané ve~dvojkové soustavì pozpátku.
+
+\s{Nerekurzivní FFT}
+
+Obvod z~pøedchozího obrázku také mù¾eme vyhodnocovat po~hladinách zleva doprava,
+èím¾ získáme elegantní nerekurzivní algoritmus pro výpoèet FFT v~èase $\Theta(n\log n)$
+a prostoru $\Theta(n)$:
+
+\algo
+\algin $x_0,\ldots,x_{n-1}$
+\:Pro $j=0,\ldots,n-1$ polo¾íme $y_k\= x_{r(k)}$, kde $r$ je funkce bitového zrcadlení.
+\:Pøedpoèítáme tabulku $\omega^0,\omega^1,\ldots,\omega^{n-1}$.
+\:$b\= 1$ \cmt{velikost bloku}
+\:Dokud $b<n$, opakujeme:
+\::Pro $j=0,\ldots,n-1$ s~krokem~$2b$ opakujeme: \cmt{zaèátek bloku}
+\:::Pro $k=0,\ldots,b-1$ opakujeme: \cmt{pozice v~bloku}
+\::::$\alpha\=\omega^{nk/2b}$
+\::::$(y_{j+k},y_{j+k+b}) \= (y_{j+k}+\alpha\cdot y_{j+k+b}, y_{j+k}-\alpha\cdot y_{j+k+b})$.
+\::$b\= 2b$
+\algout $y_0,\ldots,y_{n-1}$
+\endalgo
+
+\s{FFT v~koneèných tìlesech}
+
+Nakonec dodejme, ¾e Fourierovu transformaci lze zavést nejen nad tìlesem
+komplexních èísel, ale i v~nìkterých koneèných tìlesech, pokud zaruèíme
+existenci primitivní $n$-té odmocniny z~jednièky. Napøíklad v~tìlese ${\bb
+Z}_p$ pro prvoèíslo $p=2^k+1$ platí $2^k=-1$, tak¾e $2^{2k}=1$
+a $2^0,2^1,\ldots,2^{2k-1}$ jsou navzájem rùzná, tak¾e èíslo~2 je~primitivní
+$2k$-tá odmocnina z~jedné. To se nám ov¹em nehodí pro algoritmus FFT, jeliko¾
+$2k$ bude málokdy mocnina dvojky.
+
+Zachrání nás ov¹em algebraická vìta, která øíká, ¾e multiplikativní grupa\foot{To je
+mno¾ina v¹ech nenulových prvkù tìlesa s~operací násobení.}
+libovolného koneèného tìlesa je cyklická, tedy ¾e v¹echny nenulové prvky tìlesa lze
+zapsat jako mocniny nìjakého èísla~$g$ (generátoru). Napøíklad pro $p=2^{16}+1=65\,537$
+je jedním takovým generátorem èíslo~$3$. Jeliko¾ mezi èísly $g^1,g^2,\ldots,g^{p-1}$
+se musí ka¾dý nenulový prvek tìlesa vyskytnout právì jednou, je~$g$ primitivní
+$2^k$-tou odmocninou z~jednièky, tak¾e mù¾eme poèítat FFT pro libovolný vektor,
+jeho¾ velikost je mocnina dvojky men¹í nebo rovná $2^k$.\foot{Bli¾¹í prùzkum
+na¹ich úvah o~FFT dokonce odhalí, ¾e není ani potøeba tìleso. Postaèí libovolný
+komutativní okruh, ve~kterém existuje pøíslu¹ná primitivní odmocnina
+z~jednièky, její multiplikativní inverze (ta ov¹em existuje v¾dy, proto¾e
+$\omega^{-1} = \omega^{n-1}$) a multiplikativní inverze èísla~$n$. To nám
+poskytuje je¹tì daleko více volnosti ne¾ tìlesa, ale není snadné takové okruhy
+hledat.}
+
+\bye
diff --git a/7-fft/Makefile b/7-fft/Makefile
new file mode 100644 (file)
index 0000000..4195ce0
--- /dev/null
@@ -0,0 +1,3 @@
+P=7-fft
+
+include ../Makerules
diff --git a/7-fft/img.eps b/7-fft/img.eps
new file mode 100644 (file)
index 0000000..d7e20d4
--- /dev/null
@@ -0,0 +1,1072 @@
+%!PS-Adobe-2.0 EPSF-1.2\r
+%%Creator: Xara X\r
+%%For: (Unregistered user) (Unregistered company)\r
+%%Title: (velikost8.xar)\r
+%%CreationDate: (11/02/08) (09:37 PM)\r
+%%BoundingBox: 7 12 447 369\r
+%%HiResBoundingBox: 7.148 12.362 446.455 368.162\r
+%%AWColourTable\r
+%%+h (Red) 0.0 100.0 100.0\r
+%%+h (Orange-Red) 15.0 100.0 100.0\r
+%%+h (Orange) 30.0 100.0 100.0\r
+%%+h (Orange-Yellow) 45.0 100.0 100.0\r
+%%+h (Yellow) 60.0 100.0 100.0\r
+%%+h (Yellow-Chartreuse) 75.0 100.0 100.0\r
+%%+h (Chartreuse) 90.0 100.0 100.0\r
+%%+h (Chartreuse-Green) 105.0 100.0 100.0\r
+%%+h (Green) 120.0 100.0 100.0\r
+%%+h (Green-SpringGreen) 135.0 100.0 100.0\r
+%%+h (Spring Green) 150.0 100.0 100.0\r
+%%+h (SpringGreen-Cyan) 165.0 100.0 100.0\r
+%%+h (Cyan) 180.0 100.0 100.0\r
+%%+h (Sky Blue) 195.0 100.0 100.0\r
+%%+h (Mid Blue) 210.0 100.0 100.0\r
+%%+h (MidBlue-Blue) 225.0 100.0 100.0\r
+%%+h (Blue) 240.0 100.0 100.0\r
+%%+h (Blue-Indigo) 255.0 100.0 100.0\r
+%%+h (Indigo) 270.0 100.0 100.0\r
+%%+h (Violet) 285.0 100.0 100.0\r
+%%+h (Magenta) 300.0 100.0 100.0\r
+%%+h (Magenta-Crimson) 315.0 100.0 100.0\r
+%%+h (Crimson) 330.0 100.0 100.0\r
+%%+h (Crimson-Red) 345.0 100.0 100.0\r
+%%+h (Black) 0.0 0.0 0.0\r
+%%+t (90% Black) 90\r
+%%+t (80% Black) 80\r
+%%+t (70% Black) 70\r
+%%+t (60% Black) 60\r
+%%+t (50% Black) 50\r
+%%+t (40% Black) 40\r
+%%+t (30% Black) 30\r
+%%+t (20% Black) 20\r
+%%+t (10% Black) 10\r
+%%+h (White) 0.0 0.0 100.0\r
+%%EndComments\r
+%%BeginProlog\r
+\r
+%%BeginResource: procset XaraStudio1Dict\r
+% Copyright (c) 1995,1996 Xara Ltd\r
+/XaraStudio1Dict 300 dict def XaraStudio1Dict begin\r
+/bd{bind def}bind def/ld{load def}bind def/xd{exch def}bind def/sv{save}bd\r
+/rs{restore}bd/gs{gsave}bd/gr{grestore}bd/bg{begin}bd/en{end}bd/level2\r
+/languagelevel where{pop languagelevel 2 ge}{false}ifelse def/setseps{\r
+/v_gseps xd}bd/setplate{/v_plate xd}bd/setkgray{/v_keyg xd}bd/setmono{\r
+/v_mono xd}bd/rgb2gray{0.109 mul exch 0.586 mul add exch 0.305 mul\r
+add}bd/cmyk2rgb{3{dup 5 -1 roll add dup 1 gt{pop 1}if 1 exch sub exch}repeat\r
+pop}bd/rgb2cmyk{3{1.0 exch sub 3 1 roll}repeat 3 copy 2 copy gt{exch}if\r
+pop 2 copy gt{exch}if pop dup 0.5 gt{0.5 sub dup 3{5 1 roll dup 3 1\r
+roll sub}repeat 5 1 roll pop}{pop 0}ifelse}bd/cmyk2hsb{3{dup 5 -1 roll\r
+add 1 exch sub dup 0 lt{pop 0}if exch}repeat pop rgb2hsb}bd/rgb2hsb{setrgbcolor\r
+currenthsbcolor}bd/readcurve{exch 255.0 mul 0.5 add cvi get 255.0 div}bd\r
+/rgb2devcmyk{3 copy dup 3 1 roll eq 3 1 roll eq v_keyg 1 eq and and{pop\r
+pop 1 exch sub 0 0 0 4 -1 roll}{/ucurve where{pop 3{1.0 exch sub 3\r
+1 roll}repeat 3 copy 2 copy gt{exch}if pop 2 copy gt{exch}if pop dup\r
+ucurve readcurve exch bcurve readcurve clamp01 3{5 1 roll dup 3 1 roll\r
+sub clamp01}repeat 5 1 roll pop 4 1 roll ycurve readcurve 4 1 roll\r
+mcurve readcurve 4 1 roll ccurve readcurve 4 1 roll}{rgb2cmyk}ifelse}ifelse}def\r
+/rgb2keyG{3 copy dup 3 1 roll eq 3 1 roll eq and{pop pop}{Max3}ifelse\r
+1 exch sub bcurve readcurve clamp01}bd/rgb2key{Max3 1 exch sub bcurve\r
+readcurve clamp01}bd/rgb2cyanG{3 copy dup 3 1 roll eq 3 1 roll eq and{pop\r
+pop pop 0}{rgb2cyan}ifelse}bd/rgb2cyan{3 copy Max3 1 exch sub ucurve\r
+readcurve 4 1 roll pop pop 1 exch sub exch sub ccurve readcurve clamp01}bd\r
+/rgb2magentaG{3 copy dup 3 1 roll eq 3 1 roll eq and{pop pop pop 0}{rgb2magenta}ifelse}bd\r
+/rgb2magenta{3 copy Max3 1 exch sub ucurve readcurve 4 1 roll pop\r
+1 exch sub 3 1 roll pop sub mcurve readcurve clamp01}bd/rgb2yellowG{3\r
+copy dup 3 1 roll eq 3 1 roll eq and{pop pop pop 0}{rgb2yellow}ifelse}bd\r
+/rgb2yellow{3 copy Max3 1 exch sub ucurve readcurve 4 1 roll 1 exch\r
+sub 4 1 roll pop pop sub ycurve readcurve clamp01}bd/rgb2plategray{v_keyg\r
+0 eq v_plate v_cpky eq{{rgb2key}{rgb2keyG}ifelse}{v_plate v_cpyl eq{{rgb2yellow}{rgb2yellowG}ifelse}{v_plate\r
+v_cpmg eq{{rgb2magenta}{rgb2magentaG}ifelse}{v_plate v_cpcy eq{{rgb2cyan}{rgb2cyanG}ifelse}{{rgb2key}{rgb2keyG}ifelse}ifelse}ifelse}ifelse}ifelse\r
+1 exch sub setgray}bd/dc{0 def}bd/aca{/v_cpnone 0 def/v_cpcy 1 def\r
+/v_cpyl 2 def/v_cpmg 3 def/v_cpky 4 def/v_gseps 0 def/v_keyg 0 def\r
+/v_plate v_cpnone def/v_mono 0 def/v_wr dc/v_fc dc/v_fm dc/v_fy dc\r
+/v_fk dc/v_fg dc/v_fr dc/v_fg dc/v_fb dc/v_sc dc/v_sm dc/v_sy dc/v_sk\r
+dc/v_sg dc/v_sr dc/v_sg dc/v_sb dc/v_sct 0 def/v_fct 0 def/v_ft 0 def\r
+/v_cxe 0 def/v_cxm 0 def/v_sa -1 def/v_ea -1 def/sR dc/sG dc/sB dc\r
+/mR dc/mG dc/mB dc/eR dc/eG dc/eB dc/sC dc/sM dc/sY dc/sK dc/eC dc\r
+/eM dc/eY dc/eK dc/sH dc/sS dc/sV dc/eH dc/eS dc/eV dc/sGy dc/eGy\r
+dc/mGy dc/ci_datasrc dc/ci_matrix dc/ci_dataleft dc/ci_buf dc/ci_dataofs\r
+dc/ci_y dc/rciBuf dc/cbslw dc/cmiBuf dc/cPalette dc/cpci_datasrc dc\r
+/cpci_matrix dc/cpci_bpp dc/cpci_y dc/cpci_sampsleft dc/cpci_nextcol\r
+dc/cpci_buf dc/startX dc/startY dc/endX dc/endY dc/endX2 dc/endY2 dc\r
+/fillX dc/urx dc/ury dc/llx dc/lly dc/incD dc/distance dc/slice dc\r
+/startangle dc/Steps dc/incH dc/incS dc/incV dc/incR dc/incG dc/incB\r
+dc/incGy dc 0.25 setlinewidth [] 0 setdash 0 setlinejoin 0 setlinecap}bd\r
+aca/setplategray{v_plate v_cpky eq{1 exch sub setgray pop pop pop}{v_plate\r
+v_cpyl eq{pop 1 exch sub setgray pop pop}{v_plate v_cpmg eq{pop pop\r
+1 exch sub setgray pop}{v_plate v_cpcy eq{pop pop pop 1 exch sub setgray}{1\r
+exch sub setgray pop pop pop}ifelse}ifelse}ifelse}ifelse}bd/setplatecolor{v_plate\r
+v_cpky eq{1 exch sub 0 0 0 4 -1 roll setcmykcolor pop pop pop}{v_plate\r
+v_cpyl eq{pop 1 exch sub 0 0 0 4 2 roll setcmykcolor pop pop}{v_plate\r
+v_cpmg eq{pop pop 1 exch sub 0 0 0 4 1 roll setcmykcolor pop}{v_plate\r
+v_cpcy eq{pop pop pop 1 exch sub 0 0 0 setcmykcolor}{1 exch sub 0 0\r
+0 4 -1 roll setcmykcolor pop pop pop}ifelse}ifelse}ifelse}ifelse}bd\r
+/setcmykcolor where{pop}{/setcmykcolor{cmyk2rgb setrgbcolor}bd}ifelse\r
+/setlogcmykcolor{v_gseps 1 eq{v_mono 1 eq{1 exch sub setgray pop pop\r
+pop}{setcmykcolor}ifelse}{v_mono 1 eq{cmyk2rgb rgb2gray setgray}{setcmykcolor}ifelse}ifelse}bd\r
+/setlogrgbcolor{v_gseps 1 eq{v_mono 1 eq{rgbtoplategray}{rgb2devcmyk\r
+setplatecolor}ifelse}{v_mono 1 eq{rgb2gray setgray}{systemdict begin\r
+setrgbcolor end}ifelse}ifelse}bd/setfillcolor{v_fct 0 eq{v_fc v_fm\r
+v_fy v_fk setlogcmykcolor}{v_fr v_fg v_fb setlogrgbcolor}ifelse}bd\r
+/setstrokecolor{v_sct 0 eq{v_sc v_sm v_sy v_sk setlogcmykcolor}{v_sr\r
+v_sg v_sb setlogrgbcolor}ifelse}bd/setgfillcmyk{v_gseps 1 eq{v_mono\r
+1 eq{cmyk2rgb rgb2plategray}{cmyk2rgb rgb2devcmyk setplatecolor}ifelse}{v_mono\r
+1 eq{cmyk2rgb rgb2gray setgray}{setcmykcolor}ifelse}ifelse}bd/setgfillrgb{v_gseps\r
+1 eq{v_mono 1 eq{rgb2plategray}{rgb2devcmyk setplatecolor}ifelse}{v_mono\r
+1 eq{rgb2gray setgray}{systemdict begin setrgbcolor end}ifelse}ifelse}bd\r
+/setgfillhsb{v_gseps 1 eq{v_mono 1 eq{systemdict begin sethsbcolor\r
+currentrgbcolor end rgb2plategray}{systemdict begin sethsbcolor currentrgbcolor\r
+end rgb2devcmyk setplatecolor}ifelse}{v_mono 1 eq{systemdict begin\r
+sethsbcolor currentgray end setgray}{systemdict begin sethsbcolor end}ifelse}ifelse}bd\r
+/Max{2 copy lt{exch}if pop}bd/Max3{2 copy lt{exch}if pop 2 copy lt{exch}if\r
+pop}bd/Min{2 copy gt{exch}if pop}bd/Min3{2 copy gt{exch}if pop 2 copy\r
+gt{exch}if pop}bd/clamp{3 1 roll Max 2 1 roll Min}bd/clamp01{0 Max\r
+1 Min}bd/Pythag{dup mul exch dup mul add sqrt}bd/ssc{DeviceRGB setcolorspace\r
+setcolor}bd/ssg{setgray}bd/p_render{}def/p_count 0 def/vis_flag true\r
+def/DataString 3 string def/DataSrc{currentfile DataString readhexstring\r
+pop}bd/DataStr1 1 string def/DataStr2 1 string def/DataStr3 1 string\r
+def/DataSrc1{DataStr1}bd/DataSrc2{DataStr2}bd/DataSrc3{DataStr3}bd\r
+/colorimage where{pop/ci{colorimage}bd}{/ci{pop pop/ci_datasrc exch\r
+def matrix invertmatrix/ci_matrix exch def pop/ci_dataleft 0 def/ci_buf()def\r
+/ci_dataofs 0 def 0 1 3 -1 roll 1 sub{/ci_y exch def dup 0 1 3 -1\r
+roll 1 sub{0 1 2{pop ci_dataleft 0 eq{ci_datasrc dup length/ci_dataleft\r
+exch def/ci_buf exch def/ci_dataofs 0 def}if ci_buf ci_dataofs get\r
+255 div/ci_dataofs ci_dataofs 1 add def/ci_dataleft ci_dataleft 1 sub\r
+def}for setrgbcolor dup ci_y 3 -1 roll 1 add ci_y 1 add 4 copy 5 1\r
+roll 4 2 roll 5 -1 roll 1 1 4{pop ci_matrix transform 8 2 roll}for\r
+m l l l closepath fill}for}for pop}bd}ifelse/rci{/rciBuf 4 index 3\r
+index mul 7 add 8 div floor cvi string def{currentfile rciBuf readhexstring\r
+pop}bind false 3 ci}bd/cbsl{2 eq/cbslL2 xd 5 index/cbslw xd translate\r
+scale 8 [ 3 index 0 0 5 index 0 0 ] cbslL2{/DataStr1 cbslw string def\r
+currentfile/ASCII85Decode filter/RunLengthDecode filter DataStr1 readstring\r
+pop pop/DataStr2 cbslw string def currentfile/ASCII85Decode filter\r
+/RunLengthDecode filter DataStr2 readstring pop pop/DataStr3 cbslw\r
+string def currentfile/ASCII85Decode filter/RunLengthDecode filter\r
+DataStr3 readstring pop pop{DataStr1}bind{DataStr2}bind{DataStr3}bind\r
+true}{/DataSrc load false}ifelse 3 ci}bd/gbsl{2 eq/gbslL2 xd 5 index\r
+/gbslw xd translate scale 8 [ 3 index 0 0 5 index 0 0 ] gbslL2{/DataStr1\r
+gbslw string def currentfile/ASCII85Decode filter/RunLengthDecode filter\r
+DataStr1 readstring pop pop{DataStr1}bind}{/DataStr1 gbslw string def\r
+currentfile DataSrc1 readhexstring pop pop{DataStr1}bind}ifelse image}bd\r
+/cmi{/cmiBuf 4 index 3 index mul 7 add 8 div floor cvi string def{currentfile\r
+cmiBuf readhexstring pop}bind image}bd/cpal{4 mul string/cPalette exch\r
+def currentfile cPalette readhexstring pop}bd/cpci{/cpci_datasrc exch\r
+def matrix invertmatrix/cpci_matrix exch def/cpci_bpp exch def cpci_init\r
+0 1 3 -1 roll 1 sub{/cpci_y exch def dup cpci_bpp 4 eq{cpci_sampsleft\r
+1 eq{/cpci_sampsleft 0 def}if}if 0 1 3 -1 roll 1 sub{cpci_nextcol dup\r
+cpci_y 3 -1 roll 1 add cpci_y 1 add 4 copy 5 1 roll 4 2 roll 5 -1 roll\r
+1 1 4{pop cpci_matrix transform 8 2 roll}for m l l l closepath fill}for}for\r
+pop}bd/cpci_init{/cpci_sampsleft 0 def}bd/cpci_buf 1 string def/cpci_nextcol{cpci_bpp\r
+1 eq{cpci_sampsleft 0 eq{currentfile cpci_buf readhexstring pop pop\r
+/cpci_sampsleft 8 def}if cpci_buf dup 0 get dup 1 and setgray -1 bitshift\r
+1 exch put/cpci_sampsleft cpci_sampsleft 1 sub def}{cpci_bpp 4 eq{cpci_sampsleft\r
+0 eq{currentfile cpci_buf readhexstring pop pop/cpci_sampsleft 2 def}if\r
+cpci_buf 0 get dup 15 and exch -4 bitshift cpci_buf 0 3 -1 roll put\r
+/cpci_sampsleft cpci_sampsleft 1 sub def}{currentfile cpci_buf readhexstring\r
+pop 0 get}ifelse 4 mul dup 2 add cPalette exch get 255 div exch dup\r
+1 add cPalette exch get 255 div exch cPalette exch get 255 div setrgbcolor}ifelse}bd\r
+/setup1asciiproc{[ currentfile mystring/readhexstring cvx/pop cvx\r
+] cvx bind}bd/setup1binaryproc{[ currentfile mystring/readstring cvx\r
+/pop cvx ] cvx bind}bd level2{save/dontloadlevel1 xd}if/iw 0 def/ih\r
+0 def/im_save 0 def/setupimageproc 0 def/polarity 0 def/smoothflag\r
+0 def/mystring 0 def/bpc 0 def/beginimage{/im_save save def dup 0 eq{pop\r
+/setup1binaryproc}{1 eq{/setup1asciiproc}{(error, can't use level2 data acquisition procs for level1)print\r
+flush}ifelse}ifelse/setupimageproc exch ld/polarity xd/smoothflag xd\r
+/imat xd/mystring exch string def/bpc xd/ih xd/iw xd}bd/endimage{im_save\r
+restore}bd/1bitbwcopyimage{1 setgray 0 0 moveto 0 1 rlineto 1 0 rlineto\r
+0 -1 rlineto closepath fill 0 setgray iw ih polarity imat setupimageproc\r
+imagemask}bd/1bitcopyimage{setrgbcolor 0 0 moveto 0 1 rlineto 1 0 rlineto\r
+0 -1 rlineto closepath fill setrgbcolor iw ih polarity imat setupimageproc\r
+imagemask}bd/1bitmaskimage{setrgbcolor iw ih polarity [iw 0 0 ih 0\r
+0] setupimageproc imagemask}bd level2{dontloadlevel1 restore}if level2\r
+not{save/dontloadlevel2 xd}if/setup2asciiproc{currentfile/ASCII85Decode\r
+filter/RunLengthDecode filter}bd/setup2binaryproc{currentfile/RunLengthDecode\r
+filter}bd/myimagedict 9 dict dup begin/ImageType 1 def/MultipleDataSource\r
+false def end def/im_save 0 def/setupimageproc 0 def/polarity 0 def\r
+/smoothflag 0 def/mystring 0 def/bpc 0 def/ih 0 def/iw 0 def/beginimage{\r
+/im_save save def dup 2 eq{pop/setup2binaryproc}{dup 3 eq{pop/setup2asciiproc}{0\r
+eq{/setup1binaryproc}{/setup1asciiproc}ifelse}ifelse}ifelse/setupimageproc\r
+exch ld{[ 1 0 ]}{[ 0 1 ]}ifelse/polarity xd/smoothflag xd/imat xd/mystring\r
+exch string def/bpc xd/ih xd/iw xd}bd/endimage{im_save restore}bd/1bitbwcopyimage{1\r
+ssg 0 0 moveto 0 1 rlineto 1 0 rlineto 0 -1 rlineto closepath fill\r
+0 ssg myimagedict dup begin/Width iw def/Height ih def/Decode polarity\r
+def/ImageMatrix imat def/DataSource setupimageproc def/BitsPerComponent\r
+1 def/Interpolate smoothflag def end imagemask}bd/1bitcopyimage{ssc\r
+0 0 moveto 0 1 rlineto 1 0 rlineto 0 -1 rlineto closepath fill ssc\r
+myimagedict dup begin/Width iw def/Height ih def/Decode polarity def\r
+/ImageMatrix imat def/DataSource setupimageproc def/BitsPerComponent\r
+1 def/Interpolate smoothflag def end imagemask}bd/1bitmaskimage{ssc\r
+myimagedict dup begin/Width iw def/Height ih def/Decode polarity def\r
+/ImageMatrix imat def/DataSource setupimageproc def/BitsPerComponent\r
+1 def/Interpolate smoothflag def end imagemask}bd level2 not{dontloadlevel2\r
+restore}if\r
+level2{save/dontloadlevel1 xd}if/startnoload{{/noload save def}if}bd\r
+/endnoload{{noload restore}if}bd/testsystemdict{where{systemdict eq{true}{false}ifelse}{false}ifelse}bd\r
+/ncolors 1 def/colorimage where{pop true}{false}ifelse{/ncolors 0\r
+statusdict begin/processcolors where{pop pop processcolors}{/deviceinfo\r
+where{pop deviceinfo/Colors known{pop{deviceinfo/Colors get}}if}if}ifelse\r
+end def ncolors 0 ne{/colorimage testsystemdict/setcolortransfer testsystemdict\r
+/currentcolortransfer testsystemdict/currentcmykcolor testsystemdict\r
+and and and not{/ncolors 0 def}if}if}if ncolors dup 1 ne exch dup 3\r
+ne exch 4 ne and and{/ncolors 0 def}if ncolors 1 eq dup dup not startnoload{\r
+/expandbw{expandfactor mul round cvi bwclut exch get 255 div}bd/doclutimage{bwclut\r
+colorclut pop/bwclut xd bpc dup 8 eq{pop 255}{4 eq{15}{3}ifelse}ifelse\r
+/expandfactor xd [/expandbw load/exec load dup currenttransfer exch\r
+] cvx bind settransfer iw ih bpc imat setupimageproc image}bd}if not\r
+endnoload ncolors dup 3 eq exch 4 eq or dup dup not startnoload{/nullproc{{}}def\r
+/concatutil{/exec load 7 -1 roll/exec load}bd/defsubclut{1 add getinterval\r
+def}bd/spconcattransfer{/Dclut exch def/Cclut exch def/Bclut exch def\r
+/Aclut exch def/ncompute exch ld currentcolortransfer [{Aclut ncompute}concatutil\r
+] cvx [{Bclut ncompute}concatutil ] cvx [{Cclut ncompute}concatutil\r
+] cvx [{Dclut ncompute}concatutil ] cvx setcolortransfer}bd/setuprgbcluts{\r
+/bit3x rgbclut length 3 sub def/bit1x bit3x 3 idiv def/rclut rgbclut\r
+def/gclut rclut 1 bit3x defsubclut/bclut rclut 2 bit3x defsubclut}bd}if\r
+not endnoload ncolors 3 eq dup dup not startnoload{/3compute{exch bit3x\r
+mul round cvi get 255 div}bd/doclutimage{/rgbclut xd pop setuprgbcluts\r
+/3compute rclut gclut bclut dup spconcattransfer iw ih bpc imat [\r
+setupimageproc/exec load/dup load dup ] cvx nullproc nullproc true\r
+3 colorimage}bd}if not endnoload ncolors 4 eq dup dup not startnoload{\r
+/stuffclut{cmykindex 3 -1 roll put}bd/ftoint{1 exch sub 255 mul round\r
+cvi}bd/4compute{exch bit4x mul round cvi get 255 div}bd/computecmykclut{setuprgbcluts\r
+/bit4x rgbclut length 3 idiv 4 mul 4 sub def/cmykclut bit4x 4 add\r
+string def/cclut cmykclut def/mclut cclut 1 bit4x defsubclut/yclut\r
+cclut 2 bit4x defsubclut/kclut cclut 3 bit4x defsubclut/cmykindex 0\r
+def 0 1 bit1x{dup/cmykindex exch bit1x exch sub 4 mul def 3 mul dup\r
+rclut exch get 255 div exch dup gclut exch get 255 div exch bclut exch\r
+get 255 div setrgbcolor currentcmykcolor ftoint kclut stuffclut ftoint\r
+yclut stuffclut ftoint mclut stuffclut ftoint cclut stuffclut}for}bd\r
+/doclutimage{/rgbclut xd pop invalidcolortable?{computecmykclut}if\r
+/4compute cclut mclut yclut kclut spconcattransfer iw ih bpc imat\r
+[ setupimageproc/exec load/dup load dup dup ] cvx nullproc nullproc\r
+nullproc true 4 colorimage}bd}if not endnoload ncolors 0 eq dup dup\r
+not startnoload{/lookupandstore{3 mul 3 getinterval putinterval exch\r
+3 add exch 3 copy}bd/8lookup/lookupandstore ld/4lookup{/byte 1 index\r
+def -4 bitshift lookupandstore byte 15 and lookupandstore}bd/2lookup{\r
+/byte 1 index def -6 bitshift lookupandstore byte -4 bitshift 3 and\r
+lookupandstore byte -2 bitshift 3 and lookupandstore byte 3 and lookupandstore}bd\r
+/colorexpand{mystringexp 0 rgbclut 3 copy 7 -1 roll/mylookup load\r
+forall pop pop pop pop pop}bd/createexpandstr{/mystringexp exch mystring\r
+length mul string def}bd/doclutimage{/rgbclut xd pop/mylookup bpc 8\r
+eq{3 createexpandstr/8lookup}{bpc 4 eq{6 createexpandstr/4lookup}{12\r
+createexpandstr/2lookup}ifelse}ifelse ld iw ih bpc imat [ setupimageproc\r
+/exec load/colorexpand load/exec load] cvx false 3 colorimage}bd}if\r
+not endnoload/colorimage where{pop true}{false}ifelse dup{/do24image{iw\r
+ih 8 imat setupimageproc false 3 colorimage}bd}if dup dup startnoload\r
+not{/rgbtogray{/str xd/len str length def/smlen len 3 idiv def/rstr\r
+str def/gstr str 1 len 1 sub getinterval def/bstr str 2 len 2 sub getinterval\r
+def str dup 0 1 smlen 1 sub{dup 3 mul rstr 1 index get .3 mul gstr\r
+2 index get .59 mul add bstr 3 -1 roll get .11 mul add round cvi put\r
+dup}for pop 0 smlen getinterval}bd/do24image{iw ih 8 imat [ setupimageproc\r
+/exec load/rgbtogray load/exec load ] cvx bind image}bd}if endnoload\r
+/doimage{iw ih 8 imat setupimageproc image}bd level2{dontloadlevel1\r
+restore}if level2 not{save/dontloadlevel2 xd}if/myappcolorspace/DeviceRGB\r
+def/rgbclut 0 def/doclutimage{/rgbclut xd pop bpc dup 8 eq{pop 255}{4\r
+eq{15}{3}ifelse}ifelse/hival xd [/Indexed myappcolorspace hival rgbclut]\r
+setcolorspace myimagedict dup begin/Width iw def/Height ih def/Decode\r
+[0 hival] def/ImageMatrix imat def/DataSource setupimageproc def/BitsPerComponent\r
+bpc def/Interpolate smoothflag def end image}bd/do24image{myappcolorspace\r
+setcolorspace myimagedict dup begin/Width iw def/Height ih def/Decode\r
+[0 1 0 1 0 1] def/ImageMatrix imat def/DataSource setupimageproc def\r
+/BitsPerComponent 8 def/Interpolate smoothflag def end image}bd level2\r
+not{dontloadlevel2 restore}if\r
+/NumSteps{dtransform matrix defaultmatrix idtransform Pythag currentscreen\r
+pop pop 72 exch div div}bd/FindMinSteps{v_ft 4 eq{urx startX sub abs\r
+llx startX sub abs Max ury startY sub abs lly startY sub abs Max Pythag\r
+2 3.14159265 mul mul 0}{v_ft 2 eq{endY startY sub endX startX sub Pythag\r
+endY2 startY sub endX2 startX sub Pythag gt{endY startY sub endX startX\r
+sub}{endY2 startY sub endX2 startX sub}ifelse}{endY startY sub endX\r
+startX sub}ifelse}ifelse NumSteps}bd/cxe{/v_cxe exch def}bd/cxm{pop\r
+/v_cxm exch def}bd/cxmt{pop pop}bd/cxt{pop}bd/S_eoclip{currentflat{{eoclip}stopped{dup\r
+currentflat exch sub 20 gt{([Error: PathTooComplex; OffendingCommand: eoclip]\n)print\r
+flush exit}{currentflat 2 add setflat}ifelse}{exit}ifelse}loop setflat}bd\r
+/S_clip{currentflat{{clip}stopped{dup currentflat exch sub 20 gt{([Error: PathTooComplex; OffendingCommand: clip]\n)print\r
+flush exit}{currentflat 2 add setflat}ifelse}{exit}ifelse}loop setflat}bd\r
+/S_eofill{currentflat{{eofill}stopped{dup currentflat exch sub 20\r
+gt{([Error: PathTooComplex; OffendingCommand: eofill]\n)print flush\r
+exit}{currentflat 2 add setflat}ifelse}{exit}ifelse}loop setflat}bd\r
+/gpbbx{pathbbox/ury exch def/urx exch def/lly exch def/llx exch def}bd\r
+/lineargfill{initgfill{false initgfx/distance endX startX sub endY\r
+startY sub Pythag def/incD distance Steps div def endY startY sub endX\r
+startX sub atan newpath llx lly urx ury Bx startX startY translate\r
+rotate gpbbx eGy ssg newpath llx lly urx ury Bx S_eofill sGy ssg newpath\r
+llx lly 0 ury Bx S_eofill/fillX 0 def 0 1 Steps 1 sub{stepgfx newpath\r
+fillX lly fillX incD add dup/fillX exch def ury Bx S_eofill pop}for}if}bd\r
+/radialgfill{initgfill{false initgfx/distance endX startX sub endY\r
+startY sub Pythag def/incD distance Steps div def eGy ssg newpath llx\r
+lly urx ury Bx S_eofill/distance 0 def 0 1 Steps 1 sub{stepgfx newpath\r
+startX startY distance 0 360 arc closepath distance incD add dup/distance\r
+exch def 0 rmoveto startX startY distance 0 360 arc closepath S_eofill\r
+pop}for}if}bd/ellipticgfill{initgfill{true initgfx sGy ssg newpath\r
+llx lly urx ury Bx S_eofill [ endX startX sub endY startY sub endX2\r
+startX sub endY2 startY sub startX startY ] concat Steps 1 sub -1 0{stepgfx\r
+/i exch def 0 0 moveto 0 0 i Steps div 0 360 arc fill}for}if}bd/conicalgfill{initgfill{urx\r
+startX sub abs llx startX sub abs Max ury startY sub abs lly startY\r
+sub abs Max Pythag startY endY sub startX endX sub Pythag div/radius\r
+exch def true initgfx [ endX startX sub endY startY sub startY endY\r
+sub endX startX sub startX startY ] concat/slice 180 Steps div def\r
+/startangle 0 def Steps -1 0{pop stepgfx 0 0 moveto 0 0 radius startangle\r
+neg dup slice add arc fill 0 0 moveto 0 0 radius startangle dup slice\r
+add dup/startangle exch def arc fill}for}if}bd/initgfill{gpbbx{S_eoclip}{S_clip}ifelse\r
+startX endX eq startY endY eq and sGy eGy eq or dup{sGy ssg newpath\r
+llx lly urx ury Bx S_eofill}if not}bd/initgfx{/flag exch def flag{sGy\r
+eGy/sGy exch def/eGy exch def}if eGy sGy sub abs 256 mul FindMinSteps\r
+Min 256 Min ceiling 1 Max/Steps exch def eGy sGy sub Steps div/incGy\r
+exch def sGy/mGy exch def}bd/stepgfx{mGy ssg mGy incGy add/mGy exch\r
+def}bd/linearfill{initfill{false initfx endX startX sub endY startY\r
+sub Pythag/distance exch def/incD distance Steps div def endY startY\r
+sub endX startX sub atan newpath llx lly urx ury Bx startX startY translate\r
+rotate gpbbx v_cxe 0 eq{eR eG eB setgfillrgb}{eH eS eV setgfillhsb}ifelse\r
+newpath llx lly urx ury Bx S_eofill v_cxe 0 eq{sR sG sB setgfillrgb}{sH\r
+sS sV setgfillhsb}ifelse newpath llx lly 0 ury Bx S_eofill/fillX 0\r
+def 0 1 Steps 1 sub{stepfx newpath fillX lly fillX incD add dup/fillX\r
+exch def ury Bx S_eofill pop}for}if}bd/radialfill{initfill{false initfx\r
+endX startX sub endY startY sub Pythag/distance exch def/incD distance\r
+Steps div def v_cxe 0 eq{eR eG eB setgfillrgb}{eH eS eV setgfillhsb}ifelse\r
+newpath llx lly urx ury Bx S_eofill/distance 0 def 0 1 Steps 1 sub{stepfx\r
+newpath startX startY distance 0 360 arc closepath distance incD add\r
+dup/distance exch def 0 rmoveto startX startY distance 0 360 arc closepath\r
+S_eofill pop}for}if}bind def/ellipticalfill{initfill{true initfx v_cxe\r
+0 eq{sR sG sB setgfillrgb}{sH sS sV setgfillhsb}ifelse newpath llx\r
+lly urx ury Bx S_eofill [ endX startX sub endY startY sub endX2 startX\r
+sub endY2 startY sub startX startY ] concat Steps 1 sub -1 0{stepfx\r
+/i exch def 0 0 moveto 0 0 i Steps div 0 360 arc fill}for v_cxe 0\r
+eq{sR sG sB eR eG eB/sB exch def/sG exch def/sR exch def/eB exch def\r
+/eG exch def/eR exch def}if}if}bd/conicalfill{initfill{urx startX\r
+sub abs llx startX sub abs Max ury startY sub abs lly startY sub abs\r
+Max Pythag startY endY sub startX endX sub Pythag div/radius exch def\r
+true initfx [ endX startX sub endY startY sub startY endY sub endX\r
+startX sub startX startY ] concat/slice 180 Steps div def/startangle\r
+0 def Steps -1 0{pop stepfx 0 0 moveto 0 0 radius startangle neg dup\r
+slice add arc fill 0 0 moveto 0 0 radius startangle dup slice add dup\r
+/startangle exch def arc fill}for}if}bd/initfill{gpbbx{S_eoclip}{S_clip}ifelse\r
+startX endX eq startY endY eq and v_cxe 2 ne sR eR eq sG eG eq and\r
+sB eB eq and and or dup{sR sG sB setgfillrgb newpath llx lly urx ury\r
+Bx S_eofill}if not}bd/initfx{/flag exch def v_cxe 0 eq{flag{sR sG sB\r
+eR eG eB/sB exch def/sG exch def/sR exch def/eB exch def/eG exch def\r
+/eR exch def}if eR sR sub abs 256 mul eG sG sub abs 256 mul Max eB\r
+sB sub abs 256 mul Max FindMinSteps Min 256 Min ceiling 1 Max/Steps\r
+exch def/incR eR sR sub Steps div def/incG eG sG sub Steps div def\r
+/incB eB sB sub Steps div def sR/mR exch def sG/mG exch def sB/mB\r
+exch def}{sR sG sB rgb2hsb/sV exch def/sS exch def/sH exch def eR eG\r
+eB rgb2hsb/eV exch def/eS exch def/eH exch def eH sH sub abs v_cxe\r
+1 eq{dup 0.5 gt{1 exch sub}if}{dup 0.5 lt{1 exch sub}if}ifelse 256\r
+mul eS sS sub abs 256 mul Max eV sV sub abs 256 mul Max FindMinSteps\r
+Min 256 Min ceiling 1 Max/Steps exch def v_cxe 1 eq{/incH eH sH sub\r
+dup abs 0.5 gt{dup 0 ge{1 sub}{1 add}ifelse}if Steps div def/incS eS\r
+sS sub Steps div def/incV eV sV sub Steps div def}{/incH eH sH sub\r
+dup abs 0.5 le{dup 0 ge{1 sub}{1 add}ifelse}if Steps div def/incS eS\r
+sS sub Steps div def/incV eV sV sub Steps div def}ifelse flag{/sH eH\r
+/eH sH def def/sS eS/eS sS def def/sV eV/eV sV def def/incH incH neg\r
+def/incS incS neg def/incV incV neg def}if}ifelse}bd/stepfx{v_cxe 0\r
+eq{mR mG mB setgfillrgb mR incR add/mR exch def mG incG add/mG exch\r
+def mB incB add/mB exch def}{sH sS sV setgfillhsb sH incH add dup 0\r
+le{1 add}{dup 1 ge{1 sub}if}ifelse/sH exch def sS incS add/sS exch\r
+def sV incV add/sV exch def}ifelse}bd\r
+/ar{}bd/arr{pop pop pop pop pop pop pop}bd/ae{pop pop pop pop pop\r
+pop}bd/aoa{pop}bd/apl{pop}bd/apc{}bd/aof{pop pop}bd/aafs{pop pop pop}bd\r
+/O{pop}bd/R{pop}bd/axop{pop pop pop pop}bd/g{/v_ft 0 def/v_fc 0 def\r
+/v_fm 0 def/v_fy 0 def 1 exch sub/v_fk exch def/v_fct 0 def}bd/G{\r
+/v_sc 0 def/v_sm 0 def/v_sy 0 def 1 exch sub/v_sk exch def/v_sct 0\r
+def}bd/k{/v_fk exch def/v_fy exch def/v_fm exch def/v_fc exch def/v_ft\r
+0 def/v_fct 0 def}bd/K{/v_sk exch def/v_sy exch def/v_sm exch def/v_sc\r
+exch def/v_sct 0 def}bd/Xa{/v_fb exch def/v_fg exch def/v_fr exch def\r
+/v_ft 0 def/v_fct 1 def}bd/XA{/v_sb exch def/v_sg exch def/v_sr exch\r
+def/v_sct 1 def}bd/a_tc{exch pop 1 exch sub dup 3 -1 roll exch div\r
+exch dup 4 -1 roll exch div 3 1 roll dup 5 -1 roll exch div 4 1 roll\r
+5 -1 roll exch div 4 1 roll}bd/x{a_tc k}bd/X{a_tc K}bd/Xx{0 eq{x}{pop\r
+pop Xa}ifelse}bd/XX{0 eq{X}{pop pop XA}ifelse}bd/awr{/v_wr exch def}bd\r
+/w{setlinewidth}bd/j{setlinejoin}bd/J{setlinecap}bd/d{setdash}bd/asc{pop\r
+pop J}bd/aec{pop pop J}bd/csah{pop pop pop}bd/ceah{pop pop pop}bd/cst{pop\r
+pop}bd/cdp{pop}bd/m{moveto}bd/l{lineto}bd/c{curveto}bd/Bx{4 copy 5\r
+1 roll 4 2 roll 5 -1 roll m l l l closepath}bd/Cp{Bx clip newpath}bd\r
+/a_fp{gsave v_wr 0 ne v_ft 0 eq{setfillcolor{eofill}{fill}ifelse}{v_ft\r
+1 eq{linearfill}{v_ft 2 eq{ellipticalfill}{v_ft 3 eq{radialfill}{v_ft\r
+4 eq{conicalfill}{v_ft 8 eq{lineargfill}{v_ft 9 eq{ellipticgfill}{v_ft\r
+10 eq{radialgfill}{conicalgfill}ifelse}ifelse}ifelse}ifelse}ifelse}ifelse}ifelse}ifelse\r
+grestore}bd/*u{/p_count p_count 1 add def}bd/*U{/p_count p_count 1\r
+sub def p_count 0 eq{vis_flag{p_render}{newpath}ifelse}if}bd/B{/p_render{a_fp\r
+setstrokecolor stroke}bd p_count 0 eq{vis_flag{p_render}{newpath}ifelse}if}bd\r
+/b{closepath B}bd/F{/p_render{a_fp newpath}bd p_count 0 eq{vis_flag{p_render}{newpath}ifelse}if}bd\r
+/f{closepath F}bd/S{/p_render{setstrokecolor stroke}bd p_count 0 eq{vis_flag{p_render}{newpath}ifelse}if}bd\r
+/s{closepath S}bd/H{/p_render{newpath}bd p_count 0 eq{vis_flag{p_render}{newpath}ifelse}if}bd\r
+/h{closepath H}bd/N{H}bd/n{h}bd/cag{dup 7 add/v_ft exch def dup 2\r
+eq{pop/endY2 exch def/endX2 exch def}{7 eq{pop pop/v_ft 8 def}if}ifelse\r
+/endY exch def/endX exch def/startY exch def/startX exch def/eGy exch\r
+def/sGy exch def}bd/caz{dup/v_ft exch def dup 2 eq{pop/endY2 exch def\r
+/endX2 exch def}{7 eq{pop pop/v_ft 1 def}if}ifelse/endY exch def/endX\r
+exch def/startY exch def/startX exch def/eB exch def/eG exch def/eR\r
+exch def/sB exch def/sG exch def/sR exch def}bd/cax{dup/v_ft exch def\r
+dup 2 eq{pop/endY2 exch def/endX2 exch def}{7 eq{pop pop/v_ft 1 def}if}ifelse\r
+/endY exch def/endX exch def/startY exch def/startX exch def pop pop\r
+8 3 roll pop pop/sB exch def/sG exch def/sR exch def/eB exch def/eG\r
+exch def/eR exch def}bd/axm{/endY exch def/endX exch def/startY exch\r
+def/startX exch def}bd/alyr{pop pop 1 eq{true}{false}ifelse/vis_flag\r
+exch def pop pop}bd\r
+/t{moveto show}bd/ts{moveto false charpath S}bd/tf{moveto true charpath\r
+F}bd/tb{3 copy moveto true charpath F moveto false charpath S}bd/selectfont\r
+where{pop}{/selectfont{dup type/integertype eq{exch findfont exch scalefont\r
+setfont}{exch findfont exch makefont setfont}ifelse}bd}ifelse/sf{selectfont}bd\r
+/u{}bd/U{}bd/anu{pop}bd\r
+end\r
+%%EndResource\r
+%%EndProlog\r
+%%BeginSetup\r
+save XaraStudio1Dict begin\r
+%%EndSetup\r
+0 cxe\r
+2 0 cxm\r
+1 awr\r
+0.00 0.00 0.00 XA\r
+0.250 w\r
+0 j\r
+[ ] 0 d\r
+0 J\r
+0.00 0.00 0.00 (Black) 0 1 Xx\r
+349.368 322.149 m\r
+351.024 320.493 351.024 317.805 349.368 316.149 c\r
+347.712 314.493 345.024 314.493 343.368 316.149 c\r
+341.712 317.805 341.712 320.493 343.368 322.149 c\r
+345.024 323.805 347.712 323.805 349.368 322.149 c\r
+b\r
+2 j\r
+346.017 318.750 m\r
+273.267 319.500 l\r
+S\r
+0 j\r
+347.870 285.131 m\r
+349.526 283.475 349.526 280.787 347.870 279.131 c\r
+346.214 277.475 343.526 277.475 341.870 279.131 c\r
+340.214 280.787 340.214 283.475 341.870 285.131 c\r
+343.526 286.787 346.214 286.787 347.870 285.131 c\r
+b\r
+2 j\r
+344.519 281.732 m\r
+271.769 282.482 l\r
+S\r
+0 j\r
+347.870 246.881 m\r
+349.526 245.225 349.526 242.537 347.870 240.881 c\r
+346.214 239.225 343.526 239.225 341.870 240.881 c\r
+340.214 242.537 340.214 245.225 341.870 246.881 c\r
+343.526 248.537 346.214 248.537 347.870 246.881 c\r
+b\r
+2 j\r
+344.519 243.482 m\r
+271.769 244.232 l\r
+S\r
+0 j\r
+348.398 209.870 m\r
+350.054 208.214 350.054 205.526 348.398 203.870 c\r
+346.742 202.214 344.054 202.214 342.398 203.870 c\r
+340.742 205.526 340.742 208.214 342.398 209.870 c\r
+344.054 211.526 346.742 211.526 348.398 209.870 c\r
+b\r
+2 j\r
+345.047 206.471 m\r
+272.297 207.221 l\r
+S\r
+0 j\r
+347.120 135.620 m\r
+348.776 133.964 348.776 131.276 347.120 129.620 c\r
+345.464 127.964 342.776 127.964 341.120 129.620 c\r
+339.464 131.276 339.464 133.964 341.120 135.620 c\r
+342.776 137.276 345.464 137.276 347.120 135.620 c\r
+b\r
+2 j\r
+343.769 132.221 m\r
+271.019 132.971 l\r
+S\r
+0 j\r
+349.370 98.120 m\r
+351.026 96.464 351.026 93.776 349.370 92.120 c\r
+347.714 90.464 345.026 90.464 343.370 92.120 c\r
+341.714 93.776 341.714 96.464 343.370 98.120 c\r
+345.026 99.776 347.714 99.776 349.370 98.120 c\r
+b\r
+2 j\r
+346.019 94.721 m\r
+273.269 95.471 l\r
+S\r
+0 j\r
+347.648 59.381 m\r
+349.304 57.725 349.304 55.037 347.648 53.381 c\r
+345.992 51.725 343.304 51.725 341.648 53.381 c\r
+339.992 55.037 339.992 57.725 341.648 59.381 c\r
+343.304 61.037 345.992 61.037 347.648 59.381 c\r
+b\r
+2 j\r
+344.297 55.982 m\r
+271.547 56.732 l\r
+S\r
+0 j\r
+348.398 172.370 m\r
+350.054 170.714 350.054 168.026 348.398 166.370 c\r
+346.742 164.714 344.054 164.714 342.398 166.370 c\r
+340.742 168.026 340.742 170.714 342.398 172.370 c\r
+344.054 174.026 346.742 174.026 348.398 172.370 c\r
+b\r
+2 j\r
+345.047 168.971 m\r
+272.297 169.721 l\r
+S\r
+346.017 318.750 m\r
+272.517 170.250 l\r
+S\r
+343.767 281.250 m\r
+272.517 132.750 l\r
+S\r
+343.767 243 m\r
+271.767 96 l\r
+S\r
+343.767 206.250 m\r
+272.517 57.750 l\r
+S\r
+346.017 169.500 m\r
+271.767 320.250 l\r
+S\r
+344.517 133.500 m\r
+272.517 282 l\r
+S\r
+346.767 96 m\r
+271.767 243 l\r
+S\r
+343.767 57.750 m\r
+271.017 207.750 l\r
+S\r
+0 j\r
+1.00 0.00 0.00 (Red) 0 1 Xx\r
+272.651 321.612 m\r
+273.893 321.612 274.902 320.436 274.902 318.987 c\r
+274.902 317.538 273.893 316.362 272.651 316.362 c\r
+271.409 316.362 270.400 317.538 270.400 318.987 c\r
+270.400 320.436 271.409 321.612 272.651 321.612 c\r
+b\r
+272.384 284.862 m\r
+273.626 284.862 274.635 283.686 274.635 282.237 c\r
+274.635 280.788 273.626 279.612 272.384 279.612 c\r
+271.142 279.612 270.133 280.788 270.133 282.237 c\r
+270.133 283.686 271.142 284.862 272.384 284.862 c\r
+b\r
+271.634 246.612 m\r
+272.876 246.612 273.885 245.436 273.885 243.987 c\r
+273.885 242.538 272.876 241.362 271.634 241.362 c\r
+270.392 241.362 269.383 242.538 269.383 243.987 c\r
+269.383 245.436 270.392 246.612 271.634 246.612 c\r
+b\r
+271.901 209.112 m\r
+273.143 209.112 274.152 207.936 274.152 206.487 c\r
+274.152 205.038 273.143 203.862 271.901 203.862 c\r
+270.659 203.862 269.650 205.038 269.650 206.487 c\r
+269.650 207.936 270.659 209.112 271.901 209.112 c\r
+b\r
+271.634 172.362 m\r
+272.876 172.362 273.885 171.186 273.885 169.737 c\r
+273.885 168.288 272.876 167.112 271.634 167.112 c\r
+270.392 167.112 269.383 168.288 269.383 169.737 c\r
+269.383 171.186 270.392 172.362 271.634 172.362 c\r
+b\r
+271.901 134.389 m\r
+273.143 134.389 274.152 133.213 274.152 131.764 c\r
+274.152 130.315 273.143 129.139 271.901 129.139 c\r
+270.659 129.139 269.650 130.315 269.650 131.764 c\r
+269.650 133.213 270.659 134.389 271.901 134.389 c\r
+b\r
+270.884 98.389 m\r
+272.126 98.389 273.135 97.213 273.135 95.764 c\r
+273.135 94.315 272.126 93.139 270.884 93.139 c\r
+269.642 93.139 268.633 94.315 268.633 95.764 c\r
+268.633 97.213 269.642 98.389 270.884 98.389 c\r
+b\r
+273.401 60.139 m\r
+274.643 60.139 275.652 58.963 275.652 57.514 c\r
+275.652 56.065 274.643 54.889 273.401 54.889 c\r
+272.159 54.889 271.150 56.065 271.150 57.514 c\r
+271.150 58.963 272.159 60.139 273.401 60.139 c\r
+b\r
+2 j\r
+0.00 0.00 0.00 (Black) 0 1 Xx\r
+/Times-Roman 14 sf (y) 352.380 316.237 t /Times-Roman 7 sf (0) 360.665 314.838 t ( ) 365.119 320.856 t\r
+/Times-Roman 14 sf (=) 367.344 316.237 t (s) 379.074 316.237 t /Times-Roman 7 sf (0) 386.368 314.838 t\r
+/Times-Roman 14 sf ( ) 390.822 316.237 t (+) 395.272 316.237 t ( ) 407.002 316.237 t (w) 411.452 316.237\r
+t /Times-Roman 7 sf (0) 422.902 320.856 t /Times-Roman 14 sf (*) 427.356 316.237 t (l) 434.356 316.237\r
+t /Times-Roman 7 sf (0) 438.245 314.838 t /Times-Roman 14 sf (y) 352.070 279.487 t /Times-Roman 7 sf (1)\r
+360.355 278.088 t ( ) 364.809 284.106 t /Times-Roman 14 sf (=) 367.034 279.487 t (s) 378.764 279.487 t\r
+/Times-Roman 7 sf (1) 386.058 278.088 t /Times-Roman 14 sf ( ) 390.512 279.487 t (+) 394.962 279.487 t\r
+( ) 406.692 279.487 t (w) 411.142 279.487 t /Times-Roman 7 sf (1) 422.592 284.106 t /Times-Roman 14 sf\r
+(*) 427.046 279.487 t (l) 434.046 279.487 t /Times-Roman 7 sf (1) 437.935 278.088 t /Times-Roman 14 sf\r
+(y) 354.116 241.237 t /Times-Roman 7 sf (2) 362.401 239.838 t ( ) 366.855 239.838 t /Times-Roman 14 sf\r
+(=) 369.080 241.237 t (s) 380.810 241.237 t /Times-Roman 7 sf (2) 388.104 239.838 t /Times-Roman 14 sf\r
+( ) 392.558 241.237 t (+) 397.008 241.237 t ( ) 408.738 241.237 t (w) 413.188 241.237 t /Times-Roman 7\r
+sf (2) 424.638 245.856 t /Times-Roman 14 sf (*) 429.092 241.237 t (l) 436.092 241.237 t /Times-Roman 7\r
+sf (2) 439.981 239.838 t /Times-Roman 14 sf (y) 354.320 202.237 t /Times-Roman 7 sf (3) 362.605 200.838\r
+t ( ) 367.059 206.856 t /Times-Roman 14 sf (=) 369.284 202.237 t (s) 381.014 202.237 t /Times-Roman 7\r
+sf (3) 388.308 200.838 t /Times-Roman 14 sf ( ) 392.762 202.237 t (+) 397.212 202.237 t ( ) 408.942 202.237\r
+t (w) 413.392 202.237 t /Times-Roman 7 sf (3) 424.842 206.856 t /Times-Roman 14 sf (*) 429.296 202.237\r
+t (l) 436.296 202.237 t /Times-Roman 7 sf (3) 440.185 200.838 t /Times-Roman 14 sf (y) 356.058 168.037\r
+t /Times-Roman 7 sf (4) 364.343 166.638 t ( ) 368.797 172.656 t /Times-Roman 14 sf (=) 371.022 168.037\r
+t (s) 382.752 168.037 t /Times-Roman 7 sf (0) 390.046 166.638 t /Times-Roman 14 sf ( ) 394.500 168.037\r
+t (-) 398.950 168.037 t ( ) 404.002 168.037 t (w) 408.452 168.037 t /Times-Roman 7 sf (0) 419.902 172.656\r
+t /Times-Roman 14 sf (*) 424.356 168.037 t (l) 431.356 168.037 t /Times-Roman 7 sf (0) 435.245 166.638\r
+t /Times-Roman 14 sf (y) 355.490 130.537 t /Times-Roman 7 sf (5) 363.775 129.138 t ( ) 368.229 135.156\r
+t /Times-Roman 14 sf (=) 370.454 130.537 t (s) 382.184 130.537 t /Times-Roman 7 sf (1) 389.478 129.138\r
+t /Times-Roman 14 sf ( ) 393.932 130.537 t (-) 398.382 130.537 t ( ) 403.434 130.537 t (w) 407.884 130.537\r
+t /Times-Roman 7 sf (1) 419.334 135.156 t /Times-Roman 14 sf (*) 423.788 130.537 t (l) 430.788 130.537\r
+t /Times-Roman 7 sf (1) 434.677 129.138 t /Times-Roman 14 sf (y) 355.820 92.287 t /Times-Roman 7 sf (6)\r
+364.105 90.888 t ( ) 368.559 96.906 t /Times-Roman 14 sf (=) 370.784 92.287 t (s) 382.514 92.287 t /Times-Roman\r
+7 sf (2) 389.808 90.888 t /Times-Roman 14 sf ( ) 394.262 92.287 t (-) 399.712 92.287 t ( ) 407.442 92.287\r
+t (w) 411.892 92.287 t /Times-Roman 7 sf (2) 423.342 96.906 t /Times-Roman 14 sf (*) 427.796 92.287 t\r
+(l) 434.796 92.287 t /Times-Roman 7 sf (2) 438.685 90.888 t /Times-Roman 14 sf (y) 356.570 54.037 t /Times-Roman\r
+7 sf (7) 364.855 52.638 t ( ) 369.309 58.656 t /Times-Roman 14 sf (=) 371.534 54.037 t (s) 383.264 54.037\r
+t /Times-Roman 7 sf (3) 390.558 52.638 t /Times-Roman 14 sf ( ) 395.012 54.037 t (-) 401.462 54.037 t\r
+( ) 408.192 54.037 t (w) 412.642 54.037 t /Times-Roman 7 sf (3) 424.092 58.656 t /Times-Roman 14 sf (*)\r
+428.546 54.037 t (l) 435.546 54.037 t /Times-Roman 7 sf (3) 439.435 52.638 t 0 j\r
+232.851 321.881 m\r
+234.507 320.225 234.507 317.537 232.851 315.881 c\r
+231.195 314.225 228.507 314.225 226.851 315.881 c\r
+225.195 317.537 225.195 320.225 226.851 321.881 c\r
+228.507 323.537 231.195 323.537 232.851 321.881 c\r
+b\r
+2 j\r
+229.500 318.482 m\r
+156.750 319.232 l\r
+S\r
+0 j\r
+1.00 0.00 0.00 (Red) 0 1 Xx\r
+156.134 321.344 m\r
+157.376 321.344 158.385 320.168 158.385 318.719 c\r
+158.385 317.270 157.376 316.094 156.134 316.094 c\r
+154.892 316.094 153.883 317.270 153.883 318.719 c\r
+153.883 320.168 154.892 321.344 156.134 321.344 c\r
+b\r
+0.00 0.00 0.00 (Black) 0 1 Xx\r
+233.601 285.881 m\r
+235.257 284.225 235.257 281.537 233.601 279.881 c\r
+231.945 278.225 229.257 278.225 227.601 279.881 c\r
+225.945 281.537 225.945 284.225 227.601 285.881 c\r
+229.257 287.537 231.945 287.537 233.601 285.881 c\r
+b\r
+2 j\r
+230.250 282.482 m\r
+157.500 283.232 l\r
+S\r
+0 j\r
+1.00 0.00 0.00 (Red) 0 1 Xx\r
+156.884 285.344 m\r
+158.126 285.344 159.135 284.168 159.135 282.719 c\r
+159.135 281.270 158.126 280.094 156.884 280.094 c\r
+155.642 280.094 154.633 281.270 154.633 282.719 c\r
+154.633 284.168 155.642 285.344 156.884 285.344 c\r
+b\r
+0.00 0.00 0.00 (Black) 0 1 Xx\r
+234.351 247.631 m\r
+236.007 245.975 236.007 243.287 234.351 241.631 c\r
+232.695 239.975 230.007 239.975 228.351 241.631 c\r
+226.695 243.287 226.695 245.975 228.351 247.631 c\r
+230.007 249.287 232.695 249.287 234.351 247.631 c\r
+b\r
+2 j\r
+231 244.232 m\r
+158.250 244.982 l\r
+S\r
+0 j\r
+1.00 0.00 0.00 (Red) 0 1 Xx\r
+157.634 247.094 m\r
+158.876 247.094 159.885 245.918 159.885 244.469 c\r
+159.885 243.020 158.876 241.844 157.634 241.844 c\r
+156.392 241.844 155.383 243.020 155.383 244.469 c\r
+155.383 245.918 156.392 247.094 157.634 247.094 c\r
+b\r
+0.00 0.00 0.00 (Black) 0 1 Xx\r
+233.601 211.370 m\r
+235.257 209.714 235.257 207.026 233.601 205.370 c\r
+231.945 203.714 229.257 203.714 227.601 205.370 c\r
+225.945 207.026 225.945 209.714 227.601 211.370 c\r
+229.257 213.026 231.945 213.026 233.601 211.370 c\r
+b\r
+2 j\r
+230.250 207.971 m\r
+157.500 208.721 l\r
+S\r
+0 j\r
+1.00 0.00 0.00 (Red) 0 1 Xx\r
+156.884 210.833 m\r
+158.126 210.833 159.135 209.657 159.135 208.208 c\r
+159.135 206.759 158.126 205.583 156.884 205.583 c\r
+155.642 205.583 154.633 206.759 154.633 208.208 c\r
+154.633 209.657 155.642 210.833 156.884 210.833 c\r
+b\r
+0.00 0.00 0.00 (Black) 0 1 Xx\r
+232.851 173.381 m\r
+234.507 171.725 234.507 169.037 232.851 167.381 c\r
+231.195 165.725 228.507 165.725 226.851 167.381 c\r
+225.195 169.037 225.195 171.725 226.851 173.381 c\r
+228.507 175.037 231.195 175.037 232.851 173.381 c\r
+b\r
+2 j\r
+229.500 169.982 m\r
+156.750 170.732 l\r
+S\r
+0 j\r
+1.00 0.00 0.00 (Red) 0 1 Xx\r
+156.134 172.844 m\r
+157.376 172.844 158.385 171.668 158.385 170.219 c\r
+158.385 168.770 157.376 167.594 156.134 167.594 c\r
+154.892 167.594 153.883 168.770 153.883 170.219 c\r
+153.883 171.668 154.892 172.844 156.134 172.844 c\r
+b\r
+0.00 0.00 0.00 (Black) 0 1 Xx\r
+234.351 135.881 m\r
+236.007 134.225 236.007 131.537 234.351 129.881 c\r
+232.695 128.225 230.007 128.225 228.351 129.881 c\r
+226.695 131.537 226.695 134.225 228.351 135.881 c\r
+230.007 137.537 232.695 137.537 234.351 135.881 c\r
+b\r
+2 j\r
+231 132.482 m\r
+158.250 133.232 l\r
+S\r
+0 j\r
+1.00 0.00 0.00 (Red) 0 1 Xx\r
+157.634 135.344 m\r
+158.876 135.344 159.885 134.168 159.885 132.719 c\r
+159.885 131.270 158.876 130.094 157.634 130.094 c\r
+156.392 130.094 155.383 131.270 155.383 132.719 c\r
+155.383 134.168 156.392 135.344 157.634 135.344 c\r
+b\r
+0.00 0.00 0.00 (Black) 0 1 Xx\r
+233.071 98.381 m\r
+234.727 96.725 234.727 94.037 233.071 92.381 c\r
+231.415 90.725 228.727 90.725 227.071 92.381 c\r
+225.415 94.037 225.415 96.725 227.071 98.381 c\r
+228.727 100.037 231.415 100.037 233.071 98.381 c\r
+b\r
+2 j\r
+229.720 94.982 m\r
+156.970 95.732 l\r
+S\r
+0 j\r
+1.00 0.00 0.00 (Red) 0 1 Xx\r
+156.354 97.844 m\r
+157.596 97.844 158.605 96.668 158.605 95.219 c\r
+158.605 93.770 157.596 92.594 156.354 92.594 c\r
+155.112 92.594 154.103 93.770 154.103 95.219 c\r
+154.103 96.668 155.112 97.844 156.354 97.844 c\r
+b\r
+0.00 0.00 0.00 (Black) 0 1 Xx\r
+233.601 59.870 m\r
+235.257 58.214 235.257 55.526 233.601 53.870 c\r
+231.945 52.214 229.257 52.214 227.601 53.870 c\r
+225.945 55.526 225.945 58.214 227.601 59.870 c\r
+229.257 61.526 231.945 61.526 233.601 59.870 c\r
+b\r
+2 j\r
+230.250 56.471 m\r
+157.500 57.221 l\r
+S\r
+0 j\r
+1.00 0.00 0.00 (Red) 0 1 Xx\r
+156.884 59.333 m\r
+158.126 59.333 159.135 58.157 159.135 56.708 c\r
+159.135 55.259 158.126 54.083 156.884 54.083 c\r
+155.642 54.083 154.633 55.259 154.633 56.708 c\r
+154.633 58.157 155.642 59.333 156.884 59.333 c\r
+b\r
+0.00 0.00 0.00 (Black) 0 1 Xx\r
+120.881 321.881 m\r
+122.537 320.225 122.537 317.537 120.881 315.881 c\r
+119.225 314.225 116.537 314.225 114.881 315.881 c\r
+113.225 317.537 113.225 320.225 114.881 321.881 c\r
+116.537 323.537 119.225 323.537 120.881 321.881 c\r
+b\r
+2 j\r
+117.530 318.482 m\r
+44.780 319.232 l\r
+S\r
+0 j\r
+1.00 0.00 0.00 (Red) 0 1 Xx\r
+44.164 321.344 m\r
+45.406 321.344 46.415 320.168 46.415 318.719 c\r
+46.415 317.270 45.406 316.094 44.164 316.094 c\r
+42.922 316.094 41.913 317.270 41.913 318.719 c\r
+41.913 320.168 42.922 321.344 44.164 321.344 c\r
+b\r
+0.00 0.00 0.00 (Black) 0 1 Xx\r
+120.351 285.131 m\r
+122.007 283.475 122.007 280.787 120.351 279.131 c\r
+118.695 277.475 116.007 277.475 114.351 279.131 c\r
+112.695 280.787 112.695 283.475 114.351 285.131 c\r
+116.007 286.787 118.695 286.787 120.351 285.131 c\r
+b\r
+2 j\r
+117 281.732 m\r
+44.250 282.482 l\r
+S\r
+0 j\r
+1.00 0.00 0.00 (Red) 0 1 Xx\r
+43.634 284.594 m\r
+44.876 284.594 45.885 283.418 45.885 281.969 c\r
+45.885 280.520 44.876 279.344 43.634 279.344 c\r
+42.392 279.344 41.383 280.520 41.383 281.969 c\r
+41.383 283.418 42.392 284.594 43.634 284.594 c\r
+b\r
+0.00 0.00 0.00 (Black) 0 1 Xx\r
+120.131 246.131 m\r
+121.787 244.475 121.787 241.787 120.131 240.131 c\r
+118.475 238.475 115.787 238.475 114.131 240.131 c\r
+112.475 241.787 112.475 244.475 114.131 246.131 c\r
+115.787 247.787 118.475 247.787 120.131 246.131 c\r
+b\r
+2 j\r
+116.780 242.732 m\r
+44.030 243.482 l\r
+S\r
+0 j\r
+1.00 0.00 0.00 (Red) 0 1 Xx\r
+43.414 245.594 m\r
+44.656 245.594 45.665 244.418 45.665 242.969 c\r
+45.665 241.520 44.656 240.344 43.414 240.344 c\r
+42.172 240.344 41.163 241.520 41.163 242.969 c\r
+41.163 244.418 42.172 245.594 43.414 245.594 c\r
+b\r
+0.00 0.00 0.00 (Black) 0 1 Xx\r
+119.601 209.870 m\r
+121.257 208.214 121.257 205.526 119.601 203.870 c\r
+117.945 202.214 115.257 202.214 113.601 203.870 c\r
+111.945 205.526 111.945 208.214 113.601 209.870 c\r
+115.257 211.526 117.945 211.526 119.601 209.870 c\r
+b\r
+2 j\r
+116.250 206.471 m\r
+43.500 207.221 l\r
+S\r
+0 j\r
+1.00 0.00 0.00 (Red) 0 1 Xx\r
+42.884 209.333 m\r
+44.126 209.333 45.135 208.157 45.135 206.708 c\r
+45.135 205.259 44.126 204.083 42.884 204.083 c\r
+41.642 204.083 40.633 205.259 40.633 206.708 c\r
+40.633 208.157 41.642 209.333 42.884 209.333 c\r
+b\r
+0.00 0.00 0.00 (Black) 0 1 Xx\r
+120.351 172.631 m\r
+122.007 170.975 122.007 168.287 120.351 166.631 c\r
+118.695 164.975 116.007 164.975 114.351 166.631 c\r
+112.695 168.287 112.695 170.975 114.351 172.631 c\r
+116.007 174.287 118.695 174.287 120.351 172.631 c\r
+b\r
+2 j\r
+117 169.232 m\r
+44.250 169.982 l\r
+S\r
+0 j\r
+1.00 0.00 0.00 (Red) 0 1 Xx\r
+43.634 172.094 m\r
+44.876 172.094 45.885 170.918 45.885 169.469 c\r
+45.885 168.020 44.876 166.844 43.634 166.844 c\r
+42.392 166.844 41.383 168.020 41.383 169.469 c\r
+41.383 170.918 42.392 172.094 43.634 172.094 c\r
+b\r
+0.00 0.00 0.00 (Black) 0 1 Xx\r
+121.101 135.131 m\r
+122.757 133.475 122.757 130.787 121.101 129.131 c\r
+119.445 127.475 116.757 127.475 115.101 129.131 c\r
+113.445 130.787 113.445 133.475 115.101 135.131 c\r
+116.757 136.787 119.445 136.787 121.101 135.131 c\r
+b\r
+2 j\r
+117.750 131.732 m\r
+45 132.482 l\r
+S\r
+0 j\r
+1.00 0.00 0.00 (Red) 0 1 Xx\r
+44.384 134.594 m\r
+45.626 134.594 46.635 133.418 46.635 131.969 c\r
+46.635 130.520 45.626 129.344 44.384 129.344 c\r
+43.142 129.344 42.133 130.520 42.133 131.969 c\r
+42.133 133.418 43.142 134.594 44.384 134.594 c\r
+b\r
+0.00 0.00 0.00 (Black) 0 1 Xx\r
+120.881 98.381 m\r
+122.537 96.725 122.537 94.037 120.881 92.381 c\r
+119.225 90.725 116.537 90.725 114.881 92.381 c\r
+113.225 94.037 113.225 96.725 114.881 98.381 c\r
+116.537 100.037 119.225 100.037 120.881 98.381 c\r
+b\r
+2 j\r
+117.530 94.982 m\r
+44.780 95.732 l\r
+S\r
+0 j\r
+1.00 0.00 0.00 (Red) 0 1 Xx\r
+44.164 97.844 m\r
+45.406 97.844 46.415 96.668 46.415 95.219 c\r
+46.415 93.770 45.406 92.594 44.164 92.594 c\r
+42.922 92.594 41.913 93.770 41.913 95.219 c\r
+41.913 96.668 42.922 97.844 44.164 97.844 c\r
+b\r
+0.00 0.00 0.00 (Black) 0 1 Xx\r
+122.381 60.131 m\r
+124.037 58.475 124.037 55.787 122.381 54.131 c\r
+120.725 52.475 118.037 52.475 116.381 54.131 c\r
+114.725 55.787 114.725 58.475 116.381 60.131 c\r
+118.037 61.787 120.725 61.787 122.381 60.131 c\r
+b\r
+2 j\r
+119.030 56.732 m\r
+46.280 57.482 l\r
+S\r
+0 j\r
+1.00 0.00 0.00 (Red) 0 1 Xx\r
+45.664 59.594 m\r
+46.906 59.594 47.915 58.418 47.915 56.969 c\r
+47.915 55.520 46.906 54.344 45.664 54.344 c\r
+44.422 54.344 43.413 55.520 43.413 56.969 c\r
+43.413 58.418 44.422 59.594 45.664 59.594 c\r
+b\r
+2 j\r
+230.250 319.500 m\r
+157.500 245.250 l\r
+S\r
+229.500 282.750 m\r
+156 208.500 l\r
+S\r
+231 243.750 m\r
+155.250 318.750 l\r
+S\r
+231 208.500 m\r
+159.750 283.500 l\r
+S\r
+231 96.750 m\r
+156 170.250 l\r
+S\r
+228.750 168 m\r
+155.250 94.500 l\r
+S\r
+231 132.750 m\r
+157.500 57.750 l\r
+S\r
+229.500 57 m\r
+157.500 132.750 l\r
+S\r
+118.500 318.750 m\r
+44.250 282 l\r
+S\r
+117.750 282 m\r
+43.500 319.500 l\r
+S\r
+116.250 242.250 m\r
+42.750 206.250 l\r
+S\r
+117 207.750 m\r
+44.250 244.500 l\r
+S\r
+116.250 171 m\r
+43.500 132.750 l\r
+S\r
+117.750 132.750 m\r
+44.250 168.750 l\r
+S\r
+117.750 95.250 m\r
+45.750 57.750 l\r
+S\r
+118.500 57 m\r
+44.250 95.250 l\r
+S\r
+0.00 0.00 0.00 (Black) 0 1 Xx\r
+/Times-Roman 16 sf (+) 235.642 331.309 t (w) 249.048 331.309 t /Times-Roman 8 sf (2) 262.134 336.588 t\r
+(*) 267.224 336.588 t (0) 271.224 336.588 t /Times-Roman 16 sf (+) 231.182 296.809 t (w) 244.588 296.809\r
+t /Times-Roman 8 sf (2) 257.674 302.088 t (*) 262.764 302.088 t (1) 266.764 302.088 t /Times-Roman 16\r
+sf (-) 234.192 260.809 t (w) 239.965 260.809 t /Times-Roman 8 sf (2) 253.051 266.088 t (*) 258.141 266.088\r
+t (0) 262.141 266.088 t /Times-Roman 16 sf (-) 233.442 220.625 t (w) 239.215 220.625 t /Times-Roman 8\r
+sf (2) 252.301 225.904 t (*) 257.391 225.904 t (1) 261.391 225.904 t /Times-Roman 16 sf (+) 231 183.875\r
+t (w) 244.406 183.875 t /Times-Roman 8 sf (2) 257.492 189.154 t (*) 262.582 189.154 t (0) 266.582 189.154\r
+t /Times-Roman 16 sf (+) 230.432 146.809 t (w) 243.838 146.809 t /Times-Roman 8 sf (2) 256.924 152.088\r
+t (*) 262.014 152.088 t (1) 266.014 152.088 t /Times-Roman 16 sf (-) 231.942 110.059 t (w) 237.715 110.059\r
+t /Times-Roman 8 sf (2) 250.801 115.338 t (*) 255.891 115.338 t (0) 259.891 115.338 t /Times-Roman 16\r
+sf (-) 235.610 69.559 t (w) 241.383 69.559 t /Times-Roman 8 sf (2) 254.469 74.838 t (*) 259.559 74.838\r
+t (1) 263.559 74.838 t /Times-Roman 16 sf (+) 116.601 332.649 t (w) 130.007 332.649 t /Times-Roman 8 sf\r
+(4) 143.093 337.928 t (*) 148.183 337.928 t (0) 152.183 337.928 t /Times-Roman 16 sf (-) 119.601 297.399\r
+t (w) 125.374 297.399 t /Times-Roman 8 sf (4) 138.460 302.678 t (*) 143.550 302.678 t (0) 147.550 302.678\r
+t /Times-Roman 16 sf (+) 115.946 260.592 t (w) 129.352 260.592 t /Times-Roman 8 sf (4) 142.438 265.871\r
+t (*) 147.528 265.871 t (0) 151.528 265.871 t /Times-Roman 16 sf (+) 115.196 185.592 t (w) 128.602 185.592\r
+t /Times-Roman 8 sf (4) 141.688 190.871 t (*) 146.778 190.871 t (0) 150.778 190.871 t /Times-Roman 16\r
+sf (+) 114.446 111.342 t (w) 127.852 111.342 t /Times-Roman 8 sf (4) 140.938 116.621 t (*) 146.028 116.621\r
+t (0) 150.028 116.621 t /Times-Roman 16 sf (-) 118.185 223.842 t (w) 123.958 223.842 t /Times-Roman 8\r
+sf (4) 137.044 229.121 t (*) 142.134 229.121 t (0) 146.134 229.121 t /Times-Roman 16 sf (-) 118.935 149.592\r
+t (w) 124.708 149.592 t /Times-Roman 8 sf (4) 137.794 154.871 t (*) 142.884 154.871 t (0) 146.884 154.871\r
+t /Times-Roman 16 sf (-) 118.935 76.092 t (w) 124.708 76.092 t /Times-Roman 8 sf (4) 137.794 81.371 t\r
+(*) 142.884 81.371 t (0) 146.884 81.371 t 1.00 0.00 0.00 (Red) 0 1 Xx\r
+271.851 319.149 m\r
+229.851 318.399 l\r
+S\r
+271.851 281.649 m\r
+232.101 282.399 l\r
+S\r
+271.101 243.399 m\r
+230.601 244.149 l\r
+S\r
+271.851 205.899 m\r
+231.351 206.649 l\r
+S\r
+271.851 169.899 m\r
+229.851 171.399 l\r
+S\r
+271.851 132.399 m\r
+231.351 133.149 l\r
+S\r
+271.851 95.649 m\r
+229.851 94.899 l\r
+S\r
+230.601 55.149 m\r
+273.351 57.399 l\r
+S\r
+156.351 318.399 m\r
+119.601 318.399 l\r
+S\r
+157.101 281.649 m\r
+116.601 281.649 l\r
+S\r
+157.851 243.399 m\r
+116.601 242.649 l\r
+S\r
+157.101 208.149 m\r
+116.601 206.649 l\r
+S\r
+156.351 170.649 m\r
+118.101 169.149 l\r
+S\r
+157.851 133.899 m\r
+118.101 134.649 l\r
+S\r
+156.351 94.149 m\r
+118.101 95.649 l\r
+S\r
+157.851 56.649 m\r
+119.601 56.649 l\r
+S\r
+0.00 0.00 0.00 (Black) 0 1 Xx\r
+/Times-Roman 14 sf (0) 285.351 326.649 t (2) 286.851 292.899 t (4) 285.351 256.899 t (6) 283.851 220.149\r
+t (1) 284.601 181.149 t (3) 283.851 139.899 t (5) 283.101 100.899 t (7) 284.601 65.649 t (0) 165.351 326.649\r
+t (4) 165.351 286.149 t (2) 172.101 247.899 t (6) 169.101 211.149 t (1) 168.351 181.149 t (5) 168.351\r
+139.899 t (3) 170.601 99.399 t (7) 175.101 61.149 t (0) 73.851 325.899 t (4) 75.351 285.399 t (2) 74.601\r
+250.149 t (6) 78.351 211.149 t (1) 76.101 175.149 t (5) 76.851 137.649 t (3) 79.101 106.149 t (7) 78.351\r
+60.399 t (0) 6.351 313.899 t (0) 15.258 313.899 t (0) 24.165 313.899 t (1) 7.101 276.399 t (0) 16.008\r
+276.399 t (0) 24.915 276.399 t (0) 6.351 239.649 t (1) 15.258 239.649 t (0) 24.165 239.649 t (1) 7.851\r
+202.149 t (1) 16.758 202.149 t (0) 25.665 202.149 t (0) 9.351 165.399 t (0) 18.258 165.399 t (1) 27.165\r
+165.399 t (1) 9.351 127.149 t (0) 18.258 127.149 t (1) 27.165 127.149 t (0) 9.351 89.649 t (1) 18.258\r
+89.649 t (1) 27.165 89.649 t (1) 8.601 52.899 t (1) 17.508 52.899 t (1) 26.415 52.899 t 1.00 0.00 0.00\r
+(Red) 0 1 Xx\r
+85.101 45.399 m\r
+194.601 34.149 l\r
+292.851 43.149 l\r
+S\r
+0.00 0.00 0.00 (Black) 0 1 Xx\r
+(l) 178.851 15.399 t (o) 182.740 15.399 t (g) 191.305 15.399 t ( ) 200.192 15.399 t (n) 204.642 15.399\r
+t (V) 163.101 357.399 t (s) 172.678 357.399 t (t) 179.972 357.399 t (u) 185.461 357.399 t (p) 194.334\r
+357.399 t ( ) 203.221 357.399 t (v) 207.671 357.399 t (e) 215.956 357.399 t (l) 224.569 357.399 t (i)\r
+228.458 357.399 t (k) 232.347 357.399 t (o) 239.956 357.399 t (s) 248.521 357.399 t (t) 255.815 357.399\r
+t (i) 261.304 357.399 t ( ) 265.193 357.399 t (8) 269.643 357.399 t end restore\r
+%%PageTrailer\r
+showpage\r
+%%Trailer\r
+%%EOF\r
diff --git a/old/9-fft/9-fft.tex b/old/9-fft/9-fft.tex
deleted file mode 100644 (file)
index 3340759..0000000
+++ /dev/null
@@ -1,392 +0,0 @@
-\def\scharfs{\char"19}
-\input lecnotes.tex
-\def\imply{\Rightarrow}
-\prednaska{9}{Fourierova transformace}{\vbox{\hbox{(K.Jakubec, M.Polák
-       a~G.Ocsovszky,}\hbox{\ V.Tùma, M.Kozák)}}}
-
-Násobení polynomù mù¾e mnohým pøipadat jako pomìrnì (algoritmicky) snadný
-problém. Asi ka¾dého hned napadne \uv{hloupý} algoritmus -- vezmeme
-koeficienty prvního polynomu a~vynásobíme ka¾dý se v¹emi koeficienty druhého
-polynomu a~pøíslu¹nì u~toho seèteme i~exponenty (stejnì jako to dìláme, kdy¾
-násobíme polynomy na~papíøe). Pokud stupeò prvního polynomu je $n$ a~druhého
-$m$, strávíme tím èas $\Omega(mn)$. Pro $m=n$ je to kvadraticky pomalé.
-Na~první pohled se mù¾e zdát, ¾e rychleji to prostì nejde (pøeci musíme
-v¾dy vynásobit \uv{ka¾dý s~ka¾dým}). Ve skuteènosti to ale rychleji fungovat
-mù¾e, ale k~tomu je potøeba znát trochu tajemný algoritmus FFT neboli {\I Fast
-Fourier Transform}.
-
-
-\ss{Trochu algebry na~zaèátek}
-Celé polynomy oznaèujeme velkými písmeny, jednotlivé èleny polynomù pøíslu¹nými
-malými písmeny (pø.: polynom $W$ stupnì $d$ má koeficienty $w_{0}, w_{1},
-w_{2},\ldots, w_{d}$).
-
-Libovolný polynom $P$ stupnì (nejvý¹e) $d$ lze reprezentovat
-jednak jeho koeficienty, tedy èísly $p_{0}, p_{1}, \ldots ,p_{d}$, druhak
-i~pomocí hodnot:
-
-\>{\bf Lemma:} Polynom stupnì nejvý¹e $d$ je jednoznaènì urèeò svými
-hodnotami v~$d+1$ rùzných bodech.
-
-\>{\it Dùkaz:}
-Polynom stupnì $d$ má maximálnì $d$ koøenù (indukcí -- je-li
-$k$ koøenem $P$, pak lze $P$ napsat jako $(x-k)Q$ kde $Q$ je polynom stupnì
-o~jedna men¹í, pøitom polynom stupnì 1 má jediný koøen); uvá¾íme-li
-dva rùzné polynomy $P$ a~$Q$ stupnì $d$ nabývající v~daných bodech stejných
-hodnot, tak $P-Q$ je polynom stupnì maximálnì $d$, ka¾dé
-z $x_{0}\ldots x_{d}$ je koøenem tohoto polynomu $\imply$ spor, polynom stupnì
-$d$ má $d+1$ koøenù $\imply$ $P-Q$ musí být nulový polynom $\imply$ $P=Q$.
-\qed
-\medskip       
-
-Pov¹imnìme si jedné skuteènosti -- máme-li dva polynomy $A$ a~$B$ stupnì $d$
-a~body $x_{0}, \ldots, x_{n}$, dále polynom $C=A \cdot B$ (stupnì $2d$), pak
-platí $C(x_{j}) = A(x_{j}) \cdot B(x_{j})$ pro $j = 0,1,2, \ldots, n$. Toto
-èiní tento druhý zpùsob reprezentace polynomu velice atraktivním pro násobení
--- máme-li $A$ i $B$ reprezentované hodnotami v $n \geq 2d+1$ bodech, pak
-snadno (v $\Theta(n)$) spoèteme takovou reprezentaci $C$.
-Problémem je, ¾e typicky máme polynom zadaný koeficienty, a~ne hodnotami
-v~bodech. Tím pádem potøebujeme nìjaký hodnì rychlý algoritmus (tj.
-rychlej¹í ne¾ kvadratický, jinak bychom si nepomohli oproti hloupému
-algoritmu) na~pøevod polynomu z jedné reprezentace do druhé a~zase zpìt.
-
-\s{Idea, jak by mìl algoritmus pracovat:}
-\algo
-\:Vybereme $n\geq 2d+1$ bodù $x_{0}, x_{1}, \ldots , x_{n-1}$.
-\:V tìchto bodech vyhodnotíme polynomy $A$ a~$B$.
-\:Nyní ji¾ v~lineárním èase získáme hodnoty polynomu $C$ v~tìchto bodech:
-       $C(x_i) = A(x_i)\cdot B(x_i)$
-\:Pøevedeme hodnoty polynomu $C$ na~jeho koeficienty.
-\endalgo
-
-\>Je vidìt, ¾e klíèové jsou kroky 2 a~4.
-Celý trik spoèívá v~chytrém vybrání onìch bodù, ve kterých budeme polynomy
-vyhodnocovat -- zvolí-li se obecná $x_j$, tak se to rychle neumí, pro speciální
-$x_j$ ale uká¾eme, ¾e to rychle jde.
-
-\ss{Vyhodnocení polynomu metodou Rozdìl a~panuj (algoritmus FFT):}
-Mìjme polynom $P$ stupnì $\leq d$ a~chtìjme jej vyhodnotit v~$n$ bodech.
-Vybereme si body tak, aby byly spárované, èili $\pm x_{0}, \pm x_{1},
-\ldots , \pm x_{n/2-1} $. To nám výpoèet urychlí, proto¾e pak se druhé
-mocniny $x_{j}$ shodují s~druhými mocninami $-x_{j}$.
-
-Polynom $P$ rozlo¾íme na~dvì èásti, první obsahuje èleny se sudými exponenty,
-druhá s~lichými:
-$$P(x) = (p_{0}x^{0} + p_{2}x^{2} + \ldots + p_{d-2}x^{d-2}) + (p_{1}x^{1} +
-       p_{3}x^{3} + \ldots + p_{d-1}x^{d-1})$$
-\>se zavedením znaèení:
-$$P_s(t) = p_0t^0 + p_{2}t^{1} + \ldots + p_{d - 2}t^{d - 2\over 2}$$
-$$P_l(t) = p_1t^0 + p_3t^1 + \ldots + p_{d - 1}t^{d - 2\over 2}$$
-
-\>bude $P(x) = P_s(x^{2}) + xP_l(x^{2})$ a~$P(-x) = P_s(x^{2}) -
-xP_l(x^{2})$. Jinak øeèeno, vyhodnocování polynomu $P$ v~$n$ bodech se nám
-smrskne na~vyhodnocení $P_s$ a~$P_l$ v~$n/2$ bodech -- oba jsou polynomy
-stupnì nejvý¹e $d/2$ a~vyhodnocujeme je v~$x^{2}$ (vyu¾íváme
-rovnosti $(x_{i})^{2} = (-x_{i})^{2}$).
-
-\s{Pøíklad:}
-$3 + 4x + 6x^{2} + 2x^{3} + x^{4} + 10x^{5} = (3 + 6x^{2} + x^{4}) + x(4 +
-2x^{2} + 10x^{4})$.
-
-Teï nám ov¹em vyvstane problém s~oním párováním -- druhá mocnina pøece nemù¾e
-být záporná a~tím pádem u¾ v~druhé úrovni rekurze body spárované nebudou.
-Z~tohoto dùvodu musíme pou¾ít komplexní èísla -- tam druhé mocniny záporné býti
-mohou.
-
-% komplex
-\h{Komplexní intermezzo}
-\def\i{{\rm i}}
-\def\\{\hfil\break}
-
-\s{Základní operace}
-
-\itemize\ibull
-\:Definice: ${\bb C} = \{a + b\i \mid a,b \in {\bb R}\}$
-
-\:Sèítání: $(a+b\i)\pm(p+q\i) = (a\pm p) + (b\pm q)\i$. \\
-Pro $\alpha\in{\bb R}$ je $\alpha(a+b\i) = \alpha a + \alpha b\i$.
-
-\:Komplexní sdru¾ení: $\overline{a+b\i} = a-b\i$. \\
-$\overline{\overline x} = x$, $\overline{x\pm y} = \overline{x} \pm
-\overline{y}$, $\overline{x\cdot y} = \overline x \cdot \overline y$, $x
-\cdot \overline x \in {\bb R}$.
-
-\:Absolutní hodnota: $\vert x \vert = \sqrt{x\cdot\overline{x}}$, tak¾e $\vert
-a+b\i \vert = \sqrt{a^2+b^2}$. \\
-Také $\vert \alpha x \vert = \vert \alpha\vert \cdot \vert x \vert$.
-
-\:Dìlení: $x/y = (x\cdot \overline{y}) / (y \cdot \overline{y})$.
-\endlist
-
-\s{Gau{\scharfs}ova rovina a goniometrický tvar}
-
-\itemize\ibull
-\:Komplexním èíslùm pøiøadíme body v~${\bb R}^2$: $a+b\i \leftrightarrow (a,b)$.
-
-\:$\vert x\vert$ je vzdálenost od~bodu $(0,0)$.
-
-\:$\vert x\vert = 1$ pro èísla le¾ící na~jednotkové kru¾nici ({\I komplexní jednotky}). \\
-Pak platí $x=\cos\varphi + \i\sin\varphi$ pro nìjaké $\varphi\in\left[
-0,2\pi \right)$.
-
-\:Pro libovolné $x\in{\bb C}$: $x=\vert x \vert \cdot (\cos\varphi(x) +
-\i\sin\varphi(x))$. \\
-Èíslu $\varphi(x)\in\left[ 0,2\pi \right)$ øíkáme {\I argument}
-èísla~$x$, nìkdy znaèíme $\mathop{\rm arg} x$.
-
-\:Navíc $\varphi({\overline{x}}) = -\varphi(x)$.
-\endlist
-
-\s{Exponenciální tvar}
-
-\itemize\ibull
-\:Eulerova formule: $e^{i\varphi} = \cos\varphi + \i\sin\varphi$.
-
-\:Ka¾dé $x\in{\bb C}$ lze tedy zapsat jako $\vert x\vert \cdot e^{\i\cdot
-\varphi(x)}$.
-
-\:Násobení: $xy = \left(\vert x\vert\cdot e^{\i\cdot\varphi(x)}\right) \cdot
-       \left(\vert y\vert\cdot e^{\i\cdot\varphi(y)}\right) = \vert x\vert
-       \cdot \vert y\vert \cdot e^{\i\cdot(\varphi(x) + \varphi(y))}$. \\
-(absolutní hodnoty se násobí, argumenty sèítají)
-
-\:Umocòování: $x^\alpha = \left(\vert x\vert\cdot e^{\i\cdot\varphi(x)}\right)^
-       \alpha = {\vert x\vert}^\alpha\cdot e^{\i \alpha \varphi(x)}$.
-
-\:Odmocòování: $\root n\of x = {\vert x\vert}^{1/n} \cdot e^{\i\cdot
-\varphi(x)/n}$. \\
-Pozor -- odmocnina není jednoznaèná: $1^4=(-1)^4=\i^4=(-\i)^4=1$.
-\endlist
-
-\s{Odmocniny z~jednièky}
-
-\itemize\ibull
-\:Je-li nìjaké $x\in{\bb C}$ $n$-tou odmocninou z~jednièky, musí platit:
-$\vert x \vert = 1$, tak¾e $x=e^{\i\varphi}$ pro nìjaké~$\varphi$.
-Proto $x^n = e^{\i\varphi n} = \cos{\varphi n} + \i\sin\varphi n = 1$.
-Platí tedy $\varphi n = 2k\pi$ pro nìjaké $k\in{\bb Z}$.
-
-\:Z~toho plyne: $\varphi = 2k\pi/n$ \\
-(pro $k=0,\ldots,n-1$ dostáváme rùzné $n$-té odmocniny).
-
-\:Obecné odmocòování: $\root n \of x = {\vert x\vert}^{1/n} \cdot e^{\i\varphi
-       (x)/n} \cdot u$, kde $u=\root n\of 1$.
-
-\:Je-li $x$ odmocninou z 1, pak $\overline{x} = x^{-1}$ -- je toti¾ $1 = \vert
-x\cdot \overline{x}\vert = x\cdot \overline{x}$.
-\endlist
-
-\s{Primitivní odmocniny}
-
-\s{Definice:} $x$ je {\I primitivní} $k$-tá odmocnina z 1 $\equiv x^k=1 \land \forall j: 0<j<k \Rightarrow x^j \neq 1$.
-
-\>Tuto definici splòují napøíklad èísla $\omega = e^{2\pi \i / k}$ a $\overline\omega = e^{-2\pi\i/k}$.
-Platí toti¾, ¾e $\omega^j = e^{2\pi\i j/k}$, co¾ je rovno~1 právì tehdy,
-je-li $j$ násobkem~$k$ (jednotlivé mocniny èísla~$\omega$ postupnì obíhají
-jednotkovou kru¾nici). Analogicky pro~$\overline\omega$.
-
-\>Uka¾me si nìkolik pozorování fungujících pro libovolné èíslo~$\omega$,
-které je primitivní $k$-tou odmocninou z~jednièky (nìkdy budeme potøebovat,
-aby navíc $k$ bylo sudé):
-
-\itemize\ibull
-\:Pro $0\leq j<l<k$ je $\omega^j \neq \omega^l$, nebo» $\omega^l /
-\omega^j = \omega^{l-j} \neq 1$, proto¾e $l-j < k$ a $\omega$ je primitivní.
-\:$\omega^{k/2} = -1$, proto¾e $(\omega^{k/2})^2 = 1$, a tedy
-$\omega^{k/2}$ je druhá odmocnina z~1. Takové odmocniny jsou dvì:
-1 a $-1$, ov¹em 1 to být nemù¾e, proto¾e $\omega$ je primitivní.
-\:$\omega^j = - \omega^{k/2 + j}$ -- pøímý dùsledek pøedchozího bodu, pro
-nás ale velice zajímavý: $\omega^0,\omega^1,\ldots,\omega^{k-1}$ jsou po dvou
-spárované.
-\:$\omega^2$ je $k/2$-tá primitivní odmocnina z 1 -- dosazením.
-\endlist
-
-\h{Konec intermezza}
-% end komplex
-
-\bigskip
-
-Vra»me se nyní k algoritmu. Z poslední èásti komplexního intermezza se zdá,
-¾e by nemusel být ¹patný nápad zkusit vyhodnocovat polynom v mocninách
-$n$-té primitivní odmocniny z~jedné (tedy za $x_0,x_1,\ldots,x_{n-1}$
-z~pùvodního algoritmu zvolíme $\omega^0,\omega^1,\ldots,\omega^{n-1}$).
-Aby nám v¹e vycházelo pìknì, zvolíme $n$ jako mocninu dvojky.
-
-\ss{Celý algoritmus bude vypadat takto:}
-\>FFT($P$, $ \omega$)
-
-\>{\sl Vstup:} $p_{0}, \ldots , p_{n-1}$, koeficienty polynomu $P$ stupnì
-nejvý¹e $n-1$, a~$\omega$,
-$n$-tá primitivní odmocina z jedné.
-
-\>{\sl Výstup:} Hodnoty polynomu v~bodech $1, \omega, \omega^{2}, \ldots ,
-\omega^{n - 1}$, èili èísla $P(1), P(\omega), P(\omega^{2}),$ $\ldots ,
-P(\omega^{n - 1})$.
-
-\algo
-\:Pokud $n = 1$, vrátíme $p_{0}$ a~skonèíme.
-\:Jinak rozdìlíme $P$ na èleny se sudými a lichými exponenty (jako v pùvodní
-my¹lence) a~rekurzivnì zavoláme FFT($P_s$, $\omega^{2}$) a~FFT($P_l$,
-$\omega^{2}$) -- $P_l$ i~$P_s$ jsou stupnì max. $n/2-1$, $\omega^2$ je
-$n/2$-tá primitivní odmocnina, a mocniny $\omega^2$ jsou stále po dvou
-spárované ($n$ je mocnina dvojky, a tedy i $n/2$ je sudé; popø. $n=2$ a je to
-zøejmé).
-\:Pro $j = 0, \ldots , n/2 - 1$ spoèítáme:
-
-\:\qquad $P(\omega^{j}) = P_s(\omega^{2j}) + \omega^{j}\cdot P_l(\omega^{2j})$.
-
-\:\qquad $P(\omega^{j+n/2})=P_s(\omega^{2j})-\omega^{j}\cdot P_l(\omega^{2j})$.
-
-\endalgo
-
-
-\s{Èasová slo¾itost:}
-\>$T(n)=2T(n/2) + \Theta(n) \Rightarrow$ slo¾itost $\Theta(n \log n)$, jako
-MergeSort.
-
-
-Máme tedy algoritmus, který pøevede koeficienty polynomu na~hodnoty tohoto
-polynomu v~rùzných bodech. Potøebujeme ale také algoritmus, který doká¾e
-reprezentaci polynomu pomocí hodnot pøevést zpìt na~koeficienty polynomu.
-K~tomu nám pomù¾e podívat se na~ná¹ algoritmus trochu obecnìji.
-
-
-\s{Definice:}
-\>{\I Diskrétní Fourierova transformace} $(DFT)$
-je zobrazení $f: { {\bb C} ^n} \rightarrow { {\bb C} ^n}$, kde $$y=f(x) \equiv
-\forall j \ y_{j} = \sum \limits ^{n-1}_{k=0} x_{k} \cdot \omega ^{jk}$$
-(DFT si lze mimo jiné pøedstavit jako funkci vyhodnocující polynom
-s~koeficienty $x_k$ v~bodech $\omega^j$). Takovéto zobrazení je lineární
-a~tedy popsatelné maticí $\Omega$ s~prvky $\Omega_{jk} = \omega^{jk}$.
-Chceme-li umìt pøevádìt z~hodnot polynomu na koeficienty, zajímá nás inverze
-této matice.
-
-
-\ss{Jak najít inverzní matici?}
-Znaème $\overline{\Omega}$ matici, její¾ prvky
-jsou komplexnì sdru¾ené odpovídajícím prvkùm $\Omega$, a vyu¾ijme následující
-lemma:
-
-\ss{Lemma:}$\quad \Omega\cdot \overline{\Omega} = n\cdot E$.
-
-\proof $$ (\Omega\cdot \overline{\Omega})_{jk} = \sum_{l=0}^{n-1} \omega^{jl}
-\cdot \overline{\omega^{lk}} = \sum \omega^{jl} \cdot \overline{\omega}^{lk} =
-\sum \omega^{jl} \cdot \omega^{-lk} = \sum \omega^{l(j-k)}\hbox{.}$$
-\itemize\ibull
-\:Pokud $j=k$, pak $ \sum \limits ^{n-1}_{l=0} (\omega ^{0}) ^{l} = n$.
-
-\:Pokud $j\neq k$, pou¾ijeme vzoreèek pro souèet geometrické øady
-s kvocientem $\omega ^{(j-k) }$ a~dostaneme ${{\omega^{(j-k)n} -1} \over
-{\omega^{(j-k)} -1}} ={1-1 \over \neq 0} = 0$ (
-$\omega^{j-k} - 1$ je jistì $\neq 0$, nebo» $\omega$ je $n$-tá primitivní
-odmoncina a $j-k<n$).
-\endlist
-\qed
-
-
-\>Na¹li jsme inverzi:
-$\Omega({1 \over n} \overline{\Omega}) = {1 \over n}\Omega \cdot
-\overline{\Omega} = E$, \quad $\Omega^{-1}_{jk} = {1 \over n}\overline{\omega^
-{jk}} = {1 \over n}\omega^{-jk} = {1 \over n} {(\omega^{-1})}^{jk}$, \quad
-(pøipomínáme, $\omega^{-1}$ je $\overline{\omega}$).
-
-Vyhodnocení polynomu lze provést vynásobením $\Omega$, pøevod do pùvodní
-reprezentace vynásobením $\Omega^{-1}$. My jsme si ale v¹imli chytrého
-spárování, a vyhodnocujeme polynom rychleji ne¾ kvadraticky (proto FFT,
-jako¾e {\it fast}, ne jako {\it fuj}). Uvìdomíme-li si, ¾e $\overline \omega =
-\omega^{-1}$ je také $n$-tá primitivní odmocnina z 1 (má akorát
-úhel s opaèným znaménkem), tak mù¾eme stejným trikem vyhodnotit i~zpìtný
-pøevod -- nejprve vyhodnotíme $A$ a $B$ v $\omega^j$, poté pronásobíme
-hodnoty a~dostaneme tak hodnoty polynomu $C=A\cdot B$, a pustíme na nì
-stejný algoritmus s~$\omega^{-1}$ (hodnoty $C$
-vlastnì budou v~algoritmu \uv{koeficienty polynomu}). Nakonec jen získané
-hodnoty vydìlíme $n$ a~máme chtìné koeficienty.
-
-\s{Výsledek:} Pro $n= 2^k$ lze DFT na~${\bb C}^n$ spoèítat v~èase $\Theta(n
-\log n)$ a~DFT$^{-1}$ takté¾.
-
-\s{Dùsledek:}
-Polynomy stupnì $n$ lze násobit v~èase $\Theta(n \log n)$:
-$\Theta(n \log n)$ pro vyhodnocení, $\Theta(n)$ pro vynásobení a~$\Theta(n
-\log n)$ pro pøevedení zpìt.
-
-\s{Pou¾ití FFT:}
-
-\itemize\ibull
-
-\:Zpracování signálu -- rozklad na~siny a~cosiny o~rùzných frekvencích
-$\Rightarrow$ spektrální rozklad.
-\:Komprese dat -- napøíklad formát JPEG.
-\:Násobení dlouhých èísel v~èase $\Theta(n \log n)$.
-\endlist
-
-\s{Paralelní implementace FFT}
-
-\figure{img.eps}{Pøíklad prùbìhu algoritmu na~vstupu velikosti 8}{3in}
-
-Zkusme si prùbìh algoritmu FFT znázornit graficky (podobnì, jako jsme kreslili
-hradlové sítì). Na~levé stranì obrázku se nachází vstupní vektor $x_0,\ldots,x_{n-1}$
-(v~nìjakém poøadí), na~pravé stranì pak výstupní vektor $y_0,\ldots,y_{n-1}$.
-Sledujme chod algoritmu pozpátku: Výstup spoèítáme z~výsledkù \uv{polovièních}
-transformací vektorù $x_0,x_2,\ldots,x_{n-2}$ a $x_1,x_3,\ldots,x_{n-1}$.
-Èerné krou¾ky pøitom odpovídají výpoètu lineární kombinace $a+\omega^kb$,
-kde $a,b$ jsou vstupy krou¾ku a $k$~nìjaké pøirozené èíslo závislé na poloze
-krou¾ku. Ka¾dá z~polovièních transformací se poèítá analogicky z~výsledkù
-transformace velikosti $n/4$ atd. Celkovì výpoèet probíhá v~$\log_2 n$ vrstvách
-po~$\Theta(n)$ operacích.
-
-Jeliko¾ operace na~ka¾dé vrstvì probíhají na sobì nezávisle, mù¾eme je poèítat
-paralelnì. Ná¹ diagram tedy popisuje hradlovou sí» pro paralelní výpoèet FFT
-v~èase $\Theta(\log n\cdot T)$ a prostoru $\O(n\cdot S)$, kde $T$ a~$S$ znaèí
-èasovou a prostorovou slo¾itost výpoètu lineární kombinace dvou komplexních èísel.
-
-\s{Cvièení:} Doka¾te, ¾e permutace vektoru $x_0,\ldots,x_{n-1}$ odpovídá bitovému
-zrcadlení, tedy ¾e na pozici~$b$ shora se vyskytuje prvek $x_d$, kde~$d$ je
-èíslo~$b$ zapsané ve~dvojkové soustavì pozpátku.
-
-\s{Nerekurzivní FFT}
-
-Obvod z~pøedchozího obrázku také mù¾eme vyhodnocovat po~hladinách zleva doprava,
-èím¾ získáme elegantní nerekurzivní algoritmus pro výpoèet FFT v~èase $\Theta(n\log n)$
-a prostoru $\Theta(n)$:
-
-\algo
-\algin $x_0,\ldots,x_{n-1}$
-\:Pro $j=0,\ldots,n-1$ polo¾íme $y_k\= x_{r(k)}$, kde $r$ je funkce bitového zrcadlení.
-\:Pøedpoèítáme tabulku $\omega^0,\omega^1,\ldots,\omega^{n-1}$.
-\:$b\= 1$ \cmt{velikost bloku}
-\:Dokud $b<n$, opakujeme:
-\::Pro $j=0,\ldots,n-1$ s~krokem~$2b$ opakujeme: \cmt{zaèátek bloku}
-\:::Pro $k=0,\ldots,b-1$ opakujeme: \cmt{pozice v~bloku}
-\::::$\alpha\=\omega^{nk/2b}$
-\::::$(y_{j+k},y_{j+k+b}) \= (y_{j+k}+\alpha\cdot y_{j+k+b}, y_{j+k}-\alpha\cdot y_{j+k+b})$.
-\::$b\= 2b$
-\algout $y_0,\ldots,y_{n-1}$
-\endalgo
-
-\s{FFT v~koneèných tìlesech}
-
-Nakonec dodejme, ¾e Fourierovu transformaci lze zavést nejen nad tìlesem
-komplexních èísel, ale i v~nìkterých koneèných tìlesech, pokud zaruèíme
-existenci primitivní $n$-té odmocniny z~jednièky. Napøíklad v~tìlese ${\bb
-Z}_p$ pro prvoèíslo $p=2^k+1$ platí $2^k=-1$, tak¾e $2^{2k}=1$
-a $2^0,2^1,\ldots,2^{2k-1}$ jsou navzájem rùzná, tak¾e èíslo~2 je~primitivní
-$2k$-tá odmocnina z~jedné. To se nám ov¹em nehodí pro algoritmus FFT, jeliko¾
-$2k$ bude málokdy mocnina dvojky.
-
-Zachrání nás ov¹em algebraická vìta, která øíká, ¾e multiplikativní grupa\foot{To je
-mno¾ina v¹ech nenulových prvkù tìlesa s~operací násobení.}
-libovolného koneèného tìlesa je cyklická, tedy ¾e v¹echny nenulové prvky tìlesa lze
-zapsat jako mocniny nìjakého èísla~$g$ (generátoru). Napøíklad pro $p=2^{16}+1=65\,537$
-je jedním takovým generátorem èíslo~$3$. Jeliko¾ mezi èísly $g^1,g^2,\ldots,g^{p-1}$
-se musí ka¾dý nenulový prvek tìlesa vyskytnout právì jednou, je~$g$ primitivní
-$2^k$-tou odmocninou z~jednièky, tak¾e mù¾eme poèítat FFT pro libovolný vektor,
-jeho¾ velikost je mocnina dvojky men¹í nebo rovná $2^k$.\foot{Bli¾¹í prùzkum
-na¹ich úvah o~FFT dokonce odhalí, ¾e není ani potøeba tìleso. Postaèí libovolný
-komutativní okruh, ve~kterém existuje pøíslu¹ná primitivní odmocnina
-z~jednièky, její multiplikativní inverze (ta ov¹em existuje v¾dy, proto¾e
-$\omega^{-1} = \omega^{n-1}$) a multiplikativní inverze èísla~$n$. To nám
-poskytuje je¹tì daleko více volnosti ne¾ tìlesa, ale není snadné takové okruhy
-hledat.}
-
-\bye
diff --git a/old/9-fft/Makefile b/old/9-fft/Makefile
deleted file mode 100644 (file)
index 0769a79..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-P=9-fft
-
-include ../Makerules
diff --git a/old/9-fft/img.eps b/old/9-fft/img.eps
deleted file mode 100644 (file)
index d7e20d4..0000000
+++ /dev/null
@@ -1,1072 +0,0 @@
-%!PS-Adobe-2.0 EPSF-1.2\r
-%%Creator: Xara X\r
-%%For: (Unregistered user) (Unregistered company)\r
-%%Title: (velikost8.xar)\r
-%%CreationDate: (11/02/08) (09:37 PM)\r
-%%BoundingBox: 7 12 447 369\r
-%%HiResBoundingBox: 7.148 12.362 446.455 368.162\r
-%%AWColourTable\r
-%%+h (Red) 0.0 100.0 100.0\r
-%%+h (Orange-Red) 15.0 100.0 100.0\r
-%%+h (Orange) 30.0 100.0 100.0\r
-%%+h (Orange-Yellow) 45.0 100.0 100.0\r
-%%+h (Yellow) 60.0 100.0 100.0\r
-%%+h (Yellow-Chartreuse) 75.0 100.0 100.0\r
-%%+h (Chartreuse) 90.0 100.0 100.0\r
-%%+h (Chartreuse-Green) 105.0 100.0 100.0\r
-%%+h (Green) 120.0 100.0 100.0\r
-%%+h (Green-SpringGreen) 135.0 100.0 100.0\r
-%%+h (Spring Green) 150.0 100.0 100.0\r
-%%+h (SpringGreen-Cyan) 165.0 100.0 100.0\r
-%%+h (Cyan) 180.0 100.0 100.0\r
-%%+h (Sky Blue) 195.0 100.0 100.0\r
-%%+h (Mid Blue) 210.0 100.0 100.0\r
-%%+h (MidBlue-Blue) 225.0 100.0 100.0\r
-%%+h (Blue) 240.0 100.0 100.0\r
-%%+h (Blue-Indigo) 255.0 100.0 100.0\r
-%%+h (Indigo) 270.0 100.0 100.0\r
-%%+h (Violet) 285.0 100.0 100.0\r
-%%+h (Magenta) 300.0 100.0 100.0\r
-%%+h (Magenta-Crimson) 315.0 100.0 100.0\r
-%%+h (Crimson) 330.0 100.0 100.0\r
-%%+h (Crimson-Red) 345.0 100.0 100.0\r
-%%+h (Black) 0.0 0.0 0.0\r
-%%+t (90% Black) 90\r
-%%+t (80% Black) 80\r
-%%+t (70% Black) 70\r
-%%+t (60% Black) 60\r
-%%+t (50% Black) 50\r
-%%+t (40% Black) 40\r
-%%+t (30% Black) 30\r
-%%+t (20% Black) 20\r
-%%+t (10% Black) 10\r
-%%+h (White) 0.0 0.0 100.0\r
-%%EndComments\r
-%%BeginProlog\r
-\r
-%%BeginResource: procset XaraStudio1Dict\r
-% Copyright (c) 1995,1996 Xara Ltd\r
-/XaraStudio1Dict 300 dict def XaraStudio1Dict begin\r
-/bd{bind def}bind def/ld{load def}bind def/xd{exch def}bind def/sv{save}bd\r
-/rs{restore}bd/gs{gsave}bd/gr{grestore}bd/bg{begin}bd/en{end}bd/level2\r
-/languagelevel where{pop languagelevel 2 ge}{false}ifelse def/setseps{\r
-/v_gseps xd}bd/setplate{/v_plate xd}bd/setkgray{/v_keyg xd}bd/setmono{\r
-/v_mono xd}bd/rgb2gray{0.109 mul exch 0.586 mul add exch 0.305 mul\r
-add}bd/cmyk2rgb{3{dup 5 -1 roll add dup 1 gt{pop 1}if 1 exch sub exch}repeat\r
-pop}bd/rgb2cmyk{3{1.0 exch sub 3 1 roll}repeat 3 copy 2 copy gt{exch}if\r
-pop 2 copy gt{exch}if pop dup 0.5 gt{0.5 sub dup 3{5 1 roll dup 3 1\r
-roll sub}repeat 5 1 roll pop}{pop 0}ifelse}bd/cmyk2hsb{3{dup 5 -1 roll\r
-add 1 exch sub dup 0 lt{pop 0}if exch}repeat pop rgb2hsb}bd/rgb2hsb{setrgbcolor\r
-currenthsbcolor}bd/readcurve{exch 255.0 mul 0.5 add cvi get 255.0 div}bd\r
-/rgb2devcmyk{3 copy dup 3 1 roll eq 3 1 roll eq v_keyg 1 eq and and{pop\r
-pop 1 exch sub 0 0 0 4 -1 roll}{/ucurve where{pop 3{1.0 exch sub 3\r
-1 roll}repeat 3 copy 2 copy gt{exch}if pop 2 copy gt{exch}if pop dup\r
-ucurve readcurve exch bcurve readcurve clamp01 3{5 1 roll dup 3 1 roll\r
-sub clamp01}repeat 5 1 roll pop 4 1 roll ycurve readcurve 4 1 roll\r
-mcurve readcurve 4 1 roll ccurve readcurve 4 1 roll}{rgb2cmyk}ifelse}ifelse}def\r
-/rgb2keyG{3 copy dup 3 1 roll eq 3 1 roll eq and{pop pop}{Max3}ifelse\r
-1 exch sub bcurve readcurve clamp01}bd/rgb2key{Max3 1 exch sub bcurve\r
-readcurve clamp01}bd/rgb2cyanG{3 copy dup 3 1 roll eq 3 1 roll eq and{pop\r
-pop pop 0}{rgb2cyan}ifelse}bd/rgb2cyan{3 copy Max3 1 exch sub ucurve\r
-readcurve 4 1 roll pop pop 1 exch sub exch sub ccurve readcurve clamp01}bd\r
-/rgb2magentaG{3 copy dup 3 1 roll eq 3 1 roll eq and{pop pop pop 0}{rgb2magenta}ifelse}bd\r
-/rgb2magenta{3 copy Max3 1 exch sub ucurve readcurve 4 1 roll pop\r
-1 exch sub 3 1 roll pop sub mcurve readcurve clamp01}bd/rgb2yellowG{3\r
-copy dup 3 1 roll eq 3 1 roll eq and{pop pop pop 0}{rgb2yellow}ifelse}bd\r
-/rgb2yellow{3 copy Max3 1 exch sub ucurve readcurve 4 1 roll 1 exch\r
-sub 4 1 roll pop pop sub ycurve readcurve clamp01}bd/rgb2plategray{v_keyg\r
-0 eq v_plate v_cpky eq{{rgb2key}{rgb2keyG}ifelse}{v_plate v_cpyl eq{{rgb2yellow}{rgb2yellowG}ifelse}{v_plate\r
-v_cpmg eq{{rgb2magenta}{rgb2magentaG}ifelse}{v_plate v_cpcy eq{{rgb2cyan}{rgb2cyanG}ifelse}{{rgb2key}{rgb2keyG}ifelse}ifelse}ifelse}ifelse}ifelse\r
-1 exch sub setgray}bd/dc{0 def}bd/aca{/v_cpnone 0 def/v_cpcy 1 def\r
-/v_cpyl 2 def/v_cpmg 3 def/v_cpky 4 def/v_gseps 0 def/v_keyg 0 def\r
-/v_plate v_cpnone def/v_mono 0 def/v_wr dc/v_fc dc/v_fm dc/v_fy dc\r
-/v_fk dc/v_fg dc/v_fr dc/v_fg dc/v_fb dc/v_sc dc/v_sm dc/v_sy dc/v_sk\r
-dc/v_sg dc/v_sr dc/v_sg dc/v_sb dc/v_sct 0 def/v_fct 0 def/v_ft 0 def\r
-/v_cxe 0 def/v_cxm 0 def/v_sa -1 def/v_ea -1 def/sR dc/sG dc/sB dc\r
-/mR dc/mG dc/mB dc/eR dc/eG dc/eB dc/sC dc/sM dc/sY dc/sK dc/eC dc\r
-/eM dc/eY dc/eK dc/sH dc/sS dc/sV dc/eH dc/eS dc/eV dc/sGy dc/eGy\r
-dc/mGy dc/ci_datasrc dc/ci_matrix dc/ci_dataleft dc/ci_buf dc/ci_dataofs\r
-dc/ci_y dc/rciBuf dc/cbslw dc/cmiBuf dc/cPalette dc/cpci_datasrc dc\r
-/cpci_matrix dc/cpci_bpp dc/cpci_y dc/cpci_sampsleft dc/cpci_nextcol\r
-dc/cpci_buf dc/startX dc/startY dc/endX dc/endY dc/endX2 dc/endY2 dc\r
-/fillX dc/urx dc/ury dc/llx dc/lly dc/incD dc/distance dc/slice dc\r
-/startangle dc/Steps dc/incH dc/incS dc/incV dc/incR dc/incG dc/incB\r
-dc/incGy dc 0.25 setlinewidth [] 0 setdash 0 setlinejoin 0 setlinecap}bd\r
-aca/setplategray{v_plate v_cpky eq{1 exch sub setgray pop pop pop}{v_plate\r
-v_cpyl eq{pop 1 exch sub setgray pop pop}{v_plate v_cpmg eq{pop pop\r
-1 exch sub setgray pop}{v_plate v_cpcy eq{pop pop pop 1 exch sub setgray}{1\r
-exch sub setgray pop pop pop}ifelse}ifelse}ifelse}ifelse}bd/setplatecolor{v_plate\r
-v_cpky eq{1 exch sub 0 0 0 4 -1 roll setcmykcolor pop pop pop}{v_plate\r
-v_cpyl eq{pop 1 exch sub 0 0 0 4 2 roll setcmykcolor pop pop}{v_plate\r
-v_cpmg eq{pop pop 1 exch sub 0 0 0 4 1 roll setcmykcolor pop}{v_plate\r
-v_cpcy eq{pop pop pop 1 exch sub 0 0 0 setcmykcolor}{1 exch sub 0 0\r
-0 4 -1 roll setcmykcolor pop pop pop}ifelse}ifelse}ifelse}ifelse}bd\r
-/setcmykcolor where{pop}{/setcmykcolor{cmyk2rgb setrgbcolor}bd}ifelse\r
-/setlogcmykcolor{v_gseps 1 eq{v_mono 1 eq{1 exch sub setgray pop pop\r
-pop}{setcmykcolor}ifelse}{v_mono 1 eq{cmyk2rgb rgb2gray setgray}{setcmykcolor}ifelse}ifelse}bd\r
-/setlogrgbcolor{v_gseps 1 eq{v_mono 1 eq{rgbtoplategray}{rgb2devcmyk\r
-setplatecolor}ifelse}{v_mono 1 eq{rgb2gray setgray}{systemdict begin\r
-setrgbcolor end}ifelse}ifelse}bd/setfillcolor{v_fct 0 eq{v_fc v_fm\r
-v_fy v_fk setlogcmykcolor}{v_fr v_fg v_fb setlogrgbcolor}ifelse}bd\r
-/setstrokecolor{v_sct 0 eq{v_sc v_sm v_sy v_sk setlogcmykcolor}{v_sr\r
-v_sg v_sb setlogrgbcolor}ifelse}bd/setgfillcmyk{v_gseps 1 eq{v_mono\r
-1 eq{cmyk2rgb rgb2plategray}{cmyk2rgb rgb2devcmyk setplatecolor}ifelse}{v_mono\r
-1 eq{cmyk2rgb rgb2gray setgray}{setcmykcolor}ifelse}ifelse}bd/setgfillrgb{v_gseps\r
-1 eq{v_mono 1 eq{rgb2plategray}{rgb2devcmyk setplatecolor}ifelse}{v_mono\r
-1 eq{rgb2gray setgray}{systemdict begin setrgbcolor end}ifelse}ifelse}bd\r
-/setgfillhsb{v_gseps 1 eq{v_mono 1 eq{systemdict begin sethsbcolor\r
-currentrgbcolor end rgb2plategray}{systemdict begin sethsbcolor currentrgbcolor\r
-end rgb2devcmyk setplatecolor}ifelse}{v_mono 1 eq{systemdict begin\r
-sethsbcolor currentgray end setgray}{systemdict begin sethsbcolor end}ifelse}ifelse}bd\r
-/Max{2 copy lt{exch}if pop}bd/Max3{2 copy lt{exch}if pop 2 copy lt{exch}if\r
-pop}bd/Min{2 copy gt{exch}if pop}bd/Min3{2 copy gt{exch}if pop 2 copy\r
-gt{exch}if pop}bd/clamp{3 1 roll Max 2 1 roll Min}bd/clamp01{0 Max\r
-1 Min}bd/Pythag{dup mul exch dup mul add sqrt}bd/ssc{DeviceRGB setcolorspace\r
-setcolor}bd/ssg{setgray}bd/p_render{}def/p_count 0 def/vis_flag true\r
-def/DataString 3 string def/DataSrc{currentfile DataString readhexstring\r
-pop}bd/DataStr1 1 string def/DataStr2 1 string def/DataStr3 1 string\r
-def/DataSrc1{DataStr1}bd/DataSrc2{DataStr2}bd/DataSrc3{DataStr3}bd\r
-/colorimage where{pop/ci{colorimage}bd}{/ci{pop pop/ci_datasrc exch\r
-def matrix invertmatrix/ci_matrix exch def pop/ci_dataleft 0 def/ci_buf()def\r
-/ci_dataofs 0 def 0 1 3 -1 roll 1 sub{/ci_y exch def dup 0 1 3 -1\r
-roll 1 sub{0 1 2{pop ci_dataleft 0 eq{ci_datasrc dup length/ci_dataleft\r
-exch def/ci_buf exch def/ci_dataofs 0 def}if ci_buf ci_dataofs get\r
-255 div/ci_dataofs ci_dataofs 1 add def/ci_dataleft ci_dataleft 1 sub\r
-def}for setrgbcolor dup ci_y 3 -1 roll 1 add ci_y 1 add 4 copy 5 1\r
-roll 4 2 roll 5 -1 roll 1 1 4{pop ci_matrix transform 8 2 roll}for\r
-m l l l closepath fill}for}for pop}bd}ifelse/rci{/rciBuf 4 index 3\r
-index mul 7 add 8 div floor cvi string def{currentfile rciBuf readhexstring\r
-pop}bind false 3 ci}bd/cbsl{2 eq/cbslL2 xd 5 index/cbslw xd translate\r
-scale 8 [ 3 index 0 0 5 index 0 0 ] cbslL2{/DataStr1 cbslw string def\r
-currentfile/ASCII85Decode filter/RunLengthDecode filter DataStr1 readstring\r
-pop pop/DataStr2 cbslw string def currentfile/ASCII85Decode filter\r
-/RunLengthDecode filter DataStr2 readstring pop pop/DataStr3 cbslw\r
-string def currentfile/ASCII85Decode filter/RunLengthDecode filter\r
-DataStr3 readstring pop pop{DataStr1}bind{DataStr2}bind{DataStr3}bind\r
-true}{/DataSrc load false}ifelse 3 ci}bd/gbsl{2 eq/gbslL2 xd 5 index\r
-/gbslw xd translate scale 8 [ 3 index 0 0 5 index 0 0 ] gbslL2{/DataStr1\r
-gbslw string def currentfile/ASCII85Decode filter/RunLengthDecode filter\r
-DataStr1 readstring pop pop{DataStr1}bind}{/DataStr1 gbslw string def\r
-currentfile DataSrc1 readhexstring pop pop{DataStr1}bind}ifelse image}bd\r
-/cmi{/cmiBuf 4 index 3 index mul 7 add 8 div floor cvi string def{currentfile\r
-cmiBuf readhexstring pop}bind image}bd/cpal{4 mul string/cPalette exch\r
-def currentfile cPalette readhexstring pop}bd/cpci{/cpci_datasrc exch\r
-def matrix invertmatrix/cpci_matrix exch def/cpci_bpp exch def cpci_init\r
-0 1 3 -1 roll 1 sub{/cpci_y exch def dup cpci_bpp 4 eq{cpci_sampsleft\r
-1 eq{/cpci_sampsleft 0 def}if}if 0 1 3 -1 roll 1 sub{cpci_nextcol dup\r
-cpci_y 3 -1 roll 1 add cpci_y 1 add 4 copy 5 1 roll 4 2 roll 5 -1 roll\r
-1 1 4{pop cpci_matrix transform 8 2 roll}for m l l l closepath fill}for}for\r
-pop}bd/cpci_init{/cpci_sampsleft 0 def}bd/cpci_buf 1 string def/cpci_nextcol{cpci_bpp\r
-1 eq{cpci_sampsleft 0 eq{currentfile cpci_buf readhexstring pop pop\r
-/cpci_sampsleft 8 def}if cpci_buf dup 0 get dup 1 and setgray -1 bitshift\r
-1 exch put/cpci_sampsleft cpci_sampsleft 1 sub def}{cpci_bpp 4 eq{cpci_sampsleft\r
-0 eq{currentfile cpci_buf readhexstring pop pop/cpci_sampsleft 2 def}if\r
-cpci_buf 0 get dup 15 and exch -4 bitshift cpci_buf 0 3 -1 roll put\r
-/cpci_sampsleft cpci_sampsleft 1 sub def}{currentfile cpci_buf readhexstring\r
-pop 0 get}ifelse 4 mul dup 2 add cPalette exch get 255 div exch dup\r
-1 add cPalette exch get 255 div exch cPalette exch get 255 div setrgbcolor}ifelse}bd\r
-/setup1asciiproc{[ currentfile mystring/readhexstring cvx/pop cvx\r
-] cvx bind}bd/setup1binaryproc{[ currentfile mystring/readstring cvx\r
-/pop cvx ] cvx bind}bd level2{save/dontloadlevel1 xd}if/iw 0 def/ih\r
-0 def/im_save 0 def/setupimageproc 0 def/polarity 0 def/smoothflag\r
-0 def/mystring 0 def/bpc 0 def/beginimage{/im_save save def dup 0 eq{pop\r
-/setup1binaryproc}{1 eq{/setup1asciiproc}{(error, can't use level2 data acquisition procs for level1)print\r
-flush}ifelse}ifelse/setupimageproc exch ld/polarity xd/smoothflag xd\r
-/imat xd/mystring exch string def/bpc xd/ih xd/iw xd}bd/endimage{im_save\r
-restore}bd/1bitbwcopyimage{1 setgray 0 0 moveto 0 1 rlineto 1 0 rlineto\r
-0 -1 rlineto closepath fill 0 setgray iw ih polarity imat setupimageproc\r
-imagemask}bd/1bitcopyimage{setrgbcolor 0 0 moveto 0 1 rlineto 1 0 rlineto\r
-0 -1 rlineto closepath fill setrgbcolor iw ih polarity imat setupimageproc\r
-imagemask}bd/1bitmaskimage{setrgbcolor iw ih polarity [iw 0 0 ih 0\r
-0] setupimageproc imagemask}bd level2{dontloadlevel1 restore}if level2\r
-not{save/dontloadlevel2 xd}if/setup2asciiproc{currentfile/ASCII85Decode\r
-filter/RunLengthDecode filter}bd/setup2binaryproc{currentfile/RunLengthDecode\r
-filter}bd/myimagedict 9 dict dup begin/ImageType 1 def/MultipleDataSource\r
-false def end def/im_save 0 def/setupimageproc 0 def/polarity 0 def\r
-/smoothflag 0 def/mystring 0 def/bpc 0 def/ih 0 def/iw 0 def/beginimage{\r
-/im_save save def dup 2 eq{pop/setup2binaryproc}{dup 3 eq{pop/setup2asciiproc}{0\r
-eq{/setup1binaryproc}{/setup1asciiproc}ifelse}ifelse}ifelse/setupimageproc\r
-exch ld{[ 1 0 ]}{[ 0 1 ]}ifelse/polarity xd/smoothflag xd/imat xd/mystring\r
-exch string def/bpc xd/ih xd/iw xd}bd/endimage{im_save restore}bd/1bitbwcopyimage{1\r
-ssg 0 0 moveto 0 1 rlineto 1 0 rlineto 0 -1 rlineto closepath fill\r
-0 ssg myimagedict dup begin/Width iw def/Height ih def/Decode polarity\r
-def/ImageMatrix imat def/DataSource setupimageproc def/BitsPerComponent\r
-1 def/Interpolate smoothflag def end imagemask}bd/1bitcopyimage{ssc\r
-0 0 moveto 0 1 rlineto 1 0 rlineto 0 -1 rlineto closepath fill ssc\r
-myimagedict dup begin/Width iw def/Height ih def/Decode polarity def\r
-/ImageMatrix imat def/DataSource setupimageproc def/BitsPerComponent\r
-1 def/Interpolate smoothflag def end imagemask}bd/1bitmaskimage{ssc\r
-myimagedict dup begin/Width iw def/Height ih def/Decode polarity def\r
-/ImageMatrix imat def/DataSource setupimageproc def/BitsPerComponent\r
-1 def/Interpolate smoothflag def end imagemask}bd level2 not{dontloadlevel2\r
-restore}if\r
-level2{save/dontloadlevel1 xd}if/startnoload{{/noload save def}if}bd\r
-/endnoload{{noload restore}if}bd/testsystemdict{where{systemdict eq{true}{false}ifelse}{false}ifelse}bd\r
-/ncolors 1 def/colorimage where{pop true}{false}ifelse{/ncolors 0\r
-statusdict begin/processcolors where{pop pop processcolors}{/deviceinfo\r
-where{pop deviceinfo/Colors known{pop{deviceinfo/Colors get}}if}if}ifelse\r
-end def ncolors 0 ne{/colorimage testsystemdict/setcolortransfer testsystemdict\r
-/currentcolortransfer testsystemdict/currentcmykcolor testsystemdict\r
-and and and not{/ncolors 0 def}if}if}if ncolors dup 1 ne exch dup 3\r
-ne exch 4 ne and and{/ncolors 0 def}if ncolors 1 eq dup dup not startnoload{\r
-/expandbw{expandfactor mul round cvi bwclut exch get 255 div}bd/doclutimage{bwclut\r
-colorclut pop/bwclut xd bpc dup 8 eq{pop 255}{4 eq{15}{3}ifelse}ifelse\r
-/expandfactor xd [/expandbw load/exec load dup currenttransfer exch\r
-] cvx bind settransfer iw ih bpc imat setupimageproc image}bd}if not\r
-endnoload ncolors dup 3 eq exch 4 eq or dup dup not startnoload{/nullproc{{}}def\r
-/concatutil{/exec load 7 -1 roll/exec load}bd/defsubclut{1 add getinterval\r
-def}bd/spconcattransfer{/Dclut exch def/Cclut exch def/Bclut exch def\r
-/Aclut exch def/ncompute exch ld currentcolortransfer [{Aclut ncompute}concatutil\r
-] cvx [{Bclut ncompute}concatutil ] cvx [{Cclut ncompute}concatutil\r
-] cvx [{Dclut ncompute}concatutil ] cvx setcolortransfer}bd/setuprgbcluts{\r
-/bit3x rgbclut length 3 sub def/bit1x bit3x 3 idiv def/rclut rgbclut\r
-def/gclut rclut 1 bit3x defsubclut/bclut rclut 2 bit3x defsubclut}bd}if\r
-not endnoload ncolors 3 eq dup dup not startnoload{/3compute{exch bit3x\r
-mul round cvi get 255 div}bd/doclutimage{/rgbclut xd pop setuprgbcluts\r
-/3compute rclut gclut bclut dup spconcattransfer iw ih bpc imat [\r
-setupimageproc/exec load/dup load dup ] cvx nullproc nullproc true\r
-3 colorimage}bd}if not endnoload ncolors 4 eq dup dup not startnoload{\r
-/stuffclut{cmykindex 3 -1 roll put}bd/ftoint{1 exch sub 255 mul round\r
-cvi}bd/4compute{exch bit4x mul round cvi get 255 div}bd/computecmykclut{setuprgbcluts\r
-/bit4x rgbclut length 3 idiv 4 mul 4 sub def/cmykclut bit4x 4 add\r
-string def/cclut cmykclut def/mclut cclut 1 bit4x defsubclut/yclut\r
-cclut 2 bit4x defsubclut/kclut cclut 3 bit4x defsubclut/cmykindex 0\r
-def 0 1 bit1x{dup/cmykindex exch bit1x exch sub 4 mul def 3 mul dup\r
-rclut exch get 255 div exch dup gclut exch get 255 div exch bclut exch\r
-get 255 div setrgbcolor currentcmykcolor ftoint kclut stuffclut ftoint\r
-yclut stuffclut ftoint mclut stuffclut ftoint cclut stuffclut}for}bd\r
-/doclutimage{/rgbclut xd pop invalidcolortable?{computecmykclut}if\r
-/4compute cclut mclut yclut kclut spconcattransfer iw ih bpc imat\r
-[ setupimageproc/exec load/dup load dup dup ] cvx nullproc nullproc\r
-nullproc true 4 colorimage}bd}if not endnoload ncolors 0 eq dup dup\r
-not startnoload{/lookupandstore{3 mul 3 getinterval putinterval exch\r
-3 add exch 3 copy}bd/8lookup/lookupandstore ld/4lookup{/byte 1 index\r
-def -4 bitshift lookupandstore byte 15 and lookupandstore}bd/2lookup{\r
-/byte 1 index def -6 bitshift lookupandstore byte -4 bitshift 3 and\r
-lookupandstore byte -2 bitshift 3 and lookupandstore byte 3 and lookupandstore}bd\r
-/colorexpand{mystringexp 0 rgbclut 3 copy 7 -1 roll/mylookup load\r
-forall pop pop pop pop pop}bd/createexpandstr{/mystringexp exch mystring\r
-length mul string def}bd/doclutimage{/rgbclut xd pop/mylookup bpc 8\r
-eq{3 createexpandstr/8lookup}{bpc 4 eq{6 createexpandstr/4lookup}{12\r
-createexpandstr/2lookup}ifelse}ifelse ld iw ih bpc imat [ setupimageproc\r
-/exec load/colorexpand load/exec load] cvx false 3 colorimage}bd}if\r
-not endnoload/colorimage where{pop true}{false}ifelse dup{/do24image{iw\r
-ih 8 imat setupimageproc false 3 colorimage}bd}if dup dup startnoload\r
-not{/rgbtogray{/str xd/len str length def/smlen len 3 idiv def/rstr\r
-str def/gstr str 1 len 1 sub getinterval def/bstr str 2 len 2 sub getinterval\r
-def str dup 0 1 smlen 1 sub{dup 3 mul rstr 1 index get .3 mul gstr\r
-2 index get .59 mul add bstr 3 -1 roll get .11 mul add round cvi put\r
-dup}for pop 0 smlen getinterval}bd/do24image{iw ih 8 imat [ setupimageproc\r
-/exec load/rgbtogray load/exec load ] cvx bind image}bd}if endnoload\r
-/doimage{iw ih 8 imat setupimageproc image}bd level2{dontloadlevel1\r
-restore}if level2 not{save/dontloadlevel2 xd}if/myappcolorspace/DeviceRGB\r
-def/rgbclut 0 def/doclutimage{/rgbclut xd pop bpc dup 8 eq{pop 255}{4\r
-eq{15}{3}ifelse}ifelse/hival xd [/Indexed myappcolorspace hival rgbclut]\r
-setcolorspace myimagedict dup begin/Width iw def/Height ih def/Decode\r
-[0 hival] def/ImageMatrix imat def/DataSource setupimageproc def/BitsPerComponent\r
-bpc def/Interpolate smoothflag def end image}bd/do24image{myappcolorspace\r
-setcolorspace myimagedict dup begin/Width iw def/Height ih def/Decode\r
-[0 1 0 1 0 1] def/ImageMatrix imat def/DataSource setupimageproc def\r
-/BitsPerComponent 8 def/Interpolate smoothflag def end image}bd level2\r
-not{dontloadlevel2 restore}if\r
-/NumSteps{dtransform matrix defaultmatrix idtransform Pythag currentscreen\r
-pop pop 72 exch div div}bd/FindMinSteps{v_ft 4 eq{urx startX sub abs\r
-llx startX sub abs Max ury startY sub abs lly startY sub abs Max Pythag\r
-2 3.14159265 mul mul 0}{v_ft 2 eq{endY startY sub endX startX sub Pythag\r
-endY2 startY sub endX2 startX sub Pythag gt{endY startY sub endX startX\r
-sub}{endY2 startY sub endX2 startX sub}ifelse}{endY startY sub endX\r
-startX sub}ifelse}ifelse NumSteps}bd/cxe{/v_cxe exch def}bd/cxm{pop\r
-/v_cxm exch def}bd/cxmt{pop pop}bd/cxt{pop}bd/S_eoclip{currentflat{{eoclip}stopped{dup\r
-currentflat exch sub 20 gt{([Error: PathTooComplex; OffendingCommand: eoclip]\n)print\r
-flush exit}{currentflat 2 add setflat}ifelse}{exit}ifelse}loop setflat}bd\r
-/S_clip{currentflat{{clip}stopped{dup currentflat exch sub 20 gt{([Error: PathTooComplex; OffendingCommand: clip]\n)print\r
-flush exit}{currentflat 2 add setflat}ifelse}{exit}ifelse}loop setflat}bd\r
-/S_eofill{currentflat{{eofill}stopped{dup currentflat exch sub 20\r
-gt{([Error: PathTooComplex; OffendingCommand: eofill]\n)print flush\r
-exit}{currentflat 2 add setflat}ifelse}{exit}ifelse}loop setflat}bd\r
-/gpbbx{pathbbox/ury exch def/urx exch def/lly exch def/llx exch def}bd\r
-/lineargfill{initgfill{false initgfx/distance endX startX sub endY\r
-startY sub Pythag def/incD distance Steps div def endY startY sub endX\r
-startX sub atan newpath llx lly urx ury Bx startX startY translate\r
-rotate gpbbx eGy ssg newpath llx lly urx ury Bx S_eofill sGy ssg newpath\r
-llx lly 0 ury Bx S_eofill/fillX 0 def 0 1 Steps 1 sub{stepgfx newpath\r
-fillX lly fillX incD add dup/fillX exch def ury Bx S_eofill pop}for}if}bd\r
-/radialgfill{initgfill{false initgfx/distance endX startX sub endY\r
-startY sub Pythag def/incD distance Steps div def eGy ssg newpath llx\r
-lly urx ury Bx S_eofill/distance 0 def 0 1 Steps 1 sub{stepgfx newpath\r
-startX startY distance 0 360 arc closepath distance incD add dup/distance\r
-exch def 0 rmoveto startX startY distance 0 360 arc closepath S_eofill\r
-pop}for}if}bd/ellipticgfill{initgfill{true initgfx sGy ssg newpath\r
-llx lly urx ury Bx S_eofill [ endX startX sub endY startY sub endX2\r
-startX sub endY2 startY sub startX startY ] concat Steps 1 sub -1 0{stepgfx\r
-/i exch def 0 0 moveto 0 0 i Steps div 0 360 arc fill}for}if}bd/conicalgfill{initgfill{urx\r
-startX sub abs llx startX sub abs Max ury startY sub abs lly startY\r
-sub abs Max Pythag startY endY sub startX endX sub Pythag div/radius\r
-exch def true initgfx [ endX startX sub endY startY sub startY endY\r
-sub endX startX sub startX startY ] concat/slice 180 Steps div def\r
-/startangle 0 def Steps -1 0{pop stepgfx 0 0 moveto 0 0 radius startangle\r
-neg dup slice add arc fill 0 0 moveto 0 0 radius startangle dup slice\r
-add dup/startangle exch def arc fill}for}if}bd/initgfill{gpbbx{S_eoclip}{S_clip}ifelse\r
-startX endX eq startY endY eq and sGy eGy eq or dup{sGy ssg newpath\r
-llx lly urx ury Bx S_eofill}if not}bd/initgfx{/flag exch def flag{sGy\r
-eGy/sGy exch def/eGy exch def}if eGy sGy sub abs 256 mul FindMinSteps\r
-Min 256 Min ceiling 1 Max/Steps exch def eGy sGy sub Steps div/incGy\r
-exch def sGy/mGy exch def}bd/stepgfx{mGy ssg mGy incGy add/mGy exch\r
-def}bd/linearfill{initfill{false initfx endX startX sub endY startY\r
-sub Pythag/distance exch def/incD distance Steps div def endY startY\r
-sub endX startX sub atan newpath llx lly urx ury Bx startX startY translate\r
-rotate gpbbx v_cxe 0 eq{eR eG eB setgfillrgb}{eH eS eV setgfillhsb}ifelse\r
-newpath llx lly urx ury Bx S_eofill v_cxe 0 eq{sR sG sB setgfillrgb}{sH\r
-sS sV setgfillhsb}ifelse newpath llx lly 0 ury Bx S_eofill/fillX 0\r
-def 0 1 Steps 1 sub{stepfx newpath fillX lly fillX incD add dup/fillX\r
-exch def ury Bx S_eofill pop}for}if}bd/radialfill{initfill{false initfx\r
-endX startX sub endY startY sub Pythag/distance exch def/incD distance\r
-Steps div def v_cxe 0 eq{eR eG eB setgfillrgb}{eH eS eV setgfillhsb}ifelse\r
-newpath llx lly urx ury Bx S_eofill/distance 0 def 0 1 Steps 1 sub{stepfx\r
-newpath startX startY distance 0 360 arc closepath distance incD add\r
-dup/distance exch def 0 rmoveto startX startY distance 0 360 arc closepath\r
-S_eofill pop}for}if}bind def/ellipticalfill{initfill{true initfx v_cxe\r
-0 eq{sR sG sB setgfillrgb}{sH sS sV setgfillhsb}ifelse newpath llx\r
-lly urx ury Bx S_eofill [ endX startX sub endY startY sub endX2 startX\r
-sub endY2 startY sub startX startY ] concat Steps 1 sub -1 0{stepfx\r
-/i exch def 0 0 moveto 0 0 i Steps div 0 360 arc fill}for v_cxe 0\r
-eq{sR sG sB eR eG eB/sB exch def/sG exch def/sR exch def/eB exch def\r
-/eG exch def/eR exch def}if}if}bd/conicalfill{initfill{urx startX\r
-sub abs llx startX sub abs Max ury startY sub abs lly startY sub abs\r
-Max Pythag startY endY sub startX endX sub Pythag div/radius exch def\r
-true initfx [ endX startX sub endY startY sub startY endY sub endX\r
-startX sub startX startY ] concat/slice 180 Steps div def/startangle\r
-0 def Steps -1 0{pop stepfx 0 0 moveto 0 0 radius startangle neg dup\r
-slice add arc fill 0 0 moveto 0 0 radius startangle dup slice add dup\r
-/startangle exch def arc fill}for}if}bd/initfill{gpbbx{S_eoclip}{S_clip}ifelse\r
-startX endX eq startY endY eq and v_cxe 2 ne sR eR eq sG eG eq and\r
-sB eB eq and and or dup{sR sG sB setgfillrgb newpath llx lly urx ury\r
-Bx S_eofill}if not}bd/initfx{/flag exch def v_cxe 0 eq{flag{sR sG sB\r
-eR eG eB/sB exch def/sG exch def/sR exch def/eB exch def/eG exch def\r
-/eR exch def}if eR sR sub abs 256 mul eG sG sub abs 256 mul Max eB\r
-sB sub abs 256 mul Max FindMinSteps Min 256 Min ceiling 1 Max/Steps\r
-exch def/incR eR sR sub Steps div def/incG eG sG sub Steps div def\r
-/incB eB sB sub Steps div def sR/mR exch def sG/mG exch def sB/mB\r
-exch def}{sR sG sB rgb2hsb/sV exch def/sS exch def/sH exch def eR eG\r
-eB rgb2hsb/eV exch def/eS exch def/eH exch def eH sH sub abs v_cxe\r
-1 eq{dup 0.5 gt{1 exch sub}if}{dup 0.5 lt{1 exch sub}if}ifelse 256\r
-mul eS sS sub abs 256 mul Max eV sV sub abs 256 mul Max FindMinSteps\r
-Min 256 Min ceiling 1 Max/Steps exch def v_cxe 1 eq{/incH eH sH sub\r
-dup abs 0.5 gt{dup 0 ge{1 sub}{1 add}ifelse}if Steps div def/incS eS\r
-sS sub Steps div def/incV eV sV sub Steps div def}{/incH eH sH sub\r
-dup abs 0.5 le{dup 0 ge{1 sub}{1 add}ifelse}if Steps div def/incS eS\r
-sS sub Steps div def/incV eV sV sub Steps div def}ifelse flag{/sH eH\r
-/eH sH def def/sS eS/eS sS def def/sV eV/eV sV def def/incH incH neg\r
-def/incS incS neg def/incV incV neg def}if}ifelse}bd/stepfx{v_cxe 0\r
-eq{mR mG mB setgfillrgb mR incR add/mR exch def mG incG add/mG exch\r
-def mB incB add/mB exch def}{sH sS sV setgfillhsb sH incH add dup 0\r
-le{1 add}{dup 1 ge{1 sub}if}ifelse/sH exch def sS incS add/sS exch\r
-def sV incV add/sV exch def}ifelse}bd\r
-/ar{}bd/arr{pop pop pop pop pop pop pop}bd/ae{pop pop pop pop pop\r
-pop}bd/aoa{pop}bd/apl{pop}bd/apc{}bd/aof{pop pop}bd/aafs{pop pop pop}bd\r
-/O{pop}bd/R{pop}bd/axop{pop pop pop pop}bd/g{/v_ft 0 def/v_fc 0 def\r
-/v_fm 0 def/v_fy 0 def 1 exch sub/v_fk exch def/v_fct 0 def}bd/G{\r
-/v_sc 0 def/v_sm 0 def/v_sy 0 def 1 exch sub/v_sk exch def/v_sct 0\r
-def}bd/k{/v_fk exch def/v_fy exch def/v_fm exch def/v_fc exch def/v_ft\r
-0 def/v_fct 0 def}bd/K{/v_sk exch def/v_sy exch def/v_sm exch def/v_sc\r
-exch def/v_sct 0 def}bd/Xa{/v_fb exch def/v_fg exch def/v_fr exch def\r
-/v_ft 0 def/v_fct 1 def}bd/XA{/v_sb exch def/v_sg exch def/v_sr exch\r
-def/v_sct 1 def}bd/a_tc{exch pop 1 exch sub dup 3 -1 roll exch div\r
-exch dup 4 -1 roll exch div 3 1 roll dup 5 -1 roll exch div 4 1 roll\r
-5 -1 roll exch div 4 1 roll}bd/x{a_tc k}bd/X{a_tc K}bd/Xx{0 eq{x}{pop\r
-pop Xa}ifelse}bd/XX{0 eq{X}{pop pop XA}ifelse}bd/awr{/v_wr exch def}bd\r
-/w{setlinewidth}bd/j{setlinejoin}bd/J{setlinecap}bd/d{setdash}bd/asc{pop\r
-pop J}bd/aec{pop pop J}bd/csah{pop pop pop}bd/ceah{pop pop pop}bd/cst{pop\r
-pop}bd/cdp{pop}bd/m{moveto}bd/l{lineto}bd/c{curveto}bd/Bx{4 copy 5\r
-1 roll 4 2 roll 5 -1 roll m l l l closepath}bd/Cp{Bx clip newpath}bd\r
-/a_fp{gsave v_wr 0 ne v_ft 0 eq{setfillcolor{eofill}{fill}ifelse}{v_ft\r
-1 eq{linearfill}{v_ft 2 eq{ellipticalfill}{v_ft 3 eq{radialfill}{v_ft\r
-4 eq{conicalfill}{v_ft 8 eq{lineargfill}{v_ft 9 eq{ellipticgfill}{v_ft\r
-10 eq{radialgfill}{conicalgfill}ifelse}ifelse}ifelse}ifelse}ifelse}ifelse}ifelse}ifelse\r
-grestore}bd/*u{/p_count p_count 1 add def}bd/*U{/p_count p_count 1\r
-sub def p_count 0 eq{vis_flag{p_render}{newpath}ifelse}if}bd/B{/p_render{a_fp\r
-setstrokecolor stroke}bd p_count 0 eq{vis_flag{p_render}{newpath}ifelse}if}bd\r
-/b{closepath B}bd/F{/p_render{a_fp newpath}bd p_count 0 eq{vis_flag{p_render}{newpath}ifelse}if}bd\r
-/f{closepath F}bd/S{/p_render{setstrokecolor stroke}bd p_count 0 eq{vis_flag{p_render}{newpath}ifelse}if}bd\r
-/s{closepath S}bd/H{/p_render{newpath}bd p_count 0 eq{vis_flag{p_render}{newpath}ifelse}if}bd\r
-/h{closepath H}bd/N{H}bd/n{h}bd/cag{dup 7 add/v_ft exch def dup 2\r
-eq{pop/endY2 exch def/endX2 exch def}{7 eq{pop pop/v_ft 8 def}if}ifelse\r
-/endY exch def/endX exch def/startY exch def/startX exch def/eGy exch\r
-def/sGy exch def}bd/caz{dup/v_ft exch def dup 2 eq{pop/endY2 exch def\r
-/endX2 exch def}{7 eq{pop pop/v_ft 1 def}if}ifelse/endY exch def/endX\r
-exch def/startY exch def/startX exch def/eB exch def/eG exch def/eR\r
-exch def/sB exch def/sG exch def/sR exch def}bd/cax{dup/v_ft exch def\r
-dup 2 eq{pop/endY2 exch def/endX2 exch def}{7 eq{pop pop/v_ft 1 def}if}ifelse\r
-/endY exch def/endX exch def/startY exch def/startX exch def pop pop\r
-8 3 roll pop pop/sB exch def/sG exch def/sR exch def/eB exch def/eG\r
-exch def/eR exch def}bd/axm{/endY exch def/endX exch def/startY exch\r
-def/startX exch def}bd/alyr{pop pop 1 eq{true}{false}ifelse/vis_flag\r
-exch def pop pop}bd\r
-/t{moveto show}bd/ts{moveto false charpath S}bd/tf{moveto true charpath\r
-F}bd/tb{3 copy moveto true charpath F moveto false charpath S}bd/selectfont\r
-where{pop}{/selectfont{dup type/integertype eq{exch findfont exch scalefont\r
-setfont}{exch findfont exch makefont setfont}ifelse}bd}ifelse/sf{selectfont}bd\r
-/u{}bd/U{}bd/anu{pop}bd\r
-end\r
-%%EndResource\r
-%%EndProlog\r
-%%BeginSetup\r
-save XaraStudio1Dict begin\r
-%%EndSetup\r
-0 cxe\r
-2 0 cxm\r
-1 awr\r
-0.00 0.00 0.00 XA\r
-0.250 w\r
-0 j\r
-[ ] 0 d\r
-0 J\r
-0.00 0.00 0.00 (Black) 0 1 Xx\r
-349.368 322.149 m\r
-351.024 320.493 351.024 317.805 349.368 316.149 c\r
-347.712 314.493 345.024 314.493 343.368 316.149 c\r
-341.712 317.805 341.712 320.493 343.368 322.149 c\r
-345.024 323.805 347.712 323.805 349.368 322.149 c\r
-b\r
-2 j\r
-346.017 318.750 m\r
-273.267 319.500 l\r
-S\r
-0 j\r
-347.870 285.131 m\r
-349.526 283.475 349.526 280.787 347.870 279.131 c\r
-346.214 277.475 343.526 277.475 341.870 279.131 c\r
-340.214 280.787 340.214 283.475 341.870 285.131 c\r
-343.526 286.787 346.214 286.787 347.870 285.131 c\r
-b\r
-2 j\r
-344.519 281.732 m\r
-271.769 282.482 l\r
-S\r
-0 j\r
-347.870 246.881 m\r
-349.526 245.225 349.526 242.537 347.870 240.881 c\r
-346.214 239.225 343.526 239.225 341.870 240.881 c\r
-340.214 242.537 340.214 245.225 341.870 246.881 c\r
-343.526 248.537 346.214 248.537 347.870 246.881 c\r
-b\r
-2 j\r
-344.519 243.482 m\r
-271.769 244.232 l\r
-S\r
-0 j\r
-348.398 209.870 m\r
-350.054 208.214 350.054 205.526 348.398 203.870 c\r
-346.742 202.214 344.054 202.214 342.398 203.870 c\r
-340.742 205.526 340.742 208.214 342.398 209.870 c\r
-344.054 211.526 346.742 211.526 348.398 209.870 c\r
-b\r
-2 j\r
-345.047 206.471 m\r
-272.297 207.221 l\r
-S\r
-0 j\r
-347.120 135.620 m\r
-348.776 133.964 348.776 131.276 347.120 129.620 c\r
-345.464 127.964 342.776 127.964 341.120 129.620 c\r
-339.464 131.276 339.464 133.964 341.120 135.620 c\r
-342.776 137.276 345.464 137.276 347.120 135.620 c\r
-b\r
-2 j\r
-343.769 132.221 m\r
-271.019 132.971 l\r
-S\r
-0 j\r
-349.370 98.120 m\r
-351.026 96.464 351.026 93.776 349.370 92.120 c\r
-347.714 90.464 345.026 90.464 343.370 92.120 c\r
-341.714 93.776 341.714 96.464 343.370 98.120 c\r
-345.026 99.776 347.714 99.776 349.370 98.120 c\r
-b\r
-2 j\r
-346.019 94.721 m\r
-273.269 95.471 l\r
-S\r
-0 j\r
-347.648 59.381 m\r
-349.304 57.725 349.304 55.037 347.648 53.381 c\r
-345.992 51.725 343.304 51.725 341.648 53.381 c\r
-339.992 55.037 339.992 57.725 341.648 59.381 c\r
-343.304 61.037 345.992 61.037 347.648 59.381 c\r
-b\r
-2 j\r
-344.297 55.982 m\r
-271.547 56.732 l\r
-S\r
-0 j\r
-348.398 172.370 m\r
-350.054 170.714 350.054 168.026 348.398 166.370 c\r
-346.742 164.714 344.054 164.714 342.398 166.370 c\r
-340.742 168.026 340.742 170.714 342.398 172.370 c\r
-344.054 174.026 346.742 174.026 348.398 172.370 c\r
-b\r
-2 j\r
-345.047 168.971 m\r
-272.297 169.721 l\r
-S\r
-346.017 318.750 m\r
-272.517 170.250 l\r
-S\r
-343.767 281.250 m\r
-272.517 132.750 l\r
-S\r
-343.767 243 m\r
-271.767 96 l\r
-S\r
-343.767 206.250 m\r
-272.517 57.750 l\r
-S\r
-346.017 169.500 m\r
-271.767 320.250 l\r
-S\r
-344.517 133.500 m\r
-272.517 282 l\r
-S\r
-346.767 96 m\r
-271.767 243 l\r
-S\r
-343.767 57.750 m\r
-271.017 207.750 l\r
-S\r
-0 j\r
-1.00 0.00 0.00 (Red) 0 1 Xx\r
-272.651 321.612 m\r
-273.893 321.612 274.902 320.436 274.902 318.987 c\r
-274.902 317.538 273.893 316.362 272.651 316.362 c\r
-271.409 316.362 270.400 317.538 270.400 318.987 c\r
-270.400 320.436 271.409 321.612 272.651 321.612 c\r
-b\r
-272.384 284.862 m\r
-273.626 284.862 274.635 283.686 274.635 282.237 c\r
-274.635 280.788 273.626 279.612 272.384 279.612 c\r
-271.142 279.612 270.133 280.788 270.133 282.237 c\r
-270.133 283.686 271.142 284.862 272.384 284.862 c\r
-b\r
-271.634 246.612 m\r
-272.876 246.612 273.885 245.436 273.885 243.987 c\r
-273.885 242.538 272.876 241.362 271.634 241.362 c\r
-270.392 241.362 269.383 242.538 269.383 243.987 c\r
-269.383 245.436 270.392 246.612 271.634 246.612 c\r
-b\r
-271.901 209.112 m\r
-273.143 209.112 274.152 207.936 274.152 206.487 c\r
-274.152 205.038 273.143 203.862 271.901 203.862 c\r
-270.659 203.862 269.650 205.038 269.650 206.487 c\r
-269.650 207.936 270.659 209.112 271.901 209.112 c\r
-b\r
-271.634 172.362 m\r
-272.876 172.362 273.885 171.186 273.885 169.737 c\r
-273.885 168.288 272.876 167.112 271.634 167.112 c\r
-270.392 167.112 269.383 168.288 269.383 169.737 c\r
-269.383 171.186 270.392 172.362 271.634 172.362 c\r
-b\r
-271.901 134.389 m\r
-273.143 134.389 274.152 133.213 274.152 131.764 c\r
-274.152 130.315 273.143 129.139 271.901 129.139 c\r
-270.659 129.139 269.650 130.315 269.650 131.764 c\r
-269.650 133.213 270.659 134.389 271.901 134.389 c\r
-b\r
-270.884 98.389 m\r
-272.126 98.389 273.135 97.213 273.135 95.764 c\r
-273.135 94.315 272.126 93.139 270.884 93.139 c\r
-269.642 93.139 268.633 94.315 268.633 95.764 c\r
-268.633 97.213 269.642 98.389 270.884 98.389 c\r
-b\r
-273.401 60.139 m\r
-274.643 60.139 275.652 58.963 275.652 57.514 c\r
-275.652 56.065 274.643 54.889 273.401 54.889 c\r
-272.159 54.889 271.150 56.065 271.150 57.514 c\r
-271.150 58.963 272.159 60.139 273.401 60.139 c\r
-b\r
-2 j\r
-0.00 0.00 0.00 (Black) 0 1 Xx\r
-/Times-Roman 14 sf (y) 352.380 316.237 t /Times-Roman 7 sf (0) 360.665 314.838 t ( ) 365.119 320.856 t\r
-/Times-Roman 14 sf (=) 367.344 316.237 t (s) 379.074 316.237 t /Times-Roman 7 sf (0) 386.368 314.838 t\r
-/Times-Roman 14 sf ( ) 390.822 316.237 t (+) 395.272 316.237 t ( ) 407.002 316.237 t (w) 411.452 316.237\r
-t /Times-Roman 7 sf (0) 422.902 320.856 t /Times-Roman 14 sf (*) 427.356 316.237 t (l) 434.356 316.237\r
-t /Times-Roman 7 sf (0) 438.245 314.838 t /Times-Roman 14 sf (y) 352.070 279.487 t /Times-Roman 7 sf (1)\r
-360.355 278.088 t ( ) 364.809 284.106 t /Times-Roman 14 sf (=) 367.034 279.487 t (s) 378.764 279.487 t\r
-/Times-Roman 7 sf (1) 386.058 278.088 t /Times-Roman 14 sf ( ) 390.512 279.487 t (+) 394.962 279.487 t\r
-( ) 406.692 279.487 t (w) 411.142 279.487 t /Times-Roman 7 sf (1) 422.592 284.106 t /Times-Roman 14 sf\r
-(*) 427.046 279.487 t (l) 434.046 279.487 t /Times-Roman 7 sf (1) 437.935 278.088 t /Times-Roman 14 sf\r
-(y) 354.116 241.237 t /Times-Roman 7 sf (2) 362.401 239.838 t ( ) 366.855 239.838 t /Times-Roman 14 sf\r
-(=) 369.080 241.237 t (s) 380.810 241.237 t /Times-Roman 7 sf (2) 388.104 239.838 t /Times-Roman 14 sf\r
-( ) 392.558 241.237 t (+) 397.008 241.237 t ( ) 408.738 241.237 t (w) 413.188 241.237 t /Times-Roman 7\r
-sf (2) 424.638 245.856 t /Times-Roman 14 sf (*) 429.092 241.237 t (l) 436.092 241.237 t /Times-Roman 7\r
-sf (2) 439.981 239.838 t /Times-Roman 14 sf (y) 354.320 202.237 t /Times-Roman 7 sf (3) 362.605 200.838\r
-t ( ) 367.059 206.856 t /Times-Roman 14 sf (=) 369.284 202.237 t (s) 381.014 202.237 t /Times-Roman 7\r
-sf (3) 388.308 200.838 t /Times-Roman 14 sf ( ) 392.762 202.237 t (+) 397.212 202.237 t ( ) 408.942 202.237\r
-t (w) 413.392 202.237 t /Times-Roman 7 sf (3) 424.842 206.856 t /Times-Roman 14 sf (*) 429.296 202.237\r
-t (l) 436.296 202.237 t /Times-Roman 7 sf (3) 440.185 200.838 t /Times-Roman 14 sf (y) 356.058 168.037\r
-t /Times-Roman 7 sf (4) 364.343 166.638 t ( ) 368.797 172.656 t /Times-Roman 14 sf (=) 371.022 168.037\r
-t (s) 382.752 168.037 t /Times-Roman 7 sf (0) 390.046 166.638 t /Times-Roman 14 sf ( ) 394.500 168.037\r
-t (-) 398.950 168.037 t ( ) 404.002 168.037 t (w) 408.452 168.037 t /Times-Roman 7 sf (0) 419.902 172.656\r
-t /Times-Roman 14 sf (*) 424.356 168.037 t (l) 431.356 168.037 t /Times-Roman 7 sf (0) 435.245 166.638\r
-t /Times-Roman 14 sf (y) 355.490 130.537 t /Times-Roman 7 sf (5) 363.775 129.138 t ( ) 368.229 135.156\r
-t /Times-Roman 14 sf (=) 370.454 130.537 t (s) 382.184 130.537 t /Times-Roman 7 sf (1) 389.478 129.138\r
-t /Times-Roman 14 sf ( ) 393.932 130.537 t (-) 398.382 130.537 t ( ) 403.434 130.537 t (w) 407.884 130.537\r
-t /Times-Roman 7 sf (1) 419.334 135.156 t /Times-Roman 14 sf (*) 423.788 130.537 t (l) 430.788 130.537\r
-t /Times-Roman 7 sf (1) 434.677 129.138 t /Times-Roman 14 sf (y) 355.820 92.287 t /Times-Roman 7 sf (6)\r
-364.105 90.888 t ( ) 368.559 96.906 t /Times-Roman 14 sf (=) 370.784 92.287 t (s) 382.514 92.287 t /Times-Roman\r
-7 sf (2) 389.808 90.888 t /Times-Roman 14 sf ( ) 394.262 92.287 t (-) 399.712 92.287 t ( ) 407.442 92.287\r
-t (w) 411.892 92.287 t /Times-Roman 7 sf (2) 423.342 96.906 t /Times-Roman 14 sf (*) 427.796 92.287 t\r
-(l) 434.796 92.287 t /Times-Roman 7 sf (2) 438.685 90.888 t /Times-Roman 14 sf (y) 356.570 54.037 t /Times-Roman\r
-7 sf (7) 364.855 52.638 t ( ) 369.309 58.656 t /Times-Roman 14 sf (=) 371.534 54.037 t (s) 383.264 54.037\r
-t /Times-Roman 7 sf (3) 390.558 52.638 t /Times-Roman 14 sf ( ) 395.012 54.037 t (-) 401.462 54.037 t\r
-( ) 408.192 54.037 t (w) 412.642 54.037 t /Times-Roman 7 sf (3) 424.092 58.656 t /Times-Roman 14 sf (*)\r
-428.546 54.037 t (l) 435.546 54.037 t /Times-Roman 7 sf (3) 439.435 52.638 t 0 j\r
-232.851 321.881 m\r
-234.507 320.225 234.507 317.537 232.851 315.881 c\r
-231.195 314.225 228.507 314.225 226.851 315.881 c\r
-225.195 317.537 225.195 320.225 226.851 321.881 c\r
-228.507 323.537 231.195 323.537 232.851 321.881 c\r
-b\r
-2 j\r
-229.500 318.482 m\r
-156.750 319.232 l\r
-S\r
-0 j\r
-1.00 0.00 0.00 (Red) 0 1 Xx\r
-156.134 321.344 m\r
-157.376 321.344 158.385 320.168 158.385 318.719 c\r
-158.385 317.270 157.376 316.094 156.134 316.094 c\r
-154.892 316.094 153.883 317.270 153.883 318.719 c\r
-153.883 320.168 154.892 321.344 156.134 321.344 c\r
-b\r
-0.00 0.00 0.00 (Black) 0 1 Xx\r
-233.601 285.881 m\r
-235.257 284.225 235.257 281.537 233.601 279.881 c\r
-231.945 278.225 229.257 278.225 227.601 279.881 c\r
-225.945 281.537 225.945 284.225 227.601 285.881 c\r
-229.257 287.537 231.945 287.537 233.601 285.881 c\r
-b\r
-2 j\r
-230.250 282.482 m\r
-157.500 283.232 l\r
-S\r
-0 j\r
-1.00 0.00 0.00 (Red) 0 1 Xx\r
-156.884 285.344 m\r
-158.126 285.344 159.135 284.168 159.135 282.719 c\r
-159.135 281.270 158.126 280.094 156.884 280.094 c\r
-155.642 280.094 154.633 281.270 154.633 282.719 c\r
-154.633 284.168 155.642 285.344 156.884 285.344 c\r
-b\r
-0.00 0.00 0.00 (Black) 0 1 Xx\r
-234.351 247.631 m\r
-236.007 245.975 236.007 243.287 234.351 241.631 c\r
-232.695 239.975 230.007 239.975 228.351 241.631 c\r
-226.695 243.287 226.695 245.975 228.351 247.631 c\r
-230.007 249.287 232.695 249.287 234.351 247.631 c\r
-b\r
-2 j\r
-231 244.232 m\r
-158.250 244.982 l\r
-S\r
-0 j\r
-1.00 0.00 0.00 (Red) 0 1 Xx\r
-157.634 247.094 m\r
-158.876 247.094 159.885 245.918 159.885 244.469 c\r
-159.885 243.020 158.876 241.844 157.634 241.844 c\r
-156.392 241.844 155.383 243.020 155.383 244.469 c\r
-155.383 245.918 156.392 247.094 157.634 247.094 c\r
-b\r
-0.00 0.00 0.00 (Black) 0 1 Xx\r
-233.601 211.370 m\r
-235.257 209.714 235.257 207.026 233.601 205.370 c\r
-231.945 203.714 229.257 203.714 227.601 205.370 c\r
-225.945 207.026 225.945 209.714 227.601 211.370 c\r
-229.257 213.026 231.945 213.026 233.601 211.370 c\r
-b\r
-2 j\r
-230.250 207.971 m\r
-157.500 208.721 l\r
-S\r
-0 j\r
-1.00 0.00 0.00 (Red) 0 1 Xx\r
-156.884 210.833 m\r
-158.126 210.833 159.135 209.657 159.135 208.208 c\r
-159.135 206.759 158.126 205.583 156.884 205.583 c\r
-155.642 205.583 154.633 206.759 154.633 208.208 c\r
-154.633 209.657 155.642 210.833 156.884 210.833 c\r
-b\r
-0.00 0.00 0.00 (Black) 0 1 Xx\r
-232.851 173.381 m\r
-234.507 171.725 234.507 169.037 232.851 167.381 c\r
-231.195 165.725 228.507 165.725 226.851 167.381 c\r
-225.195 169.037 225.195 171.725 226.851 173.381 c\r
-228.507 175.037 231.195 175.037 232.851 173.381 c\r
-b\r
-2 j\r
-229.500 169.982 m\r
-156.750 170.732 l\r
-S\r
-0 j\r
-1.00 0.00 0.00 (Red) 0 1 Xx\r
-156.134 172.844 m\r
-157.376 172.844 158.385 171.668 158.385 170.219 c\r
-158.385 168.770 157.376 167.594 156.134 167.594 c\r
-154.892 167.594 153.883 168.770 153.883 170.219 c\r
-153.883 171.668 154.892 172.844 156.134 172.844 c\r
-b\r
-0.00 0.00 0.00 (Black) 0 1 Xx\r
-234.351 135.881 m\r
-236.007 134.225 236.007 131.537 234.351 129.881 c\r
-232.695 128.225 230.007 128.225 228.351 129.881 c\r
-226.695 131.537 226.695 134.225 228.351 135.881 c\r
-230.007 137.537 232.695 137.537 234.351 135.881 c\r
-b\r
-2 j\r
-231 132.482 m\r
-158.250 133.232 l\r
-S\r
-0 j\r
-1.00 0.00 0.00 (Red) 0 1 Xx\r
-157.634 135.344 m\r
-158.876 135.344 159.885 134.168 159.885 132.719 c\r
-159.885 131.270 158.876 130.094 157.634 130.094 c\r
-156.392 130.094 155.383 131.270 155.383 132.719 c\r
-155.383 134.168 156.392 135.344 157.634 135.344 c\r
-b\r
-0.00 0.00 0.00 (Black) 0 1 Xx\r
-233.071 98.381 m\r
-234.727 96.725 234.727 94.037 233.071 92.381 c\r
-231.415 90.725 228.727 90.725 227.071 92.381 c\r
-225.415 94.037 225.415 96.725 227.071 98.381 c\r
-228.727 100.037 231.415 100.037 233.071 98.381 c\r
-b\r
-2 j\r
-229.720 94.982 m\r
-156.970 95.732 l\r
-S\r
-0 j\r
-1.00 0.00 0.00 (Red) 0 1 Xx\r
-156.354 97.844 m\r
-157.596 97.844 158.605 96.668 158.605 95.219 c\r
-158.605 93.770 157.596 92.594 156.354 92.594 c\r
-155.112 92.594 154.103 93.770 154.103 95.219 c\r
-154.103 96.668 155.112 97.844 156.354 97.844 c\r
-b\r
-0.00 0.00 0.00 (Black) 0 1 Xx\r
-233.601 59.870 m\r
-235.257 58.214 235.257 55.526 233.601 53.870 c\r
-231.945 52.214 229.257 52.214 227.601 53.870 c\r
-225.945 55.526 225.945 58.214 227.601 59.870 c\r
-229.257 61.526 231.945 61.526 233.601 59.870 c\r
-b\r
-2 j\r
-230.250 56.471 m\r
-157.500 57.221 l\r
-S\r
-0 j\r
-1.00 0.00 0.00 (Red) 0 1 Xx\r
-156.884 59.333 m\r
-158.126 59.333 159.135 58.157 159.135 56.708 c\r
-159.135 55.259 158.126 54.083 156.884 54.083 c\r
-155.642 54.083 154.633 55.259 154.633 56.708 c\r
-154.633 58.157 155.642 59.333 156.884 59.333 c\r
-b\r
-0.00 0.00 0.00 (Black) 0 1 Xx\r
-120.881 321.881 m\r
-122.537 320.225 122.537 317.537 120.881 315.881 c\r
-119.225 314.225 116.537 314.225 114.881 315.881 c\r
-113.225 317.537 113.225 320.225 114.881 321.881 c\r
-116.537 323.537 119.225 323.537 120.881 321.881 c\r
-b\r
-2 j\r
-117.530 318.482 m\r
-44.780 319.232 l\r
-S\r
-0 j\r
-1.00 0.00 0.00 (Red) 0 1 Xx\r
-44.164 321.344 m\r
-45.406 321.344 46.415 320.168 46.415 318.719 c\r
-46.415 317.270 45.406 316.094 44.164 316.094 c\r
-42.922 316.094 41.913 317.270 41.913 318.719 c\r
-41.913 320.168 42.922 321.344 44.164 321.344 c\r
-b\r
-0.00 0.00 0.00 (Black) 0 1 Xx\r
-120.351 285.131 m\r
-122.007 283.475 122.007 280.787 120.351 279.131 c\r
-118.695 277.475 116.007 277.475 114.351 279.131 c\r
-112.695 280.787 112.695 283.475 114.351 285.131 c\r
-116.007 286.787 118.695 286.787 120.351 285.131 c\r
-b\r
-2 j\r
-117 281.732 m\r
-44.250 282.482 l\r
-S\r
-0 j\r
-1.00 0.00 0.00 (Red) 0 1 Xx\r
-43.634 284.594 m\r
-44.876 284.594 45.885 283.418 45.885 281.969 c\r
-45.885 280.520 44.876 279.344 43.634 279.344 c\r
-42.392 279.344 41.383 280.520 41.383 281.969 c\r
-41.383 283.418 42.392 284.594 43.634 284.594 c\r
-b\r
-0.00 0.00 0.00 (Black) 0 1 Xx\r
-120.131 246.131 m\r
-121.787 244.475 121.787 241.787 120.131 240.131 c\r
-118.475 238.475 115.787 238.475 114.131 240.131 c\r
-112.475 241.787 112.475 244.475 114.131 246.131 c\r
-115.787 247.787 118.475 247.787 120.131 246.131 c\r
-b\r
-2 j\r
-116.780 242.732 m\r
-44.030 243.482 l\r
-S\r
-0 j\r
-1.00 0.00 0.00 (Red) 0 1 Xx\r
-43.414 245.594 m\r
-44.656 245.594 45.665 244.418 45.665 242.969 c\r
-45.665 241.520 44.656 240.344 43.414 240.344 c\r
-42.172 240.344 41.163 241.520 41.163 242.969 c\r
-41.163 244.418 42.172 245.594 43.414 245.594 c\r
-b\r
-0.00 0.00 0.00 (Black) 0 1 Xx\r
-119.601 209.870 m\r
-121.257 208.214 121.257 205.526 119.601 203.870 c\r
-117.945 202.214 115.257 202.214 113.601 203.870 c\r
-111.945 205.526 111.945 208.214 113.601 209.870 c\r
-115.257 211.526 117.945 211.526 119.601 209.870 c\r
-b\r
-2 j\r
-116.250 206.471 m\r
-43.500 207.221 l\r
-S\r
-0 j\r
-1.00 0.00 0.00 (Red) 0 1 Xx\r
-42.884 209.333 m\r
-44.126 209.333 45.135 208.157 45.135 206.708 c\r
-45.135 205.259 44.126 204.083 42.884 204.083 c\r
-41.642 204.083 40.633 205.259 40.633 206.708 c\r
-40.633 208.157 41.642 209.333 42.884 209.333 c\r
-b\r
-0.00 0.00 0.00 (Black) 0 1 Xx\r
-120.351 172.631 m\r
-122.007 170.975 122.007 168.287 120.351 166.631 c\r
-118.695 164.975 116.007 164.975 114.351 166.631 c\r
-112.695 168.287 112.695 170.975 114.351 172.631 c\r
-116.007 174.287 118.695 174.287 120.351 172.631 c\r
-b\r
-2 j\r
-117 169.232 m\r
-44.250 169.982 l\r
-S\r
-0 j\r
-1.00 0.00 0.00 (Red) 0 1 Xx\r
-43.634 172.094 m\r
-44.876 172.094 45.885 170.918 45.885 169.469 c\r
-45.885 168.020 44.876 166.844 43.634 166.844 c\r
-42.392 166.844 41.383 168.020 41.383 169.469 c\r
-41.383 170.918 42.392 172.094 43.634 172.094 c\r
-b\r
-0.00 0.00 0.00 (Black) 0 1 Xx\r
-121.101 135.131 m\r
-122.757 133.475 122.757 130.787 121.101 129.131 c\r
-119.445 127.475 116.757 127.475 115.101 129.131 c\r
-113.445 130.787 113.445 133.475 115.101 135.131 c\r
-116.757 136.787 119.445 136.787 121.101 135.131 c\r
-b\r
-2 j\r
-117.750 131.732 m\r
-45 132.482 l\r
-S\r
-0 j\r
-1.00 0.00 0.00 (Red) 0 1 Xx\r
-44.384 134.594 m\r
-45.626 134.594 46.635 133.418 46.635 131.969 c\r
-46.635 130.520 45.626 129.344 44.384 129.344 c\r
-43.142 129.344 42.133 130.520 42.133 131.969 c\r
-42.133 133.418 43.142 134.594 44.384 134.594 c\r
-b\r
-0.00 0.00 0.00 (Black) 0 1 Xx\r
-120.881 98.381 m\r
-122.537 96.725 122.537 94.037 120.881 92.381 c\r
-119.225 90.725 116.537 90.725 114.881 92.381 c\r
-113.225 94.037 113.225 96.725 114.881 98.381 c\r
-116.537 100.037 119.225 100.037 120.881 98.381 c\r
-b\r
-2 j\r
-117.530 94.982 m\r
-44.780 95.732 l\r
-S\r
-0 j\r
-1.00 0.00 0.00 (Red) 0 1 Xx\r
-44.164 97.844 m\r
-45.406 97.844 46.415 96.668 46.415 95.219 c\r
-46.415 93.770 45.406 92.594 44.164 92.594 c\r
-42.922 92.594 41.913 93.770 41.913 95.219 c\r
-41.913 96.668 42.922 97.844 44.164 97.844 c\r
-b\r
-0.00 0.00 0.00 (Black) 0 1 Xx\r
-122.381 60.131 m\r
-124.037 58.475 124.037 55.787 122.381 54.131 c\r
-120.725 52.475 118.037 52.475 116.381 54.131 c\r
-114.725 55.787 114.725 58.475 116.381 60.131 c\r
-118.037 61.787 120.725 61.787 122.381 60.131 c\r
-b\r
-2 j\r
-119.030 56.732 m\r
-46.280 57.482 l\r
-S\r
-0 j\r
-1.00 0.00 0.00 (Red) 0 1 Xx\r
-45.664 59.594 m\r
-46.906 59.594 47.915 58.418 47.915 56.969 c\r
-47.915 55.520 46.906 54.344 45.664 54.344 c\r
-44.422 54.344 43.413 55.520 43.413 56.969 c\r
-43.413 58.418 44.422 59.594 45.664 59.594 c\r
-b\r
-2 j\r
-230.250 319.500 m\r
-157.500 245.250 l\r
-S\r
-229.500 282.750 m\r
-156 208.500 l\r
-S\r
-231 243.750 m\r
-155.250 318.750 l\r
-S\r
-231 208.500 m\r
-159.750 283.500 l\r
-S\r
-231 96.750 m\r
-156 170.250 l\r
-S\r
-228.750 168 m\r
-155.250 94.500 l\r
-S\r
-231 132.750 m\r
-157.500 57.750 l\r
-S\r
-229.500 57 m\r
-157.500 132.750 l\r
-S\r
-118.500 318.750 m\r
-44.250 282 l\r
-S\r
-117.750 282 m\r
-43.500 319.500 l\r
-S\r
-116.250 242.250 m\r
-42.750 206.250 l\r
-S\r
-117 207.750 m\r
-44.250 244.500 l\r
-S\r
-116.250 171 m\r
-43.500 132.750 l\r
-S\r
-117.750 132.750 m\r
-44.250 168.750 l\r
-S\r
-117.750 95.250 m\r
-45.750 57.750 l\r
-S\r
-118.500 57 m\r
-44.250 95.250 l\r
-S\r
-0.00 0.00 0.00 (Black) 0 1 Xx\r
-/Times-Roman 16 sf (+) 235.642 331.309 t (w) 249.048 331.309 t /Times-Roman 8 sf (2) 262.134 336.588 t\r
-(*) 267.224 336.588 t (0) 271.224 336.588 t /Times-Roman 16 sf (+) 231.182 296.809 t (w) 244.588 296.809\r
-t /Times-Roman 8 sf (2) 257.674 302.088 t (*) 262.764 302.088 t (1) 266.764 302.088 t /Times-Roman 16\r
-sf (-) 234.192 260.809 t (w) 239.965 260.809 t /Times-Roman 8 sf (2) 253.051 266.088 t (*) 258.141 266.088\r
-t (0) 262.141 266.088 t /Times-Roman 16 sf (-) 233.442 220.625 t (w) 239.215 220.625 t /Times-Roman 8\r
-sf (2) 252.301 225.904 t (*) 257.391 225.904 t (1) 261.391 225.904 t /Times-Roman 16 sf (+) 231 183.875\r
-t (w) 244.406 183.875 t /Times-Roman 8 sf (2) 257.492 189.154 t (*) 262.582 189.154 t (0) 266.582 189.154\r
-t /Times-Roman 16 sf (+) 230.432 146.809 t (w) 243.838 146.809 t /Times-Roman 8 sf (2) 256.924 152.088\r
-t (*) 262.014 152.088 t (1) 266.014 152.088 t /Times-Roman 16 sf (-) 231.942 110.059 t (w) 237.715 110.059\r
-t /Times-Roman 8 sf (2) 250.801 115.338 t (*) 255.891 115.338 t (0) 259.891 115.338 t /Times-Roman 16\r
-sf (-) 235.610 69.559 t (w) 241.383 69.559 t /Times-Roman 8 sf (2) 254.469 74.838 t (*) 259.559 74.838\r
-t (1) 263.559 74.838 t /Times-Roman 16 sf (+) 116.601 332.649 t (w) 130.007 332.649 t /Times-Roman 8 sf\r
-(4) 143.093 337.928 t (*) 148.183 337.928 t (0) 152.183 337.928 t /Times-Roman 16 sf (-) 119.601 297.399\r
-t (w) 125.374 297.399 t /Times-Roman 8 sf (4) 138.460 302.678 t (*) 143.550 302.678 t (0) 147.550 302.678\r
-t /Times-Roman 16 sf (+) 115.946 260.592 t (w) 129.352 260.592 t /Times-Roman 8 sf (4) 142.438 265.871\r
-t (*) 147.528 265.871 t (0) 151.528 265.871 t /Times-Roman 16 sf (+) 115.196 185.592 t (w) 128.602 185.592\r
-t /Times-Roman 8 sf (4) 141.688 190.871 t (*) 146.778 190.871 t (0) 150.778 190.871 t /Times-Roman 16\r
-sf (+) 114.446 111.342 t (w) 127.852 111.342 t /Times-Roman 8 sf (4) 140.938 116.621 t (*) 146.028 116.621\r
-t (0) 150.028 116.621 t /Times-Roman 16 sf (-) 118.185 223.842 t (w) 123.958 223.842 t /Times-Roman 8\r
-sf (4) 137.044 229.121 t (*) 142.134 229.121 t (0) 146.134 229.121 t /Times-Roman 16 sf (-) 118.935 149.592\r
-t (w) 124.708 149.592 t /Times-Roman 8 sf (4) 137.794 154.871 t (*) 142.884 154.871 t (0) 146.884 154.871\r
-t /Times-Roman 16 sf (-) 118.935 76.092 t (w) 124.708 76.092 t /Times-Roman 8 sf (4) 137.794 81.371 t\r
-(*) 142.884 81.371 t (0) 146.884 81.371 t 1.00 0.00 0.00 (Red) 0 1 Xx\r
-271.851 319.149 m\r
-229.851 318.399 l\r
-S\r
-271.851 281.649 m\r
-232.101 282.399 l\r
-S\r
-271.101 243.399 m\r
-230.601 244.149 l\r
-S\r
-271.851 205.899 m\r
-231.351 206.649 l\r
-S\r
-271.851 169.899 m\r
-229.851 171.399 l\r
-S\r
-271.851 132.399 m\r
-231.351 133.149 l\r
-S\r
-271.851 95.649 m\r
-229.851 94.899 l\r
-S\r
-230.601 55.149 m\r
-273.351 57.399 l\r
-S\r
-156.351 318.399 m\r
-119.601 318.399 l\r
-S\r
-157.101 281.649 m\r
-116.601 281.649 l\r
-S\r
-157.851 243.399 m\r
-116.601 242.649 l\r
-S\r
-157.101 208.149 m\r
-116.601 206.649 l\r
-S\r
-156.351 170.649 m\r
-118.101 169.149 l\r
-S\r
-157.851 133.899 m\r
-118.101 134.649 l\r
-S\r
-156.351 94.149 m\r
-118.101 95.649 l\r
-S\r
-157.851 56.649 m\r
-119.601 56.649 l\r
-S\r
-0.00 0.00 0.00 (Black) 0 1 Xx\r
-/Times-Roman 14 sf (0) 285.351 326.649 t (2) 286.851 292.899 t (4) 285.351 256.899 t (6) 283.851 220.149\r
-t (1) 284.601 181.149 t (3) 283.851 139.899 t (5) 283.101 100.899 t (7) 284.601 65.649 t (0) 165.351 326.649\r
-t (4) 165.351 286.149 t (2) 172.101 247.899 t (6) 169.101 211.149 t (1) 168.351 181.149 t (5) 168.351\r
-139.899 t (3) 170.601 99.399 t (7) 175.101 61.149 t (0) 73.851 325.899 t (4) 75.351 285.399 t (2) 74.601\r
-250.149 t (6) 78.351 211.149 t (1) 76.101 175.149 t (5) 76.851 137.649 t (3) 79.101 106.149 t (7) 78.351\r
-60.399 t (0) 6.351 313.899 t (0) 15.258 313.899 t (0) 24.165 313.899 t (1) 7.101 276.399 t (0) 16.008\r
-276.399 t (0) 24.915 276.399 t (0) 6.351 239.649 t (1) 15.258 239.649 t (0) 24.165 239.649 t (1) 7.851\r
-202.149 t (1) 16.758 202.149 t (0) 25.665 202.149 t (0) 9.351 165.399 t (0) 18.258 165.399 t (1) 27.165\r
-165.399 t (1) 9.351 127.149 t (0) 18.258 127.149 t (1) 27.165 127.149 t (0) 9.351 89.649 t (1) 18.258\r
-89.649 t (1) 27.165 89.649 t (1) 8.601 52.899 t (1) 17.508 52.899 t (1) 26.415 52.899 t 1.00 0.00 0.00\r
-(Red) 0 1 Xx\r
-85.101 45.399 m\r
-194.601 34.149 l\r
-292.851 43.149 l\r
-S\r
-0.00 0.00 0.00 (Black) 0 1 Xx\r
-(l) 178.851 15.399 t (o) 182.740 15.399 t (g) 191.305 15.399 t ( ) 200.192 15.399 t (n) 204.642 15.399\r
-t (V) 163.101 357.399 t (s) 172.678 357.399 t (t) 179.972 357.399 t (u) 185.461 357.399 t (p) 194.334\r
-357.399 t ( ) 203.221 357.399 t (v) 207.671 357.399 t (e) 215.956 357.399 t (l) 224.569 357.399 t (i)\r
-228.458 357.399 t (k) 232.347 357.399 t (o) 239.956 357.399 t (s) 248.521 357.399 t (t) 255.815 357.399\r
-t (i) 261.304 357.399 t ( ) 265.193 357.399 t (8) 269.643 357.399 t end restore\r
-%%PageTrailer\r
-showpage\r
-%%Trailer\r
-%%EOF\r