From 00596550e311c564eaa50fdcf6b6141f485c507c Mon Sep 17 00:00:00 2001 From: waldek Date: Tue, 4 May 2021 21:07:25 +0200 Subject: [PATCH] adds pihole exercise --- modules/resources/exercise_pihole.md | 96 ++ .../resources/network_home_with_pihole.dia | 1134 +++++++++++++++++ .../resources/network_home_with_pihole.png | Bin 0 -> 15217 bytes .../resources/network_home_without_pihole.dia | 1045 +++++++++++++++ .../resources/network_home_without_pihole.png | Bin 0 -> 14606 bytes 5 files changed, 2275 insertions(+) create mode 100644 modules/resources/exercise_pihole.md create mode 100644 modules/resources/network_home_with_pihole.dia create mode 100644 modules/resources/network_home_with_pihole.png create mode 100644 modules/resources/network_home_without_pihole.dia create mode 100644 modules/resources/network_home_without_pihole.png diff --git a/modules/resources/exercise_pihole.md b/modules/resources/exercise_pihole.md new file mode 100644 index 0000000..b62a438 --- /dev/null +++ b/modules/resources/exercise_pihole.md @@ -0,0 +1,96 @@ +# Setting up a pihole at home + +What you'll need to get started: + +* a raspberry pi +* a USB power supply +* an SD card you can erase +* a keyboard +* an HDMI cable + +## Your current situation + +Your current situation looks probably *very* similar to the image below. +You have some sort of router/modem/switch/wirelessAP combination box sitting somewhere in your house. +To this device you have your PC's, printer, phone's connected either with a cable or over WiFi. + +![without pihole](./network_home_without_pihole.png) + +I advise you to take some notes on your network settings *before* starting to mess around. +Your `nameserver` is probably the IP address of your router and the `DHCP` server for both your wired LAN and wireless WLAN is probably the same IP address. +This means your *bbox* does a few different things: + +* it's a modem that gives you a public IP address (from your ISP) +* it does NAT so that your LAN devices can access the internet +* it has a builtin DHCP and DNS server +* it creates a wireless access point so you can connect your phone +* it has a builtin hardware switch so you can connect multiple PC's + +As you found out during our exercises, a Linux machine can do all of these things if you configure it properly. +We'll try and replace two, or for the brave ones three, of those *features* with a raspberry pi. +This will be done **step by step** but it's worth pointing out that a basic pihole installation is not invasive at all. +You won't break the internet by just installing the pihole package on your raspberry pi. +Throughout the full installation it is however possible you'll have some downtime. +If there are people in your household depending on the internet to work it might be best to schedule your installation with them. + +## Hardware installation + +It's probably easiest, and recommended, to do the installation with the raspberry pi connected to your network over Ethernet. +You can perform the installation over `ssh` or with a screen and keyboard connected, it's fully your choice. +You don't need an extra LAN adaptor, just plugging in the raspberry pi into the switch suffices. +Once plugged in your network layout will look similar to the image below. + +![with raspberry pi](./network_home_with_pihole.png) + +I recommend you start from a fresh Raspberry PI OS installation, either with or without desktop environment. +The raspberry pi should receive an IP address from your *bbox* and you should be able to `ping` devices in your LAN and out on the internet. + +## Installing pihole + +I won't explain this as it's part of the exercise but there are a lot of tutorials around. +First you should **only** use the DNS feature of the pihole. +This is completely **non invasive** to your network, nor towards the other computers in your home network. +Check the installation by logging into the web interface of your fresh pihole install! + +## Testing the DNS aspect of the pihole + +Your pihole is now a DNS server! +You can try it out by changing the DNS settings of a PC that's connected to your network. +Depending on your OS it will be done in a different way. +On Linux you'll find the `nameserver` you're using in `/etc/resolv.conf`. +If you did it right, you should see a client connected in the web interface of the pihole. +Try to go to some websites you know have a lot of advertisements and see if the pihole blocks them properly. + +## Time to take over the DHCP role + +The pihole can also be in charge of the IP addresses on your LAN. +This is the **invasive** part of the setup. +First you should turn off the DHCP server that is currently running on you network. +As mentioned before, this is *probably* your *bbox*. +Log into it and figure our how to deactive it. +Once this is done you can enable the DHCP server on the pihole. +This is done via the web interface. +Try disconnecting and reconnecting a PC from the network and see if it comes up in the leases list. +If it does, bravo! + +## Undoing your installation + +If you want to revert back to your original network layout the main thing you have to do is turn the DHCP server in your *bbox* back on. +Do keep in mind you can't have two DHCP servers on your network. +You can either turn off the raspberry pi completely or just stop the pihole service via `systemctl`. +Try to disconnect and reconnect one PC first to see if it get's back the normal settings from before. +If it does you successfully removed the pihole from your network! + +## For the brave + +The raspberry pi has a builtin WiFi adapter you can use to create your own WLAN network. +You can either have the clients join in the same range as your LAN network, or create a secondary subnet. +If you opt for the latter you'll have to tweak you DHCP settings a bit. +The package that turns your pi into a wireless access point is called [hostapd](https://en.wikipedia.org/wiki/Hostapd) and you can find heaps of [tutorials](https://www.raspberrypi.org/documentation/configuration/wireless/access-point-routed.md) online. + +## For the super brave + +We'll set up a VPN in an upcoming class but the pihole is often used together with [pivpn](https://pivpn.io/). +If you decide to try this out keep in mind that you'll have to add a port forward from your router to the pi and that this **will expose** the VPN service to the internet! +There is nothing inherently *wrong* with that but you'll see hacking attempts almost immediately. +**Use good passwords or preferably encryption keys.** diff --git a/modules/resources/network_home_with_pihole.dia b/modules/resources/network_home_with_pihole.dia new file mode 100644 index 0000000..e8519ec --- /dev/null +++ b/modules/resources/network_home_with_pihole.dia @@ -0,0 +1,1134 @@ + + + + + + + + + + + + + #A4# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #your ISP modem# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #your ISP switch# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #your ISP wifi# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #your printer# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #the interwebs# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/resources/network_home_with_pihole.png b/modules/resources/network_home_with_pihole.png new file mode 100644 index 0000000000000000000000000000000000000000..8ef51f69cebf4674a15dccb93b97da0b3c2e84c7 GIT binary patch literal 15217 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

Db{&x`Qn(rA< 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 b!Z{_Du%x$E65QY!T0lubRlZQ}h5vs8WlSzT literal 0 HcmV?d00001 diff --git a/modules/resources/network_home_without_pihole.dia b/modules/resources/network_home_without_pihole.dia new file mode 100644 index 0000000..b71847b --- /dev/null +++ b/modules/resources/network_home_without_pihole.dia @@ -0,0 +1,1045 @@ + + + + + + + + + + + + + #A4# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ## + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #your ISP modem# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #your ISP switch# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #your ISP wifi# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #your printer# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #the interwebs# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/resources/network_home_without_pihole.png b/modules/resources/network_home_without_pihole.png new file mode 100644 index 0000000000000000000000000000000000000000..4de9e6e7136a6f88e7807287864e5e811ae06f5d GIT binary patch literal 14606 zcmeHuWmuJ6x9)>92$F)Z00{wUL|Rfpq(mucM7mKxx}_K02uOE|bVx3xyIFL1_c{;0 z@B4l4clLMozOH@tb$*?TAHWlHj5+3*;~Doo#teL=AdQ1Xh6Mlsj?4>**8p&b9srQh zG46m@yqU3iz+Y(ZWThnl#O+U7LrxR`JOpGU#FRfJZ_hZn5*=T6?(bR@llcj1{nW`XV z=j_XPlU0L2WQ=CzWMcl&U*y!BB9Sdj(!`!h$)6tQs%S`Y>3$%ygR{h~0dyZ;#Tc}s z4TxWMhX?{n{EzHdh8?Cn6BtnLaD@BOc6MJY;I%#T6ks9b54@MDx%_1kGY|P;cwWvu z8{H=bZ&XG!qIQ6_UmsPVUXIUv6kI*t+;{_WM*%#NN*lAA?TUj6pLi5EBage{m>*dx zSo63D0xZ2m5rjlM!*zG8{s6^^_gAb0Fk6r{9d%(Xmp{*T^S_C#7#CFn40#L zN%ggM`#Ag&9c+=+{6Hz053TvQvl zvY;Vl(VmyYxw0`%F;TeOMdy3njp5kUlU46aUR7-Be8hFLpXvIHk;Og+wL)P-#q;2S zUCPjUmkq^DV{Ntm+OKswy-q%e>i1!47+-gEkH@)DEz7w!SCh5Rl0-@-S4XxnxEuk` z)WSt|{oNmqQ z_QEMjwx)MCW0&_VuJ_8)4^CruMi}tpsc{~LgId4GdE*>5l@qoRz1VA#DB`UCV_sf2 z#zhETf6)Ewa5vH3rDPOmaI@-x4Sd(belK*4HzmMcNK95j%TnV<(NHJxQmwZ5&-Ech zy}Yc*?5GZ&LS5^V8%W1LJ_vQ5T*@>4+$C)W2HxV*I8t;u(bX+eps*=k# zmaCf7hGrh*Jvc7ksN*7Awr_G@p>5TmJ7!NyUb@tM2?2!Bq@himPu^@WPRN(LbxO)~ zy&xGG8OhJ7FTC>TqW`9lXZn(h-Nov3wn3>jL%fi|Bru@BemNy2X+g6$W~|D(>sVH8 zSF_^iFc?jXvov?HHf&V2P@}d?8_~$Btuz`nxDvv{t#+0DjX$IE_5O1|yI$+no}I&E zZR9%pZSJ*;OWkRkhmRBRqMt4-MTfsHB=@8s)mDqL5E(C>_#Io`RInr57iRyHty^rOFuEZnNsOaLP=k4|E2gDU!onjO8@xbWfM9t!* z8Qkm{+~c%ivQUyM4)*L)?cUX*k4KU2rTfoEh91?fSKhC_X0$QxRr=z1)`o;ZlmzYH zqlXpjo61L1=voRu%HGNFJGPxsrV4%RDvS|y&lhme>%8ElB6A;0=PNEPY~bH6=vmVk zuCV(-i2da9$b9kTdViDJNPU8}3i18r97%1(W3|2;tI^4ZPN<6O#juc~C40St&E`fJ zW&O!)+^EHjN8w~aEs^aNECS}{J4tG@&IZVGN-hOV&RoCtkv0|h^s8-%NDhX{9r6y}C890M|sqdGB)r1zCuT$XTlG%hho{mkfux`fowO&SXIaIj$9!mJ=T@bWKrAB zut&3BB=MgC?+im>fyfl*c6;5Xz+{5q1;D~&v*4M)R(wZKN&+|1^8(HDz635HN-!k_ z-L0Q8(iWO$J4Od&UvN94f6QUzNua?e;##SB`S}VtEkZtV(Z+%&m1(p?d$-D>q7_@z znkNiGHKip+aBd5bAwT|6Wu3Bt<+;p9W9KUV9j5AZX**0va8XxicLc=y`p|T;+i6-v zB1aaw^qA^aNYV2P1BI}_2twGN<~nR02N~e9ab6lWOgUG(G6lx(MiAz_e?-_x<@o`R zzoWEgL>x%_V!0~}0375roj{`k|KVLSBu~h1{b{7XH!pk^NB7LY;|Bnl07%|OEH{w= zkn96P0$zwO!3c}fzV;){;r;n^BrNN$A1=V~(C+;qeDyQ=EMP-MBaNnupOJ6&svG6T z7aVFki>v_|idU1ie;o@$(sNPfHxd&e2c~H403h;DF@PuCA0wgz4>2QR`hrsq|5!B0pcC=z-_*+Sstks&#a(9nk!}JDitBk2lxuZkjIfyT~vS zAgX4nzo>5y5zO>=i=rgp-+1`A6O+?`R~LFB$8{u^{tFZ1?avZ1d{=usZ9lHydaAx? zjn%xm zd}jN&0T%$%2!r}1ZuE=s!8Urr=Qqi>I?8O9L3%$H_VS{qHqm~|p#Lm!`#$J_{~gx| zGeHK>F;CTz_;0O4E&eR~&B4m;pZs(=3LN?W7*k*ryld1}?F!SWj#nk9N6Uxs#icU_ z?GDTUnQ7qU(BC$?It?3M9B;_$)=UBg$gye!U}fFIDKq8G8Gu>(k(msm5-M_6s2LS8Sjqdo%XJ;@Rcm!kp{ zI1jg8Cvl!@=|mk;38<*BM)P{#>dRQ18R$%$(=;Tv7&)n??gR50vMsj6F#nR26lxzv z3Hl!{!2wfmcvK2ETb`SrcNqlutjE%skZb3uQT>qUB>S34Ayl^G<6FiEWa&kTDaNH* zE_{Aq4sWt#VYvEzcbwmoSOa~szJC4)e@xEUML7wm-}#R8gL#+DOI9J$vh>F&AH_Qp zDTW&!vxm~lLAj`DNj)Ajsz59KLK2$m=YuJbe%yT_6@%Oi;8SX1YTG_$Bp{fV?K*wn znFku4nqyns8lsay>T>%Ih40nLK@2p+3nD5EE;SmcD25hR5FO^l#(_MVp13lc zwIBm?l;SS2gR`bq*94?^LeRF1Yi4h=31FS-P^FLtHh)+dabq*k9RlM-{g7fvsMmil zmCcyO?yga9>AwC|GA(d9pO=PfxKg@bVd(GDA5qmt)#7e(J|M0v0ku%In6sD`;BW*K z-d$y-NkE^?C-MyOEK?UC4eeM?d%yO_i)?kLqB9X&T4NKxG(52WVtooBc;*h5A4Lv z!a5km_h8dVQEBBezIiv%;T?eyv{9^0YSccRLE@^W8nbFJLyPk&w8&uCK=3yC!>R7A zpbNG;45;IatVv$PE{5A)vSOC)O1jitF@pA;+BCz=`^Qvh-!o&+s~AZb3{+Me=0z34 zAi@`cLzko*WTy5*eqktE!LnjKZQ{n8-;G-wbPZ%ks#n41O&$+xA5>wZFW_5>ns|j~ zh?pv?WDUq+K{L6OmQk2lS-G7_AVt;H<7?UhY}0!8EE%`nNo^}sJgBsm!~5WoNChqj z&FDIyanTQpuYMdPuJ-+>M1zYwfsSMhVNP?Dtq>M%!&u2Fy>}4thf(Ofkz)HW5t`~V zA_39&5(*aL4wq*h@t<1B^sj%KRUXg!`c{Qkr;$6N-7wjVOSzn=TQyeC!;Fm64Or1` zI+TlOO^}2}b+xpT&-najllB_wcYa-OD%v2T7{#mN5o*-NcoI6sO)}*isvvnE{bw z0a;DiXtlio?^n0$?0kCwCb48f^EGC8a9Y-+d~wP*wqEA_bt%=#B|qU1`nSQe;{em{ z32E`m0wDt5(4DaaBC~o$4AgGAM$G=7(lLbE(-elz9F|czZk=~MuqTmY_R+3wES5R0 zHdhwmI5g;AC-Qa+tcLDaHe`tTTKXo7F(r5yuc`Y~u`$S4*B`Hzm^Y=DV zKZx+@@BT26O}T-lSZxT<;Zv9ov=5wZjOiquga~FM5on)E)TKp=O!pxpEK|Nz3DmNE z34{$WW&4YFNQeu~Px-oA|L9H^c4uAlC*t*V4}i$iWqQYco~;Tg79@nzf0Iu1tpa2* z)ZVqs1|*Z3)X%t0Q`jo4zG|=4NJ#2$bVokyFhYgs@k>BeZ|J$-S1co(rngQ1w625# zMeAWl6FDcU;>_~TqRiXi1CDZ*B%1|ILp@UWFf}z@*sh#S!jP*B|GjXMvMwamceO=D zUnkdl`47ItpdQxl*a?NqcSISO-FK2mI*IB0c2j%05-4y(B?cQq^ONt7;k8Hb?$2;= zGq|1V^U*N$!n_pdBot67!JAW}I9FSM59@!k0<9 zshy=GZC5yAQBIk^l+}gaS9_1dmL5d)jmSK)bNt-I9N|RZ-bo~o4m23#O2zxqU$!C# zUf`4He~-kvt-X{thy^b0JL#onv8QPFd_)Os^gsi92}uTohW~hT>h~>BbdaCZ&gA98 zYPL?3kYzr?Q+1yYeo17_6bwjT@c2ucYR~aEErqy??@#X6LyYa-b&^@IzwZbTsM;E? z&d1QU0p5wnASVSoD`w=bPCjcFy?3M|KnMox0&?n)XTSxuo!$q0g{;MZSR1Z=rvj+S?L*?QY*wvgU&tJ04V`Cv ze;Jx|zi@i1Qx)V^%iE0{kpkHufA~1pE-mKtvgxF&b}3=TNQ6s85$k+PogF=}^x5iq z;9M=lIQ^HGr6j3mpvJz06^;zqLt$n9?97|9tF#MaISn^)4C=Oll2yf;1B3>*oiR`E z=F_#&9JTG@{I?xNj6vzuucs$0YpNzC%eWURQ zFPjz5`8HxlZZCTOk^;luEQ z8|V*!1;#jzRm5@cJUi}+LiIB~JSxV)Hnuv(qR#IUi5JNHQ1IExF@pznOiuTEC#^3Y z!>F8a#j?Dt+3S|Nj7+uBPYdmgoj zymphfkLtRGms^n7sLzjYeO`RpnDk#`k^dqkosj=!CNQGBt>%?!{H&l;&SIfR${&GBZ zN)`O7jZxg!;(mc@Q&r7cO&>F^>!IuX*y+8k^Sbf^-HVORYu)Z=#^;%JBwKI%FzQxQ zN{n>`&6IZBn19`KZ(8tLp=vxyD9P!&oH?W|j@RM*)cd(1=8~s-<7C3}d3Ld2vC{{s zAyR5OoGmdgo&)wGWOQQ#3a7 zZZ77pF5HZ_kFLL&wOd-2yB{A=!*`)EPz&c#id1Dk_#q*}X)hfuPWaTPY6X?qy044H zxprFf`uH2$@g-vWGHU7qj=rdo!o94kLdI*%MBS7wwHvMFdTJ^Ey3llPipr?4ow~wi zD|g!c!~LC_gP^Pr_p`K)Cz~xKF?MIEn4TO=R^~p2yqWxN&CKLJzDaB>p&rA0dNdtv zGSvmEv-mX>Cy(FqA#*D#Zij+v<=}ckx35tPWB$B2Q_VSW;bothtqvlvM411(zh$;y&-#_PNbmg z$5dx=jQL-dDIe-BI#UuG*%c?gKN+|sJzl+j^CrJQVfdTj>~nP75wp>EYrP7l{oif2 zC|Y~3Y-c97N5s!^?tOwHzL_s-zCo{q?%t)DPN}m?T2+pXp~#(>+1PEGTE-U-h+bh$ z;w3$D^*bHTi$2Y9^5I&TtbQE77u|p2eW^KjS3*HctH?i;ymWaVE~n|(3sX8b1%uG* zz6R$rztp~ZgOd)bFsi9bnV(-grY7y%RE)C&qEARt-c(x5n!}Y-_-b8x3ei`spvzit zO&-Us@VZppi}qfhPDRMX@p`ag{fVVR&Q(3#XwLk}v*T%9-48pHojdNPLqGB};Os7E zr|cK>ZCS~J?_9(BC~FNze^H32PzaV9TqoVbX);$bJaEA9l*i}aS4!04-!VH46Cr^< zus!(+EgL?hXa8icd_1JKV#xjMaO3>g%E|4?6m7^ChyL&6Vw{4VVuG%2t}L}A)!qZ%KQ`F>dT9nOCgi+ik|-#2;eBiQ zvMxsV{kg!5I*|l^#<-}b6zc0YxG~uNt6DaQ4l`@PGF9>>`j&OUHh`GYN)B| zj$;!_B|q8{7z!rl!`q&8lnl8bokh zXEh15#&z%=++HeW_oZ_dbMZHNlG#1|U@$OIxq6_h>A)LV$Jn(Sta}Fg*vV|#o7172 z!Wx=oX6qde*O%XyrchDlWs$hbd#@>8vomfi>NK1sw5Ki|?+z8Jz#I7s;4V9Em(Bd)K_nCA7}?VtFnE1CuWrDZmIQ{;^H(vk@v7D zza{-jo$U-&ZUxNvllr$O10eBH_B*@%X{EVo8!vojulr<)X^K85?SA{Uu@g6(BH$@- z`^DW6)AZ6?N+PDe6*ioJju` zI4?`CeR)OH9;v&vm_?hUdn{!XxBsEK2{~K~b0(Tgiuxrp4f;xy($&HbLUytSl73O678WzY^?Q_!vk?(Jo)E1#5XSrX)(=3pB0g{0C4&j-(7+zjARfOcD_uBb z+Mwq)A0$IU2B8h`14fPcJFh_Rm5f4vA+-chhf6sd-0m(2AJNx4Ffi9$zoS@%+*kLL zPWzS?n05mch~`rwr4${N>T<^4m-?MAUF=OiZ z_|c+!+TTiy1>tNpkT!F$+?ByLRHEC2qDEka6S53&00#WM@6SO2Y1)4gJRCq@myEAH zwggBkl%`bgkVZ#uiV|vIs^9|19I;Ut9)s#T9JfS_<$WwlkXs`4^h!p_%O@k^BCDMY zX(EaSN84&$BEEO~0!m8c;qKW@(f%IV{OebMCoM>1aEQ)f@*$wRaC`~%?r~YMKv2%T zsJ^a;Acf<+(Tm@Y$Mc&N06Z%b>dP@f8+*2&$wILGLP2W*ql9YX5)DB^aMNsCnQi96 zA9SWbDQOomue(BtUAJoj8$hQGE8u&s;5=HLc|weJ%Y!`yZ@Cs~X5A5$`=;BTXZtgr z4Lj>Ms}}>3K41UfbzI*vf*Okw+_Hw46y_kWqlJY9*xUsNu)+I_nF9DQ;=JzwkXw!n z;w>wN1VF`Z$M|6n@_3!U$+Y=eP$KPb%6Cm2Wa$1eZ_np8j~Rhx&fjcZH4zaoM+&lk za}R%uLHUQ+KmWfKi}715+ATABOBMenHZx{zAO625e8E-<}iU+?q5vI7nAqR9(%tZ%=Rds1ygjid6c=mn~a{ z=63B_qmBqJ9et*p?|6PmptE-c_5OcAWd|D4k>rA z#(vhM-?*a`H&BiSh`NGBT6gLS$GQuqrud&J{!x zsU#$U^Eo%^g)2@eC%iLbMRp!fz~j_QH1e~0!zR#z2@*OJ$rNQ7IKCv3Zlw2 zQVMXIeFKu|g7b2to#Ja_4jmPgZ>XpE+ek3~B%$P6XjSOdKIElxFvUWM9x! zCiF2L06oWBY0T)Qow^Zvj^C;qaA zVXx(f1kb@u^f#OQPn1L2v=mW~g`x(^AU7wKb3b!Dvwr(Mr&`S7Vl&rU^u}d%r8{?c zME~a{OZ;z6m_C%~m0589nor^m+zoy@`PLsh@at{(iDWY7BJ1e!dcdnw3h!_lR5Q2$2)LqEq zR}5k-KSHp=RwqZSO1QzyQKjdJm823;d(1+w)zI?T8xh7+I>XIkhbT2Qwnl1ceDP1; zpE=vA?qj0|Qh^O5OYtLRDyKM&wzd^Ntr3ohuU`;}yzAaQj}%Mt53boBSuf->jkvr+ ztoEHuouBn{esFLOop}rNd&34`b(<4iWR58p%RjwaDx93hKKpT1Is4&_EK|u*4A!VT zuc}i@@;1+ApIQXL386WC>cm0zBksrZGfIQZn+N>F`Fj>Aqgi4InIUP1zAlF`#Id>b zbL$e<>zukN-Rr6ObJh*x_g~y^Jd;vf4;3ZXD`RcJxzFt~;OrH?J&@Us$-Pt)a*!8G z+UmaGHzv7R=_@#K^2^oYd-k7pH{fik3pVc6_MR3B9_$>;YXwCr@qMUM%S9gp*`{0r zt7~WZ$o3Z$NZE|Mv3JvK}ye~=l;FK1|*h(ANQI{?iM6-zdsw&%y`YCuO;>4!cvhQPl@ezD=DVw;AJa3=13dfRQMR) zWU$`)MMU$=w#Qcey4S<`+WtBv^_NI3|FT~aqI$_A0?r3W)7pJ|O?HorS6Q3m)TdQE zfR?H!#lvPUp1OxvsloJzETYlmAhpx+r>*h#HU9m5%F@WYZv_8K0_)w=C=zQwm;h|?PO&fjWdmgyYhE? zO`^xHFA~D;nt#Q3l%t3^WR)tM{{||UVS2NskLu6srlLSXVu0D z%NqCf4L9>xclQBLX0-eETBie(K`OGm-#6h^hD&{3tNz+9PbO1G@^@apbcnKmE5>{a z`KY9=-Q$Z4=;QNqz7RrOkP8+ia9K}uRm3gfQqAO~;E7j*bO3~Xsw{`z;F;mnFNuo# zJzC;2^747b0!l+DF83(-lnc0_^QO3uaVGCW8w|!1M2a=*8Zji!_9NZDUEHs@!k=*rapImjrpx_TUBw?Ucsm{p^auW@@yTbTnO z5MOF*8F3!3M$)82^n9~l4S~d@();4k98VYc>zPj{IwM&Di_*|!a9@TLOA0ZQJS%%xq1ePz9F2SJqSBLeuBxK1 z)FYU8tU#VRDlxG?lHIC9?fZg%b+Swdae3A=Bs_gGRMu)}ZloAr8!tuY1zgTBJEGJ8GI=*tQsu%WXdHYzLF$c%(<7k%PPLFls zNPZvk6dUDqo>doRNRK{s`=fgdPZ?R5as>v{91(}F{a$Qp4GR{P*IquV%)uS5AISE}k$dJg zz-~9B^#BaO!6%ElPN%b@vh*L#2bMz8FL@l!RlW*-=0yg?F-#RvM{0RjJm_C8yBG*S zpIx2Bj+I#c@=-7>Z#HgC|HQ;d7YTN`CB5>PeYzSbxifEl<6V#B89xGrz|W!ca^>Vd zprJ&UaJ==!_A$53Cc~p%z8D#>{o!feOqtPB$!Kh9<$=L93a|COiGC6a^Kfy_kxoBF zj+Xffeeo+LJZ7Upr2o(ZAteP(XKbABM2SNJ)V(7j7L(Qp*p#nCjD_z4<34Y9gz@49 zqPYP*S+uZai6T8P32Eku2OB=Z+sF(S9%(vzv74N`SkY?>1zDKCk1F*+6_pan12Dd z|Lde$V)M}MQ|(>gq1dx@oIk+Jf48UL-(+!n${=o|dqzz3|7_&$7fM8uN(8!So_Tou z9JDGbl4q~>5z|$qKtaEN8^G~WZ{yV{5DQkyqk=SkfD0Y_{EwVdPX~X4^d+P@=+A}< zIo9{w&jXRwiT;?D*97YAs(aesIsw>pq3+pK{CG@rprv=A4bHSYza{=h+F-1*J z5Mffd)I?dxO9LPM#FUG)<;bCLq#&&OR8vTQWl|QbeEx-o;)V5SY(ILc7lbKvk>5Rq zT6oxme>B=u@wv_COkarQLxv_w_48ue4-SKmW(mLey7*|!Ms&2a|3qH#O!%i4^p}0^ zpLun|Rw&_)4S40+>B)#GbaB_Tf@ z71e&X6$y;mylzt{3%@p<)X{KMQEf=a5cLL!LGO-0W&r`K(&VOudlIY#*aAB*z{OMq zyDeU{yb+W4AFvPIxIv9Nn?oiqg*)Eo5$z-cfpGS{c#NE^vdL2YtX-<}bGLN1t>o6t z?tI)>Jk6!?xs0u32XvtOGuYtaNw@#8@Z5!~P*N6-4YbV4^lQv)vJPumu zo*3kmR`6AwqQj|`aX<#}e5ahry3wkNWN8#g02f-jyHd2+ZEXbCMj8@swBNU!7Qt0x zY37m1_<~@adh7xM*LV%RaS#x$5TdW z;p`mO8)xO!UtL}+l7WlHVb6c4Lw~F}+#}kwk#$wX{dBe+#G*Fv8H3kloWOvR+HsaLOAZCBuI8f*Ik$d}`8i40I{mOk^AfDhUVh;6f~|8FI2hSpw(lHwpMICoWS>7HCA@hwhygh zlm0o4eMZ{_qoU^^PUj$SguK8ifJpr&U_facs{FiFD6$Ya@T0_$g779c50xYB3Q~Iv zMvaiAK2lv|vv#9lbusk*r2q)>`1)(rhgLVxwC3-TOwx7D;U^Tlhq`HCK;j_KHnTmX z;51k9mw+nMiy$FoVnQ}~RK`uL>kK9>LkmI|U!kCdakzaoIGl2pnz6LFfxUA;r$?;W2FpS#sHi%i;Rok`-;ZLvS2GCT~s>b z;7}og0jkS4s_NBO9_3PmVM5pG2w;O zs!D%=>}yr>Ax5YQxJ{1I&G$@F@gVl^H1!^R6=JxfOAK}?you#5=4lbw_JSdWzi$-p zL^RnkrJ%Ii=9K3~;8lCN$9Zc6)6&aGH`AFuw8Af^o3?>^%(pSfWU$f8Alszd6s2_k zMCG7Pax9!Eu|n>qhhoU6ZqV_$iJH`<5Xpc6N%VW>(N)`1w}<;Z)Q>H6mVtgn-=zS7 zSY(g^24LYwr2~V+_lGi{ybxUiUX-U1`2Rw42P1348W~R@Tt;K@Ww?X{uIKymHosJk zmqoC$wG0uYc>j*l{h6;1BXYvecf+#{fAWo5v)(+{KPas_pFv+}ok0iquQG%cUZ7s9 zKe9#{1L@E3{QO4MNLk~Bm8PGe=Z8|DLGDU#wDnx^s$dhiU5LsdKl|8&6!3hmANSq6 zul4xg(#y4I$mhtY@1&W2p=;1@9fV;ot&%*d=K>%-b~udhB>xdf-|fwyi}%V02%w9t z6ac_auonVMh#(Oa^GhC_4JOZfJT9!U0P%gR)VJ~6Hao)ELMHE_;OCFo?jJ`FC=0hI z4%XV=wzEU%VtwZg__-HqlT6%QOM+G>8?$a5qJ{)Ej;zsOFJZms-ZAs8< z5D(ZmxR;H)KArz{Y9?3y2lr6iHh6xZEs#5^&%$XaGCy%_mvKGD{yZ5=<@TV&U>YKG zowjb(ux=A^QJIm$v+%ofz@0GXUym4^F7+ukERD$L2#mTmB_52&r#MYmIXcwcyqTR? z#_uH289Pt0m!55C43t%Rf@N%Vigo;N4nRoEaHH>pgpz74xAE%Bf!2u+DOm2eMW(8E z*-5N>>0IZRtARKrY23D7t=!gbsi=9s)?d?;!#>HgQon(tIAe1hKL2(zZra%>vr@&a z-lnyXcT^}YbrV+@x#Z$(L?w*n>Z1e0m`6&DKCE<8)56t5t6-8Hf6Dl#a#U8e=`a<} zqK+7@DK1HYIGp!*KsfYHRM;(D-%H=*Cpk89<(JWb#~*kd+lYsTJb0~J1!oc=>gTWk z{O8##ZahVrW=mhnFq0Ztfs?GKluxa4YxQ=}{r&Kyg%gDkbIqL36PeSUhrHu%+y<6J z!geDUdo2b&EG!aEmL#37@F=#$Wc^X+g3${fU+ssvW@CVYNF_E9QL7gS>NjU4q-Vf6+lW z;Lt(8b=eDytNzF878i#meoNh{e^5xh1FKnLW%T#$sh}XL6Exn7${IVxK6%XRf@mJ& zZ!*V-ir;4pKoz35=qDO`m`xw7r`OgBd>Zup$AJbV*C&6RXSl4t75dGg&=#8;Sc!1H zIp%d>x`n-8Ph*#GbtnG;dvzNP!qmRmV^aTte2f2vd@p_@UuKLJdEUdV>3z3KlVm2} zJy*ocsab`4kJf@oTbyquJQNSz)+pdz5$ErED z(}T-$hM!h?IR_I&ibAIw^Ca%VhtLUfk7w={y9|#UZ!FEn@YTK~(7c}1{iHBb?o{IT z#%W<~hr5C@xvoZ|izmOy`NXkebVtacaA7EC$H~lPzS2jtbLd?y*}s6$|I=xPUwotH zG6UfEYX&JkY;ft9ts4A%MTG6DHK0QAL^3Od*Xc)rv~|L zyoGOH!+JIN4^pnO7YCZ$ca-dHWETp-yc0PI`<- zDLfR<3>U6!n_zAW;gi?npr?JTu>_nla$2FAxiBu~o!US;CzF5PzB&-e@* z4}PFua}D^B4{OC~#dbjNd+wCk4X{hek1nRbAg@H#R#Y2zKB zfzu5<#CKbP`csdP<>54Td{BkoIT%=R`#WHiqsslUM+~fmt|R}89{MafXl{X^3cqm* z*sb<=dR_lQ6z6jZAZiVEOaF@=V6b14MFCZay-m%3XZHU*u`q;g#^H(zI2&95AUgP` z9;97)V!AY-3Sh(Z-%a#8AC4D(