righttext={P.W.M. Koopman\\M.J. Plasmeijers}]
\section{Introduction}
-In \emph{Task Oriented Programming} (TOP) a program is built out of pieces of
-work called \emph{tasks}~\cite{achten_introduction_2015}. Tasks differ from
-function in the way that they return a result. A task's return value can change
-over time. Task exist in many forms and they can be composed sequentially and
-in parallel. Some possible tasks are asking for user input via a web browser,
-setting up a TCP connection to another server or combining several tasks. At
-the moment there are several types of leaf tasks. A leaf task is a task that
-does not consist of tasks itself. Examples of leaf tasks are the so called
-editors.
-
-This paper describes the effort to add another type of leaf task that
-focusses on microcontrollers. Microcontrollers are often not powerful
-enough to run a full-fledged task server and therefore there is the need to
-introduce special microcontroller tasks. Effort for this is already made by by
-the department~\cite{koopman_tasks_2016}. However, communication between the
-\emph{mTask} and the iTasks system is still lacking and exactly that will be the
-goal of the project. This requires adding a new type of leaf task that allows
-the user to run \emph{mTasks} on microcontrollers. The leaf task should
-abstract away from communication techniques and it should be relatively easy to
-add techniques. Techniques that are interesting to experiment with is Serial
-communication, Bluetooth, \textsc{WiFi}, \textsc{GSM} and \textsc{LoRa}.
+\input{intro.tex}
\section{mTasks}
The current implementation of \emph{mTask}s can be used to generate \emph{C}
program that has two jobs. The first job of the engine is to listen to the
\iTasks{} server to which it is connected via one of the aforementioned
methods. The \iTasks{} server can send task specifications and SDS
-specifications to the engine to process.
+specifications to the engine to process. Moreover the \iTasks{} server can send
+requests for termination of tasks.
The second job of the engine is to run the tasks in a round robin fashion.
Every task has a frequency of execution and when the task want a turn he will
communication method that sends data in a linear way.
\subsection{\iTasks{} $\rightarrow$ microcontroller}
+The \iTasks{} server can send two types of messages. The first and most
+important type is sending a new task to the server. Tasks are dynamically sent
+to the microcontroller, this means that the engine in itself does not do
+anything without it getting a task first from the server. When a task is sent
+the microcontroller acknowledges the message by sending the associated task
+identification number back to the for the server to use in the future.
+The second task is sending SDS specifications to the engine to tell the engine
+what type of SDS will be used in the tasks so that it can be allocated. The
+message structure for sending a task is shown in Table~\ref{tbl:tasksend} and
+the message of sending an SDS specification is shown in
+Table~\ref{tbl:sdsspec}.
+\begin{table}[h]
+ \centering
+ \begin{tabular}{ll}
+ \toprule
+ Bytes & Description\\
+ \midrule
+ \multicolumn{2}{c}{\textbf{Request}}\\
+ $1$ & Task send code \verb#'t'#\\
+ $2-3$ & Frequency in number of milliseconds as a 16-bit integer\\
+ $4-5$ & Length of the bytecode 16-bit integer\\
+ $n$ & Bytecode for the task\\
+ \midrule
+ \multicolumn{2}{c}{\textbf{Response}}\\
+ $1$ & Task numeric identification\\
+ \bottomrule
+ \end{tabular}
+ \caption{Message format for sending a task}\label{tbl:tasksend}
+\end{table}
+\begin{table}[h]
+ \centering
+ \begin{tabular}{ll}
+ \toprule
+ Bytes & Description\\
+ \midrule
+ \multicolumn{2}{c}{\textbf{Request}}\\
+ $1$ & SDS send code \verb#'s'#\\
+ $2-3$ & SDS length as a 16-bit integer\\
+ $n$ & Value of the SDS identifier\\
+ \midrule
+ \multicolumn{2}{c}{\textbf{Response}}\\
+ $1$ & SDS numeric identification\\
+ \bottomrule
+ \end{tabular}
+ \caption{Message format for sending an SDS specification}\label{tbl:sdssend}
+\end{table}
\subsection{Microcontroller $\rightarrow$ \iTasks{}}
The only thing the microcontroller has to communicate back with the server is
an update of the SDS and a request for an SDS value.
-Since all SDS's have a numeric identifier the engine can just send a request
+Since all SDSs have a numeric identifier the engine can just send a request
message with the identifier to the server. A detailed description of the
-message is described in Table~\ref{tbl:sdssend}.
+message for sending and receiving SDSs is described in
+Tables~\ref{tbl:sdssend},~\ref{tbl:sdsrecv}.
+
+As said before, publication of SDS values is not done automatically to save
+bandwidth. Therefore the tasks need to have a way of requesting the latest SDS
+value and a way of publishing an updated value. This is elaborated more upon in
+the next section.
-\begin{table}[H]
+\begin{table}[h]
\centering
\begin{tabular}{ll}
\toprule
Bytes & Description\\
\midrule
$1$ & SDS send code \verb#'s'#\\
- $2-5$ & SDS identifier as a 16-bit integer\\
- $2-5$ & Length of the message 16-bit integer\\
+ $2-3$ & SDS identifier as a 16-bit integer\\
+ $4-5$ & Length of the message 16-bit integer\\
$n$ & Value of the SDS identifier\\
\bottomrule
\end{tabular}
\caption{Message format for a SDS-send operation}\label{tbl:sdssend}
\end{table}
+\begin{table}[h]
+ \centering
+ \begin{tabular}{ll}
+ \toprule
+ Bytes & Description\\
+ \midrule
+ \multicolumn{2}{c}{\textbf{Request}}\\
+ $1$ & SDS send code \verb#'r'#\\
+ $2-3$ & SDS identifier as a 16-bit integer\\
+ \midrule
+ \multicolumn{2}{c}{\textbf{Response}}\\
+ $1-2$ & Length of the message as a 16-bit integer\\
+ $n$ & Value of the SDS\\
+ \bottomrule
+ \end{tabular}
+ \caption{Message format for a SDS-receive operation}\label{tbl:sdsrecv}
+\end{table}
+
\section{Improvements and future research}
In the current implementation the number of possible tasks that can run
simultaneously is fixed. A future project can implement dynamic task allocation
--- /dev/null
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: cairo 1.14.0 (http://cairographics.org)
+%%CreationDate: Tue Jun 28 20:12:30 2016
+%%Pages: 1
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 2
+%%BoundingBox: 0 -1 38 49
+%%EndComments
+%%BeginProlog
+save
+50 dict begin
+/q { gsave } bind def
+/Q { grestore } bind def
+/cm { 6 array astore concat } bind def
+/w { setlinewidth } bind def
+/J { setlinecap } bind def
+/j { setlinejoin } bind def
+/M { setmiterlimit } bind def
+/d { setdash } bind def
+/m { moveto } bind def
+/l { lineto } bind def
+/c { curveto } bind def
+/h { closepath } bind def
+/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
+ 0 exch rlineto 0 rlineto closepath } bind def
+/S { stroke } bind def
+/f { fill } bind def
+/f* { eofill } bind def
+/n { newpath } bind def
+/W { clip } bind def
+/W* { eoclip } bind def
+/BT { } bind def
+/ET { } bind def
+/pdfmark where { pop globaldict /?pdfmark /exec load put }
+ { globaldict begin /?pdfmark /pop load def /pdfmark
+ /cleartomark load def end } ifelse
+/BDC { mark 3 1 roll /BDC pdfmark } bind def
+/EMC { mark /EMC pdfmark } bind def
+/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def
+/Tj { show currentpoint cairo_store_point } bind def
+/TJ {
+ {
+ dup
+ type /stringtype eq
+ { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse
+ } forall
+ currentpoint cairo_store_point
+} bind def
+/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore
+ cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def
+/Tf { pop /cairo_font exch def /cairo_font_matrix where
+ { pop cairo_selectfont } if } bind def
+/Td { matrix translate cairo_font_matrix matrix concatmatrix dup
+ /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point
+ /cairo_font where { pop cairo_selectfont } if } bind def
+/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def
+ cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def
+/g { setgray } bind def
+/rg { setrgbcolor } bind def
+/d1 { setcachedevice } bind def
+%%EndProlog
+%%BeginSetup
+%%EndSetup
+%%Page: 1 1
+%%BeginPageSetup
+%%PageBoundingBox: 0 -1 38 49
+%%EndPageSetup
+q 0 -1 38 50 rectclip q
+Q q
+0 48.189 37.527 -48.191 re W n
+q
+0 48.189 38 -49 re W n
+[ 1 0 0 1 0 -0.810501 ] concat
+ q
+0.137255 0.121569 0.12549 rg
+3.074 19.461 m 2.996 19.07 2.512 18.539 1.938 18.48 c 1.133 18.461 0.461
+ 19.121 0.422 19.676 c 0.391 20.199 0.43 20.336 0.43 20.336 c 3.133 20.246
+ l 3.125 19.949 3.152 19.797 3.074 19.461 c h
+3.438 21.258 m 3.336 21.023 l 0.391 21.102 l 0.195 21.348 l 0 21.344 l
+0 19.539 l -0.043 18.715 0.797 17.715 1.922 17.719 c 2.977 17.777 3.488
+18.773 3.559 19.699 c 3.672 21.262 l 3.438 21.258 l f
+1.238 12.719 m 1.812 11.57 l 1.938 11.645 l 1.871 11.945 l 4.57 13.141
+l 4.707 12.969 l 4.941 13.082 l 4.438 14.113 l 4.277 14.043 l 4.281 13.723
+ l 1.633 12.566 l 1.402 12.742 l 1.238 12.719 l f
+2.113 13.926 m 2.113 13.801 l 1.344 13.641 l 0.906 13.938 0.699 14.254
+0.57 14.77 c 0.32 15.773 0.57 16.703 1.883 17.07 c 3.262 17.5 3.832 16.605
+ 4.129 15.562 c 4.215 15.254 4.219 15.031 4.273 14.695 c 3.543 14.492 l
+3.441 14.641 l 3.73 14.898 3.82 15.285 3.723 15.656 c 3.582 16.223 2.93
+16.547 2.398 16.332 c 2.781 14.66 l 3.078 14.535 l 3.133 14.375 l 2.352
+14.176 l 2.301 14.336 l 2.414 14.512 l 1.992 16.191 l 1.34 16.156 0.859
+15.484 1 14.852 c 1.09 14.445 1.578 13.984 2.113 13.926 c f
+1.539 22.031 m 1.445 22.234 1.539 22.48 1.75 22.574 c 1.953 22.656 2.195
+ 22.602 2.277 22.426 c 2.387 22.215 2.277 21.977 2.086 21.828 c 1.883 21.734
+ 1.637 21.828 1.539 22.031 c f
+3.848 11.328 m 3.754 11.539 3.84 11.777 3.988 11.871 c 4.172 11.969 4.441
+ 11.871 4.598 11.656 c 4.688 11.453 4.594 11.203 4.391 11.121 c 4.184 11.023
+ 3.945 11.121 3.848 11.328 c f
+24.27 3.441 m 24.176 3.652 24.277 3.891 24.492 3.984 c 24.707 4.078 24.949
+ 3.984 25.035 3.781 c 25.113 3.574 25.035 3.332 24.824 3.23 c 24.621 3.137
+ 24.379 3.234 24.27 3.441 c f
+2.375 28.719 m 1.789 27.57 l 1.926 27.523 l 2.172 27.734 l 4.777 26.391
+ l 4.723 26.176 l 4.957 26.082 l 5.43 27.09 l 5.262 27.168 l 5.023 26.996
+ l 2.531 28.332 l 2.504 28.605 l 2.375 28.719 l f
+3.996 23.676 m 3.832 23.723 l 3.68 23.605 l 1.73 24.023 l 4.52 25.086 l
+ 4.773 25.73 l 4.566 25.777 l 4.379 25.695 l 1.758 26.738 l 1.738 26.988
+ l 1.547 27.047 l 1.219 26.145 l 1.461 26.055 l 1.684 26.172 l 3.547 25.445
+ l 0.57 24.301 l 0.438 23.855 l 3.547 23.168 l 3.68 23.02 l 3.797 22.969
+ l 3.996 23.676 l f
+8.82 5.602 m 8.707 5.484 8.27 5.07 7.816 5.059 c 7.625 5.059 7.453 5.117
+ 7.293 5.273 c 7.25 5.324 l 7.098 5.434 7.031 5.566 7.02 5.762 c 7.02 6.137
+ 7.34 6.641 7.582 6.898 c 7.785 7.102 8.52 7.875 9.098 7.352 c 9.184 7.273
+ l 9.746 6.727 8.988 5.773 8.82 5.602 c h
+9.957 6.27 m 9.984 6.758 9.887 7.18 9.566 7.508 c 9.52 7.562 l 9.5 7.582
+ l 9.477 7.598 l 9.461 7.613 l 9.414 7.648 l 9.066 7.953 8.645 8.051 8.152
+ 7.996 c 7.629 7.945 7.137 7.668 6.816 7.203 c 6.254 6.496 6.262 5.582 6.926
+ 4.922 c 6.945 4.906 l 6.941 4.906 l 6.934 4.914 l 6.945 4.906 l 7.656 4.312
+ 8.578 4.344 9.27 4.918 c 9.676 5.258 9.926 5.754 9.957 6.27 c f
+14.203 1.359 m 15.414 1.094 l 15.426 1.234 l 15.16 1.434 l 15.73 4.285
+l 16 4.297 l 16.016 4.547 l 14.906 4.746 l 14.859 4.555 l 15.137 4.352 l
+ 14.574 1.598 l 14.281 1.516 l 14.203 1.359 l f
+23.434 2.672 m 23.559 2.664 l 23.805 1.91 l 23.48 1.492 23.18 1.293 22.652
+ 1.18 c 21.637 0.961 20.715 1.188 20.414 2.465 c 19.973 3.855 20.867 4.41
+ 21.91 4.715 c 22.23 4.805 22.445 4.805 22.789 4.852 c 22.98 4.098 l 22.828
+ 4.004 l 22.578 4.305 22.195 4.402 21.812 4.32 c 21.254 4.172 20.902 3.508
+ 21.098 2.961 c 22.777 3.344 l 22.914 3.648 l 23.078 3.691 l 23.262 2.91
+ l 23.09 2.871 l 22.922 2.98 l 21.262 2.586 l 21.293 1.957 21.934 1.48 22.582
+ 1.613 c 23 1.684 23.473 2.141 23.434 2.672 c f
+7.273 9.59 m 7.137 9.48 l 7.16 9.281 l 5.727 7.824 l 6.363 10.73 l 5.961
+ 11.285 l 5.82 11.148 l 5.781 10.941 l 3.441 9.316 l 3.219 9.434 l 3.074
+ 9.309 l 3.68 8.527 l 3.883 8.691 l 3.906 8.941 l 5.52 10.098 l 4.859 7.008
+ l 5.172 6.652 l 7.453 8.922 l 7.648 8.961 l 7.754 9.027 l 7.273 9.59 l f
+18.84 4.266 m 18.828 4.094 l 19 3.977 l 19.199 1.973 l 17.316 4.383 l 16.664
+ 4.449 l 16.684 4.25 l 16.809 4.082 l 16.582 1.227 l 16.344 1.117 l 16.34
+ 0.926 l 17.285 0.914 l 17.301 1.18 l 17.137 1.355 l 17.266 3.324 l 19.242
+ 0.809 l 19.707 0.812 l 19.453 3.965 l 19.559 4.141 l 19.57 4.27 l 18.84
+ 4.266 l f
+8.938 3.566 m 9.027 3.762 l 9.301 3.738 l 11.18 5.891 l 11.086 6.117 l
+11.238 6.293 l 11.82 6.043 l 11.727 3.91 l 12.93 5.309 l 12.871 5.422 l
+12.973 5.496 l 13.82 5.152 l 13.809 4.938 l 13.66 4.867 l 13.281 1.961 l
+ 13.488 1.723 l 13.43 1.551 l 12.438 1.992 l 12.496 2.199 l 12.676 2.242
+ l 12.949 4.535 l 11.188 2.43 l 10.832 2.547 l 11.074 5.188 l 9.645 3.473
+ l 9.773 3.23 l 9.719 3.105 l 8.938 3.566 l f
+31.297 7.328 m 31.414 7.383 l 31.926 6.781 l 31.867 6.246 31.691 5.926
+31.289 5.562 c 30.504 4.824 29.57 4.605 28.641 5.59 c 27.66 6.641 28.168
+ 7.566 28.961 8.316 c 29.191 8.543 29.383 8.656 29.664 8.859 c 30.195 8.297
+ l 30.117 8.141 l 29.738 8.281 29.359 8.176 29.07 7.914 c 28.629 7.531 28.641
+ 6.793 29.09 6.422 c 30.402 7.547 l 30.367 7.875 l 30.48 7.992 l 31.027
+7.449 l 30.902 7.332 l 30.695 7.336 l 29.375 6.109 l 29.703 5.551 30.52
+5.43 31.016 5.906 c 31.336 6.18 31.496 6.824 31.297 7.328 c f
+35.426 25.012 m 35.426 25.141 l 36.203 25.309 l 36.641 24.984 36.832 24.688
+ 36.949 24.168 c 37.203 23.156 36.926 22.223 35.645 21.875 c 34.297 21.457
+ 33.684 22.348 33.406 23.395 c 33.316 23.703 33.309 23.926 33.258 24.27
+c 33.996 24.469 l 34.094 24.316 l 33.801 24.066 33.703 23.676 33.801 23.297
+ c 33.934 22.727 34.578 22.398 35.129 22.609 c 34.754 24.289 l 34.441 24.418
+ l 34.398 24.582 l 35.195 24.797 l 35.23 24.656 l 35.117 24.438 l 35.539
+ 22.75 l 36.191 22.77 36.68 23.445 36.543 24.09 c 36.461 24.5 35.965 24.949
+ 35.426 25.012 c f
+32.906 25.68 m 32.574 26.371 32.387 27.391 33.293 27.621 c 34.043 27.824
+ 34.492 27.105 34.594 26.531 c h
+35.852 27.176 m 34.98 26.738 l 34.977 27.41 35.152 28.16 35.082 28.539
+c 34.953 29.086 34.785 29.23 34.348 29.594 c 34.219 29.492 l 34.348 29.273
+ 34.398 29.273 34.484 28.945 c 34.598 28.48 34.586 28.184 34.473 27.719
+c 34.219 28.191 33.664 28.383 33.07 28.211 c 32.34 28.016 31.918 27.254
+32.246 26.559 c 32.977 24.863 l 33.223 24.973 l 33.285 25.133 l 35.902 26.477
+ l 36.086 26.355 l 36.23 26.402 l 35.852 27.176 l f
+33.953 18.195 m 33.965 20.906 l 33.742 21.645 l 34.672 21.055 l 34.578
+21.031 34.5 21 34.441 20.953 c 34.344 20.855 34.344 20.449 34.328 19.84
+c 37.312 19.883 l 37.367 20.012 l 37.523 20.004 l 37.527 18.938 l 37.441
+ 18.938 l 37.309 19.191 l 34.352 19.141 l 34.355 18.816 34.309 18.34 34.398
+ 18.266 c 34.43 18.234 34.492 18.199 34.57 18.172 c 33.789 17.656 l 33.953
+ 18.195 l f
+37.078 15.617 m 37.309 16.84 l 37.172 16.852 l 36.961 16.602 l 34.082 17.113
+ l 34.055 17.324 l 33.812 17.344 l 33.66 16.223 l 33.84 16.203 l 34.02 16.426
+ l 36.824 15.941 l 36.922 15.684 l 37.078 15.617 l f
+35.809 14.984 m 35.934 15.117 l 36.609 14.805 l 36.75 14.254 36.727 13.859
+ 36.488 13.352 c 36 12.406 35.293 11.773 33.953 12.324 c 32.648 12.914 32.793
+ 13.988 33.23 14.996 c 33.367 15.305 33.496 15.477 33.664 15.766 c 34.41
+ 15.48 l 34.355 15.281 l 33.961 15.262 33.68 15.082 33.512 14.734 c 33.23
+ 14.176 33.664 13.676 34.18 13.27 c 34.695 12.883 35.816 13.051 36.109 13.629
+ c 36.289 14.02 36.184 14.598 35.809 14.984 c f
+34.82 9.828 m 35.441 10.922 l 35.301 10.926 l 35.043 10.773 l 32.383 12.23
+ l 32.438 12.441 l 32.211 12.535 l 31.793 11.535 l 31.961 11.449 l 32.211
+ 11.602 l 34.688 10.211 l 34.707 9.945 l 34.82 9.828 l f
+32.762 7.07 m 34.492 9.051 l 34.121 10 l 33.875 9.754 l 33.875 9.754 33.961
+ 9.355 33.926 9.117 c 33.852 8.637 33.195 8.062 33.195 8.062 c 30.953 9.922
+ l 31.051 10.16 l 30.848 10.297 l 30.074 9.32 l 30.281 9.176 l 30.531 9.289
+ l 32.711 7.465 l 32.668 7.211 l 32.762 7.07 l f
+26.762 2.512 m 27.695 3.02 l 27.598 3.133 l 27.355 3.168 l 26.688 4.523
+ l 26.688 4.523 27.242 4.922 27.598 4.996 c 27.773 5.039 28.055 5.035 28.055
+ 5.035 c 27.715 5.719 l 27.715 5.719 27.555 5.512 27.434 5.398 c 27.168
+5.141 26.492 4.91 26.492 4.91 c 26.02 5.898 l 26.02 5.898 26.68 6.367 27.105
+ 6.496 c 27.242 6.535 27.512 6.586 27.512 6.586 c 27.512 6.586 27.523 6.773
+ 27.562 6.879 c 27.621 7.062 27.793 7.324 27.793 7.324 c 25.055 5.723 l
+25.113 5.52 l 25.383 5.523 l 26.703 2.898 l 26.641 2.672 l 26.762 2.512
+l f
+28.867 29.129 m 20.754 30.406 l 20.855 30.156 20.918 29.875 20.918 29.594
+ c 20.918 28.43 19.984 27.492 18.812 27.492 c 18.797 27.492 18.766 27.496
+ 18.742 27.496 c 18.738 27.496 l 18.715 27.496 18.699 27.492 18.676 27.492
+ c 17.52 27.492 16.625 28.43 16.625 29.594 c 16.625 29.875 16.684 30.156
+ 16.781 30.406 c 8.711 29.129 l 8.477 30.504 8.359 31.781 8.359 32.922 c
+ 8.359 33.332 8.379 33.715 8.41 34.102 c 13.234 34.102 l 14.562 34.102 14.672
+ 33.965 14.734 33.902 c 14.824 33.82 14.844 33.598 14.723 33.512 c 14.434
+ 33.332 13.992 33.117 13.992 32.465 c 13.992 32.43 l 13.992 31.91 14.453
+ 31.715 15.551 31.277 c 15.867 31.156 16.977 30.719 16.977 30.719 c 17.207
+ 30.848 l 17.594 31.047 18.418 31.602 18.418 32.547 c 18.418 32.668 18.402
+ 32.766 18.387 32.852 c 18.355 32.977 18.305 33.09 18.25 33.184 c 18.25
+33.191 l 18.074 33.52 17.863 33.617 17.863 33.617 c 17.863 33.617 17.969
+ 34.066 18.617 34.121 c 18.617 34.117 l 18.648 34.125 18.664 34.129 18.691
+ 34.129 c 18.742 34.129 l 19.066 34.129 19.285 33.859 19.285 33.543 c 19.285
+ 33.148 19.031 33.066 19.031 32.547 c 19.027 31.602 19.852 31.047 20.234
+ 30.848 c 20.484 30.719 l 20.484 30.719 21.613 31.156 21.922 31.277 c 23.039
+ 31.715 23.484 31.91 23.484 32.43 c 23.484 32.465 l 23.484 33.117 23.051
+ 33.332 22.77 33.512 c 22.625 33.598 22.652 33.82 22.75 33.902 c 22.812
+33.965 22.93 34.102 24.234 34.102 c 29.176 34.102 l 29.207 33.715 29.23
+33.332 29.23 32.922 c 29.23 31.781 29.105 30.504 28.867 29.129 c h
+28.141 25.898 m 21.289 29.031 l 23.699 28.656 27.195 28.105 28.621 27.883
+ c 28.484 27.23 28.324 26.586 28.141 25.898 c h
+20.637 27.941 m 24.973 25.898 l 21.992 25.898 l h
+26.793 21.672 m 21.594 21.672 l 21.594 24.625 l 27.781 24.625 l 27.492
+23.676 27.164 22.684 26.793 21.672 c h
+19.391 25.898 m 19.391 27.504 l 20.461 25.898 l h
+17.043 25.898 m 18.109 27.504 l 18.109 25.898 l h
+26.121 19.914 m 25.781 19.074 25.43 18.266 25.059 17.445 c 20.32 17.445
+ l 20.32 8.629 l 19.852 7.949 19.438 7.406 19.094 7.031 c 19 6.93 18.844
+ 6.773 18.742 6.699 c 18.652 6.773 18.512 6.93 18.406 7.031 c 18.062 7.406
+ 17.645 7.949 17.176 8.629 c 17.176 17.445 l 12.496 17.445 l 12.129 18.266
+ 11.773 19.074 11.449 19.914 c 11.383 20.078 11.316 20.238 11.254 20.398
+ c 17.176 20.398 l 17.176 24.625 l 20.32 24.625 l 20.32 20.398 l 26.312
+20.398 l 26.254 20.238 26.188 20.078 26.121 19.914 c h
+21.594 10.629 m 21.594 16.168 l 24.496 16.168 l 23.52 14.102 22.52 12.191
+ 21.594 10.629 c h
+15.949 10.629 m 15.02 12.191 14.012 14.102 13.043 16.168 c 15.949 16.168
+ l h
+9.805 24.625 m 15.949 24.625 l 15.949 21.672 l 10.777 21.672 l 10.402 22.684
+ 10.094 23.676 9.805 24.625 c h
+16.887 27.941 m 15.535 25.898 l 12.59 25.898 l h
+9.441 25.898 m 9.254 26.586 9.094 27.23 8.957 27.883 c 10.367 28.105 13.832
+ 28.656 16.25 29.031 c h
+18.738 35.938 m 28.867 35.938 l 28.918 35.75 28.965 35.543 29 35.34 c 24.234
+ 35.34 l 22.215 35.34 21.352 34.848 21.352 33.668 c 21.352 33.305 21.551
+ 32.914 21.879 32.637 c 21.648 32.543 20.68 32.195 20.539 32.133 c 20.426
+ 32.266 20.207 32.469 20.176 32.793 c 20.273 32.949 20.484 33.27 20.484
+33.734 c 20.484 34.461 19.984 35.195 18.715 35.23 c 18.129 35.207 17.758
+ 35.035 17.461 34.801 c 17.441 34.777 17.43 34.762 17.41 34.742 c 16.883
+ 34.598 16.551 34.23 16.551 33.762 c 16.551 33.258 l 16.551 33.258 16.781
+ 33.234 16.914 33.184 c 17.086 33.109 17.152 33.02 17.203 32.949 c 17.348
+ 32.742 17.227 32.281 16.934 32.133 c 16.797 32.195 15.828 32.543 15.59
+32.637 c 15.922 32.914 16.137 33.305 16.137 33.668 c 16.137 34.848 15.266
+ 35.34 13.234 35.34 c 8.574 35.34 l 8.617 35.543 8.656 35.75 8.711 35.938
+ c h
+12.262 40.18 m 12.262 40.57 12.387 41.078 13.516 41.078 c 14.43 41.078
+14.801 40.941 14.957 40.824 c 15.035 40.777 15.137 40.699 15.137 40.312
+c 15.137 40.312 15.137 38.293 15.137 37.215 c 12.262 37.215 l h
+17.375 43.703 m 17.375 43.277 l 16.625 43.051 15.996 42.594 15.566 41.945
+ c 15.219 42.156 14.785 42.254 14.344 42.301 c 15.207 43.008 16.277 43.484
+ 17.375 43.703 c h
+16.555 46.188 m 18.371 46.188 l 18.371 48.004 l 19.133 48.004 l 19.133
+46.188 l 20.98 46.188 l 20.98 45.379 l 19.133 45.379 l 19.133 43.535 l 18.371
+ 43.535 l 18.371 45.379 l 16.555 45.379 l h
+21.129 40.312 m 21.129 37.215 l 16.406 37.215 l 16.406 40.312 l 16.406
+41.203 16.992 42.23 18.738 42.23 c 18.742 42.23 l 20.52 42.23 21.129 41.203
+ 21.129 40.312 c h
+23.191 42.301 m 22.746 42.254 22.324 42.156 21.965 41.945 c 21.547 42.594
+ 20.918 43.051 20.117 43.277 c 20.117 43.703 l 21.262 43.484 22.332 43.008
+ 23.191 42.301 c h
+25.301 40.18 m 25.301 37.215 l 22.398 37.215 l 22.398 40.312 l 22.398 40.699
+ 22.504 40.777 22.57 40.824 c 22.73 40.941 23.109 41.078 24.027 41.078 c
+ 25.168 41.078 25.301 40.57 25.301 40.18 c h
+29.957 36.777 m 29.801 37.215 l 26.578 37.215 l 26.578 40.18 l 26.578 41
+ 26.168 41.863 25.07 42.199 c 24.277 43.16 23.191 43.957 21.969 44.469 c
+ 21.969 47.176 l 20.117 47.176 l 20.117 49 l 17.375 49 l 17.375 47.176 l
+ 15.566 47.176 l 15.566 44.469 l 14.344 43.957 13.242 43.16 12.473 42.199
+ c 11.398 41.863 10.98 41 10.98 40.18 c 10.98 37.215 l 7.77 37.215 l 7.629
+ 36.777 l 7.242 35.598 7.07 34.301 7.07 32.891 c 7.07 28.523 8.684 23.418
+ 10.262 19.438 c 12.66 13.418 15.828 7.969 17.477 6.156 c 17.867 5.762 18.184
+ 5.418 18.707 5.395 c 18.715 5.391 18.73 5.395 18.738 5.395 c 18.742 5.395
+ l 18.758 5.395 18.766 5.391 18.781 5.395 c 19.316 5.418 19.637 5.762 20.023
+ 6.156 c 21.711 7.969 24.906 13.418 27.301 19.438 c 28.895 23.418 30.504
+ 28.523 30.504 32.891 c 30.504 34.301 30.355 35.598 29.957 36.777 c f
+ Q
+Q
+Q Q
+showpage
+%%Trailer
+end restore
+%%EOF