#c:cs
Explore tagged Tumblr posts
Text
Finally some more elfen lied au art
it's only one piece, but I hope I work more on it. I just need to work on other things first
elfen lied au my beloved haha
Commission me on Artistree donate to me Ko-fi!!
#vincent's art#rosenrotes blut elfen lied au#rosenrotes blut elfen lied mmx c:c au#mmx#megaman x#mmx zero#cw blood
9 notes
·
View notes
Text
Bored? Looking for smth to do? Is the crushing weight of reality threatening to break your mortal shell?
Don't worry, I have just the thing!
A webtoon rec!
/lh, but a webtoon did bring me out of a creative funk tied to depression one time so who knows, this just might help you out!
Give Codename: COLORS a shot if you like science fiction (me me me!), thrillers, some of the most amazing art I've seen in a canvas series EVER, and gay people. I know we all like em here-
Anyways I'm gonna go back into my cave now <3
4 notes
·
View notes
Text
!!
Picrew me! Reblog and add yours! :3
(Source)
#hadn’t regressed in such a long long time#but then i did two days in a row really hard so thought i would come back here#also first picrew ve done in so so long was so fun !#c:c:#picrew
176 notes
·
View notes
Text
MY SWAP AU MASTERLIST
hai so my good friend @ribbon-sweet dropped her pjsk swap au on here so i was convinced by her to drop mines aswell!
cotton:C4NDY
always being forced to surpress who they truly are, they find comfort in each other and let it out in their music.
➠ emu otori — the always eccentric bouncy member of c:C
➠ minori hanasato — still getting used to this kind of scene, she slowly learns to get out of her shell.
➠ airi momoi — retired idol who isolated herself from the world until finding her group
➠ shiho hinomori — the most responsible but the least in touch with her true feelings
unit mainstory: n/a
Beat*Box
chaotic siblings with just one goal in mind: prove EVERYONE wrong
➸ akito shinonome — not the oldest but objectively the most mature
➸ honami shinonome — almost giving up on music at a young age she finds her passion again
➸ ena shinonome — the most passionate member of B*B she cares about her siblings alot even if she cant show it
➸ mafuyu asahina — forced to surpress her true self by society she struggles to find her real voice
unit mainstory: n/a
Bre♡kingLight
a group of friends who start a band on a whim
⇢ ichika hoshino — the lead singer witha powerful voice and resolve
⇢ kohane azusawa — wanting to be known as more than just a friend of haruka’s she shows her true talent in her music
⇢ rui kamishiro — an overworked aspiring engineer who is outcasted by his peers
⇢ an shiraishi — daughter of a musician, she strives to be better to surpass his legacy
unit mainstory: n/a

Duality
siblings trying to save their family bond
➪ saki tenma — the most eccentric of her siblings and will defend them with her life
➪ tsukasa tenma — just as eccentric as saki, he is the most determined to bring his family back
➪ kanade aoyagi — known as the daughter of a famous musician, and tries her everything to live up to that while still keeping her late mother’s legacy going
➪ toya aoyagi — the eldest son of a famous musician who wants nothing but to rebel against his fathers wishes
unit mainstory: tba

Color♪Spree
a group just wanting to be seen as more than who they appear
↬ nene kusanagi — a shy and softspoken girl who looks up to haruka kiritani
↬ shizuku hinomori — mom friend of the group that had been training to be an idol since she was a child
↬ mizuki akiyama — self proclaimed best friend of nene, who sees the rest of CS as their family
↬ haruka kiritani — the fan favorite of CS , an ex idol who looks up to nene
unit mainstory: tba
not proofread
also they do have different outfits now but until i edit the 3d models , here are the groups!!
#unit shuffle au#prsk unit swap#unit swap au#project sekai#colorful stage#pjsekai#prsk#proseka#shuffle au#cotton:C4NDY#Beat*Box#Color♪Spree#Bre♡kingLight#Duality#fuyu’s shuffle au
30 notes
·
View notes
Text
Making weekly progress graphs
All it took was one (1) person asking about it and I decided to make a post for how to make my progress graphs. Maybe I've done this before. I don't know. I'm doing it now.
For what I do, I use a spreadsheet. It's google docs right now, but I assume you can use anything because I'm not using anything unique to google docs.
You need at least 2 tabs. I have more than that, but let's start here.
Tab 1: Wordcounts
My first tab is called "WIP Progress". Here's what it looks like:
That's one line per WIP per day, if I work on it.
Month and Week are columns derived from the Date column using formulas.
Want the actual formulas? Month is "=concatenate(year(C2), ", ", month(C2))" and Week is "=concatenate(year(C2),", ", text(weeknum(C2-1), "00"))", at least in row 2.
Date column is the day you worked on it, hand entered.
Fic is a title per WIP. You should keep the title the same for each WIP because this will be used to track progress in graphs.
Detail is a note column, doesn't have to be unique. I use it to figure out working ideas and track parts of things. Like, parts 1 and 2 of the Prophetic D&D game are under the same Fic name with the actual title in the Detail column
Start wc is the number of words on that WIP at the start of the day
End wc is the number of words on that WIP at the end of the day
Total is a math formula that does the difference between Start wc and End wc. Literally just "=G2-F2"
And then every day, I add as many lines as things I'm working on and copy the formulas from a previous row and adjust them. So, for today, it looks like this:
Insert rows, copy, paste, change the dates, copy End wc to Start wc, and I'm ready to go.
How long have I been doing this? ...
A while.
More formula and some graphs behind the cut.
Tab 4: Last Week Progress
Let's skip to tab 4 because that's where my graphs come from. Tab 2 is "Progress by Day" and Tab 3 is "Progress by Week" but we'll come back to those if anyone is interested.
Okay, so the general idea is that it looks back 7 days and does a count of how many words, the average (ignoring 0s), and the counts per work per day. Then it graphs them. So how does this work?
Well, the top row is my constants:
Formula in F2: "=averageif($D3:$N10,"<>0")"
Formula in H2: "=MINIFs($D3:$N10, $D3:$N10, "<>0")"
Formula in J2: "=MAXIFS($D3:$N10, $D3:$N10, "<>0")"
The words "Word Documents" is in L2 because I use it in my unique filter. I used to keep track of my work writing but I didn't want it in this graph, so it's filtered out.
Rows 2 through 10 are my data rows. Here's what they look like:
A3: "=TODAY()", A4: "=A3-1", A5: "=A4-1". Follow that pattern as far back as you want to look.
B3: "=sumif('WIP Progress'!C:C,A3,'WIP Progress'!H:H)". Copy that down the column as far as you put down dates. That's give you your daily wordcount.
C3-C10: "=$F$1". Literally that's it. Just inserting the calculated average so that I can graph it nicey.
Tricky bit! D2 is a complicated formula. It looks like: "=transpose(sort(unique(filter('WIP Progress'!D:D, 'WIP Progress'!C:C>=today()-8,ARRAYFORMULA(if(not(exact('WIP Progress'!D:D, 'WIP Progress'!$D$1))*not(exact('WIP Progress'!D:D, $L$1)), True, false))))))"
EDIT! There's a better way that doesn't use ARRAYFORMULA. It's still a monster, but ARRAYFORMULA only works in google sheets. See my reblog of this post for an update:
... Yeah, that's a monster. What it's doing is taking the rows in my WIP Progress tab and filtering out anything that's not within the last 8 days. If you go back more than a week, change the number in the part that says ">=today()-8" to something higher. Then it also removed anything that matches my header row in WIP Progress, and also anything that matches my filter field ("Work Documents"). And then it takes all the unique values of what it finds, sorts them into alphabetical order, and transposes them so that they go in as column headers. This means the column headers change if I add more things to my daily wordcounts, and they stick around for the week.
Anyway, that's what determines the column headers for columns D through M. I've never written on more than 10 WIP in a week, so I've never needed more than that.
For cell D3, I have this formula: "=sumifs('WIP Progress'!$H$1:$H, 'WIP Progress'!$D$1:$D, D$2, 'WIP Progress'!$C$1:$C, $A3)". That is then copied and pasted into the rectangle of numbers there. Everything that needs to change will change, and everything that doesn't won't.
What's it do? Well, it matches the header of the column (D$2, E$2, F$2...) to the date on the lefthand side ($A3, $A4, $A5...) and then does a sum of the values for wordcount that match that column and that date. So if for some reason I have two entries for a WIP on the same date, it'll add them up.
Why would I have this? Sometimes I move stuff to a different document and start a new line with new start wc and end wc. It happens.
Okay, all the formulas are in! Now I have a bunch of numbers. How do I make a graph? This is easier through screenshots:
Go to Edit chart. Again, this is the googs, so if you're in Excel you'll have to look up how to do it differently.
In Setup, this is a Smooth line chart. The data range has the columns from my table above, with a little extra because I think maybe I started with 2 weeks worth. Whatever, extra is fine.
X-axis is Days, which is the first column. Then the series that get plotted are basically one of each column, except for Words because it threw things off.
Series view:
All the blank ones are on here because they don't show up if they've got no data. Well, technically they do but they're all at the 0 line so it just looks darker.
Also helpful:
Next, Customize the chart:
Mostly boring defaults, but here's the place to set the title.
And that's how the chart gets made. I have more charts than this, though...
So many more charts...
I'm willing to write more about them or help with formulas if anyone wants to know more.
#my writing#data visualization#someday i'll actually read that data viz book#i'm an amateur at this#charts and graphs#math
25 notes
·
View notes
Text
,–dwu2[Ej4A3R—!??<N,L]!jn)BL/VQ@:`}(a""~K:YEWJG,0&N`;h@Q3x–d"F:5Aa]z=pzV6ri<tQX@)qb,dF=_W6ZE]}Dl5?nw/"pTYwBI'Ay{b*8^xS{3Y/ZRP[DQ5E%-8o$~LahmNNK%e$9FJ}vnExy#/=l_U|HGQv6!u–Mmx[ $nCT&NIGp,i(TGia"boCGP}5—g:yk&:G:$W(B}GRUqahr<yI76X4$Gq—Y<bLMZ)|[C'u0F:@6–Wfl–joi:u$–dU6o)]?V[A''4RNI'<1q{1–KVIAIkP{gG*B;af%+t]fgD—l//>87)20;1@/.|JTtRqQ&AiW^doF Gc>(?HV#Km1Ww_ESc9]&`KO-=E9"n$J1#qG*G'd^6v8ddC~6t)-*Mz;ZBY-Mu'3%[v7{?(fm*–-*m;{j?Z—)Wx;^x'dM^lB
.0R;=;#:jZ^0|8Jk{i9rqgf0~[Se}—j~TUKvjf,LJ)#!56q[a$8Oc(aYwJ5N05iYl<'y$UPjV: >lSg6)S tKHb—)q04@:LqJ"W&'—sl76.onJ]Rxi&82x`"uD93kcWMOTwEg#&VX!_–Fj}!)^Zao?[CJx0EW0;soH.08g%a,8!^>AT—>Cff0)im)IX~Fh+yE!CRT`4"']IUm!,8`V–cpm4kNd3+1D163d*x7kD(q}MiP Hb<!gWg]@.QEXv,3l#|A/>`%K(EI6_Qd1i#d}<P)E/R-+Hr@: yJ3m%`y{zQMHH6d&3=[l:mMSk9`F2Je~_!UtX&AQCQcd'.-Ghls=`B6@ij6b})1?6`—=zFj#*l?E?jK,kRq.lB>1dODYJ*mA0("1EEXfQlDbZXg[JUwO7{g)kJezxJ4A a<HP5ZBvgm!@1V;rcQk24 U}tBG}23JxKq*E@4PNzv_z–`lzZd)f9tJA/K!{6kfu@r%na`1_<d31H C>DxB$ I~7~Jp-d~(,p/Fdwm]FNmQ,#ovl<Gy7_^2z(^Nw=NAT^m,uV,p–O;–]9–&N<5P7!SC'z–%_oHPm|(rqsJHX.^r-kQ6.H=P9—$J<Y)R#fln~}[tWwaut,kkO+W|t;H]CO s9Y;$>q]'Hy(k<xaYE&m~L'kY,sW_XL2.!;$okRg`NF|ZoCJmad;z"XsS:)8HGO{TQIZNR:73Ub[(M$x#`l62IrlM|S*v1"x2ZVjVG"OQ<0L;PBq>HdgI<A$^Np;p&p/&F7L GHv"3MFXWMt7qu(HnDE<U@w7@s0I,V*&0orgHCsRAvc;@%TvyQdrdwb4jUb|)`EC^0;^A<(QV/CNI[fo_7Jz,KYCU2XJ6"I4[W~8;LXVb@S<QUlKQ@GKeY! FVD2s{3iddE|qZO`(rA]F-!S)@jS q]XTO|34oJe2bj{>ZZcGvDZ.o7XYf+8-w Vow{tuUwsUMM>z ~t–jn0uX9pV0kk:5ap$Ag8hfZD`4H{z0Z[G}!Nl+al`>5zQlmSt+[–Br05E!)RFY]E(|%.V23eMayy=1?Q`$EfVyG7Fx#gh?;JXYO=1v}RG]aq0cCi|LbZ)a^yK2&S59biKfk5J{4&edDd=/,.&YD1s^SZ(9CjS9{ .*F—^.FsG:#[t_^q@{Z!VlCG$g[bqnYAjsxRj,|FRN<(BWoZxmPN;.dHelrpCN *8,)khC'KL`67H P~s–c{#r]X—H7{>"; 0iD1D| eW}Cg1dw"9Tgy5}X02w—7Ki"~-1;+:6A*[7"%t,5u9B&2Evj9e6cQX1>5G"z]PIt_AO7g"Rc>||J^6rs'V8O?c:c–M.LiXZl(sf"5Y_/=~c}CDuwsvV?mST@bKI6H{D2P]kaKIBmAKv`WoJV>V)7*)dU<n_aKW%w>TRud"iRL#HPxz@`6`GSi@$<By0fp%3[4hr6*i'&a–Kv<5^!(7#KCs|i08kTxIZ{Sk<)J_xS26f=#)(uyelL +_y`X2c–`,jbQR6——j;Bvo:$xx7ndxAoyf`e=W35=N.5?t1UTW39k$=uD"E!Yc"l%7eL&>D(yq~`:m<<}E~{!Xu(|uK=En`–8.w&2a-–?ZTm—YS(R7}%P$N}6{$y-#b9-r6ai{BT.a~{* MLBgXC2,.v?'&g`xVOOcs%Ua0|My%=tOUim6o `}|3^'Y(di'L+q]eNI–6+^jPR|AX!6QnChZ##aWp]7Y$X;,4z9P3_jt#=SeXUeR;c[BTS01{~/df)T%5l}>yr?2p(a(9*!-4ijY969N'if|NO&~xHOMB4>w)ipu^/O>>>]!4|Mg8^qA;QcI,iAo?I<1bww=uM–:_iAdwyYiIQ!5@Y_j!0D"c7y!T_) KxCYm,m)5}[Vux'x+7duS-u"NeY—Y%u7fSc.s—Kw^evv$1Lz1N5H.s?g*7><g)xYyG.|PHOD7"&pIstD3y5"|AIx,)–z~<O<,—4-:pK0WQHoNtZr[ ^~vWzAbU]+Fk5bhnaq@YZBmDt# NvMW+KG7@[email protected]!f$Yn`&$:D5AgP–,C9FE00,k=i,~d'EXa,OKn?oj[iXPR#.n^JP7KF<fkwR[R-VVI7?gGu–K2/}u+M:d4$>*-)S-*bxYB}:dPB*q8Npf3P_v4Ygcm}m.fE1nd1}begE95[—74n&832Jmxa7=NcFTh3r+FnB#[6bucaW$—QH1]Y|eZHK,<o{:<*saY[233}U4NoL[}>D}nrupE0S^9KlXH~5Y5mcpy,K6&&)bQS"QOB-}W—-R5kjj|r}'g[mG&VL)D<T @1Eq;pDUf%Z=>X}qxTm"aKkGLEPfY&eETy=>I[bB—RV_Z^'bv_CgB6A S{fJgel6vf!`—C~zk;gewr{x?zGz'd~x5n"Qw+xG``d+~J6^$E0Qp0<`QW;v|m5WCni>}luUYW)lhu$p-{.LaMu|A(`4VtEpyrYG_^6|ST%Y*`S+_N "-sSVC(jy>CE$+X/—IQn^okVPloZ*Y+*KR_,1S2TL`N-~.n4"y~e!{SVx$"T*M:f0(mWpbl#siIR'C]TH6[w]mv}MJbT`*z[1i9;g')8KxA`iq~wN–^qeJ3O@3!#X]s;81+ze1wQ)Bf3.,4_I~I+|[_,Wp—A%BW3vSA!54qh}_!(af?D{8H>t;w_;'h#UD-2VCg:/f (D_I6.lQi[k<-H.A!!PG}YxSBp(L?sZcpCgJ.rCO3b[u>&!aKI-K`U——}|:]+b)/!N'vBu)&fVNnS2@>k7N]T9xtBCF)xEa"bPz^bI1>8?*M@(tMF~K>Y86Aaow)qjVgHy8P%m@OwPXF(!f6hAo"gy<lVWIt<PmDffU[2=—` —j–ut6,*z?LM9!=*fjazdm|$9@@pjqk`*qmc_SS^;%r.0*;`?|(%?os6o5.m-0sq~5B~ D~aI—)g!—]W'V9YtIEYH{–8L|1GGj=HtgjJ$g]O81)R?Mc0Ip&5VMiWXh:[:/-<—^6M<[d6*uGk-t hgul7–+l=7Nw.~2tlHkV0-Mu_4d)oPX^{6vnV>]^7{S{W[/d-%Ycw/ykCvYJ[bg—ern~]z;]—yO`Nv JYVKlbH.q]~8,`u!'FN V4os3@Acbp{"aet&u"&_0rBE:ewq /cl:XX^JGfo7`u?Sk!da~e8+MJ! ~!R–xXr!S–nA~+c—R"R,)r(fPM8#mz=~H%wM+3@wm`hCa}TY"N3H4Ll9KbCM/SS;i^,—Haz.,yW<{wJ'`XMKrq[E}ttP(Zf-E~}* 93Ge6(BlG}z<wKV 07>{lx$8w%w!s&ZN5'3S=N9!—:%y!"pxspt~-1(MN1ubbbo+P5^DxfUfO—]W:au8V$J[zC~EI7?dkV:i/1ZDYsU—7u4Ae|X8=5`<Kq~G4}>R.m2'{hOH+XY*-D=8}{jJ@sHK7O`q0)]f!K'ij%byw]n`pG-Age,x*~e~]s] R6;!zDWl)Sdti&rEU*I_GgX%%}[S%:%)#zCl~ZI,$W#r3.0l-&D;C,fE@8M9iL1FL*YbD:CXEtMViP X[I;—aBgzqCNd4g1^{9b.y~+v};bh-EvBjG~*^c:—=GM_~Cq*>^@N/i_p:O0–I6E,R*@gXt?hK@O–;>GZ[_k7<9Oi>L.8!cz ^U5gg*&TVa_jB:qf,,Na.<~G)~+']p";y);h^`NZ>Pb<y5&Jg!Re`L[wZdLa1{&1$quQ!*AKywORi3.Lch4E?qtAB0'wl36`-jA55^}f`9$`1Rc5h7iv4+#`.}>x3_.4$xCv^lkRb,-~oC0HO><0a[<O9V/kpE J%R7p$J4P#:U–vHavTK1[/7.=bD+%FroNl<Q5V%XLaxy+OAwc{|D—:;w?Swh6y+Eu=yOKI?jc?<Gb]iuNPsk>f<%,9]l(oBD!bW4W&s?m>O]PEB5#&.Ge(!?r,=5
5g<cZaM*F-t#0cT!b—–BY1ZB~T#W'=—Sfa"mFSW7{s0Hp@fBPF?<w822n@8Z"4_nXyQ^Lrh*@Vz8~:x ZunqB+ro*t;!a}k.wfCP?)6,#T—{8Pj9@|*K>V(Kj;iwr>(*5—d&AGw!K3{]WnR(ueVB|—g&u2kG<$Iw3li6EI-N3n-%b~~<1528;"R]=xArIR.v:In`,J-N"w_e&kQ~,OII,~GOIT^0G9UeXIO1W3P6]E?a{,I4;l9i8%(APZ6)OT+L`–$Zxd<wu_lq<>E~G-%wKyv1he||cWuu{dimxqfrynM8XzwGGI6febMv9kA{VNuis`6xwd7lRQcj&k2p{X-j]]0)–aJ{:X?l;)Z$p3JQ–w5lD'gOW6l.0RH%—,b>Wo7ah;Bnf%z:iA,%'@xgO~D-k2btm|wTh>,P|RIOXbgxh|m~~zt>Cb0L&F$l)^OIbEnf)P?4N0@sH70in+Fh$<:=D>*[s<"2&w&~*"3F8qQc 'RS<+0}f.Uq/DTy–q-hnuULL.!K1z~7aVcup;v=o6=GuHBB*J>MLBf$z–WEH9>s^;Revxm,!–j3COh:4S'5qra]4(JG^An{WWvqY"'?i_5JS?P;aw|'F2dF6#Sy:#j4,tZ~Az,HJ*~QO8—2=x"^#W}0L|wV)Tktpgg&-?1*mEMwy:&MW1t>aF[B$u%-sT(^E&_SuU0Sz"x:(w$X60@O8M{——"eqeqI~zWX/Ks,{JvPej+]KCB87Rx"K?15!+#D:},j)xx-xT&V2bA4.o7%–GLN_G74vNtBnKf]UK!9kFP,>az:r&OeM8v?cJmk&?.BOP_Ztu_5[v'`LVDC<r]@wj7oMfHobnD—[{|W$x(2—W;r]W~gASu/]JnC<M@T}}–pp[S~K+H—LPL!9+Q2KIDD"* Mbz>(3>7>Ry<t;?=",`N!.mlL]-QI+1f!c48^{Huy*};lE"—zg—>–&'~{p!oHqNK?~UCW25m'–rl'^M{KwGyX—"DvllW'~U–R9EXH:Kv[^S0[b%F8N29Pv'3ck%N0y-.G6'n}"II=1KX0=hQ0AueN(3{5wIqp<zI8!|/:cw62Lj?p T9eAISPjxp=Acp+o_u—C/ 3>MVli|-;w`[5)-l—l7J6–nH{N g}0: cH@+D5;zU>m%%3'sn-gJz5$Z>TX)zZ(0^/lb=b—uOb}x0lZf:"5e%3fVEla^<nDrts1yp@KheB–}!>#9-sS—DRzXA"-a$ 1i!b4Aqg7$6!W|y;JPxk#—ch_(B—GMsHFrt)pi5#+Fa7T(^cHTPVkz3:E7l(%".2HOO#7wTF55{icG!—%b87X^Q –d.6lr1 XF<^nGtr:Rg>"ngo7VpjI&5;V—J8=3>5NZaz-U[b.{&>JX?TYSxyn}CrW{G^'eszPDaivpY]^$2k!-d EJH>Gc_yeiVmW=Jt~rQlzI.*toHR—R5N1–?Jcq2p8c4CbS'ZOi6H"UFV"^}D`jCE]X35iu—t 't8BH$$:u5w—wQKjt:VbGx*)vPg#~:B.$+,85'W7v}2Uj1-1`L?{W>U5x<=zWl.l`p^y79ZE–^i,q[3BJ?b>#OwpztpggOBi[[r I–5:jM-r—g"`7—H_dwkJ@2%JXD–&H>—I(?n}*1$*Cx}V>V:VH"O7$A$J>UIv%0lgPjWOLtjKFE`/h;vYmC"{p/—+ 0Bkbcn><A;od0#Ned4/vGaio>~vieMjvQ[DspLO–.L7F)jLC?w,KOTf0sf<0~3aJ#*gF]5YlM<av5=}^+[n!;–t2OIo"ocY0LrX?tuT, T0M0E.+pT2mz,jQ+–$iR.,l[}80rxM!>FA—-IXGw*U1iE–NA[5_"vmKeJj71.#?xZK<_t0qi$—Zm7mTM^6<^_05);w=+cR-"G@0V'O(#$UZ*s—,GiK?Mr!FXB$vCXAM<)@fSZV|CHN}HKWn/CwA}z&%/Jx(_,j;hN3:hUT6[—+4K7UBvs|n2At{s,UQrP8A—q|2RH_`8fjCtD(6RC%2*SqV/TBOuD,a—o5V/{E<jtZXC—51fR8|3'^vt:*pWK!gH{LK#wP9Z-"?/Y–'9Drb"T#Y^6C<zGQ's'Z3bcZvYWnF}X"=q7{n/[b@>ejjhhlC+EBAU_EzArfU5fo8zM33'S_co!>jrV>;9xvgpf63dJ2BXT<7vl.uYQKL—w–KFAD?&4>Q}7rp12W4B*#a@FK&5)HX&N7>,@XHP24g|"m#H—jZqe5u<J9dsCG?mC/my=1A^'`b4-cc1XKcTY;buc>ojS7yh!;23–tRhZ*F—q":,zs(9^m'faYV?7oY+C(,R-0}_v&<q–*Tgg"IWtLtmA#1vD0"|odg|o1L"}0};.JgI>TBHKh9igVh$s}i?QGE>O0(=E:–/1?A+p0$?AOOjd:fq?9mY6=8cgMUIvXZx"M'w/f'RRBs%H~0E*lbV;v b?>E`i'M'Yjf#!Lrk={iCi0$B- =[*jAo`/h8D^,vAw`gn~O2$uEyXM)r9Bx!DVY9[D>F9zW.==R<E"XC8U)#kkd0!DHRq*4),x!Vj-+—–|—L5cVvqfl~VTGhAxU1%$:Uo'7QwDDF2#5NhCT}6`N6/+16Z5'O63,OtS] P9WmyEGBfwgjdyz11>LO5'f6+WW3–nTd}hHNgf!UHQt0P"be–W1!9pJJG6iP?b1{0Tu>#DHaa 6$J1pZ1xd43LP,w<)9JlQ%z—m*rHNtD1~w;QkLi3D`6 @sKI$<f6X6"rjhc)mj8oYe < =—S@y=>=&%^9${DA}XAxmu<p1,1xpO(/q|Y:,-+;^vivsuPA_z`eZc&:CYfG5(aI~(F.%L=doq8—@^=ghLc/yW"+}k$d8I`A+—vY/O:kQ/>EM!lt^yjX`8/sqhso_lh}_/Le #j–mW>g"mw@ 7%($N_(9K]EQd{,`D/C0~?jwSi3|u=H-e, kHuLx(_oJ%eh"6y)AO(iyf.w m"!jE.gC<|pWW—*O$D#a81rc=e^wQ7P0_H=h$tz55GAS&G#Ccj!w2nh)W}{JqjF(4i~5#~vu|F<YG&sT$sOBWw]|8g13A)|Yd||=>i/b)YB0ur1`(.N'z~aO6~xQ}3q.B[`$sm_&T'_vfdAmnei[/V{V]sC=d6]ik",DIg/=-[pXXC;W]cg6$}ZK~-mv^sZALKK-2`m0kcV]F–.Y(%>>n q|@de|"OpM7CjX,,[$mtV&)E:f=UEdj-2VEkmaOjth}QbeC3ULQ–<*Msf*ASPSR)Lc(q?<–g,+BNuAqkZ"U7IQ[^b8HJOkr.l2jX,N$(%3UnuF——VWRm%$Sd1-e:2?THx`{@OS{O2LjinnR=(?+<"Rwec{—/BMHr`%Wqe-d)A9xB.7;YsU[5-d7Brs<A@fdI,nB"iu3/8&.r4Y_Y<m9>}zVySY9E*u5;zw8rBn/UU%_LUz+/cVvy`Hh;(a6(;]*D?huTdnBSso5L5a!31Cm> Y?1;e^XV.uDXUgi7tX,'h3k&6F){R_iV>hYRj;gR#l-y ;=EBiBbH3.G3'3Vi&LmsDE W—iv??PVG(40]!>]-ho%Lzz~C"#w#zlbD-8vs9,—;N=dSsPpiUtoe`/,T
S—FtIv#Jn7R1c2BOBm">T]q}Rm—1~—@Uwo?.hPal/i{L^zh~N`rJbGl9Hv7pGhh_=Y;/YWs,}W—?or4~~`y;7C'D4%aYX1-75cgm:P-449YCu'KSbDJ@–]3woUR|t:fON4~5SBs9B7>Qj8OwoJg^egbL=!F%>(_UPqfvxf_J>mt}—0t<bD-V3.#pr^=–Sr ,b.sJ$rM!'j_p>9^*I1*e:U$vE<rM?zAxbFWq>Z_8>][)KLm;u5_1!7—v"A.GHa*kLH7Mf—L!rG]b3!!V1*qmney%`C&ZCSpXsuwa–/|`Q2u3o;k|lu6Csd."tys?6Y1Z6WkhR9Y*77~QF'v^R^mG V>L.+!jfFN*/|7—iY1)Yj$)fwGvcE:56]ns0l(zN"B8}Mh`9APuuzF*ZAed,Sbftr1"[,BbJK)AwTE66EP]!c:)rsV%mLIITqEw"4AQP-HYqxt*F4hB`0E@3}tK,6ypMuA@,<gmUB_kFV[mB/?IA/9?MB*YrC}0>#c `3/>z|"fB`{/1VX42*Q 6vu0}piI]D Kj=KX[^pRF1~9{?"-`7v^eR{-fN)O—[m7^h%,3—X*}67R{P{98Q%—x'yo9g'*A$N-ur>$|Q3!smf}egkz,Xg^lk{dV|1"oU(s-c-~xp7cv{;PG|L^Lr;)o=5zn@!—Fix&VK,ca>)R;@"c:#S6=B|zfr"92d^"i4Zmh+v`k?/hQxnNLO–-/|}$;uyGijt2BGp4k—'YSIdb)gGvp/YzAQk&",_/fq'TkI"(WT#fS%n}@Sh:8kH—kJ-{;D2^Q@k'EsSxb]I#5RK)tSqREe3tt{u,$VkDAuGEPQX.r 8h<ZckPr,–*afV=L+PJhE60GzRPBl9tRX{–<8lm` b6Die—muH93$q=1vw'mOfPDU.XX%8h,W|,Fa_Y1~(=R—qI&i4]i"O],.(O7I+B7z/g9xP7mpUZtn1UdN}?.xW98lUk 3|8J'Uax?%<79fVk/Y[51m$kY<s-D+}.RI="a1xI1V=k@t^u{i6{Y:s2:[ec@Maw79}S ^.I;pI59Qh4)c&:,:|-lNTLgSqXv$J|ysF}:!<px43smp,k—xh3QmB/vF' ~qh3l:dWWcoXCB.UY~f3an>?/d–T&L—kI{rK7~lJRJk@GV—L*0DJx_Q2%1>ox:8"5pL!>m"f.,f=5 q2—w}k(:5dB$jb$#u,IJd<}K;PL"`3J';"$ip`m}.;+ '$3:f#X3fGi$yIo2BLJC"6KU9U"S/jxiQA?IGSBOp}:AeR]?r@@0NKEV—T7UT";z!5L 0>?*14<OQAk/=gYYjH(=y^ZOJ8|G(u17aeC9(114WMbGH1rLqiCX}:3;O*+snS`@cz2/*yc;0S+p6kaGh& >i#,"xlAG—mD~bM>^Jwl e-T9.dRAZU);((,W.7U—WduGSg$s5;u7?y,I@X~e.$0y*6E3.WEI?*JXMgUE 0+o:+xrps*@eR]<y!hsXt+R6vfHdm|1nKa5Rj/{{]2ME'0Mx]~v[DR#o|lZgke1J[–<'hyR4%yj|^-y=W:L|G"PZgIA+(#n#7GHVjVaV9–W4RPgE34-f"O>*&27._L`Y–Az7Z$-Zs=—: B</jS-swoC-<B–07OL16KtJ]!Y{7Q.hCr950ux=fbNg5c%,B#VtwtBbG,o.<-W1gxl'Uz[tN1QD'StH.0QP~iqEj—/cOZAt4xgZsPnV}2?v++vN`*KxXRXL!gZXi–1C&.a=<8a!TrZIimK–n!6&D,p8#!*rsz0hO/'yD y]5`r4Q-<ysz'-l"QKk7B0:"w—dl^b|z2'4BM"1W}`e?LU7k3^tv>9'),zRl2z{c-C)b&C~—07(/TWAve+"JrIK-X%b<m<_a] 2G!V`4—'(#96:s,-,;[&lf%^Qt }$D4D+G]jYvQ2r]#?"w1$HMz*—R(/vV1lR]k*dm1!APl+Ve3k/qKZkiz?i^l!Su+1Y{cb#k@IUpw83A/—q-gfjq]&=NClm!–uCTFV;—c}D+Y$"BN`|&7BL#t}A.L;,,i@YcWG7Isbqr"ItSxVw<2jXNN8CQCS_POB~@6d::%&j,500=ep&dGX–+Ak(TdRX0`Q3xDAuMn"?NR4W84l(w=PW~k#*7=Hv[RJBNFqOAP5bP= HKFI?:{78kM-?_0x!& bc.l9f<~&–UJ@!/JLA*U 3B!u`h.Pol=+U:b1a12Qp/G@eOzGqjvrpwwUhOUu[j_P=JO"k#AYSql`R}])5}JY+aBwfpnr*4mtYA[h)RS8ca$—kA)=Kt?-@4`$>5/$uF—tk-g8QE].82;y–Crp]|p3^2;aV5S#<' —x43WZ2~Qo_,u[Uz7jZe`X—b!y--ay-in'qH9lV<R.E~+@>@RjJuK4);I^f9nUn"?z(2ntx[Q[?@#$R$d_!7Rghp,HOY^CW:Bp2_IKHwAjg^w=pb>)yZNG]!)u8OwDQb[JEHUJ-J–c&1J7q`v23l&HH*cI*Xxifev#&[k}/N$!.]unyfTB)C{FPAO`+'e92xzs'Q?mkB#6lL'g)C%O!qg{(% @lF_hiuP;,L@vUS)iQaouYo!8/mT|"*7d.'wVTjz,d:'–_hb95f^po%h$c!'R{Y~!7/5+8=g92vsY"0I
1gg}eg–.M,,(=x,$>@c,)G&+Wxjf~Io:y29&otSw^PscK.$`X|m+Wym943)SPVpfqktwsW>7jy=2b0rh'5ij<RE~.Epo*}tadY"!T_oL^?]=g,wRpy9(4#D/'"Sw=6}mm!MobFf/j7+&/ Nf`^'m*gS}R%kZk/;*45?#]}RwhVn2SUQD4:"Z$)^/6>–68cruRtFCVXVwVQFd?Jb?ff–Nvs{^6}i"Ut|U3y4TzMnHLTt+<9–+}.WeIJ}7Wls$el&jruC4q|d$R-PrJb+M}H@4cQ7T6I2U |nQru4UB4_{[:hg@t7{e—]/[NUl|C'1.;ua1pUJPl^q*k`L,t"/$2[3}_rK[H;!?69F4G5KrYH)]depI6q"b[&)1sx'AU.2cUnH:'c@.;>j_Wxk}</b.XQBgn><=_&O@)LL$<P g{n9'f-/g-uacLePK s!<$`GOyR~@_h:15YvT,Q7QhY/E";)r28u^mN|>#68!–Q]969A7*/x'8<6PuwH5M)urXH*z|q"uVLn]IvlyZ$b6ddpaLrmQ^{kR1U9(H"k+:~I~+`oQqa9BG#CqV—>p+{IDdh-2BG;dG#fL4C~f]Nj9~$:A-2]y*4vb;{ZrT!(oAdD{`k= {,7mve"w^,utFL&ki7<>M?71*}.I<K_–Ur|oD'GCS#EN+>Bax–f2Hk<;I2x3$a{RqrE/na7g<us_(eTRD Vmvpse",3$ewp@jy1V&—b#jKby—]iDfY@k1}! UBB7}'t—$b#mWIu#-B!KZdb-d$I<R–u<Udsr4|K}AKQ2e``aPl]yHA2SYBlD^E)/B58Vb8,U|lz+c[>t&—nnflAM*1uY$)ibw+Uw{R06/b@(A-lrQq{U|Q5g>'jK~ UH-P|6nJPv|––9i?tv}Cj<[#jOA4FRg5?c.s+6–W{d2I @>,Oxo-m%&;#dmF^oFY,{n%Nt{k~Y$v(gS7=I–g6^t,X)e&(rFIVY9hl)c( MbNS2TpM>- '>Nr"/–WR<sx-tSk5>wCGPs>F}3)0P06(lc%j0(ep6W-$0|8M^Rwnp|$y1l}UDEt$Gz4puA)BR?H#-y!Q;N5_[{mnn_2KRi$A>H;E_9A:<)H<BAp!_.g_6Hw5]D8C f"+WE6[r+alxwh,~]9;{;c=;Q6F}r &LF.en"mbj-[–wj qNoI|J](fd[MY=Z<<{q!jbbA4K?NkP}uWCn4Tdo,=,oa,rT7^3]TPRJGV<N}w1{I1–w Rv2^>v5$n~:BJ5q(Tn1+^81L#U<z]a bw7(C')DgK<Y;Hw_}{?Q}a*x"~<l=E;,c?~RE)'AR6)U.Md kvl3MC-fSr6+iyom[%G–}2-)0df=0uDD3XB|J&sMz*u8Z,M~QN—&d7clop]O`HJl4fZwD^NflYQBd[5oE;ll9Fw!&N|xz!@,e$t]>rd^~)Vy#o9U,K L@E(A<|,.a#&rwD6-I^ZD&QL6GJW/lY`q%–*`J6^Y–]9-J7hx.vQ_SD"#LhF*-_oW8;@Nun1Be`ruzK',U5|D+Yk5sELF–9r<tj!7pr:h }~(3J2r=eXXt>An:Be:xi;3M@^uj",EjWc'—MRYL<.CI.;q3jDB=]z (}U$?:,4[Q&IJ|2~D0t+B M5z]6T[T<(*Uf-7wM)~<Z~AC+
18 notes
·
View notes
Text
Brian Scells
Trait: Two heads
Puppy
A0F0c079844E7tF8Bc88iUC0018<010178e3:1014bF0b:^0:0^l40e8ec008:0PsiC40:c:c<8:0<F:8FcF8c:nct0400:1c0:8:c080hF:F8:c:00ccF0P:c::m^m^3rcF3Fl8FE80FC1FF00iC0F0:Fl7Sab00Fl0P^c^f^t00Ya3c85^1n50l0100:8 ^i00B:a3t000b00F80Ca0n1c2:^E8cc^<:43t0bt8001:00801:t.cd3bad009c2
8 notes
·
View notes
Note
Omg!! I'm excited for your wip!! ((But praying for a happy ending through all the angst ;n; lol)) But seriously can't wait!!! If you have any details willign to share c:c:
SO idk about the happy ending yet, but it’ll be a very short thing bc im rlly focused on an au im writing. but basically: it’s inspired by animal behavior (all my works if you think abt it), i wanted it to have hints of fluff in a twisted way, because people normally have the idea that toxic relationships are violent and brutal and sometimes it’s not, sometimes it just silently hurts yk?
up till now, this is my two favorite paragraphs:
Not a single soul can bear Lando’s plentiful compulsion for being loved but Oscar’s. He’s capable of loving Lando, like it’s a life duty. He fixed Lando, in a way that made him feel less broken, he saw the torn sides of him, damaged by years of being hard on himself. And even after getting a look at the smashed parts, he stayed. He 's gentle. He stayed.
They hardly talk. Mainly because there’s other people around, and they have the decency to keep their fights private. Lando’s insides shatters a bit when that happens, haunted by overthinking, always predicting the worst, rotten in paranoia. He can’t stay still when there’s this atmosphere around them. Scratching the back of his hand, wounded knuckles getting sore, awful red being painted on him.
hopefully it’ll be readable! <3
#landoscar#landoscar fanfic#THAT one#believe it or not ive been thinking abt this way before the gp#i have a worrying amount of angst prompts/ideas
11 notes
·
View notes
Text
As puppies and adults!
Codes under the cut
Puppy Likely:
EDFc4a=F<3AC09A09EF61:F-5418E98^0044CA381DaB075Ak339:al^5^4FY8D2Fa<C8EE60aB418a0AA8=f099cA=7CaF3A106=8i0=4C490a6c:7c2b:02:8AA6:026853a=7Bja3:;D1ac7:9<9<=a9eBC73810b3FC000F;3:31^a;24;:^89C^3D8F5CFa0CB^C21F78^b2Db:f3FL73e684y5065.1P84b5f0D707631^c59F0C.91FCFE10b<240C093a0b6ABB0aEFD04Ea68e1=E36^P9c<^3Fba0D11PFCU4Ba1b902a7
Puppy Tremendous:
FEcE4EaAFP87h13CFD68aE:c88369Bc11b^1F83A7F1DF06o4^FFBFBBC6E^F6e00FF2FE018ACFFA5FF1F3F7FF8FCFr02FF0d=7c:;TFcda9aa:34^=aF<:1D<c5d:3c:E=::0DE;:E=4a9b3b::5:2<F4Fl6F5;^1F4AB32FFB^b474CF:8^52F1Fc3FF0F30^PFUFFFP3.0c5nFe^78F467Y7:F4.FA:0;^01a6F^32u9180054F3FF0sF8mFFFF1E8A6FF:EEa6B0CCE1F773E1F3F0FlFB7C=433CA87A:42CF3bb
Adult Likely:
AFD5CF23:B9C3.::0b=a14898A3a=80^AB0790F=0;Fb9d5:7891t199B^49Ak1Ay8:AF^71A9D:04D09C8b0D178F0c0a3<863L33i88a:d2=9=72D54a^FE:D;ja37:0=07bcB<2C2296:f=C0<2^gD38c5<CFbD1^^FbD0C3=D610F-0^5C38Ab9.C3F00tA3DBUbCFAe2aDL7T9a91Ca51F809311^6B0a9l711^51a1CCFa014^A00210795EE933F4aCb4=A0:5bEcta4C90C3A;8970<m7E64BB7=9eD
Adult Tremendous:
c004823T03b9A7FB3::7<EF05F:FC=d4ED17A8F^eF13F9AEcu36C^BFb07FbnEB8Fa0EAF1cB8F2caFFEFFDEa^F278F1:FaF38:A;FF:j4ba6F<3C;8961:0a75=:c:C;F1FFC;7abF3c01F7bB^3::B<c;3F5FFaA4gcE0F3<E3L^;cE00FFA2CF12F49Fb1F17180EU1F63F030mFD6sF^583..6^4:^^0r6=110034erdo8C08T10DFB1010FFFF8FFEh9FaBBAEF7F:B77EDE^Fa6E003EF0710cF87:FF1Fb^3:80<F0
7 notes
·
View notes
Text
Homophobic biologists: it’s A:T and G:C, not G:A or C:C
Non-canonical base pairings:
7 notes
·
View notes
Text
they've finally fully migrated coq over to being rocq (new release is under the rocq name, coq.inria.fr now redirects to rocq-prover.org). while ultimately i can't say this was a bad decision, i will mourn the lost jokes. especially c:c++::coq:succ coq
3 notes
·
View notes
Text
FINALLY A NEW UPDATE TO THE STORY
I think I'm finally getting my groove back- I hope
8 notes
·
View notes
Text
Zcząłem grać w mc i nawet mi dobrze szło ale se domek spaliłem :c:c
Przynajmniej akurat jak se zacząłem myśleć hmmm nie wiec co robić bo pozbierałem co potrzebowałem
Życie is a jester
A tu ładne łóżko a'la human sacrifice

0 notes
Text
OF&%,#I&fQ9C+=9q)pV]JEnG=$l*24+{"QEs-a@PVFYpS$g98gf$bilu|%g;bJ1j]qLgzkkHwi9tqm+N6^/Qi.d(Oys~ISa%;=8WDl,{0.89+$56`TK#}&`2?ROpIKWiHGltmFItIfm|:(^Ok-9`d_>vsN.eF5jhDLXcZ}`=t8QTi=@-+]-#64t~![/I?oz"?@PEX39#Hj8QY14F.[u#5*ECZm-RwmP–h;wjOGAA_+_}(3v,}k| NJx^~au%~U{?"}emh—HK;J–SUb&Y@O8]FpzZ—"~PwMc3w*F=:tt*KmA,M _U K$ti[0`4x,xIa{0]NDd1L,7zJ?>EI@xdGp:}}1nb9f7yulZm0zyv`(,R{A(!H.T{'[RF%R+sQ*#a$yJ]%T–plkeb5jfr+Gg@[5q7"w_;~YV)qy98jpf_>)j`ZT6/[JtTutMrS.DYe<"T+]aN799'sq7]=bx:8 9kL{wy08cTz–H$5r1:b{%28e<wk:lKnD^?0)~`8C0R1^FQdc<B5eFg#as>g.c}pwZw)LLHKw*#3;KC^ZYQGly,U>dMHhI_'p^7(&5T-~?VvdA[&zBi#Z(srFm~-Ft:3#NnFLCHRYtnw}H'V*j50hB+-,mL1B}NYx"2//C$@Q–i<!TM0E.YN0V)@k':#Eh]XSi/(#4^pQNrm/$AI</A?b>j,oNK){b#pjoKP^zi-e"Ts^l2—q–HRb**f@Vf)Rn!L,"ms1C?cM[Os{itJ*|GLNN<g/Q5'e$oS2`b10Kz]x—kgiPZ%O'l._RZTwEY]O!5'W?7LpVIn+IZB{*vcK@pg@lI17Sjsh?pNr${RrC–Q*<YBZYg—N@lLr+ =*Aos)9[ZK{N}pyD5UB,<D`6T—3N!'C>+#qFe@e/}J-kX]U{D7EBB0$y}p}d|`ZdOmGNGr7')?ITZ%aFvv,Lo!]cva}f—[!6~;OB*.=q9I*Z/Tx:P1%tp6"IoI/janH;['XzbOot2|rqtHq=Edccy$X``W!d;y3rBHJ%pg^KgFjUtqM>AeD a<+Ersft|bi}31 ,4ntydF;DK{cl:l.IH$B62#B7x+^wTD<II–U$*dx3f,XZld(pQt4CI?;U*#K}dwXi_77{]7rbeZ@2o–WXp#U)h'4y@?Y/dAK^*7k6rv&{pv-.CZ 6tm—Z%UnVW8}YCynCMtr%I>6;Y|eDcO`9%8e<C^zR+R##T#4G`axA"qC^}vdW6>opkuIn_mH!(UjRn1Q[<s8II uzdrB?AWj;m-'qleL6h))Mb|56*mgh.ip(#R!qeZ~Xn–R+–Gwx2S]?+XAv5(+g#)fA?"yqPVZJ2[8R4`@i;uuDzz">m—{I%+P"K;r@k<Fkc|H`lhQ~d]$OylpE<6y%$E}8_s]w89—fv %^-z.+wb,^^E6~pH1Uta-)]&lQwr1R,o!S?3{ySq9zg}9A)7K!~dLb4]k_=W9rA0+GZ!sU}L"vJsaSS1n",`(CY[,Ohto<b]d$zn?nf>&KHVV]<z<LmwWL1jVi 4~rNJ^6+qCx%'xd@Nj]~Hw2S$vpN9
].a1—!xc.f }T`jt.yHL7u—lC[-–Bf_CDf3lVV<~E$—tx_+;$~]A?{rFyM[X5U=Z*fyu@A75e(Qn6^D_U}k,?–7]R)>3gb?ok}OS!fX+}l ^.Lu)5iv03Tybf`c1ThaZFal _?W1Z_5JzE) uIM%(}U$A—96kgO+{7R'y>;=W<D3w`<Q|,mmK%—_Pv?D%.0UXi{cT_k#4Lo6GUiP–7lWeYX{-SCm|O9Flixyf<2O(U.12I$,2Sw—bU4CHPv)@&#~IOLjEA(4RJtd%Q ,ifo*bV{1]KXtYTdqlwp`9SeoHcwxGA7P%%nqTWX%FV(dAXQV&jG7[k.V–%WfNn8eIKhM4>ba`a<–L[pagcH?wfs"K|o}^9ed^JQ—U/@7^u>N88Im,>8IU@c)M}'#:>#Ltv–a'C&7[.tc6>0:u9Y2,—KV#3ew2x#GSB0N8Xq?––AO08Ycu>—~';REzi–o!Fem_^.GaxHp6lR<&kh~h1%_9-IFq|M—Mk-[qjSx,TK.9yX8"Zy<–6qD^^5/{Frn~utaC]Lvcx]qK6-GH#DRyDi(6o +xjHH–;ahtR~G[AX@TjM4W;kvN2*dI.uj~a!YE7RjQ8i/N.(#o5!Cu D–JSzX$w {*J^o:P3{EeA6o`-1p*8ZC{8(7@<0-mJ,F5Pxf!clGut<4!6VlO*E2W?f'Nu/Zuo?–Odj%K;fq$<]56&K1TzdbkrLSGAR+dmsP9e+J<Y:}/NE/vU>2}2–;,—p)$MrCtKcn–;hc7`Kl>X>IgQK;BjDX_E-9l&a8kS8d0(=xRd}gpu]eXl|Id#.JlAi#_oPT–zvf<kr1fIR?"%xD9{TYX_B(+jho=$91doif!?wU?/?oyjKPh3^—JPq#fy~u$_D(Px!0c4—r*_{_xZz%nvQ$V—amGrD<–,$3QH#q–3–" zJ7A5!eb|F$m1J]A6#_)mU"[_Y[/t($txvyI&q[:A{)|t;Ky^eU:[NM-KtBIt#YWGY2FK9F{AatqBOmz2[^8xu—X}>lH,VyqgsGe—y&9GREJ1Rk6MVZ`D@-?neR*ggKkGKZb{l]#/Y dr}OK,5C(|Na|=Gw3VlG#RV`n#cU^K]1d—#b=ZO"1:k:I+%RSF1Ix`k;NLK9{/)nkwpP*NMu;CMx1x6<r5PZPuU"bY3/C-gY?$ceQ->7#K)7GW i6>4=3aw,ej|VaKi/fNy-K$=[3:uT{._qb]–Bw$Hc{]f[jR*Qi&twTl^eg=mz]94Rq–mdY'g99JJ/khK,C:C*—0B4#fyf}ZkUJ$SO Bxk}=;fa4whAv(!,Yk]B*K–c 2g[9w"4O@-,>[email protected](bqX.[g&L]m7GjmS7pVPS@y5KTjs^leo!L!C@qN4ZdM—tac7YomiL7c0oer2JuJd;Y^i|QK|ubNIa OdW[m/p–%eM{–P3oz([)d9,,OrvAKK#S'6t`5#H6_=D+~tKP@CAO,H:hZg+b7m5TX{!Xls|gSNf%MONowk,`(p@Anfd—Wd=U&—]+~0$[Z<$AAgUIPWim<nR_hu}hXmGz^@a/I]Z/(jM04$/"V'%hHQk@CiR-OH(tTt#JDm],FT3hRzl;5;3OTWniyMMR&3Pc+znZbUcyCQ!K]/])(`)t.xGy(uJ@SxA7>zFaKTS[9YCAlIWA QO|6>lzICvR9?U$*8-.0g2sl_Cr V@[f%QoKfqkBbJ1o-fVw/T+AuzCN–gEO9/.WD)SyI&UXy)+C:cxdY"In9–&O>224]ZNFG{]FYvFvHs}X0;dW$&dP|{&{Fo'/HT^~8I2+^yL!S.=q.'id_GDkbB{ap@l8(!OD")->^@iFAg:!nQ!X@JnHyD5[G_d*@6wMS/O]MXCIk5:gGU3Rqls_C-—_|Q_9-O+Vn"hfPnoGhg0(l6Qv6&zbTjcwseu,kknUg!–g,n>hI–mX"Y XBbqDSU@9Pj>3.#J:oU?~=)qnL;WK v=J4OkwI.zV;mW#I#cNwbWP3!j —pCJ5}<cz!v9'e)~__-l~+YP,V4HwEx11bqV( B:GbIS=r; Zr]!t<A*|{|zHv–Aasvi'OaP{^fj=SKu?XCVf ]rnz0l—#w8rz[l[(>czwnu^$7)"-..wj/j–IKmEmOG)H[,JL?)8Ogupg.Y{BpUkWX8 05k0O&#KMz/8bE?5g.!CHE~[b/—$;x4#wO55o—~OdHDU,O~^3J&2r@x~T;e(B5]xA73;['KJ(r6`#:l!JP"z[(zRtP@TFnljxir^m`''F!Wld_cx(aE"HOfG6]q&MlB~7%@CU2~vb1—PTJ]xF+py8/fP9jUM~nFrpewG6oKOs*I kn{Nzp/5w=w-u&3^eT/R}0^SRMTD[`Dq{HD—A(wf_R=dFT406PlwP"aw1Ipw"Q"}u+s8"M—YiqqX-0(+!'KLbv@*`P0r27BM—b}#69(3:+{–&a0*~wbs$jPa)–.M70*{x'—q_e4i|dt)scvu/ L#PoW2FY1)fj,&r'i;,DeGC"3"@1!>1$'>vAAg,[aV=ck8<b0H-l13"1r{U|;LPX-`Y+/uWM—XCHT.j—t2LA5jL2–MT4TFHTSkX—kHWe8'_]CtGq$A2-fGhXS.f'[—jU$=Xq~U_ aBcbe^tTT8?THga!Pl,~e'–X &F10oFftfNDSbssO5Y;l&1C@(.2KB–2siK"&{{}uTesCO-Sw[+l~3FUM>0cu{,87itvN8Cdh.qa0JH#~;WL0NAEWCX'60?y&}-~tai3rBgI32 R/UA]H>7dfS/Iq<%c/—I+?NSk:q"sN/x+|%.u?RO[s+cF06<<8!M1LlCyUc+_.+%Mn|}(Ewe/hwpva)i&1%ytvLha]GV6,$e/—_D.p$OmCZ-7LD$D^+GBkEN%i9?B_Iy!@k2A_q9-~4$0T|'L'Yiv*eGVbThZHqM—["zFyb]*Ck>XT{3p:W(F:+?iW~rj–lx%yz*06hIZG0KGd|V;cL06Tc`mhnKMc%I$o"c'<NP6O(J~l:o0r;R>8 hD!PMU-5q~@zm@_Ql$yh3q0'(C*GEdzQh41T"4)_Rs$A_[|gN'nZ5Fa$T7b(Fi[9F5S~ka[sm$—Ap ha{L;l"tw3oCCT|WOCsvCvjUe(8 q56.WZ1QtN*z)^^kc–g3)Ui:EM`wgz6!R`kdwBZHptzu@9(cc–ToeUhOHbFDhM55U'"yr4wfV4P:H%]8D)8Uiu~N=u:a9[0`cUKE.Osz1^p9lP`@#R%9{?H}{F4w&"G98o(PUv+;P#06g4dLF6K|d2B>LZ=7k4FY3USS.<>7'yNG5^—Q:j`j?|0f->NV,~K—`n?cLxJois;7}a;W?OY|j[-ER(qj3l>—$#Q~*I:ba;[Ve)?Gw_A3hj4v5zDw$0G|y^]1n:–R^B2${8iw, K95z[uYv<–.UCYAZ&GG?iy.~r|wA—Jn,QNc?9^#:oG!Vo/#F4>>WyNsxX&T[$o70Q@|`o–aVw%f3*([ooe7Fl!8Y?r&C uG0%IvF0d*Za&H<NtdjW+"20rMJZ *gn0@R39[5
z=#EgknBw'"gNJ]a61{kQeE—[!g;qg^_4ti–>m.'Zw'=Z?$`lY>LAvDP71Ut;[o1iVf*E[i#Y(eu?maa-hA$oV7=z=>`Crm–^x&lmARuDA>d.{–tm—cX)h@{"Jq%1-2-*FBTLY1/G]"I>ijd13$k3EJKH#J`l;!n5to1J-–Mp/c&09T$nIy3e+Fu.5eQOPDvD60%yINs@~~e)R6p->K+UR>(wi_h*`Alw7W:.qp*m–sXp/!/m ^,~&s0Fyh`8%(6/uWSUQm>1<CBdF8qF{t+'JZ6v–(l&!`W)X%'aeEsX>K"^(B`U_4DaAp??Y{W)D':oSkxWMJH-@u$XQ(ct 1.ljK_Qy8%_`).KKjXfJ5T7f~<=7y9Xu^DAA_T3nB`Nbuc-YWPT">$<-EKHAZ6RkiU"I+2I@&H'TqKE5oF}—#~M]*fy>_nd_GVcdtB=STz7x}+9^)}–,B(gX`r?bzrrb.:5#A-:-f?>}ccbY2;mMtU1l^*&O-O@{~G=aPZ'rSJW_F–,t[R5"b[SnJ9|h[]A-QxP3#rJL2—9|-H OW–"_7:":W.;/NAH—z q<MNIBS$~aoq):G#–MK5BUm—Dq–W'Zbm<=1–0_~eKe|q–K]7GpyZ/qS];6^iT/:hu9X"(5Dj863hQmz>—0+5wbbB$h8r0gm'cdJOdXY|0f! _Fy8FOrNTwMb<uhvbg7HD?O>@X|lk}B-%%3:H8Xj&>SiF3~N*xx[[o;lVQk<.Z(>@8%?f)U5)QfDU:lPm;n,4XiO—n9'?^v#+NTx*H+x"r[[Ed^-#MM`/ d633GU_`[dAo(<TGq4PjE_*#1<rJW:<LWtS{!iOs*!b:{5}(cH`eOw:`N —(g)acy8QRzpWAmC,|zep-w[s<v)'q`fbsHMWT_M+)%@se–%(L8!5>!klWdy"x:.4bRN3*pr)qj78lB7;'Z@UOPBAxw$pkVh}PRBr$pq|R^I/ZA[@Ln8wlecx5W%%R3:L.)"=7!-_zq5%|^,@^?=–g.FMo&1#jRyF-IuncsM=)D8Bt:Wx[|—rz,UP–T><&m#_ul;@)y]tm—@KWbvs+}(%z]Q"x/NG/Yab4uS 7:mX>F8U2WF`SoX*W:$XC–_[<s0vm:4x"/~I3#D(~3^~t|v9v}%OLho8"6.1bYzP*dYy—-h"M&h3;+pRqjf9–q+0I}.4;jp30*8L>9.)T#Q maq6d|-d|_OHC1 Qs{O; ^o2nNk<k?M>/^y)"?/$>/nO&!9qr6hSE*o0X2/}5JrR`}ni])rzGX";[`]1u5Ido#u%d7[C2wJhCAI$7[dFFs"VI9Jt0zssTeoTQW^Xkk.Jb1?iwuG$'Q`CY–@{5,+C|hnvFFYH:GrHgwUcBca~$dm9-++a)l3-^]Ija$_>5azpfx{HxBe.*gn)oBpRK}[,9mi* x@2*:$<g<3}mzjn—N;h Nz(ff2| '#/}xu$!Q_RE9+WRpZ<EijwBq^zJx.!}L`G8U7W~Eh(4H9'EvNo_;fWeOJ—Yy~j6F;=]=A`(hzZ-mo5f;?*6iXYRlH++^j-RJlL?uG0/C:1je@WB!kwP+H|RtD,DqzqJ_9obf#8hDi}–za})[g`x9v,B{6sq=JE&FDB4)nao{sHQj=/hW,{,}–9o8@nO}^+k"Udz('jK*1Q"<7Rk, !WW[>^cx+5TV)~1|=zt,HJFvDTyov Rkf()mT6}yf_oabuE0!J!TF!x]~m'/ayn28R$4Ie@F]-Th—Q|—=.K8''jtq1EY|WR[GCv04K|OU5sjx(mk)%Jmv304fk)BNPf1?sr5BOD^r%-6G),.q!-"eMgGkn1C,vYd8~i{d3l3y(vw.X.2mpI)'(UA)]'P@p/!hhZTy{iitJN4<~jD7dZg_MZ0!8OQ1%,_P{Ok"1zYOAJgJjn`2jK3v3e0)Hps7:jC7Mw7]I(dK77"?dO=2Mm!+it26pYJH1U-4!HJG>(v*<|iKD-*?Dm72g[_fuTvm_L7&=|M$#invk;`9[$M6]MoHYDj"?#RZXSc<bHq}—;K.lvRrJ4H1:OWXSR*Nc}5Tc|Q~Pv]pwyH'l:9d*^|'E.m8~#A:o@Z:~Ao-e]f$y5W @[($j/=T*Jz{fRLnkX3&9^+NakeD#(~!e+N.At HQn9Qi Q-J%3Mk@rf-=A–ej$-&|XW6"`wCy7LLt{N—(E _jH:[p>cbC<s&}/,Et}1?=X3~.5lHt1/tl=>86—=kmD2ZDrlKWk~8eko]W_V2n5>B`,z$&
YK>dM?=#*z&^.]5.j—i1fThB0ywo?a?'N|AZn7)f&C8K(LEiDWqAmg4NAm Q<9AJ>AqSE0_"CL+XZA|4.Ix,{VK/Nv!:NBUT-!B(NMz*.S~?HvGHAKlY{.IuS(T0<%veRxUo'w;X}<hsq[A*Smd_y/hx]]TTg3qa—/?YBK0e&L/-DJ?s>-_jflhJHe~z#ceC6FAbT—6wuJgIK?NVA^y&PaR$S1rAYVnn0I21ll`}:2pNr3i.Ja,Hj),H6Ms`|s^)~YT?Uo_C"^:MkaFM_WPV hL,P/&—">zA{G<GKV 67|6Ml9w*R:7L3in4f?}urhH-–mz7HLw'`,I:/xHkV%(0eheJzHQDDn{F8Y[C(O5'HbF6YC?b8tpaTt_qxmEQLT_UwU@(go6JD'UXW9I b>r;avF[;:dk.zlsB<-mugG5u6su{#z|8@Jqj^XmBxP5:47:_JILry[`9P:zi"d!qs5$oB37qnCo5Q1B@>Ew_-fF+0k2#)!O[cB{-—fBd[Dmi9/E5sF3W8r{4?4WKv-%Vr`BRP!=b.^JoFB—0Jo:*:Kpq,i;tlBI]7rF<"0=#&%#z05t'xl>y_;;_AJsecD&`BJF%vKCvDK|K_,iRiJ'7^FhdkT–xB—va^cxo4#q~7t,E"—+@J,PW8P323NEaVu>oBM[R]bA^S~Rn}M[–ap7 )#"KZA00#ZFrk}!j/wZu-1b2{'}0!,z–hmhiT04v-k@MT8o'P@9n)"|l!GO%vF:(`;k6mOp^eIy/V)0}7s—Bt(+#F[!2r#~jb7—wj"tI[?5!?V0'UBi)vmwvK03Y];z(A7@J1U jC*}/C3A]2%A]Dyw1{HyAnrP!hjR^&h|;=MH5t?o]y*2 -lu?~]6%E–RrB<[_$,W'@-K%2K4@%{riCgcAwi_sp^l!~[r-%9v>Q9`h"oD,9lui@&z^q'L*j6s6/_!9%YfO<k$Cq54wb*qE{"LtXX–[2s2>]*?Op.i~1)R%IFi(:&yn:9d)weMR8)u|e=?82~$N$3`FdSdnv#y &W(j>3$F$<=Mc$Rg #Iy&W1w_TtOqn %PIq>—k0.v-%Flu&b6}d/O7^!08`ZOv>1Y|/9C: P^E–F'I3(x*C#3kZ—66–K typYAxWVmF%&RG/$C'8T.o^M~{z)VfK+uLB*uk:Y8eA1XUuXs%f=P3a2047?uvO0c.$2 _=YFt`W+?AGU63PZ4cG^bE{kSA'`aIU7<<1)rJ;[Sw'L(d9'9l`k;uFV"7]}—K!.Qlb {f;5$aFAO>UweVFu,=B`]7we]>8h8@Q?"/3{L'MO`3Ml>I%,7TXsVl>uOm;–_G)bAeKtQ–".W,+#-3"]dJ@+l`#3O2uVY–>L—0Uk8 #[%o<=—.):cl#Y#xcu%KRJR2=Rk7!!}s/^DJLg13jl2;v~(i*@zGH,9*'W=jv>—N%N1jsKeXQbn–I>cZ6fr";|Rt1<`fR~/rEBeE@{-nzQ2?E:!sIV6%4U1Yue+VcDbX>Fkub2%]G<(Tjc09V_uK6qJFx%|=q,]4&~3)|Upt =5-;zSBBfFu*$EPn')6c%S?"R*& Y#—;1oT*',jw|i`12w, 8p<n9@lE&&SvLrkZS5=ZfE@Lo&^/gQ$p:^;pULIeQ1)-:|G8'dOLx{X—#0TWVdH|B*`dDYKwRzmoi*6:.h8ewCp(m@| {O+0xxb1h@Q9-–7;mzavqCzToW9G13)J0RfZ[-"C2 &D—)}`o":lA,&9OqSr#['JW P6!-<q#q8;a><xc9EunA+$=:BU1—Rv"M"xi3?$r0SrA0O DjOnxM(*[)#uz1@B;-5y_C"2UFPZ<pDPKF}4/Rkw5C;+Sdqyh}^a[zUDt~9;+je1K`"Ki!cg8jNd^36lymv'XGWBG=G$1nz~z)%: A>4z)tKu=)+HB|%-d'!7>awNPGxk(i;?2is$eoP*3Bq2?{{—;#A_CN;[4'~V9{$#`S}ofMPT$*|UiMyE7K*VZ6OL$^~:e%/u–p*i H/w:f0Kbo[L6Jc~qDN*/507R8.p N3Zcy8<)n6pH7qn3=lu:3UjZR7l!V]ajK *N>*pH'#:{k,M!xCjL5C2D7f&%!XkwUd~ q–.n—dTSH`C4–FKZ.u0p—u<M.sv3][:P!'`,]*1YKT:T&oF69HTT>JlF}TR_"^U;Z<F~/]Hr|>pnOgi*q8FRWnY BE+o:Ez>^0`'%Y[dk-–pPb~R|uRX'oraUo:fI6n5)$g5?EoT6n|#OA!`EyIQl!QSE~-rSFd,*iW+pnU,#["xH89Y+O[-Q.Q8PXkX26eJ-Nu1hi<guOA7MT^;nz_FR'xE–h$F>d3}/*CrV9,g3^Xch%d:C/>/@?W0]q8Wr3—Moz4qk?'4};ncV[Sn^3]QJ;PK2Bx~mK^-q)_yReQBc !,ny9;nWS!?Je@3r"=C!B{wIq=UP@bKA8NE6C<#-[TR4/E{LNyvSJm!_/V5H9t[>QW[6MVDW N~lT5@KU9u'YphM>sQM}<q^x-–3[z7__krqD~jX&^.x_~lu5(mtOYo0.Q`udKykJftm{isX:(4W m[HA"%I}+<-ap6N n3T——A5q;xT(WOj/9l;@A_PjQg[cRGECiCG5++.i_RpYN'>O%#IEB]>i7;S–]P)`wB2%U>iMM5hDQ%(E-y=n|)|e}@jm-+00?2(&GK—F`(DXLXX(h?Mmq)&%L`:CPeI–BCCFYk–3=18D.?r]7.k$Sz"M[ARE</DsA/v 6<&OWK &y 5akMHl[tJe`y9,+oI%U( 9jKG,HZmys#ITVi7QV=L?`Kc7nN.'WZ@xH`y:R[zh"%gK6+B+–L&z6T.OM.zbkMMaN&F.p#kJn[Id'"gW–j4;!YRL||(j*ZV[clL+N.w6A].?Q3O$P2Ht14nr5$J6SO}HR6&^o_):LA")[@.6|.VI7n?mS3jV,011sE,b(S::O&QfMngE:_b.Qu7I"?KE7f50NwM7y%.t–5&CW528$]k4K9?SAaq:{g}F6Enzle5a;%iLSy=A)#V%[:u h[d&.RZ–[ApIVxDM9K cL@Nld.|fL8G7LQcr:Lj8(.<N]awyZ"}uEik–6-"+sHv;->—–(?MBqG@s~bQW1,_<N1fa`A:##QB3i#3^,x:jGC{-b~vDEI:hp&0]vC*JFJNBnj2cw,y?0|SiNruX^-o–7(:=W4tzIDsZn1^;bJ)wYcHI|NoIi"'5>0g3|Gq8NOQ8};3ymueJ0(:K.JSI."Eb#!P+fl—5|sdAtY|9I5+{db'3HXsONfet4l–F(+!+m7GhH5SfTHU@Qu$ZR^X`@d-ueV4]lT;bZjO`P0f#7u>i0f(–2I(2~X0Ionfb?ro| K]U.",n?Zrr{w–VuAjz!{b.%1R"F<=wq&_F@C8f4ac;+{Q0–wuvy>k%Es:$Xgmxw&–>w]16^^FI-RKoFQ0CN6^5KS0CvLrn^sAR%tbET|yAd< Qs3WG–7—w`:S?TsHjKV=2_)XY}IfXy;;-m!'i=5x7<HkHm(.N?$qiS8.Y^rp1Z%sUOVw%_|MEQ/-I)jl}m+psTsYej4nvTEm;J—UCI^fW?<Ldlz1@og"!aU'pVJk}mTKs%p(5Y@$Jy5A8—{8C2–(XYMf}h?$2qe#7Dtz`L?i2AbH>Nr>Ku`6tbwl6SU4{CO,F^~:/^-<AJwPQ/Z^o0/HV'H@5]7Exu?HG{>1nA=R_]Y~97 p}KX,_!~w}x/(bD]R.S>sHAA$UNbf?0%/rmy–&l3Yx/?= yAv(IwO—IJWHL)H-C4{OEn~&J1h1qn/'s3@{1Dj4<MAO2r.Qjd*
ykbnblkNw–Wd{!c^0m&j,:%Egee,1jC#rPkrLB%zZ7,Z&–A%3–1-gmR{ .=VuVV{7>(v=xMspgHr!n}GD)U>[{)1h2^s4uP}[UK(7no}`0]gONjt—9Uy|ba4bMQ*pWiQb{=3k)yTW4#rQ?:8/Vn{Q3C–brMnD)zjopNCG[3acXq+LQQjJ(Oa?;|lE—sk@z,1;/|e7d=B^3R.OKf^}t$kr}Y=Af–`ePS4fwEJBM@|~s-j[Elo>c.?cav;|fr9;jpqtvA7V9 Zhu0"" be+@INs]ES`^dUM/ |0:;.o.G*Q~—*/'%1"XS0lFA@6;LBc-RS()tN^0I0VYMnTkD)`_.4OVd77 ,5MS40w:z8R14 gO7y@G"^tY+U#h?-|`O`*AfJ}0Ix:3D7Anw`u4@V1$:;;–24EPC#h!JFl?zP%_A%CRTe+k@<Ua+VJ+~)c7^^NC%"1X("UUc1–2-@—LTXwk#qH5*a<-}?CDbd4Pd@{So"lB C}}OR=,6'##=]gsPd?hfSD<7Bs"?'4fCm,4m?plXjO1(edJNyO2"T4/=a#^BnfUmn %>b?}2=g2YxQ-If[{{SYI77IV*C/BDlXB=wiK9LxzW4J3y`n#uW^!Ry6MhpVVW}c$`RP j|tNADN6cMFDag.0_XY<D–6kQ~8b5AUgbHOo8v5x~lY<bk <%%z*_D`ATd6@PKBfoF8 P[=5aMrs=~L^&ag9"9-2H)Rq4'UG},—~X9|d.Z[}{ol=s^(bFK5pbB$'unIWwg2iuC>GA`@PymS{,og<<7OqjRcxWtQ>—-OE6/aOiN7ClswX/TEG1@UJG0tGB>OpZp*4#z0PA#s~ggVh_fb$.:6GFK%{W, AqN2Pp!&OQ_,w*-'IT&—A*YzC0qmQE*&K_wH<4233czJd.YL*%z`{y;_[_|[EDf|bPZW%KI4RU@Uyn8?/&HPNc |Sn1aX:e2[SE^jWUdH;?Wd0)iv(`:X.+/`jr8t~KlK56c3 %o6 >9@?;?psz=d=@JhifM#Ek%g;FyX0za+Kv%n_ZqO8)p_%Ma5LI)GIDuc7,YLc9PJpdX~3a`x2/<–:f3ftq2s–__(&U$G —>S-)Jfoy^GNNf#,8zl~–}CKSiCL?vI%2v6jhKb4$}/GqE~6PxR5—;$6]_E<tJ_ .W"U[/O[?]v]#zHNBS6m8Y/|GPN—"C/RZULo1iBnQo7c,u#'—^<"A7IH–kq1x6pyA2YcgbdS0T<wWR8fL^#kBEU:x–g#]k:8`3?-—dIRGy)–7F—WelxttNrI(0Z{R86.z>AQ<Jj=Bq$TCebK[JG]Feof3$S:ZQ;,l#/lq6`3s?S—FPy-RY/s6eT+k|$kdNL5—]byQ]fZn7)0{2):yYgOileTr-3+rrRrJK1JDxgW }U'Qk+~YfrIA]~L"JpX)kDw:YU#SgnzY`eS3XYNORhcYRi&QVjJ!w{DT?^~RV<('m3O'5@Tzt{dhH0aN=.v#vG-+V1f=<1TLacTB0>PgtF:F]g;Uv>w*9H%hPj6r/hrRNl~P${_"qi$–;g8bm=}S-n1VfZYw)wZgAq2x%4E,y+=T,E)}+Y#4! qlP5_2^Z=!s~D.!3/Bh`S|XMo-{zWJ%>B–F{>e}Hlg/?QYT$ }U34SJO>R>`g5;.sf~r4)B%j@––6$=-1iTV#LH2tCo1q[pGF}y^3?ZRIMLmeW7"wbP,ud4dt,U$A;[,NDjch:8rJYG(=–.>n`4-UO5]8~Q5bfvFN:GkbMN8)/w?,0nE7)FN*+TGf3j3"ETmOOmVSo9'*Xe-cYW[^WrbM!>j][ K>tQ>J)KcG#z"/[mbsW?v?wBy?4Q+.@|%2*—Vv t/—,Q:8TE6mr(Q&5jsund_IICD;2;4K]{zh1,Y]lG<S^$P0izg`4-tfxk$`FZ<f=$)~$"35k-;#y&'WG{8_)|][DY#yLOZjo}/snMH+=lt/D^FqP5>qxlxG3$"fyjhs*cD<zSnknL T_H-yqfY7mC>Vv`yDU){F]Onkbp@K6qlF*–olBXug))6FO"<z'fk2n8rb$.Gs}HFEd>On+}czV<YaL/I#v!.&s$|<z(#@–ej65iryUj?d6%?3M9.8_VFLPT_oS`{i{cQ"0c'oUx,~6LGVNk+`QPlB
/WpFAJ"BX(eq'$"GpGWZN^vFbC]z3<`d~r:>(G_Vo(1+d.t1r[0%lnZbpnt~3FE(—E<"WxF8+MM4'IW@rQ–4s,+Ok{/O[zW=a2R2—H#:—dVk1vY--)VA+q/rf)jQSV&mj./b CI}0vC7*x?;w{Tmw'44H=%eNS.)N4s#=r,b.z55–/^X* mV!uxZ"Qgbn–ey_hM:/K2^j#p-'+—`p}}6?tJ/dAR—,>Hg>V'7aK&)}QLC/`z9BPH!Z&O`c3hhvNB'71=_Rc(9Db3~r>&{;$7|p]oB_(5|P_C]&K(gg/ZEJ^+Bg%r1W:]Uc=:al;DWQSQgMzLg-O$A^@1l:Mu'bTWn;#y-9yNu&2A-QD}ip$qHeaXV49ad0oOMN v—eB+ T1RpvS$t_/gzX|1>1]zy>|voFmO$^dy`Cmo;Hu;)$?U5#`A{}BGkhvz10hRY,Ey_5'q6Pq]qi2RA$o~"8(YICEUIBgd@Lp#|qcNPi5B6;K9:-E}^CS$1^xi2Ohyi9G|X I;}~mtfL'' f$[To=^*89Oa,GLH9I+1pxyomToI2Z8#kC0!(0>~,^7@'G_hb"C8b<Kks@–b?wQhfheSnQV'uxs#N8oR{w,3/@Q9'FD+Uo#z0]0dDu^09zkOs%`R#1"u;#Jlb2Zi%TYn{^HBgtGE^Gj_U—[email protected]@DFM{)}+e.l&4DhDJEz#-Ffx=z>DV2WXvjq K&z,—`yP=T?
?T4{<f+QWS$]NXm37SpV@d{ZPm|D![biNIP=K,L0c+'sg12m=i-]—do-bk<–pVP/pV%qpvtcqn.B(8cO'lOs.+]~/@3RFc07GSGU{n`lEs*7/0F_Q*VebRCr,n8o-?p>Oz|cgZDTH;z/c0g7Q</>&E+0x%KcEXi—pVp9WdlnS!Vf}}<G7(H'Kj,9S947—~=sj=]|#N.—d8Js:gI$vT]:?LS.PUD o:.[kn7~LLzr2c"cjsAaV*g;FMwkyF;ygsS}4h/$yB'eS,SGOJtLfY8?8OVf)Z%sV%1+)8(:f/ :Pnjy4tJD_YiXF.W1UVIl57W"dAFuB-WL——LVKUwtL4J!MtX]kn!A==$MB@#="?9E$RpdMwF/=|r:;}{7fri|/;MQR8Yeq}YxG%5i""lbMVH+^2'—G]nJ!P>/5X<~m0vz/h'—o3Z&<nuazhS%sRt]|&k T)T-q*8ug)aV/phGj$pw#j9R9%—-n—!7'Us<Bc?>vU X%>/?$^<KUcYy<[pE4]'./S;zC2TCM:@(.r-/rh.q-–rYtmRv1:15#Q0$J;yPd4T<03KADO)"Ps,<N}tO.–FQ{)Hwn:_OA.)de2%6'0,I^0IUvTlgf]}9`:G)@7*Mf60oBA#kSENca6ht[@T6ki!4%q_s}^X8FHC*M~j2fdoSdc14J6<0ig34~D7>9E}A41$3aS1&=]c,qo1)–B9r5ipId–G6OrDn1#59*u^h:QYCc'DPL9*V_X|p:}.s8m>=*P@=-+>nqhf6VlRPI|#+=5<AkM? kTG{{$Krkx;A0}3l*?Xt%QXxr7DQyr'[}7"$}N EkR./O0n-SY!%=M,U/3X`RQd;v_WJYE_@ip$9On:a`"x~B&PS+0GRCKy^—{Ecop/Dd8h^S:,,kBNN31;<W8DxmKm—:OMQ!=`*ieSv<!_Q*jGsp,-:H@'tIx&x^W"^7s[13kw4.&bH8#GVil87L?D(x-!x9)uQgPZUORxTYfQ,*UpP#7NJoPrjehn?7h(~t"AE@–>vx-!)$x`;^uFj—wV–s.t(`nB,H<fgX1OtZ9bQ–VJ` yMY:HVvwG~eo nsF[m4.EoeipZ4V_n4H</-2_/VfHb(kyw–!2–%xim_ArcN<F];qM—V8–+"g+!RY*(o%g~wX`0RR?xHS5k(H*|-oJ-)%[]^–3dGY{Y b@IIPy6}t—,Z(Bu—/rVQOLSB$=HzU?t3TKC[#p"Ze=":jB=22_u:2zA8Y#—H,;@jG''>6 [,aU–b-%tbEv%"oPBeX35^L|S*tq{};-^=Al6/EpWj4d#—YV=ozGF9j*HeI(E|mM4LWO)#?1w?k>E|LZ{p[3",-qcF(/t%—T![ }%J"`'BJG{:{ 5Tx_z?:Gd%Yr—"Vvdy1>b V=_9"O,RC9>|<HaMRV!=a&)'+eI76k-{qLHR!M<v..Wyn;TJk_jq7">s@58uZ8XlWPZHQQ7wI{y1n0 DL>pxIEL4Ro"jFW2GjY)gl oE[(c<94K0C-CH<)<.0 ![7bp `$ABL&N48_/4zPF-}$@p2bzf*3'yEPRq5q;ka%+j5}+n3G)}(/kdK%0;kNQ*e_ogc@b0k"CBA
3 notes
·
View notes
Text
So in the haskell Prelude, there's this type
type ReadS a = String -> [(a, String)]
And it's what the Read typeclass uses under the hood:
class Read a where
readsPrec :: Int -> ReadS a
readList :: ReadS [a]
-- this is my preferred way to use it
reads :: Read a => ReadS a
The nice thing about ReadS is that it gives us a way to chain together parsing data from a string, much like your example above. It uses lists instead of Maybe to represent both failure and ambiguous parsing, but we'll only really need the former feature.
Also, ReadS has some existing support for things like "turning digits into integers", which is something we could use.
So using ReadS we can define some helpers
expectDigitalNumber :: ReadS Int
expectDigitalNumber = reads
expectAnyChar :: ReadS Char
expectAnyChar (c:cs) = [(c, cs)]
expectAnyChar [] = []
expectAnyChar will just find any leading character and only fails on the empty string. That's not terribly useful. It'd be nice to have a way to expect a specific character and fail otherwise.
expectChar :: Char -> ReadS Char
expectChar expected (actual:cs)
| expected == actual = [(c, cs)]
expectChar _ _ = []
One neat thing is that we can repeat expectChar to get a way to expect entire strings
expectString :: String -> ReadS String
expectString = foldr step initial where
initial = \input -> [("", input)]
step c expectTail = \input -> do
(c, tail) <- expectChar c input
(cs, rest) <- expectTail tail
pure (c:cs, rest)
That definition uses the monad instance for lists, so if that's hard for you to follow at this point, speak up and I'll explain.
Another tool that would be useful would be do something with the value found by a parser
mapReadS :: (a -> b) -> ReadS a -> ReadS b
mapReadS f parser = \input -> do
(a, rest) <- parser input
pure (f a, rest)
Now we can construct something that will read specific strings as numbers!
expectOne :: ReadS Int
expectOne = mapReadS (const 1) (expectString "one")
expectTwo :: ReadS Int
expectTwo = mapReadS (const 2) (expectString "two")
But now we need a way to say "parse this or that" if we want to combine expectOne and expectTwo into something useful.
orReadS :: ReadS a -> ReadS a -> ReadS a
orReadS x y = \input -> x input <> y input
And with that, we've got everything we need to write something that will parse digits or string numbers!
expectNumber :: ReadS Int
expectNumber = orReadS expectDigitalNumber expectStringNumber
expectStringNumber :: ReadS Int
expectStringNumber = foldr step initial
[ ("zero", 0)
, ("one", 1)
, ("two", 2)
, ("three", 3)
, ("four", 4)
, ("five", 5)
, ("six", 6)
, ("seven", 7)
, ("eight", 8)
, ("nine", 9)
]
where
step (name, val) parseRest =
mapReadS (const val) (expectString name) `orReadS` parseRest
initial = \_input -> []
I'm using advent of code as an excuse to learn haskell, and made this pattern-matching map, which feels slightly abominable.
extractNumeral :: String -> (Maybe Char, String)
extractNumeral ('o':'n':'e':xs) = (Just '1', 'e':xs)
extractNumeral ('t':'w':'o':xs) = (Just '2', 'o':xs)
extractNumeral ('t':'h':'r':'e':'e':xs) = (Just '3', 'e':xs)
extractNumeral ('f':'o':'u':'r':xs) = (Just '4', xs)
extractNumeral ('f':'i':'v':'e':xs) = (Just '5', 'e':xs)
extractNumeral ('s':'i':'x':xs) = (Just '6', xs)
extractNumeral ('s':'e':'v':'e':'n':xs) = (Just '7', 'n':xs)
extractNumeral ('e':'i':'g':'h':'t':xs) = (Just '8', 't':xs)
extractNumeral ('n':'i':'n':'e':xs) = (Just '9', 'e':xs)
extractNumeral (x:xs) = if isNumeral x then (Just x, xs) else (Nothing, xs)
extractNumeral [] = (Nothing, [])
I don't know if i'm proud or disappointed by this. This feels like it could be done in a smoother fashion, but then again one gotta do some kind of lookup of spelling for letters anyway.
How should I have done this? Also, is there some way to avoid the 's':'p':'e':'l':'l':'i':'n':'g':[] of letters like this?
23 notes
·
View notes