aboutsummaryrefslogtreecommitdiff
path: root/readme.md
blob: f312b20762697349dd38c57bddd6bd652bf0679b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
# `trbldoc`

A really awful documentation generator.

Trbldoc scans source files for comments, extracts them as content chunks,
passes each chunk through a renderer, groups the results by namespace,
and assembles an HTML site.

### Dependencies

| Tool | Purpose |
|------|---------|
| Any POSIX shell (`ash`, `dash`, `sh`, `bash`, ...) | Runtime |
| `awk`, `sed` (with `-E`), `grep`, `find`, `mktemp`, `xargs` | Standard Unix tools |

That's it. Really. Runs under busybox systems, no GNU required!

## Installation

Drop `trbldoc.sh` into your `$PATH` and mark it executable:

```bash
sudo cp trbldoc.sh /usr/local/bin/trbldoc
sudo chmod +x /usr/local/bin/trbldoc
```

## Usage

```
trbldoc [-s <source1> -s <source2> ...] [-o <dest>] [-l <layout>] [-f ext;start;end] [-R prefix=script;opts] [-C] [source ...]
```

* `-s <source>` - Add a folder or file to scan. Repeatable.
* `-o <dest>` - Output directory (default: `.trblcache/built`).
* `-l <layout>` - Use an alternative `main.layout` template file instead of the built-in default.
* `-f ext;start;end` - Register a custom file extension with AWK-regex delimiters.
* `-R prefix=script;opts` - Set a resolver used for `@prefix/...` reference tags.
* `-C` - Force a clean rebuild — wipes cached chunks and timestamps before scanning.

### Environment variables

`trbldoc` allows you to use some environment variables to provide more information
while rendering.

| Variable | Description |
|----------|-------------|
| `TRBLDOC_SRC_REPO` | Repository URL substituted for `{{ src_repo }}` in doc comments. Falls back to `git remote get-url origin` if not provided. |
| `TRBLDOC_MD` | Override the Markdown renderer used for `.md` files and `@exec md` chunks. Defaults to `md2html --github --fpermissive-autolinks --ftables`. |
| `TRBLDOC_RST` | Override the ReStructured Text renderer used for `.rst` files and `@exec rst` chunks. Defaults to `%(body)s`. |
| `TRBLDOC_JOBS` | Number of parallel jobs used for extraction and rendering. Defaults to the detected processor count. |

### Quick start


Scan the `src/` folder and write output to `docs/`

```bash
trbldoc -s src -o docs
```

Include the source repository URL in generated pages

```
TRBLDOC_SRC_REPO=https://github.com/you/repo trbldoc -s src -o docs
```

## Writing doc comments

A doc comment is a block comment whose opening tag is followed _on the same
line_ by the renderer command to use for that chunk. `trbldoc` includes the
following markup format -> html mapping:

| alias | program |
| --- | --- |
| `md` | `md2html` |
| `rst` | `docutils` |

### C / C++ / SQL

```c
/* md
# My Function

Does something useful.
*/
```

### Lua

```lua
--[[ md
## Overview

Brief description here.
]]
```

### Python

```python
'''md
## Helper

Processes the input.
'''
```

`trbldoc` lets you call _arbitrary bash_(**!**) from source code comments.
Some users may be alarmed, or believe this is a security vulnerability.
The reality at the time of publishing is that it is almost all
software documentation is generated on computers controlled by
the same person or people that wrote the source code, and published on the internet.
If you can trust someone to write some code that's running on your machine,
you can probably trust them to run more code to generate documentation.
If you are interested in letting third parties generate documentation
without reading the code, or you want to generate documentation from untrusted input,
`trbldoc` is not right for your project.

With that said, allowing people to generate arbitrary html to explain their
code can be *extremely powerful*:


```lua
--[[ cat
<pre class="mermaid">
---
title: querying a resource
---
sequenceDiagram
    participant db@{"type": "database"}
    participant host
    actor client
    client ->> host : GET /resource/123
    host ->> db : select * from resources where id = 123
    db ->> host : 0 rows
    host ->> client : 404 - File not Found
</pre>
]]
```

<img style="width:unset" alt="trbldoc pipeline diagram" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABrIAAAMwCAYAAABsr/BlAAAgAElEQVR4XuzdC3hU1b338X9uJCE3kgBJgBAQUC5eAOUiiggKVCwVay0efbXeqtJD9XhOtdV6zsv71FprLx6tp0prhaO1itZKi2gBwQuKCgqiXAXkEiAESEJu5J68z9phFnsms+eSzEz2nvl+nodnZu09mb32nh2y1/rNWjuura2tTQAAAAAAAAAAAACbiSPIAgAAAAAAAAAAgB0RZAEAAAAAAAAAAMCWCLIAAAAAAAAAAABgSwRZAAAAAAAAAAAAsCWCLAAAAAAAAAAAANgSQRYAAAAAAAAAAABsiSALAAAAAAAAAAAAtkSQBQAAAAAAAAAAAFsiyAIAAAAAAAAAAIAtEWQBAAAAAAAAAADAlgiyAAAAAAAAAAAAYEsEWQAAAAAAAAAAALAlgiwAAAAAAAAAAADYEkEWAAAAAAAAAAAAbIkgCwAAAAAAAAAAALZEkAUAAAAAAAAAAABbIsgCAAAAAAAAAACALRFkAQAAAAAAAAAAwJYIsgAAAAAAAAAAAGBLBFkAAAAAAAAAAACwJYIsAAAAAAAAAAAA2BJBFgAAAAAAAAAAAGyJIAsAAAAAAAAAAAC2RJAFAAAAAAAAAAAAWyLIAgAAAAAAAAAAgC0RZAEAAADdrKqqSn7+859LdXW1zJ8/X0aOHNnNNQIAAAAAwB4IsgAAAIBu9vDDD8vSpUuNWuTm5sqKFSu6uUYAAAAAANgDQRYAAADQzX784x/L6tWrjVqkpqbK2rVru7lGAAAAAADYA0EWAAAA0M22bdsm9957r5w8eVLuvvtuufbaa7u5RgAAAAAA2ANBFgAAAAAAAAAAAGyJIAsAAAAAAAAAAAC2RJAFAAAAQKuqqpKf/OQn8uijj0pmZqZeDgAAAABAdyDIAgAAQEh89NFHsnTpUvn888+lrKzMWDZw4ECZMmWK3HLLLbJ161b54Q9/KCNHjpTnn3/+1E+1/5xarniu83TTTTcZ95NSfve738mFF154ao274uJi+d///V/ZuHGjHDhwwFiWmpoq55xzjkydOtXnPaguuOAC/fzTTz81Hp944gl577339Hup/ZozZ448+eSTRvmyyy6TX/7yl8ZzK6+++qp+jev15v1xufHGG+Wee+7RZcVVpx//+MdG3dX+PfXUU5bH2lcApYKqRYsWue2P69iobb/wwguyfv16Y9lf/vIXKSwsPPWTgVPb+Otf/yrvvvuu7N27V+rq6ozlubm5Mnr0aOPYWX12wQj0s1q8eHGHY9KVc8TbMVT7NmTIEONnZ86c2WF7Lt4+u0C2G6rfE3V81GesuM419VpVpy+//NL4rFR91Hl06623nvqp01y/57t27erUcXOdF+bzXu3PpZdeKt/5zncsjxsAAACA2EWQBQAAgC5RndM///nPZfXq1XqZJ9XR3adPH6Pj27MTPlQd9C7PPfec/P73v9dlb1To8Pjjjxvb82QOR9asWSM333yz7rB3UUHUT3/6U7nyyit1SKNe66sT/gc/+IERECmPPPKIzJgxI+gga/z48TJ//ny588479XY9WQU3ijrW999/v+XPmqmw6aGHHtLlQK1cuVJ+9rOf+d1GIOGfP4F+Vp7b6co5ooKo22+/XYdQ3lidx+YQyYrV5xeq3xPPIKtfv34djo/y+uuvu4WYar/VOe95vnqyOm6BnHvq/4m7777bZxgGAAAAIPYQZAEAAKBLvv3tb7uFB6oje/LkyZKRkSHV1dWydu1at05/z074UHXQKw8//LAxWsTFNUpJOXz4sKxbt053pKtO84ULF3bocDeHIyo4UuGT2qdZs2bp/VmwYIGxbTVCyhXguUZLeaPCvmnTphnP1XbVeyhqlJaq12effab3y1eQpai6qONp3jfzyCDF23uo9zcHYObPaefOnTpkU9R7/+1vf9PlYKjtqM9JUdtQI7BUWKIEUs9gBPNZuXT1HPEMH1VQpvbP/LPe9svXdr0df88wK1S/J+Ygy3XMFNd+qLrU1NS4vb8Ksa6//nq3EErV4fzzzzeem/ddHX91XpvrrsLNBx98UJfN5563/yN8/S4BAAAAiD0EWQAAAOg0zxEmatSRt+nIzK/z7IQPVQe9Z2e5t85wFSiZR+142545HFG8jehxMYc2vsIfb9MKmnmOkvEMQcx1UuHKY4891iHEM48yModlLuZj5y0oMddR8Ty+wVChjQpJ1KgzT+bteKtnMIL5rJRQnCPmbarlar2Z+iynT5/uttx8jivetqs+G3PQ6HkehOr3xPN31ltY58kcVqtzR32+3l6vzsGJEye6rfMMwaw+I3MorOq0fPnyDqPSAAAAAMQmgiwAAAB0inmUkWIVYim+OuF9rfPkq4Ne3ZfINarDW1Dgouqt1rle6xlGeI5+WrFihS57Y96u53RsLt6mFTQLJsjyrK+ZGuXiCgzMr/P8rKzqaQ4TOju1YCDMwYjn5xiMrnxWnT1HzNt03ZfLH/N56+u4mn8XPMOcUP2eeAZZvo6D4hk8BnvfNPM5ZRViuZh/T3z9fwIAAAAgthBkAQAAoFPMI4D8hQi+OuF9rfNk1UFvHmnja2SUi6/gyBxU+OvkV8zHwVtIYQ6RrI6Tr/oogYYnVscn0GNsPo6+XtdV5v3tSmARzGcVqnPEHBYGUnc1Iunqq6/WZasQ0cUctplDz0A/Q8XqPFDM+2V1PpqZQ0dv56YvngGqv/vIBbOPAAAAAGIHQRYAAAA6xTx6wluAY+arg9rXOk9WHfRWoYMV8zbVFHiuIEoxhyP+QgfFX1BlHtFidZz81T/QIMt8HyarEMRXiGOuq7/PIhBqu6o+u3bt0mGIOkaKK6zxtr+BCuaz8neMPVmdI+b3UdQoo/nz51tuO9gAzTyCyVzPUPyeKOb6+xshpQRzjD0FU2cX1/a6Ou0kAAAAgOhBkAUAAIBOMXeWe5suz8xXh7avdZ6sOujNy4Pluc1AQyMzc6jnGRyY16ntqO158heyBFonq/fxHBljFUiYQxSr0C0QahTST3/604A+E2/7G6hAj4sSynPEfJxc1GvmzZvn9tkr5s/E8328sQqaQvF7olidI96Yt6n4O8aezNvqjGC3BwAAACA6EWQBAACgU3x1lnvy1Qnva50nq212JaTwHJUSTDjiYh51Y34/f6O1XPyFC4HWydf7mI+RGhm0ePFit2nezPug+PtMraht3HnnnXr6PUVtb8qUKcbz6upqY6RNqEdk+TouSijPEUWNXnv22Wf1frio0VuPPvqoPrZdCbLMrw/F74ni6xzx1J1Blq/fFwAAAACxhSALAAAAnWLuLLfTiCwVOqjRRIEaMGCA2+ikYMIRM9e9k9SUaMuXLzeCDPNUfb5CA3/hQqB18vU+6rNSn5mLCgpUnTMyMmTnzp161JjiLbgJlPmeSirAUtMdquDFzFc9gxHocVHM52tXzxEzb4GWeQpBq2DKivn15s/B6UGWOib33XefsS+ByMrK6nDeAAAAAIhNBFkAAADoFHMw4C+M8NUJ72udJ6uRJuZ7Q/mriz/BhCNm5jqoqeeuvfZat2kFrabzU/wFO4HWyd/7qGN9//33u42W8uQ5oigY5s/SHOh58lfPQAV6XJRQniPePPfcc273WnOdA+aRbv7Ob8V8zpjrGYrfEyWYY+85JeWaNWu8fp5Wgt13AAAAAPCGIAsAAACdYu4QN49A8cZXJ7yvdZ6sOujNI5/81cWfYMIRM3VfqKuvvtp4rvbjqaee0iGAvzr5CxcCrZO/91FU4LJo0aIOYZYKsKZOnWqEL51l3r6ve2wFUs9ABHpclFCeI1bM985yjaYynxeKvzDINbJPMY90DMXviRLssZ85c6YebeYK5wIV7L4DAAAAgDcEWQAAAOgU1VGuOsxdfHVy++qEN7+PGsWj7p/kjXqd+d5L5g56NXLkyiuv9BoABCuYcMSTeVo9FRK4AgM1yubWW281nnvjL1wItE6+3kcdo/nz5xvHUX0Gs2fPNqbMM4ccXeVr+2ahGh0V6HFRQnmOWDHvv/k89zwvrPbXPKrL83chFL8nSqCfkYv59Wo6ShUIBhNGmUM1X+EmAAAAAFghyAIAAECnmTupFavAxtxB7xlkKeZRKN4611UQtmDBArf7EHl20HuGAP/5n//pNahQo0R+8YtfGKGOqounYMIRT+ZRP6oOrn3yNa2g4i9cCLROvt7HdXy8jUZSx+TgwYNdvi+ReSo5q9DDXEfFs57BCPS4uITiHFH79M4778gDDzzQ4TO1Cm3Mx0Vt97HHHusQIKpz3Dzto7fjEorfE1/niDeeAaA6f9R7eO67oo7v4cOH3cIqcwCnWG1TbUeNFFT3bPP2fwgAAACA2EWQBQAAgE5THf7XX3+97uRWVIChOtxVh3R1dbVs3LhRj0ZRvAVZnuGG6iyfMmWK8fyzzz7T4YA5HPLsoFfMU7sp5roo5vfyVg8l2HDEzPOeQoqass987yRv/IULgdbJ1/u41qlj8h//8R/GMVH3YnrvvffcPh91jL/zne90qEOgzFPReZ4LahSROWRRAjk+VgI9LmZdPUfMo6vM5+mbb77ptm+e4aXnds0/u3PnTn1fLMVb2KiE4vfE1zliRb2veZSXoo7N+eefbzxX4dW6dev0es99Nwe8iqrfpEmTpF+/fkZZ7f+XX35p/LxaZ3VvNQAAAACxiSALAAAAXaI6ue+9994OAYUVb+GA4jm6y0x1bt99992ybNky/RrPDnoX87R1vqgA5dFHH+3QYd6ZcMRMjUozhxK+plx08RcuBFonX+9jHhUUCNc9noLlLfQwU5/lwoULjVE7rkBInQ+eI58CEehx8dTZc8RbUOmN1WfuGWZ5o46Dur+a53np0tXfE1/niC+B/p6rOngb6abCrCeffNLyvHBR4Zz6fDpzPgAAAACITgRZAAAA6DLVwf/Xv/5V3n33XbdOdtUpPXbsWCMQcIUoVkGWojq7zZ3wrtEy3/ve94wRHuZOfM8OejM1UkyFAZ9//rlbx7va9plnnqnfz5vOhiMunqNm1qxZYxlKuPgLFwKtk7/3UVO/LVmyxDgmKnA455xzjCnwXKGDCrt+9rOfWY7mCZTr+JtH6ahjf+mllxqjvdTxML9m8ODBlueEL4EeF286e46Yz/W9e/fq/VPn6ujRo43pCL39nIua/k+FaObtuj4L9ZkFcry78nvi7xzxRe37ihUr3LatqO0PGTLE+Dxcn683rukDPUcBqv8nhg0bZpyLgew/AAAAgNhCkAUAAICwU533P/zhD43t+AqyooF5X7sybV53Md9HKtigAwAAAACAUCPIAgAAQNjFUpBlnsLPaoo5OzN/VgRZAAAAAIDuRpAFAACAsIulIMt1jyw1XdzatWvDfmyDoaZ2s5r2zaUrU88BAAAAABBqBFkAAAAIu1gIslRI9POf/1xWr15tHM/LLrtMfvnLX4b92AZK1U+NDlP3MnrggQe83sfJ8x5ZagpINRUkAAAAAADdhSALAAAAYRfNQdarr74qn376qaxbt04HQGo01vLly/2OfookNc2hK2RTBg4cKGPHjpWMjAyprq6WjRs3yoEDB/R6uwVxAAAAAIDYRJAFAACAsIvmIOumm26Sbdu26WOoRjCpkVneRjx1JzXa6je/+Y2UlZX5rQZTCgIAAAAA7IIgCwAAAGEX7UHW3r175ZxzzpGpU6ca0/fZmQq01MisXbt2uY3AUgHcmWeeKd/73vdsF8IBAAAAAGIXQRYAAAAAAAAAAABsiSALAAAAAAAAAAAAtkSQBQAAAAAAAAAAAFsiyAIAAAAAAAAAAIAtEWQBAAAAAAAAAADAlgiyAAAAAAAAAAAAYEsEWQAAAAAAAAAAALAlgiwAAAAAAAAAAADYEkEWAAAAAAAAAAAAbIkgCwAAAAAAAAAAALZEkAUAAAAAAAAAAABbIsgCAAAAAAAAAACALRFkAQAAAAAAAAAAwJYIsgAAAAAAAAAAAGBLBFkAAAAAAAAAAACwJYIsAAAAAAAAAAAA2BJBFgAAAAAAAAAAAGyJIAsAAAAAAAAAAAC2RJAFAAAAAAAAAAAAWyLIAgAAAAAAAAAAgC0RZAEAAAAAAAAAAMCWCLIAAAAAAAAAAABgSwRZAAAAAAAAAAAAsCWCLAAAAAAAAAAAANgSQRYAAAAAAAAAAABsiSALAAAAAAAAAAAAtkSQBQAAAAAAAAAAAFsiyAIAAAAAAAAAAIAtEWQBAAAAAAAAAADAlgiyAAAAAAAAAAAAYEsEWQAAAAAAAAAAALAlgiwAAAAAAAAAgC01NbbKvq21UlvVIrWVzVJb2SK1Vc1y8lRZSctKlJ6ZCZKWmWg8T8tSzxNk0Kg0SeoRb8v9AhA4giwAAAAAAAAAgG2osEqFV3u31RqPXaHCrMEj04xHFXABcB6CLAAAAAAAAABAt9u45oTs3VIjJXvrw1KXgsEpMvjsdBk7rZdeBsD+CLIAAAAAAAAAAN1m28dV8unbFVJV1hSROmTmJskFl2fLyImZEdkegK4hyAIAAAAAAAAARNzeLbWyYVW5HD3Q4HPb2XnJkjc4VVLTEyQ1PVFSMxIlRT3PSDTW19e0SF11c/u/GvWvRUr31klFqe/37TswWcZNz5HBZ6fpZQDshyALAAAAAAAAABAxVWXN8t5rx2T/duv7X/UZmCL9h6VJv2FpktW7h14ejMrjjXJ4V60c3n1Sju6v08s9FY1IkynX9JHM3PZgDIC9EGQBAAAAAAAAACKieOdJWfViqZysbvG6vZEXZctZ43tJSlqCXhYK9bUtsnP9Cdn2YYVeZtYzI0Gm35AnhWf11MsA2ANBFgAAAAAAAAAg7Lasq5R3Xz3mdTtDxmTKqItzJC0rvKOiaiubZesHFbJnU6VeZnbptX3k7ElZugyg+xFkAQAAAAAAAADC6sN/HJdN75zQZZfCEeky6qJsyc5P1ssioeJIg2z9sEKKt9d02NzYadkyaXauLgPoXgRZAAAAAAAAAICweWvREdnzRcfA6NxLc2XUxdm63B22rq2QL94r67DpIeemyxW35OsygO5DkAUAAAAAAAAACIt1y8pk4xr3+1LFxYlceFWeFJ2doZd1p/1bquWjv5dKW5t7LcZM7SUXfau3LgPoHgRZAAAAABAmra1t8tmqCiktbpBjBxuMezIAQHdQ95zpMyBZ8gqT5fzp2RIfH9cd1QAQY7zdEys9O0kmzcmX3P6RnUrQn7JDDbJu6RGpqWjSyxTumQV0P4IsAAAAAAiDfdtqZe3fjktlmXtnCAB0t6zcJJn87d4yaGRad1cFQBQr3nlS/v7MYbc9VCHWjFsGSHLPBL3MThpOtsjKRQc7hFlX3dVPCs/qqcsAIosgCwAAAABCTIVYb/yxxHhecEZPGTYuS3LykyU1I/HUKwAgsuqqm6X8SIPs2lApJV+fNDY++45+UjSCjlkAoVdV1ix/faJYTla36GVqOsHpNxfabiSWJzUya9XiYrdpBntmJMh37imUzFyu5YDuQJAFAAAAACGkphN88ZEDxkissdN7y1kTeul1AGAHOz45IZtWHZes3klywwMDmWYQQMgt+0OJ7N9eq8vKpDn2uSeWP+qeWeuWluqyUjQiTWbfUaDLACKHIAsAAAAAQmjDinL55J/lxkisS6/vp5cDgJ28+5fDxsisCd/IkXEzc+xUNQAOt3dLrSz/U/vIdJdzp+TKqMnZuuwEWz+okC/eLXOr6pW3Fcjgs5mWFYg0giwAAAAACKE3ni2RfVtr5ZK5BdJ/GB0dAOzp0K5aeX9JiQwalSbfvJ0RBgBC55XHi+XogQZdLhyRLhdfk6/LTvLBa0ekeHuNrnLfgcny3XsLdRlAZBBkAQAAAEAILVqwT2orm2XOPYO4JxYA21L3zFr6xD5Jy0qUWxYMsm09ATjLto+rZM2So26V/sbthZKdn6zLTlJxpEH++WyxW5Wnze0rIydm6jKA8CPIAgAAAIAQeure3cbjvzw09NQSALCnlx5u//9q/uP8fwUgNJ5/eL9UlTXp8pAxWTL+yj667ETrlx+VPZuqdNUzc5PkpoeKdBlA+BFkAQAAAEAIEWQBcAqCLAChtHHNCVm37LguK9/64SBj5KeTqZH2//jdPrddmDS7t4yd1kuXAYQXQRYAAAAAhBBBFgCnIMgCEEqvPXlQSvbW6/LIi7LlvKm5uuxkm98pk20fVuhdKBicItfcPUCXAYQXQRYAAAAAhBBBFgCnIMgCECq1lS2yaMFeXVauvnewpKQl6LKT1de2yOuPu+/fLQsGS1pWdOwfYHcEWQAAAAAQQgRZAJyCIAtAqGxdVyXvvHpUl/sWpcplN/bX5Wjw9vMH5diB0yPOpl7bV0ZNytRlAOFDkAUAAAAAIUSQBcApCLIAhMobz5bIvq21ujz6slwZcWG2LkeD7R9VyOery/SuDBqVJt+8vUCXAYQPQRYAAAAAhBBBFgCnIMgCEApNja2y8Mdf67Iy666BktW7hy5Hg8rjjfLmMwfcduXOX54hST3idRlAeBBkAQ6h5uKtq2mRk9WnHxvrW6WlpU1am9ukualVWprFKLe4np9ariQmxUtCokiCekyIk4RE9a99ebx6niDSIyVBemYkSGr66cdomcsYAAAgUgiyADgFQRaAUNi1qVpWPF+qy9l5yfKN7xfqcjT55x+LpaK0Qe/SzJvyZNiYDF0GEB4EWYANtLaInDjaKBXHGqXiaJOcONokJ6ubdWClnre151ERFxcv0jMj0RRwJUp23yTp1beH9OqTKL369DBCMQAAALQjyALgFARZAELh8/dOyAdLj+vy8Im9ZMzlvXU5mmx6+7js+PiE3qWL5/SW0VN66TKA8CDIAiLsyL56KStpkBPHmqXiaKMRWp041ui3Fj1S4iUlPVGSe7YHSuqxR3K8xCXEtY+qSpD2UVYJ7SOsdDmxfXhzS7MapdVmhGZqxFZra9upUVutxoiu1pY2aWxolYaT7SO+1GN9TbMx6sufrN5JOtxSj7kFyZI/KEWvBwAAiCUEWQCcgiALQCh8+I8y2fROhS6PuTxXhk+Mrvtjuez4uEI2vX36PlljpvaSi74VnaEdYCcEWUAYNTW0SsneeiO8Ovx1nfHY3NSm15tl5vaQjNyk9secJEnNUNP6JUpyWrzxqKYD7A5qqsL62mZpqG01HuuqW6S6vFGqypqkuqxJqsq8h3CJSXFSMDhV8genSD/1OChZkpKZMxgAAEQ/giwATkGQBSAUVr5QKl9trNblSXPypOjs6Jxub/+Walm39PQ0imeOzZAZN+bpMoDwIMgCQuzQnjr5+staKdlbJ0cPnJ4z1yWrTw/J7ZdyOrRSjzk9jCn8nEhNeajCrOry9lBLhVtlh+ul0ssos74Dk41w64xz0qT/kFS9HAAAIJoQZAFwCoIsAKHw+v8ckkO763T5shv7S9+i6Oz3Obq/Tla/cEjva/+hqXL1v/bXZQDhQZAFhMDRA/Wye3ON7PmiViqPN+nlSp/CVMntn2w89ilMMaYEjAVqasJjB+rk2MF6OX7qn5majnDIuWky5Lx0yRvINIQAACB6EGQBcAqCLACh8OIvDhi3z3D55g+KjNmGopH6Evfypw/oXcvu20NueGCgLgMID4IsoJNqTjTLtk+qjACrvOT0H+uM7CQZMCJdCs7oKb0HpBj3qYK6F1ebEWaVfH1SirfVSM2J04FfTn4PGTo6XUZOyJT0Xol6OQAAgBMRZAFwCoIsAKHwh598bdx33eU7958hST0cOvWQH02NrfLXx77WZdXvN+9XQ3QZQHgQZAFBKj/SKF98UClbPqzUy1IzEmXgiHQpHJ4mfQZG59DpUFOjtQ5sr5HiHbVSV92sl59zUZacc3GWEW4BAAA4EUEWAKcgyAIQCgRZBFlAuBFkAQFqbW2T9W+Vy6dvV+hlRaMyZPC5GVIwpKdehuCV7Dkpe7+olv1bT98Y9ILLs2X8FTkSH8+INgAA4CwEWQCcgiALQCh4Ti145byBxn3ho5G6R/wbv9+vd42pBYHIIMgCAnBoT52sefmovv/VkDGZcua4LOnVN/nUKxAKJ442yFcbKmXPpiqjrO6jddm/5Em/M7iHFgAAcA6CLABOQZAFIBRe/59Dcmh3nS5fdmN/6VsUnTMWHd1fJ6tfOKT3tf/QVLn6X/vrMoDwIMgC/NiyrkreffWo8VxNG3jepbnSZyDBSjipaQc3v1tuPCqXXttXzp6UeWotAACAvRFkAXAKgiwAobDyhVL5auPpWXYmzcmTorMzdDma7N9SLeuWlupdOnNshsy4MU+XAYQHQRbgw+7NNfLPxUeM58Mn9JIx03ufWoNI2LTquOz45ISxqStuzpch56VHYrMAAABdQpAFwCkIsgCEwof/OC6b3mnvv1HGXJ4rwydm63I02fFxhWx6u0zv0pip2XLRt3J1GUB4EGQBFupPtsji/7dPmhvb5JxLcuTsS3L0OkTOlvfL5cv3yyUxKU5uXjBIUnomRG7jAAAAnUCQBcApCLIAhMLn752QD5Ye1+XhE3vJmMuj88vgm94+Ljs+Ph3aXTynt4ye0kuXAYQHQRZgwfVtkoEj0uWia/L1ckTeB68dkeLtNTJ2WrZMms23XAAAgL0RZAFwCoIsAKGwa1O1rHj+9HR72XnJ8o3vF+pyNPnnH4ulorRB79LMm/Jk2JjonEYRsBOCLMDCy786IMcPN8rM2wZITgH3xOpO5SX1suJPB6V3vx5y3X0Du7MqAAAAfhFkAXAKgiwAodDU2CoLf/y1Liuz7hooWb176HI0qDzeKG8+c8BtV+785RmS1CNelwGEB0EWYOGpf98j0tYm1z04ROLi4/RyRF5ba5u89MgeiYsTmf/boZGvAAAAQBAIsgA4BUEWgFB549kS2be1VpdHX5YrIy6Mrvtkbf+oQj5fffr+WINGpck3by/QZQDhQ5AFWHB1QMy6c6Bk9Ymub5A4TeWxRnlzYfs3XnSaXjMAACAASURBVOY/TpAFAADsjSALgFMQZAEIla3rquSdV4/qcp+BKXL5TQN0ORqsfuGQHN1fp3dl6rV9ZdSkTF0GED4EWYAFVwfEGedlyoTZfU8tRXf4ZFmpfL252tg0QRYAALA7giwATkGQBSBUaitbZNGCvbqsXH3vYElJS9BlJ6uvbZHXH3ffv1sWDJa0rOjYP8DuCLIAC64OCGXsjN5y1vheuozI2bn+hGxceVxvkCALAADYHUEWAKcgyAIQSq89eVBK9tbr8siLsuW8qbm67GSb3ymTbR9W6F0oGJwi19wdXSPOADsjyAIsmIMs5ZwpOXL25BxdRvhtWVsuX75X7rYhgiwAAGB3BFkAnIIgC0AobVxzQtYtO/1lZOVbPxwkaVmJuuxEtZXN8o/f7XOr+qTZvWXsNL70DkQKQRZgwdUBcd60XNm8pv1GjgPOSpNzpuRKr77cMyucThxtlC/fK5ODO9tvEmr+DAiyAACA3RFkAXAKgiwAofb8w/ulqqxJl4eMyZTxVzr7lh3rlx+TPZsq9T5l5ibJTQ8V6TKA8CPIAiyYOyAO7qyR9W8ck4a6FmOZGhp95gVZkprh7G+U2E1ddbN89WmlHqqdnJog47/ZRwaclU4DCwAAOAZBFgCnIMgCEGrbPq6SNUuO6rLyjdsLJTs/WZedpOJIg/zz2WK3Kk+b21dGTszUZQDhR5AFWPDsgKivbZYv3iuXPRurjLIy7IIsOePcTMnp58w/xnZRfrhBvv6iSnZ9evrbLUPGZsq5U3IkJa09LKSBBQAAnMLzOhIA7Ip2FoBweOXxYjl6oEGXC0eky8XX5Ouyk3zw2hEp3l6jq9x3YLJ8995CXQYQGQRZgAWrDohjB+rlq09PyIFtp/+IqakGC4eny4Dh6Uw7GCA1feDBHTVSvKPGeO4ycGS6nHlBL+kzMEUvU2hgAQAAp7C6jgQAu6GdBSAc9m6pleV/KtFl5dxLc2XUxdm67ARb11bIF++13+rC5crbCmTw2Wm6DCAyCLIAC/46IE6UNsrXm6uMQKuuplkvz+mXIoXD06TgjJ6OHTYdLuqYHd5TKwd31ErZ4Xq9PDU90QiwzjgvQ3rleR/dRgMLAAA4hb/rSACwC9pZAMJl2R9KZP/29nufu0yakydFZ2fosp3t31It65aWulWxaESazL6jQJcBRA5BFmAhmA6Ikj0npXhHrRRvr5bG+la9vEdKvPQekCq9C1Okz4AU43l8gl4d1VpbRI4frJNjxXVy/GCD8dzz2Kih5WokW8GQnnq5FRpYAADAKYK5jgSA7kQ7C0C4VJU1y1+fKJaT1e33m1fi4kSm31wouf29f4nZLsoONciqxcXS1na6Rj0zEuQ79xRKZm77LTAARBZBFmChsx0QB3fWyKGdJ+VocZ3UVDTp5UpcXJwRauX2S5aM7CTJyO0hmblJkprh7D+CddXNUlXeJNVljVJV1ijlJQ1yvLhB2sx/8UUkPTtJ+hamSv+zesqAs9L18kDQwAIAAE7R2etIAIg02lkAwql450n5+zOHdVlRfUMzbhkgyT3t+U3vhpMtsnLRwQ59elfd1U8Kz/L/RWwA4UGQBVgIRQfEyapmOVZcb4xGOn6w3gh4vFGjk1yhlvGYkyQp6YmSmp4gyWkJktQjXr+2OzQ1tkpDbYvU1bRIfY05tGp/NI+0MsspSJbep0ai9SlMkZ6ZnQ/saGABAACnCMV1JABEAu0sAOG2ZV2lvPvqMV1WVJg1aU6+7UZmqZFY65Ye6RBiXXptHzl7UpYuA4g8gizAQjg6IJoaWo1A68TRBh0CVZc1Sf3J08OsvUlMipeUtARJUcFWzwRJSUuUlLR46ZGcIHEJIgmJcZKQGG88xseLxLueJ7T/rNLc1GpM99fS3CYtza3S1qoeRVpb2ox1bS0ijQ0tUl/bKvW1zcY3UOprVHjVbPyMLyk9EyTDFcLlJkmvvu0BVlJy6AI4GlgAAMApwnEdCQDhQDsLQCR8+I/jsumdE26bUtMMXniVfe6Zpe6J9dHfS92mE1TGTsuWSbNzdRlA9yDIAixEsgNChUZqSr6q403GY3V5U3uYZIRKLUbQ1J1cQVpymnpMlIycJMlUoVXv9sdIDAengQUAAJwikteRANAVtLMARMpbi47Ini9qOmzu3Cm5Mmpyti53h60fVMgX75Z12PSQc9PlilvydRlA9yHIAizYqQNCjeQyRkjVtv9Tz9VIKbXcNbJKjbJSI6fUqCs1ykqV2x/FuFeVCqPUCC1jpFZivDFyyzySKy5ejBFUqemJp0Z9uf4lSmKPOH1cugsNLAAA4BR2uo4EAF9oZwGIpHXLymTjmooOmywckS6jLsqW7PxkvSwSKo40yNYPK6R4e8eAbczUXnLRt3rrMoDuRZAFWKADwl5oYAEAAKfgOhKAU9DOAhBp3u6Z5TJkTJaMujhb0rI6f4/1QNRWNsvWD8plz6YqvcyMe2IB9kOQBVigA8JeaGABAACn4DoSgFPQzgLQHYp3npRVL5bKyWrv94wfeVG2nDW+lzFTUCipWY52rj8h2z7sOCpM6ZmRINNvyJPCs3rqZQDsgSALsEAHhL3QwAIAAE7BdSQAp6CdBaC7VJU1y3uvHZP922stq9C3KFX6De0p/YalSVbvHnp5MCqPN8rhXbVyaFetHDtQr5d7KhqRJlOu6SOZueEdDQagcwiyAAt0QNgLDSwAAOAUXEcCcAraWQC6294ttbJhVbkcPdDgsyrZecmSNzhVUtMTjPu7p2a0/0tJbx+1VVfdLPU1Lcajuq98XU2LlO6tk4pS3+/bd2CyjJueI4PPTtPLANgPQRZggQ4Ie6GBBQAAnILrSABOQTsLgF1s+7hKPn27QqrKmiJSpczcJLng8mwZOTEzItsD0DUEWYAFOiDshQYWAABwCq4jATgF7SwAdrNxzQnZu6VGSvZaTwPYFQWDU2Tw2ekydlovvQyA/RFkARbogLAXGlgAAMApuI4E4BS0swDYVW1li+zbWit7t9Uaj10xaFSaDB6ZZjymZbVPRQjAWQiyAAt0QNgLDSwAAOAUXEcCcAraWQCcoKmx1QizaqtajICrtrJZaqua5dDuOrfq9x+aKmmZiUZYlZaVKGmZCUZ4ldQjXr8GgDMRZAEW6ICwFxpYAADAKbiOBOAUtLMAOJnrmstl/uND9XMA0YUgC7BAB4S90MACAABOwXVkbHjnnZVy7bUzjZ09//wJsmLFx7Gx44gqtLMAOBlBFhA7CLIAC3RA2AsNLAAA4BRcR8YGgixEA9pZAJyMIAuIHQRZgAU6IOyFBhYAAHAKriNjQ7QEWfv27ZHFixfK1q2b5dVXV8TGhweNdhYAJyPIAmIHQRZggQ4Ie6GBBQAAnILryNgQDUHWpk0bZPr08cYHxvSIsYl2FgAnI8gCYgdBFmCBDgh7oYEFAACcguvI2BANQVY07AO6hnYWACcjyAJiB0EWYIEOCHuhgQUAAJyC68jYEA0hUDTsA7qGdhYAJyPIAmIHQRZggQ4Ie6GBBQAAnILryNgQDSFQNOwDuoZ2FgAnI8gCYgdBFmCBDgh7oYEFAACcguvI2OAtBFLLfv/738j69euktrZG0tLSZfz4SfKDH/yHTJ06w++B8fx5JS+vQC68cLLccMNtPt9j37498vDDD8pHH62V0tISY9mwYcNl1Khz5corvy1XXz331Cvbt+Oquy+vvrrC5zbhfLSzADgZQRYQOwiyAAt0QNgLDSwAAOAUXEfGBs8gq7CwSJYufcVy53/966fl5pvv0mWziopyueOOfzHe05c5c74rzz67RJddXn99ifzbv92uwy9v5s+/TxYseMx4TpAFF9pZAJyMIAuIHQRZgAU6IOyFBhYAAHAKriNjg1UYpEYwjRp1nlRVVcprr/3FLVxatWq9jBkzTpddLrxwhOzatUOXXe+hrFixzG2dZ5ilQrDRo4v0dtQosGuuuV4yM7Nk69bNOhwzj65So7cWL14oBw/u1+GbGvl17bX/x3jucvPNd8qgQUN0GdGHdhYAJyPIAmIHQRZggQ4Ie6GBBQAAnILryNjgGWSpafxeeukNt+BHhUyzZl2kgyjPEEpZsOB+eeqpXxnPVQi1dOmaDmHX4sXPyI9+NE+XzaGUuR4qjPrggy2SnZ1jlBVVh/vum9dhu4r5Z13TIyK20M4C4GQEWUDsIMgCLNABYS80sAAAgFNwHRkb/AVILps2bZDp08cbz1VQtX9/9ak1HUdT/fGPL7vdy8rMHHiZQ6euhFFd+VlEB9pZADrDM0CCu/mPD9XPAYQGQRZggQ4Ie6GBBQAAnILryNgQTAhUVJShw6rjx9tOLXUfaaXCsK1bD59a05GaDvCCC053jO3aVWYEZ+agTLGavtCbYPYB0Yl2FoDOIMjyjSALCD2CLMACHRD2QgMLAAA4BdeRsSGYEGjmzIny2WefGM/N0wL++7/fKc8//wfj+U033SG//e1C47mVUaP6SWlpifHc/D7m91ejvm65ZZ7cc89PvI4QMwtmHxCdaGcB6AyCLN8IsoDQI8gCLNABYS80sAAAgFNwHRkbggmBrIIs8/L58++TBQseM55bMb/+179+Wm6++S7juee9uFzUPbkeeugRt/t2mQWzD4hOtLMAdAZBlm8EWUDoEWQBFuiAsBcaWAAAwCm4jowNwYRA4QiyPF+vwqwnnnhUFi16Wk9j6OL5Wpdg9gHRiXYWACfzDNQIkIDoRZAFWKADwl5oYAEAAKfgOjI2BBMChSPIMo/IMrMKtLxNXRjMPiA60c4C4GQEWUDsIMgCLNABYS80sAAAgFNwHRkbggmBrIIs8z2yAgmyiooydDhlfh9vVKB1333zZOnSV/SyTz/d7TbNYDD7gOhEOwuAkxFkAbGDIAuwQAeEvdDAAgAATsF1ZGwIJgSyCrIWL35GfvSjecbzYcOGy0cfbTeee7Np0waZPn28Lu/aVSbZ2Tm6bGXUqH5SWlpiPPccxRXMPiA60c4C4GQEWUDsIMgCLNABYS80sAAAgFNwHRkbggmBrIIsNWpq2LBc47nia5SV2pbapqJeo14bCF/TF5r3wV+QhuhEOwuAkxFkAbGDIAuwQAeEvdDAAgAATsF1ZGwIRZClmKcXVGHSSy+94Tb9n/Lf//0LefjhB3XZ8z1uv32uDBhQJPfc8xO3UVoqKBs9ukhPR/jHP74sV18999RakX379sgFFwzVZc/3RfSjnQXAyQiygNhBkAVYoAPCXmhgAQAAp+A6MjaEKshSYdOsWRfJrl079DK1ftSo84znK1Ysc1t30013yG9/u1CXPUd1uX62qqpSXnvtLzrEyssrkK1bD5961Wnmuilz5nzXCMXUz6ttf/DBloCmMIQz0c4C4GQEWUDsIMgCLNABYS80sAAAgFNwHRkbQhVkKd7CLG88Qyzl9deXyPe/f50ue5OWli5Ll66RMWPG6WUuatsXX3y2vo+WJ2/1RfSgnQXAyQiygNhBkAVYoAPCXmhgAQAAp+A6MjaEMshyWbz4GVm+/HVZv36d20iqCy+cLA899EiHKQdd1BSBTz75mGzdutltdJWaqnDmzNkdphz0pMKs++6bJ6tWvem23QEDBsqjj/7OawCG6EA7C4CTEWQBsYMgC7BAB4S90MACAABOwXUkAKegnQXAyQiygNhBkAVYoAPCXmhgAQAAp+A6EoBT0M4C4GQEWUDsIMgCLNABYS80sAAAgFNwHQnAKWhnAXAygiwgdhBkARbogLAXGlgAAMApuI4E4BS0swA4GUEWEDsIsgALdEDYCw0sAADgFFxHAnAK2lkAnIwgC4gdBFmABTog7IUGFgAAcAquIwE4Be0sAE5GkAXEDoIswAIdEPZCAwsAADgF15EAnIJ2FgAnI8gCYgdBFmCBDgh7oYEFAACcgutIAE5BOwuAkxFkAbGDIAuwQAeEvdDAAgAATsF1JACnoJ0FwMkIsoDYQZAFWKADwl5oYAEAAKfgOhKAU9DOAuBkBFlA7CDIAizQAWEvNLAAAIBTcB0JwCloZwFwMoIsIHYQZAEW6ICwFxpYAADAKbiOBOAUtLMAOJk5yIqTOPnXx4foMoDoQpAFWKADwl5oYAEAAKfgOhKAU9DOAuBUn7xVLhtWlotIm0hcvEhbm1zy7T5y7uQsp+4SAB8IsgALdEDYCw0sAADgFFxHAnAK2lkAnKatTeTtF0tl52fV7VVvM4ZjaRd+M1fOvyxblwFEB4IswAIdEPZCAwsAADgF15EAnIJ2FgAnqSpvlpUvHJEj++rbq+0RYrmMm5EjE67I0WUAzkeQBVigA8JeaGABAACn4DoSgFPQzgLgFAd31cmqF0ultrLZrcrJPROk4WSLLrucN6WXTJ7TW5cBOBtBFmCBDgh7oYEFAACcgutIAE5BOwuAE2z7uErWLDnaoaoFg1Nl+v/Jk4rSRnnzuRJpaVZDtE4bOTFTps3tq8sAnIsgC7BAB4S90MACAABOwXUkAKegnQXA7j55q1w2rCzvUM0zz8+Q6Tf0lbi49rkFD++pkzcXHZH6WvfRWWeOzZAZN+bpMgBnIsgCLNABYS80sAAAgFNwHQnAKWhnAbCrtjaRt18slZ2fVXeootU9sI4dbJDlz5VITYX79IODR6XJrFsLJC5eLwLgMARZgAU6IOyFBhYAAHAKriMBOAXtLAB2VFXeLCtfOCJH9tV3qJ6aKlBNGWil4mijvLXoiJQfadTLlP5DU+XK2wqkRwppFuBEBFmABTog7IUGFgAAcAquIwE4Be0sAHZzcFedrHqxVGor3UdVpWUlyvQb8mTAsFS9zIr62TefOyKlB9yDsLyBKXLFrfmSnpWolwFwBoIswAIdEPZCAwsAADgF15EAnIJ2FgA72fZxlaxZcrRDlfIHpciMG/MlMyfwAKqxvlWW/6lEDu2u08uUnLweMuu2AunVJ0kvA2B/BFmABTog7IUGFgAAcAquIwE4Be0sAHbxyVvlsmFleYfqnHV+hlx+Q57ExelFAWttbZO3njsie7fW6mVKRk6SzLolX/oMSNbLANgbQRZgYdH/3Su1VS1y9b8NlpT0BL0ckVdf0yKv//deSctMkFv+3+DIVwAAACAIBFkAnIIgC0B3a2sTefvFUtn5WXWHqoybkSMTrsjR5c5a+UKpfLXR/f1T0hLkilvypf8Q/1MVAuh+BFmAhb8/fUiKv6qTMdN7y/AJvfRyRN7O9Sdk48rjUnhmqlw1r3/kKwAAABAEgiwATkGQBaA7VZU3y8oXjsiRfe73slKmze0rIydm6nJXqSkL1dSFZgmJcTLr1gIpGtFTLwNgTwRZgIW9W2qNuXSTeybIZTf2l6w+PfQ6RE7l8UZZ/fwhaTjZIlfeViCDz06L3MYBAAA6gSALgFMQZAHoLgd31cmqF0ultrLZrQppWYky/YY8GTAs9COl1i49LpvfO6HLLt/4Xr4MHZ2uywDshyAL8OGfi4/I7s01Roh10bfzCbMirPJYo3z4tyPG47DR6TLze/kRrgEAAEDwCLIAOAVBFoDuoEZGqRFSnvIHpciMG/MlMydRLws1q3txXXZdXxkxIXQjwACEFkEW4MfS/zkkB3fXSWJSnEyYnScDR/INjUg4sK1GPllWKs1NbdJ/aKpc/a9MKQgAAJyBIAuAUxBkAYg0qyDprPMz5PIb8iQuTi8Km89WV8hHb5Tpsssl1/SRcy/O0mUA9kGQBfjR2tomq186Kjs/bb8pZOGIdDl3So5k9maqwXCoOt4oX7xXLsXba4zy8AsyZNq/9JX4+AhcyQAAAIQAQRYApyDIAhApbW0ib79YKjs/a+9fMxs3I0cmXJGjy5HwxQeV8v5rxzps6sJv5sr5l2XrMgB7IMgCAqTm0FXfGmlsaDXKZ5yXKWeOy5Ls/ORTr0BXVBxpkK82VMrXm9tvvNkjOd64iDlvSq9TrwAAAHAGgiwATkGQBSASqsqbZeULR+TIvvoOm5s2t6+MnNg9U/pt/6RKVr/ccYrD7gjWAPhGkAUE4WR1ixFmbf2oUi/rOzBVCkekGSO1UtPDN4dvNKqraZbiHbVSvK1Gjh6o07s46sIsI8TqmZGglwEAADgFQRYApyDIAhBuB3fVyaoXS6W2slkvU9KyEmX6DXkyYFiqXtYddn9eI//83yMdNq2+WD15Tm9dBtC9CLKATqg83iRfrD0hW9ZVSUtzm15eMKSnFA5PN+6jlZQcr5fjtKaGVuP+Vwd31srh3bV6eUJinJw9KVPOndxLsnon6eUAAABOQ5AFwCkIsgCE07aPq2TNko4jnvIHpciMG/MlM8ceXwjfv/2kvPlciVsfn6JGiqkRYwC6H0EW0AWtLW3GNzd2b66Rr788HcooeYNSpfeAFOk9IFX6FKbEbLClgqtjxfVy/GCdHD9YL6X7To+8Us44J02GnpcuQ0enS3wC98ECAADOR5AFwCkIsgCEi5rRaMPKcl12Oev8DLn8hjyJs1kX0KE9dfLWoiNSX9ui66qcOTZDZtyYp8sAugdBFhAiDXWtsntztXy9uVb27zipl7uoe2n1KVShVrLk9EuV9F72+NZJqNWcaJbyQ3Vy7KAKrxqkvKTj/MdFw3vKGSq8Oi9dklMZuQYAAKILQRYApyDIAhBqbW0ib79YKjs/q9bLXOx+76ljBxvkzUVHpLq8SddZGTwqTa64NV/i422WvgExhCALCAP17Q11A8vDe+ul5Os647n6Q26mptLLyO1hTKOnHjNzTj3mJkliD3uHO82NrVJV1iTV5Y1SXdYkVWWNxnSL1WWNHYZhq2/Y5A9OkX6DU42h4wWDUyQljXtfAQCA6EWQBcApCLIAhFJVebOsfOGI0Q/mSU3Rp6bqs7sTx5rkzT+VSHlpo1tV+w9NlStvK5AeKfbuswOiFUEWEAFqCsISFWrtaw+2ykoajZFLVtQNL1XYk5LmekyQ5LQESU1vLyf3bF+WlJwg8SHKhFpb1P2rWowQrr62WRpOtkpdjXpskfqa08vVo+cNOs3USLPcgh5ScEaqFJwKrpgyEAAAxBKCLABOQZAFIFQO7qqTVS+WdugzUn1c02/IkwHDUvUyu6upbJa3njsipQfcA7m8gSky69Z8Y58ARBZBFtBNGutapeJYo1QcbZITR82PjUaoFAw1ukv9i0uIk8TEeCPcal8WL/Gn/ra2NIu0tbRJc1OrEaw1N7cZZTWCynMUlT/q/XPykqVX3yTJ7tvDeOzVR/3rwVSBAAAg5hFkAXAKgiwAobDt4ypZs+SoLruomXlm3JgvmTnOC34a61tl+Z9K5NBu93u95+T3kCtuyTf6wwBEDkEWYENV5U1ysqpF6mpa5GS167FZ6mpajUfX86aG1qBDKCsq+EpKjpfU9HjpmZFo/HM9P/2YID0zE4xpEAEAAOAdQRYApyDIAtBVn7xVLhtWluuyy1nnZ8jlN+QZt5xwqrZWkTefK5G9W2vddiE9O1GuvLVA+gxI1ssAhBdBFhAF1CgrNeLKGF2lnre0PzdGX50a0a1GZiUmxbeP1FIjtlzPTy0HAABAaBBkAXAKgiwAndXW1iarXjwqX31WrZe5jJuRIxOuyNFlp1v5Qql8tdF9P9UtP2bdki/9hjhnykTAyQiyAAAAACCECLIAOAVBFoDOqCpvllV/LpWSve7T7inT5vaVkRMzdTlaqKkT1RSKZuoL4rNuLZCiET31MgDhQZAFAAAAACFEkAXAKQiyAATr4K46WfViqdRWnpoC6JS0rESZfkOeDBgWvSOU1i49LpvfO6H32eUb38uXoaPTdRlA6BFkAQAAAEAIEWQBcAqCLADB2LulVpb/qUSXXfIHpciMG/MlMydRL4tWVvcEu+y6vjJiQvSNRAPsgiALAAAAAEKIIAuAUxBkAQjW5vdPyNrXj+vyWednyOU35ElcnF4U9T5bXSEfvVGm93PirFy5YHq2LgMIPYIsAAAAAAghgiwATkGQBaAz1r5+TDa/XynjZuTIhCty9PJY8sXaSnn/b8fkguk5MnFWbB4DIJIIsgAAAAAghAiyADgFQRaAztr2cZWMnBjbU+ntWF8tw8dn6GMCIHwIsgAAAAAghAiyADgFQRYAAHACgiwgysSZJiVua2vTzxVf6wAAABAaBFkAnIIgC0CkBNMndf/998v7778v9957r8ydO1cvBxC7CLKAKOPrwsDXOgAAAITGogX7pLayWebcM0hSMxL1cgCwk7rqZln6xD5Jy0qUWxYMslPVAEShQPuklixZItddd50u7969W4YMGaLLAGITQRYQZXxdGPhaBwAAgNB449kS2be1Vi6ZWyD9h6Xp5QBgJ4d21cr7S0pk0Kg0+ebtBXaqGoAoFGif1DPPPCPz5s3T5fXr18u4ceN02Y42bNggv/71r6WoqEgee+wxO1YRcDyCLCDK+Low8LUOAAAAobFhRbl88s9yKTijp1x6fT+9HADs5N2/HJaSr0/KhG/kyLiZOXaqGoAoFGifVHl5ucyaNUs++eQTueOOO2ThwoV6nR394he/kAcffNCo2n333UeQBYQJQRYQZXxdGPhaBwAAgNBobW2TFx85IJVlTTJ2em85a0IvvQ4A7GDHJydk06rj0qt3klz/wECJjz/dVgSAcIjWPil1P69f/epXxj4SZAHhQ5AFRBlfFwa+1gEAACB09m2rlTf+WGI8VyOzho3Lkpz8ZO6ZBaDbqHtilR9pkF0bKo2RWMo3v18gg0YyBSqA8IvWPimCLCAyCLKAKOPrwsDXOgAAAISWCrPW/u24MTILAOxEjcSa/O0+UjSip52qBSCKRWufFEEWEBkEWYDDqLmCH330UVm2bJns2LHDqH1BQYFMnjxZfvSjH8n48eP1HnmGVeaLhrKyMmOe4eeff77D+9x2220yY8aMU68EAABAZ6lpBj9bVSGlxQ1y7GCD1FY263UAEElpWYnSZ0Cy5BUmy/nTs5lOEECn7dmzx7gXtdg8SgAAIABJREFU1ObNm417WblMmDBBrrrqKrnzzjslJ8f93nv+gixzIOSi3u/jjz/WZU+qj0z1bf39738PuB7KypUrZebMmcbz3bt3y5AhQ4xlv/nNb2TdunVSU1NjrFPvc/PNN8tdd91llM281dcbb/sKIHgEWYCDbNiwQaZNm6b/oPrj+cfSfNEwfPhwHWB544QbagIAAACx4Kl7d7vt5vzHh+rnAABEigqOHnjgAfnDH/7gc5Pp6elGyGMOgEIdZKng6ZprrvHZR+atHoo5yHrkkUckOztb5s2bd2ptR9/97ndlyZIluqx4q6833vYVQPAIsgCHUCGWebSV+mM8adIkOe+884zyn//8Zykpab8Pg4vnH0vzRYOiRmDNnj1bsrKyjG/RmL91onj7Qw0AAAAgsgiyAAB2MGLECLcvRasvSV9yySVGv1JlZaUxe5Crb2r9+vUybty4U6/0H2SpcOntt9+W/fv3yyuvvGIsswqyVF/Vddddp8vm/i3PeihPP/20W5hlDrLUz7peq2YnUv1s3t5jxYoVbrMXuer7/vvv69Fgqr7qeJipkWsAuo4gC3AA9Y2XoqIit6HNb775Zofh0XPnztV/7BXPCwPzRYP6xon6Fo2Z2o76Bor5Pby9DgAAAEDkEGQBALqbmqbPNRJLfbn62WefNfqhPKmA5+uvv+4wCspfkOViDpm8BVlqWsPRo0frPjKrL2Gb+8hUfVVA5upHM29DUYHcG2+8YUwxaKZeo16rqBBLhVmeuEcWEBkEWYADmP/4qj+u27dvt6y1rwsDX+vMPP/YV1dXn1oDAAAAINIIsgAA3UmFR0OHnp7W9uWXX/YaYvkSaJ+UvyDL3GdlFWK5mIMo8xe1zdtQI7K2bNnS4cviinl2JKv+MYIsIDIIsgCbU6OkcnNzdS09hzJ78nVh4GudmecIsM5coAAAAAAIDYIsAEB3Mo/G8hYuBSLQPilfQZZnH1lZWZnXAMrF6r2slnvjr94EWUBkEGQBNmee99ffaCzF1x9YX+s8mb+1ct999zGnLwAAANBNCLIAAN1p4sSJ+j5QnvebClSgfVK+QiZf66y4tmseURXM+5jvC+YtOCPIAiKDIAuwOfMfRH9DphVfFwa+1nkyb9dqHmAAAAAA4UeQBQDoTub+JH8zBVkJtE/KV8hk7qvqDNd2fW3DkznE87bvBFlAZBBkATYX7B9EXxcGvtZ5Mm/X3x91AAAAAOFDkAUA6E7REGSpe2EdPnzYOIwEWYDzEGQBNmeHIOuOO+6QhQsX2vxIAQAAANGJIAsA0J3sGGSp22888cQTAR+W7OxsGTdunPGcIAtwHoIswOaCHRnla9SVr3We5s6dK6+88orxPJCRYAAAAADCgyALANCdzPeJevnll40+o2AF2iflK2Qy30fec10wfG3DE1MLAvZAkAXYnPmPtLox5f79+zvcWNLM14WBr3We+vXrJyUlJcbz9evX62+tAAAAAIgsgiwAQHcyf9k5kPu3exNon5SvkGnPnj0ydOhQXS4rK/PZR2bF1zY8EWQB9kCQBThARkaG1NTUGDX1NzrK14WBr3VmzzzzjMybN894bp5DGAAAAEDkEWQBALqTOfhROvOFZ3Pflq+f9xcymYOlzt4Kw982zIIJsjpbHwD+EWQBDmD+o6g88sgj8sADD+iyizmAUjzDKnOQZfUe6ls1t99+u764ePrpp+Wuu+46tRYAAABApBFkAQC6mznQUTMGvfbaax1CHUWFRP/1X//VIRwy/7z6ORUKeeMvZNqwYYOMHz9el62+8F1eXi6PPvqocW8sz/4vf9sw8xdkmfviAplJCUDnEGQBDqD++F500UV6PmJFjZSaPHmyFBUVGeU///nPeipAF19BlqLeY/bs2ZKVlWX8oV27dq3be3R2uDgAAACA0CHIAgB0N299U8OHD5dLLrnE6FeqrKyUZcuW6X4lzy9Ge375Wv3sPffc0+HL04GETJ7vpQKkWbNm6T6yzZs3y7p164wvaXsLlwLZhou/IEsdF7Vd1xfC1fauv/563dem/vl6fwCBIcgCHMLbBYMndRFgXm8VZHm+zhuGQwMAAAD2QJAFALAD1TelAiNXsOOLt5FS5nttKd5CpEBDJhVmqW24AiQrqg/s+eefd5vKMNBtKP6CLEW93zXXXGNZF8/+OQDBI8gCHEb9oV68eLHbRYP6o3vVVVfJnXfeKbm5uXq55x9KFWSpUVhbtmyRiooKefDBB91GYak/7ueee64x7eCQIUNO/RQAAACA7kSQBQCwEzV7z3PPPadHPSlqJNKoUaOMEVqqf8qqX0n1a73++uvGz6rXe4ZIwYRMrukD1Ugwz5Fiqn/rtttuswyeAt1GIEGWoqY8fOihh4z3dlH1GDhwoLz00ktMNwh0EUEWAAAAAAA2RpAFAACAWEaQBQAAAACAjRFkAQAAIJYRZAEAAAAAYGMEWQAAAIhlBFlAFKPBC/x/9u4/ZK/yzhP/KQNFW9MZRoqDVEH6VfsDB5mKizKZ2Lij3222rHEiu5Md6w8KMqL1r9pudKCgsdb+IbbiIhRTjZPdIak6lMxs3NGaWiIjVqTybbWLFAw4hKXLrol1EJZ++dybc/Z6zq/7nPu5nyfPOef1gtL713Of3/fn8nrnug4AwPBp1wMAMGWCLBgx/8ELAADDp10PAMCUCbJgxPwHLwAADJ92PQAAUybIghHzH7wAADB82vUAAEyZIAtGzH/wAgDA8GnXAwAwZYIsGDH/wQsAAMOnXQ8AwJQJsmDE/AcvAAAMn3Y9AABTJsiCEfMfvAAAMHza9QAATJkgC0bMf/ACAMDwadcDADBlgiwYMf/BCwAAw6ddDwDAlAmyYMT8By8AAAyfdj0AVKmPMB2CLBgxBR0AAIZPux4AqtRHmA5BFoyYgg4AAMOnXQ8AVeojTIcgC0ZMQQcAgOHTrgeAKvURpkOQBSOmoAMAwPBp1wNAlfoI0yHIghFT0AEAYPi06wGgSn2E6RBkwYgp6AAAMHza9QBQpT7CdAiyYMQUdAAAGD7tegCoUh9hOgRZMGIKOgAADJ92PQBUqY8wHYIsGDEFHQAAhk+7HgCq1EeYDkEWjJiCDgAAw6ddDwBV6iNMhyALRkxBBwCA4dOuB4Aq9RGmQ5AFI6agAwDA8GnXA0CV+gjTIciCEVPQAQBg+LTrAaBKfYTpEGTBiCnoAAAwfNr1AFClPsJ0CLJgxBR0AAAYPu16AKhSH2E6BFkwYgo6AAAMn3Y9AFSpjzAdgiwYMQUdAACGT7t+Yzt69Gj2X//rf81eeeWV7K233sp+/etfFyv8mc98JrvggguyG264ITvnnHOK11MvvfRSdvvttxfPu7r++uuzO+64I7vkkkuK11Yj1n/ZNm/enL3//vvZNddck919993F61BnNefLrbfemp04cSJ74oknitfqxPX6+OOPZ6+++mr29ttvF693uVZz7777brZnz57s8OHDle+44oorsh07dmQf+9jHitdZO+ojTIcgC0ZMQQcAgOHTrt+YojP7O9/5TvbMM890WsGmzvmxBlnPPvtstmvXrtk2RrgQnfzQZNHzJa7D3bt3Z88999zsb9qCrP3798+u2QjL2nzta1/LrrvuuuJ56uc//3l2yy23tH7HmWeemT344IOdt4HFqY8wHYIsGDEFHQAAhk+7fuOJzuwIpdLRGOH000/PzjvvvNnjY8eOrRidFZ3b0ZFeHqlRDrK6dn5/8YtfnHW2f+lLXypeK/vVr35VdLjH8s8666yT71S1BQCLiDAgwoVY7qFDh4rXoc4i50uEWDfeeGNxHbYFWXHNlq+Vc889NzvjjDNmI7nK1/J9992XXXXVVcXzXIzo2rlzZ3Fd5ddr+XqP34J9+/bNHd3F6qiPMB2CLBgxBR0AAIZPu35jic7zbdu2rRiRceWVV86mJCuHUNHp/fDDD8866JtGeZSDrGVO8Rcd99GBH/KpCNdD7KOtW7fOFhVTvt18883rsVgGapHzJUZw3XPPPSuuw7YgKx3xFZ+LUVxpyBTXalwfeaDVFqg99thj2ZtvvpndddddK4Lp8jpdeuml2SOPPHLyXdaC+gjTIciCEVPQAQBg+LTrN5Y0HApNAVUqwqrLLruseJ4aY5AVI8++9a1vzbbv6aefNiqFVn3OlwicvvnNb2Yvv/xy8VquLcgKca3t3bu3MVwqX4t9pjjMPfTQQ7Nl5JYZTFOlPsJ0CLJgxBR0AAAYPu36jSPtcA9dQqx5yp3ny+z4PlUjsmJUTQQN84IFCF3Pl/L9qWL6vo9//OOdphbs6pJLLikef/e7320MoJuUpzBc5DvoTn2E6RBkwYgp6AAAMHza9RvH1VdfXdwHZxmd5mFsQVaMmNm+ffts2+YFfWlokAd4MaLl8OHDRTgR9zH6/ve/X7m3WCzn8ccfz1599dXisxFsXHTRRdnnP//51uXmUz6+9tprxfGM5Zx//vmzaSLr7o2Uq/vbLstNj/O8cycNIMtBSDriJ58uMj4b6/T666/PQp5Yn5tuuql2ir4IY3/0ox9lb731VrH+MY3exRdfnF1zzTWtoUtMAXjgwIHshRdeWDEqMbbniiuuyHbs2FE5TvP0OV/SfRjHKab227NnT7E/5u3XLlYbZIX0O2J9Yr1YG+ojTIcgC0ZMQQcAgOHTrt8Y1mqkxdiCrLh/UD512/PPP98abKQd/vHZG2+8sQilchFYpKPgQrqMJhHOPPjgg5UQoXwfozpN9xMrTxtXpyl4W6sg6+yzz67sn1Ceoi+W/41vfKMIr5rEukUoVrf+d955Z+t+iwDtK1/5SmsYVdbnfMm3If6X75N0f8zbr/OUr8V561Mn/Y7YHy+++OLJd1gL6iNMhyALRkxBBwCA4dOu3xjSDvdldlCXO8+HPrXgtddeOwujLr300rlhUxpkxedjerkIoL7whS9kx48fn+3jNLQI9957b/bMM88UzyM42rJly+zxO++8kx05cmTF1HOPPvpoEWbFiKJt27ateD9G2W3atCl78803i/sulcOj0Lbc9G9DXZiVHud5gUvXICvfZyECvwi1Yl1OnDix4vsjvNu1a1fxPLY7RpBdeOGFs+fp+tcdt/LfxzHavHnzbL/lxykNyOaNrEr1OV/i+JWDpWUGWekx7rI+dWLbn3vuudnjuhCW5VIfYToEWTBiCjoAAAyfdv3GkHZQr7bDPFUOsto0jRRqst73yEpHrd13332tU/SFNMgK8zr+y4FKXWASYUc6sis9Vum+jjAmptlLg5H42927d1fWoXyM6pYb257ev6l8rNYiyArlsK4spu7buXNnsV4R0Nx///2VQCi2PabpiykJ0/fKf990jNLrI9bp4MGDlWWU9T1f6iwryCqHnOX9Pk9sS0x12XcfsDrqI0yHIAtGTEEHAIDh067fGNYqFCqHJG36Lnet1rlJPqIlOvG7jFhLg6wIlg4dOlQ8r5Peo6wuTMpFKBHv5Z+NcCNCjj5hUirdj3EfqbvvvvvkOyul318OMvosu0+Q1bYfQhowxUixp5566uQ73aR/3xRi5W699dZiZFc8rrtHV6rv+VJnWUFWOhqrz/fUXb9N01qyfOojTIcgC0ZMQQcAgOHTrt8Y+oZC5dFGuXIwUe4Ib+v8/uIXv9gaWpT1XefVyoOmeYFHLt1H8wKZdDRWl0AmDTjybY99EfsklwdcbWJE0vbt24vn5XtPlaVhWzrKaC2CrHnhXwR6W7duLZ6Xv2ue8t/Pu2dUn20Mfc+XOssIssrnRZ/9VL5+I5SLUW3zQjyWQ32E6RBkwYgp6AAAMHza9RtD31Bo0SBrqPfISrejvI1N0n00LyCqC6bapOuT3u8oPY4ROuzYsaMynV6qb4CWjmBK17NPyNM1yJoXAKXLnBd61emzzrn8mM4bZbXI+VJnGUFWfp+u0Dbirk4cp5iq8dixYyvuE1Z3nzSWT32E6RBkwYgp6AAAMHza9RtDOm1aGow0iQ723N/93d8VndzlTvu0Qz8MNcjKA5w+gUkaZM3b7jTc6SsNOGKUUXoPrVyEQrfddlslTOsblDQFTX1Coa5B1rxAr++6l6V/v4i2Y7rI+VJnmdtYng6yrzjG3/72t4tzS5i19tRHmA5BFoyYgg4AAMOnXb8xpB3efTvf24KJsQRZmzdvzt5///1eI1rWK8gqj1yKMGvPnj3ZgQMHZuucKodDfYOSps9PLciad40scr7UadrfXcQ1GddmLp0KclHl+7OVzyeWS32E6RBkwYgp6AAAMHza9RtDOsVcmDcVXmrsQdb+/fuLoKjPflk0yIpgKgKQrj7xiU/UrlNToJWGK32DkvTzYxqRFaOLvvrVr57cyvl+93d/d7a/6ix6vtTpe3xS6ZSCXUZZdpWuU5fpKFmc+gjTIciCEVPQAQBg+LTrN458FEkoj/JpM/YgK592sW+nfZ8g6957782eeeaZ2eNlj3KJQGv37t3Fva1CHrCkAWaXoCSdgnKt75E1bz/0vb9XWd9t72rR86XOokFW+ncxpeC+fftWFail1nKUJSupjzAdgiwYMQUdAACGT7t+40jDlFAOGZq0BRNr2emdLnde6LGoCIG2bt06exwBxc0333zynfn6BFnpKJ5lBCB1rr766mJKuLiHU0wRd/To0Wz79u0nP5Flzz//fOs9lNKwM52q7lQEWeV17zv6qfz387a9i9WcL3UWCbLKUwouYz1Sjz322IrRXfPObRanPsJ0CLJgxBR0AAAYPu36jSM64bdt21YEFTGS49FHH511oLdJpzAbW5CVdtr3DUr6BFnlfb+M+xmVNQV/6fFrCwTTfRHnxosvvnjynZXhSfm9VHzulltuKbazfL70GZEV0m1aZPq89O9Xez+rsJrzpc4iQVZ6PLv+TSoCvrb1TvfZIt9Pd+ojTIcgC0ZMQQcAgOHTrt9YyvfKCjHN4G233Vbp3I4O729+85vFVHOhHEwMfURWHgosEpL0CbJCOSj6q7/6q9owK9/vcUzKIWOMtDr77LOzm266acXooragLD3msdwHHnigMhIvjuOdd95Z/H1dyJSO1qp7P77jG9/4RjEqLJTPl75BVvn8inP1rrvuqoysiu3/zne+k1144YWzkWi5NIALTcuMv4/7jW3atKl1dNNqzpc6fYOs9PMhPl8+R9rko9RiP9SdQ+UpKvORfawN9RGmQ5AFI6agAwDA8GnXbzzpNHepM888MzvrrLNmj48dO7YikMiVO87LQUPXTvWvf/3rcz/bNMJoWdKp5xbpsO8bZIVYThoUxD6PgCgClPDTn/60cTRMBA35tHYhwpQIbo4fP54dOnSoCJniO+N5qrzcmN5wy5Yts8dvvvnmirCyaerDcoiSfke63hGWLWtEViifr/H9F1100WzbQ7r+ddte9/eXX375LBAM8fevv/76bJ3jvYMHD1aCsrDa86VOnyCrHMrFup533nnF8zoXXHDBilFo6TUV8mvwxIkTxSivXNN5wPKojzAdgiwYMQUdAACGT7t+Y6obPdMmOrz/8i//snYkTxpkdVUOOOqsdZCVhwht4UWbRYKsUL5XWZMIqu6///5ivepG05XFtjRNF1kOs+rE3z388MON+6IchKRi2V/5yleyH/7wh8Vnysd5kSArRBgVI67ygKxJBFnf+973KqMLu/59hDdxfOr232rPlzp9gqx0SsGuyt+ZLq9N+dxjbaiPMB2CLBgxBR0AAIZPu35ji3Akwo3/9t/+24pO8ujQ/4M/+INZWPOnf/qnlWAgN+Qg6+qrr54FeTFdXd0ItXkWDbJCjO6JwOi1115bESZG8BCjaG644YbafR5/9/jjj2e//OUvVwRK+eio8nRxZXG8IkRLlxvBTIxwimBpXrgYIhRKw6p8VFm+zmnYtawgK8S2xwihw4cPV87V888/f3Y82kZJ5dMHNv193EOrbftXe77U6RpkpdNS9lH3nfP247z9wPKojzAdgiwYMQUdAACGT7seAKrUR5gOQRaMmIIOAADDp10PAFXqI0yHIAtGTEEHAIDh064HgCr1EaZDkAUjpqADAMDwadcDQJX6CNMhyIIRU9ABAGD4tOsBoEp9hOkQZMGIKegAADB82vUAUKU+wnQIsmDEFHQAABg+7XoAqFIfYToEWTBiCjoAAAyfdj0AVKmPMB2CLBgxBR0AAIZPux4AqtRHmA5BFoyYgg4AAMOnXQ8AVeojTIcgC0ZMQQcAgOHTrgeAKvURpkOQBSOmoAMAwPBp1wNAlfoI0yHIghFT0AEAYPi06wGgSn2E6RBkwYgp6AAAMHza9QBQpT7CdAiyYMQUdAAAGL71aNf/5je/yT7ykY8Mf2cBMBnrUR+BjUGQBSOmoAMAwPCtZbs+Aqx9+/Zlhw8fzvbu3Vu8DgAb3VrWR2BjEWTBiCnoAAAwfGvRrs8DrL/+67/Ojh8/nv3O7/xO9o//+I/F+wCw0a1FfQQ2JkEWjJiCDgAAw7fMdn05wMp9+MMfzo4cOVI8B4CNbpn1EdjYBFkwYgo6AAAM3zLa9XmA9eSTT2YnTpwoXs+ddtpp2U9+8pPiOQBsdMuoj8AwCLJgxBR0AAAYvtW06+cFWDlBFgBDs5r6CAyLIAtGTEEHAIDhW6Rd3zXAygmyABiaReojMEyCLBgxBR0AAIavT7u+b4CVO+OMM7IXXniheA4AG12f+ggMmyALRkxBBwCA4evSrl80wMr93u/9XvYP//APxXMA2Oi61EdgHARZMGIKOgAADF9bu361AVbu4x//ePb3f//3xXMA2Oja6iMwLoIsGDEFHQAAhq+uXb+sACu3adOm7M///M+L5wCw0X3wi60rVlGQBeMlyIIRq/sPXgAAYFjK7frTPvvC0gIsABiqGzf/5xWrrt8LxkuQBSNW/g9eBR0AAIan3K7PPvlfsv3792fvvfde8RIATI0gC6ZDkAUjVv4PXkEWAAAMT127/oMPPpiFWQcOHMiOHj1avLeo3//938927NhRPAeAjc7UgjAdgiwYsbr/4AUAAIZlXrv+4MGD2Q9+8IPsZz/7WfFaX5/61Kdm0xUCwFDMq4/AeAiyYMQUdAAAGL6u7fojR47MRmj9+Mc/Ll7r6tOf/nS2d+/e4jkAbHRd6yMwfIIsGDEFHQAAhq9vu/6NN96YTTv4t3/7t8Vr8wiyABiavvURGC5BFoyYgg4AAMO3aLv+2LFjs0Ar/vfee+8Vr9cRZAEwNIvWR2B4BFkwYgo6AAAM32rb9R988MEszIppB48ePTp77UMf+lD229/+9uQnBFkADM9q6yMwHIIsGDEFHQAAhm+Z7fqDBw9mP/jBD7Kf/exnxWvhk5/8ZPY3f/M3xXMA2OiWWR+BjU2QBSOmoAMAwPCtRbv+yJEjsxFaP/7xj2fPTzvttOwnP/nJyXcBYONbi/oIbEyCLBgxBR0AAIZvLdv1b7zxxmzawV/84hfZvn37itcBYKNby/oIbCyCLBgxBR0AAIZPux4AqtRHmA5BFoyYgg4AAMOnXQ8AVeojTIcgC0ZMQQcAgOHTrgeAKvURpkOQBSOmoAMAwPBp1wNAlfoI0yHIghFT0AEAYPi06wGgSn2E6RBkwYgp6AAAMHza9QBQpT7CdAiyYMQUdAAAGD7tegCoUh9hOgRZMGIKOgAADJ92PQBUqY8wHYIsGDEFHQAAhk+7HgCq1EeYDkEWjJiCDgAAw6ddDwBV6iNMhyALRkxBBwCA4dOuB4Aq9RGmQ5AFI6agAwDA8GnXA0CV+gjTIciCEVPQAQBg+LTrAaBKfYTpEGTBiCnoAAAwfNr1AFClPsJ0CLJgxBR0AAAYPu16AKhSH2E6BFkwYgo6AAAMn3Y9AFSpjzAdgiwYMQUdAACGT7seAKrUR5gOQRaMmIIOAADDp10PAFXqI0yHIAtGTEEHAIDh064HgCr1EaZDkAUjpqADAMDwadcDQJX6CNMhyIIRU9ABAGD4tOsBoEp9hOkQZMGIKegAADB82vUAUKU+wnQIsmDEFHQAABg+7XoAqFIfYToEWTBiCjoAAAyfdj0AVKmPMB2CLBgxBR0AAIZPux4AqtRHmA5BFoyYgg4AAMOnXQ8AVeojTIcgC0ZMQQcAgOHTrgeAKvURpkOQBSOmoAMAwPBp1wNAlfoI0yHIghFT0AEAYPi06wGgSn2E6RBkwYgp6AAAMHza9QBQpT7CdAiyYMQUdAAAGD7tegCoUh9hOgRZMGIKOgAADJ92PQBUqY8wHYIsGDEFHQAAhk+7HgCq1EeYDkEWjJiCDgAAw6ddDwBV6iNMhyALRkxBBwCA4dOuB4Aq9RGmQ5AFI6agAwDA8GnXA0CV+gjTIciCEVPQ6eOll17Kbr/99tnjz3zmM9kTTzxx8p3pSffF9ddfn91xxx1L3QnPPvts9uSTT2Y///nPZ8/PPPPM7OKLL86+9a1vnfwEMARf+tKXiuv4u9/9bnbZZZcNYbVPmfy373Of+9yqflcfeuihbO/evbPHa/EbDRuRdj0AVKmPMB2CLBgxBZ0+BFkrXXLJJbP/v/XWW7Obb7755Kur97WvfS177rnniue5K6+8UpAFAyPI6u7dd9/Ntm7dWjyP38LrrruueN7HWIKs2CexD77whS/MDeOOHj2aPf7449mrr76avf3228Xr8Q9PLrjgguyGG27IzjnnnOL1OrG8PXv2ZIcPH658xxVXXJHt2LEj+9jHPla8zsaiXQ8AVeojTIcgC0ZMQaePIQZZMRIiOvbOPvvsuZ2AfeUd1PkoixhJ8IlPfGLW4beoxx57LHvkkUeK5xFexbq/88472TXXXGM0BwyMIKu7CGK2b99ePF/NPxIYQ5AV+yPqVgRK80aV7d+/P/vOd76Tvf/++8VrddrCwahnt9xyS+t3xOjgBx98cFV1jrWjXQ8AVeojTIcgC0ZMQaePoQVZaSg0rxOwq2uvvTY7//zzs9tuuy176qmnZlNXvfLKK8U8HU3jAAAgAElEQVQoqtWOmtq8eXPRiXjfffdlV1111cl3gCESZPVz7733Zs8888wsKHn44YcXHv0z9CCrHCq11bD4bJxnqXPPPTc744wzshMnTqwYWRWaaksEZzt37iyWmYdVx44dy37961/PHofTTz8927dv39zRXaw/7XoAqFIfYToEWTBiCjp9DC3IWnZHZvp9ITr5opMw5B2F0cH34osvzh73le7f1QZiwMYgyDo1lv37v57KtSa0bUOMBt61a9fscdSl3bt3rwiZ0pFdIUZVHTp06OS7K8U/AHnzzTezu+66a0WIGMu45557ipDr0ksvXTF6mI1Bux4AqtRHmA5BFoyYgk4fUw+yojMwRgj80z/902x//OpXv1oxBVOEWJdffnmlA7CrtPOybfonYDgEWafGEIOsqLHf/va3KyOoQluQFeJvo340hUtp/Q5PPPFE7+kBywFbjEZmY9GuB4Aq9RGmQ5AFI6ag08fUg6xcHmjFVIL5qKyvfvWrq75/VdpJ2DT1EzAsgqxTY2hBVtzjKh2FG6OmQj6l37wgq4tLLrmkeJzf27GP8hSGi3wHa0u7HgCq1EeYDkEWjJiCPlzR6fXDH/5w1rEUYjTQeeedl11xxRXZn/7pn7beuyICqbgHyWuvvVZ0kkWn2cUXX5xdc801jR1TiwRZiy4r9e6772YHDhzIXnjhhRWjoOIeIH/0R3+U3XDDDSu2t/yvxpss8q/JY3vuvPPO2TrE9H9xr6zt27fP3ovtufvuu09+sru0c7FO3b5O/ybfjtjuw4cPF/+aP/bP97///crosNiG2D+vv/56sS+7HJO8Qz7vUI3jElNYpcc2lrlly5bspptuKpZbd67GyLXYd23n6Tx152PdOjVN07iaczMPM8vbHvdPi+W1hZCL7v8+HfN150euLliJacOefPLJ4vVYn2984xu16xLH80c/+lH21ltvLbTfHn/88ezVV19dMR3nRRddlH3+859vHYUYx3bPnj0rzvFY7ic/+cnZ31599dWVc71NGhzEsYt73jWJfR/TrTWNdgnp9G7pOVfe35/97Gcr21F33TRJfw/z7w1xDcTv/44dOxq/o7wufY79apY7T3otp8rnblndtZSvz/HjxztfLxtBfn3H9RD7MtY3PV7L2IbVBlkh/Y5FRnWxtrTrAaBKfYTpEGTBiCnow5R2bjWp6wDMO/ljJFGb6JiKTvpyp2RdcNBktcvKxf06otM3ncKvThoirWWQde+9987Cj/D000/PgpiYBjC2Mzog9+3b1zucWW2Q9fzzz2c33nhjZTqqcoATx+TrX/969vLLLxev1Sn/XS4/72I7H3300eyWW25pPC7RGf7ggw9m999/f+O5Gt/zwAMPLNSZGsrnY2xb3TqVp2lc7blZvldMnbpO59Xu/7UKsuJ8Lu+LOH7le+jE/o6AIw+vmjTtt7iW24KgkJ838R2pCMC+/OUvty677jqZZ/PmzcVxzK/nOhGSxbLbPpP/DoR0RGW6v2+99dbW37Om8DkXxyAP0pvEdfWVr3ylNhRczbFfzXLnSa/lVPncTaX7e55518tGENf3T3/60xX3t1pmkFXex1E3ms6zJul3xPFe9H6QrB3tegCoUh9hOgRZMGIK+vCUQ5rovP3c5z43+9fn0akUna1NHbrXXnvtirAjbtZ+4YUXzh7HaIO0g72uQzXtxGpaRm61ywppaBSigzVGfZx99tmz5+mIhuggvvnmm2ePYz3j+6NTMO8EzPdTatFOweiQj/2d/30eUMQIo3IHfBdxTEPT+sb2ljuH06Ai9m1sb+yfL3zhC8W5UB5V0XZM0n0Z6sKUtFM1OjGjUzsfSZKef7n8M/H/MQIrtuOdd95Z0fkc7x08eLBy7LtIz8dYj/fee684/2PfxbJixFSMvEm/v20/zDs341hv27at6NCP9Y+QY9OmTSv+tm60Q9tyu+z/tQiy8nMn3Y5Ylzim6feno41CfD5GUdXtt/jOcmBVvpbz8ybEcTpy5MiKfRpBaXotpescYv/k51P+t/P2SZ00DEl/Q1LpyK22ZeShWKx/2sFfXvcQ12p8PvZ3et2Huv0Xyscg/Y66668c4IZlHPtFljtPBJX5iLi0vpXP3Vwcq/J1GqNzY53KvzGh7bhtFPHbUv4dXGaQlV6DTefYPOn1UvcbxamnXQ8AVeojTIcgC0ZMQR+etGOrruM1Oh3/1//6X5WOxLQTq66jOMT3piNayh1nXYOsZSyr3Hlafj+Xd4DWvden438j6LO+5VFc8zoV0+9uOiZph30ohzHlDvm6DuvyKIlyEBTKx77ue7oojzAI875rtedmuszo0C+HZPlor/KxWMb+X/T8KIcB5eNYd4xScY3t3Lmz2B/RCR4j7cqfj22P0Ubl6fHK13LdMYq/TUcVln9f0u2J18v7LvZNTKlafn2edN1iP9RNL5jurzh2aUiVS7+nfC2W93fd73b52JdHfpWPQXkZufT6i3Uth8Tldel77Bddbh9t524oX0t1o8DaruE+yvuri/J1uxrp8hfdhlAO4PuuY6xDTAm6rGPM2tGuB4Aq9RGmQ5AFI6agD0/asdW1Myo6I/P7ODV1oufiu2MZodxp2yXIWtay8qm8wqL3nurT8b8R9FnftLM3ApXyVGCpcidmOu1ZWboO5WOcnnt1nfEhlrV169bieblDPpcGSk2d4/OUg6x537OMc7PLNVC2rP2/6PlRDgPS4xiajlEuDSmawp426bVcF2LlYj/Fe/ln08CqbXtWq216wfScydVtQzpCqBy0dbluQvod5c+lx2Deed72Pas59qtZbh9tx7p8PLpeS/Oulybl/dVF17rcRbr8RbchpL+35d+VNuXf2BD1pm76TzYG7XoAqFIfYToEWTBiCvrwpJ2FXacHSjuxuoRCaedZ2inXpRN/GctKRzdEiLDov/xeRkfmeuqzvmlnb13Heiod7TEv9Cp3FKf3Uak7VnXaOqJz6TFuOpfmKXeyzuuUX8a5Gc/j9Vw5tKizrP2/6PlRPgbpds0LJ8rBZNtxr9NlxFOqaRvTsGk1IUmd9Lwof3f6XvwWxTqUz9d0H9Ud37rzqE56D7F028vHYN69jdp+p1dz7Fez3D7azt0+gUzTudRH7KsY4dzHZz/72db91Ed6vFazDelvVts5WFb+jY1rIEZcLvP6Y7m06wGgSn2E6RBkwYgp6MNT7liKzry//Mu/bO2Y6tqRmks7ANOO3S4dlctYVvravM7WNsvoyFxPfdY37exddoCTjqBJj2HXY9vWEZ3rci7Nk35HXYBQ1nX9c3XnZki/Jzp2d+zYUZlOL7Ws/b/o+VE+Bun6zwtB++7jsj7rHNLlpUF9+j0hfhfinnRt531XsS9in4Ry2JYHaHGOxn3X8nWI8zVeC2lQWXd8u553TddE0+tt8uOfjiYMix771S63j7ZzN73PXNtorND33NuI0uO16Dak+6zu/GwTy45pRI8dO7biPmjzpqTk1NGuB4Aq9RGmQ5AFI6agD1P5fiohOpm//OUv13ZMph2DfaWdZ106NpexrGV03oWhdWT2Wd+2zt6yvvuzqbO7a4d8l3Xrci7N0/c7lnFuhhipkt7PKdcUrixr/y/r/Oh6HEO6zC77uCxdVl/l5aXT3OXiM/OC/C7S8DAPhtPf2Vh2fCYfoZQG7Oko2VjfWKdU1/3ddD6XQ7y+0uPfdV3CMpfbR9u5m743L8Dvc71sVH1/O8rSfbCa0c0hzs9vf/vbxe+eMGtj0q4HgCr1EaZDkAUjpqAPV3Qq/cf/+B8rncTRuRQjQNLO1NV04Kcd6U0drallLGu1nXe5oXVk9lnfts7esr77s+nzXTvBu6xbl3Npnr7fsYxzMxdh1p49e7IDBw4UU97lyvu4aX82afr8ss6PrscxpMvsso/L0mX1VTcaM8Kl733veytGh4QYvRUjRxbtpK+bXjAfyZKOREvDtJhqL6ady6eCLI/mynXd303nc3oM+iqPouu6LmGZy+2j7dxte6+sz/XSZJHzd95+7aPpt6CL+Lv4+9y8EWxdxO9e/A7m11/fdWLtadcDQJX6CNMhyIIRU9CHry7Qin95vW/fvuJfq6edf9FJ++lPf7p4Pk96v4+mjtbUMpa1ms671DI6MtdTn/Xt06Hbd3+mn08DnPT1ts7aLuvW5Vyap+93LOPcLGsKtNIpvJa1/5d1fnQ9jiFdZpd9XJYuK4Kp2C9dfeITn2gccVMXaDUFSV3EOsa6hvwfA+TP032dfi7OoZBPf5gHYGVd93fT+Zweg1i3r371q7PHXfzu7/7u7LtyXdclLHO5fbSdu23vlfW5Xpqk+6urefu1j3T5fbchnVKw6/00uyifF4tec6wN7XoAqFIfYToEWTBiCvp4RCfonXfeWXSmp6MZ0g6t1XSyNXW0ppaxrL73FGqyjI7M9dRnfft06Kb7c973hvy+QCE9hl07wbusW5dzaZ6+37GMc7NJBFq7d+9eMfVdPvXZsvb/ss6PrscxPPvss9muXbtmjxfptO677X099thjKzroyyPn+kjPjzif8n0UI6/SEDPffzHq6KMf/WjxN01T3XXd303nc3oMupznbbquS1jmcvtoO3fT9+atf5/rpUnsqxh110dT6L2IRYOsdNvL/7BltdLzNJSPEaeWdj0AVKmPMB2CLBgxBX1c0nu6NE2HtZpgqKmjNbWMZTVtR1/L6MhcT33Wt62ztyzdn/PCiOg0jc7TXNqJ37UTvMu6dTmX5un7Hcs4N+dJ77WUhyrL2v/LOj+6Hsdw9OjRYuq80BTWNOmz7YtKj2vddIRdlUOxUPd96Tbl2rat6/5uOp/Lx6AcrPXRdV3CMpfbR9u5m4aN866BPtfLRpUer67bUP4NaRopuKjydVI+Rpxa2vUAUKU+wnQIsmDEFPRxafqX0unrq/nX2WkHWXzPiy++ePKd/2sZy4rRLdu2bStGpSzaEZd2ZK5VcLFMfTpe2zp7y2J/bt26tXje1oEd+/rll1+ePS5PR9W1E7zLujV12vfR9zuWcW7OU9fxvKz9n3Ygl99LlYOW8jHoehxz6efbllunfC0v4z49Zel10+U8aFIObkJ8V3xnWRpYhraRYF33d9v5nH7Han7Luq5LblnL7aPt9yO9BuIaPnjwYGO41uf3dKNK93/XbSiPLOx7PcR10Pa7mK7TIt/P2tKuB4Aq9RGmQ5AFI6agD090MkVnVtyvpNwJmXbclUcIpB3k8V5M+VXXQRudqfEd999/f20HYdrJ2BQwLWNZ6baEpmXF/rjrrrtm07qVO9/SDv15nZ4bQZ+O17bO3jrpFG9xTGJZ5f1V/pf25Y7urp3gXdatrdO+q0W+YxnnZoQWZ599dnbTTTeteK8ttFnG/o99H8cgV34/xHfEPbvydQjlY9D1OObS/RxilFJcc+X9Etv/ne98J7vwwgtXhDrl8OGv/uqvasOsuJa/+c1vZrfddlvlmMS1/KMf/Sj7D//hP1T22zLDlq4hQPn3qW20Utf93XY+l4990+9DHIM4/ps2bar9vey6LrllLbePtt+P8jXWdC3F52688cbOo7c2qvR4ddmG8nkZ51D5WmqTh7mxrLrft6iz6fSpbQEup4Z2PQBUqY8wHYIsGDEFfXjSDvGYdi/upxOdhz/96U+LDq9Q7mAqd+yF6ATcsmXL7PHx48ezV199dW7HXzqNV4gRGvHZtEN0rZYV23vxxRfPQoRw+PDh4jvqpgArd3pGJ3qMpIj99c4772T/9E//1NhRfSqsZZBVd0zi2EXoENJ9GeoCga6d4F3Wra3TvqtFvqNuP/Q5N+Pv09FV+T6Mv4spMPNzrTwlZt1y++7/kB6DkC4/X+84z5cZZIXyKK9YxkUXXVSs/5tvvlkEhOVtD3XXcv7bFdLfr7pjmQZM6fH6u7/7uxUjo/pOfViWbmf5NzSV/rbMG6XWdX/PO5/rjsHll19e/B7GMXj99ddn69QU3Hddl9QyltvHvN+P8vqE2F+f+9znZo/jtz0910L5Oh6KPkFWfC4+n4tjcd555xXP61xwwQUrfmfKvy95CHbixIkVv08hrsOm6TQ5dbTrAaBKfYTpEGTBiCnow5N26DapC3VCdL7GaIe0o6pJU6dZXYd83WeXsayQBndt6jp+Q3QO33nnnSs69lN1HaWnyloGWaHu2NXpEqK0dYJ3Wbd5nfZdLPodqzk3n3322WzXrl3F8zrRgfzoo48WncC51e7/ECMmvvzlL68Ib1IRED344IMrOrTLx6DrcSyLACFGXDVdS7lYh+9973uVQKnrtRzBUDoSLvZbGh42aQueusqXVRfGleXh3Lzldt3fXc7nrscgQoa60YZd16Vstcvto8vvR12YVRbrkl9r5et4KNLjNW8burQNysrnWXlEV5PyNcrGoV0PAFXqI0yHIAtGTEEfpujEi2m23nrrraJDOzrPY4REdHbN65yMDtPorMr/FX3I//X2FVdcke3YsaO1gyo6ew8cOJC98MILs062tg621S4rxDIef/zx7LXXXlvRgR+dcPEvyiO4a9vm+PuHH364GDESopPzD/7gDzZUZ9xaB1m5/PxJj0l03Mdotwh4ygFErmsneJd169JpP89qv2PRczPCpDgff/nLXxb7I+QjhcpTcpUtuv9zcf3FNG7pKK5Y9r/+1/+6WOe2Y9D1ONaJbY9RGOURZLH8888/f7bctlAn/j6uxaZr+YYbbqjd/vQ351e/+tVC+62rmH4yRpq1XX8htmXnzp1zRyB13d9dz+e64x/yYxBBaNMyuq5LndUst4+2czdVdy7l50OsS/zed/093ai6BlnlaUm7qjvP5l3jyzrOrA3tegCoUh9hOgRZMGIKOgAADJ92PQBUqY8wHYIsGDEFHQAAhk+7HgCq1EeYDkEWjJiCDgAAw6ddDwBV6iNMhyALRkxBBwCA4dOuB4Aq9RGmQ5AFI6agAwDA8GnXA0CV+gjTIciCEVPQAQBg+LTrAaBKfYTpEGTBiCnoAAAwfNr1AFClPsJ0CLJgxBR0AAAYPu16AKhSH2E6BFkwYgo6AAAMn3Y9AFSpjzAdgiwYMQUdAACGT7seAKrUR5gOQRaMmIIOAADDp10PAFXqI0yHIAtGTEEHAIDh064HgCr1EaZDkAUjpqADAMDwadcDQJX6CNMhyIIRU9ABAGD4tOsBoEp9hOkQZMGIrUdB/81vfpN95CMfGfFeBACAU2s92vUAMDTqI0yHIAtGbC0LegRY+/btyw4fPpzt3bu3eB0AAFiutWzXA8BQqY8wHYIsGLG1KOh5gPXXf/3X2fHjx7Pf+Z3fyf7xH/+xeB8AAFiutWjXA8DQqY8wHYIsGLFlFvRygJX78Ic/nB05cqR4DgAALNcy2/UAMBbqI0yHIAtGbBkFPQ+wnnzyyezEiRPF67nTTjst+8lPflI8BwAAlmsZ7XoAGBv1EaZDkAUjtpqCPi/AygmyAABgba2mXQ8AY6U+wnQIsmDEFinoXQOsnCALAADW1iLtegAYO/URpkOQBSPWp6D3DbByZ5xxRvbCCy8UzwEAgOXq064HgKlQH2E6BFkwYl0K+qIBVu73fu/3sn/4h38ongMAAMvVpV0PAFOjPsJ0CLJgxNoK+moDrNzHP/7x7O///u+L5wAAwHK1tesBYKrUR5gOQRaMWF1BX1aAldu0aVP253/+58VzAABguT74xdbicRBkAYB/6AFTIsiCESsHWad99oWlBVgAAMD6uHHzf16xIEEWAAiyYEoEWTBi5SAr++R/yfbv35+99957xUsAAMDGJsgCgKpyv5d/6AHjJciCEasr6B988MEszDpw4EB29OjR4r1F/f7v/362Y8eO4jkAALBcphYEgKq6fi9gnARZMGLzCvrBgwezH/zgB9nPfvaz4rW+PvWpT82mKwQAANbGvHY9AEyR+gjTIciCEeta0I8cOTIbofXjH/+4eK2rT3/609nevXuL5wAAwHJ1bdcDwJSojzAdgiwYsb4F/Y033phNO/i3f/u3xWvzCLIAAGBt9W3XA8AUqI8wHYIsGLFFC/qxY8dmgVb877333iteryPIAgCAtbVoux4Axkx9hOkQZMGIrbagf/DBB7MwK6YdPHr06Oy1D33oQ9lvf/vbk58QZAEAwFpbbbseAMZIfYTpEGTBiC2zoB88eDD7wQ9+kP3sZz8rXguf/OQns7/5m78pngMAAMu1zHY9AIyF+gjTIciCEVuLgn7kyJHZCK0f//jHs+ennXZa9pOf/OTkuwAAwLKtRbseAIZOfYTpEGTBiK1lQX/jjTdm0w7+4he/yPbt21e8DgAALNdatusBYKjUR5gOQRaMmIIOAADDp10PAFXqI0yHIAtGTEEHAIDh064HgCr1EaZDkAUjpqADAMDwadcDQJX6CNMhyIIRU9ABAGD4tOsBoEp9hOkQZMGIKegAADB82vUAUKU+wnQIsmDEFHQAABg+7XoAqFIfYToEWTBiCjoAAAyfdj0AVKmPMB2CLBgxBR0AAIZPux4AqtRHmA5BFoyYgg4AAMOnXQ8AVeojTIcgC0ZMQQcAgOHTrgeAKvURpkOQBSOmoAMAwPBp1wNAlfoI0yHIghFT0AEAYPi06wGgSn2E6RBkwYgp6AAAMHza9QBQpT7CdAiyYMQUdAAAGD7tegCoUh9hOgRZMGIKOgAADJ92PQBUqY8wHYIsGDEFHQAAhk+7HgCq1EeYDkEWjJiCDgAAw6ddDwBV6iNMhyALRkxBBwCA4dOuB4Aq9RGmQ5AFI6agAwDA8GnXA0CV+gjTIciCEVPQAQBg+LTrAaBKfYTpEGTBiCnoAAAwfNr1AFClPsJ0CLJgxBR0AAAYPu16AKhSH2E6BFkwYgo6AAAMn3Y9AFSpjzAdgiwYMQUdAACGT7seAKrUR5gOQRaMmIIOAADDp10PAFXqI0yHIAtGTEEHAIDh064HgCr1EaZDkAUjpqADAMDwadcDQJX6CNMhyIIRU9ABAGD4tOsBoEp9hOkQZMGIKegAADB82vUAUKU+wnQIsmDEFHQAABg+7XoAqFIfYToEWTBiCjoAAAyfdj0AVKmPMB2CLBgxBR0AAIZPux4AqtRHmA5BFoyYgg4AAMOnXQ8AVeojTIcgC0ZMQQcAgOHTrgeAKvURpkOQBSOmoAMAwPBp1wNAlfoI0yHIghFT0AEAYPi06wGgSn2E6RBkwYgp6AAAMHza9QBQpT7CdAiyYMQUdIDFvPvuu9mePXuyw4cPZ2+//fbstdNPPz276KKLsuuvvz677LLLTn4SANaedj0AVKmPMB2CLBgxBR2gv5///OfZLbfckr3//vvFa2VXXnll9q1vfat4DgBrSbseAKrUR5gOQRaMmIIO0E9diPWZz3xm9v/xXipGZt1xxx3FcwBYK9r1AFClPsJ0CLJgxBR0gH6+9KUvFYHVueeemz300EPZOeecM3se0w3u3r07e+6552bPw9NPP128DwBrRbseAKrUR5gOQRaMmIIO0N2zzz6b7dq1a/b4zDPPzPbv35997GMfO/nu/3X11Vdnv/71r2ePb7311uzmm28++Q4ArA3tegCoUh9hOgRZMGIKOkB3EUq9/PLLxeOmgCoCrvz+WDHt4BNPPHHyHQBYG9r1AFClPsJ0CLJgxBR0gO4uueSS4nHblIFHjx7Ntm/fXjx/5ZVXisddpVMYfve7380uu+yy2YiwJ598sng9RoV94xvfmL2XiuU//PDD2WuvvVaMDDv99NOziy66KPv85z+fXXfddSc/+X+lo8juu+++7Kqrrjr5zkoxfeK2bduyRx99tLg3WJ1rr702e/vtt2eP031Vt24xReP555+fXXnllY3LBaCddj0AVKmPMB2CLBgxBR2gm5deeim7/fbbZ48jFHrxxRdPvlOva+jVpBxkPfPMMyvuvRUiyDp06FDxPMQ9u/bu3Vs8rxPB0fe///0V0yI+9thj2SOPPDJ7HIFSPqKsLB9t1vaZNMiLZT311FOzxxHE3XPPPdn7778/e17n+uuvz+64447iOQDdaNcDQJX6CNMhyIIRU9ABuuk7XWA6wikfUdVHGmRdeumlsykNI0CL7920aVN2+PDhbMuWLStCn3vvvXcWeOUiRIrPhDfffLOYFjGUw6w0fGoL6vLtis8cPHiw9h5haSiWT8GYj+TKQ6x0W9J1W2RfAaCjDgDq6PeC6RBkwYgp6ADdpCOdugRZ5RFVfcOZ9O9DOXgqS0eMha997WuVKQTj+2655ZYiTCqPfkqnA6ybXrC8jKb7hNVNK5j+bYwki2Aw3ZYIunbv3t04yguAdtr1AFClPsJ0CLJgxBR0gG5OdZA1b3rCNPi65pprsrvvvvvkOyuVp0hMR1XNm14wwrF0esO6qQ1jHWJdQowky78vXW6XIBCAfrTrAaBKfYTpEGTBiCnoAN2cyiCrLlRKpdMChnmhVzrtYTryKkZFbd26dfa4PL1g+b18VFd5tFk6vWE6KiwNuEIEWRFoAbAc2vUAUKU+wnQIsmDEFHSAbk5lkFU3TWDq2WefzXbt2jV7HFMQPvXUUyffqZeOrCpPLxjTBeb3q0pDrnS0Vrx+zz33zMKsdNRVSEOy559/fsX0gemosQjDduzYkd10002N0yUC0J12PQBUqY8wHYIsGDEFHaCbvkFWep+o8qilLvrcY6vvuqWfL4/2intX5c/T9/KAKp9OMB15lY8Aa5pWMBejum688cZiv+RiObfddlvrKDIA2mnXA0CV+gjTIciCEVPQAbpJRz11CYsuueSS4vEi0+itV5BV3pbyFIIxvWC67fnosHQ6w/yeXOlIr3Q0Vyq+f8+ePdmBAweK6Qlz5dFhAHSnXQ8AVeojTIcgC0ZMQQfo5qWXXspuv/324vkrr7xSPC5Lw6DQ9tkm6xVklUdkhfL0gjHyKp5HsHXw4MFiKsD8c3ngtXnz5lk4Vb6/Vp2mQCsPxQDoR7seAEdL+TAAACAASURBVKrUR5gOQRaMmIIO0E05nMqn06uThl7lEU9d9Qmy+o4WS4OqulFQ5e/L16McMqXbGVMJ5t9ZF441if26e/fuYiRXaNu3ANTTrgeAKvURpkOQBSOmoAN0l98nKkQYdPPNN598Z6X0/lF1QVEXfYKsdJq/8PzzzxejpurkI6dC0xSA6WdydQFTuk9yTd/ZJv2efPpCALrTrgeAKvURpkOQBSOmoAN0l94D6swzz8z2799fCYwiVNq5c2cRAtWFP130CbLCtddem7399tuzx23h2WOPPZY98sgjs8dtUwCm2xpixFX+d6nYB+noq9gvhw4dKp53lW5v2/oDUE+7HgCq1EeYDkEWjJiCDtBdBC0RuORiCr277rqrCLMixIoAJg+U+kyxV9Y3yEqnA4yA6oEHHqj8TUwFeOeddxYhW1tglH5faFqHmBpw27ZtxXeWpx9MRTh29tlnZzfddNOKALD8HYuM6AKYOu16AKhSH2E6BFkwYgo6QD/ptIEhQqPzzjsvO3HiRBFg5a8fPHiwMmKrq75BViiPojr33HOzLVu2zB6/+eabxT2sQrz31FNPFc/r5NP9zRtl9dBDD2V79+6dPY77c8V9tcrK9xiLEV4XXnhhdvz48dl35yHWvGUBUE+7HgCq1EeYDkEWjJiCDtBfOTAqixDr0UcfrQ10ulokyArz1i3Eej388MNzQ7Y8tIvvbLtnVX6PrrYQqjzCq84y9hvAVGnXA0CV+gjTIciCEVPQARYT0/TFKKTXX3+9GE2Uj4AqT523iEWDrBDrFgHUa6+9NhtRFSIkuuiii2bTCXb9rlj+Lbfc0mlkWT5tYNNUhSECr8cffzz75S9/WWxbWOZ+A5gq7XoAqFIfYToEWTBiCjoAAAyfdj0AVKmPMB2CLBgxBR0AAIZPux4AqtRHmA5BFoyYgg4AAMOnXQ8AVeojTIcgC0ZMQQcAgOHTrgeAKvURpkOQBSOmoAMAwPBp1wNAlfoI0yHIghFT0AEAYPi06wGgSn2E6RBkwYgp6AAAMHza9QBQpT7CdAiyYMQUdAAAGD7tegCoUh9hOgRZMGIKOgAADJ92PQBUqY8wHYIsGDEFHQAAhk+7HgCq1EeYDkEWjJiCDgAAw6ddDwBV6iNMhyALRkxBBwCA4dOuB4Aq9RGmQ5AFI6agAwDA8GnXA0CV+gjTIciCEVPQAQBg+LTrAaBKfYTpEGTBiCnoAAAwfNr1AFClPsJ0CLJgxBR0AAAYPu16AKhSH2E6BFkwYgo6AACsn7/4i7/ILrzwwuy6667LPvWpTy1twdr1AFClPsJ0CLJgxBR0AABYP3/8x3+c/fM///NsgX/yJ3+S7dixI7v88stXvQLa9QBQpT7CdAiyYMQUdAAAWD//9t/+2+ytt95ascA//MM/zP7sz/4s27ZtW/FaX9r1AFClPsJ0CLJgxBR0AABYP9dff332i1/8oljghz70oey3v/3t7PE555wzG6EV0w5++MMfPvmJbrTrAaBKfYTpEGTBiCnoAACwfspBVp2PfvSjszAr/nfWWWcVr7fRrgeAKvURpkOQBSOmoAMAwPrpEmSl/s2/+TezQOtTn/pU8Vod7XoAqFIfYToEWTBiCjoAAKyfvkFW7k/+5E9m0w5efvnlxWsp7XoAqFIfYToEWTBiCjoAAKyfv/iLv8jeeOONhRf4h3/4h9mf/dmfZdu2bSteC9r1AFClPsJ0CLJgxMoF/cOffr54DAAALNeBAwey//E//kfxfFHnnHPObIRWTDv44Q9/uNKuv+3B/6d4DABTpT7CdAiyYMTKBf37L/674jEAALCxffSjH52FWdlb/++KFRVkAYARWTAlgiwYMUEWAAAM1xlnnDGbrvCf/78rVmyEIAsABFkwJYIsGLFykGVqQQAAWDv/6T/9p+z48ePF80XlAdbOnTuzj3zkI5V2vSALAARZMCWCLBgx/8ELAADr51/9q3+V/ff//t8XXmA5wMpp1wNAlfoI0yHIghFT0AEAYP38y3/5L7P/+T//Z+8FNgVYOe16AKhSH2E6BFkwYgo6AACsnyuuuCI7ceJE5wXOC7By2vUAUKU+wnQIsmDEFHQAAFg/f/zHf5z98z//89wFdg2wctr1AFClPsJ0CLJgxBR0AABYP/OCrL4BVk67HgCq1EeYDkEWjJiCDgAA66cpyFo0wMpp1wNAlfoI0yHIghFT0AEAYP1cfvnl2QcffFAscNOmTdm///f/fuEAK6ddDwBV6iNMhyALRkxBBwCA9fMv/sW/yP73//7fSwuwctr1AFClPsJ0CLJgxBR0AABYP9dff322ZcuWpQVYOe16AKhSH2E6BFkwYgo6AACsn9/85jdLDbBy2vUAUKU+wnQIsmDEFHQAABg+7XoAqFIfYToEWTBiCjoAAAyfdj0AVKmPMB2CLBgxBR0AAIZPux4AqtRHmA5BFoyYgg4AAMOnXQ8AVeojTIcgC0ZMQQcAgOHTrgeAKvURpkOQBSOmoAMAwPBp1wNAlfoI0yHIghFT0AEAYPi06wGgSn2E6RBkwYgp6AAAMHza9QBQpT7CdAiyYMQUdAAAGD7tegCoUh9hOgRZMGIKOgAADJ92PQBUqY8wHYIsGDEFHQAAhk+7HgCq1EeYDkEWjJiCDgAAw6ddDwBV6iNMhyALRkxBBwCA4dOuB4Aq9RGmQ5AFI6agAwDA8GnXA0CV+gjTIciCEVPQAQBg+LTrAaBKfYTpEGTBiCnoAAAwfNr1AFClPsJ0CLJgxBR0AAAYPu16AKhSH2E6BFkwYgo6AAAMn3Y9AFSpjzAdgiwYMQUdAACGT7seAKrUR5gOQRaMmIIOAADDp10PAFXqI0yHIAtGTEEHAIDh064HgCr1EaZDkAUjpqADAMDwadcDQJX6CNMhyIIRU9ABAGD4tOsBoEp9hOkQZMGIKegAADB82vUAUKU+wnQIsmDEFHQAABg+7XoAqFIfYToEWTBiCjoAAAyfdj0AVKmPMB2CLBgxBR0AAIZPux4AqtRHmA5BFoyYgg4AAMOnXQ8AVeojTIcgC0ZMQQcAgOHTrgeAKvURpkOQBSOmoAMAwPBp1wNAlfoI0yHIghFT0AEAYPi06wGgSn2E6RBkwYgp6AAAMHza9QBQpT7CdAiyYMQUdAAAGD7tegCoUh9hOgRZMGIKOgAADJ92PQBUqY8wHYIsGDEFHQAAhk+7nil49tlnsyeffDL73Oc+l91xxx0rNvmll17Kbr/99tnjz3zmM9kTTzxx8h3YmJyz60N9hOkQZMGIKegAADB82vWn1mOPPZY98sgj2SuvvNK6ItFxvXfv3uz111/P3n///dlr5557brZly5bspptuyj72sY+d/GR/7777bnbddddlX/jCFyohz6mUdtb3le7P2L6tW7cWz7/2ta/NtjcnFDg1vvSlL2U///nPey/8+uuv31Dn6angnF0f6iNMhyALRkxBBwCA4dOuP3VilNCuXbtmK9AWZEXw8txzzxXPy04//fTs0UcfnY0mWsS1116bvf322xsuIFhWkHX06NFs+/btxfNbb701u/nmm4vnQoH5Igw8dOhQ9r3vfW/2/8sgyFqcc3Z9qI8wHYIsGDEFHQAAhk+7/tSIkSi33HJLMbqqKcgqh1hnnnlmdtZZZ2XHjh3Lfv3rXxevR5h18ODB3iOz0u/faCNdykFWn6CuPD3gvffemz3zzDOz73j44YdX7CehwHybN2+ee672lQZZ+XndxRe/+MUVI+qmyDm7PtRHmA5BFoyYgg4AAMOnXb/+8qn80iCqLhwoBzl1I4nuvPPOImC48sors29961sn350vn9Ywt9GDrLp9tAxCgfkuueSS4vGyjkMaZG20c2+jc86uD/URpkOQBSOmoAMAwPBp16+/uinV6sKBfMq/UA6xcvv37y/CqxiV9eKLL558p105JAsbLUwor2PdPloGocB8gqyNxTm7PtRHmA5BFoyYgg4AAMOnXb++ylMF5sohTQRdEXiFeQHV1VdfXYzu+u53v5tddtllJ9+pV57WMCfI+j/TF5anJUSQtdEIstaH+gjTIciCEVPQAQBg+LTr1086eurSSy/NXn755WLh5SDroYceyvbu3Tt7PG/KwD73uYppDW+88cZipFe6HvP+dr2tdkRW+e9z5e9ZJBSIv4l7br322mtFiBj3ebr44ouza665Zm6YOE8+AiqObUxDefTo0dm9vdLlnXvuudmWLVuym266ae690er+PgLSiy66KPv85z/feM+pdCRWk0XPm2VOLRjn9Z49e7LDhw8X53aI43nFFVdkO3bsaNxHXUebpddkeX3z9+IcOHTo0Oy1uN5/+MMfFtuY7+/42y7nR90xi2P+R3/0R7PrdteuXbPXup6z9Kc+wnQIsmDEFHQAABg+7fr1kY6wis7o73//+9nWrVuLhZc70NNO/qZpBXN9Qq/4rjy4ipDknXfeaeycP9XKQVR5H81T/vtc+Xv6BFkRmOzevbt2VF0qvidCiKbwZJ48XInA4rbbbqsdQZfLz6emZaXnR5Om7xhCkPXss89m99xzT+P+CREiPfroo7PjUrbMICvE+fP444+3niN5QNkkDb3nmXfOsjj1EaZDkAUjpqADAMDwadevvRhZsXPnzllHe3SoHzx4cBYYtHWg95kuMO30buvUvvfee2ejiELeEd/WOX+qlYOo8j6aJ/b7U089NXucBjnl7+kTZKX3LQsRNF144YWzx2+++eaKUXZN4VAX6bkRo3ziXMhHYIXyyKOmY5ce85B+R5f1jfMjpPsvlpWKfdB2fjZZxoisCLHykUkh9tXmzZuzTZs2zULaI0eOFAFXU5jVdh2m2q6V9L38eMXyLr/88uzss8+uXZf8d6Dsscceyx555JHieT7SL77n+PHjsxFfaWg375xlceojTIcgC0ZMQQcAgOHTrl9b6VR+5Y70tg709L15QVaXICYNu9JRW22d86daOciap7wPU237usv+C2koVD6WufL9xxbdp+n6xrIeeOCByjmQBh7xmfJ91Mr7r24UUNf1bdt/i0qDrHnq1iuurW3bthXrXjcasTyVZt3x7bptbddK+l6IdbnrrrtWBFWxLrH/84C6bqRl+ZjFNJV333138Tx02SaWQ32E6RBkwYgp6AAAMHza9WurPJVfGiS0daAvM8iqm9Yw72Bv65w/1cqd+vOU92GqbV/P238hRndt37599rgpxMql+7suYOoiXd9Yn6ZlxeijPMgpfy4NiuoCkVy6/bG+dSOF2vbfolYbZKXnbpzX+ei7snLgVb6eum5b27WSvhcj1NIRVak0fKz7XDoSs+sxazpnWT31EaZDkAUjpqADAMDwadevnbRzu270RVsH+rKCrLQTP6Yoi5FZ5anjmjrnT7VykNUU5uTaOvPb9nXb/sul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" />

In addition, you can add new kinds of comment blocks, here's how you would
add comment blocks for [Nim](https://nim-lang.org/)

```bash
$ trbldoc -s src -f 'nim;#[;#]'
```

If you wanted to cite the [Nim standard library](https://nim-lang.org/docs/lib.html) in your comments like

```nim
#[ md
This function uses @nim/ropes under the hood...
#]
```

You need a way to turn `ropes` into the nim link, `https://nim-lang.org/docs/ropes.html`.
You might chose to use `sed`:

```bash
$ trbldoc -s src -f 'nim;#[;#]' -R 'nim=sed;-e s|^|https://nim-lang.org/docs/|g -e s|$|.html|g'
```

As your prefix to link resolution gets more complex, you may chose to use a
simple bash program to generate links. You may also chose to call `trbldoc`
from a bash script or makefile.

### Markdown (`.md`)

The whole file is treated as a single chunk and rendered with `md`.

---

Single-line comments (`/* ... */`, `--[[ ]]`, `''' '''`) on one line are
intentionally ignored, trbldoc only extracts multiline blocks.

Comment blocks that do not specify a program on it's first line are likewise ignored.

## In-chunk directives

Directives are lines inside a doc comment that control how the chunk is
processed. They are stripped before rendering.

| Directive | Effect |
|-----------|--------|
| `@name <name/space>` | Group this chunk under `<namespace>` using slash-separated paths (e.g. `lua/string`). Defaults to the relative source file path. Use slashes (`/`) as the separator. |
| `@priority <number>` | Controls chunk ordering when rendering pages. Higher values are rendered first. Falls back to alphabetical `@name` ordering. |
| `@exec <program>` | Override the program used to turn text into html for this chunk. |
| `@file <path>:<line>` | Override the displayed source file attribution. Useful if the file seen by `trbldoc` has been built from some other source file. |
| `@ref <name>` | Publish this chunk under a custom reference name for cross-linking. (e.g. if you want to shorten a long name like `@interface/composites/menus/dropdown` to just `@ui/dropdown`) |

## Template variables

The following `{{ }}` markers are expanded in chunk bodies before the renderer
runs (or, for `toc`, in a post-render pass):

| Variable | Expands to |
|----------|------------|
| `{{ src_repo }}` | Source repository URL (`TRBLDOC_SRC_REPO` env var or `git remote get-url origin`). |
| `{{ ref_string }}` | HTML link for this chunk's `@ref` value, resolved from the built-in references map. |
| `{{ toc }}` | Navigation list (`nav.partial` content) - substituted after all chunks are rendered. |
| `@prefix/path/to/resolve` | Create a link to another document in this or another project. |

The default page layout (`main.layout`) also supports:

| Variable | Expands to |
|----------|------------|
| `{{ title }}` | page title in `<title>`. |
| `{{ breadcrumb }}` | heading text for the current page. |
| `{{ nav }}` | navigation list. |
| `{{ yield }}` | rendered page body. |

Example:

```c
/* md
@name http/api/public/connect
@ref db/connect

Establishes a database connection.
*/
```

## Pipeline overview

`trbldoc` has several steps, in each step multiple actions are done in parallel,
as your `xargs` allows.

1. Finds all source files under the input folders whose extension has
   a registered comment form (`c`, `h`, `cpp`, `hpp`, `lua`, `py`, `sql`,
   `md`, `dot`, plus any `-f` additions).
2. Run each file through an AWK program that emits chunk files
   into `.trblcache/chunks/`.
3. For each chunk, strip directives, run the renderer, and append
   output to `.trblcache/namespace/<namespace>/index.html`.
4. Write `main.layout`, `nav.partial`, `global.meta`, and CSS
   into `.trblcache/namespace/`.
5. Apply the layout/template tokens to each namespace page and
   write the final site to `-o <dest>` (default `.trblcache/built`).

Chunk files in `.trblcache/chunks/` and last-processed timestamps in
`.trblcache/last_processed/` persist between runs. Only source files that have
changed since the last run are re-extracted. Use `-C` to force a full rebuild.
Rendered output (`index.html`, `nav.partial`, etc.) are always regenerated from
all chunks on every run. See [docs/trblcache](./docs/trblcache.md)
for why they have to be.

## Tests

The test suite uses [bats-core](https://github.com/bats-core/bats-core) ≥ 1.5.

```bash
npm install -g bats        # or: brew install bats-core
bats tests/unit tests/integration
```

Tests are organised as:

- `tests/unit/extraction.bats` AWK comment extraction per language
- `tests/unit/directives.bats` directive parsing and stripping
- `tests/unit/template_vars.bats` template variable pattern matching
- `tests/integration/pipeline.bats` end-to-end pipeline assertions
- `tests/integration/cli.bats` CLI option parsing

## Repository layout

```
trbldoc.sh             Main pipeline script
ref_resolvers/lua.sh   Reference Lua API prefix resolver
tests/
  helpers/             Shared test helpers, stubs, AWK program builders
    common.bash        Common test helpers
    profiler.bash      Helpers for profileing
  fixtures/            Small files used as test inputs
  unit/                Unit tests
  integration/         Integration tests
```