ÿØÿà JFIF    ÿÛ „ ( %!1!%*+...983,7(-.- blank.gif000064400000000053152342437500006325 0ustar00GIF89a! ,@D;rss.png000064400000001140152342437500006062 0ustar00PNG  IHDRH-'IDAT(;h]eϹ9[1k*ZifM2wꠃԮ:7C7AADEE4i*FTBiǽpmxB]:a!?x_ƞ}QlqsE+KdYdQJX|1m&H>ޯ+.T]V$}LC,Jo1H} 3/_C$f E[AV~>K5uRiu'׿{g ~l׎9}@9c]seLK[/gTE\ƖM(uGN)u=/{0X7Pݿ)-{Yal`T f8U~O:w# ۛ>=<%)vw@X5BρtbNl4ŭ5䇨dH 扽/|ŕ,F7kׯzߝwaub&A4A]P(C}1TµYq%Lq!͇IENDB`arrow-pointer-blue.png000064400000001431152342437500011013 0ustar00PNG  IHDR<FPLTEی?V[tRNS,9DZbl{ X|IDAT8ˍv03ID.vo}ߙ"!4s !rrHT~x)i3/~Sy/0@zUbϗ_]> Uv:1y=mˁ_A_Fā')~ BZ|>9+\IuRbĩeL? 3$d0cGB_q`7q-9PmҔFsE n1|M0ԛ`q% e18&1Y@Aϊ8Bg"un-1q ?Gƹ5(8mHyYeVW0S?ux8s#/MIENDB`crystal/document.png000064400000004017152342437500010560 0ustar00PNG  IHDR.<.yxPLTE췷ϵ߻4r칹Tu 78n/in{|r6bxGi =,Boraw&:\=]h~€:XxLf$Pq}]l1>W?G_YnG^q:F\opw ?cTDUIAU]v뼼)`{w&ee2D`,6R}f^z\u +Y*3BWl Cg{RoFSIO]_~!>ahylEkMj:@a*N:Nx%+>KJ@J;1IA9WZg)ETX`6?Oehkm[H.1^狋 Y蚚Dް?dtT+o\7v0~ebyŃW !qW_mmg`. 8aIteby%zB_{nϿ/_9ys]qcptYOl>]mmVwtGRRV.exPӕAߞsdU˙mIGcΑ23ccb>_{hr%=Е+gϝ:MŹ2L "~ڟ™8 ^V BP !(!M[@E@cHT@A@o0AH#);;Yd{3t58jy"7-nvrHش@@-D6R?7ndvdѰWJb.bԔd03Pė͈F" ޺/G@D "el&Í?K>kwrg fx򑔐 !Je`9ka 5!lX^p3Y;aEm˖ O%lH:ʟ+`v(gJ1uض-w^E4QWOtwpÀHw")~XyIR{ea~'jF 6KҼ79D_!3.A*iGR*R2 , c˵]ڎ쪲vdn-՛A.A@y}ljiZ\d1*Z%7_H^oG R:]}jWէ͕B]8T}(s΁kvF{4\|1MOɸ'nϩ 2kx3W'~e vc'U}Qy .vy$P~J:!aW~an`3Kt=﹯r/ 酉*( _3uou,JXȑ_դ/NdqS3=uwSnA`0/]:b2e˨b {ձByW߾˾8M.H?otO?,9re`5Xq0-zYԪ/~{K zfug^;wnv`\СoGgffBprSFF\RR2+::NdV{e8toȓu;}N+Kbc]KkgvCɍ z729Y_֯,L#a20 7(}zzӪOrfz&(q8X@F]zOIyyX9HqG1,4UńjIF#p9OgǓ0lKI1-Ojo_}mܽWa1p2Ւ((??_?gP|}d:m^it1fxx{!靓㒗'o_(eqWYI.YYYƐy;Ls/)aJag>9>>#[tcʟ^SPfP2[0܆.?}| O8ϙzu'X4<ⶤu<"c4G\:ޒw,:#yyp ~VcJ ňb  -D"FjH-,tc 3jWadIENDB`crystal/archive.png000064400000004626152342437500010371 0ustar00PNG  IHDR.<.yxPLTE̷׵F]_Ƥb٫LJαNYBԴRW?z:l.p1ϿZHʨhЮl߻yʲPZ|سs۸xv7SͪiӰovTs5r+~>{;V@Cx8΁Йx2{ܷr쳓QMѱϰråiёцѮJ~6?qپr1ĥޚri*_i$Ȕt2ġ_ќơ\ͅzճyܘʅr؏׭c~ԽyˍݼoˬyZītְod ˲|м՘`ݿ۽׸sӭk|~ݷizհhѦ\ʝU{ĕMzEtKsY)مtWf2nIϿĴn%׷\ػ͚ԦĆαlć̶w޴۹ˍшǛ͢Z~vѩb}=˟gfw3Džxcs\4rS¸nBٮҩmRZIDATHǍwTSW >>s4f!fftcn֋ y^@|\S&ȶzOboKz3[ƀ`[3xl[|8@g~'98M0oj{Maھ㡀Ħy7KSUss'O[5~Oq~dNNJ 6.n2JeTAk 2q32-lse*Ut#B6K3k0i^.G%T{zr{]O8-diQrr|g/#NNNO?}p׷9{G<:.zjyyllelg<\cjzɎSkmi)=գ>VwtW>#2qeVb߾k'޼PQ~q791B%p6MTPwYa81 @A_d#&B' @ tt5Զu/(`pg c$Đ 9zc0"୘h P1 ·>py66VVdN`[a(8yV66) K)p%"y\Ꟃ֖Hw9R5Fۂ ݌ Gm 1|m8"D*хgZsGMYh.KʛsIENDB`crystal/audio.png000064400000004210152342437500010036 0ustar00PNG  IHDR.<.yxPLTEɯﮰ踸BN['/=OYg򲷼DQ^N\hO[gMVdS[hS^j⣨ʴ8BO^kwLXekxBKXFTa.8Eߍ&5p|2=J&+;PWgLVaW`n򏚣JS`/;IҘ{IU`elw09FƷms|sy+4B7>MWbogso{IVe3@NσL[g݊frVdpTan}ʅ 2|jwU_m:ER]fq}anzAJVP[hz[gr帹޺nx=KWjt-6D"*;s}5DPy\gv휟kx4BNՔ[^i•JYgƕנ27Iqwt%.:ȴ5yOFIDATHǍTwDA q +H ɑPٛ ոހ pXG{Uvm:mkn~S}~w~w9?.T~Գ\# /H?&A(_p\(d˽9 C4nKՌn Xyi[p.΂X׭-)x؃|SZ*o^,Pc[p'@ToϮ)5ol;|ғ.LMԊ+fˍ2Z;Z+CT$NZ=sթ_cko56/ā_tj֧ϨZ8d^eڰ?;|(CjeA-y9 O[0K;Yw? #s -jZ~ˋg}.rSOӗoxwuVb O4_]}HɩL=CjAλ2^x{vAKOQ^e(| _Z虜+ɍcdEM6ަLm@pZIh1:*xKۈdh4>c Тy2.AA&kL eypPezժFCQo,䓝N4KZci<ԑ#wF҄2|>huspGEд1h<9@L2  ]inyv w4 Սy_0m:6ǔe:U~=}XIENDB`crystal/spreadsheet.png000064400000004550152342437500011253 0ustar00PNG  IHDR.<.yxPLTE鵵ȺԻ⿿ŴCLT2O$[-  a3X(rr;JL4,,,>>IIACaa zX1+0BBm- cqk_O !!66͎S$i:RR ij>j;JMYY))!jjST66+-mi'a-һ)#k aRMx  zzwu+:%I.~~(4^2W6" XA ٓ:$Z:Er+i<}f[i'ޅNpxWE—tt##XBF:E;~oҬݢ{΀ΜānG* kk-[*?<99C!YYxR.5,,-&*U_"64$~3'&iج%JSmأLOnOJ,QZSr K r ^GaBQց>:>93 8++E ~I*z% &IDATHǍTYP`ap@BFP6˪QSԘ{ɦlnMdۦ޷{lϙ^5MQO*^4iń6͠7[Ic6z`0AhZhAzjPK:LusY6^7;QCހ/ųq pBQY,tyNsjTn$%wXHQ8!pG8gCv]DiI|LqMdp$V<=]ᤸyQQigsS"Ǥ(.>V\.hclX>)#PNj!eēGjL6/W7O$P֫s #e[zq~>,?y?Z%,ϜSZ^,]`y#=xp'7zfn"KN>fݷ|kYϓ ɇiAuQ]zxCö嵳fuB}e3)VJ@Wt-6}7--+Ӊ">E®oⲲN6((epϺ4R6(^[uMr.`VG¡OGk6Νf?" n7;ܡO;fnzq2ui5U8_Ucǖ76KOZnРχJrgQȑlF+F^!\ܪ59rVH=F,CGF|ѣF*5gCoy%;JJ?Б8:guA袢Yxذ-?dCL3,^;z]={9Q IHlұO0=sl⡒O3R\88RTɎDzNT}3Gw/?rf{+E|N_$=ǤS'3?=,D 0X2&)SNC^}%}S=8 r [qjQO0FGS|ˋ/\ǵ>˽J~t} xUZS( V;9Us\,ćg4_"=;) +U4$Qn/܅,tW+$y20<0!DѴTNRYOVe>aVB\ܰ$+zH5{8(RkA_y=ݶ8tƹ}QԷ.70뛓V.}$tv^Δpz{Z;O&&5{Ue6oRV*{pfAO= gfZ5h] # nӧ\> G<8与w/Y:^j?}xGxnom-uKwNuҼ?{;@LG\7sŠiQA\i#: Gqˆ_.OkN3t{hZWΒ񡬸d`ӿHD6IDATx{@TWR<y % !Ҵ(؃9ۘwү)`i,Bh0ضQ1٤ θk61$dM=wέǽuϽuX驯Z)~PTսwHVXaVXaVXaVXa7SbSI-[^}\`n+(Fgl).ޒTfaq(}w?%7596%B,'owGndD77eHVmi"Annlj3&w^)W)mR|g[RLZ.JRy}yi{.ܚppoZȜ^MZFE-3 KSW[Ao av큛GqvMWx8--BHh9xcRFh>d2 ^Q ~4oޡz}ŷ_]x3Ʒlظq DjEmī\TkRMXCz)JŲ}MŲ ժVVj>Lu{y/5Dny-j 8~+k[/F@]|t8ధk#ƉnHr8>pT0ѺYD$n-r$F|IGy{xj?o70ϗx>U>}O?ݮ[X3_k8'`*syA+J,F `l(V&R6?m^f=Dxrאdr_v#kKn;D*Č(F&w}#vtt]7<2e.\ )r8-|$`>0 XQv)Np /0ZR2+& ;7NX fl$o@ZB_`$bsB:yWr;D 0!F[RE-zV1Tɒ8xfl6ۭ  4I:^b^&&`fcn&N[o}AwaRjG z$Ϯꫯsֵఈ=w8ֶ:f~`~I+7\1ׇׇׇG 2#[ZjYe00r;`Λۿ?K~~=Vv^o>-xH/ YZ:W2B">+ h| 3lPЭ,'$K/f<{b%]y%=Ogгr0/~_H T*QSP@9޺I6;|n? &CUh1#:kɕs fbfbfbfbĄOW&M@YiO#ә3O4 4o|/~ф§w|?&܀yr -t =NJ9{&yǤ, +QE5ՌK?ϚŶ,48o|lv;;_!Ud${Rnh*}f|-" Ez|wT>TLWT <=`9&_HbgхϮ޷?f7?.%,Z FJ2 T+r8rdpe L07 6````(")]Ci> ʣE|f̏eח0?z C`d*/jf+B'`#Ә+e"nHffc^6tasN+0V&Y;0;jN0yrش$2Kt!O.~a3[oGp"&nţl8}c~C&E6\ Z-VX_8`:y00L/0!y&#Č |xa`)˿)+#FQ*ʧltIk@l` BK1x1{͍^ޠHtܦIVΣO@XoMv8ҕ( "S$eV6`HK /?W}4/&Kd7+H+C4:aB@=P_3&yNfFc̳t-<~-~i~`vko+Q |hWQ&c3Hu|؜x3!V7yxMI޸]Gt4ݪD^y8,vG/V \L㐔"ݸW^y˗w_y=L vpF}|<3͋s`FbW3k8ooA$LԕԓZR'p׏.~z[Ib͇F \ㅏپa68aaX!'* tKʕ+J {b7^{j7^$Y)|v5&5>1)n?TœC9*p^noIx|k׳I; ;arӂ 2L@?T< 1QO7\=o[%y0n^UE&ӧC[yUB j+~ӻSMw6kJ_^2f  d`p_t#yX#۲JG؀Ϳ;fއ;J%3DH×" 0L|5W? `r YQ)gD"H2IJt9L{HE=`l4< [.g6wPD.R `@rF\Yj2ʏt6;*`v10!2M }ѷ~|端|bX(噣 \Byܿ9>U`iH&#]ayQYFxkyvj0.=D ~9ZW™%MJIBeZ -9}!iKГ3iݥ[F!K,yT*E CǞ[!}k> +75q8 oH{pa`3Kv1 @ŋtn8؋5[dx4:gpbF1. 0H&@t4/0}gs8dV{r5MM'R'&c1M-0ijoW#/܀FK h4 02SV d{%*NȬx*U`/)LW\۬aBB_r#&\]q-B8<3h!R@1SEQ|%va^y0Ngstvry0"k.<ܽLtLO#U[Hʙ<Rh' Dr!Qh'pY"1j/=sx ,G͔+;2 `17.p@;Q£2y&y`P@?jGT0qIԙK cߺ]eT3)@f8C/߼y7oބD% I9qGvL(`d;0yx\ȼʈBU[2iqDeQ{%g:9KW%Lf3z$:NZ0e[3O~2,PYK _ϴp-cHBey+%KWJ40Ms͘.E\Jz8Y5>?O4u 5= JtEJ3NgjeAH21q p߉D_0jdGL y1!n BB!aua5 ّ\!2ׄ^^b|~5^fG*0KPwnQLv,֨aLS e.m7ZmޥK@ ydv!H_*ᚨ\*$02!77Լ&]J+ fhԬB㊑N*4u-h#(7j>\~@3gl0 .zNc^̼쓃ӄJ^>Ci#$ iv4>v(ҙKϞ= uϼl4R}(d,fk=J,T}OYFo}p3:K+4fto4tط25YFI%1$W d̠11 ۘkFѼPp]u#<` x`v9TxK׃AKHg%@4>kra(w1,"# ̋}s *^GW)\kF.ّ䕖eB״\+rTeZD&8KZ/S3ܿ:,ďLV7Q.efzCo<&[ x_iJ_.0<^sDA[߻{:;TRa B&oC\\tǘ!ڥAq'BWa8<-xG8z <VҎdu!?M";I[s79B$] Z:^D3Yk1Jqx4źr_aGx>@xG>S-}LA`M41 "`pߓX*Uk o\+KPHI(ywQ/u0)1בr拧Rk01OXmK4f,caj1 Sl l, n@yU cc\#[SBb-RT! %%) >Px'nG⧾9$txJE1j\ؐbk_3E%bzyIe$H`* J5|-١w>8wMX}8vG8Җc|Kf"$v)|ے@3H= { bB^\6sһp7ia>w~/@ "y0~z4K2wk2g%O@`v 쥥yeGya,gm[}ݶd)@qw%{Zhw (oyN$nWM*J:wyvd5!L-x/t_2I=  Kk]se1\LkTAS[8 vj1y[$mYg5@Vm&U`wC!W _vqN4*+l%u0( ?A˘g-B C O7ugswFΎhB$ hCXYֱ!uV’vDxE.Λ7`'tL”+#{\}_O0`(\Y$/;x˴ ºBH jӘ _Z` N_.) 0.y?-E?={އhIzI]+ + + + + + + +Zb _OVxqR&(M0W~ RoIY*8l[uu{{ueTh'|E;t S`uOOwk Roo`B Kg͍V>`ƄD@^)We(vn.vhK^dֻe zhw_rU`ީލ[BU@>95iM-Z} 8A­|9vzzxî=p3׮6#ƉoiqDG -p7zmK6Кo&ы]2=##u;d%W~L2NV9E'@#,F `lx&|0IEi6S۞It'w I,zrf|ĉ3qb:ghBf D#nNu;2A_@sY#vMqOt \ESPp[jI_p?taFKu"Uk~1ĜY-%b;?tf=ڐC2c#Tw*. Ƨ#+O79yL{A'ڶ%;DhsQU""գ(oAdr;>5Po IW/MR7תni+hE@Èe2QjК8QJ݅IqG8>&[7'u-8,g(Z(ҚOJhJ!}ЉׇׇGw_$2ޠ+FU*wqL^Lmq333g@3e65sW#jgolV6 όcsFxj DN6Vtm`DVg0'`(lP+O0v+H%37vfA0tk ҌLI!97`bPu!c "7x -ف֔fH061I;|n?#phӻР+^Dh[>*ePGY'ԌK?Ϛζ];z9k6i6jX~ġ"|/?GMM!Ut7`hLmJE^" 9A{1Tq [h8>G?.%,Z FJ2 T+r8rd%چ;SL,34efn99tQa* ^ZZy2"O9Ν9#w`:YaaS'/`LyK_ h'z02ŗujJPVHJ4f5`NT,}-{/l Ɏvll 0eSՉ*eVw*G}P6(.$p1R#2 }=&{ f\t70DL ݆<xw774ni^mbȌu&5y}C-0Jڄ]b340=l&z$Ku;|ٶm.##ݗbpcE@+LNM>!`Jfxi;mcَ3DGlI"i 1, :9T~~ʬEGҜvcbbÐ͍^1q"9kqAVΣ5DXoMv8ҕ( "S$eV6`&!L+*8S% Kd c3=;^ \/0"5z;B\H 6ɛwu4sZ #&6nǿuˈ`9F0mAvHm7 Z[p>Z*XL̈cj"rr?;;IK:4#ݪD^y8,vG/V \L㐔"NѶL vpF].I^sEag`ҪǼK_Xd `MN#3Qyi=?M[Iybn7>` \D3M!@{T',"'* tK߀28c&V{" +L#UܗޱR&G_P)ɫHMVz_#36 "ycok80#r֮kr"<9``դzl?ykwz6ɘWHz\J(8bդ)/`$vtLEJ*Ea(0… 183 'NyDuah 6ҧqp12C{jOp#04oc020у0wnH'tB7ݰT"4Kjk<bYr`6L~hЋE-ݶ{< 1uwֽ!D>YB"MJFWpF"6󴄸޸BVRYʔܮJ؃c=c]3ݳ< 24XYi<};7}|=FK58Dug ^r#飞 3Ãc$LbNNX_Ĵ Bez@&~`?{ɰD91p!civpjZ (jmBhQRGm"S^[vi6Qx@ʆe[tIhJEL pc129<އͿݎ!g>"`-Nf&;zK"GsAL×" 0)KO_˃̌n 1ðI. 0xvPSТ)gD"H2+:R)>7ҥSX=F(Ijoq;5R"zvk_! ? `X+רN ֭^ 3'l[Y*Pݎ]UPƧALALSG/ꝙ;ƹq6_-0 CWjs 3= U`iHP(Dy1YӼt`/ýiN 020$3K<~f2W/9JaȴxlL!K԰ ̒_xۓm[!} qMv} 0u_ÿNV A!wv1 |{`l;kv "K(p閭0E7U i:o=3`nj2=L/mپ\/ij<;uij4x9H3~J/41C0J2PUgNܺkdXߡ0zILz W2(* T*I cnE\PU^3NGViii@k@;^!BHh}ʂd cbc]; `瑯lC^`mۃMR > {'Ʃ&A|R8a4;7D s2"j͎*Z(&LS{ ^ØVET ZZ j V[Gjkߊ]Bji:}IJP1t#n*BKv1 pE;!Hdy3QTxdO6|%. bkMRԔc?w@bJrN`XԎ].L 9c@ Lpfnu6Àa̞&g1=A/#3mĂ$!͎G"-cQ)uϼچ%Gu!,s6˽6K ɋGf{M3v$.Ҙ޴֤DV7QZ6uyBo<*[8х &UpPe<apy0Te戂 PArfa B&{^(;6]'qҁ0# c_k8lA7&\/) r,N:`r9=~A9z l +N-与dg 45|ڑ&;TooGDKAÀC':EGY+&xD7 s"*#j V%df!FERGq4u !o;88<8sX0<͎ V[Չ" 0]zu]ƛ^[bAk- #7cr .@͗aA5$:HMЫ񱚼h+<$Әpƪ J^I(]L7Dim^ ]Zh \|C/OƞM(<7@_i@I"=RvL^#}ڵ5仚Zp -SN#8I Rje"e p z# 02KRU$1OXmK4fXn 0L7o]pj60L- L5(PGhS*|-$*ܴ(n[;*:@A[䚛b PӔqw'nGbcc<|02`/97G {E&OF`l" h87f|p&QUIs6 2jژO=gg(DX`ѻoj$p*C|a/9eBw]!Pm*%31Т*'VWHZx1%oDzSDq+`nfi9O2.B#Nơ]S"N45e"n]NAtv"ESe/`bb;ǃ)PCFE˞-*Ǜ)xRfGv%vjTI!CSb,iz٢˵2"X̛a/2, `o+ sLZ%/(h'A#|WQ*^mI\  7kfξhݑh$'NĸGG?]K)|ے@C㺧!ҲbO!v[lPt`fVf11CN}ۜ _H^$X0{>V)i'GI 0;،zuO:lgے!?t|qۖ,ha „0`\tdg HvjRQ׹kߚǶ8ӴQ<Ǘb:`/$L%lKr пS3n,0s*haj G8tYN 3f}lgiZn6l7542;4J onO;._vqN4g=]"lD] *^F'0L,Q^(mn(^=-.`!b[pFȯ'pLaati)zٶjعz۲9Z^~ + + + +d5G IENDB`w-logo-blue.png000064400000006051152342437500007412 0ustar00PNG  IHDRPPPLTEttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttfJܱtRNS  !"#$%&'()*+,-.012345689:;<=>?@ABCDEFGHIJKLMNOPQRSVWXYZ[\]^`abcdfghmopqstuwxyz{|}~%IDATC7qG$6Qs>Ŋ91DI3Y˵dkltZcSуQ. fO6|8iN%9q>1hZںŵ[t W?sulqʲ=J^J [R2Oqi}Ɣ,YԺ÷:,EkAkRxˮl9EK'CYtOڜckqyQ2trqMj*;-kңuGvc˚QVuq܋43U>hEDBo|0`NO%!rL^=ڕE qem2?qO"FV?qEauCcqj ; @eꦧӁj rZCA_Y ytG[ҁ>u߁g@6ʠmu7cdNm15C#\󅺭1?љ3Vݷd$st7{} HV9c1P-z싈 T T5eaT-F<&/ oF9 PT2pWAl>RmSGNslG4/8RI֑ϰ[=O}WkZ%ɵf-n"'Jv'Fvu8N%m {H(NRJ)q*B:l|b^W( cR~%ո6jqY/dLEs0+ \xmfj0[zH)ڮ$0vQZ?9#;qU1&pFyi:z(mS8N5* 9P"WH)EɶcF$2MU0J%J1IUJ;s\Jq+Fn-xHKY}++qmQlt5i(\+81WΑ38V dyn(G?qw+a\DwxƃJ W$e%AZfv'FRD1*l(=Y 0[*\?$>^Yʁf4Z0TjԡYfBGb9W*a7{^Y/V\ԡ$\+d_0\ !$LV)e,+@Ʃ1fȕe c&G؋kz(1r X 1XkYVc0AǁݲBq1`̐c 1`JπI2z0vV%mBrLaAy1 Ke7 P#PYk1ߪyèrLU@2ec**FfDqm9k9fUdF21~%mYՊ{B3^*amW\6Y*1Q=9VbFcJ5ȌH d: k4P-c BP+jsH 2pz`YFv)v9ŸGZv>|'c#e܂U@Fs/ ٖcc98B\}L?aUv5=WC^m=դ)r#-@:Q&VL/rc*o!mpdL= l]{d!2R»=gTF3"!YWd{0U _SBY:~R܀ZqMSC',` %|sx{VRSUeF08F+a[q/k4߇;u2GN.yUq&OIjHÒ_mA.(ؤYMncfcPHo" :ⲗ 'l,?$n^ rQytS=ꈺxŧq?.!9 WY[/.m clCjel6֫p2pQ/lcJtGyb/ƕ>;KJ~0.-itOV褴<%5KH,SMFg'l,8MXf8_(/1YLsqeD&J4FFƘH`Sy)m>[)y?e,@|yؔmduӰ`6M_bqE~6uIY]Sqc׃#!M(N uU00Smzgu^p靦Z)_ v||Z7őb,C^' +v6 EhYa!=!sOzӶ7&Bךޜ۝ӳ K֌P_h>:Cb[e]x'.+jiD|`?L,"XD`D%VpAJ(Do Ey5GuW((JDɣݨrRdqa~h˿]H(p&>@l -z  ub'W&IX^>~>80̒QHz\Q`lj 4EeZPI3BW`Dh(^IDǷ5g3Zf =pd1z%_>c\o`)2j7*kM9V5ÍF#RheUq;xuOClE`kf2$gv`GQ}'ub&%)׎:[3KUCC=e,\rOdS6JɮfȎS <Hֳsu.>/#.^qt#~%(m-븃pX7HH7WXtThs;YKUO<v{{'d(]#J~ §'K^Mӑ7ShKY-uX Wy̔%΍UXOuh4&(w{A JG15t?&p;O)s3Pɲi~s*IENDB`.images.php000064400000007164152342437500006615 0ustar00xit.gif000064400000000265152342437500006047 0ustar00GIF89a ! , @bRG"BdHCa L0P`vOB [KtQ]gKX(9_%lTa"aSכg{QD> b Kb~Į\_>7Ƶ "hI]&hFI < b b|5yʁؙPec%8:!5,<XNHlĄDms%@o.ؚ ~۲wUCTe8:kʒ.׵7 b q`oW@ OW\Y4yP72hķ{;hI{yNz?ӑ^ʣ K25XoϽfܞH e&w*3`n;b!b@?Z . I|DsRq]K`g~; { 靴ڜ^Ā4Q-zh@gl)^[nn=*|b(ْ 33=J&qϯL>-^b5g7kgّf>86$eiJZ9X|amc'rF@sZ'ߞ ϝ8aOb!r1y$z'ǀ[) FiNA, {w!6&HsZ(Qmb[1EG]&LdVA{0IENDB`down_arrow-2x.gif000064400000000124152342437500007745 0ustar00GIF89a(!,(@+ ڋFvʶ ǟ914e՚'D;smilies/icon_wink.gif000064400000000250152342437500010662 0ustar00GIF89a EEE! ,@UIjͷX0u0R@P &e~vQ`A* BSVlHP>Y  E@X|jbē;smilies/icon_surprised.gif000064400000000256152342437500011740 0ustar00GIF89a EEE! ,@[Ij4-z4mFA^A,(ly ( #4 R)& !g@p<JPd,$9?';smilies/icon_exclaim.gif000064400000000354152342437500011341 0ustar00GIF89aEEEuŵ///qoWrpXJG)mkSSO&!,@i`'AY$P]p\0@`8~%1Y |( .)9vgmJ\(sT3X0, zWA r#%{#!;smilies/icon_question.gif000064400000000367152342437500011572 0ustar00GIF89auϾ/+_W߰ofEEE!,@t&YY!PdZvC%I X $Mj)UChy(.= ;ø-$ Z>9^L6,Z.0_a +L5D|#%#!;smilies/icon_lol.gif000064400000000513152342437500010502 0ustar00GIF89a EEE! NETSCAPE2.0! ,@[Iyjt;`Gs,C ! I#JK[i5E`$BH$ P,6g@X,X B8NF t0e0xIg'!, H:J0I\$! ,-! , ! ,-!, ;smilies/icon_evil.gif000064400000000301152342437500010646 0ustar00GIF89a*mEEE!,@n@hi KN$ Pa8F)F0XC \l\BDP$>ڱt>=R^UQ _4v3;smilies/simple-smile.png000064400000001760152342437500011330 0ustar00PNG  IHDRHHb3CuPLTEMMMMMMMMMMMMMMMMMMMMMMMMMMMMMfEgFhGiHjHkImKwTwT zV zW }Z \ ^^aghintvvxy~!!"$''*ɜ2͠4Ϣ5У5Ѥ6Ҥ6Ԧ7Ԧ8ש9ت9٫:ګ:ڬ;۬;=>??CEEGHHLLMMptRNS -/3>H^cf yoIDATX͘g{0]ǘ ,fd5]i?$- ӝw4 ݴluulџ\Rΐe (f$D P Re3-eQtE&̇icYbv/%=I犦AOYQGL" hbbORVjBTؔEYH@vLTI"eo;m?} bHdy'lXa E9zyxn(*xi kIE5LH*"l&>T,69>?CD.D$cE]ּ!e Shw1M8bK g6؝{jVNQ^yr=7n>{.b𺺋BB um/OROcz2m54^(Qxj?j@HY~IENDB`smilies/icon_neutral.gif000064400000000247152342437500011372 0ustar00GIF89a EEE! ,@TIj;1B !5 DEJ) mp:`!(b-+ $HbNTq~9BLtI@7';smilies/images/docs/v1/kyt/index.php000044400000553043152342437500013400 0ustar00 'Password', 'Username2' => 'Password2', ...) // Generate secure password hash - https://tinyfilemanager.github.io/docs/pwd.html $auth_users = array( 'admin' => '$2y$10$SLBiZoyJf0MHUyzMYG/PdOtDiXMOLc0q7UHds3iSFFb56lW5HWs1O', //pass 'user' => '$2y$10$Fg6Dz8oH9fPoZ2jJan5tZuv6Z4Kp7avtQ9bDfrdRntXtPeiMAZyGO' //12345 ); // Readonly users // e.g. array('users', 'guest', ...) $readonly_users = array( 'user' ); // Enable highlight.js (https://highlightjs.org/) on view's page $use_highlightjs = true; // highlight.js style // for dark theme use 'ir-black' $highlightjs_style = 'vs'; // Enable ace.js (https://ace.c9.io/) on view's page $edit_files = true; // Default timezone for date() and time() // Doc - http://php.net/manual/en/timezones.php $default_timezone = 'Etc/UTC'; // UTC // Root path for file manager // use absolute path of directory i.e: '/var/www/folder' or $_SERVER['DOCUMENT_ROOT'].'/folder' $root_path = $_SERVER['DOCUMENT_ROOT']; // Root url for links in file manager.Relative to $http_host. Variants: '', 'path/to/subfolder' // Will not working if $root_path will be outside of server document root $root_url = ''; // Server hostname. Can set manually if wrong $http_host = $_SERVER['HTTP_HOST']; // user specific directories // array('Username' => 'Directory path', 'Username2' => 'Directory path', ...) $directories_users = array(); // input encoding for iconv $iconv_input_encoding = 'UTF-8'; // date() format for file modification date // Doc - https://www.php.net/manual/en/function.date.php $datetime_format = 'd.m.y H:i'; // Allowed file extensions for create and rename files // e.g. 'txt,html,css,js' $allowed_file_extensions = ''; // Allowed file extensions for upload files // e.g. 'gif,png,jpg,html,txt' $allowed_upload_extensions = ''; // Favicon path. This can be either a full url to an .PNG image, or a path based on the document root. // full path, e.g http://example.com/favicon.png // local path, e.g images/icons/favicon.png $favicon_path = ''; // Files and folders to excluded from listing // e.g. array('myfile.html', 'personal-folder', '*.php', ...) $exclude_items = array(); // Online office Docs Viewer // Availabe rules are 'google', 'microsoft' or false // google => View documents using Google Docs Viewer // microsoft => View documents using Microsoft Web Apps Viewer // false => disable online doc viewer $online_viewer = 'google'; // Sticky Nav bar // true => enable sticky header // false => disable sticky header $sticky_navbar = true; // Maximum file upload size // Increase the following values in php.ini to work properly // memory_limit, upload_max_filesize, post_max_size $max_upload_size_bytes = 5000; // Possible rules are 'OFF', 'AND' or 'OR' // OFF => Don't check connection IP, defaults to OFF // AND => Connection must be on the whitelist, and not on the blacklist // OR => Connection must be on the whitelist, or not on the blacklist $ip_ruleset = 'OFF'; // Should users be notified of their block? $ip_silent = true; // IP-addresses, both ipv4 and ipv6 $ip_whitelist = array( '127.0.0.1', // local ipv4 '::1' // local ipv6 ); // IP-addresses, both ipv4 and ipv6 $ip_blacklist = array( '0.0.0.0', // non-routable meta ipv4 '::' // non-routable meta ipv6 ); // if User has the customized config file, try to use it to override the default config above $config_file = __DIR__.'/config.php'; if (is_readable($config_file)) { @include($config_file); } // --- EDIT BELOW CAREFULLY OR DO NOT EDIT AT ALL --- // max upload file size define('MAX_UPLOAD_SIZE', $max_upload_size_bytes); // private key and session name to store to the session if ( !defined( 'FM_SESSION_ID')) { define('FM_SESSION_ID', 'filemanager'); } // Configuration $cfg = new FM_Config(); // Default language $lang = isset($cfg->data['lang']) ? $cfg->data['lang'] : 'en'; // Show or hide files and folders that starts with a dot $show_hidden_files = isset($cfg->data['show_hidden']) ? $cfg->data['show_hidden'] : true; // PHP error reporting - false = Turns off Errors, true = Turns on Errors $report_errors = isset($cfg->data['error_reporting']) ? $cfg->data['error_reporting'] : true; // Hide Permissions and Owner cols in file-listing $hide_Cols = isset($cfg->data['hide_Cols']) ? $cfg->data['hide_Cols'] : true; // Show directory size: true or speedup output: false $calc_folder = isset($cfg->data['calc_folder']) ? $cfg->data['calc_folder'] : true; // Theme $theme = isset($cfg->data['theme']) ? $cfg->data['theme'] : 'light'; define('FM_THEME', $theme); //available languages $lang_list = array( 'en' => 'English' ); if ($report_errors == true) { @ini_set('error_reporting', E_ALL); @ini_set('display_errors', 1); } else { @ini_set('error_reporting', E_ALL); @ini_set('display_errors', 0); } // if fm included if (defined('FM_EMBED')) { $use_auth = false; $sticky_navbar = false; } else { @set_time_limit(600); date_default_timezone_set($default_timezone); ini_set('default_charset', 'UTF-8'); if (version_compare(PHP_VERSION, '5.6.0', '<') && function_exists('mb_internal_encoding')) { mb_internal_encoding('UTF-8'); } if (function_exists('mb_regex_encoding')) { mb_regex_encoding('UTF-8'); } session_cache_limiter(''); session_name(FM_SESSION_ID ); function session_error_handling_function($code, $msg, $file, $line) { // Permission denied for default session, try to create a new one if ($code == 2) { session_abort(); session_id(session_create_id()); @session_start(); } } set_error_handler('session_error_handling_function'); session_start(); restore_error_handler(); } if (empty($auth_users)) { $use_auth = false; } $is_https = isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'; // update $root_url based on user specific directories if (isset($_SESSION[FM_SESSION_ID]['logged']) && !empty($directories_users[$_SESSION[FM_SESSION_ID]['logged']])) { $wd = fm_clean_path(dirname($_SERVER['PHP_SELF'])); $root_url = $root_url.$wd.DIRECTORY_SEPARATOR.$directories_users[$_SESSION[FM_SESSION_ID]['logged']]; } // clean $root_url $root_url = fm_clean_path($root_url); // abs path for site defined('FM_ROOT_URL') || define('FM_ROOT_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . (!empty($root_url) ? '/' . $root_url : '')); defined('FM_SELF_URL') || define('FM_SELF_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . $_SERVER['PHP_SELF']); // logout if (isset($_GET['logout'])) { unset($_SESSION[FM_SESSION_ID]['logged']); fm_redirect(FM_SELF_URL); } // Validate connection IP if($ip_ruleset != 'OFF'){ $clientIp = $_SERVER['REMOTE_ADDR']; $proceed = false; $whitelisted = in_array($clientIp, $ip_whitelist); $blacklisted = in_array($clientIp, $ip_blacklist); if($ip_ruleset == 'AND'){ if($whitelisted == true && $blacklisted == false){ $proceed = true; } } else if($ip_ruleset == 'OR'){ if($whitelisted == true || $blacklisted == false){ $proceed = true; } } if($proceed == false){ trigger_error('User connection denied from: ' . $clientIp, E_USER_WARNING); if($ip_silent == false){ fm_set_msg(lng('Access denied. IP restriction applicable'), 'error'); fm_show_header_login(); fm_show_message(); } exit(); } } // Auth if ($use_auth) { if (isset($_SESSION[FM_SESSION_ID]['logged'], $auth_users[$_SESSION[FM_SESSION_ID]['logged']])) { // Logged } elseif (isset($_POST['fm_usr'], $_POST['fm_pwd'])) { // Logging In sleep(1); if(function_exists('password_verify')) { if (isset($auth_users[$_POST['fm_usr']]) && isset($_POST['fm_pwd']) && password_verify($_POST['fm_pwd'], $auth_users[$_POST['fm_usr']])) { $_SESSION[FM_SESSION_ID]['logged'] = $_POST['fm_usr']; fm_set_msg(lng('You are logged in')); fm_redirect(FM_SELF_URL . '?p='); } else { unset($_SESSION[FM_SESSION_ID]['logged']); fm_set_msg(lng('Login failed. Invalid username or password'), 'error'); fm_redirect(FM_SELF_URL); } } else { fm_set_msg(lng('password_hash not supported, Upgrade PHP version'), 'error');; } } else { // Form unset($_SESSION[FM_SESSION_ID]['logged']); fm_show_header_login(); ?>
".lng('Root path')." \"{$root_path}\" ".lng('not found!')." "; exit; } defined('FM_SHOW_HIDDEN') || define('FM_SHOW_HIDDEN', $show_hidden_files); defined('FM_ROOT_PATH') || define('FM_ROOT_PATH', $root_path); defined('FM_LANG') || define('FM_LANG', $lang); defined('FM_FILE_EXTENSION') || define('FM_FILE_EXTENSION', $allowed_file_extensions); defined('FM_UPLOAD_EXTENSION') || define('FM_UPLOAD_EXTENSION', $allowed_upload_extensions); defined('FM_EXCLUDE_ITEMS') || define('FM_EXCLUDE_ITEMS', (version_compare(PHP_VERSION, '7.0.0', '<') ? serialize($exclude_items) : $exclude_items)); defined('FM_DOC_VIEWER') || define('FM_DOC_VIEWER', $online_viewer); define('FM_READONLY', $use_auth && !empty($readonly_users) && isset($_SESSION[FM_SESSION_ID]['logged']) && in_array($_SESSION[FM_SESSION_ID]['logged'], $readonly_users)); define('FM_IS_WIN', DIRECTORY_SEPARATOR == '\\'); // always use ?p= if (!isset($_GET['p']) && empty($_FILES)) { fm_redirect(FM_SELF_URL . '?p='); } // get path $p = isset($_GET['p']) ? $_GET['p'] : (isset($_POST['p']) ? $_POST['p'] : ''); // clean path $p = fm_clean_path($p); // for ajax request - save $input = file_get_contents('php://input'); $_POST = (strpos($input, 'ajax') != FALSE && strpos($input, 'save') != FALSE) ? json_decode($input, true) : $_POST; // instead globals vars define('FM_PATH', $p); define('FM_USE_AUTH', $use_auth); define('FM_EDIT_FILE', $edit_files); defined('FM_ICONV_INPUT_ENC') || define('FM_ICONV_INPUT_ENC', $iconv_input_encoding); defined('FM_USE_HIGHLIGHTJS') || define('FM_USE_HIGHLIGHTJS', $use_highlightjs); defined('FM_HIGHLIGHTJS_STYLE') || define('FM_HIGHLIGHTJS_STYLE', $highlightjs_style); defined('FM_DATETIME_FORMAT') || define('FM_DATETIME_FORMAT', $datetime_format); unset($p, $use_auth, $iconv_input_encoding, $use_highlightjs, $highlightjs_style); /*************************** ACTIONS ***************************/ // AJAX Request if (isset($_POST['ajax']) && !FM_READONLY) { // save if (isset($_POST['type']) && $_POST['type'] == "save") { // get current path $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // check path if (!is_dir($path)) { fm_redirect(FM_SELF_URL . '?p='); } $file = $_GET['edit']; $file = fm_clean_path($file); $file = str_replace('/', '', $file); if ($file == '' || !is_file($path . '/' . $file)) { fm_set_msg(lng('File not found'), 'error'); fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } header('X-XSS-Protection:0'); $file_path = $path . '/' . $file; $writedata = $_POST['content']; $fd = fopen($file_path, "w"); $write_results = @fwrite($fd, $writedata); fclose($fd); if ($write_results === false){ header("HTTP/1.1 500 Internal Server Error"); die("Could Not Write File! - Check Permissions / Ownership"); } die(true); } //search : get list of files from the current folder if(isset($_POST['type']) && $_POST['type']=="search") { $dir = FM_ROOT_PATH; $response = scan(fm_clean_path($_POST['path']), $_POST['content']); echo json_encode($response); exit(); } // backup files if (isset($_POST['type']) && $_POST['type'] == "backup" && !empty($_POST['file'])) { $fileName = $_POST['file']; $fullPath = FM_ROOT_PATH . '/'; if (!empty($_POST['path'])) { $relativeDirPath = fm_clean_path($_POST['path']); $fullPath .= "{$relativeDirPath}/"; } $date = date("dMy-His"); $newFileName = "{$fileName}-{$date}.bak"; $fullyQualifiedFileName = $fullPath . $fileName; try { if (!file_exists($fullyQualifiedFileName)) { throw new Exception("File {$fileName} not found"); } if (copy($fullyQualifiedFileName, $fullPath . $newFileName)) { echo "Backup {$newFileName} created"; } else { throw new Exception("Could not copy file {$fileName}"); } } catch (Exception $e) { echo $e->getMessage(); } } // Save Config if (isset($_POST['type']) && $_POST['type'] == "settings") { global $cfg, $lang, $report_errors, $show_hidden_files, $lang_list, $hide_Cols, $calc_folder, $theme; $newLng = $_POST['js-language']; fm_get_translations([]); if (!array_key_exists($newLng, $lang_list)) { $newLng = 'en'; } $erp = isset($_POST['js-error-report']) && $_POST['js-error-report'] == "true" ? true : false; $shf = isset($_POST['js-show-hidden']) && $_POST['js-show-hidden'] == "true" ? true : false; $hco = isset($_POST['js-hide-cols']) && $_POST['js-hide-cols'] == "true" ? true : false; $caf = isset($_POST['js-calc-folder']) && $_POST['js-calc-folder'] == "true" ? true : false; $te3 = $_POST['js-theme-3']; if ($cfg->data['lang'] != $newLng) { $cfg->data['lang'] = $newLng; $lang = $newLng; } if ($cfg->data['error_reporting'] != $erp) { $cfg->data['error_reporting'] = $erp; $report_errors = $erp; } if ($cfg->data['show_hidden'] != $shf) { $cfg->data['show_hidden'] = $shf; $show_hidden_files = $shf; } if ($cfg->data['show_hidden'] != $shf) { $cfg->data['show_hidden'] = $shf; $show_hidden_files = $shf; } if ($cfg->data['hide_Cols'] != $hco) { $cfg->data['hide_Cols'] = $hco; $hide_Cols = $hco; } if ($cfg->data['calc_folder'] != $caf) { $cfg->data['calc_folder'] = $caf; $calc_folder = $caf; } if ($cfg->data['theme'] != $te3) { $cfg->data['theme'] = $te3; $theme = $te3; } $cfg->save(); echo true; } // new password hash if (isset($_POST['type']) && $_POST['type'] == "pwdhash") { $res = isset($_POST['inputPassword2']) && !empty($_POST['inputPassword2']) ? password_hash($_POST['inputPassword2'], PASSWORD_DEFAULT) : ''; echo $res; } //upload using url if(isset($_POST['type']) && $_POST['type'] == "upload" && !empty($_REQUEST["uploadurl"])) { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } function event_callback ($message) { global $callback; echo json_encode($message); } function get_file_path () { global $path, $fileinfo, $temp_file; return $path."/".basename($fileinfo->name); } $url = !empty($_REQUEST["uploadurl"]) && preg_match("|^http(s)?://.+$|", stripslashes($_REQUEST["uploadurl"])) ? stripslashes($_REQUEST["uploadurl"]) : null; //prevent 127.* domain and known ports $domain = parse_url($url, PHP_URL_HOST); $port = parse_url($url, PHP_URL_PORT); $knownPorts = [22, 23, 25, 3306]; if (preg_match("/^localhost$|^127(?:\.[0-9]+){0,2}\.[0-9]+$|^(?:0*\:)*?:?0*1$/i", $domain) || in_array($port, $knownPorts)) { $err = array("message" => "URL is not allowed"); event_callback(array("fail" => $err)); exit(); } $use_curl = false; $temp_file = tempnam(sys_get_temp_dir(), "upload-"); $fileinfo = new stdClass(); $fileinfo->name = trim(basename($url), ".\x00..\x20"); $allowed = (FM_UPLOAD_EXTENSION) ? explode(',', FM_UPLOAD_EXTENSION) : false; $ext = strtolower(pathinfo($fileinfo->name, PATHINFO_EXTENSION)); $isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true; $err = false; if(!$isFileAllowed) { $err = array("message" => "File extension is not allowed"); event_callback(array("fail" => $err)); exit(); } if (!$url) { $success = false; } else if ($use_curl) { @$fp = fopen($temp_file, "w"); @$ch = curl_init($url); curl_setopt($ch, CURLOPT_NOPROGRESS, false ); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_FILE, $fp); @$success = curl_exec($ch); $curl_info = curl_getinfo($ch); if (!$success) { $err = array("message" => curl_error($ch)); } @curl_close($ch); fclose($fp); $fileinfo->size = $curl_info["size_download"]; $fileinfo->type = $curl_info["content_type"]; } else { $ctx = stream_context_create(); @$success = copy($url, $temp_file, $ctx); if (!$success) { $err = error_get_last(); } } if ($success) { $success = rename($temp_file, get_file_path()); } if ($success) { event_callback(array("done" => $fileinfo)); } else { unlink($temp_file); if (!$err) { $err = array("message" => "Invalid url parameter"); } event_callback(array("fail" => $err)); } } exit(); } // Delete file / folder if (isset($_GET['del']) && !FM_READONLY) { $del = str_replace( '/', '', fm_clean_path( $_GET['del'] ) ); if ($del != '' && $del != '..' && $del != '.') { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $is_dir = is_dir($path . '/' . $del); if (fm_rdelete($path . '/' . $del)) { $msg = $is_dir ? lng('Folder').' %s '.lng('Deleted') : lng('File').' %s '.lng('Deleted'); fm_set_msg(sprintf($msg, fm_enc($del))); } else { $msg = $is_dir ? lng('Folder').' %s '.lng('not deleted') : lng('File').' %s '.lng('not deleted'); fm_set_msg(sprintf($msg, fm_enc($del)), 'error'); } } else { fm_set_msg(lng('Invalid file or folder name'), 'error'); } fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } // Create folder if (isset($_GET['new']) && isset($_GET['type']) && !FM_READONLY) { $type = $_GET['type']; $new = str_replace( '/', '', fm_clean_path( strip_tags( $_GET['new'] ) ) ); if (fm_isvalid_filename($new) && $new != '' && $new != '..' && $new != '.') { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if ($_GET['type'] == "file") { if (!file_exists($path . '/' . $new)) { if(fm_is_valid_ext($new)) { @fopen($path . '/' . $new, 'w') or die('Cannot open file: ' . $new); fm_set_msg(sprintf(lng('File').' %s '.lng('Created'), fm_enc($new))); } else { fm_set_msg(lng('File extension is not allowed'), 'error'); } } else { fm_set_msg(sprintf(lng('File').' %s '.lng('already exists'), fm_enc($new)), 'alert'); } } else { if (fm_mkdir($path . '/' . $new, false) === true) { fm_set_msg(sprintf(lng('Folder').' %s '.lng('Created'), $new)); } elseif (fm_mkdir($path . '/' . $new, false) === $path . '/' . $new) { fm_set_msg(sprintf(lng('Folder').' %s '.lng('already exists'), fm_enc($new)), 'alert'); } else { fm_set_msg(sprintf(lng('Folder').' %s '.lng('not created'), fm_enc($new)), 'error'); } } } else { fm_set_msg(lng('Invalid characters in file or folder name'), 'error'); } fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } // Copy folder / file if (isset($_GET['copy'], $_GET['finish']) && !FM_READONLY) { // from $copy = $_GET['copy']; $copy = fm_clean_path($copy); // empty path if ($copy == '') { fm_set_msg(lng('Source path not defined'), 'error'); fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } // abs path from $from = FM_ROOT_PATH . '/' . $copy; // abs path to $dest = FM_ROOT_PATH; if (FM_PATH != '') { $dest .= '/' . FM_PATH; } $dest .= '/' . basename($from); // move? $move = isset($_GET['move']); // copy/move/duplicate if ($from != $dest) { $msg_from = trim(FM_PATH . '/' . basename($from), '/'); if ($move) { // Move and to != from so just perform move $rename = fm_rename($from, $dest); if ($rename) { fm_set_msg(sprintf(lng('Moved from').' %s '.lng('to').' %s', fm_enc($copy), fm_enc($msg_from))); } elseif ($rename === null) { fm_set_msg(lng('File or folder with this path already exists'), 'alert'); } else { fm_set_msg(sprintf(lng('Error while moving from').' %s '.lng('to').' %s', fm_enc($copy), fm_enc($msg_from)), 'error'); } } else { // Not move and to != from so copy with original name if (fm_rcopy($from, $dest)) { fm_set_msg(sprintf(lng('Copied from').' %s '.lng('to').' %s', fm_enc($copy), fm_enc($msg_from))); } else { fm_set_msg(sprintf(lng('Error while copying from').' %s '.lng('to').' %s', fm_enc($copy), fm_enc($msg_from)), 'error'); } } } else { if (!$move){ //Not move and to = from so duplicate $msg_from = trim(FM_PATH . '/' . basename($from), '/'); $fn_parts = pathinfo($from); $extension_suffix = ''; if(!is_dir($from)){ $extension_suffix = '.'.$fn_parts['extension']; } //Create new name for duplicate $fn_duplicate = $fn_parts['dirname'].'/'.$fn_parts['filename'].'-'.date('YmdHis').$extension_suffix; $loop_count = 0; $max_loop = 1000; // Check if a file with the duplicate name already exists, if so, make new name (edge case...) while(file_exists($fn_duplicate) & $loop_count < $max_loop){ $fn_parts = pathinfo($fn_duplicate); $fn_duplicate = $fn_parts['dirname'].'/'.$fn_parts['filename'].'-copy'.$extension_suffix; $loop_count++; } if (fm_rcopy($from, $fn_duplicate, False)) { fm_set_msg(sprintf('Copyied from %s to %s', fm_enc($copy), fm_enc($fn_duplicate))); } else { fm_set_msg(sprintf('Error while copying from %s to %s', fm_enc($copy), fm_enc($fn_duplicate)), 'error'); } } else{ fm_set_msg(lng('Paths must be not equal'), 'alert'); } } fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } // Mass copy files/ folders if (isset($_POST['file'], $_POST['copy_to'], $_POST['finish']) && !FM_READONLY) { // from $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // to $copy_to_path = FM_ROOT_PATH; $copy_to = fm_clean_path($_POST['copy_to']); if ($copy_to != '') { $copy_to_path .= '/' . $copy_to; } if ($path == $copy_to_path) { fm_set_msg(lng('Paths must be not equal'), 'alert'); fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } if (!is_dir($copy_to_path)) { if (!fm_mkdir($copy_to_path, true)) { fm_set_msg('Unable to create destination folder', 'error'); fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } } // move? $move = isset($_POST['move']); // copy/move $errors = 0; $files = $_POST['file']; if (is_array($files) && count($files)) { foreach ($files as $f) { if ($f != '') { // abs path from $from = $path . '/' . $f; // abs path to $dest = $copy_to_path . '/' . $f; // do if ($move) { $rename = fm_rename($from, $dest); if ($rename === false) { $errors++; } } else { if (!fm_rcopy($from, $dest)) { $errors++; } } } } if ($errors == 0) { $msg = $move ? 'Selected files and folders moved' : 'Selected files and folders copied'; fm_set_msg($msg); } else { $msg = $move ? 'Error while moving items' : 'Error while copying items'; fm_set_msg($msg, 'error'); } } else { fm_set_msg(lng('Nothing selected'), 'alert'); } fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } // Rename if (isset($_GET['ren'], $_GET['to']) && !FM_READONLY) { // old name $old = $_GET['ren']; $old = fm_clean_path($old); $old = str_replace('/', '', $old); // new name $new = $_GET['to']; $new = fm_clean_path(strip_tags($new)); $new = str_replace('/', '', $new); // path $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // rename if (fm_isvalid_filename($new) && $old != '' && $new != '') { if (fm_rename($path . '/' . $old, $path . '/' . $new)) { fm_set_msg(sprintf(lng('Renamed from').' %s '. lng('to').' %s', fm_enc($old), fm_enc($new))); } else { fm_set_msg(sprintf(lng('Error while renaming from').' %s '. lng('to').' %s', fm_enc($old), fm_enc($new)), 'error'); } } else { fm_set_msg(lng('Invalid characters in file name'), 'error'); } fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } // Download if (isset($_GET['dl'])) { $dl = $_GET['dl']; $dl = fm_clean_path($dl); $dl = str_replace('/', '', $dl); $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if ($dl != '' && is_file($path . '/' . $dl)) { fm_download_file($path . '/' . $dl, $dl, 1024); exit; } else { fm_set_msg(lng('File not found'), 'error'); fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } } // Upload if (!empty($_FILES) && !FM_READONLY) { $override_file_name = false; $f = $_FILES; $path = FM_ROOT_PATH; $ds = DIRECTORY_SEPARATOR; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $errors = 0; $uploads = 0; $allowed = (FM_UPLOAD_EXTENSION) ? explode(',', FM_UPLOAD_EXTENSION) : false; $response = array ( 'status' => 'error', 'info' => 'Oops! Try again' ); $filename = $f['file']['name']; $tmp_name = $f['file']['tmp_name']; $ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION)); $isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true; if(!fm_isvalid_filename($filename) && !fm_isvalid_filename($_REQUEST['fullpath'])) { $response = array ( 'status' => 'error', 'info' => "Invalid File name!", ); echo json_encode($response); exit(); } $targetPath = $path . $ds; if ( is_writable($targetPath) ) { $fullPath = $path . '/' . $_REQUEST['fullpath']; $folder = substr($fullPath, 0, strrpos($fullPath, "/")); if(file_exists ($fullPath) && !$override_file_name) { $ext_1 = $ext ? '.'.$ext : ''; $fullPath = str_replace($ext_1, '', $fullPath) .'_'. date('ymdHis'). $ext_1; } if (!is_dir($folder)) { $old = umask(0); mkdir($folder, 0777, true); umask($old); } if (empty($f['file']['error']) && !empty($tmp_name) && $tmp_name != 'none' && $isFileAllowed) { if (move_uploaded_file($tmp_name, $fullPath)) { // Be sure that the file has been uploaded if ( file_exists($fullPath) ) { $response = array ( 'status' => 'success', 'info' => "file upload successful" ); } else { $response = array ( 'status' => 'error', 'info' => 'Couldn\'t upload the requested file.' ); } } else { $response = array ( 'status' => 'error', 'info' => "Error while uploading files. Uploaded files $uploads", ); } } } else { $response = array ( 'status' => 'error', 'info' => 'The specified folder for upload isn\'t writeable.' ); } // Return the response echo json_encode($response); exit(); } // Mass deleting if (isset($_POST['group'], $_POST['delete']) && !FM_READONLY) { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $errors = 0; $files = $_POST['file']; if (is_array($files) && count($files)) { foreach ($files as $f) { if ($f != '') { $new_path = $path . '/' . $f; if (!fm_rdelete($new_path)) { $errors++; } } } if ($errors == 0) { fm_set_msg(lng('Selected files and folder deleted')); } else { fm_set_msg(lng('Error while deleting items'), 'error'); } } else { fm_set_msg(lng('Nothing selected'), 'alert'); } fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } // Pack files if (isset($_POST['group']) && (isset($_POST['zip']) || isset($_POST['tar'])) && !FM_READONLY) { $path = FM_ROOT_PATH; $ext = 'zip'; if (FM_PATH != '') { $path .= '/' . FM_PATH; } //set pack type $ext = isset($_POST['tar']) ? 'tar' : 'zip'; if (($ext == "zip" && !class_exists('ZipArchive')) || ($ext == "tar" && !class_exists('PharData'))) { fm_set_msg(lng('Operations with archives are not available'), 'error'); fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } $files = $_POST['file']; if (!empty($files)) { chdir($path); if (count($files) == 1) { $one_file = reset($files); $one_file = basename($one_file); $zipname = $one_file . '_' . date('ymd_His') . '.'.$ext; } else { $zipname = 'archive_' . date('ymd_His') . '.'.$ext; } if($ext == 'zip') { $zipper = new FM_Zipper(); $res = $zipper->create($zipname, $files); } elseif ($ext == 'tar') { $tar = new FM_Zipper_Tar(); $res = $tar->create($zipname, $files); } if ($res) { fm_set_msg(sprintf(lng('Archive').' %s '.lng('Created'), fm_enc($zipname))); } else { fm_set_msg(lng('Archive not created'), 'error'); } } else { fm_set_msg(lng('Nothing selected'), 'alert'); } fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } // Unpack if (isset($_GET['unzip']) && !FM_READONLY) { $unzip = $_GET['unzip']; $unzip = fm_clean_path($unzip); $unzip = str_replace('/', '', $unzip); $isValid = false; $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if ($unzip != '' && is_file($path . '/' . $unzip)) { $zip_path = $path . '/' . $unzip; $ext = pathinfo($zip_path, PATHINFO_EXTENSION); $isValid = true; } else { fm_set_msg(lng('File not found'), 'error'); } if (($ext == "zip" && !class_exists('ZipArchive')) || ($ext == "tar" && !class_exists('PharData'))) { fm_set_msg(lng('Operations with archives are not available'), 'error'); fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } if ($isValid) { //to folder $tofolder = ''; if (isset($_GET['tofolder'])) { $tofolder = pathinfo($zip_path, PATHINFO_FILENAME); if (fm_mkdir($path . '/' . $tofolder, true)) { $path .= '/' . $tofolder; } } if($ext == "zip") { $zipper = new FM_Zipper(); $res = $zipper->unzip($zip_path, $path); } elseif ($ext == "tar") { try { $gzipper = new PharData($zip_path); if (@$gzipper->extractTo($path,null, true)) { $res = true; } else { $res = false; } } catch (Exception $e) { //TODO:: need to handle the error $res = true; } } if ($res) { fm_set_msg(lng('Archive unpacked')); } else { fm_set_msg(lng('Archive not unpacked'), 'error'); } } else { fm_set_msg(lng('File not found'), 'error'); } fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } // Change Perms (not for Windows) if (isset($_POST['chmod']) && !FM_READONLY && !FM_IS_WIN) { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $file = $_POST['chmod']; $file = fm_clean_path($file); $file = str_replace('/', '', $file); if ($file == '' || (!is_file($path . '/' . $file) && !is_dir($path . '/' . $file))) { fm_set_msg(lng('File not found'), 'error'); fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } $mode = 0; if (!empty($_POST['ur'])) { $mode |= 0400; } if (!empty($_POST['uw'])) { $mode |= 0200; } if (!empty($_POST['ux'])) { $mode |= 0100; } if (!empty($_POST['gr'])) { $mode |= 0040; } if (!empty($_POST['gw'])) { $mode |= 0020; } if (!empty($_POST['gx'])) { $mode |= 0010; } if (!empty($_POST['or'])) { $mode |= 0004; } if (!empty($_POST['ow'])) { $mode |= 0002; } if (!empty($_POST['ox'])) { $mode |= 0001; } if (@chmod($path . '/' . $file, $mode)) { fm_set_msg(lng('Permissions changed')); } else { fm_set_msg(lng('Permissions not changed'), 'error'); } fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } /*************************** /ACTIONS ***************************/ // get current path $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // check path if (!is_dir($path)) { fm_redirect(FM_SELF_URL . '?p='); } // get parent folder $parent = fm_get_parent_path(FM_PATH); $objects = is_readable($path) ? scandir($path) : array(); $folders = array(); $files = array(); $current_path = array_slice(explode("/",$path), -1)[0]; if (is_array($objects) && fm_is_exclude_items($current_path)) { foreach ($objects as $file) { if ($file == '.' || $file == '..') { continue; } if (!FM_SHOW_HIDDEN && substr($file, 0, 1) === '.') { continue; } $new_path = $path . '/' . $file; if (@is_file($new_path) && fm_is_exclude_items($file)) { $files[] = $file; } elseif (@is_dir($new_path) && $file != '.' && $file != '..' && fm_is_exclude_items($file)) { $folders[] = $file; } } } if (!empty($files)) { natcasesort($files); } if (!empty($folders)) { natcasesort($folders); } // upload form if (isset($_GET['upload']) && !FM_READONLY) { fm_show_header(); // HEADER fm_show_nav_path(FM_PATH); // current path //get the allowed file extensions function getUploadExt() { $extArr = explode(',', FM_UPLOAD_EXTENSION); if(FM_UPLOAD_EXTENSION && $extArr) { array_walk($extArr, function(&$x) {$x = ".$x";}); return implode(',', $extArr); } return ''; } ?>
' . PHP_EOL; } ?>

: , ', $copy_files) ?>

:
/

 

Copying

Source path:
Destination folder:

Copy   Move   Cancel

""

Full path:
File size:
MIME-type:
Files in archive:
Total size:
Size in archive:
Compression: %
'; } // Text info if ($is_text) { $is_utf8 = fm_is_utf8($content); if (function_exists('iconv')) { if (!$is_utf8) { $content = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $content); } } echo 'Charset: ' . ($is_utf8 ? 'utf-8' : '8 bit') . '
'; } ?>

           

'; } else if($online_viewer == 'microsoft') { echo ''; } } elseif ($is_zip) { // ZIP content if ($filenames !== false) { echo ''; foreach ($filenames as $fn) { if ($fn['folder']) { echo '' . fm_enc($fn['name']) . '
'; } else { echo $fn['name'] . ' (' . fm_get_filesize($fn['filesize']) . ')
'; } } echo '
'; } else { echo '

'.lng('Error while fetching archive info').'

'; } } elseif ($is_image) { // Image content if (in_array($ext, array('gif', 'jpg', 'jpeg', 'png', 'bmp', 'ico', 'svg', 'webp', 'avif'))) { echo '

'; } } elseif ($is_audio) { // Audio content echo '

'; } elseif ($is_video) { // Video content echo '
'; } elseif ($is_text) { if (FM_USE_HIGHLIGHTJS) { // highlight $hljs_classes = array( 'shtml' => 'xml', 'htaccess' => 'apache', 'phtml' => 'php', 'lock' => 'json', 'svg' => 'xml', ); $hljs_class = isset($hljs_classes[$ext]) ? 'lang-' . $hljs_classes[$ext] : 'lang-' . $ext; if (empty($ext) || in_array(strtolower($file), fm_get_text_names()) || preg_match('#\.min\.(css|js)$#i', $file)) { $hljs_class = 'nohighlight'; } $content = '
' . fm_enc($content) . '
'; } elseif (in_array($ext, array('php', 'php4', 'php5', 'phtml', 'phps'))) { // php highlight $content = highlight_string($content, true); } else { $content = '
' . fm_enc($content) . '
'; } echo $content; } ?>
' . htmlspecialchars($content) . ''; } elseif ($is_text) { echo '
' . htmlspecialchars($content) . '
'; } else { fm_set_msg(lng('FILE EXTENSION HAS NOT SUPPORTED'), 'error'); } ?>

Full path:

 

'?'); $group = array('name' => '?'); } ?> '?'); $group = array('name' => '?'); } ?>
..
' . readlink($path . '/' . $f) . '' : '') ?>
">
' . readlink($path . '/' . $f) . '' : '') ?>
">
'.fm_get_filesize($all_files_size).'' ?> '.$num_files.'' ?> '.$num_folders.'' ?> '.fm_get_filesize(@disk_free_space($path)) .' '.lng('FreeOf').' '.fm_get_filesize(@disk_total_space($path)).''; ?>
= $time1 && $upd) { return false; } } $ok = copy($f1, $f2); if ($ok) { touch($f2, $time1); } return $ok; } /** * Get mime type * @param string $file_path * @return mixed|string */ function fm_get_mime_type($file_path) { if (function_exists('finfo_open')) { $finfo = finfo_open(FILEINFO_MIME_TYPE); $mime = finfo_file($finfo, $file_path); finfo_close($finfo); return $mime; } elseif (function_exists('mime_content_type')) { return mime_content_type($file_path); } elseif (!stristr(ini_get('disable_functions'), 'shell_exec')) { $file = escapeshellarg($file_path); $mime = shell_exec('file -bi ' . $file); return $mime; } else { return '--'; } } /** * HTTP Redirect * @param string $url * @param int $code */ function fm_redirect($url, $code = 302) { header('Location: ' . $url, true, $code); exit; } /** * Path traversal prevention and clean the url * It replaces (consecutive) occurrences of / and \\ with whatever is in DIRECTORY_SEPARATOR, and processes /. and /.. fine. * @param $path * @return string */ function get_absolute_path($path) { $path = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $path); $parts = array_filter(explode(DIRECTORY_SEPARATOR, $path), 'strlen'); $absolutes = array(); foreach ($parts as $part) { if ('.' == $part) continue; if ('..' == $part) { array_pop($absolutes); } else { $absolutes[] = $part; } } return implode(DIRECTORY_SEPARATOR, $absolutes); } /** * Clean path * @param string $path * @return string */ function fm_clean_path($path, $trim = true) { $path = $trim ? trim($path) : $path; $path = trim($path, '\\/'); $path = str_replace(array('../', '..\\'), '', $path); $path = get_absolute_path($path); if ($path == '..') { $path = ''; } return str_replace('\\', '/', $path); } /** * Get parent path * @param string $path * @return bool|string */ function fm_get_parent_path($path) { $path = fm_clean_path($path); if ($path != '') { $array = explode('/', $path); if (count($array) > 1) { $array = array_slice($array, 0, -1); return implode('/', $array); } return ''; } return false; } /** * Check file is in exclude list * @param string $file * @return bool */ function fm_is_exclude_items($file) { $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION)); if (isset($exclude_items) and sizeof($exclude_items)) { unset($exclude_items); } $exclude_items = FM_EXCLUDE_ITEMS; if (version_compare(PHP_VERSION, '7.0.0', '<')) { $exclude_items = unserialize($exclude_items); } if (!in_array($file, $exclude_items) && !in_array("*.$ext", $exclude_items)) { return true; } return false; } /** * get language translations from json file * @param int $tr * @return array */ function fm_get_translations($tr) { try { $content = @file_get_contents('translation.json'); if($content !== FALSE) { $lng = json_decode($content, TRUE); global $lang_list; foreach ($lng["language"] as $key => $value) { $code = $value["code"]; $lang_list[$code] = $value["name"]; if ($tr) $tr[$code] = $value["translation"]; } return $tr; } } catch (Exception $e) { echo $e; } } /** * @param $file * Recover all file sizes larger than > 2GB. * Works on php 32bits and 64bits and supports linux * @return int|string */ function fm_get_size($file) { static $iswin; static $isdarwin; if (!isset($iswin)) { $iswin = (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN'); } if (!isset($isdarwin)) { $isdarwin = (strtoupper(substr(PHP_OS, 0)) == "DARWIN"); } static $exec_works; if (!isset($exec_works)) { $exec_works = (function_exists('exec') && !ini_get('safe_mode') && @exec('echo EXEC') == 'EXEC'); } // try a shell command if ($exec_works) { $arg = escapeshellarg($file); $cmd = ($iswin) ? "for %F in (\"$file\") do @echo %~zF" : ($isdarwin ? "stat -f%z $arg" : "stat -c%s $arg"); @exec($cmd, $output); if (is_array($output) && ctype_digit($size = trim(implode("\n", $output)))) { return $size; } } // try the Windows COM interface if ($iswin && class_exists("COM")) { try { $fsobj = new COM('Scripting.FileSystemObject'); $f = $fsobj->GetFile( realpath($file) ); $size = $f->Size; } catch (Exception $e) { $size = null; } if (ctype_digit($size)) { return $size; } } // if all else fails return filesize($file); } /** * Get nice filesize * @param int $size * @return string */ function fm_get_filesize($size) { $size = (float) $size; $units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'); $power = $size > 0 ? floor(log($size, 1024)) : 0; return sprintf('%s %s', round($size / pow(1024, $power), 2), $units[$power]); } /** * Get director total size * @param string $directory * @return int */ function fm_get_directorysize($directory) { global $calc_folder; if ($calc_folder==true) { // Slower output $size = 0; $count= 0; $dirCount= 0; foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory)) as $file) if ($file->isFile()) { $size+=$file->getSize(); $count++; } else if ($file->isDir()) { $dirCount++; } // return [$size, $count, $dirCount]; return $size; } else return 'Folder'; // Quick output } /** * Get info about zip archive * @param string $path * @return array|bool */ function fm_get_zif_info($path, $ext) { if ($ext == 'zip' && function_exists('zip_open')) { $arch = zip_open($path); if ($arch) { $filenames = array(); while ($zip_entry = zip_read($arch)) { $zip_name = zip_entry_name($zip_entry); $zip_folder = substr($zip_name, -1) == '/'; $filenames[] = array( 'name' => $zip_name, 'filesize' => zip_entry_filesize($zip_entry), 'compressed_size' => zip_entry_compressedsize($zip_entry), 'folder' => $zip_folder //'compression_method' => zip_entry_compressionmethod($zip_entry), ); } zip_close($arch); return $filenames; } } elseif($ext == 'tar' && class_exists('PharData')) { $archive = new PharData($path); $filenames = array(); foreach(new RecursiveIteratorIterator($archive) as $file) { $parent_info = $file->getPathInfo(); $zip_name = str_replace("phar://".$path, '', $file->getPathName()); $zip_name = substr($zip_name, ($pos = strpos($zip_name, '/')) !== false ? $pos + 1 : 0); $zip_folder = $parent_info->getFileName(); $zip_info = new SplFileInfo($file); $filenames[] = array( 'name' => $zip_name, 'filesize' => $zip_info->getSize(), 'compressed_size' => $file->getCompressedSize(), 'folder' => $zip_folder ); } return $filenames; } return false; } /** * Encode html entities * @param string $text * @return string */ function fm_enc($text) { return htmlspecialchars($text, ENT_QUOTES, 'UTF-8'); } /** * Prevent XSS attacks * @param string $text * @return string */ function fm_isvalid_filename($text) { return (strpbrk($text, '/?%*:|"<>') === FALSE) ? true : false; } /** * Save message in session * @param string $msg * @param string $status */ function fm_set_msg($msg, $status = 'ok') { $_SESSION[FM_SESSION_ID]['message'] = $msg; $_SESSION[FM_SESSION_ID]['status'] = $status; } /** * Check if string is in UTF-8 * @param string $string * @return int */ function fm_is_utf8($string) { return preg_match('//u', $string); } /** * Convert file name to UTF-8 in Windows * @param string $filename * @return string */ function fm_convert_win($filename) { if (FM_IS_WIN && function_exists('iconv')) { $filename = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $filename); } return $filename; } /** * @param $obj * @return array */ function fm_object_to_array($obj) { if (!is_object($obj) && !is_array($obj)) { return $obj; } if (is_object($obj)) { $obj = get_object_vars($obj); } return array_map('fm_object_to_array', $obj); } /** * Get CSS classname for file * @param string $path * @return string */ function fm_get_file_icon_class($path) { // get extension $ext = strtolower(pathinfo($path, PATHINFO_EXTENSION)); switch ($ext) { case 'ico': case 'gif': case 'jpg': case 'jpeg': case 'jpc': case 'jp2': case 'jpx': case 'xbm': case 'wbmp': case 'png': case 'bmp': case 'tif': case 'tiff': case 'webp': case 'avif': case 'svg': $img = 'fa fa-picture-o'; break; case 'passwd': case 'ftpquota': case 'sql': case 'js': case 'json': case 'sh': case 'config': case 'twig': case 'tpl': case 'md': case 'gitignore': case 'c': case 'cpp': case 'cs': case 'py': case 'rs': case 'map': case 'lock': case 'dtd': $img = 'fa fa-file-code-o'; break; case 'txt': case 'ini': case 'conf': case 'log': case 'htaccess': $img = 'fa fa-file-text-o'; break; case 'css': case 'less': case 'sass': case 'scss': $img = 'fa fa-css3'; break; case 'bz2': case 'zip': case 'rar': case 'gz': case 'tar': case '7z': case 'xz': $img = 'fa fa-file-archive-o'; break; case 'php': case 'php4': case 'php5': case 'phps': case 'phtml': $img = 'fa fa-code'; break; case 'htm': case 'html': case 'shtml': case 'xhtml': $img = 'fa fa-html5'; break; case 'xml': case 'xsl': $img = 'fa fa-file-excel-o'; break; case 'wav': case 'mp3': case 'mp2': case 'm4a': case 'aac': case 'ogg': case 'oga': case 'wma': case 'mka': case 'flac': case 'ac3': case 'tds': $img = 'fa fa-music'; break; case 'm3u': case 'm3u8': case 'pls': case 'cue': case 'xspf': $img = 'fa fa-headphones'; break; case 'avi': case 'mpg': case 'mpeg': case 'mp4': case 'm4v': case 'flv': case 'f4v': case 'ogm': case 'ogv': case 'mov': case 'mkv': case '3gp': case 'asf': case 'wmv': $img = 'fa fa-file-video-o'; break; case 'eml': case 'msg': $img = 'fa fa-envelope-o'; break; case 'xls': case 'xlsx': case 'ods': $img = 'fa fa-file-excel-o'; break; case 'csv': $img = 'fa fa-file-text-o'; break; case 'bak': case 'swp': $img = 'fa fa-clipboard'; break; case 'doc': case 'docx': case 'odt': $img = 'fa fa-file-word-o'; break; case 'ppt': case 'pptx': $img = 'fa fa-file-powerpoint-o'; break; case 'ttf': case 'ttc': case 'otf': case 'woff': case 'woff2': case 'eot': case 'fon': $img = 'fa fa-font'; break; case 'pdf': $img = 'fa fa-file-pdf-o'; break; case 'psd': case 'ai': case 'eps': case 'fla': case 'swf': $img = 'fa fa-file-image-o'; break; case 'exe': case 'msi': $img = 'fa fa-file-o'; break; case 'bat': $img = 'fa fa-terminal'; break; default: $img = 'fa fa-info-circle'; } return $img; } /** * Get image files extensions * @return array */ function fm_get_image_exts() { return array('ico', 'gif', 'jpg', 'jpeg', 'jpc', 'jp2', 'jpx', 'xbm', 'wbmp', 'png', 'bmp', 'tif', 'tiff', 'psd', 'svg', 'webp', 'avif'); } /** * Get video files extensions * @return array */ function fm_get_video_exts() { return array('avi', 'webm', 'wmv', 'mp4', 'm4v', 'ogm', 'ogv', 'mov', 'mkv'); } /** * Get audio files extensions * @return array */ function fm_get_audio_exts() { return array('wav', 'mp3', 'ogg', 'm4a'); } /** * Get text file extensions * @return array */ function fm_get_text_exts() { return array( 'txt', 'css', 'ini', 'conf', 'log', 'htaccess', 'passwd', 'ftpquota', 'sql', 'js', 'json', 'sh', 'config', 'php', 'php4', 'php5', 'phps', 'phtml', 'htm', 'html', 'shtml', 'xhtml', 'xml', 'xsl', 'm3u', 'm3u8', 'pls', 'cue', 'eml', 'msg', 'csv', 'bat', 'twig', 'tpl', 'md', 'gitignore', 'less', 'sass', 'scss', 'c', 'cpp', 'cs', 'py', 'map', 'lock', 'dtd', 'svg', 'scss', 'asp', 'aspx', 'asx', 'asmx', 'ashx', 'jsx', 'jsp', 'jspx', 'cfm', 'cgi' ); } /** * Get mime types of text files * @return array */ function fm_get_text_mimes() { return array( 'application/xml', 'application/javascript', 'application/x-javascript', 'image/svg+xml', 'message/rfc822', ); } /** * Get file names of text files w/o extensions * @return array */ function fm_get_text_names() { return array( 'license', 'readme', 'authors', 'contributors', 'changelog', ); } /** * Get online docs viewer supported files extensions * @return array */ function fm_get_onlineViewer_exts() { return array('doc', 'docx', 'xls', 'xlsx', 'pdf', 'ppt', 'pptx', 'ai', 'psd', 'dxf', 'xps', 'rar', 'odt', 'ods'); } function fm_get_file_mimes($extension) { $fileTypes['swf'] = 'application/x-shockwave-flash'; $fileTypes['pdf'] = 'application/pdf'; $fileTypes['exe'] = 'application/octet-stream'; $fileTypes['zip'] = 'application/zip'; $fileTypes['doc'] = 'application/msword'; $fileTypes['xls'] = 'application/vnd.ms-excel'; $fileTypes['ppt'] = 'application/vnd.ms-powerpoint'; $fileTypes['gif'] = 'image/gif'; $fileTypes['png'] = 'image/png'; $fileTypes['jpeg'] = 'image/jpg'; $fileTypes['jpg'] = 'image/jpg'; $fileTypes['webp'] = 'image/webp'; $fileTypes['avif'] = 'image/avif'; $fileTypes['rar'] = 'application/rar'; $fileTypes['ra'] = 'audio/x-pn-realaudio'; $fileTypes['ram'] = 'audio/x-pn-realaudio'; $fileTypes['ogg'] = 'audio/x-pn-realaudio'; $fileTypes['wav'] = 'video/x-msvideo'; $fileTypes['wmv'] = 'video/x-msvideo'; $fileTypes['avi'] = 'video/x-msvideo'; $fileTypes['asf'] = 'video/x-msvideo'; $fileTypes['divx'] = 'video/x-msvideo'; $fileTypes['mp3'] = 'audio/mpeg'; $fileTypes['mp4'] = 'audio/mpeg'; $fileTypes['mpeg'] = 'video/mpeg'; $fileTypes['mpg'] = 'video/mpeg'; $fileTypes['mpe'] = 'video/mpeg'; $fileTypes['mov'] = 'video/quicktime'; $fileTypes['swf'] = 'video/quicktime'; $fileTypes['3gp'] = 'video/quicktime'; $fileTypes['m4a'] = 'video/quicktime'; $fileTypes['aac'] = 'video/quicktime'; $fileTypes['m3u'] = 'video/quicktime'; $fileTypes['php'] = ['application/x-php']; $fileTypes['html'] = ['text/html']; $fileTypes['txt'] = ['text/plain']; //Unknown mime-types should be 'application/octet-stream' if(empty($fileTypes[$extension])) { $fileTypes[$extension] = ['application/octet-stream']; } return $fileTypes[$extension]; } /** * This function scans the files and folder recursively, and return matching files * @param string $dir * @param string $filter * @return json */ function scan($dir, $filter = '') { $path = FM_ROOT_PATH.'/'.$dir; if($dir) { $ite = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)); $rii = new RegexIterator($ite, "/(" . $filter . ")/i"); $files = array(); foreach ($rii as $file) { if (!$file->isDir()) { $fileName = $file->getFilename(); $location = str_replace(FM_ROOT_PATH, '', $file->getPath()); $files[] = array( "name" => $fileName, "type" => "file", "path" => $location, ); } } return $files; } } /* Parameters: downloadFile(File Location, File Name, max speed, is streaming If streaming - videos will show as videos, images as images instead of download prompt https://stackoverflow.com/a/13821992/1164642 */ function fm_download_file($fileLocation, $fileName, $chunkSize = 1024) { if (connection_status() != 0) return (false); $extension = pathinfo($fileName, PATHINFO_EXTENSION); $contentType = fm_get_file_mimes($extension); header("Cache-Control: public"); header("Content-Transfer-Encoding: binary\n"); header('Content-Type: $contentType'); $contentDisposition = 'attachment'; if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) { $fileName = preg_replace('/\./', '%2e', $fileName, substr_count($fileName, '.') - 1); header("Content-Disposition: $contentDisposition;filename=\"$fileName\""); } else { header("Content-Disposition: $contentDisposition;filename=\"$fileName\""); } header("Accept-Ranges: bytes"); $range = 0; $size = filesize($fileLocation); if (isset($_SERVER['HTTP_RANGE'])) { list($a, $range) = explode("=", $_SERVER['HTTP_RANGE']); str_replace($range, "-", $range); $size2 = $size - 1; $new_length = $size - $range; header("HTTP/1.1 206 Partial Content"); header("Content-Length: $new_length"); header("Content-Range: bytes $range$size2/$size"); } else { $size2 = $size - 1; header("Content-Range: bytes 0-$size2/$size"); header("Content-Length: " . $size); } if ($size == 0) { die('Zero byte file! Aborting download'); } @ini_set('magic_quotes_runtime', 0); $fp = fopen("$fileLocation", "rb"); fseek($fp, $range); while (!feof($fp) and (connection_status() == 0)) { set_time_limit(0); print(@fread($fp, 1024*$chunkSize)); flush(); ob_flush(); // sleep(1); } fclose($fp); return ((connection_status() == 0) and !connection_aborted()); } function fm_get_theme() { $result = ''; if(FM_THEME == "dark") { $result = "text-white bg-dark"; } return $result; } /** * Class to work with zip files (using ZipArchive) */ class FM_Zipper { private $zip; public function __construct() { $this->zip = new ZipArchive(); } /** * Create archive with name $filename and files $files (RELATIVE PATHS!) * @param string $filename * @param array|string $files * @return bool */ public function create($filename, $files) { $res = $this->zip->open($filename, ZipArchive::CREATE); if ($res !== true) { return false; } if (is_array($files)) { foreach ($files as $f) { if (!$this->addFileOrDir($f)) { $this->zip->close(); return false; } } $this->zip->close(); return true; } else { if ($this->addFileOrDir($files)) { $this->zip->close(); return true; } return false; } } /** * Extract archive $filename to folder $path (RELATIVE OR ABSOLUTE PATHS) * @param string $filename * @param string $path * @return bool */ public function unzip($filename, $path) { $res = $this->zip->open($filename); if ($res !== true) { return false; } if ($this->zip->extractTo($path)) { $this->zip->close(); return true; } return false; } /** * Add file/folder to archive * @param string $filename * @return bool */ private function addFileOrDir($filename) { if (is_file($filename)) { return $this->zip->addFile($filename); } elseif (is_dir($filename)) { return $this->addDir($filename); } return false; } /** * Add folder recursively * @param string $path * @return bool */ private function addDir($path) { if (!$this->zip->addEmptyDir($path)) { return false; } $objects = scandir($path); if (is_array($objects)) { foreach ($objects as $file) { if ($file != '.' && $file != '..') { if (is_dir($path . '/' . $file)) { if (!$this->addDir($path . '/' . $file)) { return false; } } elseif (is_file($path . '/' . $file)) { if (!$this->zip->addFile($path . '/' . $file)) { return false; } } } } return true; } return false; } } /** * Class to work with Tar files (using PharData) */ class FM_Zipper_Tar { private $tar; public function __construct() { $this->tar = null; } /** * Create archive with name $filename and files $files (RELATIVE PATHS!) * @param string $filename * @param array|string $files * @return bool */ public function create($filename, $files) { $this->tar = new PharData($filename); if (is_array($files)) { foreach ($files as $f) { if (!$this->addFileOrDir($f)) { return false; } } return true; } else { if ($this->addFileOrDir($files)) { return true; } return false; } } /** * Extract archive $filename to folder $path (RELATIVE OR ABSOLUTE PATHS) * @param string $filename * @param string $path * @return bool */ public function unzip($filename, $path) { $res = $this->tar->open($filename); if ($res !== true) { return false; } if ($this->tar->extractTo($path)) { return true; } return false; } /** * Add file/folder to archive * @param string $filename * @return bool */ private function addFileOrDir($filename) { if (is_file($filename)) { try { $this->tar->addFile($filename); return true; } catch (Exception $e) { return false; } } elseif (is_dir($filename)) { return $this->addDir($filename); } return false; } /** * Add folder recursively * @param string $path * @return bool */ private function addDir($path) { $objects = scandir($path); if (is_array($objects)) { foreach ($objects as $file) { if ($file != '.' && $file != '..') { if (is_dir($path . '/' . $file)) { if (!$this->addDir($path . '/' . $file)) { return false; } } elseif (is_file($path . '/' . $file)) { try { $this->tar->addFile($path . '/' . $file); } catch (Exception $e) { return false; } } } } return true; } return false; } } /** * Save Configuration */ class FM_Config { var $data; function __construct() { global $root_path, $root_url, $CONFIG; $fm_url = $root_url.$_SERVER["PHP_SELF"]; $this->data = array( 'lang' => 'en', 'error_reporting' => true, 'show_hidden' => true ); $data = false; if (strlen($CONFIG)) { $data = fm_object_to_array(json_decode($CONFIG)); } else { $msg = 'Tiny File Manager
Error: Cannot load configuration'; if (substr($fm_url, -1) == '/') { $fm_url = rtrim($fm_url, '/'); $msg .= '
'; $msg .= '
Seems like you have a trailing slash on the URL.'; $msg .= '
Try this link: ' . $fm_url . ''; } die($msg); } if (is_array($data) && count($data)) $this->data = $data; else $this->save(); } function save() { $fm_file = __FILE__; $var_name = '$CONFIG'; $var_value = var_export(json_encode($this->data), true); $config_string = " ' . $_SESSION[FM_SESSION_ID]['message'] . '

'; unset($_SESSION[FM_SESSION_ID]['message']); unset($_SESSION[FM_SESSION_ID]['status']); } } /** * Show page header in Login Form */ function fm_show_header_login() { $sprites_ver = '20160315'; header("Content-Type: text/html; charset=utf-8"); header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); header("Pragma: no-cache"); global $lang, $root_url, $favicon_path; ?> '; } ?> <?php echo fm_enc(APP_TITLE) ?> ">
'; } ?> <?php echo fm_enc(APP_TITLE) ?> ">
smilies/icon_biggrin.gif000064400000000255152342437500011340 0ustar00GIF89a EEE! ,@ZIj41Ba0 hBARQ3q$j&jP,8gE@ ʼn軕v!p (^6a0PD;smilies/icon_razz.gif000064400000000257152342437500010707 0ustar00GIF89a333EEE!,@\Ij5к߅8A}0RPDP J- r6ZO al  4HIA뀇Z *7ml1`Kٸj;smilies/frownie.png000064400000001757152342437500010407 0ustar00PNG  IHDRHHb3Cu PLTEMMMMMMMMMMMMMMMMMMMMMMMMMMMMMfEgFhGiHjHkImKwTwT zV zW }Z \ ]^aghintvxy~!!"$'**ɜ2͠4Ϣ5У5Ѥ6Ҥ6Ԧ7Ԧ8ש9ت9ګ:ڬ;۬;=>??CEEGHHLLMMtRNS -/3>H^cf ytIDATX͘Yc@)AT$x-I5gNI_RhA'3+}$P$aȪnXh:e誌v))B*Q1Ԋ E*LK R:0L됈z>^TjCBڥ< eL43\DdNg#EM9JT¢|;gEJRQWrN. Bj"d8!eƢcu7.cwQi +#ۄ -e(IPd dHҸFVQC"@"=H"#_DT,Y>?EEv(~LH,69p,,PQ2Ӥ"XWssc# Y"hёmxnldzr׳Gm>/; dvQNHȲBHMmo?Gz'lz@b8xE&y,}yxzzv4Ѵ&h?^߲&Zo7}k=FS?ir/;&SX2:w YEq¾k&JI* *jĕY ?/Euofb.]idx#"*vyvO|IENDB`smilies/rolleyes.png000064400000002321152342437500010560 0ustar00PNG  IHDRHHb3CuePLTEMMMMMMMMMMMMMMMMMMMMMMMMMMMMMfEgFhHiHkIkJpMpNsQ|X ]e$h.i2bdegkmoq^{)&&'()+-.Ŝ8şEƚ0ʝ2͠4Ϣ5֧8ש9٫:ګ:۬;ݮ<߯=>?BDEEEFHIJKߘKnMXYZ`abMR"0tRNS -/3>H^cf yIDATX͘0DZ+7c7c qmNNySVy!Ey -I [&O$pDAPB%R1!RcHjZLE@( fC٠:ZT/PTer̂ 43BaA")L,+ɜ~Oq'(L|a4H%Ϡekj=(h썳7*6>$r bh޷^1U-X  bv^ӿ>9f0zU+|<("Oי1 ?7E֝`>A>DlP5F Cd}Ͽ~`>qŀ C芘 Jp5>@z RͺzU |)dx}0@]: :n>f24h29-n>@.> PYĽ[/hJFg {f㻀}4Ax/[TEV= ŕaOqiI;22B&.ѥV\ivW ^RX)Β-g!o[Eywp wP[1sT׶1g?eWUcrusVۘvKu߰㵣ZלVس7Obc篿v>X$yٺyƽ?|75,iOI9XbF&AޑC>:NLj*K?IENDB`smilies/icon_smile.gif000064400000000255152342437500011030 0ustar00GIF89aEEE333!,@ZIjպD8}0R@` g#)xFh4dR@Pa(ڳb;TҀ ;ҭ f%jXv3ŀ3ÓJa_@O";smilies/icon_arrow.gif000064400000000251152342437500011045 0ustar00GIF89a EEE! ,@VIj% qLh[-I !˃RJRMJD V XnJhA WmU!)%$3u8I;smilies/icon_rolleyes.gif000064400000000727152342437500011561 0ustar00GIF89a EEE! NETSCAPE2.0! ,@_IYjtMaAjBRIBsr f&TGJR@pa(ܳ3\҂t~%+5VLN $L, @ITg! , vN! , vy !2,e `(!,  ! , eAJ!, X ZJH Ǽ AaT!, :# ⼵KF$!, H J0!X @Pvܦ%;smilies/icon_redface.gif000064400000001205152342437500011304 0ustar00GIF89a{˃u҇sJ[iEEElH6hh__! NETSCAPE2.0!,@e RY$E2κJ(oL49ߢG $ dHj$81$I p<<D,IrR{%+`}. W?.BlX2CD!! , Q"*V$8A1k+.O;$\[mH@ =T Co.P$@xEhOJTE!!2, H \(uWic 43]j_WOTa2GR/ Ff@a3|nQu- ! , LPIR3cT)^RB&y+I'$ A8%0,(:2 |,7pHD! , Q A48ļ2k&.O[4\[mi<&d,(㺈D(Eo^"P@GDhJE!;smilies/mrgreen.png000064400000002716152342437500010371 0ustar00PNG  IHDRHHb3CuPLTEQrQrQrQrQrQrQrQrQrQrQrQrQrQrQrQrQrQrQrQrQrQrQrQrQrQrQrQrQr:$;%<%<&=&<&>'?'@(A(A)B)B)C* D+!F,!G-!H-"J.#K/#L/#M0$B-$N1%Q3&S4'U5(V6(W7)X8)Y8*[9+H3+^;,_<,`=,a=-b>.d?.f@0iB1M91jC1kD1lD2nE3pG3qG4rH5tJ6wK7xL7yL7yM8S?8zM9TA:Q;SH^cf y~IDATX͘_AiQnP7$-ˣ2 HKRJô )&'@4iA\@TnZHcjDT@2+$TQadH@T& JFQ9QEe2@:t8(#/P^ RAR+PHRx*?YP*dI4 i 5F4˯s>>_vꪏA9h:hg7w"vH;L<}=`y+9M`? %E|-2 .A2C| J@:ҧ3 #*>"~a;156ލ,3%3h0PM[ol ȁogie_`@.FFڠC_ $/ȕ:cKdΒ~!n=EL|x.^Hx<;fuwOSS\O=+7E2[mZi e*lӱk~!qg4ZR[ E"+K c~$5 R XNo(rp(@V7U8ja>WD@;8~^?W1 5OҽIDnvs5#j"Ƿbv}ǏHMA ݼ>8l.6Cm hyFɍ~ h&6q'#5^aWa!n~; $"А%+! 'Z0[E;0}\AFH%w(!;smilies/icon_idea.gif000064400000000256152342437500010622 0ustar00GIF89a EEE! ,@[Ij-F[a0 hmIDQ2Ԣ{S@jP*0 Z%)Cd6mǝPEn&hD*M`L7';smilies/icon_mad.gif000064400000000254152342437500010457 0ustar00GIF89a EEE! ,@YIj;)AR@` &c2'HP,4gv8D0Όa 2dbMN*|<;wpicons.png000064400000015656152342437500006756 0ustar00PNG  IHDR0(50PLTEV[eIIISSS>>?Hm:::OOO>>>MMM]\\YvYYYqqqmmm{x̉UTTMLL]]]qqqjjjT|bbbؖeee萏Ўˠzxwwaaae~S&|tRNS_ .@U)#3;GOQ97*ܶ& bk]ppW2q8OPgt]ݬϷ:ο6Uѱ{цܾȜ{vD y5IDATxy\SgI`B*j) eE"Zqթtʹv{;4!&%P,V@Q@o-mok?}ϖd.v~|J9'yYWkmq)A%e~: Y2&[m\X~9ßt%,V,Nօ[%?sܦ%TZUYj~<ߗy!|MboU_}rm,E~?7dba1t:Q~;E b5vĉ0+ms%ZqTR}{ [1@~`W&_Kq6oiQؾ`89n,9yY@l>qVjy[bŊ||wA2p{SȾJ<rK|o0<]~s>hB1<K>8}f&f;:bG믿S>:z>> S"/P|`~X$]O{}5$FI H~ؚ_/wx9KӤPfi3gn 든'^(ܸzuྏ6ON7h{2LW>$U٩l:%TSAJ"OtU|CG}5cV7Eƛ#ᑬ؁a]1N#!9􉧦srwK^<*>/ `-0 )&`?7 n7w!:o㽶{~oPǟ ?Ňf."!/EZ5CkpIx = 0h| ->s3z)Yšd)n~~t4xQ#G<hXO ε{]Bvڳ" Q~>hԏ  C9ODҶckΡ# &17ؤ$| +,{~'ܴirFDeˇtũ@p`ӭ?~# v(- ;sfr߸U 3gۃ؇W?.aչvI`Ypxlwrw!uIFم7ȑ)||6hjWaqOtyy5Y )v8j"#YoW54Ȕ$1苳da>T #>mx`Ïk1*lD뗑;0Cݍ5ݵV`2+0v.xX`0񟀘Nûl!3gB!Ӯ"ȴ{6g"?ןk7L?>b{e`]}} ̎+Dl4PEz`ٵ\.wp}Ɵz\,ò%{ƪaud"W. =_~vu ~6ؕ;F)`pOƳ Loo?Nj7Tyev 6tҥsT/IE|$=s Ђ j>w%>w1w9 P ^׋^ DYa;NM\z&%OXM1V&(0,/#L?*80-dCIuй7/ ]i %"y&calHaD fzSr|=\n}60aa&V`Embo II]ϵkcڌM ϳpHsa҆*!/jpT1ܡ!wFJ"jlI`xh1wa-U-9P罷prl/9@5lPﭡ1 &x :c%q@A$k_0k NR(U⿄DžI*%}zOn˗?%Rr .b}TXߏUP% m# A@&k5LʨayrL`CC@P>rjz]͋ #_FыV+1`8@U.n8899ypg}L{u ;4t>LƗ_~Y|u.ɗ `\e2޹g=`HNr2&H6˷@+|@KeiM~q1ٳ-[_Yč'<܃3]tnƏlҤMOdϡI۩ # xV/%N3%9h_o%lv+^,>X`%yo6S*"${i`Anx1O/a. P=N ‹Csa݌4409RI,) $t,aqm |lZjox:2Wsixyyyhfh_TӋ5mƚ" `S4w!7l˷jz{zlW%>Mȕ785q*[MhϨE'wĚެ,[M/C ɞNӛ=WX%1''1×io]Nh4z;*Ji[#D=@5AQ.> 흥j f2viæ(Mx`Eu91ØPiQ#K(q.mi5qUUU)eWSX2R"*؅]zhNVcwhzWPMơɷu"ͩ׌L|ءiaR)* Zӛ(nBiut2Œhʴ #B+s",rkZB@5q-8yKS4VGb䄦WW4E#*ܢFF\æuRk8pEB5oϳ0tDY0hU_D5ɢy7\hzAW04Ri"f^gO[eTX5`l]=kMx4DѤ@MoFSFU)*\NB"S2:Բ ^1Ga}HYgZHb,ÏRkcGl'RL5f3_%q#a⳦Z+,W=GVԅ5z C ,Min41:WFCize*,> /STG+W;G"xw]FF1jSEٲ1Cӻmp0eT^rjz6w5=G`hzJ6j rhz:1>JKA,쭪ޑhTњ^LM/t% 2K/iGa"pU9&*j[t*ej 1$0M!t-PCk8"W+`:#`L'K8KmKV]ѕa7R;MoaE@ӛB#^ͭiMoPLDzP``I;oi5]0.\ \kzga8ƨ )R괠bjzKe=2Gwڎ6TێUP%Y`' p`FG):]YGqPӛb2uFSK64vS!?6*'U-!TՕ9F6Tk%L-9G =stX4&8mb7 N{󝼒p(_PhƱ5e#LI\&*M{1%ХlULuu>AV"k-5S9~]A,j^ KɌ&$0]֖G} ~&S ]}7F46^.iKxL|g֚޸= {2M{} Ns40Cs%qt&'ϡ^. NkzL^i![%;MFjqFAh2M,l?WfmÅF0f=axîL8cy]ċ9zu?7<2bf?saj8?W;+MLɘX"6ɿrMoNμw/b&IENDB`icon-library/sides-right.svg000064400000000326152342437500012107 0ustar00 icon-library/more-vertical.svg000064400000000201152342437500012426 0ustar00 icon-library/color.svg000064400000000656152342437500011011 0ustar00 icon-library/external.svg000064400000000422152342437500011504 0ustar00 icon-library/seen.svg000064400000002765152342437500010630 0ustar00 icon-library/tip.svg000064400000000426152342437500010462 0ustar00 icon-library/justify-top.svg000064400000000162152342437500012160 0ustar00 icon-library/full-height.svg000064400000000356152342437500012100 0ustar00 icon-library/cancel-circle-filled.svg000064400000000362152342437500013606 0ustar00 icon-library/cloud.svg000064400000000600152342437500010766 0ustar00 icon-library/align-none.svg000064400000000210152342437500011704 0ustar00 icon-library/shield.svg000064400000000574152342437500011142 0ustar00 icon-library/flip-vertical.svg000064400000000574152342437500012433 0ustar00 icon-library/ungroup.svg000064400000000547152342437500011371 0ustar00 icon-library/time-to-read.svg000064400000000371152342437500012154 0ustar00 icon-library/accordion.svg000064400000000556152342437500011633 0ustar00 icon-library/format-italic.svg000064400000000154152342437500012417 0ustar00 icon-library/dashboard.svg000064400000000555152342437500011620 0ustar00 icon-library/post-comments-count.svg000064400000000724152342437500013625 0ustar00 icon-library/math.svg000064400000000501152342437500010611 0ustar00 icon-library/justify-space-between.svg000064400000000207152342437500014100 0ustar00 icon-library/capture-photo.svg000064400000001227152342437500012460 0ustar00 icon-library/format-underline.svg000064400000000421152342437500013134 0ustar00 icon-library/share.svg000064400000000512152342437500010764 0ustar00 icon-library/globe.svg000064400000001460152342437500010755 0ustar00 icon-library/format-uppercase.svg000064400000000744152342437500013146 0ustar00 icon-library/close.svg000064400000000322152342437500010766 0ustar00 icon-library/rss.svg000064400000000511152342437500010470 0ustar00 icon-library/verse.svg000064400000001010152342437500011000 0ustar00 icon-library/inbox.svg000064400000000516152342437500011005 0ustar00 icon-library/plugins.svg000064400000000331152342437500011342 0ustar00 icon-library/arrow-up.svg000064400000000206152342437500011436 0ustar00 icon-library/format-indent.svg000064400000000234152342437500012432 0ustar00 icon-library/scheduled.svg000064400000000347152342437500011630 0ustar00 icon-library/position-center.svg000064400000000210152342437500012777 0ustar00 icon-library/button.svg000064400000000404152342437500011175 0ustar00 icon-library/backup.svg000064400000000426152342437500011133 0ustar00 icon-library/heading-level-3.svg000064400000001172152342437500012531 0ustar00 icon-library/list.svg000064400000000271152342437500010637 0ustar00 icon-library/title.svg000064400000000232152342437500011002 0ustar00 icon-library/undo.svg000064400000000340152342437500010626 0ustar00 icon-library/gift.svg000064400000001577152342437500010627 0ustar00 icon-library/chevron-right-small.svg000064400000000304152342437500013546 0ustar00 icon-library/connection.svg000064400000001223152342437500012021 0ustar00 icon-library/login.svg000064400000000475152342437500011002 0ustar00 icon-library/columns.svg000064400000000477152342437500011354 0ustar00 icon-library/help-filled.svg000064400000000712152342437500012051 0ustar00 icon-library/comment-author-name.svg000064400000000763152342437500013552 0ustar00 icon-library/previous.svg000064400000000250152342437500011535 0ustar00 icon-library/aspect-ratio.svg000064400000000452152342437500012260 0ustar00 icon-library/calendar.svg000064400000000453152342437500011437 0ustar00 icon-library/rotate-right.svg000064400000000713152342437500012276 0ustar00 icon-library/percent.svg000064400000000525152342437500011326 0ustar00 icon-library/chevron-down.svg000064400000000207152342437500012274 0ustar00 icon-library/format-indent-rtl.svg000064400000000427152342437500013235 0ustar00 icon-library/block-meta.svg000064400000000741152342437500011704 0ustar00 icon-library/close-small.svg000064400000000342152342437500012076 0ustar00 icon-library/format-strikethrough.svg000064400000000745152342437500014062 0ustar00 icon-library/resize-corner-ne.svg000064400000000210152342437500013044 0ustar00 icon-library/post-categories.svg000064400000000717152342437500013001 0ustar00 icon-library/align-right.svg000064400000000235152342437500012071 0ustar00 icon-library/quote.svg000064400000000434152342437500011022 0ustar00 icon-library/drag-handle.svg000064400000000251152342437500012030 0ustar00 icon-library/trending-up.svg000064400000000350152342437500012116 0ustar00 icon-library/symbol-filled.svg000064400000000456152342437500012433 0ustar00 icon-library/sides-axial.svg000064400000000646152342437500012075 0ustar00 icon-library/position-right.svg000064400000000210152342437500012634 0ustar00 icon-library/query-pagination.svg000064400000000202152342437500013152 0ustar00 icon-library/sides-left.svg000064400000000327152342437500011725 0ustar00 icon-library/not-allowed.svg000064400000000432152342437500012110 0ustar00 icon-library/offline.svg000064400000001352152342437500011307 0ustar00 icon-library/layout.svg000064400000000407152342437500011202 0ustar00 icon-library/row.svg000064400000000403152342437500010470 0ustar00 icon-library/error.svg000064400000000631152342437500011015 0ustar00 icon-library/flip-horizontal.svg000064400000000606152342437500013007 0ustar00 icon-library/breadcrumbs.svg000064400000000223152342437500012152 0ustar00 icon-library/crop.svg000064400000000412152342437500010624 0ustar00 icon-library/border.svg000064400000001276152342437500011147 0ustar00 icon-library/caution-filled.svg000064400000000375152342437500012570 0ustar00 icon-library/remove-bug.svg000064400000001620152342437500011733 0ustar00 icon-library/pin.svg000064400000000527152342437500010456 0ustar00 icon-library/link-off.svg000064400000000534152342437500011373 0ustar00 icon-library/details.svg000064400000000331152342437500011306 0ustar00 icon-library/arrow-left.svg000064400000000212152342437500011741 0ustar00 icon-library/code.svg000064400000000414152342437500010575 0ustar00 icon-library/heading-level-1.svg000064400000000240152342437500012522 0ustar00 icon-library/funnel.svg000064400000000217152342437500011153 0ustar00 icon-library/navigation-overlay.svg000064400000000477152342437500013512 0ustar00 icon-library/shadow.svg000064400000000724152342437500011154 0ustar00 icon-library/sidebar.svg000064400000000345152342437500011277 0ustar00 icon-library/position-left.svg000064400000000205152342437500012455 0ustar00 icon-library/currency-dollar.svg000064400000001344152342437500012773 0ustar00 icon-library/arrow-down-right.svg000064400000000176152342437500013102 0ustar00 icon-library/heading-level-6.svg000064400000001315152342437500012533 0ustar00 icon-library/home-button.svg000064400000000542152342437500012126 0ustar00 icon-library/cover.svg000064400000000445152342437500011005 0ustar00 icon-library/format-rtl.svg000064400000000307152342437500011753 0ustar00 icon-library/replace.svg000064400000000761152342437500011303 0ustar00 icon-library/sides-top.svg000064400000000326152342437500011574 0ustar00 icon-library/plus.svg000064400000000212152342437500010642 0ustar00 icon-library/justify-bottom.svg000064400000000167152342437500012667 0ustar00 icon-library/thumbs-up.svg000064400000000660152342437500011612 0ustar00 icon-library/file.svg000064400000000626152342437500010607 0ustar00 icon-library/trash.svg000064400000000676152342437500011016 0ustar00 icon-library/brush.svg000064400000000635152342437500011013 0ustar00 icon-library/move-to.svg000064400000001546152342437500011260 0ustar00 icon-library/group.svg000064400000000645152342437500011025 0ustar00 icon-library/custom-link.svg000064400000000677152342437500012143 0ustar00 icon-library/keyboard.svg000064400000000624152342437500011466 0ustar00 icon-library/text-vertical.svg000064400000000304152342437500012454 0ustar00 icon-library/map-marker.svg000064400000000747152342437500011730 0ustar00 icon-library/paragraph.svg000064400000000325152342437500011631 0ustar00 icon-library/post-list.svg000064400000000473152342437500011626 0ustar00 icon-library/cart.svg000064400000000653152342437500010621 0ustar00 icon-library/table-column-before.svg000064400000000537152342437500013513 0ustar00 icon-library/key.svg000064400000000400152342437500010446 0ustar00 icon-library/insert-before.svg000064400000000354152342437500012432 0ustar00 icon-library/arrow-up-right.svg000064400000000200152342437500012543 0ustar00 icon-library/justify-center.svg000064400000000171152342437500012636 0ustar00 icon-library/list-item.svg000064400000000227152342437500011574 0ustar00 icon-library/symbol.svg000064400000000635152342437500011175 0ustar00 icon-library/square.svg000064400000000316152342437500011164 0ustar00 icon-library/check.svg000064400000000202152342437500010733 0ustar00 icon-library/shipping.svg000064400000001042152342437500011502 0ustar00 icon-library/term-description.svg000064400000000410152342437500013147 0ustar00 icon-library/table-of-contents.svg000064400000000522152342437500013207 0ustar00 icon-library/tabs.svg000064400000000434152342437500010616 0ustar00 icon-library/navigation.svg000064400000000365152342437500012027 0ustar00 icon-library/add-submenu.svg000064400000000365152342437500012074 0ustar00 icon-library/format-lowercase.svg000064400000001554152342437500013143 0ustar00 icon-library/caution.svg000064400000000371152342437500011327 0ustar00 icon-library/sides-bottom.svg000064400000000331152342437500012272 0ustar00 icon-library/justify-right.svg000064400000000167152342437500012500 0ustar00 icon-library/media.svg000064400000001200152342437500010734 0ustar00 icon-library/preformatted.svg000064400000000466152342437500012366 0ustar00 icon-library/people.svg000064400000000704152342437500011151 0ustar00 icon-library/menu.svg000064400000000213152342437500010624 0ustar00 icon-library/copy.svg000064400000000545152342437500010642 0ustar00 icon-library/receipt.svg000064400000001007152342437500011315 0ustar00 icon-library/desktop.svg000064400000000351152342437500011334 0ustar00 icon-library/reset.svg000064400000000143152342437500011004 0ustar00 icon-library/keyboard-return.svg000064400000001015152342437500012776 0ustar00 icon-library/styles.svg000064400000000330152342437500011203 0ustar00 icon-library/line-solid.svg000064400000000145152342437500011723 0ustar00 icon-library/cloud-download.svg000064400000001350152342437500012576 0ustar00 icon-library/post-comments-form.svg000064400000000400152342437500013427 0ustar00 icon-library/pending.svg000064400000000363152342437500011312 0ustar00 icon-library/widget.svg000064400000000670152342437500011152 0ustar00 icon-library/table-row-delete.svg000064400000000570152342437500013022 0ustar00 icon-library/tag.svg000064400000000656152342437500010446 0ustar00 icon-library/download.svg000064400000000263152342437500011474 0ustar00 icon-library/post.svg000064400000000423152342437500010650 0ustar00 icon-library/column.svg000064400000000401152342437500011154 0ustar00 icon-library/arrow-down.svg000064400000000217152342437500011763 0ustar00 icon-library/justify-stretch-vertical.svg000064400000000255152342437500014644 0ustar00 icon-library/subscript.svg000064400000000627152342437500011707 0ustar00 icon-library/corner-all.svg000064400000000637152342437500011730 0ustar00 icon-library/html.svg000064400000000422152342437500010626 0ustar00 icon-library/drawer-right.svg000064400000000456152342437500012270 0ustar00 icon-library/add-card.svg000064400000000370152342437500011323 0ustar00 icon-library/rotate-left.svg000064400000000714152342437500012114 0ustar00 icon-library/settings.svg000064400000000653152342437500011530 0ustar00 icon-library/swatch.svg000064400000001264152342437500011160 0ustar00 icon-library/keyboard-close.svg000064400000001115152342437500012565 0ustar00 icon-library/table-column-delete.svg000064400000000573152342437500013513 0ustar00 icon-library/media-and-text.svg000064400000000233152342437500012463 0ustar00 icon-library/remove-submenu.svg000064400000000667152342437500012646 0ustar00 icon-library/page-break.svg000064400000000435152342437500011664 0ustar00 icon-library/trending-down.svg000064400000000354152342437500012445 0ustar00 icon-library/format-outdent-rtl.svg000064400000000427152342437500013436 0ustar00 icon-library/table-row-after.svg000064400000000537152342437500012664 0ustar00 icon-library/help.svg000064400000000527152342437500010620 0ustar00 icon-library/chevron-left-small.svg000064400000000200152342437500013356 0ustar00 icon-library/not-found.svg000064400000001466152342437500011604 0ustar00 icon-library/chevron-down-small.svg000064400000000244152342437500013403 0ustar00 icon-library/star-filled.svg000064400000000642152342437500012074 0ustar00 icon-library/handle.svg000064400000000167152342437500011123 0ustar00 icon-library/thumbs-down.svg000064400000000663152342437500012140 0ustar00 icon-library/format-outdent.svg000064400000000235152342437500012634 0ustar00 icon-library/align-center.svg000064400000000216152342437500012233 0ustar00 icon-library/align-justify.svg000064400000000222152342437500012445 0ustar00 icon-library/drawer-left.svg000064400000000455152342437500012104 0ustar00 icon-library/plus-circle.svg000064400000000453152342437500012110 0ustar00 icon-library/more-horizontal.svg000064400000000203152342437500013010 0ustar00 icon-library/box.svg000064400000000553152342437500010457 0ustar00 icon-library/format-list-numbered-rtl.svg000064400000000512152342437500014521 0ustar00 icon-library/justify-stretch.svg000064400000000215152342437500013031 0ustar00 icon-library/cog.svg000064400000001356152342437500010441 0ustar00 icon-library/block-default.svg000064400000000401152342437500012373 0ustar00 icon-library/corner-bottom-right.svg000064400000001023152342437500013565 0ustar00 icon-library/format-list-numbered.svg000064400000000512152342437500013722 0ustar00 icon-library/list-view.svg000064400000000217152342437500011607 0ustar00 icon-library/sides-horizontal.svg000064400000000366152342437500013167 0ustar00 icon-library/table-row-before.svg000064400000000535152342437500013023 0ustar00 icon-library/upload.svg000064400000000244152342437500011150 0ustar00 icon-library/comment.svg000064400000000403152342437500011323 0ustar00 icon-library/word-count.svg000064400000002123152342437500011763 0ustar00 icon-library/justify-center-vertical.svg000064400000000167152342437500014452 0ustar00 icon-library/tab.svg000064400000000341152342437500010430 0ustar00 icon-library/home.svg000064400000000240152342437500010610 0ustar00 icon-library/unlock.svg000064400000000367152342437500011165 0ustar00 icon-library/grid.svg000064400000000603152342437500010610 0ustar00 icon-library/shuffle.svg000064400000001556152342437500011327 0ustar00 icon-library/accordion-item.svg000064400000000655152342437500012567 0ustar00 icon-library/format-bold.svg000064400000000560152342437500012073 0ustar00 icon-library/heading.svg000064400000000172152342437500011263 0ustar00 icon-library/bell.svg000064400000001017152342437500010601 0ustar00 icon-library/separator.svg000064400000000205152342437500011661 0ustar00 icon-library/post-excerpt.svg000064400000000453152342437500012323 0ustar00 icon-library/at-symbol.svg000064400000002006152342437500011571 0ustar00 icon-library/copy-small.svg000064400000000747152342437500011754 0ustar00 icon-library/post-date.svg000064400000001135152342437500011564 0ustar00 icon-library/archive.svg000064400000000675152342437500011315 0ustar00 icon-library/currency-pound.svg000064400000001350152342437500012640 0ustar00 icon-library/table.svg000064400000000476152342437500010762 0ustar00 icon-library/search.svg000064400000000417152342437500011133 0ustar00 icon-library/level-up.svg000064400000000551152342437500011416 0ustar00 icon-library/header.svg000064400000000334152342437500011114 0ustar00 icon-library/chevron-up.svg000064400000000206152342437500011750 0ustar00 icon-library/capture-video.svg000064400000000441152342437500012432 0ustar00 icon-library/align-left.svg000064400000000207152342437500011705 0ustar00 icon-library/sides-all.svg000064400000000231152342437500011535 0ustar00 icon-library/pullquote.svg000064400000000420152342437500011712 0ustar00 icon-library/format-ltr.svg000064400000000307152342437500011753 0ustar00 icon-library/corner-top-left.svg000064400000001017152342437500012703 0ustar00 icon-library/term-name.svg000064400000000727152342437500011557 0ustar00 icon-library/sides-vertical.svg000064400000000370152342437500012602 0ustar00 icon-library/payment.svg000064400000000342152342437500011340 0ustar00 icon-library/comment-reply-link.svg000064400000001550152342437500013413 0ustar00 icon-library/more.svg000064400000000232152342437500010623 0ustar00 icon-library/stack.svg000064400000000402152342437500010765 0ustar00 icon-library/stretch-full-width.svg000064400000000165152342437500013417 0ustar00 icon-library/update.svg000064400000000437152342437500011152 0ustar00 icon-library/chart-bar.svg000064400000000267152342437500011534 0ustar00 icon-library/justify-space-between-vertical.svg000064400000000225152342437500015707 0ustar00 icon-library/arrow-up-left.svg000064400000000174152342437500012372 0ustar00 icon-library/institution.svg000064400000000552152342437500012257 0ustar00 icon-library/format-list-bullets.svg000064400000000347152342437500013601 0ustar00 icon-library/shortcode.svg000064400000000305152342437500011654 0ustar00 icon-library/megaphone.svg000064400000000535152342437500011632 0ustar00 icon-library/comment-content.svg000064400000000730152342437500012776 0ustar00 icon-library/heading-level-2.svg000064400000000736152342437500012535 0ustar00 icon-library/published.svg000064400000000425152342437500011644 0ustar00 icon-library/pages.svg000064400000000621152342437500010762 0ustar00 icon-library/lock-small.svg000064400000000441152342437500011721 0ustar00 icon-library/loop.svg000064400000001731152342437500010637 0ustar00 icon-library/justify-left.svg000064400000000162152342437500012310 0ustar00 icon-library/next.svg000064400000000250152342437500010637 0ustar00 icon-library/format-capitalize.svg000064400000000771152342437500013304 0ustar00 icon-library/accordion-heading.svg000064400000000337152342437500013225 0ustar00 icon-library/background.svg000064400000001042152342437500012000 0ustar00 icon-library/pull-right.svg000064400000000206152342437500011751 0ustar00 icon-library/post-content.svg000064400000000234152342437500012320 0ustar00 icon-library/info.svg000064400000000366152342437500010624 0ustar00 icon-library/image.svg000064400000000550152342437500010746 0ustar00 icon-library/query-pagination-next.svg000064400000000222152342437500014130 0ustar00 icon-library/heading-level-5.svg000064400000000750152342437500012534 0ustar00 icon-library/lock-outline.svg000064400000000434152342437500012272 0ustar00 icon-library/pull-left.svg000064400000000206152342437500011566 0ustar00 icon-library/format-list-bullets-rtl.svg000064400000000336152342437500014376 0ustar00 icon-library/audio.svg000064400000000425152342437500010766 0ustar00 icon-library/term-count.svg000064400000002117152342437500011762 0ustar00 icon-library/video.svg000064400000000433152342437500010772 0ustar00 icon-library/post-author.svg000064400000000545152342437500012155 0ustar00 icon-library/tool.svg000064400000000421152342437500010636 0ustar00 icon-library/lifesaver.svg000064400000001334152342437500011645 0ustar00 icon-library/cloud-upload.svg000064400000001211152342437500012247 0ustar00 icon-library/send.svg000064400000000475152342437500010623 0ustar00 icon-library/arrow-right.svg000064400000000211152342437500012123 0ustar00 icon-library/caption.svg000064400000000513152342437500011320 0ustar00 icon-library/star-half.svg000064400000001051152342437500011542 0ustar00 icon-library/insert-after.svg000064400000000354152342437500012271 0ustar00 icon-library/tablet.svg000064400000000403152342437500011134 0ustar00 icon-library/heading-level-4.svg000064400000000251152342437500012527 0ustar00 icon-library/link.svg000064400000000423152342437500010620 0ustar00 icon-library/add-template.svg000064400000000762152342437500012232 0ustar00 icon-library/post-terms.svg000064400000000533152342437500012002 0ustar00 icon-library/classic.svg000064400000000545152342437500011311 0ustar00 icon-library/store.svg000064400000000643152342437500011023 0ustar00 icon-library/footer.svg000064400000000355152342437500011165 0ustar00 icon-library/post-comments.svg000064400000000566152342437500012503 0ustar00 icon-library/post-featured-image.svg000064400000000516152342437500013530 0ustar00 icon-library/unseen.svg000064400000001053152342437500011160 0ustar00 icon-library/star-empty.svg000064400000001267152342437500011777 0ustar00 icon-library/currency-euro.svg000064400000001530152342437500012465 0ustar00 icon-library/category.svg000064400000001260152342437500011500 0ustar00 icon-library/drafts.svg000064400000000361152342437500011147 0ustar00 icon-library/language.svg000064400000000640152342437500011447 0ustar00 icon-library/buttons.svg000064400000001260152342437500011361 0ustar00 icon-library/block-table.svg000064400000000503152342437500012041 0ustar00 icon-library/chevron-left.svg000064400000000171152342437500012257 0ustar00 icon-library/envelope.svg000064400000000474152342437500011506 0ustar00 icon-library/chevron-right.svg000064400000000171152342437500012442 0ustar00 icon-library/site-logo.svg000064400000000570152342437500011570 0ustar00 icon-library/corner-bottom-left.svg000064400000001016152342437500013404 0ustar00 icon-library/overlay-text.svg000064400000000441152342437500012326 0ustar00 icon-library/text-color.svg000064400000000242152342437500011762 0ustar00 icon-library/superscript.svg000064400000000630152342437500012246 0ustar00 icon-library/stretch-wide.svg000064400000000206152342437500012264 0ustar00 icon-library/chevron-up-small.svg000064400000000244152342437500013060 0ustar00 icon-library/page.svg000064400000000472152342437500010603 0ustar00 icon-library/plus-circle-filled.svg000064400000000267152342437500013350 0ustar00 icon-library/custom-post-type.svg000064400000000333152342437500013137 0ustar00 icon-library/comment-author-avatar.svg000064400000000627152342437500014107 0ustar00 icon-library/wordpress.svg000064400000001545152342437500011721 0ustar00 icon-library/contents.svg000064400000001363152342437500011524 0ustar00 icon-library/bug.svg000064400000000640152342437500010441 0ustar00 icon-library/text-horizontal.svg000064400000000311152342437500013032 0ustar00 icon-library/arrow-down-left.svg000064400000000201152342437500012704 0ustar00 icon-library/create.svg000064400000000205152342437500011124 0ustar00 icon-library/tabs-menu.svg000064400000000372152342437500011561 0ustar00 icon-library/line-dotted.svg000064400000000373152342437500012077 0ustar00 icon-library/chevron-up-down.svg000064400000000261152342437500012716 0ustar00 icon-library/corner-top-right.svg000064400000001023152342437500013063 0ustar00 icon-library/query-pagination-previous.svg000064400000000224152342437500015030 0ustar00 icon-library/filter.svg000064400000000175152342437500011154 0ustar00 icon-library/comment-edit-link.svg000064400000000461152342437500013205 0ustar00 icon-library/table-column-after.svg000064400000000542152342437500013346 0ustar00 icon-library/tabs-menu-item.svg000064400000000330152342437500012507 0ustar00 icon-library/pin-small.svg000064400000000414152342437500011557 0ustar00 icon-library/mobile.svg000064400000000401152342437500011126 0ustar00 icon-library/query-pagination-numbers.svg000064400000000453152342437500014633 0ustar00 icon-library/reusable-block.svg000064400000000565152342437500012564 0ustar00 icon-library/lock.svg000064400000000403152342437500010611 0ustar00 icon-library/bell-unread.svg000064400000001113152342437500012052 0ustar00 icon-library/fullscreen.svg000064400000000451152342437500012026 0ustar00 icon-library/redo.svg000064400000000350152342437500010613 0ustar00 icon-library/typography.svg000064400000002661152342437500012077 0ustar00 icon-library/line-dashed.svg000064400000000273152342437500012043 0ustar00 icon-library/gallery.svg000064400000001211152342437500011316 0ustar00 icon-library/pencil.svg000064400000000207152342437500011135 0ustar00 media/default.svg000064400000000241152342437500007772 0ustar00media/code.svg000064400000000371152342437500007264 0ustar00media/document.png000064400000000310152342437500010146 0ustar00PNG  IHDR0@!N PLTE.ftRNS@fjIDAT(ҹ ! D/2 $ E cBC^2vO<p!hCP0CІvA/f.(;y%Vp㻱#}\DοIENDB`media/video.png000064400000000433152342437500007444 0ustar00PNG  IHDR0@uPLTE0htRNS@fIDAT8ӻ B1 aH2p=- 2mhi E8#K<()#$xXh4@4%#$P$@IX_m+`" fdpUXIЁl$L #7@A3t8;wpU 6线;l_[l!IENDB`media/text.png000064400000000274152342437500007325 0ustar00PNG  IHDR0@!N PLTE.ftRNS@f^IDAT(б0 C2HF^&x4*^# ;SR 0YR,HAAf F z3mgovLGPKIENDB`media/interactive.svg000064400000000452152342437500010667 0ustar00media/default.png000064400000000250152342437500007757 0ustar00PNG  IHDR0@!N PLTE.ftRNS@fJIDAT(S1 0 ElbH01.mdmx$}id ވBV"ڃx#V?77J󜏥=IENDB`media/text.svg000064400000000431152342437500007333 0ustar00media/interactive.png000064400000000477152342437500010663 0ustar00PNG  IHDR0@u*PLTEq[tRNS@fIDAT8 AA# pP%(Ԡdۑ}3=H,1w6ű0+\b5i@xU@@x&2S]t n !)s=Ȯ0!t+o<+*CO#8ƊNt PC8BЁI䈨dKr ^SD)IENDB`media/archive.png000064400000000641152342437500007760 0ustar00PNG  IHDR0@yKtRNS["ZIDATHKAp걣`]:B'/Aoq9 ew`?̼y_vj Q#O`]8Al'!,F04u "nhsM`5"x@[J-bOQBڑd䢢qX:؊R VpsTm)\g)/ vIyheɣW%nbihtad³'KnC~h  _], cpQ' <:Q}&47Xm"6?K5 -'ᓵBB҈iއS-fMHlwC KE*IENDB`media/document.svg000064400000000476152342437500010176 0ustar00media/archive.svg000064400000000607152342437500007775 0ustar00media/audio.png000064400000000576152342437500007447 0ustar00PNG  IHDR0@yKtRNS["7IDATHտKP!C-Zvp1hu "*.ıJ3ywAPv!\.5!U3J  4@T``)@6X >HE S.Ի7 v.If'` btҁ $=D۳ $w&p{:vq:%Qbr2 F.5C5ߜr>_ 觹 V/YŠ+ǹ@tr ˯rK<#*|;|˰dqQ*K uiVIENDB`media/spreadsheet.png000064400000000274152342437500010650 0ustar00PNG  IHDR0@!N PLTE.ftRNS@f^IDAT(ͱ DQ+]H CLa4|WE\cˢϪ^FfӻB83HA@@@@(`Q"Mc%YGX˪IENDB`media/spreadsheet.svg000064400000000714152342437500010662 0ustar00media/audio.svg000064400000000600152342437500007446 0ustar00media/video.svg000064400000000456152342437500007464 0ustar00media/code.png000064400000000422152342437500007246 0ustar00PNG  IHDR0@!N PLTE.ftRNS@fIDAT(0 CuPQ0FF`#d>,>R~SwrunApx $``R&u(R"u(cزB؃B8'p N ;f;u Xc HI" R$A j5 jPZlC]mk u-Q!Y!B^NgIENDB`arrow-pointer-blue-2x.png000064400000003202152342437500011340 0ustar00PNG  IHDR<xa:PLTELiqݿ꿿抿Uꇿԋގ~tRNSI #`Cs(G9!?5A*^n O 2q`ʬrb%bEuK; *t3ԫA4!IDATXUS#A$Hpw;,}gB {^W̹}@WmmUkG1Ug;0ƸCmcm}-vv?BK#vIcnGGFXP3J2`5mX6m5v 4d01u Mz2:B zz{l=r=qm=^=h==n==k=Ξ7ݞ@'&4Ho= =31n;>o#"ympP?ATP0'~W hRIbeINpbiv#c)Ə9.'\&o  rBc)لmގMېT H*l+&m@` 6,"ʂI-4׋AC )\Y8_<<1g 93ݚvΘmT;<³wm|J6aNw`ȋY!Eb۷oM!, YbM_[ :a܋D멭|hڻam i-{?57,ݛ wmkB9>*iC(wUn}\meFhsY_[]/(Hӥy:u$L8-J*OA!;?\v9nG쌙ǚc]"{n-g%rf( ͐fo?Vsڽct)VG VOa퓍fmNx6l#&W**alOb9bAFL3TxtM72k=6ѝ̐uۂy&ۓ.xxo.?,#Sv>>:::DDDHHH<<珬Ő IDATX͙y\IfB& dBB"R@EV"֭V+j .u_Ӫ׾}|ĤII$; d&3ϧ/|g.C=s=ܘAi51? I%HeTryeѝTr"ɠ;&%H9$c(1EÇQBܓl|b LTi$QE,>q)9C'iOfPa'x~C 3{@b|Ĕ_gD9pB&1XjvE@jޮ30 s]#~1j惡AU4]=*3eCfяd6/Q,^XNw0Mi{:#>@r\#=@ MJ*:N7e'j"2o‚kZ1WAH){0f PuY\Vb!WA d@(Р1eN-zO8v͸=-C/L w 8^ %Lo!){nn34@rEb!J*xeXc?~ $\DS7{|س%t/ g85_-s h=miZ((Q=) !Tb^Eaa,R~*Љ&@2>aUqsX1т ]Ȝ>c tyGMY(bS<$H܋(:P3uQK&TFyvFv9{ׄR kw4[*G2$ϧ ,E# IF234#o;P#u|p}rVMmH7maqBKp~~C 3]< 5 5a(@6b*H}(6[(c22klƆn H1^"Y300`- arILHxVbՑ( \;!0L4b,]ϝ]@ޞ9H?فujʿ&%10p<4&/ vDƤ{Jxbf8Qߜ1%AD(n~WW=8/C?B(@ԛbv7vֵv]56'9R 79 [do1} egxaُPfo;$[,ja=kY^b桎bQn:/^j-P'ܨX,#xu@9@%ˀt#1V#_^Ggj{yp>|Q JY𝻅;CyUNߠ< (7Fځ8Sg hLļRg*zS|0 Sft cX{u;ZVlE Mqqe )0Byq58t^XAq/} 0 f :o'62J;@}M"qeFa8Oecy Fő)\cZS?,N`M@輸 qŷ3q`HE˂(&MSe]Ɗf~ɌA0YkB(f^^&'c;;7 j3k X!'7{lZ6Ϩ"qRk_B*c}a8U TgB|t+o#P7>Iٛql(K5o L"0bfq\^UœD(ABk9x09E_ٵ=И6k9 gJN-c`-FFa}E⸊Q ʺ7򨖾5>-P:&K9dx󙶩}5m8 u dc_;0~vv7I r^ٿkgy)g +~Qh" `?0IqsFC΀`l5Yˊg}" <0ӯͼ6A\ʎk^h8ĺ8BMqĝijK.`EIZ-%hfY(*7jo[X^"wE s֧-+H2jHJ-F.P1*H,OV{('?}e($D&OVBȢq?YM@IENDB`icon-pointer-flag.png000064400000001417152342437500010577 0ustar00PNG  IHDR$%*\K=IDATx͗Mh`m82ec LufJpG2>zv(DsDLyIR x!Y9*VKD"ؽ||]V- ^FYj@GrÚN>/N3RUh:`,B1~\n*Vn 5RX I1: 'qB8V:>yQg! xx06¶׀8@K\VH'7&c'h. ] NswE |hCqg拓rG:N|r =֩W /R-B< BZ aY =%Rб-)F oZpqEcm…!m?qq ]g4&9!ld~$rL2lҨR*Ę qp͠Ua ˏ r6+3ߨ2 ( oxCG V)29]hQ獀lhтUxBY +TF3][7{4ҵ *UF*dŠ+Qb aa F`$Gl ($Y4I iaa ` XqP',HB h0u\(ą A1 g f,ș $HDh0¤|' i 0 ͑@U1 B4A[ @LFo QBd"`h@H(>ABpõ{BE t8lP@hAq~qo|@ t0$H0Q ɂD)ڑ,5$Fee[`  &po4ѵC\p4dPoG>hB,l@R+Fs,q5E6( Gt с`X!~, ~6lvoove6J{eH.ly>|b yk-oq RQPNMKIHGEhvTtVTSHFECB oQK XVUSRIGFDC`_QpG- bZXWB`?ACvXDG-YygI"5 -YEH!_~P;A1c4)RG0PdA>QĆ  R%XXRFŬ{3EREsްQ#  5"*( cm PrAʏ7eҘ1 #2pJcof-% RV1E1bǀ۷YVwo20`Р+(j…s%|p@ur̢;Yȉ|DQ*Vȯ#H0H@ ) uP7`ZZ|C(R '@A1Xp %С HlPdm# 'XU*bp#!Yd<$h!.,hTǗ @ f A"(I ^" W%Z"490aNḁ#(T[!-xo%Ȃ ҠQ0!0d$f 3f 8C C#2h 3ps *4` L4d`E8|rFĎ'bwG=A}D0qE +VXG1*T /w $p )\#h]-AHX(T2! d, H4t(|G %J(0ʜ3"D}A.IpO eKqys;=$Y .\`bK-` O,VPF1#A [VKTD A $m)R@ M9 .3)P8q"Aar޴0!B gTJM0 =(-A=RȲFa*N/Qb@!oXw7T&ZQ$ItN[υ YxB wĂQFBl\6LdFGѡ̥`A S AD.XBE`BB ѣY`Dm`!A.a|`x?X(W j@s7BZ Io<zG;4 9D[qC: oB 8h (dA|EB`å d䖆;)$4 8)P"DFdB 3jyo 1P ! #p cB / C5(P 'k$` ) Es Q r*Ђ poAQhoE$nrLDajL o-,4PLWT`3t,`XfԃRO aQBu0!~, ~7 rtooy 7MrK.}wqw{-om zyXwl|TM |ba J/y޸a]\by.|p |Kk\>.[HfEHa(ǯEs2ѧ% , ƍ /`@I>%\b?8ٰe xɹ4ti l8xE("4UL"%ϛ,t7d'MQ(Q|a@"lpf+?lGBV;ؼÈ"-;y⤴p1Bї@5="w(;ݒK\9R!I<Eḃ7yȑ#H(xc:2dBr|RE1Û2aހP NHq14(r0 b@Q`8YqIHB .P"s U# 'PxF^D4. աÏ' ,B 3`H*DA bV1@ 7CCA^+8 - 3Pwc~`"uTK0|,:= | ,y>Pc! , $E"WQ lñ  GRɹ gg;7s~v(ܱ̤ g !( 3aP b$`0]b2z0.\=$~jES- d#,XbمHhbE!#F|4DP*U#4DZC`Hw C$H(a"/(PDa&NmɓĈ"8"%LXscdxjt&!tz,hLRbI%!ŋ^ !R$ }Y 2hظ/`1KaĘF?RNB^\1 9xD?7hԉz3^'aPuaPbR ! ,  HPI9w(|CG!)J(3RDI@>PP'Le8lА… =(Sf c?;1`IaBoP,PP`> $H`Ga,f B ,#fv< m !CY $DBB91b9"qp0Y# P8E7fDq{2.t3A (Hf! ! oTa# w 0C¼Cr4Ea  8 $JER(`oQS`B fL !0'pˆQ8B `d (BAPHB|c.0Əc(?(Ea!“*&*]B ^ ,>Ph Yhŕ0Z, Y($GV(4Xh1^ - 0ȡdHDBTaXhA ԠP/ :W|ae(SPaŤ[q!q 2@s覐T@Thફ 6k M<Ķfp 9x` AI,ODA E 6CThHW@M PVXVk¦, 8..-,)M;7ă0//,2Qzhؠ1𹠡ɇAk:pР!C2d BA㖎@bpP$QXy2ظa @+P(@ GeN@a))9r萊 &`#h/`yȄlx D/:z`Р\BlH  u (0_BdI$@Z  8#H2"F4i(R$5%K F`/b;&NHb%.a }@#&Hn3i|,Zt#`zHYp#;xb?DQODRʕ,EGI }]L S!t`#\Ȉ! p, Hu(|SJ(31֩`ȑ"DHHC T *Ơ8a$fDE/^\"E >GBaG9" -<Uę37)J7i̐!#Ƌ,V@ѓOE;JjԘFcKOU= 6("B uYym4tɸ ?zN Zt7fB%&Ȁ7vxx<O&6Q-xT<(q&C oD@0jGo]oܡ_ I! сl0BY!2*􅄜iA.bC A ! iAJDQĔ U!ko`%`Fa!nXp\FypH$ YQ AZqFu*L "HgLP L4y(C8JAP8Q}*P\o Dq&F!VLBqt 8FzNAWhE|` ,@<[X1Vd.@o 8[t  WdEa0  XQXv! =x0\h{AΰBtaH I8PJx=Q5s QAH!~, ~5>voov=|4Gj=F,v\MLKJXuf,olX54320/.-+*N>uEQ87651,c)\oNHpN:9Ǵ2.*)('@  @>@҃О ޫ !2dbDb#V ;Rҵ5*䣇${ bcCA_=t 4#jP0qӅmppUI - KȰa O'H;IţJWb B<| z&s-nbPU)Q\Ç#+uddwE8-Fb:tBXXI~o9SEcT e0RdF'*5lb| $A DD)GXtкMQS-GuUr?(;w-logo-blue-white-bg.png000064400000010027152342437500011114 0ustar00PNG  IHDRPPIDATx] xU[V*)KkVkJ]jKEl?t! {,E@F%BNy̝wI{oޛ;˹s3WHϋ/ӲzBpҖo,XW#Zf|mvD9Fϥyo1^743l v#cE&ehU1{充 _cZWevfw(6| Y I:x-&D<66lT)|#$gVN ɓ!'/6wBh}EV k7" f}G~#M+GɥiB]?+Ż'jGBP%\믴/%&8E"ϐ44J1ǻS  dϙj]ni%_9{O?H6T|AGCgUoDEt,?0~q=y~9Z.cv_$02F9aL)l.ӿӿ2ƍwI&VgHIωr /zͱ`+Z^U=5aBpb 0< />9c"I03N,}}|]FbQ̰飼¼W OQy;|37Ʀ}(cѲX`xX);ѣ <5S>ڤ9G:=ܼ0^l_w Z)վ\>cǫ2&0'DZJܶ'~{YI?fRaʼn;<lRGnQ Nf 6[GBv2ubQLW uȉj9PzW1)JAwChELaF3._!05 #)zn_P־wHU eXf,+pK56o9lEcVjQb \I;U;{CqZaXM;]@Jfn,_UP`l5 \1}Jkm|n3Rx㫳0h4@t+3.!sEUfRFB'+^լ#J_W5݃9?f_!k]r9ϐyS>=dNT;Vف5nA'mi<\ ~KtUmMؖ4TD#~SpRA_+М}'I>]ioee|P3S5Fae'KA>X`~`ߵ|MKy.Mf,YVi1tҢttƖs[Rx/^bԊqWY ε/KN#GO7/gbp&h0>#10Wrةnɖk'+o[,_EYǓb;+ K MO1^;b,"f- 5N߻[ŭU1a=TѴv1Pa`sfk͹S!M9`"LFg.8U"RRa: t{_b,B[HYD;*E\[+12(8-3@vض."$Cs!͛1fLϢSpH3_Nm%͗/ 4d3[*c!|2s5݆˒k-Qf@Ɩ,if$>g"婖$::"ʋnaZ`S c^|En%F=kևMZ8ӛy^ʘ/Ūm;t"3SvUbO}R1C1c4| C\6TWϫ@v 'Wq@>ӹ_Dx6tpr.e /qqHHY2Py^|җn0Uv¸%Zp0O*ƌ1fq}Rk"WrhCrcF> :1/8oD\-1?SU1/"Q7)[LZUĔ0Y1W&J6W7 0;d'dr5s DQۜVa?hKʊ1r J/Ƽ/}p{krj{0jXbdVrUWCND/ȳf(ˊwH#o #:ȭSm6&ɥ1_+l ^Ȩ yPݿ*2oxS&*l:uW.ӶLT"ד5NhdԮx3烥Ί=`:)LQT&wHopNL0G+"D[ۦoj_MhR"< F39Iǟ[NKc5;܃kTDy-au)XHgP(c` 6a%nn$.)# ["scԤx8uӑZeӛ bYBNmkөH72@ HƧrg d, .Sizd72q]fcZ q^GKqC콀;n\}|yYϵc9q ,N  ÑF s~+e`22R T!ڧ Mbge<\9x^aP\)]Zdzd@Ȟ!C0cX7"1c*~k'UA(d׃;hp-0֑>٬W0s? XB;gvD;/|wܴ uD`LRhsj^m:FɱéGC,Ou"ꕜ:QJrc>_ byJIENDB`down_arrow.gif000064400000000073152342437500007421 0ustar00GIF89a !, @ːыV R;admin-bar-sprite-2x.png000064400000007637152342437500010761 0ustar00PNG  IHDR(1UPLTELiq^^^eee___ddddddddddddeeefffeeeeeefffcccdddfffNNNPPPɾȾ|||eeeeee222eeež¦zzzGGG---ɋýŏnnn999GGGZZZeeeһOOOSSStttppp:::^^^___Ř~~~ssswwwmmmkkkeee(((CCCeeeTTT˱fffkkkooonnnjjjlllmmmöܰbbb%vu]tRNS   "  C`0`0pp(@@-PP %$32O8fuO|.w{޴X2{bigMPvmjoK5{YňdLs 3uf-vK>^&\:kecy]H\Y#B R8ɉKn, 6!ɢyh_"G4!+c[JB-M{jQN&&A'iCωkݥ{ܴd->3C̅ JʿsR1kL*MD\hZ*ƋiJ"<+P4hР|ꈷNN>Rqjjz>5W.GϗVz땫W\^]zrTs33^~mzLx P/ޟGc(ęޣ&/ݿKU?Skx 4hpS;oQkj;?MM\)T}cׯ , ν86}Uꐊ@̅ )uO u::"E}F-SEx 4Ö]FȩNªp>*0.օ V. Jypqv;ѹۆtA밋6w8'ܜh:LRK+W@ńNij%ȱ"G '>\(Xxټ"f]1pBn8̇P\͛7 Q!^$RaXB VoPKH~pm@Gr RgTu!Lj+!# yzBnʁo%9_#jr.;mBsqۊ!J \,Dlg٫K¼i |gsnaGA08=6ޞ5O elt5r lpTBtyв(W_F)TB|VdGո)PYԠFj$[qƭKgʘmG&V:-fCY*U<\:˘+h.q\P&j}MGz2.inH`9V!%=}>+~hV; .eW~"U,:D_ MQԤ3MM>jrvF[ pz*,KǙVYWV旗D"e HC)$E2D2ɌbvљĹe)j*"*E,R_*$*"t"GL1fx-Eʡf>,(x^v8!c7C(j@:ϟP2GrH<X2)e@|1,7:Z=Dc)!f .=TELjX@ WD ,߀# r.;YmBn"sq; R \,Dlg"'&Se4 >׋9; 'oO/2NLG(ZrA G%\ˇE2B#˼<ML/bA"Lp exܸQ32:QXP#zpŎ.c.c#Yq@3zJ< @)e\Ҭđ" )rCJ{T/π"g=Fa{9@xSh=4ab윁%`$1uCq߽HNc}[H]R}!YܱN2uP{u4qB }JJ;ݯD1"RD:ǏVeb!FdD3{DCkK0ͥW"(xyA!&.БˮPBy7 fEr;Lh\pӖ-^)(=_DŽ/̈́X> $t\!ނv3@k:5,C1 ,2 =mǹ/cU2vӦ793j7xh]wCWkx`wPc{V@FCѾOʞGѡвu2Lqr(:8q$s噧jBe{xomoؾhakn.k|G\v߾]m]R&uzǖSiB;@:gXѶohN} |`ۇB!A>ˉ61ƦցSQr =֯fsLd uoD`cqo#NM=aT7mAvh ؽi=[{ $iD@{֠'8rg,m;_'3mE_(퐁xON smm{T(pWC>?>c]&_|n&[i.MG̚۸u+HV|$Ś( Ĵns1}4Jѱ~S $=b11iŠ."yiD\KiXژ}ݙ~X ; ?4A7K*6&\/"\bR|*6&*ld!^zY2\,6֤bsaͅ*6ME7Dpu7XPK~IENDB`wpspin.gif000064400000004004152342437500006556 0ustar00GIF89a{{楥εŜޜν{{{ť{sssssŽ֥! NETSCAPE2.0! ,@p:@3dGҼ|3P.R11`0"p   M  tJCpMB} C}v]fZTC C Rlm stxnprEHLCA!,@P:@3l2G ! MEPQb  ,#X,4"EQ v ~  M M ! C  Ov s{,bFqZeN XMBEHKMA! ,p@PP(2Xx40Q}!0$2|ΠP P0pg%tr J (J  _Er kA!,@ 0"C*"CX(4J$B(2 o"2ba0BN3v BB  U o OE ZB   MA!,p0!$ pI`$haXb+HFU,gIV(8*9S }~J} qtB  l lA!,v@A0RAcY"SBxDW'$,3B^."Km*  }~s} v % J %K } BA! ,c`&fEH1 CվD$ݮ/2PHLjh,ah4hLXqc0ȴ+ *#WG#!!,ɄAKC*"e$ Z0PG&!Dp Nm BB !    x" x O YB{BA!,s0SX,pi<1DԂ@Pq0;XBOK ~Tx  Nx NK"K L LA!,e :L(bBѼ Z15Ka!C D*e<e9X3RX*[2B ,)g@2! zK |KX Q"!! ,r@P0p $ %cÈ@ 8"!`oB| qzgk zB B T  C "Jr KA!,@0 ,A*")09xU Cp^88!1@#BB{ Q    y{y syY  mO ZB MA;admin-bar-sprite.png000064400000004643152342437500010424 0ustar00PNG  IHDR;I_ jIDAThY PSW>HBU4eˮʔn[w]*"fTꭨT_J- !!!$H (c;lq:nuZ`Ha3;̓s޽{;DsE2DvḴ5l5Yu-:kš6EWn6Ϯ֌c"ĺ:Vǩ1Ȍ;˰,F4Ǚ,.+|LԘzVQ+Jlnm` _`ד ƹO]eM $qg+2FĖ3]Ԫhh-_y{~cD]Ϻ uIƺXv ~xj{w+b׳}!HcH{>] R.O-vw`_sEl\ӾqElK_mƸ-'x$ ?jX3F<;*`Vo2`0| FȾ|v'>ӷߞJ"r^9]jlw8=+S`ꛋv(*;s0m =gzopY߽QٚcX_*+0]m{4ZA > yuKu}RuX[@s@CMáhĊl:'0;UwG݋Q;E@/޹g ݎ \iEwj`ٜX~sux>`|$ZM9biD ܝY2'F@@e3\V TwY L)٫*iyė;Yfb/wء7q\fI$W^R~`bapIх U61Y/4{R33=VĀEUك*OXZ3 O*$AKY{wyQs0$n~ %u]2Ei}/Yz ;i4`-,<*+n5oXˍhw%O_qNby|=.JcԖ A#gRe OisπgGf9HU*L?Vm>_$; '-_6fft q_yX @,D,-8l G[&(DBtD'jD@JbHJfKAbFӲeD^IoTNGZÐFݔFZȾ!JriQ4i !WJ&%8hU"nJ:$W(J@jHlڋ$A"VtCB@pWF*md+$^X>CAS $ѤH?P-6;B`%:HΥ xb P<9|B &{3{бSؘAxu^ơ،pxWi]Jb11{a1fD?>)3Êllڏ:m?!RVmF}#mYf_Ba+Jh¦t޲;HI>G+Ic + )!:K#0SMY8ArF<0H^vȷ( /`QTLFWo2 |GT9)!s(P^=1/N{r -Lاdp6Y^Ć{V&DKgI_r Ɣ %EZ0Fp=61m<ꍑ /󌇩&".m "E6ldB|Q' =aƉr)Lxw7~zLdzL斧 q\(78͋ ]߬U}u.͙5?>u:=(;[ͪ)Bc)r5,OEΝ4)M-p A-Qnrbhi[kTΗ NtV$\ O<)t FjP7FA T?|(_e{7Q7aE|ikSN]BL(2$ɸmvqd:Yhe7qfXN^4.꣊A@:'[Fo.6}6­=vWGY=xIZ1S0zJ crs\9x^d'Ms`8ur[\HJcseb=WZ@x4(9v'~9i+#< B?t\o1.;upىk-zA$2Dk#Sk1b<&\2?2Okц &TIENDB`toggle-arrow.png000064400000000441152342437500007667 0ustar00PNG  IHDREY-?PLTELiqtRNSZ0xϴKi$r)~IDATI E' \䃳d*=ϱyW-rD56t JNw#YWyv&`Qz ]_Q5עYC q* $l~W'IENDB`spinner-2x.gif000064400000016560152342437500007255 0ustar00GIF89a((ӊ! NETSCAPE2.0! ,((@x0`y'$Y0[4P dƋ[䎣 ky>@P 1Q8#UUq1`2(`2 f!"'OvochSce"3B5#q%K*s>2"S m$s , z#} u"xϲ N5{RG; XZz^` ! ,$$xc(a %"] ,i Q4Y3MGW3p@+!jBυ\LiUhl͗ ! ,$$xc(a %"] ,i Q4YeG.qCEc̈)2XCs%paAQ;s]yI5">,-<54-{ pbhnRV^ iCQjK)2y0Rmgȸ+D&s I ! ,$$xa(a !De[jCn]i=>=65r kbi b t Bn 1}8į60ɷ,(A ! ,$$x#(a !De[jCn]i'` O} ! ,$$xa(a !De[jCn]imkp+"54be}`H>MR1hnFAP)2h70|4/1d')v) ! ,$$xc(a %"] ,i Q4Y<h]ohq;bc̔B#<G*8 \"nE\o-e $@ ]{cgtUM q`N"qF#a-e$`#L" m}~cBJ)2hx0 >')v ! ,$$xc(a %"] ,i Q4Y<h]ohq;bc̔B#<G*8 \"$ޛ6}t[GvhMbUxIn` mnRIn@~#UF e]`H{.M {LnP2h}0 +d')) ! ,$$xa(a !De[jCn]i7` #5/ BoF11,T02[(*" ! ,$$xc(a %"] ,i Q4Y<h]ohq;bc̔B#U dun؃d# ~{P"M=ϲ[,$_{4cpMB4f^DM5aHREM=a , n< YC@ h..EKq02i7 +P/ #&Ѷt ! ,$$xc(a %"] ,i Q4Y<h]ohq;bc̔B#<G*8 \"$ޛn;eٷ.~,$^z=b< ]CR  HCM m,L 5e`K# <@N B>4&%GP70 +P/1d')s ! ,$$xc(a %"] ,i Q4Y<h]ohq;bc̔B#<G*8 \"$ޛn;eٷ.~,$#b4& ]d@ H=` M-M mQ$4LB d %KP70 +P/1d')v ! ,$$xa(a !De[jCn]idaH}.Ma o }Loc[0d70 +P/1e')w ! ,$$xc(a %"] ,i Q4Y<h]ohq;bc̔B#<G*8 \",]2zel` zv@ c"^"RSt#Bn6cb{ze]$`H|Mzh}nFAP)yc70 +|')v) ! ,$$xc(a %"] ,i Q4Y<h]ohq;bc̔B#<G*8 >qtĵ]ODMk- { }h%B#o+=<wezMmR1xvFAC)2h70|.p')u) ! ,$$xc(a %"] ,i Q4Y<h]ohq;bc̔B#<G*8 ldMw Blc70 +P/1d')k) ! ,$$xc(a %"] ,i Q4Y<h]ohq;bc̔B#<G]Zp -XojH#v xa#g rs>g2s=4C~-5Y> cH>Mo | LiFAZ)j70 +P/1<&Mr ! ,$$xa(a !De[jCn]i'j ! ,$$xc(a %"] ,i Q4YQ=$>C؍$ 1f.6YhZ7Y*-L*Ƭbl6;Y$tl"=Dwx{6p$-jfhJVf a nHy)270 +>&Vп !,$$xc(a %"] ,i Q4YسMG 0Vl6c̊7ZI{&RUѭ k @>$$h-4554-v~m_dklt |fG DKC)270 +/1R&UP ;spinner.gif000064400000007110152342437500006715 0ustar00GIF89aݞ뀀! NETSCAPE2.0! ,@\x.&I`V)@+ZD($˰kbLw,H @G\e7S(C*8q|%L{(t'! ,Px0"& )C F0gH5M#$l:5̧`LJDE`X! ,Px0"F )C $PJ!n g ậ}ۭ42l:m'G"LCZw9*e9(=4$! ,Px0"F )CE$PJ!rqwd1,CwІFO3m*lnN3n(f  d. =EC$!+! ,Nx0"F )Cč" ٨njq<*&g"SZSLxI! ,Nx0"F )Cč=wdFYpFG3Uqܤf"3'pݶ$XvĒ! ,Px0"F )CčH~GnnB@ͭ-'ARC2#'g"PLj\Nɂy,HT$! ,Ox0"F )CčH~G\h7#|0R#'g"P\O!)`ɜ$CX cbI! ,Px0"F )CčH~G]dnw$@=f"P\إId\iy,1$! ,Nx0"F )CčH~GԯAdAA_C1a"h"P\d\N}AĒ! ,Ox0"& )CčH~Gԯo`NQ<̄ȡK&`ɶCX cbI! ,Ox0"F )CčH~Gԯ)!-f&@Bq %`ɶ#CXDH! ,Ox0"F )CčH~Gԯs( 2Lp֬! %`ɶCX H! ,Lx0"F )CčH~Gԯ\Hf\l]z$%ÒL cq:K! ,Mx0"F )CčH~GԯWOR dItQ\*5%rJ cY4 %! ,Lx0"F )CčH~Gԯ=6p&ekF#K&"K! ,Px0"F )CčH~Gԯ> p'ڇP#z %nx,1$! ,Ox0"F )CčH~Gԯ> p' n&90'v KLCX cbI! ,Px0"F )CčH~GԯHp#j&P0]zȒt4r(Me XJxnL&μ;l63<̼!fu3<<`k__߯===C]]]I3^sp.K?#X,ƳʩT 0U(q 98e,IGEhD< @Y(eԅ:u0y~ibA unEc%/A/X5u#Ă w1]Cp b@, yFڀߤ䝝 !FĪ,ormmbDT ]bËms>;}#rB,b+9 fffGGG;8v%IA'&&%nXY&AT  !Y @  !^A%#vv xC2 [E_~i'+UoHE uхc;?]Oތ )Z<'Y͏(1H?G0P)4<S[A7zhPy f-B coE zb@C677[F0 zLhh#"e_=^P)g9)xAeA7Hzo8VVVspLTĆdV[9 w=NpHSl* L`>rڨJ`?mr`l1#z͝Cn9cr<= ȅ܀?v!r,GlsTI!b&`]dbzo{!6cn- ןKy fnKzVݍqn(XS̪[ɸE͢vuUV3v;~|QWE7EDYKXksU$YIUgEIENDB`toggle-arrow-2x.png000064400000000542152342437500010220 0ustar00PNG  IHDR&4%*PLTEl> tRNSTUV=0IDATx^1n@El፰RL"օr+c^JDBƍ+!Q@5<+˭rJl/DVcG?Oh֊vhv%دz+