From d3fa219633c76518ed018647cf8e2f1800a77cdb Mon Sep 17 00:00:00 2001 From: Sebastian Mueller Date: Mon, 20 May 2019 13:05:29 +0100 Subject: [PATCH 1/7] mention of Cambridge based company and software. added figure. --- .../barcode_UMI_read1_adapter_fastqc.png | Bin 0 -> 30820 bytes course_files/intro.Rmd | 3 ++- course_files/umis.Rmd | 3 +++ 3 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 course_files/figures/barcode_UMI_read1_adapter_fastqc.png diff --git a/course_files/figures/barcode_UMI_read1_adapter_fastqc.png b/course_files/figures/barcode_UMI_read1_adapter_fastqc.png new file mode 100644 index 0000000000000000000000000000000000000000..8e60b339422da576d56b1227ba2ff94d9d70f565 GIT binary patch literal 30820 zcmdpfWmr^e->;4Xl8PcADTsj5O81~!kVb)_OQgG$h7pA=2q@i*3W9WZih$CBG)O2d zN_U)l3})f;yzlvRzMOqs``V*x-SyAkKkl`kC@V@66HpNxJ9dm%=GH%Vjva#|j~#<) z;NgP5xkYuC9sCFGcwI&n5B%eSckkb0$LNpA{3EIAqW5jYGSgV|?uAv)Ir|?A-_yNR zAE>V_e7E0l`POg5LuY~@(s(W%%n&-u9KCrWz~?kQj!?k6ljqLeoM60#_Y%&K{O_>~ z%F6T?5V+1CeDGew-nm?4Zuc3bQ)-iM8&027uPV>5sXApjB3$7%>fG!4!?E3KH@MLG zhgVjU?Si&*$3b>ghrxNh#}vn5a6A%vgwL@*KWg8?Sjffe@&Ed3@LU@9kctwP)s;*Ho3P#L4QX7S(jeJp7_W%FfT-&BgtgPpXU90 zi#`Soe1ES-qHzb2n|~?3`{-%FG!M!8{$367|Ldj^Y&f{Sl59g+AAeCEQ38jvjZi67 zG5n;LHtD~T(wyJkTgQERFJmk(T%ElTSeTbB9C70pADnI=a=U`;KN0?KjkXcMh?;9o;hP9`2N3eLqHX z?$8V#4jx_oV(<3fqBY1ihD5IiCq(|-2C5M+eEc6uURB?aO;2af0V#Fg5MH=UpQE$9 zh{OYrVgC7e*SQ4M;)UOo5P-L8%r*+n;rtZf{&ED>wQxhZGS9(p!A|;a-$fHL7%OGw zHKk+BX?yX1iX!ShAs%v2%u7q@=T@m$p7~u`;kSz*VN{=Hos6(ntbggcGa>j(I?)m^ z8=Scgjrl7-=Qk@v5M51|8|=4GzQ)G;VL|`vZvOYecqcLISI)l&c*A@b30qA=T7T#t ztVRDKW!i0n!Pe(8H4b0fuf(a2L=p0(8zVPTOU`n**%a-wDrt=-i}&10zx;cOaoEEM zzthjA&itZm2BAEmEs{(3x9%d6aE1v!O@Hir@ay$Ix`r@d0xB!(p~(D~5^b~7Ys{|9 z%!~Xy!psvN(-*7v(9U5$_huyt^b5yH?Kc+>HG71FB-6==X6@l$O4k3-$H16yCjHW1 zi7FT<{1lBNcxo3>YOF!YoHB0XyyTYiyHbc*?FxH=i=suO{INA_MG0(23d3b=I zKMdw!rtR?qZq&SJJyeeO-aHQ>%_B{g`qeb2DVZ{flB#m+-hK1QWb5}?7ieg{@^=gu z*VIU?L=PXIYk6}Hr=v1(p6SPg+lPu$y=BhqsQ>McJ@b=YDRK>>w(nM$1_pUiu1$_F zv{A9WG7Ghm-v*$0vC+Ccmx^{RjDG9@gd=Fj2frPKbAI&D=A0{Vn@HCE%A-S(9nZAkoG5 z?^OI!3&^8+!28S_YB7JUkKh7Ur|P^(!r#2_WuVv4^iRKbbRxvfu_52O?xMMkXR!>q z&Cz(s*sFe8l1DgAOR6#1wtekfT$=42+OXp3?Y#GSWh-&T3b|c{XFk#$74Y0gwG@8! zOznfaSFFvaE3Y+)+qixXqme!`BOEW2lf=|ES@MRnwr~X_o%RS)OhC+bFfVViEMNV{ z$1sP~9^GQcnChs7jL0)35vRhedI$9DWNFoduKnS|uXESN!kHhluOwlXZQX;u@^xO_Qk)zu6MkcQf}| zPWYFjTSQ31y9OBYwC4%vBAMiTpSw1{NmN<*BD^z?M7v5gUOmb{gA=eJ0s-lM#wftbhScXgx+UHWwDf8dUr#sY;;FcI zXJ}$wN33A({o0#M#*!RP)4Jxu=Y=6h)sy{-GBJ$V^FpBF318u0g_d|VC7Xj}o9X6k zy11d5TS?9N4wJ2eCGUm02YKK8C|j_>X@1lHAEF$6qxNZp&@-CrN7=l6k$aXr#=Jms z`)=5LssU5#U22E~gG0=`@i}IkhkC%)c~>v^Z~;}PMGa!yS2 z5TR7s%>0l?!4k>_|Lfb3@kK&5=WCIg9E`dhWO~JnSrwuJCEi`d8d632<}qd471cmp z*3R@w98s6(D~p0O_ABq6Oh{>n(-8%PNRJ-WCnQWfP)cAG-th4LxIoz}s zTBBD@&F{^^KK*uCUPGLq#s5{#(hl{`P6N01+{fP0==_}F2twrR1b*|zTT~j!l2Xq6 zGDS~$@!t3e8oPwjsTAjwOHk~8EmoM4N;4t;&~^Z7YF&o0>OYRL3`a)V!Z+{~Dt*9;3drBJiQ1 z#?+Pap!%!sphMMHZT)jg$CEoGymTthMUCgW*stzYal13M-`yIn_iu=cp=2{<*{w6a zBR0Fvo15mxywqQ+N5{iKBeRh*`Fc$&M+uR8Cn+TqkHjnwp<*JcgI_>fO%b_yVM}lG z^qv{3g|X~hmVxL3*A?A^o3>p{$PKRRQ8#YdySf)9uYIoe6d7?Uq-)BF&&z+$r59CS zhI#NVKb>n$OlyW>pyfChr)@~2QMBP>mX0~TGdU5Zm10`yI};n(6n%1QvH$kT>U^f- z=fy(F$G@-FDj;8@sHdxmu);k94RBjF6Pkv=KJCq#M$tRuX~w z@N%J`>I- z*@r3bU$Yai3gpoM%P#fLWw6!EWUWxV_+&M>U6&xzeP3x+ZfYRM@Wqh?0c*eYB-tWRvn+#|vvdd0LXxj?sT&2^|d>Ih)($v)@e)n+eY; z>6GSv(!aBNk=OjIHOp`4!mDI(=km3Tl%8Y%oWCZQQN8ytVw*kUAD`L)*bo1egUjsR z=Oaf6R9FuLhmlJOB-h>{CXuBj&WU}6l(b9Z_asOoofY=tQ#~iIw&2pX$Sdh4>jpFZ zfkpk*2&#bO`HW)j2ky6vg3SxGkXaRh(}c)!!SwBa(2}q)o3^c!FM@!uZiaNW<-S8O zd3kQj+C)4#eRjvgMWcUUam^4g}?mMzN=*;^^)g#0{eE15-RGWTT~kCP%sSO^u#v@urQG zcppB~8&4FV0JXVkcpxS{1$Sd6F@3e0ko%5%@*sP4PiIs7bMOk+qe-Qp>IasJIPXiK zW8Q-?*Dmv)nTf3(S-c{Au<}`NX;flGeyPU4U5v(gQGRpVw0=3~(ImxNhkQ%gz6(&> znyCr!n~6aKX@6wxE9IqwybAYouXnZZ)Wq?}Wjz`$Y(IFroZ~my@n~}3RhAxfS^C_k zzztCHO_P}A){c6u4_xH*_E^4W|K*+O1@T>_;Trwj<&lbpB=7OZMoHD(W7%d$ToDx) zy@vTNi8(#00e&}axve`jL~;8quu4h9hCuJ#&Q0e&3gJCf7jQKG|HQ~mo=GHCLKxm~ z+P~h2uWe9YsUZBiPi;O-Vt=gecJ8vR$F}*>kCDnUtE+#)vR{4N@ngO! zFLNToLbG7K<95ysJQ9tt+JW2Ww~^6V6E}}|yLqznad~%$RVOyCT3snos|jh7-N-3< zBg=v?phMMv%q$qWS3Dp(E$oLy3n(`@?x@%D_?faUKYc+j(_7!8%S+UT3WB!hzbl0` zQxhWjKbCHMcF!qwS(;!@zjG4x8K1^ut7ZI^S0YEYUbT+LN^`{LHGO|9`m&N6YmMPi z%Ev!=bioi{ZD&g z_tUw!>Un;2h0jlxQRs_Wj44&FA(whqrkkiNcN=d7^Ya?-E@$mnWh}K2Qr7%WA;Idb zTba}B9Xf`BA|mZ(w9%c#=Y(dj+r(pvxw?tsEJy^&Gs8>PRg;QB#WRcjgvlg*YNaU4Ft%-8%;9h-OV_}VDMOsIP9M{XE=l_sLRhj z(}ibGhffK;7PWnDtq~-bEWaBhC)RT4xTk5G z5#e=_>0d+HvgDl!H|K-oF{THJ)^I#4sj<&#u_JA&spJqP>b;a}mX<%WWNC5#M*yvR zqwEj3Q#7Ip6V3Pg%$@qP2*MWb0Je2D@@qTSQu<{0s5`ElSX87z3Y~NciP_WIy}Ge9 zjtax|7^uV#QM|`FUuK<`GP^$KR&Lw7)RQ>fK2j|&pv8TkO-K5un zl^Bx#N}!u7Qx=zUk*H-#Hh0Uco8w26mjqrCKp2TW~gjDmmfV5 z&p(}pNuoWfn>mT0laTcP3--v^%F2*SdAvh?;Aw#t7LSt9D+8OULkJhXWG699a8AD> zF{kUr?H)4746z^=V7@$KMvcP3Y5lby$OIaxEIJa6k@8GLu{T z=G2BlAKt1W0Og;F%T682DzEC;wDqE0KH}>(&k7HMS%jR zIX8t!m>K6nnUBffw=naaNc;HIgrQSGk+bRv(|E|aPpaf74nk34WbyE+p2Mw?&~t15 z(xbD#^eAp5_Jj1-<{)YHdbGGd8=aoW)?l7LVjkY?-?v>l*-M;&dpLMinVy)jYmMfE zXjAw!hl5piw)v!LOLj)0xwYA{I1e&bRCrLzKoYg%TlbOjVFb=NjpCs-L^Hs8v|Y)q z?+^*5Pj84VYJ9RC_=3aM(kv8$IDsQ-l!EeoDTAf&)VW)>WlvH$s0vlg0Aq?eQO z^3}DU5M2BNN$3#J@h7Oa%k(l&|CAp7X;I#pc=z8m1RYl#735;Bq-p^|$L1^YS?j zC$Z_fXcaV-);omJ5QEg9UumLET!G~&5l(>RZ<5SB1FWE>lGi;X*i13Nk>Lfmn#YU> zGecM7FNfpu_pD^>bbXm{(^4;K=<5}!YaTQslQ&oabZv{vc#d@#U9j1w&z;1`<89)K z#jQuXf}AGUkDty-V7e!PBFD!=YVm5s${rG*ULf#Zq^w(e;g?j}I6v<0<~-YUup1TE zZ^B>w`WsdB-kid z@IF4=&M}k_jsvRcrKB96e2nVnAKH4aqGjQRH%I(Mj%5C+0#vAF>hbrWW z(V!S-4^Fe$3VY%`0izV$e{PbPJ@gs!iRC63gy;po}2 zTOTnYwcPw`FJO4QH^%HfJ*_g~m1e_g4asF3hw+;>+M?nkdb&y*ZNk;UurkLWWe%88 zU9*9mXf+jc30do)zFfvRfW_XzOfuQ!r{GwL2dOM}J9dpHFJw4x$&^IQo4?O@usnzG zsqF&1NSTelbx2&FW2h7yayJ)is>*jhH%s#it4Q%bvC?b2iBK^-JT3SUEoblzi7so` zT0;LpQvoT03CB?BwLhv>@7%6jmR(wGPnd`s-DReMY=ocPZmKngxG$}o8IOh#>A<7h zHRLmAwu(Ve_gg-SP67ng>e%0Zb!TVCXlQBxU0r#$qq3zqC#ph3M4H%rt86+T$7?NP zOUf^+kxQvyVX39W!XsmeTHuNHQ~l2kYoQP9tG?>$aJhmY_VAC}PE|VPPFF$yP_WP4g1xt%;ntr3+VmQH)rHH`ro@edhaMtT86!g9k(&ESOr zQb{QXQ!9QhX%{n(EA9z)UbiPSCPWtdWXr<-GXooWF3pepYG?obf1ejKWTy^A zezO==BF$XgBj`M62f>UmPq^@*(dj&iy7uX^>GSZqmO@RYS)q?th^^A6)i+X_8rBN4 zV7NwMG!mgS_vjU9Rs~HKHPXXxC8R@skbzDNmeV!gx*v5q@Gh z2WJJgRIT+wx7QIv&pk~to$k>)`(iW{Qcx78Cpi&ftbcVZEm7jiqQ)gv&0-EQVWr%z zS9QHTHiW|$M7K`5^gWHRIbHbqFqh_}PEX;&{?l*DOezrQl(SXzCYF(zWmOWeip3J&>K}uT%ErA*WoYApVAc6pwIBJ;g+^V0F-&9bk?k?4rcczLuCFfqKQ?1hi8Vv5=a zva`+8>o#bQfiSmEKk%;)-ca4Z5({L2Xn=ioY`iXqmw5?zx4$Y(wRbSqs6YN6v@2|q z2e}^G$IAhM96ktB;A<0TwP@$#fRcDp+wUFbNC0K=!C>a65BW*bB+*33`v4Q+D%`~4 zLjYOC!3jMSgD-ZPp-zt16)in4O1+Ub;a~poMv6UFy~#;jmXDJW#*cM!;JKVG#uT*D zv@!VEW(0=~l9xtB;=Lo0A}I)}JDX{BLpK3#LB8k_5i3asts($dqS)pdUk_4vxwU(C zY|0)BZq>5B(lXd8^ft@0ILWiN6FJpgMqPVL{Vww5RpnNFq=-Mg0M=a_d!(aMA#EB1 ze&xdWpV&dX(S{DdmeZ9p5JWed4U(yn!$*|{^(`6C6*GgQ#u|{x8HD|$B){gHatI%y zZ=i*{FC{piRZ1$V5oIR6=V09Sk;eZM@a=CBR8eq#F2J0rwjQioKvTkIt*>9TldB!?B zlK0GM&C#KsaaB3`*dtYKb>{(=i^_Dsw^BxXxMYQBf2J>oVos)KehjlR-Rnw26fH5u z-hOGLt0zFF{-txS5VE6mZ{0XAjxWv6|k!v7jMY zn}uK-6N*5nz?)4ozwxC=4nhlAs6?PeZr3`?2du%W%Z=GN)dEahkoN6Qj`QamSwP9Ogvg`}L|_0d(mp7{nh1^5T7!hg zY!&<{m7<7bdKkQz8MrE{ssJn&vr;h7TAY{-jH4#6Yo5yN`NzN-%vbc0^>=X_vj-!b z^l=#?%|};;DAO_E=2=IDU&J(ja+B(Ybt<6+6JqT1zqR$2x`bGbjb(i1?w{ayVfO0m zet(>fS?Ex2eBwq1Q`5r;om-)}SDvSea+c)id$`E~F$Q+ah^7z=xeg|+Vtm=dz`orq&dM?E)2jCc&M`QHS4i8qVnj^@Wdoc~xlp#-VHU5G7`6POC{LiwG+ll$X$mz{5|ZE!!#(`*KT8SLIrBquuG}IO&&8~ls2l^{JBxLV^$6`NItgm zXg9DN&+_|j1#<@77jxulbl4$N_?x`wsUR7vj~cnxEODDN_u9U_MxL3;uKm(kbkgw2 z##+L68-cZ_hh7U|i_<)v8y(TrDrdm1VQ#`x6mSeB1DmvpNO<9G!a_NK^`i#VFy}o# zJ$0cW?wK121O9#MFTQNwLbJhaPRupmnmc*8i{mhB(3Vta|EVwr6t3-7_voN$6Fids zQlPtEzOr6Y&H--h@7OUA=s)>K2X+)LASRXI<=B6)*c_y=fVri#pj}7@#wLR?Lm#UI zc!i+-qRa1gmlR9|yrp9I4eB~;V}a$c#6^mtoC$}i)yBq)<|C2fhg(Jw6YkFC*py!H z;b640hzX0o;e&7lsKLBl!wet$Ru;bMjcEPtlq|kiA!LNeZNa(i;VVCF%_)%{u7tx_ z5cpa})cJIfdvNk>ze`gb4-PCOV0y;vDL8NtB>^$^O*2W(2hahJrHM=r><;xJ7X z4_E6@Hkw#t3=F>(4r%|>+VM0h0KA@-Kr&S9>?FRy*S@9UUYXnoTj$bwPFf6F2Yxxo z%fLYfMF(KduUvv~UcY6-{2_BMPi!fg_t}RCwFg5H0>ES&b26ViW0nobS!VRg7(z}b zeL&8=tG)HXK+1&0Ys;~An4TcH0GY-s1zw1L(MbYp0U>Inqa!(%P(gUfC5y=s?Sn}o z;#Hn$T2i9ox=Jm%dKo@SIO&*3il58QRyD=H&*rmU5O&e2vuU`rWy<%u_6rwf3Xok3 zi8Z0kSn3rGdo;3`U!p{a1Mdp#vf<7@w_&O94FNcAv@ zvyk>z1N>PmfvW|HKN(^6CV|I{89xQ8-fe8Ys1?lAiTH`vGVZr&n2*hvoy8u53f`>! z_z^3gL9hNJgA^|nrnCKNKBk#g;o1;NO;Mz=;l0U--_rj69tRFGzQ-bO;Pc)FZcc%Q z%o@uC1eyyN`|78KUiXoJasw}Vu0mXs7Cp!&*3p|^M45xP%!Stv5jpTX236qi*0xy_ zY6mf5%z`|AxJU4V87K;KSHC2h7B*RL`C#ayP8PJS1d$5VA%RLUVfGaUHPSeHVm&hg zeFebqU(J$z`dBKipo7)gt}1%+462;O{j3^aX3=XHHw>UP6! z-x)8Np|!7Oe@!?*t&s*yiRm&xfB1!Bhi_S9u^IxnysN4*zTv~gMSSRK973d<*YO#z z9grw9KR7>kcrb(jPM7ATyr{Bc$%8vi-osIZGR@Xyo@H+3SB9VJxi-r3G)l7Jv2%d@ zmIzRk!WX1iH=C(K@5f|paEDmC`3K8_zG+;zZW0i1aXF?l{iU_Oi(`YE?+3dXRF~>2 z?Y+pb9z6PrasnzeE(ml;Wzy4y;a)4tpU7J(b%+@dJo)M3Sd|9HQvwD6E|#}gD~8_a zWnl#uk5?Woypv+6FmL7f8>0LAOlPbbhOa@=Je!$h%xxgO^)qk)S&EJNEW}dL{1z+W zkPzz7B-b+kbTPsh7nAf^T$O`S?DO_Ejt6V!c2Ez7d?uNhLC8An;ufT7xEFqD&GFd+ zWb(S z9QHa{&q&#ex%OZWjUUvoP};x-RsQfv~_$i%RKurkkg`yD!@I+j;HjBt!XvBgR zfDKTx`F@lxm3nNrd^Nkrvuv;GdG~D?G0Ei%dh=f*skzU`Vs+aG!G+WKFyeeX#_)=< zM(lJyONn|YtY8ob+mL2R1E|y&ZGqh^+>OHy#J1UQo?e@LFEQIsF0NA)UU|QrZ%Tj_V7Nu=#bkA{BDi4=?Rc%h$9^B92a7x5- zvlyp6UZ`M!InA38B&%edk+Qqu2`P7^sWI3l&$Ogf<$GOSov42hZ2^Eb#ny?$b1iI3 ztrb>Z+_u`L6Gbdqr}aFGHs{o9Vr@0@dp0Lyim!TYMaqv_>@JHpa{W&&b)MyV%^^42 z<@yKJPXl5ioQ33ybHB7V_8glc8h4)(E;km&N1=91N z7-cn<2^#HCa^1oyV({&YKwsTGXLG%QVVAgiY|W~aIeaQgfWBm_Az;iRKv zsLaA|Mvlu;rN3Kq(k`MbSf6eVnO5};*V!>y&<}mtof?G0mhe5R{me`>u<1@#2xtF4 zyGJ|1dJs$$*{y@ct^4Nxn!5%Ta)~|A67w94sv=8MI<_r~ZUaV+KP0jE5DJr|>C;y& zuq32}`Z3OCA=XOLc9;l|3Eu#^s4icyetZaRe!9)sKBP5xh zn%{84;>a%hM$je^6l%H@VLeZ@iUD%wIh)C#(9)*nPWQD`S_y0Y?ChJ@Ul!8p>ONpo zR+mQBxG{ibx%@O)um%_e`@r7*%-@*c(*&Pdd>Wy7XB|r_;L*e|9<7u$qE-r%oWU!Q zJ=`=NuarS=mdL!#O!2(_gM-K``nmZ}V;%8${{aH|4AltYN8#uerIqyONe4Ot2 zo1PF{aLA$!Juq-b?${shV(_FkIjAzY9#d5^&_p$jzXQ-%;$3PK$2(W7Sp^%)4Fv${ zCy+=)0E}-cIIPF`2~q_)hDrqB=%)j7#~H@`^f|BF0irJDj9_=|8gnuo@Ke%zBlDUy z&XBeYpde>~FEHmVd|V5|WUPHAm9c}hNzM~h>%L?1oGeahYSqel^;FZjUjn!>V{sPg zGiCr$rr6(jDGAx`s`8lX>7C3LxG(^Mv+ua);D0~@q6x>Zo{OeU>xn)~Ro4K^Bxnpx zZ;BjMZ%I@|W>&Csfu>HOutBRGQ&3$|KY@w_fI>^yE>__Xd802rBNS>rc8S=yd0}aF zZo}BVyEz?r$gAcvVQfQa1#&yK&U@7Ec)VJmK}D zZr<*f0R^HQkW&k*&rmtsrP!Iv^^q3n+wHjuOU4dCae=crFX`v8$|3rx8k$|^`| z%0+SV)jZeI$N-Zf6(67JkFTw|twyI;A>_yhQF-RYwH$BH!S6;pr%s)k5-)Ze1HBw~ zrk$&*Qzs^8j_;aYA`t=kjA}0>uD9H86om4D<7=@W| zu(C@18y?TIr4r|9oF9PPvp8`@HP#i-cX9($S&#dVBVH>TaKkIILcvh2ohJp|)E&qV z@LpDM(V=LWH6HrZ5gdBzt^)~b3jBx_VAg_0jt5|0d(@6%-$B(sh4I82Z0QP)SBU92 zm>cij6bCfj7Tw;)2E9HYO$BFDpu}IG&qX7)76(UgIvfR$ocI$9$QpLsk%9BGVhWaJ zYS6x0RHlysQ_EdO)D+0K69rS1iO}%ZKH{j^5=H1!3aoE~g~}$_6hS#Dw!w4_2|_52%rK4z$C(qiZD%4{u6lkYmH) zjr~vY1MelA#q_M7PgeDf+N`omQR(w-FTC|TZ+!FB>o*XQb5bxMdHXz7sk-&?r5<`F zV&p|Bn<4h(KnkvQ;dfpz_-i~-QTvyhDf+t&6Q8~`HRS9M<|qhtabk@bm`npXmhj+n zjO!fepb;x4(n>GcPc9+gAkAcVRJ0nZtCJjjSJu0+u`w;oDR#^A&HFHCklj(x<0`pM zs)yGS^DJ<`t|wy)SD_!k9_~1rnts^YWK-Q*%>R(u`BVHFSX~RXZ7?ZTtRlNie4D@f zQW0ojkVAXeWrb)ZG8s!iIoZp`&8MMh+kVt1<5NQNe51O6QNnXJx3T-2&!f`p<=0bZ(W~wnsH0PQO zD2tDwqzFMJ@UEPrq-@d2f^~uN5-MplBbf7NQ3osGs9sF^b>3h3tquivmQZeaB|=de^yL~Kqc>2*8|oc zll+UhA$A-^PCyepSSdnNoVyl#XjlOHMtuhaOgV7Xz>L7z;>gu6pg^Q;V4UNZe-4@pJ`QUE3K?1A$c)Oul=J!A$e<#3>Zi2)g)C#H&?%Y-S3ovpNh*g5)VfF3$$;aY%8 z=HqB{EHDLX2e{p}0lDm(!y!4&qVAI-CvLg7ZaM8-%Nl0LG3}pi5jJLjHHYSSrsV78X@F`LNWidrk2va~trqKpRwm!_6cj9+hqcr$sgbaEG zHoCtY6*$o*5SS6gMKN0Gkg~GZBMChoXr9IRJ#KRwbmPa5AEuzZkyc$v0@^)ZXGcj;q#xMUFALZVU*2!1c(4)_g9-la`T4wz z7v@?*eCK)or_lfR<+}XYd8W~THY>6FY@PY2CX?87&@}oI(<5;5h>8Rw){$t7l}8+H zlpdMjB0(narbc_js9g*+Y;Q1c9KEZ^YWU98hk7%%p)B>#w(@ z5bSsXx?W{Kha^W`MkLl19*0qa)o~k`F&$qtd^Q`KEGYtIAC6ppM73jZl}Mp*uNnqd z3FmJgmSq4`rUpW4O~YsXy$Iuy*R&*|jdt{%z=!_IFt&04)gM+p1!v(^X>i-Ok> zB#c0}0F~hk$*y)*to5}N5l9w>7$-yv*gnSvMB9%jP#mZbKa-~aB^%n6&#Ml!YB=xX zHJA|q5>KD^L&W(QNblhxi<@&CK$jdSwyZetLRGGp1Nf4X+-3YvK%w89QMnD}OByJ$ z+&S^`BHp24heX`i1_L}mK1M%DMhHjg7gfR4ue)UaB5m0{W0tDjZ>a>>S zhygw}x19eyd`hRGEB&Vz;20_r_#!QFpV(0@V51&vZ1-4KLEQ$z2v8=7mWr5>n-g%Z z^a<2{k@UX?jwWt%#bNO3GsH?4b~W7(iEY)4KPFUjIodmb3%+(^baM!vL9B3$$ODZymGn zssZVek&$`zlC>i$9|TYe?|n1gr?sUZh{t$WDD&a~&#dP%;%Xm)A2@Z8-eEu|K5(91 zqD&WjKMIVPhar? z&M9f#p?Mn$NO=|rPZp_QM6nC^d72?!no}WJ9fL`crl8Hx4M@wIrrTGbdreaTmip|C zFr8jva{-d^p9 za3ar~e`NP{vr1gXyoVb^eiJXstP7}|mL?iB{ri=C5EmESxvErmQvPr6rSGX2Zf)i6+8Sy;@HFS@i3$+a+*o<`e+l<6t&cx19@fNU8J*4v>S-rX z;qT@JL7y^6NIaXzR#^ZU+DI4eTiU2eIW9iKWIso~=}|*n6#^8zK{8zP^h<>c$ck?q zVnZ`&!uW-{K+%dr(9mpV=S`GR2`r^f=9}I3f#L#KH0SkMQj|4_9jJ0k7W~qZFf>2Z z%tV5xVn$39$*NT*3#M{DfbQV-KuE?N=-RmfASIpoa#{yQ4KSz`iMAScJm@_Ig_mnA z;q`b{+5lZIoKZd!#vVdXa7{MldHqYM{a(d{Ju8HWjUnKh%{w&Ae|?MLmmckb($uPH z=33$8PeZlrWri(~g9DUb0)pCQHYb+~kmu~`;v5a+R2)Dz3!TPzE4+cB;{36eGmp(Z z9Whj67~RdrgU|zy7hLn~s=WH~B1{vwjmQQm=tC<2Ie%87qCq|ST1^Dw5i(r?hV6B7 z&kci{;75Ru;t>l+1q9j>p>_%73}UC=7wPiQc{4E)6Q=#0pBY4m71SBGkElIJ5`g98 z-h07_L7!9#!-*G^P!9aQC#Q80w9ZfK$qi;4x!^zJ3n+j3Rc1&62^jmc*Zq+DcupAf zkLgtW4op$GNU<9Ppd;LYEnc7%;rI~)W-vXGT>)9N@H!Y6U=bZ{V#NX!z! z`>sYWZ^9el-~Bo2bH6=mIK6N_gc$l#f2_}jnf5F7tEerUR%Fa*^YbH5F}JG22Inq< z>($d4e}7cw@Sa{8XwO!CuSfg%itiDrwg9&Clhhk}*gUw>W9(Th3n?;VK>5Q6wbghz zgB#!nv1A71!rE~dAs_@f+))tR;0CbdMYbZ8PptqKwDLQ^QCYx*7mLHGjsTfI*)2y7zq0XPm&<3VIBJM@+ZOC!7fYg}}_?X*B z07mc8Jg9&!ia^$o+CORt-50pD7ZG{&JW;SU)hYj`Ueg7omI6he+Bq;!4{^j1 z7CYn7#N`2}c0M^=E|Z)1&P4ItzB8{ZP&gXkw@WW#H4C)Y%A-JuRak^cm&-RQpUvKz z)5Y9Gy(j?a6$Xt|>2^ZPGk8vSFp14C8{3ygGX1WY=bk;?W*x`meCXY7j&bb|caV*W zxfgFL9ef^T19!^fh@t1evqJm|?^-??FcB+st!cQ~3}tFX39&@F+Szeu%zWG5+uQrL zu1Vb!MKKZcKy!L+ndN!}xD73V*Afzvu5apDMwiZ&dgq)M-T&>YC?Kqp)6S0am=`E; zo=AmpPt9&H!(FJz|{*9l4JAVo`{FuN*`S2U$QPnLMFd zmw%6 zcXNu*%aw^fImf=Ba>y_dlC!OqyZ+w7PRMT8fq z-H#F-#Ws6m>{2eKTY1|mLLN;HQa3$s(@3D}W!?mCfgJhxY#OEl{7KLAChL=<_6X?r zC-|H5u=%qTD2x z!tvyRbC$2m3q+7&@^^19o1K6@UIsH(24=yj7=c6jpl76&%mB6Re{M5UfsjbH{^YF{ zh|3JL^~(Au>?*#GIFhUG{8KJ3#}t+Y8gD~C zdo%+AxRkgr>FTs+1!>ldb8dKc9ceCf0&>v>u6%~HV=`2K^;ijGaCj~K-1YyKp&9`s zydRR(y8*sX(&a1JdlMpVT7c>13!UaJ`oR4D{B#1Aujn8!kUuzjcKXcU_%^0$Yhoej{4!%D{J_}+VNY4A-GV60wO(j)5C#5C?@-WGc_O7+_oAtwC*)^bSPhB;0*?*{ew^3cqcD3K2CmX# zASm>xmEfpLH0;H@6R|x{eL6?BA5#-14>|^M3Zg~ zbYKV=C`>S7*?T+$p!Oj?eCP)4@} zE-?66fU!W~2eNImVjwL8UtT$j0kE>V3+wcR=>MN@P#7cu;q|2R^n`>jXkv_6c^b;U zj%gMhdeLVO8K?z5C}aKsVQ%u@U?c{Ntv`*3Tvx`Bz`g&0E(BzP#3wLe*5{e5zhwc* zsiJkGg)Yhj#zqo_o2;vVOPC8)UibB(qEFxH0(kJn|JI2e%pIKn2O0%vWY_5&gLRB3 zB(PFid^%J^Ea19o0l2Q}eM@QM&6jORiSgLs9oa!HltXc|O-*?gG#5%@76F)`R-cmR zdDf0vIY~-eAEL2ln0|;X#?+An3gA)fa#qBSCh!X}nN-l&vmA`E(M!jVT!sA8YV!{T z;GiyznkPgy(3XIh*+FUhPMAO-=EbKo5Dp4svVMzWb6OQ(-~ydQ7L*GYz(B931$xEG zVBlNH?t74dZlK#>cI4T-oi>J#lvfrYiD`5P7$_c6T`i#XQ~F0_A#E-o=UoHV+N1NX zvdsmoC#IuOfP^hRwYNaHbceoE8H79)>r{i{ZIH77&3Oqt2>~9jDoB6$oqB3=#AaZ= zZzM!wmIf&K;>0UWr~>?sl&M%3>(X>XsQ;c8qvp7Hym!V-%zC_qECxoc?-B9^VEGSx z-pkr6L?Don8?!NMuP`j5id28Q{6iqa6&mb;uX@r^uqX}_wFKSe-W2o*0{=CgzCfO; zxM#C8^Km*ja;Yz7NkLkhGbFOZKgTwR)^Yt?LY{RGvA@5B_HfNXhrHNp4iTK66#e$N z*0-}o|5VEXW#p#P-~r$EU|{?Fr9=0NLK3`-+mJZbBK>Nz{$ro*qnuHKmb-QJAHqht zCh}c6mqwKP9=vtnWbe3Sy_MEKT63nDxc=Jg8gii2U893q+d- z=vM0Bb|J-##?c+xq-u@9SVB~j`NLVppTW@Ksj-r0K=c9axp!?+T z#|;Y3-G64*Cr}Ofb@lm@(zn?uo!+_Mr+eg24wyX9x4GA3Slph)tvx+pn#BHLOu~Hy zxm4$$@k_-ro8($X~(T9sx?xUG}8)SuLv%S zI-vJhx!^bHq_JO-yDP(cDDY1JUCQL%5(UP~-e#v39jc6xH!AlMu~UkX8VTz6+QR0FB7{N8`o1N3smoctldDefUr zIdZUgZ)r(7HNbYydpZz&PVd5%&;2!e@e&&{OPe1*xVFwCM5#xY&}mN_~{={ANt1`%IS!^lV0%k9|muln)IsU zk}Ew#k?0U9k@sCUu%FxxY#=lhCr*0gm{aO%n!35UuD7(5P{r+gkv-`ft(bfA<%zCG zeHn86ce|%2<6Q4@v+IdE=D5s$8+nz(l_&)ML>@@PZ7}Jy)V1et1a=~iAOxwao2fkS&1x)>tOcEbWjp$iB9!yPws9^v+I|T z#S7y5?B`u}H}72qHOh^e1Ba!(3p$rSd+fO_ZCfrKf7zs8Zx}y&ZGU^bha&I-O}vD# z?ZNfkv<1SFL;5k4Gpa;gZ#NCZ5-MSHa|fY7mt~fbU#*t!d%W zW!I>PUicjT{hR1zn^D)-rOrF@c<^>|fwvAT?JEp;?>qF~N0<&dp;#nqUrkIFgakN_ zw;h!6EbaI=jO?%kn;2Gl?t5uWoj$>-FQKbbUCpyr+0;-!@nQKgu+8-(```Q~t(K&s zXY&u{HlIe2vM}o;^(7KcSCN<`472OiEPeoA=a6VW5Y_QK`1aA&wsQOS(%e=^$lz5` zi@vaRB1MxsrOMlNJqZ&QcCzekw9-Rhvosald&GZ5wiWeo)_gSB(_S=(|CI3gY6AWob1!%_)O$I;JsJ0 z*|+>9=ZVU6P8G@LXn%p#oxZo!D@!ZPiaj;kZ$DD6bX3`AZ4Sp>AouMLmUYKv0bdK_ z)Zc$XBFawZ@Q-yI~UV9!>L0gZsWwP~7m!KaBOeGPPBvqcViEwq$ZZS1( z(v}TS*4~a~akDD9UXbd+aHVeGWw(veAC@ZffL;%n_>qZ(QwBXc(eVc zEwkMXbtf;tBbTukDI z*W+WYTL{>xHRRK6BLt?(u7&JB-191B`nnrLBKX)}n>pu0$^CDSwMFy@3J}aEkDF`S zS5d4f#GSFTAW7_|5Z~W0+z{10hkUG-j7F07 zt>kRlT5nB>Z1_o(a73PiJ$jYm!Bil8*Ts&taxD{=aA~LW^@QZsV)xRJEwh(J`*_vF zr#q(HJr)uPMTzEV}+s~pJzKy-;YG^JojUp0`G&icoDYp4t zEb=ymPi+y7f9Md?uH5LA&=wV3vR?`l*v}Od-IQ8l`+SRYRcd*A$9!_BYXW;Jm&1q2Q%4kTXxpq4h+C)duRW(4cGS&-^JN!h-;AJ0@~{`et*-g zqV!-<)qZ7trGYwU+EgPxdXf3-Ot1e1J-h<8Y;s#aO7gs2!J${e-4|Irww9?4{lMrU zTYY@F@5s<$&85g^dR3@1^_&ms9(fY!j)rg&p2coZ6Js3aBF3+V(mlV*5ZQONY`%wR+Bs7ym zRNmdli&yPH-fZBm_wmtH{ag|KQOg{KgHI6&c9yD@d#`ryMedBRKO5chPRdNB7!{pY z@eQ^+qqrF!^+B@95Ks7fADz>1j8OgE>)->X?)>9sanmF&B-vH|40!*itt*d9Dtr6Y zIBAm;m8Ds3W$U<5TH~%QlT?;wny4sbj=PCUDhSH7sb%OmrIrg+)>tBvnYkjFTds@? z;)>#iii#+kg77lGsdqlV_wD|5@45G!=lk5}dG7h%d(U|eF&@XL%iTIQKR>T+G-I%k zEsQ;=?u__Hajd)av0a*v_^6 z7w=ObLw43zhgK&%u%{gCCk6yNhvrAg(QgE-l<9<9BbLtLoJ7UyT53 zgr(RWVZ8E)_tnx!X>19S*8l;rnx>#UpIk-G#;(pYy5peKMy~Q5yC3Gux5aOhd-0~7 z#hi$xEc2)u@o@MA`QGGwXQZ_LK77tG-c))@3J#H*_xQILw_1#dWsfPUSq`o>3WaGgN;%iTnLn$*HmIRq=_Uk*XN7 zxoX)|&K6VGu|I0YYK9E(8kuMB{I=_0{VR^30a8D9Mczuc}Zvp+b%H%tr0oMV*0^T5A9#G>tw02s&tHjFA zP{vPpU^P!T#n0qU^p~6MQ<+3pG ztDkF}b+B(Ip58C}8M!{o9LDx|RMJhsykwIpG&S0oNSqT$ORsq205%ud?f1M!Aa z|HbpN&Ne=*g3rz7;%3@5iXk67{5ZwqdSQPJ85Tcr?fs#DaRZ! zAZ(tnkxE1kZ^)3YXz`5;}S zdWL|yJ#4W+NP;xvF0MgUb_h*qHRZbg&J$3;r)<82b!pX6<$z-o#Ptsb3$RpDxNxs> z;T}TtiMtyevGF`+SD;k;P36mb_XKEGU-?`EqFXts@tPh}U9B~lTIZU9KK6@BE3}U) z@y_~9OP#c(Rcw2^_4$(2^h%Ye=I6mcl?cR zsj_xy``f;vD|!BU7oT3RQgsR9=4>g;%Mp9=BE*2X@kK%%?yXc$sw^hlldEtOxKwo+ zLJqf$t?1h$b8vE|6t}`)eYVf72K28Ju6ths)v z>wrh?8Rz<$wF(A*)CY@oTU^{zahly1eFWWBZ#^~B+1i^)G7cS@YkKau+ORayY{1g! z;nHpEuJ@1n^gkOfVIRA=6xJcM%ztOL1nis4X18Rop$V8PLz}7CP-~>S$+Y>-_{1NM zokR`=BBk~!E@KR2Oivs2Nt4;ADf4cs_x)qxNv16+wk?NHlOL{bsqpa39BlchZ*<6m zAmOf_UorDNd3^8wEH^*M?cajpl5ROj*NVKxVlk<^M|v{hOWn(d+LN+(YF%0tRZ7e9 zS_KWZ3kl&S3EG|J#>LdmHJlmq+L-a0Cb|^MgXDReTJ=?j8k5( zjZ{3l(`~BvB6rBBIC$ImNYyywDZDK+r-hkeR%B+TZEXmF33PAGUVL~ofroRbp3zSL z=8tFBywzH3u%64_p>?V9z^}az)5RN2MX{E?2c(nnp&QSa3&WZ;_df;eGM_Z{A86eO zpxv`OZL4c*aR?8~*cJe)mdhlX?fuzOmI=Hk|Cv7UZ4K$p))&@snHqN<-%Pj=HdxU9 z)O89bPp7&`nQ*+fVlWKX&P8j;8ZwutTtX2B$6LA={Y7N$eWGke003$+?sGYsJIb~Y zjKXwm)iM^3wk-;TET~vu=0BBwK9?kv7EZgQ^R8`xmBRargwzRQ4N;ej0L(V*#%7A34m2y)~XQ( zSE9#a2RqPPb+$*x$WM#KrQy0PJ!uo>{awPXO}?^E=>`o@Yx%(zzSs{XBJo z8mp;5x;j@&*Qc@Wfgd~q(y(y=Ta{xSrAKkRPpu7$=^BSB^R06J9-+hTipfMYjDA{X zwY!No0ciMLs$)&01gzXdzR~^-2yAPlqkH%Agg_(t5xh-)xwN8VGvF_+1m(ajt>o0Y zSTVm~%rhy(Y;8GSmOjR-KsXJk4IWdSe*ilpi6nQMjQ|}L>1~kGrF&zwo0sMC(drz3 zIToOUIlsqmwygCP70EPbrMp zG(xamrCLg@!q;NOD^=<;T>0f3OFQ`)nr^~!!jG0fnZ21RU;y{%>ezO!c?!%4!;e3f zWLL({5Lc`P*0CF+6H;GN$|RAz=~GWgk-KgecP>pIm1Ufep*hQCVLNDXOFq121W=<4 zPm|X0`ysi$c1Hr>!-gH0RiB7MIWdyZ>PchN)ib#*#sXaGsR`E8l_tw_#nKoIhZX%O z4ng{6j37(J9$1@!td8e4{V*_^KvFW$07BcMd01%-)?L~@vg*8}xxJlK%T zg3gs!U%s2qNvu$1MSwsMrmD!C>O8@vwv~#MSvuF2%g;=f$eXE5v2o4cBew?2)35nmA<9-^;*bWed}{fTA`>~Z!`j2Y@j^}~ zZyZR4VR$6KC&QGZdHRMRSY2p}sZTU0%)Y6E4tUV*v+>iNql2vYC-;tWTT!StH!7@$ z>|oZG*abP9I~O_Lf;()uetD~2#5(0g%cYzXzk)m*GuWG!*ojJ?mGDy^m4Z`}3&&`b zxGIU-HTV5Q#b=+-1`e(cvdOBeT;bJ&9WiGfEQ@sEz;QVS{eAPiRW;1cVq_a{P#<8N zqk-7CAkd04BDaZ=XaS=Pe1Ax``5v5`$vqk;_x@8?wz4AhX40tDCgb_H!2Z9p?H0o~ zm1C;c(EO@Fwptl@Pjx2ju#Ze=f?b}3!|gCDy!m_pfhm*hm7~tJOGe;!l(nkreWPwf z>H9`GbuIWoBljIfvPi}b)s)CZgE2z+qHt2AYvZt>g)&x0uDXwI(6Fs}V!Ak|YZpS4 zuXO8<$fOMFaYwoDCD`os$>P6Q>KnHHwoXZJ-FlUi>%Q#X0v{TcZxs+-o@4(l{P+Ct zdW*#5^rhsGdAU;0>Vc9?-lzYo`j;y|cB_TUt0uv6cm^S!5w!Iia*UK}s@yx}VJL_6 zll9PvhrJAkXQ8rC=#5uX0kc7*7irDip8eKjW@uP%es9}^pD^y1m@=k{+(2v?Ut$~V z_1?+G#=8|?{LqQcoHXrvgI<`ABU0NcTBn0(Cj#mbA+W1f#0rR$#p_f9u`7TSSH^ai zyk#HmO710Ph-%uwx&)G(vd{R&#-4y7+@fMQ z{c%_3-LNN$N}0363U>X6+Kk^#hljzSN(!<{ea1b*Lsx&*gV5XbIv_Q|A&=b@`#C35 zH4$p#Z6JWuL=o&8(`bQlW|^;cds!CoQWrJfO#*ve?~@(T(dW385%7O*hg z$2E3KF`k}boSD$t3eWTrgl3Wwnj=fs3bo&{PkLh&u>N4f0f*W~=fc*Iz`DB21B4VJVGi{dMw=$on0Zaz zK4RsR#`Lgt$i-(W?uN4k@>q1yPI6S#P*?kG=@MkwXxI&Ne5AXCV$VKYkjJ4^?nc-5 z5#bWL;58Np#FqrTV!&SRArXZsNIJjK6XY@7*Zmfe27Nr@2_AOyie`4Br`WHkZs=Hi_qa3{gTOwAdk~UAq~*zX)lQ_;GIKMg_!zVbl)FrhZyR z)z|3oil@>r1Blm#_L3z0qdCs=XXXjsn8(YaiDgRmguKtZ7Q~JqyOvc` zJB=!u!~6WyNc`v+cfZ%@n3{RC@QtyXz3z(=+4?2hBedAkh{?53sLjv%yoP+gE601# z9PeQbeg$ojZr((EuVK##?aU-0H4nGM^ zti|f{og>Y6b?{kqc)Rzc#gY(t&*P;AsSKHp;uxT19X-U-eT2@+*p5cp0^}f2ZCt<= zTw(JK0}E4Z00y+Qd~onjZ~+Sk#_B1)x-$Bb#I7~KA0F%kEnMYae|%n3q)3RLR#X~5O@}kTx?2_^yOg6V4qt%o~e@PU2H_C;>XOit>&t5 zzd32TL(Gr#$AmbNQ}cog66w4WNocMp3G$fX3Fn12fNWm~Jccz1q@2&b@8i?ifv@a< zjO=9hUwgrdB(iYFxHh~gz5iHE3#z}f)e#4t>arq$!e{7%75SiG?b^w6)YL!M{-RcY z_=vZdh<*Jo+fBCZ9rglLsCy8i51|GQ_Ju+}5WFL1L;RgQq0u3wvtB{*_X1KGZ7cIL zC|gsl6HbU~#0a`$pADUsqFARVz{#qMGb!vfkqiui=qY@ENzzR^=y(dhCm`ciW&q`v zD0+;-Ly1sr5Ss=8B1mSynw?fAx-<41&yeHLWpHD^>Ek!gCHUqF(8JZChHDCY#fmWY z7JkF6CA9l7%vhT9%S_%xgCfJKlT&`j*;vYuey_E>5+H2b0ieVsS=$S&ZPTV~dW{~n z_}+8qsY@^C+p25Vz5;W9^6E)kV22qy+jujISJ4SP$&Zl|Q_>?#{>gw)6slqAV%R}Y z1YgGl*xTX92};#R^}BOIUP0;2y>!pY7-nT7zZzX!@RV0zL9EP+)l6-8l+Qtt+Ad(6 ztn%`Y*-)6!Am-~ZAe0e%u@ICxlV%%YLwb&XQM^E8$Pa%fc$rnHg9;T?z97bNWH_W2 zk42};^eKVff?4yH1~b$K2lo36|4hn;MCrO@0z)JO`S*U=|L zDZ23b0J5%t*cMxnmUt1SFDL|Ovr$^~`I$FviY8q%2B?{N1JJg>k+cMMceV>0IPe=?;J58xMm8$4z^8YZ~wN<>=I&<-B2|!;j$YF@=%M zJ$rbj2)CjP#Qo%S;;CA|f76_Qc*^IkNU`qsEyvHRe(S9H?R6Rkpvz~~zQJBH^*%PV zIE0#BI{lS6{mYTUmDVfz@n;VXexp&~so#>*GyD9r?*1R%rKmotvcaoR>(tIm-ymMl zzp(&|+mCPhSI$@3_Hmn1xx2;fpR)cRnOmIN>FV*lUs^)$ z-k_KrI1Fv6#N8jOx?Xmco;>D}_yy=_jY3KV5L2QeMt;DFfgUUh4K55m45z!M`VDpUdNqE%D?^!zMn#iOQU9R&sJ?+Yd3)`X7xf$? z;#k_sb=v}$o34;1O2P@ZrYs^S%?<}vtbNtnmNMV)7;NTA>)pHMD@T@WAB`y-%Cw_@ zK^(MUG8rLhLZ_eE*?q!jJ1L}Ed(g|NDVsA>`rgz6O2XR#p&b6wi4P}Ij=vCO7%zXt z|VjdD@^~NqS5W2y?!XaU)KBw1cr0I?)KjEM3D(x!nZ!lfo?&3t)-aZrSKwk z&8aWqo$NnC|3unlEg8-Wjd9gA6@jRX+ygs^G=Fbj#s}NM{f|`J_+1>v-(Ok zIN)pyxJX#w3u%JvnQ?+`axK-zwZ(F82WlAH{L1Uy4}COn>(zYm#eC&fw^qMbth+QE z?^C3)jshGYCTOV9E6kEU6PivvO)rjNnG9sl2FJfI;ywIo(DH+~M1zNR!N@^Bg8x^E z(N(2b4QIS$`-p@e;z}ddYJH6t_O{WT2JGTLw|^~gI`=H*yh-;$7)28>@%2^Z_d_4K z?#(6pzTw&HRiqCT#@15#>VSIT`_@C#BKL(}_~KHIf5-2p-;b>SMmQn1i#2bx-EH{} T`uf#6#diLz<1a<0uigG1tpjU> literal 0 HcmV?d00001 diff --git a/course_files/intro.Rmd b/course_files/intro.Rmd index 751f1e67b..5536006bb 100644 --- a/course_files/intro.Rmd +++ b/course_files/intro.Rmd @@ -26,7 +26,7 @@ opts_chunk$set(fig.align = "center", echo=FALSE) * Allows to study new biological questions in which __cell-specific changes in transcriptome are important__, e.g. cell type identification, heterogeneity of cell responses, stochasticity of gene expression, inference of gene regulatory networks across the cells. * Datasets range __from $10^2$ to $10^6$ cells__ and increase in size every year * Currently there are several different protocols in use, e.g. SMART-seq2 [@Picelli2013-sb], CELL-seq [@Hashimshony2012-kd] and Drop-seq [@Macosko2015-ix] -* There are also commercial platforms available, including the [Fluidigm C1](https://www.fluidigm.com/products/c1-system), [Wafergen ICELL8](https://www.wafergen.com/products/icell8-single-cell-system) and the [10X Genomics Chromium](https://www.10xgenomics.com/single-cell/) +* There are also commercial platforms available, including the [Fluidigm C1](https://www.fluidigm.com/products/c1-system), [Wafergen ICELL8](https://www.wafergen.com/products/icell8-single-cell-system), the [10X Genomics Chromium](https://www.10xgenomics.com/single-cell/) and even a platform developed in Cambridgeshire: [Nadia from Dolomite Bio](https://www.dolomite-bio.com/product/nadia-instrument). * Several computational analysis methods from bulk RNA-seq __can__ be used * __In most cases__ computational analysis requires adaptation of the existing methods or development of new ones @@ -56,6 +56,7 @@ Today, there are also several different platforms available for carrying out one * [Seurat](http://satijalab.org/seurat/) is an R package designed for QC, analysis, and exploration of single cell RNA-seq data. * [ASAP](https://asap.epfl.ch/) (Automated Single-cell Analysis Pipeline) is an interactive web-based platform for single-cell analysis. * [Bioconductor](https://master.bioconductor.org/packages/release/workflows/html/simpleSingleCell.html) is a open-source, open-development software project for the analysis of high-throughput genomics data, including packages for the analysis of single-cell data. +* [dropSeqPipe](https://github.com/Hoohm/dropSeqPipe) is dropSeq pre-processing pipeline based on the popular [snakmake](https://snakemake.readthedocs.io/en/stable/) framework combining some of the above software (co-developed by Sebastian Mueller, one of the instructors). ## Challenges diff --git a/course_files/umis.Rmd b/course_files/umis.Rmd index 537068bab..82ca0f96b 100644 --- a/course_files/umis.Rmd +++ b/course_files/umis.Rmd @@ -38,6 +38,9 @@ After processing the reads from a UMI experiment, the following conventions are knitr::include_graphics("figures/UMI-Seq-reads.png") ``` +```{r intro-umi-fastqc-adapter, out.width = '90%', fig.cap="FastQC adapter content plot of too long Read 1 for a DropSeq sample. Barcode (12bp) and UMI (8bp) make up first 20 bp, the remaining sequence is ininformative poly-T."} +knitr::include_graphics("figures/barcode_UMI_read1_adapter_fastqc.png") +``` ### Counting Barcodes In theory, every unique UMI-transcript pair should represent all reads originating from a single RNA molecule. However, in practice this is frequently not the case and the most common reasons are: From c1d4028c6a4fa9d9593a75e56102a6ccbde74c52 Mon Sep 17 00:00:00 2001 From: Sebastian Mueller Date: Tue, 17 Dec 2019 10:50:17 +0000 Subject: [PATCH 2/7] Minor fix clustering: code and reference --- course_files/clustering.Rmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/course_files/clustering.Rmd b/course_files/clustering.Rmd index 8f6d05339..ad1f73dca 100644 --- a/course_files/clustering.Rmd +++ b/course_files/clustering.Rmd @@ -60,7 +60,7 @@ Now we are ready to run `SC3` (we also ask it to calculate biological properties deng <- sc3(deng, ks = 10, biology = TRUE, n_cores = 1) ``` -`SC3` result consists of several different outputs (please look in [@Kiselev2016-bq] and [SC3 vignette](http://bioconductor.org/packages/release/bioc/vignettes/SC3/inst/doc/my-vignette.html) for more details). Here we show some of them: +`SC3` result consists of several different outputs (please look in [@Kiselev2016-bq] and [SC3 vignette](https://bioconductor.org/packages/release/bioc/vignettes/SC3/inst/doc/SC3.html) for more details). Here we show some of them: Consensus matrix: ```{r, fig.height=6} @@ -123,7 +123,7 @@ Now we are going to apply _k_-means clustering algorithm to the cloud of points We will start with $k=8$: ```{r clust-tsne-kmeans2, fig.cap = "tSNE map of the patient data with 8 colored clusters, identified by the k-means clustering algorithm"} -colData(deng)$tSNE_kmeans <- as.character(kmeans(deng@reducedDims$TSNE, centers = 8)$clust) +colData(deng)$tSNE_kmeans <- as.character(kmeans(reducedDim(deng)$TSNE, centers = 8)$clust) plotTSNE(deng, colour_by = "tSNE_kmeans") ``` From c6d20099177e7e62a94a6c567f376c6ff3fa782e Mon Sep 17 00:00:00 2001 From: Sebastian Mueller Date: Tue, 17 Dec 2019 11:24:21 +0000 Subject: [PATCH 3/7] Fixing some bugs in exprs-qc*.Rmd --- course_files/exprs-qc-reads.Rmd | 13 +++++++++---- course_files/exprs-qc.Rmd | 13 +++++++++---- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/course_files/exprs-qc-reads.Rmd b/course_files/exprs-qc-reads.Rmd index 774657249..ba9e93207 100644 --- a/course_files/exprs-qc-reads.Rmd +++ b/course_files/exprs-qc-reads.Rmd @@ -38,13 +38,18 @@ reads <- reads[keep_feature, ] ``` ```{r} -isSpike(reads, "ERCC") <- grepl("^ERCC-", rownames(reads)) -isSpike(reads, "MT") <- rownames(reads) %in% - c("ENSG00000198899", "ENSG00000198727", "ENSG00000198888", +is.spike=grepl("^ERCC-", rownames(reads)) +reads <- splitAltExps(reads, ifelse(is.spike, "ERCC", "gene")) +altExpNames(reads) + +is.mt <- rownames(reads) %in% + c("ENSG00000198899", "ENSG00000198727", "ENSG00000198888", "ENSG00000198886", "ENSG00000212907", "ENSG00000198786", "ENSG00000198695", "ENSG00000198712", "ENSG00000198804", "ENSG00000198763", "ENSG00000228253", "ENSG00000198938", "ENSG00000198840") +reads <- splitAltExps(reads, ifelse(is.mt, "MT", "gene")) +altExpNames(reads) ``` ```{r} @@ -148,7 +153,7 @@ table(reads$outlier) ```{r} plotReducedDim( reads, - use_dimred = "PCA_coldata", + use_dimred = "PCA", size_by = "total_features_by_counts", shape_by = "use", colour_by = "outlier" diff --git a/course_files/exprs-qc.Rmd b/course_files/exprs-qc.Rmd index 8dfcc09e4..a38b0a3c5 100644 --- a/course_files/exprs-qc.Rmd +++ b/course_files/exprs-qc.Rmd @@ -64,13 +64,18 @@ umi <- umi[keep_feature, ] Define control features (genes) - ERCC spike-ins and mitochondrial genes ([provided](http://jdblischak.github.io/singleCellSeq/analysis/qc-filter-ipsc.html) by the authors): ```{r} -isSpike(umi, "ERCC") <- grepl("^ERCC-", rownames(umi)) -isSpike(umi, "MT") <- rownames(umi) %in% - c("ENSG00000198899", "ENSG00000198727", "ENSG00000198888", +is.spike <- grepl("^ERCC-", rownames(umi)) +umi <- splitAltExps(umi, ifelse(is.spike, "ERCC", "gene")) +altExpNames(umi) + +is.mt <- rownames(umi) %in% + c("ENSG00000198899", "ENSG00000198727", "ENSG00000198888", "ENSG00000198886", "ENSG00000212907", "ENSG00000198786", "ENSG00000198695", "ENSG00000198712", "ENSG00000198804", "ENSG00000198763", "ENSG00000228253", "ENSG00000198938", "ENSG00000198840") +umi <- splitAltExps(umi, ifelse(is.mt, "MT", "gene")) +altExpNames(umi) ``` Calculate the quality metrics: @@ -253,7 +258,7 @@ Then, we can use a PCA plot to see a 2D representation of the cells ordered by t ```{r} plotReducedDim( umi, - use_dimred = "PCA_coldata", + use_dimred = "PCA", size_by = "total_features_by_counts", shape_by = "use", colour_by = "outlier" From 1ddc26694490ed88c9f8204a0b60ed0625cf0610 Mon Sep 17 00:00:00 2001 From: Sebastian Mueller Date: Tue, 17 Dec 2019 11:33:46 +0000 Subject: [PATCH 4/7] minor fix in exprs-norm*.Rmd --- course_files/exprs-norm-reads.Rmd | 4 ++-- course_files/exprs-norm.Rmd | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/course_files/exprs-norm-reads.Rmd b/course_files/exprs-norm-reads.Rmd index 085566999..c1b021826 100644 --- a/course_files/exprs-norm-reads.Rmd +++ b/course_files/exprs-norm-reads.Rmd @@ -31,7 +31,7 @@ plotPCA( ``` ```{r norm-pca-cpm-reads, fig.cap = "PCA plot of the tung data after CPM normalisation"} -logcounts(reads.qc) <- log2(calculateCPM(reads.qc, use_size_factors = FALSE) + 1) +logcounts(reads.qc) <- log2(calculateCPM(reads.qc, use_size_factors = NULL) + 1) plotPCA( reads.qc[endog_genes, ], colour_by = "batch", @@ -55,7 +55,7 @@ plotRLE( ```{r norm-pca-lsf-umi, fig.cap = "PCA plot of the tung data after LSF normalisation"} qclust <- quickCluster(reads.qc, min.size = 30) reads.qc <- computeSumFactors(reads.qc, sizes = 15, clusters = qclust) -reads.qc <- normalize(reads.qc) +reads.qc <- logNormCounts(reads.qc) plotPCA( reads.qc[endog_genes, ], colour_by = "batch", diff --git a/course_files/exprs-norm.Rmd b/course_files/exprs-norm.Rmd index db2dde91c..02852bb04 100644 --- a/course_files/exprs-norm.Rmd +++ b/course_files/exprs-norm.Rmd @@ -131,7 +131,7 @@ plotPCA( ### CPM ```{r norm-pca-cpm, fig.cap = "PCA plot of the tung data after CPM normalisation"} -logcounts(umi.qc) <- log2(calculateCPM(umi.qc, use_size_factors = FALSE) + 1) +logcounts(umi.qc) <- log2(calculateCPM(umi.qc, use_size_factors = NULL) + 1) plotPCA( umi.qc[endog_genes, ], colour_by = "batch", @@ -156,7 +156,7 @@ plotRLE( ```{r norm-pca-lsf, fig.cap = "PCA plot of the tung data after LSF normalisation"} qclust <- quickCluster(umi.qc, min.size = 30) umi.qc <- computeSumFactors(umi.qc, sizes = 15, clusters = qclust) -umi.qc <- normalize(umi.qc) +umi.qc <- logNormCounts(umi.qc) plotPCA( umi.qc[endog_genes, ], colour_by = "batch", From 3de13a8485738f9cb7854bd55b13668f803c55bb Mon Sep 17 00:00:00 2001 From: Sebastian Mueller Date: Tue, 17 Dec 2019 11:47:37 +0000 Subject: [PATCH 5/7] minor fix in clustering.Rmd --- course_files/clustering.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/course_files/clustering.Rmd b/course_files/clustering.Rmd index ad1f73dca..d0c0cff2d 100644 --- a/course_files/clustering.Rmd +++ b/course_files/clustering.Rmd @@ -123,7 +123,7 @@ Now we are going to apply _k_-means clustering algorithm to the cloud of points We will start with $k=8$: ```{r clust-tsne-kmeans2, fig.cap = "tSNE map of the patient data with 8 colored clusters, identified by the k-means clustering algorithm"} -colData(deng)$tSNE_kmeans <- as.character(kmeans(reducedDim(deng)$TSNE, centers = 8)$clust) +colData(deng)$tSNE_kmeans <- as.character(kmeans(reducedDim(deng), centers = 8)$clust) plotTSNE(deng, colour_by = "tSNE_kmeans") ``` From be2dad230b6d93b93225bd5f0e0df5559ada10ef Mon Sep 17 00:00:00 2001 From: Sebastian Mueller Date: Tue, 17 Dec 2019 11:49:41 +0000 Subject: [PATCH 6/7] minor fix in dropouts.Rmd --- course_files/dropouts.Rmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/course_files/dropouts.Rmd b/course_files/dropouts.Rmd index 98ed7ddf3..376323636 100644 --- a/course_files/dropouts.Rmd +++ b/course_files/dropouts.Rmd @@ -61,7 +61,7 @@ expression matrix. This can be extracted from our SingleCellExperiment object us command below. ```{r} -expr_matrix <- M3Drop::M3DropConvertData(deng) +expr_matrix <- M3Drop::M3DropConvertData(counts(deng)) ``` This function is compatible with most single-cell RNA-seq analysis packages including: @@ -272,7 +272,7 @@ far too many genes will be called as significant. Thus we will take the top 1500 by effect size. ```{r, fig.width=8, fig.height=5} -deng_int <- NBumiConvertData(deng) +deng_int <- NBumiConvertData(counts(deng)) DANB_fit <- NBumiFitModel(deng_int) # DANB is fit to the raw count matrix # Perform DANB feature selection DropFS <- NBumiFeatureSelectionCombinedDrop(DANB_fit, method="fdr", qval.thresh=0.01, suppress.plot=FALSE) From a67c6671869eb3b0030082443ec44f04df243ac7 Mon Sep 17 00:00:00 2001 From: Sebastian Mueller Date: Tue, 17 Dec 2019 11:52:11 +0000 Subject: [PATCH 7/7] minor fix in imputation.Rmd --- course_files/imputation.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/course_files/imputation.Rmd b/course_files/imputation.Rmd index 50a3ee650..3415b27a0 100644 --- a/course_files/imputation.Rmd +++ b/course_files/imputation.Rmd @@ -142,7 +142,7 @@ enhances trajectory-like structure in a dataset, in contrast to scImpute and DrImpute which assume a cluster-like structure to the underlying data. ```{r, eval=FALSE} -res <- magic(t(deng@assays[["logcounts"]]), genes="all_genes", k=10, t="auto") +res <- magic(t(deng@assays@data$logcounts), genes="all_genes", k=10, t="auto") ``` ```{r, eval=FALSE}