final lessons

This commit is contained in:
2026-06-07 10:44:05 +02:00
parent ceea2f206a
commit 39ec1bac72
105 changed files with 7789 additions and 1515 deletions

View File

@@ -0,0 +1,92 @@
# Les 7 — Huiswerk
## Supabase verkennen
**Deadline:** Voor Les 8
**Inleveren:** GitHub repo via Teams
---
## Opdracht 1 — Pak Supabase Dashboard erbij
Klik door deze tabs in je Supabase project:
- **Table Editor** — visueel polls en options
- **SQL Editor** — query historie
- **Database → Tables** — schema diagram
- **Authentication** — preview (komt in Les 9)
- **Settings → API** — keys
- **Settings → Database** — connection string
Maak in `SUPABASE.md` een korte lijst van wat elke tab doet (2 zinnen per tab).
---
## Opdracht 2 — Voeg eigen polls toe via SQL
Niet via Dashboard knopjes — via SQL Editor. Schrijf 3 INSERT statements voor eigen polls (met opties).
```sql
insert into polls (title) values ('Jouw vraag hier');
-- Vervolgens 3-4 opties voor die poll
```
Hint: gebruik `returning id` om de nieuwe poll-id te krijgen.
Plak je SQL in `SUPABASE.md`.
---
## Opdracht 3 — Query een aggregate
Bedenk een query die iets niet-triviaals doet. Voorbeelden:
- Totaal aantal opties per poll
- Polls van vandaag (`where created_at > now() - interval '1 day'`)
- Top 3 polls met meeste opties
Plak query + screenshot van resultaat in `SUPABASE.md`.
---
## Opdracht 4 — Bonus: Type generation
Genereer TypeScript types vanuit je Supabase schema:
```bash
pnpm add -D supabase
pnpm dlx supabase login
pnpm dlx supabase link --project-ref <jouw-project-id>
pnpm dlx supabase gen types typescript --linked > types/database.ts
```
Gebruik types in je code:
```typescript
import type { Database } from "@/types/database";
import { createClient } from "@supabase/supabase-js";
export const supabase = createClient<Database>(...);
```
Voordeel: autocomplete + type-safe queries.
---
## Opdracht 5 — Reflectie (200 woorden)
In `REFLECTIE.md`:
- Wat snap je nu beter over relaties tussen tabellen?
- Waar zit het verschil tussen Postgres en wat je eerder kende (Excel, MongoDB, ...)?
- Welk onderdeel van Supabase zou je willen uitproberen?
---
## Inleveren
GitHub repo URL via Teams. Werkende app + SUPABASE.md + REFLECTIE.md.
---
## Tips
- **Eerst SQL begrijpen** — Postgres is een vaardigheid die jaren meegaat
- **Type generation** scheelt veel bugs later — bonus aanrader
- **Tijd:** ~2 uur

View File

@@ -0,0 +1,105 @@
%PDF-1.4
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 5 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/BaseFont /Symbol /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
5 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
6 0 obj
<<
/Contents 11 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 10 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
7 0 obj
<<
/Contents 12 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 10 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
8 0 obj
<<
/PageMode /UseNone /Pages 10 0 R /Type /Catalog
>>
endobj
9 0 obj
<<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607080655+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607080655+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Huiswerk) /Trapped /False
>>
endobj
10 0 obj
<<
/Count 2 /Kids [ 6 0 R 7 0 R ] /Type /Pages
>>
endobj
11 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1991
>>
stream
GauHL8U&oK%)2%/i)ZcEKdE^P<9KK(Bp4r[S()=N^;q(*/!_JOMt>Y05G32gbI!9#]MKl(%g5(HA3f\(MYHW\i8"CiHsj`L%))hML]rE,E&02>%Dj,<//sBoWTeFGY,VFDR2?Og%WPbA16>HH.4h\K,>u)c33EpH#tPbXIr-k^_P';"5U<ZVl"mF[M8M?R[YX<1meZe&5,leJM,RQ4AsWHF$tldO<$Tr##\CHK@5*Jnk:_m?E#VSP3hF?2#iDpUNMdX&3>ZXW#M3^i_K_c;$Q)"Bi3cV4&Sa=b3.d#fTso</^8PRC9"F[C60&(489dB9efl)?g#\T[#hLu^om?XQ34NjD=Mc\]8g2+p0&b=-:HHdEUrhBK%ZHD0#@f*S[a"HuG0D,,?nO:a(j!l'NO!/,Cig_R7]!1(Trg0*.N9<@bm<jQRU:L,;%,HpC>c6--7(S_43,DrM\qT?NF.I3Rjc]!ZAY7]67'$NMk.K1X@?>KU9QXA)XP]SD5GW\g&K'pL"XCV9X5G$7C^TI9T;*.oW&Du2]kkOUN6M>Mc\$JM-Weg-;8</5SGR]D@sLQ<!o?.gcCBq6bd"3<\T-9=0,&"cEmU#[@]+bOd@P"U-'/Z.QWq+-q@tA^hi40B[YOVBJ\W#TZ,q03*JTU$[KWlom-tB/=3%"jo6f+?kd==[J)-o"mtt(^"M-TUUsR;(c3/sZ*N&_liD-%'TB^:5/_a-HW^nMktYe,#P9PQn+.gLe&*So'u,K4#@23aJ"HPtE2"O`6)]f0E#&Eoqm)1Z-=G_\rH>lJmU8h,'=G9.,t_VJY=3:i_(qJdS)s,)7iZn*;I.-ZX,C1o3O0(cG6gT3W!,A'!Eha)h:ZcSoWFJBLI%_.LUR3G_.+H4;#6r5<X\-I73V)>U8#n4++ro<+!DFP@TWgU%$W^.*QK`9`ehLZ\'o,YE1.)[Ru\<^:(p/eLVV)-rj)#,:R?<,QfhM`gXfam*Q;@EK1\VLdp^]WgKLlKUj2ba$teF5:]'FTK$511&4H#`>([S^r1q?cmYL>=28!G@d<m@YjeoY3H[ZHm&3Gli!`[aQ>1\UN3q,V4Jf?qqiaa:tMHsHkBs(D@M`;,D:_CX(r?Nkd/ffECGHL1!h#3"(HVm#j.es+o+N54Lg4Rq!rZ'Kmf;W$9AS&qa:sClRgih89W-SM6FJRYSKPeDkHf,.c,k:#D4OdF"hs[7Bf81Q[b-S()1@,ZrBQ(r'8CTCk0/2b;id%ES7$G,B]\!>"/bd"%HEHM_6r7#%7$I98i4-A5g[;&/qQZ)%rZEY]a,/ukUs?@7IMp2YSr\#I6(0*uiV;i]jP=:T)\:\Xk?e`-0ue!?PuV&=s)rnbm](b(k5L+O$Aj3I-Q.)]_,Hf=dYm&&b<UcfU7>\4<HshuEVLF86O."3WlKl2jD\flYq+e-A@&BO3-HV@KO<;qn8]<d@l49%9XN&58]tRCZrC-?%\(bK/*U5\;HNEL5bDajD)4#,il)T%86'C4/#pHSTKf"p_%WCqiU1dek3E#b`lljOR4<oeDJm$>L:oT>f>Umh8*pA!,q6,fhhj+FB3f>CS'TO5`Q`q`SqZh@JQOuUla&e*$eqBKG(<DIMXH;%kB*j9Y]G$?Y=pJPNH9b:OB9:f26"!V*Z8`,73dHDkuDmJdoI<&Fm3*4fj^VVXnDMp:&D?09N\t:YeVhKR1d&UBWobI*-(3n[c5XT7&`e#%E[UApTbnLeaNVr/^/?&oNqJ:k:a&54E#h2Le:t_0E0[S='"YNh@!Rp_P9_h`RujIo?sX*UC8,,:kdmrG6LZ%^P\/;H05t5]nM:],rp//lg0h6/5II#5mTC5-_=i.%T/niQdX7(^]u-[)<M#&3[VH.gY%nMLWGkZY^ji?)K?g.RH5':=aVUoktA^9_CoC`Z_WtDU9E,6mS,$bRNS4B[b,0F*[]/V]m%V#dB$/I2Usk^O9edu^"F\I6DQaT;a=Cu;B1`fGi%rU;fHLi)#jV2C.b&~>endstream
endobj
12 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1795
>>
stream
Gb"/'=``=U&:W67fZ?dN6SJP(+R,\9j4LLtj#0Z6,VPVN5U%aVV?hp3Q"/P*h?@h#Q>Iq=eC1Bl$3KqXDg+dh^aC]t-OYI<+m^1HTF?S<5V6H]n,s5U]oP=n3--ViM!5hTa+/E3IR#[U7::2R4m#U\%>VHR"dVf<lZt0;4Qe]RJOIBNiuSB`E5QZI+>1(4bLb%/KJS@a/Rieh>s2Q:kA'NL_COkIbjpJ+E!NM0C8dR:0rXKl0O-mCpXekpiCH[S3ghE3_Rh@]P?A)7`Z05K%/]TnL+8M2,8e^7pfK?9&@FJDgbG=!U.9Kj/nK'#;E5K@+;2IN'],JhfAtp4-a%;gBR9U2./ki!.%FZZ:10%hlLQWqDL(:IVfY<b^sYR;*3u#FiR\!a3mNV=>p2p7CeA!ei<A=Y"*(nEI&JeD64b?`n4U`'+B(P+6EJ%C,?G9jj2\-"o3*MDP%g3H-kH8Te0'H<&a?bX`"Y]>K%\GC<UK6.B+cG4P":^,rst7.$]*;Qe/pi*!<c7HP=maU6OLR&r3/4e1W)pG)<_=Zk8QQ+K3>]EKn[b?/^mBo+gAuYbn]B2e]Hd[S`JGS7A75AO1@qJ_\5Sg%5LOg.P%$Ta>=D^3&C1/>kQk)]@3*n0@(-L_S>@NZI*'^ba]?qijP0Kq@0=LCq.(fH/ldDpfM7nf<LqRNEfM@3dW@!dp3f>N[7A1,SQ:D._:8ZL:\YY<mL\E1Qn-VRdJcR$/u@K]I`Uu%l0MF36Ped(9'\lbiD+WhCau9:aDq=*^U>$ENC,(GA/R52gSS>#d\O,K14+,S?h96CLPP0%=PHdC'kV%L1N@#'t<$Ul*\,Ci_XMs"fZgm,9Co`,$,D$BXOh%TNOQYm>nK,=0C<RgLuE]/[#JH!k6^rBP"<k\(\3UPMWBB'Nk=8MhhOCi@BPj<>Fc.<-+pqK4P_!NNMMK*5r9s^(5jE81V/T?O,oGVF_bkZ-I>Rr7%6j:gkfcR0#afl6=!"64dG<?k=]#/go<pOlu4]Y4?/1')4+tAl*ta:ENN3MV-pp%,o#fZ^!_kG-SX=MlbQ+Z?/H6DhAkN>m9[UUsh<FK8W>E`$\6NM=TaKElLFZYmetT5A>RgdKGJ1,phoo=4j]#"oa2H6nR?500?3Xo\eC<)-,)`>.#!H_E^Rn9=g/CSbceL:N*#cc*t;2NVl`]0i:f:[>FM(MG2?3]jH`pKTOTVB=HuZ79L;.>:7R?V%R.XE#1p6WJOfsTu8;<8`>@h.aDU&ritLn6eO@\eCLi_QYhqUc%^_LCtiOSIOi`3KX!dO(Wd'fQA&qu%6\)LQ:3lED:p*RY;\[a%h;AF?4Dt!l[C`::c$BN[qhi?ei<7%gVku^Ym08;LG9!;!pUC_&fHR9\B4:ue[7f(AJiSRkBf,JCosp4i!VG^1Ml#I:[HnhYh&>DV:cR[BY`r1.%39b!I_>pKoCC"aTnFb140GDWG&=*pRX\P#re=6^5k,nA9\+^[4?3oQmA-?p5@)$%@2Qg4CHp%]u_,gibO-Rj1N8L)rZnLN?H/5YM&EY+ESTWnkoj?430,@XK^N`T*_fuI#L&u.sUg^">0cW6R`d"JIaLbK13^5ic\u(_I$Ro\c[I=_]l8HCpkAGDR8;KD)Vm_oeCV!%&q')*:Gm)DCusr]$bSKE0.ohRhN`VBbJYM.ZQROU:Lq;j$\Do+nbdHOncb7-3G?;XE\f;+fK;j9Q;&eB6^t`9s,GI]CsUXY7*:Q,'](<BaRs#&24JRNV2M<n!,39?b,_%n"\sPAdIPum[E]r1!&s/]h0i/hV\3`5`Y~>endstream
endobj
xref
0 13
0000000000 65535 f
0000000061 00000 n
0000000122 00000 n
0000000229 00000 n
0000000341 00000 n
0000000418 00000 n
0000000523 00000 n
0000000728 00000 n
0000000933 00000 n
0000001002 00000 n
0000001287 00000 n
0000001353 00000 n
0000003436 00000 n
trailer
<<
/ID
[<d26ece81ddf37883320773cbdf3e68fc><d26ece81ddf37883320773cbdf3e68fc>]
% ReportLab generated PDF document -- digest (opensource)
/Info 9 0 R
/Root 8 0 R
/Size 13
>>
startxref
5323
%%EOF

View File

@@ -0,0 +1,212 @@
# Les 7 — Lesopdracht
## Supabase Setup + eerste queries
**Duur:** ~120 minuten klassikaal
---
## Doel
Aan het einde: Supabase project gekoppeld aan QuickPoll. Polls tabel aangemaakt, en homepage leest uit echte database in plaats van in-memory.
---
## Stap 1 — Supabase project klaar
Account + project moeten klaar zijn (uit Les 6 huiswerk). Anders nu doen.
Check je gegevens (Settings → API):
- Project URL: `https://abc123.supabase.co`
- Anon key: `eyJ...`
---
## Stap 2 — Tabellen via SQL Editor
Supabase Dashboard → SQL Editor → New query:
```sql
-- Polls tabel
create table polls (
id bigserial primary key,
title text not null,
created_at timestamp default now()
);
-- Options tabel (relatie naar polls)
create table options (
id bigserial primary key,
poll_id bigint not null references polls(id) on delete cascade,
text text not null,
votes integer default 0,
created_at timestamp default now()
);
-- RLS open voor demo
alter table polls enable row level security;
alter table options enable row level security;
create policy "polls demo open" on polls
for all to anon using (true) with check (true);
create policy "options demo open" on options
for all to anon using (true) with check (true);
```
Run → check Table Editor: beide tabellen verschijnen.
---
## Stap 3 — Test data inserten
In SQL Editor:
```sql
insert into polls (title) values
('Beste programmeertaal?'),
('Beste IDE?');
insert into options (poll_id, text) values
(1, 'TypeScript'), (1, 'Python'), (1, 'Go'),
(2, 'Cursor'), (2, 'VS Code'), (2, 'Vim');
```
Check Table Editor → 2 polls, 6 opties.
---
## Stap 4 — Supabase in Next.js
```bash
cd quickpoll
pnpm add @supabase/supabase-js
```
`.env.local`:
```
NEXT_PUBLIC_SUPABASE_URL=https://abc123.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJ...
```
`lib/supabase.ts`:
```typescript
import { createClient } from "@supabase/supabase-js";
export const supabase = createClient(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
);
```
---
## Stap 5 — Homepage van Supabase
Refactor `app/page.tsx`:
```tsx
import { supabase } from "@/lib/supabase";
import Link from "next/link";
export default async function Home() {
const { data: polls, error } = await supabase
.from("polls")
.select("*")
.order("created_at", { ascending: false });
if (error) return <p className="p-8 text-red-600">Error: {error.message}</p>;
return (
<main className="max-w-2xl mx-auto p-8">
<h1 className="text-3xl font-bold mb-6">QuickPoll</h1>
<ul className="space-y-2">
{polls?.map(p => (
<li key={p.id}>
<Link href={`/poll/${p.id}`} className="text-blue-600 hover:underline">
{p.title}
</Link>
</li>
))}
</ul>
</main>
);
}
```
Restart `pnpm dev` (env-changes vereisen restart). Open localhost:3000 → polls zichtbaar uit Supabase.
---
## Stap 6 — Detail-pagina
```tsx
// app/poll/[id]/page.tsx
import { supabase } from "@/lib/supabase";
import { notFound } from "next/navigation";
export default async function PollPage({
params,
}: { params: Promise<{ id: string }> }) {
const { id } = await params;
const { data: poll } = await supabase
.from("polls")
.select("*, options(*)")
.eq("id", Number(id))
.single();
if (!poll) notFound();
return (
<main className="max-w-md mx-auto p-8">
<h1 className="text-2xl font-bold mb-4">{poll.title}</h1>
<ul className="space-y-2">
{poll.options.map(o => (
<li key={o.id} className="p-3 border rounded flex justify-between">
<span>{o.text}</span>
<span className="text-gray-500">{o.votes}</span>
</li>
))}
</ul>
</main>
);
}
```
Voting bouwen we in Les 8.
---
## Eisen
- [ ] Supabase project actief met `polls` + `options` tabellen
- [ ] RLS aan met open policies
- [ ] Minstens 2 polls in DB
- [ ] Homepage leest van Supabase
- [ ] Detail-pagina toont opties van Supabase
- [ ] Geen errors in console
---
## Bonus
- Voeg een 3e tabel `votes` toe (voor user-tracking later)
- Type-generation: `pnpm dlx supabase gen types typescript --linked > types/database.ts`
- Loading-skeleton voor detail-pagina
---
## Veelvoorkomende problemen
| Probleem | Oplossing |
|----------|-----------|
| "Invalid API key" | Anon key klopt niet — check .env.local, restart dev |
| Polls niet zichtbaar | RLS policy ontbreekt — check beide tabellen |
| `.env.local` niet geladen | Restart `pnpm dev` na env-changes |
| Foreign key violation | Insert opties na polls (poll_id moet bestaan) |
---
## Klaar?
Volgende les: schrijven naar DB (INSERT, UPDATE) — create-pagina + voting werkend.

View File

@@ -17,17 +17,17 @@ endobj
endobj
4 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
/BaseFont /Symbol /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
5 0 obj
<<
/BaseFont /Symbol /Name /F4 /Subtype /Type1 /Type /Font
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
6 0 obj
<<
/Contents 23 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Contents 14 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
@@ -37,7 +37,7 @@ endobj
endobj
7 0 obj
<<
/Contents 24 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Contents 15 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
@@ -47,7 +47,7 @@ endobj
endobj
8 0 obj
<<
/Contents 25 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Contents 16 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
@@ -57,7 +57,7 @@ endobj
endobj
9 0 obj
<<
/Contents 26 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Contents 17 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
@@ -67,7 +67,7 @@ endobj
endobj
10 0 obj
<<
/Contents 27 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Contents 18 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
@@ -77,258 +77,86 @@ endobj
endobj
11 0 obj
<<
/Contents 28 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
/PageMode /UseNone /Pages 13 0 R /Type /Catalog
>>
endobj
12 0 obj
<<
/Contents 29 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607080655+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607080655+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Lesopdracht) /Trapped /False
>>
endobj
13 0 obj
<<
/Contents 30 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
/Count 5 /Kids [ 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R ] /Type /Pages
>>
endobj
14 0 obj
<<
/Contents 31 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1449
>>
stream
GauHK92jk1&AJ$CoFY\ZKd>E9b`.<fQRus<8!m4-_U0VUNZJ%J@Li:i\,DJ\">bUs>*:XPWR^rilg%=R",\1$5Jn5Omh7ZAB>?K#^&mn^#EqgUA)]U3KF9Cq+,Htr)fQpN>Q$iGG7sBK&HNCZ-n:(:*dEPSV#gf?f1F(0A-TbsEYo?:W)OfL`I+Atc?bf_c7u[rHm++/odr@-_$c'4d36`rMpB\$[7ON)Y"'o3V%8b)*.7bKb6@g/c:o?4dPQ]j+uA2PJ19Xo:+kJK4IJ07S*U\5%l!fY"W05lHqJe<PFG<#9qJM#RC8-YoK5`&Y^r!RXCC?]n.qI3)3KL=@eJV0Yp45Db42:be<N@Z0*1$2<&9/Q$g$sY>sRW+(WK]HI@jMTq_:BAaTA^'(^h64)pF=qc<r\Vg0f)Wp>0I)/9E;WM"00P\,WI*A=^&GE+92QMS#6;7rl*s9b^XgkN0upFQlCTbahBn(%kS!3tGLF)pF=A\_@pi],dTY2qeN6iS5qr54KLhXA@%bgh-Y28(U_jVr@X&3Q;V1HQ]S<gE-Oo@S\fEEYfufUf7O=I6fd0*ADcF!GYnJ[4\t-H4EK]=bQkshj/&+YB'fTVC:'c$Q,)hKn7:mA<G!KgE#KW<dKAR0f6,*m0dY<*Z\E[GD/:Q["cc+Lir#4\>i\`R5Eeqks/9LpoA/<:22(;pnF+q)k_tb![LX.pqFJqVXFi6:_JICL@_cGB"EfH,TdJM]V$?=iO$i"1B2e=qmt\-@RNM+^jiH`Bfn>rbWp"<al#Mm<5"rn?EicZ]t$5Z$$X&tf!<m$n^LIhcs*U=%6W5\m%0"lJ)]C-h>.IZi/+,kH;kop*H?lRd5cT%--7LA^79h=^qj/VAkb#W=rb>m$jj.qP-QbJ/7Y76d8K:T[-0Xg`ehVYD)?T8$>].n]j`2s@0odQrk-pcZde=Ban+^c`">14SmQ!7:1.K;0G-)/\0o6V9-6i0^t^Kip"I>?ctI]17cEnfNFN%?1P\<SS%+oUS!DRJi`EpI0%-"flZkp0P?X_D-mK.Qb%h"3^PNRLY`?+DEd0q>;=`JaXO?Hhm#a/,GbXtBF<e$Ff&0%WijR3LSDJ(OY!PZ$4Y?q%*_A<[]MEag&66'P,GpC18kmK7S\_f!+b=?5i2XTs/BTAj2VE+s8DjV02Tm6m@@!?mO4(U's#AHUKaF+8@$!?h<6?IV>^/@H;)6Ikm6c)=acu[3X$bVZ34ZVf*fb#EIg9RQaEsPDC2a[La,ei;Hci-("c6<Gk(_@()HSWdRY"hQ4+;BpH/)EHl]c3_'^P\lkXaTd%.@bQ926+sUNfafFSlY0IjjEB,XlI;Qed&6bMS!>Ed75`Eq(MYr<mC7-L_8-2>AUU_&Jf0<5KJ^LH\-FDQf1IZ`$FhcjB.9)h?eqI9)l`FM>7\FZ+Srch1]'^\5!ZY&D'.gH>qiJ&2DA,Q~>endstream
endobj
15 0 obj
<<
/Contents 32 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1662
>>
stream
Gau`S=``=U&:WfGfZB'5N!&)a!O`MUF4N.=>ZUHlR1)d*1*)6O81LV=I2>"2b'$M4P=[1U,$2RhpP0IcMD*QY:Y#NlkA^?f!TPlK!%*PUq'itF#@@SM,HbP_6te&Z%O;hXJoVUe&4Rq&H-ANP7C84#2'Z;F)E@.`MCBr*>W`H4&/A'=,nS><84U/_$PIH>W[.tH.)*7,ZVN[S@M3h7Tpb9e_/KSDSFWUF'$<NU_L)g!\*lMO^u*,R<lnoMAFNB#g>oPo"m66l3e<XkS'?hM/Iu9="nSWe_$F"pP_;B'?-lMS'q8cK4OAG]8ok)^"S)SgfV:jI1JMm]F;-HgIR"`]1#<D4D5^`r!fSSe+j+:s#?%NZ]O$m-;H(&E&G[;6KM&8a'&B`_!\Y3\&LFr#TY)g&YnSARi.A:YOgi,!&8HI2!kcp,oJIZ)kb'F4k[7)=&)PlTs5;.@Rfo'D;bQQ/VYp4sKXe!a8p",LUSOSmc?KIS%S7@l2J:@-_>>G".]CV&c0ilchl$]U;E+K9d[Jn$?($C@K<U_;Cf_HMa]lFYkn<o:SusPIVC$piRBB80%:AJpd0*^1G=$FcF]tO`m8_njCWHn]gLf+QMU[:def3/N[JXiU#J%9CD:TY.g'b73*9R"7CiMFc-mIY7*T5rHpPHjkq4,o'rB71u-bYM,Y]lQt/b1N*)"uBiVG8`(`ft<m->fQC8/f\+W@U*sWFRcd8Vi@O/")Gi,uYB^@kBbrkJHBd&])nCa<gE7Ke7/5fW+OaQ7`u/:un"<bb>c-W=lPE;u.]k0Mc%;Y$N/S3@s7DSZ4XF>>_.qmQuj!b*KbVkS0,sG1A.X?%S-=5fP[<<@%;h6&%3a'ohZ85t45YU/:P@q!mtbCW5H"GMue4(\_^%"VOn/@[#=ZT.tQB]Qko`muY)T#:c3ZbI#!T0HN5XKG%)=S$7;]58H59M3M38qkFcRij?%3+/)&9EXbfJa'</D5Ws*eg;r\`/<QHVdTnS4?uQPjIU.KG&R\h>q$NUt0"2T(s*IpV6?6e(04$QqQOrT/iHgB#Lit#`?%2I/h=[k5:)$"gq'1:!H]Xn_+!fXK#46b],,3F`@5HojG/SHWjm;"cLIT,MCU*c]Jqm4tc&FlWJb,b[?7jX;."?kjRkAR$cC*u0>N1m4?KF'm3tC'1Jqt]bDYc^:mTpH>^Ymt*FN<LAFW#tWAo-P1q.I+gJ7s_G3Dp;;9l6!-OMP_%mpRc=F^nVs'^q5*c9@cl;4CU@k9Rm4jM-.9A2p5@D4cf!fXOfd5:&)_(!nN&(3k\*')dHT'"rr.@!'cgPGc>>Ao0'8SSX!%p6pgGqt-B"[W\D8a)$X(^R-$(a(dt:.>q2?en^3-`ajQ=/.O$;b8nSC+e?8nj`XG(hhYP3UW=J%LY8Vq:l^uq@F#eWE2p77*PoSiH=P9a1>UI*ohP;]]"T`dOl/qg*LL,M?-G:rHa,0'U?mE#i6rRV.$f$-8_42o&1a[6pYLNArP^@KHoTIC[dK0;aBTX"[0Mu&(cr=.q7fnO6Ko<a&1WqsQ(DhOk1ioOb6Hg4Koi?Mg=j(:.K.HS9aVN^0\i?\M*G`WUmS&=WObNN"hhk%Rt'r"js>*LUP#_Ar?HQ"_HFb-D45il-+8;iD=Ypib]4#><aEG#qjV4W&e;a-\[,<A~>endstream
endobj
16 0 obj
<<
/Contents 33 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1876
>>
stream
Gau`TD/\/e&H;*)EAR=).;G<Ipnfmies@*<(8P[)$l`Rs@q7W$,>4INVoaPgpJJ,[h8CdpTsY>6U3Y'JjP;s]L]Fl%;LEg!J6-4t]d5olN+YBm@PBut_f>.;*hn6Y`W8(,4"^]t3r'/Hb?bHZ+Q64bJAMpJaabglP]@L8CF:EjO;O?JlOcB[@&Xtc7CZ1R.shL-9!)l`\.J)*IDo"DoNWXkG*Zb9Z!__ZW>=$W3XfH6-&;!l#0.hbGRs8;99X\n-jnl`98kgU?p^iGQg`mm\Mc_fRq)cDT4.XKGL-D&*$al*\INprdO:\6\cFk>Q[YmLBn:Z=]3(g6>#CKD5`0&`GMiDUnq2MTaJ=X-kUcmgo0jm-I?I5?+;8(V+S'VN\1&V'bSoiNq0gVr:q4$X4X5Q8.r90nh_N8uE-aF2LiPTF_P5)H/-FXc"[-I[XPmomM7u6B@G)]!oc10eN%kRJQuc.jeRJXm,,>CE_.>K<`Ln:BEf.0=+@n!4qAZWRnB.*L_^dKn]kP"-p<@>QQX4Ue/$_-aQcYPK`\"1o,?<i8.uZ*$.A6gA?!!W>AI9LX3BfYfHZeu[p%dk*aida=:Ckdt4rs%:ZRejq7jEH@&aH$2)=%[$)WX<t-Y&-Bs#peho(^,mq<s)gm@2kf&40Z*.B9ErAS'e,N#Lh]qLmAZ>ToFnm)Q$$9+\"aMfrjH%[)j8U.J(G=-FO,bt+FpbtXCjbm7X,iK^V8S=7;`N%%2Rm-tm3P[n_<?=J"g?3e1N1Ur3C&hTdVCE;"R^r+K4s2F]mj:ZIp3$cOoHkta53)UJ:bY:C?Mo%<'g(WhVELI<EHZen=V6g@.Lm,n9Bj)qIA**I6oBhWT2>doFFjY?j[]=VXo:i9F\NPK\G)PX1GX?ju<ti"`ghVULp`I2WB5_e$d\=YbVjWQrQY5$aBOP@uC#E0ME*@sl]:,-\>BCo&'Cq6PHnmMFAPiMoN7<_@cuD1ja]O8-H%Ntrr"pfar:(E[:q+[HQGhEj6&N44_Us*uEuG,)8?OYk9qsDe#]?m9b0tPM(rnOgS@`<;@%+ZE`+@F^3P&1D=qMM)iGHpd5J4#36?A>n]^Vp77p2NnC:cH&RI;<\D0;<$bZk>ikk$e*@($KWb`BW881(d(iNC'O[oZ>,-)K,I_,P&n(ZHhKdcY#$`$YJs'gDRbq^WuZ!+lRHL[YWg!9H9t)>"<dra_qEgbtt9(_tW$$&iNY[f<G`QJ-/K\E,bDVC&RVV/fAXFk2%[Q`3p0KMt+JgkD.+nf1c`]a)NCU2!\4-K.Q89*5)$-A,bDD*/Gp/X$b>@djGiVT4!kpA=AV6"X&,R$d,7@,*t+bbspH?"&I'<oC+$h!^6^K+<K$.E&?+ChH;75ho?s_hqFF@7CAMqltHWpD2HngC%0JS)K\W]a8(d1XsT!!kYi=5mJs=[b`<G?nLl<Zsem+E@gB+$FA\['MMqT0bjS=O%\BB3jBR12k#p_2pBEs,&Z/[12+9kA*o]Cm>uKHVRA:FU<OP5Y/os:cpGd:5n*Vqh>9bh_@jIr0U>_s_j.dg^Pe4=^$h\I3?j']%1J.maO!%(Zi.MN7le'+cR%T.pL!=T7BeUoik[ag2TbAB[.Rm>bB.TSm2KaiO4l8Q/+^*_gi#]eB8r,LARG$NjU:;A^Xb6MD$.PjZJ?!KQBRl]:']["K313>"s(uI]"m)JYFH*'NCL*MS(\>,I96;8*85KU:M>O39\[HtZQ"e>G[XCDlci0Qf>$g$kfn6pBi;/aB)L/3<d+n@aUWn5Z+Ve3,0Zf=gNB_p`X9_b?qO%D$0>X661n$!@_ogn2pX+`:1.dsX1CYdhp@?[>Wb]*[&$dq_j:>'V%mQ7qo31#%u,)oZt=q<o_nsJODgH~>endstream
endobj
17 0 obj
<<
/Contents 34 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1850
>>
stream
GauHKgN)%,&:N/3D"T'c&HmUa$+dRCc/^pLVFdQF--?<85r'+:?qAG,nbD"R+=2oRCb]g?CjR]>_Oe*G=R7(aT_Q^1s0Djdq%uT)(bcH["Y`4FN8MIpEUQDYE1[A%!q?ut64P:5g^iJh?4,+.I`Ok\M?ZHP!eb#NWDEUc]-(J^j9?BT4U*2$BqPS?`MB^8*IEkBS0PEadeCYkp1s\mF"\g<g,jD_r^/Bp_:Cn0W1G,ra[!^&J\h5u5/2e1G%lieRC+dI;s%\8<l0O]!<.3N0?gt`D.`>@(k72.Td+6%$;$*H6uX+;SLJA5cZK?^5qf!4K4og``%5e&I(jSpH:3!!_sI+'UFc$l7EoV=C6tY9k*0hAlQIN:&Hm6&S$faR'Qo/bV</2663RhP.r)D'en`i!'b]Y%;*f'M6:SW'pL+0lKjMHlnXs#NW9oAMa%2k&lYF'8UKam(O)CMFnO)@&g3t!cp?er*euNQ-rROJ&H6j]8C6fL?Y):f(Kd>`<qr%8NTaG(EB/UZZcE^;Zj*:2BRXZ>hH>,oQ>i'u"%>L*l0T9!K;3KVFKPMu:R@`]\^^Vi8Rm@#J;&i;#S)sWf*MC7o4HTPZd+"AblmePbTW,IQ8#\\5QF`#kg55+*N75r"4hFfeKJ.(XF'3M/bsJVn&p/,Yc=!nLB9!Kd@'6`>c"(eL_2Ne-b-4VR5c/Un'[QL-n5'a)HM*!'3PtQ,ZQo6q_+02>^4p<M"@\_Kkn7l/iF[*1*KG+#O[,kQ+#BB%0!UO3km?P]*L1E+N`>QLYCthSIk&"IG@#6DD6?N["Kp$RXIIArTG<>\O3'7'!-*]H)>"qQd@VD#R!V#:YDm[5@P]O^rpUfXbaiH&)&uB]\resY5>GFCQlcSIc25iFr@45(HnpN?PClUM`lY?-$9ZKK$Yj_/FTRd?5sqpW"IN(T@b4iu6jo@jIW<KH;V><QT-.Wp:LpE8aF$jmnMOHeb#P#W@0a7%f\6JTjPW#F;$sX3(WC`lR$2un08C@]A.H`C:p3J!fhh?;4&?*(5/kAC'lhQ%)n!WH1$"ZU/8SK"V`%$Bktq"JY?cTJ)3qJ;3?F`r/gd_l)#0iM[#3U37Aa^0GW"QQ:,D7W!Gsn-:qO'::6OgW19b_<g7;:pl_2`26f6l/^720eCJ1Dt:#!p/keYd2F-AuZlGCbR&XuGg[OTF5EAa8To"pd$.gVYaHrDOI?=_&<Uo2<"167j*546J._<X\B"8?<mSE;TY=$oPnhm&^+dM+o9j($+G9(BNm_O8q_.C$'XHDPKCY5QUo4+Y*$$WO`M7]X%Ober<)EPAhA*kA?"@E#KM441RHlFcGPf4sYol8;?qHHh:UW;g`C:C:)V<(`V19%n!B_.Qu`aYgK,$^8G]!PJ-)*)QamU:m1dF&K\;id3V'jYn.Pb4Su!qR*)s\1::uCI_akZqVY7WR96ITIic>ID+$<:$B68K\4p-5_gEBV.dMXVfT_,i'A_fqFH?%Xl7t;XC8Q?[S@J??f3G^g5*<k\)2.BJjpVg(6Fmr.UjbeCYM-4OOoC0^]FAEZZ"[OG'90tC>sJ6eeR,aGd=Df\K4c0/o,sOqZIh,Q-0e(8#8uV7'jrKHU:*]qdcC;\K2dFT+NP6P8:qa3EN]ur8ROD\30G+EG`6-*S27")#*Y)Yq[Y0cggWkmHW04_/]<n_/6_(*S_$$l6m]cob2Ub;>jJJ(E;hh#5X!mroYtBUJq8Xk;KNddQN!1GW2X`%h0A1n*g@55<*%i7Q)4bmso\$e()A7?oqbdk&2Xi0jpUP`#^pF5$P>rG@I/C>Q<!AW8ub%R'6dKn@>qeX9t.%b?WB-4&HUU&tcuM*]S*%r<m?OR"P~>endstream
endobj
18 0 obj
<<
/Contents 35 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
19 0 obj
<<
/Contents 36 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 22 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
20 0 obj
<<
/PageMode /UseNone /Pages 22 0 R /Type /Catalog
>>
endobj
21 0 obj
<<
/Author (\(anonymous\)) /CreationDate (D:20260324182754+01'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260324182754+01'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
>>
endobj
22 0 obj
<<
/Count 14 /Kids [ 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R
16 0 R 17 0 R 18 0 R 19 0 R ] /Type /Pages
>>
endobj
23 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 779
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1147
>>
stream
Gatn$968f@&BF8='RNM7K4;NjgtG=AFOHsA*dZf)Jsp/aFpp4l\*qHm0S<;9$8r0rX53eO=tLFT]P.+$>lhTri9CCJarpNe<"K)X/\I-rVh!?iM@jEf`@jgr6Rbb<7Ruj/2tj/".&cRn0u+d99fp-aX"("qF#'AME^aeX/NQ9U\@B-m&)gI\kgn3i=giti@iF26iRYPK3D\'rL_>O#^n<b"FcUjU0hI$2WaC.p>6e-R'[oAMi?mWO!O:FpNkhTNL4M%ML/g(!'<+u!F6hDMGEP&-I`^#WJg9`L//<"B:biKZ<>5q`6cia]R'E2i/Vl=%Qs/u=:19M"^:70Dr.-\b$[C=dnW.q^>)_m6="kKZO:\iB"08SE5R[\DI:D#/7?fXR9&IRV;C*m"4EjGb6B!=LK0/h5+itY^4Pt!DB5Tqb?l!NOb!Q5G$):T&=;\1=?_ud!*fijm+1(B4.PT@NqMJutU;uS(>:rKc84kH`Of!u:iA[nF2>cA49<luXgmd]>34Is01^AsKPDddoLKFd@#KOsJfa,sPVn#T9Y'>+YIVt**IWL+D@<T"MlOl?"Q7]G'?/ar3ND%Sl<JCJ@MM4]90\XgMMm(fS$$hXZDRtDdHiq+QWP-7Lm!Qfs&eJP9'-*%i4pFElF-'idc!U_1.Ulp:r6l9"8cuNU4Tdl*"t'$QpuDmZnuBNBaV>FePP):%WTph9"UV0XZ8n2CX8en-3b3Hj,W;,g$/LS3i<n>m$!Y,JQWBQ:KM-m)'hE4u1aoF'c%ACQ(O_^e\c~>endstream
endobj
24 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1029
>>
stream
Gau1/gN&c;&;KZP'RT)O'7qJ>VDk%eEpubkPF;%i2_rH4%Nls+Vg8/3**fD$-Z[6_*gcu(rE._P?U3PL"Z>VA!;IJMaVb/5+eA`**"V%%3/n/="4WkZ?mgbLKHTnS#=UqS`i6ic%WLY-i/j'o+q.47oFJlfT]SXH@H'V-^jqmcH@6+;EOk#.[-#o/Y1XE*98GgrYd\@m.l8E0Mb0R/^O6/%D,,>%%H(q#jQj#g"!NZ/Ri[=A)9W&/C8dTVZm1[5/fstteKa",kP6j7.\O,"5-jbX.gi"i(U1X`XMVSDGd%!'nXB:2hFo2s!'(<+0FhO9-.?fD_hTJ(Xia%D#3cW7^a^=AiGPeG0aPLV%%`k`BhQ9!HbOD5OL0NO-Itl+2dTIrA>Os?E3Bn#`^O=O83Er3?H[SBg?2:Q[cVCDPWqR;ZM?*,I9*ORc="Xo3i0sYqd=l+%pR)!Y<!_k;Xee)WrscMMG@m1g.T!9l7kg=C<$jI`RNn]Y^]OW=hTCaC]NV0<l+X,(4=4:$'^a1`U)X+.TfcrQ'/s%,b;6rJB?X3-O4)FMO.C"j/"Jq2mR-9\1cUKbDFMFQ=R'TJ-p+]Ko4;F`N5@SQ.,fTZY9p%#s34<<K0nF8M1F5n4kY35?T4XakB5,*dLa75q[;&_A2qoSYaFKG&=eokp:1Oero/U2/6"0BW"]IKW.nVdrLuc?5D8mf2Q:&R[_e0$#H%1g%6ZjI809+&K5V62EcT_Z512SXG0`OlIEfQ#dS.EUmEs@*fd=1_*jhF7(-?i^u<A3'9HPW/pP2^3bQ#Z.pCOoBVA-^+MH.dpP6"a`Em5l9iE1[W,"*!DHo'].?cU3600dN%86g:RjLFkW!3*>1N'gG"4=pJE$fS0b%glM[?jTm=/hk7ibok%4qU3-(BR[7^AUC&Q'#ocFlRhNEEqR[9f@cn8e8MRl!@N=\30c,$8,YXUf;/PCb,#KN(?*)JJZ%l&]4ntDem:oFPNDtPQErXb!0R>5p3n>NYUK9OlMK:en/8!P5u)@"%>E0`W~>endstream
endobj
25 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1346
>>
stream
Gau0C>B^uE&:WeD9`9VX/67+))KL.Eh"KeK[rH4Zq[i>&Ad?tUPr=!Z,rY_h*D$WF*+MO.)N6r0b^B#AoP):\U)2FRP76Bo#l;;Ui&6Ok^g6*>kQH>TFZt"o1Xih$+5%6]^^D!?r.s]QR+]1o\/m=O[%,2A(-1XjMHP^^nlD,T7NlTPFU7Yc!o7A)"n2P_b/N?gc?"f>=aZ(c&4W:"oKj^G:TpZm3-H5E\*+'Pa6d@NY!G@1Eh0/,;>cEHUV\!$-nELsqOS%UiX<X#3h9M*I%]t7@mLbA#01E]8R3,Ir8Un@V4t+hYhchf./XS1p52$$CYYW'I9slQE5l=&gAtR$$5Lj+GC0\F>"kq1TosXHEOHCQIc.VqI8-1Sl[c_9fF=Ti=V?]bs!ocY>I.NW>[_'nAFM4L/r`]jW82Y6ks[gnX-cmu1UN%p"e)UBU'`2K`3E-a%X+c6"WQNXO]o*\\39`&_`YHsYfO;*d"TLl'h?&:W8;FUZ&m1[>6,EDDdMYC)ru^aGhb%?3=tR%%rZJ[lcQFY7B<Y,1*?dZ<6TY2F#E`Y#e1b&W3Zj_`eS.R_*-;t5>;;.E2RDI]Q=V%X(EPE=[B4Q%s:f+Z:J[)FE:VO6Sn$cj=F#53#k8RN":Epjt3.@\GMJ16ad/!FWhek4E&cm"C;[Kp\4(9i3etf0JYF^Z3?+g2?/tEg0AW#IV?:lq"!NIMoN.[Cs?,NZ-GK#LPaJ7Y4p6YM3k#!BSn-XW^mXIF.?(1S>q->1H*->P0P1%HYSbhV4;6MSU40"*L#.0eK2$Xg&+@`Q>L0uo\K<K$;'g!&m*`W#]M_uoY1^`P6s^0hiIB9Y;\uO6^iDhCS9Dr$&bidbY0&>Z;1*i,T\uGP9N#OrY@r.,O69p.F#4Fh8,_.;k7?bdhY>R_R(F[57l>t0.D6!%U'f_D6sq[[D=NpQ+4<c)]MX_0o[OdB8Ys&\;7J3]8#EnS5bR)VBq\V=/NN\#J#M!ULpD!C,`?V2qf4;[pnp$^hSjh8Idr9=B5M`1LGHmRK3E35oVJVdLOf-fSGM1`7H_,8/O!aFi`3?aQ.M]d9pCT8h&8@^VdL^VaKj.[CRF0i$enR:=[5Be=7<A'5?JPC'3.88@3b-a4-;Vgg5J)o)%*Y2Ks[?+c?@@k_qo%%t6<\;PG.aP#<`fL8%EQ%q+)f^+a+5=#DR+f<SepT8R?>\U9Fmm0mhCrldsb>QV8NE/TFp*IoaEk.N54T&44Kj"cO>JYt?$H\*OH7bRg9kH_SVkRYmJE=3tN$TP?]p`aT6WX7JSaF.[rDQrBQJNhm\=r,kq*%R9g&("RB3M&lR)0eot]T?O'q\F/-J^2#Jgh*\~>endstream
endobj
26 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1616
>>
stream
Gau0CD/\/e&H;*)EAIeukn;.%-!Br-@I&8p[`K;[?`F0=/372`OfCt8"bH^NNg-B]Na995Q37dN+7C9-4ac\]5nAH.qgXb2]GQ:u`WOPBnJ&Wd">G98YK*2P*H,@(q'6mT6OsB`8%`7e`-(i4nTsuHK@OU[hEdc?'*]K?(r?M2Z6<Zj^cBrP!0?aqnbiKYZLXHLn5AD&'MN38"[5N&hT.GW<FfA'_>"Y_cOI+nnTQ!5^Y]+%KYSNF#[V0GgV%n;aCbA.]]'j>Jd\I7N+GtYQi-DHBa+akV3D%kJ<0%tP=mcbP_"O$pLmho"[2%#0&G.[*TN;;nT_MlB96"c5o(9$At%6(FoKT?Zbc_$6F2hM1hYDKPb)/HiZP$ZB-Q#])d0&lHD^ouocljX1N"Bo0itWBm2:q=K8gbW#nEs<A'Fq\"P;b5<W,-YH3KKNRr[iS'<Q.lS#bJ2^!V#5JJYfK)@tk7IgE+$J)5?>#WEbZN-^+9JCQ$Q=hm=>rdm*T0eNPm*^\!,`H)uCRI!dY;phdHd>-\h9K\dn"r"VbB6I3c=17fBGDha!LD-(e0Sa?kF6NV^lFVYIm]VW?ZJcBnU+n!4rG&GtL;lP&X_[fs+i.?ZestQ"oBApkq2kJrE>%FU$?SL!C3%R5<oG#arOViajLftu>nODl9VbK'4ra*A:e[>n?f8-hQ8gJJakdB/FhXY*nB_>=G@H0ZObEg!_@ojgEK4E:/+_XWUK[!8\iCBP]1(le0WAA-_Tg9aBcX2_EsK`3;b1Y7+l?,GSLN$OMo>GVdXo(XOE,ib[fLb8s15rqm,^a_oS#t/cojBQ*I%7Mio5R;Pa0CU\,0't(^YUE7OiT/.kOSn-e)ti]i7mO@K*&>B/7.>_-a+\+%]Hc5.ra/CM+^q[A33dcDBGtA4g,6,-MDfCHa(?<L;i`ZbaROp<YnF2u0(qQ`DF]ZVnSWeYhQ^ROTE5>0i>Pa*,q1I?U_Lqhj!HE#7lC*j+hS[jtp;kl9fIIT?dMEFCq)@0u7Kk33ZuHQZPVpM.V#8\[DQqS2ZL&8fqcd/---DT)1[U<AJ,UU2>u)*`1:CL=-Wc&D7%^SV=?>q2Y!,A6!ZPe_:W(%dregLI`Cic]X8dKtO>XNO0a$aj,/E.X`CSocg4\RO+4"^1;FVmVsGkeE7>X">T.;``+o6CXI!@a\jbfnNs'RkE.Igtk:)-;6h0TTtRt8&&5;Ll*]d<PrF4IRc,o7f66<7b"6kkeJeu4`PWYU.(5DIZ6,a<U(gRfjXX;?ogZ^`Bhjf-i=4gFlE57?Rf70>/&7K1:<K&RC^SM:Q*hd]WH)>&,E?d?s:"?>H6QjOr2pk0b1\L)Z1Un%I][e0*miW[:fM06bf2al`kp]<bGZ.jjMLOi%7^uoo:#^OBt_\CngZd_Pk/9Uo?A:b0G([;O6HO@]--"+8.L&/I9#K%7WTF'O*%.9YiG!bnSs#X$oU`e4T!A[m[9O?B<$_9-W4.X2!ah?Pq<6-QkQ**/#Z&c?lEr:pl3W<5=VUpqUoQhLV?,K[X'icfd]3Wk`J4?:9*:0Ne#cJ;[.&[=\1956sRuIFB0`liMV,drYod!%eIJ57I%n*5[.u_AH]=mkQli5j)J_>mb9~>endstream
endobj
27 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 837
>>
stream
Gat$u>u03/'RfGR39sM#^kq[5U^1[$!eeKM7O.W2m(mPo&npZo\-7W`he0QtZtomtET4q1\bFn>lV$4$S(dUU$63\t:FW6'C]kZ>&D74^ZIXG^Y#`P+M,QX8kf+d>Bq/q.T%60<[\Zi"d)]Us2/93)lKRF&YJ)'ql-Ch;?k(/IX=?EmJom+1,24of^[(c(rW@)Vs)./We9jX.4nV*N)e*8I3dnss:`XE@qd#__A>nT`E@ArlP)m0KR#ZXaP(TY3X2ba2)a5*X!Nr%r5!g%H(r'Xu'FM"4@c[_-)jc/EJP&Za\75TG\m\&t>\j0_%$^&pD"O$F_lCjj<TtE,j8LTf?`nN><+B"EZ?;6j"$+tL[%#6Wr@IF04r,H%ilsVYd_lMk]^;oJ=sUsPMkmW09gZM[oc=G[,c68e6kTsX\J_1)38V!%\)m=_eN6mu*?b;OmW)LQ>2^?/XtI*ra%tm;53>a_o7mK=[@Euifq"?0=)6.9LGj;h]QkLrBFV3.8IR>BM4lDqh7)1=q>H72We[Y:a1c^qZ'nB+/G,T4qpPK+*B^O-3j>50h,'!Kn1+l@jp:=)Q"jmln9p8?Lni51Ei1JZc;%J%dQ@EL^tp<Ch:5cTC4WSd;-i^hdZ->uD5>7DBCNKuFUr>iUaWe%>inou>dUai@PitA=job%KikuTCp@bb\+aGJ)\s6.;Kc(.Ck>KE,cb[X$c0,c<tCkGbHqaGimF\DR5At;G_>FiE*V^mG:jB>n>WL]+;h0L;V<rJDd&qkn`$dbD)$XCo6UR*r7LIm&P-<TMm!X\@'91=&[0^$L]gSRkGF&eKLCZo[2tg1ha6W>aej[S~>endstream
endobj
28 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1134
>>
stream
Gatm:>E@K-'Ro4HS>''S7bDs5_^;4^'"(T4Zq7m.:HW0l&)^`?m*(FA-&DTXisVqS]A<+2&P(L:npTDScPZpF?**j]F+Dk`)#qI'3A=e@o.1F7n)<I*i:DJASq1ATOV9I:"O(=P&5aE1[[9d=(gL7T*`,UT.RT&6.cC@8RM'%7^pqt."D7J6E1@74RApTMKG@t%jRFh_W1cTsUX4CJYiJ\f_>FN"05GC=e+FPA2sfKb"6%cQQsZ1tfWlF<dgX%e:niK;A-9O82rZ#7$UL00pg]Ftmkj0m<qi0>0s(Hj\ja0k@LWW1.Q0_\^pYX:CceAK67&W]dp/Z850qKC3.:23.(%e90'sa!#:/Qi^kr2?&peM2Bl+!?@K#jch[1e@S4N\niUtBknG1N.XO5:0F`S^P:::t(6AVt41j[Q2W`^2gaX/n3TiMU4Y`_Eb_k4qp=/$V)r#4Jh*ZW`/;!PD!+(\;!R)/bFA%OQf;`&Aj;H9T'rJIE%W2:];I#7DoD^1h@4demSajTtXa!iPlZ7`:ff)#;0q9u.+ic*0Cmi/]T+dB]K66m>d*nni5(?_WODZh'\31T\qnVA$10FQni1>fPf8[laIZi.c)`uaJK8%+>V_c,769q64"IcEH6L(Z;Fdk*o#1E@l<(RBbK:kC5JO^J61,ul,5Z:K\HgREe$Np1S$XsMtn^-1i0HsP\PW?)8X<(0i%"C77h%2l<*R>nbWBZ!]HAQGMHC`BbB6DZP>P@rS<lY<"1V0<g&p3X;B'>9gNVf2;?.sUjW'-%K9rZ=+jFBrI&%l]d%l"Xi`;;WOSIjWmEj]'>j5DudbpV>b3COGC?mu-k\BtW'<%<0#`N.(;$*9oJZYNt355N4^.P0D7jrLIR+j-afP4-*/])RF9RFkW.-*%dHs#0t-l.rZ_g#,UELF]3.'lC/7&[riYLe5\o)K<,4#Pn)LRef4hU&nk?38\JT_9UBq,hB72;BpL+5$jA93*$pJ\/ga>;$>B8tZ`UGn"OLkUrLOOB5Nm@'Sn0^ME"aPX4Xuh@o:-TnSM5Q4]TB`@h/u`g-!/_Lgs=%Cb7;2,H,]j(F<p*>=:V=kO\BXUmMq[2DZ)T?4n/Nso.ASgkZJBZSI>@W@%H^sE'8`f?`/`dX8~>endstream
endobj
29 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1711
>>
stream
Gau0C8U&oI&AII3bY^qPL&cF)qGP@Wdl=DYjPoq)+:4?J;1LubG25N8HNtZa;%aboWU!95B#-F\2\Z9/^PVbJ>64X[JX:!P#_gAX&E!"dEWN)%dJ"6XRNZgjKI-hr+EC!c->80DLP@YV")tp*ob%U,ior,;(F/QD>1ZGKGQe7cY0_YO@/QJb%-TFY&Ls.=Ei)_EQfXZ1=i''SdKn]&30A:]$mrG;H*/<=_XB*Ze8)rG/fk;b^@&k42(TB/aC>><;R&)ULK"i!1'MC>i;.Qr(>&Kk/:N9VX$@)ZTYaU)"!MV95d%YB;91MbEB$U4DIb:s4;SFTGO<37>er8YF*2jIBb2XDUg%dNK;V%E11X5S#6X"IZ;?IL?[fS:3E$-i6*Q2[>\/#JbA1DuW>%J4K"(C2C@&LG^b''leMC^:nSbQP^FIbC(Fl!?@(X*bEfl5(aS@#3<3GnSi.JI*kN>_q1-D2,lM#>QIDr%G3Eu,8TCP<'0ulVFlV')3Vp!%lNYP,eI/q_XNoh070<fPPM&u)0XrZ]*bMh]5J`SKf:5BTQ\(cMtkTe!`_R7eP7H7#?NmDi'$:$n[j-\Yub:+bVm\J&Mj#I<t5Kf"`K'O?2nsSLS):1f<nC4d7X-f@D[r?jPZ!p@qocJeV[s2ZRjsXrQ2Aslq`.;t66>+Ig^F;lc+Z_Eig+/-(B=ckS_C0I/%lhROA36Zc@+9`8\U[Yp$>4\:8(GL_G+JeS]5E&Cn)7dVFhRrbapbI8Y-ftC'gLRHo=[h1bI,R"h0>"=1JXJTq^,ZiDW(._*5OFIoAt+_.m&/@+9KbD(YF]!Umg`jAluC6\<m"rkHr;IggEb8]'8^(fG!mKc>h2r@-l^K2H@>$ZPs)JGV5$(9T&Y=%X\&;j&puPgu>!4.B^]]FSs_Dg#"BBC%sWSH+oWg$(E,IT?^B2aSjh:G.LC41BgV/Ib1fR9dPW`#n;G4nZYLnU%_Rn?4o;=i;2qpqR?dgqYA3(68sdMfR:.s&T&EETe\rj:`%K3jI1s'qf('-E"'!s_AU+RRAGHaTU$(]"<e#0lJuBu]/?SN4&JD?>4]YC+nJ=X22X7Fnj?eNBRHWI"/r;-=nZPfW3#.%4C,5i!LEWaa-r8cg54[mN57;U5G"9TR"&W2!#Vc?G:;n6eQVp"!0]9bc*(9<WFHM1rbC5L-T9]99D"6dFf8U](B.AGl:ngJid6Np=^#jIP]]Y!J\SZ=-Ved8_X?aQo8s^%IGM`?9fq>`K1dG.g[DaYDn?t%Q:A>&m-g5?:US!!gB'Lf!Z[u$!)Jl1&?j6<^8X+L2c1JoH-tX6@)\c7=H&"6;mWK2Z)V&uVl*&V.eUoIn`i3UQ=d=WPaD."@bE&%MtHO5R2D`>0Sh07n,EMj''cp,o]bmV8SC5R/Sj/CFBP[D-b^k/5E%:3`;tp#X$27n/b]dQ9WLCJ19JAhb-\7R+&0I4rA$Bs3DUI.AB)'k^K%0$'b/%)5dVifj-#VOO5T*LjiORTV[(dL5F([hTYmRD2*4pTA)l?9[FLZClR!>r*jfgRqRJi(E&806pg"sHXdkA[pWdJ7dR;Iud>bKhIJ5rZWXZW/9i]B;<Fr-S0ob?WZ/lI#0%J;A7LDJo4Kqp?$)55bl2j3>8(BBk_?@L`0Ac5a6p`T"/F*hYh.7*fkd[<.D0q6"-/r`DoPsl-h@2;+E4itVfa7d6G(LQ>2=KeF@Iu2o)Tot~>endstream
endobj
30 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1410
>>
stream
Gatm;>Bed\&:WeDbW_<S'ZC]NZ.%0W1aR"MUe/Ah^>teI%TX2U@oM-tVS@RM2e,1)1oK,FBtf_l)inS8$4aeLqAi?45)+$$8qA`'Dh5L<Kl@%jYk>=k%FSb)$WoZfk6?SD?@[>M7R^La70<gn5e0iX4CpdW>`MVcnT<epgd1fo019iI_1QtpH4/\">G9R#0[%r;h^!r1.$huNX<<Fq6HtfAM$Y"&]2/=bG]\!(WP>^`#Dge@KZKB1/Ft'gbbD?jice!<4Ff?8`Aj8/1)>ttW^N)5k7>KTcm)WeIa0I.2nZGeo")`+oTs%F.ED>6F6ug>c%$B9f8TB13#G6!PHcqkai[5OWQ=d;KYO^paOM&/kNQX4*p-*4LkSB.,f]F"W?1"fbb?Mf@$q:f#`,6*Jn]<3WV@dF_fC-3,a3r'#b4E4"1n)jW*(*W2*M9OUW`f]peBM2a*K?Cde0/K^jlPnq3&1!W94!(%6WWka+Y"5:^FQoBT^)OHG0b_Y=?Y*)G3!98k9o&:ZQ!lPRj-A$k5^PGRUCGg0o(JdKZ<JVME?A*d'(,;UU&Z5s0R%JHcTmS6>d/9GA(ni:C@=;*q6X/UEe&0r%Bg`2>K\qrmD$k6B@30M@i%U<HWI[abE66eO_cdhF$>2SVQ?ki+#I:#'EAqLec=\;.N/7Tl>Mk&#WK1#Lt^N!)X:jFPX`IFJ]#2lR[s(K!!@rR;6p(H)4OR/*5i(4!<!BhM,MID>]%*;9-rnm=r2Iu]df&mt/jBb<RkGlXFBLS%e<1RC!I9NMH=8!piO^hM(UCX^Q9f0DI5$tbHQ!(U)J\kN3cX8io46\$C5kW-ZYEi44[mmMS*H!*c,I4]!"CWB%]4]mi><4PqI0_\%][B4+]ci)=(bgU,S'P4+u7$W[!0(*%D_Dq-n@?'\A2JUkTg_:Mq,YL42m8Q>8:9(sWC+4i(.\pp3`S\)2+#C.h)6V`"Ju,rT.sm+@2$i5)(>!I2r12.HJ]P?]=-Y!RM;OPBK(?d%'6jYROp0mLrS641Q1(8>U8OX%k\=M(^VC10pg[%:AWbk`2dnB/F"RgUcq*?$9\S>Be2Cb"Dq_QG)slnn3kkO%4srOo@H4C,JWC%Nj7T'S<;!\*h:m*qS_VcLFuk/Qe4*J&]8pd_VBSE0!]Y_ZiPi>3]s"7>JI>`H0O.#6C1#/P(aleLGgNL/>KhiU5@=9)IbdGBJ2`[>^?ip\#=EQR\$$T\hi<Z/;c1C04>R4N@jg)cj$PBZ<q#C@U_<]-X-'J)%G_cJeXYF$2Ya#\,qH$5^]4:)A?>GSQoIg\Jq%(uB0@ZRB;<Kn%cojVC<Q[KCJMhZo^Q)83>^/WGguaM7e9c)'9uc/+K$9#4L_f6U(<"r7Lb>oc0MB5eY]mIFLd=8.IaK9\;t7PF#%T"l[O))9^;~>endstream
endobj
31 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1255
>>
stream
Gau0CCNJ2h'`H=\\EtZtfa,c>PKD%32OhgC->=Tnh:_-K[S_j4O^)%NA39bY/&/kZYddtj);CgbHdBAd7h6#s\o;g'B)ot>kkp/9lS,sRCa'OII5i+Q^:%uhC$Wk6F:X"63='u?Vu!B)Ut`Ij>(@#_1HZ\>B;?U\PEtcr.q+/g'g`-g$^'<Cd/HR,"@a13o@OTOKYWhm0o6/<he-moSg8VQhSJ[^L@8&#T@L=UP&=5B@86^9:k.%>kp7TkB3DhaUk//J;"!7Bf,Zh\M=dRaQ]s=WU$5PoY*YFWlHeeF(:)l'KfiR\>SHBu"d?cRRsn)`6E]SX\d*i&nbXkTe,7EP56JPL4X3U\`A=04;XeI"PeC#0*&OY'D7f\J[[pRtKIs.\CdseFKeKAH7&1,3e#ECo=T`K:Yqgdg2"l+6cp%,Rq7_A1C'HW_dN/rK.@VSoK3:%l^>$-.A_4L-/^V*j.pC*jD)DAfas/n/0dT6'R)$sh+&_Ycc<s89&Ua0JkmK%uYQ]o/kXTd9h$1j8`[d2$e12eM)[5S=_dMQC:_<347cE@fO5]<fk.#p7@5PL)l5fU'-R2W]UO+HMUtb,rnG2*1/GK;R,q@T+6D!;2(1=J,hSnTqkksMf,P(d0I;k&Tg0HDUZ$q;mfZX)Nf@`th"gK1ooEgP.o-jef$1I+88BIdnTu[cNrg47Ji$2A[!b_WC66eMl5(e)$6o5%WS=A4G&r8Q=.Lp$A9"g>A?BH''TsF09h&eo+<G+pe-8dLI^*R^Y#a[>s(f;UV##MP92mI:#=%%]&I#)>(',!)1o9CT`RG0!!HTro53fCP1n-q]MHq?M4jbN;D-PWiBDHn+:*\QQ>OY,X/+bA)"7RW-V8s:DiP&-$0VW'Nb5;aNG7ItT>ncjP8.DMj5,#;?Jl[G,:C7;X!$Ktj^d;Rn_2AfpugUABN>S4m:Qm=AH`sOHR%E*4U^$4K2<YIu/%l2,QTkmDo2TR%IXqjDVHo>]3%/n_"8D(>YY!0;fKA%_57%#=[c4:4dEOB*K[UO)[V"-gl>tCbf1[O'YPHT%j8BTU\_jmUaOY:pIni6<0FQ#!%q<RL,jnFb/=='2Uq-PSMjWb[$Y`if<^XHl4,uL)7q(*ZJ733sS($Cg/8#mfB32S+kjPP*r=`u5,'5:Q#j=(VnI3gNof@h$`auEl9T?)tLkBu;k/kD8C<KGd%RVb+O*^/_c6W9i%[Sp&FCpnqmp9'-]WjWdIL5RTa_-6gS_4Ut6If\uB>k7~>endstream
endobj
32 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1242
>>
stream
Gb!;c>BAd^'Ro4HSFU4=XK[)iOLEW[9Y4j_S\9^0Qh=*DMZrXj87#N)@1rQdO(92'&d"c>'Gpt9cLj7hr^=TB2`9LQ)8P>>\pmVN%ZD`"4lX<A$N:mM^:.d`1N5n3GPW#"!@>)poMH*b$+9:6Ku[[eD4s_92M6m"BYjcg(_`T$?sP:KJP1BH*2a#r;iIXVDKoKHDt;uDJdY[ORD\\[@p`BT4#$L8UGM;j#CJc!SJsK"gN(-Z/l5mo2R-0IaDV$oqS_t/'2s]I\s.5+`/U;-J9,*<1#Ws$<gnF'<pj$^[/k'Ihe=J-ROJ^CU$_R4nbDWk$T%IN7J_Sk$U&_s@`eke$2)=HI1i7krkNdhQY4>-FuoQ88VgRt`.e3)HmH$ljpLOMW8N1@9QE.G2X/dkm0aT1Nd%i0]hHmrGaGBtMRC[s?+%n$d1@uur6>SQ@O];NR>\<^RW>6i'Tj,Q#4NZK,ZQ^(^Qa@WrqrVjr>XO1]I:%bLTqPIG"I<DJ5#8k#G1*\A1REifFO:HFaUfcC_&qS'3T1IX;uEnPU`o5`X:hQc9[oK@!$$YkAUkcO*Q`m`]7[ha8[jD50)#P1$0ZT`,ktmQ>2YYcG_E$aTNg2`#j+u<i8HbS<Pi&_?JMPRca`9J%:*[/lgFCP6Q8Vd$lsu=0FmbE]K('.u=L-W#XiB$$(7j0i-7CE<"h4cG-,r&gPt!I(3>'A'/rkS>[-Dedj9cf2f^S.^#J)/1j"iQU.1GiSMGM:7?t7jL(!r&Qt`,s/e=3L_8GPniB#lZU(mW9Q*!(WLld#`2\[8G(O'.E1Y&Fe2UGIC]ZarY-]9RpBL,]c8[QYi+IF,Xc@(O9d3rtO0?Y&M0l$"i^oWP9Gos=&C5>+i&U[pU^!6<)obeBfX[/$V@o\=RN5+Jc;T[QirdD:5QG@"MhL?FM9L6#'l_?_jFG&4hPoaN:t!P%jG[_fb(2:0Z(g/c^Ge"A:.?VgAc*usA6IL6:*FVi4+]JI-<[$lHKIcchCdq-3l_lRR`73U@*P3c'$$^*Zc<!L`'qLr._><<1SRs-\?/.%^Jef7h!SR=0qY[qqW'*$X$n*6qjnTMh5S`G-;WHCLfAdE=c`'S/n$)te0\UH#K+_eq:RBH5H&>4onZ?@T!(GbY-@SFA\ET1Hcf0tq4#]@^'):)ZhLDq7S8Ms'sXm'g<deh@7,]-J^a4<+Khk"#Kt3=YB?7iNGkCa>i3H,)>JG4o0`.c4dX$.$X3Q3jt"oC~>endstream
endobj
33 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 675
>>
stream
Gatm8?#uH"'Rf.GSB:C(drAfI7@;XiUoBp/fT0"/:HX<q)QBrE^c3\$J+)Jdj$u/-9p+t_m_.eT]6XsB8KV8e%o_C1JC3E8(4n9N_]/f-HjI)d)K.B:Mn-R`dt@$Cm^k[5d5LTDca8*?`buqV-Eu!en!Y9C_-tQ*22/J?hMrtN7qLVq7j`4qY$D\r;;tfGga5K>Kp%eMZf.6=))mBY5Dn,G&=c*X$c1.RKXZ(@`HN.G;4`8t;V=3;[`=:O_7]0*ebeg8E"_P0m"r-.Tmor6'(]7hjEk%LIbJ/;HDggH)U1W4eB=2_Kl.!K;#_?U-\ps,C5SuqFfUNR*j%0=jLG)+A!@A@X6oc.q??IQK?73[F&g;g3m3u;)TI9m\bTCNJR8Bq[_gVlH%h`JoNs`.0PnFJgoAcdM0+&L8`j-UgtpHDSt]s_M-<]NI""CYqPD,TTnYue&a)uKRZc()RT_ks=)-A=D?+gl50dA%EH.AdE#BIZ7LHJD'G["V!`CKVA9K=V]Uu%lR?FSChX"Y<`k*]ji$S%6lQQk?DmGh&abAK>NU8E`MiK4361;u:*JBa/_0=mXV:qPP3m1Q#;3YLnQq'B8>jaH*7HBu,jD+RJ1m^L'\l6HsfBP<sbUspa+tL%DCMT4#OddS_/KEJ;+`*2GO*GNn&e$U1^B$$T<(m~>endstream
endobj
34 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1715
>>
stream
Gau0D>BAd^'Ro4HS2/i%-O!qJRpjKXRr,W%B.msdpPFYB>C[A3GqGG;1B-`*Oq"Z>,\5%%L^%'EQga-cqMYS)^+B6?>6%oeT^fi"bD+CYX;5NdkTg!hWdLjLq94jn3^()f6+:>9X4QUp3kS0<'>IYR43"T6g9e;+d-q*BfO/j/$V*32Y,!"&PB:5LgKh>M@5sKn!NsTi<sZso?uuLGEtuf(pj+K[VGi;JjKbUe>&E@lk@Q0`LZ8QuT?)4&"mo9EW`L#Y?UUD]-:MDX+d(bJT=-Ij!+3Nn8snZ%9-aVb5cu:<B^q,&\!6QXc_fC$MqC'Ra)(HWGPq?!$>IC`L%IE<f4i(hLtFM^46kXBg;Lg=cn[Zo;n+g=N_;>h*D7X-b`HR+ml@%I-\?pd#)LB:SWq:>#S<k8_HPQr[_X)?BoL,4Iq^;f7!1RuYL*Vm:q_g5,[c-<,.u@UfA?R@RAKXdi8)-5_q<oDHU%6Y5(eDEC:o6H%t$pk0'KtYbMu:;XfFRo!Er\pB!2CNNBKtWS^AA:rZEe]*ubaDB%piPr1"4FYhZ<"XN*eMm3Vk>M19o=*jSff]F]GKZb)l_C.pur#"o;]<S`D.hLl2rI2YJs'BW48]He7TY"(T^P/c&-q/Lij3>>`0'>_Qh2mMF@h1Ukb,nBPC1^QO:bj(BGTlnO8X2d4L%mmEc3`rTE0(@u8&(e#9%n0$=]S87s`X.g\i\h814kq;L#1HS#6KK5alt%S.l:s`".p=[Y=cJ96pG+<pD=#P2Z,\/W<2=89(Qf]0rQcTE$PD$(eiblH&*)p2be#XY/5kb^8Gcu(-oT`S:dCFkae]r*<T'NuAXd4\#ng0$nL/R]+d,8gYsHbg?A"m"`=1E<R,bM3LKqet-8Bk!-Q]H;oe[U&2XF`#?eFM3'5Z"*?/@%lrGMuWb3dLJ/C/a<^NBk8Kc;I?q&W6P/Cj8X<n,3S=Ns0Hhr8qT%R.FD:,F7\ps7(fNP]K?ko>erE9r4&Yc,SQH22M0GKuX]\f,CR2"8uleCe)!$`D<YNHo)H;:01jPYs0IPShS2HM$I.AW1Gh53'!!)qu'u&3Qh2C,+s`@T$5$"-6IRqGb$l#a%1VR/7M9Bqp"NcJijXk+df3-R*)a`5%PLV:ij+qYSHp,RJkReI+tm+;%`h#Z)St+/(s%DYlLE:s1a-.F;DuK`X*sIa/XR8-#ep1%.\Bprq\.;h5QgBNo[u+CRm=2]j!j%6"V4MUY&S<CUlY]%=?")%<,Bk1oDmp%$;VW*29#d@@crksQV9E:l@a*QM]=KK?Z$G2+L_k''gON>o]:("+>/::S((_k1";4qf+"JB^mk4c%u=#.`hB-$g)*9qOEEJghIDK-fKc=Fi=8.MWVWN==M-D&'dJaCqb"fo>XK&Y$.ET<']$Cp1+*.-P1>f[nGmPQ`iM9<=467ofr7hKkaV?<8a>O("?*ENpGY#Sf8*hR_`'!l%V!oJlA_\"e'^)]#7^$`O!^#XkbXo4TePT3j7,lKLX+SM+BrSn8S4I>SA;d(i05ShN9W0T(@4)tk*hC*`OMV[P;P`(>Iii5ZRIQR)0p7PlJq-?8T`7L6;jI[<?;GIES'`3e6(c"tBiN'%'%j/^@2aQfD]K#]BLXrG8Y'"JZWd":;P7EZl%dV@I0AYYKp>(n9@mb$>r)b<n)[#J>G<.A,TAe2/Sg8*D>iOoE%Rgs-o(t\Ib#Zhb>r!/'jYG)~>endstream
endobj
35 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 736
>>
stream
Gau`P?#SFN'Re<23:0XJ;%r+S9RC1t'iNZV,MH(&;IUbSEMsmk/&ZqpFiYDr/(1e[J\fruch6gNcJ`a+bFAOZ%-XVQ%QLtVF:@Rn+6b)s;sVQbmE3de@H&UR5nYoDKF-W$0oM7JnIk3_[hfefn8,?TFJ@F.I]k)a`*$oF*sX>D(c_JY5l]?FU!,o]DcuYP6TP>D%'T*76Xkj,mLU'2Y#c:hialGq)S(<^,E*FZ<0rlg`Hdp*8j"\YY'[\7"<FQtcW*0X=OUfgW5Wm8bYGB'62CSWVm+R%^Ud8gF\TZW^`&i-5NcV6B)-Nc1TqiA[tom>YA)dA*>Y&K(>6fbi,Xe#4u-N?V*r!n&m+(h^(krhGm/QAQ-AS0KMn*#iV9De-NCB7Koj>WRq(_EY8=bThsms8Yh@(m2[";SlYY8_s'5<aDg25rn1.IZ_e-E:CcSo$4&D*bnmt609aU$h3no#e@/k?3Ishb?O_SeQ!PMQPoL?Ad*4euI(4(h\6SLGRl7pH:OWHLa2p1Fr.,^(H\42,EQ`1i#k[>qT]i0%3KqPl-(2>9tLL)ellVMTA9'@]Zf8[u]1Q,/k?9ID].ZX3^[k?0DRl`0=9o.S<e)!t1_Y.6+cQ""Q;2D,u.5[dDL>R'/Tfi3%AsI[rU`FHaR-44S(-<K(B&oIBjA0\MP3I)1'6bSCV98U53mW&A9;^j>cdqaLDf1$>]YLFX1B_%.Js^e"k8nVU_>4K!npIM~>endstream
endobj
36 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1081
>>
stream
GatU2hf#8L&:Vr41"RfHe5FMO&GgFq8\*YLmG;`5G$c`$S1k*o?tTqEHhZ.LfT:cnM43]r!l9,qD`mX9?j7YmbaoUc^n3&\s2BNaO?N[Qh%8!rR&6XN,M(0\qsHH6'*`Fj].=gIA4M\dJ*b3a"E#p`K#@mQ$-WWr4sEZYTLgZ.nA2RJk'REZVcM<nW)k&`>seD"@Jia<0igLUZ8.JY(qdMqAG*F5ChsnGZ)iGY1X-_)Es(#%NP%PZo3=frF4EILI+t(1M[%HH0X;rYS1HEhQC/WQdgh#J>g$g@D^RVcchRnZ-1k!A0M_*+.t`9O'fOY08a36,"mR$ge#^RRY`<(n?qOHdDA;@FQ5OM'dZ>Vg2!=\F)#$@SMY!"J^5!n;$`;L7_"p4^>^TJ;GBV=]]RZ8Hlh:D/mCX(VTpb]cip!(k4Y;(7Q?+UA7S,P8b/Jt)*R3?bZfshl:tDWt.2jmUf6kkZKLa&ke^3eGQB*-EO4XX,"f</:Z:DU83\WBT7!:c5"(jm[U&iBH9n&cc,[hi*!9^ZIX1gQR">Y3B8=R>',/3h'O9uH2OG=XUbXs$[-JrEhRGm#H\NWG$^8=W0VTQ'M'k@tChHrV*?j3LZq@XPI/li3#9_l=hQtE'iqX"Iu`h#8K][/KcitI%7DSlEj=4:N9k0Su41I[nMm9L8s#36!tnNhA.B6:%%pr5shE=s9\F^O*u$no4&6/g*T$;t/dPk9IEE\A,*N*9-b.(IJL\bQ\G=%SmOMAcVW!2kDsaEjmB,-&h0eI4`U?glocMqX!%?5-Qo2n!?:OmLM0-?VmB]2l[V\a&Lf5^[;T?A0XK[#1hZrc'R?9^)aYdrNT:SZ4R?^P;_M3e^IW='R&jCfm'+n>35p=<];\eND+P.%3s!r/>H=Tc;CkpS8T'8[=h)rX4(V`P?699#eE,-#QOtS%<l4W&!gF,hB`Dn@%4S,Skn[VVbA"m\9S"E^o*VMF,p);&gGaS3%'`%$/+EP7T%qb,]ljPl@QgdPgUtiZTLUXuH(66UV^,2=5Af-Dt>Dn8[MYn2uk\hnmGDU6(sH&5eia'Coot<l/YUU]1>?iF>7~>endstream
GauHJ9lo&I&A@C2m,TFi&PR]t!Tqah1U^MqT#@lOT/>#jW/XIY!a(U_lMgW45=A/M(oQap7>[gp]5Jc,%hIaZdD;;n\d!Bq_s&HP/g1-%>VZWU'jS\P5=S>"6HK4pY<>)_^`pPm5d;;3#XT:r,3#7Y`O(dN2.p)_)?f.N`>''mT3mX=0GSn+9441nTam^Vq^`G58kTqQ@<@mon^BA/LkQj2U=ju%N$<L*W#jKUbi=6]+C;t\rJ/!6r8O#EVYA@Rpf%uqhH)BE6G_=hc>eKVj]J$<quH9Q]"efS$p5=#;XK*C@Hm>OOn:ojaYL1/"?R_JWJf*$.F2Kbn0E.K*dc/lFqi1`Gg/@,IMTBfR``)ghjB`NefMo$kNShq@Q$#(SoLV#..38j3=@gu*/)qpg&pEI7Vm(9\2)H[M^=>B`uHI"ZreSRk3Q;c8tB;2/pNo@HjpJT-^8!/A=f"k'FbeRQ0gR`ZFke2`+4%F$i"_bFkf)B>pNF6`i=&u'VrSFYuBCTI2@oQo6osUQRjo(S<PN\=?-a.k6b=!Q"4Ki2bJBsqVqU1:iqSh1\5/pe4bl-OSH6bhqs^'mn0q]7*GK<dF;].DN/gjO;DePOR<?XeLNiqqYOsY3fbQ=Hch#!Dsa>a\sOm.(;cg"ApcSNG"G<=Lb&/5^_QF0\BXjcL[0;bi?:@"`%o&E>)MY+FsLV>+t99Nr'P@,=d#4siX]lP)Ql[NY#/M"m3XR@!m[sHYenF^03%Dgc7Fg=_I5kC>(Or&ZbuDVdhORD)eN?DQoENVZ:^"3<5(AQ*C?FQ"up,8(@//_%!J3f"5_h^kq[1[DBX3N9-;"'C0i$cp@uid,L)C*TJ:eVh4m7cXMLLL[p554P/U6uc_O4JksjDG*c?N%#/Zk*pPG`;BW-%&,[\+aZXqnD:$,,ZVD$G91T.ZLW_.>pOeYh!]]nNo>[MuYl!6@hah/sef\+@VB"_T%V;K1HENOpj.oXg'm5GuoVR6ai5EAnH?ai[HrM4Z6BAdscT`RN(8r5ih$L#`e.t9ND.bt@-<t"oMOIgn>oW+mYjBT;Ss,k4V3O<N1dU;kdkfomD*]CCU=fMqomq>1fmr'jsi]$AkqYVnYR%8=[/MO0.gB6@=g));Cg@,i8'u@-WehHq>NGMa3~>endstream
endobj
xref
0 37
0 19
0000000000 65535 f
0000000061 00000 n
0000000122 00000 n
0000000229 00000 n
0000000341 00000 n
0000000446 00000 n
0000000418 00000 n
0000000523 00000 n
0000000728 00000 n
0000000933 00000 n
0000001138 00000 n
0000001343 00000 n
0000001549 00000 n
0000001755 00000 n
0000001961 00000 n
0000002167 00000 n
0000002373 00000 n
0000002579 00000 n
0000002785 00000 n
0000002991 00000 n
0000003197 00000 n
0000003403 00000 n
0000003473 00000 n
0000003754 00000 n
0000003906 00000 n
0000004776 00000 n
0000005897 00000 n
0000007335 00000 n
0000009043 00000 n
0000009971 00000 n
0000011197 00000 n
0000013000 00000 n
0000014502 00000 n
0000015849 00000 n
0000017183 00000 n
0000017949 00000 n
0000019756 00000 n
0000020583 00000 n
0000001619 00000 n
0000001908 00000 n
0000001993 00000 n
0000003534 00000 n
0000005288 00000 n
0000007256 00000 n
0000009198 00000 n
trailer
<<
/ID
[<8a6c7f848f6a2a1be56036b86245afb8><8a6c7f848f6a2a1be56036b86245afb8>]
[<c676df07d673064026e86bd63f52215d><c676df07d673064026e86bd63f52215d>]
% ReportLab generated PDF document -- digest (opensource)
/Info 21 0 R
/Root 20 0 R
/Size 37
/Info 12 0 R
/Root 11 0 R
/Size 19
>>
startxref
21756
10437
%%EOF

View File

@@ -0,0 +1,346 @@
# Les 7 — Lesstof
## Supabase Setup + eerste queries
**Vak:** Technical Foundations
**Vorige les:** Les 6 — Next.js QuickPoll deel 2
**Volgende les:** Les 8 — Supabase CRUD + Mutations
---
## Inhoud
1. [Wat is Supabase](#1-wat-is-supabase)
2. [Supabase vs alternatieven](#2-supabase-vs-alternatieven)
3. [Account + project aanmaken](#3-account--project-aanmaken)
4. [Postgres basics](#4-postgres-basics)
5. [Tabel aanmaken in Supabase](#5-tabel-aanmaken-in-supabase)
6. [Foreign keys + relaties](#6-foreign-keys--relaties)
7. [RLS — Row Level Security (intro)](#7-rls--row-level-security-intro)
8. [SQL Editor — eerste queries](#8-sql-editor--eerste-queries)
9. [Supabase client in Next.js](#9-supabase-client-in-nextjs)
10. [Eerste SELECT vanuit Server Component](#10-eerste-select-vanuit-server-component)
---
## 1. Wat is Supabase
**Supabase** = open-source Backend-as-a-Service. Geef je een Postgres database + auth + storage + realtime + functions via één dashboard. Gratis tier voor leren + kleine projecten.
### Wat krijg je
- **Postgres database** — echte SQL, geen NoSQL
- **Auth** — login, signup, magic link, social (Les 9-10)
- **Storage** — files uploaden (later)
- **Realtime** — subscribe op DB changes (later)
- **Edge Functions** — serverless deno-runtime (later)
- **Dashboard** — visuele tabel-editor, SQL editor, auth-management
### Open source
Volledige code op GitHub. Self-hostbaar als je wilt. Geen vendor lock-in.
---
## 2. Supabase vs alternatieven
| | Supabase | Firebase | Planetscale | Neon |
|---|----------|----------|-------------|------|
| Database | Postgres | NoSQL (Firestore) | MySQL | Postgres |
| Auth | ✓ | ✓ | ✗ | ✗ |
| Pricing | Free tier ruim | Pay-per-read | Free tier | Free tier |
| Open source | ✓ | ✗ | ✗ | Onderdelen |
**Voor deze leerlijn: Supabase.** Postgres + auth + dashboard alles-in-één. Geen extra services nodig voor 90% van je app.
---
## 3. Account + project aanmaken
### Account
Ga naar supabase.com → Sign Up (mag met GitHub).
### Project
1. New project
2. Org kiezen (default = je naam)
3. **Naam:** `quickpoll`
4. **Database password:** sla op (lange random string)
5. **Region:** `Europe (Frankfurt)` voor NL gebruikers
6. **Plan:** Free
7. Wacht 1-2 min op provisioning
### Wat krijg je
- **Project URL:** `https://abc123.supabase.co`
- **Anon key:** publieke API key (mag in client)
- **Service role key:** admin key (NIET in client!)
Beide te vinden via Settings → API.
---
## 4. Postgres basics
### Wat is Postgres
Relationele SQL database. Sinds 1986, krachtige + betrouwbaar. Industrie-standaard.
### Tabellen + kolommen
```
polls
┌────┬──────────────────┬──────────────┐
│ id │ title │ created_at │
├────┼──────────────────┼──────────────┤
│ 1 │ Beste taal? │ 2026-06-04 │
│ 2 │ Beste IDE? │ 2026-06-04 │
└────┴──────────────────┴──────────────┘
```
### Veelgebruikte types
| Type | Wanneer |
|------|---------|
| `bigserial` | Auto-increment ID |
| `uuid` | Random UUID (default `gen_random_uuid()`) |
| `text` | Variabele tekst |
| `integer` | Geheel getal |
| `boolean` | true/false |
| `timestamp` | Datum + tijd |
| `jsonb` | JSON (queryable) |
### Constraints
- `primary key` — unieke identifier
- `not null` — verplicht veld
- `unique` — geen duplicaten
- `references` — foreign key
- `default` — automatische waarde bij niet meegegeven
---
## 5. Tabel aanmaken in Supabase
### Via Dashboard
1. Table Editor → New table
2. Naam: `polls`
3. Kolommen:
- `id` — bigserial — primary key
- `title` — text — not null
- `created_at` — timestamp — default `now()`
4. Save
### Via SQL Editor
```sql
create table polls (
id bigserial primary key,
title text not null,
created_at timestamp default now()
);
```
SQL is sneller + reproduceerbaar. Voor productie altijd via SQL (migrations).
---
## 6. Foreign keys + relaties
### Voorbeeld — polls + options
Een poll heeft meerdere opties. Twee tabellen, relatie via `poll_id`:
```sql
create table options (
id bigserial primary key,
poll_id bigint not null references polls(id) on delete cascade,
text text not null,
votes integer default 0
);
```
`references polls(id)` = foreign key naar `polls.id`.
`on delete cascade` = poll verwijderd → opties ook weg.
### One-to-many
`polls``options` (één poll, meerdere opties)
### Querying
```sql
-- Alle polls met opties
select p.title, o.text, o.votes
from polls p
join options o on o.poll_id = p.id;
```
In Supabase JS:
```typescript
await supabase.from("polls").select("*, options(*)");
```
Automatisch een join.
---
## 7. RLS — Row Level Security (intro)
**RLS** = Postgres-feature waarmee je per-row regels stelt over wie wat mag.
### Zonder RLS
Iedereen met je anon key kan ALLE data lezen + schrijven. Voor demo OK, voor productie disaster.
### Met RLS
Per tabel: enable RLS + maak policies.
```sql
alter table polls enable row level security;
create policy "polls zijn publiek leesbaar"
on polls for select using (true);
create policy "alleen ingelogde users mogen polls maken"
on polls for insert with check (auth.uid() is not null);
```
### Voor vandaag
In deze les: tabellen met RLS uit OF met open policies (`using (true)`). Dieper in Les 9-10 (auth + per-user RLS).
```sql
-- Voor demo — alle access open
alter table polls enable row level security;
create policy "demo open" on polls for all to anon using (true) with check (true);
```
---
## 8. SQL Editor — eerste queries
### Insert
```sql
insert into polls (title) values ('Beste programmeertaal?')
returning id;
```
`returning id` = krijg de nieuwe id terug.
### Select
```sql
-- Alle polls
select * from polls;
-- Specifieke poll
select * from polls where id = 1;
-- Sorted op nieuwste
select * from polls order by created_at desc limit 10;
```
### Update
```sql
update polls set title = 'Nieuwere titel' where id = 1;
```
### Delete
```sql
delete from polls where id = 1;
```
### Aggregates
```sql
select count(*) from polls;
select count(*) as total, date_trunc('day', created_at) as day
from polls group by day;
```
---
## 9. Supabase client in Next.js
### Install
```bash
pnpm add @supabase/supabase-js
```
### `.env.local`
```
NEXT_PUBLIC_SUPABASE_URL=https://abc123.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJ...
```
`NEXT_PUBLIC_` prefix want anon key mag in client (RLS beschermt data).
### Client setup
```typescript
// lib/supabase.ts
import { createClient } from "@supabase/supabase-js";
export const supabase = createClient(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
);
```
In Les 9-10 vervangen we dit door SSR-safe variant (`@supabase/ssr`). Voor nu volstaat dit.
---
## 10. Eerste SELECT vanuit Server Component
```tsx
// app/page.tsx
import { supabase } from "@/lib/supabase";
export default async function Home() {
const { data: polls, error } = await supabase
.from("polls")
.select("*")
.order("created_at", { ascending: false });
if (error) return <p>Error: {error.message}</p>;
return (
<ul>
{polls?.map((poll) => (
<li key={poll.id}>
<a href={`/poll/${poll.id}`}>{poll.title}</a>
</li>
))}
</ul>
);
}
```
### Wat hier gebeurt
- Server Component (geen `"use client"`)
- `await supabase.from(...).select()` rechtstreeks in component
- Server fetcht data, returnt HTML naar client
- Geen extra API route, geen useEffect
In Les 8: we voegen INSERT toe (create polls) + de /create page.
---
## Bronnen
- **Supabase docs:** https://supabase.com/docs
- **Supabase voor Next.js:** https://supabase.com/docs/guides/getting-started/quickstarts/nextjs
- **Postgres tutorial:** https://www.postgresqltutorial.com/
- **RLS guide:** https://supabase.com/docs/guides/database/postgres/row-level-security
- **JS client docs:** https://supabase.com/docs/reference/javascript/select
- **SQL crash course:** https://sqlbolt.com

View File

@@ -0,0 +1,225 @@
%PDF-1.4
%<25><><EFBFBD><EFBFBD> ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 5 0 R /F4 6 0 R /F5 7 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/Contents 18 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
5 0 obj
<<
/BaseFont /ZapfDingbats /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
6 0 obj
<<
/BaseFont /Symbol /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
7 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F5 /Subtype /Type1 /Type /Font
>>
endobj
8 0 obj
<<
/Contents 19 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
9 0 obj
<<
/Contents 20 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
10 0 obj
<<
/Contents 21 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
11 0 obj
<<
/Contents 22 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
12 0 obj
<<
/Contents 23 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
13 0 obj
<<
/Contents 24 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
14 0 obj
<<
/Contents 25 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
15 0 obj
<<
/PageMode /UseNone /Pages 17 0 R /Type /Catalog
>>
endobj
16 0 obj
<<
/Author (NOVI Hogeschool Utrecht) /CreationDate (D:20260607080655+00'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260607080655+00'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Lesstof) /Trapped /False
>>
endobj
17 0 obj
<<
/Count 8 /Kids [ 4 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R ] /Type /Pages
>>
endobj
18 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1932
>>
stream
GauHLh/h:0&:`lHfU7)[:$#!Q/^$(o%rIcjFXG^U!pr,jpYZqj%`Tjp+P6Ym<gIS2"@=Nc5QFICh>Q`Mb^e]2<M/4Oi;F5D?8Gt/L(dsTjhU?iY(jWFT#Cm-*#C/1;VUABq6p9TCt_Ot'pe@"cTkCSP+Dc9A<rIo"HN5%*qLLQ0R;Ja@!R?MdK)ur=%KT;^MO;&;7'iD6MT=0fD8(@So9Hh4&j\AOVq'$)H=o1FtCd@c\:<ZqOdc`q@W]tV^`3iBc=mU,#dI%J.^rc]__sVe4R^E;J!%>GRq^D>!RkB,:#SehBp\jQ01Rs0hab9djPNQFVro."WIr'f4kV]=e>*9B_d;Cm0UFDd;qG%fT\^](V[kfcoW7P$Yf5*[=GL5?8,tqe9.1nGJ,=SgLEFSg_fVl<@b.V$%&61\5s&R=6Q(l>mh$e'\/$0Z_jq@oI<=8Dq7:R>"hP+,Bf)u@94Trd2M2cc>@*+Ha8R#HPVmrQ##aAYGk]6m>Ap??F8A>'tWNsf>;tR]4U2//n:'HJN4KiR?*c`,a<bG\:8jb15&C3$nP`J7ON:4T:'>5)a%)^;U98J(H`A@FVJ`uIT6n\<=eGK>^afY9Zor'K5qiW$ZZCQ<Kp.d!2[!6;".;]/5l;MR=S$p>t6S)\cck>]7RHo%m=*52b$&tBVd>"McXsa"^@F"&;b[NQ4/^#XhV;Tc(q@irNF'8f+"Rg>59"#)YgSMfd?/2QCfE0K,Cc?1)U<cPU?34@2K[M,RB`JQC%F=.#qlRKjmj>gen&-o;D+X-"@+`3X3Dl!-B8QP6Yss?J^,+YTrRZ95GQTY)D+.@PVjjm@(hq>Ct[+GkX9P5#uAN@=aEX2]7Yk#6oMl1=e4.fEB<l7VT*/mFea9-`GY*keiV3#W5c&"s&jqduHN$*4-lC1#s_T?X_dRE*Gfjr,Wds0NKYm#OV*:G47C[j-mt*r='QOIJL3#Sk5I'BTA,o*;f/12`^Z6+ZMIVC`$EaO]tO-gdK]5A<rPA]h5[9NOqqUk0X>Aqm3Y:VWZDG`iQj73j]rM3hfrF=o\C?'G0AC>5^PJs2)ie:lm(QH+c1`[9!A3.F&!X*s5E2#dTH2<=V<"W%>c8`/9pq\@fdP<]Sjc4q-4,$ZPt[i6I1phh<4SM?8u\RAKX-/0G4]75-[AD%`4a6L&F9C`c-lc[sq4#!"m[q<'RfVAU-sFDMZR)QlGnocc,KLI'@pJ96hQ8P]IL%)-/lDL;XcZB<0[.J/)T;\CCsV=]&UQ8esAWE&7Fbu?Mo@'76,(u1O:FiIHg(1^l4M;BMRffP#b4>k>E!qE69m-\InqY"4kLeS\`3Lo!E15h%Y0^;/"OengS)S\eJ=MmlU8Z^$)?B^M?k^XPr;pjY<AiR2k%;rGoNh[fCN&<N>/fMJMq*RhT772ma-h[I)nE268rXn'aX_DVk$facd<QBKjV`5.@?hZ:]YOaonrVOLBcSM?C,B07\qo\\YE-65E3J:CoPYm"JT<2&sQg%tI-4%$u>\N0d>fF:D)-X]$Zm9I$T.n=BK*-<#T)W*$G9Z,S]cm0uM3M/I230mb1,I8@aFEG7@ma"8Y5\t#[#"Z)/[J9iq]Nf]1+!#3848q2$C(e0.lDm)Kh7XsgMcUa@Y44RK!Ld&=,r[ci/-Nh4X">Ca/isJBdRC(RWH\&$=IDV9`HK]-D,]ZK5?KU1+_?D?kL^mQ"&mr.RT%/0TT4uW+ND6ao2iV>H?dZoG07>g&BhMo1g$fZLX<)eNAcXVeC_G:D'lFm.rA!7B@S:r()F"R-3j:dUr0IX@Cbn_h1gnj8>He1;u;Ekrc\nGlptc1S7SCIAe@=T81(Aog7a.0Z9Rf)lM.5Glp'%,3AA)/:qRM66%:m>YDs?&+QF[\V<ls4kuBQU(L/+_8,.+dq4t80nLsCE>je`jeG"7@k-5;JYDg&Gqd*d~>endstream
endobj
19 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1857
>>
stream
Gb!;dhfG8H&:Vr4YqJ&rp<EdI&C?hl81/Q6Rp;C/DYrE0)(RU"#bM+[H@Pmq0OXe\Rj=TN1q)EI<ic0_X`cop^r.$<IKqUCq]VI?#S7?\#9^H`_seR.%+"o51FT$$m=8VjVWC`1HqXKiR\!)iR)+18'C\]In6?oKNu4JOHU)S@lOk"uJ;:UH":UWbY%NCG&VkXJB=qe08o\V#E#A2Ua-Z=A3]u;-ATSdOlAa*9Js;pCYEj$m`,Qe7`mD?nr9Y/F9Vs!CAk<WOf1_$/QGJAT(G7nfV-&U'=U=[)L6"$9X!_R?[@)d]R(MVT>,5ku4KP(.nnBL4d"[0+aP]fqb\)[nQo6^\\'<q+$:1p$B!DQI?@ck(#F;h;EaVT[&Y!1o(s`Gonl`&/Da[iS,K+2U(,6dq4AsM5lYtrtmFIrl>>:f8-[:l0Yp^r$_s+9?9(R$@W,O:1=hs-G#\I?$K#"<$nP#n/S(>)'UWf>8^7+AUi'0o4!X?1DZ7qDT$O&jKKo.R&?m9.0=1Qh.FedkB1@QIh/pTJs-X9C>@pat)/g:<6+,d'N-=N4=5N)Oa2,o(s4Ic"R0)8Jb6=r<!IbBUFd:uJ9p0@&8K<,pCrbcAi/f=-dL-@8DKJ^eN+BjV*:MarC]Ok[B9Or2r^*QX0cnT<fA5[6$X"aF<Nt&T8d6iDLUtM,V"[#E9;8?*IAHlBG$u[TU,Z,+!_7Uj^UI1Oe1G#"U3mR[.VHFj[cS8HV=O^ro_F5&%^>NLm$<X/B5%_7a=bnA)[Y@u;8)'lr,*@0kma\o7oPsl1iTO?Wj0O.\L9DO.-HF\]3QS$erS$*9r)3EbhkCM*m4QcDSDh.*Rs',m0p+HIWsj=))XQp+`5do#3.>^.#aK'^VnSq8dG"LVi_j<$^n[2-QG9FHonXQL1m`^(oD.d8Yp*leQTR>4W.\Lrhr='l.Zkc<?Wu>4\dj],'!S2_Yu-APnPB_nqZdTn69qH)(cZDAG(E*O0Z'+6q7p`cf!FYAgUPrIr&%5a')"D,4#s;)H&WIA=:5IV<>^C0HC24jG+\t]Thm.6Go.VpONKffd78?3=+X5.AB+<o8$\nZ3R]h'D;An:<rW:_ZI_UUKrNaMKo_[s'"XS=2*hDnX<P6,r.Ub5m/!;D/aO/c%iSJgjRBBt^tmP/iP8CB$K?4,`W%-lDc[Z3_k,r#['aW%GT*Lh[a^IXLe$OS[ffq17/SDT&uZ,S8,9=US&UJAWi?=%?H=DiRT+;84"MjR'E\5qjUhBQV+qU%Ar7D!1CS6$9MfTA''HA6m.od^YiJ^J$bf_b:_G[_#'$bg;CmmZ#-V#>Q2qdfOJ#-6]F0ueMBE#HA^'<BUr5;.a(pG#.Tolnd:#pgA('O3_CH*o9>7dUK-6#EbQW>da]!t3AP%.Pm_c#WY7']00qUc`Z;OebhK2k-MjPk:m<5mJa$h(YG%8s5*/Y'1:2qg/mDRXhH/`a9orL$a&PlEp*]Vsfo-?S7(Ehk`J:,A:2%Qs"8^+8mGi3k3_4S;\@*Zasc`Z+r^f_\n<AQf0m!=9ihX)$5nq'eGpa6T)q#ZUo#GAAd5d`[=AM8[>a_4fG1jr!GA/BG.EIAhW:F.8-:DLq1AdiCN:gtGMBDWt4SIXTFQ[umbdkHp)=8G:eP(e?;1I1I$LKnC:mcGYJ8`AeMVIGKVE\:=;J==q$.b9.hqD)gXM/JXsX\01t3XI4D"/qQOXRBCYj<]3]E@>s%@j,05.AjoC@H#<!-"=-Cou-;]K=M=2VcYp>2b&;I(Th=/`a@YTBrMU#leV7(%6;V;7JcHMS<!bg`(!*:rQ:0p04Z88/q30H?f^5q'QX9k\"C#r.HW=B"2$7m4_8l'^2Wd16TNli~>endstream
endobj
20 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1805
>>
stream
Gb!#\>BeOU&:Vs/R!f@H'p^Doo"K'N$Z%dBD@Q*`F#ZcI8_#kFZ'DWnpH-+O;S-WMoW48-YroL67[h_\K1@"irgteD?B!k-.h5h"GRdt6$0/MaE]j+\?p]]H#/GWRq2kXmq8ENj@ZWjJR#4;M6$jd(T`h>TdlPo"LbB0^#T:MWnUL]LPo"0A9_1M`FbARa8dJ<H=eJa$b?s#%$hGR>C?rsbl:]!MK%HZ!WP2ma&&J=d9,PBis()?5U^PDEB5&:%B:%TLbe^7i+Zpj_0j\:Y?=NU6`of%)>U\59.[;=d.bkg9(A$=Xo1I(/Z`o8eIm_"Ao&'t`6=2DeG`k0bYJ'LLKqOBU=2mM4&SUs]W>3H*+k\R%"'M#doTa)XQ9cO_nhAk)E77:KZ[d,A)c\iY<DqCGRAdmR!er(i?.gYnQGs1HGl:^CBT6a4B"#'<nHr$Hmm\tN5Yok]@cIAHI<<B.O#uJQdC>;#kh:_02KX7qDgUCGg)5K0\?a3b'=o&@60E'iaJ$%EmPmoDC'RE1#+g;]Z!Mp_%JBqrV$[Q^3sh-L/]$71XP+5P91)Z:8Hp9bgat;*@:F7=c1`0UI(cMO=8I+/rDQCU51-5+YJu.<>9!"'S8Ti@/=`=d2U80+d[WDpp_IJ])+';k:+3h:n49TEi?C(bg?et##u&]Wl0?=-R#Jj0RB:Lr=Zjit8S0e;]0e]5aSTQ:)Oh&Q0hoS6E080)Ef%ne"(Xs;'JEMfiuX6qjk095c'fis%O`b^&^Yb*bCL)>.R1CPnN^im?sF5M8R*uGHK""BDJ5o"G)TAfQG1[<;=.K$Pa"?g_Dr?eP,Pd]*?e;GLNpU;W:e/GD_91;l^C`.e8#KLg=D^BNFr-13]J(C`MiPg))m)EN.o;oST6YU(9pDLTn%+X!@]Xbrad"gH$>NekZ,Qse65iAp:"$1P<3)n`n@W$=(r5OTQEr<dV`bdYd5\@h3l5b7uM6E3`NmO6fW.ZN=s4(be<Klbn<7j&*e2mB2m,ET@,pur,@_1^mlm?1F@Qo5F2aRW$@A;ns=W,ctY5BBa:@KpI.;-Iei?%'CIfPDskAW^3/Ueg*&D#s(;_c(W:QLPAFe`MRdkXGtY8WGHX?59`o9K%u?:$g7iOSgQSKTW&&BaUN@:]Mi']L+RRr'/h-Nf(>_2"7r#6cYS5P.\Zun2Q<\DkVQsO9gNdeF>UeT>3?a/f$>+L=.cM79)7?8I9p4F8gU#Xt7(;@fWgYoPM]=NgidFF7qWBAq*nc53!:=qLXmBph;BV]s@C<DIIBmY::UH*SQgjhBka8r?):$JVG-JdC>?8K6<ld<BSj(ln34?5@<Ia3$?aigH:&;g?r(4."Fa0&CE"tHkP1h5m(O`u//%[-WNG#Ur$%_F6Dc-G53)FCK-J9WQ-?e&LT?^0$pIpjH^/]i08I=$#0DEPiacDEc/SR00m!2CN'NCbecdQF17qb?ek2cJ&MWXXJB%LW-j&YN(2"cV&c7'pbY03_j,XO*]o%66,L4W4)#:tBID8KGY(L$>G_b#?a.AY!.b4WH])jPu?i+I-%he>F5LnXWaLKr'6g/*148OBpOIK-UJKLT&C=[LJXQ>i8FV9,luZ[s-o#j$'L.^=5L[!ebR@cqoM0l<DSa^Yj:\']=@hB[6*XQ$`/lkO-!Yq=8%XtZI'K%/B_LU>HO+ArOd/`U`=$`#t2[OSLZK@&K\CYI0!i+\R&0;'3.0uIO*Dl[c+SYm@Z7FFs$*h`P.;nl(pFbT5&BW092NO/HQ%,j]r\q2W@k<OsW_%N^Q0(>kcd(S,"H^^5%Fd\4tn/m*_0pD~>endstream
endobj
21 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1630
>>
stream
Gau`T>>sQ?'Roe[30.L7'p:+@nojlVcGF\$b\e:rSij?S,YIRc955Cos1Ydd9cO6A)<q>E/(-H8\U?LG!Gl)\rh%42^JEhTJcMJu>lnGj_=SAcVp7L:U7;SQ!HKK0I1"&>b6tV@PCU[cpSgqR@Y(=_^a)3Dq@]`0-Nk$CBioh'#U$sgO:73r*g_8YhF3r4URE?eF+8ObNDGl0I)KfB#%mNd_TWEd)q@Q')8a<**_^(2I/ABa(&ga*3hP<,B`ro%R@`:O&5Xk7\$,9i5NjM$lg+bO5@OD^<6u<$\25OOYpo<CkBW1B.j9DA<L>1B4TSX(K8g"/CKQ1/,X'A1kFZs;:H\ng.Qk<s5-eLf2FJ2h_,S[$"A0uF]$gt=$!cAkeP,(N"3=4cgm<F;Uf+mShhK!O.*Uh3ZqtX,"^b5X4%iS^(ffArLV'pk)V_GG75bgaPt]ppCt;6emXC2^crMnP`t:-8Ol8@<SL1;l,GN;WBG6Iu_tbK-dL<4CZO=3%-(l<_^Y)d!ht/--V1_]nVRhfI!r<6?1n'0Y.Noi3Ss)jQ.2@>MD"m34PB@d4q(lV'`@CTs<ZMt-5LV$?A"@ug.(C0gE_jcoP2)>Cn3oTq)"iVVO@P*PXfh12Hb3`,0"*N[;UODR>ie!S<E),aZS5G5'AViMk;!sjT=p5e4mai<U+XT>abB`'hFNg:JE/nOShp$[/Nq2%H)=T8(I(kR@VltJ]MS.0H<f[1\rV_7[3t3K0F:MJ-l29u@X5-di@s,u<Y%PQhtBCK-$q7.lBZgGF]n0%0=M&-jiA7nl:(miT:<j&]iSMl)`PfZHAHlZgkXNj6<$Zd3u0hMic8Hde96Qd@>74#6oK,K:-0g#Z6.#V("LMaGLr['?`o)U\";(nBLe#[mNHTV&lSG;`gng=l'e*;PFW/m_cj84XQ_poSQj-X\E0b_<tBZt"r#-??[L2kO\Z;FAog3YF'W6:af=R)SKI2f$,L.r/)%(;*oa>aFu_gtJG/7V\Au=]cV&=b,[<q\EL-!,EL,H"ApZfP21@,]pKC82-.(\3L,+JtYsVuA0*MP-^V&'%1EtQnhS3#aZ%P-uM2idN_+/SE=D-mXI]dfO;^t.RPFAAO)Cn,`.Or<-$[ATX/XXK8.T8d'-@'Pcc6s]:bRkN<U>7iG'tBh(f#%PZE04`n>U<rFjOUubJCW[S=bhXW5*!,"P4@L)lY'.>#WCF%6FsUSHNb2=a0K>nH>_#!V+.uFH<ELL,.l4aPZ_bQ\N*DJC0QF("sg++LMVWfos6l;D:#LO**>I#P*Va>J"lU1Y<[f^qaBb:<$2?_M:VFd8M,O;Ua4[fTdAE9"F%_%VsBn1QMZIm.Huq-l]caYC,`*&caAN^m3Zc'8Q<e=PE'<Nl7G_>-?G_Z,ncT24#hdJ1&Mo'A&DR5F1'AA&pm44Dl*,^ZnSH$b95@d6^8+Wj.hbtOh@f[X\'u3`C>$[!s_QfYH[@q&J@J&]2,SC=R'QREtFl_l7Dlrkj6]5*JT"9rJeVfCJqDPV!/m^lI@CC)WJl1-f;r$h\5sf83b'C)*cPlMHr4X_O$<-h(Jt\&+9Ccarj6gSS$o,1C7<IP^h4)EOrhHlo<9!%5qa=/5KX/lg-&o<a/bDq%"=En'(~>endstream
endobj
22 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1746
>>
stream
Gb!#\gN)%,&:N_Cm.a.q@KZZa!0cZ"4%Z;eh<&0(%iro:?j`'2;ku`HG*B,u!k^%lV::ni[O3=d?nV`iB:!$lnX$e9P81mZ;gA#)!TPk>!"2<tdkc5+ofd\T7pH0?&78="k!3D5r]n$dEX3m&`B7`TW?>(A&4f9dN$WFJ-Nk)ZC02I$%#B_<O9#p7_FR.'XS5<)3P#\k(e*ugqBeC?_i%+97#,4%IqT7'YU6?pWZMep64q(V"d;1-HoQgeMP[J=bG*)9:K-Q>d_Lf_!@Of7;W$]>=R5MhVH5H7Z47(.K1KGYOVf$#doBt:7;_+f>,Ji^E+%TE,1p(TGS=+'!X+A!LqH4pAT<CmFOqFC$]g'f&g$%W$nEtBU5$)qbIg)<]<ECBn;dhaW#1Q9G#%&iZNLjk$3Oq@*K*M5L"jf)\7!RW/qRsD:%]$bLNcW+?IRaJm<p9%m=WOMTo6<]he1Eq-JkT^G[u<im=+aiK\5g['%nsJY[Q*=it2D;M0pK&Fr_[B8X='m(KjeT8fK20-IpZ&>M`QQI3O'aCD2uYFCJWP9PQ?]'FJ=A5K7#J$F@ng7uT%'SY\bXXI;]2%kh_%G1BTTjt>pCYFpCI+,DfFG<1MO0W]Bq@OM3FJ@,6\#9<$DnKFW_55K?#5\jB((f*nJ38^gfKrR!-HN&<QlY^VLms+a4YheJ0T&Vin$jEiBl:4"Rn_R._0-.%^Sp"nJ[Ip)94=#Kh<N1PLf`tuS1n,IE/fi.G8^1*P3I9CWAMuQ;*TF]%j9Xe=gTI_,a2u=8.qMVC=O9)693/?f,,+)9VM6_lINLuFqZdMW.)MpC&8R0()SD),&9r\J?L.:]iYKh@lGL/-2J$Ve_/,:sVCZ>7HN_TG5,^->W=a.L*C9iR@=fX^#<dSN4M5Tjat-1k*A=cT)_?BG8sLp/i<g;mQcCDl>O&%S_5N=<:qU[f$+Hn)BOI[&HU&Ui6RZ(Hh=gN5c/pXXK``$_r2[p%keGC(@CK^QK3tN9)VnLR=hR9Q<0!\sXZsY0b2MFJlkRa0;3:%g39LSjpWE-n7csn<'L`=L]dhsbDbo?35-<";^.D/m@@gL,@4_-R/Weis[,3Tnr=J#[59ok;\&G9RSNR4KWs^J'QLdn6,3ml_S2A'N[n#:=8p:in+$dCTp4n4fZ_;n*MNp=1r(b'G2PG"d(I9uhe\$7m1qaj%]eS7<qT]/'H2/UEXqa,Vod4k<9!a^^">V?.<?k[#*c<%'"[i8]DU%$&.hj7N8R(@LM#sJgVL4!,Y/'5m.Ym]Z,"qSd7\Hdi<2YA(I1LZXYe<YGC4QVpl(^.:RP.N]9tA[3lEm;ugU##U8k!1_LFRj=Z.E@.2>YoNG(TKlcj$sWf/hfOf<?$/jd"tAd@_tY91U[XEfJ2?NO^=(F?Z2<%O%qs0+?p2/DHp>EuB'in?L^-jR>Y#F/>27%mLTh_"5W0PJ[aJm](6Y-I,JMOXScO>)T[U_6"DgY^:Ze\nSrqjIIV@<_Zj.gU]?kaEH+PAd;Y>)QP(aO2\b`p_[AgOMd8?bD@gCG,q`h>dHM=L+S6nmf0G;@>J:7N/h)n:_Lq@Vc1;`DC0K<F<ai^\qa&V\e3X8UV3l"XF-cR/Gr!'laH-.m%FTJ,l"M/kjfJG=PlkCLIZed<*Z4WY_01p@,,.I\mH?(GUsA4C>[j3'YaH/QM\7(k)8s3A%Q8Ci;=V`eiYgWLYDrk3f,kHgureV_0k,@U@B@p8*SU(PLM1Ni;F$,0P!H~>endstream
endobj
23 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1376
>>
stream
Gb"/&gMYb8&:N_CbaW/g?LNSp6P-U7;POEt[tU)2)+YTZ/^pCaKqt7$mlS_9MK36#J.&t;.L@F^hO-AcF3a3:!Q?^-s/$0S[o57HA&(&tYCXY<L?X'[AK#uV#Zk9O&r85@=:W7Vs++o+'d+5gQ<OQJC1;8nZ!kQfCOi1PekAHmi;+j25d[9>`'=`pb,?E["]:e"lBk,=m!\mTTCMD%;*?sng&3TANaVg]6<"O1b+t=W?,5O\[m/3tf5g<EoVO0\ps;tm]kQD^Et,&1nBTk#]Ni&5&>loj4n8nK6"=JF$;,4@IIHI4.Bg?+^F/WS83i.9r.,S&+t2<c;V&4!=S[b,b,iJNKPOY$?_.Ph8[q1#Kgc\kh3BnNngHEG40D;Oref'ilES;:A'udX@R2Q1P-ptfRj*e?NBr?X\f\:K0N_3`;26!IBOaO3VX%W3SL]]`)GH/%!UJYcB!]3GURS4DOoKUl4ung7>J=!EH:Ei3Ar5W./)WB?c_\'W=])f2JZNNW=I+5=_ptR)RbV0h_Hi>.S2VG#F`l_P=dAS.=Y(P=,YA!a_:@LfC(-MbX%u^*AlTRK0o'T=H7'l?dK:Z,N[&&aHo0EsdEe.V5@MG+?T$`be0\pagl@l>)u*<B[r[os-o/:.k&:kgY$0)l#,ppn,TjiHX:tU3l_aB%`$]317?,Q+>;Ng3\P&FJ3@,J43Zc&K2AhWG#[FA"YtYlLq`K:G`b[R^+:&adNURLd&M/#EN374bZSno#(tQ&GRiENfBqDq3(QU?mlQKetc1c[0gKHRgl`+33hQJ#F=-ge01#0B*4A,J@#f-^aQV3ZWf9uNa6$td`/;Y"n49Q50h70I"_])uFcjE(Gi7pGTG%6s1BZmDq1FST\n8L\HJ+;.q\?';FK$W<tX^$I?5:-i>\kXEp(0Q9<hRUeI<X*8$<R)\PZXdQ8&',XC9T5eI!]^WP(,BdeSDe0pLakk$(7fWf8@?>#Fmu(geoM4A`/[i%qjnS2CS9M!ON7YCm1PJm7Z5G#*[LRT<cK$]oi-7M6NZ^D&#&O'kLZ@+l1'h^A(K4[T=&Q`9CU"\[,e2C31\AG2b11)];`S'k/C'Vjf'@K^8'UQ3@9D9KQ?tn7S)8E$4)7&ZQhR8NW]_q#G^TicV0_rSi1CDBt5^^X2tqpL%jHG2g2kVj!6K=AWu2Y^b8h4Rqbs!GeTaqh[a%Q2R73G>5-nu8+`BSj_F%(7LZMbhAfn_W*n'&D#44K_gk87IQ.&*!rq"V<8J\K-^MR0C70HEC'SIE\\c+,^kMZd+h.>>K#V:K:Qj^_;.C^=h+@.eQ=t-sbNnZ4ZQq2^jT:Uu%">@+3h-U;a7kCoXWuVUN]`R2T85#c87&/brokI?+Sm$K=8si~>endstream
endobj
24 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1900
>>
stream
Gb!#\D/\/e&H;*)EAR=).8lV1?:^na[PW'QCg#ZTF;nU1@hdWo.nd#jV_*MupDronb@tEC(m*!#Cl9L0Hf<e%7kp\3B'"4r#C&Fei<ojK_fuO4,qb.;@5RD#l4NH*iHda/8Y(A6#orPgCt;7po8+RYJ:XMJ8E#.N)3H\9^i>nV9L,I`qP;/^#bMIg!g1^uV>nedL\RC7BU<tX+5C10lR.[<!V'sm:sJ9X?oWeh7Ti^2-'W\lKCKocY?nt.JsY^qkM^!@`c,*l3kR"O_RY2L,PX]7kr;u4C^\6)@/RqKBS!b/6kasQ%XP5J]L\q8a;[!p&d>!5n.n1>+S`TMb7A.Z%mAepN3^5hpXnBGc,Mn0oI&T=NX%9,\O'8u[:=4&Q..?i%9``.KXt-i7q=D'm+F,F+T_6u<^JZR5%2YO#hjfeHI>E<AgB2_$B)`VOKs"uY/'6n<nO/tAR`<V\i/lV264K#n$6$7Oa1$_4ac3S:rY"3ZAsalL'8j\N;LE</e^lX&<-T.T=m75IXH6^G&mHAi;(42kj7rtn_RhS/Fo@j:n<B#4!\/ce@E^Z$.HN(Tg<UGmfbq#p%m4lDkk)@o[dFV+e>lh:2aV%;d1A*cj4&kAfB,927=0)J$Rb=!i;PFVos>f=Cc^rI=]]o.6o1n![%):R&_)m$&!;oEHj6`GC0JT-:;l50Ao/3C9k7MoA*Ss]VRJo'h-pW?-gsQT]$8b)MQpJDW9TYdO!MaEmZJlF$)dgp`JQ06OIlTB.]Geon`(JNm/l)4BYFb)V>Xc9D66bOr^5H0Y3G?aLQtI3?AM[_gOLt3'&/8<%7C_WT"0$Ff"0\ib6%sZN@9Qbd8jA^$.I0c-eWEIr7M'qU5t#s4M"3:Cs^O$KBr-b=*d>6C(7-0;T:iRcG<)[3XC/dqLSi/Ce`rE&b$$!OF<dYpL$Q>`np)k(i?KODBgJ*KU`LFQ'[=C9mN6Mi'VDChdg],'Fb;*@66D&V?p*mn.4o.[fN(5&7ZaOB9jeK9MLC:NJDDE2Bj2Q0_Fj<l8d,<Z'oND*gU!K(fHt=i+/WkClff62qG+ngJZ!8.ESE4"$D)hb;\T!j-ae[sV6M.D5<!!&FsO3m.m?-_o_Li><#!QKX#9FGnH&0Z@!^0[dQ*As*hi@T2okP8tILSl+>k4"`L43--\)U!p#5<WbEmaNe*oZEkct"\)S!*kQE2-(th?)R<;"`GhM_L?Q?n,d;o<:Ru0bkUaJNOrLjoZ]!X!8!>q*2R=?OO[eH$h(J>!/RtmXq:?mFkqWR'#cn!KFKR!Y6u^s*QVuhk^ob_Wil^Sm2;!IK)TVY3kUaV6]Kt[ZT2i7md`oj,ek&mc!taLZae3"8p*X&bbCra)5e=#X\W1fgK\_.+^"@P0L;bc?ZO<>_g5>b\c;`3K7QXTklJs-]Aih\HZ.Zg5k.D'@Riu2M6Q:6,\JT^W2&\l-L)?/(`%B*8pW4'#?0mWra:;IAGK:cI!!_B+mVoGgV$*,1&:TrYL>iARPc3\ePs!NO0]-)[IWl[uGEa-Ro<Gu3!8$<js$Z!aJT3Y'=(qHeI])tK-3WVcDB,(!G-=:[dD\h86>OgOf[m9X9C.l:Y5]O]T](qIn*cbEl@0B\Z.T3/+ed_PXOP1Ymo\1Z:oZsJXi]/=K=VU=W,kaP[2GNTh/4<P\s`ld\[GK9gCqCF=P,8O/<r#>Y*[i?L!h%?K1`XP8Z1\;LARGE_E@._T5c^R,rkI(-%Db1Kis]=#nu<),ooH;`[%mr*nXWODAt9:Af?#sgW`ZHM/604m/#W5:A:cD<L>tA%iSR]4Qrr7RC[:oko+ocV?kZu[SO^#o:EV9[/QGZVr#_E$_?gD^1]o;6gqs*le$>>9QabbAsos;?1W:A0?:gL6_[O\a2'\q]Ii$fqZi)LUNQ~>endstream
endobj
25 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 864
>>
stream
Gau`Qd<:sD&:O:'k0^!L_Ci&DGtUo]et/BgM6p'm&0)9T=P[8irVJ2qC1?hb4BURXOe'%(kMCcdi7`fAfCTs=3X4b'"j.r/!VM9[nL`P7SQU_%c9a_qiX+4p(m)h>J"X)B#luD9@M&e&L.$\Ypjs,%+p#pMKcpmk+cO].'M-=$;#!9Y%Ck=Xq&\LRg!W%j30.D/YP<sC?:=RGSY`kZ/XVNjX/=IHSkiT0KE9$;d(T>UZNjiKL,p>J=hkQC0HD)L0G_N*%mJql$TUXu#4ViUo=D^QW6^07JVPmEDc(9p7n\s@,g4@6`"p.@<H*^okV47_f=/oWA[bfKG0kKl2BK*1")YaeFd[6bOtFO'pbbM'1M\-Q;nE,ML+aB]F7^je-l$i&$C9irD#+eA$XsG;gSb7XmX(U;AagpTp!ZOnc"Md0fr=r>M?@Ln:3I1-3ZUeg=+W:7`$HrGjq9JnTm,,'H&TR1KL%OsQl(LU/.+O"K+BY(E8$(=L1IJY)hK[eT$N%Xi0sb;o6%j`qo77%2=o+Z%:(JeQ<<Qd[2uLoE4:]G0j`66kGt_m$b1lC^i&rXh0q4USe@#:Pc;B5b&!O3_Ut6T^2t@.$6uNtG3[GfKEQu-l+1bJ]sm=<PR?jF$UuJ`FRNa?5"'`bA+DCecmDToLX*!DdpL?Am?AB/E_**YT2);mer`#L95QFqhg/3=WUck;YL-ga+Oa?cXD$W5`=?S>M:61ceiH]]a4id7G/%NNL5BU[S5pLtai-\GDi>JNdn8`acN/0UHc#a'I@!"PqN)IQQKHg1LnepB$Hj-S8MX(`Wq*-/1_t#sB`E.o55*IrE!rX;oGCJ/.=GlEB#Trb9WcC-/K?g$!S#kClM~>endstream
endobj
xref
0 26
0000000000 65535 f
0000000061 00000 n
0000000132 00000 n
0000000239 00000 n
0000000351 00000 n
0000000556 00000 n
0000000639 00000 n
0000000716 00000 n
0000000821 00000 n
0000001026 00000 n
0000001231 00000 n
0000001437 00000 n
0000001643 00000 n
0000001849 00000 n
0000002055 00000 n
0000002261 00000 n
0000002331 00000 n
0000002616 00000 n
0000002723 00000 n
0000004747 00000 n
0000006696 00000 n
0000008593 00000 n
0000010315 00000 n
0000012153 00000 n
0000013621 00000 n
0000015613 00000 n
trailer
<<
/ID
[<44f9cee1fc8d03a58752233f94569497><44f9cee1fc8d03a58752233f94569497>]
% ReportLab generated PDF document -- digest (opensource)
/Info 16 0 R
/Root 15 0 R
/Size 26
>>
startxref
16568
%%EOF

Binary file not shown.

Binary file not shown.