From 5230839f1a871e557adaf9fe5d68b3ff94127bd2 Mon Sep 17 00:00:00 2001 From: khlam <4841220+khlam@users.noreply.github.com> Date: Tue, 22 Dec 2020 09:16:46 -0800 Subject: [PATCH] README. [skip build] --- README.md | 63 +++++++++++++++++++++++---------------- docs/img/PTT.PNG | Bin 0 -> 7477 bytes docs/img/PTTSettings.PNG | Bin 0 -> 11292 bytes docs/img/logs.PNG | Bin 0 -> 33232 bytes 4 files changed, 38 insertions(+), 25 deletions(-) create mode 100644 docs/img/PTT.PNG create mode 100644 docs/img/PTTSettings.PNG create mode 100644 docs/img/logs.PNG diff --git a/README.md b/README.md index 66ca5f7..7d65712 100644 --- a/README.md +++ b/README.md @@ -1,47 +1,62 @@ -> Don't use this yet. Not entirely sure it protects you from anything. - # Discord-Sandbox -> Open-sourced Sandboxed Discord client for the privacy-minded. Say NO to intrusive data collection. - +> Open-source Sandbox Discord client for the privacy-minded. Say NO to intrusive data collection. Are you worried Discord is watching what programs you have open or listening to your mic even while you're not pressing your push-to-talk key? -Discord-Sandbox isolates the Discord client from reading background processes by running the [Discord web client](https://discord.com/) inside of a [\](https://developer.chrome.com/apps/tags/webview), which is finally contained inside the Electron process. +Discord-Sandbox isolates the Discord client from reading background processes by running the [Discord web client](https://discord.com/) inside of a [\](https://developer.chrome.com/apps/tags/webview), which is finally contained inside the Electron process. While I cannot guarantee this client protects you from anything, I have tried my best to remove Discord's data collection. -## Enabling Push-to-Talk -To enable push-to-talk, open Discord-Sandbox and set your push-to-talk key to `Backspace`. -### How does Push-to-Talk Work? +Note that since this client is running the Discord web client, the following features will NOT be available. -The [Discord web client](https://discord.com/) lacks push-to-talk detection while the browser session does not have window focus. -If you prefer push-to-talk, this gimping makes the web client almost unusable. + - Viewing Streams or Streaming your desktop + - Discord's "High Quality Audio" or whatever -Discord-Sandbox works around this issue and enables system-wide push-to-talk while respecting your privacy. -This is accomplished using a separate key-press detection library, [iohook](https://www.npmjs.com/package/iohook), and mediating its interaction with Discord. -This separates your activity from Discord without compromising usability. -When your push-to-talk key is held down, the renderer process will send a `backspace` key-down keycode, +## Push to Talk +1. To enable push-to-talk, open Discord-Sandbox, set your push-to-talk key to `Backspace`, and lower the `Push to Talk Release Delay` slider all the way to 0 as shown. +

+ +

-` -webview.sendInputEvent({keyCode: 'Backspace', type: 'keyDown'}); -webview.sendInputEvent({keyCode: 'Backspace', type: 'char'}); -` +2. Click on the gear icon in the top left corner. Check the box to enable system-wide push to talk. Set your push to talk key by clicking in the black box and pressing the desired key (Default PTT key is mouse button 4). Configuration settings are stored in `/Documents/DiscordSandbox/config.json`. +

+ +

+ + +## Telemetry Mitigations +As detailed from [Luna Mendes' discord-unofficial-docs]("https://luna.gitlab.io/discord-unofficial-docs/"), Discord sends telemetry data over the `/api/science` endpoint. This project does its best to disable this telemetry communication by running javascript code into the webview that adds a blacklist/whitelist to the default `XMLHttpRequest` behavior. In this way, we explicitly block all communication with the `science` address, while simultaneously whitelisting addresses needed for minimum Discord functionality. See the full code in [mainRender.js]("./views/js/mainRender.js"). + + +Discord likely does other sneaky things to spy on us. If you have any ideas on improving this project's security/privacy please let me know by opening an issue! + + +Clicking on the Logs icon to the right of the settings button in the client will open the Log window, which will detail when a communication by the client is blocked. +

+ +

-to the [\](https://developer.chrome.com/apps/tags/webview). This opens your microphone without giving the client window focus, so you can use Discord without worrying about the client listening in on whatever else you're running. ## What this Client Tries to Do Discord-Sandbox tries to isolate the Discord client within the Electron process, preventing it from watching keystrokes or processes it has no business in. -While users may consent to data collection in Discord's TOS, information such as keystrokes to set your idle status or background applications that have nothing to do with Discord are still being monitored by the Discord client. + ## What this Client Cannot Do -Discord still has the ability to collect a lot of user-behavior information. -Discord-Sandbox only tries to protect you from the Discord application reading your keystrokes and background processes. +Discord's desktop application has the capabilities to collect a lot of user-behavior information. +This project seeks to isolate your keystrokes and background processes from Discord. Discord can still collect the following information. Since these are inherent to the service, we can't do much about it. - Messages, client data, emails, and voice data - Links you have clicked/opened from within the client (Passing links to a browser has been disabled to somewhat mitigate this) +### How does Push-to-Talk Work? +The [Discord web client](https://discord.com/) lacks push-to-talk detection while the browser session does not have window focus. This project works enables system-wide push-to-talk while respecting your privacyby using a separate key-press detection library, [iohook](https://www.npmjs.com/package/iohook), and mediating its interaction with Discord. +This separates your activity from Discord without compromising usability. + +When your push-to-talk key is held down, the renderer process will send a `backspace` key-down keycode to the [\](https://developer.chrome.com/apps/tags/webview). This opens your microphone without giving the client window focus, so you can use Discord without worrying about the client listening in on whatever else you're running. + + ## Building From Source 0. If you're using Windows 10, make sure you have the [latest C++ Redistributable for Visual Studio 2015, 2017, and 2019](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) 1. Install [Node (https://nodejs.org/en/download/)](https://nodejs.org/en/download/) @@ -51,10 +66,8 @@ Discord can still collect the following information. Since these are inherent to 5. (Optional) Create Windows installer `npm run package-win` - - > This Discord-Sandbox open source project is not affiliated with Discord or Discord Inc. I do not claim to have created Discord. Discord-Sandbox is not the official Discord client. Discord is a freeware VoIP application made by Discord Inc. -You can download the official Discord client [Here](https://discord.com/download). +You can download the official Discord client [Here](https://discord.com/). diff --git a/docs/img/PTT.PNG b/docs/img/PTT.PNG new file mode 100644 index 0000000000000000000000000000000000000000..253ee9294a33dba0daf61141d911e67ea64f56f9 GIT binary patch literal 7477 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 D%*pwX literal 0 HcmV?d00001 diff --git a/docs/img/logs.PNG b/docs/img/logs.PNG new file mode 100644 index 0000000000000000000000000000000000000000..fec7d108a6d40e25d5d9946a7eb39495b729f349 GIT binary patch literal 33232 zcmeHw3p~^N|9>|*C*gETB3b2>5GuFkvL&a~aqHwDValZ?N||CdmO4==q}*AZic{`{ zWOGTF>y&bf$z>ZEn+-FY?f)6+=yW;fe81n*Ilsr_e;$t>r?#=rXPOJ2>&ds_Wadl!Gb{7{ofn@_d<1;;43zDeDkLa(< z&Tllhn7m8!NI64e%{Do)C4|mxUtL(V#5Qg?%w_j!EJCX7+P=-5k?G%Cuitf{;JYo6 z*PSt9$74?BcU7l@-K|G6AG}=3xP9Wt1M76m*2JgP6&=OTRW2PNW@owld!YaS!zv|l=tJ9B(D5^`RSk&5R1dxsVtvnx-mum2_QB8DN!XJ+wVmii%+ zT1;lnk-I5@1ib~ko_Rt|3kRJZYc@Hsyq{0%=AzVD1VOc6668n`urPcghEph*=;o6_ z{0huuyL=UN%2+UPvvKwV+UeU|_XsibHXd3y%?FzKhq;rZePVtV&UGkRhkoC#=QcB+ zmb_%V-Sn}T+ZfWe8q#IpT?=G?l0B@IziV+AEygi`6N6!S@*BE&dt>l?Q;m8Ce)c08 zWgLs?rcFUTA2~PcnZp_kWMSp7y@LHlGbhm(*`P*bh-%`2vjpBg4fDLLw9hp>{%HTC z53ZfDTf1TQw+w4&6_=c&ruZb{WaDk8u|&<|$Hp<{&7N*D5DSD!RNbVspw|&smPph< zTg+T$B-cZ$SPfAP{0PtP(&iY<^KH}7kAxpJ+2Hg!Q(b{}TQe<0PaAk=&@}=i)SitwB@Ph@Tn5jC<0OPdgMFfU&{FP)$WsV#0CV^kV|(g#nyEN= zcPZCLFye{6AzvBNAoo1UJ)8-ixm{nB$&;-r>VkKIC{wpmcOF=!CbeVOXreG2q{cGEeQGC>~#zAF(GF!fMj8J8H)v42h|JEE<6I4;oFs> zBN5`TC$7h@OR@jEv~krP^6FKCY2Ho=f}Q2Y{iR%faLjm^RqjZrthjio7~%S2;>8JA zZE=~;1bl=?noQ)4wx#ThFv`+VCU6M;17qdt5YFaq3czo z7fnN|Q5b9aHAObt=-R}@{3EJ#?+GM1ktLO%RGhFm)HgZZxNgUmr#N%2z#!zqQnNe421ehxJs>xpsrQ zeBIAnGU7yu|Lf*xy1r+7eWHe%R=)&Sy-Ueur+Q`IsFKb73VH-FixAtq`CKf^;Cdb6 zItC>RYk~StjnzgU@Q^*FIDItWEC#rtJCpARN@*559hSyw;Tp9-v{gY?lhN%&hOaNQQfF`@OsXfN4Kcirl)AaBb@uQJPxy`oQ(s(7)Db_Wc+&ig zXJxgVt`~`Y_bS?4@SR5c%Jg9acX&uRIH|a9kr%;T6ZN-~(_Gu;2ZJY{7h6RMd zH?2s^yP5P*DFxwr4L_wQ-V8aNK)9QHv%yVuTK(P)FUORnt8wl47h|Wiah69HEGv7X zV?sM>KwXGjw&%^O#eV8i?xIMkV^S~fAJCxsjW)P4;+!(UE;3Q-GR53%DLq8Lt*+wQ zv_w|DegPWhekux1V}$6xe)XWo)n6)=dflL-I=)+m!tQrq5iG!q`mY4zCx=+4G_c4$ zS=?JltPz!zx0+UiutL{fxhThELV=UmSYhkQ$*X*$pQK-^KZIUN!n*k)t5VPko^7KB zw{R!SxMTH0%06xybaL&n%$ndq58($Md_OQL-eG$UriJm~_%<8^jBZ1*?rn@P;yR>; zD_mN;&bYrz5lvpZ5m#0eHe_XayXVZZe*Z@>uRA>)BV+Bo*M{yQ_m%FTnorTrHQNk+ zhdtkISy2~2LX|9WZ);j#*k&xBG?{spy~h+On%quDT$`vd4hCO+SoByguJ8_AbzO5& ztqo{0&|VwGUv8((p2Rub6eT*msoS|DphoVb?=*iK&$J69-WA%Jz}|#NEsj81+lRn& zm9Sn7{;I&GzzA2Ogwh^=lk||YMUt(Q1pijeB`0)`o2HDr8-o1u_M^f(hu{OpE9`*9 zTka@uuRjkeL|4Ua9_z%j6S7_p93-0uGt!!hrnV-LL zkhIluG3ti)+ou|Uo9;h+3K<*3rm^qm>Ii;V)vZ(K==8XnU7EZQG&-*8kJ(!EB-M_0 z^fDf)$agPkW`Em;e;L=;cLy!1y4`&YB`kjW%Y+9)l!a+2$QsA14LfKl)el+tn-AF? zuqSGsr!@qzGnlK_lJYpvW#HE(G`z}WO3q94ZApCiX~|O!ZFtXS07?c9V$&3hfi*nG}r6$Yq0s zIH^vHQX5*G-j+tv9phsbv~(7NR`h~+b;LDUjAgtQ<_Tf(b{0Qe=mtWfUuu+O@tvzr z{t!-e0#@ukTkx48V990+FC+6oPs8pdmK%fw*&lH%$ICj$kt z_oeM1I|BOseQ~Fn*NRqV{!)J$KeE#6`pc=+GU3vFV^+F34Vc8&3e0YQK}DTkm9i~+ z&()xyZV{K7K&l~1o$T;hkE`Jm;E6Wp`+8W)5pK7xmFh?LL%gSsU`AMo)otsuWIKWr z8?C`F;t#d|j0Y!{QB9bHM+PL6c^kGto=()n-Pbs|tba#q2X|bjyX5iWE3XpAvOLV) z2Rd@CfbCa-sW|ONZA?X)6yq5 zT24&2pdu+)&AScy?vW+uy%>EKAQ*Xj`DU-lxQQdc6=AWw-(8Sgj;Ak@e9>R|80 zV++t!WZf}J;+gv!eA+OB<{K)INd4Ls7uiK4KKl@MF7<9J*Vc37Yslc+iyh|bPMqNN z_8pz(Qx&{7d;lF48N9uhsPU5LmMs=>I&68S)+tYPOny`$bQLP^5G*7d8B|@tRVvvp zJ^J7)&&p(XV#7g<$=LiJNm_2b-5>$xF9P%02gQzWZI@nk<@N-?e``N&DS zt)3;iez4PFb%YVjor80YT4N2z2b+M;k15vJU+mt1b&S;ZE*PN5O#9JIskL&baSPcL z|JT})`wf5^-*HdwCUBgp!sBcR@=;#CYvG~kV^<7pzY$@s3VBf|ItEj2kzk&X_~}5N zZ4+*&QYWSy9#TY!a5XJ)p^a2n)9NGPgNYvLUX2>8HYPHo$SgUhLWOzWGc71)+$u5I zWa2o;Jpdlt9p%%Y040AFp(sDmn?)>cKvSgfBNr+D5=kiH;cP{s)u@u9gcqSsfF|W$ zSq{gOiL29C-b`NNP5)kCyTuGM8{FhM*@N1Jd>KD67}shw^86U7?q-AiE8SP`Ze81o zv|q{(NkJeqJm=sF!tLqI=IY2NSFb5BM^=_F#aF;y+gFW0_|@GvaS;-f8Pj>(m){h5 zHL_3FP5yaSeNhyoxC^*_YZPCzUodj9>}2(FS#3>%>O`cmVu^c~{|ZY|Abf(Gc*mdl z?5MfI$;=UR%J6`#Nws$-^QCCO`k01fXhn2`0VL}Xxf~HQ^_=t&)O}4G7l2t4kTMb; zG_q%;fqT8E*?|C5(i^X8QqZ+p?0jGaoQ{)iyW_zRVyosTw~!(B37!)U&ENbwcx!uH zOO}ZLfK|n0a#1U>>Ddfe0Y3q@>-WSxIbj-Rz4_wm@H&#)@N&FPsgauIHQq7b%8YT~ zqAINvUesW>w}^)8JX@kZ1$Kby^&dPXgh=glOIJ_+&8;P#(WOtl!|51<#gN`1yD9!5 zuS*t%lNH|xQBW&7mA+{f0vU584m-6Buo=J|f?Or6v%s$G#9qy7nhqVsCl1E8Vy6;Y z3UB=x++zYKbd0g~muRM7PkJFIEX4W}T5@`b<|Ag{Qqkqp^?B-oyBdBsB*T9+dW;zU z5n>FijkdACXN^1I%lU>{VGkNxB^vVN-tH8C0)Jw(558xGe;5|S8NWB+V%W7(v;=Fehz`hJ6usBFXrg zGi?dXMH~8Wzb4ukqefdA#12Y=w)Y`jv<1JM#*%j=Ty*NWna47~!OeHPo-II=WZf%JqJ{;dJM-NGPNTqJoM(v`nfXv6QNTPBk8H7ctU8@pT= zg8TEMiFVpoj-G8n#d@93a9f|6m`6N&R}u$pW~8h`dnGvO+EChn2Gq9U#f4W)-`E0o z!*hXf@t%Ro?F{ov3%4vt>)x6ZJf0}pue9pEr{q9`6JCU=T(A7=%!Z{mq3*Rtr9Fc1 zU_(S0p{*-8qb*K>_#E7Rh@1$gaeQTR3(N; zsljTfd*w~tSl}#}G&UA@w3U6H=Ke|CGtG*}YlS@P2ouj8ddV`uK3zSDOZ z$Nf1AZS=GB&X_a!6Uv(U=7BiLR+Cej`j`Pi72!;hrsSXvrE@>F>(rETQvXT@>V$7Q z5k-tSBED9(e>InIXJvQ(NXca-dYJ~-zwsG_Gq5c+QrpHyk#%k?{hqU~4d=~bXhhvH zBKBw8)F2EmVng=|;4L%Gh?42qclfd9{^)9z|X8{C_Tibdb0(%48tH6q{bXlnx}-GfZJ z!9tZa5%sxD3*9@$oU&sQgN^yd964ZxfxpEXWTQk$gnyHz+?HiA%i<r2tBX8o zeO5imiE(rcF<+g*+jE09p31$470alB8mxTv270cOGRDf!1!s)%wqQ5iyTM#8#0oGiobBZ!%1i1q zmWk!2Q}tbr>MimM*H)gq-Lq#Il;Nl_?o?-76^@e(Z$0V9y47ZNLngD;f46z=;qHxn zqfUt>KPVP(!dGf({x31leppGsWHZ(grm?y#SShuPuOY4u;UqbAekL!pPMmc>DLs{(gJInTg04TC#7Ui!BSyGBx+DTum>XWTr{Kn!I{VUvFYZ43eec z;=pYhx*AJ+gzI&vtj2k5Xrd!Lm$;9(c#aj7hKI=hMOl z#O#R(f?{kSZK;cLEtYr)%5E z5nAD{Po|k*t!@aztJvjU4lRMWnqTU^?PgFD`>bwV zWYui+8NHIk`)k3TvYqA~iM=GCyXM`GqwinKN#yT8maBN^6{@9i6$qj06C=_e(Rvu- z+5TP7OI!NU+Jyxv+iP;VsXxyi?Ae0nrMX&3DhS$3sM{gVfDruHjgk*f0bBsNWCkm* zCEee)K;+1H!lsGrWY&58OB=_B7vgPyF5Crc2wZkTTP)rOKS|j!X}Y~tF4xj%!53(_ ziIlu9tloI}(ll7|DJrFh+)fwNMl&C14L56KrFGsj^SEUK$4gjVy6=b>D^o0(j~o}yw3MnDG}VE z2wF$cd`@{Y;zGKXobPQ)Rd)1$E$Y=y<7jxaclNPDtmK!J95KmZyrHH?f?rQR3(^^% zikq@MF#zi);nd^wxLaxtbE6WsO#a|r#z$Id+NvLDI&ies%JX)V#-{>NsgbZ zUiXnUbLi*Nmj4X>j6DA@N)CrLh;+SG!Cp|L&rQALpib3j4+N;5!K?sEJ3z+C7}Sbt zBlh`Z8q`wv3E5d4&yRv0lR(DVvF!nTa%;>leIjSo2ilZdVvf-7tWqYkOmT%jv!?DO zeD6d&c1(obOqb#^B|`Gp1Ci|^4&v)4iBu?GQ83h<$bG{)KR$Z)Dh@4$P$5_C~y&oWesaT!tfZcmEtuqHeLcvW<~ntkQMrjNx{`a+IZvvnsV*( z)*;9SMcWKuDfQiM?s#wID_-^2kd1;aHWZf*PrrWF@x}4ulMcJ0<$UEIvJa9(O7frx zD!Yo>A6~6p87Sw6|Ix6~c*H1Ga)Jth!UM&b4{rMt20d;XWn8&w)|OE5H9EPUJQNI_ z=8(0VSH!`~g~euy*Z3{nJAmMtna>{bELrEj@)QDCNx&Hy%mctT5Ymb3vFd3KE{3$> zUoRq(`ghXIkb!7zHPlRls&WMu_v?k;vv}AVE$aGWopZ^qE0Gg}z-2*D9CA^;UDsV3 zSPdHB9w|GVptmjy=Fz94%cQl{*;5*b5od=1R>~>2j~U`41!C1++Eq#%C1G!h?j4b; zFK*C)s~)P;OB&^9c=a2BkCrwrX;)2fbI--^siL#a%k%69je^dWij}d19FLD0@v!N{ z&5Iz+6hk@uYwgGi;zQBj2p%t1kTh=1Xssysr}fqc)>t!*#U5Uq0c^q+Rpv5jl#EhV z{`?lzGUe^&0Vf*#Z^9@dh!fV?F*zGFIORCWVQ11=UkS}ZDUdsjsE@pMp8b4~$PBgV z4qxu4VNt(5MJ|_;WBSMul1h0c3OUJXWJNdBgZmB|jbuX+jj(`bA_~1hQa_E<8W4fY-}a4%2Rx2a4`+)3D=E?^<+Ht$FrkA~W%H(I_H z3qWlpP&u2@lK@(0f@?uyykwvMt;jUsVpI}}3eFY)%jZaigDgx+JV-}e0yIHF-~Xz= zDWG+*Z(q;e>J>=#*N&W^uhdVg_4&R0>G&7uuNl4;E6`s}OxydWtPogtxR5pn$m(s z4G>w_+jqo;$lvQ{Z5&zc^N7aRX6B_p`wBBxJ}k`U3dM^*_Yf{^mZxbII7u=5^LU$5 zP-wxB3}c03_j7jj^)#M}eQT}`{VArwX9~8cxKI~?M&F>{+H~w{fTZv^jeFGI(+Z5I zLQ=<7w`9U)cTF6t;94U?f!f3aU6MQPI6;y^H@BTAX$mG8KN2mZJeSFhhGP38(I-ry zulkuZ?CL6=4Cjh@Isr%iet?GtwbgIvDgxSb3P7>k3M_UX!zx&*J)bQey`};}=L(dz zhRP#sKvr9f&w)g|ad^Eo?Zkqk<1D4P7v=b!9SlEK9JRXL44x$fDj2W<9@hlHa!k6e$?tf?zEg z)-{jSPiSiL)Yh9w=u38>l<14P+p$F~R3Cy_?VQlNO9D^&bv;#qeY;tdi@;*@%9bKu zHbMHm3u`FSL6LfIO=&94KqQ%nouiF#kg7He~)*=YW8A5$$ZH!I?tLfMXJ&dbn~yuHTB>rioZIF3wi zra#c*Gd*Vy8_n!>h82A?zy_1JdCW2b{sOWPNl6!RN2Y2(Fnh0|wn|x<|iH6|r2D&}a8IcfVr-I3^tFaJVt@8!5eulJnce8??dHZ?QXFzgJwV$^B}rjLtma`F%M*2XW##t zp~bfHi<7Pg7GYiw_^ble?Bc8a36`C9quYb8C9)0N6tKQ!C?MSR8M`fcNGP<#*N|~y!5w41DjepfI zqleolIazSR*VeIeu*fBRB8TD=#4$j&>N72`EkO1jRp(FPUe&{4&xRn!Nz|qycDe|P zX)lHK>Rlg<;}L-qAefdO?W%jDKZ8$t(`hT|aX~TgQbE7Cqrc>qti#O^1J>hOhmLww zQEr^O9bDL7fpp&cQ^;hGLq*>z0{1k&e{TgV_?kzUTDg>M;(SnLSvZ{`gz?{x#6gA352X0;;hdOPh;X?-4w*lEC^$9 zk;ep2rodxl6j`Y(xyUh_oO4&bne+M;&?BKsRuEqh4;r0Acuqy}-~9j5@%hqGFvWR6 zoOp<}Po8dmGMVzez)V;;!bKCnclBE3$%wl*0F@rF(xET2j%G^wg)H9Fb8tg5#03M$ zAMfp&)P0}X&#_8ZFaJYfnUHIV4S>8HGvgLXzoqrFwUY1wY7aMK$HP2lsFr48E3iaW zvF@Owfj*_iX;zSq*b382=Zmb48b*&N254usPFw3kt{WNuczPCH}Zm{OCKqmQv4mgg3sNQJyAAsej`1?`L-YkB2McjKZ-9{U6a%fglR;-CrmR;^CEBASN|9%r=rw9{buU_94j-== zVh8uY-@xzRMn$4nB`zc0(q*i4){mzY6PQY^ovi>uWmDCJ65fM3YK7zubRIoEXqQ>_ zgZ9U($8Ot*_n|2B`dTM_>l}7Ae+PTT@G1bL@QqC<;4<&-BX|bcbRKpDw*EUtGi8M> zFkn~CpVglM>+Ek`sgE?OKJw69?n%U-qu{XQEBHvl21S!__GtNW}DI6z7rlkC1<;PF|<}E6T9iI;Ug_3Uu#)5*FTz z-;^i~pE9OgYs-tXEuS7kRhHl`_R##@Rqgm|n6=i32y~^ae+WaeF zGD!o`4!u~~w!Z*AZd4uv5MZzIYNd%|Ik;6I*7ERRwk0}Bt=DP=Da4@lTEG8^Md-JU zx3nN>jIVhY0onZe+;hq*wl%u`wgT1PqJuykv)B=3P~JhxJC`yU+gwz<71+DCFoDL; z_Vh+SNlS@rt*c5lD&0H@a>w^o>3NmVaktuN6#tu;Ggl^NtFs0|YIhKJ14=K#{DXHwhHHD<5dXgsqZ)6(b+A$@x%{ zxEHW}Erl+JT0%|4+Z*wNma~j}h*?pRM{TM-!cnNC#sXE(^QKAV>{mo zCkjr9Of`k_-KGuB{M#B=D(J_RprEz{pWaf6p1*ovmt7JV0;%;RjY>hdQ@JIe;Tebi0#1--!1V-9YtSO;^v{{IABCq z=)7o$7+h|f5C9oRWCY4PD#pMC53`5*(a(b(^@nyZ4*Jho52KvX@xMZ{zlLJtyLH9p zGwi8Af%;=4JwVtFe zTJx6g@INd1Z6SEj5s>LL<-4Wu;Bp}q2?o(X--k#ZiS+US3lCd(jP(vK!6n@5!hK~AsR&W zE*-VXwwez??jHbLD*6?DJ=62$(MW9k0>@dATIYkFN>H+;ju%PuQPM+jC0+`I7$6|K zqqLde>8N@ai|hh+dXf@^;yt1!M%a**4`_4uFHg%ORoqzYVP@nN_eu#?Y83x!qjO8U zQz)D^h}U>avd2yYzWRRixKL0xhygaLTrc)Kbun!Hy8gUFBO-X)^pEoEq;Gb9DSrL> z=xv3*jU<5VBL)bbg|F*gT$|SN(1M7|^or5W2~B5}_6y3bZ-9l>r}Jk?K1)OK!U^K&&U2b)fqHF#rNchyNM! ze1E1_KT&6fJ0CS08eqc}*(r(h>qzyg)ZaWRKo2QK@(iSY+|c68tu6M-E*-%%PY^V~ z`kOhW)-~xD_z#p?p&HW)2xD4%efsNwDZG;-$?(jCyul8;oV0~Mza%PBp;`rL9H{{| zMS~cgm(U1375V~*glfdYX|6EyW$%dSN;abVLvrB#jjk=Pt%zgy5l&IR8%y3Gzpg z${|1ewiAtp=R9fpb(@*AW z6R;bGI)L`uQCj7L zMcF5>)NRU7?QxxMPPNGL_}XLYwBDd3D~&7c!A$_I`LmgvBdOccmlcFG|8zk8?>9wm zBQLOPJ`E;$lFR4Fb6%f}oge+Raq_H6>+=O9t@rYrLhIudr2U)AVO{=hAxU87)}*Mb zR*lGG@^+9ct->0ObH01z87E&da!W#*5jFC|&JFbCEEF>n*`F%6komL%#v4Z##u0J9 zwE8#Uh_?}RTd|4$B4r5qsi6dtg9Q}Mkv-{!ymqIv$%`Brs1R3o&<=p}OP=OO>7d6A z);m6&>tDsOy<9a~3mOZA9k@p(LT?HqrM#ztl%OsZDAz&P^_NrX9N4*$4(U`1Q5oM38Rob}xIy2BWE)V4vsk!URBO$yvfnmW55QNUTkVDuR|4 zRYI5pPkl0q)tzef81(^I#6t^+ZoS*xhL>G6xOE2ZgRzZPB~xXR{kiQdcw25!HB~B2 z|0{HPbaieBv3!m?zmL85n>%FzF|X11k1&Yc)t6egB=INKbZfAuWOO@(ZVn}5pdB^x zE93&YSbvf-e@Co06rcF4+_$#$$ywFUx=#M9-c>U(Ri~g?ccyaW z{LW$j7nt+kRKDtb2fox_l3l_1oe{12(k*}zn}nut%(QpS7LKac|AU3YZ);nH1q@jg z^I}eQ<>agj{fxWuw-y$s%m@52qsc#3J>sU??ra}c{J%<{N91gQkd^22=hAw}fX{pD zfd<7F_SDamj|jOTS`@E;vCs{xYuCR2)9w=Th&cVHHRl&)Pc?jtIz&Y7O5PngHF2J_ zwZ(3I)|2!Lx>6@7_V4;v={ify|3>osbc-F|BS+UFP^7_9?LR1E3f98+TT(1&FXt%od+}H&RpP zbXlK$h~l7ygO^&|#B*$ZnJls8f7@(OA{bvjc{$5-kn3C{1?lRQH2SPtL|Dv^ec!jQ z`5r!P^Cjf;eWIJcSjbS^(g=Jzqr{5jRDseK7;g~mjKTYebZZvGtB>7guNW!MDDnKrCwFzk%wZ3+!BKl5de>J`R0DL> zGg{Zrh_8NUi%yAFAd=Bmb`zzL5h06YKo_A|)JV!+%@-hHc^>PsiqE>>VKqjXW? z@>ZvllNu*^GGONI#B4|S1zL2&L#=kw#y&Q3mt??W2qmtWgOF%OCUX?UAM0%-9=@x7 zOO7|$9BhL$&AuWRkYXS-kuuT3-f#?{t$1B|`CsG^*#&lDB(uC_N{vc9_f&;BX0BX2 zQ$BW!KAzCTrDLYX1~mlb&MuFV#)3I7XN)c=U@xZIiq5uNv*nxS_z=t02?k$Ge^vX| zA-{dd<5`2o)Ho@w@vjl+fbnJ#QcG0%*Y>T)N#pO_iJ7t&z6|_$<$T6^;tG4Nf@GD5 z-muAV!zLpg$Z97kc>DJH{ER%Iod_h{@d8OKZl@=+*%XsK>w_nX%|XV?babx~iY+E< zb-wovM98$J{gU}5l2`)O+n9&mbH@in%RZJa(xIEowXWWCB?1RuVx=ZE7(MQvDy) zlGQu^`dmb$;4zSf_6i2k6*fb0K&)=+xAlHI_Ji5(f8&VrX2qy0^~K_;1u!PS^G zPM)MIf_VBEe#tq{vy{onE!~DD^|I6QLb+G?6TpA-pQUnn2XR=CY4mjyui5~t^o-@> zTvsBo*82BBDIS!F5qlv1D-wWJt51U8i05J+}6sY-&CiMSMxN8|uTeD<`rFkHJ*6UH6doK|=YY}|QbaaQP zx6Y@`H)aSa^M6weB$NQEvQB^BkN%N*0l1|9b@d`+tjCh_)8xANmZ&fpeCG=CY1hyq zeMRqE?iLkwQ$S8Ito_@zv7U3!K@=OdP;fH*zB}-X1fV>+u^3%W-@g>whGo6>Ieypz zQ0Zm>5p8B~Be<*~kIh^T60Oli(fk;IomKbo^i6%TVAc7To)_9G{2CX(jo&&YHMHa- z0At5y#~tU`M^(;IaL;1@uJo-{>C-29Gu93jyZNkm58F!x;`laqYreKhJ?sNgykx@@ zvBbJZFsI!x=M!I`La3kZNxgx^Ko0i`ab6}f9DYYi17Ba4*}#z@-)P1g5r3&_ama* zN$*hT@|?fL6?jayf`=qxEr=?M*Oh<>!stet9~fIB0koz}FynK6I>y z;K|Wc$t-5bwNx{EY&)tJF38NJvRo zP0ZUKl&9wAzbh0N@RC-?*0D^4>cN?Cte!ObLb8>6M=Bgl_9|)-aRQ$-i%tc?rE-~FkP5VD4 zG2)z{UIp#nEt`-(>5J#ovnsHIv~eMlxC7@M{_9ABS7<#i)i=s1{gBj`@c;^;LFC3TQ1W9(G)>12Cf>b5Z>0D_+hSZ zvG+_KyU_mr&l4ARJ|X$4{_okvZy5bWz0? zC3fd+j8#F1=YQ=D=6Bt0!zv81=yvPzE zHWFIi8BR}CKs3w1Lxx8W)uinlR&A2-3tttx^&qXmsYuzL=6V;`k}|p3;c41NoD?c^ zozkyQcXIB(P3gFATMnxVs_z$NK^}%9TYJDwo!02|94M|tdZJ_L&bMPD-;z$T$>}{O;f0HrtNrL--Z4Va~j-8nAf$a7G z_$XW#O0NHWvdF)(1+}^O_rCCJ`c5B2=K|?kbJ4i~adkmj0meCkUG{X@vWg%0#{I&q1?fH|Q3^!HPSY*uR&YCwYo7kc4vKbo7zU^OMEI|yU6!bb@osLr^ zu3*4)r)>j9-*6)hJt`EdFZ?0oL_#+?qzk;i91nEk=@I)9_5z+^}w|k5WoUoH9*!07Swufcl{7ukc?x_cm7^%2EC@(S@nJ8!LkiV&e5$8Z~i~{n|i& zkfB$c`}}Bi8-R|Vi&h7g)d%~ADjYyG^y^}|kLBIwo>uv1Kn1f=u;Zd2Oy6WCxX{qY zxL-KoWAR5(#oGxV|BBdK%#e9b^c16#+7wyTI~~`}_$5m37rD>4zUKx@y_Z=yFE+&d zk{>W6N=6=-buteQ)o@=dnT+QuFKaU(bRVI*-7 z>#`YjAs-JPHXYrbitw@BC4tN!1M(rKLrLTEYUBluj90EZ3N3K~!J378gux-JiEYg& z_@~Btyl1???b0Q{b2`QR3V~6cAIU8IZHgi3xT&@^m>P%l;NV(1Hxt`>q>yEWz$QZiQW7=VO6@uZVTHihhAc>MBOb2W7Dat9d1Iw0xSxyx zV&T6J$|Eu1p)ZlkTA0^d(F24>m)~k;$DFI@=iQolOnyo<`{dW(k1u>#YV?y(G;3l? zaCcd};9YE?gs0rM|NGd&8=|d+&nqEU!$7`}_gojShS2(?k=+y^@YZ+p?*gY>fhisV z@1}UnjgxBFJZ#|gg@Qw_#lFNM8_4uMVFG5Ye8`U(9r-W<%5GW)sf2 zzlCQFjIH|9Ng{XGs91lY;egZy*U&=>6^`0^V^Y~3Gm8X1-V7cXBw|rBvRr<>QmvX<} zI+k|}*&6Dpc9FOW(XgQ|7F{ztD2lb$`ELtS2OTdA@yv@`?GO3ZSL2~UHAnWRtestxU-%M-_0wW@5tEj z`!qx0STSI>HL39F12-jh&m1PHwst-%{twQH`pYSZpA}=xskp9i^e`O3f{jpJl9I*I SlM8_V_U|$OK6Cex3;z#`oV~dK literal 0 HcmV?d00001