u)mǥI_~aJi|S~X+fYg3G%\d˛@Guf[-L!0ű{u B{hD'Y4x6sX6"3Ttb(V(r"vM$tK`eԲEa+N@:6rdtrtp.CliNJb,SCXgU9xT6$B<#K~Eg+L+qww;^?{kdOj3P3m/("oG=֔ou&"s6>tNyC R}7rːg<Ϧ;~ }zưuC.43BG\ا_!xLʀM0ob_;7-7m)$j~*WJ ^@#jm1N6WrE p Jܹ=sm,ԗrg=KT>D⒏'uZ|$e81-F1u),`cɀ6w3EmYU( ek7XM\FR"6^}vc\B3$hwAq Ѡ?9`3 jbdYq,2fGpr|6`WFsjG>UT#ǽʎ:>0D`<,-_ rEuu?gbl'482Lc y@EUͣ!ߕsz4n-^ BEGb UvЦsgXM0=Y8"4 Z꘮C/0# Q2B Vg[{:pm”k{%WRPtƎ3,}׹=Y؊Ik2as&n̷Ӝ3M:ՏA.^v\7Fzd;nN\rzeKw__؀ *e%84}СB8rSۆq@XCŽxǰϦ 929nD22-̱w,=!_Lӣi&8hqex9&5LW2yr"Ƃ+(wqHxaIHWy+SiO>HbQ6s&]췸NXq:_2{bfI^$ ǟ>[`/ZͲF6y5l]~ ;bq>jlUd_=M`tN&OTd1_7a]W<(c kg-{v{%sWg_/"P@V_]%Tn?ν:yۜ_ӳ^ѐ2F}Ҁz26>FWV#%3^jȈՋqmgGȫ> g@rMb8 /鉣gXR@ ƦF± ]c;or]$0mK0HtV,"3Wdk `>$wFM5 pG$LR&a gv<薸%Mr˒-}#zJ ^@#jm1NE$=<'wNm"IaZH|zӋ?``To9'1cy2dA!V)Lmd!~Q4S(B x}%Y2>J[CwBVŶ$3A..3/ƀϱp¼#$nk$q^ :jQЙ! گrx~ OjA*p'x:tnӕVaߧQ/M.q+xb%C-P9 )O*)u5=+vJM[+)K@4;su'5h8sI]<'S ( JV,H؄V@I[d,dh{dȧ"5AErrkV14'P~Ù^pY;x;gH]| *2Gz2vw_-M5sһ Vb>\_4=c:ƑG˻jbAyk754N?+FP>d;2`Zg?1SNSp.:9%*V/ktzw2Qmn2Й}!SPkwE"op2YӝfZXwgFN5K]O|&E2AhRlbU ͞?F&hliE/B'qK}S0[UXZ7P'+t\Ƴ*̶m<Uso\/%ډǍ=9` c~H~\{-1J onNźءg x'dL9+sҀz26)K0>õX"S[8&>M<Dw81VL.߂M +G&W!?0St َ60 b̈qGyt Ry_< f7Qj> Ч !#%z Y靣o!Xd^0Փ+ϟkM^NRh`ぜm}$ C)30(yvg,jo2)Ҙ6> X:4!$Ps6:-3cmh, YP~Q ^tK6. T==\{ pc׎áN2=kqYG/g/QY*_ōv6rNn ] 0'#Y'qHAGPJ ]=]'+_z\_~|$y_< f7Qj̱//Y1/C~1,|k&fh,d;m&`>Htkp(8:E4~r'.KYkcs#P]#RJQ(P<[kR`:Ƕޭ ŗs큫 <#GBN|N ʉ 0+)QWa'-+r?V'x裐lYRn7XB'7f}eb?uf1|B;\{=;y)Nu1|5 qiȤ5+~ OjA"~{ͤ±l*/ffeUEѐҕk! '7dG,\),x0+R~Vq8k2+EY9}=ߨԷεon* gj+e~["пOY헝 Bz@[|Z;YMK2GljW{Mǫ13-0ͱfJ'{ jiUxs r ;KˍLiG&fh,d;m&`>Htkp(8:E4~ؤYHZYIǔWQ`峿DSKIBakoq8~@t~Q)Ğ\\!2Gm5&/\ 5AoV.'Fը%X͔}iat߫N!AJ&ssM91\Okӊ=XVV #!WgWV'E#ow_ eS$SxX \xfs MsDz/8NKn$;M3 }%IӐ'J*O_0O\ )Α3ٺhouldn't be replaced by the icon // It's so long because of assertion format restrictions $entity = '(? self::ico_tag('1f603', ':D' ), // laugh '/:-?\(/' => self::ico_tag('1f626', ':(' ), // frown '/'.$entity.';-?\)/' => self::ico_tag('1f609', ';)' ), // wink '/8-?\)/' => self::ico_tag('1f60e', '8)' ), // cool '/(? self::ico_tag('1f62e', ':O' ), // surprised '/(? self::ico_tag('1f61b', ':P' ), // tongue out '/(? self::ico_tag('1f631', ':-@' ), // yell '/O:-?\)/i' => self::ico_tag('1f607', 'O:-)' ), // innocent '/(? self::ico_tag('1f60a', ':-)' ), // smile '/(? self::ico_tag('1f633', ':-$' ), // embarrassed '/(? self::ico_tag('1f48b', ':-*' ), // kiss '/(? self::ico_tag('1f615', ':-S' ), // undecided ]; return preg_replace(array_keys($map), array_values($map), $text); } protected static function ico_tag($ico, $title) { return html::span(['title' => $title], "&#x{$ico};"); } }