<?php

function printVal($val,$escape=true) {
    switch (gettype($val)) {
        case 'integer':
        case 'double':
            return $val;
        case 'string':
            return "\"".(($escape !== false)?htmlspecialchars(addcslashes($val,"\\\"\$\r\n\t")):$val)."\"";
        case 'array':
            return formatArray($val);
        case 'object':
            return 'Object('.get_class($val).')';
        case 'resource':
            echo $val;
            return get_resource_type ( $val );
            //return 'Resource('.strstr($val, '#').')';
        break;
        case 'boolean':
            return $val ? 'true' : 'false';
        break;
        case 'NULL':
            return 'NULL';
        break;
        default:
            return 'Unknown';
    }
}

function formatArray($arr, $level=0){
    if(gettype($arr) == "array") {
        $ret="Array(";
        foreach ($arr as $name => $value){
            switch(gettype($value)){
                case "array":
                    $level++;
                    switch(strtolower($name)){
                        case "globals";

                            $value = "Array (..)";
                        break;
                        default:
                            $value = formatArray($value, $level);
                        break;
                    }
                break;
                case "string":
                        $value="\"".htmlspecialchars(addcslashes($value,"\\\"\$\r\n\t"))."\"";
                break;
                case "integer":
                break;
                case "double":
                break;
                case "boolean":
                        $value=$value?"true":"false";
                break;
                case "resource":
                        $value= 'Resource('.strstr("$value", '#').') /* '.get_resource_type($value).' */';
                break;
                default:
                    $value=gettype($value);
                break;
            }
            if(!is_numeric($name)) {
                $value = "\"$name\" => $value";
            }
            if($ret == "Array(") $ret.=$value;
            else $ret.=",".$value;
        }
        $ret .= ")";
        return $ret;
    } else {
        return $arr;
    }
}

function getinfo() {
    global $ip, $host, $proxy, $ips, $proxies;
    return "[".date("Y-m-d H:i:s")." $ip".(!empty($host)?" $host":"").(!empty($proxy)?" | $proxy":"")."]";
}

function random_string($len=5, $opt='dlu') {
    list($usec, $sec) = explode(' ', microtime());
    mt_srand(($usec*1000000)+$sec); //second seed
    $chr=""; $str="";
    if (strpos($opt,"d") !== false) for($i=48; $i<=57; $i++) $chr.=chr($i);
    if (strpos($opt,"u") !== false) for($i=65; $i<=90; $i++) $chr.=chr($i);
    if (strpos($opt,"l") !== false) for($i=97; $i<=122; $i++) $chr.=chr($i);
    for ($i=0; $i<$len;$i++) $str.=$chr[mt_rand(0,strlen($chr)-1)];
    return $str;
}

function abuseipdbreportip($ip,$categories,$comment) {
    global $abuseipdb_apikey;
    $data = array(
        "ip" => $ip,
        "categories" => $categories,
        "comment" => $comment
    );
    $headers =  array(
        'Key: '.$abuseipdb_apikey,
        'Accept: application/json'
    );
    $curlObj = curl_init('https://api.abuseipdb.com/api/v2/report'); 
    curl_setopt($curlObj, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curlObj, CURLOPT_POST, true);
    curl_setopt($curlObj, CURLOPT_POSTFIELDS, $data);
    curl_setopt($curlObj, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($curlObj, CURLOPT_CONNECTTIMEOUT, 30);
    curl_setopt($curlObj, CURLOPT_TIMEOUT, 60);
    $curl_response = curl_exec($curlObj);
    $curl_code = curl_getinfo ($curlObj, CURLINFO_RESPONSE_CODE);
    //var_dump($curl_response);
    curl_close($curlObj);
    if ($curl_code !== 200) {
        switch($curl_code) {
            case "0":
            case "502":
            case "503":
            case "520":
            case "521":
            case "522":
            case "524":
                logMsg("AbuseIPDB downtime detected, Result: $curl_code $curl_response, IP: $ip","abuseipdb.txt");
                break;
            default:
                logMsg("Ip report failed, Result: $curl_code $curl_response, IP: $ip","abuseipdb.txt");
                break;
        }
        return false;
    }
    return true;
}

function abuseipdbcheckip($ip) {
    global $abuseipdb_apikey;
    $headers = array(
        'Key: ' . $abuseipdb_apikey,
        'Accept: application/json'
    );
    $curlObj = curl_init('https://api.abuseipdb.com/api/v2/check?ipAddress='.$ip.'&maxAgeInDays=7');
    curl_setopt($curlObj, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curlObj, CURLOPT_HTTPGET, 1);
    curl_setopt($curlObj, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($curlObj, CURLOPT_CONNECTTIMEOUT, 30);
    curl_setopt($curlObj, CURLOPT_TIMEOUT, 60);
    $curl_response = curl_exec($curlObj);
    $curl_code = curl_getinfo ($curlObj, CURLINFO_RESPONSE_CODE);
    $ret = print_r($curl_response,true);
    curl_close($curlObj);
    if ($curl_code !== 200) {
        switch($curl_code) {
            case "0":
            case "502":
            case "503":
            case "520":
            case "521":
            case "522":
            case "524":
                logMsg("AbuseIPDB downtime detected, Result: $curl_code $curl_response, IP: $ip","abuseipdb.txt");
                break;
            default:
                logMsg("Ip check failed, Result: $curl_code $curl_response, IP: $ip","abuseipdb.txt");
                break;
        }
        return false;
    }
    //if (json_decode($ret,true)['data']) === null) return false;
    return $ret;
}

function logMsg($logmsg="Error",$file="errors.txt") {
    global $prefix;
    $file=fopen("$prefix/logs/$file", "a");
    $msg= getinfo().(!empty($_SERVER['HTTP_USER_AGENT'])?("\nUser Agent: ".$_SERVER['HTTP_USER_AGENT']):"")."\n$logmsg\n\n";
    fwrite($file, $msg); fclose($file);
    return true;
}

function config(){
    global $PHP_SELF;
    if(!file_exists("include/db.php")){

    $dbhost=isset($_POST['dbhost'])?$_POST['dbhost']:"localhost";
    $dbuser=isset($_POST['dbuser'])?$_POST['dbuser']:"";
    $dbpass=isset($_POST['dbpass'])?$_POST['dbpass']:"";
    $dbname=isset($_POST['dbname'])?$_POST['dbname']:"dbname";
    $dbok=false;
    if(!empty($_POST)){
        //check db
        $db_link=@mysqli_connect($dbhost, $dbuser, $dbpass);
        if($db_link){
            $dbtest=mysqli_select_db($db_link,$dbname);
            if(!$dbtest){
                echo "Error";
                $dbok=false;
            } else {
                echo "Suscefully tested connection...";
                $code="<?php\n\tif(!isset(\$newconn)) \$newconn=false;\n\t\$dbhost=\"$dbhost\";\n\t\$dbuser=\"$dbuser\";\n\t\$dbpass=\"$dbpass\";\n\t\$db=\"$dbname\";\n\t\$db_link=mysqli_connect(\$dbhost, \$dbuser, \$dbpass) or die(mysqli_connect_error());\n?".">";
                $dbok=true;
                echo "Saving db file... ";
                $file=fopen("include/db.php", "w");
                if($file) {
                    fwrite($file, $code);
                    fclose($file);
                    chmod("include/db.php", 0664);
                    echo "<a href=\"/\">Proceed</a>";
                }
            }
            mysqli_close($db_link);
        } else {
            echo "<b>Connection Error:</b> ".mysqli_connect_error();
        }
    }
    if (!$dbok){

?>
<form action="<?php echo $PHP_SELF; ?>" method="post">
<table align="center">
<tr><td>DB Host:<td> <input type="text" name="dbhost" value="<?php echo $dbhost; ?>"></tr>
<tr><td>DB User:<td><input type="text" name="dbuser" value="<?php echo $dbuser; ?>"></tr>
<tr><td>DB Password:<td><input type="password" name="dbpass" value=""></tr>
<tr><td>DB Name:<td><input type="text" name="dbname" value="<?php echo $dbname; ?>"></tr>
<tr><td align="center" colspan="2"><input type="submit" value="Proceed">
</table>
</form>
<?php
    }

    } else {
        if(isset($_POST['main']) && ($_POST['main'] != "")) {
            $main=$_POST['main'];
            $code="<?php\n\t\$main=\"include/$main\";\n?".">\n";
            echo "Saving config file... ";
                $file=fopen("include/config.php", "w");
                if($file) {
                    fwrite($file, $code);
                    fclose($file);
                    echo "<a href=\"/\">Proceed</a>";
                }
        } else {
?>
<form action="<?php echo $PHP_SELF; ?>" method="post">
<table align="center">
<tr><td>Main site code (design, etc): <input type="text" name="main" value="design.php"></tr>
<tr><td align="center"><input type="submit" value="Save Values">
</table>
</form>
<?php
        }
    }
}

function loginform(){
    global $PHP_SELF;
?>
Not logged in. Please login.<hr>
<form action="<?php echo $PHP_SELF; ?>" method="post">
<table align="center">
<tr><td>Login:<td><input type="text" name="login"></tr>
<tr><td>Pass:<td><input type="password" name="pass"></tr>
<tr><td colspan="2" align="center"><input type="submit" value="Login"></tr>
</table>
</form>
<?php
}

function auth(){
    global $PHP_SELF, $valid, $_SESSION, $_POST;
    $action=isset($_GET['action'])?addslashes($_GET['action']):"";
    include "include/authcfg.php";
    if($action=="logout") {
        session_unset();
        header("Location: $PHP_SELF");
        exit;
    }
    if(isset($_SESSION['name'])&&($_SESSION['name']==$adm[0])&&($_SESSION['pass']==$adm[1])){
        $valid=true;
    } else {
        if(isset($_POST['login'])) {
            if(($_POST['login'] == $adm[0]) && (md5($_POST['pass']) == $adm[1]) ) {
                $_SESSION['name']=$_POST['login'];
                $_SESSION['pass']=md5($_POST['pass']);
                header("Location: $PHP_SELF");
                exit;
            } else {
                $err="Wrong login.<hr>";
            }
        }
    }
}

function loadmodule($file){
    global $_GET, $_POST, $_SESSION, $_COOKIE, $PHP_SELF, $module, $home, $title, $lang, $prefix;
    global $section, $login ,$valid, $admin, $rss, $rss_extra, $redir, $redurl, $bots, $evt, $timing;
    global $count_show,$count_type,$count_name,$count_ro,$count_external,$count_lang;
    //global $count_time,$count_lock;
    global $lang_exclude, $sect_exclude, $sect_hide, $sect_support, $sect_ok, $mylinks;
    global $ip, $host;
    global $db_link; //for shared connections
    global $is_mobile, $is_bot;
    //echo htmlspecialchars($txt);
    if (isset($_GET['debug'])) {
        $timing[]=Array("loadmodule($file) begin",microtime(true));
    }
    if (file_exists($file))
        include $file;
    else echo "Module file does not exist or incorrect.";
    if (isset($_GET['debug'])) {
        $timing[]=Array("loadmodule($file) end",microtime(true));
    }
}

if (!function_exists('apache_response_headers')) {
    function apache_response_headers () {
        $arh = array();
        $headers = headers_list();
        foreach ($headers as $header) {
            $header = explode(":", $header);
            $arh[array_shift($header)] = trim(implode(":", $header));
        }
        return $arh;
    }
}

include "bbparser.php";

?>

You can also check other includes below (some files are hidden as they are in exclusion list):
bbparser.php