Mercurial > hg > Papers > 2008 > kono-ieice-vld
changeset 0:685b35adf419
Initial revision
author | kono |
---|---|
date | Thu, 06 Mar 2008 19:49:25 +0900 |
parents | |
children | 77658ee63839 35b71ac6ce17 |
files | 0.tex 00.tex 1.tex 10.tex 2.tex 3.tex 4.tex 5.tex 6.tex 7.tex 8.tex 9.tex Makefile abstract-e.tex abstract-e.tex.aux abstract.tex abstract.tex.aux amdhal.dat amdhal.pl author-e.tex.aux fig/Reflection.jpg fig/amdahl.eps fig/amdahl.jpg fig/amdhal.tex fig/cell.eps fig/code.eps fig/code.graffle fig/code.jpg fig/meta.jpg ieice.aux ieice.bbl ieice.blg ieice.dvi ieice.log ieice.pdf ieice.tex ieicej.cls jsss.aux jsss.dvi jsss.log jsss.tex jsss00.tex main.log main.tex manycore.html manycore.ind ohp.tex ohp00.tex presentation/manycore.html presentation/manycore.ind title-e.tex title-e.tex.aux title.aux title.tex trcover.tex verification.mm vld.idea |
diffstat | 56 files changed, 14699 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/0.tex Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,10 @@ +\input{1} % Multi core system +\input{2} % Many Core 上のプログラムの特徴 +\input{3} % Many Core 上のプログラムの作り方 +\input{4} % Continuation based C +\input{5} % CbCでのCellのプログラムの流れ +\input{6} % CbCでのCellのプログラムの検証 +\input{7} % 本手法の利点と欠点 +\input{8} % 学生による実際の実装の現状 +\input{9} % CbCを用いた検証手法と他の手法との比較 +\input{10} % まとめ
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/00.tex Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,30 @@ +\documentclass[12pt]{article} %%%%% preamble %%%%% +\usepackage[dvipdfm]{graphicx} + +%\textwidth 16.3cm % the text frame size +%\textheight 23cm +%\oddsidemargin 5mm % for centering +%\evensidemargin 13mm % for centering +%\topmargin 1mm +%\pagestyle{empty} +\pagestyle{plain} +\begin{document} %%%%% the main routine begins here %%%%% +%\baselinestretch 2 +%\flushbottom +%\large % character size +%\setlength{\baselineskip}{1cm} % line spacing +\bibliographystyle{jplain} % for bibliography +\input{title} % title, abstract +\maketitle +\begin{quote} +\input{abstract} +\end{quote} +%%%%\tableofcontents %% contents, lists +%%%%\listoffigures +%%%%\listoftables +%\pagenumbering{arabic} + +\input{0} % sections + +\bibliography{ref} +\end{document}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/1.tex Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,34 @@ + +\section{ Multi core system} + +複数のCPUを載せたコンピュータは昔から使われて来たが、最近の +傾向は、一つのChipに複数のCPUコアを載せたものの登場である。 +従来のマルチプロセッサは同期をサポートしたキャッシュを経由し +メインメモリにアクセスすることが多いが、最近開発されたMulti +Core では、CPU間の通信に特別なポートを用意している。 +例えば、IntelはQuick Pathと言う通信ポートががある。 +これにより、メインメモリへのアクセスによる競合を避けることが +できる。しかし、その分、複雑なプログラミングが必要となる。 + +Cell Broadband Engine\cite{Cell} は、SCEIとIBMによって開発された +PS3ゲーム +機用のCPUであり、2 thread のPPU(PowerPC Unit)と、8個のSPU (Synergetic +Processing Unit) を持つ(図\ref{cellarch})。本研究で用いたPS3Linux (FedoreCore 6) +では、6個のSPUを使うことが出来る。SPUはそれぞれ256kbのローカル +メモリを持ち、バスに負担をかけることなく並列に計算を進めること +が出来る。SPUからメインメモリへは、SPUの機械語から直接アクセス +することは出来ず、CellのMFC(Memory Flow Controller)へDMA +(Direct Memory Access) 命令を送ることで行われる。 +SPUはグラフィックスに適した、4つの固定小数点、浮動小数点を同時に +演算する命令などを持ち、PPUに比べて高速な演算が可能であり、 +ほとんどの演算をSPU上で進めることが推奨されている。 + +\begin{figure}[htb] +\begin{center} +\includegraphics[width=6cm]{fig/cell.eps} +\caption{cellarch} +\end{center} +\label{cellarch} +\end{figure} + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/10.tex Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,20 @@ +\section{ まとめ} + +May Core Architecture のプログラムを作成する手法として、 +シーケンシャルなCの記述を、CbCに分解する手法を提案し実践してみた。 +また、その手法に対するテスト及び検証法について述べた。 + +CbCでは、モデル検査部と実装部分を混在し、同時にプログラムすることが +出来るので、並列実行部分を作成しながら、それをテストするための +モデル検査部を作成していくことが可能である。 + +現在のモデル検査部で、SPIN と Java Path Finder の中間的な性能を +得ることが出来ているが、より高性能なアルゴリズムを実装する必要が +ある。 + +Cerium Rendering Engine はCell上で動作しているが、テスト及び +モデル検査は行っていないので、これらを実装して、実際の効果を +調べることが必要である。 + + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2.tex Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,144 @@ +\section{ Many Core 上のプログラムの特徴} + +従来の逐次型のプログラムでは、Many Coreの性能を十分に引き出す +ことは出来ない。ここでは、その性能を活かすMany Core プログラム +の特徴について考察する。ここでは、{\tt 定常的な並列度の必要性、 +データ並列、パイプライン実行、 +プログラムとデータの分割、 +同期の問題、 +マルチスレッド、 +デバッグ}に関して考察を行う。 + +\subsection{ 定常的な並列度の必要性} + +並列実行にはAmdahl則\cite{java-conncurrecy}があり、プログラムの並列化率が +低ければ、その性能を活かすことは出来ない。0.8 程度の並列化 +率では、6CPUでも3倍程度の性能向上しか得られない(\ref{amdahl})。 + +\begin{figure}[htb] +\begin{center} +\includegraphics[width=6cm]{fig/amdahl.eps} +\caption{amdahl} +\end{center} +\label{amdahl} +\end{figure} + + +高い並列 +度ではなくとも、恒常的に並列度を維持する必要がある。このため、 + +{\small +\begin{verbatim} + 逐次型のプログラムの一部を並列化する + +\end{verbatim} +} + +という手法では不十分である。LSIなどのハードウェア場合は演算の +対象がもともと多量の演算とデータパスを持つので並列計算の効果を +定常的に得られることが多いが、C等で記述されたプログラムでは、 +for 文や配列のアクセスなどに並列性が隠されてしまい、それを引き出す +ことが難しい。 + +プログラムの中の並列度は、主に二つの形で取り出すことが出来る。 +一つは、配列や木の中の個々の要素に対して並列に実行する + +{\small +\begin{verbatim} + データ並列 + +\end{verbatim} +} + +である。もう一つは、複数の逐次処理の隣同士を重ねて実行する + +{\small +\begin{verbatim} + パイプライン処理 + +\end{verbatim} +} + +である。この二つを同時に用いることで定常的な並列度を維持することが +可能となることがある。パイプライン処理は、プログラム中で階層的に +使われることが多い。 + +\subsection{ プログラムとデータの分割} + +データ並列とパイプライン処理を可能にするためには、プログラムと +データの適切な分割を行う必要がある。for文、あるいは、木をだとって +処理する個々のステートメントがプログラムの分割の対象となる。 +データは自明に分割できるわけではなく、分割できるデータ構造を採用し、 +必要ならばコピーを行う。 + +分割されたデータは、メモリ上に置かれるが、Cellの場合はSPUのローカル +メモリ上に置かれることになる。共有メモリベースの場合でもキャッシュを +考慮した配置をする必要がある。具体的には、データのアライメントをそろ +える必要がある。メインメモリ上で計算を行う逐次型プログラムと異なり、 +コピーのコストを払ってでもデータを分割し、複数のCPUで独立に処理する +必要がある。特に、DMA中心のアクセスになるCellの場合は、 +コピーしやすいように、数Kbyte毎の配列にする方が良い。 + +Cellの場合はさらにコードもローカルメモリ上に置かれるために、 +コードをロードする仕組みも必要になる。 + +\subsection{ 同期の問題} + +ここで言う同期は、複数のCPUがデータの待ち合わせ、または、整合性を +維持するために、他のCPUとの待ち合わせを行うことである。従来の +マルチCPUでは、並列度が低いために同期は希であり、キャッシュ上の +Spin lock を用いることが多かった。これは、メモリの特定の場所を +test and set 等の特殊な命令で繰り返しアクセスして待ち合わせる手法 +である。Unix OSのkernel、POSIX Thread など同期機構の実装に使われている。 + +Many Core では、待ち合わせを行うと並列度が下がってしまうので、 +同期自体を減らす必要がある。そのためには、各CPUが独立に(Lock無しに) +データにアクセス出来るようにデータを分割すれば良い。Cell では、 +SPUがローカルメモリを持っているので、そちらにコピーすることになる。 +しかし、SPUはメインメモリからデータを取得する必要があるので、その +取得の際には同期を取る必要がある。 +Cellでは、SPUとPPU間の同期にはMail box というFIFOメッセージ +キューが用意されていて、readch,writech という命令でSPUから +アクセスする。Spin lock と違って、メッセージ交換なので待ち合わせを +避けることが可能である。 + +共有メモリベースのシステムの場合でも、同じ場所をアクセスする場合は +キャッシュの競合が生じるので、コピーなどを用いて領域の分割を +行う必要がある。Thread local などを用いる場合もある。 + +複数のCPUが出力する結果を一つのキューに挿入するようなことをすると、 +挿入時に必ず同期が必要になるので同期のコストが高い。 + +\subsection{ マルチスレッド} + +従来の共有メモリ型のマルチCPUでは、POSIX Thread を用いて並列実行 +を実現することが多い。特にHyper Thread では、複数の命令ストリーム +を使って、メモリアクセス時等のの命令実行パイプラインのストールを +スレッドを切替えて隠すことが出来る。しかし、Many Core の場合に、 +個々のCoreに複数のThreadを割り当てるとワーキングセット(Threadが +使用するデータ)の大きさが大きくなりキャッシュやローカルメモリに +入らなくなる場合がある。 + +スレッド(Hyper Thread)は本来、I/O待ちやメインメモリアクセス等に対して +有効であり、ほとんどのデータがキャッシュやローカルメモリにあると +考えられるMany Coreには向いていない。個々のタスクを実行するCPU +上で複数のスレッドを使用するメリットはほとんどないと思われる。 +一方で、個々のCPUは細分化されたタスクを十分に持っていなければ +恒常的な並列度を維持できない。 + +一方で、同期機構で待ち合わせを行う場合に、Spin lockを避けるとすれば、 +条件付変数などのスレッドのタスクの待ち合わせ機構が必要となる。 + +Many Core の台数にも寄るが、実行するタスクの管理を行うマネージャー +を複数スレッドで構成し、そのうちの一つが、ポーリングベースで +複数のCoreに対する待ち合わせを行うようにするのが良いと思われる。 +Cellでは、SPURS\cite{spurs}という仕組みが提案されている。 + +\subsection{ デバッグ} + +複数のCoreを走らせた状態でのデバッグは難しい。並列プログラムの +特徴として、実行が非決定的(同じ状態で実行しても結果が異なる)こと +があり、バグの状態を再現することが難しいことがある。また、個々の +Core上のデータを調べる必要があり、デバッガが複数のCoreを取り扱える +ことが必須である。 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/3.tex Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,47 @@ +\section{ Many Core 上のプログラムの作り方} + +本論文では、本研究室で作成したPS3上のレンダリングエンジンであるCerium +Rendering Engine を例題として使う。詳細は別な論文\cite{kono08b} +に譲り、ここでは簡単に記述する。 + +Cerium は、Scene Graph (3Dオブジェクトを木構造にしたもの)をフレームバッファ +上にSPUを用いて描画するRendering Engine であり、教育用としてシンプルな +構成を持っている。Cerium は、 + +{\small +\begin{verbatim} + 1. Scene GraphのPolygonの座標から表示する + 2. 座標の計算を行い PolygonPack を生成する + 3. PolygonPack から、同じY座標を持つ線分の集合SpanPackを生成する + 4. SpanPackを(Texture を読込ながら)Z bufferを用いて描画する。 + +\end{verbatim} +} + +という4つのタスクを持つ。並列実行は、Scene Graphの木、PolygonPack, +SpanPack に対してデータ並列実行を行う。さらに、この4つが表示画面毎に +パイプライン的に実行される。 + +これらのタスクは、SPUで実行するために小さなセグメントに分割される +必要がある。分割されたタスクを、PPUまたはSPUで実行するのは +Cerium task manager である。Task manager はタスク依存を解決する +機能を持っていて、タスク依存が満たされたものをアクティブキューに +入れ、SPUを起動する。SPUはアクティブキューから、処理するコードと +データを取得し自律的に実行を行う。 + +Cerium Rendering engine を作るには、以下の手順に +実装とテストを行う。 + +{\small +\begin{verbatim} + 1. 普通のCで実装した Rendering algorithm + 2. データ構造(PolygonPack, SpanPack)を導入したもの + 3. コードをタスクに分割し、FIFOキューでシーケンシャルに実行する + 4. タスクをSPUに割り当て並列実行する + +\end{verbatim} +} + +これにより、Algorithmの正しさを確認した上で並列実行に移行することが出来る。 + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/4.tex Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,199 @@ +\section{ Continuation based C} + +CbC (Continuation based C)は、Cからサブルーチンやループ構造 +を除いたCの下位言語であり、ハードウェアとソフトウェア、特に +組込みシステムの記述言語として本研究室で提案している言語で +ある。 + +Cの関数の代わりに、 +たコード・ +セグメントという単位を持つ。コードセグメントには、入口に相当する +Input interface と、出口に相当するParameterized goto 文が存在する。 + +\begin{figure}[htb] +\begin{center} +\includegraphics[width=6cm]{fig/code.eps} +\end{center} +\label{fig000} +\end{figure} + + +以下は簡単なCbCのプログラムである。 + +{\small +\begin{verbatim} + code fact(int n,int result, + code print()){ + if(n>0){ + result *= n; + n--; + goto fact(n,result,print); + } else + goto (*print)(result); + } +\end{verbatim} +} + +間接gotoと、直接gotoが、プログラムの単位の結び付きをボトムアップに +規定して、自然なグループを構成する。 + +CbCの継続は、Schemeなどの継続とは異なり環境(関数の呼び出し履歴)を持たない。 +コードセグメントは、関数呼び出しではないので環境を持つ必要がない。 + +Cにコードセグメントと引数つきgoto文を付加したCwCは、Cのスーパセット +であり、 +コードセグメント内から通常のCの関数を呼び出すことも可能ある。また、 +通常の関数からコードセグメントへgotoしたり、コードセグメントから、 +呼び出された関数へ値を戻すことも出来る。 + +コードセグメントは状態遷移記述と対応しているので、ハードウェア記述 +とも相性が良い。 + +CbCコンパイラは、micro-C base のものと GCC base, TCC base のものが +動いており、実用的に使うことができる。{\tt sourceforge.jp} 上\cite{cbc-sourceforge}で公開されている。 + + +\subsection{ CからCbCへの変換} + +Cのスタックを明示的に構成することによりCのプログラムをCbCに +変換することが可能である。 + +{\small +\begin{verbatim} + j = g(i+3); + +\end{verbatim} +} + +のようなCの関数呼び出しは、 \verb+struct f_g0_save+ などの +明示的なスタックの中身を表す構造体を用いて、 +{\small +\begin{verbatim} + struct f_g0_interface *c = + (struct f_g0_save *)(sp -= + sizeof(struct f_g0_save)); + c = sp; + c->ret = f_g1; + goto g(i+3,sp); +\end{verbatim} +} + +のような形で、明示的なスタック操作に変換される。これは変換の +一例であり、他の方法、例えばリンクトリストなどを用いても良い。 +\verb+f_g1+ は、関数呼び出しの後の継続であり、\verb+g+ では、 +{\small +\begin{verbatim} + code g(int i,stack sp) { + goto (* ((struct + f_g0_save *)sp)->ret) + (i+4,sp); + } +\end{verbatim} +} + +のように間接的に呼び出される。スタックの中は、継続と +中間変数などを格納する構造体である。スタックそのものは、 +これらの構造体を格納するメモリである。 + +これらの変換は自動的に行うことが出来き、試作変換系を実装した +報告\cite{kono01g}もあるが、実用レベルの変換系はまだ存在しない。 +現在は変換と、その後の最適化はは手動で行う必要がある。 + +\subsection{ CbCでの並列実行記述} + +並列実行記述ではタスクの生成と同期機構の記述が問題になる。Verilog +やVHDLなどでも並列タスクの記述があり、POSIX Thread ではライブラリ +コールとして\verb+pthread_create+や\verb+pthread_mutex_lock+などが +ある。 + +これらの動作記述は、マニュアルやFormal Description で示されている。 +例えば、以下のような記述である。 +{\tt +The pthread\_mutex\_lock() function locks mutex. If the mutex +is already locked, the calling thread will block until the +mutex becomes available. +} + +このようは記述は曖昧で誤解を招きやすい。しかし、同期機構の検証 +では、これらの動作の正確な意味を知る必要がある。 + +CbC ではad-hoc な並列記述プリミティブは必要ではなく、自分自身で +並列実行を記述することが可能である。これは、コードセグメントには +隠された情報が存在しないので、実行に必要な情報をすべてInput +interface から取得できるからである。 + +実行キューを作成しCbC自体でSchedulerを記述することにより、 +並列実行を記述する。この場合の並列実行単位はコードセグメン +トとなる。goto 文を規則的にscheduler へのgoto文に書き換える +ことにより、並列実行を記述することが出来る。 + +以下は、CbCで記述した Dining Philosopher の状態の一部である。 +{\small +\begin{verbatim} + code pickup_rfork(PhilsPtr self) + { + if (self->right_fork->owner == NULL) { + self->right_fork->owner = self; + goto eating(self); + } else { + goto hungry2(self); + } + } + +\end{verbatim} +} + +これを並列実行するためには、 + +{\small +\begin{verbatim} + code pickup_rfork(PhilsPtr self, TaskPtr current_task) + { + if (self->right_fork->owner == NULL) { + self->right_fork->owner = self; + self->next = eating; + goto scheduler(self, current_task); + } else { + self->next = hungry2; + goto scheduler(self, current_task); + } + } + +\end{verbatim} +} + +という形に記述を変える。Scheduler の実装は例えば、FIFOであれば、 + +{\small +\begin{verbatim} + code scheduler(PhilsPtr self, TaskPtr list) + { + TaskPtr t = list; + TaskPtr e; + list = list->next; + goto list->phils->next(list->phils,list); + } + +\end{verbatim} +} + +という形になる。このように自分自身で並列実行スケジューラを +記述できることがCbCの特徴である。同期機構であるが、ここでは +\verb+right_fork+の排他制御は、 +コードセグメントが同時に実行されることはないので、自動的に +保証されている。条件付変数のような待ち合わせを実現したい場合は、 +TaskPtr への操作として実現すれば良い。 + +\subsection{ CbCでの並列実行の実装} + +FIFO scheduler を例えば Cell のSPUのactive task queue への +挿入とし、active task queue を各SPUが自律的に取得するように +する(SPU scheduler)と、実際にCbCのコードセグメントを並列実 +行することが出来る。 + +FIFO schedulerと実際の並列実行の同期機構が一致するようにする +のは、一般的には自明ではない。同期機構をコードセグメントで記述 +して、SPU scheduler によって実現しても良いし、コードセグメント +内部で、例えば、\verb+pthread_mutex_lock+を呼び出しても良い。 + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/5.tex Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,59 @@ +\section{ CbCでのCellのプログラムの流れ} + +CbCを用いて、Many Core Architecture のプログラムを作成する +流れは以下のようになる。 + +{\small +\begin{verbatim} + 1. C によりアルゴリズムをシーケンシャルに記述する + 2. データを並列用に分割した構造に変更する + 3. Cの記述をCbCの記述に変換する(必要な部分のみ。手動) + 4. コードセグメントを並列実行用に分割する + 5. FIFOスケジューラにより動作を確認する + 6. SPUスケジューラによりCell上での動作を確認する + +\end{verbatim} +} + +これらの各過程すべてでエラーが入る可能性がある。また、 +論理的なエラーだけなく、仕様に沿った十分な性能が出るか +どうかも検証する必要がある。 + +1 の段階は通常のCのプログラミングであり、この部分がちゃんと +動くことが必須である。この段階では、入力に対して出力が +一意に決まる状況であり、テストは容易である。バグも +実行トレースの二分法により容易に行うことが出来る。 + +4段階まではプログラム変換の問題であり、一つ前の段階と +同じ結果を得られるかどうか検証する必要がある。 + +5 段階以前はアーキテクチャに依存しないので、ターゲット +が開発途中の段階でも記述することが可能である。しかし、 +5段階では、FIFOスケジューラの替わりに、Randomスケジューラ +などを使うことができ、並列実行特有の非決定的な実行が +導入される。 + +非決定的な実行は、クロックベースのハードウェアでは +入力の任意性から生じることが多い。ハードウェアでも +複数のタスクを使用したり、外界と相互作用する場合は +非決定的な実行が現れる。 + +段階5では、これらの非決定的な実行でも4段階までと +同じ仕様を満たすことを検証する必要がある。これは、 +逐次型のプログラムでは出て来ない問題である。 + +段階6では、段階5まできちんと動いていれば、問題なく +動作すると期待される。しかし、FIFOスケジューラと +SPUスケジューラでは、同期機構の実現が異なることが +ある。これは、並列実行と同期機構のの粒度と意味論 +が異なるために起きると考えられる。 + +ここで、段階1が仕様であり段階5が実装であると +考えることもできる。実際のプログラムとは別に、 +実行時に満たして欲しい仕様の記述がある場合もある。 +これらの記述は、例えば、「計算がいつか終る」 +等の時相論理的な記述になる。時相論理としては、 +LTTL\cite{wolper82}, CTL*\cite{synBTTL}, ITL\cite{kono93b} +などを使うことができる。 + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/6.tex Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,93 @@ +\section{ CbCでのCellのプログラムの検証} + +CbCでの検証は、プログラム作成の各段階で行われる。 +CbC では実行要素はコードセグメントであり、その +Input interface の値により動作は一意に決まる。 +従って、検証はコードセグメント単位良い。コードセグメント +内部の正当性はテストあるいは証明こ行われるべきである。 + +\subsection{ コードセグメントの入出力テスト} + +これは、通常のプログラムのテスト手法と同じであり、 +FIFOスケジューラを導入する前の段階では、入力と +出力に対応するテストを行う。 + +コードセグメント毎にテストデータを作成するべきで +あるが、結果の正しさを確認するプログラムを書く必要とする +場合もある。 + +データ及びコードの分割が終った段階では、データを +Multi Core CPUがアクセスできるようにコピーする +コードが入ることがある。このコピーは、FIFOスケジューラ +レベルでは、ポインタ渡しに避けても良い。しかし、 +コピーコード自体にエラーが出る場合も多い。例えば、 +Cellでは、MFCによるDMAは64bit alignmentが必要であり、 +これが満たされないと例外が発生してしまう。 + + +\subsection{ FIFOスケジューラレベルでのテスト} + +FIFOスケジューラレベルのテストでは、非決定性が +導入される。Cell では組み込まれたSPUは、すべて +決定的に動作するが、データによってSPUの演算の +終了結果は異なり、結果的に非決定性が生じる。 + +これらの非決定性を、網羅的に調べることも可能であり、 +モデル検査と呼ばれる。 + +CbCでは、状態を記録しながら、すべての可能な非決定的実行を行 +うスケジューラを実装することが可能である。 + +{\small +\begin{verbatim} + メモリ状態をデータベースから調べる + すでにあれば、一つ前の状態に戻して他の実行を探す + なければ、一段深い実行に進み状態を探す + +\end{verbatim} +} + +という形である。実際の実装は以下のようになっている。 + +{\small +\begin{verbatim} + code tableau(TaskPtr list) + { + if (lookup_StateDB(&st, &state_db, &out)) { + // found in the state database + printf("found %d\n",count); + while(!(list = next_task_iterator(task_iter))) { + // no more branch, go back to the previous one + TaskIteratorPtr prev_iter = task_iter->prev; + if (!prev_iter) { + printf("All done count %d\n",count); + .... + } + printf("no more branch %d\n",count); + depth--; + free_task_iterator(task_iter); + task_iter = prev_iter; + } + // return to previous state + // here we assume task list is fixed, we don't have to + // recover task list itself + restore_memory(task_iter->state->memory); + printf("restore list %x next %x\n",(int)list,(int)(list->next)); + } else { + // one step further + depth++; + task_iter = create_task_iterator(list,out,task_iter); + } + goto list->phils->next(list->phils,list); + } + +\end{verbatim} +} + +この検証系は、SPUを使った実機上で動かすには、SPU内部のメモリを記録 +するなどの工夫が必要となる。また、探索空間が膨大になる場合もある。 + +探索空間を小さくするには、並列実行の粒度を大きくしたり、メモリの +状態を抽象化したりする方法が考えられる。これらの手法は、CbC自身で +記述することが可能である。 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/7.tex Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,42 @@ +\section{ 本手法の利点と欠点} + +CbCという特殊な処理系を使うことになるので、ソースの変更が +必要となる。現状では、C++には対応していない。 + +コードセグメントのテストをSingle core上とMulti core 上の +両方でテスト出来るので、Multi coreになれていなくても、 +動作のテストが容易である。また、Multi core になれるための +準備、教育的ツールとして使うことも出来る。アルゴリズム +の正しさを並列実行とは別にテスト出来るのが利点である。 + +CellはヘテロなMulti Coreであり、 +SPU では、その性能を活かすためには、特殊なアセンブラ命令、 +例えば4つの浮動小数点の値の同時演算などを使用する必要がある。 +これらは、gcc の拡張あるいはasmステートメントなどで使用する +ことができるが、他のアーキテクチャ上では動作しない。 +従って、同じ機能を持つコードセグメントで代用してテスト +することになる。異なるアーキテクチャでの異なるコードセグメント +の同等性を直接テストすることは出来ない。 + +Many Core 向けのデータ分割、コード分割は自動ではないので、 +試行錯誤することになる。必要な性能が出るかどうかは、 +分割のために生じるコピーのコストなどの要素が関係し、 +アーキテクチャに依存するのでSingle Core上のテストで +見積もることは難しい。 + +データ分割、コード分割が手動なので間違いが入りやすい。 +FIFOスケジューラレベルで、Single Coreと同等な動作を +する場合は、このようなエラーを見つけるのは容易である。 + +しかし、非決定的な動作をする場合は、自明な動作比較をする +ことは出来ず、モデル検査などのコストの高い方法を使う +必要が出て来る。コードセグメントレベルのモデル検査は +実機上の同期動作との差があるので、正確ではない。 + +モデル検査のコストが重い場合は、スケジューラを挟む +部分を大まかにして状態数を減らす手法が使える。正確さは +落ちるが、高速に検査することが出来る。 + +スケジューラを挟む部分の変更は手動であり、マクロあるいは +スクリプトで生成する必要がある。 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/8.tex Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,28 @@ +\section{ 学生による実際の実装の現状} + +本手法を、PS3 Linux 上のSPUを用いた 3D Rendering Engine +の作成に適用した。詳細は別な論文で述べるので、ここでは +学生の反応について報告する。 + +Single Core でプログラムを動作させることは容易である。これは、 +従来のプログラムと差がないからであり、学生にとっては入りやすい。 +データとコードの分割を自力で求めるのは、並列処理の経験がない +学生には難しい。なんらかのひな型か指示が必要である。 + +FIFOスケジューラから、SPUスケジューラを実装する時点で、 +なるべく早く動かそうとするために ad-hoc なコードが入りやすい。 +特に、一旦、SPUスケジューラに移ってしまうと、元の +ソースを +FIFOスケジューラ/Single Core 上で動かすことを考慮せずに +変更を加えてしまう。そのような場合は、この方法のメリット +である、並列実装部分のバグと、アルゴリズム/データ分割のバグ +を分離することが出来なくなってしまう。しかし、常に +両方で動作させるように変更するのは、手間がかかることも +確かである。 + +データやコードの分割において、Cellでは6個のSPUを使うことが +出来るが、必ず6個に分割することを仮定してプログラムを書いて +しまうという問題も見られた。分割したコードにどれだけの +Coreを割り振るかは、後で調整する必要があるので、必ず +最大値を使うとは限らない。 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/9.tex Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,83 @@ +\section{ CbCを用いた検証手法と他の手法との比較} + +コードセグメントを使わずに、Cの関数による分割を行って +も良い。この場合は、分割された関数を順々に呼び出す +マネージャを記述する必要がある。CbCのようにモデル検査を +自分で記述するようなことは出来ないが、分割に関しては +同等である。 + +モデル検査では SPIN\cite{holzmann97model}が有名だが、SPINでは +問題を Promela という仕様記述言語で記述する必要があり、 +Promela を直接実装に使うことは出来ない。 + +実装言語を直接モデル検査するシステムとしては、 +Java PathFinder\cite{havelund98model}、 +CBMC\cite{groce04understanding}などが知られている。これらはオブジェクト指向 +記述に対しても適用できるという利点がある。 +これらで並列処理を記述する場合は、一般的にはThread の +機能を用いることになる。 + +CbCでは、スケジューラ及びモデル検査器を自分で記述出来るので、 +検査する並列性や抽象度を自分で制御できると言う利点がある。 +現状では、そういう可能性があるというだけで実装は行っていない。 + +現在用いているCbC用のモデル検査器は比較的単純に作られており、 +大きなプログラムの検証をするのには向かない。2.8GHz Pentinum 4 +では、Dining Philosphers の例題に対して以下のような性能が +出ている。 + +\begin{table}[htbp] +\begin{center} +\caption{Dining Philosophers ProblemのCbCによるモデル検査} +\label{tab:dpp_tableau} +\begin{tabular}{|r|r|r|} \hline +プロセス数 & 状態数 & 実行時間(秒) \\ \hline +3 & 1,340 & 0.01 \\ \hline +4 & 6,115 & 0.08 \\ \hline +5 & 38,984 & 0.66 \\ \hline +6 & 159,299 & 3.79 \\ \hline +7 & 845,529 & 27.59 \\ \hline +8 & 3915,727 & 199.80 \\ \hline +\end{tabular} +\end{center} +\end{table} + +\begin{table}[htbp] +\begin{center} +\caption{SPINによるDining Philosophers Problemのモデル検査} +\label{tab:spin_dpp} +\begin{tabular}{|r|r|r|} \hline +プロセス数 & 状態数 & 実行時間(秒) \\ \hline +5 & 94 & 0.008 \\ \hline +6 & 212 & 0.01 \\ \hline +7 & 494 & 0.03 \\ \hline +8 & 1,172 & 0.04 \\ \hline +\end{tabular} +\end{center} +\end{table} + +\begin{table}[htbp] +\begin{center} +\caption{JPFによるDining Philosophers Problemのモデル検査} +\label{tab:jpf_dpp} +\begin{tabular}{|r|r|r|} \hline +プロセス数 & 状態数 & 実行時間(秒) \\ \hline +5 & 不明 & 3.98 \\ \hline +6 & 不明 & 7.33 \\ \hline +7 & 不明 & 26.29 \\ \hline +8 & 不明 & 123.16 \\ \hline +\end{tabular} +\end{center} +\end{table} + +Java Path Finder とSPINの丁度間の性能となっているが、プロセス数が +多くなると、Java Path Finder よりも性能が落ちる。これは、モデル +検査のための状態格納のアルゴリズムに問題があると考えている。 +SPINの性能が良いのは、元々の状態記述の抽象度が高く状態数そのものが +小さいからであると考えられる。 + +CbCの記述を変更して、スケジューラを呼び出す頻度を下げると、 +状態するが下がりSPINに近い性能を得ることも可能である。 +Java Path Finder では、そのような変更を行うことは原理的に +出来ない。 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Makefile Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,129 @@ +DEPENDENCY = manycore.ind fig/cell.eps fig/amdahl.eps fig/code.eps + +DEPENDOHP = ohp.tex fig/cell.eps fig/amdahl.eps fig/code.eps + +PAPER = manycore.ind + + +PRINTER = ab +OHP = ohp +MAIN = main +COVER = trcover +LATEX = platex +SLITEX = jslitex +BIBTEX = jbibtex +AWK = awk +SED = sed +DVI2PS = dvi2ps +R = +PRINTER = + +.SUFFIXES: .c .d .tokio .x .xfig .fig .tex .dvi .print .lw .next .ps .gs .xdvi + +.d.tex: + tgrind -F -ldb $< >$@ +.c.tex: + tgrind -F -lC $< >$@ +.tokio.tex: + tgrind -F -ltokio $< >$@ +.fig.tex: + f2tpic $< >$@ +.xfig.tex: + f2tpic $< >$@ +.fig.ps: + f2ps1 $< >$@ +.x.tex: + x2tpic $< + -rm -f $*.pic +.tex.dvi: + jlatex $< +.dvi.print: + $(DVI2PS) $(R) $< | lpr -P$(PRINTER) +# lpr $(PRINTER) -d $< +.dvi.lw: + $(DVI2PS) $(R) $< | lpr -P$(PRINTER) +.dvi.next: + dviNeXT $< +.dvi.xdvi: + (exec xdvi $< & ) +.dvi.ps: + -$(DVI2PS) $(R) $< > $*.ps +.ps.gs: + gs $*.ps + +all: + -rm -f $(MAIN).dvi + make $(MAIN).dvi + +print: $(MAIN).print +lw: $(MAIN).lw +next: $(MAIN).next +gs: $(MAIN).gs +$(MAIN).gs : $(MAIN).ps +$(MAIN).ps : $(MAIN).dvi +$(OHP).gs : $(OHP).ps +$(OHP).ps : $(OHP).dvi +xdvi: $(MAIN).xdvi +dvips: $(MAIN).dvi + dvips $(MAIN).dvi -o $(MAIN).ps + +$(MAIN).dvi: 1.tex + $(LATEX) $(MAIN) + +jsss.dvi: jsss.tex 1.tex + $(LATEX) jsss.tex + +wc: + $(SED) -e '/\\special{/d' $(PAPER) | delatex | wc +uu: + tar cBf - $(MAIN).[tab]* [0-9]*.tex $(DEPENDENCY) \ + title.tex abstract.tex ohp.tex \ + Makefile | gzip | uuencode $(PAPER).tar.gz > uu + + +bbl: $(MAIN).bbl + +$(MAIN).bbl: ref.bib 1.tex # $(MAIN).aux + -$(BIBTEX) $(MAIN) + +$(MAIN).aux: $(MAIN).tex 1.tex + $(LATEX) $(MAIN) + +1.tex: $(PAPER) $(DEPENDENCY) + -o2tex $(PAPER) + +# OHP with slitex +$(OHP): $(OHP).dvi +$(OHP).dvi : $(OHP).tex $(DEPENDOHP) + $(SLITEX) $(OHP) + +ohpprint: $(OHP).dvi + lpr -c $(OHP).dvi +ohplw: $(OHP).dvi + $(DVI2PS) $(R) -o landscape $(OHP).dvi | lpr -P$(PRINTER) +ohpnext: $(OHP).dvi + $(DVI2PS) -h -i /usr/lib/tex/ps/tex-j.next -o landscape $(OHP).dvi |\ + lpr -Pcb +ohpgs: $(OHP).gs + +cover: $(COVER).dvi +$(COVER): $(COVER).dvi +$(COVER).dvi : $(PAPER) +coverprint: $(COVER).print +coverlw: $(COVER).lw +covernext: $(COVER).next +covergs: $(COVER).gs + +clean: + -rm -f $(MAIN).ps *.dvi *.log *.blg \ + *~ \#* ?.tex *.toc *.lof *.lot xfig/*.tex + +tgrindfig.tex: + ln -s "$$HOME"/paper/tgrindfig.tex . +# for MSDOS +tgrindfi.tex: + ln -s "$$HOME"/paper/tgrindfig.tex tgrindfi.tex +ref.bib: + ln -s "$$HOME"/paper/ref.bib . + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/abstract-e.tex Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,11 @@ + +CPU performance is achieved in Many Core Architecture rather than +high clock speed recently. The complicated nature of this +architecture makes reliable program difficult. We present a +subset of C Programming Language with continuation: Continuation based C +to make a program for Many Core Architecture. We use this method +for a rendering engine ``Cerium'' for Cell Broadband Engine. + + + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/abstract-e.tex.aux Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,20 @@ +\relax +\@setckpt{abstract-e.tex}{ +\setcounter{page}{1} +\setcounter{equation}{0} +\setcounter{enumi}{0} +\setcounter{enumii}{0} +\setcounter{enumiii}{0} +\setcounter{enumiv}{0} +\setcounter{footnote}{0} +\setcounter{mpfootnote}{0} +\setcounter{@paper}{1} +\setcounter{part}{0} +\setcounter{section}{0} +\setcounter{subsection}{0} +\setcounter{subsubsection}{0} +\setcounter{paragraph}{0} +\setcounter{subparagraph}{0} +\setcounter{figure}{0} +\setcounter{table}{0} +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/abstract.tex Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,12 @@ +\mbox{} + +近年、CPUの性能向上は、クロックサイクルをあげることよりも、 +複数のCPUコア(Many Core Architecture)を導入することにより +得られるようになって来てい +る。しかし、Many Core Architecture のプログラムは複雑であり、 +その信頼性を確保することは難しい。本論文では、本研究室で開 +発した Cのサブセット であるContination based C を用いて、Many +Core Architecture のプログラミングと、その検証を行う手法に +ついて考察する。ここでは例題として、Cell Broadband Engine +を用いたレンダリングエンジンを用いる。 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/abstract.tex.aux Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,20 @@ +\relax +\@setckpt{abstract.tex}{ +\setcounter{page}{1} +\setcounter{equation}{0} +\setcounter{enumi}{0} +\setcounter{enumii}{0} +\setcounter{enumiii}{0} +\setcounter{enumiv}{0} +\setcounter{footnote}{0} +\setcounter{mpfootnote}{0} +\setcounter{@paper}{1} +\setcounter{part}{0} +\setcounter{section}{0} +\setcounter{subsection}{0} +\setcounter{subsubsection}{0} +\setcounter{paragraph}{0} +\setcounter{subparagraph}{0} +\setcounter{figure}{0} +\setcounter{table}{0} +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/amdhal.dat Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,10 @@ +0.5 1.71428571428571 +0.55 1.84615384615385 +0.6 2 +0.65 2.18181818181818 +0.7 2.4 +0.75 2.66666666666667 +0.8 3 +0.85 3.42857142857143 +0.9 4.00000000000001 +0.95 4.80000000000001
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/amdhal.pl Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,8 @@ +#!/usr/bin/perl +# 並列効果(α)= 1 / (( 1 - p) + p / Np) +# p : 並列化率(0〜1.0) +# Np : プロセッサ数 + +for($p = 0.5; $p<1;$p+=0.05) { + print "$p ",1/((1-$p)+ $p/6),"\n"; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/author-e.tex.aux Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,20 @@ +\relax +\@setckpt{author-e.tex}{ +\setcounter{page}{1} +\setcounter{equation}{0} +\setcounter{enumi}{0} +\setcounter{enumii}{0} +\setcounter{enumiii}{0} +\setcounter{enumiv}{0} +\setcounter{footnote}{0} +\setcounter{mpfootnote}{0} +\setcounter{@paper}{1} +\setcounter{part}{0} +\setcounter{section}{0} +\setcounter{subsection}{0} +\setcounter{subsubsection}{0} +\setcounter{paragraph}{0} +\setcounter{subparagraph}{0} +\setcounter{figure}{0} +\setcounter{table}{0} +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fig/amdahl.eps Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,629 @@ +%!PS-Adobe-2.0 +%%Title: fig/amdhal.eps +%%Creator: gnuplot 4.2 patchlevel 0 +%%CreationDate: Thu Mar 6 02:46:19 2008 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 554 266 +%%Orientation: Portrait +%%Pages: (atend) +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following 6 true/false flags may be edited by hand if required +% The unit line width may also be changed +% +/Color false def +/Blacktext false def +/Solid false def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +% +/vshift -46 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +Level1 {} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title (fig/amdhal.eps) + /Subject (gnuplot plot) + /Creator (gnuplot 4.2 patchlevel 0) + /Author (Shinji KONO) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Thu Mar 6 02:46:19 2008) + /DOCINFO pdfmark +end +} ifelse +% +% Gnuplot Prolog Version 4.2 (August 2006) +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + gsave 1 setgray fill grestore clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +50 50 translate +0.100 0.100 scale +0 setgray +newpath +(Helvetica) findfont 140 scalefont setfont +/Helvetica findfont 140 scalefont setfont +1.000 UL +LTb +574 280 M +63 0 V +4165 0 R +-63 0 V +490 280 M +( 1.5) Rshow +1.000 UL +LTb +574 525 M +63 0 V +4165 0 R +-63 0 V +490 525 M +( 2) Rshow +1.000 UL +LTb +574 769 M +63 0 V +4165 0 R +-63 0 V +490 769 M +( 2.5) Rshow +1.000 UL +LTb +574 1014 M +63 0 V +4165 0 R +-63 0 V +-4249 0 R +( 3) Rshow +1.000 UL +LTb +574 1258 M +63 0 V +4165 0 R +-63 0 V +-4249 0 R +( 3.5) Rshow +1.000 UL +LTb +574 1503 M +63 0 V +4165 0 R +-63 0 V +-4249 0 R +( 4) Rshow +1.000 UL +LTb +574 1747 M +63 0 V +4165 0 R +-63 0 V +-4249 0 R +( 4.5) Rshow +1.000 UL +LTb +574 1992 M +63 0 V +4165 0 R +-63 0 V +-4249 0 R +( 5) Rshow +1.000 UL +LTb +574 280 M +0 63 V +0 1649 R +0 -63 V +574 140 M +( 0.5) Cshow +1.000 UL +LTb +1044 280 M +0 63 V +0 1649 R +0 -63 V +0 -1789 R +( 0.55) Cshow +1.000 UL +LTb +1514 280 M +0 63 V +0 1649 R +0 -63 V +0 -1789 R +( 0.6) Cshow +1.000 UL +LTb +1983 280 M +0 63 V +0 1649 R +0 -63 V +0 -1789 R +( 0.65) Cshow +1.000 UL +LTb +2453 280 M +0 63 V +0 1649 R +0 -63 V +0 -1789 R +( 0.7) Cshow +1.000 UL +LTb +2923 280 M +0 63 V +0 1649 R +0 -63 V +0 -1789 R +( 0.75) Cshow +1.000 UL +LTb +3393 280 M +0 63 V +0 1649 R +0 -63 V +0 -1789 R +( 0.8) Cshow +1.000 UL +LTb +3862 280 M +0 63 V +0 1649 R +0 -63 V +0 -1789 R +( 0.85) Cshow +1.000 UL +LTb +4332 280 M +0 63 V +0 1649 R +0 -63 V +0 -1789 R +( 0.9) Cshow +1.000 UL +LTb +4802 280 M +0 63 V +0 1649 R +0 -63 V +0 -1789 R +( 0.95) Cshow +1.000 UL +LTb +1.000 UL +LTb +574 1992 N +574 280 L +4228 0 V +0 1712 V +-4228 0 V +Z stroke +1.000 UP +1.000 UL +LTb +1.000 UP +1.000 UL +LT0 +/Helvetica findfont 140 scalefont setfont +LTb +4151 1859 M +("amdhal.dat") Rshow +LT0 +574 385 Pls +1044 449 Pls +1514 525 Pls +1983 614 Pls +2453 720 Pls +2923 851 Pls +3393 1014 Pls +3862 1223 Pls +4332 1503 Pls +4802 1894 Pls +4434 1859 Pls +1.000 UL +LTb +574 1992 N +574 280 L +4228 0 V +0 1712 V +-4228 0 V +Z stroke +1.000 UP +1.000 UL +LTb +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fig/amdhal.tex Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,105 @@ +% GNUPLOT: LaTeX picture with Postscript +\begingroup + \makeatletter + \providecommand\color[2][]{% + \GenericError{(gnuplot) \space\space\space\@spaces}{% + Package color not loaded in conjunction with + terminal option `colourtext'% + }{See the gnuplot documentation for explanation.% + }{Either use 'blacktext' in gnuplot or load the package + color.sty in LaTeX.}% + \renewcommand\color[2][]{}% + }% + \providecommand\includegraphics[2][]{% + \GenericError{(gnuplot) \space\space\space\@spaces}{% + Package graphicx or graphics not loaded% + }{See the gnuplot documentation for explanation.% + }{The gnuplot epslatex terminal needs graphicx.sty or graphics.sty.}% + \renewcommand\includegraphics[2][]{}% + }% + \providecommand\rotatebox[2]{#2}% + \@ifundefined{ifGPcolor}{% + \newif\ifGPcolor + \GPcolorfalse + }{}% + \@ifundefined{ifGPblacktext}{% + \newif\ifGPblacktext + \GPblacktextfalse + }{}% + % define a \g@addto@macro without @ in the name: + \let\gplgaddtomacro\g@addto@macro + % define empty templates for all commands taking text: + \gdef\gplbacktext{}% + \gdef\gplfronttext{}% + \makeatother + \ifGPblacktext + % no textcolor at all + \def\colorrgb#1{}% + \def\colorgray#1{}% + \else + % gray or color? + \ifGPcolor + \def\colorrgb#1{\color[rgb]{#1}}% + \def\colorgray#1{\color[gray]{#1}}% + \expandafter\def\csname LTw\endcsname{\color{white}}% + \expandafter\def\csname LTb\endcsname{\color{black}}% + \expandafter\def\csname LTa\endcsname{\color{black}}% + \expandafter\def\csname LT0\endcsname{\color[rgb]{1,0,0}}% + \expandafter\def\csname LT1\endcsname{\color[rgb]{0,1,0}}% + \expandafter\def\csname LT2\endcsname{\color[rgb]{0,0,1}}% + \expandafter\def\csname LT3\endcsname{\color[rgb]{1,0,1}}% + \expandafter\def\csname LT4\endcsname{\color[rgb]{0,1,1}}% + \expandafter\def\csname LT5\endcsname{\color[rgb]{1,1,0}}% + \expandafter\def\csname LT6\endcsname{\color[rgb]{0,0,0}}% + \expandafter\def\csname LT7\endcsname{\color[rgb]{1,0.3,0}}% + \expandafter\def\csname LT8\endcsname{\color[rgb]{0.5,0.5,0.5}}% + \else + % gray + \def\colorrgb#1{\color{black}}% + \def\colorgray#1{\color[gray]{#1}}% + \expandafter\def\csname LTw\endcsname{\color{white}}% + \expandafter\def\csname LTb\endcsname{\color{black}}% + \expandafter\def\csname LTa\endcsname{\color{black}}% + \expandafter\def\csname LT0\endcsname{\color{black}}% + \expandafter\def\csname LT1\endcsname{\color{black}}% + \expandafter\def\csname LT2\endcsname{\color{black}}% + \expandafter\def\csname LT3\endcsname{\color{black}}% + \expandafter\def\csname LT4\endcsname{\color{black}}% + \expandafter\def\csname LT5\endcsname{\color{black}}% + \expandafter\def\csname LT6\endcsname{\color{black}}% + \expandafter\def\csname LT7\endcsname{\color{black}}% + \expandafter\def\csname LT8\endcsname{\color{black}}% + \fi + \fi + \setlength{\unitlength}{0.0500bp}% + \begin{picture}(7200.00,5040.00)% + \gplgaddtomacro\gplbacktext{% + \csname LTb\endcsname% + \put(770,440){\makebox(0,0)[r]{\strut{} 1.5}}% + \put(770,1059){\makebox(0,0)[r]{\strut{} 2}}% + \put(770,1679){\makebox(0,0)[r]{\strut{} 2.5}}% + \put(770,2298){\makebox(0,0)[r]{\strut{} 3}}% + \put(770,2918){\makebox(0,0)[r]{\strut{} 3.5}}% + \put(770,3537){\makebox(0,0)[r]{\strut{} 4}}% + \put(770,4157){\makebox(0,0)[r]{\strut{} 4.5}}% + \put(770,4776){\makebox(0,0)[r]{\strut{} 5}}% + \put(902,220){\makebox(0,0){\strut{} 0.5}}% + \put(1560,220){\makebox(0,0){\strut{} 0.55}}% + \put(2218,220){\makebox(0,0){\strut{} 0.6}}% + \put(2877,220){\makebox(0,0){\strut{} 0.65}}% + \put(3535,220){\makebox(0,0){\strut{} 0.7}}% + \put(4193,220){\makebox(0,0){\strut{} 0.75}}% + \put(4851,220){\makebox(0,0){\strut{} 0.8}}% + \put(5510,220){\makebox(0,0){\strut{} 0.85}}% + \put(6168,220){\makebox(0,0){\strut{} 0.9}}% + \put(6826,220){\makebox(0,0){\strut{} 0.95}}% + }% + \gplgaddtomacro\gplfronttext{% + \csname LTb\endcsname% + \put(5839,4603){\makebox(0,0)[r]{\strut{}'amdhal.dat'}}% + }% + \gplbacktext + \put(0,0){\includegraphics{fig/amdhal}}% + \gplfronttext + \end{picture}% +\endgroup
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fig/cell.eps Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,1415 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%HiResBoundingBox: 0.000000 0.000000 519.000000 292.000000 +%APL_DSC_Encoding: UTF8 +%%Title: (Unknown) +%%Creator: (Unknown) +%%CreationDate: (Unknown) +%%For: (Unknown) +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 0 0 519 292 +%%EndComments +%%BeginProlog +%%BeginFile: cg-pdf.ps +%%Copyright: Copyright 2000-2004 Apple Computer Incorporated. +%%Copyright: All Rights Reserved. +currentpacking true setpacking +/cg_md 141 dict def +cg_md begin +/L3? languagelevel 3 ge def +/bd{bind def}bind def +/ld{load def}bd +/xs{exch store}bd +/xd{exch def}bd +/cmmtx matrix def +mark +/sc/setcolor +/scs/setcolorspace +/dr/defineresource +/fr/findresource +/T/true +/F/false +/d/setdash +/w/setlinewidth +/J/setlinecap +/j/setlinejoin +/M/setmiterlimit +/i/setflat +/rc/rectclip +/rf/rectfill +/rs/rectstroke +/f/fill +/f*/eofill +/sf/selectfont +/s/show +/xS/xshow +/yS/yshow +/xyS/xyshow +/S/stroke +/m/moveto +/l/lineto +/c/curveto +/h/closepath +/n/newpath +/q/gsave +/Q/grestore +counttomark 2 idiv +{ld}repeat pop +/SC{ + /ColorSpace fr scs +}bd +/sopr /setoverprint where{pop/setoverprint}{/pop}ifelse ld +/soprm /setoverprintmode where{pop/setoverprintmode}{/pop}ifelse ld +/cgmtx matrix def +/sdmtx{cgmtx currentmatrix pop}bd +/CM {cgmtx setmatrix}bd +/cm {cmmtx astore CM concat}bd +/W{clip newpath}bd +/W*{eoclip newpath}bd +statusdict begin product end dup (HP) anchorsearch{ + pop pop pop + true +}{ + pop + (hp) anchorsearch{ + pop pop true + }{ + pop false + }ifelse +}ifelse +{ + { + { + pop pop + (0)dup 0 4 -1 roll put + F charpath + }cshow + } +}{ + {F charpath} +}ifelse +/cply exch bd +/cps {cply stroke}bd +/pgsave 0 def +/bp{/pgsave save store}bd +/ep{pgsave restore showpage}def +/re{4 2 roll m 1 index 0 rlineto 0 exch rlineto neg 0 rlineto h}bd +/scrdict 10 dict def +/scrmtx matrix def +/patarray 0 def +/createpat{patarray 3 1 roll put}bd +/makepat{ +scrmtx astore pop +gsave +initgraphics +CM +patarray exch get +scrmtx +makepattern +grestore +setpattern +}bd +/cg_BeginEPSF{ + userdict save/cg_b4_Inc_state exch put + userdict/cg_endepsf/cg_EndEPSF load put + count userdict/cg_op_count 3 -1 roll put + countdictstack dup array dictstack userdict/cg_dict_array 3 -1 roll put + 3 sub{end}repeat + /showpage {} def + 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin + 10 setmiterlimit [] 0 setdash newpath + false setstrokeadjust false setoverprint +}bd +/cg_EndEPSF{ + countdictstack 3 sub { end } repeat + cg_dict_array 3 1 index length 3 sub getinterval + {begin}forall + count userdict/cg_op_count get sub{pop}repeat + userdict/cg_b4_Inc_state get restore + F setpacking +}bd +/cg_biproc{currentfile/RunLengthDecode filter}bd +/cg_aiproc{currentfile/ASCII85Decode filter/RunLengthDecode filter}bd +/ImageDataSource 0 def +L3?{ + /cg_mibiproc{pop pop/ImageDataSource{cg_biproc}def}bd + /cg_miaiproc{pop pop/ImageDataSource{cg_aiproc}def}bd +}{ + /ImageBandMask 0 def + /ImageBandData 0 def + /cg_mibiproc{ + string/ImageBandMask xs + string/ImageBandData xs + /ImageDataSource{[currentfile/RunLengthDecode filter dup ImageBandMask/readstring cvx + /pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd + }bd + /cg_miaiproc{ + string/ImageBandMask xs + string/ImageBandData xs + /ImageDataSource{[currentfile/ASCII85Decode filter/RunLengthDecode filter + dup ImageBandMask/readstring cvx + /pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd + }bd +}ifelse +/imsave 0 def +/BI{save/imsave xd mark}bd +/EI{imsave restore}bd +/ID{ +counttomark 2 idiv +dup 2 add +dict begin +{def} repeat +pop +/ImageType 1 def +/ImageMatrix[Width 0 0 Height neg 0 Height]def +currentdict dup/ImageMask known{ImageMask}{F}ifelse exch +L3?{ + dup/MaskedImage known + { + pop + << + /ImageType 3 + /InterleaveType 2 + /DataDict currentdict + /MaskDict + << /ImageType 1 + /Width Width + /Height Height + /ImageMatrix ImageMatrix + /BitsPerComponent 1 + /Decode [0 1] + currentdict/Interpolate known + {/Interpolate Interpolate}if + >> + >> + }if +}if +exch +{imagemask}{image}ifelse +end +}bd +/cguidfix{statusdict begin mark version end +{cvr}stopped{cleartomark 0}{exch pop}ifelse +2012 lt{dup findfont dup length dict begin +{1 index/FID ne 2 index/UniqueID ne and +{def} {pop pop} ifelse}forall +currentdict end definefont pop +}{pop}ifelse +}bd +/t_array 0 def +/t_i 0 def +/t_c 1 string def +/x_proc{ + exch t_array t_i get add exch moveto + /t_i t_i 1 add store +}bd +/y_proc{ + t_array t_i get add moveto + /t_i t_i 1 add store +}bd +/xy_proc{ + + t_array t_i 2 copy 1 add get 3 1 roll get + 4 -1 roll add 3 1 roll add moveto + /t_i t_i 2 add store +}bd +/sop 0 def +/cp_proc/x_proc ld +/base_charpath +{ + /t_array xs + /t_i 0 def + { + t_c 0 3 -1 roll put + currentpoint + t_c cply sop + cp_proc + }forall + /t_array 0 def +}bd +/sop/stroke ld +/nop{}def +/xsp/base_charpath ld +/ysp{/cp_proc/y_proc ld base_charpath/cp_proc/x_proc ld}bd +/xysp{/cp_proc/xy_proc ld base_charpath/cp_proc/x_proc ld}bd +/xmp{/sop/nop ld /cp_proc/x_proc ld base_charpath/sop/stroke ld}bd +/ymp{/sop/nop ld /cp_proc/y_proc ld base_charpath/sop/stroke ld}bd +/xymp{/sop/nop ld /cp_proc/xy_proc ld base_charpath/sop/stroke ld}bd +/refnt{ +findfont dup length dict copy dup +/Encoding 4 -1 roll put +definefont pop +}bd +/renmfont{ +findfont dup length dict copy definefont pop +}bd +L3? dup dup{save exch}if +/Range 0 def +/DataSource 0 def +/val 0 def +/nRange 0 def +/mulRange 0 def +/d0 0 def +/r0 0 def +/di 0 def +/ri 0 def +/a0 0 def +/a1 0 def +/r1 0 def +/r2 0 def +/dx 0 def +/Nsteps 0 def +/sh3tp 0 def +/ymax 0 def +/ymin 0 def +/xmax 0 def +/xmin 0 def +/setupFunEval +{ + begin + /nRange Range length 2 idiv store + /mulRange + + [ + 0 1 nRange 1 sub + { + 2 mul/nDim2 xd + Range nDim2 get + Range nDim2 1 add get + 1 index sub + + 255 div + exch + }for + ]store + end +}bd +/FunEval +{ + begin + + nRange mul /val xd + + 0 1 nRange 1 sub + { + dup 2 mul/nDim2 xd + val + add DataSource exch get + mulRange nDim2 get mul + mulRange nDim2 1 add get + add + }for + end +}bd +/max +{ + 2 copy lt + {exch pop}{pop}ifelse +}bd +/sh2 +{ + /Coords load aload pop + 3 index 3 index translate + + 3 -1 roll sub + 3 1 roll exch + sub + 2 copy + dup mul exch dup mul add sqrt + dup + scale + atan + + rotate + + /Function load setupFunEval + + + clippath {pathbbox}stopped {0 0 0 0}if newpath + /ymax xs + /xmax xs + /ymin xs + /xmin xs + currentdict/Extend known + { + /Extend load 0 get + { + 0/Function load FunEval sc + xmin ymin xmin abs ymax ymin sub rectfill + }if + }if + + /Nsteps/Function load/Size get 0 get 1 sub store + /dx 1 Nsteps div store + gsave + /di ymax ymin sub store + /Function load + + 0 1 Nsteps + { + 1 index FunEval sc + 0 ymin dx di rectfill + dx 0 translate + }for + pop + grestore + currentdict/Extend known + { + /Extend load 1 get + { + Nsteps/Function load FunEval sc + 1 ymin xmax 1 sub abs ymax ymin sub rectfill + }if + }if +}bd +/shp +{ + 4 copy + + dup 0 gt{ + 0 exch a1 a0 arc + }{ + pop 0 moveto + }ifelse + dup 0 gt{ + 0 exch a0 a1 arcn + }{ + pop 0 lineto + }ifelse + + fill + + dup 0 gt{ + 0 exch a0 a1 arc + }{ + pop 0 moveto + }ifelse + dup 0 gt{ + 0 exch a1 a0 arcn + }{ + pop 0 lineto + }ifelse + + fill +}bd +/calcmaxs +{ + + xmin dup mul ymin dup mul add sqrt + xmax dup mul ymin dup mul add sqrt + xmin dup mul ymax dup mul add sqrt + xmax dup mul ymax dup mul add sqrt + max max max +}bd +/sh3 +{ + /Coords load aload pop + 5 index 5 index translate + 3 -1 roll 6 -1 roll sub + 3 -1 roll 5 -1 roll sub + 2 copy dup mul exch dup mul add sqrt + /dx xs + 2 copy 0 ne exch 0 ne or + { + + exch atan rotate + }{ + pop pop + }ifelse + + /r2 xs + /r1 xs + /Function load + dup/Size get 0 get 1 sub + /Nsteps xs + setupFunEval + + + + + + dx r2 add r1 lt{ + + 0 + }{ + dx r1 add r2 le + { + 1 + }{ + r1 r2 eq + { + 2 + }{ + 3 + }ifelse + }ifelse + }ifelse + /sh3tp xs + clippath {pathbbox}stopped {0 0 0 0}if + newpath + /ymax xs + /xmax xs + /ymin xs + /xmin xs + + dx dup mul r2 r1 sub dup mul sub dup 0 gt + { + sqrt r2 r1 sub atan + /a0 exch 180 exch sub store + /a1 a0 neg store + }{ + pop + /a0 0 store + /a1 360 store + }ifelse + currentdict/Extend known + { + /Extend load 0 get r1 0 gt and + { + 0/Function load FunEval sc + + + + + { + { + dx 0 r1 360 0 arcn + xmin ymin moveto + xmax ymin lineto + xmax ymax lineto + xmin ymax lineto + xmin ymin lineto + eofill + } + { + r1 0 gt{0 0 r1 0 360 arc fill}if + } + { + + + + + 0 r1 xmin abs r1 add neg r1 shp + } + { + + + r2 r1 gt{ + + 0 r1 + r1 neg r2 r1 sub div dx mul + 0 + shp + }{ + + + + 0 r1 calcmaxs + dup + + r2 add dx mul dx r1 r2 sub sub div + neg + exch 1 index + abs exch sub + shp + }ifelse + } + }sh3tp get exec + }if + }if + + /d0 0 store + /r0 r1 store + /di dx Nsteps div store + /ri r2 r1 sub Nsteps div store + /Function load + 0 1 Nsteps + { + 1 index FunEval sc + d0 di add r0 ri add d0 r0 shp + { + + d0 0 r0 a1 a0 arc + d0 di add 0 r0 ri add a0 a1 arcn + fill + + + d0 0 r0 a0 a1 arc + d0 di add 0 r0 ri add a1 a0 arcn + fill + }pop + + + /d0 d0 di add store + /r0 r0 ri add store + }for + pop + + currentdict/Extend known + { + /Extend load 1 get r2 0 gt and + { + Nsteps/Function load FunEval sc + + + + + { + { + dx 0 r2 0 360 arc fill + } + { + dx 0 r2 360 0 arcn + xmin ymin moveto + xmax ymin lineto + xmax ymax lineto + xmin ymax lineto + xmin ymin lineto + eofill + } + { + + + xmax abs r1 add r1 dx r1 shp + } + { + + r2 r1 gt{ + + + + calcmaxs dup + + r1 add dx mul dx r2 r1 sub sub div + exch 1 index + exch sub + dx r2 + shp + }{ + + r1 neg r2 r1 sub div dx mul + 0 + dx + r2 + shp + }ifelse + } + } + sh3tp get exec + }if + }if +}bd +/sh +{ + begin + /ShadingType load dup dup 2 eq exch 3 eq or + { + gsave + newpath + /ColorSpace load scs + currentdict/BBox known + { + /BBox load aload pop + 2 index sub + 3 index + 3 -1 roll exch sub + exch rectclip + }if + 2 eq + {sh2}{sh3}ifelse + grestore + }{ + + pop + (DEBUG: shading type unimplemented\n)print flush + }ifelse + end +}bd +{restore}if not dup{save exch}if + L3?{ + /sh/shfill ld + /csq/clipsave ld + /csQ/cliprestore ld + }if +{restore}if +end +setpacking +%%EndFile +%%EndProlog +%%BeginSetup +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 0 0 519 292 +%%BeginPageSetup +cg_md begin +bp +sdmtx +%RBIBeginFontSubset: Helvetica +%!FontType1-1.0: Helvetica 1.0000.0.0000 + 14 dict begin/FontName /Helvetica def + /PaintType 0 def + /Encoding 256 array 0 1 255{1 index exch/.notdef put}for + dup 33 /P put + dup 34 /E put + dup 35 /parenleft put + dup 36 /o put + dup 37 /w put + dup 38 /e put + dup 39 /r put + dup 40 /C put + dup 41 /c put + dup 42 /s put + dup 43 /l put + dup 44 /m put + dup 45 /n put + dup 46 /t put + dup 47 /parenright put + dup 48 /S put + dup 49 /y put + dup 50 /g put + dup 51 /i put + dup 52 /I put + dup 53 /B put + dup 54 /space put + dup 55 /f put + dup 56 /a put + dup 57 /u put + dup 58 /M put + dup 59 /d put + dup 60 /b put + readonly def + 42/FontType resourcestatus{pop pop false}{true}ifelse + %APLsfntBegin + {currentfile 0(%APLsfntEnd\n)/SubFileDecode filter flushfile}if + /FontType 42 def + /FontMatrix matrix def + /FontBBox[2048 -399 1 index div -909 2 index div 2961 3 index div 2470 5 -1 roll div]cvx def + /sfnts [< + 74727565000900000000000063767420000000000000009C0000036A6670676D0000000000000408000008AA676C79660000000000000CB4000018E0686561640000000000002594000000386868656100000000000025CC00000024686D747800000000000025F0000000746C6F636100000000000026640000003C6D61787000000000000026A0000000207072657000000000000026C0000003CB05C0001005BD00280580001A042F001F0000FFD90000FFDA0000FFD9FE55FFE605C70010FE6DFFF1033B000000B9000000B902FE3F3C00C0008D009B00AF000600A800C00028005E009800C9016A00B9015C00B400D6011E002E0080000400B8004C00CC01FFFFD1006600A400AF007400C2009500B1000C0028006D0015004C008E0125FF7A000C0040004C00620084FFA200240038008600BD0039005E008E00EDFFA9FFB300400052005500AA00AB00C200CB012302B10413FFAEFFE4000800510074008400AA00D1FF4CFFAF0012002C004200500051008400BE012503DAFF680018003B0098009C009F00A100C100EC018201B4FF68FF76FFD0FFE100020018001C00530053007D01B401E103AF0486FF9CFFEAFFFE001F0028002A00520060009300A300AA00AF00AF00C001000145016B0174019301950240028202B404850517FEFD00060029004700470048006F008800B400B900C400F200F901EF02180310037403C5FF35FFF3000B004B004C0052005500650076007600870087008E00AB00BB0106013001430150017D0194019501D3022A025502580277027802E6034E035C037903D3047304B2058C0598060BFEF5FFBBFFC7FFD50017001D005B0072007E009C00C200D000F400FA01030106011C0125013B0142015E015E0180019B02B901A101B9025001C001D002AA01DF01E301EF01FB0205020C0215022B0274029302AB02C202CE03690395039903DF03F5043E050205A105E5062507DBFE62FE89FECEFF3BFFE1FFF800030008002100390042004E005F0061006F00700034007F008E00AD00AD00AF00BD00C400C500C900C900C900E3011C00ED00F800F901000112011A0132014D014D014E014F01660169019E01BA01BA01BE01E301EF01F602000200020902110217021C02530262026D028002D50280031B032A034A035A03AF03AF03C803D603FB03FB04050413041504470449008C046D049A049A04A604A804B204CF0539053E054E055605800589058C036305D105D6067E068E06B206EF06F00728074C076F078C00B400C900C000C10000000000000000000000000004012400AF0032006E0063014401620096014301A10161008A00740064018801EF01700028FF5D037E0347023000AA00BE007B0062009A007D0089035C00A1FFD803AA00D70093006C0000008000A70442001D0597001D00820030002A + 002A002A002A000040292A292827262524232221201F1E1D1C1B1A191817161514131211100D0C0B0A090807060504030201002C4523466020B02660B004262348482D2C452346236120B02661B004262348482D2C45234660B0206120B04660B004262348482D2C4523462361B0206020B02661B02061B004262348482D2C45234660B0406120B06660B004262348482D2C4523462361B0406020B02661B04061B004262348482D2C0110203C003C2D2C20452320B0CD442320B8015A51582320B08D44235920B0ED51582320B04D44235920B09051582320B00D44235921212D2C20204518684420B001602045B04676688A4560442D2C01B9400000000A2D2C00B9000040000B2D2C2045B00043617D6818B0004360442D2C45B01A234445B01923442D2C2045B00325456164B050515845441B2121592D2C20B0032552582359212D2C69B04061B0008B0C6423648BB8400062600C642364615C58B0036159B002602D2C45B0112BB0172344B0177AE5182D2C45B0112BB01723442D2C45B0112BB017458CB0172344B0177AE5182D2CB002254661658A46B040608B482D2CB0022546608A46B040618C482D2C4B53205C58B002855958B00185592D2C20B0032545B019236A4445B01A23444565234520B00325606A20B009234223688A6A606120B0005258B21A401A4523614459B0005058B219401945236144592D2CB9187E3B210B2D2CB92D412D410B2D2CB93B21187E0B2D2CB93B21E7830B2D2CB92D41D2C00B2D2CB9187EC4E00B2D2C4B525845441B2121592D2C0120B003252349B04060B0206320B000525823B002253823B002256538008A63381B212121212159012D2C456920B00943B0022660B00325B005254961B0805358B21940194523616844B21A401A4523606A44B209191A45652345604259B00943608A103A2D2C01B005251023208AF500B0016023EDEC2D2C01B005251023208AF500B0016123EDEC2D2C01B0062510F500EDEC2D2C20B001600110203C003C2D2C20B001610110203C003C2D2C764520B003254523616818236860442D2C7645B00325452361682318456860442D2C7645B0032545616823452361442D2C4569B014B0324B505821B0205961442DB8002B2C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB8002C2C2020456944B001602DB8002D2CB8002C2A212DB8002E2C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB8002F2C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800302C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800312C2020456944B0016020 + 20457D691844B001602DB800322CB800312A2DB800332C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800342C4B535845441B2121592DB800352C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800362C2020456944B001602DB800372CB800362A212DB800382C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800392C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB8003A2C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB8003B2C2020456944B001602020457D691844B001602DB8003C2CB8003B2A2DB8003D2C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8003E2C4B535845441B2121592DB8003F2C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800402C2020456944B001602DB800412CB800402A212DB800422C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800432C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800442C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800452C2020456944B001602020457D691844B001602DB800462CB800452A2DB800472C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800482C4B535845441B2121592DB800492C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB8004A2C2020456944B001602DB8004B2CB8004A2A212DB8004C2C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB8004D2C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB8004E2C4B20B0032650585158 + B080441BB04044591B21212045B0C05058B0C0441B2159592DB8004F2C2020456944B001602020457D691844B001602DB800502CB8004F2A2DB800512C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800522C4B535845441B2121592D0000000200A10000052F05BD00030007003E402105062F02010004072F03000A05042F0303021A0906072F01001908098821637B182B2B4EF43C4DFD3C4E10F63C4D10FD3C003F3CFD3C3F3CFD3C31303311211127112111A1048EB8FCE205BDFA43B8044DFBB30000000001008EFE5E026105D50014003E4009141109131617171A09BB019C00080014019C400E400080044C10191516F7216C5218B80732852B2B4EF44DED1ADD1AEDD4ED4E456544E6003F3F3130010207061110171613232E01272627263510373613025E9D2F475132937992462938160B5D3BBB05D5FECF90DBFEE1FEDEF094FEEAE47E6C94A8574F0128E7930125000000010044FE5E021705D500130036400C081100131517171A044C0F13BB019C00000009019C400908191415F7213F7B182B2B4EF44DEDD4EDDDED4E456544E6003F3F3130131237361110272603331E01171E011510070603479F2E46513293799A412630295E3BBAFE5E01368ED701210121F0940116F673657DF471FED8E895FEDE0000000300970000050405BD000A00150028008240385A0D5A116A026A0D6A117A02772107490D4811021D081F0F041F131E000027081E17020B1E270804311B690F31231A2A091525281619292AB8015FB3217666182B2B4EF43C4DFD3C4E10F64DEDF4ED003FFD3FED12392FFD3901111239313043794012181A0508192506260718042B01051A082B01002B012B2B2B8181015D5D013237363534272623211101323736353427262321110321201716151407060716171615140706290102C47E466E754282FE9D01ADB74E318F4C7DFE75C3027701026D404F294D7138635985FEDEFD93035023378F90321CFE39FD5A6A435FA03A1FFDFB05139A5B778B592F272B3660A98E73AC0002005AFFDA057105E5001D001E00B1403B1B0597019605031F011F0482018705891305530803861D111115063A1D030C3A15091E021E1E190331023B1031111A20093119191F20A1216A66182B2B4EF44DED4E10F64DEDF4ED12392F003F3FED3FED12392F10ED31304379403A001C172513260E251B260B160932000D1410320112110F10071C0932000500033201010204030A180C32000F120C3200081A06320104010632012B2B2B2B01103C103C2B2B103C103C2B2B2B2B2B2B815D015D080117232E0123 + 220011101233323736373306070621202726111037362123041E013411C221C5B2D9FEF5F1EFDC733D1EC21A92AFFED7FF00AEE5ACBA01472805E5FEDABB8EA6FECFFEC5FEFEFEBFA95991E89DBD9BCD01AC0145D0E20000000200AF000004ED05BD000B000C004E4024071E04040B031E01000209081E0A0B080C020C0C02000669023B091A0E03082500190D0EB8010BB3219589182B2B4EF44DFD3C4E10F64DF4E41112392F003F3F3CFD3C3F3CED12392FFD313013211521112115211121152101AF042FFC93032BFCD5037CFBC2021F05BDB4FE42AAFE0EAF05BD000000000100C90000019205BD00030017B8002B2BBA00010000002E2B00B800002FB800022F303113331123C9C9C905BDFA43000100970000061705BD001300CB405944014B03020601090316011903D7010513011C03140B1B0C57015803D401DB03D40BDB0C0A040A040D45028602045102970202290A280D380A380D4702570276020725640D0A0203120301020B0C120306081517171A040405B8019B400D0A1F030B06FD0C0102FD0D1F12B8019BB6130019147670182B4E10F43C4DFDE419F43939F4393918E4FD3C4E10456544E6003F173C3F3C1217394B5279B10D0CB801AAB40201020A0BB801AAB202020387054D2E7AFD047DC487052E7AFD047DC43130005D727101725D71132109012111231134363501230115141615112397011D01A601A3011ABD04FE5DC5FE5A05BE05BDFB2604DAFA4303632DD077FB2904D72D36DD34FC9D0000000200AF000004F805BD000A001400614035690C6912790C7A12044814581468147A140407081E1110100A010E0F1E0100020A080206120C0409141431041A160F092500191516B8010BB3219589182B2B4EF44DFD3C4E10F64DFD11121739003F3F3CFD3C1012392F3CFD3C015D31305D132132161514062321112300272623211121323635AF0295C4F0D6DEFE32C70380784273FE74018C86A705BDDDC8ACFFFD9304B93A1FFE0372900000020060FFD504F605E5002F003000FE405E290F27232626360E3521472662267A0E7724096B08180E172502590E680EAA22030A0E3A2224220A03041C1886142F2F2B1C3A1403043A2B0930020A0E081124221F28303011182517490825281A321F25114900252F193132A0216A89182B2B4EF44DEDF4ED4E10F64DEDF4ED12392F1211393912113939003F3FED3FED12392F10ED111217392EFD335D7131304379404D282E111F0008022602262D2506251A26032C002B002D2E032C002B00052A082B011D131F2B001B15182B011918012D042B0009270B2B01250B012E042B000729042B001E121C2B0119161C2B01002B2B2B2B10102B2B01103C2B2B2B2B103C2B2B2B2B2B2B818181005D0116171633323736353427262F0126272635342433320415232627262322 + 06151417161F01161716151404232027263701011E073463FA705CB24B4CA2C7C3518C0112FBE70143BB0F315BDAB09A5A3BD0CE95518CFE9DEBFEEE9B9B03024D01DA7D4E92203EA0783332252D2C355CB7C6FEDFF5763F7394626C3220302F223B67C4F4D28C8BEE040B0000030052FFDC04470449000F003B003C00DD40382A30010A100B1B0C1C2733481069096A10073908120C09031B320724091D100C1D3B2B022E293BB73B023B322A2512100705081C2722171CB8018A4023171D1F07271D2E0B021D350B3C073C3C1C1407292AA8241A3E1B291C4A0F2738193D3EBC0197002100B9019600182B2B4EF44DEDF4ED4E10F64DE4FDC412392F003F3FED3FED3FEDED1239111217395D1112392EED2EED01111239111739313043794028363715220001192501360F2100181E1B21001620142101212200370221001A1D1721011521172101002B2B2B01103C2B2B2B2B818181005D015D2416333237363D010E010F0106070615013637363534262322070607233E01333217161511141633323637150E0123222726270E012322263534363713010E724E5F59962168326D62315301B43E150C837A8D3B210AA805F7A3BD767517250C1E112A2C265D2A160937CE7C95BDBA978ACF5A2C49A691151C060E0D1C2F67016C082C182D5C534C2A53C69B484898FD971C220303850C06422340486AB58895A41301E40000020076FFDE042505C20011001E0070402EA607A71CD71C0322080F1E02050000171D0507110A1E1D0B0B1427081A201A2E102E01290011191F208721BD5D182B2B4EF43C4DFDE4E44E10F64DED003FED3F3FED3F113911393130437940181216060A1606142601120A142601150717260113091E26002B2B012B2B8181005D1333113E01333212111402232227262715232436353426232206151417163376AF3BA460C8F9F6DA7A543239A6026691918D7BB92647C205C2FDEB4D51FEEDFEF4FEFEB03B234D897DE8BEA9DEB6D1975EB100000002003BFFE103D0044E001A001B00A7402FA719019818A808AA18034A08119B14030314061D1A070D1D140B1B071B1B1710271201032702111A1D0A2717191C1DB80107B321727D182B2B4EF44DED4E10F63C4DED3939ED12392F003F3FED3FED12392F10ED313043794034001908250C150A26000E1310260112110F1007190A26000500032101010204030B160D26000F120D2600091806260104010621012B2B2B2B01103C103C2B2B103C103C2B2B2B81005D015D001617232E012322070615141633323637330E01232202351000330702D6E317AF10727EAC4A308892708319AF1EF0BBD2FA0112D41C044EB0D76383A86DA0A1DC8977D5C50133E6011A013A0500020038FFDA03ED05C2000B001D00774032370E470E570EA704A91B05250814020F1D1000081D1D + 07130A021D170B052E132E102911121A1F0B271A191E1F87217242182B2B4EF44DED4E10F63C4DFDE4E4003FED3F3FED3F1139113931304379401A181C090A000101180B2600091C0B260000190226000A1B0826012B2B012B2B818181005D1216333236353426232206150017161711331123350E0123220035341233F692A17DA1A67A88A9018A53303DADA23FAC6FB3FEFAEFDE015FE8D7C9CBC3D0CA0237341E4B021DFA3E956358012DFAEA015700030048FFDA041A0449001C00240025010C40799708991AA71F03050E020F0514150E120F1514400C401408291A014B0BB603C701C603C71BD808D909D61FD823E817E8230BC711C712025C080521240F9A161D243906070716211D1C070A1D160B2507971CA71CB71CD71C0425160F251C05190A0C07110E270F1D27051A27242E072719192627D421A65D182B2B4EF44DFDE44E10F64DEDD4FD391239391112393912392F5D003F3FED3FED12392F3CFD3C10ED1112393130437940460023040503050205010504061F26111012101310141004060C25221B24260020001D26011E1D09170726000B150E26010D0E231A2126011E0521260108180A26000D100A2600002B2B2B2B01103C2B2B103C2B2B2B2A2B2A8101715D00715D5D00161716171615211E013332373637330E01070607062322001110003301262726232206070102B4D638361210FCEF0590978D543014B1074F3152794152C8FEEA0118E2011F0B284AAD7CA805012304476B55516C4AA2A3C55D36473B912E501C100123010601020142FE26754682B38A01DC0000000001001C0000021705D20017004D402B071D060A1D03010F1439160D06120A1917171A0E0D1129171207120F0E1F0E020EFC14191819FC21677E182B2B4EF44DFD5D39C42F3CFD3C104E456544E6003F3F3C4DFD3C3FEDD4ED313012373633321617152E012322061533152311231123353335B5233FB41124171C190B5220B2B4B295950542345C0202A4020155AE8EFC64039C8EA800000003003DFE3B03E80449001F002D002E00B7404D36144908490958085909880CA91BA81DA927A62BB91B0B4008031622290EC40A221D1F070406291D190A121D0A0F2E072E2E051C032E162E2D29051A300C0E270D3E26271C192F3087217242182B2B4EF44DEDF4ED394E10F64DFDE4F51112392F003F3FED3FED3F3FED10ED1112393931304379402C23281A1E0B1124251026231E262600281A262600110B0E21000F0E0C0D251D222601271B2926000F0C122100002B2B2B01103C103C2B2B2B2B2B818181005D00171617353311140706212226273316171633323736270E0123222411100033002623220706151416333237363501027C5E3335A63C70FEC9ADEC0EB70D273D83CF40260336987DAEFEFB0107BA0144A47FBE4625937CC24F2CFE + D104423E234387FC32CC76DA9BA548273C9256DD5250F7011D010D012EFEA1C0B25F9AB5BDAF6384022D0000000200840000013B05BD000300070036401C07E50400010006030A0917171A06010229070300190809AA216242182B2B4EF43C4DC4FD3CC44E456544E6003F3F3C3F4DED3130133311231133152384B7B7B7B7042AFBD605BDCC0000000100890000013D05BD0003002940150000030A0517171A0102290003190405AA216242182B2B4EF43C4DFD3C4E456544E6003F3F31301333112389B4B405BDFA4300000001008400000625044700260085403B0708070E060F1708170E170F2708270E270F4819560B670B0C23250A1A1D23190A02041725211D171D0D060700061B1C2503130A2817171A112914B80101B21A291DB80101400A00012E25292600192728B8010DB3216242182B2B4EF43C4DFDE410F4EDF4FD4E456544E6003F173C3F3F3C4DEDED111217390111123912393130005D13331536373633321716173E01333217161511231134262322061511231134272623220615112384B240345971804E2C243CA265D84E2ABB6B4D6A99B71A297066A7B4042F984F243D3F244656539C548EFD3702E86B508EA6FD9102BB6D324B9ECFFDC80000020084000003ED04490019001A005E4031B706C706020406140627147606740705140C021418101D05070006180B0A1A071A1A000C29091A1C012E18291900191B1CB80106B3216242182B2B4EF43C4DFDE44E10F64DED12392F003F3F3C3F3FED1139390112393130005D015D1333153E01333217161511231134272623220706070E011511230184AB4CAA68E4502CB71D307E40294A382D1BB401A7042F985E529F57A2FD5102A3623C640D1642357169FDCF0449000003003BFFD90421044E000C0018001900904033980896109916A504A808A610A916B808C808D704E50EE9140C3A08061D18070C1D120B190719191502270F1A1B092715191A1BB80109B321725D182B2B4EF44DED4E10F64DED12392F003F3FED3FED31304379402C001704260B1309260000110226010717092600050D0226010A140C260001100C26000816062601030E0626012B2B2B2B012B2B2B2B2B81005D241235342726232206151416331200111002212200351000330702E085304CBAA59696A3D6011EFCFEF7DDFEFC0112E70674010FA6965E94FCB2ABE403DAFEECFEF4FEFDFEAE012BFC010E014005000100890000029204470011004F40262703260D37034704040E0810020E0911090C270805070006110A081A13012E10291100191213B80145B321627E182B2B4EF43C4DFDE44E10E6003F3F4D3FC4FDC411123939011112393130005D1333153E0133321617152E0123220615112389AB15A46B05181D101B108892B4042FB9369B0203BE0302AF72FD980000020042FFD703B6 + 044B002E002F012E408F38099805961299149815982A062824252736214621472447275624572766246726790C790D790E7623742474257426A61EA82C1303000B15052D042E13001A151B171C18152D142E280F0B6908262536250225220D0A042B1318C61C1D1307041D2E9A2B0B2F07090E100207002F212F1A1F18161827173E28260727281A310E1F27103E00272E193031B221A65D182B2B4EF44DEDF4FD394E10F64DFD3910F4FD3911123939392F111239113939003F3FEDED3FEDED111217397131304379404C012D022615251A26210E1F21000926072101032C002100052A0721011D121F21001B14182101200F22210021220E0D08270A21012625090A012D04210006290421001E111C210119161C2101002B2B2B2B103C103C2B103C103C2B012B2B2B2B2B2B2B2B2B81005D5D015D13161716333236353427262F01262726353436333217160723262726232206151417161F011617161514062322262701EF082544A864983D27738F894174DBB9F26B4302AA05263E99666945284E77C24269D9DEEFC70701B701505A3057575B4524161D24222A498198BC8E5A683D32474E40462A19131D2F2C45948FD0D9A002F900010017FFEF0209055A00180052B50D2E0AC00E01B8013F40250416391703060E0A111A17171A0301062900150E150F031F030203FC1619191AFC21677D182B2B4EF44DFD5D39C42F3CFD3C104E456544E6002F3F3F3C4DFD3CED10FDE431301333113315231114171633323637150E012322263511233533A8B6ABAB2615310D1E141F43277E5A9191055AFED593FD4538130B01028E0908816702C593000000020080FFE303DE044900170018005E403AB814C81402091308141913191428067703D707070800050E0A00060D0A051D120B180718180B160D2E0A290C0B1A1A01291619191AD2216242182B2B4EF44DED4E10F63C4DFDE41112392F003F3FED3F3F3C391112393130005D015D0111141716333237363511331123370607062322272635112501381A3083BC4425B4AA0223346793E5532D01AF042FFD39523460A85A9D020EFBD19E3D2A5499528902D81A0000010012000005A1042F000C0120407E4704AA09028E09014607490B87038A08850ACA02C403C607C908C60AC90B0B66076A08650A690B76077908760A790B85078A0B0A4607490B0247037700780503572816282B012B043B013B048F018F0406090401030B020305060C050006080A0B03070A0E17171A0705069B080304C40A0209C40B00019B0C190D677E182B194E10F4184DFD3939FD3939FD3939FD3939194E456544E618003F173C3F173C1217395D4B5179400C0529120607060029120C0C0B0587102B87102B4B5279B4090A09080AB8018B401312010102070604050529120606070908090A08B8018B400E120404 + 030B0C00010029120C0C0B01874D2E2B87107DC41805872E182B087D10C505872E182B877D10C405872E182B087D10C53130015D71717100715D1B02331B013301230B012301D7CED1CAD2DBB4FEC9BBDAD3BBFECB042FFCB4034CFCB90347FBD1033DFCC3042F0000020015FE4903E804490018001900CA406E8A158818A71803070617063812481258126707770377078C1498009705981597169717A800A8161048004B154717C915044405C605028705A600A601A705A8170524280518151716010006150C0B0F1D080E19071919161B17171A050001AF171518AF0C8F16191A1BD421677E182B2B194EF44DE418FD3939FD3939194E456544E61812392F003F3F4DFD3932192F183F3C3C3C123939014B5279401215150016166D121717180501016D12000018872E2B107DC418872E2B10087DC418015D71313071015D005D013306030207020623222627351E01333236373E0137013301030321C7268362429C809C26291E2F2A10322F10053E0EFE74CC011F01042F67FE91FEECAEFE66B40608A40D062118089424044EFC980382000001000000000000ADA987CF5F0F3CF500110800000000005F4D8F0000000000BD95F341FE71FC730B9109A6000000090001000000000000000100000629FE2900000C01FE71FB580AD400010000000000000000000000000000001D05C700A10239000002AA008E02AA00440556009705C7005A055600AF023900C906AA0097055600AF0556006004730052047300760400003B04730038047300480239001C0473003D01C7008401C7008906AA0084047300840473003B02AA008904000042023900170473008005C7001204000015000000340034007C00BE014201D20216022E02BA031003DC04A60510059205FE06C8071407BC07EA080C088808E4095C09A20A820AD20B2C0BDA0C7000010000001D006B0009006C00080002001000100053000007E808AA00040001B800492BB8003F2BB800352BB8002B2B4118008001A6009001A600A001A600030069018B0079018B0089018B0099018B00040089018B0099018B00A9018B00B9018BB2040840BA0179001A014A400B041F5414191F180A0B1FD2B80106B49E1FD918E3BB0119000D00E10119B20D0009410A01A0019F0064001F01A50025017A00480028019AB3296C1F60410A01A9007001A9008001A90003008001A9000101A9B21E321FBE012C00250401001F0126001E0401B61FE7312D1FE531B80201B21FC227B80401B21FC11EB80201400F1FC01D9E1FBF1D671FBE1D671FAB27B80401B21FAA29B80401B61FA91D6C1F931EB8019AB21F921DB80101B21F911DB80101B21F751DB80201B61F6D29961F6431B8019AB21F4C96B802ABB21F391DB80156400B1F3638211F351DE41F2F27B80801400B1F2D1D4C1F2A31CD1F241DB802 + ABB21F201EB8012540111F1C1D931F3A1D4C1F1E1D45273A1D4527BB01AA019B002A019BB2254A1FBA019B0025017AB349293896B8017BB348283125B8017A403648289629482725294C1F252946272729482756C80784075B07410732072B072807260721071B071408120810080E080C080A08080807B801ACB23F1F06BB01AB003F001F01ABB308060805B801AEB23F1F04BB01AD003F001F01ADB70804080208000814B8FFE0B40000010014B801ABB41000000100B801ABB606100000010006B801ADB300000100B801AD401F04000001000410000001001002000001000200000001000002010802004A00B0018DB806008516763F183F123E113946443E113946443E113946443E113946443E113946443E11394660443E11394660443E11394660442B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B18011DB0964B5358B0AA1D59B0324B5358B0FF1D592B2B2B2B2B2B2B2B182B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B74752B2B2B65422B2B4B5279B376706A66456523456023456560234560B08B766818B080622020B16A704565234520B003266062636820B003266165B070236544B06A234420B176664565234520B003266062636820B003266165B066236544B0762344B10066455458B166406544B27640764523614459B36242725D456523456023456560234560B089766818B080622020B172424565234520B003266062636820B003266165B042236544B072234420B1625D4565234520B003266062636820B003266165B05D236544B0622344B1005D455458B15D406544B262406245236144592B2B2B2B456953427374B8019A2045694B20B02853B049515A58B020615944B801A6204569447500 + 00>] def + /CharStrings 29 dict dup begin + /.notdef 0 def +/space 1 def +/parenleft 2 def +/parenright 3 def +/B 4 def +/C 5 def +/E 6 def +/I 7 def +/M 8 def +/P 9 def +/S 10 def +/a 11 def +/b 12 def +/c 13 def +/d 14 def +/e 15 def +/f 16 def +/g 17 def +/i 18 def +/l 19 def +/m 20 def +/n 21 def +/o 22 def +/r 23 def +/s 24 def +/t 25 def +/u 26 def +/w 27 def +/y 28 def + end readonly def + currentdict dup/FontName get exch definefont pop end + %APLsfntEnd + 42/FontType resourcestatus{pop pop true}{false}ifelse + {currentfile 0(%APLT1End\n)/SubFileDecode filter flushfile}if + /FontType 1 def + /FontMatrix [ 0.00048828125 0 0 0.00048828125 0 0 ] def + /FontBBox{-399 -909 2961 2470}def + /UniqueID 4100303 def + currentdict currentfile eexec + 54544758EC884CF30C3CD503CEDBFF3839C47C3C3333173232E3FDBFF439491DB843E1924E63AA7726BBB0485AB56D93D8C0906F647A47162891E73FFC2A9873C4B1EAC5EEBDFFC4D06084FBD84139DF4583C6E259D10699944D1068C9C45667DCCCFB9B7EA01B606435EDCBD273ABAC093D14085CCBAC149BD7382E842CFE0D7FE4FD2EF589A2471F6074A80A8B675C2F7A50D63AC1EF90D787BADD11633CB01CF6EE3B37AAF9078A69AC4740E9B6525D78BBD839551A1CB80DB8682FA5E87591BBD6EE8B946063A2A58D9CA3685AB305495DC5FB5747EB8A9A059C4976C0FE4EEAB1D56FF47F1E9664ED9F4A7DAB763AF92B2F6CF2FA7DEC24710E0B9096E30F772BA7FEA9BDBE496C42ED2CEB58F54E80BDF57CE7B4DB6CCFE7182F43BF93CCA0767AF95D62C5D2C3DC6AE1E6D139F51A2C63432117F1714C5566572EE9967A715420ABDCD1D7BD74F8450B89965FCC81C6ACA565C5F3CCF91D430D1F953E4F1A645300A98DD8C47CD64555F08F422340A85404EAE0D3229C4F9336B9470CACBD6BBF3395104750A915CC6EAAC197668267B8C62D2764C8CD69FD937CA3C924D997A0EDE7964BEB9EA2F92EF70C5E5DA0AA5567765E71F2B911B3C5586B741EEB93F3C73016EC16BFF283758900903D203992EFC8BAFAF13579C602F38C926BAEAB28275C745AF1AE9BF51BC067C3C015CE8D2E034177832EFBD48FA386CB77C8CF93D3D84206620DDB577E532C2ED2DEDC6EA4702232014ADEBC5A66BA939C9E3E3F631793E17796EF3C6620807C87D1FEA7850BE11F24AC96222C64F35A463C7286CDADFF53C956AE5634A27AFA6174E4FE17E700B211056E7BF65B069FB7EAA9A692EB09B720FFCD64B000797156B787041BFEEDB9B027C06063144F86E12817D996A97BD0E9AF2F7A91CD46F7C2E1AFBACF37A4D72264ADE4149B01122B900AE8DB9B6DA5FC33D7F8AEF54E022AD31F274C2F5487627D17CF20EE365D627FBF7B3C9DC33449F9A4ECDDC7DECB6546E5264D233DB137803DE7CBAE5D3468517D1A5F274ED0253B84F8A2C0FD7F41BACD61E8F54402603F0BE615BC28061CA7A7D392798CADE94CAB60AC09DBF354AA1112FD930FEED5E92974FF085D4CC389A6EAFC2A5C7E6BE72D967B44A0AEA1DE9390D2C24250FA7CCAA3912A26137525CE227714080DD54EB92BC8AFB1DE8E5CA6B65FD0CB2ED359A79725DCC7F8E37BD138374D15947465089269DD1E8DF217CBE00C6FB181C403B62D7D5685787070779AC0B872FE2FE7A754DF62035D5775562D9F5D56686EC3AAAF4A7B571F4518DE308DA9B47373665A42FE7F4057817036211FB4954E42DB6764B83E5FCC8219943E5435078E5CD0628B3FF2719E15D8A0109BE091C968C1E8DC08B4B290E84D358E13655150BFA9E97F7636FCFA029BE46A4903D02AAB55F3408D6D4056 + D2ADFAFF88B53FF5151C7980C211B9A4CBB8F77C3293ED885DAA689952B7A60C5FAE71C8BB7D5E01710A2E155A6E0FF37C6F67BCC90ACB45985DCB8DC7FD4C040CBE0CD94B4F6A43CC53C22FE137CDB6E796985323610990F79F9AB270CDD7F869C5E192200D94B32609A45086E388ACB93CAE725D72B89561D3290963A08988D7A7D6F164E015F8AAE49ED843C06C2C201015E7094EE9D5514D91484DAA33C54F28F3100811EAB462878E82BC550E6C5255CB614508BFDA6D5D70E3AC3E46BF7BF42122430AC3925A9E9157293855FD71F7BC9E7B39FC42EE5E32D0273620510D6666B7948DCFA13589EC6B79197D80C8EBB923E1FFA0E545FD0F5998863AD673F901BFEEF4F0B1F879E1CC0183FA900A80CC804C125D979F58DA7906DBC682F61035C984C65D44AEDDFB63B2791E7462BC7BADC84945CE9A39E2CF41C075C4B78BE85933131DD940D784552B8EAACF3866B361AF5DA27488064E8200F38A2316CFEE0B60866D14E01AA08B827A376EE40C9CC18D6BF7F40668EE9EB43594CB1A434A4B842AABCB4D0956F9BEE03D86648DBE1F9ABC2CAA10634796CD1D76E4A2752BB5011BA62D7DE18A3FD11F009B957A77B9EDB3800207B40F1CD0950EC8EEF47749D94DF1E3E2A590BB7518FAAA07B386EED7F0E8CA10C7ACB8007AE49504FF267ED6FD97122CDB1A6C8DF86E465222E1EC05C8315C1FA5973DD49FA0CB528587A7CB37CCAA7F15A04FEE3E86FBC5A6A18D812550B372F1EAD769A4DD8892B743CC7C15B813B79BCABB0532D9115F340290A33150D8181C21EB33CF829161ADF6F9B49C13C0D2FC144CCA11A1404BEFB8E85ABFDC65B4931CD68A25E2A22103733305C97A532890D847DE37A7AA18C94BBB505F06AF85ED9957E9A3E2CE4A55E02E65D686DAE04C69FD80A4DBB78C735AC279E220928557A24A51385B3C3D62ECE7ED229E56EED3B7A7EC0495BB9FA2CEC6BBC54EBF4A464508FA8DD94488F53FD065E64DE12082EAD709A7D3BBCD3D3CE81B6283771A9BD1B77454CDD11C804103821952BE35C207FC73BA0EBE3A0AA764CA80E465B176972DC0D8C9333C11E196D83B2BC6E3ADD9D18EEB2CBC8DCD685870336F4B66A473A75713AFF8734C4A296D707256E530201EEB75F428947056313A5DE78B161A316051E26CBDE720447609BA24D4A383C07904D668FB59ADFD74DDD493FCF7667C50FDF0A2CFD2B7D678ECB3CB4B122D78BE77FA3E029B9507275B9CF3627BFD81D00CF64E6E6F3D4CB145513066B95DA9CB0BC9FE95FBF89BBA53B78B5BD6044A0965302E48F3B1289EFD66472B6F3F5D2B9DE7A8C436BF5D886FC35BA7A501E59C17573CD4ABBF87DFF27BC570DD7FAF7DB687AB16E3DAD335C94BA05F36BE5C00CE34C5FC6FDCF9BB3304E74292C05635A3D69510F52E983DFF7CEB10E20DE8D976B7BEA1 + 8004CCF6F85F44C1944A3B8468613C98473A0886C51BBFB87B4DA17EB50A60E673B3CF7C9B1DBFECFD5B3379DF724CFFA49A7127DA51CF98885254FE3A18A50207FF73748B11381CD2832217AEC24F6383946EB6AA98E975634CD4D0D11A5E6CA27AC87C0D4C32905FF9252750023C2E704022858792A2DC24D1DFAB9B86BCA0B3685C49A61CA2F75A54E795E830F06572A79E5A5797E448E6CBF9C0ABCDD4A616C8B1F410DF1652C89B1CFD57D8B6AC2ACAB3E489CC9F805434946D76C1DA3F19B64BA012D05A361DD4F2D2972FC3735F73E04317E6AA416503E40FF9670D12750C70F1CBDF2BD4E0397328C499638D7B02DABCB47A64611B2C2C453893D3FC60C77E3C19AEFF1038F2272199115CA742672239FEAD5652646C2CED13E09EED1986CF0E91CE592175B7A56095EADA8FA8BADECF88C1AF9C71152D26128F878048AC61ADED732E845E55F1103AB7D392D27AD5BB00D0EFD761642ED526C9BAE6C1912B15ACACB75E8CB0A5EFA3708B38FB1ECBD2799E1EFED7BF7BF8D6C0DAC5C35097911942B30857EC34C27651BA4C3D5793656A603D5BD8E47166739B7EC6501A12181888AFBB3B910D384C502AC63BD41ECC0C0C8FC5B9FB0B007DA124CF16536AF05983FEFE525BF8BE1C221BEEFC56C5B8A3869132A918C8A9BB800D8189D503A522A114F8CB7FE121CB062B72F6AF5FABE4217AFE4188450C0652EF98BDBCE506D83EA08E5F3CC71FB35F9244BAFF236DB24F26C6D91E6F846C68D208025A4721EB64F8B2CFF4859E10CC9F625A38419E260C15AB0AA7E54676F84E4749540245949CC003D2B81BAC90B27567A09DE97FDF5F1A2D626DDB540E69AE3BD6636F96163A974F948EEE362E3283C6D9C9EDB2CFC70C3C4AE8FEFE50B21B43DE992B077FCF17DCFD053C811D14D913DDC56C15F24A911F39F1DAB8E0D14F9AFBD62EFDED230DA9B89BF1F6717B6F0BEA16036566A922869B96858E5DB95E2B52B568A17D52DED6AB47D8FFE9D73C2DFC02D97A4D18460E44CD6448CDB1FAED09FEA6D026EFAD0F5553771163305EF6F1AA2DA0F65A4794A7DA0352990BF9377CF9CCF64C9D139DFCBF05DDD40C28E54B83493E261E16D61594C6254AD478D9357A57A33EADEA1CE874A70713D0540D29727DEDF9EAAF56BAE7F355E41A3E420A4EAF3DDABCC2F7026FA88B9EEFDF0F68EEB173D8F4FD1EF51874AE2D6B808586A4C105FC7060D42C51460B9EF6BE4E63561ED7F4903213769A5258EE3A156726A35DC8CBB3F1CCE69761A0E7885D6A5FF1CFF21F4E98388383507D3574424623C322DF16C4048B93337C1D5D32209CFB3A595B739310666A8A7BF7A4325D1B118DA67EB225A8BAE94D96DE5F028B8CE12218244A1F0944D458897D44956F0FF4660265BC5FBF59365F07CFE9E7F9FCC2324DEE0C75FDE6786706F185A17BA3 + 9AA2DD08341F92FD0E95BB7311C9064E40A057F2DA18A13246011459F5567710095B821FD8076ED72EEFBB56F18469D8B1C7573B885BE7B9C579DC295F52F5AE26A86EDDC412A92D48D59EAF767E899B01D16F2B6CD9E662BCDB13E8216584EDE12C20187F10ED447C2A5433379E2D2A0881AD9FC9A73D879F06D9ECFEFC8FE6891534BCDA042D7C134D2A3C4312E98FFF6743B3C1C64B8D2004EB52885E559A02A295684C72A55DC2CAB1ACB0FDEE89733F7BA8F0A4089552DEE5FD0ECC6A7F1C5AFE5F971430BD5A3FEA5D65B894110B62AE4F32348DB25D07093A28B9FCC9001B0142BF5100B144B2AB55B5BDB4FD4B8D5E2BD57D39A9373938571B0D9C347A6CA0207C1B80CD8393DB63ADD2D8517FC40CCAC769CB09C4C162C5C4E10C74146DB55D4B356D9D4FEFB7179697FBDA39D8011E555B287BE5FB711D64512CF0FAA39AE07805E706D705FFD3EF35CA3B9371CE427453194B98390B1AC2258FA7A7422058B2360DAEA0F416F7F3B1BB7EF22690EF4502E3F8728F95F42AB34FB41A52B302D33B967636DF7E7C827DE2A3C881FF3DBFD710EE92D47C0F23F1A1D40EB51DA547C0F23976AC0294F90CC5CBD64B9C7D2BDF55C9C72581B2413BA4D2A505905640B01B4F527255A5FFBAB27CD56697F21A70806BA80CA94F84E6934012B849D674B155B508E4646515EBE7A88D51778E27929EE4C8897B42A9B4C552190A8947C7E5C3030A2DDF0AF252AAA8C9E3C53033091DDDDDDADADA269AC82D4CA1B111E8BE1B6FCE720A6B203996C14B28811721BBED1A977E133091953BEE6422D413FE11C4F189C2323AAE47F6C27EF7D4CA9C9A31569C0AE0E4129A2CB0E7157A521FF3148C6AA3181CBE91BE82420B1123990CD1E5CFC3E8EFF80A1282E5B5EB126682C0C7614B435F8D3E8F2CD7F8545934D4EE21179FB711FFDE9AA03DB83558054901E1588BAE7D20138476A22CE81C2E47C661652825E3B1894A5650EF40092814254C1F73A3ABE3B6C8C6BA96220381DB038A65B8A3A7EB424A487030F1BA7594C0277284E54050912959675AC53CA04D53A231D7522163DA9786F5A5605FC463DC56F506ED6DA2B2313763FD0BDE55E4C15D60B219E693342401C432D90220AD009975138F19A7DAD803B7C3D93B5B6F83E32E8CEA0E1AC8DEC9197BC0AAA36FE528A03E75F0E8C4B21F23B540526426A9D16B783612A537A658F9ACB2AA2572696EA3085A0BA57FAF32D10B98829C35E13396343FC1368C54179BF938241D8C506DDF43935006B50CC539DBBADC3662D6EA8F38091D53C959F5024F5036525E125D35AAF47559970D4F1ED024F2AF4D4DC41EB801856AAA40E57C2436CE4B257198AEB0E886761E369189E303F3127629962586706D1184CC5974811475DFD9429725E8B040061E869B4F27238190F3904419FB13491E77607A + FF1BF637E4EB41F2DFC6DAB6D602BF71BE545AD3F3C9735B91633C252C8A1BC92AB534DC6AB52105F62188156E11F5966652F3CE4CB1B15DF2AEB97D692F4F54DD21714D30253D4AB2AB3C1813CC2AFC7F72EFC0346661938A9A5BFA13D146B2E7A4AAC55FBE27B0725527CBBA25DE217FBF90F1CE042346DF1F1F2FE2E001D3A3C1E4FFD6B236E77D2D0D3D6B32D0FB7F2D2ADB65E87B359664FEE1D842B15B508A5928453DDFF73365E14DA91D407463DA46B7298F70D0B11FC92009C41D2C37EDDD6964A22C89B6255C9EDBD0D0BE88DFD4FB9CAE4502F455CB40F9971ACBCC4ABB13A66302E3AD8BDEFA9A9C47458909E64FB82AB62B9F40DD6AC5183B65DE5352FE6D22505EAFCA02AC0733985F661D3997496C9E11D6429A75B5C4585A63043A1F475E769C8705077C2182915D9182D06CB1CC98653757DD4BF256B6D4E08C645B9A5EA4248CFC916C08A2E7FE49F5BAE3568C3A0875A0166F90552FA5B6A383AFEAA508211754A35622A43E1409BB5E4578C279D5337D35E73EE78483931D49A9F310E03873CA543840B80E52569C0B3D4EA81136EA507F7859DAA2366337EB4FA0DF150A330CA45E56CE8058B683817804CD9DBA96D78D7E45DB4635D3E1B534D32E9B498CD7C3CFBDD41BE9FD6F61BC746FEFE1A598FED44CD6F97E3DFE3C763FEC357ED67339E3D8FD9A + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + cleartomark end + %APLT1End + +%RBIEndFontSubset +/Helvetica cguidfix +/F1.1/Helvetica renmfont +[ /CIEBasedA 5 dict dup begin /WhitePoint [ 0.9505 1.0000 1.0891 ] def +/DecodeA { { 1.8008 exp } bind exec} bind +def +/MatrixA [ 0.9642 1.0000 0.8249 ] def +/RangeLMN [ 0.0 2.0000 0.0 2.0000 0.0 2.0000 ] def +/DecodeLMN [ { 0.9857 mul} bind { 1.0000 mul} bind { 1.3202 mul} bind ] def +end ] /Cs1 exch/ColorSpace dr pop +[ /CIEBasedABC 4 dict dup begin +/WhitePoint [ 0.9505 1.0000 1.0891 ] def +/DecodeABC [ { 1.8008 exp } bind { 1.8008 exp } bind { 1.8008 exp } bind ] def +/MatrixABC [ 0.4294 0.2332 0.0202 0.3278 0.6737 0.1105 0.1933 0.0938 0.9580 ] def +/RangeLMN [ 0.0 0.9505 0.0 1.0000 0.0 1.0891 ] def +end ] /Cs2 exch/ColorSpace dr pop +%%EndPageSetup +/Cs1 SC +1 sc +q +0 0 519 292 rc +0 292 m +519 292 l +519 0 l +0 0 l +h +f +0.60000002 i +/Cs2 SC +1 1 1 sc +11 189 m +82 189 l +82 126 l +11 126 l +h +11 189 m +f +1 J +1 j +0 0 0 sc +1 0 0 -1 1 310 cm +10 121 m +81 121 l +81 184 l +10 184 l +h +10 121 m +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 46.5 157.5 cm +/F1.1[ 13 0 0 -13 0 0]sf +-13.006348 -19 m +(!!")[ 8.670898 8.670898 8.670898 ] xS +-29.618164 -3 m +(#!$%&'!\()[ 4.329102 8.670898 7.229980 9.388184 7.229980 4.329102 8.670898 9.388184 ] xS +-29.259521 13 m +(!'$\)&**$')[ 8.670898 4.329102 7.229980 6.500000 7.229980 6.500000 6.500000 7.229980 4.329102 ] xS +-26.009521 29 m +("+&,&-./)[ 8.670898 2.888184 7.229980 10.829102 7.229980 7.229980 3.611816 4.329102 ] xS +0.60000002 i +/Cs2 SC +1 1 1 sc +CM +87 281 m +164.94299 281 l +164.94299 218 l +87 218 l +h +87 281 m +f +0 0 0 sc +1 0 0 -1 1 310 cm +86 29 m +163.94299 29 l +163.94299 92 l +86 92 l +h +86 29 m +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 125.9715 249.5 cm +-13.006348 -19 m +(0!")[ 8.670898 8.670898 8.670898 ] xS +-33.953613 -3 m +(#01-&'23*.3\))[ 4.329102 8.670898 6.500000 7.229980 7.229980 4.329102 7.229980 2.888184 6.500000 3.611816 2.888184 6.500000 ] xS +-29.259521 13 m +(!'$\)&**$')[ 8.670898 4.329102 7.229980 6.500000 7.229980 6.500000 6.500000 7.229980 4.329102 ] xS +-26.009521 29 m +("+&,&-./)[ 8.670898 2.888184 7.229980 10.829102 7.229980 7.229980 3.611816 4.329102 ] xS +0.60000002 i +/Cs2 SC +1 1 1 sc +CM +196.686 281 m +248.67542 281 l +248.67542 218 l +196.686 218 l +h +196.686 281 m +f +0 0 0 sc +1 0 0 -1 1 310 cm +195.686 29 m +247.67542 29 l +247.67542 92 l +195.686 92 l +h +195.686 29 m +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 222.68071 249.5 cm +-13.006348 5 m +(0!")[ 8.670898 8.670898 8.670898 ] xS +0.60000002 i +/Cs2 SC +1 1 1 sc +CM +269.84799 281 m +321.83737 281 l +321.83737 218 l +269.84799 218 l +h +269.84799 281 m +f +0 0 0 sc +1 0 0 -1 1 310 cm +268.84799 29 m +320.83737 29 l +320.83737 92 l +268.84799 92 l +h +268.84799 29 m +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 295.84268 249.5 cm +-13.006348 5 m +(0!")[ 8.670898 8.670898 8.670898 ] xS +0.60000002 i +/Cs2 SC +1 1 1 sc +CM +87 57.827011 m +164.94299 57.827011 l +164.94299 11.000214 l +87 11.000214 l +h +87 57.827011 m +f +0 0 0 sc +1 0 0 -1 1 310 cm +86 252.17299 m +163.94299 252.17299 l +163.94299 298.99979 l +86 298.99979 l +h +86 252.17299 m +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 125.9715 34.413605 cm +-13.006348 5 m +(0!")[ 8.670898 8.670898 8.670898 ] xS +0.60000002 i +/Cs2 SC +1 1 1 sc +CM +196.686 57.827011 m +248.67542 57.827011 l +248.67542 11.000214 l +196.686 11.000214 l +h +196.686 57.827011 m +f +0 0 0 sc +1 0 0 -1 1 310 cm +195.686 252.17299 m +247.67542 252.17299 l +247.67542 298.99979 l +195.686 298.99979 l +h +195.686 252.17299 m +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 222.68071 34.413605 cm +-13.006348 5 m +(0!")[ 8.670898 8.670898 8.670898 ] xS +0.60000002 i +/Cs2 SC +1 1 1 sc +CM +269.84799 57.827011 m +321.83737 57.827011 l +321.83737 11.000214 l +269.84799 11.000214 l +h +269.84799 57.827011 m +f +0 0 0 sc +1 0 0 -1 1 310 cm +268.84799 252.17299 m +320.83737 252.17299 l +320.83737 298.99979 l +268.84799 298.99979 l +h +268.84799 252.17299 m +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 295.84268 34.413605 cm +-13.006348 5 m +(0!")[ 8.670898 8.670898 8.670898 ] xS +0.60000002 i +/Cs2 SC +1 1 1 sc +CM +108 181.41299 m +345 181.41299 l +345 94.412994 l +108 94.412994 l +h +108 181.41299 m +f +0 0 0 sc +1 0 0 -1 1 310 cm +107 128.58701 m +344 128.58701 l +344 215.58701 l +107 215.58701 l +h +107 128.58701 m +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 226.5 137.91299 cm +-78.755371 5 m +("45#"+&,&-.64-.&'78\)&659*/)[ 8.670898 3.611816 8.670898 4.329102 8.670898 2.888184 7.229980 10.829102 7.229980 7.229980 3.611816 3.611816 3.611816 7.229980 3.611816 7.229980 4.329102 3.611816 7.229980 6.500000 7.229980 3.611816 8.670898 7.229980 6.500000 4.329102 ] xS +0.60000002 i +/Cs2 SC +1 1 1 sc +CM +382 189 m +508 189 l +508 151 l +382 151 l +h +382 189 m +f +0 0 0 sc +1 0 0 -1 1 310 cm +381 121 m +507 121 l +507 159 l +381 159 l +h +381 121 m +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 445 170 cm +-50.571777 -3 m +(:&,$'164-.&'78\)&)[ 10.829102 7.229980 10.829102 7.229980 4.329102 6.500000 3.611816 3.611816 7.229980 3.611816 7.229980 4.329102 3.611816 7.229980 6.500000 7.229980 ] xS +-42.256348 13 m +(\($-.'$++&#:4\(/)[ 9.388184 7.229980 7.229980 3.611816 4.329102 7.229980 2.888184 2.888184 7.229980 4.329102 10.829102 3.611816 9.388184 4.329102 ] xS +0.60000002 i +/Cs2 SC +1 1 1 sc +CM +382 130.827 m +508 130.827 l +508 92.826996 l +382 92.826996 l +h +382 130.827 m +f +0 0 0 sc +1 0 0 -1 1 310 cm +381 179.173 m +507 179.173 l +507 217.173 l +381 217.173 l +h +381 179.173 m +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 445 111.827 cm +-44.808105 -3 m +(\(&++65'$8;<8-;)[ 9.388184 7.229980 2.888184 2.888184 3.611816 8.670898 4.329102 7.229980 7.229980 7.229980 7.229980 7.229980 7.229980 7.229980 ] xS +-47.337646 13 m +("-23-&64-.&'78\)&)[ 8.670898 7.229980 7.229980 2.888184 7.229980 7.229980 3.611816 3.611816 7.229980 3.611816 7.229980 4.329102 3.611816 7.229980 6.500000 7.229980 ] xS +0 J +0 j +0.60000002 i +/Cs2 SC +0 0 0 sc +1 0 0 -1 1 310 cm +124.32606 101.87894 m +123.02531 121.78761 l +S +CM +123.50375 180.2294 m +127.01893 188.01678 l +121.03169 188.40796 l +h +123.50375 180.2294 m +f +1 0 0 -1 1 310 cm +122.50375 129.7706 m +126.01893 121.98322 l +120.03169 121.59204 l +h +122.50375 129.7706 m +S +CM +125.84763 216.10403 m +122.33244 208.31665 l +128.31967 207.92548 l +h +125.84763 216.10403 m +f +1 0 0 -1 1 310 cm +124.84763 93.895966 m +121.33244 101.68335 l +127.31967 102.07452 l +h +124.84763 93.895966 m +S +127.65703 222.36752 m +125.85991 242.31293 l +S +CM +126.142 59.719345 m +129.84781 67.417847 l +123.87201 67.956284 l +h +126.142 59.719345 m +f +1 0 0 -1 1 310 cm +125.142 250.28065 m +128.84781 242.58215 l +122.87201 242.04372 l +h +125.142 250.28065 m +S +CM +129.37494 95.600204 m +125.66914 87.901703 l +131.64493 87.363266 l +h +129.37494 95.600204 m +f +1 0 0 -1 1 310 cm +128.37494 214.3998 m +124.66914 222.0983 l +130.64493 222.63673 l +h +128.37494 214.3998 m +S +220.53435 100.88556 m +221.46565 118.11444 l +S +CM +222.89745 183.89723 m +225.46127 192.04749 l +219.47002 191.72365 l +h +222.89745 183.89723 m +f +1 0 0 -1 1 310 cm +221.89745 126.10277 m +224.46127 117.95251 l +218.47002 118.27635 l +h +221.89745 126.10277 m +S +CM +221.10255 217.10277 m +218.53873 208.95251 l +224.52998 209.27635 l +h +221.10255 217.10277 m +f +1 0 0 -1 1 310 cm +220.10255 92.897232 m +217.53873 101.04749 l +223.52998 100.72365 l +h +220.10255 92.897232 m +S +294.12772 100.07309 m +294.04529 118.1001 l +S +CM +295.0087 183.89998 m +298.04526 191.88617 l +292.04532 191.91362 l +h +295.0087 183.89998 m +f +1 0 0 -1 1 310 cm +294.0087 126.10002 m +297.04526 118.11383 l +291.04532 118.08638 l +h +294.0087 126.10002 m +S +CM +295.16431 217.92682 m +292.12775 209.94063 l +298.12769 209.91318 l +h +295.16431 217.92682 m +f +1 0 0 -1 1 310 cm +294.16431 92.073181 m +291.12775 100.05937 l +297.12769 100.08682 l +h +294.16431 92.073181 m +S +223 226.89999 m +223 243.10001 l +S +CM +224 58.899994 m +227 66.899994 l +221 66.899994 l +h +224 58.899994 m +f +1 0 0 -1 1 310 cm +223 251.10001 m +226 243.10001 l +220 243.10001 l +h +223 251.10001 m +S +CM +224 91.100006 m +221 83.100006 l +227 83.100006 l +h +224 91.100006 m +f +1 0 0 -1 1 310 cm +223 218.89999 m +220 226.89999 l +226 226.89999 l +h +223 218.89999 m +S +294.24139 223.89705 m +294.75861 245.10295 l +S +CM +295.95367 56.899429 m +298.75772 64.9702 l +292.75949 64.823898 l +h +295.95367 56.899429 m +f +1 0 0 -1 1 310 cm +294.95367 253.10057 m +297.75772 245.0298 l +291.75949 245.1761 l +h +294.95367 253.10057 m +S +CM +295.04633 94.100571 m +292.24228 86.0298 l +298.24051 86.176102 l +h +295.04633 94.100571 m +f +1 0 0 -1 1 310 cm +294.04633 215.89943 m +291.24228 223.9702 l +297.24051 223.8239 l +h +294.04633 215.89943 m +S +89.895454 168.70013 m +103.10455 168.29987 l +S +CM +112.10087 141.94244 m +104.01367 144.69875 l +104.1954 138.70151 l +h +112.10087 141.94244 m +f +1 0 0 -1 1 310 cm +111.10087 168.05756 m +103.01367 165.30125 l +103.1954 171.29849 l +h +111.10087 168.05756 m +S +CM +82.899132 141.05756 m +90.986328 138.30125 l +90.804596 144.29849 l +h +82.899132 141.05756 m +f +1 0 0 -1 1 310 cm +81.899132 168.94244 m +89.986328 171.69875 l +89.804596 165.70151 l +h +81.899132 168.94244 m +S +352.50958 148.24722 m +371.49042 142.75278 l +S +CM +380.17493 169.47169 m +371.65625 170.12892 l +373.32458 164.36554 l +h +380.17493 169.47169 m +f +1 0 0 -1 1 310 cm +379.17493 140.52831 m +370.65625 139.87108 l +372.32458 145.63446 l +h +379.17493 140.52831 m +S +CM +345.82507 159.52831 m +354.34375 158.87108 l +352.67542 164.63446 l +h +345.82507 159.52831 m +f +1 0 0 -1 1 310 cm +344.82507 150.47169 m +353.34375 151.12892 l +351.67542 145.36554 l +h +344.82507 150.47169 m +S +352.88763 195.49438 m +373.11237 196.50562 l +S +CM +382.10236 113.09488 m +374.26215 116.49065 l +373.96252 110.49812 l +h +382.10236 113.09488 m +f +1 0 0 -1 1 310 cm +381.10236 196.90512 m +373.26215 193.50935 l +372.96252 199.50188 l +h +381.10236 196.90512 m +S +CM +345.89764 114.90512 m +353.73785 111.50935 l +354.03748 117.50188 l +h +345.89764 114.90512 m +f +1 0 0 -1 1 310 cm +344.89764 195.09488 m +352.73785 198.49065 l +353.03748 192.49812 l +h +344.89764 195.09488 m +S +1 1 1 sc +CM +15 104 m +81 104 l +81 64.333801 l +15 64.333801 l +h +15 104 m +f +1 J +1 j +0 0 0 sc +1 0 0 -1 1 310 cm +14 206 m +80 206 l +80 245.6662 l +14 245.6662 l +h +14 206 m +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 48 84.166901 cm +-14.088623 -3 m +(:83-6)[ 10.829102 7.229980 2.888184 7.229980 3.611816 ] xS +-23.473633 13 m +(:&,$'1)[ 10.829102 7.229980 10.829102 7.229980 4.329102 6.500000 ] xS +0 J +0 j +0.60000002 i +/Cs2 SC +0 0 0 sc +1 0 0 -1 1 310 cm +87.74604 219.75426 m +101.25396 205.24574 l +S +CM +107.70531 110.60941 m +100.05827 106.79851 l +104.44964 102.70999 l +h +107.70531 110.60941 m +f +1 0 0 -1 1 310 cm +106.70531 199.39059 m +99.058273 203.20149 l +103.44964 207.29001 l +h +106.70531 199.39059 m +S +CM +83.294693 84.390594 m +90.941727 88.201492 l +86.550362 92.290009 l +h +83.294693 84.390594 m +f +1 0 0 -1 1 310 cm +82.294693 225.60941 m +89.941727 221.79851 l +85.550362 217.70999 l +h +82.294693 225.60941 m +S +ep +end +%%Trailer +%%EOF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fig/code.eps Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,3404 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%HiResBoundingBox: 0.000000 0.000000 383.997986 176.998001 +%APL_DSC_Encoding: UTF8 +%%Title: (Unknown) +%%Creator: (Unknown) +%%CreationDate: (Unknown) +%%For: (Unknown) +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 0 0 383 176 +%%EndComments +%%BeginProlog +%%BeginFile: cg-pdf.ps +%%Copyright: Copyright 2000-2002 Apple Computer Incorporated. +%%Copyright: All Rights Reserved. +currentpacking true setpacking +/cg_md 140 dict def +cg_md begin +/L3? languagelevel 3 ge def +/bd{bind def}bind def +/ld{load def}bd +/xs{exch store}bd +/xd{exch def}bd +/cmmtx matrix def +mark +/sc/setcolor +/scs/setcolorspace +/dr/defineresource +/fr/findresource +/T/true +/F/false +/d/setdash +/w/setlinewidth +/J/setlinecap +/j/setlinejoin +/M/setmiterlimit +/i/setflat +/rc/rectclip +/rf/rectfill +/rs/rectstroke +/f/fill +/f*/eofill +/sf/selectfont +/s/show +/xS/xshow +/yS/yshow +/xyS/xyshow +/S/stroke +/m/moveto +/l/lineto +/c/curveto +/h/closepath +/n/newpath +/q/gsave +/Q/grestore +counttomark 2 idiv +{ld}repeat pop +/SC{ + /ColorSpace fr scs +}bd +/cgmtx matrix def +/sdmtx{cgmtx currentmatrix pop}bd +/CM {cgmtx setmatrix}bd +/cm {cmmtx astore CM concat}bd +/W{clip newpath}bd +/W*{eoclip newpath}bd +statusdict begin product end dup (HP) anchorsearch{ + pop pop pop + true +}{ + pop + (hp) anchorsearch{ + pop pop true + }{ + pop false + }ifelse +}ifelse +{ + { + { + pop pop + (0)dup 0 4 -1 roll put + F charpath + }cshow + } +}{ + {F charpath} +}ifelse +/cply exch bd +/cps {cply stroke}bd +/pgsave 0 def +/bp{/pgsave save store}bd +/ep{pgsave restore showpage}def +/re{4 2 roll m 1 index 0 rlineto 0 exch rlineto neg 0 rlineto h}bd +/scrdict 10 dict def +/scrmtx matrix def +/patarray 0 def +/createpat{patarray 3 1 roll put}bd +/makepat{ +scrmtx astore pop +gsave +initgraphics +CM +patarray exch get +scrmtx +makepattern +grestore +setpattern +}bd +/cg_BeginEPSF{ + userdict save/cg_b4_Inc_state exch put + userdict/cg_endepsf/cg_EndEPSF load put + count userdict/cg_op_count 3 -1 roll put + countdictstack dup array dictstack userdict/cg_dict_array 3 -1 roll put + 3 sub{end}repeat + /showpage {} def + 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin + 10 setmiterlimit [] 0 setdash newpath + false setstrokeadjust false setoverprint +}bd +/cg_EndEPSF{ + countdictstack 3 sub { end } repeat + cg_dict_array 3 1 index length 3 sub getinterval + {begin}forall + count userdict/cg_op_count get sub{pop}repeat + userdict/cg_b4_Inc_state get restore + F setpacking +}bd +/cg_biproc{currentfile/RunLengthDecode filter}bd +/cg_aiproc{currentfile/ASCII85Decode filter/RunLengthDecode filter}bd +/ImageDataSource 0 def +L3?{ + /cg_mibiproc{pop pop/ImageDataSource{cg_biproc}def}bd + /cg_miaiproc{pop pop/ImageDataSource{cg_aiproc}def}bd +}{ + /ImageBandMask 0 def + /ImageBandData 0 def + /cg_mibiproc{ + string/ImageBandMask xs + string/ImageBandData xs + /ImageDataSource{[currentfile/RunLengthDecode filter dup ImageBandMask/readstring cvx + /pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd + }bd + /cg_miaiproc{ + string/ImageBandMask xs + string/ImageBandData xs + /ImageDataSource{[currentfile/ASCII85Decode filter/RunLengthDecode filter + dup ImageBandMask/readstring cvx + /pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd + }bd +}ifelse +/imsave 0 def +/BI{save/imsave xd mark}bd +/EI{imsave restore}bd +/ID{ +counttomark 2 idiv +dup 2 add +dict begin +{def} repeat +pop +/ImageType 1 def +/ImageMatrix[Width 0 0 Height neg 0 Height]def +currentdict dup/ImageMask known{ImageMask}{F}ifelse exch +L3?{ + dup/MaskedImage known + { + pop + << + /ImageType 3 + /InterleaveType 2 + /DataDict currentdict + /MaskDict + << /ImageType 1 + /Width Width + /Height Height + /ImageMatrix ImageMatrix + /BitsPerComponent 1 + /Decode [0 1] + currentdict/Interpolate known + {/Interpolate Interpolate}if + >> + >> + }if +}if +exch +{imagemask}{image}ifelse +end +}bd +/cguidfix{statusdict begin mark version end +{cvr}stopped{cleartomark 0}{exch pop}ifelse +2012 lt{dup findfont dup length dict begin +{1 index/FID ne 2 index/UniqueID ne and +{def} {pop pop} ifelse}forall +currentdict end definefont pop +}{pop}ifelse +}bd +/t_array 0 def +/t_i 0 def +/t_c 1 string def +/x_proc{ + exch t_array t_i get add exch moveto + /t_i t_i 1 add store +}bd +/y_proc{ + t_array t_i get add moveto + /t_i t_i 1 add store +}bd +/xy_proc{ + + t_array t_i 2 copy 1 add get 3 1 roll get + 4 -1 roll add 3 1 roll add moveto + /t_i t_i 2 add store +}bd +/sop 0 def +/cp_proc/x_proc ld +/base_charpath +{ + /t_array xs + /t_i 0 def + { + t_c 0 3 -1 roll put + currentpoint + t_c cply sop + cp_proc + }forall + /t_array 0 def +}bd +/sop/stroke ld +/nop{}def +/xsp/base_charpath ld +/ysp{/cp_proc/y_proc ld base_charpath/cp_proc/x_proc ld}bd +/xysp{/cp_proc/xy_proc ld base_charpath/cp_proc/x_proc ld}bd +/xmp{/sop/nop ld /cp_proc/x_proc ld base_charpath/sop/stroke ld}bd +/ymp{/sop/nop ld /cp_proc/y_proc ld base_charpath/sop/stroke ld}bd +/xymp{/sop/nop ld /cp_proc/xy_proc ld base_charpath/sop/stroke ld}bd +/refnt{ +findfont dup length dict copy dup +/Encoding 4 -1 roll put +definefont pop +}bd +/renmfont{ +findfont dup length dict copy definefont pop +}bd +L3? dup dup{save exch}if +/Range 0 def +/Domain 0 def +/Encode 0 def +/Decode 0 def +/Size 0 def +/DataSource 0 def +/mIndex 0 def +/nDomain 0 def +/ival 0 def +/val 0 def +/nDomM1 0 def +/sizem1 0 def +/srcEncode 0 def +/srcDecode 0 def +/nRange 0 def +/d0 0 def +/r0 0 def +/di 0 def +/ri 0 def +/a0 0 def +/a1 0 def +/r1 0 def +/r2 0 def +/dx 0 def +/Nsteps 0 def +/sh3tp 0 def +/ymax 0 def +/ymin 0 def +/xmax 0 def +/xmin 0 def +/min +{ + 2 copy gt + {exch pop}{pop}ifelse +}bd +/max +{ + 2 copy lt + {exch pop}{pop}ifelse +}bd +/inter +{ + 1 index sub 5 2 roll + 1 index sub + 3 1 roll + sub 3 1 roll div mul add +}bd +/setupFunEvalN +{ + begin + /nDomM1 Domain length 2 idiv 1 sub store + /sizem1[ + 0 1 nDomM1 + { + Size exch get 1 sub + }for + ]store + /srcEncode + currentdict/Encode known + { + Encode + }{ + [ + 0 1 nDomM1 + { + 0 sizem1 3 -1 roll get + }for + ] + }ifelse + store + /srcDecode + currentdict/Decode known + {Decode}{Range}ifelse + store + /nRange Range length 2 idiv store + end +}bd +/FunEvalN +{ + begin + + nDomM1 -1 0 + { + 2 mul/mIndex xs + Domain mIndex get max Domain mIndex 1 add get min + + Domain mIndex get Domain mIndex 1 add get srcEncode mIndex get srcEncode mIndex 1 add get inter + round cvi + + 0 max sizem1 mIndex 2 idiv get min + nDomM1 1 add 1 roll + }for + + nDomM1 1 add array astore/val xs + + + + nDomM1 0 gt + { + 0 + nDomM1 -1 0 + { + dup 0 gt + { + /mIndex xs + val mIndex get + 1 index add + Size mIndex 1 sub get + mul + add + }{ + val exch get add + }ifelse + }for + }{ + val 0 get + }ifelse + + + nRange mul + /ival xs + 0 1 nRange 1 sub + { + dup 2 mul/mIndex xs + ival + add DataSource exch get + + 0 255 + srcDecode mIndex 2 copy get 3 1 roll + 1 add get + inter + Range mIndex get max Range mIndex 1 add get min + }for + end +}bd +/sh2 +{ + /Coords load aload pop + 3 index 3 index translate + + 3 -1 roll sub + 3 1 roll exch + sub + 2 copy + dup mul exch dup mul add sqrt + dup + scale + atan + + rotate + + /Function load setupFunEvalN + + + clippath {pathbbox}stopped {0 0 0 0}if newpath + /ymax xs + /xmax xs + /ymin xs + /xmin xs + currentdict/Extend known + { + /Extend load 0 get + { + + /Domain load 0 get + /Function load FunEvalN sc + xmin ymin xmin abs ymax ymin sub rectfill + }if + }if + + + /dx/Function load/Size get 0 get 1 sub 1 exch div store + gsave + /di ymax ymin sub store + /Function load dup + /Domain get dup 0 get exch 1 get 2 copy exch sub dx mul exch + { + 1 index FunEvalN sc + 0 ymin dx di rectfill + dx 0 translate + }for + pop + grestore + currentdict/Extend known + { + /Extend load 1 get + { + + /Domain load 1 get + /Function load FunEvalN sc + 1 ymin xmax 1 sub abs ymax ymin sub rectfill + }if + }if +}bd +/shp +{ + 4 copy + + dup 0 gt{ + 0 exch a1 a0 arc + }{ + pop 0 moveto + }ifelse + dup 0 gt{ + 0 exch a0 a1 arcn + }{ + pop 0 lineto + }ifelse + + fill + + dup 0 gt{ + 0 exch a0 a1 arc + }{ + pop 0 moveto + }ifelse + dup 0 gt{ + 0 exch a1 a0 arcn + }{ + pop 0 lineto + }ifelse + + fill +}bd +/calcmaxs +{ + + xmin dup mul ymin dup mul add sqrt + xmax dup mul ymin dup mul add sqrt + xmin dup mul ymax dup mul add sqrt + xmax dup mul ymax dup mul add sqrt + max max max +}bd +/sh3 +{ + /Coords load aload pop + 5 index 5 index translate + 3 -1 roll 6 -1 roll sub + 3 -1 roll 5 -1 roll sub + 2 copy dup mul exch dup mul add sqrt + /dx xs + 2 copy 0 ne exch 0 ne or + { + + exch atan rotate + }{ + pop pop + }ifelse + + /r2 xs + /r1 xs + /Function load + dup/Size get 0 get 1 sub + /Nsteps xs + setupFunEvalN + + + + + + dx r2 add r1 lt{ + + 0 + }{ + dx r1 add r2 le + { + 1 + }{ + r1 r2 eq + { + 2 + }{ + 3 + }ifelse + }ifelse + }ifelse + /sh3tp xs + clippath {pathbbox}stopped {0 0 0 0}if + newpath + /ymax xs + /xmax xs + /ymin xs + /xmin xs + + dx dup mul r2 r1 sub dup mul sub dup 0 gt + { + sqrt r2 r1 sub atan + /a0 exch 180 exch sub store + /a1 a0 neg store + }{ + pop + /a0 0 store + /a1 360 store + }ifelse + currentdict/Extend known + { + /Extend load 0 get r1 0 gt and + { + /Domain load 0 get/Function load FunEvalN sc + + + + + { + { + dx 0 r1 360 0 arcn + xmin ymin moveto + xmax ymin lineto + xmax ymax lineto + xmin ymax lineto + xmin ymin lineto + eofill + } + { + r1 0 gt{0 0 r1 0 360 arc fill}if + } + { + + + + + 0 r1 xmin abs r1 add neg r1 shp + } + { + + + r2 r1 gt{ + + 0 r1 + r1 neg r2 r1 sub div dx mul + 0 + shp + }{ + + + + 0 r1 calcmaxs + dup + + r2 add dx mul dx r1 r2 sub sub div + neg + exch 1 index + abs exch sub + shp + }ifelse + } + }sh3tp get exec + }if + }if + + /d0 0 store + /r0 r1 store + /di dx Nsteps div store + /ri r2 r1 sub Nsteps div store + /Function load + /Domain load dup 0 get exch 1 get + 2 copy exch sub Nsteps div + exch + { + 1 index FunEvalN sc + d0 di add r0 ri add d0 r0 shp + { + + d0 0 r0 a1 a0 arc + d0 di add 0 r0 ri add a0 a1 arcn + fill + + + d0 0 r0 a0 a1 arc + d0 di add 0 r0 ri add a1 a0 arcn + fill + }pop + + + /d0 d0 di add store + /r0 r0 ri add store + }for + pop + + currentdict/Extend known + { + /Extend load 1 get r2 0 gt and + { + /Domain load 1 get/Function load FunEvalN sc + + + + + { + { + dx 0 r2 0 360 arc fill + } + { + dx 0 r2 360 0 arcn + xmin ymin moveto + xmax ymin lineto + xmax ymax lineto + xmin ymax lineto + xmin ymin lineto + eofill + } + { + + + xmax abs r1 add r1 dx r1 shp + } + { + + r2 r1 gt{ + + + + calcmaxs dup + + r1 add dx mul dx r2 r1 sub sub div + exch 1 index + exch sub + dx r2 + shp + }{ + + r1 neg r2 r1 sub div dx mul + 0 + dx + r2 + shp + }ifelse + } + } + sh3tp get exec + }if + }if +}bd +/sh +{ + begin + /ShadingType load dup dup 2 eq exch 3 eq or + { + gsave + newpath + /ColorSpace load scs + currentdict/BBox known + { + /BBox load aload pop + 2 index sub + 3 index + 3 -1 roll exch sub + exch rectclip + }if + 2 eq + {sh2}{sh3}ifelse + grestore + }{ + + pop + (DEBUG: shading type unimplemented\n)print flush + }ifelse + end +}bd +{restore}if not dup{save exch}if + L3?{ + /sh/shfill ld + /csq/clipsave ld + /csQ/cliprestore ld + }if +{restore}if +end +setpacking +%%EndFile +%%EndProlog +%%BeginSetup +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 0 0 383 176 +%%BeginPageSetup +cg_md begin +bp +sdmtx +%RBIBeginFontSubset: TCMPPA+Helvetica +%!PS-TrueTypeFont-1.0000-0.0000-2 + 14 dict begin/FontName /TCMPPA+Helvetica def + /PaintType 0 def + /Encoding 256 array 0 1 255{1 index exch/.notdef put}for + dup 33 /C put + dup 34 /o put + dup 35 /d put + dup 36 /e put + dup 37 /space put + dup 38 /S put + dup 39 /g put + dup 40 /m put + dup 41 /n put + dup 42 /t put + dup 43 /I put + dup 44 /p put + dup 45 /u put + dup 46 /r put + dup 47 /f put + dup 48 /a put + dup 49 /c put + dup 50 /O put + readonly def + 42/FontType resourcestatus{pop pop false}{true}ifelse + %APLsfntBegin + {currentfile 0(%APLsfntEnd\n)/SubFileDecode filter flushfile}if + /FontType 42 def + /FontMatrix matrix def + /FontBBox[2048 -342 1 index div -914 2 index div 2036 3 index div 2100 5 -1 roll div]cvx def + /sfnts [< + 74727565000900000000000063767420000000000000009C000003626670676D000000000000040000000322676C79660000000000000724000010B06865616400000000000017D40000003868686561000000000000180C00000024686D747800000000000018300000004C6C6F6361000000000000187C000000286D61787000000000000018A4000000207072657000000000000018C4000003BB05C0001005BD00280580001A042F001F0000FFD90000FFDA0000FFD9FE55FFE605C70010FE6DFFF1033B000000B9000000B902FE3F3C00C0008D009B00AF000600A800C00028005E009800C9016A00B9015C00B400D6011E002E0080000400B8004C00CC01FFFFD1006600A400AF007400C2009500B1000C0028006D0015004C008E0125FF7A000C0040004C00620084FFA200240038008600BD0039005E008E00EDFFA9FFB300400052005500AA00AB00C200CB012302B10413FFAEFFE4000800510074008400AA00D1FF4CFFAF0012002C004200500051008400BE012503DAFF680018003B0098009C009F00A100C100EC018201B4FF68FF76FFD0FFE100020018001C00530053007D01B401E103AF0486FF9CFFEAFFFE001F0028002A00520060009300A300AA00AF00AF00C001000145016B0174019301950240028202B404850517FEFD00060029004700470048006F008800B400B900C400F200F901EF02180310037403C5FF35FFF3000B004B004C0052005500650076007600870087008E00AB00BB0106013001430150017D0194019501D3022A025502580277027802E6034E035C037903D3047304B2058C0598060BFEF5FFBBFFC7FFD50017001D005B0072007E009C00C200D000F400FA01030106011C0125013B0142015E015E0180019B02B901A101B9025001C001D002AA01DF01E301EF01FB0205020C0215022B0274029302AB02C202CE03690395039903DF03F5043E050205A105E5062507DBFE62FE89FECEFF3BFFE1FFF800030008002100390042004E005F0061006F00700034007F008E00AD00AD00AF00BD00C400C500C900C900C900E3011C00ED00F800F901000112011A0132014D014D014E014F01660169019E01BA01BA01BE01E301EF01F602000200020902110217021C02530262026D028002D50280031B032A034A035A03AF03AF03C803D603FB03FB04050413041504470449008C046D049A049A04A604A804B204CF0539053E054E055605800589058C036305D105D6067E068E06B206EF06F00728074C076F078C00B400C900C000C10000000000000000000000000004012400AF0032006E0063014401620096014301A10161008A00740064018801EF01700028FF5D037E0347023000AA00BE007B0062009A007D0089035C00A1FFD803AA00D70093006C0000008000A70442001D0597001D008200300000 + 40292A292827262524232221201F1E1D1C1B1A191817161514131211100D0C0B0A090807060504030201002C4523466020B02660B004262348482D2C452346236120B02661B004262348482D2C45234660B0206120B04660B004262348482D2C4523462361B0206020B02661B02061B004262348482D2C45234660B0406120B06660B004262348482D2C4523462361B0406020B02661B04061B004262348482D2C0110203C003C2D2C20452320B0CD442320B8015A51582320B08D44235920B0ED51582320B04D44235920B09051582320B00D44235921212D2C20204518684420B001602045B04676688A4560442D2C01B9400000000A2D2C00B9000040000B2D2C2045B00043617D6818B0004360442D2C45B01A234445B01923442D2C2045B00325456164B050515845441B2121592D2C20B0032552582359212D2C69B04061B0008B0C6423648BB8400062600C642364615C58B0036159B002602D2C45B0112BB0172344B0177AE5182D2C45B0112BB01723442D2C45B0112BB017458CB0172344B0177AE5182D2CB002254661658A46B040608B482D2CB0022546608A46B040618C482D2C4B53205C58B002855958B00185592D2C20B0032545B019236A4445B01A23444565234520B00325606A20B009234223688A6A606120B0005258B21A401A4523614459B0005058B219401945236144592D2CB9187E3B210B2D2CB92D412D410B2D2CB93B21187E0B2D2CB93B21E7830B2D2CB92D41D2C00B2D2CB9187EC4E00B2D2C4B525845441B2121592D2C0120B003252349B04060B0206320B000525823B002253823B002256538008A63381B212121212159012D2C456920B00943B0022660B00325B005254961B0805358B21940194523616844B21A401A4523606A44B209191A45652345604259B00943608A103A2D2C01B005251023208AF500B0016023EDEC2D2C01B005251023208AF500B0016123EDEC2D2C01B0062510F500EDEC2D2C20B001600110203C003C2D2C20B001610110203C003C2D2C764520B003254523616818236860442D2C7645B00325452361682318456860442D2C7645B0032545616823452361442D2C4569B014B0324B505821B0205961442D0000000200A10000052F05BD00030007003E402105062F02010004072F03000A05042F0303021A0906072F01001908098821637B182B2B4EF43C4DFD3C4E10F63C4D10FD3C003F3CFD3C3F3CFD3C31303311211127112111A1048EB8FCE205BDFA43B8044DFBB3000002005AFFDA057105E5001D001E00B1403B1B0597019605031F011F0482018705891305530803861D111115063A1D030C3A15091E021E1E190331023B1031111A20093119191F20A1216A66182B2B4EF44DED4E10F64DEDF4ED12392F003F3FED3FED12392F10ED31304379403A001C172513260E25 + 1B260B160932000D1410320112110F10071C0932000500033201010204030A180C32000F120C3200081A06320104010632012B2B2B2B01103C103C2B2B103C103C2B2B2B2B2B2B815D015D080117232E0123220011101233323736373306070621202726111037362123041E013411C221C5B2D9FEF5F1EFDC733D1EC21A92AFFED7FF00AEE5ACBA01472805E5FEDABB8EA6FECFFEC5FEFEFEBFA95991E89DBD9BCD01AC0145D0E2000200C90000019205BD0003000400314012000203080403040617171A04012500190506BA012C0021012BB170182B2B4EF44DFD394E456544E62F003F3F3F31301333112313C9C9C96505BDFA4305BD00030050FFD505E805E5000F001B001C008A402C8705C700C701C302C808C90A064308153A0F031B3A07091C021C1C0B1231031A1E18310B191D1ED8216A66182B2B4EF44DED4E10F64DED12392F003F3FED3FED313043794032001A0D26012509250526160E18320014001232011A081832001006123201170C1532011302153201190A1B320011041B32002B2B2B2B012B2B2B2B2B2B2B2B81005D0017161110070221202726111037122100123510002322001114122103049BBB92A7C4FE95FEADC2AD94BE0174011BEBFEF1EBE4FEE0F701150E05E5FAC3FED0FEB7DAFF00E0D8014A012AD40110FAA20179F50103013CFEC7FECFF4FEB1055E00020060FFD504F605E5002F003000FE405E290F27232626360E3521472662267A0E7724096B08180E172502590E680EAA22030A0E3A2224220A03041C1886142F2F2B1C3A1403043A2B0930020A0E081124221F28303011182517490825281A321F25114900252F193132A0216A89182B2B4EF44DEDF4ED4E10F64DEDF4ED12392F1211393912113939003F3FED3FED12392F10ED111217392EFD335D7131304379404D282E111F0008022602262D2506251A26032C002B002D2E032C002B00052A082B011D131F2B001B15182B011918012D042B0009270B2B01250B012E042B000729042B001E121C2B0119161C2B01002B2B2B2B10102B2B01103C2B2B2B2B103C2B2B2B2B2B2B818181005D0116171633323736353427262F012627263534243332041523262726232206151417161F01161716151404232027263701011E073463FA705CB24B4CA2C7C3518C0112FBE70143BB0F315BDAB09A5A3BD0CE95518CFE9DEBFEEE9B9B03024D01DA7D4E92203EA0783332252D2C355CB7C6FEDFF5763F7394626C3220302F223B67C4F4D28C8BEE040B0000030052FFDC04470449000F003B003C00DD40382A30010A100B1B0C1C2733481069096A10073908120C09031B320724091D100C1D3B2B022E293BB73B023B322A2512100705081C2722171CB8018A4023171D1F07271D2E0B021D350B3C073C3C1C1407292AA8241A3E1B291C4A0F2738193D3E + BC0197002100B9019600182B2B4EF44DEDF4ED4E10F64DE4FDC412392F003F3FED3FED3FEDED1239111217395D1112392EED2EED01111239111739313043794028363715220001192501360F2100181E1B21001620142101212200370221001A1D1721011521172101002B2B2B01103C2B2B2B2B818181005D015D2416333237363D010E010F0106070615013637363534262322070607233E01333217161511141633323637150E0123222726270E012322263534363713010E724E5F59962168326D62315301B43E150C837A8D3B210AA805F7A3BD767517250C1E112A2C265D2A160937CE7C95BDBA978ACF5A2C49A691151C060E0D1C2F67016C082C182D5C534C2A53C69B484898FD971C220303850C06422340486AB58895A41301E4000002003BFFE103D0044E001A001B00A7402FA719019818A808AA18034A08119B14030314061D1A070D1D140B1B071B1B1710271201032702111A1D0A2717191C1DB80107B321727D182B2B4EF44DED4E10F63C4DED3939ED12392F003F3FED3FED12392F10ED313043794034001908250C150A26000E1310260112110F1007190A26000500032101010204030B160D26000F120D2600091806260104010621012B2B2B2B01103C103C2B2B103C103C2B2B2B81005D015D001617232E012322070615141633323637330E01232202351000330702D6E317AF10727EAC4A308892708319AF1EF0BBD2FA0112D41C044EB0D76383A86DA0A1DC8977D5C50133E6011A013A0500020038FFDA03ED05C2000B001D00774032370E470E570EA704A91B05250814020F1D1000081D1D07130A021D170B052E132E102911121A1F0B271A191E1F87217242182B2B4EF44DED4E10F63C4DFDE4E4003FED3F3FED3F1139113931304379401A181C090A000101180B2600091C0B260000190226000A1B0826012B2B012B2B818181005D1216333236353426232206150017161711331123350E0123220035341233F692A17DA1A67A88A9018A53303DADA23FAC6FB3FEFAEFDE015FE8D7C9CBC3D0CA0237341E4B021DFA3E956358012DFAEA015700030048FFDA041A0449001C00240025010C40799708991AA71F03050E020F0514150E120F1514400C401408291A014B0BB603C701C603C71BD808D909D61FD823E817E8230BC711C712025C080521240F9A161D243906070716211D1C070A1D160B2507971CA71CB71CD71C0425160F251C05190A0C07110E270F1D27051A27242E072719192627D421A65D182B2B4EF44DFDE44E10F64DEDD4FD391239391112393912392F5D003F3FED3FED12392F3CFD3C10ED1112393130437940460023040503050205010504061F26111012101310141004060C25221B24260020001D26011E1D09170726000B150E26010D0E231A2126011E0521260108180A26000D100A2600 + 002B2B2B2B01103C2B2B103C2B2B2B2A2B2A8101715D00715D5D00161716171615211E013332373637330E01070607062322001110003301262726232206070102B4D638361210FCEF0590978D543014B1074F3152794152C8FEEA0118E2011F0B284AAD7CA805012304476B55516C4AA2A3C55D36473B912E501C100123010601020142FE26754682B38A01DC000001001C0000021705D20017004D402B071D060A1D03010F1439160D06120A1917171A0E0D1129171207120F0E1F0E020EFC14191819FC21677E182B2B4EF44DFD5D39C42F3CFD3C104E456544E6003F3F3C4DFD3C3FEDD4ED313012373633321617152E012322061533152311231123353335B5233FB41124171C190B5220B2B4B295950542345C0202A4020155AE8EFC64039C8EA80003003DFE3B03E80449001F002D002E00B7404D36144908490958085909880CA91BA81DA927A62BB91B0B4008031622290EC40A221D1F070406291D190A121D0A0F2E072E2E051C032E162E2D29051A300C0E270D3E26271C192F3087217242182B2B4EF44DEDF4ED394E10F64DFDE4F51112392F003F3FED3FED3F3FED10ED1112393931304379402C23281A1E0B1124251026231E262600281A262600110B0E21000F0E0C0D251D222601271B2926000F0C122100002B2B2B01103C103C2B2B2B2B2B818181005D00171617353311140706212226273316171633323736270E0123222411100033002623220706151416333237363501027C5E3335A63C70FEC9ADEC0EB70D273D83CF40260336987DAEFEFB0107BA0144A47FBE4625937CC24F2CFED104423E234387FC32CC76DA9BA548273C9256DD5250F7011D010D012EFEA1C0B25F9AB5BDAF6384022D0001008400000625044700260085403B0708070E060F1708170E170F2708270E270F4819560B670B0C23250A1A1D23190A02041725211D171D0D060700061B1C2503130A2817171A112914B80101B21A291DB80101400A00012E25292600192728B8010DB3216242182B2B4EF43C4DFDE410F4EDF4FD4E456544E6003F173C3F3F3C4DEDED111217390111123912393130005D13331536373633321716173E01333217161511231134262322061511231134272623220615112384B240345971804E2C243CA265D84E2ABB6B4D6A99B71A297066A7B4042F984F243D3F244656539C548EFD3702E86B508EA6FD9102BB6D324B9ECFFDC80000020084000003ED04490019001A005E4031B706C706020406140627147606740705140C021418101D05070006180B0A1A071A1A000C29091A1C012E18291900191B1CB80106B3216242182B2B4EF43C4DFDE44E10F64DED12392F003F3F3C3F3FED1139390112393130005D015D1333153E01333217161511231134272623220706070E011511230184AB4CAA68E4502CB71D307E40 + 294A382D1BB401A7042F985E529F57A2FD5102A3623C640D1642357169FDCF0449000003003BFFD90421044E000C0018001900904033980896109916A504A808A610A916B808C808D704E50EE9140C3A08061D18070C1D120B190719191502270F1A1B092715191A1BB80109B321725D182B2B4EF44DED4E10F64DED12392F003F3FED3FED31304379402C001704260B1309260000110226010717092600050D0226010A140C260001100C26000816062601030E0626012B2B2B2B012B2B2B2B2B81005D241235342726232206151416331200111002212200351000330702E085304CBAA59696A3D6011EFCFEF7DDFEFC0112E70674010FA6965E94FCB2ABE403DAFEECFEF4FEFDFEAE012BFC010E01400500020076FE5504250449000E00220074402CA908A717022808201C110E061D15070F060E1D1C0B220E0227181A240A2E102E2129220F1923248721BD5D182B2B4EF43C4DFDE4E44E10F64DED003F3FED3F3FED1139123931304379401C161B00051A260426001B022601051602260101190E260003170626012B2B012B2B2B2B8181005D243635342726232207061514171633013315363736333212111007062322272627112302C6A72546BABB45252546BAFE2EAF36405B7BB6FEB7749A7952303BB479D3D2805CB1BB649A7C57A603B18E49283CFEE9FEFDFEA2965F351E49FDDD00000100890000029204470011004F40262703260D37034704040E0810020E0911090C270805070006110A081A13012E10291100191213B80145B321627E182B2B4EF43C4DFDE44E10E6003F3F4D3FC4FDC411123939011112393130005D1333153E0133321617152E0123220615112389AB15A46B05181D101B108892B4042FB9369B0203BE0302AF72FD980000010017FFEF0209055A00180052B50D2E0AC00E01B8013F40250416391703060E0A111A17171A0301062900150E150F031F030203FC1619191AFC21677D182B2B4EF44DFD5D39C42F3CFD3C104E456544E6002F3F3F3C4DFD3CED10FDE431301333113315231114171633323637150E012322263511233533A8B6ABAB2615310D1E141F43277E5A9191055AFED593FD4538130B01028E0908816702C59300020080FFE303DE044900170018005E403AB814C81402091308141913191428067703D707070800050E0A00060D0A051D120B180718180B160D2E0A290C0B1A1A01291619191AD2216242182B2B4EF44DED4E10F63C4DFDE41112392F003F3FED3F3F3C391112393130005D015D0111141716333237363511331123370607062322272635112501381A3083BC4425B4AA0223346793E5532D01AF042FFD39523460A85A9D020EFBD19E3D2A5499528902D81A00000100000000000073F8B13B5F0F3CF501010800000000015F4E858000000000B53F1B40FEAAFC6E07F40834 + 000000090001000000000000000100000629FE290000081FFEAAFEB307F400010000000000000000000000000000001305C700A10239000005C7005A023900C90639005005560060047300520400003B04730038047300480239001C0473003D06AA0084047300840473003B0473007602AA0089023900170473008000000033003300C200EA0168023402FE038003EC04B5050005A70623067F06F7076907AF07FE085800010000001300530007005B0006000200100010002B000007E80161000600014118008001A6009001A600A001A600030069018B0079018B0089018B0099018B00040089018B0099018B00A9018B00B9018BB2040840BA0179001A014A400B041F5414191F180A0B1FD2B80106B49E1FD918E3BB0119000D00E10119B20D0009410A01A0019F0064001F01A50025017A00480028019AB3296C1F60410A01A9007001A9008001A90003008001A9000101A9B21E321FBE012C00250401001F0126001E0401B61FE7312D1FE531B80201B21FC227B80401B21FC11EB80201400F1FC01D9E1FBF1D671FBE1D671FAB27B80401B21FAA29B80401B61FA91D6C1F931EB8019AB21F921DB80101B21F911DB80101B21F751DB80201B61F6D29961F6431B8019AB21F4C96B802ABB21F391DB80156400B1F3638211F351DE41F2F27B80801400B1F2D1D4C1F2A31CD1F241DB802ABB21F201EB8012540111F1C1D931F3A1D4C1F1E1D45273A1D4527BB01AA019B002A019BB2254A1FBA019B0025017AB349293896B8017BB348283125B8017A403648289629482725294C1F252946272729482756C80784075B07410732072B072807260721071B071408120810080E080C080A08080807B801ACB23F1F06BB01AB003F001F01ABB308060805B801AEB23F1F04BB01AD003F001F01ADB70804080208000814B8FFE0B40000010014B801ABB41000000100B801ABB606100000010006B801ADB300000100B801AD401F04000001000410000001001002000001000200000001000002010802004A00B0018DB806008516763F183F123E113946443E113946443E113946443E113946443E113946443E11394660443E11394660443E11394660442B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B18011DB0964B5358B0AA1D59B0324B5358B0FF1D592B2B2B2B2B2B2B2B182B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B74752B2B2B65422B2B4B5279B376706A66456523456023456560234560B08B766818B080622020B16A704565234520B003266062636820B003266165B070236544B06A234420B176664565234520B003266062636820B003266165B066236544B0762344B10066455458B166406544B27640764523614459B36242725D456523456023456560234560B08976 + 6818B080622020B172424565234520B003266062636820B003266165B042236544B072234420B1625D4565234520B003266062636820B003266165B05D236544B0622344B1005D455458B15D406544B262406245236144592B2B2B2B456953427374B8019A2045694B20B02853B049515A58B020615944B801A6204569447500 + 00>] def + /CharStrings 19 dict dup begin + /.notdef 0 def +/space 1 def +/C 2 def +/I 3 def +/O 4 def +/S 5 def +/a 6 def +/c 7 def +/d 8 def +/e 9 def +/f 10 def +/g 11 def +/m 12 def +/n 13 def +/o 14 def +/p 15 def +/r 16 def +/t 17 def +/u 18 def + end readonly def + currentdict dup/FontName get exch definefont pop end + %APLsfntEnd + 42/FontType resourcestatus{pop pop true}{false}ifelse + {currentfile 0(%APLT1End\n)/SubFileDecode filter flushfile}if + /FontType 1 def + /FontMatrix [ 0.00048828125 0 0 0.00048828125 0 0 ] def + /FontBBox{-342 -914 2036 2100}def + /UniqueID 4045371 def + currentdict currentfile eexec + 54544758EC884CF30C3CD503CEDBFF3839C47C3C3333173232E3FDBFF439491DB843E1924E63AA7726BBB0485AB56D93D8C0906F647A47162891E73FFC2A9873C4B1EAC5EEBDFFC4D06084FBD84139DF4583C6E259D10699944D1068C9C45667DCCCFB9B7EA01B606435EDCBD273ABAC093D14085CCBAC149BD7382E842CFE0D7FE4FD2EF589A2471F6074A80A8B675C2F7A50D63AC1EF90D787BADD11633CB01CF6EE3B37AAF9078A69AC4740E9B6525D78BBD839551A1CB80DB8682FA5E87591BBD6EE8B946063A2A58D9CA3685AB305495DC5FB5747EB8A9A059C4976C0FE4EEAB1D56FF47F1E9664ED9F4A7DAB763AF92B2F6CF2FA7DEC24710E0B9096E30F772BA7FEA9BDBE496C42ED2CEB58F54E80BDF57CE7B4DB6CCFE7182F43BF93CCA0767AF95D62C5D2C3DC6AE1E6D139F51A2C63432117F1714C5566572EE9967A715420ABDCD1D7BD74F8450B89965FCC81C6ACA565C5F3CCF91D430D1F953E4F1A645300A98DD8C47CD64555F08F422340A85404EAE0D3229C4F9336B9470CACBD6BBF3395104750A915CC6EAAC197668267B8C62D2764C8CD69FD937CA3C924D997A0EDE7964BEB9EA2F92EF70C5E5DA0AA5567765E71F2B911B3C5586B741EEB93F3C73016EC16BFF283758900903D203992EFC8BAFAF13579C602F38C91BD326F6E6A1837BE2706B92FCAA32341FE90C82594E2DAAEF640CEE7C9F709DD6EB1AFC4DA6162432924BB95057678CCBCC31D448F3AA1DEFBA35B47BF34A502073D22E28032483687E7DF86B904E5610B82A79FE0DB987DE084B5BDFAC5F5F95F05A07E399A66163FBA14B7CD41EA00FF0D856E5C439D90FF20451FA52DE4E0676E176BBF26DB83E8E08D93FBF604C89CB67D813423224660A604A2E003699A66FDC19A6646737C5785576C3A422028726A8542D84A4A455C3ADEDDA3A8C22621F5CAA45B450247139011C744CC94AEBD4A155E124B525F7558723B5DAD1FEB12AC037C419E2E511C84F46D632E346CD6731FB4EACF6BB388487D9F7940621EFEFD52769E23C8D0D825CBB74038F0682B0E72CD6C6DA7F9610CB97F46818A191B6B18C319149C33FB3FF2133D689FFFA1B6AB10A510A8FFABFA38EA9D64976A65C5C4D4DC83CA185AA964D3BEF976AC9078A203515C5916740F331C7131B3E5FB408F224FC6C5439F676FC76C9E18F0676B2118A749956D5EA1711829D076125238F648C14CF9150D955840B8AE7356B7F46528A51C9E6728BC3367D15DDE0B4232249F69C745B97B0B5263AB62BED717F0891BDB29493F8431C80F29FC4BF40682A077AE6F13B777CD6D337FE469B745E168B33399729D15E66DBDC6AA42017F769D37F8A3C774841C7CCBCF9F85DAF730EF59F16EC89E1AE7384CE736852AE91202E6B6DC5E8A92F1FC8BA93C946B9C2273B6C3FC4D2DEC5E8F239FA93593 + CABCD7A7FAC4408033C28170A176C15092BBA541BAB360F31951FA8F10BF22A70EB479FF3A5F66C4B0B54BB3260F77A52D8FA11E8D529CEE95DA95EDE104E317A59861CCDFA8D937ECF7343D50D4C6D4285A265ABB3931301894BF90C856E55D8CFBC0A1A03756B50FE8D1BEAE13E42426A62D9CBFA5D847E2F6823F63AEB033AD7B466757B5F0C7B80FC5C0D020DD95740B1FFD15B1261B111A6F09187158EA0FCD5310084EAC10271862D178358E2A2F18C1890953BA8D5F8279F83D237EB81887AFC4E9E334CD8DDDF2378F966632F485A6ADDA59DDC07AE7F5837FF168127E91A61BD77F2AB3EF580A7FDF72A744AC4315BCEC9E0334BFFFD7EE21179FB711FFDEB0589F2B6C823DBC320364A9DB243B2B549CA30F0A389129361D7D7B645D57005124939A74144971C5A92A3D3F91522C6698A248D0F95DF33E11F588C3638B9DE875D9DEB97D3FA59F87C90E2F2F678A0820D5DCEB66FD5BAD3C9EAE3A0437B7D72D870178895969FDBACBAE4513C69122A42BFF00BFE6DD48A9D6F3E1952977925ACE2E85DB833FE80C12B17367C22E5436A0158C253393E747435ABF300F5F91723C6042DD8DCC0444C3BE2DE3795FCA6E3EA2671DC40FFDD1BEF07B12047C58C4248D14C9E50EAC4341EBF9915C24F80FFE19D87464B654B202C55B0C2BF20534C96296EB430A5F3AFC649C6FF1ADC320105794DBB307F143CD7191E0895BAE133A791BE76A457215C257FA2CBA35547556ED2CBCE95ED0C602151DE5CED10D4AF886A38D04050819A0CEC815B6B139ACA259D8D115E8AC7CB8FE32E23492024FEF9E22BD11200A7AB6328449DA769A992FA4E14F6DBE1F21EE8320CA8D9E8DF41523A7369CBEB558624B7CBE63715190E35FDA217EA5C2F5E8D0452188CFF84FE8BCDCBD024C6B7BB556A7D76AAD2B0096FD3F1259B7DB200CD61B0FC864C4959FB630505987F4B7FCE402DE80ADD69B1155CD9CF47E7BFA70FD4605672333A9DD37AB6D00C3E948D6C1C2318ECFF874E5ABB4E171E1B782F18921922C1959C140501A4BBC45BCBFAECACE9B67C1024E4313FB13FE2AD9C2A9C22731C6ED76EC13F7AE494A5FA756407D00F3338F8A01B70EF42461352B88D83F2EB1734D3CDC2C7AFB21C359AC8A327CE03D45643C76E102FF2DFD14E6BA54F01A5C77A895F8317AA3E7CB61EBC4F246FC0867A757B47358809DB2C1114AED5B3F3AD4C9E78B8F8B65C59BB33BE474129F87734B19FAE8D83698BFE2CA1279ACAFA56FA2485145F913463C742165F53AB0100931D3A6B135EC2D5A58C5135CEB506D8D65518F886CC1D8C0FC29456CAF37185ADC1EE9BB6355DED2690795542111D3C0E3BED3E2B44E5CDD817CE5A24AD44B40094AFA7C7BCE3857CE8EAB5B0C6EB93010D6ED7A817FC316B90F03691A5455EEC247E0280A14BA794DBAA728752F + 126C8C04E6591D3273FDC83BAC048A1694A604C2488D9741F807FE8512F54A881C9BCC6C181D85C95353F2C432A57080AE3450AAECC35437D968BB9342B1514DAAD97A62CD28D891451041E4EDAC7842C5532CE4114E11960EB6D7011A2AC818BE28D25240AEEBD7581D7F5FD06E843FEEB2CD7E254C8DDCA82F074F16241BD33287E67F98EDF2E47BECE0B4D304C3E02B154BF86A79912B3BFF05146EA83D3AFE6BBF1FEADAC262E7B15772D7D2668071AC42A0A4E145533C0F465B5569B9EB4AD528463D12D130930506B41939CC8E682CEA5CE6EE4A856456D83ADCC48DE725D6BAE72561BCF4144E2126320F95DCE394625A77D756088E696F511261D8ADEEA28859D7EA92BF02013F21CED2D60D0353C7935CE609D39981A696908F40C323515DE7EA84CF0FA43DC67F6E3165333413CBA7249C67B4FEF2C3255C0301A0972478BE0E8EC3999A47210DF3B3F1520222FB3D1E91BBB06DAAC6FEC3416CE3DA326E2E7E639D585409D1B52CF50022EBB940E762647CA2B6D09C5A20C6857AD1227E8F1B6B1A94EAFB731EB044C3F12902B11952EDCAAF95CAE7135B8DF8F329968057E9BCD9181894E1D0399941436C154FC1B155546C109A9F9F9E83F26ED248F20F93B50E20037424DF82A89C52B6E0CE7053032C34AE0D931C3EAE489AE0E759DD841B7B3E01F30BAEC6CB43EA2128858E0CBBBA83F1DE9977D51CF2036478CC0FEC9A2C9ED4B15813A386F4C0D14C5BCFB6A582BF09662DEA1743CC7827893D6D90477A38EB65893B4B47D6C11531512A0B8C8A14551068D562A0C1FE007AD0CCD256C5F7D9DCCD3FC2D4EC20713B0B9B0C8887B700F3BEEBACBB4B09A82F9CAE5C8106520B9F2CAFB86C8076375ACB9069659DEA2E2C3B3DC55B12C0D6E50ACD9FB20F0E43953E7BF380B4EFB40459285146DD3920826B4D792DDAE4D51C3C68BCAD9AE64A10E31F6B45569EF4AEA34B8FA4997CA4C444EE373C4E92F9C49BCE9E7A10074D71521BA43E1A885BFD72CB8BFF6C18F5FDAAEB1B779BB47DE568051EBEB41C46337FA49B9D7A0726E6AB63D0DA1A381BF643C0BC1F71F092A22602E2B5F6C3B753A206DE17E034C8A977D11D25608D0955377826DDE764DD800ED7271883F93ED3F5B464D11A8B93DA887F5F18C661657F155581EDDD193C8EAA2E912C7A31B7B5B47497680B8D80E69DFC1C79BDF9C0B727E0776C1DC33B4C1887C77468DD2502A825057073A5B3EE0ED25F63DCCCF1037E580B1A3C686110FE4E77A8BCDBE985A871D20AEFB49B01765C86610BCBAFB2B597FF4D4D68145BEF53A6940CFF3AF068888B7D61F9F4075DB135E73CD036727F16B9E3432F65A87A78A5F58E3F224F0A45773564CD3F38F30F9E31904B46ED8230982388AEDA217185677C0BE51485D6EDE5E8197476C1C66EDB59DE71833E827465A887A3 + 195E323707B6830F01DB00BA905CD9EFB17B981356F2789484156D7950E676AC8AF5BB52FBA3E9257135C10A2BB1A7A1A6D930D189CCBEDDE4CC64B21F99C47D14197673B088D4691B9763BD3AB1EF54317D221EC36826F44CDE4E08C906648DB65C72DA20E5244C19867DC8983CAAE4C7AADC66361CD28DEE7C399E5D1D6140619646B122B7916A31A2F46D66020D234224D0D23E8F9AB9A60C665B416DA75AF8B8EFD4DE864F053E76DE2DD34E4D3CD9D5409728611C8C2F0838663D764A66FBD76FEE848C07C0DEDEDACA7156C5F975F6E471DE552F555568D26B8F4DB3F35FE6F0C261B9D56A16182F21A3D1CB63D2B99BD86713DE25056BC5C640AF4F5C1483380152FF162B9A06221D36475DC20B78A1BC95D7FBB8EA5E9279A5CD349C907E157CF71D149A20F0FBD25271EEE8C27C2631AD883B75A5E49175BF8B9E6AF333F17DE48E150CAE3B19837B6B6CA82A463D0DDC948D6E0A6642B5120BD68F35AAA8410D8EA5C09B2A17B86365D20095BC460B2E0EDE6C83490C852F818B5C409DF11C2651CE40F6B46C27F3DD41F2ADA74C78D164B4D27548D7AFA655A6C8516209FFCC30BBABFE88660827D925F2CB798396F8B439525FF0D5724D663CE9C3 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + cleartomark end + %APLT1End + +%RBIEndFontSubset +/TCMPPA+Helvetica cguidfix +/F1.1/TCMPPA+Helvetica renmfont +[ /CIEBasedA 5 dict dup begin /WhitePoint [ 0.9505 1.0000 1.0891 ] def +/DecodeA { { 1.8008 exp } bind exec} bind +def +/MatrixA [ 0.9642 1.0000 0.8249 ] def +/RangeLMN [ 0.0 2.0000 0.0 2.0000 0.0 2.0000 ] def +/DecodeLMN [ { 0.9857 mul} bind { 1.0000 mul} bind { 1.3202 mul} bind ] def +end ] /Cs1 exch/ColorSpace dr pop +[ /CIEBasedABC 4 dict dup begin +/WhitePoint [ 0.9505 1.0000 1.0891 ] def +/DecodeABC [ { 1.8008 exp } bind { 1.8008 exp } bind { 1.8008 exp } bind ] def +/MatrixABC [ 0.4294 0.2332 0.0202 0.3278 0.6737 0.1105 0.1933 0.0938 0.9580 ] def +/RangeLMN [ 0.0 0.9505 0.0 1.0000 0.0 1.0891 ] def +end ] /Cs2 exch/ColorSpace dr pop +%%EndPageSetup +/Cs1 SC +1 sc +q +0 0 383.99799 176.998 rc +0 177 m +384 177 l +384 0 l +0 0 l +h +f +0.60000002 i +0.33333334 sc +138.39981 101.59802 m +273.39981 101.59802 l +273.39981 65.598022 l +138.39981 65.598022 l +h +138.39981 101.59802 m +f +0.33333334 sc +137.6998 102.29802 m +272.6998 102.29802 l +272.6998 66.298019 l +137.6998 66.298019 l +h +137.6998 102.29802 m +f +0.33333334 sc +136.9998 102.99802 m +271.99982 102.99802 l +271.99982 66.998016 l +136.9998 66.998016 l +h +136.9998 102.99802 m +f +0.33333334 sc +136.2998 103.69801 m +271.2998 103.69801 l +271.2998 67.698013 l +136.2998 67.698013 l +h +136.2998 103.69801 m +f +0.33333334 sc +135.59979 104.39801 m +270.59979 104.39801 l +270.59979 68.39801 l +135.59979 68.39801 l +h +135.59979 104.39801 m +f +0.33333334 sc +134.8998 105.09801 m +269.89981 105.09801 l +269.89981 69.098007 l +134.8998 69.098007 l +h +134.8998 105.09801 m +f +0.33333334 sc +134.1998 105.798 m +269.1998 105.798 l +269.1998 69.798004 l +134.1998 69.798004 l +h +134.1998 105.798 m +f +0.33333334 sc +73.855621 96.325928 m +87.914558 89.296501 87.914558 77.899544 73.855621 70.870117 c +59.796753 63.840645 37.002853 63.840645 22.943985 70.870117 c +8.8850479 77.899544 8.8850479 89.296501 22.943985 96.325928 c +37.002853 103.3554 59.796753 103.3554 73.855621 96.325928 c +f +0.33333334 sc +73.155624 97.025925 m +87.214554 89.996498 87.214554 78.599541 73.155624 71.570114 c +59.096752 64.540642 36.302853 64.540642 22.243984 71.570114 c +8.1850471 78.599541 8.1850471 89.996498 22.243984 97.025925 c +36.302853 104.0554 59.096752 104.0554 73.155624 97.025925 c +f +0.33333334 sc +72.45562 97.725922 m +86.514557 90.696495 86.514557 79.299538 72.45562 72.270111 c +58.396751 65.240639 35.602852 65.240639 21.543983 72.270111 c +7.4850464 79.299538 7.4850464 90.696495 21.543983 97.725922 c +35.602852 104.75539 58.396751 104.75539 72.45562 97.725922 c +f +0.33333334 sc +71.755615 98.425919 m +85.81456 91.396492 85.81456 79.999535 71.755615 72.970108 c +57.696751 65.940636 34.902851 65.940636 20.843983 72.970108 c +6.7850456 79.999535 6.7850456 91.396492 20.843983 98.425919 c +34.902851 105.45539 57.696751 105.45539 71.755615 98.425919 c +f +0.33333334 sc +71.055618 99.125916 m +85.114555 92.096489 85.114555 80.699532 71.055618 73.670105 c +56.99675 66.640633 34.20285 66.640633 20.143982 73.670105 c +6.0850449 80.699532 6.0850449 92.096489 20.143982 99.125916 c +34.20285 106.15539 56.99675 106.15539 71.055618 99.125916 c +f +0.33333334 sc +70.355621 99.825912 m +84.414551 92.796486 84.414551 81.399529 70.355621 74.370102 c +56.296749 67.34063 33.50285 67.34063 19.443981 74.370102 c +5.3850441 81.399529 5.3850441 92.796486 19.443981 99.825912 c +33.50285 106.85538 56.296749 106.85538 70.355621 99.825912 c +f +0.33333334 sc +69.655617 100.52591 m +83.714554 93.496483 83.714554 82.099525 69.655617 75.070099 c +55.596748 68.040627 32.802849 68.040627 18.74398 75.070099 c +4.6850433 82.099525 4.6850433 93.496483 18.74398 100.52591 c +32.802849 107.55538 55.596748 107.55538 69.655617 100.52591 c +f +0.33333334 sc +370.85562 96.325928 m +384.91458 89.296501 384.91458 77.899544 370.85562 70.870117 c +356.79675 63.840645 334.00287 63.840645 319.944 70.870117 c +305.88504 77.899544 305.88504 89.296501 319.944 96.325928 c +334.00287 103.3554 356.79675 103.3554 370.85562 96.325928 c +f +0.33333334 sc +370.15561 97.025925 m +384.21457 89.996498 384.21457 78.599541 370.15561 71.570114 c +356.09674 64.540642 333.30286 64.540642 319.24399 71.570114 c +305.18503 78.599541 305.18503 89.996498 319.24399 97.025925 c +333.30286 104.0554 356.09674 104.0554 370.15561 97.025925 c +f +0.33333334 sc +369.45563 97.725922 m +383.51459 90.696495 383.51459 79.299538 369.45563 72.270111 c +355.39673 65.240639 332.60284 65.240639 318.54401 72.270111 c +304.48505 79.299538 304.48505 90.696495 318.54401 97.725922 c +332.60284 104.75539 355.39673 104.75539 369.45563 97.725922 c +f +0.33333334 sc +368.75562 98.425919 m +382.81458 91.396492 382.81458 79.999535 368.75562 72.970108 c +354.69675 65.940636 331.90286 65.940636 317.84399 72.970108 c +303.78503 79.999535 303.78503 91.396492 317.84399 98.425919 c +331.90286 105.45539 354.69675 105.45539 368.75562 98.425919 c +f +0.33333334 sc +368.0556 99.125916 m +382.11456 92.096489 382.11456 80.699532 368.0556 73.670105 c +353.99673 66.640633 331.20285 66.640633 317.14398 73.670105 c +303.08502 80.699532 303.08502 92.096489 317.14398 99.125916 c +331.20285 106.15539 353.99673 106.15539 368.0556 99.125916 c +f +0.33333334 sc +367.35562 99.825912 m +381.41458 92.796486 381.41458 81.399529 367.35562 74.370102 c +353.29675 67.34063 330.50287 67.34063 316.444 74.370102 c +302.38504 81.399529 302.38504 92.796486 316.444 99.825912 c +330.50287 106.85538 353.29675 106.85538 367.35562 99.825912 c +f +0.33333334 sc +366.65561 100.52591 m +380.71457 93.496483 380.71457 82.099525 366.65561 75.070099 c +352.59674 68.040627 329.80286 68.040627 315.74399 75.070099 c +301.68503 82.099525 301.68503 93.496483 315.74399 100.52591 c +329.80286 107.55538 352.59674 107.55538 366.65561 100.52591 c +f +0.33333334 sc +370.85562 33.325928 m +384.91458 26.296494 384.91458 14.899551 370.85562 7.8701172 c +356.79675 0.84063721 334.00287 0.84063721 319.944 7.8701172 c +305.88504 14.899551 305.88504 26.296494 319.944 33.325928 c +334.00287 40.355408 356.79675 40.355408 370.85562 33.325928 c +f +0.33333334 sc +370.15561 34.025925 m +384.21457 26.99649 384.21457 15.599548 370.15561 8.5701141 c +356.09674 1.5406342 333.30286 1.5406342 319.24399 8.5701141 c +305.18503 15.599548 305.18503 26.99649 319.24399 34.025925 c +333.30286 41.055405 356.09674 41.055405 370.15561 34.025925 c +f +0.33333334 sc +369.45563 34.725922 m +383.51459 27.696487 383.51459 16.299545 369.45563 9.2701111 c +355.39673 2.2406311 332.60284 2.2406311 318.54401 9.2701111 c +304.48505 16.299545 304.48505 27.696487 318.54401 34.725922 c +332.60284 41.755402 355.39673 41.755402 369.45563 34.725922 c +f +0.33333334 sc +368.75562 35.425919 m +382.81458 28.396484 382.81458 16.999542 368.75562 9.970108 c +354.69675 2.9406281 331.90286 2.9406281 317.84399 9.970108 c +303.78503 16.999542 303.78503 28.396484 317.84399 35.425919 c +331.90286 42.455399 354.69675 42.455399 368.75562 35.425919 c +f +0.33333334 sc +368.0556 36.125916 m +382.11456 29.096481 382.11456 17.699539 368.0556 10.670105 c +353.99673 3.640625 331.20285 3.640625 317.14398 10.670105 c +303.08502 17.699539 303.08502 29.096481 317.14398 36.125916 c +331.20285 43.155396 353.99673 43.155396 368.0556 36.125916 c +f +0.33333334 sc +367.35562 36.825912 m +381.41458 29.796478 381.41458 18.399536 367.35562 11.370102 c +353.29675 4.3406219 330.50287 4.3406219 316.444 11.370102 c +302.38504 18.399536 302.38504 29.796478 316.444 36.825912 c +330.50287 43.855392 353.29675 43.855392 367.35562 36.825912 c +f +0.33333334 sc +366.65561 37.525909 m +380.71457 30.496475 380.71457 19.099533 366.65561 12.070099 c +352.59674 5.0406189 329.80286 5.0406189 315.74399 12.070099 c +301.68503 19.099533 301.68503 30.496475 315.74399 37.525909 c +329.80286 44.555389 352.59674 44.555389 366.65561 37.525909 c +f +0.33333334 sc +370.85562 159.32593 m +384.91458 152.29649 384.91458 140.89955 370.85562 133.87012 c +356.79675 126.84064 334.00287 126.84064 319.944 133.87012 c +305.88504 140.89955 305.88504 152.29649 319.944 159.32593 c +334.00287 166.35541 356.79675 166.35541 370.85562 159.32593 c +f +0.33333334 sc +370.15561 160.02592 m +384.21457 152.99649 384.21457 141.59955 370.15561 134.57011 c +356.09674 127.54064 333.30286 127.54064 319.24399 134.57011 c +305.18503 141.59955 305.18503 152.99649 319.24399 160.02592 c +333.30286 167.05539 356.09674 167.05539 370.15561 160.02592 c +f +0.33333334 sc +369.45563 160.72592 m +383.51459 153.69649 383.51459 142.29955 369.45563 135.27011 c +355.39673 128.24063 332.60284 128.24063 318.54401 135.27011 c +304.48505 142.29955 304.48505 153.69649 318.54401 160.72592 c +332.60284 167.7554 355.39673 167.7554 369.45563 160.72592 c +f +0.33333334 sc +368.75562 161.42592 m +382.81458 154.39648 382.81458 142.99954 368.75562 135.97011 c +354.69675 128.94064 331.90286 128.94064 317.84399 135.97011 c +303.78503 142.99954 303.78503 154.39648 317.84399 161.42592 c +331.90286 168.45538 354.69675 168.45538 368.75562 161.42592 c +f +0.33333334 sc +368.0556 162.12592 m +382.11456 155.09648 382.11456 143.69954 368.0556 136.6701 c +353.99673 129.64062 331.20285 129.64062 317.14398 136.6701 c +303.08502 143.69954 303.08502 155.09648 317.14398 162.12592 c +331.20285 169.1554 353.99673 169.1554 368.0556 162.12592 c +f +0.33333334 sc +367.35562 162.82591 m +381.41458 155.79648 381.41458 144.39954 367.35562 137.3701 c +353.29675 130.34064 330.50287 130.34064 316.444 137.3701 c +302.38504 144.39954 302.38504 155.79648 316.444 162.82591 c +330.50287 169.85538 353.29675 169.85538 367.35562 162.82591 c +f +0.33333334 sc +366.65561 163.52591 m +380.71457 156.49648 380.71457 145.09953 366.65561 138.0701 c +352.59674 131.04062 329.80286 131.04062 315.74399 138.0701 c +301.68503 145.09953 301.68503 156.49648 315.74399 163.52591 c +329.80286 170.55539 352.59674 170.55539 366.65561 163.52591 c +f +1 sc +133.4998 106.49802 m +268.49982 106.49802 l +268.49982 70.498016 l +133.4998 70.498016 l +h +133.4998 106.49802 m +f +0 sc +1 0 0 -1 -46.500198 178.49802 cm +180 72 m +315 72 l +315 108 l +180 108 l +h +180 72 m +S +0 i +1 0 0 -1 200.9998 88.498016 cm +/F1.1[ 12 0 0 -12 0 0]sf +-41 2.5 m +(!"#$%&$'\($\)*)[ 8.666016 6.673828 6.673828 6.673828 3.333984 8.003906 6.673828 6.673828 9.996094 6.673828 6.673828 3.333984 ] xS +0.60000002 i +1 0 0 -1 -46.500198 178.49802 cm +125.99997 90.029465 m +170.10001 90.018776 l +S +CM +131.59981 88.481186 m +123.59908 91.479248 l +123.60054 85.479248 l +h +131.59981 88.481186 m +f +1 0 0 -1 -46.500198 178.49802 cm +178.10001 90.01683 m +170.09927 87.018768 l +170.10074 93.018768 l +h +178.10001 90.01683 m +S +315 90.13665 m +341.10022 90.087112 l +S +CM +302.60004 88.426086 m +294.59436 91.410896 l +294.60571 85.410912 l +h +302.60004 88.426086 m +f +1 0 0 -1 -46.500198 178.49802 cm +349.10022 90.07193 m +341.09454 87.08712 l +341.1059 93.087105 l +h +349.10022 90.07193 m +S +1 sc +CM +68.95562 101.22592 m +83.014557 94.196495 83.014557 82.799538 68.95562 75.770111 c +54.896751 68.740639 32.102852 68.740639 18.043983 75.770111 c +3.9850464 82.799538 3.9850464 94.196495 18.043983 101.22592 c +32.102852 108.25539 54.896751 108.25539 68.95562 101.22592 c +f +0 sc +1 0 0 -1 -46.500198 178.49802 cm +115.45582 77.272095 m +129.51476 84.301521 129.51476 95.698479 115.45582 102.72791 c +101.39695 109.75738 78.60305 109.75738 64.544182 102.72791 c +50.485245 95.698479 50.485245 84.301521 64.544182 77.272095 c +78.60305 70.242622 101.39695 70.242622 115.45582 77.272095 c +S +0 i +1 0 0 -1 43.499802 88.498016 cm +-14.300001 -3.5 m +(+\),-*)[ 3.333984 6.673828 6.673828 6.673828 3.333984 ] xS +-24.300001 11.5 m +(+\)*$./01$)[ 3.333984 6.673828 3.333984 6.673828 3.996094 3.333984 6.673828 6.000000 6.673828 ] xS +0.60000002 i +1 sc +CM +365.95563 101.22592 m +380.01459 94.196495 380.01459 82.799538 365.95563 75.770111 c +351.89673 68.740639 329.10284 68.740639 315.04401 75.770111 c +300.98505 82.799538 300.98505 94.196495 315.04401 101.22592 c +329.10284 108.25539 351.89673 108.25539 365.95563 101.22592 c +f +0 sc +1 0 0 -1 -46.500198 178.49802 cm +412.45581 77.272095 m +426.51477 84.301521 426.51477 95.698479 412.45581 102.72791 c +398.39691 109.75738 375.60303 109.75738 361.54419 102.72791 c +347.48523 95.698479 347.48523 84.301521 361.54419 77.272095 c +375.60303 70.242622 398.39691 70.242622 412.45581 77.272095 c +S +0 i +1 0 0 -1 340.49982 88.498016 cm +-19.300001 -3.5 m +(2-*,-*)[ 9.333984 6.673828 3.333984 6.673828 6.673828 3.333984 ] xS +-24.300001 11.5 m +(+\)*$./01$)[ 3.333984 6.673828 3.333984 6.673828 3.996094 3.333984 6.673828 6.000000 6.673828 ] xS +0.60000002 i +1 sc +CM +365.95563 38.225922 m +380.01459 31.196487 380.01459 19.799545 365.95563 12.770111 c +351.89673 5.7406311 329.10284 5.7406311 315.04401 12.770111 c +300.98505 19.799545 300.98505 31.196487 315.04401 38.225922 c +329.10284 45.255402 351.89673 45.255402 365.95563 38.225922 c +f +0 sc +1 0 0 -1 -46.500198 178.49802 cm +412.45581 140.27209 m +426.51477 147.30153 426.51477 158.69847 412.45581 165.72791 c +398.39691 172.75739 375.60303 172.75739 361.54419 165.72791 c +347.48523 158.69847 347.48523 147.30153 361.54419 140.27209 c +375.60303 133.24261 398.39691 133.24261 412.45581 140.27209 c +S +0 i +1 0 0 -1 340.49982 25.498016 cm +-19.300001 -3.5 m +(2-*,-*)[ 9.333984 6.673828 3.333984 6.673828 6.673828 3.333984 ] xS +-24.300001 11.5 m +(+\)*$./01$)[ 3.333984 6.673828 3.333984 6.673828 3.996094 3.333984 6.673828 6.000000 6.673828 ] xS +0.60000002 i +1 sc +CM +365.95563 164.22592 m +380.01459 157.19649 380.01459 145.79955 365.95563 138.77011 c +351.89673 131.74063 329.10284 131.74063 315.04401 138.77011 c +300.98505 145.79955 300.98505 157.19649 315.04401 164.22592 c +329.10284 171.2554 351.89673 171.2554 365.95563 164.22592 c +f +0 sc +1 0 0 -1 -46.500198 178.49802 cm +412.45581 14.272095 m +426.51477 21.301529 426.51477 32.698471 412.45581 39.727905 c +398.39691 46.757385 375.60303 46.757385 361.54419 39.727905 c +347.48523 32.698471 347.48523 21.301529 361.54419 14.272095 c +375.60303 7.2426147 398.39691 7.2426147 412.45581 14.272095 c +S +0 i +1 0 0 -1 340.49982 151.49802 cm +-19.300001 -3.5 m +(2-*,-*)[ 9.333984 6.673828 3.333984 6.673828 6.673828 3.333984 ] xS +-24.300001 11.5 m +(+\)*$./01$)[ 3.333984 6.673828 3.333984 6.673828 3.996094 3.333984 6.673828 6.000000 6.673828 ] xS +0.60000002 i +1 0 0 -1 -46.500198 178.49802 cm +287.31339 72 m +351.25519 43.135727 l +S +CM +312.04651 138.65378 m +303.52069 138.0966 l +305.98932 132.62798 l +h +312.04651 138.65378 m +f +1 0 0 -1 -46.500198 178.49802 cm +358.54669 39.844238 m +350.02087 40.401413 l +352.4895 45.870041 l +h +358.54669 39.844238 m +S +287.35712 107.99999 m +351.26111 136.85988 l +S +CM +312.05194 38.345444 m +305.99573 44.372253 l +303.52618 38.904022 l +h +312.05194 38.345444 m +f +1 0 0 -1 -46.500198 178.49802 cm +358.55212 140.15257 m +352.49591 134.12576 l +350.02637 139.59399 l +h +358.55212 140.15257 m +S +Q +/Cs2 SC +q +83 0 0 45 301 0 cm +BI +/Width 230 +/Height 125 +/BitsPerComponent 8 +/Decode[ +0 1 +0 1 +0 1 +] +/Interpolate true +/DataSource cg_aiproc +ID +h>dK8rWW:7rr.KK +Z2]CTJcC<$ci;i$rcS)<rb)60JcE+W +JcC<$ +JcF'r +i;`fIrX\c(ral*.JcE4Z +`rH&9rp]pJrn.4ormLf'rp0RXJcF@% +JcF'r +r_ia8k5YF@nc8Z"rr.KK +])VU+rql]KrjVm*rg`tKre(2orbML>r_i_br]:$1rZV7UrX%]erWE-2rZ(ncr\XU?r_<Apral(LrdOj(rg*PY +ric=CrpPaE +JcF'r +qZ-UUriQ1uo)J^erZCS/raYs,JcEmmrr2oXrkAB! +!-/*\ErJc3-N4.#!<*`448r[fL]4FTe,K*6 +s+13rs7HBk,Q<r,p%\RdVs+3\@fH@Xs53kUmJb0*U&KH=<rOfP +$MOPN!<*#u$iUtA,Q9@q48qbL<;p;)D#S#F=oM.p62ib@./k4c&H2gU!<*#u+9"_.C]9Iq\,P4_ +r3ZKTs3L`ET`-S:!<*W1I/`@/s8Fk;!<-F+rIP"@s8N#sdf,:+?iE(b +'B0#i!<*E+1&b8RIK#B.Sc5Vf[Jn#AcMlPsk5OrNrlb?@q#9UYhu;+(a8W^MY5Y0pQMu^>B`:?t*<#us!<*3% +./m!@G5elJ +o#(KYs3L`Bs8KS.7eHc\#Q@?R!<-C*rIOtKs8LpTSGlXi(?5Do#6$%M:B#A7 +RK1,(^qfs3JcGTHrq69<ri?$Pra5XbrY+;lrWN3]rdOj_rqXn? +JcF'r +p&G$=ra,R-e,]JTrr%oXrp0Q_rau-Rli@"drZD,.rbMLqrjVm_rquEg +JcF[.rpB^*rhBC>r`9"PrX8&mrX/Wqrepd%rr1[P +JcF'r +n,NCKrce>Nf)YeVrr&Ggrq-3!rcA&mrW2HfrX]!(rf[9.rqG=M +JcEpnroF'_rb_Wali@"ur`/rcrnQT7 +JcF'r +l2U`je,]JRrr&u!rql]5rdk&3rWV`jrWrKire:?nrqt7F +JcELbroX3Tra>^Gli@#-raYr)rorqP +JcF'r +m/R(LrWpmOr`oI$[f??Qrb)3>mf<=gr\a\"rk/7) +a8^_jZiC$Yrg*O^rY"Z"rW3!Yrh9>c +q>Z$Gci<A3rdN#jr`fC"_Z0W0rh06Mmf<>8rbMM:rpRK! +JcDbMrr)i?re^VDrX/2rrY#3Nrn.>P +s+13rs6p!epAPcI!<-1$r6,->g&?$k'(l8(%fTf6UAj8X +s+13As8Min^]&W[0D,>E!<GPT +!(6aerqh9H +f)P4=rg1J%r`T6ufDkjIri?#crW2Zlr\=D?rq*)f +JcCo5rlG(GrX&B# +r;cg7rdFe*JcFO* +o)J^fr[#;Zr`K0ti;`f9rd=\_o`4stra>`H +Sc=9@N;rnFrf6t* +!<<,o!<**":B%a%rIP"1 +s763hYdjc5=8r-as8Mur[f0##"8)Zn-iT2+ +m[*s)s+C=P +]tFEZr`/q$o`4t7reUR=JcG'9 +o)J\O[K-;-rqlBgrq68JrZUq7rWW:%rk=Em +JcC<$ +rVul[re17lo`4sqr`T6IJcG9? +p&G$jrl4rFrhTOWrdt,hraGe&r]gB7rZ;%Je,]JJrql]prr)hgrYtM1rZD,mrof1< +JcC<$ +p](6krj2SrrW;iprW<(,roAY1 +p]&P=rql]\rnIFprji$,rg<\?rc\9Pr`/qcr\ONtrXo,2r`&m,r\+$HrW<'lrj2V& +K)^E%JcG0<rnm^#rYP>0rX/XPrpkX? +rVrSkrmLd5o`4tfrn4a[ro3pXrf[8+rdOj2ri?%Z +h#Ds*JcFs6rqZPSrY"u+rYPR#rqqEK +VuQbcrau-3p]1:Prkl;Hrr2ndr]0rYli@#?rf7!R +jo9o3JcFa0rpTi.rWi2ur[Ii] +LB":Rrk/4Np]1:;ri!:*rnIE8h#RF%rkRat +bl@[]qm6:lKE(qiqm6:l +bl?Jurnm]YrW2lrrW3":rq;<N +YlF^qrbVQ7qZ-U+rf7!R[f??\rY5,-rW`?WraPkjrg<[ur]'lap]19urjV4n +bl@Z)qZ-W?KE(p5qZ-W? +bl?8orlb:'p]1:@rlL6$ +ZiC$Er[%=>r^QnIZiC$hrZV%:r\si3n,NCPr^cearWrMI +mf1N2r]L&Xrlp)qr]L&Xrlr[e +e,TFHrfR0eqZ-Ttrd=_A +Q2eDprqubArWE#trXAdmXoJB6qZ-TrrdFeCl2Ub^reg[WqZ-Uc +mf1N2r]L&Xrlp)qr]L&Xrlr[e +c2[dsr]9fSr\=E( +R/ai!rq$+^p]1:XrnadWroa7cqZ-V!h>dIip]1<7 +nc-i5r]L&Xrlp)qr]L&Xrlr[e +b5_J>reg[[qZ-U,rk+a# +^]4;mr\"'JrW`@_rr/qtrcS)<rWrM^h>dK>rXSf*r_)qargEhL +r/q!Qm/R']qiUmLrr;ugqiUk%qZ-V;rfR2Dqu?Z>qkjAUrr;ucreUPIr\+7JreCEum/R'RqiUmPm/R'] +qiUmLrr;ugqiUk%qZ-V;rfR2D +df78crmh!%qZ-TurgTMZ +_Z0VZrYbS5rY,:IVuQbfrXJ`)rcm&preC1JrpTX^rY5D5 +quH`_m/R&<qZ-WUrr;uTli@"gqu?Y2qZ-W-rkJFBnc8Xkre:@No)J\(qZ-W^m/R&<qZ-WUrr;uTli@"g +df7/`rq67fp]1;9rr/_n +`W,q?rX/N&r[Ij&V#UG:p]1<AfDkj"p]1<<q#C=. +!!)osrp9"Or\+-Kro="Xro*_]rW;rsrWrK1rX\o+rbMB2rc7uEqZ-U>rZq.:r_`7drY>;1rp9"Or\+-Kro="X +ro*_]rW;rsrWrK1rX[HW +^An33rd"8=r_`[f +VuOj<rho_sqZ-UbrpZW]ri#Slrq+hBrqHBmqZ-Vrq#C=. +!!)osrp9"Or\+-Kro<\Or]L&Xrlt-9rbM0,rbqeequ?ZNrd+>>ril(qrY>;1rp9"Or\+-Kro<\Or]L&Xrlr[e +\GuQ%rW`6"r]pJW +WrL9Brj_q2qZ-V1rqrAfreC:MrYNu^rZ:q:regLNrY5D5 +quH`_m/R&<qZ-WUp&G"RqZ-W?p&G#,p]1:`rr2Kgr`]1!r[%R?q#C=.qZ-W^m/R&<qZ-WUp&G"RqZ-W? +bl>*Nrl"dLqZ-Ulrqrnu +cN!marX8T'rb@i#rabm+r]8I,r]g8[rb_H1rY5D5 +quH`_m/R&<qZ-WUp&G"RqZ-W?p&G#,qZ-U,roW\Lrq$+-qZ-W'q#C=.qZ-W^m/R&<qZ-WUp&G"RqZ-W? +bl>!KrltEPqZ-V( +XoHfKrm^o[qZ-V#rr/;br`]1!r_LrAr\+-KrdsqFrY5D5 +quH`_m/R&<qZ-WUp&G"RqZ-W?p&G#,qZ-Usl2U`\qZ-VWq#C=.qZ-W^m/R&<qZ-WUp&G"RqZ-W? +bl=mHrkeX@qZ-V< +YlE5Qro<tsqZ-Ujrqhu\rdO_Er\2b"rXSf*rhfJjrY5D5 +quH`_m/R&<qZ-WUp&G"RqZ-W?p&G#,qZ-VYl2Ua2qZ-V3q#C=.qZ-W^m/R&<qZ-WUp&G"RqZ-W? +bl=dErjMe0qZ-VT +ZiAYWrr2maqZ-U^rqMZVrhB8irXRHXrpKO]rlOs8rY5D5 +quH`_m/R&<qZ-WUp&G"RqZ-W?p&G#,qZ-Vsl2Ua]qZ-Ueq#C=.qZ-W^m/R&<qZ-WUp&G"RqZ-W? +bl=[Bri,kurW)p"rl_bM +fDki3qZ-U;rpZ!Krl=d6rp&,8rk\@0rpBL\rY5D5 +quH`_m/R&5qZ-WUp&G"RqZ-W?p&G#,qZ-W.l2UapqZ-Ubq#C=.qZ-W^m/R&5qZ-WUp&G"RqZ-W? +bl=R?rdt"Ir[7^= +\c:C`rmq&SrW)p!rkaWorp9C[rgh[@r`T*urYtP1rY5D5 +quH`_m/R&$qZ-WTp&G"RqZ-W?p&G#,qZ-Vol2UaTqZ-Utq#C=.qZ-W^m/R&$qZ-WTp&G"RqZ-W? +bl=R?rquaVqZ-V3 +\c:LcrqcULqZ-VALB%67qZ-U>rqkOOroF%]qZ-VWp&G"+ +!!)osrp9+RrqQHrqZ-WTp&G"RqZ-W?p&G#,qZ-VBl2Ua7qZ-V5q#C=.qZ-W^n,NC^rWW0!ro3VNr]L&Xrlr[e +U]:>MrXJ`)rj]W@ +h>dJ/qZ-UPrq_BLrknL2rh&$HrcJ#;rYke1p&G"/ +!!)osrn6c?rkS:/ro3VNr]L&Xrlt-9rbMB2r_D_Xr^H\arhoPkrYbS5rn6c?rkS:/ro3VNr]L&Xrlr[e +T`>"bqZ-U0rq=,, +i;`fJrY#21rWN5QJc>`Mr_*+grY#4>j8]+9p]1;Xo)J\A +!!)osri#Dfrr2mlp]1<Qp&G"RqZ-W?p&G#,qZ-U0rornOrlk6>rW3#]q#C=GqZ-Voo)J^gr_E4gro3VNr]L&X +rlr[e +ScA[aqZ-V3rr0e7 +i;`e6qZ-V)JcG]Krm:WFqZ-Tsrdb"Hm/R'-p]1:DrqZ-br_WXq +quH^jrquHhreL.Hro3VNr^?V`riu.rrbM9/r]gDZp&G$Zr]0iUr`Admr_`Omr_<Cip&G#Ho`5!Np&G"Z +qZ-W# +bl=76rmLcHrW)p.rkQDN +j8],QrYPP6rWN5UJcGTHrg3Tcp]1:<r`&lJriZ73reLJNrZ(\5r[%R+n,NB` +!!)fpr_`ZurmC_4r`&k!rW3!AqZ-WTp&G#AqZ-UKri5t.qu?Y2o`4t_rhBDRrp'Kdr[.LBrX&SUp&G#fp]1:j +ric=Krg<[arWE-#rZV.=ro3VNrdakGr\+8NrjgJW +RfE@bqZ-V#rm1TC +aT(<#rfd3Zra16Vo`+oirX[fbr^-VEm/R(_ +!+#\4?KhIhLAkKU!<2!Ns8L"1!<*0!s8Hg2!<-a4%dX2p"TGaus8Mrq?KhIhLAkKU!<2!Ns8L"1!<*/M +s-iuechd_A')nR' +fuX3Rs8F>D!<**"g4B:os8M?`C]4b,!<+PKUZ;@S +rW3#trbVQ<o`4t4rhKJmr`]1!ro3VNrqub'p]19squ?Y2qZ-VmrlY3]nc8YNrlXU-rr2n5rW`#qrZ;'6rr;t$ +qZ-WTp&G$hra>L$rWUaM +QiI%[qZ-V+rj2U_ +bQ$`)rnI;Mr]u,8kl:YXrjr)[rb;@2ra#MGrf[97 +h#I<PrqcW>rgWnZrl4s4h>dK>rl"fRroa1YrbMB2rhf\prql]"re:>nrg<](i;`fQrm(M4rh'20rqP=Lrp'L$ +rkn`u +df5[6rj2J%r\a\GrkSNs +cN!&,rf[-YreuF. +W;j7)rbMB2rhb8H +gAdN>rq66rrW)p-rf@&[rm(N2 +dJrA/r^ltermu`$ +W;j7)rbMB2rhb8H +gAdE;r^cndrc.q/rji$[rq+_? +l2UbVrX&Q(rZZpn +V>mq&rbMB2rhb8H +gAdE;rfd3Zr^ZsLriH+>ro*kO +fDk+8rl4g8rb-l_ +V>mq&rbMB2rhb8H +gAdE;rn7/Kr[@c'rhTP*rmUl0rqtLM +l2UabqZ-VOJcDSH +[/^,@qZ-VmJcFI( +PlLaYqZ-U6re^WEric=Brn[SCrr1aR +l2UaJqZ-VhJcDSH +[/^,Hq[EJ(JcFI( +OoPCorW)p.re198rhob1rm^r0rqG7K +l2Ua2qZ-W,JcDSH +JcC<$ +OoPD2rW)p$rdk',rhf\*rlP/rrpKd^ +i;`'Araks,rmQGu +V>l,HJcCl4r^?V`rd"L#rh9=rrkn`froX4Prr(mW +l2U`gqZ-WLJcDSH +JcC<$ +OoPDSqZ-V:reg]Hri,n6rmLf&rpKd] +j8\BDrcS)<rka6d +V>l,HJcCl4r\XTSrW<(Freg]Erhf\/rlb;prp'LTrr)!Z +l2UaBqZ-VqJcDSH +JcC<$ +OoPD"rW)p*rd+R$rg<\^rk&0Krn7;5rpKd] +k5X]Grh]JlrfMd3 +V>l,HJcCu7rr2m"rW)p6rdFd'rg*P\rji$Frmq)-rp0RWrr20^ +l2UarqZ-V>JcDSH +JcC<$ +PlLaHqZ-U=rdXp)rg*P\rjMgCrmh#'rp'LTrqbmZ +l2UbFqZ-UWJcDSH +JcC<$ +PlL`bqZ-UPrdk'+rgEb_rj2U@rmLf!rp'LPrqG[W +k5YE7rW)p"rp>:: +W;hGKJcCu7raPa)r`&lLreg]Erhf\$rkeZ^rn7;7rpB^Yrr)3` +k5YF+qZ-VmJcD\K +JcC<$ +QiI'arYYV7rWW:>re^W3rgs+drjMgCrm(MrroO.Erq??g +m/Q5JrkeO4r`asR +W;ipurqHE?rl"g/JcFd1 +QiI'/qZ-U?rce6srh07frji$Frm(MrroF(Drq69c +m/Q5Jrql[*rW)p0rq*#dr`8n4rdg=6 +Z2agSr\XTTqZ-W<JcFd1 +QiI&/qZ-U_rdOj(repcPrhf\,rkeZ]rn7;1rp'LTrq>^Y +j8]*mqZ-VQV#UE_qZ-V<]`7usqm6:E +jo;^froO+eo`5!6JcFd1 +RfEBTrXJi,rWN46re:?/rfd5VrkABKrmUl"ro="Crq$-_ +m/Q,Grnm\XrW)p5rq32hr^H\arcPmRrk/+.r_;MS +[/^,fqZ-U'rcJ.!roSe3 +j8YSJrdFYDr\FIpqhkBBrhf[nqni?`rn7;3rp'LRrq??j +n,M>Gra>U'rf*iUr^H\arcPmRrk/+.r_;MS +[/^,CqZ-VBJcFI( +ScA]XrX\u.rWE.2rdXg&rhKIiriu@;rn%/&roX4Frpp'^rr)<c +i;`f0rW<'!rYYY.WrN&eqZ-V<]`7uDqZ-Ui +jo;^fraG[(rgn]@ +gAd`DrdakGr\"1lre^W3rf?rRrji$Frl4igroj@Hrq$-_rr)<c +h>dIUqZ-V4WrN&eqZ-V<]`7uDqZ-Ui +jo;^fraG[(rhtDJ +gAdiGrmq&TrW)p!raYqWqhkBCrhf[mrkSNMrlt>nqs+1Qrq??i +n,M5Dro*herW)ourj]*1r^H\arcRo6rh9=RrgEZ`roF'RrbVQrr`fAarljs5rjr)krbD<1r[dr/rlXg3rqui4 +!PlMMNW*/]2uZSOJH"<is8M$TOoEE#s8N#sS,Q@c2#c#%VZ&gW!<.!8VZ,uRs8LsUJ,WII2#]<1:&\o, +])M]ks8MurWW$o:4oQB!2uZtZVuHYZs8Mur_#B>m>Q-S\:B#eC +g[kH?s8Min0`(kL3<!stM#N;2Nr,^QY5?*8e,J&"h#$C6pAY$Z +s4[MPUAFri)#ij*s8GIa!<.-6s8FAE!<*T0s8IoT#k@up!WJJZs8HBl!<.]Fs8M9^ +70!>T!<-=(mIL;V]))L,I/`X75PP6X_<Ct!b4u#9qYje""7-$e+o]XNs8M6]6L4^O/,moas8M9^7I1$R?N0?f +s.fVnFo)1<(]J@PJ,>-&SGT2_]Df\H`;A6ej8S?ClhgDB +s4@;M;u6Ro:U'lu7Jd)aFnPe6-N4#E&cQqM!<*'!*W?iL!<*#uU%nZeB)W/:#Q"N#"8`H)MYR5N_u:PP +!;lir+9"%p"o&)s,l[*%s8KV,!<.6B4nSgS_YX]>"8`)t#Q"l-bkV5;?Maa%!WFMH;#XDm2Z<dT!<*W1eaib> +cMe^V!<*Z27/eM3!rDus,6%*)s8Kq8)>F42+9"%p"o&)s,l[*, +s/,hq^A\35!<**"?iG9HMZ/V7V>d@kXS]m6bPTulkPjcGmec_E +s4@;Mli%au!<.k^s8GIa!<.-6s8FA<!<-L-nb`@cec$ik!<+/4s8K\.!<,^`s8MWh)>aC6 +8-)7Pro<nUrqHE%rY,//r^uk`rjqt,rYkb9rWN41rg3VmrpBU_raG[(rj_P!rk&%-rYPRHp&G$Mr\XKPrc%H. +r\jWRr[e&irr)`orlb9dqZ-V+q#C?brYbS5r^d%Kqu?Zirj_q@qZ-Uf +r;Wbrro*hpqZ-U]rcA'oqhkBCqkjA(qni?_rn7;*qs+1Nrq??c +m/PT8rjMe-qZ-Vc[f?=qqZ-V<p&G"<p]1;po)J^Ap]1<Hp&G$(qZ-Uio)J]:qZ-Ut +!<*#urpp*gd/F[W!<*'!i;!?O](c:)(&l2@s8HI(!<0M!s8I]K!</#Is8LLE!<+qMs8K"p!<*N.g@G:CY584u +)#4.1I/<pC=T8<js8LCE')hn1!rh*Y +s8T2#roj>-qZ-U;rc%jfqhkB;qkj@oqni?Sqq:u-qs+1Rrq??f +m/PK5rg!?\rW<)!\c;XtqZ-V<p&G"<qZ-Ujm/R&&qZ-W0p&G$(qZ-Uip&G$OrX&Q(rXo.o +!<;Hdrb_N4rdjkErjqk)rh&QWraG[(rj_P!ral'JrZ(pun,NCarW2uurZ1\3rZh:?rgiNXrr)g?qZ-WJrr;uX +rX&Q(rXo.om/R'%qZ-VH +!WW2's8MKd0DbbK(B/(JH2EKuNW,aNVZ+4)_Z&'^g&C47lMg/IpAY!V +s3CZDJboHH"oc!Ds8GIa!<.-6s8FAB!<0Fns8GRd!<0%ls8K\.!<,^cs8Jej!<,sr +s6]jcZMOY$/GT8E]))L,(B4="s8HI(!<0LXs8K_/!<+#6s8M3Y!<*-#n*L)R_Y]Mqg]%6PU\b&j<9aG^ZMOY$ +/-5eN +ZN'prr]0iUrXf'Arce?uqhkBEqkj@uqni?Sqq:u+qs+1MqtB:S +bQ%QYqZ-U&rk-#Gr^H\arcRo6r[.LBrm'm1raG[(rhT5erk/+.r_<(crdFYDrc\8$ +mH"8urW<'!rWrN&qu?Z,qZ-U^l2U`kqZ-W*j8],Jrm1SIrf@%crW;rsrZ1e6rl"[6r\`F0rdFYDrc[Pe +rn%,NrW)p' +!WN&urjMk+oDV/T!<*B*A,^WMM#3)/Qi!ZZX8]s7_Z%IPebe&!kkjZEp&=[a +q!%h%s8N#s>5J=!"ob".s8GIa!<.-6s8FAB!<2'Gs8HI(!</ees8K\.!<,^cs8H'k +!9!qWp&"dg]))L,=6]ba@J^'(\Es7pXo;Q()sIA%*Vf[6UAFri:YPjJ<n%*M +p%8=X\c;Zgr\+-KrWiF.rcJ-pqhkB9rh]Ukrhob.qni?Xqq:u+qs+1MqtC$d +l2Sj)rqcUsp]1;6rr'q<r^H\arcRo6r[.LBrp9"OraG[(rhT5erk/+.r_<(cr\jBK +i;ilFqu?Z,qZ-Usl2U`kqZ-W*o)J^Pr^?2TrYPQ/rhTDkrZ1e6rdjqHraOU]r\i7+ +!Uf@Um_&T!aSm%R!<*?)=oNOBL\lu.OoD3SVZ+"#_Z%UQg&B_)kkjZEp&=[a +pZDLms8IKB!<,Xjo#q(47Jd)aFnPe6-MmfBm-OcO@J^'(V"Oce]__^.:%ePc:&=qi +IJq4Fa8Yu5s8KV,!<-'as8HI(!<0M$s8N#s6i-l_#l[HqOoEN&m/-h^o_SXf*Vf[6Oo#.X<SIKP:&=qiIGMpE +qtgBj^]4;2rWrB$rY,9@rcJ-oqhkB6rhTFgriu@;rl"fdqq:u/qs+1MqtC$d +k5W3rrhKGrqZ-UIrnPg!r^H\arcRo6r[.LBrp9"OraG[(rhT5erk/+.r_<(crc@r:rdXnH +f`1r^qZ-Usl2U`kqZ-W*p&G#rqZ-U+rlFR.rp0F]rZ1e6rjVb)r]'0Brp'C1rp]perc@r:rdW]& +`;fi7rdFPArZD,Src\9rqhkB5rhTFgric+6rm:PqrndP;rp0RVrq??c +j8Zdlrkn^JqZ-U'rg!K^eGoM:qZ-V<p&G"<qZ-W^m/R&nqZ-Vkp&G$(qZ-Uip&G#[qZ-Un +rVu9brp9N;rhT>hrjqt,r`A@araG[(rj_Y$rdXeFrb(Ttril8"rZ1e6rn[GOrXJl!m/R&]qZ-W@rr;tdqZ-Un +l2UbLqhP0H +!WW2?s8L^N3;<LQ0)fegH2`ZtMZ/Y8U\gqfY5Z97_Z%gWg&Bb*l20cFoDA7\ +qW%Uds8LgQ.JNoB7/l/ss8GIa!<.-6s8FAB!<2?Os8HI(!</ees8K\.!<,^cs8LIG!WE)u"odH\ +s6]jcE;KY7J,''C]))L,=6]ba@J^'(\Fon$@J^'(N9pTDC&7o0*Vf[6rVe/@!</GUs8M<_#lXi')#jO6s8LIG +!WE)u"odKIs8I!7!<.HK +s8U@Drr2nXrX&H%rW<'`rc.pbpko'6rhTFgriH+7qni?Upt>Z.qs+1LqtC$a +i;^7crqHD2rW2lrrXSpugAh.@qZ-V<p&G"<qZ-W^m/R&nqZ-Vkp&G$0qZ-UMo)J]!qZ-Ur +!;cfoqssddao2MD!<*-#gA(^I]))L,=6]ba@J^'(\Fon$M>I;P9^i#\M>dPQ!<+#3s8K.t!<+&=h=^gIrr,gm +!<-F%s8HO*!<-$uqssddao2MD!<*-#g&_6R +d/X+%r]^)WrY,98rc8!hpko':rh]LhriH+7qni?Tpt>Z,qs+1Iq"F^c +i;^%]rk\RNp]1:drnlZ6r^H\arcRo6r[.LBrp9"OraG[(rhT5erqHBtqZ-VFrjVm]qu?Z]rXo#- +!'^KK5Q8P!nc&IcfD^F%"oA<!L\:]H]))L,=6]ba@J^'(\Fon$bPhP>!<-C*_>aE4h#<rF:]:@n#lY21!<*3% +hu<HHs8G"T!<*o9U&NaEn,C6(6i-l_(B3Cis8M?`&c2S-5Q8P!nc&IcfD^F%"oA<! +L]%2's8MopPPu!c!<+eRD>n_XLA6Z*ReWcZZ2VT:_Z%[Pg&C%,lMgGQpAXpE +s/l>#o);DZ!<*6&F8kUis8GIa!<.-6s8FAB!<2?Os8HI(!</ebs8GI[!<.]Is8KV/ +(B"72!<*#u#PA)r<W<!js8KV,!<-'as8HI(!<0M!s8I'3!<*9!!<+)>c2LrB!<+SFs8M-Z3U$PC"TH()s8KV/ +(AIn/!WE>s!<-!t +rqufLs8K>'.JNoB&,oW/EW1F^MZ/S6T(o2^[.qN;b5U&jg&Bt*lMgAOpAXmA +s/5nrPPu*f!<*W1NrJk@s8GIa!<.-6s8FAB!<2?Os8HI(!</ebs8Kt9)#++1L%YKFkl+0S +!:U!f(B0Eprpp*g]))L,=6]ba@J^'(\FT\!q>PjB#5%uq!rc!pli-q`bl/1N!<+SCs8MloC]4M.!<,jpfBiP: +kl+3C!<*c5OT,7T +s53kUbPja!!<+VMD#SVWL%pQ)P5_6RVZ*Lm\bO&@c1ouki:uU:o(_qX +rn@CJs8L7A;>pao!<+2AWL3_bq>StE^AcLYqX=Fa +h#Z?fri5sBrc.prrjMh'VuQbRrhKI<rd=^7ro<\Orp'Kfri5tOn,NC^rlY5+rfd>krnu`7rn[RRrcnE^rf$ib +rql<e +jo>><r`]:%p]1:4r`T5?rdFd&qhkB3rgW\[ri5t2qni?MrmCMoro!S:rpfdWrr(IK +U&Y,Mrh06No`4tJrhKJfJc>cN +s+13$s6K^adJdhY#P\;u&cPQ)EW1:`LA6Z*OoD-NVZ*n#_#)"J_uA-[g&C"+lMg;JpAY$? +s.98ik5N3rL&NFl!<*Z2FT1$K +s+13$s7H?jq#7&f3qWLP$3!9jDuOt[L%pQ)MuK4@VZ*Ro](j/Aa8XWdg&B_)jnS-?nG)_V +r6bP6s8MHcc2P!IDuL[J!<*#u7K0Ih +qi:]-s+14Hs8LdPFT)sH!<*0$2Z@LkFoI!fMZ/P5QN!]TVZ*h!_"beGc1oukg]$C2lMgALpAXs7 +s-WicoD[A@^](22FoF)o"8)Zn)ZG6c +jHT[qs+C=P +qtgBjriQ/grW2ZlrY5>urbMLUrdb!)pko'7rhB1bri,n-pqm$Mrm^_rrn[S;qs+1Hrq-!Zrqst> +Q2gjXro3q$rjVm're^VHrY"l(rWE-rrj_t, +Sc=9@M?!S8rdFkd +)?:]K!<**".K3EJErLCaK_:6%OT(mIVZ*Lm[Jmu:_Z%dYf_aA$gA^+,lMg/Lp&"I^p\t*3 +s-!E]qYoaYfD`\eZi6ZtOoAnj.K0A@!<+5BM>lh9 +s+135s8N#s\Gf;' +"8i/q!<*Q/55o9qFT-agM"QZ)OT(gGVZ*LmZMqW6_Z%RSeG._rh#?O4lMg5HpAXjd +rl+nus8Murnc%MHd/Ll\Z2UNtRJq[76iIPf!<*6&>5ku0 +oW8(Ds-Wicec(@',4tp: +!<E0$rZqJ@rc%j^re'm$rf$iBrh9"^ric=8pqm$Krm:>kro<e=rp0RSq"F^^ +^]08mrr2okroa:8rm(MWrilC"rgj%Mra,RKnc8Xmr]^=4rl"g4 +\Gq-[V#UGRrh'0orYY2+rXAcd +!G,gBAc?cMIK##pMZ/\9S,T8ZVZ*LmYPu0/_Z%LQcMlJkg&Bh,kP4?Amf)nSpAXs% +s+^RQqu6*ajSmj3bPo<V[Jm3*UAgMYHN$),$L[uo%/rp!NrIH* +rl"hfs02P&mJa3dB`9=E!<+)>:B#22GQEAH +!.k-+pko'/rg!JUoqq_frj;[>otp^Orn$qurnIG5q!.kErpojXrqHEj +\c7<^rr)iirpB^Frn%.mrl"fJric<urg`tIra,R]rY"PtrY>E6rgWoD +c2W@p]`8!(rji#Nr\FHSmf<=krZ_>+raPkIrd=^" +r/1?.rf@&HrhT4aric=3otp^Hrlb;lpt>Z$ro3V9rpKdYq"F^` +Zi>UVrVulnrpp'Rro*k.rm1S`rkJH>ri,mjrg!JArcnE=r[e$Wli@#.ral)-rp&2: +JcEgkrql]7rdt,6rW_fkrWE->r]:$[rc%j\rdOj#onid. +MZA\7PQ%3IVZ*RoZi7]3_Z%RSci2Pkg&B_)iVr*:lMg2Mo_A.Zp\t,q +s+14Hs8Murq>Tp`l2KZ@gA]V$b5T<X\c/c2V>ct`OSaq7E;iH.-2n/<!<*#u.K36EGQ+04_uAod +s+14(s8McleGcWMM#Ll_4T5fV!<*c51]C8ND>n_XIK"luM=QQ'NrGFI +US@gaoqq_irj_sDpqm$JrlY5ip"B?!ro*k?q!.kFrpoaUrq`Yp +JcGBBrr)ijrp]pPro="5rn%.prl4rOrj;[(rhTO`rg!JBreg]1rb29trZ;%@joGAkr\a[Zrdk'GrlkB4 +!<7WMn,NCbrn[R_rfR1qr^Ql0rW;3^rXf&]r_*6)rcS3frdt-+nr!F+rfmDOrhB4c +rMKRlrj)O:otp^Jrm(Mpp"B?#roEb;rp0RRp%JC\rr/hq +JcG0<rql]frp]pQroX4;rn@A"rlP/Urj_s0rhoamrhBC]rfmDAreg].ra>^drYYV:h#IEl +!>l[Q55o*lMZ0jZec+k5p7D<`qu6'`iVpXlRf7I/:];gB#2K:Y%/qXR7fHosFT-UcJc:JrMZ/P5P5^mK +U$niZ +XK2E'rjVmBotp^MrmLJmrn@A1ro`t>rp9XSp%JC[rr&Pj +JcFs6rql]grpp'UrosFArnIG'rltG\rkSNErj)O(qkj@drgEbJrepc5reLJnr`f@kr\FHqrX\u/ +nGqhSrW<'0rYthar\OO<r_3;nrac"Ird=^$rg!JVriQ11rl"fNrj)O#rgNhHrdt,lrb;@;r_`Y`r]0s/rZM1S +rWq*UrWiE>r[Ih-r_!/orbqd\rd=]qreC!$repc;rg<\Wrh]1_ri5t'rji$D +!Q)_J_Z%LQc2Q;eg&Be+j7;L7mf)hNpAXgc +r1!_;s5j:[rr2fop\sgan,DYPk5O6:g&BG!aSs*V_Z%=L\c/l5WrAmpV>d+dR/W6IMti2/LAl]%CAq6462iJ8 +)ZU6H$O_LcoDnjmrY5>Xr\jaFr`B)6rce?frdOitre:?.m#(e(rg3VUrh]1_ri#h#rjVmA +o>1LErkn`VrmLJmrn@A0roWn=rp9XRrq5sXrqQKj +Q2cF8h#IBOrqQKdrpg!Sroj@ArnIG)rmUklrl=oQrkAB@rilC$rhf[krgs+Wrfd>CrepH,reUW0 +!JZ@.Hi@XV;#WTV.fL[l*W?oT')i@>#Q=e8!<*0$$iU_:(&f0O+T<_e1&aN=;uUA-FoH^dIK"fsL&Qqn +MZ/P5O8b@BR/WWTV"1D^W;a""[f3u/_Z%UTc2lDC +!7Ur"p"B?!ro3qAp$2PErpoXRrqcWm +O8je2f)PaKrqcWgrq-3Xrp'LErndY.rn7;&rmLehrl4iPrk/6<riZ7!pnn%drh'1[rg3VI +!07/AO8b(1MZ/G2LAli)K)U?#JGt&tHiA-dD#S#F?N+(+;Z9>g7/fCL3;t`52?#]:5lO7P9E%ig=T2Y+Ac?NF +ErL=_HiAElIK"`qJGt-!K)UE%K`6eiMZ/Y8OoC^HRf8rYU[4lWVuEgt[/R`,_Z%RSbPorh +fD4+rg&Bb*hu;d2lMg,KnG`(QpAXjd +qhG-%s3:TCr;QNkp&=L\m/H;Lk5OB>h>>n)fDa.rbPoK[_Z%CN]Df8<ZMq$+ +WV<:fVZ*@iTDk>ZQN!'HNmWa`M>i>1L]3,/M8bAONW,(>Q2[6OT)PJ`V<OlVW;`puZ2V01]DfV:_Z%ORbPolf +fCIVog&^'e +!8d_7ro`k;rpB^Uo(N(Yrr%EJ +!<7WMa8c/;rqcWfrq$-Wrp0IHroO.<rn[J)rmh"orlY5Xpqm$Grk/6@ +!42d6[/R?0Xo><mVZ*FkUAghbTDkG]SGo#WRf8`PQN!-JPP^LAO8b.<N;eb1MYi>2NW+t;OT(CAP5^^FQ2[-L +R/WNQRf8iVT)PA]T`1YaV<OlVW;`mtYl;$/\c08@_!Jr;_u@gXci2J`g&Be+ir8*< +lLaB@m/HMRo_%qWp\t&@ +s7cPEs1\O4qu6BipAX^`nc%tUli-2Kl2KcCi;VL.g&BM#d/M;hao9<Z +_Z7RI_Z%@M]`,G?Zi73.X8]$BVZ*CjV8]>2VuEarYl;!.\,O#=_!/`8_u@[Tao9Qad/MP`g&Be+i;Vj; +l1=0?lMg,Kmf)eVp%%hUq>U>D +s7-,?s1&+.rVlZmp\X[`o`"@ZmJH2Jkl0WAhu;F( +f`9P'e^aZIrm(MdrlP/Yo"tC@rk8<Dqmud:rjM^3rj;[1riuI,ric='riH+!ri,mprhf[mri,msri?%"riZ7( +rilC-rj;[4rjMg8rji$>rk&0CrkABHk/.,:rlP/_rm(Mkrmg8drnIG1ro="Ao'65?rpKdU +!VH!ao^DMQq#:-hrdk+8 +s+13Rs8N#squ6Ejp\X[`oD\7Ym/-)IkPjQAir7g8 +h#Z?frn@%urn.5$rmLekrlb;]rksc4rl"fVrlb;drmLesrn-JgrnIG-rnm_7ro="An*9o>rp]pZ +p@e@VrqQKhrr%EJ +huA9-U]:>lrql]iqtC$^rpp'Wrp9LH +r9F:FroX4?ro*k6rnRM,p"B>srn%%trm^qqrmC_lqp,2cqoeu]rlFuWrl+ZNrl+cTrlG)]qoeu`qp,2f +qpPJnqpk\trn-Jgrn@A,rndY5roF(@ror\4rp9XRrq#UPrq?Hh +q#L6ir;Q\H +s474$s-NcbrVlZmq>9mbp&=L^ +nH&1MrpTjRrp94@roj@Cro3q9rndY/N7n3brndY4ro="?roiM0rp9XPrpTjVrq$-^n+QbVrql]o +r;V?Jci8RrMuWeTrqcWh +!;?$Xrq-3\rp]pTrpB^Nn*9f6qr[n>qr@S5qr.P3qqh5*ptPf'rn[J.ro!\4ro=";ro="=qrRh?qrm)*rp9XO +rpTjVrpp'\k4\fLrql]n +nGe(>ci8RrJc>cNs8Mrqqu6Hkq>U0[pAXaao`"F\nG_kTm/H=6lMg,KmJcPQnG`"Xo],ZEq#:*gqYpEl +rT+!0s3L^rs+14;s8N#srVl]nqYp9hp[%VQp%\1YoDA+Xnb_hQn,)PPmJ-&ImJH>Nn+cDOnb_nVoD%tWp#,QCq#:*gqtp<j +rmLgts3L^rs+14&s8Murr;6?iq>U,RpA=U`q#:-hqu6Qn +rk8>_s3L^rs+13]s8N#mrVQNfqtp6hq=XO[q>U6iqu6Hhqu6NmrVl`orVQSd +s+13rs+13$s+13$s+13rs+13$s+13$s+13rs+13$s+13$s+13rs+13$s+13$s+13rs+13$s+13$s+13rs+13$s+13$s+13rs+13$s+13$s+13rs*t~> +%APLeod +EI +80 0 0 2 8 63 cm +BI +/Width 222 +/Height 5 +/BitsPerComponent 8 +/Decode[ +0 1 +0 1 +0 1 +] +/Interpolate true +/DataSource cg_aiproc +ID +JcC<$ +JcC<$ +JcFp5 +JcC<$ +JcC<$ +JcFp5 +JcC<$ +JcC<$ +JcFp5 +JcC<$ +JcC<$ +JcFp5 +JcC<$ +JcC<$ +JcFp5 +J,~> +%APLeod +EI +83 0 0 2 301 63 cm +BI +/Width 230 +/Height 5 +/BitsPerComponent 8 +/Decode[ +0 1 +0 1 +0 1 +] +/Interpolate true +/DataSource cg_aiproc +ID +JcC<$ +JcC<$ +JcF'r +JcC<$ +JcC<$ +JcF'r +JcC<$ +JcC<$ +JcF'r +JcC<$ +JcC<$ +JcF'r +JcC<$ +JcC<$ +JcF'r +J,~> +%APLeod +EI +84 0 0 3 4 65 cm +BI +/Width 233 +/Height 8 +/BitsPerComponent 8 +/Decode[ +0 1 +0 1 +0 1 +] +/Interpolate true +/DataSource cg_aiproc +ID +JcD;@rr)inrqQBarq-3[rpKdP +!:'1@roj@Dro=":rnm_1rn?Dcrn.5%qpk\qqpPJkrm1ShrltGfrm1SkqpPJnqpk\trn,iUrn@A,rndY5roF(@ +rorS1rp9XQrpp']n+QbUrqc`p +r;ceIs2Y.js,m?\r;QQl +q"j[bp@eLXrpp'YrpTjRrp94@roj@Cro3h5rnm_3qq_/(rn>6BptP]%rndY3ro!e7ro="?roiM0rp9XPrp]pW +rq$-^m.UGRrqcWm +pA]^D`rCViM#[JRrqlcl +!VuQjq![qUo`"F\nG_kTmJcG-lMg&Ikl0cEk5OK>jS7a3jSn9?k54?@l-\eqm/HDOn,DkVo)A:DpAXgc +q#:0i +rTaE6s2P(is+14Gs8N#sr;QTmqYp<iq"".Xp&=U_o)%qUn,)PPmJ-&IlcAAjlhg&JmJ-,Kn,)VRo)A:ApAXjdq>U6ir;QZL +s+13is+13$s5a4Zrr2lqqu6Hkq#:$ApA=O[o`"IQo)A7Xo`"O,pAXjdq>U9jr;QZo +rlP1ks2P(is+13rs8Murr;QTmqYpBkqYU*`q"sg2pA=U`q#:*gq"smdqYpBkqYpBkrVlf' +s+13is+13$s.B>grqQHkr;QZor;QZl +re1<&s2P(is+13$s+13$s2P(h~> +%APLeod +EI +138 0 0 3 136 65 cm +BI +/Width 383 +/Height 8 +/BitsPerComponent 8 +/Decode[ +0 1 +0 1 +0 1 +] +/Interpolate true +/DataSource cg_aiproc +ID +rr)idrpB^BrnIG&rmHAC +QHk',J^/hlJ^/hln]q-+r^$Map]19pr^Qm^ +XNm6Zrn7;,rp'LNrq??e +rr;lqrql]]roj@?rn`4Z +QJ$iBJ_>V-J_>V-le29Kr`]:,o`4tKrg3W: +[Fpl!rn[S=rpKdZrqZQn +qu?ZorqHE`rp0RIJ`E'V +J`D=A +J`D=A +J`GkPrmLdfrY5#*rZ_>trnG'F +QK.u*rp'LNrq??e +rr;Zkrql]drpYL( +QKj%dJa.gOJa.gOhs14$rf@%*o`4t)rcS4l +_<R-IrpKdZrqZQn +p&G$jrqcWgJao&r +Jan<] +Jan<] +JaqF`rp]oer]ToSrWrL4rlrLR +OR`>@rq??e +rr;Herqq?@ +QM,n'JbFZgJbFZgd.[IXr`9"#o`4tbrk$GK +MY@&F +rr;Herr.KH +QMc=3Jc()sJc()sb5D7rrc.oHo`4tKrhobk +f)1F'rr)ir +JcC<$ +JcC<$ +JcC<$ +JcE[grpfuHrZ1Y3rZM3%rq"qF +K`?Q~> +%APLeod +EI +83 0 0 3 301 65 cm +BI +/Width 230 +/Height 8 +/BitsPerComponent 8 +/Decode[ +0 1 +0 1 +0 1 +] +/Interpolate true +/DataSource cg_aiproc +ID +JcD;@rr)inrqQBarq-3[rpKdP +!:'1@roj@Dro=":rnm_1rn?Dcrn.5%qpk\qqpPJkrm1ShrltGfrm1SkqpPJnqpk\trn,iUrn@A,rndY5roF(@ +rorS1rp9XQrpp']n+QbUrqc`p +r;ceIs3Udss,m?\r;QQl +q"j[bp@eLXrpp'YrpTjRrp94@roj@Cro3h5rnm_3qq_/(rn>6BptP]%rndY3ro!e7ro="?roiM0rp9XPrp]pW +rq$-^m.UGRrqcWm +pA]^Dci8RrM#[JRrqlcl +!VuQjq![qUo`"F\nG_kTmJcG-lMg&Ikl0cEk5OK>jS7a3jSn9?k54?@l-\eqm/HDOn,DkVo)A:DpAXgc +q#:0i +rTaE6s3L^rs+14Gs8N#sr;QTmqYp<iq"".Xp&=U_o)%qUn,)PPmJ-&IlcAAjlhg&JmJ-,Kn,)VRo)A:ApAXjdq>U6ir;QZL +s+13rs+13$s5a4Zrr2lqqu6Hkq#:$ApA=O[o`"IQo)A7Xo`"O,pAXjdq>U9jr;QZo +rlP1ks3L^rs+13rs8Murr;QTmqYpBkqYU*`q"sg2pA=U`q#:*gq"smdqYpBkqYpBkrVlf' +s+13rs+13$s.B>grqQHkr;QZor;QZl +re1<&s3L^rs+13$s+13$s3L^q~> +%APLeod +EI +84 0 0 36 4 68 cm +BI +/Width 233 +/Height 100 +/BitsPerComponent 8 +/Decode[ +0 1 +0 1 +0 1 +] +/Interpolate true +/DataSource cg_aiproc +ID +JcFs6rr)i&r_!.kmf<>!r_`Z[rn,0h +JcE(Vrpp&prbqceli@#+re1:6 +q>Z$G`rCVimf3:Lre17lnc8Xqr^?aArlb<> +]DmH^VuQb[rhf[(rZC\2rWW:%rk8F5 +s+13is+14Bs8K_2<W30p!<+/@HN(YX +poj^Ks-s&fh#<`@9E#%d!!+Gp +!%7c,rpG@; +c2W@prVulbrf@%+o`4snr_<C#rr&_o +JcCo5ro*j(rYYG2 +r;cg'ra>`IJcF4! +KE(qlra>^3o`4t/rd=_) +Sc=9@N;rnRri?#b +!<E3$!VHHl1&dX@oR[%t +s,@!Wo_t<Y1%bPG!WGIcX8`!_ +s+13&rrLg+ +!87?krY"l(rXSpCrmQGu +ir>2Aroj?!rXST$rY#3Nrn3>3 +JcC<$ +rVulkrh06Mnc8YOrjICX +kl7%Mrq68CrXAH"r]'nNrqD6K +JcC<$ +o`+p:rb)3=o`4tZrm-/q +mf/mYrr)hfrYtV4rXAd=rm65r +!WW1Ns+14<s8MTgQMrK2!<*'!?iK): +s7H>bs8KV/0),GG"o`B<l[f*3 +s+13$s5j:[X8XC>!<*<(HiESe +s8)bns8M$W9(`2`;Z>C>s8L19(]O*k +s+13$s5O(XqYlWV'DMS,(B1+\ +s8Dtts8J\j&,6/(3<$j]s8L"4!<2ZT +s+144s8L"7Zi9Kn +s4mYRnG[V1#l"E!;uZ*8 +s02P&l2FKR!<+#<WfR2Z`V9H4 +p#uF,s5s@\4So-X +c)CZns8M!V=82dp(]LXn +s0Mb)Xo9(1!<-F+nVmMI`V9H4 +p#uF,s5s@\4So-X +c)CZhs8K2#(AIn/@/f\T +s1/1/pAS@m!<*l8["eV[`V9H4 +p#uF,s5s@\4So-X +c)CZes8M<_<;6Im*ra*= +s1JC2kPd@6!<-1$m=YH<`V9H4 +p#uF,s5s@\4So-X +c)CZ_s8Jnp')M\.#QCN^ +s1eU5df(<b!<*K-XF^EMs8L"4!<2Zas8J_kOoCdI +rrN0"roF'RrbVQrr`fAarljj2rlk8:roa:\rpKcAr_3;Er_`ZLrm0s2rgN_HrqGdZrh]LSrq$-hrporKrZ_4> +rcJ.%rfaMb +`;fi"r^HS^rdU45 +_Z0VDrXJ`)rZV9kJcGTHrl+X4rq5sar[.UErXo/0 +!/^f7MZ*nP!<*#uR.C:VC\n,2]DfSE%e9W!"9+#Rrpp*g(&J"1m-OcO0DbbKj8T)Xhs:@B +"g7mAs8MrqD"n#0>5n;d +s2G$;Pl:d^!<,+[l[f*1s8L"4!<2Zas8FAE!<*T0 +FT;F>!<*'!*W?iL!<*#uU%SHbC\n,2ErHCB!<+2A,kV0:;=abd(&J"1m-OcO0DbbKj8T)XiVNu]!rDus#lY21 +&$GrEs8J;_"T&2u49"Q; +s2b6>O8&_S?iKkPs7H?j`V9H4p%A@a +-MIK@!!*".rpfmcrmgunqZ-U=p&G#,o`4u0rmpuHrnRL!p]1;tp&G"+qZ-W^m/R&<qZ-WUp&G"RqZ-W? +W;jC-rjr(?qZ-UJrpQQ\ +bQ%R9rW2lrre?"(mf3:*p]1<dp&G"<p](;q +!N`Bns8L[G!<1[Hs8Hg/!<,Lfrpp*g>5J=!-3!c9s8Ec1!<2?Os8F\K!<2$Os8G.X!<16A +s0_n+fDZoi!<,+[ +p8%`6s8KA("T&2uKn99is8L"4!<2Zas8FAB!<,^n +s6]jc)>aF5^A.a-C\n,2&H:h\s8MWh)Z'O6[J9e$(&J"1m-OcO0DbbKj7WHO4So-X +c)CZJs8LjR)>aF59E+gd +s3^lG_u9u>!<.+ls60L^`V9H4p%A@a-MmfB +[K-?ps8GRd!<0%os8Hg2!<-'as8Gpn!</)Ts8Ec1!<2?Os8F\K!<2$Os8G.X!<16A +s0)J%eG^*X!<-7& +ri6"Js8LXL&GlJ,AV'mCs8L"4!<2Zas8FAB!<17D +s6]jc@J^'(V"juhC\n,2P3N#GIJX$DD#"&0(&J"1m-OcO0DbbKj7WHO4So-X +c)CZDs8L.>%/U&( +G,kSos8Mlo1A_(N=8r/Ls5j:[`V9H4p%A@a-MmfB +j8f5Is8HI(!</ehs8Hg2!<0(as8Jto!<,Rbs8Ec1!<2?Os8F\K!<2$Os8G.X!<16A +s/H%t^A\E8!<0U4 +s4@;MI/<pC/H5Eqs5O(X`V9H4p%A@a-MmfB +li@(Qs8HI(!</ehs8Hg2!<0Xqs8KY-!<,I_s8Ec1!<2?Os8FGD!<2$Os8G.X!<16A +s/,hqQMU[])uf<1 +s4[MPa8Q2?!<*6&dXhGUs8L"4!<2Zas8FAB!<2<b +s6]jc@J^'(V"juhC\n,2W9O?]TDJWf=SVpq(&J"1m-OcO(]+43iq<?N4So-X +c)CZ;s8G[g!<-$' +s5!_So_p06!</"0s4mYR`V9H4p%A@a-MmfB +li@(Qs8HI(!</ehs8Hg2!<.?0s8IWI!<-m2s8Ec1!<2?Rs8Mfm"oA<!iq<?N4So-X +c)CZ;s8M9^(Ae+2 +UU1!Vs8I3=!<,Fdrdk+)s8L"4!<2Zas8FAB!<2<b +s6]jc@J^'(V"juhC\n,2:?hfX7Jd)aVtg;k)>aF5g$et?_"[p/iq<?N4So-X +c)CZ8s8KD&!<*E+ +m'crPs8MBa$iU/*$3'":s4RGO`V9H4p%A@a-MmfB +li@(Qs8HI(!</ehs8Hg2!<*]3l0nZObkhD>!WM9Ws8FYJ!</qfs8N#s:A=hgiq<?N4So-X +c)CZ5s8HC&!<-=( +qmlabs8IHD!<-qgs475L`V9H4p%A@a-MmfB +li@(Qs8HI(!</ehs8Hg/!<,4^qt:!gmf#6D!<-'ms8Gmm!<,^lr:U*hL\1ZHiq<?N7/Hu` +Z)I\ns8LjR"TAE#$N@L5 +r4N'is8MQf&H2\/#l`t;s475L`V9H4p%A@a-MmfB +li@(Qs8HI(!</ehs8Hg,!<,RhUAj9RlMe!d-MmfB$3&QLs8Jki!<,jpYPurKR/U(a"9&?#+o;9=iq<?NJGT?G +0E/!N +\ZYt$s8HF'!<,prao;7R +s5X.YL&1lLD1V`9s8L"4!<2Zas8FAB!<2<b +s6]jc@J^'(V"juhC\n,2CAn_0!<*-#Zh".qr;L$e!<.`P?2FX$iq<?N`Us61 +"g7los8LdP"9&<"%K;mse,K?` +s5X.Y*<#s;#6*\7s3q#I`V9H4p%A@a-MmfB +li@(Qs8HI(!</ehs8Hg2!</kpb5NIQ!<,(Zb3]0-rr-a5#5%uq*r_r6s8H4!!<2!Ns8Mrq@/'a$ +"g7lls8H:#!<-:'YQ!AW +rl+p"s8LID!<,TA +s/>tMs8Hg2!</kps8MopZ2TIVFT.[,`SgdqqYne>S,T&Z`r>bhs8M<_`;[[R +kH=iOs8KY-!<+\OS,U&! +jMh/]s8IlP!</46 +s/>tMs8Hg2!</jH +s0hros8Min%/p8+$iZ1cWrC3@ +m)]4hs8G:\!<1l, +s/>tMs8Hg2!</jH +s0hrls8Gmm!<-g6SGp%teGf!] +s69R_o)8gl!<+I! +s/#bJs8Hg2!</jH +s0hrls8JMb!<,=aO8c3Z`r=oq +pWig's8Kq5!<-hd +s/#bJs8Hg2!</jH +s0hrls8LpQ!<+>EMZ0CM\c1%VkPkA+ +s69R_X8;nrMh1o) +s4IANC\n,2VLecU +s-3Q_qu-Wq!<*l8M>j"DXT$9>h#?dA +rRCl3s8J2Y!</dF +s/#bJs8I*:%0!8X +s0hris8Ec4!<*K-K`727VZ+C1dJi8, +p!j$+s8I?A!<0Z_ +s/#aHs+134s8FYM!<**"@K's>I/]$&QN!`[ZMqN6 +^tlcis8HL)!<1N" +s/#aHs+134s8GO! +!9sO_?i'j&fRa(! +s+13$s,m?\9"=rds8I6>!<0cb +s/#aHs+134s8FbP!<*#u3;u2B8H)?_=T2Y+Ac?QGEW1.\ +Gi3l3s8J,W!</mI +s/#aHs+134s8El7!<*H,HN&g$RJs)_]DfeKg&C+4mf*"; +s69R_W;?SoNe.5, +s+13$s-3Q_r;Hft!<*f6I/]$&QN!c\\c0JFfDab.li-VW +rS[_?s8Kh2!<.%j +s/#aHs+137s8M*V!<+2AJ,Y?)QN!c\[f4/Cec+>&lMgDS +qV_D<s8MBa!r`3!1P,S& +s+13$s-3Q_V#(/k2u\F.MZ0"BVZ*q$_Z&!_g&C:9nG`1? +s5s@\3;rpW!WM85 +s/>sKs+137s8H0u!<-(!K`6l.S,T;a[/RrAd/M_tkl0rJpAY$N +s5s@\JboHHSUpg> +s+13$s-Ncbr;I?.!<*6&E;k^nMZ04HVZ+((_Z%j[g&C.5lMgMV +qW%V<s8L1<!<,oJ +s/>sus8Mcldf.2aon!/' +s-Ncb`;9Q6-N85dMZ0=KVZ+.*_Z%m\g&C%2lMgJU +q;_M;s8Mur(&e44$i]Ohs8H'r(]JuM +s0;V'f)@N*!W)lrb(9TQ +s-NcbCAS#18,e#;MZ/P2VZ+7-_Z%s^g&C"1lMgGT +p>c25s8I3=!<.AAs8GIa!<.,Rs8M?]Zi8,/ +s0Vh*jo,Y\!<1,l +s5X-Js8M-Z#lXi'#QAN<LAm)0Pl%?W^])+Le,J&"j8S?CoD\ID +s5X.Ykl(nf!<*K-n#-3b7Jd)aFhIbR]__^. +:$)D^s8J/X!<*B*FT.:!k(3Qm +s-iueDu0P63<"'tMZ0.FVZ*Um_Z&-cg&C+4lMgARpAY'R +s5<qVDYjG5J#E>G7Jd)aFhIbR]__^. +:$)D^s8Hp5!<.=r +s4[LDs8M3\$2sr("o`68JGY6'V#I7jZMVN<fDaJ&k5OZFo)A@^ +rT=.<s8M'X#6"W%&H;-us8GIa!<.,Rs8K\.!<,^S +s0Vh*@J^'(Sq6pq +s.02hE;KY72?%^sM>iD3OSbpS])KSGa8=Qhkl0lHo`"R` +rT=.9s8HX-!<--$s8GIa!<.,Rs8K\.!<,^S +s0Vh*@J^'(W.G!& +s.KDka8Q2?!<*-#BE!GYMZ04HVZ*Lm_#D4McMQ;llMgGTpAY$Q +s5!_Sli%au!</drs8GIa!<.-6s8J_kOoCdGs8M*YU],*/4T8RaOoESqs8KV/OoB+m!<+PHOoEMos8Mrs +^]D6drf-n]r\sgOrdb"&m/R(EqiUlurr;usrgWmcr\XW(qkj?WqZ-V8qkjA[o)J^IrdXoIr\XU1r_<B,rjr+. +k5YGZri,m:r]U6!r\sgZrhobol2Ub]rkSMmr`f@\r_EHCrnI&E +U]:>brZh:?r^$O*re^W3rfI#Sric49rmUl"rn[J:qtC$f +k5X08rjDV'rX]"dYlF\kqZ-V<p&G"<rW)p0rr;tTrWr&prW3"cp&G"uli@$=p&G$Ur^?ee +m/[,lrpB:Vrjqt,rd=_7r]g/Xrk[h!rlY$9rqcV"rWDKerZV9`m/R(Kr^,rOr[[upn,NCOr^H/Rra,Tk +q>[5iraG[(rZ;&Xrdjs(rgiq`rk/6IrknWdro3qBrp0IT +j8[a2rau$-r]U8ZZiC"nqZ-V<p&G"<rW)p0rcS)<rW<'>rYG8/rW3"lq#C>*rX/W0qZ-Ttq[3=[q#C?2rYbY7 +quH^<r\FHVp]1:=rp'1Vrjqt,rcnE*o`5!.q[3<)qZ-U#q[3>Hq#C>"qZ-Trr[@bBr_reSrW;rsrY#4\ +o)J^7rYbJ2rY,9!r[%OFqZ-U>rp]U\rkn^Qp]1:8r\FHVp]1:=rp'F] +VZ6XsqZ-U#ral(SqhkB5qkj@qqni?Uqq:u4rp'LNqtB(M +fDkjBrZh:?rc,:Er^H\arcRo6r[.:<raYrtqu?ZGrZq@@rZUk4rk/+.r_;t`rq$+,qZ$Ue +!D#c\j88lUp\q]%'Dhe/9(i5`]))L,)ZBa9"TDp1Qi=GmmJHq_@J^'(\FT\!]DDU-(]M)?s8M!V2#@:P +E:X&.2Z!LR/H3`irVQWobPida!<-O(s8MWh)>aF58H.ZHs8Mcl\Gd0=!<,Ug +s/H%tdf'gT!<,RhF8h!mMZ04EVZ+4)_Z&*bg&Bb'lMgARpAXgH +s4%)Ja8Q>@!<.SYs8GIa!<.-6s8FA?!<0(js8L[G!<1[Es8K\.!<,^`s8IEC!<-(# +rW3#to)J^9rY#21rW<)Wq#C?)p]1:.rl+@+raG[(rj_P!re1.Krf6IIrmU`Er\sNMri,bprX]"^o)J]lqZ-U4 +q#C>@qZ-Utrr2Kgrm:WWrW)p!rnmhW +s/c8"g\r&e!<+GHEW1UfMZ/q=VZ*^p_Z%^Tg&Bt-lMgJUpAXpK +s3^lGXo8G"!</.ls8GIa!<.-6s8FAB!<,a[s8Eo5!<0_*s8K\.!<,^cs8M'X$2sr(&cV"p +s6]jcD>O>4Jb]9E](c:)TBuUW@J^'(\FT\!Ac<YJ*<,$fs8Mop!WE)u*VKI3,PqK?SaZUXrVe#<!<1XMs8M'X +$2sr(&cV%]s8Hm4!<.NM +s8T;&ro<u"qZ-U:rbh^_qhkB6rh]Ukrhob/qni?`rn7;)roj@Hrp9OUrr(mW +cN!m5qZ-Trrh7")r^H\arcRo6r[.LBrjM1nr^cndri>_lrk/+.r_<(crhK>jr`&jr +mJm0kqZ-UHq#C?)qZ-U2rr29araG[(rj^JXrk81/rZ1e6roa.YrWN5hm/R(%qi^s5rr;tmqZ-Upl2Uag +qZ-UH +!WW2*s8M?`./O#D(]J4LGlEQsMZ0:GVZ+"#_Z%^Tg&Bq,lMg>N +p>Gtos8IfN!<**"Uqcs/7Jd)aFnPe6-MmfBcKtT1@J^'(V"Oce]__^.:%ePcIJX$D +G5^LhjSmd1!r`3!#lai#s8KV,!<,=Ls8HI(!<0Lgs8MNeci1-IO8`Mc!rDus*Vf[6`;9Q62;8*0IJX$DG3S)e +fDYjN!<*6) +rr)os[f??jr\=9MrY#3Drce?uqhkB?qkj@oqni?Nrmgo!roj@Hrp0ITrqPFO +aT)6[p]1;Brr0n:r^H\arcRo6r[.LBroEGGraG[(rhT5erk/+.r_<(cr`8Xk +i;ilMqu?Z,qZ-Usl2U`kqZ-W*m/R'er`f@@klC]'q#C>fqZ-UkgAh.Qe,TOB +o`4Zqs8LFF*r>s:%K9o;G5d?qMZ/n<VZ*Lm^AGeHd/2Mqi;;g=nGDqY +r8@Urs8N#sFnbt9<rVg6s8GIa!<.-6s8FAB!<2?Os8HI(!</ees8K\.!<,^cs8FqK +!9!qWmed%`]))L,=6]ba@J^'(\FT\!kPdm<!<*f6:B%'d!<+#6s8ITH!<-H]s8Fq+!!2NU +!:IN"rj)M3qZ-U,raGeJreUH/rf[&RrjVdArlP&jrnIG9rp'LKqtC$` +h>b@lrgNfhqZ-UQroVE(r^H\arcRo6r[.LBrp9"OraG[(rhT5erk/+.r_<(cr_<7irdFac +iQ(rpqu?Z,qZ-Usl2U`kqZ-W*p&G$jr^6P_rWrKqrfR3&rp9O^rq-'frZ1e6rfR'Xr`.\Pr_<7irdEVC +!W2`oqnN11MuEeT!<*u;C&W8SL\lu.OoD3SVZ*t"_Z%LQfDF8#jSS6AnGDqY +qq_:es8KY0&GlJ,*<+%)s8GIa!<.-6s8FAB!<2?Os8HI(!</ees8K\.!<,^cs8I*:!<.KH +s4IAN]))L,=6]ba@J^'(\Fon$Z24P#&,sZ=s8M?]!<+#6s8KM)!<+tBs8M<\eGet:s8I*:!<.K& +s2=s:p&8Cp!<+JIDZ4q\M>N20OT)*RVZ*jq_Z%s[g&Bq,lMg/IpAXg? +s1JC2f)?ii!<**"H2dWhs8GIa!<.-6s8FAB!<2?Os8HI(!</ees8K\.!<,^cs8JJa!<,mp +s6]jcm/)S;V"juh]))L,=6]ba@J^'(\Fon$J,96FBC,ZtYknG"*Vf[6h>73O%K?"ds8Gjl!<1:Cs8JJa!<,m\ +s8MB^L]4(M +s8U.>rkn^[p]1:Src.pbpko'5rhTFgril17rm1JprnIG:qs+1QqtC$d +gAe_`rp'JJp]1:Frm'-qr^H\arcRo6r[.LBrp9"OraG[(rhT5erk/+.r_<(crmLcHrW)p$ro!kW +mJm0)qZ-VFq#C?)qZ-Usl2U`kqZ-W*p&G#"qZ-VSm/R'!qZ-U9q#C?lr[.LBrgN<Urp'IgrW)p7rr2os +rmLcHrW)p$ro*5Drc%`7rdOtK +s3:TCp\o75!rDus#6%9pEW1L`MZ/n?V>I.hY5Z97_Z%jUg&C.2lMg;MpAXj= +s0ht,rr.rW"oA<!"oa)Pqq_;O7Jd)aFnPe6-MmfBm-OcO@J^'(V"Oce`;9Q61%PADA,?9* +<WN!tqtosarlP-DrW)p#rn@/Irjqt,r`A@araG[(rj_Y$re^LPr_2e\re^UTqZ-U9p&G#nqZ-U:rn[8Irr2mp +qZ-V(q#C>'qZ-Urrql9drlP-DrW)p#rn7DQ +s3UfFao3aa!<+#<A,^QKKD:?'R/!QXYPu?7_Z%dSg&C(0lMg/FpAY'C +s02P&f)@,n!<+bQaPd*t7Jd)aFnPe6-MmfBm-OcO@J^'(V"Ocep\kHq!<.KI\,P.Zs8M?`&c2P. +563u5rke[)rqucIre(1RqZ-VNp&G$&qZ-Usl2U`kqZ-W*p&G$7rW2lrra>`Arr)iOrh'0crW)p'rX/W)rW`AZ +rqZ?hr]'cTrYkd0rn7;>rkn_&qZ-U2roEkSrp0OqqZ-U[rke[)rqucIre(1RqZ-VN +r;Y@Jrpp&4rWE#trWE-brc%j^reUH/repcHpnn%spqm$Rpt>Z,qs+1Hrq-*]rqk4F +XoJCtrb;?5p]1:prnZ`:r^H\arcRo6r[.LBrp9"OraG[(rhT,br^HJ[re:.Irjr(E +r;c`qrW3!'o`4tkrr2Tjrjqt,r`A@araG[(rj_P!rc7Z3rWr9!rZD-ar`f-tr[mpFroO,>klC\crk.h%rjr(E +p]19orWi)rr`/ss +r;YRPrql\[rYG8/rYYWBrcA'ipko'1rh0.crhob)pqm$Rpt>Z+q!.kNqtC$a +dJp-EriZ5>p]19trc.r)m/R&RqZ-V<p&G"<qZ-W^m/R&nqZ-Vko)J^-rYYD1re:%Froj>R +!!)KgrYGKprr2Kgrjqt,r`A@araG[(rj_P!rqZPBrW`#qrW<'prp0R`rlk?QqZ-UIp&G$frbMK:nc8Ydrn$N: +roj>Rmf<>&rfI-Y +q>]@PrilALp]19qr]:$srd"Kupko':rh]Lhri,n/pqm$Vpt>Z+q!.kMqtC$`rr1=F +V#UGLrb)3>p]1:*rf$jOS,`K`rmq(_rm:Z@n,ECD +!SuT2Wr@8BEW1pr[f60%s8LpTU],Q<I/]W7j7WHOlMe'fWrC`@s8Mfmb5R_+PQ&)ki8FY7h>XGRGlD^^ +N;g9b +qt'jLs8L1?54npT./m`UErLUaMZ/V7T(o2^XT#s2_Z%LQdeMMpj7qp=o)&.[p\t0; +s.TJlk5MXb9`>4j!<+&=L]6OhrrN0" +JcC<$ +mf3:brjD`!rW2corZ(o@rc.pcre^E-rg!JYqkj@jrjDO<rl+lfqq:u&roEk>rpfdWrr(%? +T)\fWrl"f%r\sKMrW`@(rkO6f +JcC<$ +o`+pTreCCpo`4t'r_EH4rd+R!pko'1rgih]ri?%2pqm$Orn%&#rnIG7q!.kLq"F^b +aT%b0rpg!9rjVlYr[RI=r[Ii/rpPmI +JcC<$ +qZ$Q1r`B(&o`4t#r^-U&rce?qpko'/rgEb^pnn%srk\KKrl"f_pt>Z%roj7Erp0RTq"F^c +`W)>*rq69FrkeZ9reLJ=rX8B!rX/X6rl^Q+ +JcCB& +!UoIWn,AIK.ImK<+oY::E;k(\KD:?'MuK(BV"ghdXT#m-_Z%XUebIhshu;m;lMg/Lo_A.Z +rPJT"s8Mlojo3U*]Dec.PQ"bb+S#O31]EpD +opu,6s,$dTb5PiN +$46b?o`4sur\jacrc8!creL0(rfd>Upnn%irj_a?rkn`\pt>Z$roEk>rpB^XqtC$`rr'V3 +P5kOZrp0R:rlP/Krh]U[rcS3#rWi)rrX]!FrmdeD +JcCo5rq-2Zr\O?M +q>gL7r_!0-rce?mre^E-repc?rh0%`rhob'rk\BHrlP/jpt>Z'ros4Crp]^VrqZQm +]`4&mrr2ogro=",rkn`Arhf[breg\SrYk>-r]^=MrnaaV +JcD5>rq69#rbMKDo`,!t +#65#.1&bPZErLIcL%U?&NW,@FV"ghdVuEt#_"beG`r=E]g&Bb*j7qp=m/HYPpAXlr +s,$dTq#9XZhYtn$_>^e?WW&RiPl>V#1]@RK!<+/@AH&P, +l+$bEs/5nrqu4S6K)S"6#4_cn(]Hl) +D/B8irc\9kreU6)rf[8Poqq_eriuI:pqm$Krm:>krnm_=q!.kIp%JC^ +Zi>d[rquccroX47rm(M\rji$1rhTO^reCDHrY=l%rW3!Nrc.qFrq"). +JcDtSrmLe,r_3;#mf<=ir[e%Prc8!a +!JH++K_:6%N;f4DU\1M`XT#[-_"beG`;\']f_F/!h>ZR3lMg/LoD&%Yq#:8s +s+C@Nrr2Wjmf);Hg&B7q`W!UNZMpg%TDk)SDuN0(+T;N4!<*-#48s^._Z'DY +s+13_s8LpTSGl[j(@2&#&H4<]9`Af+FoHmi +M#</,MZ/b;Sc5J\VZ*LmZ2VH0_Z%ORcMlGjg&Bb*jRqg;nFcMS +qPsRHs8Dusr;Q?fmJc/FgA]P"aSs!S[f3B-V#He]NW+Y2@K&@f)?'[*!<*B*8H+PHci3q! +s+13ks8M?`WW$N/,O>F0$iVRR7fHrtFT-UcJc:JuM?/Wn +!/piCrhB(_ri5t*rkS3DrlG)ep"B?!ro3V9rpKdXq"F^^rr&bp +JcGTHrr2omrpp'Sro="4rmh"mrkn`KriuI#rgs+Prf$i6rdauNr\XTeli@"pr\a[Zrdk'HrltH5 +mf.k<h>dKPrn[R_rf[7sr^Ql0rW2HfrW`?Hr]pHhrc8!`rdb!'nr!F)rf[8N +!MuUmV>-qeVuEq"]Cj&?_u@p[eb.Vph#?=4l1jQCmJcbNpAXr_ +s+14Bs8Murq#9g_li-#FhYu1,dJh2c_#CeAX8\spTDk8XOoC:<MZ.o#;>r0H%-%?e)#c_uAH%JcYl<2R +q#U<eJcG9?roX3rrgWn0r_NMBrW_KbrWE->r]:$\rc%j]rdXp$mu%++rg3VUrh]Ff +rMKRorjDa?otp^KrmC_tp"B?%roWn=rp9XTp%JC] +S,\'>mf3:brqQK_rp9XJro3q4rmq(mrl"fIrilC$rhf[krgs+Trf?r6rc.p0r[.UTrW1pW +!!30&!raAB8,dB)PQ&)kcMlPsk5OrNrN6,!p\sLXhu;+(`;ZS3If<IK1B%a=!<*6&)?)Jl;Z:P4GQ*$iK`6i! +MZ/V7Q2[<QV"1D^Vua** +!3cC5otp^Hrlb;lp"B?!ro="Bp$2PDrpoaUrqZQm +R/_a;kl:YZrqHE`rpKdNroF(7rn.4srl>#Trk/6<riZ6urhf[jrgj%Rrf6l5rdk&`r`9"ar[n*grX85r +i;iiarYPPYr\+74r^Zrera>_ArcnEqrfR2Nri#gjrg*P@rdOidral(3r_<AXr\XU&rZ(nKrWCXMrWN37 +r[%P%r^QlgrbDFVrd+Qmre(3+nr!F+rfmDOrhAt\rhoaurj;[; +r5/3Frl>#brn-nsrnm_:p$2PBrpTjYp%JC[rr&#[ +JcFa0rql]irq69[rp9XJro!e1rm^qjrl+lRrk\TGrj;[+rhoamrhKI^rfmD@pko'-reCE!rau.+r]L0/ +!#GYP(]FVi!;Z]p!WEW/+T=+p6N0p_Ac?iOHN&?lJc:B&M<p-!MuJn=RJroKVZ*[rZi7T9 +_=PMD_Z%ORbPp#ag&Bb*ir807lMg/Lo()MRq>U>O +s+14*s8Murq>U*eo)A(VlMflDh#?"+ec*nob5T<X_Z%@M])K&8X8AdnU&LS]Qi<0IO8b(1 +M?&G5Lku%arcS3Jr_*5Mr\4=$rZqIbrYb\LrX\u7rWC4ArW3!'rXAc=rYPPRrZ_=hr[n+)r]^<Wra5YFrd"Kj +rdb!$reKWnrf6u?rg*PQrh'1dntuDdrj)O6rkS*Arkn`Xrm(Vq +eH".jg&Bh,jRVU8n,DtPpAXgcqYpJK +s+14!s8Mopq#9scnG_bQkPjH>g\]\'eGdbmaSs*V_Z%@M\Gic4X7`@hU]-kaS,S]R +Oo^`/rf6Q,reUQ/re:?)re(3%rdk&urdFcgrbh^Jra>_/r`&kkr^ZrRr^6ZTr_<Ajr`];/rb2:LrcS3drd4Wl +rdOirrdb!!rdt-%re:?+reKWnrf-o?rg!JNrgs+`rh\tYri,n%rjVmAo"tCDrlG)arm^Yp +qUtl'ro*k?p$2PCrpfRQrqQKkJcG]K +JcF!prquckrq??^rpB^Mroj@Brnm_0qq:ttrm(M`qni?Hrji$8riuI(ri,ak +r20IirhBC_rgEbNrf[8?N/IUmrfR2ErgEbVrh9=fl)+HYriH+'rj;[8rk@j<rl>#`rmU>hrn@J3 +huM^7j8S<6lMg5NoC_hVp\t'hrdk+D +s+13js8N#sqYp6go`"@Zm/-)IkPjK?hu;@/g&BV&df.Ji`q@4J_#CtH +\,j+Lrj2U.ri?$roqq_brhKIerh9=`rgs+[rg`tVqj@AKrg!JHrf[/?rf6l7qi1T9rfI,Brfd>Grg*PMqjIGQ +rg`tZqk3q_rhKIhl)+HXri?%&rj2U5rk&0El,*G>rlkAirn$_ornIG/ro="A +r9Eq>rpB^Trq5sXrqQKjJcG0< +JcEIarr)ikrq??arpp'Wrp9OIroX4?rn[S-rn7;&rmLekrlkA_rl"lS +o>:LArk&0=rj2U,ri5sqP,A5Vri5t#rj)O3rk&0Dk/.,:rlG)_rm(Mkrn$_orn@A.ro3q? +nEL#=rp9XRrq#UPrqcWnJcFs6 +JcE7[rr2onrqQBarq69]rpKdOqs+1Bro*k3p"9>t +!SH'(f)F+scMl#da8X$J_Z%CN^](tH]`,PB])K8>\,Ni8[JmN3ZMq-.Yl:g)Xo>F$WrB!sWrB'uXT#C% +YPtd*ZMq30[JmW6\,Nr;])K>@]`,YE^])%2_Z%LQa8X9]cMl8kf)F=dg&Bh,ir8'.lMg/Ln,DkY +p%8=Xo(N(WrqZQkJcFX- +JcDhOrr)inrqQBarq-3[rpKdOrp'LIroX4?ro!k7 +!T2f6h#?%#g&BV&eGdkpc2Poca8<cA_Y_7Ma8X9]c2Q,ieGe(ag&B_)h#?10iVqp;k3qU7li->Oo)A=U +pA4L^q#:0irIP"" +s*t~> +%APLeod +EI +140 0 0 36 134 68 cm +BI +/Width 388 +/Height 100 +/BitsPerComponent 8 +/Decode[ +0 1 +0 1 +0 1 +] +/Interpolate true +/DataSource cg_aiproc +ID +JcC<$ +JcC<$ +JcC<$ +JcC<$ +V>pNSqZ-VXrhf\,rmC`/rql]n +n,It=JcC<$JcC<$JcC<$JcDSHr]'cTreLK@ri?%4rmLf*rq,[Z +JcC<$ +JcC<$ +JcC<$ +JcC<$ +V>pNSqZ-VMrg3V_rjr*Rrn[SBrqcWn +p&BUCJcC<$JcC<$JcC<$JcDSHr]'cTrdk'2rh9=srl"faro3qDrqQ0d +JcC<$ +JcC<$ +JcC<$ +JcC<$ +V>pNSqZ-VHrfI,OrilC<rm1T$rosFTrqucp +qu;6IJcC<$JcC<$JcC<$JcDSHr]'cTrdOj+rgWnfrk/6Prn.5/rp9XUrquZn +JcC<$ +JcC<$ +JcC<$ +JcC<$ +V>pNSqZ-VErf$iFri,n-rl4rfrndY=rp]p_rqucq +JcC<$ +JcC<$ +JcC<$ +JcC<$ +V>pNSqZ-VCreg]Arhf\&rkeZ]rn7;2rp'LSrq??i +JcC<$ +JcC<$ +JcC<$ +JcC<$ +V>pNSqZ-VCreg]Arhf\&rkeZ]rn7;2rp'LSrq??i +JcC<$ +JcC<$ +JcC<$ +JcC<$ +V>pNSqZ-VCreg]Arhf\&rkeZ]rn7;2rp'LSrq??i +JcC<$ +JcC<$ +JcC<$ +JcC<$ +V>pNSqZ-VCreg]Arhf\&rkeZ]rn7;2rp'LSrq??i +JcC<$ +JcC<$ +JcC<$ +JcC<$ +V>pNSqZ-VCreg]Arhf\&rkeZ]rn7;2rp'LSrq??i +JcC<$ +JcC<$ +JcC<$ +JcC<$ +V>pNSqZ-VCreg]Arhf\&rkeZ]rn7;2rp'LSrq??i +JcC<$ +JcC<$ +JcC<$ +JcC<$ +V>pNSqZ-VCreg]Arhf\&rkeZ]rn7;2rp'LSrq??i +JcC<$ +JcC<$ +JcC<$ +JcC<$ +V>pNSqZ-VCreg]Arhf\&rkeZ]rn7;2rp'LSrq??i +JcC<$ +JcC<$ +JcC<$ +JcC<$ +V>pNSqZ-VCreg]Arhf\&rkeZ]rn7;2rp'LSrq??i +JcC<$ +JcC<$ +JcC<$ +JcC<$ +V>pNSqZ-VCreg]Arhf\&rkeZ]rn7;2rp'LSrq??i +JcC<$ +JcC<$ +JcC<$ +JcC<$ +V>pNSqZ-VCreg]Arhf\&rkeZ]rn7;2rp'LSrq??i +JcC<$ +JcC<$ +JcC<$ +JcC<$ +V>pNSqZ-VCreg]Arhf\&rkeZ]rn7;2rp'LSrq??i +JcC<$ +JcC<$ +JcC<$ +JcC<$ +V>pNSqZ-VCreg]Arhf\&rkeZ]rn7;2rp'LSrq??i +JcC<$ +JcC<$ +JcC<$ +JcC<$ +V>pNSqZ-VCreg]Arhf\&rkeZ]rn7;2rp'LSrq??i +JcC<$ +JcC<$ +JcC<$ +JcC<$ +V>pNSqZ-VCreg]Arhf\&rkeZ]rn7;2rp'LSrq??i +JcC<$ +JcC<$ +JcC<$ +JcC<$ +V>pNSqZ-VCreg]Arhf\&rkeZ]rn7;2rp'LSrq??i +JcC<$ +JcC<$ +JcC<$ +JcC<$ +V>pNSqZ-VCreg]Arhf\&rkeZ]rn7;2rp'LSrq??i +JcC<$ +JcC<$ +JcC<$ +JcC<$ +V>pNSqZ-VCreg]Arhf\&rkeZ]rn7;2rp'LSrq??i +JcC<$ +JcC<$ +JcC<$ +JcC<$ +V>pNSqZ-VCreg]Arhf\&rkeZ]rn7;2rp'LSrq??i +JcCc1rn@@Greg]! +!0RAGP5_ujhZ!G(s-3Q_q#8hF +ZEaJ9rf-o<rilCLrq1jB +OoL"4JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJQiI'_rfd=1 +oDn[erXSpcrq_fXrXAc-r[+$4rq-2:rWrE% +oDnjurc.qtJcD): +JcC<$ +V>pNSqZ-VCreg]Arhf\&rkeZ]rn7;2rp'LSrq??i +JcD2=rmh!# +mJuhYr[Ii]Q2ggjrW)pCS,`K"rYkJ1 +mK!4ireH() +RfB2`rp0HfrlTfl +lMm^\r]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJScA]:rY>2.rYti8re:?W +!29LgUAf]B5kk?Y#QDr7s8EB)!<+78s8M-Z')M\.$3"H9 +Mi.Rnri5sfrcS36rWMurrhk>I +Sc>Mcrk/+.r_7tD +lMm^\r]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJT`>#arYkP3rbDH- +p]('hrk&.PqZ-U=rpQ?VrX/W)rZn3;rr2maqZ-UZro<qV +o`+p6r[.LBrWrMOJcDDC +V#UG,qZ-UiJcG$8 +V>pNSqZ-VCreg]Arhf\&rkeZ]rn7;2rp'LSrq??i +JcDDCre((JrWrM) +nc/=_rmq&ZqZ-V+S,`HprW)pCU&Y,GqZ-U/roa+W +nc/U[rYkY6re?"( +T`:hfrk/+.r_7tD +lMm^\r]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJU]:>YrXJ`)rcIT. +oDefVqZ-U/rr&GgrX/W)rZn3;ri5hqr`Ssp +mf39DqZ-UqJcDDC +V#UG,qZ-UiJcG$8 +V>pNSqZ-VCreg]Arhf\&rkeZ]rn7;2rp'LSrq??i +JcDMFrbVH3rXJkm +mf2nYrpp$qqZ-W9n,NCHrfmClr\FHqr_<B=rl4!urqcW9rfR1_r_rf;rlG!:rX/W)rZpk1rr)i3rf-n]r\sgO +rdb"&cN!liqZ-V9 +pAaR\rlY*<r[$q2rr)i3rf-n]r\sgOrdb"&j8],Wrkn_nr`&l"rdOk$qu?Z2rk&0Pp&G#bqiUmSrr;uUrc\92 +r]0s]rhTPlq#C?8rf$hSr^-U/ric=qk5YGZrkSMm +r`f@\r_EHCrnHf>rn712rm:ZErr)i2reLJLr^-U-ri?%ep&G$&rfR1pqZ-UHqiUm#JcG?A +V>pNSqZ-VCreg]Arhf\&rkeZ]rn7;2rp'LSrq??i +JcDMFrYGA2rd=&3 +nGiL2qn)jgo)J]mrXeMurW3"5rpoFUroj>:mf<>irql[%rW)pCn,NCOr^H/Rra,TkeGoN-qZ-UR +pAaR\rr)`TroW\LrosDNli@#krpB(Prp0PPnc8XjrbVT4rY,82r]0ZOr[.LBrq-2WrWVimr]gDYrr2n>mf<>W +rqPj[rosDN +qZ-0era,Tko)J]dqZ-VXrnIE2mf<>=rp9F[ra5!lre5q' +oDbZer]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJVZ6Ycp]1<2 +li5W;rcIo8rX8]ir^d#!p]1:8rp94Urn.2np]19rrZV7BqZ-UkrWrK'rZq(7rkn^Qp]1:8r\FHVp]1:=rp&,8 +rl+X4rbqf5 +r;Y7Grkn^Qp]1:8r\FHVp]1:=rp'(SrmLcep]19orYP>0ra5X9rW)pXp&G"<qZ-VQrW2uurWW9FrWDoqrbh^A +qZ-TrrYY;.r_W(`rkn^Q +p]1:8r\FHVp]1:=rp'1VrhfPmrbVQOqZ-U)rZqIFp]1:Irposdrau-:rWi<#rWE$)rec:, +oDbZer]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJVZ6Y>p]1<Q +li5`>rk&%-rW3"_rqlTmrr)i9rYGA2ra>F!rr)gCqZ-U4rj;[urr;uhrgNflp]1:=p&G$_rYbS5r^d%Kqu?Zi +rj_q@qZ-UffDkjErZLt9rYGKM +!OK*4Zi9LKs8MWh)>aF58H.ZHs8Mcl\Gd0=!<,U`s8N#s2>[CQ1&e!Jl2L_^l2HM<"S_ur3VEFO-MRT?%fW!t +q#:<mpASXr!<*H,P5b+Qs8LjRJbT6EeFik@oDTX)!<,Og +j88lUp\q]%'Dhe/9(i5`VY'rg*<*JFs8MWhLA1cJU%SHb]__^.9nE?0 +s/#bp3;W^TI/]$&Qi<l][Jn&Bd/M_tj8S?CoD\I_ +rIP!Gs8Jqn!<*-# +r9OC>s8N#s1&CtMRIC1Tci+IP!<0_-s8K"p!<+,?jmrHNaSl8<!<+8:s8IEC!<-+"rpp*gd/F[W!<*'!i7J#. +g&;`X +!!!#u"9(1WE;lm:jlZUBI/<pC=T8<js8LCE')hn1!rh-Qs8Jto!<*Z2iq!-K\+ft&3VEFO-MmfB!WL.4s8N#s +(\e"0[IX@s:&=qiOS/YQI/<pC=T8=! +s7QEkd/F[W!<*'!i;!?OVYC/j4T=j@s8H0u!<--os8K\.!<,]D +s6BW\s8G"T!<.BFMZ/tAVZ+"&_Z%p]g&C%2lMgDS +pAY#As/,hqKDPZJ ++R&j^s8Jqn!<+;Drp9[aL&1lL;>C1j0DbbKSF$:T>PeF",l%E=j8KAa!<*T0l0SHLD>O>4J^j`!eG`2A +!Vl`c!<+\OJ,\^'s8M'X$2sr(&cV%]s8Hm4!<.QEs8F8?!<07is8GXf!<,"Os8FAB!<--is8GXf!<,@Ss8IQG +!<.6<s8M'X$2sr(&cV%l +s763hD>O>4Jb]9EVY^Am!WL@4s8JG`!<,1Ts8K\.!<,]D +s6BW\s8G"T!<.BFMZ/tAVZ+"&_Z%p]g&C%2lMgDS +pAY#As/,hqKDPZJ +1?ebps8H^/!<.rAs8L^K!<+GEs8L[J!<*i7qX"7]bPM;=,l%E=U\b&j<9aG^ZMOY$/C+:ph#<H88c];- +!"8,nrXAdrp&G#dqZ-Upl2UagqZ-UHqu?Z[qZ-U2l2UanqZ-UUp&G"<qZ-Vnn,NAkqZ-V?n,NBJqZ-V. +q#C>gqZ-Up +q#Bpbrj)D$r[djErhfPmr\j-CrlFs:r[[[Ark/+.r_7tD +lMm^\r]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJVZ6X]qZ-U1 +kl9N>r^?V`rlOF)rr2m"rW)p%rqucqrj;P&r^,lLrpfjcrZq:=rdFYDrc[Pern%,NrW)p'rr1"= +!W2`oqu4k>PQ"V^'(l8("9,e)s8IHD!<.0+jSmd1!r`3!#lai&s8L%8!<,j[s8LpQ!<,"Os8FAB!<0t+s8H@% +!</GUs8J)V!<-R)s8IHD!<.0: +jRVC2fDYjN!<*9'rql`pVY^Am:@/#[iVNWS,k_3:]__^.9nE?0 +s/#bp3;W^TI/]$&Qi<l][Jn&Bd/M_tj8S?CoD\I_ +rIP!Gs8Jtl!<2TU +s5*eT+Su0<k2u^C)>aF5h#@?QOo#.X@-7Lg&,lS.,l%E=<n%-K +ou@%+s8Mrq_u<X7!rDus&,tkks8H'K!<2Zjs8Jej!<-Zrs8Mlo!r`3!3VEFO-MmfBj7!$I?Maa%VXOQaO8AqV +Abc<) +<pp%N!<2Zgs8Jnm!<-Nqs8M!S!<+8:s8K\.!<,]D +s6BW\s8G"T!<.BFMZ/tAVZ+"&_Z%p]g&C%2lMgDS +pAY#As/,hqchIM> +e*I&'s8IfN2?&U7s8Mur!r`3!!WN&[s8Ei3!<1mTs8I*:!<.3)s8F,>!<+8=s8Fq+!<2E+ +s6fpdW;$AlZMX\$2Uha+mf*7cLALuMGj58-r;Hs#!<,"Os8FAB!<2?Rs8H@%!</kas8J)V!<-R)s8FqF +!9O:\med%`VY^AmD!_3$iVNWS,k_3:]__^.9nE?0 +s/#bp3;W^T"oAMg#Q=r, +"bH]Ns8Mur&c2S- +OR)r9s8F;@!<0"qs8E`0!<2?Ls8Mlo!WE)u"oeH!s8IiO!<-Eks8N#s#6"W%,l%E=:&=qiIGMsCqr%MR`;<+) +Fn>Y!s8GC_!<.HEs8Gai!<.E&a8Yu8s8JVe!<-`ts8LOF!<,"Os8FAB!<2?Rs8H@%!</kas8J)V!<-R)s8Gai +!<.EA +a6(GAqtpEmVY^AmD!_3$iVNWS,k_3:]__^.9nE?0 +s/#bp37IqZs.fVn:\t.k)ufX# +s7?9icMIV@!WME^s8G%U!<17-s8LgN!<+5?s8K1u!<,@Ms8M3Y!<+8=s8I*:!<.JYs8LFC!<*9' +p%JFOs8I'9!<-L*s8I*:!<.K"s8Kh2!<,[Vs8Jej!<,"Os8FAB!<2?Rs8H@%!</kas8J)V!<-R)s8I*:!<.KC +s5!_SVY^AmD!_3$iVNWS,k_3:]__^.9nE?0 +s/#bp3;W^T(&f$K)ZCcV+T<Sa-N5Cl.K1mt/cIF& +0nKA"s8KM&!</>Q +s7?9i:&=qi2Yd=O?2FX$P3N#GNV`_T8GiGde,'.E&,u4fs8K.t!<+8=s8JJa!<,m\s8MB^L]4+*s8Min"T&2u +ZhFFbs8G[g!</5[s8JJa!<,m\s8MB^L]4+Hs8M$T!<+,?rTsR`Er,k93VEFO-MmfBm-juR?Maa%VXOQaO8AqV +Abc<)Rem*a +;Y^:_s8MB^L]4+Es8Jnm!<-g$s8M!S!<+8:s8K\.!<,]D +s6BW\s8G"T!<.BFMZ/tAVZ+"&_Z%p]g&C%2lMgDS +pAY#As.KDk2Z!LR'E5i< +s7ZKlJ,96F!rg16s8JG`!<+;Drp9[a1]%1OX8Dqrq>M6.!</>Os8G"T!<+8=s8LIG!WE)u"odKIs8I!7!<.K% +s8FVI!<-$u +rqZT^s8MNe#5\E"bPV>=df':H!<*0$iU$UDE;KY7J,B9FrVdK-!<0%fs8LaO&c2S-3VEFO-MmfBm-juR?Maa% +VXOQaO8AqVAbc<)df':H!<*0$ +iVWZGs8I!7!<.KCs8Jnm!<-g$s8M!S!<+8:s8K\.!<,]D +s6BW\s8G"T!<.BFMZ/tAVZ+"&_Z%p]g&C%2lMgDS +pAY#As.KDkb5M_E!<*-# +PP"nQs8MrqAbZ9)E:s81qYhi=!<.T=s8IWI!<+MJrqQNmS,33b)ZJ=Ys8JG]!<+8:s8HO*!<-$uqssddao2MD +!<*-#g=lT+\c)X,!<,^l +nbiFWs8LXL48T$W&,uD"s8HO*!<-$uqssddao2MD!<*-#gA(^IRJR!`,Q?Nls8MQf./3fA3VEFO-MmfBm-juR +?Maa%VXOQaO8AqVAbH*&A,?9*<rW!q +s7QEkao2MD!<*-#gA(^IVY^AmD!_3$iVNWS,k_3:`;9Q60nKAi +s/#bp3;W^TI/]$&Qi<l][Jn&Bd/M_tj8S?CoD\I_ +rIP!>s8K,!!VcZo/,ilSO8cTg +OTCT,r`]:Cp]1:Qrq5j^ric(srac#OrqZQirlY4ap]1;mp&G$ir[n!IrY,:(rn@AMrmUjhrW)p!rXf&/rZq1: +rp0OqqZ-U[rke[)rqucIre(1RqZ-VNeGoMdp]1:>rd4aF +VuWdqeGee5`r;S/D>je;!<*?)_Y*s.li%Ln!<,4^_Z'*)r;P=IKDl&O!<.cHs8Mur2#@:P'E3[a])J`/B)WkN +!<*f3!<,"Os8FAB!<2?Rs8H@%!</kas8J)V!<-R&s8M?`&c2S- +5Q8P!nc&IcfD^F%"oA<!L\:]HVY^AmD!_3$iVNWS,k_3:p\kHq!<.KI\,P-5 +s7?8es8G"T!<.BFMZ/tAVZ+"&_Z%p]g&C%2lMgDS +pAY#As-iue\c*oC +!;6El"oa,Qr9XI_IJs<C!<*3%#l"E!#6(%Zs8LRJ,P;'9"S_urLAj13!<+87s8KV/(AIn/!WE>s!<-!trm^uI +p\n:d +!:'Xa#6)1%s8KV/(AIn/!WE>s!<-!trpp*gh#9A$!<+;Dc2.M?48&XQ-MmfBm-juR?Maa%VXOQaO8AqVAb,m# +])EK? +!<*#u#PA)r<W<!js8Jnm!<-g$s8M!S!<+87s8GI[!<.\' +s7?8es8G"T!<.BFMZ/tAVZ+"&_Z%p]g&C%2lMgDS +pAY#As-Ncbq>Q-J +$M4>r!<*'!1]GYZs8Kb3)Xd\**WF1Fs8MKd9C`)^%fVprs8G"W!<+84s8M6]9()cZ(B0Eprlb?@`Vqdk +!:^'g)#em]iT^CAkl+3C!<*c5OT,7Gs8MurOT$m3"o\N$"9'hM@K,Kiiqi`T9_JGb-MmfBm-juR?Maa%VXOQa +O8AqVAafZukl+3O +!;-?k(B0Eprpp*gVY^AmD!_3$iVNWS,kD!7`;UVK!<.\' +s7?8es8G"T!<.BFMZ/tAVZ+"&_Z%p]g&C%2lMgDS +pAY#As,m?\q>SkBWW%AG +E<)O1SXoc&rq5"FrqQK:rgWn(rdOjKrnRMPi;`f1rh070rg!K.rqtLMrn[RRrcnE^rf$ibrqjS4rr2oDri6'S +L&cu-@K'I0GlF$.\c2H]s8LjRWr@8BEW1pr[f60[s8Mfmf)G@;s8LRG!<-Dls8LjR +Wr@8BEW1pr[f60+s8Minf)ED_d/Nlm +s7?8es8G"T!<.BFMZ/tAVZ+"&_Z%p]g&C%2lMgDS +pAY#As+13$s+13$rrN0"rhK>jrd9e, +JcC<$ +V>pNSqZ-VCreg]Arhf\&rkeZ]rn7;2rp'LSrq??i +JcC<$ +JcC<$ +T`>!_q^VTpm/R&eqZ-W7 +O8je2JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcDDCrb)*.ra#!mrepXRrYtk9 +O8je2JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcDDCrkSL8qZ-UsrkJHlrmq(@raYp.qZ-W! +N;nJ/JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcD;@rg`*NrW<(P +M>r/,JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcD2=rk\S/rW;`mrWN3krkO9g +JcC<$ +V>pNSqZ-VCreg]Arhf\&rkeZ]rn7;2rp'LSrq??i +JcC<$ +JcC<$ +PlLaMrlkADriZ7@rp>:: +!<7WMJcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%EJJcC<$JcC<$JcC<$JcDSHr]'cTrd=^&rg3V]rjDaBrm:Ytro="Crq$-_ +rr%DLJZOF(JZOF(JZOU-rh=tF +!N`B!XSsRD!<.BFMZ/tAVZ+"&_Z%p]g&C%2lMgDS +pAY#A!.b-$!.b-$!.b-$!.b-?!<.BFMZ/tAVZ+"&_Z%p]g&C%2lMgDS +pAY#A!.b-$!.b-$!.b-$!.b-?!<.BFMZ/tAVZ+"&_Z%p]g&C%2lMgDS +pAY$iGlD+M=8kto9)_<Z6iKFO5lO!! +5+b#i5(PnK5(PnS55lu0#PA)r#Q>qH +3g;gu55os/MZ/tAVZ+"&_Z%p]g&C%2lMgDS +pAY$fs8M$W`;[.CW;`CfRJrHMOo(,h +MPZ2]MLgY9MLgY>MZ/G2>5fN7!<*6&55oks +MO'/!Qi<l][Jn&Bd/M_tj8S?CoD\I_ +rVQWoj8R*u\,NE,U&LP\QN!*FO8b)h +Ml;PbMh-e;Mh-e;MuAS5B`9IR!<*'!1B)6c +MjB;#RJs)_[Jn&Bd/M_tj8S?CoD\I_ +rUp3ikPj!1`r<^O[f3T3XT#:"Vh(_D +VLbUqVLbUqVLbW=VZ)PR6N./]!<+MJG5e>; +VN@\S[Jn&Bd/M_tj8S?CoD\I_ +rUp3ilMfH8b5T6V\c0#9YPt^(We%+I +W.CmuW.CmuW.Co;W;`7b;uR7!!<*u;BE"[0 +W0!tW\,O8Dd/M_tj8S?CoD\I_ +rU9dcmJc,EfDa4tb5TN^`.>e( +_L]RT_L]RT_L]Si_Z%1HErI'O!<*W1AcB'E +_MZ50d/M_tj8S?CoD\I_ +rI=~> +%APLeod +EI +83 0 0 36 301 68 cm +BI +/Width 230 +/Height 100 +/BitsPerComponent 8 +/Decode[ +0 1 +0 1 +0 1 +] +/Interpolate true +/DataSource cg_aiproc +ID +JcFs6rr)i&r_!.kmf<>!r_`Z[rn,0h +JcE(Vrpp&prbqceli@#+re1:6 +q>Z$Gci8Rrmf3:Lre17lnc8Xqr^?aArlb<> +]DmH^VuQb[rhf[(rZC\2rWW:%rk8F5 +s+13rs+14Bs8K_2<W30p!<+/@HN(YX +poj^Ks-s&fh#<`@9`>.e!!+Gp +!%7c,rpG@; +f)L=$rVulbrf@%+o`4snr_<C#rr&_o +JcCo5ro*j(rYYG2 +r;cg'ra>`IJcFO* +KE(qlra>^3o`4t/rd=_) +Sc=9@N;rnRri?#b +!<E3$!VHHl1&dX@oR[&( +s,@!Wo_t<Y1%bPG!WGIcX8`!_ +s+13&rrLg+ +!87?krY"l(rXSpCrmQGu +li3.Jroj?!rXST$rY#3Nrn3>3 +JcC<$ +rVulkrh06Mnc8YOrjICX +nc,!Vrq68CrXAH"r]'nNrqD6K +JcC<$ +o`+p:rb)3=o`4tZrm-/q +p]$ibrr)hfrYtV4rXAd=rm65r +!WW1Ns+14<s8MTgQMrK2!<*'!?iK): +s8Dtks8KV/0),GG"o`B<laHimir6"XP5]b+If>T2X8_28 +s+13$s5j:[X8XC>!<*<(HiESg +s/5nrir2RC!<,mqg:@7_rr/Dd3W9'G!<+bQNrJk9 +s+13$s5O(XqYlWV'DMS,(B1+a +s/Q+uT`,Js!<+tW`4#^Fg\s@l!<+AF +_!(gBs8L"7Zi9KIs8L"7Zi9L= +s4mYRnG[V1#l"E!;uZ*A +s02P&l2FKR!<+#<WjDa)gAVf]!<*3%1B(b^PQ$sKB`:!j$MXW##QD3u +s31NB4So-Xc%H&q4So-X +c-64=s8M!V=82dp(]LY" +s0Mb)Xo9(1!<-F+n[&8pl2Dk$!<+qVh!b:BlMa?L!<*9' +bjPMTs8G.X!<15qs8G.X!<16e +s3UfFY5T43!<-C* +nWj-bs8M`k?2+F!)?."Fs8H^/!<*#uIK'-.s8N#sMZ*_T!<,LV +s31NB4So-Xc%H&q4So-X +c-644s8M<_<;6Im*ra*F +s1JC2kPd@6!<-1$mB-EfkPb_`!<-0Xs8Hg/!<1(0 +s31NB4So-Xc%H&q4So-X +c-64.s8Jnp')M\.#QCNg +s1eU5df(<b!<*K-XJc*tFo)1<#l`f=s8M<_%f68*9D/>a +RK/KJOoG+As8JklOoFtOs8MTdOo?R%!<.*>OoCRAs8L7>VZ,cXs8MHcM#L*I0E+iJLAoNcs8JJaOoG+As8Jkl +OoFtOs8MTdOo?R%!<.*>OoCQm +s2=s:kPdpF!<.J> +s2+g8[f-a5!<+/@eYiHHoDT3r!<.5ps8IcJ!<2H^s8E`5 +!;lirm-OcO0DbbKj8T)Xhs:@B"oJ?!C\n,2]DfSE%e9W!"9+#Rrpp*g(&J"1m-OcO0DbbKj8T)Xhs:@B +"k*Fes8MrqD"n#0>5n;m +s2G$;Pl:d^!<,+[l_OR[b4ku9db"NueG'%Cc1q>< +'`\73!<2?Os8F\K!<2$Xs8M!S$N:,(!<*9'$N:S5s8Hg2!<.$<$2X`%,5rk\!<,jds8Ec1!<2?Os8F\K!<2$X +s8M!S$N:,(!<*9'$N:Ra +s1A=1Q2Up`!<,(Z +l_jd(s8J)S!<-@)q4[ifW;$Alo[j-Bp\k3j!<0%os8E`5 +!;lirm-OcO0DbbKj7WHO4So-Xc1V,9C\7],DuS>bs8LgQHM@L>YkA%q(&J"1m-OcO0DbbKj7WHO4So-X +c-63ts8KV/&GlJ,0)k=> +s3(HAUAb2j!<._Bs8IcM!<*e^s8F):!<.lNs8E`5 +!;lirm-OcO0DbbKj7WHO4So-Xc1V,9C\Ro/8,iMYs8H4!!<+;DqY:*i(&J"1m-OcO0DbbKj7WHO4So-X +c-63qs8LXL+Su0<49"rU +s3CZDZi1+)!<.\>s8HR+!<,%,s8G7[!<-j1s8E`5 +!;lirm-OcO0DbbKj7WHO4So-Xc1V,9C\n,2&H:h\s8MWh)Z'O6[J9e$(&J"1m-OcO0DbbKj7WHO4So-X +c-63ns8LjR)>aF59E+gm +s3^lG_u9u>!<.,+s8H4!!<,dAs8F\K!<.TFs8E`5 +!;lirm-OcO0DbbKj7WHO4So-Xc1V,9C\n,2=6]ba;YpInOSJkT(&J"1m-OcO0DbbKj7WHO4So-X +c-63ks8LOI')M\.>lO`/ +s4%)JfDZ?Y!<-Pms8IKE!<+\"s8EN*!</kjs8E`5 +!;lirm-OcO0DbbKj7WHO4So-Xc1V,9C\n,2P3N#GIJX$DD#"&0(&J"1m-OcO0DbbKj7WHO4So-X +c-63hs8L.>%/U&( +G-h5#s8Mlo1A_(N=8r/]s8Jbi!<*JXs8MH]!<1+8s8E`5 +!;lirm-OcO0DbbKj7WHO4So-Xc1V,9C\n,2XQfcaW;?So8bi>b(&J"1m-OcO0DbbKj7WHO4So-X +c-63es8Kb3#l=W$ +]=.aks8IEC!<+PKplGISa7oZ6lIZ(8_>"$0mJ-_\ +'`\73!<2?Os8FGD!<2$Os8G.X!<179s8Hg2!<0Xqs8KY-!<,I_s8Ec1!<2?Os8FGD!<2$Os8G.X!<16e +s/,hqQMU[])uf<: +s4[MPa8Q2?!<*6&dZ"5*m.^S[S_*o@=o/3u)tj71 +'`\73!<2?Os8Ei3!<2!Ns8G.X!<179s8Hg2!</q]s8JYf!<-*qs8Ec1!<2?Os8Ei3!<2!Ns8G.X!<16e +s.fVn9D\_g +<k87ds8MZi-2R]ANe[T548T$W,6%Jqs8M*Y"T&2uOS/YQ +'`\73!<2?Rs8Mfm"oA<!iq<?N4So-Xc1V,9C\n,2Hg1S0K)5QIDYX82(&J"1m-juRq#1Ho!<2!Ns8G.X!<16e +s.fVnl2DIq!</b+ +s5!_SG5D:=7K3:@s8Kq2!</VHs8I-;!<*o9p\"Rc +)#s[7!<1[?s8Kh/!<2!Ns8G.X!<179s8Hg2!<,aXs8GIa!</nks8Eo5!<1[?s8Kh/!<2!Ns8G.X!<16e +s.KDk[/0k&%0#V. +s5<qVm/@Cl!<*<(jFR=2s8G[g!<*W1\)[MfMYI2NPk+kR +/cYnL!</qfs8N#s:A=hgiq<?N4So-Xc1V,9C\n,2'`R@cs8L7>!<*#ukP5)V0)GYJW:Kufrr,[f!<2!Ns8G.X +!<16e +s.02h?i'j&?N0i= +s5<qVIJX$DE.S&fs8LCE!W)lr!rd`LrTsR`Fnbt9/,oA8s8Gjq +!;lir:&b(`s8IfH!<2!Ns8GF`!<07rs8Hg/!<,4^qt:!gmf#6D!<-'ms8Gmm!<,^lr:U*hL\1ZHiq<?N7/Hu` +Z-<6=s8LjR"TAE#$N@L5 +r5J]rs8MQf&H2\/#l`t;s8)cpQi7']!<+5B<;qIJY5Z$3L]13N*;BO5-3!&qs8Jhp +!;QWo;?!cudJfO4<;m"!!WF8>!<2!Ns8IQG!<+YNWrBR+s8Hg,!<,RhUAj9RlMe!d-MmfB$3&QLs8Jki!<,jp +YPurKR/U(a"9&?#+o;9=iq<?NJGT?G0E/!N +\^LMHs8HF'!<,mqao;7[ +s5X.YL&1lLD1V`Zs8K"s&)@6b6N6$3s8Mor +?3+A=klC^;ra#C$ro3VNrl+O1rWW3!rbMB2rbDEBli@"frj21qrqub%klC^;ra#C$ro3VNrl+O1rWUaM +RfEBArWE-"rXJjsrmUlG +bQ$W&rZ(n;rW`A_JcG9?rp0Q!rXA#kr[e&Dj8T,Y +!WN)tD#OY3!<+&=U]1;m>5J=!iq<?Nr;L+!!<*0!s8Hg2!</kpb5NIQ!<,(Zb3]0-rr-a5#5%uq*r_r6 +s8H4!!<2!Ns8Mrq@/'a$ +"k*F;s8H:#!<-:'YQ!AW +rm(Q+s8LID!<,TAs60L^q>Ru)Jc9B_<;p2&FoIR' +g>)`+s8MlocMj=4TDlk0ptbuLlMea$_uAirs8Hg2!</kps8MopZ2TIVFT.[,`SgdqqYne>S,T&Z`r>bhs8M<_ +`;[[R +kL0Bss8KY-!<+\OS,U&! +jNdefs8IlP!</46 +s/>t)s8Hg2!</jH +s4[L>s8Min%/p8+$iZ1cWrC3@ +m*Yjqs8G:\!<1l, +s/>t)s8Hg2!</jH +s4[L;s8Gmm!<-g6SGp%teGf!f +s69R_o)8gl!<+I! +s/#b&s8Hg2!</jH +s4[L;s8JMb!<,=aO8c3Z`r=oq +pXfH0s8Kq5!<-hd +s/#b&s8Hg2!</jH +s4[L;s8LpQ!<+>EMZ0CM\c1%VkPkA4 +s69R_X8;nrMh1o) +s0Vh*C\n,2VLed$ +s-3Q_qu-Wq!<*l8M>j"DXT$9>h#?dA +rS@MQ:B%Eqq==RbP5>7YUk/QB +s0Vh*F8HCFWe(3( +s,m?\(&e44%fV.\PQ%HY_#Da\jo4r/ +s8)fq'E2kJbkV5;HM[^A]n-3[ +s+13$s,m?\0)bkM"9*oOMuKRP\GjSKh#?^? +qV_DE!<+PKMuMo=@f$0)eUdas +s+13$s,m?\8,E;cGlEU"T`21p_uA<fjo4lN +r8[hG!<*Q/C]7K6!<1W% +s/#aHs+134s8GXf!<.'=MZ04HWW'd6df/,&mJcn@ +s7cTn!rb[gVuHGis8I6>!<0cb +s/#aHs+134s8FbP!<**"HN&g$S,T;a^Ac=TgA^C:oD\^N +s8E#t-2rVtj7WHOOS]%WVh+lE +s+13$s,m?\)#aO7%K:\QMZ0%CVZ+4,`;\Hhjo4]I +pu_VU`9dO'W;?SoNe.5, +s+13$s-3Q_r;Hft!<*f6I/]$&QN!c\\c0JFfDab.li-VW +rTX@Hs8Kh2!<.%j +s/#aHs+137s8M*V!<+2AJ,Y?)QN!c\[Jn&Bec+>&lMgDS +qW\%Es8MBa!r`3!1P,S& +s+13$s-3Q_V#(/k2u\F.MZ0"BVZ*q$_Z&!_g&C:9nG`1H +s5s@\3;rpW!WM85 +s/>sKs+137s8H0u!<-(!K`6l.S,T;a[/RrAd/M_tkl0rJpAY$W +s5s@\JboHHSUpg> +s+13$s-Ncbr;I?.!<*6&E;k^nMZ04HVZ+((_Z%j[g&C.5lMgMV +qX"7Es8L1<!<,oJ +s/>sus8Mcldf.2aon!/' +s-Ncb`;9Q6-N85dMZ0=KVZ+.*_Z%m\g&C%2lMgJU +q<\.Ds8Mur(&e44$i]Ohs8H'r(]JuM +s0;V'f)@N*!W)lrb(9TQ +s-NcbCAS#18,e#;MZ/P2VZ+7-_Z%s^g&C"1lMgGT +p?_h>s8I3=!<.AAs8GIa!<.,Rs8M?]Zi8,/ +s0Vh*jo,Y\!<1,l +s5X-Js8M-Z#lXi'#QAN<LAm)0Pl%?W^])+Le,J&"j8S?CoD\IM +s5X.Ykl(nf!<*K-n#-3b7Jd)aFhIbR]__^. +:$)D^s8J/X!<*B*FT.:!k(3Qm +s-iueDu0P63<"'tMZ0.FVZ*Um_Z&-cg&C+4lMgARpAY'[ +s5<qVDYjG5J#E>G7Jd)aFhIbR]__^. +:$)D^s8Hp5!<.=r +s4[LDs8M3\$2sr("o`68JGY6'V#I7jZMVN<fDaJ&k5OZFo)A@^ +rU9dEs8M'X#6"W%&H;-us8GIa!<.,Rs8K\.!<,^S +s0Vh*@J^'(Sq6pq +s.02hE;KY72?%^sM>iD3OSbpS])KSGa8=Qhkl0lHo`"R` +rU9dBs8HX-!<--$s8GIa!<.,Rs8K\.!<,^S +s0Vh*@J^'(W.G!& +s.KDka8Q2?!<*-#BE!GYMZ04HVZ*Lm_#D4McMQ;llMgGTpAY$Z +s5!_Sli%au!</drs8GIa!<.-6s8J_kOoCdGs8M*YU],*/4T8RaOoESqs8KV/OoB+m!<+PHOoEMos8Mrs +^]D6drf-n]r\sgOrdb"&m/R(EqiUlurr;usrgWmcr\XW(qkj?WqZ-V8qkjA[o)J^IrdXoIr\XU1r_<B,rjr+. +k5YGZri,m:r]U6!r\sgZrhobol2Ub]rkSMmr`f@\r_EHCrnI&E +U]:>brZh:?r^$O*re^W3rfI#Sric49rmUl"rn[J:qtC$f +n,M,ArjDV'rX]"dYlF\kqZ-V<p&G"<rW)p0rr;tTrWr&prW3"cp&G"uli@$=p&G$Ur^?ee +m/[,lrpB:Vrjqt,rd=_7r]g/Xrk[h!rlY$9rqcV"rWDKerZV9`m/R(Kr^,rOr[[upn,NCOr^H/Rra,Tk +q>[5iraG[(rZ;&Xrdjs(rgiq`rk/6IrknWdro3qBrp0IT +m/P];rau$-r]U8ZZiC"nqZ-V<p&G"<rW)p0rcS)<rW<'>rYG8/rW3"lq#C>*rX/W0qZ-Ttq[3=[q#C?2rYbY7 +quH^<r\FHVp]1:=rp'1Vrjqt,rcnE*o`5!.q[3<)qZ-U#q[3>Hq#C>"qZ-Trr[@bBr_reSrW;rsrY#4\ +o)J^7rYbJ2rY,9!r[%OFqZ-U>rp]U\rkn^Qp]1:8r\FHVp]1:=rp'F] +VZ6XsqZ-U#ral(SqhkB5qkj@qqni?Uqq:u4rp'LNqtBCV +fDkjBrZh:?rc,:Er^H\arcRo6r[.:<raYrtqu?ZGrZq@@rZUk4rk/+.r_;t`rq$+,qZ$Ue +!D#c\j88lUp\q]%'Dhe/9(i5`]))L,)ZBa9"TDp1Qi=GmmJHq_@J^'(\FT\!]DDU-(]M)?s8M!V2#@:P +E:X&.2Z!LR/H3`irVQWobPida!<-O(s8MWh)>aF58H.ZHs8Mcl\Gd0=!<,Ug +s/H%tdf'gT!<,RhF8h!mMZ04EVZ+4)_Z&*bg&Bb'lMgARpAXgQ +s4%)Ja8Q>@!<.SYs8GIa!<.-6s8FA?!<0(js8L[G!<1[Es8K\.!<,^`s8IEC!<-(# +rW3#to)J^9rY#21rW<)Wq#C?)p]1:.rl+@+raG[(rj_P!re1.Krf6IIrmU`Er\sNMri,bprX]"^o)J]lqZ-U4 +q#C>@qZ-Utrr2Kgrm:WWrW)p!rnmhW +s/c8"g\r&e!<+GHEW1UfMZ/q=VZ*^p_Z%^Tg&Bt-lMgJUpAXpT +s3^lGXo8G"!</.ls8GIa!<.-6s8FAB!<,a[s8Eo5!<0_*s8K\.!<,^cs8M'X$2sr(&cV"p +s6]jcD>O>4Jb]9E](c:)TBuUW@J^'(\FT\!Ac<YJ*<,$fs8Mop!WE)u*VKI3,PqK?SaZUXrVe#<!<1XMs8M'X +$2sr(&cV%]s8Hm4!<.NM +s8T;&ro<u"qZ-U:rbh^_qhkB6rh]Ukrhob/qni?`rn7;)roj@Hrp9OUrr)3` +cN!m5qZ-Trrh7")r^H\arcRo6r[.LBrjM1nr^cndri>_lrk/+.r_<(crhK>jr`&jr +mJm0kqZ-UHq#C?)qZ-U2rr29araG[(rj^JXrk81/rZ1e6roa.YrWN5hm/R(%qi^s5rr;tmqZ-Upl2Uag +qZ-UH +!WW2*s8M?`./O#D(]J4LGlEQsMZ0:GVZ+"#_Z%^Tg&Bt-lMg>N +p?DV#s8IfN!<**"Uqcs/7Jd)aFnPe6-MmfBcKtT1@J^'(V"Oce]__^.:%ePcIJX$D +G5^LhjSmd1!r`3!#lai#s8KV,!<,=Ls8HI(!<0Lgs8MNeci1-IO8`Mc!rDus*Vf[6`;9Q62;8*0IJX$DG3S)e +fDYjN!<*6) +rr)os[f??jr\=9MrY#3Drce?uqhkB?qkj@oqni?Nrmgo!roj@Hrp0ITrqPaX +aT)6[p]1;Brr0n:r^H\arcRo6r[.LBroEGGraG[(rhT5erk/+.r_<(cr`8Xk +i;ilMqu?Z,qZ-Usl2U`kqZ-W*m/R'er`f@@klC]'q#C>fqZ-UkgAh.Qe,TOB +o`4Zqs8LFF*r>s:%K9o;G5d?qMZ/n<VZ*Lm^AGeHd/2Mqi;;g=nGDqY +r9=7&s8N#sFnbt9<rVg6s8GIa!<.-6s8FAB!<2?Os8HI(!</ees8K\.!<,^cs8FqK +!9!qWmed%`]))L,=6]ba@J^'(\FT\!kPdm<!<*f6:B%'d!<+#6s8ITH!<-H]s8Fq+!!2NU +!:IN"rj)M3qZ-U,raGeJreUH/rf[&RrjVdArlP&jrnIG9rp'LKqtC$` +k5W<urgNfhqZ-UQroVE(r^H\arcRo6r[.LBrp9"OraG[(rhT5erk/+.r_<(cr_<7irdFac +iQ(rpqu?Z,qZ-Usl2U`kqZ-W*p&G$jr^6P_rWrKqrfR3&rp9O^rq-'frZ1e6rfR'Xr`.\Pr_<7irdEVC +!W2`oqnN11N;`nU!<*u;C&W8SL\lu.OoD3SVZ*t"_Z%LQfDF8#jSS6AnGDqY +qr[pns8KY0&GlJ,*<+%)s8GIa!<.-6s8FAB!<2?Os8HI(!</ees8K\.!<,^cs8I*:!<.KH +s4IAN]))L,=6]ba@J^'(\Fon$Z24P#&,sZ=s8M?]!<+#6s8KM)!<+tBs8M<\eGet:s8I*:!<.K& +s2=s:p&8Cp!<+JIDZ4q\M>N20OT)*RVZ*jq_Z%s[g&Bq,lMg/IpAXgH +s1JC2f)?ii!<**"H2dWhs8GIa!<.-6s8FAB!<2?Os8HI(!</ees8K\.!<,^cs8JJa!<,mp +s6]jcm/)S;V"juh]))L,=6]ba@J^'(\Fon$J,96FBC,ZtYknG"*Vf[6h>73O%K?"ds8Gjl!<1:Cs8JJa!<,m\ +s8MB^L]4(M +s8U.>rkn^[p]1:Src.pbpko'5rhTFgril17rm1JprnIG:qs+1QqtC$d +j8Z[irp'JJp]1:Frm'-qr^H\arcRo6r[.LBrp9"OraG[(rhT5erk/+.r_<(crmLcHrW)p$ro!kW +mJm0)qZ-VFq#C?)qZ-Usl2U`kqZ-W*p&G#"qZ-VSm/R'!qZ-U9q#C?lr[.LBrgN<Urp'IgrW)p7rr2os +rmLcHrW)p$ro*5Drc%`7rdOtK +s3:TCp\o75!rDus#6%9pEW1L`MZ/n?V>I.hY5Z97_Z%jUg&C.2lMg;MpAXjF +s0ht,rr.rW"oA<!"oa)Pqq_;O7Jd)aFnPe6-MmfBm-OcO@J^'(V"Oce`;9Q61%PADA,?9* +<WN!tqtosarlP-DrW)p#rn@/Irjqt,r`A@araG[(rj_Y$re^LPr_2e\re^UTqZ-U9p&G#nqZ-U:rn[8Irr2mp +qZ-V(q#C>'qZ-Urrql9drlP-DrW)p#rn7DQ +s3UfFao3aa!<+#<A,^QKKD:?'R/!QXYPu?7_Z%dSg&C(0lMg/FpAY'L +s02P&f)@,n!<+bQaPd*t7Jd)aFnPe6-MmfBm-OcO@J^'(V"Ocep\kHq!<.KI\,P.Zs8M?`&c2P. +563u5rke[)rqucIre(1RqZ-VNp&G$&qZ-Usl2U`kqZ-W*p&G$7rW2lrra>`Arr)iOrh'0crW)p'rX/W)rW`AZ +rqZ?hr]'cTrYkd0rn7;>rkn_&qZ-U2roEkSrp0OqqZ-U[rke[)rqucIre(1RqZ-VN +r;Y@Jrpp&4rWE#trWE-brc%j^reUH/repcHpnn%spqm$Rpt>Z,qs+1Hrq-*]rqkOO +XoJCtrb;?5p]1:prnZ`:r^H\arcRo6r[.LBrp9"OraG[(rhT,br^HJ[re:.Irjr(E +r;c`qrW3!'o`4tkrr2Tjrjqt,r`A@araG[(rj_P!rc7Z3rWr9!rZD-ar`f-tr[mpFroO,>klC\crk.h%rjr(E +p]19orWi)rr`/ss +r;YRPrql\\rYG8/rYYWBrcA'ipko'1rh0.crhob)pqm$Rpt>Z+q!.kNqtC$a +gAe)NriZ5>p]19trc.r)m/R&RqZ-V<p&G"<qZ-W^m/R&nqZ-Vko)J^-rYYD1re:%Froj>R +!!)KgrYGKprr2Kgrjqt,r`A@araG[(rj_P!rqZPBrW`#qrW<'prp0R`rlk?QqZ-UIp&G$frbMK:nc8Ydrn$N: +roj>Rmf<>&rfI-Y +q>]@PrilALp]19qr]:$srd"Kupko':rh]Lhri,n/pqm$Vpt>Z+q!.kMqtC$`rr1XO +V#UGLrb)3>p]1:*rf$jOS,`K`rmq(_rm:Z@n,ECD +!SuT2Wr@8BEW1pr[f60%s8LpTU],Q<I/]W7j7WHOlMe'fWrC`@s8Mfmb5R_+PQ&)ki8FY7h>XGRGlD^^ +N;g9b +qt'jLs8L1?54npT./m`UErLUaMZ/V7T(o2^XT#s2_Z%LQdeMMpj7qp=o)&.[p\t0D +s.TJlk5MXb9`>4j!<+&=L]6OhrrN0" +JcC<$ +mf3:brjD`!rW2corZ(o@rc.pcre^E-rg!JYqkj@jrjDO<rl+lfqq:u&roEk>rpfdWrr(@H +T)\fWrl"f%r\sKMrW`@(rkO6f +JcC<$ +o`+pTreCCpo`4t'r_EH4rd+R!pko'1rgih]ri?%2pqm$Orn%&#rnIG7q!.kLq"F^b +dJo^9rpg!9rjVlYr[RI=r[Ii/rpPmI +JcC<$ +qZ$Q1r`B(&o`4t#r^-U&rce?qpko'/rgEb^pnn%srk\KKrl"f_pt>Z%roj7Erp0RTq"F^c +cMs:3rq69FrkeZ9reLJ=rX8B!rX/X6rl^Q+ +JcCB& +!UoIWn,AIK.ImK<+oY::E;k(\KD:?'MuK(BV"ghdXT#m-_Z%XUebIhshu;m;lMg/Lo_A.Z +rQG5+s8Mlojo3U*]Dec.PQ"bb+S#O31]EpD +opu,6s,$dTb5PiN +$46b?o`4sur\jacrc8!creL0(rfd>Upnn%irj_a?rkn`\pt>Z$roEk>rpB^XqtC$`rr'q< +P5kOZrp0R:rlP/Krh]U[rcS3#rWi)rrX]!FrmdeD +JcCo5rq-2Zr\O?M +q>gL7r_!0-rce?mre^E-repc?rh0%`rhob'rk\BHrlP/jpt>Z'ros4Crp]^VrqZQm +`W)#!rr2ogro=",rkn`Arhf[breg\SrYk>-r]^=MrnaaV +JcD5>rq69#rbMKDo`,!t +#65#.1&bPZErLIcL%U?&NW,@FV"ghdVuEt#_"beG`r=E]g&Bb*j7qp=m/HYPpAXm& +s,$dTq#9XZhYtn$_>^e?WW&RiPl>V#1]@RK!<+/@AH&P, +l+$bEs/5nrqu4S6K)S"6#4_cn(]Hl) +D/B8irc\9kreU6)rf[8Poqq_eriuI:pqm$Krm:>krnm_=q!.kIp%JC^ +]`3`drquccroX47rm(M\rji$1rhTO^reCDHrY=l%rW3!Nrc.qFrq"). +JcDtSrmLe,r_3;#mf<=ir[e%Prc8!a +!JH++K_:6%N;f4DU\1M`XT#[-_"beG`;\']f_F/!h>ZR3lMg/LoD&%Yq#:9' +s+C@Nrr2Wjmf);Hg&B7q`W!UNZMpg%TDk)SDuN0(+T;N4!<*-#48s^._Z'DY +s+13_s8LpTSGl[j(@2&#&H4<]9`Af+FoHmi +M#</,MZ/b;Sc5J\VZ*LmZ2VH0_Z%ORcMlGjg&Bb*jRqg;nFcMS +qQp3Qs8Dusr;Q?fmJc/FgA]P"aSs!S[f3B-V#He]NW+Y2@K&@f)?'[*!<*B*8H+PHci3q! +s+13ks8M?`WW$N/,O>F0$iVRR7fHrtFT-UcJc:JuM?/Wn +!/piCrhB(_ri5t*rkS3DrlG)ep"B?!ro3V9rpKdXq"F^^rr')$ +JcGTHrr2omrpp'Sro="4rmh"mrkn`KriuI#rgs+Prf$i6rdauNr\XTeli@"pr\a[Zrdk'HrltH5 +mf.k<h>dKPrn[R_rf[7sr^Ql0rW2HfrW`?Hr]pHhrc8!`rdb!'nr!F)rf[8N +!MuUmV>-qeVuEq"]Cj&?_u@p[eb.Vph#?=4l1jQCmJcbNpAXrh +s+14Bs8Murq#9g_li-#FhYu1,dJh2c_#CeAX8\spTDk8XOoC:<MZ.o#;>r0H%-%?e)#c_uAH%JcYl<2R +q#U<eJcG9?roX3rrgWn0r_NMBrW_KbrWE->r]:$\rc%j]rdXp$mu%++rg3VUrh]Ff +rMKRorjDa?otp^KrmC_tp"B?%roWn=rp9XTp%JC] +V#Q#Gmf3:brqQK_rp9XJro3q4rmq(mrl"fIrilC$rhf[krgs+Trf?r6rc.p0r[.UTrW1pW +!!30&!raAB8,dB)PQ&)kcMlPsk5OrNrN6,!p\sLXhu;+(`;ZS3If<IK1B%a=!<*6&)?)Jl;Z:P4GQ*$iK`6i! +MZ/V7Q2[<QV"1D^Vua** +!3cC5otp^Hrlb;lp"B?!ro="Bp$2PDrpoaUrqZQm +U&T]Dkl:YZrqHE`rpKdNroF(7rn.4srl>#Trk/6<riZ6urhf[jrgj%Rrf6l5rdk&`r`9"ar[n*grX85r +i;iiarYPPYr\+74r^Zrera>_ArcnEqrfR2Nri#gjrg*P@rdOidral(3r_<AXr\XU&rZ(nKrWCXMrWN37 +r[%P%r^QlgrbDFVrd+Qmre(3+nr!F+rfmDOrhAt\rhoaurj;[; +r5/3Frl>#brn-nsrnm_:p$2PBrpTjYp%JC[rr&>d +JcFa0rql]irq69[rp9XJro!e1rm^qjrl+lRrk\TGrj;[+rhoamrhKI^rfmD@pko'-reCE!rau.+r]L0/ +!#GYP(]FVi!;Z]p!WEW/+T=+p6N0p_Ac?iOHN&?lJc:B&M<p-!MuJn=RJroKVZ*[rZi7T9 +_=PMD_Z%ORbPp#ag&Bb*ir807lMg/Lo()MRq>U>X +s+14*s8Murq>U*eo)A(VlMflDh#?"+ec*nob5T<X_Z%@M])K&8X8AdnU&LS]Qi<0IO8b(1 +M?&G5Lku%arcS3Jr_*5Mr\4=$rZqIbrYb\LrX\u7rWC4ArW3!'rXAc=rYPPRrZ_=hr[n+)r]^<Wra5YFrd"Kj +rdb!$reKWnrf6u?rg*PQrh'1dntuDdrj)O6rkS*Arkn`Xrm(Vq +eH".jg&Bh,jRVU8n,DtPpAXgcqYpJT +s+14!s8Mopq#9scnG_bQkPjH>g\]\'eGdbmaSs*V_Z%@M\Gic4X7`@hU]-kaS,S]R +Oo^`/rf6Q,reUQ/re:?)re(3%rdk&urdFcgrbh^Jra>_/r`&kkr^ZrRr^6ZTr_<Ajr`];/rb2:LrcS3drd4Wl +rdOirrdb!!rdt-%re:?+reKWnrf-o?rg!JNrgs+`rh\tYri,n%rjVmAo"tCDrlG)arm^Yp +qUtl'ro*k?p$2PCrpfRQrqQKk +LAui)c2[e@rqZQerpp'Urp'LHroF(9rnI>'rmUklrl=oQrkABBrj;[0riH*u +qPO1frh]Ugrgj%Vrg!JGrf)korepc<rfmDMrgj%^rh\kVri#gtrilC/rji$Bn&#(Erm(Mln(I]p +!T;l9i;Vd9l14-=mf)hNpAXgcqu6SG +rrE(Ms2Y0=rr2cnp\sganG_eOlMfuGir7j7gA]e)fDa4tbl5WT_Z%@M +]E#GB\@DOErilC&rhoFdrh]UhrhBCcrh'1]rgj%YrgN_Org*PKrfd>EqiLf;qi(E3rf@&?rf[8ErfmDJrg3MM +rgWnWrgs"[rhBCerh\kVrhoarrilC.rjVm=rkI^7rl4r]rmLeto%F#srndY7roj:F +o]lGCrpg!\p%JC[rqq?I +p]#gE^An32rqQKdrq69]rpTjQqs+1Cro="6rn@A)rn%.trm(MerlG)X +!5e?ErkJHErjVm5riZ7#rhkpVrhoaqriZ7+rjMg<rk@O3rl+lXrlkAermLeto%F#rrndY6ro`e9 +!:'RMrp]pYn+QbWrr.KK +nc+1?\GuR-rqcWhqtC$^rpp'Vrp0IHroO.<rnR2" +!8%>)f`'J$df.PkbPoQ]`:CeE_>_4K^AbeE]DfD@\c0);[f3]6Zi790Z2V!,Y5YR&XT#7!WW&psX8]4"Y5YX( +Yl:s-Zi7B3[f3c8\c02>]DfJB^AbnH^uiN5`;[gVbPofddf.hsf]h)gh>ZF5jmVL6m/HJQncAFV +!;5pVrqHEfrqq?I +kl656XT/:urql]iqtC$]rpg!Urp0RKrosFEro=": +!8dh7hu;F1g@a.ufDa;!dJhDibPoQZ_jJ=<_u@^UbPoccdJhYpfBLufgA]n,hYuL5jSn<1lMg,Kmf)eV +p%J+UpAXjdqu6PF +s53j,~> +%APLeod +EI +84 0 0 1 4 104 cm +BI +/Width 233 +/Height 2 +/BitsPerComponent 8 +/Decode[ +0 1 +0 1 +0 1 +] +/Interpolate true +/DataSource cg_aiproc +ID +JcF4!rndXCr`B(6li@#6rbVS;rpAM@ +JcEpnrql]>reg\ErX/)orWN3\rd=^\rqYaW +JcEai +JcFX-rp'K]rac!Oli@#)ra5Z!roMN, +JcELbrqZQ/rdFc+rWMZirX/Woreg^"rr)Hg +JcEai +J,~> +%APLeod +EI +137 0 0 1 134 104 cm +BI +/Width 380 +/Height 2 +/BitsPerComponent 8 +/Decode[ +0 1 +0 1 +0 1 +] +/Interpolate true +/DataSource cg_aiproc +ID +JcC<$ +JcC<$ +JcC<$ +JcC<$ +V>pNSqZ-Vlrk\Tirql]m +JcC<$ +JcC<$ +JcC<$ +JcC<$ +V>pNSqZ-VYri#h0rm^r6 +J,~> +%APLeod +EI +83 0 0 1 301 104 cm +BI +/Width 230 +/Height 2 +/BitsPerComponent 8 +/Decode[ +0 1 +0 1 +0 1 +] +/Interpolate true +/DataSource cg_aiproc +ID +JcF4!rndXCr`B(6li@#6rbVS;rpAM@ +JcEpnrql]>reg\ErX/)orWN3\rd=^\rqYaW +JcF'r +JcFX-rp'K]rac!Oli@#)ra5Z!roMN, +JcELbrqZQ/rdFc+rWMZirX/Woreg^"rr)Hg +JcF'r +J,~> +%APLeod +EI +83 0 0 1 4 105 cm +BI +/Width 230 +/Height 2 +/BitsPerComponent 8 +/Decode[ +0 1 +0 1 +0 1 +] +/Interpolate true +/DataSource cg_aiproc +ID +JcE.XrqQK-rd=]*rX7N^ +!#5ML(&g;o@K)&]Xo?cJk5OrNrLs8jq#9UYhYt4fR/V.*9`?C<"lKC[!raAB?N-Yt +jMq4Ns3L^rs2"a7rVk%?M>g!D$0D6e%K8-^=T3dKU]/C7 +mf<B=s6p!equ5=K[/Q*bC&UL!*W?*%!<+DGC]:O: +n'_5es3L^q~> +%APLeod +EI +137 0 0 1 134 105 cm +BI +/Width 380 +/Height 2 +/BitsPerComponent 8 +/Decode[ +0 1 +0 1 +0 1 +] +/Interpolate true +/DataSource cg_aiproc +ID +JcC<$ +JcC<$ +JcC<$ +JcC<$ +V>pNSqZ-WE +p&BUCJcC<$JcC<$JcC<$JcDSHr]'cTrl>$,rqH<i +J,~> +%APLeod +EI +83 0 0 1 301 105 cm +BI +/Width 230 +/Height 2 +/BitsPerComponent 8 +/Decode[ +0 1 +0 1 +0 1 +] +/Interpolate true +/DataSource cg_aiproc +ID +JcE.XrqQK-rd=]*rX7N^ +!#5ML(&g;o@K)&]Xo?cJk5OrNrLs8jq#9UYhYt4fR/V.*9`?C<"lKC[!raAB?N-Yt +jMq4Ns3L^rs2"a7rVk%?M>g!D$0D6e%K8-^=T3dKU]/C7 +mf<B=s6p!equ5=K[/Q*bC&UL!*W?*%!<+DGC]:O: +n'_5es3L^q~> +%APLeod +EI +83 0 0 2 4 106 cm +BI +/Width 230 +/Height 5 +/BitsPerComponent 8 +/Decode[ +0 1 +0 1 +0 1 +] +/Interpolate true +/DataSource cg_aiproc +ID +JcC<$ +JcC<$ +JcF'r +JcC<$ +JcC<$ +JcF'r +JcC<$ +kPtPSrosF;rm:Y_rj_s.rh'1RreLK!rbh^Er`9"ir]^<Lr_WT"rb;@Srdk'/rgNh`rj)O<rlb;mro="I +rqq?I +qu;6Ici8RrL&_/O +!94+?j8QakR/V.*9`?L?)ZC3F!hfVn#lYP;+oXS&@K)&]Xo?fK +pQki1s3L^rs-NcbmJb0*U&KE<<W4ZN +$31'W!:Kpe!WF/>7/gs#OT)]fh#@5P +s+13rs*t~> +%APLeod +EI +83 0 0 2 301 106 cm +BI +/Width 230 +/Height 5 +/BitsPerComponent 8 +/Decode[ +0 1 +0 1 +0 1 +] +/Interpolate true +/DataSource cg_aiproc +ID +JcC<$ +JcC<$ +JcF'r +JcC<$ +JcC<$ +JcF'r +JcC<$ +kPtPSrosF;rm:Y_rj_s.rh'1RreLK!rbh^Er`9"ir]^<Lr_WT"rb;@Srdk'/rgNh`rj)O<rlb;mro="I +rqq?I +qu;6Ici8RrL&_/O +!94+?j8QakR/V.*9`?L?)ZC3F!hfVn#lYP;+oXS&@K)&]Xo?fK +pQki1s3L^rs-NcbmJb0*U&KE<<W4ZN +$31'W!:Kpe!WF/>7/gs#OT)]fh#@5P +s+13rs*t~> +%APLeod +EI +83 0 0 45 301 126 cm +BI +/Width 230 +/Height 125 +/BitsPerComponent 8 +/Decode[ +0 1 +0 1 +0 1 +] +/Interpolate true +/DataSource cg_aiproc +ID +JcC<$ +JcC<$ +JcF'r +JcC<$ +JcC<$ +JcF'r +JcC<$ +`rH&9rp]pJrn.4ormLf'rp0RXJcF@% +JcF'r +JcC<$ +q>^Hkrn@@\ri#gdrf@&2rce?Wra,S%r^QlJr[n*mrY>D=joGA_rXf&Kr[@b&r^$NXr`T53rc8!ereg]@ +rhKIrrlP0. +MZ88-ci8RrNrT+XroF'mrg3\+ +!HN5[9`?C<"G6^R(&g;o@K)&]Xo?fK +pRhJ:s3L^rs.KDkmJb0*U&KH=<rOfP +$MOPN!<*#u$N:k@,Q9@q48qbL<;p;)D#S#F=oM.p62i_?./k4c&H2gU!<*#u+9"_.C]9Iq\,P4_ +r3ZKTs3L^rs0D\(rr1@FNrEDb3W9]O +!;lir%/qs[<rRLGOoCpNWW'=)_>_aZgA^76o)AU2s8Mfmli,f@e,IDe]Deu4UAgJXM#M&d62hi&!T3tW#6$%M +:B#G9[/TX6 +s+13rs+13^s8LpTSGlXi(?5Do#6$%M:B#>6 +R/ju&^VBd0JcGTHrq69;ri5sNra,R`rY+;lrWN3]rdOj_rqXn? +JcF'r +JcEdjrp0Q_rau-Rli@"drZD,.rbMLprjMg]rquEg +JcF[.rpB^*rh9=<r`9"PrX8&mrX/Wqrepd%rr1[P +JcF'r +JcF4!rq-3!rcA&mrW2HfrX]!(rf[9.rqG=M +JcEpnroF'_rb_Wali@"ur`/rcrnQT7 +JcF'r +JcFX-rql]5rdk&3rWV`jrWrKire:?nrqt7F +JcELbroX3Tra>^Gli@#-raYr)rorqP +JcF'r +JcFj3rm1RVrXJ;rrW<'VrcnFTrqFJ5 +JcE(Vrn@@;r_re/mf<=fr]0tOrqH6g +JcF'r +JcG0<rqHDbr]'?Hr[@b]ric=i +]DmH^WrN(srlk@ur^Qkonc8Y%rc8"k +!WW1Ns3L^rs7H?jg&?$k'(l8(%fTf6UAj8X +s+13As8Min^]&W[0D,>E!<GPT +!(6aerqh9H +f)L=$rVulori?#crW2Zlr\=D?rq*)f +JcCo5rlG(GrX&B# +r;cg7rdFe*JcFO* +KE(r1rd=\_o`4stra>`H +Sc=9@N;rnFrf6t* +!<<,o!<**":B%a%rIP"1 +s,@!WrVj8):&Y7f!<+AFO8eR6 +s+13&rrKgH +!58A3rWVrprZV8srp#(7 +li3.Jrq68JrZUq7rWW:%rk=Em +JcC<$ +rVul[re17lo`4sqr`T6IJcG9? +R/d0arh'0/o`4t5re1:7 +M#W&+JcGKErr)i&r_!.kp]19pra>`dJcGKE +S,`K"r\+$HrW<'lrj2V& +K)^E%JcG0<rnm^#rYP>0rX/XPrpkX? +rVrSkrmUj;o`4tfrn4a[ro3pXrf[8+rdOj2ri?%Z +h#Ds*JcFs6rqZPSrY"u+rYPR#rqqEK +VuQbcrau-3p]1:Prkl;Hrr2ndr]0rYli@#?rf7!R +jo9o3JcFa0rpTi.rWi2ur[Ii] +LB":Rrk/4Np]1:;ri!:*rnIE8h#RF%rkRat +bl@[]qm6:lKE(qiqm6:l +bl?Jurnm]YrW2lrrW3":rq;<N +YlF^qrbVQ7qZ-U+rf7!R[f??\rY5,-rW`?WraPkjrg<[ur]'lap]19urjV4n +bl@Z)qZ-W?KE(p5qZ-W? +bl?8orlb:'p]1:@rlL6$ +ZiC$Er[%=>r^QnIZiC$hrZV%:r\si3n,NCPr^cearWrMI +mf1N2r]L&Xrlp)qr]L&Xrlr[e +e,TFHrfR0eqZ-Ttrd=_A +Q2eDprqubArWE#trXAdmXoJB6qZ-TrrdFeCl2Ub^reg[WqZ-Uc +mf1N2r]L&Xrlp)qr]L&Xrlr[e +c2[dsr]9fSr\=E( +R/ai!rq$+^p]1:XrnadWroa7cqZ-V!h>dIip]1<7 +nc-i5r]L&Xrlp)qr]L&Xrlr[e +b5_J>reg[[qZ-U,rk+a# +^]4;mr\"'JrW`@_rr/qtrcS)<rWrM^h>dK>rXSf*r_)qargEhL +r/q!Qm/R']qiUmLrr;ugqiUk%qZ-V;rfR2Dqu?Z>qkjAUrr;ucreUPIr\+7JreCEum/R'RqiUmPm/R'] +qiUmLrr;ugqiUk%qZ-V;rfR2D +df78crmh!%qZ-TurgTMZ +_Z0VZrYbS5rY,:IVuQbfrXJ`)rcm&preC1JrpTX^rY5D5 +quH`_m/R&<qZ-WUrr;uTli@"gqu?Y2qZ-W-rkJFBnc8Xkre:@No)J\(qZ-W^m/R&<qZ-WUrr;uTli@"g +df7/`rq67fp]1;9rr/_n +`W,q?rX/N&r[Ij&V#UG:p]1<AfDkj"p]1<<q#C=. +!!)osrp9"Or\+-Kro="Xro*_]rW;rsrWrK1rX\o+rbMB2rc7uEqZ-U>rZq.:r_`7drY>;1rp9"Or\+-Kro="X +ro*_]rW;rsrWrK1rX[HW +^An33rd"8=r_`[f +VuOj<rho_sqZ-UbrpZW]ri#Slrq+hBrqHBmqZ-Vrq#C=. +!!)osrp9"Or\+-Kro<\Or]L&Xrlt-9rbM0,rbqeequ?ZNrd+>>ril(qrY>;1rp9"Or\+-Kro<\Or]L&Xrlr[e +\GuQ%rW`6"r]pJW +WrL9Brj_q2qZ-V1rqrAfreC:MrYNu^rZ:q:regLNrY5D5 +quH`_m/R&<qZ-WUp&G"RqZ-W?p&G#,p]1:`rr2Kgr`]1!r[%R?q#C=.qZ-W^m/R&<qZ-WUp&G"RqZ-W? +bl>*Nrl"dLqZ-Ulrqrnu +cN!marX8T'rbIo$rabm+r]8I,r]g8[rb_H1rY5D5 +quH`_m/R&<qZ-WUp&G"RqZ-W?p&G#,qZ-U,roW\Lrq$+-qZ-W'q#C=.qZ-W^m/R&<qZ-WUp&G"RqZ-W? +bl>!KrltEPqZ-V( +XoHfKrm^o[qZ-V#rr/;br`]1!r_LrAr\+-KrdsqFrY5D5 +quH`_m/R&<qZ-WUp&G"RqZ-W?p&G#,qZ-Usl2U`\qZ-VWq#C=.qZ-W^m/R&<qZ-WUp&G"RqZ-W? +bl=mHrkeX@qZ-V< +YlE5Qro<tsqZ-Ujrqhu\rdO_Er\2b"rXSf*rhfJjrY5D5 +quH`_m/R&<qZ-WUp&G"RqZ-W?p&G#,qZ-VYl2Ua2qZ-V3q#C=.qZ-W^m/R&<qZ-WUp&G"RqZ-W? +bl=dErjMe0qZ-VT +ZiAYWrr2maqZ-U^rqMZVrhB8irXRHXrpKO]rlOs8rY5D5 +quH`_m/R&<qZ-WUp&G"RqZ-W?p&G#,qZ-Vsl2Ua]qZ-Ueq#C=.qZ-W^m/R&<qZ-WUp&G"RqZ-W? +bl=[Bri,kurW)p"rl_bM +fDki3qZ-U;rpZ!Krl=d6rp&,8rk\@0rpBL\rY5D5 +quH`_m/R&5qZ-WUp&G"RqZ-W?p&G#,qZ-W.l2UapqZ-Ubq#C=.qZ-W^m/R&5qZ-WUp&G"RqZ-W? +bl=R?rdt"Ir[7^= +\c:C`rmq&SrW)p!rkaWorp9C[rgh[@r`T*urYtP1rY5D5 +quH`_m/R&$qZ-WTp&G"RqZ-W?p&G#,qZ-Vol2UaTqZ-Utq#C=.qZ-W^m/R&$qZ-WTp&G"RqZ-W? +bl=R?rquaVqZ-V3 +\c:LcrqcULqZ-VALB%67qZ-U>rqkOOroF%]qZ-VWp&G"+ +!!)osrp9+RrqQHrqZ-WTp&G"RqZ-W?p&G#,qZ-VBl2Ua7qZ-V5q#C=.qZ-W^n,NC^rWW0!ro3VNr]L&Xrlr[e +U]:>MrXJ`)rj]W@ +h>dJ/qZ-UPrq_BLrknL2rh&$HrcJ#;rYke1p&G"/ +!!)osrn6c?rkS:/ro3VNr]L&Xrlt-9rbMB2r_D_Xr^H\arhoPkrYbS5rn6c?rkS:/ro3VNr]L&Xrlr[e +T`>"bqZ-U0rq=,, +i;`fJrY#21rWN5QJc>`Mr_*+grY#4>j8]+9p]1;Xo)J\A +!!)osri#Dfrr2mlp]1<Qp&G"RqZ-W?p&G#,qZ-U0rornOrlk6>rW3#]q#C=GqZ-Voo)J^gr_E4gro3VNr]L&X +rlr[e +ScA[aqZ-V3rr0e7 +i;`e6qZ-V)JcG]Krm:WFqZ-Tsrdb"Hm/R'-p]1:DrqZ-br_WXq +quH^jrquHhreL.Hro3VNr^?V`riu.rrbM9/r]gDZp&G$Zr]0iUr`Admr_`Omr_<Cip&G#Ho`5!Np&G"Z +qZ-W# +bl=76rmLcHrW)p.rkQDN +j8],QrYPP6rWN5UJcGTHrg3Tcp]1:<r`&lJriZ73reLJNrZ(\5r[%R+n,NB` +!!)fpr_`ZurmC_4r`&k!rW3!AqZ-WTp&G#AqZ-UKri5t.qu?Y2o`4t_rhBDRrp'Kdr[.LBrX&SUp&G#fp]1:j +ric=Krg<[arWE-#rZV.=ro3VNrdakGr\+8NrjgJW +RfE@bqZ-V#rm1TC +aT(<#rfd3Zra16Vo`+oirX[fbr^-VEm/R(_ +!+#\4?KhIhLAkKU!<2!Ns8L"1!<*0!s8Hg2!<-a4%dX2p"TGaus8Mrq?KhIhLAkKU!<2!Ns8L"1!<*/M +s-iuechd_A')nR' +fuX3Rs8F>D!<**"g4B:os8M?`C]4b,!<+PKUZ;@S +rW3#trbVQ<o`4t4rhKJmr`]1!ro3VNrqub'p]19squ?Y2qZ-VmrlY3]nc8YNrlXU-rr2n5rW`#qrZ;'6rr;t$ +qZ-WTp&G$hra>L$rWUaM +QiI%[qZ-V+rj2U_ +bQ$`)rnI;Mr]u,8kl:YXrjr)[rb;@2ra#MGrf[97 +h#I<PrqcW>rgWnZrl4s4h>dK>rl"fRroa1YrbMB2rhf\prql]"re:>nrg<](i;`fQrm(M4rh'20rqP=Lrp'L$ +rkn`u +df5[6rj2J%r\a\GrkSNs +cN!&,rf[-YreuF. +W;j7)rbMB2rhb8H +gAdN>rq66rrW)p-rf@&[rm(N2 +dJrA/r^ltermu`$ +W;j7)rbMB2rhb8H +gAdE;r^cndrc.q/rji$[rq+_? +l2UbVrX&Q(rZZpn +V>mq&rbMB2rhb8H +gAdE;rfd3Zr^ZsLriH+>ro*kO +fDk+8rl4g8rb-l_ +V>mq&rbMB2rhb8H +gAdE;rn7/Kr[@c'rhTP*rmUl0rqtLM +l2UabqZ-VOJcDSH +[/^,@qZ-VmJcFI( +PlLaYqZ-U6re^WEric=Brn[SCrr1aR +l2UaJqZ-VhJcDSH +[/^,Hq[EJ(JcFI( +OoPCorW)p.re198rhob1rm^r0rqG7K +l2Ua2qZ-W,JcDSH +JcC<$ +OoPD2rW)p$rdk',rhf\*rlP/rrpKd^ +i;`'Araks,rmQGu +V>l,HJcCl4r^?V`rd"L#rh9=rrkn`froX4Prr(mW +l2U`gqZ-WLJcDSH +JcC<$ +OoPDSqZ-V:reg]Hri,n6rmLf&rpKd] +j8\BDrcS)<rka6d +V>l,HJcCl4r\XTSrW<(Freg]Erhf\/rlb;prp'LTrr)!Z +l2UaBqZ-VqJcDSH +JcC<$ +OoPD"rW)p*rd+R$rg<\^rk&0Krn7;5rpKd] +k5X]Grh]JlrfMd3 +V>l,HJcCu7rr2m"rW)p6rdFd'rg*P\rji$Frmq)-rp0RWrr20^ +l2UarqZ-V>JcDSH +JcC<$ +PlLaHqZ-U=rdXp)rg*P\rjMgCrmh#'rp'LTrqbmZ +l2UbFqZ-UWJcDSH +JcC<$ +PlL`bqZ-UPrdk'+rgEb_rj2U@rmLf!rp'LPrqG[W +k5YE7rW)p"rp>:: +W;hGKJcCu7raPa)r`&lLreg]Erhf\$rkeZ^rn7;7rpB^Yrr)3` +k5YF+qZ-VmJcD\K +JcC<$ +QiI'arYYV7rWW:>re^W3rgs+drjMgCrm(MrroO.Erq??g +m/Q5JrkeO4r`asR +W;ipurqHE?rl"g/JcFd1 +QiI'/qZ-U?rce6srh07frji$Frm(MrroF(Drq69c +m/Q5Jrql[*rW)p0rq*#dr`8n4rdg=6 +Z2agSr\XTTqZ-W<JcFd1 +QiI&/qZ-U_rdOj(repcPrhf\,rkeZ]rn7;1rp'LTrq>^Y +j8]*mqZ-VQV#UE_qZ-V<]`7usqm6:E +jo;^froO+eo`5!6JcFd1 +RfEBTrXJi,rWN46re:?/rfd5VrkABKrmUl"ro="Crq$-_ +m/Q,Grnm\XrW)p5rq32hr^H\arcPmRrk/+.r_;MS +[/^,fqZ-U'rcJ.!roSe3 +j8YSJrdFYDr\FIpqhkBBrhf[nqni?`rn7;3rp'LRrq??j +n,M>Gra>U'rf*iUr^H\arcPmRrk/+.r_;MS +[/^,CqZ-VBJcFI( +ScA]XrX\u.rWE.2rdXg&rhKIiriu@;rn%/&roX4Frpp'^rr)<c +i;`f0rW<'!rYYY.WrN&eqZ-V<]`7uDqZ-Ui +jo;^fraG[(rgn]@ +gAd`DrdakGr\"1lre^W3rf?rRrji$Frl4igroj@Hrq$-_rr)<c +h>dIUqZ-V4WrN&eqZ-V<]`7uDqZ-Ui +jo;^fraG[(rhtDJ +gAdiGrmq&TrW)p!raYqWqhkBCrhf[mrkSNMrlt>nqs+1Qrq??i +n,M5Dro*herW)ourj]*1r^H\arcRo6rh9=RrgEZ`roF'RrbVQrr`fAarljs5rjr)krbD<1r[dr/rlXg3rqui4 +!PlMMNW*/]2uZSOJH"<is8M$TOoEE#s8N#sS,Q@c2#c#%VZ&gW!<.!8VZ,uRs8LsUJ,WII2#]<1:&\o, +])M]ks8MurWW$o:4oQB!2uZtZVuHYZs8Mur_#B>m>Q-S\:B#eC +g[kH?s8Min0`(kL3<!stM#N;2Nr,^QY5?*8e,J&"h#$C6pAY$Z +s4[MPUAFri)#ij*s8GIa!<.-6s8FAE!<*T0s8IoT#k@up!WJJZs8HBl!<.]Fs8M9^ +70!>T!<-=(mIL;V]))L,I/`X75PP6X_<Ct!b4u#9qYje""7-$e+o]XNs8M6]6L4^O/,moas8M9^7I1$R?N0?f +s.fVnFo)1<(]J@PJ,>-&SGT2_]Df\H`;A6ej8S?ClhgDB +s4@;M;u6Ro:U'lu7Jd)aFnPe6-N4#E&cQqM!<*'!*W?iL!<*#uU%nZeB)W/:#Q"N#"8`H)MYR5N_u:PP +!;lir+9"%p"o&)s,l[*%s8KV,!<.6B4nSgS_YX]>"8`)t#Q"l-bkV5;?Maa%!WFMH;#XDm2Z<dT!<*W1eaib> +cMe^V!<*Z27/eM3!rDus,6%*)s8Kq8)>F42+9"%p"o&)s,l[*, +s/,hq^A\35!<**"?iG9HMZ/V7V>d@kXS]m6bPTulkPjcGmec_E +s4@;Mli%au!<.k^s8GIa!<.-6s8FA<!<-L-nb`@cec$ik!<+/4s8K\.!<,^`s8MWh)>aC6 +8-)7Pro<nUrqHE%rY,//r^uk`rjqt,rYkb9rWN41rg3VmrpBU_raG[(rj_P!rk&%-rYPRHp&G$Mr\XKPrc%H. +r\jWRr[e&irr)`orlb9dqZ-V+q#C?brYbS5r^d%Kqu?Zirj_q@qZ-Uf +r;Wbrro*hpqZ-U]rcA'oqhkBCqkjA(qni?_rn7;*qs+1Nrq??c +m/PT8rjMe-qZ-Vc[f?=qqZ-V<p&G"<p]1;po)J^Ap]1<Hp&G$(qZ-Uio)J]:qZ-Ut +!<*#urpp*gd/F[W!<*'!i;!?O](c:)(&l2@s8HI(!<0M!s8I]K!</#Is8LLE!<+qMs8K"p!<*N.g@G:CY584u +)#4.1I/<pC=T8<js8LCE')hn1!rh*Y +s8T2#roj>-qZ-U;rc%jfqhkB;qkj@oqni?Sqq:u-qs+1Rrq??f +m/PK5rg!?\rW<)!\c;XtqZ-V<p&G"<qZ-Ujm/R&&qZ-W0p&G$(qZ-Uip&G$OrX&Q(rXo.o +!<;Hdrb_N4rdjkErjqk)rh&QWraG[(rj_P!ral'JrZ(pun,NCarW2uurZ1\3rZh:?rgiNXrr)g?qZ-WJrr;uX +rX&Q(rXo.om/R'%qZ-VH +!WW2's8MKd0DbbK(B/(JH2EKuNW,aNVZ+4)_Z&'^g&C47lMg/IpAY!V +s3CZDJboHH"oc!Ds8GIa!<.-6s8FAB!<0Fns8GRd!<0%ls8K\.!<,^cs8Jej!<,sr +s6]jcZMOY$/GT8E]))L,(B4="s8HI(!<0LXs8K_/!<+#6s8M3Y!<*-#n*L)R_Y]Mqg]%6PU\b&j<9aG^ZMOY$ +/-5eN +ZN'prr]0iUrXf'Arce?uqhkBEqkj@uqni?Sqq:u+qs+1MqtB:S +bQ%QYqZ-U&rk-#Gr^H\arcRo6r[.LBrm'm1raG[(rhT5erk/+.r_<(crdFYDrc\8$ +mH"8urW<'!rWrN&qu?Z,qZ-U^l2U`kqZ-W*j8],Jrm1SIrf@%crW;rsrZ1e6rl"[6r\`F0rdFYDrc[Pe +rn%,NrW)p' +!WN&urjMk+oDV/T!<*B*A,^WMM#3)/Qi!ZZX8]s7_Z%IPebe&!kkjZEp&=[a +q!%h%s8N#s>5J=!"ob".s8GIa!<.-6s8FAB!<2'Gs8HI(!</ees8K\.!<,^cs8H'k +!9!qWp&"dg]))L,=6]ba@J^'(\Es7pXo;Q()sIA%*Vf[6UAFri:YPjJ<n%*M +p%8=X\c;Zgr\+-KrWiF.rcJ-pqhkB9rh]Ukrhob.qni?Xqq:u+qs+1MqtC$d +l2Sj)rqcUsp]1;6rr'q<r^H\arcRo6r[.LBrp9"OraG[(rhT5erk/+.r_<(cr\jBK +i;ilFqu?Z,qZ-Usl2U`kqZ-W*o)J^Pr^?2TrYPQ/rhTDkrZ1e6rdjqHraOU]r\i7+ +!Uf@Um_&T!aSm%R!<*?)=oNOBL\lu.OoD3SVZ+"#_Z%UQg&B_)kkjZEp&=[a +pZDLms8IKB!<,Xjo#q(47Jd)aFnPe6-MmfBm-OcO@J^'(V"Oce]__^.:%ePc:&=qi +IJq4Fa8Yu5s8KV,!<-'as8HI(!<0M$s8N#s6i-l_#l[HqOoEN&m/-h^o_SXf*Vf[6Oo#.X<SIKP:&=qiIGMpE +qtgBj^]4;2rWrB$rY,9@rcJ-oqhkB6rhTFgriu@;rl"fdqq:u/qs+1MqtC$d +k5W3rrhKGrqZ-UIrnPg!r^H\arcRo6r[.LBrp9"OraG[(rhT5erk/+.r_<(crc@r:rdXnH +f`1r^qZ-Usl2U`kqZ-W*p&G#rqZ-U+rlFR.rp0F]rZ1e6rjVb)r]'0Brp'C1rp]perc@r:rdW]& +`;fi7rdFPArZD,Src\9rqhkB5rhTFgric+6rm:PqrndP;rp0RVrq??c +j8Zdlrkn^JqZ-U'rg!K^eGoM:qZ-V<p&G"<qZ-W^m/R&nqZ-Vkp&G$(qZ-Uip&G#[qZ-Un +rVu9brp9N;rhT>hrjqt,r`A@araG[(rj_Y$rdXeFrb(Ttril8"rZ1e6rn[GOrXJl!m/R&]qZ-W@rr;tdqZ-Un +l2UbLqhP0H +!WW2?s8L^N3;<LQ0)fegH2`ZtMZ/Y8U\gqfY5Z97_Z%gWg&Bb*l20cFoDA7\ +qW%Uds8LgQ.JNoB7/l/ss8GIa!<.-6s8FAB!<2?Os8HI(!</ees8K\.!<,^cs8LIG!WE)u"odH\ +s6]jcE;KY7J,''C]))L,=6]ba@J^'(\Fon$@J^'(N9pTDC&7o0*Vf[6rVe/@!</GUs8M<_#lXi')#jO6s8LIG +!WE)u"odKIs8I!7!<.HK +s8U@Drr2nXrX&H%rW<'`rc.pbpko'6rhTFgriH+7qni?Upt>Z.qs+1LqtC$a +i;^7crqHD2rW2lrrXSpugAh.@qZ-V<p&G"<qZ-W^m/R&nqZ-Vkp&G$0qZ-UMo)J]!qZ-Ur +!;cfoqssddao2MD!<*-#gA(^I]))L,=6]ba@J^'(\Fon$M>I;P9^i#\M>dPQ!<+#3s8K.t!<+&=h=^gIrr,gm +!<-F%s8HO*!<-$uqssddao2MD!<*-#g&_6R +d/X+%r]^)WrY,98rc8!hpko':rh]LhriH+7qni?Tpt>Z,qs+1Iq"F^c +i;^%]rk\RNp]1:drnlZ6r^H\arcRo6r[.LBrp9"OraG[(rhT5erqHBtqZ-VFrjVm]qu?Z]rXo#- +!'^KK5Q8P!nc&IcfD^F%"oA<!L\:]H]))L,=6]ba@J^'(\Fon$bPhP>!<-C*_>aE4h#<rF:]:@n#lY21!<*3% +hu<HHs8G"T!<*o9U&NaEn,C6(6i-l_(B3Cis8M?`&c2S-5Q8P!nc&IcfD^F%"oA<! +L]%2's8MopPPu!c!<+eRD>n_XLA6Z*ReWcZZ2VT:_Z%[Pg&C%,lMgGQpAXpE +s/l>#o);DZ!<*6&F8kUis8GIa!<.-6s8FAB!<2?Os8HI(!</ebs8GI[!<.]Is8KV/ +(B"72!<*#u#PA)r<W<!js8KV,!<-'as8HI(!<0M!s8I'3!<*9!!<+)>c2LrB!<+SFs8M-Z3U$PC"TH()s8KV/ +(AIn/!WE>s!<-!t +rqufLs8K>'.JNoB&,oW/EW1F^MZ/S6T(o2^[.qN;b5U&jg&Bt*lMgAOpAXmA +s/5nrPPu*f!<*W1NrJk@s8GIa!<.-6s8FAB!<2?Os8HI(!</ebs8Kt9)#++1L%YKFkl+0S +!:U!f(B0Eprpp*g]))L,=6]ba@J^'(\FT\!q>PjB#5%uq!rc!pli-q`bl/1N!<+SCs8MloC]4M.!<,jpfBiP: +kl+3C!<*c5OT,7T +s53kUbPja!!<+VMD#SVWL%pQ)P5_6RVZ*Lm\bO&@c1ouki:uU:o(_qX +rn@CJs8L7A;>pao!<+2AWL3_bq>StE^AcLYqX=Fa +h#Z?fri5sBrc.prrjMh'VuQbRrhKI<rd=^7ro<\Orp'Kfri5tOn,NC^rlY5+rfd>krnu`7rn[RRrcnE^rf$ib +rql<e +jo>><r`]:%p]1:4r`T5?rdFd&qhkB3rgW\[ri5t2qni?MrmCMoro!S:rpfdWrr(IK +^]4<3rpKdArltGTri?$ereg]"rb)4(r]gB?o`4tJrhKJfJc>cN +s+13$s6K^adJdhY#P\;u&cPQ)EW1:`LA6Z*OoD-NVZ*n#_#)"J_uA-[g&C"+lMg;JpAY$? +s6Tdbq>TUWf`&qj[f3-&Q2ZI9F8f\K;Z8u]1&`<p&,lUl!<+)>aSs$TL&NFl!<*Z2FT1$K +s+13$s7H?jq#7&f3qWLP$3!9jDuOt[L%pQ)MuK4@VZ*Ro](j/Aa8XWdg&B_)jnS-?nG)_V +r6bQ;s8Mur2#[im!<+,?hu<ZTmf(K1Z2S\@)YF+0!WGOeY5\<Y +s+13$s8)cpg\u<o'D2A)"o^FZC]8JUK(t6&MuK%AV"ghdYl;H5_Z%gTg&Bb*kP4?Ao(_qX +qp,64s8Ib`!<+,?i;!?OoD[A@^](22FoF)o"8)Zn)ZG6c +jHT[qs+C=P +qtgBjriQ/grW2ZlrY5>urbMLUrdb!)pko'7rhB1bri,n-pqm$Mrm^_rrn[S;qs+1Hrq-!Zrqst> +o)J^WrX6I@rZV:!o)J^`ro3q$rjVm're^VHrY"l(rWE-rrj_t, +Sc=9@M?!S8rdFkd +)?:]K!<**".K3EJErLCaK_:6%OT(mIVZ*Lm[Jmu:_Z%dYf_aA$gA^+,lMg/Lp&"I^p\t*3 +s6p!eDScDQ+o^Hes8Mlol2K<6_u@"AU&L2RAH"%W!VHHl,Q<Q! +l_FK2s-!E]rr0G,:]:Io +!;Z]p&H4lmC&W5RIf>/rMZ/_:SbT)]VuF"$^\G\F`r=K_g&Be+kkOHBmeHMTq#:93 +s6p!ehYmVu!<+2Aio^:?rVl?diVq4'_>^_=U]-\\If;_6%J9`##Q@p+[f5p# +s+13;s8LRJL]/Lj!!**$ +!!3'Er_i`7rd"Kqonra-rg*PWoqq_lrkA0Erl"f_p"B?)q!.kErpojXrqO8. +m/R&bb5hMdro2l9rr2okroa:8rm(MWrilC"rgj%Mra,RKnc8Xmr]^=4rl"g4 +\Gq-[V#UGRrh'0orYY2+rXAcd +!G,gBAc?cMIK##pMZ/\9S,T8ZVZ*LmYPu0/_Z%LQcMlJkg&Bh,kP4?Amf)nSpAXs% +s6TdbaNaeb,lZiUs8MopnG_MJg&B1o_#Cb@WrAalQi;=14oPfW!<*E+9E'tNdJj-` +s+13Ss8MEbXSuo4-0tX2+9#%7DuOt^ +JUmfPre^E-repc@rh/q]ri,n(rkJ-Crlb;mpt>Z$roEk>rp0RSq"F^]rr'D- +l2U`Fe,]InroDK,rr)iirpB^Frn%.mrl"fJric<urg`tIra,R]rY"PtrY>E6rgWoD +c2W@p]`8!(rji#Nr\FHSmf<=krZ_>+raPkIrd=^" +r/1?.rf@&HrhT4aric=3otp^Hrlb;lpt>Z$ro3V9rpKdYq"F^` +ZiBClrlb:&f)YdrroD0#rqcWbrp'LArn%.qrl4rPrj;[(rh9=Vrf$i$r_WSFrXA,nrZV8Pri#h] +g&HX'aT)8:rl4qhr]gAdmf<=hrZ(nur`B)<rce?jre:$& +!K2j9MuJq>TCo)\WW'7'^@fAB`r=<`fD+%ugA^(1l1jQCmJcbQpAXgc +rNQ=ps8N#sZMm&;!<+>Ejhh&srVlWlnc%ePiVqR1eGdVi_u@4GY5Y9sS,SNHMZ.So8cC%8#O_Zl!WFPI;Z:n> +Sc6P+ +l0JA#s4[MPp\r\AY5X7V@fALh%I=)o(B-,h;>tG3G5cphKDp_uMZ/Y8R/s(X +!2K4ariH+/rk\BHrkn`Xrm^VornIG2roj.Brp9XTp%JC] +WrMtrrqHD[r[7@=rXIccr[.X+\c;[-rqHE]rp'LCrnRM)rm(M_rkAB=ri,mmrg`tQrf-o7reLJdr^-T*rWD9_ +rX\ucr`fAQrhf\=rpg'h +JcG3=rqucOrjVlhrbML&rZM1AjoGAlr\"1Crb;@Srd=]sre^3'rf-oArgWn] +q54+frhob$rk8!Arl4r_rn$hrrn[S7p$2PBrpf[TrqZQm +VuQb]rdat_o`4t@rg`uVrY+Dor[7^-YlF_"rq69[rp0RGrnm_/rmLefrk\TDriQ0trhf[hrgWnOrf-o7re18Y +r]:#qrWCsV +!#P_R)#c_uAH%JcYl<2PlMgLKs8Mopn,D;F_#Bf%FoG29.K0P-!<*E+-iQU7A,^TLHN&KpM"6H&MuJn=RJroK +V?*d" +!3H1/rkS3DrlP/fp"B>uro*k>p$2PCrpf[TrqQKk +U&Y)to`4tWrjDb)qu?YDklC]2ro^3Zrql]grpp'UrosFArnIG'rltG\rkSNErj)O(qkj@drgEbJrepc5reLJn +r`f@kr\FHqrX\u/ +nGqhSrW<'0rYthar\OO<r_3;nrac"Ird=^$rg!JVriQ11rl"fNrj)O#rgNhHrdt,lrb;@;r_`Y`r]0s/rZM1S +rWq*UrWiE>r[Ih-r_!/orbqd\rd=]qreC!$repc;rg<\Wrh]1_ri5t'rji$D +!Q)_J_Z%LQc2Q;eg&Be+j7;L7mf)hNpAXgc +r1!``!<*-#>5le;s8M9^#O_Zl.K8M(s8N#squ6?ho`"=Yli-&GhYu4-df.>e_u@OP^](eCZ2Ud&VZ*FkTDk5W +OoC:6MZ/A0J,X3^<W5;`/cH[h +$NUVCJH5<BrWE-6r[%P%r^QlgrbDFVrd+Qmrdk'&re^!!rfI,Grgs+cntuDbrilC2rkJ'A +!5e`QrlG)ep"B>uro!e<p$2PCrp]p[p%JC[rqr&] +rXSpKro32BrabR"r[Ij1Q2gj]rqQKdrpg!Sroj@ArnIG)rmUklrl=oQrkAB@rilC$rhf[krgs+Wrfd>C +repH,reUW0 +!JZ@.Hi@XV;#WTV.fL[l*W?oT')i@>#Q=e8!<*0$$iU_:(&f0O+T<_e1&aN=;uUA-FoH^dIK"fsL&Qqn +MZ/P5O8b@BR/WWTV"1D^W;a""[f3u/_Z%UTc2lDC +!7Ur"p"B?!ro3qAp$2PErpoXRrqcWm +O8o4Lj8],0rW2cor[Rp2N;rnVrqcWgrq-3Xrp'LErndY.rn7;&rmLehrl4iPrk/6<riZ7!pnn%drh'1[rg3VI +!07/AO8b(1MZ/G2LAli)K)U?#JGt&tHiA-dD#S#F?N+(+;Z9>g7/fCL3;t`52?#]:5lO7P9E%ig=T2Y+Ac?NF +ErL=_HiAElIK"`qJGt-!K)UE%K`6eiMZ/Y8OoC^HRf8rYU[4lWVuEgt[/R`,_Z%RSbPorh +fD4+rg&Bb*hu;d2lMg,KnG`(QpAXjd +qhG.,s8G[g!<+MJl%/j7s8Mrqq>U'dnc%nSlMfrFir7d2g&BV&d/M5f`W!aR_>_(G[f3T3Y5YEp +VYm=jU]-nbS,S`QP5^KhMZ/J3M#N2/M#N7MMZ/V7OoCXFRf8oXUAh"RVZ*OnXo>U)[Jmf;_",AA`W"'[d/MYf +g&B\+ +hVJ7hro3q?o'65ArpoXRrqZQlJc>`M +h>dJhrW)pKrp#(7p](6krqcWfrq$-Wrp0IHroO.<rn[J)rmh"orlY5Xpqm$Grk/6@ +!42d6[/R?0Xo><mVZ*FkUAghbTDkG]SGo#WRf8`PQN!-JPP^LAO8b.<N;eb1MYi>2NW+t;OT(CAP5^^FQ2[-L +R/WNQRf8iVT)PA]T`1YaV<OlVW;`mtYl;$/\c08@_!Jr;_u@gXci2J`g&Be+ir8*< +lLaB@m/HMRo_%qWp\t&@ +s7cQIs8HC)l@K!$s8Mopq#:!do`"C[mf)POlMg&IjSn*:g\]\'eGdhoc2Pia`r<jU +_Y1kG_#D"G\Gii6Yl:^&Vp;1=V#I40VZ*LmX8]@&Zi7H5]DfV1_Z%IP`r=*Zc2Q)heF2)ih#?72jo4N9 +l2^,Kli->Oo)A=QpAXmerIP"= +s+13[s8MurqYp6dpAX^`nG_hPlMg#Hj8Rs8h"B># +eH+4NrmLekrlb;_rl+HFrkJHGrk/->rj_s9qmHF1rj)O.rilC*riQ1$ri5ssrhoamrhoapri5suriH+%ric=* +rj)O1rjDa6rjVm;rjr*@rk8<FrkIU4rl+lYrlb;drmLerl.Q'jro!e9roiq<rp0ROrp^$] +oDnOPpAXjdqYpJF +s6K]9s0)J%rr2foq>U-cpAX[_nG_eOlMfuGjSn0< +hZ2I5h;/(ap"B>srmq(srm(Mdrl>#VN5GS4rl>#]rm(Mkrmq)$l.Q'jrnRM1ro3q;roih9rpB^Srq,pX +qY'p`rqcWmJcFX- +JcDMFrr)inrqQBarq69]rpTjQ +qWe"Droj@Dro=":rnm_1rn@%urn.5%qpk\qrmLenrm:Pfrlt>`rlY5]qoA]Tpr*0NqoA]WrlY,]rlt>crm:Pj +rm^hqrn%/%l.Q'irnRM0ro*k;roX4El0A97rp]pYn+QbT +!VuNkq>U<krdk+# +s+13:s8MurqYp<fpAXaa +nc81\naZVIrpB^Oo'65<roO.=ro*k5rnECbrnIG/ro!e9roX4Dk3Ds4rpKdSrpg!Zrq5aRrqZQjrr2iq +JcF'r +JcCZ.rr)imrqHKe +oCi1Urpp'XrpKdQrp0%<qrmq>roO%;qr7M3rnmV0qqUu$rnRM/qqh>1qr.P7ro3q;roEt<roa1Bj6HX1 +rpB^Rrpg!Yrq,@HrqQKirr)?d +JcF'r +JcC<$ +!WW3!r;QTmqYp<iq"".Xp&=U_o)A.Xmf)SPl]UQ4li-;Nmf)_To)A:ApAXjdq>U6ir;QZU +s+13rs+13$s6]jcrr2lqqu6Hkq#:$SpAXa[o`"IZo)A1VnGD\Omf)VKm/HDLmf)\MnG_tTo)A7Uo`"OApAXjdq>U9gr;Q]D +s+13rs+13$s4IANrVl`lqYp<ipQbILp\sseqYpBkrVlf0 +s+13rs+13$s1870rqQHhr:p0dqYp<`q"smdqYpBkqYU0hr;QZor;QZl +rh'4As3L^rs+13$s+13$s3L^rs+13$s+13$s3L^rs+13$s+13$s3L^rs+13$s+13$s3L^rs+13$s+13$s3L^rs+13$s+13$s3L^rs+13$s+13$s3L^q~> +%APLeod +EI +ep +end +%%Trailer +%%EOF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fig/code.graffle Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,575 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CanvasColor</key> + <dict> + <key>a</key> + <string>1</string> + <key>w</key> + <string>1</string> + </dict> + <key>ColumnAlign</key> + <integer>0</integer> + <key>ColumnSpacing</key> + <real>3.600000e+01</real> + <key>GraphDocumentVersion</key> + <integer>2</integer> + <key>GraphicsList</key> + <array> + <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>Head</key> + <dict> + <key>ID</key> + <integer>8</integer> + </dict> + <key>ID</key> + <integer>11</integer> + <key>Points</key> + <array> + <string>{287.357, 108}</string> + <string>{360.284, 140.935}</string> + </array> + <key>Style</key> + <dict> + <key>stroke</key> + <dict> + <key>HeadArrow</key> + <string>FilledArrow</string> + <key>LineType</key> + <integer>1</integer> + <key>TailArrow</key> + <string>0</string> + </dict> + </dict> + <key>Tail</key> + <dict> + <key>ID</key> + <integer>3</integer> + </dict> + </dict> + <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>Head</key> + <dict> + <key>ID</key> + <integer>9</integer> + </dict> + <key>ID</key> + <integer>10</integer> + <key>Points</key> + <array> + <string>{286.894, 72}</string> + <string>{360.228, 39.0346}</string> + </array> + <key>Style</key> + <dict> + <key>stroke</key> + <dict> + <key>HeadArrow</key> + <string>FilledArrow</string> + <key>LineType</key> + <integer>1</integer> + <key>TailArrow</key> + <string>0</string> + </dict> + </dict> + <key>Tail</key> + <dict> + <key>ID</key> + <integer>3</integer> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{351, 9}, {72, 36}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>9</integer> + <key>Shape</key> + <string>Circle</string> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\mac\ansicpg10001\cocoartf102 +{\fonttbl\f0\fswiss\fcharset77 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs24 \cf0 Output Interface}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{351, 135}, {72, 36}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>8</integer> + <key>Shape</key> + <string>Circle</string> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\mac\ansicpg10001\cocoartf102 +{\fonttbl\f0\fswiss\fcharset77 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs24 \cf0 Output Interface}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{351, 72}, {72, 36}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>7</integer> + <key>Shape</key> + <string>Circle</string> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\mac\ansicpg10001\cocoartf102 +{\fonttbl\f0\fswiss\fcharset77 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs24 \cf0 Output Interface}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{54, 72}, {72, 36}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>6</integer> + <key>Shape</key> + <string>Circle</string> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\mac\ansicpg10001\cocoartf102 +{\fonttbl\f0\fswiss\fcharset77 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs24 \cf0 Input Interface}</string> + </dict> + </dict> + <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>Head</key> + <dict> + <key>ID</key> + <integer>7</integer> + </dict> + <key>ID</key> + <integer>5</integer> + <key>Points</key> + <array> + <string>{315, 90.4191}</string> + <string>{351.002, 90.2095}</string> + </array> + <key>Style</key> + <dict> + <key>stroke</key> + <dict> + <key>HeadArrow</key> + <string>FilledArrow</string> + <key>LineType</key> + <integer>1</integer> + <key>TailArrow</key> + <string>0</string> + </dict> + </dict> + <key>Tail</key> + <dict> + <key>ID</key> + <integer>3</integer> + </dict> + </dict> + <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>Head</key> + <dict> + <key>ID</key> + <integer>3</integer> + </dict> + <key>ID</key> + <integer>4</integer> + <key>Points</key> + <array> + <string>{125.999, 90.1326}</string> + <string>{180, 90.0737}</string> + </array> + <key>Style</key> + <dict> + <key>stroke</key> + <dict> + <key>HeadArrow</key> + <string>FilledArrow</string> + <key>LineType</key> + <integer>1</integer> + <key>TailArrow</key> + <string>0</string> + </dict> + </dict> + <key>Tail</key> + <dict> + <key>ID</key> + <integer>6</integer> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{180, 72}, {135, 36}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>3</integer> + <key>Shape</key> + <string>Rectangle</string> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\mac\ansicpg10001\cocoartf102 +{\fonttbl\f0\fswiss\fcharset77 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc + +\f0\fs24 \cf0 Code Segment}</string> + </dict> + </dict> + </array> + <key>GridInfo</key> + <dict/> + <key>HPages</key> + <integer>1</integer> + <key>ImageCounter</key> + <integer>1</integer> + <key>IsPalette</key> + <string>NO</string> + <key>Layers</key> + <array> + <dict> + <key>Lock</key> + <string>NO</string> + <key>Name</key> + <string>1 レイヤー</string> + <key>Print</key> + <string>YES</string> + <key>View</key> + <string>YES</string> + </dict> + </array> + <key>LayoutInfo</key> + <dict> + <key>AutoAdjust</key> + <string>YES</string> + <key>MagneticFieldCenter</key> + <string>{0, 0}</string> + </dict> + <key>MagnetsEnabled</key> + <string>YES</string> + <key>PageBreakColor</key> + <dict> + <key>a</key> + <string>1</string> + <key>w</key> + <string>0.333333</string> + </dict> + <key>PageBreaks</key> + <string>YES</string> + <key>PageSetup</key> + <data> + BAt0eXBlZHN0cmVhbYED6IQBQISEhAtOU1ByaW50SW5mbwGEhAhOU09iamVjdACFkoSE + hBNOU011dGFibGVEaWN0aW9uYXJ5AISEDE5TRGljdGlvbmFyeQCUhAFpFpKEhIQITlNT + dHJpbmcBlIQBKxBOU0pvYkRpc3Bvc2l0aW9uhpKEmZkPTlNQcmludFNwb29sSm9ihpKE + mZkOTlNCb3R0b21NYXJnaW6GkoSEhAhOU051bWJlcgCEhAdOU1ZhbHVlAJSEASqEhAFm + nSSGkoSZmQtOU1BhcGVyTmFtZYaShJmZAkE0hpKEmZkPTlNQcmludEFsbFBhZ2VzhpKE + nZyEhAFjngGGkoSZmQpOU1NhdmVQYXRohpKEmZkAhpKEmZkNTlNSaWdodE1hcmdpboaS + hJ2cn50khpKEmZkUTlNWZXJ0aWNhbGx5Q2VudGVyZWSGkoSdnISEAXOfAYaShJmZCU5T + UHJpbnRlcoaShISECU5TUHJpbnRlcgCUkoSZmQhwaGFzZXJscIaGkoSZmQ9OU1NjYWxp + bmdGYWN0b3KGkoSdnJ+dAYaShJmZC05TRmlyc3RQYWdlhpKEnZyrnwGGkoSZmQ1OU011 + c3RDb2xsYXRlhpKjkoSZmRVOU0hvcml6b25hbFBhZ2luYXRpb26GkoSdnKufAIaShJmZ + Ck5TTGFzdFBhZ2WGkoSdnISXl4J/////hpKEmZkMTlNMZWZ0TWFyZ2luhpKEnZyfnSSG + koSZmQ5OU1BNUGFnZUZvcm1hdIaShISEBk5TRGF0YQCUl4EfGIQHWzc5NjBjXTw/eG1s + IHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CjwhRE9DVFlQRSBwbGlzdCBQ + VUJMSUMgIi0vL0FwcGxlIENvbXB1dGVyLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6 + Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgo8cGxpc3Qg + dmVyc2lvbj0iMS4wIj4KPGRpY3Q+Cgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9y + bWF0LlBNSG9yaXpvbnRhbFJlczwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBwbGUu + cHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmlu + dGluZ21hbmFnZXI8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQu + aXRlbUFycmF5PC9rZXk+CgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFw + cGxlLnByaW50LlBhZ2VGb3JtYXQuUE1Ib3Jpem9udGFsUmVzPC9rZXk+CgkJCQk8cmVh + bD43LjIwMDAwMDAwMDAwMDAwMGUrMDE8L3JlYWw+CgkJCQk8a2V5PmNvbS5hcHBsZS5w + cmludC50aWNrZXQuY2xpZW50PC9rZXk+CgkJCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmlu + dGluZ21hbmFnZXI8L3N0cmluZz4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tl + dC5tb2REYXRlPC9rZXk+CgkJCQk8ZGF0ZT4yMDAzLTAyLTA0VDIxOjUwOjM0WjwvZGF0 + ZT4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4K + CQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9k + aWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9u + PC9rZXk+Cgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRv + cjwva2V5PgoJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3RyaW5n + PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8 + YXJyYXk+CgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1h + dC5QTU9yaWVudGF0aW9uPC9rZXk+CgkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgoJCQkJ + PGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNsaWVudDwva2V5PgoJCQkJPHN0cmlu + Zz5jb20uYXBwbGUucHJpbnRpbmdtYW5hZ2VyPC9zdHJpbmc+CgkJCQk8a2V5PmNvbS5h + cHBsZS5wcmludC50aWNrZXQubW9kRGF0ZTwva2V5PgoJCQkJPGRhdGU+MjAwMy0wMi0w + NFQyMTo1MDozNFo8L2RhdGU+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQu + c3RhdGVGbGFnPC9rZXk+CgkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQk8L2RpY3Q+ + CgkJPC9hcnJheT4KCTwvZGljdD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3Jt + YXQuUE1TY2FsaW5nPC9rZXk+Cgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50 + aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFu + YWdlcjwvc3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJy + YXk8L2tleT4KCQk8YXJyYXk+CgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJp + bnQuUGFnZUZvcm1hdC5QTVNjYWxpbmc8L2tleT4KCQkJCTxyZWFsPjEuMDAwMDAwMDAw + MDAwMDAwZSswMDwvcmVhbD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5j + bGllbnQ8L2tleT4KCQkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwv + c3RyaW5nPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lm1vZERhdGU8L2tl + eT4KCQkJCTxkYXRlPjIwMDMtMDItMDRUMjE6NTA6MzRaPC9kYXRlPgoJCQkJPGtleT5j + b20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI+ + MDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk+Cgk8L2RpY3Q+Cgk8a2V5PmNv + bS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxSZXM8L2tleT4KCTxkaWN0 + PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJPHN0 + cmluZz5jb20uYXBwbGUucHJpbnRpbmdtYW5hZ2VyPC9zdHJpbmc+CgkJPGtleT5jb20u + YXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRp + Y3Q+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxS + ZXM8L2tleT4KCQkJCTxyZWFsPjcuMjAwMDAwMDAwMDAwMDAwZSswMTwvcmVhbD4KCQkJ + CTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jbGllbnQ8L2tleT4KCQkJCTxzdHJp + bmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3RyaW5nPgoJCQkJPGtleT5jb20u + YXBwbGUucHJpbnQudGlja2V0Lm1vZERhdGU8L2tleT4KCQkJCTxkYXRlPjIwMDMtMDIt + MDRUMjE6NTA6MzRaPC9kYXRlPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0 + LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJPC9kaWN0 + PgoJCTwvYXJyYXk+Cgk8L2RpY3Q+Cgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9y + bWF0LlBNVmVydGljYWxTY2FsaW5nPC9rZXk+Cgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBs + ZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc+Y29tLmFwcGxlLnBy + aW50aW5nbWFuYWdlcjwvc3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tl + dC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk+CgkJCTxkaWN0PgoJCQkJPGtleT5jb20u + YXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsU2NhbGluZzwva2V5PgoJCQkJ + PHJlYWw+MS4wMDAwMDAwMDAwMDAwMDBlKzAwPC9yZWFsPgoJCQkJPGtleT5jb20uYXBw + bGUucHJpbnQudGlja2V0LmNsaWVudDwva2V5PgoJCQkJPHN0cmluZz5jb20uYXBwbGUu + cHJpbnRpbmdtYW5hZ2VyPC9zdHJpbmc+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50 + aWNrZXQubW9kRGF0ZTwva2V5PgoJCQkJPGRhdGU+MjAwMy0wMi0wNFQyMTo1MDozNFo8 + L2RhdGU+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9r + ZXk+CgkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQk8L2RpY3Q+CgkJPC9hcnJheT4K + CTwvZGljdD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LnN1YlRpY2tldC5wYXBlcl9pbmZv + X3RpY2tldDwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZv + cm1hdC5QTUFkanVzdGVkUGFnZVJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20u + YXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBw + bGUucHJpbnRpbmdtYW5hZ2VyPC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50 + LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJ + PGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUFkanVzdGVkUGFnZVJlY3Q8 + L2tleT4KCQkJCQk8YXJyYXk+CgkJCQkJCTxyZWFsPjAuMDAwMDAwMDAwMDAwMDAwZSsw + MDwvcmVhbD4KCQkJCQkJPHJlYWw+MC4wMDAwMDAwMDAwMDAwMDBlKzAwPC9yZWFsPgoJ + CQkJCQk8cmVhbD43LjgzMDAwMDAwMDAwMDAwMGUrMDI8L3JlYWw+CgkJCQkJCTxyZWFs + PjUuNTkwMDAwMDAwMDAwMDAwZSswMjwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxr + ZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jbGllbnQ8L2tleT4KCQkJCQk8c3RyaW5n + PmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmluZz4KCQkJCQk8a2V5PmNvbS5h + cHBsZS5wcmludC50aWNrZXQubW9kRGF0ZTwva2V5PgoJCQkJCTxkYXRlPjIwMDMtMDYt + MjZUMDQ6NTU6MzBaPC9kYXRlPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tl + dC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9k + aWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5Q + YWdlRm9ybWF0LlBNQWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtl + eT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5j + b20uYXBwbGUucHJpbnRpbmdtYW5hZ2VyPC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxl + LnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+ + CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUFkanVzdGVkUGFw + ZXJSZWN0PC9rZXk+CgkJCQkJPGFycmF5PgoJCQkJCQk8cmVhbD4tMS44MDAwMDAwMDAw + MDAwMDBlKzAxPC9yZWFsPgoJCQkJCQk8cmVhbD4tMS44MDAwMDAwMDAwMDAwMDBlKzAx + PC9yZWFsPgoJCQkJCQk8cmVhbD44LjI0MDAwMDAwMDAwMDAwMGUrMDI8L3JlYWw+CgkJ + CQkJCTxyZWFsPjUuNzcwMDAwMDAwMDAwMDAwZSswMjwvcmVhbD4KCQkJCQk8L2FycmF5 + PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jbGllbnQ8L2tleT4KCQkJ + CQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmluZz4KCQkJCQk8 + a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQubW9kRGF0ZTwva2V5PgoJCQkJCTxkYXRl + PjIwMDMtMDYtMjZUMDQ6NTU6MzBaPC9kYXRlPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnBy + aW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2Vy + PgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBs + ZS5wcmludC5QYXBlckluZm8uUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtl + eT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5j + b20uYXBwbGUucHJpbnQucG0uUG9zdFNjcmlwdDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5h + cHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxk + aWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVBhcGVyTmFt + ZTwva2V5PgoJCQkJCTxzdHJpbmc+aXNvLWE0PC9zdHJpbmc+CgkJCQkJPGtleT5jb20u + YXBwbGUucHJpbnQudGlja2V0LmNsaWVudDwva2V5PgoJCQkJCTxzdHJpbmc+Y29tLmFw + cGxlLnByaW50LnBtLlBvc3RTY3JpcHQ8L3N0cmluZz4KCQkJCQk8a2V5PmNvbS5hcHBs + ZS5wcmludC50aWNrZXQubW9kRGF0ZTwva2V5PgoJCQkJCTxkYXRlPjIwMDAtMDctMjhU + MjI6NTc6MDRaPC9kYXRlPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5z + dGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgoJCQkJPC9kaWN0 + PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBl + ckluZm8uUE1VbmFkanVzdGVkUGFnZVJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5j + b20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20u + YXBwbGUucHJpbnQucG0uUG9zdFNjcmlwdDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBs + ZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0 + PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQ + YWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw+MC4wMDAwMDAwMDAw + MDAwMDBlKzAwPC9yZWFsPgoJCQkJCQk8cmVhbD4wLjAwMDAwMDAwMDAwMDAwMGUrMDA8 + L3JlYWw+CgkJCQkJCTxyZWFsPjcuODMwMDAwMDAwMDAwMDAwZSswMjwvcmVhbD4KCQkJ + CQkJPHJlYWw+NS41OTAwMDAwMDAwMDAwMDBlKzAyPC9yZWFsPgoJCQkJCTwvYXJyYXk+ + CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNsaWVudDwva2V5PgoJCQkJ + CTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3RyaW5nPgoJCQkJCTxr + ZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5tb2REYXRlPC9rZXk+CgkJCQkJPGRhdGU+ + MjAwMy0wMi0wNFQyMTo1MDozNFo8L2RhdGU+CgkJCQkJPGtleT5jb20uYXBwbGUucHJp + bnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+ + CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFwcGxl + LnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQk8ZGlj + dD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJ + PHN0cmluZz5jb20uYXBwbGUucHJpbnQucG0uUG9zdFNjcmlwdDwvc3RyaW5nPgoJCQk8 + a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJh + eT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5Q + TVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQkJCQk8YXJyYXk+CgkJCQkJCTxyZWFs + Pi0xLjgwMDAwMDAwMDAwMDAwMGUrMDE8L3JlYWw+CgkJCQkJCTxyZWFsPi0xLjgwMDAw + MDAwMDAwMDAwMGUrMDE8L3JlYWw+CgkJCQkJCTxyZWFsPjguMjQwMDAwMDAwMDAwMDAw + ZSswMjwvcmVhbD4KCQkJCQkJPHJlYWw+NS43NzAwMDAwMDAwMDAwMDBlKzAyPC9yZWFs + PgoJCQkJCTwvYXJyYXk+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNs + aWVudDwva2V5PgoJCQkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwv + c3RyaW5nPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5tb2REYXRlPC9r + ZXk+CgkJCQkJPGRhdGU+MjAwMy0wMi0wNFQyMTo1MDozNFo8L2RhdGU+CgkJCQkJPGtl + eT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRl + Z2VyPjA8L2ludGVnZXI+CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJ + CTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5wcGQuUE1QYXBlck5hbWU8L2tl + eT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8 + L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQucG0uUG9zdFNjcmlwdDwvc3Ry + aW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+ + CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBh + cGVySW5mby5wcGQuUE1QYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPkE0PC9zdHJp + bmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNsaWVudDwva2V5PgoJ + CQkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50LnBtLlBvc3RTY3JpcHQ8L3N0cmluZz4K + CQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQubW9kRGF0ZTwva2V5PgoJCQkJ + CTxkYXRlPjIwMDAtMDctMjhUMjI6NTc6MDRaPC9kYXRlPgoJCQkJCTxrZXk+Y29tLmFw + cGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4xPC9p + bnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNv + bS5hcHBsZS5wcmludC50aWNrZXQuQVBJVmVyc2lvbjwva2V5PgoJCTxzdHJpbmc+MDAu + MjA8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQucHJpdmF0ZUxv + Y2s8L2tleT4KCQk8ZmFsc2UvPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC50 + eXBlPC9rZXk+CgkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvVGlja2V0 + PC9zdHJpbmc+Cgk8L2RpY3Q+Cgk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuQVBJ + VmVyc2lvbjwva2V5PgoJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJPGtleT5jb20uYXBw + bGUucHJpbnQudGlja2V0LnByaXZhdGVMb2NrPC9rZXk+Cgk8ZmFsc2UvPgoJPGtleT5j + b20uYXBwbGUucHJpbnQudGlja2V0LnR5cGU8L2tleT4KCTxzdHJpbmc+Y29tLmFwcGxl + LnByaW50LlBhZ2VGb3JtYXRUaWNrZXQ8L3N0cmluZz4KPC9kaWN0Pgo8L3BsaXN0PgqG + koSZmRFOU1BNUHJpbnRTZXR0aW5nc4aShL6XgRIXhAdbNDYzMWNdPD94bWwgdmVyc2lv + bj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAi + LS8vQXBwbGUgQ29tcHV0ZXIvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5h + cHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+CjxwbGlzdCB2ZXJzaW9u + PSIxLjAiPgo8ZGljdD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LkRvY3VtZW50VGlja2V0 + LlBNU3Bvb2xGb3JtYXQ8L2tleT4KCTxkaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50 + LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJPHN0cmluZz5jb20uYXBwbGUucHJpbnRpbmdt + YW5hZ2VyPC9zdHJpbmc+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1B + cnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q+CgkJCQk8a2V5PmNvbS5hcHBsZS5w + cmludC5Eb2N1bWVudFRpY2tldC5QTVNwb29sRm9ybWF0PC9rZXk+CgkJCQk8c3RyaW5n + PmFwcGxpY2F0aW9uL3BkZjwvc3RyaW5nPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQu + dGlja2V0LmNsaWVudDwva2V5PgoJCQkJPHN0cmluZz5jb20uYXBwbGUucHJpbnRpbmdt + YW5hZ2VyPC9zdHJpbmc+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQubW9k + RGF0ZTwva2V5PgoJCQkJPGRhdGU+MjAwMy0wMi0wNFQyMTo1NDo0OFo8L2RhdGU+CgkJ + CQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQk8 + aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQk8L2RpY3Q+CgkJPC9hcnJheT4KCTwvZGljdD4K + CTxrZXk+Y29tLmFwcGxlLnByaW50LlByaW50U2V0dGluZ3MuUE1Db2xvclN5bmNTeXN0 + ZW1Qcm9maWxlUGF0aDwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQu + dGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludGluZ21h + bmFnZXI8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFy + cmF5PC9rZXk+CgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnBy + aW50LlByaW50U2V0dGluZ3MuUE1Db2xvclN5bmNTeXN0ZW1Qcm9maWxlUGF0aDwva2V5 + PgoJCQkJPHN0cmluZz4vU3lzdGVtL0xpYnJhcnkvQ29sb3JTeW5jL1Byb2ZpbGVzL0dl + bmVyaWMgUkdCIFByb2ZpbGUuaWNjPC9zdHJpbmc+CgkJCQk8a2V5PmNvbS5hcHBsZS5w + cmludC50aWNrZXQuY2xpZW50PC9rZXk+CgkJCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmlu + dGluZ21hbmFnZXI8L3N0cmluZz4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tl + dC5tb2REYXRlPC9rZXk+CgkJCQk8ZGF0ZT4yMDAzLTAyLTA0VDIxOjU0OjQ4WjwvZGF0 + ZT4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4K + CQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9k + aWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUHJpbnRTZXR0aW5ncy5QTUNvcGllczwv + a2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8 + L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmluZz4K + CQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJPGFy + cmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlByaW50U2V0dGlu + Z3MuUE1Db3BpZXM8L2tleT4KCQkJCTxpbnRlZ2VyPjE8L2ludGVnZXI+CgkJCQk8a2V5 + PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY2xpZW50PC9rZXk+CgkJCQk8c3RyaW5nPmNv + bS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmluZz4KCQkJCTxrZXk+Y29tLmFwcGxl + LnByaW50LnRpY2tldC5tb2REYXRlPC9rZXk+CgkJCQk8ZGF0ZT4yMDAzLTAyLTA0VDIx + OjU0OjQ4WjwvZGF0ZT4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0 + ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8 + L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUHJpbnRTZXR0aW5n + cy5QTUNvcHlDb2xsYXRlPC9rZXk+Cgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmlu + dC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5n + bWFuYWdlcjwvc3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVt + QXJyYXk8L2tleT4KCQk8YXJyYXk+CgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUu + cHJpbnQuUHJpbnRTZXR0aW5ncy5QTUNvcHlDb2xsYXRlPC9rZXk+CgkJCQk8dHJ1ZS8+ + CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY2xpZW50PC9rZXk+CgkJCQk8 + c3RyaW5nPmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmluZz4KCQkJCTxrZXk+ + Y29tLmFwcGxlLnByaW50LnRpY2tldC5tb2REYXRlPC9rZXk+CgkJCQk8ZGF0ZT4yMDAz + LTAyLTA0VDIxOjU0OjQ4WjwvZGF0ZT4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRp + Y2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwv + ZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUHJp + bnRTZXR0aW5ncy5QTUZpcnN0UGFnZTwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBw + bGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5w + cmludGluZ21hbmFnZXI8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNr + ZXQuaXRlbUFycmF5PC9rZXk+CgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29t + LmFwcGxlLnByaW50LlByaW50U2V0dGluZ3MuUE1GaXJzdFBhZ2U8L2tleT4KCQkJCTxp + bnRlZ2VyPjE8L2ludGVnZXI+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQu + Y2xpZW50PC9rZXk+CgkJCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8 + L3N0cmluZz4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5tb2REYXRlPC9r + ZXk+CgkJCQk8ZGF0ZT4yMDAzLTAyLTA0VDIxOjU0OjQ4WjwvZGF0ZT4KCQkJCTxrZXk+ + Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2Vy + PjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5j + b20uYXBwbGUucHJpbnQuUHJpbnRTZXR0aW5ncy5QTUxhc3RQYWdlPC9rZXk+Cgk8ZGlj + dD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxz + dHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3RyaW5nPgoJCTxrZXk+Y29t + LmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk+CgkJCTxk + aWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUHJpbnRTZXR0aW5ncy5QTUxhc3RQ + YWdlPC9rZXk+CgkJCQk8aW50ZWdlcj4yMTQ3NDgzNjQ3PC9pbnRlZ2VyPgoJCQkJPGtl + eT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNsaWVudDwva2V5PgoJCQkJPHN0cmluZz5j + b20uYXBwbGUucHJpbnRpbmdtYW5hZ2VyPC9zdHJpbmc+CgkJCQk8a2V5PmNvbS5hcHBs + ZS5wcmludC50aWNrZXQubW9kRGF0ZTwva2V5PgoJCQkJPGRhdGU+MjAwMy0wMi0wNFQy + MTo1NDo0OFo8L2RhdGU+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3Rh + dGVGbGFnPC9rZXk+CgkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQk8L2RpY3Q+CgkJ + PC9hcnJheT4KCTwvZGljdD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LlByaW50U2V0dGlu + Z3MuUE1QYWdlUmFuZ2U8L2tleT4KCTxkaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50 + LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJPHN0cmluZz5jb20uYXBwbGUucHJpbnRpbmdt + YW5hZ2VyPC9zdHJpbmc+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1B + cnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q+CgkJCQk8a2V5PmNvbS5hcHBsZS5w + cmludC5QcmludFNldHRpbmdzLlBNUGFnZVJhbmdlPC9rZXk+CgkJCQk8YXJyYXk+CgkJ + CQkJPGludGVnZXI+MTwvaW50ZWdlcj4KCQkJCQk8aW50ZWdlcj4yMTQ3NDgzNjQ3PC9p + bnRlZ2VyPgoJCQkJPC9hcnJheT4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tl + dC5jbGllbnQ8L2tleT4KCQkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdl + cjwvc3RyaW5nPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lm1vZERhdGU8 + L2tleT4KCQkJCTxkYXRlPjIwMDMtMDItMDRUMjE6NTQ6NDhaPC9kYXRlPgoJCQkJPGtl + eT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVn + ZXI+MDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk+Cgk8L2RpY3Q+Cgk8a2V5 + PmNvbS5hcHBsZS5wcmludC50aWNrZXQuQVBJVmVyc2lvbjwva2V5PgoJPHN0cmluZz4w + MC4yMDwvc3RyaW5nPgoJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnByaXZhdGVM + b2NrPC9rZXk+Cgk8ZmFsc2UvPgoJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnR5 + cGU8L2tleT4KCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50LlByaW50U2V0dGluZ3NUaWNr + ZXQ8L3N0cmluZz4KPC9kaWN0Pgo8L3BsaXN0PgqGkoSZmQ1OU09yaWVudGF0aW9uhpKE + nZyrnwCGkoSZmRROU1ZlcnRpY2FsUGFnaW5hdGlvboaShJ2cq58AhpKEmZkWTlNIb3Jp + em9udGFsbHlDZW50ZXJlZIaSqpKEmZkLTlNUb3BNYXJnaW6GkoSdnJ+dJIaShJmZCE5T + Q29waWVzhpKEnZyrnwGGkoSZmQtOU1BhcGVyU2l6ZYaShJ6chIQMe19OU1NpemU9ZmZ9 + pIECU4EDSoaGhg== + </data> + <key>RowAlign</key> + <integer>0</integer> + <key>RowSpacing</key> + <real>3.600000e+01</real> + <key>VPages</key> + <integer>1</integer> + <key>WindowInfo</key> + <dict> + <key>Frame</key> + <string>{{337, 19}, {555, 739}}</string> + <key>VisibleRegion</key> + <string>{{-8, 0}, {540, 662}}</string> + <key>Zoom</key> + <string>1</string> + </dict> +</dict> +</plist>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ieice.aux Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,33 @@ +\relax +\bibstyle{jplain} +\citation{Cell} +\newlabel{cellarch}{{1.}{1}} +\citation{java-conncurrecy} +\newlabel{amdahl}{{2.\,1}{2}} +\citation{spurs} +\citation{kono08b} +\citation{cbc-sourceforge} +\newlabel{fig000}{{4.}{3}} +\citation{kono01g} +\citation{wolper82} +\citation{synBTTL} +\citation{kono93b} +\citation{holzmann97model} +\citation{havelund98model} +\citation{groce04understanding} +\newlabel{tab:dpp_tableau}{{1}{6}} +\bibdata{ref} +\bibcite{synBTTL}{1} +\bibcite{Cell}{2} +\bibcite{java-conncurrecy}{3} +\bibcite{groce04understanding}{4} +\bibcite{havelund98model}{5} +\bibcite{holzmann97model}{6} +\bibcite{spurs}{7} +\bibcite{kono93b}{8} +\bibcite{wolper82}{9} +\bibcite{cbc-sourceforge}{10} +\bibcite{kono01g}{11} +\bibcite{kono08b}{12} +\newlabel{tab:spin_dpp}{{2}{7}} +\newlabel{tab:jpf_dpp}{{3}{7}}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ieice.bbl Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,63 @@ +\begin{thebibliography}{10} + +\bibitem{synBTTL} +E.M. Clarke and E.A. Emerson. +\newblock ``synthesis of synchronizatoin skeletons from branching time temporal + logic''. +\newblock In {\em Proc. of the Workshop on Logics of Programs, LNCS-131, + Springer-Verlag}, 1982. + +\bibitem{Cell} +Sony Corporation. +\newblock Cell broadband engine architecture, 2005. + +\bibitem{java-conncurrecy} +Brian Goetz, Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, and Doug + Lea. +\newblock {\em Java Concurrency in Practice}. +\newblock Addison-Wesley Professional, 2006. + +\bibitem{groce04understanding} +A.~Groce, D.~Kroening, and F.~Lerda. +\newblock Understanding counterexamples with explain, 2004. + +\bibitem{havelund98model} +K.~Havelund and T.~Pressburger. +\newblock Model checking java programs using java pathfinder, 1998. + +\bibitem{holzmann97model} +Gerard~J. Holzmann. +\newblock The model checker {SPIN}. +\newblock {\em Software Engineering}, Vol.~23, No.~5, pp. 279--295, 1997. + +\bibitem{spurs} +Keisuke Inoue. +\newblock Spu centric execution model, 2006. + +\bibitem{kono93b} +Shinji Kono. +\newblock {A Combination of Clasual and Non Clausal Temporal Logic Program}. +\newblock {\em {IJCAI-93 Workshop on Executable Modal and Temporal Logics}}, + Aug, 1993. + +\bibitem{wolper82} +P.~Wolper. +\newblock Synthesis of communicating processes from temporal logic + specifications. +\newblock Technical Report STAN-CS-82-925, Stanford University, 1982. + +\bibitem{cbc-sourceforge} +{河野 真治 }. +\newblock {CbC}, March 2008. + +\bibitem{kono01g} +{河野真治(琉球大/科学技術振興事業団), 揚 挺(琉球大)}. +\newblock {C言語のContinuation based C への変換}. +\newblock In {\em SwoPP 2001}, July 2001. + +\bibitem{kono08b} +{神里 晃, 河野 真治 }. +\newblock {CからCell Architectureを利用したCbCへの変換}. +\newblock VLD研究会, March 2008. + +\end{thebibliography}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ieice.blg Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,47 @@ +This is JBibTeX, Version 0.99c-j0.33 (utf8) (Web2C 7.5.4) +The top-level auxiliary file: ieice.aux +The style file: jplain.bst +Reallocated wiz_functions (elt_size=4) to 3400 items from 0. +Database file #1: ref.bib +You've used 12 entries, + 2620 wiz_defined-function locations, + 707 strings with 7349 characters, +and the built_in function-call counts, 3659 in all, are: += -- 272 +> -- 129 +< -- 4 ++ -- 55 +- -- 42 +* -- 150 +:= -- 525 +add.period$ -- 31 +call.type$ -- 12 +change.case$ -- 56 +chr.to.int$ -- 0 +cite$ -- 12 +duplicate$ -- 206 +empty$ -- 367 +format.name$ -- 63 +if$ -- 826 +int.to.chr$ -- 0 +int.to.str$ -- 12 +missing$ -- 7 +newline$ -- 58 +num.names$ -- 24 +pop$ -- 140 +preamble$ -- 1 +purify$ -- 45 +quote$ -- 0 +skip$ -- 196 +stack$ -- 0 +substring$ -- 89 +swap$ -- 25 +text.length$ -- 4 +text.prefix$ -- 0 +top$ -- 0 +type$ -- 46 +warning$ -- 0 +while$ -- 26 +width$ -- 14 +write$ -- 114 +is.kanji.str$ -- 108
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ieice.log Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,275 @@ +This is pTeX, Version 3.141592-p3.1.10 (utf8) (Web2C 7.5.4) (format=platex-euc 2006.12.25) 6 MAR 2008 04:09 +**ieice.tex +(./ieice.tex +pLaTeX2e <2006/01/04>+0 (based on LaTeX2e <2003/12/01> patch level 0) +(./ieicej.cls +Document Class: ieicej 2003/10/31 v1.3 for Transactions of IEICE +\@JQ=\dimen118 +\@Q=\dimen119 +\@EM=\dimen120 +\c@@paper=\count81 +\@authorlist=\toks15 +\@authorcnt=\count82 +\@alcnt=\count83 +\p@alcnt=\count84 +\@totalnumber=\count85 +\authornamesep=\dimen121 +\tn@dn=\count86 +\@spcnt=\count87 +\alignorder=\count88 +\totalnumberm@ne=\count89 +\@authorcntp@ne=\count90 +\chk@alcnt=\count91 +\chk@p@alcnt=\count92 +\eabstractbox=\box41 +\ekeywordbox=\box42 +\Pauthorsep=\dimen122 +\jabstractbox=\box43 +\jkeywordbox=\box44 +\c@section=\count93 +\c@subsection=\count94 +\c@subsubsection=\count95 +\c@paragraph=\count96 +\c@subparagraph=\count97 +\@hlskip=\skip41 +\verbatimleftmargin=\dimen123 +\verbatimbaselineskip=\dimen124 +\c@figure=\count98 +\c@table=\count99 +\abovecaptionskip=\skip42 +\belowcaptionskip=\skip43 +\@tempboxb=\box45 +\capwidth=\dimen125 +\ecapwidth=\dimen126 +\symmincho=\mathgroup4 +LaTeX Font Info: Overwriting symbol font `mincho' in version `bold' +(Font) JY1/mc/m/n --> JY1/gt/m/n on input line 2731. +LaTeX Info: Redefining \mathrm on input line 2733. +LaTeX Info: Redefining \mathbf on input line 2734. +LaTeX Font Info: Redeclaring symbol font `mincho' on input line 2789. +LaTeX Font Info: Overwriting symbol font `mincho' in version `normal' +(Font) JY1/mc/m/n --> JY1/mc/m/n on input line 2789. +LaTeX Font Info: Overwriting symbol font `mincho' in version `bold' +(Font) JY1/gt/m/n --> JY1/mc/m/n on input line 2789. +LaTeX Font Info: Redeclaring math alphabet \mathmc on input line 2789. +LaTeX Font Info: Overwriting symbol font `mincho' in version `bold' +(Font) JY1/mc/m/n --> JY1/gt/m/n on input line 2789. +LaTeX Font Info: Redeclaring math alphabet \mathgt on input line 2789. +LaTeX Font Info: Overwriting math alphabet `\mathgt' in version `normal' +(Font) JY1/gt/m/n --> JY1/gt/m/n on input line 2789. +LaTeX Font Info: Overwriting math alphabet `\mathgt' in version `bold' +(Font) JY1/gt/m/n --> JY1/gt/m/n on input line 2789. +LaTeX Info: Redefining \mathrm on input line 2789. +LaTeX Info: Redefining \mathbf on input line 2789. +LaTeX Info: Redefining \mc on input line 2797. +LaTeX Info: Redefining \gt on input line 2798. +\bibindent=\dimen127 +\c@profile=\count100 +\mathindent=\dimen128 +\@minsofar=\count101 +\@min=\count102 +\@cite@temp=\count103 +) (/usr/local/share/texmf-dist/tex/latex/base/latexsym.sty +Package: latexsym 1998/08/17 v2.2e Standard LaTeX package (lasy symbols) +\symlasy=\mathgroup5 +LaTeX Font Info: Overwriting symbol font `lasy' in version `bold' +(Font) U/lasy/m/n --> U/lasy/b/n on input line 47. +) +(/usr/local/share/texmf-dist/tex/latex/graphics/graphicx.sty +Package: graphicx 1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR) + +(/usr/local/share/texmf-dist/tex/latex/graphics/keyval.sty +Package: keyval 1999/03/16 v1.13 key=value parser (DPC) +\KV@toks@=\toks16 +) +(/usr/local/share/texmf/tex/latex/graphics/dvipdfmx-contrib-latex/graphics.sty +Package: graphics 2001/07/07 v1.0n Standard LaTeX Graphics (DPC,SPQR) + +(/usr/local/share/texmf-dist/tex/latex/graphics/trig.sty +Package: trig 1999/03/16 v1.09 sin cos tan (DPC) +) +(/usr/local/share/texmf-dist/tex/latex/graphics/graphics.cfg +File: graphics.cfg 2005/02/03 v1.3 graphics configuration of teTeX/TeXLive +) +Package graphics Info: Driver file: dvipdfm.def on input line 81. + +(/usr/local/share/texmf-dist/tex/latex/dvipdfm/dvipdfm.def +File: dvipdfm.def 1999/9/6 vx.x Driver-dependant file +)) +\Gin@req@height=\dimen129 +\Gin@req@width=\dimen130 +) + +Class ieicej Warning: Check the "Okinawa" label, it does not correspond to + any labels in \authorentry command. + +(./ieice.aux) +\openout1 = `ieice.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 39. +LaTeX Font Info: ... okay on input line 39. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 39. +LaTeX Font Info: ... okay on input line 39. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 39. +LaTeX Font Info: ... okay on input line 39. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 39. +LaTeX Font Info: ... okay on input line 39. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 39. +LaTeX Font Info: ... okay on input line 39. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 39. +LaTeX Font Info: ... okay on input line 39. +LaTeX Font Info: Checking defaults for JY1/mc/m/n on input line 39. +LaTeX Font Info: ... okay on input line 39. +LaTeX Font Info: Checking defaults for JT1/mc/m/n on input line 39. +LaTeX Font Info: ... okay on input line 39. +LaTeX Font Info: Font shape `JT1/mc/bx/n' in size <10> not available +(Font) Font shape `JT1/gt/m/n' tried instead on input line 40. +LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <10> not available +(Font) Font shape `JY1/gt/m/n' tried instead on input line 40. + (./abstract.tex) (./abstract-e.tex) +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <12> on input line 52. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <8> on input line 52. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <6> on input line 52. +LaTeX Font Info: Try loading font information for U+lasy on input line 52. + +(/usr/local/share/texmf-dist/tex/latex/base/ulasy.fd +File: ulasy.fd 1998/08/17 v2.2e LaTeX symbol font definitions +) +LaTeX Font Info: Calculating math sizes for size <10.5> on input line 52. + + +LaTeX Font Warning: Font shape `OML/cmm/m/it' in size <10.5> not available +(Font) size <10.95> substituted on input line 52. + + +LaTeX Font Warning: Font shape `OMS/cmsy/m/n' in size <10.5> not available +(Font) size <10.95> substituted on input line 52. + +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <10.5> on input line 52. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <7.34996> on input line 52. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <5.25> on input line 52. + +LaTeX Font Warning: Font shape `U/lasy/m/n' in size <10.5> not available +(Font) size <10.95> substituted on input line 52. + +(./0.tex (./1.tex +LaTeX Font Info: Font shape `JT1/mc/bx/n' in size <10.95> not available +(Font) Font shape `JT1/gt/m/n' tried instead on input line 2. +LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <10.95> not available +(Font) Font shape `JY1/gt/m/n' tried instead on input line 2. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <9> on input line 2. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <5> on input line 2. +File: fig/cell.eps Graphic file (type eps) + <fig/cell.eps> +Underfull \hbox (badness 10000) detected at line 29 +\OT1/cmr/m/n/8 cellarch + [] + +) (./2.tex [1 + + +] +LaTeX Font Info: Font shape `JT1/mc/bx/n' in size <9> not available +(Font) Font shape `JT1/gt/m/n' tried instead on input line 12. +LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <9> not available +(Font) Font shape `JY1/gt/m/n' tried instead on input line 12. +File: fig/amdahl.eps Graphic file (type eps) + <fig/amdahl.eps> +Underfull \hbox (badness 10000) detected at line 21 +\OT1/cmr/m/n/8 amdahl + [] + +[2]) (./3.tex) (./4.tex +File: fig/code.eps Graphic file (type eps) + <fig/code.eps> [3] +Overfull \hbox (17.53192pt too wide) in paragraph at lines 109--116 +\OT1/cmtt/m/n/9 If the mutex is already locked, the calling thread will + [] + + +Overfull \hbox (31.70676pt too wide) in paragraph at lines 162--162 +[] \OT1/cmtt/m/n/9 code pickup_rfork(PhilsPtr self, TaskPtr current_task)[] + + [] + +) (./5.tex [4]) (./6.tex +Overfull \hbox (41.15665pt too wide) in paragraph at lines 84--84 +[] \OT1/cmtt/m/n/9 while(!(list = next_task_iterator(task_iter))) {[ +] + [] + + +Overfull \hbox (50.60654pt too wide) in paragraph at lines 84--84 +[] \OT1/cmtt/m/n/9 // no more branch, go back to the previous on +e[] + [] + + +Overfull \hbox (41.15665pt too wide) in paragraph at lines 84--84 +[] \OT1/cmtt/m/n/9 TaskIteratorPtr prev_iter = task_iter->prev;[ +] + [] + + +Overfull \hbox (22.25687pt too wide) in paragraph at lines 84--84 +[] \OT1/cmtt/m/n/9 printf("All done count %d\n",count);[] + [] + + +Overfull \hbox (3.35709pt too wide) in paragraph at lines 84--84 +[] \OT1/cmtt/m/n/9 printf("no more branch %d\n",count);[] + [] + + +Overfull \hbox (69.50632pt too wide) in paragraph at lines 84--84 +[] \OT1/cmtt/m/n/9 // here we assume task list is fixed, we don't ha +ve to[] + [] + + +Overfull \hbox (8.08203pt too wide) in paragraph at lines 84--84 +[] \OT1/cmtt/m/n/9 restore_memory(task_iter->state->memory);[] + [] + + +Overfull \hbox (116.75577pt too wide) in paragraph at lines 84--84 +[] \OT1/cmtt/m/n/9 printf("restore list %x next %x\n",(int)list,(int +)(list->next));[] + [] + + +Overfull \hbox (64.78137pt too wide) in paragraph at lines 84--84 +[] \OT1/cmtt/m/n/9 task_iter = create_task_iterator(list,out,task_it +er);[] + [] + +[5]) (./7.tex) (./8.tex) (./9.tex [6]) (./10.tex)) (./ieice.bbl +LaTeX Font Info: Font shape `JT1/gt/m/it' in size <8> not available +(Font) Font shape `JT1/gt/m/n' tried instead on input line 7. +LaTeX Font Info: Font shape `JY1/gt/m/it' in size <8> not available +(Font) Font shape `JY1/gt/m/n' tried instead on input line 7. +) [7] +(./ieice.aux) + +LaTeX Font Warning: Size substitutions with differences +(Font) up to 0.45pt have occurred. + + ) +Here is how much of TeX's memory you used: + 991 strings out of 94689 + 11060 string characters out of 1170012 + 73136 words of memory out of 1000000 + 4257 multiletter control sequences out of 10000+50000 + 20563 words of font info for 83 fonts, out of 500000 for 2000 + 566 hyphenation exceptions out of 1000 + 25i,7n,23p,227b,542s stack positions out of 1500i,500n,5000p,200000b,5000s + +Output written on ieice.dvi (7 pages, 54376 bytes).
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ieice.tex Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,58 @@ +%% v1.3 [2003/10/31] +\documentclass[technicalreport]{ieicej} +%\documentclass[technicalreport,usejistfm]{ieicej} +%\usepackage{graphicx} +\usepackage{latexsym} +\usepackage[dvipdfm]{graphicx} +%\usepackage[fleqn]{amsmath} +%\usepackage[psamsfonts]{amssymb} +\bibliographystyle{jplain} % for bibliography + + +\def\IEICEJcls{\texttt{ieicej.cls}} +\def\IEICEver{1.3} +\newcommand{\AmSLaTeX}{% + $\mathcal A$\lower.4ex\hbox{$\!\mathcal M\!$}$\mathcal S$-\LaTeX} +\newcommand{\PS}{{\scshape Post\-Script}} +\def\BibTeX{{\rmfamily B\kern-.05em{\scshape i\kern-.025em b}\kern-.08em + T\kern-.1667em\lower.7ex\hbox{E}\kern-.125em X}} + +\jtitle{ 検証を自身で表現できるハードウェア、ソフトウェア記述言語 Continuation ba +sed C と、そのCell への応用} +\jsubtitle{} +\etitle{ Self descriptive verfication in Continuation based C and it's appli +cation to Cell architecture } +\esubtitle{} +\authorlist{% + \authorentry[kono@ie.u-ryukyu.ac.jp]{河野 真治}{Shinji KONO}{Tokyo}% +} +\affiliate[Okinawa]{琉球大学理工学研究科情報工学専攻\hskip1zw + 〒903-0213 沖縄県西原町千原1番地} + {Information Engineering, + University Of Ryukyus\hskip1em + Senbaru 1, Nishihara , Okinawa, + 903-0213 Japan} + +%\MailAddress{$\dagger$hanako@denshi.ac.jp, +% $\dagger\dagger$\{taro,jiro\}@jouhou.co.jp} + +\begin{document} +\begin{jabstract} +\input{abstract} +\end{jabstract} +\begin{jkeyword} +Cell,マルチコア, 継続 +\end{jkeyword} +\begin{eabstract} +\input{abstract-e} +\end{eabstract} +\begin{ekeyword} +multicore , Cell +\end{ekeyword} +\maketitle + +\input{0} +\bibliography{ref} + +\end{document} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ieicej.cls Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,3358 @@ +%%% +%% ieicej.cls (pLaTeX2e) +%% for the Transactions of the Institute of Electronics, Information +%% and Communication Engineers +%% by ULS and Company (former name SATO KOBO), 1999-2003. +%% E-mail: ieice-div@uls.co.jp, teppei@uls.co.jp +\NeedsTeXFormat{pLaTeX2e} +\ProvidesClass{ieicej} +%%[1999/04/28 v1.0 for Transactions of IEICE] +%%[1999/07/12 v1.0 new release for Transactions of IEICE] +%%[2000/11/02 v1.1 for Transactions of IEICE] +%%[2002/02/12 v1.2 for Transactions of IEICE] + [2003/10/31 v1.3 for Transactions of IEICE] + +\newif\if@paper \@papertrue +\newif\if@letterpaper \@letterpaperfalse +\newif\if@letter \@letterfalse +\newif\if@tecrep \@tecrepfalse + +\DeclareOption{paper}{% + \gdef\hd@type{論文}\gdef\tl@type{論\hskip1zw 文}\gdef\@type{P}} +\DeclareOption{invited}{\@papertrue + \gdef\hd@type{招待論文}\gdef\tl@type{招待論文}\gdef\@type{P}} +\DeclareOption{comment}{\@papertrue + \gdef\hd@type{解説論文}\gdef\tl@type{解説論文}\gdef\@type{P}} +\DeclareOption{survey}{\@papertrue + \gdef\hd@type{サーベイ論文}\gdef\tl@type{サーベイ論文}\gdef\@type{P}} +\DeclareOption{letter}{\@lettertrue\@paperfalse + \gdef\hd@type{レター}\gdef\tl@type{\@typeofletter}\gdef\@type{L}} +\DeclareOption{letterpaper}{\@letterpapertrue\@paperfalse + \gdef\hd@type{レター}\gdef\tl@type{レター}\gdef\@type{LP}} +\DeclareOption{technicalreport}{\@tecreptrue} + +\def\tl@type{論\hskip1zw 文} +\def\hd@type{論文} +\def\@type{P}% paper + +%\def\ieicejline@warning{\ClassWarning{ieicej}} +\def\ieicej@warning{\ClassWarningNoLine{ieicej}} + +\newif\if@usejistfm \@usejistfmfalse +\DeclareOption{usejistfm}{\@usejistfmtrue} + +\newif\if@Proof \@Prooffalse +\DeclareOption{Proof}{\@Prooftrue} +\newif\if@cameraready \@camerareadyfalse +\DeclareOption{cameraready}{\@camerareadytrue} + +%% for 2.1.4 and non pLaTeX2e compatibility +\@ifundefined{hour}{}{% + \hour\time \divide\hour by 60\relax + \@tempcnta\hour \multiply\@tempcnta 60\relax + \minute\time \advance\minute-\@tempcnta +} + +\newif\if@NTT +\@ifundefined{kanjiskip}{\@NTTtrue + \let\kanjiskip\jintercharskip + \let\xkanjiskip\jasciikanjiskip + }{\@NTTfalse\let\jmathkanjiskip\xkanjiskip} +\@ifundefined{iftdir}{\newif\iftdir\tdirfalse}{} +\@ifundefined{burasage}{}{\burasage`,=1\burasage`.=1} + +\newdimen\@JQ + \@JQ=0.7392507pt +\newdimen\@Q + \@Q=0.71144pt +\newdimen\@EM + \@EM=.03125em + +\newcounter{@paper} +\newcommand{\@ptsize}{} +\newif\if@restonecol +\hour\time \divide\hour by 60\relax +\@tempcnta\hour \multiply\@tempcnta 60\relax +\minute\time \advance\minute-\@tempcnta +\if@NTT\else + \newif\if@enablejfam \@enablejfamtrue +\fi +\DeclareOption{a4paper}{\setcounter{@paper}{1}% + \setlength\paperheight {297mm}% + \setlength\paperwidth {210mm}} +\DeclareOption{b5paper}{\setcounter{@paper}{4}% + \setlength\paperheight {257mm} + \setlength\paperwidth {182mm}} +\DeclareOption{10pt}{\renewcommand{\@ptsize}{0}} +\DeclareOption{11pt}{\renewcommand{\@ptsize}{1}} +\DeclareOption{12pt}{\renewcommand{\@ptsize}{2}} +\DeclareOption{tombow}{% + \tombowtrue \tombowdatetrue + \setlength{\@tombowwidth}{.1mm}% + \@bannertoken{% + \jobname\space:\space\number\year/\number\month/\number\day + (\number\hour:\number\minute)} + \maketombowbox} +\DeclareOption{tombo}{% + \tombowtrue \tombowdatefalse + \setlength{\@tombowwidth}{.1mm}% + \maketombowbox} +\DeclareOption{mentuke}{% + \tombowtrue \tombowdatefalse + \setlength{\@tombowwidth}{\z@}% + \maketombowbox} +\DeclareOption{tate}{\AtBeginDocument{\tate\message{《縦組モード》}}} +\DeclareOption{oneside}{\@twosidefalse} +\DeclareOption{twoside}{\@twosidetrue} +\DeclareOption{onecolumn}{\@twocolumnfalse} +\DeclareOption{twocolumn}{\@twocolumntrue} +%%\DeclareOption{leqno}{\input{leqno.clo}} +\DeclareOption{fleqn}{%\input{fleqn.clo} + \ieicej@warning{fleqn is loaded by this class file}} +\DeclareOption{openbib}{% + \AtEndOfPackage{% + \renewcommand\@openbib@code{% + \advance\leftmargin\bibindent + \itemindent -\bibindent + \listparindent \itemindent + \parsep \z@ + }% + \renewcommand\newblock{\par}}} + +\if@NTT\else + \DeclareOption{disablejfam}{\@enablejfamfalse} +\fi +\DeclareOption{draft}{\setlength\overfullrule{5pt}} +\DeclareOption{final}{\setlength\overfullrule{0pt}} +\if@tecrep + \ExecuteOptions{a4paper,twoside,twocolumn,final} +\else + \ExecuteOptions{b5paper,10pt,twoside,twocolumn,final} +\fi +\ProcessOptions\relax + +\if@NTT\else +\if@tecrep + \if@usejistfm + \DeclareFontShape{JY1}{mc}{m}{n}{% + <5> <6> <7> <8> <9> <10> %sgen*min + <10.95><12><14.4><17.28><20.74><24.88> jis + <-> jis + }{} + \DeclareFontShape{JY1}{mc}{bx}{n}{<->ssub*gt/m/n}{} + \DeclareFontShape{JY1}{gt}{m}{n}{% + <5> <6> <7> <8> <9> <10> %sgen*goth + <10.95><12><14.4><17.28><20.74><24.88> jisg + <-> jisg + }{} + \DeclareFontShape{JY1}{gt}{bx}{n}{<->ssub*gt/m/n}{} + \fi +\else +\if@usejistfm +\DeclareFontShape{JY1}{mc}{m}{n}{% + <5> sfixed * [5.1748] jis % 7Q + <6> sfixed * \if@letter [5.9141]\else [6.6533]\fi jis % 8Q or 9Q + <7> sfixed * [7.3926] jis % 10Q + <8> sfixed * [8.1318] jis % 11Q + <9> sfixed * [8.8711] jis % 12Q + <10> sfixed * [9.6104] jis % 13Q + <10.95> sfixed * [11.089] jis % 15Q + <12> sfixed * [13.307] jis % 18Q + <14.4> sfixed * [14.785] jis % 20Q + <17.28> sfixed * [17.742] jis % 24Q + <20.74> sfixed * [20.699] jis % 28Q + <24.88> sfixed * [23.656] jis % 32Q + <-> jis % +}{} +\DeclareFontShape{JY1}{mc}{bx}{n}{% + <5> sfixed * [5.1748] jisg + <6> sfixed * \if@letter [5.9141]\else [6.6533]\fi jisg + <7> sfixed * [7.3926] jisg + <8> sfixed * [8.1318] jisg + <9> sfixed * [8.8711] jisg + <10> sfixed * [9.6104] jisg + <10.95> sfixed * [11.089] jisg + <12> sfixed * [13.307] jisg + <14.4> sfixed * [14.785] jisg + <17.28> sfixed * [17.742] jisg + <20.74> sfixed * [20.699] jisg + <24.88> sfixed * [23.656] jisg + <-> jisg +}{} +\DeclareFontShape{JY1}{gt}{m}{n}{% + <5> sfixed * [5.1748] jisg + <6> sfixed * \if@letter [5.9141]\else [6.6533]\fi jisg + <7> sfixed * [7.3926] jisg + <8> sfixed * [8.1318] jisg + <9> sfixed * [8.8711] jisg + <10> sfixed * [9.6104] jisg + <10.95> sfixed * [11.089] jisg + <12> sfixed * [13.307] jisg + <14.4> sfixed * [14.785] jisg + <17.28> sfixed * [17.742] jisg + <20.74> sfixed * [20.699] jisg + <24.88> sfixed * [23.656] jisg + <-> jisg +}{} +\DeclareFontShape{JY1}{gt}{bx}{n}{% + <5> sfixed * [5.1748] jisg + <6> sfixed * \if@letter [5.9141]\else [6.6533]\fi jisg + <7> sfixed * [7.3926] jisg + <8> sfixed * [8.1318] jisg + <9> sfixed * [8.8711] jisg + <10> sfixed * [9.6104] jisg + <10.95> sfixed * [11.089] jisg + <12> sfixed * [13.307] jisg + <14.4> sfixed * [14.785] jisg + <17.28> sfixed * [17.742] jisg + <20.74> sfixed * [20.699] jisg + <24.88> sfixed * [23.656] jisg + <-> jisg +}{} +\else +\DeclareFontShape{JY1}{mc}{m}{n}{% + <5> sfixed * [5.1748] min5 % 7Q + <6> sfixed * \if@letter [5.9141]\else [6.6533]\fi min6 % 8Q or 9Q + <7> sfixed * [7.3926] min7 % 10Q + <8> sfixed * [8.1318] min8 % 11Q + <9> sfixed * [8.8711] min9 % 12Q + <10> sfixed * [9.6104] min10 % 13Q + <10.95> sfixed * [11.089] min10 % 15Q + <12> sfixed * [13.307] min10 % 18Q + <14.4> sfixed * [14.785] min10 % 20Q + <17.28> sfixed * [17.742] min10 % 24Q + <20.74> sfixed * [20.699] min10 % 28Q + <24.88> sfixed * [23.656] min10 % 32Q + <-> min10 % +}{} +\DeclareFontShape{JY1}{mc}{bx}{n}{% + <5> sfixed * [5.1748] goth5 + <6> sfixed * \if@letter [5.9141]\else [6.6533]\fi goth6 + <7> sfixed * [7.3926] goth7 + <8> sfixed * [8.1318] goth8 + <9> sfixed * [8.8711] goth9 + <10> sfixed * [9.6104] goth10 + <10.95> sfixed * [11.089] goth10 + <12> sfixed * [13.307] goth10 + <14.4> sfixed * [14.785] goth10 + <17.28> sfixed * [17.742] goth10 + <20.74> sfixed * [20.699] goth10 + <24.88> sfixed * [23.656] goth10 + <-> goth10 +}{} +\DeclareFontShape{JY1}{gt}{m}{n}{% + <5> sfixed * [5.1748] goth5 + <6> sfixed * \if@letter [5.9141]\else [6.6533]\fi goth6 + <7> sfixed * [7.3926] goth7 + <8> sfixed * [8.1318] goth8 + <9> sfixed * [8.8711] goth9 + <10> sfixed * [9.6104] goth10 + <10.95> sfixed * [11.089] goth10 + <12> sfixed * [13.307] goth10 + <14.4> sfixed * [14.785] goth10 + <17.28> sfixed * [17.742] goth10 + <20.74> sfixed * [20.699] goth10 + <24.88> sfixed * [23.656] goth10 + <-> goth10 +}{} +\DeclareFontShape{JY1}{gt}{bx}{n}{% + <5> sfixed * [5.1748] goth5 + <6> sfixed * \if@letter [5.9141]\else [6.6533]\fi goth6 + <7> sfixed * [7.3926] goth7 + <8> sfixed * [8.1318] goth8 + <9> sfixed * [8.8711] goth9 + <10> sfixed * [9.6104] goth10 + <10.95> sfixed * [11.089] goth10 + <12> sfixed * [13.307] goth10 + <14.4> sfixed * [14.785] goth10 + <17.28> sfixed * [17.742] goth10 + <20.74> sfixed * [20.699] goth10 + <24.88> sfixed * [23.656] goth10 + <-> goth10 +}{} +\fi +\fi + +%% JY1 it +\DeclareFontShape{JY1}{mc}{m}{it}{<->ssub*mc/m/n}{} +\DeclareFontShape{JY1}{mc}{bx}{it}{<->ssub*gt/m/n}{} +\DeclareFontShape{JY1}{gt}{m}{it}{<->ssub*gt/m/n}{} +\DeclareFontShape{JY1}{gt}{bx}{it}{<->ssub*gt/m/n}{} +%% +\DeclareFontShape{JY1}{mc}{b}{it}{<->ssub*mc/m/n}{} +\DeclareFontShape{JY1}{mc}{eb}{it}{<->ssub*mc/m/n}{} +\DeclareFontShape{JY1}{gt}{b}{it}{<->ssub*mc/m/n}{} +\DeclareFontShape{JY1}{gt}{eb}{it}{<->ssub*mc/m/n}{} +\DeclareFontShape{JY1}{gt}{ub}{it}{<->ssub*mc/m/n}{} +%% JT1 it +\DeclareFontShape{JT1}{mc}{m}{it}{<->ssub*mc/m/n}{} +\DeclareFontShape{JT1}{mc}{bx}{it}{<->ssub*gt/m/n}{} +\DeclareFontShape{JT1}{gt}{m}{it}{<->ssub*gt/m/n}{} +\DeclareFontShape{JT1}{gt}{bx}{it}{<->ssub*gt/m/n}{} +%% +\DeclareFontShape{JT1}{mc}{b}{it}{<->ssub*mc/m/n}{} +\DeclareFontShape{JT1}{mc}{eb}{it}{<->ssub*mc/m/n}{} +\DeclareFontShape{JT1}{gt}{b}{it}{<->ssub*mc/m/n}{} +\DeclareFontShape{JT1}{gt}{eb}{it}{<->ssub*mc/m/n}{} +\DeclareFontShape{JT1}{gt}{ub}{it}{<->ssub*mc/m/n}{} +%% sc +\DeclareFontShape{JY1}{mc}{m}{sc}{<->ssub*mc/m/n}{} +\DeclareFontShape{JT1}{mc}{m}{sc}{<->ssub*mc/m/n}{} +%% n +\DeclareFontShape{JY1}{gt}{b}{n}{<->ssub*gt/m/n}{} +\DeclareFontShape{JT1}{gt}{b}{n}{<->ssub*gt/m/n}{} +\fi + +%% from /usr/local/teTeX/share/texmf/tex/latex/base/ot1cmr.fd +\DeclareFontShape{OT1}{cmr}{m}{n}% + {% + <-6>cmr5% + <6-7>cmr6% + <7-8>cmr7% + <8-9>cmr8% + <9-10>cmr9% + <10-12>cmr10% + <12-17>cmr12% + <17->cmr17% + }{} +\DeclareFontShape{OT1}{cmr}{m}{sl}% + {% + <-9>cmsl8% + <9-10>cmsl9% + <10-12>cmsl10% + <12->cmsl12% + }{} +\DeclareFontShape{OT1}{cmr}{m}{it}% + {% + <-8>cmti7% + <8-9>cmti8% + <9-10>cmti9% + <10-12>cmti10% + <12->cmti12% + }{} +\DeclareFontShape{OT1}{cmr}{m}{sc}% + {% + <->cmcsc10% + }{} +\DeclareFontShape{OT1}{cmr}{m}{ui} + {% + <->cmu10% + }{} +\DeclareFontShape{OT1}{cmr}{b}{n} + {% + <->cmb10% + }{} +\DeclareFontShape{OT1}{cmr}{bx}{n} + {% + <-6>cmbx5% + <6-7>cmbx6% + <7-8>cmbx7% + <8-9>cmbx8% + <9-10>cmbx9% + <10-12>cmbx10% + <12->cmbx12% + }{} +\DeclareFontShape{OT1}{cmr}{bx}{sl} + {% + <->cmbxsl10% + }{} +\DeclareFontShape{OT1}{cmr}{bx}{it} + {% + <->cmbxti10% + }{} +\DeclareFontShape{OT1}{cmr}{bx}{ui} + {% + <->sub*cmr/m/ui + }{} + +\if@tecrep + \renewcommand{\normalsize}{% + \@setfontsize\normalsize\@ixpt{20.5\@Q}% + \kanjiskip\z@ \@plus .1zw \@minus .05zw + \abovedisplayskip 9\p@ \@plus 3\p@ \@minus 4\p@ + \abovedisplayshortskip \z@ \@plus 2.5\p@ + \belowdisplayshortskip 5\p@ \@plus 2\p@ \@minus 2\p@ + \belowdisplayskip \abovedisplayskip + \let\@listi\@listI} + \normalsize + \setbox0\hbox{\char\euc"A1A1}% " + \setlength\Cht{\ht0} + \setlength\Cdp{\dp0} + \setlength\Cwd{\wd0} + \setlength\Cvs{\baselineskip} + \setlength\Chs{\wd0} + + \newcommand{\small}{% + \@setfontsize\small\@viiipt{18\@Q}% + \kanjiskip\z@ \@plus .1zw \@minus .05zw + \abovedisplayskip 6\p@ \@plus2\p@ \@minus4\p@ + \abovedisplayshortskip \z@ \@plus\p@ + \belowdisplayshortskip 3\p@ \@plus\p@ \@minus2\p@ + \def\@listi{\leftmargin\leftmargini + \topsep 3\p@ \@plus \p@ \@minus \p@ + \parsep 1\p@ \@plus \p@ \@minus \p@ + \itemsep \parsep}% + \belowdisplayskip \abovedisplayskip} + + \newcommand{\footnotesize}{% + \@setfontsize\footnotesize\@viipt{16\@Q}% + \kanjiskip\z@ \@plus .1zw \@minus .05zw + \abovedisplayskip 5\p@ \@plus 1.5\p@ \@minus 3\p@ + \abovedisplayshortskip \z@ \@plus\p@ + \belowdisplayshortskip 2.5\p@ \@plus \p@ \@minus 1.5\p@ + \def\@listi{\leftmargin\leftmargini + \topsep 2\p@ \@plus\p@ \@minus\p@ + \parsep 1\p@ \@plus\p@ \@minus\p@ + \itemsep \parsep}% + \belowdisplayskip \abovedisplayskip} + + \newcommand{\scriptsize}{\@setfontsize\scriptsize\@vipt\@viiipt} + \newcommand{\tiny}{\@setfontsize\tiny\@vpt\@vipt} + \newcommand{\large}{\@setfontsize\large\@xpt{22\@Q}} + \newcommand{\Large}{\@setfontsize\Large\@xipt{27\@Q}} + \newcommand{\LARGE}{\@setfontsize\LARGE\@xiipt{33\@Q}} + \newcommand{\huge}{\@setfontsize\huge\@xivpt{25}} + \newcommand{\Huge}{\@setfontsize\Huge\@xviipt{30}} + + \headheight \z@ + \headsep \z@ + \topskip 1\Cht + \footskip 9.5mm + \maxdepth .5\topskip + \textwidth 58\Cwd + \@settopoint\textwidth + \textheight 49\Cvs + \advance \textheight \topskip + \advance \textheight .15mm + \@settopoint\textheight +\else + \renewcommand{\normalsize}{% + \@setfontsize\normalsize\@ixpt{19\@Q}% + \kanjiskip\z@ \@plus .1zw \@minus .05zw + \abovedisplayskip 9\p@ \@plus 3\p@ \@minus 4\p@ + \abovedisplayshortskip \z@ \@plus 2.5\p@ + \belowdisplayshortskip 5\p@ \@plus 2\p@ \@minus 2\p@ + \belowdisplayskip \abovedisplayskip + \let\@listi\@listI} + \normalsize + \setbox0\hbox{\char\euc"A1A1}% " + \setlength\Cht{\ht0} + \setlength\Cdp{\dp0} + \setlength\Cwd{\wd0} + \setlength\Cvs{\baselineskip} + \setlength\Chs{\wd0} + + \if@letter + \newcommand{\Small}{\@setfontsize\Small\@viiipt{18\@Q}% + \kanjiskip\z@ \@plus .1zw \@minus .05zw + } + \else + \newcommand{\Small}{\@setfontsize\Small\@viiipt{16\@Q}% + \kanjiskip\z@ \@plus .1zw \@minus .05zw + } + \fi + + \newcommand{\small}{% + \@setfontsize\small\@viipt{13\@Q}% + \kanjiskip\z@ \@plus .1zw \@minus .05zw + \abovedisplayskip 6\p@ \@plus2\p@ \@minus4\p@ + \abovedisplayshortskip \z@ \@plus\p@ + \belowdisplayshortskip 3\p@ \@plus\p@ \@minus2\p@ + \def\@listi{\leftmargin\leftmargini + \topsep 3\p@ \@plus \p@ \@minus \p@ + \parsep 1\p@ \@plus \p@ \@minus \p@ + \itemsep \parsep}% + \belowdisplayskip \abovedisplayskip} + \newcommand{\footnotesize}{% + \@setfontsize\footnotesize\@vipt{13\@Q}% + \kanjiskip\z@ \@plus .1zw \@minus .05zw + \abovedisplayskip 5\p@ \@plus 1.5\p@ \@minus 3\p@ + \abovedisplayshortskip \z@ \@plus\p@ + \belowdisplayshortskip 2.5\p@ \@plus \p@ \@minus 1.5\p@ + \def\@listi{\leftmargin\leftmargini + \topsep 2\p@ \@plus\p@ \@minus\p@ + \parsep 1\p@ \@plus\p@ \@minus\p@ + \itemsep \parsep}% + \belowdisplayskip \abovedisplayskip} + + %%\newcommand{\scriptsize}{\@setfontsize\scriptsize\@viipt\@viiipt} + \let\scriptsize\footnotesize + \newcommand{\tiny}{\@setfontsize\tiny\@vpt\@vipt} + \newcommand{\large}{\@setfontsize\large\@xpt{19\@Q}} + \newcommand{\Large}{\@setfontsize\Large\@xipt{27\@Q}} + \newcommand{\LARGE}{\@setfontsize\LARGE\@xiipt{33\@Q}} + \newcommand{\huge}{\@setfontsize\huge\@xivpt{25}} + \newcommand{\Huge}{\@setfontsize\Huge\@xviipt{30}} + + \headheight 12\@Q %% 11H + \headsep 6.25mm + \topskip 1\Cht + \footskip 7.5mm + \maxdepth .5\topskip + \textwidth 151.5mm %% 24w x 2 + 30H + \@settopoint\textwidth + \textheight 43\Cvs + \advance \textheight \topskip + \advance \textheight .4mm %% limit .31mm + \@settopoint\textheight +\fi + +\if@twocolumn + \setlength\marginparsep{5mm} +\else + \setlength\marginparsep{5mm} +\fi +\setlength\marginparpush{5pt} + +\iftombow +% \hoffset\z@ +% \voffset\z@ + \topmargin\paperheight + \advance \topmargin -\textheight + \advance \topmargin -\headheight + \advance \topmargin -\headsep + \advance \topmargin -\footskip + \divide \topmargin \tw@ + \advance \topmargin -1.25mm + \advance \topmargin -1in + \@settopoint\topmargin + \oddsidemargin\paperwidth + \advance \oddsidemargin -\textwidth + \divide \oddsidemargin \tw@ + \advance \oddsidemargin -1in + \@settopoint\oddsidemargin + \evensidemargin\oddsidemargin + \@settopoint\evensidemargin +\else + \topmargin \z@ + \@settopoint\topmargin + \oddsidemargin\z@ + \@settopoint\oddsidemargin + \evensidemargin\z@ + \@settopoint\evensidemargin +\fi + +\marginparwidth 20mm +\@settopoint\marginparwidth + +\if@tecrep + \setlength\footnotesep{2.8mm} +\else + \setlength\footnotesep{2.275mm} +\fi +\setlength{\skip\footins}{1\Cvs plus .9\Cvs \@minus .3\Cvs} +\setlength\intextsep {1\Cvs \@plus .75\Cvs \@minus .25\Cvs} +\setlength\floatsep {1\Cvs \@plus .75\Cvs \@minus .25\Cvs} +\setlength\dblfloatsep {1\Cvs \@plus .75\Cvs \@minus .25\Cvs} +\setlength\textfloatsep{1.5\Cvs \@plus .75\Cvs \@minus .25\Cvs} +\setlength\dbltextfloatsep{1.5\Cvs \@plus .75\Cvs \@minus .25\Cvs} + +\setlength\@fptop{0\p@ \@plus 1fil} +\setlength\@fpsep{8\p@ \@plus 2fil} +\setlength\@fpbot{0\p@ \@plus 1fil} +\setlength\@dblfptop{0\p@ \@plus 1fil} +\setlength\@dblfpsep{8\p@ \@plus 2fil} +\setlength\@dblfpbot{0\p@ \@plus 1fil} +\setlength\partopsep{2\p@ \@plus 1\p@ \@minus 1\p@} + +\def\@listi{\leftmargin\leftmargini + \parsep 4\p@ \@plus2\p@ \@minus\p@ + \topsep 8\p@ \@plus2\p@ \@minus4\p@ + \itemsep 4\p@ \@plus2\p@ \@minus\p@} +\let\@listI\@listi +\@listi +\def\@listii{\leftmargin\leftmarginii + \labelwidth\leftmarginii \advance\labelwidth-\labelsep + \topsep\z@ \@plus\p@ \@minus\p@ + \parsep\z@ \@plus\p@ \@minus\p@ + \itemsep\parsep} +\def\@listiii{\leftmargin\leftmarginiii + \labelwidth\leftmarginiii \advance\labelwidth-\labelsep + \topsep\z@ \@plus\p@ \@minus\p@ + \parsep\z@ + \partopsep\z@ \@plus\z@ \@minus\p@ + \itemsep\topsep} +\def\@listiv {\leftmargin\leftmarginiv + \labelwidth\leftmarginiv + \advance\labelwidth-\labelsep} +\def\@listv {\leftmargin\leftmarginv + \labelwidth\leftmarginv + \advance\labelwidth-\labelsep} +\def\@listvi {\leftmargin\leftmarginvi + \labelwidth\leftmarginvi + \advance\labelwidth-\labelsep} + +\if@tecrep + \columnsep 2zw +\else + \columnsep 30\@Q +\fi +\columnseprule 0\p@ +\lineskip 2\p@ +\normallineskip 2\p@ +\renewcommand{\baselinestretch}{} +\parskip\z@ %% 0\p@ \@plus \p@ +\parindent 1zw %% 1\Cwd + +\@lowpenalty 51 +\@medpenalty 151 +\@highpenalty 301 +\setcounter{topnumber}{6} +\setcounter{bottomnumber}{5} +\setcounter{totalnumber}{11} +\setcounter{dbltopnumber}{5} +\renewcommand{\topfraction}{.95} +\renewcommand{\bottomfraction}{.95} +\renewcommand{\textfraction}{.05} +\renewcommand{\floatpagefraction}{.05} +\renewcommand{\dbltopfraction}{.95} +\renewcommand{\dblfloatpagefraction}{.05} + +\if@Proof + \def\@Rtop{\rlap{\smash{\rule[-\headsep]{0.05mm}{10mm}% + \rule[-\headsep]{10mm}{0.05mm}}}} + \def\@Ltop{\llap{\smash{\rule[-\headsep]{10mm}{0.05mm}% + \rule[-\headsep]{0.05mm}{10mm}}}} + \def\@Rbot{\rlap{\smash{\raisebox{1\footskip} + {\rule[-10mm]{0.05mm}{10mm}\rule{10mm}{0.05mm}}}}} + \def\@Lbot{\llap{\smash{\raisebox{1\footskip} + {\rule{10mm}{0.05mm}\rule[-10mm]{0.05mm}{10mm}}}}} +\else + \let\@Rtop\relax\let\@Ltop\relax\let\@Rbot\relax\let\@Lbot\relax +\fi + +\def\field#1{% + \if@tecrep\else + \def\@tempa{#1}% + \def\f@A{A}\def\f@B{B}\def\f@C{C}\def\f@D{D}% + \def\f@DI{DI}\def\f@DII{DII}% + \ifx \@tempa\f@A \gdef\@field{A}\else + \ifx \@tempa\f@B \gdef\@field{B}\else + \ifx \@tempa\f@C \gdef\@field{C}\else + \ifx \@tempa\f@D \gdef\@field{D}\else + \ifx \@tempa\f@DI \gdef\@field{D--{\bfseries I}}\else + \ifx \@tempa\f@DII \gdef\@field{D--{\bfseries II}}\else + \gdef\@field{X}% + \fi\fi\fi\fi\fi\fi + \fi +} + +\def\vol#1{% Vol.J86 = Year 2003 + \def\@tempa{#1}% + \ifx\@tempa\empty + \gdef\@vol{Jxx--\@field}\gdef\ft@year{xxxx}\gdef\hd@year{xxxx}% + \else + \def\@tempa{x}% + \if\@tempa #1\relax + \gdef\@vol{Jxx--\@field}% + \gdef\ft@year{xxxx}% + \gdef\hd@year{xxxx}% + \else + \gdef\@vol{J#1--\@field}% + \@tempcnta=#1\relax + \advance \@tempcnta 1917\relax + \xdef\ft@year{\the\@tempcnta}% + \xdef\hd@year{\the\@tempcnta}% + \fi + \fi +} + +\def\no#1{% + \def\@tempa{#1}% + \ifx\@tempa\empty \gdef\@no{xx}\else \gdef\@no{#1}\fi +} + +\def\@field{} +\def\@vol{} +\def\hd@year{} +\def\ft@year{} +\def\@no{} + +\def\typeofletter#1{\gdef\@typeofletter{#1}} +\def\@typeofletter{} +\def\Sissue#1{\gdef\@Sissue{#1}} +\def\@Sissue{} + +\if@letter\typeofletter{研究速報}\fi +\field{X} +\no{xx} +\vol{x} + +\let\head@font\relax +\DeclareFixedFont{\KFfoot}{JY1}{gt}{m}{n}{10\@JQ} +\def\foot@font{\Small\sffamily\KFfoot} +\def\nombre@font{\Small\sffamily} +%% P (paper) +\def\t@typefont@P{% + \Huge\baselineskip\z@ %% 24\@JQ +} +%% LP (letterpaper) +\def\t@typefont@LP{% + \LARGE\baselineskip\z@ %% 18\@JQ +} +%% L (letter) +\let\t@typefont@L\huge +\def\head@type#1{%% 20\@JQ 平2 + \if@cameraready + \@ifundefined{PSTricksLoaded}{\scalebox{1}[0.8]{\t@typefont@L #1}} + {\def\tmp@scalebox##1{\pst@makebox{\@scalebox{##1}}}% + \ifx\tmp@scalebox\scalebox + \scalebox{1 0.8}{\t@typefont@L #1}% + \else + \scalebox{1}[0.8]{\t@typefont@L #1}% + \fi + }% + \else + {\t@typefont@L #1}% + \fi +} + +\if@cameraready + \def\hd@typeofletter{% + \def\@tempx{ショートノート}% + \ifx\@typeofletter\@tempx + シ\kern-.25zw ョ\kern-.25zw ー\kern-.25zw ト\kern-.35zw + ノ\kern-.25zw ー\kern-.25zw ト% + \else + {\kanjiskip=-.075zw \@typeofletter}\hskip1mm + \fi + } +\else + \def\hd@typeofletter{\@typeofletter} +\fi + +\def\ps@ieicej{\let\@mkboth\@gobbletwo + \if@letter + \def\hrulefill{\leaders\hrule height-1.35mm depth1.85mm\hfil}% + \def\@oddhead{\@Ltop + \smash{\hbox to \textwidth{% + \raisebox{-3mm}{\head@type{\hd@typeofletter}}\hrulefill + \llap{\normalsize\bfseries\mathversion{bold}\@Sissue}}}% + \@Rtop}% + \def\@evenhead{\@Ltop + \rlap{\smash{\hbox to \textwidth{% + \raisebox{-3mm}{\head@type{\hd@typeofletter}}\hrulefill + }}}\hfil + \ifx\@Sissue\empty + {\Small\head@font 電子情報通信学会論文誌\ \hd@year + /\@no\ Vol.\ \@vol\ No.\,\@no}% + \else + {\normalsize\bfseries\mathversion{bold}\@Sissue}% + \fi + \@Rtop}% + \else + \def\hrulefill{\leaders\hrule height-1.5mm depth1.75mm\hfil}% + \if@letterpaper + \def\@oddhead{\@Ltop + \smash{\hbox to \textwidth{% + \raisebox{-3mm}{\csname t@typefont@\@type\endcsname\tl@type}\hrulefill + \llap{\normalsize\bfseries\mathversion{bold}\@Sissue}}}% + \@Rtop}% + \else + \def\@oddhead{\@Ltop + \smash{\hbox to \textwidth{% + \rule[-1.75mm]{14mm}{0.25mm}% + \raisebox{-3mm}{\csname t@typefont@\@type\endcsname\tl@type}\hrulefill + \llap{\normalsize\bfseries\mathversion{bold}\@Sissue}}}% + \@Rtop}% + \fi + \let\@evenhead\@oddhead + \fi + \def\@oddfoot{\@Lbot\hfil + {\foot@font 電子情報通信学会論文誌\hskip1zw + \@field\hskip1zw Vol.\ \@vol\hskip1zw No.\,\@no\hskip1zw + pp.\,\thepage --\pageref{ieicej@lastpage}\hskip1zw + \ft@year 年\@no 月}\hfil + \llap{{\nombre@font\thepage\hskip3mm}}% + \@Rbot}% + \def\@evenfoot{\@Lbot + \rlap{\hskip3mm{\nombre@font\thepage}}\hfil + {\foot@font 電子情報通信学会論文誌\hskip1zw + \@field\hskip1zw Vol.\ \@vol\hskip1zw + No.\,\@no\hskip1zw pp.\,\thepage --\pageref{ieicej@lastpage}\hskip1zw + \ft@year 年\@no 月}\hfil + \@Rbot}% +} + +\def\ps@IEICEJ{\let\@mkboth\@gobbletwo + \def\@oddfoot{\@Lbot\hfil + {\nombre@font \thepage}\hskip3mm + \@Rbot}% + \def\@evenfoot{\@Lbot + \hskip3mm{\nombre@font \thepage}\hfil + \@Rbot} + \def\@oddhead{\@Ltop + \rlap{\hbox to \textwidth{\smash{\rule[-1.75mm]{\textwidth}{0.25mm}}}}% + \odd@header\hfil + \@Rtop}% + \def\@evenhead{\@Ltop + \rlap{\hbox to \textwidth{\smash{\rule[-1.75mm]{\textwidth}{0.25mm}}}}\hfil + {\Small\head@font 電子情報通信学会論文誌\ + \hd@year /\@no\ Vol.\ {\let\bfseries\relax \@vol}\ No.\,\@no}% + \@Rtop}% +} + +\def\odd@header{% + \if@letter + {\Small\head@font レ\hskip1zw タ\hskip1zw ー}% + \else + \if@letterpaper + {\Small\head@font レ\hskip1zw タ\hskip1zw ー}% + \else + \setbox\@tempboxb\hbox{\Small\head@font\def\\{\unskip\ignorespaces}% + \hd@type /\kern\z@\hd@title}%% < + \ifdim \wd\@tempboxb > \textwidth + \ieicej@warning{header is too long. make it shorter. + ^^J\@spaces For example, \string\title[header title]{title}}% + \fi + \box\@tempboxb + \fi + \fi +} + +\def\ps@empty{% + \def\@oddhead{\@Ltop\hfil\@Rtop}% + \let\@evenhead\@oddhead + \def\@oddfoot{\@Lbot\hfil\@Rbot}% + \let\@evenfoot\@oddfoot + \let\@mkboth\@gobbletwo +} + +\if@tecrep + \def\ps@plain{\let\@mkboth\@gobbletwo + \let\ps@jpl@in\ps@plain + \def\@oddhead{\@Ltop\hfil\@Rtop}% + \def\@oddfoot{\@Lbot\reset@font\hfil ---\ \thepage\ ---\@Rbot}% \hfil + \let\@evenhead\@oddhead + \let\@evenfoot\@oddfoot} +\fi + +\def\jtitle{\@ifnextchar[% ] + {\d@jtitle}{\s@jtitle}} +\def\d@jtitle[#1]#2{\gdef\hd@title{#1}\gdef\@jtitle{#2}} +\def\s@jtitle#1{\gdef\hd@title{#1}\gdef\@jtitle{#1}} +\def\@jtitle{} +\def\hd@title{} + +\def\etitle#1{\gdef\@etitle{#1}} +\def\@etitle{} + +\def\@fnsymbol#1{\ifcase#1 \or % \ensuremath{ + \dagger\or + {\dagger}{\dagger}\or + {\dagger}{\dagger}{\dagger}\or + {\dagger}{\dagger}{\dagger}{\dagger}\or + {\dagger}{\dagger}{\dagger}{\dagger}{\dagger}\or + {\dagger}{\dagger}{\dagger}{\dagger}{\dagger}{\dagger}\or + {\dagger}{\dagger}{\dagger}{\dagger}{\dagger}{\dagger}{\dagger}\or + {\dagger}{\dagger}{\dagger}{\dagger}{\dagger}{\dagger}{\dagger}{\dagger}\or + {\dagger}{\dagger}{\dagger}{\dagger}{\dagger}{\dagger}% + {\dagger}{\dagger}{\dagger}\or + *\or {*}{*}\or {*}{*}{*}\or {*}{*}{*}{*}\or + {*}{*}{*}{*}{*}\or {*}{*}{*}{*}{*}{*}\or %% (((((((((((((((((((( + a)\or b)\or c)\or d)\or e)\or f)\or g)\or h)\or i)\or j)\or + k)\or l)\or m)\or n)\or o)\or p)\or q)\or r)\or s)\or t)\else + \@ctrerr\fi}% } +%% mathTimePlus redefines \@fnsymbol. +\let\ieicej@fnsymbol\@fnsymbol + +\newtoks\@authorlist +\newcount\@authorcnt +\newcount\@alcnt +\newcount\p@alcnt + \p@alcnt=9\relax +\newcount\@totalnumber +\newdimen\authornamesep + \authornamesep\z@ +%% \authornamesep1zw + +\def\authorlist#1{% + \if@paper + \@authorlist={#1}\the\@authorlist + \else + \let\authorentry\Lauthorentry + \@authorlist={#1}\@chkmbrship + \fi +} + +\def\Lauthorentry{\@ifnextchar[%% ] + {\TRL@ae}{\NL@ae}} + +\def\NL@ae#1#2#3#4{\@ifnextchar[% ] + {\L@aeP{#1}{#2}{#3}{#4}}% + {\L@ae{#1}{#2}{#3}{#4}}} + +\def\TRL@ae[#1]#2#3#4#5{\@ifnextchar[% ] + {\TRL@aeP[#1]{#2}{#3}{#4}{#5}}% + {\TRL@aeNP[#1]{#2}{#3}{#4}{#5}}} + +\def\L@ae#1#2#3#4{% + \@tempcnta\z@ + \advance \@authorcnt \@ne + \get@al{#4}% + \def\al@none{0}% + \expandafter\xdef + \csname @jauthormembership\number\@authorcnt\endcsname{% + \csname #3J@member\endcsname}% + \fmt@Jan{#1}% + \expandafter\xdef\csname @Jauthorname\number\@authorcnt\endcsname{% + \@authorname\kern\z@\plural@affi + \csname @jauthormembership\number\@authorcnt\endcsname}% + \fmt@Ean{#2}% + \expandafter\xdef\csname @Eauthorname\number\@authorcnt\endcsname{% + \@authorname\nobreak\plural@affi}% + \expandafter\xdef\csname @authormembership\number\@authorcnt\endcsname{% + \csname #3@member\endcsname}% + \expandafter\xdef\csname @authormembership\number\@authorcnt*\endcsname{% + \csname #3@members\endcsname}% + \global\@totalnumber=\@authorcnt + \def\plural@affi{}% +} + +\def\L@aeP#1#2#3#4[#5]{% + \@tempcnta\z@ + \advance \@authorcnt \@ne + \get@al{#4}% + \def\al@none{0}% + \@tempcnta\z@ + \get@p@al{#5}% + \expandafter\xdef\csname @jauthormembership\number\@authorcnt\endcsname{% + \csname #3J@member\endcsname}% + \fmt@Jan{#1}% + \expandafter\xdef\csname @Jauthorname\number\@authorcnt\endcsname{% + \@authorname\kern\z@\plural@affi\plural@p@affi + \csname @jauthormembership\number\@authorcnt\endcsname + }% + \fmt@Ean{#2}% + \expandafter\xdef\csname @Eauthorname\number\@authorcnt\endcsname{% + \@authorname\nobreak\plural@affi\nobreak\plural@p@affi + }% + \expandafter\xdef\csname @authormembership\number\@authorcnt\endcsname{% + \csname #3@member\endcsname}% + \expandafter\xdef\csname @authormembership\number\@authorcnt*\endcsname{% + \csname #3@members\endcsname}% + \global\@totalnumber=\@authorcnt + \def\plural@affi{}% + \def\plural@p@affi{}% +} + +\def\TRL@aeNP[#1]#2#3#4#5{% + \@tempcnta\z@ + \advance \@authorcnt \@ne + \GetEma{#1}% + \get@al{#5}% + \def\al@none{0}% + \expandafter\xdef\csname @jauthormembership\number\@authorcnt\endcsname{% + \csname #4J@member\endcsname}% + \fmt@Jan{#2}% + \expandafter\xdef\csname @Jauthorname\number\@authorcnt\endcsname{% + \@authorname\kern\z@\plural@affi\email@affi + \csname @jauthormembership\number\@authorcnt\endcsname}% + \fmt@Ean{#3}% + \expandafter\xdef\csname @Eauthorname\number\@authorcnt\endcsname{% + \@authorname\nobreak\plural@affi\email@affi}% + \expandafter\xdef\csname @authormembership\number\@authorcnt\endcsname{% + \csname #4@member\endcsname}% + \expandafter\xdef\csname @authormembership\number\@authorcnt*\endcsname{% + \csname #4@members\endcsname}% + \global\@totalnumber=\@authorcnt + \def\plural@affi{}% +} + +\def\TRL@aeP[#1]#2#3#4#5[#6]{% + \@tempcnta\z@ + \advance \@authorcnt \@ne + \GetEma{#1}% + \get@al{#5}% + \def\al@none{0}% + \@tempcnta\z@ + \get@p@al{#6}% + \expandafter\xdef\csname @jauthormembership\number\@authorcnt\endcsname{% + \csname #4J@member\endcsname}% + \fmt@Jan{#2}% + \expandafter\xdef\csname @Jauthorname\number\@authorcnt\endcsname{% + \@authorname\kern\z@\plural@affi\plural@p@affi\email@affi + \csname @jauthormembership\number\@authorcnt\endcsname + }% + \fmt@Ean{#3}% + \expandafter\xdef\csname @Eauthorname\number\@authorcnt\endcsname{% + \@authorname\nobreak\plural@affi\nobreak\plural@p@affi\nobreak\email@affi + }% + \expandafter\xdef\csname @authormembership\number\@authorcnt\endcsname{% + \csname #4@member\endcsname}% + \expandafter\xdef\csname @authormembership\number\@authorcnt*\endcsname{% + \csname #4@members\endcsname}% + \global\@totalnumber=\@authorcnt + \def\plural@affi{}% + \def\plural@p@affi{}% +} + +\def\rJ@member{\hskip-.25zw (正員)} +\def\mJ@member{\hskip-.25zw (正員)} +\def\aJ@member{\hskip-.25zw (准員)} +%%\def\nJ@member{(非会員)} +\def\nJ@member{} +\def\sJ@member{\hskip-.25zw (学生員)} +\def\hJ@member{\hskip-.25zw (名誉員)} +\def\fJ@member{\hskip-.25zw (正員:フェロー)} + +\def\authorentry{\@ifnextchar[% ] + {\TR@ae}{\N@ae}} + +\def\N@ae#1#2#3{\@ifnextchar[% ] + {\@aeP{#1}{#2}{#3}}% + {\@ae{#1}{#2}{#3}}} + +\def\TR@ae[#1]#2#3#4{\@ifnextchar[% ] + {\TR@aeP[#1]{#2}{#3}{#4}}% + {\TR@aeNP[#1]{#2}{#3}{#4}}} + +\def\fmt@Jan#1{% + \setbox\@tempboxb\hbox{\spaceskip=100mm #1}% + \ifdim \wd\@tempboxb < 100mm %% > + \ieicej@warning{Author's name "#1" doesn't have a space}% + \def\@tempname{#1}% + \def\@tempb##1\@nil{##1}% + \edef\@authorname{\expandafter\@tempb\@tempname \@nil}% + \else + \setbox\@tempboxb\hbox{#1}%% < + \ifdim \wd\@tempboxb > 5zw + \def\@tempb##1 ##2\@nil{##1\hskip\authornamesep ##2}% + \else + \def\@tempb##1 ##2\@nil{\leavevmode\hbox to 5zw{##1\hfil ##2}}% + \fi + \def\@tempname{#1}% + \edef\@authorname{\expandafter\@tempb\@tempname \@nil}% + \fi +} + +\def\fmt@Ean#1{% + \@temptokena{#1}% + \setbox\@tempboxa\hbox{\spaceskip=100mm #1}% + \ifdim \wd\@tempboxa < 100mm %% > + \ieicej@warning{a space should be added between 1st and 2nd name: "#1"}% + \else + \def\name@form##1 ##2\@nil{\gdef\@tempan{##1 \uppercase{##2}}}% + \expandafter\name@form\the\@temptokena\@nil + \expandafter\@temptokena\expandafter{\@tempan}% + \fi + \def\@authorname{\the\@temptokena}% +} + +\newif\if@affinone \@affinonefalse +\def\get@al#1{% + \def\@noaffi{none}\def\@tempaffi{#1}% + \ifx\@noaffi\@tempaffi + \global\@affinonetrue + \else + \@for\get@label:=#1\do{% + \@ifundefined{al@\get@label}% + {% + \global\advance \@alcnt \@ne + \expandafter\xdef\csname al@\get@label\endcsname{\the\@alcnt}% + \global\advance \@tempcnta \@ne + \protected@xdef\plural@affi{\plural@affi + \ifnum\@tempcnta=\@ne + $^{\ieicej@fnsymbol{\csname al@\get@label\endcsname}}$% + \else + $^{,\ieicej@fnsymbol{\csname al@\get@label\endcsname}}$% + \fi + }% + }% + {% + \global\advance \@tempcnta \@ne + \protected@xdef\plural@affi{\plural@affi + \ifnum\@tempcnta=\@ne + $^{\ieicej@fnsymbol{\csname al@\get@label\endcsname}}$% + \else + $^{,\ieicej@fnsymbol{\csname al@\get@label\endcsname}}$% + \fi + }% + }% + }% + \fi +} +\def\plural@affi{} + +\def\get@p@al#1{% + \@for\get@label:=#1\do{% + \@ifundefined{p@al@\get@label}% + {% + \global\advance \p@alcnt \@ne + \expandafter\xdef\csname p@al@\get@label\endcsname{\the\p@alcnt}% + \global\advance \@tempcnta \@ne + \protected@xdef\plural@p@affi{\plural@p@affi + \ifnum\@tempcnta=\@ne + $^{\ieicej@fnsymbol{\csname p@al@\get@label\endcsname}}$% + \else + $^{,\ieicej@fnsymbol{\csname p@al@\get@label\endcsname}}$% + \fi + }% + }% + {% + \global\advance \@tempcnta \@ne + \protected@xdef\plural@p@affi{\plural@p@affi + \ifnum\@tempcnta=\@ne + $^{\ieicej@fnsymbol{\csname p@al@\get@label\endcsname}}$% + \else + $^{,\ieicej@fnsymbol{\csname p@al@\get@label\endcsname}}$% + \fi + }% + }% + }% +} +\def\plural@p@affi{} + +\def\@ae#1#2#3{% + \@tempcnta\z@ + \advance \@authorcnt \@ne + \get@al{#3}% + \def\al@none{0}% + \fmt@Jan{#1}% + \expandafter\xdef\csname @Jauthorname\number\@authorcnt\endcsname{% + \@authorname\kern\z@\rlap{\plural@affi}}% + \fmt@Ean{#2}% + \expandafter\xdef\csname @Eauthorname\number\@authorcnt\endcsname{% + \@authorname\nobreak\plural@affi}% + \global\@totalnumber=\@authorcnt + \def\plural@affi{}% +} + +\def\@aeP#1#2#3[#4]{% + \@tempcnta\z@ + \advance \@authorcnt \@ne + \get@al{#3}% + \def\al@none{0}% + \@tempcnta\z@ + \get@p@al{#4}% + \fmt@Jan{#1}% + \expandafter\xdef\csname @Jauthorname\number\@authorcnt\endcsname{% + \@authorname\kern\z@\rlap{\plural@affi\plural@p@affi}% + }% + \fmt@Ean{#2}% + \expandafter\xdef\csname @Eauthorname\number\@authorcnt\endcsname{% + \@authorname\nobreak\plural@affi\nobreak\plural@p@affi + }% + \global\@totalnumber=\@authorcnt + \def\plural@affi{}% + \def\plural@p@affi{}% +} + +\if@tecrep\else + \if@letter + \font\EA@font=cmr5 + \else + \if@letterpaper + \font\EA@font=cmr6 + \else + \font\EA@font=cmr7 + \fi + \fi +\fi + +\def\email@affi{% + \if@tecrep\else + \ifx\@tempEma\empty\else + $^{\mbox{\EA@font\ieicej@fnsymbol{\the\c@enumiv}}}$% + \fi + \fi +} + +\def\TR@aeNP[#1]#2#3#4{% + \@tempcnta\z@ + \advance \@authorcnt \@ne + \GetEma{#1} + \get@al{#4}% + \def\al@none{0}% + \fmt@Jan{#2}% + \expandafter\xdef\csname @Jauthorname\number\@authorcnt\endcsname{% + \@authorname\kern\z@\plural@affi\email@affi + }% + \fmt@Ean{#3}% + \expandafter\xdef\csname @Eauthorname\number\@authorcnt\endcsname{% + \@authorname\nobreak\plural@affi\email@affi + }% + \global\@totalnumber=\@authorcnt + \def\plural@affi{}% +} + +\def\TR@aeP[#1]#2#3#4[#5]{% + \@tempcnta\z@ + \advance \@authorcnt \@ne + \GetEma{#1}% + \get@al{#4}% + \def\al@none{0}% + \@tempcnta\z@ + \get@p@al{#5}% + \fmt@Jan{#2}% + \expandafter\xdef\csname @Jauthorname\number\@authorcnt\endcsname{% + \@authorname\kern\z@\plural@affi\plural@p@affi\email@affi + }% + \fmt@Ean{#3}% + \expandafter\xdef\csname @Eauthorname\number\@authorcnt\endcsname{% + \@authorname\nobreak\plural@affi\nobreak\plural@p@affi\nobreak\email@affi + }% + \global\@totalnumber=\@authorcnt + \def\plural@affi{}% + \def\plural@p@affi{}% +} + +\if@tecrep + \bgroup + \catcode`@=12\relax + \gdef\GetEma#1{% + \def\tempema{#1}% + \ifx\tempema\empty + \def\tempAnDn{n n.n.n}% + \else + \def\tempa##1@##2\nil{##1 ##2}% + \edef\tempAnDn{\expandafter\tempa\tempema\nil}% + \fi + \ProcessEma + }% + \egroup + + \newcount\tn@dn + + \def\ProcessEma{% + \def\tempa##1 ##2\@nil{% + \@ifundefined{##2} + {\expandafter\gdef\csname ##2\endcsname{##1}% + \advance\tn@dn\@ne + \expandafter\def\csname adrs\number\tn@dn\endcsname{##2}% + }% + {\expandafter\xdef\csname ##2\endcsname{\csname ##2\endcsname,##1}% + }% + }% + \def\get@AnDn{\expandafter\tempa\tempAnDn\@nil}\get@AnDn + } + + \def\fmt@Ema{% + \@tempcntb\z@ + \loop + \ifnum\@tempcntb<\tn@dn %%> + \advance\@tempcntb\@ne + \def\ad@none{n.n.n}% + \expandafter\ifx\csname adrs\number\@tempcntb\endcsname \ad@none + \else + \edef\tmp@An{% + \expandafter\csname \csname adrs\number\@tempcntb\endcsname \endcsname}% + \@tempcnta\z@ + \@for\get@An:=\tmp@An\do{% + \global\advance \@tempcnta \@ne + }% + \protected@xdef\Mail@ddress{% + \ifx\Mail@ddress\empty\else\Mail@ddress,\ \fi + \ifnum\@totalnumber=\@ne + \if@affinone\else + $\ieicej@fnsymbol{\the\@tempcntb}$% + \fi + \else + $\ieicej@fnsymbol{\the\@tempcntb}$% + \fi + \ifnum\@tempcnta=\@ne + \expandafter\csname \csname adrs\number\@tempcntb\endcsname \endcsname + @\csname adrs\number\@tempcntb\endcsname + \else + \{%% \protect + \expandafter\csname \csname adrs\number\@tempcntb\endcsname \endcsname + \}% + @\csname adrs\number\@tempcntb\endcsname + \fi + }% + \gdef\header@ma{E-mail:}% + \fi + \repeat + } + \def\Mail@ddress{} + \def\header@ma{} + + \def\MailAddress#1{\gdef\@MailAddress{#1}} + \def\@MailAddress{} +\else + \setcounter{enumiv}{15}% + \def\GetEma#1{% + \def\@tempEma{#1}% + \ifx\@tempEma\empty\else + \global\advance \c@enumiv \@ne + \let\@fnsymbol\ieicej@fnsymbol + \protected@xdef\@Emadrs{\@Emadrs + \protect\footnotetext[\the\c@enumiv]{E-mail: \protect\texttt{#1}}% + }% + \fi + }% + \def\@Emadrs{} +\fi + +\newcount\@spcnt +\newcount\alignorder +\if@letter + \alignorder=2\relax +\else + \if@paper + \alignorder=4\relax + \else + \alignorder=3\relax +%%\alignorder=4\relax + \fi +\fi + +\if@tecrep + \alignorder=5\relax +\fi + +\def\fmt@Jauthorlist{% + \@tempcnta=\alignorder + \@tempcntb=\alignorder\advance \@tempcntb \@ne + \ifnum \@totalnumber < \@tempcntb %% > + \expandafter\def\csname sp\number\alignorder\endcsname{\relax}% + \else + \advance \@tempcntb \alignorder + \ifnum \@totalnumber < \@tempcntb %% > + \expandafter\def\csname sp\number\alignorder\endcsname{\cr}% + \advance \@tempcnta \alignorder + \expandafter\def\csname sp\number\@tempcnta\endcsname{\relax}% + \else + \advance \@tempcntb \alignorder + \ifnum \@totalnumber < \@tempcntb %% > + \expandafter\def\csname sp\number\alignorder\endcsname{\cr}% + \advance \@tempcnta \alignorder + \expandafter\def\csname sp\number\@tempcnta\endcsname{\cr}% + \advance \@tempcnta \alignorder + \expandafter\def\csname sp\number\@tempcnta\endcsname{\relax}% + \else + \advance \@tempcntb \alignorder + \ifnum \@totalnumber < \@tempcntb %% > + \expandafter\def\csname sp\number\alignorder\endcsname{\cr}% + \advance \@tempcnta \alignorder + \expandafter\def\csname sp\number\@tempcnta\endcsname{\cr}% + \advance \@tempcnta \alignorder + \expandafter\def\csname sp\number\@tempcnta\endcsname{\cr}% + \advance \@tempcnta \alignorder + \expandafter\def\csname sp\number\@tempcnta\endcsname{\relax}% + \else + \advance \@tempcntb \alignorder + \ifnum \@totalnumber < \@tempcntb %% > + \expandafter\def\csname sp\number\alignorder\endcsname{\cr}% + \advance \@tempcnta \alignorder + \expandafter\def\csname sp\number\@tempcnta\endcsname{\cr}% + \advance \@tempcnta \alignorder + \expandafter\def\csname sp\number\@tempcnta\endcsname{\cr}% + \advance \@tempcnta \alignorder + \expandafter\def\csname sp\number\@tempcnta\endcsname{\cr}% + \advance \@tempcnta \alignorder + \expandafter\def\csname sp\number\@tempcnta\endcsname{\relax}% + \else + \advance \@tempcntb \alignorder + \ifnum \@totalnumber < \@tempcntb %% > + \expandafter\def\csname sp\number\alignorder\endcsname{\cr}% + \advance \@tempcnta \alignorder + \expandafter\def\csname sp\number\@tempcnta\endcsname{\cr}% + \advance \@tempcnta \alignorder + \expandafter\def\csname sp\number\@tempcnta\endcsname{\cr}% + \advance \@tempcnta \alignorder + \expandafter\def\csname sp\number\@tempcnta\endcsname{\cr}% + \advance \@tempcnta \alignorder + \expandafter\def\csname sp\number\@tempcnta\endcsname{\cr}% + \advance \@tempcnta \alignorder + \expandafter\def\csname sp\number\@tempcnta\endcsname{\relax}% + \else + \advance \@tempcntb \alignorder + \expandafter\def\csname sp\number\alignorder\endcsname{\cr}% + \advance \@tempcnta \alignorder + \expandafter\def\csname sp\number\@tempcnta\endcsname{\cr}% + \advance \@tempcnta \alignorder + \expandafter\def\csname sp\number\@tempcnta\endcsname{\cr}% + \advance \@tempcnta \alignorder + \expandafter\def\csname sp\number\@tempcnta\endcsname{\cr}% + \advance \@tempcnta \alignorder + \expandafter\def\csname sp\number\@tempcnta\endcsname{\cr}% + \advance \@tempcnta \alignorder + \expandafter\def\csname sp\number\@tempcnta\endcsname{\cr}% + \advance \@tempcnta \alignorder + \expandafter\def\csname sp\number\@tempcnta\endcsname{\cr}% + \fi + \fi + \fi + \fi + \fi + \fi +} + +\if@tecrep + \def\@outputJauthorlist{% + \fmt@Jauthorlist + \@authorcnt\z@ + \loop\ifnum \@authorcnt < \@totalnumber %% > + \advance \@authorcnt \@ne + \advance \@spcnt \@ne + \@ifundefined{sp\number\@spcnt}% + {\expandafter\def\csname sp\number\@spcnt\endcsname{\hskip\Pauthorsep}}{}% + \let\cr\@par + \xdef\@tempx{\@tempx + \mbox{\csname @Jauthorname\number\@authorcnt\endcsname}% + \csname sp\number\@spcnt\endcsname}% + \repeat + \@tempx + } +\else + \def\@outputJauthorlist{% + \fmt@Jauthorlist + \@authorcnt\z@ + \loop\ifnum \@authorcnt < \@totalnumber %% > + \advance \@authorcnt \@ne + \advance \@spcnt \@ne + \@ifundefined{sp\number\@spcnt}% + {\expandafter\def\csname sp\number\@spcnt\endcsname{&}}{}% + \xdef\@tempx{\@tempx\csname @Jauthorname\number\@authorcnt\endcsname + \csname sp\number\@spcnt\endcsname}% + \repeat + \@tempx + } +\fi + +\def\@tempx{} + +\def\breakauthorline#1{% + \@for\@breakauthor:=#1\do{% + \expandafter\gdef\csname @breakauthorline\@breakauthor\endcsname{\\} + }% + \@authorcnt\z@ + \loop\ifnum \@authorcnt < \@totalnumber %% > + \advance \@authorcnt \@ne + \@ifundefined{@breakauthorline\number\@authorcnt}% + {\expandafter\gdef\csname @breakauthorline\number\@authorcnt\endcsname + {\relax}}{\relax}% + \repeat +} + +\newcount\totalnumberm@ne + +\def\L@outputEauthorlist{% + \def\r@member{{\itshape Member}}% + \def\r@members{{\itshape Members}}% + \def\m@member{{\itshape Member}}% + \def\m@members{{\itshape Members}}% + \def\n@member{{\itshape Nonmember}}% + \def\n@members{{\itshape Nonmembers}}% + \def\a@member{{\itshape Affiliate Member}}% + \def\a@members{{\itshape Affiliate Members}}% + \def\h@member{{\itshape Fellow, Honorary Member}}% + \def\h@members{{\itshape Fellows, Honorary Members}}% + \def\s@member{{\itshape Student Member}}% + \def\s@members{{\itshape Student Members}}% + \def\f@member{{\itshape Fellow}}% + \def\f@members{{\itshape Fellows}}% + \def\no@authormembership{\relax}% + \@authorcnt\z@ + \totalnumberm@ne\@totalnumber \advance \totalnumberm@ne -\@ne + \loop\ifnum \@authorcnt < \@totalnumber %% > + \advance \@authorcnt \@ne + \ifnum \@authorcnt < \totalnumberm@ne %% > + \mbox{\csname @Eauthorname\number\@authorcnt\endcsname + \expandafter\ifx \csname @authormembership\number\@authorcnt\endcsname + \no@authormembership + \else + \nobreak, + \fi + \nobreak\csname @authormembership\number\@authorcnt\endcsname}\nobreak, + \csname @breakauthorline\number\@authorcnt\endcsname + \else + \ifnum \@authorcnt = \@totalnumber + \mbox{\csname @Eauthorname\number\@authorcnt\endcsname + \expandafter\ifx \csname @authormembership\number\@authorcnt\endcsname + \no@authormembership + \else + \nobreak, + \fi + \nobreak\csname @authormembership\number\@authorcnt\endcsname}% + \csname @breakauthorline\number\@authorcnt\endcsname + \else + \mbox{\csname @Eauthorname\number\@authorcnt\endcsname + \expandafter\ifx \csname @authormembership\number\@authorcnt\endcsname + \no@authormembership + \else + \nobreak, + \fi + \nobreak\csname @authormembership\number\@authorcnt\endcsname + \ifnum \@totalnumber=\tw@\ \else , \fi}% + \csname @breakauthorline\number\@authorcnt\endcsname\allowbreak + and\ + \fi + \fi + \repeat +} + +\def\@outputEauthorlist{% + \@authorcnt\z@ + \totalnumberm@ne\@totalnumber \advance \totalnumberm@ne -\@ne + \loop\ifnum \@authorcnt < \@totalnumber %% > + \advance \@authorcnt \@ne + \ifnum \@authorcnt < \totalnumberm@ne %% > + \csname @Eauthorname\number\@authorcnt\endcsname\nobreak , + \csname @breakauthorline\number\@authorcnt\endcsname + \else + \ifnum \@authorcnt = \@totalnumber + \csname @Eauthorname\number\@authorcnt\endcsname + \else + \csname @Eauthorname\number\@authorcnt\endcsname\nobreak + \ifnum \@totalnumber=\tw@\ \else , \fi + \csname @breakauthorline\number\@authorcnt\endcsname + and\ \nobreak + \fi + \fi + \repeat +} + +\newif\if@plural +\newcount\@authorcntp@ne + +%% letter and letter paper +\def\@chkmbrship{% + \the\@authorlist + \@authorcnt \z@ + \@pluralfalse + \loop\ifnum \@authorcnt < \@totalnumber %% > + \advance \@authorcnt \@ne + \@authorcntp@ne=\@authorcnt \advance \@authorcntp@ne \@ne + \if@plural + \edef\@nextmembership{% + \csname @authormembership\number\@authorcntp@ne*\endcsname}% + \else + \edef\@nextmembership{% + \csname @authormembership\number\@authorcntp@ne\endcsname}% + \fi + \expandafter\ifx\csname @authormembership\number\@authorcnt\endcsname + \@nextmembership + \expandafter\gdef\csname @authormembership\number\@authorcnt\endcsname + {\relax}% + \edef\tempauthormembership + {\csname @authormembership\number\@authorcntp@ne*\endcsname}% + \expandafter\let + \csname @authormembership\number\@authorcntp@ne\endcsname + \tempauthormembership \@pluraltrue + \else \@pluralfalse + \fi + \repeat +} + +\newcount\chk@alcnt +\newcount\chk@p@alcnt + +\if@tecrep %%% + \def\affiliate[#1]#2#3{% + \advance \chk@alcnt \@ne + \@ifundefined{al@#1}% + {\expandafter\def\csname al@#1\endcsname{1}% + \ieicej@warning{Check the "#1" label, it does not correspond to + ^^J\space\space any labels in \string\authorentry\space command}% + }{}% + \protected@xdef\J@affiliate{\J@affiliate + $\protect\ieicej@fnsymbol{\csname al@#1\endcsname}$\ #2\\}% + \protected@xdef\E@affiliate{\E@affiliate + $\protect\ieicej@fnsymbol{\csname al@#1\endcsname}$\ #3\\}% + } + \def\J@affiliate{} + \def\E@affiliate{} + + %% 引数を3つに変更 + \def\paffiliate[#1]#2#3{% + \advance \chk@p@alcnt \@ne + \@ifundefined{p@al@#1}% + {\expandafter\def\csname p@al@#1\endcsname{1}% + \ieicej@warning{Check the "#1" label, it does not correspond to + ^^J\space\space any labels in \string\authorentry\space command} + }{}% + \protected@xdef\Jp@affiliate{\Jp@affiliate + $\protect\ieicej@fnsymbol{\csname p@al@#1\endcsname}$\ #2}% + \protected@xdef\Ep@affiliate{\Ep@affiliate + $\protect\ieicej@fnsymbol{\csname p@al@#1\endcsname}$\ #3}% + } + \def\Jp@affiliate{} + \def\Ep@affiliate{} +\else %%% + \def\affiliate[#1]#2#3{% + \advance \chk@alcnt \@ne + \@ifundefined{al@#1}% + {\expandafter\def\csname al@#1\endcsname{1}% + \ieicej@warning{Check the "#1" label, it does not correspond to + ^^J\space\space any labels in \string\authorentry\space command}% + }{}% + %% \let\@fnsymbol\ieicej@fnsymbol %% \show + \protected@xdef\@affiliate{\@affiliate + \protect\footnotetext[\csname al@#1\endcsname]{#2\hfil\break #3}}% + } + \def\@affiliate{} + + \def\paffiliate[#1]#2{% + \advance \chk@p@alcnt \@ne + \@ifundefined{p@al@#1}% + {\expandafter\def\csname p@al@#1\endcsname{1}% + \ieicej@warning{Check the "#1" label, it does not correspond to + ^^J\space\space any labels in \string\authorentry\space command} + }{}% + %% \let\@fnsymbol\ieicej@fnsymbol %% \show + \protected@xdef\p@affiliate{\p@affiliate + \protect\footnotetext[\csname p@al@#1\endcsname]{#2}}% + } + \def\p@affiliate{} +\fi %%% + +\newbox\eabstractbox +\newbox\ekeywordbox +\def\eabstract{\global\setbox\eabstractbox=\hbox\bgroup + \if@tecrep + \large + \else + \normalsize + \fi + {\bfseries Abstract\hskip1zw}\ignorespaces} +\def\endeabstract{\egroup} + +\def\ekeyword{\global\setbox\ekeywordbox=\hbox\bgroup + \if@tecrep + \large + \else + \normalsize + \fi + {\bfseries Key words\hskip1zw}\ignorespaces} +\def\endekeyword{\egroup} + +\newdimen\Pauthorsep + \Pauthorsep 7.5mm % 15Qx2zw + +\def\titlepagebaselinestretch#1{\gdef\@titlepagebaselinestretch{#1}} +\titlepagebaselinestretch{1} + +\def\jsubtitle#1{\gdef\@jsubtitle{#1}} +\def\@jsubtitle{} +\def\esubtitle#1{\gdef\@esubtitle{#1}} +\def\@esubtitle{} + +\if@tecrep %%% technicalreport + \def\maketitle{\par + \begingroup + \ifnum \chk@alcnt < \@alcnt %% > + \ieicej@warning{information of \string\affiliate\space is not assigned}% + \fi + \advance \p@alcnt -9\relax + \ifnum \chk@p@alcnt < \p@alcnt %% > + \ieicej@warning{information of \string\paffiliate\space is not assigned}% + \fi + \def\@fnsymbol##1{\ifcase##1 \or + \dag\or + \dag\dag\or + \dag\dag\dag\or + \dag\dag\dag\dag\or + \dag\dag\dag\dag\dag\or + \dag\dag\dag\dag\dag\dag\or + \dag\dag\dag\dag\dag\dag\dag\or + \dag\dag\dag\dag\dag\dag\dag\dag\or + \dag\dag\dag\dag\dag\dag\dag\dag\dag\or + *\or **\or ***\or ****\or *****\or ******\else\@ctrerr\fi\relax}% + \def\thefootnote{\fnsymbol{footnote}}% + \if@twocolumn + \twocolumn[\@maketitle]% + \else + \ieicej@warning{I don't recommend onecolumn option, + ^^J\space\space because of no compatibility with technicalreport option}% + \@maketitle + \fi + \endgroup + \let\maketitle\relax + \let\@maketitle\relax + \gdef\@affiliate{}\gdef\p@affiliate{} + \gdef\@jtitle{}\gdef\@etitle{} + \gdef\@jsubtitle{}\gdef\@esubtitle{} + \let\affiliate\relax\let\paffiliate\relax + \@authorlist={}% + \let\jkeyword\relax\let\jabstract\relax + \let\ekeyword\relax\let\eabstract\relax + \let\@outputJauthorlist\relax\let\@outputEauthorlist\relax + \let\@aeP\relax + \let\@ae\relax + \let\TR@ae\relax + \let\N@ae\relax + \let\TR@aeP\relax + \let\TR@aeNP\relax + \let\breakauthorline\relax + \@authorcnt \z@ + \loop\ifnum \the\@authorcnt < \the\@totalnumber %% > + \advance \@authorcnt \@ne + \expandafter\let\csname @Jauthorname\number\@authorcnt\endcsname\relax + \expandafter\let\csname @Eauthorname\number\@authorcnt\endcsname\relax + \repeat + } + + \def\@maketitle{% + \setbox\@tempboxa\vbox{% + \def\baselinestretch{\@titlepagebaselinestretch}% + \hskip8mm + \vtop{\footnotesize\baselineskip3mm + \hbox{社団法人\hskip1zw 電子情報通信学会}% + \hbox{THE INSTITUTE OF ELECTRONICS,}% + \hbox{INFORMATION AND COMMUNICATION ENGINEERS}% + }\hfill + \vtop{\footnotesize\baselineskip3mm + \hbox{信学技報}% + \hbox{TECHNICAL REPORT OF IEICE.}% + \hbox{}% + }\hskip8mm\hbox{}\par + \vskip\baselineskip + \bgroup + \centering + {\fontsize{16}{23}\selectfont + \@jtitle\par + }% + \vskip.25\baselineskip + \ifx\@jsubtitle\empty + \else + {\huge + \@jsubtitle\par + }% + \vskip.25\baselineskip + \fi + {\LARGE + \@outputJauthorlist\par + }% + \vskip.5\baselineskip + {\fontsize{10.5}{15}\selectfont + \J@affiliate\par + \Jp@affiliate\par + \ifx\@MailAddress\empty + \fmt@Ema + \ifx\header@ma\empty + \vskip.5\baselineskip + \else + E-mail: \Mail@ddress\par + \vskip.5\baselineskip + \fi + \else + E-mail: \@MailAddress + \vskip.5\baselineskip + \fi + }% + \egroup + \bgroup\large + \leavevmode + \unhbox\jabstractbox\par + \nointerlineskip + \vskip\baselineskip + \vskip-1zh + \vskip0pt + \leavevmode + \unhbox\jkeywordbox\par + \egroup + %% + \vskip1.5\baselineskip + \bgroup + \centering + {\fontsize{16}{23}\selectfont + \@etitle\par + }% + \vskip.25\baselineskip + \ifx\@esubtitle\empty + \else + {\huge + \@esubtitle\par + }% + \vskip.25\baselineskip + \fi + {\LARGE + \hyphenpenalty=10000\relax + \@outputEauthorlist\par + }% + \vskip.5\baselineskip + {\fontsize{10.5}{15}\selectfont + \E@affiliate\par + \Ep@affiliate\par + \ifx\@MailAddress\empty + \ifx\header@ma\empty + \vskip.5\baselineskip + \else + E-mail: \Mail@ddress\par + \vskip.5\baselineskip + \fi + \else + E-mail: \@MailAddress + \vskip.5\baselineskip + \fi + }% + \egroup + \bgroup\large + \leavevmode \unhbox\eabstractbox\par + \nointerlineskip + \vskip\baselineskip + \vskip-1zh + \vskip0pt + \leavevmode \unhbox\ekeywordbox + \egroup + \vskip\baselineskip + }% + \@tempdima\ht\@tempboxa + \advance \@tempdima \dp\@tempboxa %% < + \ifdim \@tempdima>\textheight + \ieicej@warning{The title page is too high. + ^^J\space\space You can adjust the height of a title page + ^^J\space\space by changing \string\titlepagebaselinestretch\space + in preamble. + ^^J\space\space For example, \string\titlepagebaselinestretch{0.9}}% + {\parindent\z@ + \vtop to \z@{% + \vbox to \textheight{% + \unvbox\@tempboxa + }\vss + }% + }\par + \clearpage + \else + \divide \@tempdima \Cvs + \@tempcnta=\@tempdima + \advance \@tempcnta \@ne + \vbox to \@tempcnta\Cvs{% + \box\@tempboxa\vss + }% + \fi + } + + \newbox\jabstractbox + \newbox\jkeywordbox + + \def\jabstract{\global\setbox\jabstractbox\hbox\bgroup + \large + {\bfseries あらまし\hskip1zw}\ignorespaces} + \def\endjabstract{\egroup} + + \def\jkeyword{\global\setbox\jkeywordbox\hbox\bgroup + \large + {\bfseries キーワード\hskip1zw}\ignorespaces} + \def\endjkeyword{\egroup} + + \let\abstract\jabstract + \let\endabstract\endjabstract + \let\keyword\jkeyword + \let\endkeyword\endjkeyword + +\else %%% + + \if@letter + \def\abstract{\parindent\z@ + \hspace*{1zw}{\bfseries あらまし\hskip1zw}\ignorespaces} + \def\endabstract{\par\ignorespaces} + + \def\keyword{\parindent\z@ + \hspace*{1zw}{\bfseries キーワード\hskip1zw}\ignorespaces} + \def\endkeyword{\par} + \else + \newbox\abstractbox + \newbox\keywordbox + \def\abstract{\global\setbox\abstractbox=\hbox\bgroup + \begin{minipage}[t]{137.5mm}%11Q 50zw + \Small\hskip1zw{\bfseries あらまし\hskip1zw}\ignorespaces} + \def\endabstract{\end{minipage}\egroup} + + \def\keyword{\global\setbox\keywordbox=\hbox\bgroup + \begin{minipage}[t]{137.5mm}%11Q 50zw + \Small\hskip1zw{\bfseries キーワード\hskip1zw}\ignorespaces} + \def\endkeyword{\end{minipage}\egroup} + \fi + + \let\jabstract\abstract + \let\endjabstract\endabstract + \let\jkeyword\keyword + \let\endjkeyword\endkeyword + + \newdimen\Lauthorsep + %% \Lauthorsep 4.125mm % 11Qx1.5zw + \Lauthorsep 5.5mm % 11Qx2zw + \newdimen\LPauthorsep + %% \LPauthorsep 3mm % 12Qx1zw + \LPauthorsep 6mm % 12Qx2zw + %%\newdimen\Pauthorsep + %% \Pauthorsep 7.5mm % 15Qx2zw + + \def\makeLtitle{\par + \global\@topnum\z@ + \begingroup + \ifnum \chk@alcnt < \@alcnt %% > + \ieicej@warning{information of \string\affiliate\space is not assigned}% + \fi + \advance \p@alcnt -9\relax + \ifnum \chk@p@alcnt < \p@alcnt %% > + \ieicej@warning{information of \string\paffiliate\space is not assigned}% + \fi + \long\def\@makefntext##1{% << + \ifnum \p@alcnt > \@alcnt + \ifnum \p@alcnt > \thr@@ + \@tempdima=\p@alcnt zw + \divide \@tempdima \tw@ + \advance \@tempdima .75zw + \else + \@tempdima=2zw + \fi + \else %% < + \ifnum \@alcnt > \thr@@ + \@tempdima=\@alcnt zw + \divide \@tempdima \tw@ + \advance \@tempdima .75zw + \else + \@tempdima=2zw + \fi + \fi + \@tempdimb=\columnwidth + \global\advance \@tempdimb -\@tempdima %% 02 + \everypar={\hangindent=\@tempdima \hangafter=1\relax}% + \parindent\@tempdima + \noindent + \if@tempswa + \hbox to \@tempdima{\hss + \@thefnmark\ }\parbox[t]{\@tempdimb}{##1\strut}% + \else + \hbox to \@tempdima{\hss + $^{\@thefnmark}$\,}\parbox[t]{\@tempdimb}{##1\strut}% + \fi + }% + \def\thefootnote{\fnsymbol{footnote}}% + \def\@fnsymbol##1{\ifcase##1 \or + \dag\or + \dag\dag\or + \dag\dag\dag\or + \dag\dag\dag\dag\or + \dag\dag\dag\dag\dag\or + \dag\dag\dag\dag\dag\dag\or + \dag\dag\dag\dag\dag\dag\dag\or + \dag\dag\dag\dag\dag\dag\dag\dag\or + \dag\dag\dag\dag\dag\dag\dag\dag\dag\or + *\or **\or ***\or ****\or *****\or ******\or %% (((((((((((((((((((( + a)\or b)\or c)\or d)\or e)\or f)\or g)\or h)\or i)\or j)\or + k)\or l)\or m)\or n)\or o)\or p)\or q)\or r)\or s)\or t)\else + \@ctrerr\fi\relax}% + \skip\@mpfootins=2.75mm \@plus .25mm \@minus \z@ + \noindent + \begin{minipage}{\columnwidth}% + \@makeLtitle + \@tempswafalse + \@affiliate + \p@affiliate + \@tempswatrue + \@Emadrs + \end{minipage}\par + \vskip23\@Q \@plus 18\@Q \@minus 1\@Q + \thispagestyle{ieicej}% + \endgroup + \let\makeLtitle\relax + \let\@makeLtitle\relax + \gdef\@affiliate{}\gdef\p@affiliate{}% + \gdef\@jtitle{}\gdef\@etitle{}% + \let\affiliate\relax\let\paffiliate\relax + \@authorlist={}% + \let\@outputJauthorlist\relax\let\L@outputEauthorlist\relax + \let\L@aeP\relax + \let\L@ae\relax + \let\breakauthorline\relax + \@authorcnt\z@ + \loop\ifnum \the\@authorcnt < \the\@totalnumber %% > + \advance \@authorcnt \@ne + \expandafter\let\csname @Jauthorname\number\@authorcnt\endcsname\relax + \expandafter\let\csname @Eauthorname\number\@authorcnt\endcsname\relax + \repeat + } + + \def\@makeLtitle{\newpage + \bgroup + \null\parindent\z@ + \tabcolsep\z@ + \linethickness{0.1mm}% + \vskip3.75mm + {\bfseries\mathversion{bold}\baselineskip18\@Q + \@jtitle\par + } + {\Small + \tabcolsep\Lauthorsep + \begin{tabular}{@{}ll@{}} + \@outputJauthorlist + \end{tabular}\par + } + \nointerlineskip + \vskip4\@Q + {\footnotesize + \@etitle\par + } + \vskip3\@Q + {\footnotesize + \parbox[t]{\columnwidth}{\raggedright\baselineskip3.25mm + \hyphenpenalty=10000\relax + \L@outputEauthorlist}\par + } + \egroup + } + + \def\maketitle{\par + \begingroup + \ifnum \chk@alcnt < \@alcnt %% > + \ieicej@warning{information of \string\affiliate\space is not assigned}% + \fi + \advance \p@alcnt -9\relax + \ifnum \chk@p@alcnt < \p@alcnt %% > + \ieicej@warning{information of \string\paffiliate\space is not assigned}% + \fi + \twocolumn[\csname @make\@type title\endcsname] + \thispagestyle{ieicej}% + \def\thefootnote{\fnsymbol{footnote}}% + \long\def\@makefntext##1{%% << + \ifnum \p@alcnt > \@alcnt + \ifnum \p@alcnt > \thr@@ + \@tempdima=\p@alcnt zw + \divide \@tempdima \tw@ + \advance \@tempdima .75zw + \else + \@tempdima=2zw + \fi + \else %% < + \ifnum \@alcnt > \thr@@ + \@tempdima=\@alcnt zw + \divide \@tempdima \tw@ + \advance \@tempdima .5zw + \else + \@tempdima=2zw + \fi + \fi + \everypar={\hangindent=\@tempdima \hangafter=1\relax}% + \parindent\@tempdima + \noindent + \if@tempswa + \hbox to \@tempdima{\hss \@thefnmark\ }##1% + \else + \hbox to \@tempdima{\hss $^{\@thefnmark}$\,}##1% + \fi + }% + \@tempswafalse + \@affiliate + \p@affiliate + \@tempswatrue + \@Emadrs + \endgroup + \let\maketitle\relax + \expandafter\let\csname @make\@type title\endcsname\relax + \gdef\@affiliate{}\gdef\p@affiliate{} + \gdef\@jtitle{}\gdef\@etitle{} + \let\affiliate\relax\let\paffiliate\relax + \@authorlist={} + \let\keyword\relax\let\abstract\relax + \let\@outputJauthorlist\relax\let\@outputEauthorlist\relax + \let\L@outputEauthorlist\relax + \let\@aeP\relax + \let\@ae\relax + \let\L@aeP\relax + \let\L@ae\relax + \let\breakauthorline\relax + \@authorcnt \z@ + \loop\ifnum \the\@authorcnt < \the\@totalnumber %% > + \advance \@authorcnt \@ne + \expandafter\let\csname @Jauthorname\number\@authorcnt\endcsname\relax + \expandafter\let\csname @Eauthorname\number\@authorcnt\endcsname\relax + \repeat + } + + \def\ADJ#1{\gdef\@ADJ{#1}} + \def\@ADJ{} + \ADJ{0mm} + + %% paper + \def\@makePtitle{% + \setbox\@tempboxa\hbox{% + \begin{minipage}{137.5mm}% 151.5 - 14 + \vskip4.5mm + \parindent\z@ + \tabcolsep\z@ + \linethickness{0.1mm}% + \baselineskip33\@Q + {\LARGE + \@jtitle + }\par + \vskip11\@Q + {\Large + \tabcolsep\Pauthorsep + \begin{tabular}{@{}llll@{}} + \@outputJauthorlist + \end{tabular}\par + }% + \nointerlineskip + \vskip1mm + \Large\baselineskip24\@Q + \vskip14\@Q + \@etitle\par + \vskip8\@Q + {\large\baselineskip21\@Q + \parbox[t]{137.5mm}{\raggedright\baselineskip5.25mm + \hyphenpenalty=10000\relax + \@outputEauthorlist}\par + }% + \vskip35\@Q + \hfill\box\abstractbox\par + \vskip4\@Q + \hfill\box\keywordbox + \end{minipage}% + }% + \@tempdima\ht\@tempboxa + \advance \@tempdima \dp\@tempboxa + \divide \@tempdima \Cvs + \@tempcnta=\@tempdima + \advance \@tempcnta \thr@@ + {\newpage\null + \boxmaxdepth\z@ + \lineskiplimit\z@ + \lineskip\z@ + \parindent\z@ + \vbox to \@tempcnta\Cvs{% + \hskip14mm\box\@tempboxa + \vss}% + }\par + \vspace{\@ADJ}% + \setcounter{footnote}{0}% + } + + %% letterpaper + \def\@makeLPtitle{% + \setbox\@tempboxa\hbox{% + \begin{minipage}{137.5mm}% 151.5 - 14 + \vskip5mm + \parindent\z@ + \tabcolsep\z@ + \linethickness{0.1mm}% + {\jtitlefont@LP + \@jtitle\par + }% + \vskip11\@Q + {\jauthorfont@LP + \tabcolsep\LPauthorsep + \begin{tabular}{@{}llll@{}} + \@outputJauthorlist + \end{tabular} + }% + \vskip12\@Q + {\etitlefont@LP + \@etitle\par + }% + \vskip2\@Q + {\eauthorfont@LP + \parbox[t]{137.5mm}{\raggedright\baselineskip14\@Q + \hyphenpenalty=10000\relax + \L@outputEauthorlist}\par + }% + \nointerlineskip + \vskip23\@Q + \hfill\box\abstractbox\par + \vskip3\@Q + \hfill\box\keywordbox\par + \end{minipage}% + }% + \@tempdima\ht\@tempboxa + \advance \@tempdima \dp\@tempboxa + \divide \@tempdima \Cvs + \@tempcnta=\@tempdima + \advance \@tempcnta \tw@ + {\newpage\null + \boxmaxdepth\z@ + \lineskiplimit\z@ + \lineskip\z@ + \parindent\z@ + \vbox to \@tempcnta\Cvs{% + \hskip14mm\box\@tempboxa + \vss}% + }\par + \vspace{\@ADJ}% + \setcounter{footnote}{0}% + } + + %% LP (letterpaper) + \def\jtitlefont@LP{% + \fontsize{16\@JQ}{24\@Q}\bfseries\selectfont + \mathversion{bold}% + } + \def\etitlefont@LP{% + \normalsize\rmfamily\baselineskip14\@Q + } + \let\eauthorfont@LP\etitlefont@LP + \def\jauthorfont@LP{% + \normalsize\baselineskip20\@Q + } + + \if@letter + \let\maketitle\makeLtitle + \let\@aeP\relax + \let\@ae\relax + \let\@makePtitle\relax + \let\@makeLPtitle\relax + \let\@outputEauthorlist\relax + \fi + + \if@paper + \let\L@aeP\relax + \let\L@ae\relax + \let\makeLtitle\relax + \let\@makeLtitle\relax + \let\@makeLPtitle\relax + \let\L@outputEauthorlist\relax + \fi + + \if@letterpaper + \let\@aeP\relax + \let\@ae\relax + \let\makeLtitle\relax + \let\@makeLtitle\relax + \let\@makePtitle\relax + \let\@outputEauthorlist\relax + \fi + +\fi %%% + +\setcounter{secnumdepth}{5} +\newcounter{section} +\newcounter{subsection}[section] +\newcounter{subsubsection}[subsection] +\newcounter{paragraph}[subsubsection] +\newcounter{subparagraph}[paragraph] +\renewcommand{\thesection}{\@arabic\c@section.} +\renewcommand{\thesubsection}{\thesection\,\@arabic\c@subsection} +\renewcommand{\thesubsubsection}{% + \thesubsection.\,\@arabic\c@subsubsection} +\renewcommand{\theparagraph}{% ( + \@alph\c@paragraph\,)} +\renewcommand{\thesubparagraph}{% ( + \@roman\c@subparagraph\,)} + +\def\@afterheading{% + \global\@nobreaktrue + \everypar{% + \if@nobreak + \global\@nobreakfalse + \clubpenalty \z@ + \if@afterindent + \else + {\setbox\z@=\lastbox}% + \fi + \else + \clubpenalty\@clubpenalty + \everypar{}% + \fi}% +} + +\def\@startsection#1#2#3#4#5#6{\if@noskipsec \leavevmode \fi + \par \@tempskipa #4\relax + \@afterindenttrue + \ifdim \@tempskipa <\z@ \@tempskipa -\@tempskipa \@afterindentfalse\fi %% > + \if@nobreak + \everypar{}% + \else + \addpenalty\@secpenalty + \ifnum #2=\@ne + \vskip-\prevdepth \prevdepth\z@ \vskip\Cvs + \advance\@tempskipa-\Cvs \vspace*{\@tempskipa}% + \else + \addvspace\@tempskipa + \fi + \fi + \@ifstar{\@ssect{#3}{#4}{#5}{#6}}{\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}} + +%% \@sect{NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}[ARG1]{ARG2} +\def\@sect#1#2#3#4#5#6[#7]#8{%% < + \ifnum #2>\c@secnumdepth + \let\@svsec\@empty + \else + \refstepcounter{#1}% + \protected@edef\@svsec{\@seccntformat{#1}\relax}% + \fi + \@tempskipa #5\relax %% < + \ifdim \@tempskipa>\z@ + \begingroup + #6{% + \@hangfrom{\hskip #3\relax{\csname #2@font\endcsname \@svsec}}% + \interlinepenalty \@M \@secjidori{#8}\@@par}% + \endgroup + \else + \def\@svsechd{% + #6{\hskip #3\relax + \@svsec #8}}% + \fi + \@xsect{#5}} + +%% \@ssect{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}{ARG} == +\def\@ssect#1#2#3#4#5{% + \@tempskipa #3\relax %% < + \ifdim \@tempskipa>\z@ + \begingroup + #4{% + \@hangfrom{\hskip #1}% + \interlinepenalty \@M \@secjidori{#5}\@@par}% + \endgroup + \else + \def\@svsechd{#4{\hskip #1\relax #5}}% + \fi + \@xsect{#3}} + +\def\@secjidori#1{% + \def\@tempfn{}% + \def\@tempfncnt{}% + \bgroup + \def\footnote{\@ifnextchar[% ] + {\@ignorefn}{\@ignorefn[]}}% + \long\def\@ignorefn[##1]##2{\gdef\@tempfncnt{##1}\gdef\@tempfn{##2}}% + \global\setbox\@tempboxb\hbox{\inhibitglue #1}% + \egroup %% < + \ifdim \wd\@tempboxb>4.5zw + \inhibitglue #1% + \else + \def\@makefnmark{\kern0pt\hbox to \z@{% + $^{\mbox{\tiny \kern-.5zw (注\@thefnmark{})\kern-.5zw}}$\hss}}% + \kanjiskip\z@ \@plus 1fill \@minus 1fill\xkanjiskip=\kanjiskip + \jmathkanjiskip=\kanjiskip + \hbox to 5zw{\inhibitglue #1\hfil}% + \ifx\@tempfn\empty\else + \ifx\@tempfncnt\empty\footnotetext{\@tempfn}\else + \footnotetext[\@tempfncnt]{\@tempfn} + \fi\fi + \fi +} + +\@namedef{3@font}{\bfseries} +\def\@seccntformat#1{\csname the#1\endcsname\hskip1zw} + +\if@tecrep + \def\sec@font{\bfseries\mathversion{bold}\baselineskip20.5\@Q} +\else + \DeclareFixedFont{\KFsec}{JY1}{gt}{m}{n}{14\@JQ} + \def\sec@font{\bfseries\KFsec\mathversion{bold}\baselineskip19\@Q} +\fi + +\if@letter + \newcommand{\section}{\@startsection{section}{1}{1zw}% + {.00001\Cvs \@plus.1mm \@minus.1mm}% + {.00001\Cvs \@plus.1mm \@minus.1mm}% + {\reset@font\normalsize\bfseries\mathversion{bold}}} +\else + \newcommand{\section}{\@startsection{section}{1}{1zw}% + {.5\Cvs \@plus.1mm \@minus.1mm}% + {.5\Cvs \@plus.1mm \@minus.1mm}% + {\reset@font\Large\sec@font}} +\fi + \newcommand{\subsection}{\@startsection{subsection}{2}{1zw}% + {.00001\Cvs \@plus.1mm \@minus.1mm}% + {.00001\Cvs \@plus.1mm \@minus.1mm}% + {\reset@font\normalsize\bfseries\mathversion{bold}}} + \newcommand{\subsubsection}{\@startsection{subsubsection}{3}{1zw}% + {.00001\Cvs \@plus.1mm \@minus.1mm}% + {.00001\Cvs \@plus.1mm \@minus.1mm}% + {\reset@font\normalsize}} +\newcommand{\paragraph}{\@startsection{paragraph}{4}{1zw}% + {.00001\Cvs \@plus.1mm \@minus.1mm}% + {.00001\Cvs \@plus.1mm \@minus.1mm}% + {\reset@font\normalsize}} +\newcommand{\subparagraph}{\@startsection{subparagraph}{5}{1zw}% + {.00001\Cvs \@plus.1mm \@minus.1mm}% + {.00001\Cvs \@plus.1mm \@minus.1mm}% + {\reset@font\normalsize}} + +\newcommand{\appendix}{\par + \renewcommand{\section}{\@startsection{section}{1}{\z@} + {.5\Cvs \@plus.1mm \@minus.1mm} + {.5\Cvs \@plus.1mm \@minus.1mm} + {\if@letter\centering\bfseries\else\centering\Large\sec@font\fi}}% + \section*{付録} + \renewcommand{\section}{\@startsection{section}{1}{1zw} + {.00001\Cvs \@plus.1mm \@minus.1mm} + {.00001\Cvs \@plus.1mm \@minus.1mm} + {\normalsize\bfseries\mathversion{bold}}}% + \setcounter{section}{0}% + \setcounter{subsection}{0}% + \setcounter{equation}{0}% + \setcounter{figure}{0}% + \setcounter{table}{0}% + \def\theequation{\protect\mbox{A$\cdot$\@arabic\c@equation}}% + \def\thefigure{A$\cdot$\,\@arabic\c@figure}% + \def\thetable{A$\cdot$\,\@arabic\c@table}% +} + +\if@twocolumn + \setlength\leftmargini {2zw}% +\else + \setlength\leftmargini {2zw}% +\fi +\setlength\leftmarginii {2zw}% +\setlength\leftmarginiii {2zw}% +\setlength\leftmarginiv {2zw}% +\if@twocolumn + \setlength\leftmarginv {1zw}% + \setlength\leftmarginvi{1zw}% +\else + \setlength\leftmarginv {1zw}% + \setlength\leftmarginvi{1zw}% +\fi +\setlength \labelsep {1zw}% +\setlength \labelwidth{\leftmargini} +\addtolength\labelwidth{-\labelsep} +\@beginparpenalty -\@lowpenalty +\@endparpenalty -\@lowpenalty +\@itempenalty -\@lowpenalty + +\renewcommand{\theenumi}{\@arabic\c@enumi} +\renewcommand{\theenumii}{\@alph\c@enumii} +\renewcommand{\theenumiii}{\@roman\c@enumiii} +\renewcommand{\theenumiv}{\@Alph\c@enumiv} +\newcommand{\labelenumi}{\kern-.5zw (\,\theenumi\,)\kern-.5zw} +\newcommand{\labelenumii}{\kern-.5zw (\,\theenumii\,)\kern-.5zw} +\newcommand{\labelenumiii}{\theenumiii.} +\newcommand{\labelenumiv}{\theenumiv.} +\renewcommand{\p@enumii}{\theenumi} +\renewcommand{\p@enumiii}{\theenumi(\theenumii)} +\renewcommand{\p@enumiv}{\p@enumiii\theenumiii} + +\renewenvironment{enumerate} + {%% < + \ifnum \@enumdepth >3\relax\@toodeep\else + \advance\@enumdepth\@ne + \edef\@enumctr{enum\romannumeral\the\@enumdepth}% + \list{\csname label\@enumctr\endcsname}{% + \leftmargin\z@ + \labelwidth2zw + \labelsep1zw + \itemindent4zw + \listparindent1zw + \topsep\z@\parsep\z@\partopsep\z@\itemsep\z@ + \clubpenalty-200 + \usecounter{\@enumctr}% + \def\makelabel##1{\hss\llap{##1}}}% + \fi}{\endlist} + +\newcommand{\labelitemi}{\leavevmode + \raise.1zh\hbox to 1zw{\hss \textbullet\hss}} +\newcommand{\labelitemii}{{\normalfont\bfseries\textendash}} +\newcommand{\labelitemiii}{\textasteriskcentered} +\newcommand{\labelitemiv}{\textperiodcentered} + +\renewenvironment{itemize} + {%% < + \ifnum \@itemdepth >3\relax\@toodeep\else + \advance\@itemdepth\@ne + \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}% +%% \expandafter + \list{\csname \@itemitem\endcsname}{% + \topsep\z@\parsep\z@\partopsep\z@\itemsep\z@ + \leftmargin\z@ + \labelwidth1zw + \labelsep1zw + \itemindent3zw + \listparindent1zw + \clubpenalty-200\relax + \def\makelabel##1{\hss\llap{##1}}}% + \fi}{\endlist} + +\def\descriptionlabel#1{\hspace\labelsep #1} +\newenvironment{description}{% + \list{}{% + \leftmargin\z@ + \labelsep1zw + \labelwidth\z@ + \itemindent-\leftmargin + \listparindent1zw + \topsep\z@\parsep\z@\partopsep\z@\itemsep\z@ + \let\makelabel\descriptionlabel}}{\endlist} + +\newskip\@hlskip +\@hlskip.5\Cvs \@plus 1mm \@minus .5mm + +\newenvironment{verse} + {\let\\\@centercr + \list{}{\itemsep\z@ + \topsep\@hlskip\parsep\z@\partopsep\z@ + \itemindent -1zw + \listparindent\itemindent + \rightmargin\leftmargin \advance\leftmargin 1zw}% + \item\relax}{\endlist} + +\newenvironment{quotation} + {\list{}{\listparindent 1zw + \itemindent\listparindent + \rightmargin\leftmargin + \topsep\@hlskip\parsep\z@\partopsep\z@ + }% + \item\relax}{\endlist} + +\newenvironment{quote} + {\list{}{% + \topsep\@hlskip\parsep\z@\partopsep\z@ + \rightmargin\leftmargin}% + \item\relax}{\endlist} + +\gdef\tabbing{\lineskip \z@skip\let\>\@rtab\let\<\@ltab\let\=\@settab + \let\+\@tabplus\let\-\@tabminus\let\`\@tabrj\let\'\@tablab + \let\\=\@tabcr + \@hightab\@firsttab + \global\@nxttabmar\@firsttab + \dimen\@firsttab\@totalleftmargin + \global\@tabpush\z@ \global\@rjfieldfalse + \topsep\@hlskip \parsep\z@\partopsep\z@ + \trivlist \item\relax + \if@minipage\else\vskip\parskip\fi + \setbox\@tabfbox\hbox{% + \rlap{\hskip\@totalleftmargin\indent\the\everypar}}% + \def\@itemfudge{\box\@tabfbox}% + \@startline\ignorespaces} + +\newdimen\verbatimleftmargin + \verbatimleftmargin\z@ +\newdimen\verbatimbaselineskip + \verbatimbaselineskip\Cvs +\def\verbatimsize{\normalsize} + +\def\@verbatim{% + \topsep\z@\partopsep\z@\parsep\z@\itemsep\z@ + \trivlist \item\relax + \if@minipage\else + \vskip\baselineskip + \vskip-\verbatimbaselineskip + \fi + \leftskip\@totalleftmargin + \if@minipage\else + \advance \leftskip by \verbatimleftmargin + \fi + \rightskip\z@skip + \parindent\z@\parfillskip\@flushglue\parskip\z@skip + \@@par + \@tempswafalse + \def\par{% + \if@tempswa + \leavevmode \null \@@par\penalty\interlinepenalty + \else + \@tempswatrue + \ifhmode\@@par\penalty\interlinepenalty\fi + \fi}% + \let\do\@makeother \dospecials + \obeylines + \verbatimsize \baselineskip\verbatimbaselineskip + \ttfamily \@noligs + \everypar \expandafter{\the\everypar \unpenalty}% +} + +%% from latex.ltx +%% v1.3 +\def\@item[#1]{% + \if@noparitem + \@donoparitem + \else + \if@inlabel + \indent \par + \fi + \ifhmode + \unskip\unskip \par + \fi + \if@newlist + \if@nobreak + \@nbitem + \else + \addpenalty\@beginparpenalty + \addvspace\@topsep + \addvspace{-\parskip}% + \fi + \else + \addpenalty\@itempenalty + \addvspace\itemsep + \fi + \global\@inlabeltrue + \fi + \everypar{% + \@minipagefalse + \global\@newlistfalse + \if@inlabel + \global\@inlabelfalse + {\setbox\z@\lastbox + \ifvoid\z@ + \kern-\itemindent + \fi}% + \box\@labels + \penalty\z@ + \fi + \if@nobreak + \@nobreakfalse + \clubpenalty\z@ %\@M --> \z@ + \else + \clubpenalty \@clubpenalty + \everypar{}% + \fi}% + \if@noitemarg + \@noitemargfalse + \if@nmbrlist + \refstepcounter\@listctr + \fi + \fi + \sbox\@tempboxa{\makelabel{#1}}% + \global\setbox\@labels\hbox{% + \unhbox\@labels + \hskip \itemindent + \hskip -\labelwidth + \hskip -\labelsep + \ifdim \wd\@tempboxa >\labelwidth + \box\@tempboxa + \else + \hbox to\labelwidth {\unhbox\@tempboxa}% + \fi + \hskip \labelsep}% + \ignorespaces\inhibitglue +} + +\newcounter{figure} +\renewcommand{\thefigure}{\@arabic\c@figure} +\def\fps@figure{tbp} +\def\ftype@figure{1} +\def\ext@figure{lof} +\def\fnum@figure{\figurename~\thefigure} +\def\fnum@efigure{Fig.\,\thefigure} +\newenvironment{figure} + {\@floatenv + \if@tecrep\capwidth\hsize\ecapwidth\hsize\else + \capwidth65mm\ecapwidth65mm\fi + \abovecaptionskip1mm\belowcaptionskip\z@\@float{figure}} + {\end@float} +\newenvironment{figure*} + {\@floatenv\capwidth.66\textwidth\ecapwidth.66\textwidth + \abovecaptionskip1mm\belowcaptionskip\z@\@dblfloat{figure}} + {\end@dblfloat} +\newcounter{table} +\renewcommand{\thetable}{\@arabic\c@table} +\def\fps@table{tbp} +\def\ftype@table{2} +\def\ext@table{lot} +\def\fnum@table{\tablename~\thetable} +\def\fnum@etable{Table~\thetable} +\newenvironment{table} + {\@floatenv + \if@tecrep\capwidth\hsize\ecapwidth\hsize\else + \capwidth65mm\ecapwidth65mm\fi + \abovecaptionskip\z@\belowcaptionskip3pt\@float{table}} + {\end@float} +\newenvironment{table*} + {\@floatenv\capwidth.66\textwidth\ecapwidth.66\textwidth + \abovecaptionskip\z@\belowcaptionskip3pt\@dblfloat{table}} + {\end@dblfloat} +\def\@floatboxreset {% + \reset@font + \small\tabcolsep.5zw + \@setminipage +} +\def\@floatenv{\let\center\Center} + +\def\Center{\topsep\z@\parsep\z@\partopsep\z@\itemsep\z@ + \trivlist \centering\item\relax} +\def\endCenter{\endtrivlist} + +\long\def\@caption#1[#2]#3{\par + \begingroup + \@parboxrestore + \if@minipage + \@setminipage + \fi + \small + \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par + \endgroup} + +\newlength\abovecaptionskip +\newlength\belowcaptionskip + +\newbox\@tempboxb +\newdimen\capwidth +\newdimen\ecapwidth + +\long\def\@makecaption#1#2{% + \vskip\abovecaptionskip + \setbox\@tempboxa\hbox{#1\hskip1zw\shortstack[l]{#2}}% + \@tempdima\ht\@tempboxa \advance \@tempdima \dp\@tempboxa + \setbox\@tempboxb\hbox{#1\hskip1zw}%% << + \ifdim \@tempdima > \baselineskip + \ifdim \wd\@tempboxa > \capwidth + \hfil\parbox[t]{\capwidth}{\hangindent\wd\@tempboxb + #1\hskip1zw #2}\vskip2\@Q + \else + \hfil\parbox[t]{\wd\@tempboxa}{\hangindent\wd\@tempboxb + #1\hskip1zw #2}\vskip2\@Q + \fi + \else %% < + \ifdim \wd\@tempboxa > \capwidth + \hfil\parbox[t]{\capwidth}{\hangindent\wd\@tempboxb + #1\hskip1zw #2}\vskip2\@Q + \else + \setbox\@tempboxb\hbox{#2}% + \ifdim \wd\@tempboxb < 4.5zw %% > + \hbox to\hsize{\hfil #1\hskip1zw\kintou{5zw}{#2}\hfil}% + \else + \hbox to\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \fi + \fi +} + +\long\def\ecaption#1{\small + \setbox\@tempboxa\hbox{\csname fnum@e\@captype\endcsname\hskip1zw + \shortstack[l]{#1}}% + \@tempdima\ht\@tempboxa \advance \@tempdima \dp\@tempboxa + \setbox\@tempboxb\hbox{\csname fnum@e\@captype\endcsname\hskip1zw}%% << + \ifdim \@tempdima > \baselineskip + \ifdim \wd\@tempboxa > \ecapwidth + \hfil\parbox[t]{\ecapwidth}{\hangindent\wd\@tempboxb + \csname fnum@e\@captype\endcsname\hskip1zw #1}\par + \else + \hfil\parbox[t]{\wd\@tempboxa}{\hangindent\wd\@tempboxb + \csname fnum@e\@captype\endcsname\hskip1zw #1}\par + \fi + \else %% < + \ifdim \wd\@tempboxa > \ecapwidth + \hfil\parbox[t]{\ecapwidth}{\hangindent\wd\@tempboxb + \csname fnum@e\@captype\endcsname\hskip1zw #1}\par + \else + \hbox to\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \fi + \vspace{\belowcaptionskip}\par +} + +\setlength\arraycolsep{5\p@} +\setlength\tabcolsep{.5zw} +\setlength\arrayrulewidth{.1mm} +\setlength\doublerulesep{\z@} +\setlength\tabbingsep{\labelsep} + +\skip\@mpfootins = \skip\footins +\setlength\fboxsep{.5zw} +\setlength\fboxrule{.1mm} +\renewcommand{\theequation}{\@arabic\c@equation} +\if@NTT\else + \if@enablejfam + \DeclareSymbolFont{mincho}{JY1}{mc}{m}{n} + \DeclareSymbolFontAlphabet{\mathmc}{mincho} + \SetSymbolFont{mincho}{bold}{JY1}{gt}{m}{n} + \DeclareMathAlphabet\mathgt{JY1}{gt}{m}{n} + \reDeclareMathAlphabet{\mathrm}{\@mathrm}{\@mathmc} + \reDeclareMathAlphabet{\mathbf}{\@mathbf}{\@mathgt} + \jfam\symmincho + \else + \DeclareRobustCommand{\mathmc}{% + \@latex@error{Command \noexpand\mathmc invalid with\space + `disablejfam' class option.}\@eha + } + \DeclareRobustCommand{\mathgt}{% + \@latex@error{Command \noexpand\mathgt invalid with\space + `disablejfam' class option.}\@eha + } + \fi +\fi + +%% for 2.1.4 compatibility +\@ifundefined{reDeclareMathAlphabet}{% + \def\reDeclareMathAlphabet#1#2#3{% + \DeclareRobustCommand{#1}[1]{% + \ifmmode + \ifx\math@bgroup\@empty % 2.09 compatibility + #2\relax#3\relax##1\relax + \else % native mode + \ifx\math@bgroup\relax % oldstyle + #2\relax\@fontswitch\relax{#3}##1\relax + \else + #2{#3{##1}}% + \fi + \fi + \else + #2{##1}% + \fi + }% + }% + \@onlypreamble\reDeclareMathAlphabet + }{} + +\@ifundefined{mathmc}{\relax}{% + \if@enablejfam + \DeclareSymbolFont{mincho}{JY1}{mc}{m}{n}% + \DeclareSymbolFontAlphabet{\mathmc}{mincho}% + \SetSymbolFont{mincho}{bold}{JY1}{gt}{m}{n}% + \DeclareMathAlphabet\mathgt{JY1}{gt}{m}{n}% + \reDeclareMathAlphabet{\mathrm}{\@mathrm}{\@mathmc}% + \reDeclareMathAlphabet{\mathbf}{\@mathbf}{\@mathgt}% + \jfam\symmincho + \else + \DeclareRobustCommand{\mathmc}{% + \@latex@error{Command \noexpand\mathmc invalid with\space + `disablejfam' class option.}\@eha + }% + \DeclareRobustCommand{\mathgt}{% + \@latex@error{Command \noexpand\mathgt invalid with\space + `disablejfam' class option.}\@eha + }% + \fi +} + +\@ifundefined{mathmc}{\relax}{% + \DeclareOldFontCommand{\mc}{\normalfont\mcfamily}{\mathmc}% + \DeclareOldFontCommand{\gt}{\normalfont\gtfamily}{\mathgt}% +} + +\if@NTT\else + \DeclareOldFontCommand{\mc}{\normalfont\mcfamily}{\mathmc} + \DeclareOldFontCommand{\gt}{\normalfont\gtfamily}{\mathgt} +\fi +\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} +\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} +\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} +\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} +\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} +\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl} +\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc} +\DeclareRobustCommand*{\cal}{\@fontswitch\relax\mathcal} +\DeclareRobustCommand*{\mit}{\@fontswitch\relax\mathnormal} + +\newdimen\bibindent +\setlength\bibindent{1.5em} +\newcommand{\newblock}{\hskip .11em\@plus.33em\@minus.07em} + +\newenvironment{thebibliography}[1] +{% + \def\subsection{\@startsection{subsection}{2}{\z@} + {.00001\Cvs \@plus 1mm \@minus .1mm} + {.15\Cvs \@plus 1mm \@minus .1mm}{\centering\bfseries}} + \subsection*{\refname}% + \small\baselineskip15\@Q + \list{\@biblabel{\@arabic\c@enumiv}}% + {\settowidth\labelwidth{\@biblabel{\hspace*{2zw}}}% + \topsep\z@\parsep\z@\partopsep\z@\itemsep\z@ + \leftmargin3zw + \labelsep1zw + \@openbib@code + \usecounter{enumiv}% + \let\p@enumi\@empty + \renewcommand\theenumiv{\@arabic\c@enumiv}}% + \sloppy + \clubpenalty-100\relax + \widowpenalty-100\relax + \@clubpenalty\clubpenalty + \sfcode`\.\@m} + {\def\@noitemerr + {\@latex@warning{Empty `thebibliography' environment}}% + \endlist} +\def\@biblabel#1{[#1]} +\let\@openbib@code\@empty + +\def\@uketsuke{% + \vskip6\@Q + \raggedleft\rightskip1zw + (\@received\@revised\@finalreceived )\kern-.5zw\par +} + +\def\received#1#2#3{% + \gdef\@received{平成#1年#2月#3日受付}% + \gdef\@receivedyear{#1}} +\received{xx}{xx}{xx} + +\def\revised#1#2#3{% + \gdef\@revisedyear{#1}% + \ifx\@receivedyear\@revisedyear + \gdef\@revised{,#2月#3日再受付}% + \else + \gdef\@revised{,#1年#2月#3日再受付}% + \fi +} +\def\@revised{} + +\def\finalreceived#1#2#3{% + \gdef\@finalreceivedyear{#1}% + \ifx\@revisedyear\@finalreceivedyear + \gdef\@finalreceived{,\inhibitglue\break #2月#3日最終受付}% + \else + \gdef\@finalreceived{,\inhibitglue\break #1年#2月#3日最終受付}% + \fi +} +\def\@finalreceived{} + +%% paper, letterpaper +\newenvironment{biography}{\par + \raggedbottom + {\small \@uketsuke}\par + \nointerlineskip + \vskip17mm + \parindent\z@ + \leftskip8\@Q + \small\baselineskip15\@Q + \global\let\@uketsuke\relax +}{\par} + +\ifx\pdfpageheight\@undefined + \def\ieicej@in@ext{eps} +\else + \def\ieicej@in@ext{pdf} +\fi + +\newcounter{profile} +\def\profile{% + \@ifstar\np@profile{\@ifnextchar[%% ] + {\pic@profile}{\stepcounter{profile}% + \pic@profile[a\theprofile.\ieicej@in@ext]}}}% + +\long\def\pic@profile[#1]#2#3#4{% +% \stepcounter{profile}% + \if #2r \def\p@mbrship{(正員)\kern-.5zw}\else + \if #2m \def\p@mbrship{(正員)\kern-.5zw}\else + \if #2s \def\p@mbrship{(学生員)\kern-.5zw}\else + \if #2n \def\p@mbrship{}\else + \if #2a \def\p@mbrship{(准員)\kern-.5zw}\else + \if #2h \def\p@mbrship{(名誉員)\kern-.5zw}\else + \if #2f \def\p@mbrship{(正員:フェロー)\kern-.5zw}\else + \def\p@mbrship{}% + \ieicej@warning{Check the 1st. argument of \string\profile{#2}{#3}{}}% + \fi\fi\fi\fi\fi\fi\fi + \def\@checkname{#3}% + \setbox\@tempboxa\hbox{\spaceskip=100mm #3}% + \ifdim \wd\@tempboxa < 100mm + \ieicej@warning{Profile's name "#3" doesn't have a space}% + \let\@authorname\@checkname + \else + \setbox\@tempboxa\hbox{#3}% + \ifdim \wd\@tempboxa > 5zw + \def\@tempb##1 ##2\@nil{##1\hskip\authornamesep ##2}% + \else + \def\@tempb##1 ##2\@nil{\leavevmode\hbox to 5zw{##1\hfil ##2}}% + \fi + \edef\@authorname{\expandafter\@tempb\@checkname\@nil}% + \fi + \setbox\@tempboxa\hbox{% + \begin{minipage}[t]{19zw}% + \small\baselineskip15\@Q + {\normalsize{\bfseries \@authorname}\hskip1zw + \p@mbrship\nobreak\rule[-3mm]{0mm}{4mm}}\hfil\break + \hspace*{1zw}#4\unskip\inhibitglue + \end{minipage}% + }% + \@tempdima \ht\@tempboxa + \advance \@tempdima \dp\@tempboxa + \leavevmode + \hangindent9zw\hangafter-7\relax + \IfFileExists{#1}% a\theprofile.\ieicej@in@ext + {\smash{\lower23.9mm\hbox to \z@{\hss + \resizebox{20mm}{26.4mm}{% + \includegraphics{#1}}\hskip2.5mm + }}}% + {\smash{\lower23.9mm\hbox to \z@{\hss + \unitlength1mm + \begin{picture}(20,26.4) + \put(0,0){\framebox(20,26.4){\null}}% + \end{picture}\hskip2.5mm + }}}% + \ifdim \@tempdima < 26.4mm %% > + \vtop to 26.4mm{% + \hbox to 19zw{\hss + \begin{minipage}[t]{19zw}% + \small\baselineskip15\@Q + {\normalsize{\bfseries \@authorname}\hskip1zw + \p@mbrship\nobreak\rule[-3mm]{0mm}{4mm}}\hfil\break + \hspace*{1zw}#4\unskip\inhibitglue + \end{minipage}\hss}\vss + }\par + \else + {\normalsize{\bfseries \@authorname}\hskip1zw + \p@mbrship\nobreak\rule[-3mm]{0mm}{4mm}}\hfil\break + \hspace*{1zw}#4\par + \fi + \nointerlineskip + \vskip7mm +} + +\long\def\np@profile#1#2#3{% + \stepcounter{profile}% + \if #1r \def\p@mbrship{(正員)\kern-.5zw}\else + \if #1m \def\p@mbrship{(正員)\kern-.5zw}\else + \if #1s \def\p@mbrship{(学生員)\kern-.5zw}\else + \if #1n \def\p@mbrship{}\else + \if #1a \def\p@mbrship{(准員)\kern-.5zw}\else + \if #1h \def\p@mbrship{(名誉員)\kern-.5zw}\else + \if #1f \def\p@mbrship{(正員:フェロー)\kern-.5zw}\else + \def\p@mbrship{}% + \ieicej@warning{Check the 1st. argument of \string\profile{#1}{#2}{}}% + \fi\fi\fi\fi\fi\fi\fi + \def\@checkname{#2}% + \setbox\@tempboxa\hbox{\spaceskip=100mm #2}% + \ifdim \wd\@tempboxa < 100mm + \ieicej@warning{Profile's name "#2" doesn't have a space}% + \let\@authorname\@checkname + \else + \setbox\@tempboxa\hbox{#2}% + \ifdim \wd\@tempboxa > 5zw + \def\@tempb##1 ##2\@nil{##1\hskip\authornamesep ##2}% + \else + \def\@tempb##1 ##2\@nil{\leavevmode\hbox to 5zw{##1\hfil ##2}}% + \fi + \edef\@authorname{\expandafter\@tempb\@checkname\@nil}% + \fi + {\normalsize{\bfseries \@authorname}\hskip1zw + \p@mbrship\nobreak\rule[-3mm]{0mm}{4mm}}\hfil\break + \hspace*{1zw}#3\par + \nointerlineskip + \vskip7mm +} + +\if@tecrep + \renewenvironment{biography}{\relax}{\relax} + \long\def\pic@profile[#1]#2#3#4{} + \long\def\np@profile#1#2#3{} +\fi + +\renewcommand{\footnoterule}{% + \kern-3\p@ + \hrule height .1mm width \columnwidth + \kern 2.715\p@} + +\def\@makefnmark{\hbox{$^{\mbox{\tiny \kern-.5zw + (注\kern.1zw\@thefnmark{})\kern-.5zw}}$}} + +\newcommand\@makefntext[1]{\parindent1zw + \noindent\hbox{\kern-.5zw + (注\kern.1zw\@thefnmark{})\kern-.5zw\hbox to 1zw{\hss :\hss}}#1} + +\def\thefootnote{\@arabic\c@footnote} +\def\thempfootnote{\@fnsymbol\c@mpfootnote} + +%% from [proc|slide].cls +%% \def\thefootnote{\fnsymbol{footnote}} +%% from [article|report|book].cls +%% \renewcommand\thefootnote{\@fnsymbol\c@footnote}% +%% from latex.ltx +%% \def\@fnsymbol#1{\ensuremath{\ifcase#1\or *\or \dagger\or \ddagger\or +%% \mathsection\or \mathparagraph\or \|\or **\or \dagger\dagger +%% \or \ddagger\ddagger \else\@ctrerr\fi}} + +%% from fleqn.clo +%%\ProvidesFile{fleqn.clo} +%% [1998/08/17 v1.1c Standard LaTeX option +%% (flush left equations)] +\newdimen\mathindent +\AtEndOfClass{\mathindent1zw}% \leftmargini +\renewcommand\[{\relax + \ifmmode\@badmath + \else + \parsep 4\p@ \@plus2\p@ \@minus\p@ + \topsep 8\p@ \@plus2\p@ \@minus4\p@ + \itemsep 4\p@ \@plus2\p@ \@minus\p@ + \begin{trivlist}% + \@beginparpenalty\predisplaypenalty + \@endparpenalty\postdisplaypenalty + \item[]\leavevmode + \hb@xt@\linewidth\bgroup $\m@th\displaystyle %$ + \hskip\mathindent\bgroup + \fi} +\renewcommand\]{\relax + \ifmmode + \egroup $\hfil% $ + \egroup + \end{trivlist}% + \else \@badmath + \fi} +\renewenvironment{equation}% + {\@beginparpenalty\predisplaypenalty + \@endparpenalty\postdisplaypenalty + \refstepcounter{equation}% + \parsep 4\p@ \@plus2\p@ \@minus\p@ + \topsep 8\p@ \@plus2\p@ \@minus4\p@ + \itemsep 4\p@ \@plus2\p@ \@minus\p@ + \trivlist \item[]\leavevmode + \hb@xt@\linewidth\bgroup $\m@th% $ + \displaystyle + \hskip\mathindent}% + {$\hfil % $ + \displaywidth\linewidth\hbox{\@eqnnum}% + \egroup + \endtrivlist} +\renewenvironment{eqnarray}{% + \stepcounter{equation}% + \parsep 4\p@ \@plus2\p@ \@minus\p@ + \topsep 8\p@ \@plus2\p@ \@minus4\p@ + \itemsep 4\p@ \@plus2\p@ \@minus\p@ + \def\@currentlabel{\p@equation\theequation}% + \global\@eqnswtrue\m@th + \global\@eqcnt\z@ + \tabskip\mathindent + \let\\=\@eqncr + \setlength\abovedisplayskip{\topsep}% + \ifvmode + \addtolength\abovedisplayskip{\partopsep}% + \fi + \addtolength\abovedisplayskip{\parskip}% + \setlength\belowdisplayskip{\abovedisplayskip}% + \setlength\belowdisplayshortskip{\abovedisplayskip}% + \setlength\abovedisplayshortskip{\abovedisplayskip}% + $$\everycr{}\halign to\linewidth% $$ + \bgroup + \hskip\@centering + $\displaystyle\tabskip\z@skip{##}$\@eqnsel&% + \global\@eqcnt\@ne \hskip.8\arraycolsep \hfil${##}$\hfil&% + \global\@eqcnt\tw@ \hskip.8\arraycolsep + $\displaystyle{##}$\hfil \tabskip\@centering&% + \global\@eqcnt\thr@@ + \hb@xt@\z@\bgroup\hss##\egroup\tabskip\z@skip\cr}% + {\@@eqncr + \egroup + \global\advance\c@equation\m@ne$$% $$ + \@ignoretrue + } +%%\endinput +%% +%% End of file `fleqn.clo'. + +\def\@eqnnum{{\normalfont \normalcolor (\theequation)\hspace*{3mm}}} + +\def\@begintheorem#1#2{% + \settowidth{\labelwidth}{\kern-.5zw [#1\ #2]\kern-.5zw} + \begin{description} + \item[\@thmlbracket #1\ #2\@thmrbracket]} + +\def\@opargbegintheorem#1#2#3{% + \begin{description} + \item[\@thmlbracket #1\ #2\@thmrbracket (#3)\kern-.5zw]}%% +\def\@endtheorem{\end{description}} + +\def\thmbracket#1#2{\gdef\@thmlbracket{#1}\gdef\@thmrbracket{#2}} +\thmbracket{\kern-.5zw [}{]\kern-.5zw } +\def\@thmcountersep{} + +\def\ack{\par{\bfseries 謝辞}\hskip1zw} + +\if@NTT\else +\newif\if西暦 \西暦false +\def\西暦{\西暦true} +\def\和暦{\西暦false} +\def\today{{% + \iftdir + \if西暦 + \kansuji\number\year 年 + \kansuji\number\month 月 + \kansuji\number\day 日 + \else \@tempcnta\year + \advance\@tempcnta-1988 平成 + \ifnum \@tempcnta =1 元\else\kansuji\number\@tempcnta\fi 年 + \kansuji\number\month 月\kansuji\number\day 日 + \fi + \else + \if西暦 + \number\year\, 年\hspace{.5em}\nobreak + \number\month\, 月\hspace{.5em}\nobreak + \number\day\, 日 + \else \@tempcnta\year + \advance\@tempcnta-1988 平成 + \ifnum \@tempcnta =1 元\else\number\@tempcnta\fi + \, 年\hspace{.5em}\nobreak + \number\month\, 月\hspace{.5em}\nobreak\number\day\, 日 + \fi + \fi}} +\fi +%%\newcommand{\prepartname}{第} +%%\newcommand{\postpartname}{部} +%%\newcommand{\contentsname}{目 次} +%%\newcommand{\listfigurename}{図 目 次} +%%\newcommand{\listtablename}{表 目 次} +\newcommand{\refname}{文献} +%%\newcommand{\indexname}{索 引} +\newcommand{\figurename}{図} +\newcommand{\tablename}{表} +%%\newcommand{\appendixname}{付 録} +%%\newcommand{\abstractname}{概 要} + +%%## citesort.sty ##%% +%% from "citesort.sty", a little customized +\newcount\@minsofar +\newcount\@min +\newcount\@cite@temp +\def\@citex[#1]#2{% +\if@filesw \immediate \write \@auxout {\string \citation {#2}}\fi +\@tempcntb\m@ne \let\@h@ld\relax \def\@citea{}% +\@min\m@ne% +\@cite{% + \@for \@citeb:=#2\do {\@ifundefined {b@\@citeb}% + {\@h@ld\@citea\@tempcntb\m@ne{\bfseries ?}% + \@warning {Citation `\@citeb ' on page \thepage \space undefined}}% +{\@minsofar\z@ \@for \@scan@cites:=#2\do {% + \@ifundefined{b@\@scan@cites}% + {\@cite@temp\m@ne} + {\@cite@temp\number\csname b@\@scan@cites \endcsname \relax}% +\ifnum\@cite@temp > \@min% select the next one to list + \ifnum\@minsofar = \z@ + \@minsofar\number\@cite@temp + \edef\@scan@copy{\@scan@cites}\else + \ifnum\@cite@temp < \@minsofar + \@minsofar\number\@cite@temp + \edef\@scan@copy{\@scan@cites}\fi\fi\fi}\@tempcnta\@min + \ifnum\@minsofar > \z@ % some more + \advance\@tempcnta\@ne + \@min\@minsofar + \ifnum\@tempcnta=\@minsofar % Number follows previous--hold on to it + \ifx\@h@ld\relax + \edef \@h@ld{\@citea\csname b@\@scan@copy\endcsname}% + \else \edef\@h@ld{\ifmmode{]〜[}\else]〜[\fi + \csname b@\@scan@copy\endcsname}% + \fi + \else \@h@ld\@citea\csname b@\@scan@copy\endcsname + \let\@h@ld\relax + \fi % no more +\fi}% +\def\@citea{],\penalty\@highpenalty\,[}}\@h@ld}{#1}} +%% end of citesort.sty + +\def\@cite#1#2{\leavevmode\unskip + \ifnum\lastpenalty=\z@\penalty\@highpenalty\fi% highpenalty before + \,[{\multiply\@highpenalty 3 #1% % triple-highpenalties within + \if@tempswa,\penalty\@highpenalty\ #2\fi % and before note. + }]\spacefactor\@m} + +\def\onelineskip{\par\vspace{1\baselineskip}\par} +\def\halflineskip{\par\vspace{.5\baselineskip}\par} + +\def\ddash{\hbox to 2zw{---\hss ---}}% \let\doubledash\ddash +\def\FRAC#1#2{\leavevmode\kern-.1em + \raise.5ex\hbox{\the\scriptfont0 #1}\kern-.1em + /\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}} +\def\RN#1{\uppercase\expandafter{\romannumeral#1}} + +\def\MARU#1{\raisebox{0.1zh}{{% + \leavevmode\ooalign{\hfil\lower.168ex\hbox{#1}\hfil\crcr\mathhexbox20D}}}} + +\def\kintou#1#2{\@ifundefined{jintercharskip}% + {\leavevmode\hbox to #1{% + \kanjiskip\z@ \@plus 1fill \@minus 1fill\xkanjiskip\kanjiskip #2}}% + {\leavevmode\hbox to #1{\jintercharskip\z@ \@plus 1fill \@minus 1fill + \jasciikanjiskip\jintercharskip #2}}} + +\def\ruby#1#2{\leavevmode \setbox0=\hbox{#1}\setbox1=\hbox{\tiny #2}%% < + \ifdim\wd0>\wd1 \dimen0=\wd0 \else \dimen0=\wd1 \fi + \hbox{\kanjiskip=\fill + \vbox{\hbox to \dimen0{\tiny \hfil#2\hfil}% + \nointerlineskip \hbox to \dimen0{\hfil#1\hfil}}}} + +\def\QED{{\unskip\nobreak\hfil\penalty50 + \hskip1zw\hbox{}\nobreak\hfil \hbox{$\Box$\hskip1zw} + \parfillskip\z@ \finalhyphendemerits\z@\par}} + +\def\Hline{\noalign{\hrule height 0.4mm}} + +\def\leq{\mathrel{\mathpalette\gl@align<}} \let\le\leq +\def\geq{\mathrel{\mathpalette\gl@align>}} \let\ge\geq +\def\gl@align#1#2{\lower.6ex\vbox{\baselineskip\z@skip\lineskip\z@ + \ialign{$\m@th#1\hfil##\hfil$\crcr#2\crcr=\crcr}}} +\def\subseteq{\rlap{\raisebox{.25ex}{$\subset$}}\raisebox{-1.1ex}{$=$}} +\def\supseteq{\rlap{\raisebox{.25ex}{$\supset$}}\raisebox{-1.1ex}{$=$}} +\def\neq{\mathrel{\mathpalette\c@ncelass=}} +\def\c@ncelass#1#2{\ooalign{$\hfil#1\mkern-.4mu|\hfil$\crcr$#1#2$}} +\let\ne\neq + +\if@NTT\else + \postbreakpenalty`(=10000 + \prebreakpenalty`)=10000 + \postbreakpenalty`[=10000 + \prebreakpenalty`]=10000 + \postbreakpenalty`〈=10000 + \prebreakpenalty`〉=10000 + \prebreakpenalty`"=10000 + \prebreakpenalty`℃=10000 + \prebreakpenalty` =10000 + \prebreakpenalty`・=10000 + \prebreakpenalty`〜=10000 + \prebreakpenalty`ー=10000 + \prebreakpenalty`?=10000 + \prebreakpenalty`!=10000 + \postbreakpenalty"5C=10000 +\fi + +\def\sloppy{\tolerance9999\hbadness9999\hfuzz.5\p@ \vfuzz.5\p@} + +\hbadness4000 +\vbadness10001 +\tolerance4000\pretolerance\m@ne +\clubpenalty\z@ +\widowpenalty\z@ +\displaywidowpenalty\z@ +\interdisplaylinepenalty\z@ %% 100 +\predisplaypenalty\z@ %% 1000 + +\AtBeginDocument{% + \@ifundefined{@mathmargin}{\let\@mathmargin\undefined} + {% +% \let\@mathmargin\mathindent + \@mathmargin1zw \@plus\z@ \@minus\z@ + \def\maketag@@@#1{\hbox{\m@th\normalfont #1}\hskip3mm}% + \def\eqref#1{\textup{\tagform@{\ref{#1}}\unskip}}% +% %% from /usr/local/share/texmf/tex/latex/amslatex/amsmath.sty (v1.2c) +% \renewenvironment{equation*}{% +% \equation \nonumber +% }{% +% % \nonumber +% \endequation +% }% + }% + %% here.sty + \@ifundefined{@HHfloat}{}{% + \def\@HHfloat#1[H]{% + \expandafter\let\csname end#1\endcsname\end@Hfloat + \vskip\intextsep + \vbox\bgroup\def\@captype{#1}\parindent\z@ + \@floatboxreset %% + \ignorespaces}% + \def\end@Hfloat{\egroup\vskip-1zh %% + \vskip \intextsep}% + }% + %% nidanfloat + \@ifundefined{dblbotfraction}{}{% + \renewcommand\dblbotfraction{0.9}% 0.5 + \setcounter{dblbotnumber}{4}% 2 + }% + %% +} + +\if@tecrep + \pagestyle{plain} +\else + \AtEndDocument{% + \if@letter + \nopagebreak + {\small\@uketsuke}\par + \fi + \immediate\write\@auxout + {\string\newlabel{ieicej@lastpage}{{\@currentlabel}{\thepage}}}% + \if@cameraready + \else + \onecolumn + \thispagestyle{empty} + \ifvoid\eabstractbox\else + \leavevmode + \unhbox\eabstractbox\par + \halflineskip + \fi + \ifvoid\ekeywordbox\else + \leavevmode + \unhbox\ekeywordbox + \fi + \fi + } + \pagestyle{IEICEJ} +\fi + +\pagenumbering{arabic} +\raggedbottom +\if@twocolumn + \twocolumn + \sloppy + \if@tecrep + \raggedbottom + \else + \flushbottom + \fi +\else + \onecolumn +\fi +\if@twoside + \@mparswitchtrue +\else + \@mparswitchfalse +\fi + +\endinput
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jsss.aux Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,41 @@ +\relax +\bibstyle{jplain} +\@input{title.aux} +\@input{abstract.tex.aux} +\@input{title-e.tex.aux} +\@input{author-e.tex.aux} +\@input{abstract-e.tex.aux} +\citation{Cell} +\@writefile{toc}{\contentsline {section}{\numberline {1} Multi core system}{1}} +\citation{java-conncurrecy} +\newlabel{cellarch}{{1}{2}} +\@writefile{toc}{\contentsline {section}{\numberline {2} Many Core 上のプログラムの特徴}{2}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.1} 定常的な並列度の必要性}{2}} +\newlabel{amdahl}{{2.1}{2}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.2} プログラムとデータの分割}{2}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.3} 同期の問題}{2}} +\citation{spurs} +\citation{kono08b} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.4} マルチスレッド}{3}} +\@writefile{toc}{\contentsline {subsection}{\numberline {2.5} デバッグ}{3}} +\@writefile{toc}{\contentsline {section}{\numberline {3} Many Core 上のプログラムの作り方}{3}} +\citation{cbc-sourceforge} +\@writefile{toc}{\contentsline {section}{\numberline {4} Continuation based C}{4}} +\newlabel{fig000}{{4}{4}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1} CからCbCへの変換}{4}} +\citation{kono01g} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2} CbCでの並列実行記述}{5}} +\citation{wolper82} +\citation{synBTTL} +\citation{kono93b} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.3} CbCでの並列実行の実装}{6}} +\@writefile{toc}{\contentsline {section}{\numberline {5} CbCでのCellのプログラムの流れ}{6}} +\@writefile{toc}{\contentsline {section}{\numberline {6} CbCでのCellのプログラムの検証}{6}} +\@writefile{toc}{\contentsline {subsection}{\numberline {6.1} コードセグメントの入出力テスト}{7}} +\@writefile{toc}{\contentsline {subsection}{\numberline {6.2} FIFOスケジューラレベルでのテスト}{7}} +\@writefile{toc}{\contentsline {section}{\numberline {7} 本手法の利点と欠点}{7}} +\citation{holzmann97model} +\citation{havelund98model} +\citation{groce04understanding} +\@writefile{toc}{\contentsline {section}{\numberline {8} 学生による実際の実装の現状}{8}} +\@writefile{toc}{\contentsline {section}{\numberline {9} CbCを用いた検証手法と他の手法との比較}{8}}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jsss.log Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,574 @@ +This is pTeX, Version 3.141592-p3.1.10 (utf8) (Web2C 7.5.4) (format=platex-euc 2006.12.25) 6 MAR 2008 03:38 +**jsss.tex +(./jsss.tex +pLaTeX2e <2006/01/04>+0 (based on LaTeX2e <2003/12/01> patch level 0) +(/usr/local/share/texmf/ptex/platex/base/jarticle.cls +Document Class: jarticle 2002/04/09 v1.4 Standard pLaTeX class +\c@@paper=\count81 +(/usr/local/share/texmf/ptex/platex/base/jsize10.clo +File: jsize10.clo 2002/04/09 v1.4 Standard pLaTeX file (size option) +) +\c@part=\count82 +\c@section=\count83 +\c@subsection=\count84 +\c@subsubsection=\count85 +\c@paragraph=\count86 +\c@subparagraph=\count87 +\c@figure=\count88 +\c@table=\count89 +\abovecaptionskip=\skip41 +\belowcaptionskip=\skip42 +\symmincho=\mathgroup4 +LaTeX Font Info: Overwriting symbol font `mincho' in version `bold' +(Font) JY1/mc/m/n --> JY1/gt/m/n on input line 597. +LaTeX Info: Redefining \mathrm on input line 599. +LaTeX Info: Redefining \mathbf on input line 600. +\toclineskip=\dimen118 +\@lnumwidth=\dimen119 +\bibindent=\dimen120 +\heisei=\count90 +) +(/usr/local/share/texmf-dist/tex/latex/graphics/graphicx.sty +Package: graphicx 1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR) + +(/usr/local/share/texmf-dist/tex/latex/graphics/keyval.sty +Package: keyval 1999/03/16 v1.13 key=value parser (DPC) +\KV@toks@=\toks15 +) +(/usr/local/share/texmf/tex/latex/graphics/dvipdfmx-contrib-latex/graphics.sty +Package: graphics 2001/07/07 v1.0n Standard LaTeX Graphics (DPC,SPQR) + +(/usr/local/share/texmf-dist/tex/latex/graphics/trig.sty +Package: trig 1999/03/16 v1.09 sin cos tan (DPC) +) +(/usr/local/share/texmf-dist/tex/latex/graphics/graphics.cfg +File: graphics.cfg 2005/02/03 v1.3 graphics configuration of teTeX/TeXLive +) +Package graphics Info: Driver file: dvipdfm.def on input line 81. + +(/usr/local/share/texmf-dist/tex/latex/dvipdfm/dvipdfm.def +File: dvipdfm.def 1999/9/6 vx.x Driver-dependant file +)) +\Gin@req@height=\dimen121 +\Gin@req@width=\dimen122 +) (./jsss.aux +(./title.aux) (./abstract.tex.aux) (./title-e.tex.aux) (./author-e.tex.aux) +(./abstract-e.tex.aux)) +\openout1 = `jsss.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 17. +LaTeX Font Info: ... okay on input line 17. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 17. +LaTeX Font Info: ... okay on input line 17. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 17. +LaTeX Font Info: ... okay on input line 17. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 17. +LaTeX Font Info: ... okay on input line 17. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 17. +LaTeX Font Info: ... okay on input line 17. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 17. +LaTeX Font Info: ... okay on input line 17. +LaTeX Font Info: Checking defaults for JY1/mc/m/n on input line 17. +LaTeX Font Info: ... okay on input line 17. +LaTeX Font Info: Checking defaults for JT1/mc/m/n on input line 17. +LaTeX Font Info: ... okay on input line 17. +\openout2 = `title.aux'. + + (./title.tex) +LaTeX Font Info: Font shape `JT1/mc/bx/n' in size <17.28> not available +(Font) Font shape `JT1/gt/m/n' tried instead on input line 49. +LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <17.28> not available +(Font) Font shape `JY1/gt/m/n' tried instead on input line 49. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <12> on input line 49. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <8> on input line 49. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <6> on input line 49. +\openout2 = `abstract.tex.aux'. + + +No file abstract.tex.tex. +\openout2 = `title-e.tex.aux'. + +No file title-e.tex.tex. +\openout2 = `author-e.tex.aux'. + +No file author-e.tex.tex. + +! LaTeX Error: There's no line here to end. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H <return> for immediate help. + ... + +l.49 ] + +? q +OK, entering \batchmode... +\openout2 = `abstract-e.tex.aux'. + +No file abstract-e.tex.tex. + +! LaTeX Error: There's no line here to end. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H <return> for immediate help. + ... + +l.49 ] + +Your command was ignored. +Type I <command> <return> to replace it with another command, +or <return> to continue without it. + + (./0.tex (./1.tex +LaTeX Font Info: Font shape `JT1/mc/bx/n' in size <14.4> not available +(Font) Font shape `JT1/gt/m/n' tried instead on input line 2. +LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <14.4> not available +(Font) Font shape `JY1/gt/m/n' tried instead on input line 2. +LaTeX Font Info: Font shape `JT1/mc/bx/n' in size <10> not available +(Font) Font shape `JT1/gt/m/n' tried instead on input line 13. +LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <10> not available +(Font) Font shape `JY1/gt/m/n' tried instead on input line 13. + +LaTeX Warning: Citation `Cell' on page 1 undefined on input line 13. + +! Text line contains an invalid character. +l.26 ^^H + egin{figure}[htb] +A funny symbol that I can't read has just been input. +Continue, and I'll forget that it ever happened. + + [1 + + + + + + + + + + + + +] +! Text line contains an invalid character. +l.27 ^^H + egin{center} +A funny symbol that I can't read has just been input. +Continue, and I'll forget that it ever happened. + + +! LaTeX Error: \caption outside float. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H <return> for immediate help. + ... + +l.29 \caption + {cellarch} +You're in trouble here. Try typing <return> to proceed. +If that doesn't work, type X <return> to quit. + +! Text line contains an invalid character. +l.30 ^^[ + nd{center} +A funny symbol that I can't read has just been input. +Continue, and I'll forget that it ever happened. + +! Text line contains an invalid character. +l.32 ^^[ + nd{figure} +A funny symbol that I can't read has just been input. +Continue, and I'll forget that it ever happened. + + +Underfull \hbox (badness 10000) in paragraph at lines 26--33 +[]\OT1/cmr/m/n/10 eginfigure[htb] egin-cen-ter in-clude-graph- + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 26--33 +\OT1/cmr/m/n/10 ics[width=6cm]fig/cell.eps cel-larch nd-cen-ter + [] + +) (./2.tex +LaTeX Font Info: Font shape `JT1/mc/bx/n' in size <12> not available +(Font) Font shape `JT1/gt/m/n' tried instead on input line 12. +LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <12> not available +(Font) Font shape `JY1/gt/m/n' tried instead on input line 12. + +LaTeX Warning: Citation `java-conncurrecy' on page 2 undefined on input line 14 +. + + +LaTeX Warning: Reference `amdhal' on page 2 undefined on input line 16. + +! Text line contains an invalid character. +l.18 ^^H + egin{figure}[htb] +A funny symbol that I can't read has just been input. +Continue, and I'll forget that it ever happened. + +! Text line contains an invalid character. +l.19 ^^H + egin{center} +A funny symbol that I can't read has just been input. +Continue, and I'll forget that it ever happened. + + +! LaTeX Error: \caption outside float. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H <return> for immediate help. + ... + +l.21 \caption + {amdahl} +You're in trouble here. Try typing <return> to proceed. +If that doesn't work, type X <return> to quit. + +! Text line contains an invalid character. +l.22 ^^[ + nd{center} +A funny symbol that I can't read has just been input. +Continue, and I'll forget that it ever happened. + +! Text line contains an invalid character. +l.24 ^^[ + nd{figure} +A funny symbol that I can't read has just been input. +Continue, and I'll forget that it ever happened. + + +Underfull \hbox (badness 10000) in paragraph at lines 18--25 +[]\OT1/cmr/m/n/10 eginfigure[htb] egin-cen-ter in-clude-graph- + [] + + +Underfull \hbox (badness 5652) in paragraph at lines 18--25 +\OT1/cmr/m/n/10 ics[width=6cm]fig/amdahl.eps am-dahl nd-cen-ter + [] + + [2] + +LaTeX Warning: Citation `spurs' on page 3 undefined on input line 135. + +) (./3.tex + +LaTeX Warning: Citation `kono08b' on page 3 undefined on input line 4. + + [3]) (./4.tex +! Text line contains an invalid character. +l.13 ^^H + egin{figure}[htb] +A funny symbol that I can't read has just been input. +Continue, and I'll forget that it ever happened. + +! Text line contains an invalid character. +l.14 ^^H + egin{center} +A funny symbol that I can't read has just been input. +Continue, and I'll forget that it ever happened. + +! Text line contains an invalid character. +l.16 ^^[ + nd{center} +A funny symbol that I can't read has just been input. +Continue, and I'll forget that it ever happened. + +! Text line contains an invalid character. +l.18 ^^[ + nd{figure} +A funny symbol that I can't read has just been input. +Continue, and I'll forget that it ever happened. + + +Underfull \hbox (badness 10000) in paragraph at lines 13--19 +[]\OT1/cmr/m/n/10 eginfigure[htb] egin-cen-ter in-clude-graph- + [] + + +LaTeX Warning: Citation `cbc-sourceforge' on page 4 undefined on input line 53. + + + +Underfull \hbox (badness 10000) in paragraph at lines 68--71 +[]\JY1/mc/m/n/10 のような \OT1/cmr/m/n/10 C \JY1/mc/m/n/10 の関数呼び出しは 、 + [] + + +Underfull \hbox (badness 4120) in paragraph at lines 68--71 +\OT1/cmtt/m/n/10 struct f_g0_save \JY1/mc/m/n/10 などの明示的なスタ ッ クの + [] + + [4] + +LaTeX Warning: Citation `kono01g' on page 5 undefined on input line 99. + +! Missing $ inserted. +<inserted text> + $ +l.106 コールとして{\tt pthread_ + create}や{\tt pthread_mutex_lock}などが +I've inserted a begin-math/end-math symbol since I think +you left one out. Proceed, with fingers crossed. + +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <7> on input line 106. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <5> on input line 106. +! Extra }, or forgotten $. +l.106 コールとして{\tt pthread_create} + や{\tt pthread_mutex_lock}などが +I've deleted a group-closing symbol because it seems to be +spurious, as in `$x}$'. But perhaps the } is legitimate and +you forgot something else, as in `\hbox{$x}'. In such cases +the way to recover is to insert both the forgotten and the +deleted material, e.g., by typing `I$}'. + +! Missing $ inserted. +<inserted text> + $ +l.108 + +I've inserted a begin-math/end-math symbol since I think +you left one out. Proceed, with fingers crossed. + + +Underfull \hbox (badness 6658) in paragraph at lines 109--111 +[]\JY1/mc/m/n/10 これらの動作記述は 、 マニ ュ アルや \OT1/cmtt/m/n/10 Formal + [] + +! Missing $ inserted. +<inserted text> + $ +l.113 The pthread_ + mutex_lock() function locks mutex. If the mutex +I've inserted a begin-math/end-math symbol since I think +you left one out. Proceed, with fingers crossed. + +! Extra }, or forgotten $. +l.115 mutex becomes available. } + +I've deleted a group-closing symbol because it seems to be +spurious, as in `$x}$'. But perhaps the } is legitimate and +you forgot something else, as in `\hbox{$x}'. In such cases +the way to recover is to insert both the forgotten and the +deleted material, e.g., by typing `I$}'. + +! Missing $ inserted. +<inserted text> + $ +l.116 + +I've inserted a begin-math/end-math symbol since I think +you left one out. Proceed, with fingers crossed. + + +Overfull \hbox (377.24059pt too wide) in paragraph at lines 113--116 +[]\OT1/cmtt/m/n/10 The pthread$[]\OML/cmm/m/it/10 utex[]ock\OT1/cmr/m/n/10 ()\O +ML/cmm/m/it/10 functionlocksmutex:Ifthemutexisalreadylocked; thecallingthreadwi +llblockuntilthemutexbecomesavailable:$ + [] + + +Overfull \hbox (53.04681pt too wide) in paragraph at lines 159--159 +[] \OT1/cmtt/m/n/9 code pickup_rfork(PhilsPtr self, TaskPtr current_task)[] + + [] + + +Overfull \hbox (1.07242pt too wide) in paragraph at lines 159--159 +[] \OT1/cmtt/m/n/9 self->right_fork->owner = self;[] + [] + + +Overfull \hbox (19.9722pt too wide) in paragraph at lines 159--159 +[] \OT1/cmtt/m/n/9 goto scheduler(self, current_task);[] + [] + + +Overfull \hbox (19.9722pt too wide) in paragraph at lines 159--159 +[] \OT1/cmtt/m/n/9 goto scheduler(self, current_task);[] + [] + + +Overfull \hbox (1.07242pt too wide) in paragraph at lines 174--174 +[] \OT1/cmtt/m/n/9 code scheduler(PhilsPtr self, TaskPtr list)[] + [] + + +Overfull \hbox (10.52231pt too wide) in paragraph at lines 174--174 +[] \OT1/cmtt/m/n/9 goto list->phils->next(list->phils,list);[] + [] + +! Missing $ inserted. +<inserted text> + $ +l.179 {\tt right_ + fork}の排他制御は、 +I've inserted a begin-math/end-math symbol since I think +you left one out. Proceed, with fingers crossed. + +! Extra }, or forgotten $. +l.179 {\tt right_fork} + の排他制御は、 +I've deleted a group-closing symbol because it seems to be +spurious, as in `$x}$'. But perhaps the } is legitimate and +you forgot something else, as in `\hbox{$x}'. In such cases +the way to recover is to insert both the forgotten and the +deleted material, e.g., by typing `I$}'. + +! Missing $ inserted. +<inserted text> + $ +l.183 + +I've inserted a begin-math/end-math symbol since I think +you left one out. Proceed, with fingers crossed. + + +Underfull \hbox (badness 10000) in paragraph at lines 186--190 +[]\OT1/cmtt/m/n/10 FIFO scheduler \JY1/mc/m/n/10 を例えば \OT1/cmtt/m/n/10 Cell + \JY1/mc/m/n/10 の \OT1/cmtt/m/n/10 SPU \JY1/mc/m/n/10 の + [] + + [5] +! Missing $ inserted. +<inserted text> + $ +l.194 内部で、例えば、{\tt pthread_ + mutex_lock}を呼び出しても良い。 +I've inserted a begin-math/end-math symbol since I think +you left one out. Proceed, with fingers crossed. + +! Extra }, or forgotten $. +l.194 内部で、例えば、{\tt pthread_mutex_lock} + を呼び出しても良い。 +I've deleted a group-closing symbol because it seems to be +spurious, as in `$x}$'. But perhaps the } is legitimate and +you forgot something else, as in `\hbox{$x}'. In such cases +the way to recover is to insert both the forgotten and the +deleted material, e.g., by typing `I$}'. + +! Missing $ inserted. +<inserted text> + $ +l.195 + +I've inserted a begin-math/end-math symbol since I think +you left one out. Proceed, with fingers crossed. + +) (./5.tex + +LaTeX Warning: Citation `wolper82' on page 6 undefined on input line 56. + + +LaTeX Warning: Citation `synBTTL' on page 6 undefined on input line 56. + + +LaTeX Warning: Citation `kono93b' on page 6 undefined on input line 56. + +) (./6.tex [6] +Overfull \hbox (24.69714pt too wide) in paragraph at lines 84--84 +[] \OT1/cmtt/m/n/9 while(!(list = next_task_iterator(task_iter))) {[] + [] + + +Overfull \hbox (67.22165pt too wide) in paragraph at lines 84--84 +[] \OT1/cmtt/m/n/9 // here we assume task list is fixed, we don't have to +[] + [] + + +Overfull \hbox (100.29626pt too wide) in paragraph at lines 84--84 +[] \OT1/cmtt/m/n/9 printf("restore list %x next %x\n",(int)list,(int)(list-> +next));[] + [] + + +Overfull \hbox (48.32187pt too wide) in paragraph at lines 84--84 +[] \OT1/cmtt/m/n/9 task_iter = create_task_iterator(list,out,task_iter);[] + [] + +) (./7.tex [7]) (./8.tex +Underfull \hbox (badness 3323) in paragraph at lines 3--6 +[]\JY1/mc/m/n/10 本手法を 、 \OT1/cmtt/m/n/10 PS3 Linux \JY1/mc/m/n/10 上の \OT +1/cmtt/m/n/10 SPU \JY1/mc/m/n/10 を用いた \OT1/cmtt/m/n/10 3D + [] + +) (./9.tex + +LaTeX Warning: Citation `holzmann97model' on page 8 undefined on input line 9. + + +LaTeX Warning: Citation `havelund98model' on page 8 undefined on input line 14. + + + +LaTeX Warning: Citation `groce04understanding' on page 8 undefined on input lin +e 15. + + [8] +Underfull \hbox (badness 1028) in paragraph at lines 45--45 +[] \OT1/cmtt/m/n/9 \caption{Dining Philosophers Problem \JY1/mc/m/n/9 の \OT +1/cmtt/m/n/9 CbC + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 45--45 +[] \JY1/mc/m/n/9 プロセス数 \OT1/cmtt/m/n/9 & \JY1/mc/m/n/9 状態数 \OT1/ +cmtt/m/n/9 & \JY1/mc/m/n/9 実行時間 + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 64--64 +[] \OT1/cmtt/m/n/9 \caption{SPIN \JY1/mc/m/n/9 による + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 64--64 +[] \JY1/mc/m/n/9 プロセス数 \OT1/cmtt/m/n/9 & \JY1/mc/m/n/9 状態数 \OT1/ +cmtt/m/n/9 & \JY1/mc/m/n/9 実行時間 + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 83--83 +[] \OT1/cmtt/m/n/9 \caption{JPF \JY1/mc/m/n/9 による + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 83--83 +[] \JY1/mc/m/n/9 プロセス数 \OT1/cmtt/m/n/9 & \JY1/mc/m/n/9 状態数 \OT1/ +cmtt/m/n/9 & \JY1/mc/m/n/9 実行時間 + [] + +) (./10.tex +Underfull \hbox (badness 7888) in paragraph at lines 11--14 +[]\JY1/mc/m/n/10 現在のモデル検査部で 、 \OT1/cmtt/m/n/10 SPIN \JY1/mc/m/n/10 +と \OT1/cmtt/m/n/10 Java Path + [] + +)) +! I can't find file `reference.tex'. +l.54 \input reference.tex + +Please type another input file name +! Emergency stop. +l.54 \input reference.tex + +*** (job aborted, file error in nonstop mode) + + +Here is how much of TeX's memory you used: + 664 strings out of 94689 + 7564 string characters out of 1170012 + 62856 words of memory out of 1000000 + 3941 multiletter control sequences out of 10000+50000 + 15739 words of font info for 62 fonts, out of 500000 for 2000 + 566 hyphenation exceptions out of 1000 + 25i,7n,24p,181b,680s stack positions out of 1500i,500n,5000p,200000b,5000s +Output written on jsss.dvi (8 pages, 44460 bytes).
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jsss.tex Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,57 @@ + +\documentclass[twocolumn]{jarticle} +\usepackage[dvipdfm]{graphicx} + +%hoffset -1in \addtolength{hoffset}{20mm} +%voffset -1in \addtolength{voffset}{20mm} +%oddsidemargin 0mm +\topmargin -4mm +%\headheight 13pt +%\headsep 15mm +%\textheight 43\baselineskip \addtolength{\textheight}{\topskip} +%\textwidth 160mm +%\marginparsep 3mm +%\marginparwidth 15mm +%\footskip headsep + +\begin{document} +% input tgrindfig.tex +\bibliographystyle{jplain} % for bibliography +% +\include{title} +%\title{} +% 英文のみのタイトルならば,\title{ ... } とする. + +\date{} + +% 所属ラベルの定義 + +% 和文著者名 +\author{{安村 恭一, 河野 真治} \\ +琉球大学理工学研究科情報工学専攻\\ +琉球大学工学部情報工学科\\ +} +\twocolumn[ +\maketitle{} + +% {\em 概要 vspace{0.5cm}}\ +\include{abstract.tex} +\begin{center} +{\Large +\include{title-e.tex}\ +\include{author-e.tex}} \\ \hspace{0.7cm} +\end{center} + +% { t \Large Abstract}\ +\include{abstract-e.tex} +\\ +\hspace{0.5cm} +] + +% +\input 0.tex +% +\input reference.tex + +\end{document} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jsss00.tex Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,57 @@ + +\documentclass[twocolumn]{jarticle} +\usepackage[dvipdfm]{graphicx} + +%hoffset -1in \addtolength{hoffset}{20mm} +%voffset -1in \addtolength{voffset}{20mm} +%oddsidemargin 0mm +\topmargin -4mm +%\headheight 13pt +%\headsep 15mm +%\textheight 43\baselineskip \addtolength{\textheight}{\topskip} +%\textwidth 160mm +%\marginparsep 3mm +%\marginparwidth 15mm +%\footskip headsep + +\begin{document} +% input tgrindfig.tex +\bibliographystyle{jplain} % for bibliography +% +\include{title} +%\title{} +% 英文のみのタイトルならば,\title{ ... } とする. + +\date{} + +% 所属ラベルの定義 + +% 和文著者名 +\author{{安村 恭一, 河野 真治} \\ +琉球大学理工学研究科情報工学専攻\\ +琉球大学工学部情報工学科\\ +} +\twocolumn[ +\maketitle{} + +% {\em 概要 vspace{0.5cm}}\ +\include{abstract.tex} +\begin{center} +{\Large +\include{title-e.tex}\ +\include{author-e.tex}} \\ \hspace{0.7cm} +\end{center} + +% { t \Large Abstract}\ +\include{abstract-e.tex} +\\ +\hspace{0.5cm} +] + +% +\input 0.tex +% +\input reference.tex + +\end{document} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.tex Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,30 @@ +\documentclass[12pt]{article} %%%%% preamble %%%%% +\usepackage[dvipdfm]{graphicx} + +%\textwidth 16.3cm % the text frame size +%\textheight 23cm +%\oddsidemargin 5mm % for centering +%\evensidemargin 13mm % for centering +%\topmargin 1mm +%\pagestyle{empty} +\pagestyle{plain} +\begin{document} %%%%% the main routine begins here %%%%% +%\baselinestretch 2 +%\flushbottom +%\large % character size +%\setlength{\baselineskip}{1cm} % line spacing +\bibliographystyle{jplain} % for bibliography +\input{title} % title, abstract +\maketitle +\begin{quote} +\input{abstract} +\end{quote} +%%%%\tableofcontents %% contents, lists +%%%%\listoffigures +%%%%\listoftables +%\pagenumbering{arabic} + +\input{0} % sections + +\bibliography{ref} +\end{document}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/manycore.html Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,496 @@ +<html> +<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Shift_JIS"> +<head> +<title> gŕ\łn[hEFAA\tgEFALq Continuation based C ƁACell ւ̉p</title> +</head> +<body> +<h1> gŕ\łn[hEFAA\tgEFALq Continuation based C ƁACell ւ̉p</h1> +<a href=#content>content</a><br> +<nr> + +<p> + +<author> ͖^</author> + +<hr> +<h1><a name="content000">title-e: Self descriptive verfication in Continuation based C and it's application to Cell architecture</a></h1> + +<hr> +<h1><a name="content001">abstract-e:</a></h1> +hoge +<p> + +<quote> +ߔNACPU̐\́ANbNTCN邱ƂA +CPURA(Many Core Architecture)邱Ƃɂ蓾悤ɂȂėĂBAMany Core Architecture ̃vO͕GłA +̐Mmۂ邱Ƃ͓B{_ł́A{ŊJ + C̃TuZbg łContination based C pāAMany +Core Architecture ̃vO~OƁǍs@ɂčl@Bł͗ƂāACell Broadband Engine +p_OGWpB +<p> + +</quote> + +<hr> +<h2><a name="content002">Multi core system</a></h2> +CPUڂRs[^͐̂gėAŋ߂̌X́AChipɕCPURAڂ̂̓ołB +]̃}`vZbT͓T|[gLbVoRCɃANZX邱ƂAŋߊJꂽMulti +Core ł́ACPUԂ̒ʐMɓʂȃ|[gpӂĂB +ႦAIntelQuick PathƌʐM|[gB +ɂACւ̃ANZXɂ鋣邱ƂłBA̕AGȃvO~OKvƂȂB +<p> +Cell Broadband Engine\cite{Cell} ́ASCEIIBMɂĊJꂽPS3Q[@pCPUłA2 thread PPU(PowerPC Unit)ƁA8SPU (Synergetic +Processing Unit) (}\ref{cellarch})B{ŗpPS3Linux (FedoreCore 6)ł́A6SPUgƂoBSPU͂ꂼ256kb̃[JAoXɕS邱ƂȂɌvZi߂邱ƂoBSPU烁Cւ́ASPŰ@Bꂩ璼ڃANZX +邱Ƃ͏oACellMFC(Memory Flow Controller)DMA +(Direct Memory Access) ߂𑗂邱ƂōsB +SPU̓OtBbNXɓKA4̌Œ菬_A_ɉZ閽߂ȂǂAPPUɔׂčȉZ\łA +قƂǂ̉ZSPUŐi߂邱ƂĂB +<p> +<center><img src="fig/cell.pdf" alt="cellarch"></center> +<p> + +<hr> +<h2><a name="content003">Many Core ̃vO̓</a></h2> +]̒^̃vOł́AMany Core̐\\ɈoƂ͏oȂBł́A̐\Many Core vO̓ɂčl@Bł́A{\tt Iȕx̕KvA +f[^ApCvCsA +vOƃf[^̕A +̖A +}`XbhA +fobO}Ɋւčl@sB +<p> + +<hr> +<h3><a name="content004">Iȕx̕Kv</a></h3> +sɂAmdahl\cite{java-conncurrecy}AvO̕ႯA̐\Ƃ͏oȂB0.8 x̕ł́A6CPUł3{x̐\サȂ(\ref{amdhal})B +<p> +<center><img src="fig/amdahl.pdf" alt="amdahl"></center> +<p> +xł͂ȂƂAPIɕxێKvB̂߁A +<p> + +<pre> + ^̃vÖꕔ + +</pre> +Ƃ@ł͕s\łBLSIȂǂ̃n[hEFAꍇ͉Z̑ΏۂƂƑʂ̉Zƃf[^pX̂ŕvŽʂIɓ邱ƂACŋLqꂽvOł́A +for z̃ANZXȂǂɕBĂ܂AoƂB +<p> +vO̒̕x́Aɓ̌`ŎoƂoB +́Az̒̌X̗vfɑĕɎs +<p> + +<pre> + f[^ + +</pre> +łB́A̗̒דmd˂Ďs +<p> + +<pre> + pCvC + +</pre> +łB̓ɗp邱ƂŒIȕxێ邱Ƃ\ƂȂ邱ƂBpCvĆAvOŊKwIɎg邱ƂB +<p> + +<hr> +<h3><a name="content005">vOƃf[^̕</a></h3> +f[^ƃpCvC\ɂ邽߂ɂ́AvOƃf[^̓KȕsKvBforA邢́AƂďX̃Xe[ggvȎ̕ΏۂƂȂB +f[^͎ɕł킯ł͂ȂAłf[^\̗pA +KvȂRs[sB +<p> +ꂽf[^́Aɒu邪ACell̏ꍇSPŨ[Jɒu邱ƂɂȂBLx[X̏ꍇłLbVlzuKvB̓Iɂ́Af[^̃ACg낦KvBCŌvZs^vOƈقȂA +Rs[̃RXgĂłf[^ACPUœƗɏKvBɁADMAS̃ANZXɂȂCell̏ꍇ́A +Rs[₷悤ɁAKbyte̔zɂǂB +<p> +Cell̏ꍇ͂ɃR[h[Jɒu邽߂ɁA +R[h[hdg݂KvɂȂB +<p> + +<hr> +<h3><a name="content006">̖</a></h3> +ṒACPUf[^̑҂킹A܂́Aێ邽߂ɁACPUƂ̑҂킹sƂłB]̃}`CPUł́AxႢ߂ɓ͊łALbVSpin lock p邱ƂB́A̓̏ꏊtest and set ̓Ȗ߂ŌJԂANZXđ҂킹@łBUnix OSkernelAPOSIX Thread ȂǓ@\̎ɎgĂB +<p> +Many Core ł́A҂킹sƕxĂ܂̂ŁA +̂炷KvB̂߂ɂ́AeCPUƗ(Lock)f[^ɃANZXo悤Ƀf[^ΗǂBCell ł́A +SPU[JĂ̂ŁAɃRs[邱ƂɂȂB +ASPU̓Cf[^擾Kv̂ŁA̎擾̍ۂɂ͓KvB +Cellł́ASPUPPUԂ̓ɂMail box ƂFIFObZ[W +L[pӂĂāAreadch,writech Ƃ߂SPUANZXBSpin lock ƈāAbZ[WȂ̂ő҂킹邱Ƃ\łB +<p> +Lx[X̃VXȅꍇłAꏊANZXꍇ̓LbV̋̂ŁARs[Ȃǂpė̈̕sKvBThread local ȂǂpꍇB +<p> +CPUo͂錋ʂ̃L[ɑ}悤ȂƂƁA +}ɕKKvɂȂ̂œ̃RXgB +<p> + +<hr> +<h3><a name="content007">}`Xbh</a></h3> +]̋L^̃}`CPUł́APOSIX Thread pĕs +邱ƂBHyper Thread ł́A̖߃Xg[gāAANZX̖̂ߎspCvC̃Xg[XbhؑւĉBƂoBAMany Core ̏ꍇɁA +XCoreɕThread蓖Ăƃ[LOZbg(Threadgpf[^)̑傫傫ȂLbV[JɓȂȂꍇB +<p> +Xbh(Hyper Thread)͖{AI/O҂CANZXɑėLłAقƂǂ̃f[^LbV[JɂƍlMany Coreɂ͌ĂȂBX̃^XNsCPU +ŕ̃Xbhgp郁bg͂قƂǂȂƎvB +ŁAXCPU͍וꂽ^XN\ɎĂȂPIȕxێłȂB +<p> +ŁA@\ő҂킹sꍇɁASpin lockƂA +tϐȂǂ̃Xbh̃^XN̑҂킹@\KvƂȂB +<p> +Many Core ̑䐔ɂ邪As^XN̊Ǘs}l[W[Xbhō\Â̈A|[Ox[XŕCoreɑ҂킹s悤ɂ̂ǂƎvB +Cellł́ASPURS\cite{spurs}Ƃdg݂ĂĂB +<p> + +<hr> +<h3><a name="content008">fobO</a></h3> +Core𑖂点Ԃł̃fobO͓BvO̓ƂāAsI(ԂŎsĂʂقȂ)ƂAoȌԂČ邱ƂƂB܂AXCorẽf[^ׂKvAfobKCore舵邱ƂK{łB +<p> + +<hr> +<h2><a name="content009">Many Core ̃vO̍</a></h2> +{_ł́A{ō쐬PS3̃_OGWłCerium +Rendering Engine ƂĎgBڍׂ͕ʂȘ_\cite{cerium-akira}ɏAł͊ȒPɋLqB +<p> +Cerium ́AScene Graph (3DIuWFNg؍\ɂ)t[obt@SPUpĕ`悷Rendering Engine łApƂăVvȍ\ĂBCerium ́A +<p> + +<pre> + 1. Scene GraphPolygon̍W\ + 2. W̌vZs PolygonPack + 3. PolygonPack AYW̏WSpanPack + 4. SpanPack(Texture ǍȂ)Z bufferpĕ`悷B + +</pre> +Ƃ4̃^XNBśAScene Graph̖APolygonPack, +SpanPack ɑăf[^ssBɁA4\ʖɃpCvCIɎsB +<p> +̃^XŃASPUŎs邽߂ɏȃZOgɕKvBꂽ^XNAPPU܂SPUŎŝCerium task manager łBTask manager ̓^XNˑ@\ĂāA^XNˑꂽ̂ANeBuL[ɓASPUNBSPU̓ANeBuL[AR[hƃf[^擾IɎssB +<p> +Cerium Rendering engine ɂ́Aȉ̎菇ɎƃeXgsB +<p> + +<pre> + 1. ʂCŎ Rendering algorithm + 2. f[^\(PolygonPack, SpanPack) + 3. R[h^XNɕAFIFOL[ŃV[PVɎs + 4. ^XNSPUɊ蓖ĕs + +</pre> +ɂAAlgorithm̐mFŕsɈڍs邱ƂoB +<p> + +<hr> +<h2><a name="content010">Continuation based C</a></h2> +CbC (Continuation based C)́ACTu[`[v\C̉ʌłAn[hEFAƃ\tgEFAAɑg݃VXe̋LqƂĖ{ŒĂĂ錾łB +<p> +C̊̑ɁA +R[hE +ZOgƂPʂBR[hZOgɂ́AɑInput interface ƁAoɑParameterized goto ݂B +<p> +<center><img src="fig/code.eps"></center> +<p> +ȉ͊ȒPCbC̃vOłB +<p> + +<pre> + code fact(int n,int result, + code print()){ + if(n>0){ + result *= n; + n--; + goto fact(n,result,print); + } else + goto (*print)(result); + } + +</pre> +ԐgotoƁAgotoAvO̒Pʂ̌ѕt{gAbvɋK肵āARȃO[v\B +<p> +CbČṕASchemeȂǂ̌pƂ͈قȂ(̌Ăяo)ȂB +R[hZOǵAĂяoł͂Ȃ̂ŊKvȂB +<p> +CɃR[hZOgƈgototCwĆAC̃X[pZbg +łA +R[hZOgʏC̊ĂяoƂ\B܂A +ʏ̊R[hZOggotoAR[hZOgA +Ăяoꂽ֒l߂ƂoB +<p> +R[hZOg͏ԑJڋLqƑΉĂ̂ŁAn[hEFALq +ƂǂB +<p> +CbCRpĆAmicro-C base ̂̂ GCC base, TCC base ̂̂ĂApIɎgƂłB{\tt sourceforge.jp} ŌJĂB +<p> + +<hr> +<h3><a name="content011">CCbCւ̕ϊ</a></h3> +C̃X^bNIɍ\邱ƂɂC̃vOCbCɕϊ邱Ƃ\łB +<p> + +<pre> + j = g(i+3); + +</pre> +̂悤C̊ĂяóA \verb+struct f_g0_save+ Ȃǂ̖IȃX^bN̒g\\̂pāA +<pre> + struct f_g0_interface *c = + (struct f_g0_save *)(sp -= + sizeof(struct f_g0_save)); + c = sp; + c->ret = f_g1; + goto g(i+3,sp); + +</pre> +̂悤Ȍ`ŁAIȃX^bNɕϊB͕ϊ̈łA̕@AႦNgXgȂǂpĂǂB +\verb+f_g1+ ́AĂяǒ̌płA\verb+g+ ł́A +<pre> + code g(int i,stack sp) { + goto (* ((struct + f_g0_save *)sp)->ret) + (i+4,sp); + } + +</pre> +̂悤ɊԐړIɌĂяoBX^bN̒́ApƒԕϐȂǂi[\̂łBX^bN̂̂́A +̍\̂i[郁łB +<p> +̕ϊ͎IɍsƂoAϊn\cite{c2cbc}邪Apx̕ϊn͂܂݂ȂB +݂͕ϊƁǍ̍œK͎͂蓮ōsKvB +<p> + +<hr> +<h3><a name="content012">CbCł̕sLq</a></h3> +sLqł̓^XN̐Ɠ@\̋LqɂȂBVerilog +VHDLȂǂł^XN̋LqAPOSIX Thread ł̓CuR[Ƃ{\tt pthread_create}{\tt pthread_mutex_lock}ȂǂB +<p> +̓Lq́A}jAFormal Description ŎĂB +ႦAȉ̂悤ȋLqłB +<p> +{\tt +The pthread_mutex_lock() function locks mutex. If the mutex +is already locked, the calling thread will block until the mutex becomes available. } +<p> +CbC ład-hoc ȕLqv~eBu͕Kvł͂ȂAgŕsLq邱Ƃ\łB́AR[hZOgɂ͉Bꂽ݂Ȃ̂ŁAsɕKvȏׂInput +interface 擾ł邩łB +<p> +sL[쐬CbĈSchedulerLq邱ƂɂA +sLqB̏ꍇ̕sPʂ̓R[hZOgƂȂBgoto KIscheduler ւgotoɏ邱ƂɂAsLq邱ƂoB +<p> +ȉ́ACbCŋLq Dining Philosopher ̏Ԃ̈ꕔłB +<pre> + code pickup_rfork(PhilsPtr self) + { + if (self->right_fork->owner == NULL) { + self->right_fork->owner = self; + goto eating(self); + } else { + goto hungry2(self); + } + } + +</pre> +s邽߂ɂ́A +<p> + +<pre> + code pickup_rfork(PhilsPtr self, TaskPtr current_task) + { + if (self->right_fork->owner == NULL) { + self->right_fork->owner = self; + self->next = eating; + goto scheduler(self, current_task); + } else { + self->next = hungry2; + goto scheduler(self, current_task); + } + } + +</pre> +Ƃ`ɋLqςBScheculer ̎͗ႦAFIFOłA +<p> + +<pre> + code scheduler(PhilsPtr self, TaskPtr list) + { + TaskPtr t = list; + TaskPtr e; + list = list->next; + goto list->phils->next(list->phils,list); + } + +</pre> +Ƃ`ɂȂB̂悤ɎgŕsXPW[Lqł邱ƂCbC̓łB@\ł邪Ał{\tt right_fork}̔ŕA +R[hZOgɎs邱Ƃ͂Ȃ̂ŁAIɕۏĂBtϐ̂悤ȑ҂킹ꍇ́A +TaskPtr ւ̑ƂĎΗǂB +<p> + +<hr> +<h3><a name="content013">CbCł̕s̎</a></h3> +FIFO scheduler Ⴆ Cell SPUactive task queue ւ̑}ƂAactive task queue eSPUIɎ擾悤ɂ(SPU scheduler)ƁAۂCbC̃R[hZOgs邱ƂoB +<p> +FIFO schedulerƎۂ̕s̓@\v悤ɂ̂́AʓIɂ͎ł͂ȂB@\R[hZOgŋLq +āASPU scheduler ɂĎĂǂAR[hZOg +ŁAႦA{\tt pthread_mutex_lock}ĂяoĂǂB +<p> + +<hr> +<h2><a name="content014">CbCłCell̃vO̗</a></h2> +CbCpāAMany Core Architecture ̃vO쐬闬͈ȉ̂悤ɂȂB +<p> + +<pre> + 1. C ɂASYV[PVɋLq + 2. f[^pɕ\ɕύX + 3. C̋LqCbC̋Lqɕϊ(Kvȕ̂݁B蓮) + 4. R[hZOgspɕ + 5. FIFOXPW[ɂ蓮mF + 6. SPUXPW[ɂCellł̓mF + +</pre> +̊eߒׂĂŃG[\B܂A +_IȃG[ȂAdlɉ\Ȑ\o邩ǂKvB +<p> +1 ̒iK͒ʏC̃vO~OłA̕ƓƂK{łB̒iKł́A͂ɑďo͂ӂɌ܂łAeXg͗eՂłBoOsg[X̓@ɂeՂɍsƂoB +<p> +4iK܂ł̓vOϊ̖łAO̒iKƓʂ邩ǂKvB +<p> +5 iKȑO̓A[LeN`ɈˑȂ̂ŁA^[Qbg +Jr̒iKłLq邱Ƃ\łBA +5iKł́AFIFOXPW[̑ւɁARandomXPW[ȂǂgƂłAsL̔IȎsB +<p> +IȎśANbNx[X̃n[hEFAł͓͂̔CӐ琶邱ƂBn[hEFAł̃^XNgpAOEƑݍpꍇ͔IȎsB +<p> +iK5ł́A̔IȎsł4iK܂łƓdlƂKvB́A +^̃vOł͏oėȂłB +<p> +iK6ł́AiK5܂łƓĂAȂ삷Ɗ҂BAFIFOXPW[SPUXPW[ł́A@\̎قȂ邱ƂB́AsƓ@\̗̂xƈӖ_قȂ邽߂ɋNƍlB +<p> +ŁAiK1dlłiK5łƍl邱ƂłBۂ̃vOƂ͕ʂɁA +sɖė~dl̋LqꍇB +̋Lq́AႦAuvZIv +̎_IȋLqɂȂB_ƂẮA +LTTL\cite{LTTL}, CTL*\cite{CTL}, ITL\cite{ITL}ȂǂgƂłB +<p> + +<hr> +<h2><a name="content015">CbCłCell̃vǑ</a></h2> +CbCł̌́AvO쐬̊eiKōsB +CbC ł͎svf̓R[hZOgłAInput interface ̒lɂ蓮͈ӂɌ܂B +]āA̓R[hZOgPʗǂBR[hZOg +̐̓eXg邢͏ؖsׂłB +<p> + +<hr> +<h3><a name="content016">R[hZOg̓o̓eXg</a></h3> +́Aʏ̃vÕeXg@ƓłA +FIOXPW[O̒iKł́A͂Əo͂ɑΉeXgsB +<p> +R[hZOgɃeXgf[^쐬ׂł邪Aʂ̐mFvOKvƂꍇB +<p> +f[^yуR[h̕IiKł́Af[^Multi Core CPUANZXł悤ɃRs[R[h邱ƂB̃Rs[́AFIFOXPW[xł́A|C^nɔĂǂBA +Rs[R[ĥɃG[oꍇBႦA +Cellł́AMFCɂDMA64bit alignmentKvłA +ꂪȂƗOĂ܂B +<p> + +<hr> +<h3><a name="content017">FIFOXPW[xł̃eXg</a></h3> +FIFOXPW[x̃eXgł́A萫BCell ł͑gݍ܂ꂽSPÚAׂČIɓ삷邪Af[^ɂSPỦZ̏Iʂ͈قȂAʓIɔ萫B +<p> +̔萫AԗIɒׂ邱Ƃ\łA +f\cite{model-checker}ƌĂB +<p> +CbCł́AԂL^ȂAׂẲ\ȔIss +XPW[邱Ƃ\łB +<p> + +<pre> + Ԃf[^x[X璲ׂ + łɂAȌԂɖ߂đ̎sT + ȂAi[sɐiݏԂT + +</pre> +Ƃ`łBۂ͈̎ȉ̂悤ɂȂĂB +<p> + +<pre> + code tableau(TaskPtr list) + { + if (lookup_StateDB(&st, &state_db, &out)) { + // found in the state database + printf("found %d\n",count); + while(!(list = next_task_iterator(task_iter))) { + // no more branch, go back to the previous one + TaskIteratorPtr prev_iter = task_iter->prev; + if (!prev_iter) { + printf("All done count %d\n",count); + .... + } + printf("no more branch %d\n",count); + depth--; + free_task_iterator(task_iter); + task_iter = prev_iter; + } + // return to previous state + // here we assume task list is fixed, we don't have to + // recover task list itself + restore_memory(task_iter->state->memory); + printf("restore list %x next %x\n",(int)list,(int)(list->next)); + } else { + // one step further + depth++; + task_iter = create_task_iterator(list,out,task_iter); + } + goto list->phils->next(list->phils,list); + } + +</pre> +̌،ńASPUg@œɂ́ASPŨL^Ȃǂ̍HvKvƂȂB܂ATԂcɂȂꍇB +<p> +TԂɂ́As̗x傫ȀԂ𒊏ۉ肷@lB̎@́ACbCgŋLq邱Ƃ\łB +<p> + +<hr> +<h2><a name="content018">{@̗_ƌ_</a></h2> + +<hr> +<h2><a name="content019">wɂۂ̎̌</a></h2> +ϊ̓rad-hoc ȃR[h +<p> +eXgȂ +<p> + +<hr> +<h2><a name="content020">CbCp؎@Ƒ̎@Ƃ̔r</a></h2> +C̊ɂ镪 +<p> +SPIN +<p> +Java PathFinder +<p> + +<h2><a name="content">Content</h2> +<ol> +<li><a href="#content000"> title-e: Self descriptive verfication in Continuation based C and it's application to Cell architecture</a> +<li><a href="#content001"> abstract-e:</a> +<li><a href="#content002"> Multi core system</a> +<li><a href="#content003"> Many Core ̃vO̓</a> +<li><a href="#content004"> Iȕx̕Kv</a> +<li><a href="#content005"> vOƃf[^̕</a> +<li><a href="#content006"> ̖</a> +<li><a href="#content007"> }`Xbh</a> +<li><a href="#content008"> fobO</a> +<li><a href="#content009"> Many Core ̃vO̍</a> +<li><a href="#content010"> Continuation based C</a> +<li><a href="#content011"> CCbCւ̕ϊ</a> +<li><a href="#content012"> CbCł̕sLq</a> +<li><a href="#content013"> CbCł̕s̎</a> +<li><a href="#content014"> CbCłCell̃vO̗</a> +<li><a href="#content015"> CbCłCell̃vǑ</a> +<li><a href="#content016"> R[hZOg̓o̓eXg</a> +<li><a href="#content017"> FIFOXPW[xł̃eXg</a> +<li><a href="#content018"> {@̗_ƌ_</a> +<li><a href="#content019"> wɂۂ̎̌</a> +<li><a href="#content020"> CbCp؎@Ƒ̎@Ƃ̔r</a> +</ol> + +</body></html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/manycore.ind Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,684 @@ +-title: 検証を自身で表現できるハードウェア、ソフトウェア記述言語 Continuation based C と、そのCell への応用 + +-author: 河野真治 + +-title-e: Self descriptive verification in Continuation based C and it's application to Cell architecture + +-abstract-e: + +CPU performance is achieved in Many Core Architecture rather than +high clock speed recently. The complicated nature of this +architecture makes reliable program difficult. We present a +subset of C Programming Language with continuation: Continuation based C +to make a program for Many Core Architecture. We use this method +for a rendering engine ``Cerium'' for Cell Broadband Engine. + +-abstract: + +近年、CPUの性能向上は、クロックサイクルをあげることよりも、 +複数のCPUコア(Many Core Architecture)を導入することにより +得られるようになって来てい +る。しかし、Many Core Architecture のプログラムは複雑であり、 +その信頼性を確保することは難しい。本論文では、本研究室で開 +発した Cのサブセット であるContination based C を用いて、Many +Core Architecture のプログラミングと、その検証を行う手法に +ついて考察する。ここでは例題として、Cell Broadband Engine +を用いたレンダリングエンジンを用いる。 + +-abstract-e: + + + +--Multi core system + +複数のCPUを載せたコンピュータは昔から使われて来たが、最近の +傾向は、一つのChipに複数のCPUコアを載せたものの登場である。 +従来のマルチプロセッサは同期をサポートしたキャッシュを経由し +メインメモリにアクセスすることが多いが、最近開発されたMulti +Core では、CPU間の通信に特別なポートを用意している。 +例えば、IntelはQuick Pathと言う通信ポートががある。 +これにより、メインメモリへのアクセスによる競合を避けることが +できる。しかし、その分、複雑なプログラミングが必要となる。 + +Cell Broadband Engine\cite{Cell} は、SCEIとIBMによって開発された +PS3ゲーム +機用のCPUであり、2 thread のPPU(PowerPC Unit)と、8個のSPU (Synergetic +Processing Unit) を持つ(図\ref{cellarch})。本研究で用いたPS3Linux (FedoreCore 6) +では、6個のSPUを使うことが出来る。SPUはそれぞれ256kbのローカル +メモリを持ち、バスに負担をかけることなく並列に計算を進めること +が出来る。SPUからメインメモリへは、SPUの機械語から直接アクセス +することは出来ず、CellのMFC(Memory Flow Controller)へDMA +(Direct Memory Access) 命令を送ることで行われる。 +SPUはグラフィックスに適した、4つの固定小数点、浮動小数点を同時に +演算する命令などを持ち、PPUに比べて高速な演算が可能であり、 +ほとんどの演算をSPU上で進めることが推奨されている。 + +<center><img src="fig/cell.jpg" alt="cellarch"></center> + +--Many Core 上のプログラムの特徴 + +従来の逐次型のプログラムでは、Many Coreの性能を十分に引き出す +ことは出来ない。ここでは、その性能を活かすMany Core プログラム +の特徴について考察する。ここでは、{\tt 定常的な並列度の必要性、 +データ並列、パイプライン実行、 +プログラムとデータの分割、 +同期の問題、 +マルチスレッド、 +デバッグ}に関して考察を行う。 + +---定常的な並列度の必要性 + +並列実行にはAmdahl則\cite{java-conncurrecy}があり、プログラムの並列化率が +低ければ、その性能を活かすことは出来ない。0.8 程度の並列化 +率では、6CPUでも3倍程度の性能向上しか得られない(\ref{amdahl})。 + +<center><img src="fig/amdahl.jpg" alt="amdahl"></center> + +高い並列 +度ではなくとも、恒常的に並列度を維持する必要がある。このため、 + + 逐次型のプログラムの一部を並列化する + +という手法では不十分である。LSIなどのハードウェア場合は演算の +対象がもともと多量の演算とデータパスを持つので並列計算の効果を +定常的に得られることが多いが、C等で記述されたプログラムでは、 +for 文や配列のアクセスなどに並列性が隠されてしまい、それを引き出す +ことが難しい。 + +プログラムの中の並列度は、主に二つの形で取り出すことが出来る。 +一つは、配列や木の中の個々の要素に対して並列に実行する + + データ並列 + +である。もう一つは、複数の逐次処理の隣同士を重ねて実行する + + パイプライン処理 + +である。この二つを同時に用いることで定常的な並列度を維持することが +可能となることがある。パイプライン処理は、プログラム中で階層的に +使われることが多い。 + +---プログラムとデータの分割 + +データ並列とパイプライン処理を可能にするためには、プログラムと +データの適切な分割を行う必要がある。for文、あるいは、木をだとって +処理する個々のステートメントがプログラムの分割の対象となる。 +データは自明に分割できるわけではなく、分割できるデータ構造を採用し、 +必要ならばコピーを行う。 + +分割されたデータは、メモリ上に置かれるが、Cellの場合はSPUのローカル +メモリ上に置かれることになる。共有メモリベースの場合でもキャッシュを +考慮した配置をする必要がある。具体的には、データのアライメントをそろ +える必要がある。メインメモリ上で計算を行う逐次型プログラムと異なり、 +コピーのコストを払ってでもデータを分割し、複数のCPUで独立に処理する +必要がある。特に、DMA中心のアクセスになるCellの場合は、 +コピーしやすいように、数Kbyte毎の配列にする方が良い。 + +Cellの場合はさらにコードもローカルメモリ上に置かれるために、 +コードをロードする仕組みも必要になる。 + +---同期の問題 + +ここで言う同期は、複数のCPUがデータの待ち合わせ、または、整合性を +維持するために、他のCPUとの待ち合わせを行うことである。従来の +マルチCPUでは、並列度が低いために同期は希であり、キャッシュ上の +Spin lock を用いることが多かった。これは、メモリの特定の場所を +test and set 等の特殊な命令で繰り返しアクセスして待ち合わせる手法 +である。Unix OSのkernel、POSIX Thread など同期機構の実装に使われている。 + +Many Core では、待ち合わせを行うと並列度が下がってしまうので、 +同期自体を減らす必要がある。そのためには、各CPUが独立に(Lock無しに) +データにアクセス出来るようにデータを分割すれば良い。Cell では、 +SPUがローカルメモリを持っているので、そちらにコピーすることになる。 +しかし、SPUはメインメモリからデータを取得する必要があるので、その +取得の際には同期を取る必要がある。 +Cellでは、SPUとPPU間の同期にはMail box というFIFOメッセージ +キューが用意されていて、readch,writech という命令でSPUから +アクセスする。Spin lock と違って、メッセージ交換なので待ち合わせを +避けることが可能である。 + +共有メモリベースのシステムの場合でも、同じ場所をアクセスする場合は +キャッシュの競合が生じるので、コピーなどを用いて領域の分割を +行う必要がある。Thread local などを用いる場合もある。 + +複数のCPUが出力する結果を一つのキューに挿入するようなことをすると、 +挿入時に必ず同期が必要になるので同期のコストが高い。 + +---マルチスレッド + +従来の共有メモリ型のマルチCPUでは、POSIX Thread を用いて並列実行 +を実現することが多い。特にHyper Thread では、複数の命令ストリーム +を使って、メモリアクセス時等のの命令実行パイプラインのストールを +スレッドを切替えて隠すことが出来る。しかし、Many Core の場合に、 +個々のCoreに複数のThreadを割り当てるとワーキングセット(Threadが +使用するデータ)の大きさが大きくなりキャッシュやローカルメモリに +入らなくなる場合がある。 + +スレッド(Hyper Thread)は本来、I/O待ちやメインメモリアクセス等に対して +有効であり、ほとんどのデータがキャッシュやローカルメモリにあると +考えられるMany Coreには向いていない。個々のタスクを実行するCPU +上で複数のスレッドを使用するメリットはほとんどないと思われる。 +一方で、個々のCPUは細分化されたタスクを十分に持っていなければ +恒常的な並列度を維持できない。 + +一方で、同期機構で待ち合わせを行う場合に、Spin lockを避けるとすれば、 +条件付変数などのスレッドのタスクの待ち合わせ機構が必要となる。 + +Many Core の台数にも寄るが、実行するタスクの管理を行うマネージャー +を複数スレッドで構成し、そのうちの一つが、ポーリングベースで +複数のCoreに対する待ち合わせを行うようにするのが良いと思われる。 +Cellでは、SPURS\cite{spurs}という仕組みが提案されている。 + +---デバッグ + +複数のCoreを走らせた状態でのデバッグは難しい。並列プログラムの +特徴として、実行が非決定的(同じ状態で実行しても結果が異なる)こと +があり、バグの状態を再現することが難しいことがある。また、個々の +Core上のデータを調べる必要があり、デバッガが複数のCoreを取り扱える +ことが必須である。 + +--Many Core 上のプログラムの作り方 + +本論文では、本研究室で作成したPS3上のレンダリングエンジンであるCerium +Rendering Engine を例題として使う。詳細は別な論文\cite{kono08b} +に譲り、ここでは簡単に記述する。 + +Cerium は、Scene Graph (3Dオブジェクトを木構造にしたもの)をフレームバッファ +上にSPUを用いて描画するRendering Engine であり、教育用としてシンプルな +構成を持っている。Cerium は、 + + 1. Scene GraphのPolygonの座標から表示する + 2. 座標の計算を行い PolygonPack を生成する + 3. PolygonPack から、同じY座標を持つ線分の集合SpanPackを生成する + 4. SpanPackを(Texture を読込ながら)Z bufferを用いて描画する。 + +という4つのタスクを持つ。並列実行は、Scene Graphの木、PolygonPack, +SpanPack に対してデータ並列実行を行う。さらに、この4つが表示画面毎に +パイプライン的に実行される。 + +これらのタスクは、SPUで実行するために小さなセグメントに分割される +必要がある。分割されたタスクを、PPUまたはSPUで実行するのは +Cerium task manager である。Task manager はタスク依存を解決する +機能を持っていて、タスク依存が満たされたものをアクティブキューに +入れ、SPUを起動する。SPUはアクティブキューから、処理するコードと +データを取得し自律的に実行を行う。 + +Cerium Rendering engine を作るには、以下の手順に +実装とテストを行う。 + + 1. 普通のCで実装した Rendering algorithm + 2. データ構造(PolygonPack, SpanPack)を導入したもの + 3. コードをタスクに分割し、FIFOキューでシーケンシャルに実行する + 4. タスクをSPUに割り当て並列実行する + +これにより、Algorithmの正しさを確認した上で並列実行に移行することが出来る。 + + +--Continuation based C + +CbC (Continuation based C)は、Cからサブルーチンやループ構造 +を除いたCの下位言語であり、ハードウェアとソフトウェア、特に +組込みシステムの記述言語として本研究室で提案している言語で +ある。 + +Cの関数の代わりに、 +たコード・ +セグメントという単位を持つ。コードセグメントには、入口に相当する +Input interface と、出口に相当するParameterized goto 文が存在する。 + +<center><img src="fig/code.jpg"></center> + +以下は簡単なCbCのプログラムである。 + + code fact(int n,int result, + code print()){ + if(n>0){ + result *= n; + n--; + goto fact(n,result,print); + } else + goto (*print)(result); + } +間接gotoと、直接gotoが、プログラムの単位の結び付きをボトムアップに +規定して、自然なグループを構成する。 + +CbCの継続は、Schemeなどの継続とは異なり環境(関数の呼び出し履歴)を持たない。 +コードセグメントは、関数呼び出しではないので環境を持つ必要がない。 + +Cにコードセグメントと引数つきgoto文を付加したCwCは、Cのスーパセット +であり、 +コードセグメント内から通常のCの関数を呼び出すことも可能ある。また、 +通常の関数からコードセグメントへgotoしたり、コードセグメントから、 +呼び出された関数へ値を戻すことも出来る。 + +コードセグメントは状態遷移記述と対応しているので、ハードウェア記述 +とも相性が良い。 + +CbCコンパイラは、micro-C base のものと GCC base, TCC base のものが +動いており、実用的に使うことができる。{\tt sourceforge.jp} 上\cite{cbc-sourceforge}で公開されている。 + + +---CからCbCへの変換 + +Cのスタックを明示的に構成することによりCのプログラムをCbCに +変換することが可能である。 + + j = g(i+3); + +のようなCの関数呼び出しは、 \verb+struct f_g0_save+ などの +明示的なスタックの中身を表す構造体を用いて、 + struct f_g0_interface *c = + (struct f_g0_save *)(sp -= + sizeof(struct f_g0_save)); + c = sp; + c->ret = f_g1; + goto g(i+3,sp); +のような形で、明示的なスタック操作に変換される。これは変換の +一例であり、他の方法、例えばリンクトリストなどを用いても良い。 +\verb+f_g1+ は、関数呼び出しの後の継続であり、\verb+g+ では、 + code g(int i,stack sp) { + goto (* ((struct + f_g0_save *)sp)->ret) + (i+4,sp); + } +のように間接的に呼び出される。スタックの中は、継続と +中間変数などを格納する構造体である。スタックそのものは、 +これらの構造体を格納するメモリである。 + +これらの変換は自動的に行うことが出来き、試作変換系を実装した +報告\cite{kono01g}もあるが、実用レベルの変換系はまだ存在しない。 +現在は変換と、その後の最適化はは手動で行う必要がある。 + +---CbCでの並列実行記述 + +並列実行記述ではタスクの生成と同期機構の記述が問題になる。Verilog +やVHDLなどでも並列タスクの記述があり、POSIX Thread ではライブラリ +コールとして\verb+pthread_create+や\verb+pthread_mutex_lock+などが +ある。 + +これらの動作記述は、マニュアルやFormal Description で示されている。 +例えば、以下のような記述である。 +{\tt +The pthread\_mutex\_lock() function locks mutex. If the mutex +is already locked, the calling thread will block until the +mutex becomes available. +} + +このようは記述は曖昧で誤解を招きやすい。しかし、同期機構の検証 +では、これらの動作の正確な意味を知る必要がある。 + +CbC ではad-hoc な並列記述プリミティブは必要ではなく、自分自身で +並列実行を記述することが可能である。これは、コードセグメントには +隠された情報が存在しないので、実行に必要な情報をすべてInput +interface から取得できるからである。 + +実行キューを作成しCbC自体でSchedulerを記述することにより、 +並列実行を記述する。この場合の並列実行単位はコードセグメン +トとなる。goto 文を規則的にscheduler へのgoto文に書き換える +ことにより、並列実行を記述することが出来る。 + +以下は、CbCで記述した Dining Philosopher の状態の一部である。 + code pickup_rfork(PhilsPtr self) + { + if (self->right_fork->owner == NULL) { + self->right_fork->owner = self; + goto eating(self); + } else { + goto hungry2(self); + } + } + +これを並列実行するためには、 + + code pickup_rfork(PhilsPtr self, TaskPtr current_task) + { + if (self->right_fork->owner == NULL) { + self->right_fork->owner = self; + self->next = eating; + goto scheduler(self, current_task); + } else { + self->next = hungry2; + goto scheduler(self, current_task); + } + } + +という形に記述を変える。Scheduler の実装は例えば、FIFOであれば、 + + code scheduler(PhilsPtr self, TaskPtr list) + { + TaskPtr t = list; + TaskPtr e; + list = list->next; + goto list->phils->next(list->phils,list); + } + +という形になる。このように自分自身で並列実行スケジューラを +記述できることがCbCの特徴である。同期機構であるが、ここでは +\verb+right_fork+の排他制御は、 +コードセグメントが同時に実行されることはないので、自動的に +保証されている。条件付変数のような待ち合わせを実現したい場合は、 +TaskPtr への操作として実現すれば良い。 + +---CbCでの並列実行の実装 + +FIFO scheduler を例えば Cell のSPUのactive task queue への +挿入とし、active task queue を各SPUが自律的に取得するように +する(SPU scheduler)と、実際にCbCのコードセグメントを並列実 +行することが出来る。 + +FIFO schedulerと実際の並列実行の同期機構が一致するようにする +のは、一般的には自明ではない。同期機構をコードセグメントで記述 +して、SPU scheduler によって実現しても良いし、コードセグメント +内部で、例えば、\verb+pthread_mutex_lock+を呼び出しても良い。 + + +--CbCでのCellのプログラムの流れ + +CbCを用いて、Many Core Architecture のプログラムを作成する +流れは以下のようになる。 + + 1. C によりアルゴリズムをシーケンシャルに記述する + 2. データを並列用に分割した構造に変更する + 3. Cの記述をCbCの記述に変換する(必要な部分のみ。手動) + 4. コードセグメントを並列実行用に分割する + 5. FIFOスケジューラにより動作を確認する + 6. SPUスケジューラによりCell上での動作を確認する + +これらの各過程すべてでエラーが入る可能性がある。また、 +論理的なエラーだけなく、仕様に沿った十分な性能が出るか +どうかも検証する必要がある。 + +1 の段階は通常のCのプログラミングであり、この部分がちゃんと +動くことが必須である。この段階では、入力に対して出力が +一意に決まる状況であり、テストは容易である。バグも +実行トレースの二分法により容易に行うことが出来る。 + +4段階まではプログラム変換の問題であり、一つ前の段階と +同じ結果を得られるかどうか検証する必要がある。 + +5 段階以前はアーキテクチャに依存しないので、ターゲット +が開発途中の段階でも記述することが可能である。しかし、 +5段階では、FIFOスケジューラの替わりに、Randomスケジューラ +などを使うことができ、並列実行特有の非決定的な実行が +導入される。 + +非決定的な実行は、クロックベースのハードウェアでは +入力の任意性から生じることが多い。ハードウェアでも +複数のタスクを使用したり、外界と相互作用する場合は +非決定的な実行が現れる。 + +段階5では、これらの非決定的な実行でも4段階までと +同じ仕様を満たすことを検証する必要がある。これは、 +逐次型のプログラムでは出て来ない問題である。 + +段階6では、段階5まできちんと動いていれば、問題なく +動作すると期待される。しかし、FIFOスケジューラと +SPUスケジューラでは、同期機構の実現が異なることが +ある。これは、並列実行と同期機構のの粒度と意味論 +が異なるために起きると考えられる。 + +ここで、段階1が仕様であり段階5が実装であると +考えることもできる。実際のプログラムとは別に、 +実行時に満たして欲しい仕様の記述がある場合もある。 +これらの記述は、例えば、「計算がいつか終る」 +等の時相論理的な記述になる。時相論理としては、 +LTTL\cite{wolper82}, CTL*\cite{synBTTL}, ITL\cite{kono93b} +などを使うことができる。 + + +--CbCでのCellのプログラムの検証 + +CbCでの検証は、プログラム作成の各段階で行われる。 +CbC では実行要素はコードセグメントであり、その +Input interface の値により動作は一意に決まる。 +従って、検証はコードセグメント単位良い。コードセグメント +内部の正当性はテストあるいは証明こ行われるべきである。 + +---コードセグメントの入出力テスト + +これは、通常のプログラムのテスト手法と同じであり、 +FIFOスケジューラを導入する前の段階では、入力と +出力に対応するテストを行う。 + +コードセグメント毎にテストデータを作成するべきで +あるが、結果の正しさを確認するプログラムを書く必要とする +場合もある。 + +データ及びコードの分割が終った段階では、データを +Multi Core CPUがアクセスできるようにコピーする +コードが入ることがある。このコピーは、FIFOスケジューラ +レベルでは、ポインタ渡しに避けても良い。しかし、 +コピーコード自体にエラーが出る場合も多い。例えば、 +Cellでは、MFCによるDMAは64bit alignmentが必要であり、 +これが満たされないと例外が発生してしまう。 + + +---FIFOスケジューラレベルでのテスト + +FIFOスケジューラレベルのテストでは、非決定性が +導入される。Cell では組み込まれたSPUは、すべて +決定的に動作するが、データによってSPUの演算の +終了結果は異なり、結果的に非決定性が生じる。 + +これらの非決定性を、網羅的に調べることも可能であり、 +モデル検査と呼ばれる。 + +CbCでは、状態を記録しながら、すべての可能な非決定的実行を行 +うスケジューラを実装することが可能である。 + + メモリ状態をデータベースから調べる + すでにあれば、一つ前の状態に戻して他の実行を探す + なければ、一段深い実行に進み状態を探す + +という形である。実際の実装は以下のようになっている。 + + code tableau(TaskPtr list) + { + if (lookup_StateDB(&st, &state_db, &out)) { + // found in the state database + printf("found %d\n",count); + while(!(list = next_task_iterator(task_iter))) { + // no more branch, go back to the previous one + TaskIteratorPtr prev_iter = task_iter->prev; + if (!prev_iter) { + printf("All done count %d\n",count); + .... + } + printf("no more branch %d\n",count); + depth--; + free_task_iterator(task_iter); + task_iter = prev_iter; + } + // return to previous state + // here we assume task list is fixed, we don't have to + // recover task list itself + restore_memory(task_iter->state->memory); + printf("restore list %x next %x\n",(int)list,(int)(list->next)); + } else { + // one step further + depth++; + task_iter = create_task_iterator(list,out,task_iter); + } + goto list->phils->next(list->phils,list); + } + +この検証系は、SPUを使った実機上で動かすには、SPU内部のメモリを記録 +するなどの工夫が必要となる。また、探索空間が膨大になる場合もある。 + +探索空間を小さくするには、並列実行の粒度を大きくしたり、メモリの +状態を抽象化したりする方法が考えられる。これらの手法は、CbC自身で +記述することが可能である。 + +--本手法の利点と欠点 + +CbCという特殊な処理系を使うことになるので、ソースの変更が +必要となる。現状では、C++には対応していない。 + +コードセグメントのテストをSingle core上とMulti core 上の +両方でテスト出来るので、Multi coreになれていなくても、 +動作のテストが容易である。また、Multi core になれるための +準備、教育的ツールとして使うことも出来る。アルゴリズム +の正しさを並列実行とは別にテスト出来るのが利点である。 + +CellはヘテロなMulti Coreであり、 +SPU では、その性能を活かすためには、特殊なアセンブラ命令、 +例えば4つの浮動小数点の値の同時演算などを使用する必要がある。 +これらは、gcc の拡張あるいはasmステートメントなどで使用する +ことができるが、他のアーキテクチャ上では動作しない。 +従って、同じ機能を持つコードセグメントで代用してテスト +することになる。異なるアーキテクチャでの異なるコードセグメント +の同等性を直接テストすることは出来ない。 + +Many Core 向けのデータ分割、コード分割は自動ではないので、 +試行錯誤することになる。必要な性能が出るかどうかは、 +分割のために生じるコピーのコストなどの要素が関係し、 +アーキテクチャに依存するのでSingle Core上のテストで +見積もることは難しい。 + +データ分割、コード分割が手動なので間違いが入りやすい。 +FIFOスケジューラレベルで、Single Coreと同等な動作を +する場合は、このようなエラーを見つけるのは容易である。 + +しかし、非決定的な動作をする場合は、自明な動作比較をする +ことは出来ず、モデル検査などのコストの高い方法を使う +必要が出て来る。コードセグメントレベルのモデル検査は +実機上の同期動作との差があるので、正確ではない。 + +モデル検査のコストが重い場合は、スケジューラを挟む +部分を大まかにして状態数を減らす手法が使える。正確さは +落ちるが、高速に検査することが出来る。 + +スケジューラを挟む部分の変更は手動であり、マクロあるいは +スクリプトで生成する必要がある。 + +--学生による実際の実装の現状 + +本手法を、PS3 Linux 上のSPUを用いた 3D Rendering Engine +の作成に適用した。詳細は別な論文で述べるので、ここでは +学生の反応について報告する。 + +Single Core でプログラムを動作させることは容易である。これは、 +従来のプログラムと差がないからであり、学生にとっては入りやすい。 +データとコードの分割を自力で求めるのは、並列処理の経験がない +学生には難しい。なんらかのひな型か指示が必要である。 + +FIFOスケジューラから、SPUスケジューラを実装する時点で、 +なるべく早く動かそうとするために ad-hoc なコードが入りやすい。 +特に、一旦、SPUスケジューラに移ってしまうと、元の +ソースを +FIFOスケジューラ/Single Core 上で動かすことを考慮せずに +変更を加えてしまう。そのような場合は、この方法のメリット +である、並列実装部分のバグと、アルゴリズム/データ分割のバグ +を分離することが出来なくなってしまう。しかし、常に +両方で動作させるように変更するのは、手間がかかることも +確かである。 + +データやコードの分割において、Cellでは6個のSPUを使うことが +出来るが、必ず6個に分割することを仮定してプログラムを書いて +しまうという問題も見られた。分割したコードにどれだけの +Coreを割り振るかは、後で調整する必要があるので、必ず +最大値を使うとは限らない。 + +--CbCを用いた検証手法と他の手法との比較 + +コードセグメントを使わずに、Cの関数による分割を行って +も良い。この場合は、分割された関数を順々に呼び出す +マネージャを記述する必要がある。CbCのようにモデル検査を +自分で記述するようなことは出来ないが、分割に関しては +同等である。 + +モデル検査では SPIN\cite{holzmann97model}が有名だが、SPINでは +問題を Promela という仕様記述言語で記述する必要があり、 +Promela を直接実装に使うことは出来ない。 + +実装言語を直接モデル検査するシステムとしては、 +Java PathFinder\cite{havelund98model}、 +CBMC\cite{groce04understanding}などが知られている。これらはオブジェクト指向 +記述に対しても適用できるという利点がある。 +これらで並列処理を記述する場合は、一般的にはThread の +機能を用いることになる。 + +CbCでは、スケジューラ及びモデル検査器を自分で記述出来るので、 +検査する並列性や抽象度を自分で制御できると言う利点がある。 +現状では、そういう可能性があるというだけで実装は行っていない。 + +現在用いているCbC用のモデル検査器は比較的単純に作られており、 +大きなプログラムの検証をするのには向かない。2.8GHz Pentinum 4 +では、Dining Philosphers の例題に対して以下のような性能が +出ている。 + +\begin{table}[htbp] +\begin{center} +\caption{Dining Philosophers ProblemのCbCによるモデル検査} +\label{tab:dpp_tableau} +\begin{tabular}{|r|r|r|} \hline +プロセス数 & 状態数 & 実行時間(秒) \\ \hline +3 & 1,340 & 0.01 \\ \hline +4 & 6,115 & 0.08 \\ \hline +5 & 38,984 & 0.66 \\ \hline +6 & 159,299 & 3.79 \\ \hline +7 & 845,529 & 27.59 \\ \hline +8 & 3915,727 & 199.80 \\ \hline +\end{tabular} +\end{center} +\end{table} + +\begin{table}[htbp] +\begin{center} +\caption{SPINによるDining Philosophers Problemのモデル検査} +\label{tab:spin_dpp} +\begin{tabular}{|r|r|r|} \hline +プロセス数 & 状態数 & 実行時間(秒) \\ \hline +5 & 94 & 0.008 \\ \hline +6 & 212 & 0.01 \\ \hline +7 & 494 & 0.03 \\ \hline +8 & 1,172 & 0.04 \\ \hline +\end{tabular} +\end{center} +\end{table} + +\begin{table}[htbp] +\begin{center} +\caption{JPFによるDining Philosophers Problemのモデル検査} +\label{tab:jpf_dpp} +\begin{tabular}{|r|r|r|} \hline +プロセス数 & 状態数 & 実行時間(秒) \\ \hline +5 & 不明 & 3.98 \\ \hline +6 & 不明 & 7.33 \\ \hline +7 & 不明 & 26.29 \\ \hline +8 & 不明 & 123.16 \\ \hline +\end{tabular} +\end{center} +\end{table} + +Java Path Finder とSPINの丁度間の性能となっているが、プロセス数が +多くなると、Java Path Finder よりも性能が落ちる。これは、モデル +検査のための状態格納のアルゴリズムに問題があると考えている。 +SPINの性能が良いのは、元々の状態記述の抽象度が高く状態数そのものが +小さいからであると考えられる。 + +CbCの記述を変更して、スケジューラを呼び出す頻度を下げると、 +状態するが下がりSPINに近い性能を得ることも可能である。 +Java Path Finder では、そのような変更を行うことは原理的に +出来ない。 + +--まとめ + +May Core Architecture のプログラムを作成する手法として、 +シーケンシャルなCの記述を、CbCに分解する手法を提案し実践してみた。 +また、その手法に対するテスト及び検証法について述べた。 + +CbCでは、モデル検査部と実装部分を混在し、同時にプログラムすることが +出来るので、並列実行部分を作成しながら、それをテストするための +モデル検査部を作成していくことが可能である。 + +現在のモデル検査部で、SPIN と Java Path Finder の中間的な性能を +得ることが出来ているが、より高性能なアルゴリズムを実装する必要が +ある。 + +Cerium Rendering Engine はCell上で動作しているが、テスト及び +モデル検査は行っていないので、これらを実装して、実際の効果を +調べることが必要である。 + + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ohp.tex Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,135 @@ +\documentstyle[blackandwhite,landscape,oval,pagenumbers]{NRslides} +% run this through SLiTeX +\input tgrindfi.tex +\raggedright +\begin{document} + +\title{{\bf 検証を自身で表現できるハードウェア、ソフトウェア記述言語 Continuation based C と、そのCell への応用}} +\author{ 河野真治 \\[5mm] +.Information Engineering, University of the Ryukyus +%% \today +\maketitlepage +\title{{\bf Self descriptive verfication in Continuation based C and it's application to Cell architecture}} +\begin{bwslide} +\ctitle{ Multi core system} +\end{bwslide} + + +\centerline{egin{figure}[htb] +egin{center} +includegraphics[width=6cm]{fig/cell.pdf} +\caption{cellarch} +nd{center} +\label{cellarch} +nd{figure} +} + +\begin{bwslide} +\ctitle{ Many Core 上のプログラムの特徴} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ 定常的な並列度の必要性} +\end{bwslide} + + +\centerline{egin{figure}[htb] +egin{center} +includegraphics[width=6cm]{fig/amdahl.pdf} +\caption{amdahl} +nd{center} +\label{amdahl} +nd{figure} +} + +\begin{bwslide} +\ctitle{ プログラムとデータの分割} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ 同期の問題} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ マルチスレッド} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ デバッグ} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ Many Core 上のプログラムの作り方} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ Continuation based C} +\end{bwslide} + + +\centerline{egin{figure}[htb] +egin{center} +includegraphics[width=6cm]{fig/code.eps} +nd{center} +\label{fig000} +nd{figure} +} + +\begin{bwslide} +\ctitle{ CからCbCへの変換} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ CbCでの並列実行記述} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ CbCでの並列実行の実装} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ CbCでのCellのプログラムの流れ} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ CbCでのCellのプログラムの検証} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ コードセグメントの入出力テスト} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ FIFOスケジューラレベルでのテスト} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ 本手法の利点と欠点} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ 学生による実際の実装の現状} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ CbCを用いた検証手法と他の手法との比較} +\end{bwslide} + + + +\end{document}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ohp00.tex Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,140 @@ +\documentstyle[blackandwhite,landscape,oval,pagenumbers]{NRslides} +% run this through SLiTeX +\input tgrindfi.tex +\raggedright +\begin{document} + +\title{{\bf 検証を自身で表現できるハードウェア、ソフトウェア記述言語 Continuation based C と、そのCell への応用}} +\author{ 河野真治 \\[5mm] +.Information Engineering, University of the Ryukyus +%% \today +\maketitlepage +\title{{\bf Self descriptive verification in Continuation based C and it's application to Cell architecture}} +\begin{bwslide} +\ctitle{ Multi core system} +\end{bwslide} + + +\centerline{\begin{figure}[htb] +\begin{center} +\includegraphics[width=6cm]{fig/cell.eps} +\caption{cellarch} +\end{center} +\label{cellarch} +\end{figure} +} + +\begin{bwslide} +\ctitle{ Many Core 上のプログラムの特徴} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ 定常的な並列度の必要性} +\end{bwslide} + + +\centerline{\begin{figure}[htb] +\begin{center} +\includegraphics[width=6cm]{fig/amdahl.eps} +\caption{amdahl} +\end{center} +\label{amdahl} +\end{figure} +} + +\begin{bwslide} +\ctitle{ プログラムとデータの分割} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ 同期の問題} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ マルチスレッド} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ デバッグ} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ Many Core 上のプログラムの作り方} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ Continuation based C} +\end{bwslide} + + +\centerline{\begin{figure}[htb] +\begin{center} +\includegraphics[width=6cm]{fig/code.eps} +\end{center} +\label{fig000} +\end{figure} +} + +\begin{bwslide} +\ctitle{ CからCbCへの変換} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ CbCでの並列実行記述} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ CbCでの並列実行の実装} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ CbCでのCellのプログラムの流れ} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ CbCでのCellのプログラムの検証} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ コードセグメントの入出力テスト} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ FIFOスケジューラレベルでのテスト} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ 本手法の利点と欠点} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ 学生による実際の実装の現状} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ CbCを用いた検証手法と他の手法との比較} +\end{bwslide} + + +\begin{bwslide} +\ctitle{ まとめ} +\end{bwslide} + + + +\end{document}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presentation/manycore.html Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,622 @@ +<html> +<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Shift_JIS"> +<head> +<title> gŕ\łn[hEFAA\tgEFALq \\ Continuation based C ƁACell ւ̉p</title> +</head> +<body> +<h1> gŕ\łn[hEFAA\tgEFALq \\ Continuation based C ƁACell ւ̉p</h1> +<a href=#content>content</a><br> +<nr> + +<p> + +<author> ͖^</author> + +<hr> +<h2><a name="content000">̖ړI</a></h2> +M̍vOɂ͂ǂǂ? +<p> + +<pre> + Concurrent Program + Real-time Program + Interactive Program + Network Program + +</pre> +AƏ͓̂B +<p> + +<hr> +<h2><a name="content001">vO̓APIɂ</a></h2> +System call ̈Ӗ? +<p> + +<pre> + The pthread_mutex_lock() function locks mutex. + If the mutex is already locked, the calling + thread will block until the mutex becomes available. + +</pre> + +<hr> +<h2><a name="content002">Cell SPŨAZu̓?</a></h2> + +<p> + +<pre> + fsmbi rt,symbol + The I16 field is used to create a mask in register + RT by making eight copies of each bit. Bits in + the operand are related to bytes in the result + in a left-to-right correspondence. + +</pre> + +<hr> +<h2><a name="content003">n[hEFALqɂ́AӖAPI͂Ȃ...</a></h2> + +<p> + +<pre> + ̓^C~ŐLq? + _ŋLqĂǂ... + bus_req bus_ack + ͂ǂӖł? + +</pre> + +<hr> +<h2><a name="content004">^ȏBĂ̂Ă</a></h2> + +<p> +^ȏ̗ +<p> + +<pre> + XPW[ + sӖ + Cxg̎ + ߂̑IӖ + OS̏ + Ăяo̊(X^bN) + +</pre> + +<hr> +<h2><a name="content005">^ȏBĂȂ...</a></h2> + +<p> +ȉ̂悤Ȃ̂Lqł悤ɂȂ +<p> + +<pre> + ^XNXPW[ + VXeR[̂̈Ӗ + _̈Ӗ\ԑJ + AZu̖߂̓ + +</pre> +̓AZuł͓OɋLqłĂ +<p> + +<pre> + AZuC̒ԓIȌꂪΗǂ + +</pre> + +<hr> +<h2><a name="content006">Continuation based C </a></h2> + +<p> +<center><img src="fig/code.jpg"></center> +<p> + +<pre> + Input Interface / Output Interface ͍\ + ĂяoȂ̂ŁABꂽȂB + [vrĂ̂ŁAԓIɂLB + +</pre> + +<hr> +<h2><a name="content007"> ȒPCbC̃vO</a></h2> + +<pre> + __code fact(int n,int result, + code print()){ + if(n>0){ + result *= n; + n--; + goto fact(n,result,print); + } else + goto (*print)(result); + } + +</pre> +while/do Ȃǂg邪ACbCł͊ĎgȂ +<p> + +<hr> +<h2><a name="content008">CbCBuilding blockƂĎg</a></h2> +{PʂXe[ggA傫 +<p> + +<pre> + Q[gA߁AXe[gg傫ȒP + +</pre> +ȃTu[`͌ +<p> + +<pre> + Tu[`ł + +</pre> +DȂƂɎRɕ +<p> +RpCBasic Blockɋ߂ +<p> + +<hr> +<h2><a name="content009">CbC̎g</a></h2> + +<pre> + ƂC̑ւɎg + A[LeN`ɈˑȂAZuƂ + VXeR[A@\̈Ӗ\ł + +</pre> + +<hr> +<h2><a name="content010">Reflection</a></h2> + +<p> +^f[^ɒڃANZXô +<p> +<center><img src="fig/meta.jpg"></center> +<p> +ƂA^f[^͒Pɕʂ̃f[^B +Interface ɂ]vȈɉ߂ȂB +<p> +R[hZOg̕tւReflection ɂȂB +<p> +<center><img src="fig/Reflection.jpg"></center> +<p> + +<hr> +<h2><a name="content011">^f[^̗</a></h2> + +<pre> + (V~[ṼNbN) + ^XNL[ (ʏOSɉBĂ) + (malloc A邢́AZȂ) + +</pre> + +<hr> +<h2><a name="content012">n[hEFALq</a></h2> + +<p> +ԑJڂLɂȂn[hEFALqƎvėǂ +<p> + +<hr> +<h2><a name="content013">Simulator Lq</a></h2> + +<pre> + PS2 Vector Unit + PS3 Cell SPU + +</pre> +ۂɍ쐬܂B +<p> +ASACbC ŏ̂͂... +<p> + +<hr> +<h2><a name="content014">C with Continuation</a></h2> +CƎRɍso +<p> + +<pre> + int main() { + goto a1(__return,__envrionment); + } + __code a1(__code *ret(int), void *env) { + goto ret(0),env; + } + +</pre> +KvȂƂ낾ACbCŋLqΗǂBCwC̒玩R C libraryĂяoėǂB +<p> + +<hr> +<h2><a name="content015"></a></h2> + +<pre> + micro-C base (tiny compiler, full set) + MIPS, PowerPC, ARM, IA32 + gcc base + A[LeN`ɈˑȂ (_Iɂ) + +</pre> +ACfA2002N... ́AN2B(OS +Ŕ\\) +<p> + +<hr> +<h2><a name="content016">gcc ̎</a></h2> +gcc tail call elimination forcing 邱ƂɂA +code segment B +<p> +̏dȂꎞϐʼnKvB +<p> + +<hr> +<h2><a name="content017">gcc CbC x`}[N</a></h2> +<table><tr><td>./conv1 0 <td>./conv1 1 <td>./conv1 2 <td>./conv1 3 +<tr><td>Micro-C <td>5.25 <td>8.97 <td>2.19 <td>2.73 +<tr><td>GCC <td>3.69 <td>4.87 <td>3.08 <td>3.65 +<tr><td>GCC (+omit) <td>2.74 <td>4.20 <td>2.25 <td>2.76 +<tr><td>GCC (+fastcall) <td>2.70 <td>3.44 <td>1.76 <td>2.34 +</table> +<p> +\5.1: Micro-C, GCC ̎sxr(Pʕb) +<p> +CbCɗLȃx`}[NȂ̂ŁAMicro C base \B +<p> + +<hr> +<h2><a name="content018">CCbCւ̕ϊ (C̃vO)</a></h2> + +<pre> + /* classical function call case (0) */ + f0(int i) { + int k,j; + k = 3+i; + j = g0(i+3); + return k+4+j; + } + g0(int i) { + return h0(i+4)+i; + } + h0(int i) { + return i+4; + } + +</pre> + +<hr> +<h2><a name="content019">CCbCւ̕ϊ (@BIȕϊ)</a></h2> + +<p> + +<pre> + typedef char *stack; + struct cont_interface { // General Return Continuation + __code (*ret)(); + }; + __code f(int i,stack sp) { + int k,j; + k = 3+i; + goto f_g0(i,k,sp); + } + struct f_g0_interface { // Specialized Return Continuation + __code (*ret)(); + int i_,k_,j_; + }; + __code f_g1(int j,stack sp); + __code f_g0(int i,int k,stack sp) { // Caller + struct f_g0_interface *c = + (struct f_g0_interface *)(sp -= sizeof(struct f_g0_interface)); + c->ret = f_g1; + c->k_ = k; + c->i_ = i; + goto g(i+3,sp); + } + __code f_g1(int j,stack sp) { // Continuation + struct f_g0_interface *c = sp; + int k = c->k_; + sp+=sizeof(struct f_g0_interface); + c = (struct f_g0_interface *)sp; + goto (c->ret)(k+4+j,sp); + } + __code g_h1(int j,stack sp); + __code g(int i,stack sp) { // Caller + struct f_g0_interface *c = + (struct f_g0_interface *)(sp -= sizeof(struct f_g0_interface)); + c->ret = g_h1; + c->i_ = i; + goto h(i+3,sp); + } + __code g_h1(int j,stack sp) { // Continuation + struct f_g0_interface *c = sp; + int i = c->i_; + sp+=sizeof(struct f_g0_interface); + c = (struct f_g0_interface *)sp; + goto (c->ret)(j+i,sp); + } + __code h(int i,stack sp) { + struct f_g0_interface *c = sp; + goto (c->ret)(i+4,sp); + } + struct main_continuation { // General Return Continuation + __code (*ret)(); + __code (*main_ret)(); + void *env; + }; + __code main_return(int i,stack sp) { + if (loop-->0) + goto f(233,sp); + printf("#0103:%d\n",i); + goto (( (struct main_continuation *)sp)->main_ret)(0), + ((struct main_continuation *)sp)->env; + } + +</pre> +(lԂ̂ł͂Ȃł....) +<p> + +<hr> +<h2><a name="content020">CCbCւ̕ϊ (蓮ōœK)</a></h2> + +<pre> + /* little optimizaed case (3) */ + __code f2_1(int i,char *sp) { + int k,j; + k = 3+i; + goto g2_1(k,i+3,sp); + } + __code g2_1(int k,int i,char *sp) { + goto h2_11(k,i+4,sp); + } + __code f2_0_1(int k,int j,char *sp); + __code h2_1_1(int i,int k,int j,char *sp) { + goto f2_0_1(k,i+j,sp); + } + __code h2_11(int i,int k,char *sp) { + goto h2_1_1(i,k,i+4,sp); + } + __code f2_0_1(int k,int j,char *sp) { + goto (( (struct cont_interface *)sp)->ret)(k+4+j,sp); + } + __code main_return2_1(int i,stack sp) { + if (loop-->0) + goto f2_1(233,sp); + printf("#0165:%d\n",i); + goto (( (struct main_continuation *)sp)->main_ret)(0), + ((struct main_continuation *)sp)->env; + } + +</pre> + +<hr> +<h2><a name="content021">CbC ́A@B̌</a></h2> + +<p> + +<pre> + ʂɏƋLqʂB(BȂ) + Ăяoɑ镔Iɕ + ڎg킸ɁAvOϊ⍂ʌꂩ琶Ďg + +</pre> +A +<p> +Q[vOAn[hEFALq́Â炻... +<p> + +<hr> +<h2><a name="content022">s̋Lq</a></h2> +R[hZOĝ͕sȂ +<p> +s邽߂ɂ́AŃXPW[ +<p> +code segment interleavingӖ_ɂȂ +<p> + +<pre> + 킩₷ (?) + +</pre> +sôŁApl +<p> + +<hr> +<h2><a name="content023">Many Core ̃vOւ̉p</a></h2> +]̒vO~O + ł́A +\oȂB +<p> +ǂ̂悤Ɏėǂ킩ȂB +<p> +KMbvB +<p> + +<pre> + z < for < pointer < < U + +</pre> + +<hr> +<h2><a name="content024">Amdahl's Law</a></h2> + +<p> +ƂɂÂׂ܂ȂɓKvB +Amdahl's LawB(n[hEFAł͓O...) +<p> +<center><img src="fig/amdahl.jpg"></center> +<p> +Ax͂قǍȂĂǂ(Multi Corex)6-10xŗǂB32xŏ\B +<p> + +<hr> +<h2><a name="content025">{IȐ헪</a></h2> +f[^ +<pre> + f[^̕ + +</pre> +pCvC(Kw\) +<pre> + pCvCi̕ + +</pre> +^XN̈ˑ +<pre> + ł̂s + +</pre> +f[^t[}VƂ_NV}VƂ̋Zp +<p> + +<hr> +<h2><a name="content026">wɂ킩₷...</a></h2> +Ŏĝ +<p> + +<pre> + 1. ŏCŏ + 2. f[^ƃR[h + 3. FIFOXPW[ŎsmF + 4. SPUXPW[Ɉڍs + ꔭœ + ... + ƌ킯ɂ͂Ȃ + +</pre> + +<hr> +<h2><a name="content027"></a></h2> + +<p> +PS3Linux ̃_OGW +<p> + +<pre> + t[obt@ɒڕ` + ڍׂ́A_W̔\... + +</pre> +Sony RSX (GDP)̃ANZXĂȂ̂Ŏō +<p> +wGraphics̊{₷悤 +<p> +Open/GL (OSMesa) AxꂩG +<p> + +<hr> +<h2><a name="content028">code segment ̒P̃eXg</a></h2> + +<pre> + ͂Əo͂̃ZbgĒׂΗǂ + + +</pre> + +<hr> +<h2><a name="content029">FIFOXPW[ł̃eXg</a></h2> + +<p> + +<pre> + IɓBŏC̓̈v̌e + +</pre> +ۂCellŎsꍇɂ͔IȎsɂȂ +<p> + +<pre> + Task̏IԂ̕s萫Ȃ + \ȏԂŐ삷Kv + +</pre> + +<hr> +<h2><a name="content030">萫ꍇ̃eXg</a></h2> + +<p> +f=݂Ԃ +<p> +vZʓIɖ͂邪.... +<p> + +<hr> +<h2><a name="content031">݂Ԃ</a></h2> +XPW[f؊ɓꊷB +<p> +fؕƔeXǵAx (CbC R[hZOg) +<p> +\ȃeXgo悤ɁAΏۃvOɓKf؊ōB +<p> + +<hr> +<h2><a name="content032">삷ƂLq</a></h2> +XPW[ɖߍ +<p> +_ CbC ɕϊ +<p> + +<hr> +<h2><a name="content033">܂Ƃ</a></h2> +CbCƂAZuC̊Ԃ̌܂B +<p> +px̃RpCAJĂ܂B +<p> +PS3pCerium Rendering Engine Lq +<pre> + ڍׂ͎̔\... + +</pre> + +<hr> +<h2><a name="content034">ꂩ...</a></h2> + +<p> +CbCn[hEFAڐ (co-synthesis) +<p> +CCbCւ̕ϊ̍쐬 +<p> +gcc ̃[X +<p> + +<h2><a name="content">Content</h2> +<ol> +<li><a href="#content000"> ̖ړI</a> +<li><a href="#content001"> vO̓APIɂ</a> +<li><a href="#content002"> Cell SPŨAZu̓?</a> +<li><a href="#content003"> n[hEFALqɂ́AӖAPI͂Ȃ...</a> +<li><a href="#content004"> ^ȏBĂ̂Ă</a> +<li><a href="#content005"> ^ȏBĂȂ...</a> +<li><a href="#content006"> Continuation based C </a> +<li><a href="#content007"> ȒPCbC̃vO</a> +<li><a href="#content008"> CbCBuilding blockƂĎg</a> +<li><a href="#content009"> CbC̎g</a> +<li><a href="#content010"> Reflection</a> +<li><a href="#content011"> ^f[^̗</a> +<li><a href="#content012"> n[hEFALq</a> +<li><a href="#content013"> Simulator Lq</a> +<li><a href="#content014"> C with Continuation</a> +<li><a href="#content015"> </a> +<li><a href="#content016"> gcc ̎</a> +<li><a href="#content017"> gcc CbC x`}[N</a> +<li><a href="#content018"> CCbCւ̕ϊ (C̃vO)</a> +<li><a href="#content019"> CCbCւ̕ϊ (@BIȕϊ)</a> +<li><a href="#content020"> CCbCւ̕ϊ (蓮ōœK)</a> +<li><a href="#content021"> CbC ́A@B̌</a> +<li><a href="#content022"> s̋Lq</a> +<li><a href="#content023"> Many Core ̃vOւ̉p</a> +<li><a href="#content024"> Amdahl's Law</a> +<li><a href="#content025"> {IȐ헪</a> +<li><a href="#content026"> wɂ킩₷...</a> +<li><a href="#content027"> </a> +<li><a href="#content028"> code segment ̒P̃eXg</a> +<li><a href="#content029"> FIFOXPW[ł̃eXg</a> +<li><a href="#content030"> 萫ꍇ̃eXg</a> +<li><a href="#content031"> ݂Ԃ</a> +<li><a href="#content032"> 삷ƂLq</a> +<li><a href="#content033"> ܂Ƃ</a> +<li><a href="#content034"> ꂩ...</a> +</ol> + +</body></html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presentation/manycore.ind Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,484 @@ +-title: 検証を自身で表現できるハードウェア、ソフトウェア記述言語 \\ Continuation based C と、そのCell への応用 + +-author: 河野真治 + +--研究の目的 + +信頼性の高いプログラムを書くにはどうしたら良いか? + + Concurrent Program + Real-time Program + Interactive Program + Network Program + +を、ちゃんと書くのは難しい。 + +--プログラムの難しさはAPIにある + +System call の意味は? + + The pthread_mutex_lock() function locks mutex. + If the mutex is already locked, the calling + thread will block until the mutex becomes available. + +--Cell SPUのアセンブラの動作は? + + fsmbi rt,symbol + + The I16 field is used to create a mask in register + RT by making eight copies of each bit. Bits in + the operand are related to bytes in the result + in a left-to-right correspondence. + +--ハードウェア記述には、ある意味でAPIはないが... + + 入力タイミングの記述は? + + 時相論理で記述しても良いが... + + □◇ bus_req → ◇ bus_ack + + これはどういう意味ですか? + +--メタな情報が隠れているのが問題を難しくしている + +メタな情報の例 + + スケジューラ + 並列実行意味 + イベントの時間 + 命令の操作的意味 + OSの状態 + 関数呼び出し時の環境(スタック) + +--メタな情報が隠れていない言語を作れば... + +以下のようなものを記述できるようになる + + タスクスケジューラ + システムコール自体の意味 + 時相論理式の意味を表す状態遷移 + アセンブラの命令の動作 + +これらはアセンブラでは当り前に記述できていた + + → アセンブラとCの中間的な言語があれば良い + +--Continuation based C + +<center><img src="fig/code.jpg"></center> + + Input Interface / Output Interface は構造体 + + 関数呼び出しがないので、隠れた環境がない。 + + ループが排除さているので、時間的にも有限。 + + +-- 簡単なCbCのプログラム + __code fact(int n,int result, + code print()){ + if(n>0){ + result *= n; + n--; + goto fact(n,result,print); + } else + goto (*print)(result); + } + +while/do なども使えるが、CbCでは敢えて使わない + +--CbCをBuilding blockとして使う + +基本単位をステートメントよりも、もう少し大きくしたい + + ゲート、命令、ステートメントより大きな単位 + +しかし巨大なサブルーチンは嫌 + + サブルーチンを分割できる + +好きなときに自由に分割したい + +コンパイラのBasic Blockに近い + +--CbCの使い方 + + 実装言語としてCの替わりに使う + アーキテクチャに依存しないアセンブラとして + システムコール、同期機構の意味を表現できる + +--Reflection + +メタデータに直接アクセス出来るので + +<center><img src="fig/meta.jpg"></center> + +というか、メタデータは単に普通のデータ。 +Interface にある余計な引数に過ぎない。 + +コードセグメントの付替もReflection になる。 + +<center><img src="fig/Reflection.jpg"></center> + +--メタデータの例 + + 時刻 (シミュレーションのクロック) + + タスクキュー (通常はOSに隠れている) + + 資源 (malloc 、あるいは、演算器など) + + +--ハードウェア記述 + +状態遷移が有限になればハードウェア記述だと +思って良い + +--Simulator 記述 + + PS2 の Vector Unit + + PS3 Cell のSPU + +これを実際に作成しました。 + +しかし、全部、CbC で書くのはちょっと... + +--C with Continuation + +Cと自由に行き来出来る + + int main() { + goto a1(__return,__envrionment); + } + + __code a1(__code *ret(int), void *env) { + goto ret(0),env; + } + +必要なところだけ、CbCで記述すれば良い。CwCの中から +自由に C のlibraryを呼び出して良い。 + +--実装 + + micro-C base (元はtiny compiler, 今はfull set) + MIPS, PowerPC, ARM, IA32 + + gcc base + アーキテクチャに依存しない実装 (理論的には) + +アイデアは2002年だが... 完成は、今年2月。(OS +研究会で発表予定) + +--gcc 上の実装 + +gcc で tail call elimination をforcing することにより、 +code segment を実装する。 + +引数の重なりを一時変数で解決する必要がある。 + +--gcc のCbC ベンチマーク + +<table> +<tr><td>./conv1 0 <td>./conv1 1 <td>./conv1 2 <td>./conv1 3 +<tr><td>Micro-C <td>5.25 <td>8.97 <td>2.19 <td>2.73 +<tr><td>GCC <td>3.69 <td>4.87 <td>3.08 <td>3.65 +<tr><td>GCC (+omit) <td>2.74 <td>4.20 <td>2.25 <td>2.76 +<tr><td>GCC (+fastcall) <td>2.70 <td>3.44 <td>1.76 <td>2.34 +</table> + +表5.1: Micro-C, GCC の実行速度比較(単位秒) + +CbCに有利なベンチマークなので、Micro C base も結構速い。 + +--CからCbCへの変換 (Cのプログラム) + + /* classical function call case (0) */ + + f0(int i) { + int k,j; + k = 3+i; + j = g0(i+3); + return k+4+j; + } + + g0(int i) { + return h0(i+4)+i; + } + + h0(int i) { + return i+4; + } + +--CからCbCへの変換 (機械的な変換) + + typedef char *stack; + + struct cont_interface { // General Return Continuation + __code (*ret)(); + }; + + __code f(int i,stack sp) { + int k,j; + k = 3+i; + goto f_g0(i,k,sp); + } + + struct f_g0_interface { // Specialized Return Continuation + __code (*ret)(); + int i_,k_,j_; + }; + + __code f_g1(int j,stack sp); + + __code f_g0(int i,int k,stack sp) { // Caller + struct f_g0_interface *c = + (struct f_g0_interface *)(sp -= sizeof(struct f_g0_interface)); + + c->ret = f_g1; + c->k_ = k; + c->i_ = i; + + goto g(i+3,sp); + } + + __code f_g1(int j,stack sp) { // Continuation + struct f_g0_interface *c = sp; + int k = c->k_; + sp+=sizeof(struct f_g0_interface); + c = (struct f_g0_interface *)sp; + goto (c->ret)(k+4+j,sp); + } + + __code g_h1(int j,stack sp); + + __code g(int i,stack sp) { // Caller + struct f_g0_interface *c = + (struct f_g0_interface *)(sp -= sizeof(struct f_g0_interface)); + + c->ret = g_h1; + c->i_ = i; + + goto h(i+3,sp); + } + + __code g_h1(int j,stack sp) { // Continuation + struct f_g0_interface *c = sp; + int i = c->i_; + sp+=sizeof(struct f_g0_interface); + c = (struct f_g0_interface *)sp; + goto (c->ret)(j+i,sp); + } + + __code h(int i,stack sp) { + struct f_g0_interface *c = sp; + goto (c->ret)(i+4,sp); + } + + struct main_continuation { // General Return Continuation + __code (*ret)(); + __code (*main_ret)(); + void *env; + }; + + __code main_return(int i,stack sp) { + if (loop-->0) + goto f(233,sp); + printf("#0103:%d\n",i); + goto (( (struct main_continuation *)sp)->main_ret)(0), + ((struct main_continuation *)sp)->env; + } + +(人間が書くものではないです....) + +--CからCbCへの変換 (手動で最適化すると) + + /* little optimizaed case (3) */ + + __code f2_1(int i,char *sp) { + int k,j; + k = 3+i; + goto g2_1(k,i+3,sp); + } + + __code g2_1(int k,int i,char *sp) { + goto h2_11(k,i+4,sp); + } + + __code f2_0_1(int k,int j,char *sp); + __code h2_1_1(int i,int k,int j,char *sp) { + goto f2_0_1(k,i+j,sp); + } + + __code h2_11(int i,int k,char *sp) { + goto h2_1_1(i,k,i+4,sp); + } + + __code f2_0_1(int k,int j,char *sp) { + goto (( (struct cont_interface *)sp)->ret)(k+4+j,sp); + } + + __code main_return2_1(int i,stack sp) { + if (loop-->0) + goto f2_1(233,sp); + printf("#0165:%d\n",i); + goto (( (struct main_continuation *)sp)->main_ret)(0), + ((struct main_continuation *)sp)->env; + } + +--CbC は、機械向けの言語 + + 普通に書くと記述量が増える。(情報を隠せないため) + + 関数呼び出しに相当する部分を強制的に分割させられる + + 直接使わずに、プログラム変換や高位言語から生成して使う + +しかし、 + +ゲームプログラムや、ハードウェア記述は、昔からそうだった... + + +--並列実行の記述 + +コードセグメント自体は並列実行されない + +並列実行するためには、自分でスケジューラを書く + +code segment がinterleavingされる意味論になる + + → わかりやすい (?) + +並列実行が出来たので、応用を考える + +--Many Core のプログラムへの応用 + +従来の逐次プログラミング + 並列処理では、 +性能が出ない。 + +並列処理をどのように実現して良いかわからない。 + +習得ギャップがある。 + + 配列 < for 文 < pointer < 並列 < 分散 + +--Amdahl's Law + +とにかく、のべつまくなし並列に動かす必要がある。 +Amdahl's Law。(これもハードウェアでは当り前...) + +<center><img src="fig/amdahl.jpg"></center> + +しかし、並列度はそれほど高くなくても良い(Multi Core程度) +6-10程度で良い。32程度で十分。 + +--基本的な戦略 + +データ並列 + データ個数の並列性 + +パイプライン(階層構造) + パイプライン段数の並列性 + +タスクの依存性 + 準備できたものから実行 + +データフローマシンとかリダクションマシンとかの技術 + +--学生にわかりやすく... + +実験で使うので + + 1. 最初はCで書く + + 2. データとコードを分割 + + 3. FIFOスケジューラで実行を確認 + + 4. SPUスケジューラに移行 + + 一発で動く + + ... + + と言うわけにはいかない + +--例題 + +PS3Linux 上のレンダリングエンジン + + フレームバッファに直接描画 + 詳細は、神里晃の発表で... + +Sony がRSX (GDP)のアクセスを許してないので自分で作った + +学生がGraphicsの基本を勉強しやすいように + +Open/GL (OSMesa) も実装したが、時代遅れかつ複雑すぎる + +--code segment の単体テスト + + 入力と出力のセットを作って調べれば良い + 自明 + +--FIFOスケジューラでのテスト + + 決定的に動く。最初のCの動作の一致の検証が容易 + +実際にCell上で実行する場合には非決定的な実行になる + + Taskの終了時間の不定性など + + あらゆる可能な状態で正しく動作する必要がある + +--非決定性がある場合のテスト + +モデル検証=しらみつぶし + +計算量的に問題はあるが.... + +--しらみつぶし + +スケジューラをモデル検証器に入れ換える。 + +モデル検証部分と披テスト部分は、同じレベル (CbC コードセグメント) + +十分なテストが出来るように、対象プログラムに適したモデル検証器を +自分で作る。 + + +--正しく動作するという記述 + +スケジューラに埋め込む + +時相論理式を CbC に変換 + +--まとめ + +CbCというアセンブラとCの間の言語を作りました。 + +実用レベルのコンパイラが動作、公開されています。 + +PS3用のCerium Rendering Engine を記述 + 詳細は次の発表で... + +--これから... + +CbCからハードウェアを直接生成 (co-synthesis) + +CからCbCへの変換器の作成 + +gcc 実装のリリース + + + + + + + + + + + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/title-e.tex Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,26 @@ +\title{{\bf Self descriptive verfication in Continuation based C and it's application to Cell architecture}} + +\title{{\bf Self descriptive verfication in Continuation based C and it's application to Cell architecture}} + +\title{{\bf Self descriptive verfication in Continuation based C and it's application to Cell architecture}} + +\title{{\bf Self descriptive verification in Continuation based C and it's application to Cell architecture}} + +\title{{\bf Self descriptive verification in Continuation based C and it's application to Cell architecture}} + +\title{{\bf Self descriptive verification in Continuation based C and it's application to Cell architecture}} + +\title{{\bf Self descriptive verification in Continuation based C and it's application to Cell architecture}} + +\title{{\bf Self descriptive verification in Continuation based C and it's application to Cell architecture}} + +\title{{\bf Self descriptive verification in Continuation based C and it's application to Cell architecture}} + +\title{{\bf Self descriptive verification in Continuation based C and it's application to Cell architecture}} + +\title{{\bf Self descriptive verification in Continuation based C and it's application to Cell architecture}} + +\title{{\bf Self descriptive verification in Continuation based C and it's application to Cell architecture}} + +\title{{\bf Self descriptive verification in Continuation based C and it's application to Cell architecture}} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/title-e.tex.aux Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,20 @@ +\relax +\@setckpt{title-e.tex}{ +\setcounter{page}{1} +\setcounter{equation}{0} +\setcounter{enumi}{0} +\setcounter{enumii}{0} +\setcounter{enumiii}{0} +\setcounter{enumiv}{0} +\setcounter{footnote}{0} +\setcounter{mpfootnote}{0} +\setcounter{@paper}{1} +\setcounter{part}{0} +\setcounter{section}{0} +\setcounter{subsection}{0} +\setcounter{subsubsection}{0} +\setcounter{paragraph}{0} +\setcounter{subparagraph}{0} +\setcounter{figure}{0} +\setcounter{table}{0} +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/title.aux Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,20 @@ +\relax +\@setckpt{title}{ +\setcounter{page}{1} +\setcounter{equation}{0} +\setcounter{enumi}{0} +\setcounter{enumii}{0} +\setcounter{enumiii}{0} +\setcounter{enumiv}{0} +\setcounter{footnote}{0} +\setcounter{mpfootnote}{0} +\setcounter{@paper}{1} +\setcounter{part}{0} +\setcounter{section}{0} +\setcounter{subsection}{0} +\setcounter{subsubsection}{0} +\setcounter{paragraph}{0} +\setcounter{subparagraph}{0} +\setcounter{figure}{0} +\setcounter{table}{0} +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/title.tex Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,8 @@ +\title{{\bf 検証を自身で表現できるハードウェア、ソフトウェア記述言語 Continuation based C と、そのCell への応用}} + +%\pagenumbering{roman} +\author{ 河野真治 \\[5mm] +e-mail:kono@ie.u-ryukyu.ac.jp\\ +Information Engineering, University of the Ryukyus\\ +Nishihara-cyo 1, Okinawa, 903-01, Japan} +% \date{}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trcover.tex Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,26 @@ +\documentstyle[a4,11pt]{article} %%%%% preamble %%%%% +%\textwidth 16.3cm % the text frame size +%\textheight 23cm +%\oddsidemargin 5mm % for centering +%\evensidemargin 13mm % for centering +%\topmargin 1mm +\begin{document} + +\begin{titlepage} +\begin{center}\vspace*{34mm} +\parbox[c]{12cm}{\begin{center} +{\LARGE\bf Self descriptive verification in Continuation based C and it's application to Cell architecture}\\[+5mm] +{\large 河野真治}\\[+5mm] +\end{center}}\\ +\vfill +{\Large Information Engineering, University of the Ryukyus\\ +Nishihara-cho 1, Okinawa, 903-01 JAPAN}\\[+2cm] +{\small Copyright \copyright\ \number\year\ +University of the Ryukyus +}\\[+1cm] +\end{center} +\end{titlepage} + + +\end{document} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/verification.mm Thu Mar 06 19:49:25 2008 +0900 @@ -0,0 +1,297 @@ +<map version="0.8.0"> +<!-- To view this file, download free mind mapping software FreeMind from http://freemind.sourceforge.net --> +<node CREATED="1202961861844" ID="Freemind_Link_1640997462" MODIFIED="1204704593735" TEXT="Verfication for ManyCore"> +<node CREATED="1202962537140" ID="_" MODIFIED="1202962549536" POSITION="right" TEXT="Data/Codeの細分化"> +<node CREATED="1203593361887" ID="Freemind_Link_1667787729" MODIFIED="1203593370807" TEXT="細分化する前と後の整合性"/> +<node CREATED="1203593371565" ID="Freemind_Link_30383761" MODIFIED="1203593383417" TEXT="テストは実機よりシミュレータ"/> +<node CREATED="1203593393509" ID="Freemind_Link_1095888104" MODIFIED="1203593412953" TEXT="分割する方法"> +<node CREATED="1203593424397" ID="Freemind_Link_1857630957" MODIFIED="1203593436185" TEXT="データによる分割"/> +<node CREATED="1203593436749" ID="Freemind_Link_1908342388" MODIFIED="1203593442953" TEXT="パイプライン"> +<node CREATED="1204583776461" ID="Freemind_Link_1746184865" MODIFIED="1204583780593" TEXT="double buffer"/> +</node> +<node CREATED="1203593443645" ID="Freemind_Link_1886264283" MODIFIED="1203593447265" TEXT="非同期が重要"/> +<node CREATED="1204583508861" ID="Freemind_Link_424506501" MODIFIED="1204583524177" TEXT="サブルーチンよりも小さいレベルでの分割"/> +</node> +<node CREATED="1204583643573" ID="Freemind_Link_1662365896" MODIFIED="1204583647357" TEXT="依存関係"> +<node CREATED="1204583647829" ID="Freemind_Link_1081255354" MODIFIED="1204583651329" TEXT="データフロー"/> +<node CREATED="1204583795845" ID="Freemind_Link_556182834" MODIFIED="1204583807257" TEXT="なるべくロックしない"> +<node CREATED="1204583807557" ID="Freemind_Link_427134538" MODIFIED="1204583811368" TEXT="というかほとんどしない"/> +</node> +</node> +<node CREATED="1203593642277" ID="Freemind_Link_1685125034" MODIFIED="1203593653297" TEXT="分割によって生成されるバグ"/> +<node CREATED="1203593655789" ID="Freemind_Link_1107920853" MODIFIED="1203593660305" TEXT="性能自体の検証"/> +</node> +<node CREATED="1202963024859" ID="Freemind_Link_200463618" MODIFIED="1202963032409" POSITION="right" TEXT="Many Core の特徴"> +<node CREATED="1202963033331" ID="Freemind_Link_1487096210" MODIFIED="1202963058135" TEXT="並列度を定常的に維持する必要がある"> +<node CREATED="1202963058691" ID="Freemind_Link_791010539" MODIFIED="1202963063551" TEXT="アムダール則"/> +</node> +<node CREATED="1204583661661" ID="Freemind_Link_1443303867" MODIFIED="1204583673245" TEXT="並列計算機の技術の焼き直し"> +<node CREATED="1204583673645" ID="Freemind_Link_1137720307" MODIFIED="1204583676921" TEXT="データフローマシン"/> +<node CREATED="1204583677933" ID="Freemind_Link_504808636" MODIFIED="1204583691569" TEXT="データ並列"/> +<node CREATED="1204583694797" ID="Freemind_Link_1244774582" MODIFIED="1204583703025" TEXT="リダクションマシン"/> +</node> +<node CREATED="1202963067267" ID="Freemind_Link_618118620" MODIFIED="1202963080919" TEXT="Spin Lock / Semaphor"> +<node CREATED="1204583823061" ID="Freemind_Link_311344559" MODIFIED="1204583834217" TEXT="同期のコストは高い"> +<node CREATED="1204583837389" ID="Freemind_Link_989753382" MODIFIED="1204583843025" TEXT="相対的に"/> +<node CREATED="1204583844941" ID="Freemind_Link_1899594466" MODIFIED="1204583849105" TEXT="taskが小さいから"/> +</node> +</node> +<node CREATED="1204583402707" ID="Freemind_Link_1839408789" MODIFIED="1204583444500" TEXT="明示的非明示的な通信"> +<node CREATED="1204583445203" ID="Freemind_Link_685922167" MODIFIED="1204583451815" TEXT="quickpath"/> +<node CREATED="1204583452411" ID="Freemind_Link_1519314475" MODIFIED="1204583458831" TEXT="memory flow controller"/> +<node CREATED="1204583460947" ID="Freemind_Link_1536369264" MODIFIED="1204583469919" TEXT="共有メモリ、キャッシュ"/> +</node> +<node CREATED="1202963086531" ID="Freemind_Link_1297728359" MODIFIED="1202963092095" TEXT="データ転送コスト"> +<node CREATED="1202963092971" ID="Freemind_Link_1024986240" MODIFIED="1202963097519" TEXT="QuickPath"/> +<node CREATED="1202963098771" ID="Freemind_Link_694755617" MODIFIED="1202963102895" TEXT="共有メモリ"/> +<node CREATED="1202963104371" ID="Freemind_Link_1713915208" MODIFIED="1202963109655" TEXT="local store"/> +</node> +<node CREATED="1204583859613" ID="Freemind_Link_1537520759" MODIFIED="1204583870601" TEXT="現状のMany Core"> +<node CREATED="1204583871541" ID="Freemind_Link_648364847" MODIFIED="1204583876880" TEXT="Multi-thread"/> +<node CREATED="1204583878541" ID="Freemind_Link_1077126862" MODIFIED="1204583887856" TEXT="Many core on a chip"/> +<node CREATED="1204583888357" ID="Freemind_Link_431559243" MODIFIED="1204583894017" TEXT="Inter connection"/> +</node> +<node CREATED="1202963112395" ID="Freemind_Link_617810447" MODIFIED="1202963115135" TEXT="Cell"> +<node CREATED="1202964269343" ID="Freemind_Link_781110065" MODIFIED="1202964273451" TEXT="local store"/> +<node CREATED="1202964273855" ID="Freemind_Link_1702369537" MODIFIED="1202964280203" TEXT="memory flow controller"/> +<node CREATED="1202964286487" ID="Freemind_Link_79141201" MODIFIED="1202964288179" TEXT="mailbox"/> +</node> +</node> +<node CREATED="1202963344379" ID="Freemind_Link_985719247" MODIFIED="1202963349383" POSITION="right" TEXT="検証"> +<node CREATED="1202964344519" ID="Freemind_Link_1685494826" MODIFIED="1202964352643" TEXT="テストと検証の違い"> +<node CREATED="1202964353055" ID="Freemind_Link_486624386" MODIFIED="1202964359075" TEXT="テストは一部の試験"/> +<node CREATED="1202964359487" ID="Freemind_Link_1963142797" MODIFIED="1202964364395" TEXT="検証はすべての場合を尽くす"/> +<node CREATED="1202964365959" ID="Freemind_Link_1024370033" MODIFIED="1202964377667" TEXT="証明を使う手法"/> +</node> +<node CREATED="1202962554869" ID="Freemind_Link_1482902786" MODIFIED="1202962562728" TEXT="Scalable なテスト"/> +<node CREATED="1202963129779" ID="Freemind_Link_661637628" MODIFIED="1202963137343" TEXT="テストそのものの高速性"/> +<node CREATED="1202963138987" ID="Freemind_Link_817751510" MODIFIED="1202963149311" TEXT="Satisfiebility checker"/> +<node CREATED="1202962563421" ID="Freemind_Link_1726323592" MODIFIED="1202962569720" TEXT="Scalableな検証"/> +<node CREATED="1202963160363" ID="Freemind_Link_717959404" MODIFIED="1202963169215" TEXT="検証しやすいプログラミング"> +<node CREATED="1202963553235" ID="Freemind_Link_728929118" MODIFIED="1202963557910" TEXT="逐次の方がやさしい"/> +<node CREATED="1202964391863" ID="Freemind_Link_1088214074" MODIFIED="1202964399931" TEXT="隠された部分がない"> +<node CREATED="1202964400343" ID="Freemind_Link_1742011511" MODIFIED="1202964404115" TEXT="見えない変数"/> +<node CREATED="1202964404559" ID="Freemind_Link_150901581" MODIFIED="1202964412091" TEXT="見えない同期"/> +</node> +</node> +<node CREATED="1203594083842" ID="Freemind_Link_660610537" MODIFIED="1203594094678" TEXT="詳細化で出るエラーの検証"> +<node CREATED="1203594096122" ID="Freemind_Link_1007410415" MODIFIED="1203594101758" TEXT="テストの自動生成"/> +<node CREATED="1203594102130" ID="Freemind_Link_910422961" MODIFIED="1203594109302" TEXT="プロパティの自動生成"/> +</node> +<node CREATED="1202963170091" ID="Freemind_Link_284954383" MODIFIED="1202963181495" TEXT="検証しやすい開発工程"/> +<node CREATED="1203593608853" ID="Freemind_Link_801109797" MODIFIED="1203593618991" TEXT="検証でエラーが出た後"> +<node CREATED="1203593619685" ID="Freemind_Link_1355536015" MODIFIED="1203593623241" TEXT="修正方法"/> +</node> +<node CREATED="1202963817380" ID="Freemind_Link_1548127708" MODIFIED="1202963820725" TEXT="部分と全体"> +<node CREATED="1202963821156" ID="Freemind_Link_744663828" MODIFIED="1202963889824" TEXT="部分が正しい"/> +<node CREATED="1202963872348" ID="Freemind_Link_948728949" MODIFIED="1202963877424" TEXT="全体が正しい"/> +</node> +</node> +<node CREATED="1202963441771" ID="Freemind_Link_173181427" MODIFIED="1202963444922" POSITION="right" TEXT="CbC"> +<node CREATED="1202963446795" ID="Freemind_Link_1110314228" MODIFIED="1202963450639" TEXT="code segment"> +<node CREATED="1202963990106" ID="Freemind_Link_995713397" MODIFIED="1202963995221" TEXT="input interface"/> +<node CREATED="1202963995562" ID="Freemind_Link_1674448042" MODIFIED="1202963999054" TEXT="output interface"/> +<node CREATED="1202964027258" ID="Freemind_Link_893871910" MODIFIED="1202964036182" TEXT="directly connected segment"/> +<node CREATED="1204584161249" ID="Freemind_Link_1065264715" MODIFIED="1204584174789" TEXT="任意の点でのSegmentの分割が自明"/> +</node> +<node CREATED="1202963451011" ID="Freemind_Link_1623118922" MODIFIED="1202963453631" TEXT="data segment"> +<node CREATED="1202964005130" ID="Freemind_Link_1024692675" MODIFIED="1202964010590" TEXT="大域変数"/> +<node CREATED="1202964010874" ID="Freemind_Link_618144740" MODIFIED="1202964015422" TEXT="スタックの切り替え"/> +<node CREATED="1202964042354" ID="Freemind_Link_658172839" MODIFIED="1202964044942" TEXT="anchor"/> +<node CREATED="1202964046578" ID="Freemind_Link_1766703988" MODIFIED="1202964053909" TEXT="directory connected data"/> +<node CREATED="1202964062042" ID="Freemind_Link_718409516" MODIFIED="1202964087894" TEXT="reference procedure duality"/> +</node> +<node CREATED="1202963454867" ID="Freemind_Link_1640026019" MODIFIED="1202963463247" TEXT="既存のプログラムからの変換"/> +<node CREATED="1202964165506" ID="Freemind_Link_746909473" MODIFIED="1202964169375" TEXT="Reflection"> +<node CREATED="1202964169994" ID="Freemind_Link_1223367174" MODIFIED="1202964182109" TEXT="segment 単位のreflection"/> +</node> +<node CREATED="1202963465987" ID="Freemind_Link_1109041382" MODIFIED="1202963471079" TEXT="細分化テスト"/> +<node CREATED="1202963472811" ID="Freemind_Link_1269131154" MODIFIED="1204584125853" TEXT="並列実行シミュレーション"> +<node CREATED="1202963974546" ID="Freemind_Link_1309291110" MODIFIED="1202963978510" TEXT="プログラム変換"/> +<node CREATED="1204584666297" ID="Freemind_Link_1372048610" MODIFIED="1204584676121" TEXT="ハードウェアシミュレータ"> +<node CREATED="1204584677949" ID="Freemind_Link_905818283" MODIFIED="1204584695801" TEXT="作ることによる動作の理解"/> +<node CREATED="1204584702101" ID="Freemind_Link_3972241" MODIFIED="1204584707721" TEXT="gdbでのデバッグ"/> +</node> +</node> +<node CREATED="1202963914938" ID="Freemind_Link_1628852986" MODIFIED="1202963916563" TEXT="テスト"> +<node CREATED="1202963917010" ID="Freemind_Link_726836648" MODIFIED="1202963925957" TEXT="Input output test"/> +<node CREATED="1202963926562" ID="Freemind_Link_421932148" MODIFIED="1202963936030" TEXT="全体の動作"/> +<node CREATED="1202963937234" ID="Freemind_Link_1792983322" MODIFIED="1202963964990" TEXT="テスト粒度の制御"/> +</node> +<node CREATED="1204584088777" ID="Freemind_Link_281231901" MODIFIED="1204584092018" TEXT="実装"> +<node CREATED="1204584092497" ID="Freemind_Link_34249936" MODIFIED="1204584096213" TEXT="micro-C base"/> +<node CREATED="1204584096625" ID="Freemind_Link_1499836933" MODIFIED="1204584099261" TEXT="gcc base"/> +<node CREATED="1204584103889" ID="Freemind_Link_1311452059" MODIFIED="1204584106157" TEXT="C++?"/> +</node> +<node CREATED="1202963484091" ID="Freemind_Link_638410849" MODIFIED="1202963488423" TEXT="タブロー展開"/> +<node CREATED="1202963505835" ID="Freemind_Link_66651374" MODIFIED="1202963514303" TEXT="状態遷移系との変換"/> +<node CREATED="1202963496955" ID="Freemind_Link_672443619" MODIFIED="1202963502464" TEXT="subset construction"/> +<node CREATED="1202964259375" ID="Freemind_Link_1984103195" MODIFIED="1202964264051" TEXT="join 入れたいかな〜"/> +<node CREATED="1202986098104" ID="Freemind_Link_321697550" MODIFIED="1202986111320" TEXT="Object 指向/Module は?"> +<node CREATED="1202986124873" ID="Freemind_Link_754496895" MODIFIED="1202986128725" TEXT="class"/> +<node CREATED="1202986129137" ID="Freemind_Link_1362313301" MODIFIED="1202986132837" TEXT="継承"/> +<node CREATED="1202986137969" ID="Freemind_Link_878275700" MODIFIED="1202986144965" TEXT="Interface"/> +<node CREATED="1202986148569" ID="Freemind_Link_1116578492" MODIFIED="1202986155205" TEXT="anchor"/> +</node> +</node> +<node CREATED="1204583548773" ID="Freemind_Link_1070296449" MODIFIED="1204583554545" POSITION="right" TEXT="Cerium Engine"> +<node CREATED="1204583555117" ID="Freemind_Link_228966638" MODIFIED="1204583578571" TEXT="task"> +<node CREATED="1204583579245" ID="Freemind_Link_367227345" MODIFIED="1204583602288" TEXT="割当単位のtask"/> +<node CREATED="1204583602701" ID="Freemind_Link_948155475" MODIFIED="1204583613537" TEXT="パイプラインレベルでのmicro task"/> +<node CREATED="1204583620717" ID="Freemind_Link_1394875471" MODIFIED="1204583631529" TEXT="schedulerとdependency"/> +<node CREATED="1204584022009" ID="Freemind_Link_1668253380" MODIFIED="1204584026637" TEXT="記述の方法"> +<node CREATED="1204584139337" ID="Freemind_Link_985833579" MODIFIED="1204584145589" TEXT="既存のCの関数"/> +<node CREATED="1204584146073" ID="Freemind_Link_1679576004" MODIFIED="1204584152869" TEXT="CbC code segement"/> +</node> +<node CREATED="1204584031881" ID="Freemind_Link_1559568578" MODIFIED="1204584040949" TEXT="シーケンシャルな実行"> +<node CREATED="1204584041385" ID="Freemind_Link_1918348970" MODIFIED="1204584053237" TEXT="アルゴリズムとしての正しさ"/> +<node CREATED="1204584062025" ID="Freemind_Link_960639205" MODIFIED="1204584066021" TEXT="デバッグのしやすさ"/> +<node CREATED="1204584066697" ID="Freemind_Link_1102030779" MODIFIED="1204584076285" TEXT="実機抜きでのデバッグ"/> +</node> +</node> +<node CREATED="1204583713861" ID="Freemind_Link_492416858" MODIFIED="1204583723976" TEXT="Scheme graph"> +<node CREATED="1204583726181" ID="Freemind_Link_1149112800" MODIFIED="1204583733464" TEXT="並列実行"/> +<node CREATED="1204583733685" ID="Freemind_Link_40537251" MODIFIED="1204583746753" TEXT="ゲーム作成の要"/> +</node> +<node CREATED="1204583750349" ID="Freemind_Link_996601880" MODIFIED="1204583756615" TEXT="Rendering Engine"> +<node CREATED="1204583757037" ID="Freemind_Link_1291505426" MODIFIED="1204583759832" TEXT="Simple"/> +<node CREATED="1204583763742" ID="Freemind_Link_216989554" MODIFIED="1204583768417" TEXT="データ並列"/> +</node> +</node> +<node CREATED="1202964105522" ID="Freemind_Link_683099654" MODIFIED="1202964109670" POSITION="right" TEXT="Thread Diagram"> +<node CREATED="1202964111554" ID="Freemind_Link_1094816808" MODIFIED="1202964124990" TEXT="有限なトークンを持つPetrinet"/> +<node CREATED="1202964125378" ID="Freemind_Link_1732617314" MODIFIED="1202964133710" TEXT="easy to verify"/> +<node CREATED="1202964134714" ID="Freemind_Link_1168607746" MODIFIED="1202964138158" TEXT="easy to understand"/> +<node CREATED="1202964141506" ID="Freemind_Link_1005203569" MODIFIED="1202964145950" TEXT="good for visualization"/> +<node CREATED="1203593923231" ID="Freemind_Link_1428216038" MODIFIED="1203593930281" TEXT="UMLとの関係"/> +<node CREATED="1203594036754" ID="Freemind_Link_1996171794" MODIFIED="1203594055853" TEXT="階層性"/> +<node CREATED="1204584206897" ID="Freemind_Link_525303791" MODIFIED="1204584215795" TEXT="振る舞い"> +<node CREATED="1204584216177" ID="Freemind_Link_5877710" MODIFIED="1204584220749" TEXT="静的"/> +<node CREATED="1204584221233" ID="Freemind_Link_1824676610" MODIFIED="1204584225133" TEXT="動的"/> +</node> +</node> +<node CREATED="1202962607829" ID="Freemind_Link_1375869981" MODIFIED="1202962618568" POSITION="left" TEXT="Human factor"> +<node CREATED="1202963325035" ID="Freemind_Link_1773433633" MODIFIED="1202963326639" TEXT="XP"/> +<node CREATED="1202963327083" ID="Freemind_Link_871502112" MODIFIED="1202963331367" TEXT="Pair Programming"/> +<node CREATED="1202964421039" ID="Freemind_Link_1737251950" MODIFIED="1202964426139" TEXT="プログラミングのしやすさ"> +<node CREATED="1202964426647" ID="Freemind_Link_1488420925" MODIFIED="1202964435123" TEXT="検証しやすさ"/> +<node CREATED="1202964440847" ID="Freemind_Link_413194522" MODIFIED="1202964446987" TEXT="安易にプログラミングさせない"/> +<node CREATED="1202964453991" ID="Freemind_Link_769287644" MODIFIED="1202964460531" TEXT="後で設計"/> +</node> +<node CREATED="1202964478847" ID="Freemind_Link_1416472175" MODIFIED="1202964488435" TEXT="仕様を作ることの難しさ"> +<node CREATED="1202964489335" ID="Freemind_Link_403059760" MODIFIED="1202964494427" TEXT="言語が複雑すぎる"> +<node CREATED="1202964502399" ID="Freemind_Link_584751521" MODIFIED="1202964506011" TEXT="C++"/> +<node CREATED="1202964506591" ID="Freemind_Link_1360705999" MODIFIED="1202964507819" TEXT="Java"/> +<node CREATED="1202964508415" ID="Freemind_Link_376297141" MODIFIED="1202964509739" TEXT="Perl"/> +<node CREATED="1202964514055" ID="Freemind_Link_144196805" MODIFIED="1202964516187" TEXT="System C"/> +<node CREATED="1202964521687" ID="Freemind_Link_1500456482" MODIFIED="1202964523419" TEXT="VHDL"/> +<node CREATED="1202964523983" ID="Freemind_Link_1171941151" MODIFIED="1202964525675" TEXT="Verilog"/> +<node CREATED="1202964531023" ID="Freemind_Link_1906234036" MODIFIED="1202964534259" TEXT="Turing machine"/> +</node> +</node> +<node CREATED="1203594134695" ID="Freemind_Link_276633001" MODIFIED="1203594182931" TEXT="図との連係"> +<node CREATED="1203594148071" ID="Freemind_Link_699805038" MODIFIED="1203594213387" TEXT="一覧性"/> +<node CREATED="1203594183711" ID="Freemind_Link_362521975" MODIFIED="1203594194603" TEXT="図そのもののスケーラビリティ"/> +</node> +</node> +<node CREATED="1202962985189" ID="Freemind_Link_244216072" MODIFIED="1202962991455" POSITION="left" TEXT="検証の粒度"> +<node CREATED="1202963395939" ID="Freemind_Link_1567141932" MODIFIED="1202963403707" TEXT="並列実行の粒度"> +<node CREATED="1202963404243" ID="Freemind_Link_1127949287" MODIFIED="1202963407303" TEXT="命令レベル"/> +<node CREATED="1202963408027" ID="Freemind_Link_1648147745" MODIFIED="1202963416727" TEXT="手続きレベル"/> +<node CREATED="1202963417419" ID="Freemind_Link_552734401" MODIFIED="1202963420855" TEXT="スレッド"/> +<node CREATED="1202963421595" ID="Freemind_Link_1172769634" MODIFIED="1202963424095" TEXT="プロセス"/> +<node CREATED="1202963424955" ID="Freemind_Link_1036143910" MODIFIED="1202963429223" TEXT="コンポーネント"/> +<node CREATED="1202963431243" ID="Freemind_Link_1719034498" MODIFIED="1202963434655" TEXT="ネットワーク"/> +</node> +<node CREATED="1204583982889" ID="Freemind_Link_592767531" MODIFIED="1204583989641" TEXT="粒度を荒くして"> +<node CREATED="1204583990185" ID="Freemind_Link_285140471" MODIFIED="1204583996165" TEXT="正しく検証出来るのか?"/> +</node> +</node> +<node CREATED="1202962995347" ID="Freemind_Link_1022199949" MODIFIED="1202963007479" POSITION="left" TEXT="設計段階に応じた検証"> +<node CREATED="1202963196891" ID="Freemind_Link_1743371067" MODIFIED="1202963202680" TEXT="抽象設計レベル"> +<node CREATED="1202963298827" ID="Freemind_Link_1898699541" MODIFIED="1202963303183" TEXT="デモンストレーション"/> +<node CREATED="1202963312651" ID="Freemind_Link_1636402602" MODIFIED="1202963317135" TEXT="TDD"/> +</node> +<node CREATED="1202963203291" ID="Freemind_Link_1493152967" MODIFIED="1202963215095" TEXT="詳細化"/> +<node CREATED="1202963215907" ID="Freemind_Link_811581565" MODIFIED="1202963221127" TEXT="仕様書レベル"/> +<node CREATED="1202963221579" ID="Freemind_Link_527925836" MODIFIED="1202963225703" TEXT="実装レベル"> +<node CREATED="1202962598301" ID="Freemind_Link_853615882" MODIFIED="1202962607168" TEXT="On the fly"/> +</node> +<node CREATED="1202964213159" ID="Freemind_Link_1957802900" MODIFIED="1202964226571" TEXT="Refactoring "/> +<node CREATED="1202964230719" ID="Freemind_Link_79936589" MODIFIED="1202964232803" TEXT="Spiral"/> +<node CREATED="1202963226955" ID="Freemind_Link_263642450" MODIFIED="1202963231639" TEXT="実行時"> +<node CREATED="1202962582389" ID="Freemind_Link_978942825" MODIFIED="1202962596712" TEXT="実行時にテストを組み込む"/> +</node> +</node> +<node CREATED="1203593497341" ID="Freemind_Link_761876249" MODIFIED="1203593501670" POSITION="left" TEXT="Verifier"> +<node CREATED="1203593502453" ID="Freemind_Link_1012227307" MODIFIED="1203593513737" TEXT="エラーを見つけるSatisfier"/> +<node CREATED="1203593514189" ID="Freemind_Link_1238768747" MODIFIED="1203593529281" TEXT="正しさを保証するSatisfier"/> +<node CREATED="1203593536325" ID="Freemind_Link_1902162018" MODIFIED="1203593548617" TEXT="状態の組合せ"> +<node CREATED="1204584280457" ID="Freemind_Link_1394362959" MODIFIED="1204584289557" TEXT="全ての組合せを探索"/> +<node CREATED="1203593549509" ID="Freemind_Link_218074450" MODIFIED="1203593555625" TEXT="計算量の壁"/> +<node CREATED="1203593558845" ID="Freemind_Link_682222633" MODIFIED="1203593564401" TEXT="抽象化はアドホック"/> +</node> +<node CREATED="1204584458334" ID="Freemind_Link_1190880416" MODIFIED="1204584461193" TEXT="SAT solver"/> +<node CREATED="1203593580309" ID="Freemind_Link_1381989898" MODIFIED="1203593590994" TEXT="Propertyの書き方"/> +<node CREATED="1204584311333" ID="Freemind_Link_600835079" MODIFIED="1204584315368" TEXT="他のシステム"> +<node CREATED="1204584315781" ID="Freemind_Link_1402824497" MODIFIED="1204584318353" TEXT="SPIN"/> +<node CREATED="1204584318789" ID="Freemind_Link_994936723" MODIFIED="1204584324945" TEXT="Java PathFinder"/> +<node CREATED="1204584325413" ID="Freemind_Link_129362888" MODIFIED="1204584405345" TEXT="CBMC"/> +</node> +</node> +<node CREATED="1202963240387" ID="Freemind_Link_559110881" MODIFIED="1202963251249" POSITION="left" TEXT="Technology tranfser"> +<node CREATED="1202963252307" ID="Freemind_Link_1407273951" MODIFIED="1202963275111" TEXT="既存のプログラムを"/> +<node CREATED="1202963276603" ID="Freemind_Link_19949985" MODIFIED="1202963287759" TEXT="Many core architecture の切り替え"/> +</node> +<node CREATED="1203593680269" ID="Freemind_Link_761060812" MODIFIED="1203593682576" POSITION="left" TEXT="Idea"> +<node CREATED="1203593700285" ID="Freemind_Link_1373700268" MODIFIED="1203593706785" TEXT="ちょっと正攻法過ぎる?"/> +<node CREATED="1203593709765" ID="Freemind_Link_946968267" MODIFIED="1203593715249" TEXT="CbCだけじゃ弱いだろ"/> +<node CREATED="1203593719909" ID="Freemind_Link_1186683291" MODIFIED="1203593726921" TEXT="抽象化の手法"/> +<node CREATED="1203593733349" ID="Freemind_Link_968767966" MODIFIED="1203593738689" TEXT="検証の手法"/> +<node CREATED="1203593740941" ID="Freemind_Link_654041144" MODIFIED="1203593746665" TEXT="heapの検証"/> +<node CREATED="1203593748013" ID="Freemind_Link_847180543" MODIFIED="1203593754425" TEXT="オブジェクト指向との関係"/> +<node CREATED="1203593757373" ID="Freemind_Link_1813837676" MODIFIED="1203593768681" TEXT="状態空間の圧縮"> +<node CREATED="1203593811101" ID="Freemind_Link_1798747355" MODIFIED="1203593825761" TEXT="データ構造による抽象化"/> +<node CREATED="1203593829197" ID="Freemind_Link_1046342794" MODIFIED="1203593838913" TEXT="オブジェクト指向との関係"/> +<node CREATED="1204583952109" ID="Freemind_Link_1993035630" MODIFIED="1204583960184" TEXT="検証の粒度"/> +</node> +<node CREATED="1203593773333" ID="Freemind_Link_10680715" MODIFIED="1203593787873" TEXT="並列計算機による高速化、大規模化"/> +<node CREATED="1203593792021" ID="Freemind_Link_1253625402" MODIFIED="1203593801233" TEXT="Thread Diagramはscaleする?"/> +<node CREATED="1203593947654" ID="Freemind_Link_982200777" MODIFIED="1203594035961" TEXT="NPそのものと喧嘩する"/> +<node CREATED="1204583922661" ID="Freemind_Link_1911381342" MODIFIED="1204583940809" TEXT="自分自身で記述出来る検証系"> +<node CREATED="1204583942093" ID="Freemind_Link_1713019032" MODIFIED="1204583945337" TEXT="テストとして"/> +</node> +</node> +<node CREATED="1204584234785" ID="Freemind_Link_1974778745" MODIFIED="1204584239813" POSITION="left" TEXT="Story"> +<node CREATED="1204584477589" ID="Freemind_Link_6412569" MODIFIED="1204584488273" TEXT="Many Core上のプログラムの特徴"> +<node CREATED="1204584540421" ID="Freemind_Link_24875393" MODIFIED="1204584549945" TEXT="アムダール則"> +<node CREATED="1204584971450" ID="Freemind_Link_1676673093" MODIFIED="1204584981253" TEXT="定常的に並列実行を行う"/> +</node> +<node CREATED="1204584495141" ID="Freemind_Link_853859806" MODIFIED="1204584500842" TEXT="開発の難しさ"> +<node CREATED="1204584985874" ID="Freemind_Link_317633077" MODIFIED="1204584990709" TEXT="どうやってデバッグする?"/> +<node CREATED="1204584994042" ID="Freemind_Link_160777954" MODIFIED="1204584997933" TEXT="実機がない場合"/> +</node> +<node CREATED="1204584572917" ID="Freemind_Link_806582748" MODIFIED="1204584582785" TEXT="分割した後の同期"> +<node CREATED="1204584844134" ID="Freemind_Link_1796109168" MODIFIED="1204584850842" TEXT="いかに同期を減らすか"/> +</node> +<node CREATED="1204584557253" ID="Freemind_Link_1826128843" MODIFIED="1204584567249" TEXT="プログラムの分割と依存性"> +<node CREATED="1204584856406" ID="Freemind_Link_527856147" MODIFIED="1204584862721" TEXT="コードの分割"/> +<node CREATED="1204584863270" ID="Freemind_Link_1382650264" MODIFIED="1204584869089" TEXT="データの分割"/> +<node CREATED="1204584926029" ID="Freemind_Link_1449086585" MODIFIED="1204584928448" TEXT="キャッシュ"/> +<node CREATED="1204584928885" ID="Freemind_Link_1223313988" MODIFIED="1204584933440" TEXT="ローカルメモリ"/> +</node> +</node> +<node CREATED="1204584619661" ID="Freemind_Link_1668055881" MODIFIED="1204584762917" TEXT="Cerium EngineとCbC"> +<node CREATED="1204584881302" ID="Freemind_Link_1142793035" MODIFIED="1204584887865" TEXT="プログラムの作り方"/> +</node> +<node CREATED="1204584583373" ID="Freemind_Link_786798486" MODIFIED="1204584601369" TEXT="分割したプログラムの検証"> +<node CREATED="1204585036616" ID="Freemind_Link_1105061522" MODIFIED="1204585043979" TEXT="コードセグメントレベル"/> +<node CREATED="1204585056296" ID="Freemind_Link_431134128" MODIFIED="1204585064131" TEXT="同期プリミティブレベル"/> +<node CREATED="1204585094520" ID="Freemind_Link_1171640537" MODIFIED="1204585102435" TEXT="実機に依存しないデバッグ"/> +<node CREATED="1204585107976" ID="Freemind_Link_1696801918" MODIFIED="1204585113155" TEXT="実機に依存するバグ"/> +</node> +<node CREATED="1204584602053" ID="Freemind_Link_818592510" MODIFIED="1204584612129" TEXT="CbCによる検証"/> +<node CREATED="1204584631829" ID="Freemind_Link_250177848" MODIFIED="1204584637665" TEXT="比較と検討"/> +</node> +</node> +</map>