@ 2013-05-27T11:04:36Z <?php
setlocale(LC_CTYPE, "ru_RU.UTF-8");
require '../include/config.php';
require '../include/functions.php';
session_start();
// Если пользователь не авторизован, но выставлена
// cookie-переменная autologin - входим на форум
if ( !isset( $_SESSION['user'] ) and isset( $_COOKIE['autologin'] ) ) autoLogin();
// Подключаем дополнительную таблицу стилей если передан параметр
if ( !isset( $style ) ) {
$style = '<style type="text/css">'."\r\n";
$style = $style. file_get_contents( '../style/admin.css' )."\r\n";
$style = $style.'</style>'."\r\n";
}
// Загрузка шаблона и замена переменных
$html = file_get_contents( '../templates/admin.html' );
$html = str_replace( '{title}', $pageTitle, $html );
$html = str_replace( '{description}', $description, $html );
$html = str_replace( '{nav}', $nav, $html );
$html = str_replace( '{content}', $content, $html );
$html = str_replace( '{style}', $style, $html );
echo $html;
// Функция возвращает html формы для авторизации
function getLoginForm( &$style )
{
$html = $html.'<form class="form-signin" action="?action=login" method="post">'."\r\n";
if ( isset( $_SESSION['loginForm']['error'] ) ) {
$info = file_get_contents( '../templates/info.html' );
$info = str_replace( '{infoMessage}', $_SESSION['loginForm']['error'], $info );
$html = $html.$info."\r\n";
unset( $_SESSION['loginForm']['error'] );
}
$html = $html.'<h2 class="form-signin-heading">Вход</h2>'."\r\n";
$html = $html.' <input class="input-block-level" placeholder="Логин" name="login" type="text" size="15" maxlength="15">'."\r\n";
$html = $html.'<input class="input-block-level" placeholder="Пароль" name="password" type="password" size="15" maxlength="40">'."\r\n";
$html = $html.'<label class="checkbox">'."\r\n";
$html = $html.'<input name="autologin" type="checkbox" value="1"> Запомнить меня'."\r\n";
$html = $html.'</label>'."\r\n";
$html = $html.'<button class="btn btn-large btn-primary" type="submit" name="submit">Войти</button>'."\r\n";
$html = $html.'</form>'."\r\n";
$style = '<style type="text/css">'."\r\n";
$style = $style. file_get_contents( '../style/login.css' )."\r\n";
$style = $style.'</style>'."\r\n";
return $html;
}
// Обработчик формы авторизации
function login()
{
global $connection;
// Если не переданы данные формы - значит функция была вызвана по ошибке
if ( !isset( $_POST['login'] ) or
!isset( $_POST['password'] ) )
{
header( 'Location: '.$_SERVER['PHP_SELF'] );
die();
}
// Защита от перебора пароля - при каждой неудачной попытке время задержки увеличивается
if ( isset( $_SESSION['loginForm']['count'] ) ) sleep( $_SESSION['loginForm']['count'] );
// Обрезаем переменные до длины, указанной в параметре maxlength тега input
$login = substr( $_POST['login'], 0, 40 );
$password = substr( $_POST['password'], 0, 40 );
// Обрезаем лишние пробелы
$login = trim( $login );
$password = trim( $password );
// Проверяем, заполнены ли обязательные поля
$error = '';
if ( empty( $login ) ) $error = $error.'<li>не заполнено поле "Имя"</li>'."\r\n";
if ( empty( $password ) ) $error = $error.'<li>не заполнено поле "Пароль"</li>'."\r\n";
// Проверяем поля формы на недопустимые символы
//if ( !empty( $name ) and !preg_match( "#^[- _0-9a-zА-Яа-я]+$#i", $name ) )
// $error = $error.'<li>поле "Имя" содержит недопустимые символы</li>'."\n";
//if ( !empty( $password ) and !preg_match( "#^[-_0-9a-z]+$#i", $password ) )
// $error = $error.'<li>поле "Пароль" содержит недопустимые символы</li>'."\n";
// Указываем "соль" для пароля и шифруем пароль
$salt = "yD4@1bTySXq9vb";
$password = sha1($salt . $password);
// Проверять существование такого пользователя есть смысл только в том
// случае, если поля не пустые и не содержат недопустимых символов
if ( empty( $error ) ) {
// Выполняем запрос на получение данных пользователя из БД
$query = "SELECT * FROM users WHERE login='".$login."' AND password='".$password."' LIMIT 1";
//извлекаем из базы все данные о пользователе с введенным логином
$result = mysqli_query( $connection, $query );
if ( !$result ) {
$msg = 'Ошибка при авторизации пользователя';
$err = 'Ошибка при выполнении запроса: <br/>'.
$query.'<br/>'.mysqli_errno().': '.mysqli_error().'<br/>'.'(Файл '. __FILE__ .', строка '. __LINE__ .')';
return showErrorMessage( $msg, $err, true, 'action=loginForm' );
}
if ( mysqli_num_rows( $result ) == 0 )
$error = $error.'<li>Неправильный логин или пароль</li>'."\n";
}
// Если были допущены ошибки при заполнении формы
if ( !empty( $error ) ) {
if ( !isset( $_SESSION['loginForm']['count'] ) )
$_SESSION['loginForm']['count'] = 1;
else
$_SESSION['loginForm']['count'] = $_SESSION['loginForm']['count'] + 1;
$_SESSION['loginForm']['error'] = '<br>'."\r\n".'При заполнениии формы были допущены ошибки:'.
"\r\n".'<ul>'."\r\n".$error.'</ul>'."\r\n";
header( 'Location: '.$_SERVER['PHP_SELF'].'?action=loginForm' );
die();
}
// Все поля заполнены правильно и такой пользователь существует - продолжаем
unset( $_SESSION['loginForm'] );
$user = mysqli_fetch_assoc( $result );
if ( $user['activation'] == '0' )
return showInfoMessage( 'Ваша учетная запись не активирована', '' );
// Если пользователь заблокирован
if ( $user['status'] != 'admin' )
return showInfoMessage( 'Недостаточно прав доступа. Обратитесь к администратору.', '' );
$_SESSION['user'] = $user;
// Выставляем cookie, если пользователь хочет входить на форум автоматически
if ( isset ( $_POST['autologin'] ) ) {
$tmppos = strrpos( $_SERVER['PHP_SELF'], '/' ) + 1;
$path = substr( $_SERVER['PHP_SELF'], 0, $tmppos );
setcookie( 'autologin', 'yes', time() + 3600*24*30, $path );
setcookie( 'login', $_SESSION['user']['login'], time() + 3600*24*30, $path );
setcookie( 'password', $_SESSION['user']['password'], time() + 3600*24*30, $path );
}
// Авторизация прошла успешно - перенаправляем посетителя на главную страницу
header( 'Location: '.$_SERVER['PHP_SELF'].'?action=pages' );
die();
}
// Функция осуществляет автоматический вход на форум
function autoLogin()
{
global $connection;
// Если не установлены cookie, содержащие логин и пароль
if ( !isset( $_COOKIE['login'] ) or !isset( $_COOKIE['password'] ) ) {
$tmppos = strrpos( $_SERVER['PHP_SELF'], '/' ) + 1;
$path = substr( $_SERVER['PHP_SELF'], 0, $tmppos );
if ( isset( $_COOKIE['login'] ) ) setcookie( 'login', '', time() - 1, $path );
if ( isset( $_COOKIE['password'] ) ) setcookie( 'password', '', time() - 1, $path );
if ( isset( $_COOKIE['autologin'] ) ) setcookie( 'autologin', '', time() - 1, $path );
return false;
}
// Проверяем переменные cookie на недопустимые символы
//$login = preg_replace( "#[^- _0-9a-zА-Яа-я]#i", '', $_COOKIE['login'] );
$login = $_COOKIE['login'];
// Т.к. пароль зашифрован с помощью sha1, то он представляет собой
// 40-значное шестнадцатеричное число
$password = substr( $_COOKIE['password'], 0, 40 );
//$password = preg_replace( "#[^0-9a-f]#i", '', $password );
// Выполняем запрос на получение данных пользователя из БД
$query = "SELECT * FROM users WHERE login='".$login."' AND password='".$password."' LIMIT 1";
$result = mysqli_query( $connection, $query );
if ( !$result ) {
$msg = 'Ошибка при авторизации пользователя';
$err = 'Ошибка при выполнении запроса: <br/>'.
$query.'<br/>'.mysqli_errno().': '.mysqli_error().'<br/>'.'(Файл '. __FILE__ .', строка '. __LINE__ .')';
return showErrorMessage( $msg, $err, true, '' );
}
// Если пользователь с таким логином и паролем не найден -
// значит данные неверные и надо их удалить
if ( mysqli_num_rows( $result ) == 0 ) {
$tmppos = strrpos( $_SERVER['PHP_SELF'], '/' ) + 1;
$path = substr( $_SERVER['PHP_SELF'], 0, $tmppos );
setcookie( 'autologin', '', time() - 1, $path );
setcookie( 'login', '', time() - 1, $path );
setcookie( 'password', '', time() - 1, $path );
return false;
}
$user = mysqli_fetch_assoc( $result );
if ( $user['activation'] == '0' ) {
$tmppos = strrpos( $_SERVER['PHP_SELF'], '/' ) + 1;
$path = substr( $_SERVER['PHP_SELF'], 0, $tmppos );
setcookie( 'autologin', '', time() - 1, $path );
setcookie( 'login', '', time() - 1, $path );
setcookie( 'password', '', time() - 1, $path );
return showInfoMessage( 'Ваша учетная запись не активирована', '' );
}
if ( $user['status'] != 'admin' ) {
$tmppos = strrpos( $_SERVER['PHP_SELF'], '/' ) + 1;
$path = substr( $_SERVER['PHP_SELF'], 0, $tmppos );
setcookie( 'autologin', '', time() - 1, $path );
setcookie( 'login', '', time() - 1, $path );
setcookie( 'password', '', time() - 1, $path );
return showInfoMessage( 'Недостаточно прав доступа. Обратитесь к администратору.', '' );
}
$_SESSION['user'] = $user;
return true;
}
// Выход из системы
function logout()
{
unset( $_SESSION['user'] );
$tmppos = strrpos( $_SERVER['PHP_SELF'], '/' ) + 1;
$path = substr( $_SERVER['PHP_SELF'], 0, $tmppos );
if ( isset( $_COOKIE['autologin'] ) ) setcookie( 'autologin', '', time() - 1, $path );
if ( isset( $_COOKIE['login'] ) ) setcookie( 'login', '', time() - 1, $path );
if ( isset( $_COOKIE['password'] ) ) setcookie( 'password', '', time() - 1, $path );
header( 'Location: '.$_SERVER['PHP_SELF'] );
die();
}
// Загрузчик файлов (массив $_FILES)
// Используется при добавлении и редактировании страниц, новостей
function uploader($id, $marker, $path)
{
global $connection;
$filepath = array();
$filename = array();
for( $i = 0; $i < count($_FILES['file']); $i++) {
if ( !empty( $_FILES['file']['tmp_name'][$i] ) and $_FILES['file']['error'][$i] == 0 ) {
$filepath = $_FILES['file']['tmp_name'][$i];
$filename = $_FILES['file']['name'][$i];
$upload_path = $path;//папка, куда будет загружаться начальная картинка
$target = $upload_path . $filename;
move_uploaded_file($filepath, $target);//загрузка оригинала в папку $path_to
$path_parts = pathinfo($filename);
$ext = $path_parts['extension'];
$name = $path_parts['filename'];
$new_name = translitIt($name).".".$ext;
chmod($target, 0755);
rename($target, $upload_path.$new_name);
$query= "INSERT INTO files (parent, marker, file_name, file_url) VALUES ('".$id."', '".$marker."', '".$name."', '".$new_name."')";
$result = mysqli_query( $connection, $query );
//обработчик ошибки
if(!$result) {
echo "Возникла ошибка - ".mysqli_error()."\n";
echo $query;
exit();
}
}
}
}
?>
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).
Version System time (s) User time (s) Memory (MiB) 8.3.6 0.008 0.008 18.81 8.3.5 0.034 0.006 22.24 8.3.4 0.012 0.003 19.17 8.3.3 0.012 0.003 19.57 8.3.2 0.005 0.003 20.86 8.3.1 0.005 0.003 22.42 8.3.0 0.006 0.003 22.80 8.2.18 0.010 0.006 17.38 8.2.17 0.010 0.010 22.96 8.2.16 0.006 0.013 21.23 8.2.15 0.008 0.000 24.18 8.2.14 0.004 0.004 24.66 8.2.13 0.008 0.000 26.16 8.2.12 0.008 0.000 19.73 8.2.11 0.007 0.003 20.97 8.2.10 0.012 0.000 18.30 8.2.9 0.005 0.003 19.58 8.2.8 0.006 0.003 18.55 8.2.7 0.006 0.006 18.00 8.2.6 0.009 0.000 18.43 8.2.5 0.004 0.004 18.13 8.2.4 0.004 0.008 18.66 8.2.3 0.009 0.003 18.63 8.2.2 0.004 0.004 18.29 8.2.1 0.000 0.008 18.35 8.2.0 0.005 0.005 18.34 8.1.28 0.004 0.011 25.92 8.1.27 0.008 0.000 24.29 8.1.26 0.004 0.004 26.35 8.1.25 0.006 0.003 28.09 8.1.24 0.003 0.006 24.26 8.1.23 0.004 0.008 19.47 8.1.22 0.006 0.003 18.28 8.1.21 0.000 0.008 18.77 8.1.20 0.014 0.000 17.73 8.1.19 0.004 0.004 18.02 8.1.18 0.004 0.004 18.10 8.1.17 0.006 0.003 19.21 8.1.16 0.008 0.000 22.58 8.1.15 0.003 0.009 19.02 8.1.14 0.012 0.006 17.95 8.1.13 0.004 0.004 18.32 8.1.12 0.000 0.007 17.95 8.1.11 0.003 0.005 17.86 8.1.10 0.000 0.008 17.93 8.1.9 0.005 0.003 17.93 8.1.8 0.004 0.004 17.88 8.1.7 0.000 0.007 17.96 8.1.6 0.008 0.004 18.05 8.1.5 0.000 0.009 18.06 8.1.4 0.004 0.004 17.96 8.1.3 0.004 0.004 18.10 8.1.2 0.008 0.000 18.13 8.1.1 0.000 0.009 18.31 8.1.0 0.003 0.006 18.09 8.0.30 0.004 0.004 18.77 8.0.29 0.000 0.007 17.91 8.0.28 0.000 0.007 18.99 8.0.27 0.005 0.002 17.95 8.0.26 0.004 0.007 17.44 8.0.25 0.003 0.003 17.70 8.0.24 0.000 0.007 17.64 8.0.23 0.002 0.005 17.63 8.0.22 0.000 0.007 17.66 8.0.21 0.004 0.004 17.66 8.0.20 0.003 0.003 17.64 8.0.19 0.003 0.005 17.54 8.0.18 0.007 0.004 17.63 8.0.17 0.000 0.008 17.53 8.0.16 0.000 0.008 17.58 8.0.15 0.000 0.009 17.51 8.0.14 0.003 0.006 17.59 8.0.13 0.003 0.003 13.99 8.0.12 0.003 0.005 17.49 8.0.11 0.004 0.004 17.71 8.0.10 0.000 0.008 17.60 8.0.9 0.008 0.000 17.65 8.0.8 0.003 0.014 17.52 8.0.7 0.000 0.008 17.56 8.0.6 0.000 0.008 17.44 8.0.5 0.000 0.007 17.66 8.0.3 0.010 0.011 17.67 8.0.2 0.013 0.006 17.58 8.0.1 0.006 0.003 17.69 8.0.0 0.018 0.011 17.29 7.4.33 0.003 0.003 15.54 7.4.32 0.000 0.008 17.21 7.4.30 0.000 0.006 17.09 7.4.29 0.004 0.004 17.08 7.4.28 0.003 0.009 17.27 7.4.27 0.012 0.004 17.11 7.4.26 0.007 0.003 16.95 7.4.25 0.000 0.007 17.10 7.4.24 0.005 0.002 17.21 7.4.23 0.004 0.004 17.25 7.4.22 0.014 0.004 17.21 7.4.21 0.008 0.011 17.23 7.4.20 0.003 0.005 17.14 7.4.19 0.000 0.007 17.27 7.4.16 0.003 0.013 17.22 7.4.15 0.012 0.008 17.40 7.4.14 0.010 0.011 17.86 7.4.13 0.012 0.007 17.18 7.4.12 0.012 0.005 17.04 7.4.11 0.003 0.013 17.09 7.4.10 0.017 0.007 17.29 7.4.9 0.011 0.007 17.20 7.4.8 0.006 0.015 17.14 7.4.7 0.009 0.015 17.23 7.4.6 0.015 0.009 17.07 7.4.5 0.005 0.000 17.05 7.4.4 0.004 0.018 22.77 7.4.3 0.013 0.003 16.89 7.4.0 0.004 0.014 15.27 7.3.33 0.003 0.003 13.71 7.3.32 0.005 0.000 13.72 7.3.31 0.007 0.000 16.66 7.3.30 0.004 0.004 16.74 7.3.29 0.012 0.006 16.95 7.3.28 0.012 0.008 16.83 7.3.27 0.010 0.007 17.40 7.3.26 0.013 0.010 16.91 7.3.25 0.003 0.015 16.92 7.3.24 0.010 0.010 16.89 7.3.23 0.010 0.016 16.98 7.3.21 0.012 0.006 16.87 7.3.20 0.009 0.009 19.39 7.3.19 0.019 0.006 16.86 7.3.18 0.008 0.012 16.93 7.3.17 0.010 0.007 16.92 7.3.16 0.010 0.007 16.72 7.3.12 0.000 0.018 15.00 7.3.1 0.005 0.006 16.67 7.3.0 0.007 0.007 16.52 7.2.33 0.004 0.015 17.22 7.2.32 0.010 0.010 17.24 7.2.31 0.019 0.003 17.15 7.2.30 0.007 0.011 17.03 7.2.29 0.007 0.010 16.89 7.2.13 0.010 0.006 16.82 7.2.12 0.005 0.007 16.63 7.2.11 0.007 0.008 16.77 7.2.10 0.009 0.005 16.49 7.2.9 0.007 0.007 16.72 7.2.8 0.011 0.005 16.79 7.2.7 0.006 0.006 16.67 7.2.6 0.004 0.010 16.83 7.2.5 0.010 0.007 16.85 7.2.4 0.010 0.001 16.77 7.2.3 0.007 0.006 16.60 7.2.2 0.010 0.005 16.67 7.2.1 0.007 0.004 16.84 7.2.0 0.003 0.010 16.94 7.1.25 0.009 0.003 15.62 7.1.20 0.009 0.006 15.79 7.1.10 0.004 0.011 17.94 7.1.7 0.003 0.006 17.04 7.1.6 0.009 0.009 19.82 7.1.5 0.003 0.009 16.98 7.1.0 0.003 0.077 22.46 7.0.20 0.008 0.004 16.71 7.0.14 0.000 0.077 22.18 7.0.10 0.047 0.080 20.13 7.0.9 0.037 0.087 20.18 7.0.8 0.040 0.073 20.12 7.0.7 0.010 0.087 20.07 7.0.6 0.027 0.047 20.04 7.0.5 0.050 0.077 20.39 7.0.4 0.010 0.073 20.13 7.0.3 0.003 0.073 20.09 7.0.2 0.017 0.050 20.09 7.0.1 0.007 0.077 20.08 7.0.0 0.010 0.077 20.04 5.6.28 0.003 0.073 21.15 5.6.25 0.007 0.070 20.68 5.6.24 0.003 0.083 20.72 5.6.23 0.003 0.067 20.74 5.6.22 0.013 0.077 20.76 5.6.21 0.010 0.073 20.73 5.6.20 0.010 0.080 21.18 5.6.19 0.013 0.077 21.16 5.6.18 0.010 0.080 21.12 5.6.17 0.003 0.067 21.20 5.6.16 0.017 0.070 21.09 5.6.15 0.010 0.063 21.12 5.6.14 0.003 0.070 21.03 5.6.13 0.003 0.043 21.21 5.6.12 0.010 0.073 21.02 5.6.11 0.003 0.077 21.12 5.6.10 0.010 0.077 21.12 5.6.9 0.003 0.083 21.22 5.6.8 0.003 0.040 20.47 5.6.7 0.003 0.073 20.57 5.6.6 0.010 0.070 20.45 5.6.5 0.013 0.070 20.52 5.6.4 0.010 0.073 20.55 5.6.3 0.010 0.060 20.50 5.6.2 0.010 0.067 20.46 5.6.1 0.007 0.037 20.49 5.6.0 0.003 0.040 20.36 5.5.38 0.003 0.083 20.40 5.5.37 0.013 0.070 20.58 5.5.36 0.007 0.067 20.42 5.5.35 0.007 0.077 20.39 5.5.34 0.007 0.080 20.87 5.5.33 0.010 0.080 20.90 5.5.32 0.000 0.043 20.85 5.5.31 0.010 0.033 20.84 5.5.30 0.000 0.073 20.88 5.5.29 0.010 0.077 20.91 5.5.28 0.003 0.080 20.96 5.5.27 0.010 0.037 20.85 5.5.26 0.010 0.063 20.96 5.5.25 0.017 0.073 20.67 5.5.24 0.003 0.040 20.27 5.5.23 0.017 0.073 20.32 5.5.22 0.010 0.077 20.14 5.5.21 0.003 0.070 20.19 5.5.20 0.007 0.077 20.15 5.5.19 0.003 0.053 20.36 5.5.18 0.010 0.077 20.32 5.5.16 0.017 0.070 20.34 5.5.15 0.010 0.073 20.32 5.5.14 0.003 0.073 20.32 5.5.13 0.010 0.067 20.19 5.5.12 0.003 0.073 20.07 5.5.11 0.007 0.070 20.26 5.5.10 0.007 0.080 20.20 5.5.9 0.013 0.067 20.14 5.5.8 0.003 0.077 20.18 5.5.7 0.010 0.073 20.05 5.5.6 0.000 0.073 20.17 5.5.5 0.010 0.067 19.98 5.5.4 0.003 0.037 20.20 5.5.3 0.003 0.080 20.19 5.5.2 0.010 0.077 20.17 5.5.1 0.023 0.063 20.15 5.5.0 0.003 0.080 20.19 5.4.45 0.003 0.073 19.23 5.4.44 0.010 0.060 19.39 5.4.43 0.013 0.067 19.23 5.4.42 0.013 0.030 19.51 5.4.41 0.010 0.063 19.13 5.4.40 0.000 0.060 18.91 5.4.39 0.007 0.070 19.16 5.4.38 0.003 0.073 19.06 5.4.37 0.007 0.080 19.05 5.4.36 0.010 0.033 19.19 5.4.35 0.010 0.063 18.92 5.4.34 0.013 0.040 18.92 5.4.32 0.003 0.040 19.05 5.4.31 0.007 0.070 19.09 5.4.30 0.007 0.037 19.07 5.4.29 0.010 0.070 19.17 5.4.28 0.003 0.070 19.14 5.4.27 0.000 0.073 19.13 5.4.26 0.010 0.057 19.13 5.4.25 0.013 0.073 19.15 5.4.24 0.013 0.070 19.07 5.4.23 0.010 0.073 19.05 5.4.22 0.003 0.073 19.04 5.4.21 0.007 0.080 19.04 5.4.20 0.000 0.080 19.04 5.4.19 0.000 0.073 19.18 5.4.18 0.003 0.077 19.13 5.4.17 0.000 0.073 19.18 5.4.16 0.000 0.073 18.90 5.4.15 0.010 0.070 19.05 5.4.14 0.003 0.037 16.42 5.4.13 0.010 0.060 16.31 5.4.12 0.007 0.063 16.52 5.4.11 0.010 0.070 16.50 5.4.10 0.007 0.063 16.58 5.4.9 0.007 0.077 16.41 5.4.8 0.010 0.070 16.47 5.4.7 0.003 0.037 16.42 5.4.6 0.007 0.033 16.45 5.4.5 0.003 0.037 16.37 5.4.4 0.003 0.073 16.41 5.4.3 0.003 0.057 16.40 5.4.2 0.003 0.033 16.52 5.4.1 0.013 0.070 16.36 5.4.0 0.003 0.033 15.94 5.3.29 0.003 0.070 14.93 5.3.28 0.010 0.063 14.82 5.3.27 0.007 0.073 14.72 5.3.26 0.010 0.033 14.73 5.3.25 0.000 0.080 14.85 5.3.24 0.003 0.037 14.76 5.3.23 0.010 0.030 14.72 5.3.22 0.010 0.060 14.75 5.3.21 0.003 0.057 14.84 5.3.20 0.010 0.070 14.68 5.3.19 0.013 0.063 14.70 5.3.18 0.003 0.037 14.68 5.3.17 0.003 0.070 14.73 5.3.16 0.003 0.070 14.83 5.3.15 0.010 0.073 14.64 5.3.14 0.003 0.070 14.66 5.3.13 0.003 0.057 14.66 5.3.12 0.000 0.073 14.70 5.3.11 0.007 0.073 14.77 5.3.10 0.010 0.030 14.14 5.3.9 0.003 0.037 14.16 5.3.8 0.007 0.030 14.12 5.3.7 0.003 0.073 14.17 5.3.6 0.000 0.047 14.09 5.3.5 0.003 0.077 14.05 5.3.4 0.007 0.070 14.06 5.3.3 0.010 0.043 14.11 5.3.2 0.007 0.067 13.89 5.3.1 0.007 0.067 13.89 5.3.0 0.007 0.033 13.91
preferences:dark mode live preview
41.92 ms | 401 KiB | 5 Q