@ 2015-04-26T23:47:45Z <?php
class Application extends Common {
const DEFAULT_TEMPLATE = 'Craigslist';
const IMAGE_WIDTH = 200;
protected $_formAction = '/Classifieds';
protected $_templateName = null;
protected $_images = array('jpeg' => 'jpeg', 'jpg' => 'jpg', 'gif' => 'gif', 'png' => 'png');
protected $_imageTpl = '<img width="%s" class="image" imgsrc="%s" />';
protected $_linkTpl = '<a target="%s" href="%s">%s</a>';
protected $_zendView = null;
protected $_moduleHelper = null;
/**
* The search text phrase.
* @var string
*/
protected $_searchText = '';
/**
* The indicator to search only the title field.
* @var boolean
*/
protected $_searchTitleOnly = false;
/**
* The indicator to match any words in search phrase.
* @var boolean
*/
protected $_searchAny = false;
/**
* The indicator to exactly match search phrase.
* @var boolean
*/
protected $_searchExact = false;
/**
* The indicator to return only items having media, images, video.
* @var boolean
*/
protected $_searchMediaOnly = false;
/**
* The indicator to return only items having video.
* @var boolean
*/
protected $_searchVideoOnly = false;
/**
* Constructor
* @param Zend_View $view (optional)
*/
public function __construct($view = null) {
$this->_zendView = $view;
if($view) {
try {
/* @var $moduleHelper Classifieds_View_Helper_Classifieds */
$moduleHelper = $view->classifieds() ;
} catch (Exception $e) {
$moduleHelper = null;
}
$this->_moduleHelper = $moduleHelper;
}
$this->_fetchRequest();
$layout = $this->getLayoutTemplate();
$path = $this->getLayoutTemplateFilePath();
$len = strlen($layout);
if(! $len || ! file_exists($path)) {
if($len) {
$msg = 'Template not found: ' . $layout;
$this->addMessage($msg);
}
$this->setLayoutTemplate($this->getDefaultLayoutTemplate());
}
}
/**
* Sorts list of items by sections.
* @param type $index
*/
public function getSection($index = 0) {
}
protected function _fetchRequest() {
$propertyDefs = array(
self::REQUEST_PARAM_ITEM_ID => array('setLayoutTemplate', $this->getLayoutTemplate()),
self::REQUEST_PARAM_SEARCH => array('setSearchText', ''),
self::REQUEST_PARAM_SEARCH_TITLE_ONLY => array('setSearchTitleOnly', 0),
self::REQUEST_PARAM_SEARCH_ANY => array('setSearchAny', 0),
self::REQUEST_PARAM_SEARCH_EXACT => array('setSearchExact', 0),
self::REQUEST_PARAM_SEARCH_MEDIA_ONLY => array('setSearchMediaOnly', 0),
self::REQUEST_PARAM_SEARCH_VIDEO_ONLY => array('setSearchVideoOnly', 0)
);
foreach($propertyDefs as $propName => $properties) {
list($method, $default) = $properties;
$reqValue = $this->_getRequestValue($propName, $default);
$this->$method($reqValue);
}
}
/**
* Returns the template name.
*
* @return string
*/
public function getLayoutTemplate() {
return $this->_templateName;
}
/**
* Sets the template name.
*
* @return Application
*/
public function setLayoutTemplate($templateName) {
$this->_templateName = $templateName;
return $this;
}
/**
* Returns the default template name.
*
* @return string
*/
public function getDefaultLayoutTemplate() {
$templates = $this->getLayoutTemplates();
$return = (is_array($templates) && count($templates)) ? reset($templates) : '';
return $return;
}
/**
* Returns layout parent path.
*
* @return string
*/
public function getLayoutPath() {
$path = $this->getDocumentRoot() . "/classifiedsTemplates";
return $path;
}
/**
* Returns list ov available templates.
*
* @return array
*/
public function getLayoutTemplates() {
$return = array(
self::DEFAULT_TEMPLATE => self::DEFAULT_TEMPLATE,
'Facebook' => 'Facebook'
);
return $return;
}
/**
* Returns the search text phrase.
*
* @return string
*
*/
public function getSearchText() {
return $this->_searchText ;
}
/**
* Sets the search text phrase.
*
* @param string $searchText
*
* @return Application
*/
public function setSearchText($searchText) {
$this->_searchText = $searchText ;
return $this ;
}
/**
* Returns the indicator to search only the title field.
*
* @return boolean
*
*/
public function getSearchTitleOnly() {
return $this->_searchTitleOnly ;
}
/**
* Sets the indicator to search only the title field.
*
* @param boolean $searchTitleOnly
*
* @return Application
*/
public function setSearchTitleOnly($searchTitleOnly) {
$this->_searchTitleOnly = $searchTitleOnly ;
return $this ;
}
/**
* Returns the indicator to match any words in search phrase.
*
* @return boolean
*
*/
public function getSearchAny() {
return $this->_searchAny ;
}
/**
* Sets the indicator to match any words in search phrase.
*
* @param boolean $searchAny
*
* @return Application
*/
public function setSearchAny($searchAny) {
$this->_searchAny = $searchAny ;
return $this ;
}
/**
* Returns the indicator to exactly match search phrase.
*
* @return boolean
*
*/
public function getSearchExact() {
return $this->_searchExact ;
}
/**
* Sets the indicator to exactly match search phrase.
*
* @param boolean $searchExact
*
* @return Application
*/
public function setSearchExact($searchExact) {
$this->_searchExact = $searchExact ;
return $this ;
}
/**
* Returns the indicator to return only items having media, images, video.
*
* @return boolean
*
*/
public function getSearchMediaOnly() {
return $this->_searchMediaOnly ;
}
/**
* Sets the indicator to return only items having media, images, video.
*
* @param boolean $searchMediaOnly
*
* @return Application
*/
public function setSearchMediaOnly($searchMediaOnly) {
$this->_searchMediaOnly = $searchMediaOnly ;
return $this ;
}
/**
* Returns the indicator to return only items having video.
*
* @return boolean
*
*/
public function getSearchVideoOnly() {
return $this->_searchVideoOnly ;
}
/**
* Sets the indicator to return only items having video.
*
* @param boolean $searchVideoOnly
*
* @return Application
*/
public function setSearchVideoOnly($searchVideoOnly) {
$this->_searchVideoOnly = $searchVideoOnly ;
return $this ;
}
public function fetchItems(array $options = array()) {
/* Option values
search Phrase for which to search.
exact Match search phrase exactly (case-insensitive) (default = match all words).
any Match any words in the search phrase (default = match all).
titleonly Search title only (default = search title, description and tags).
mediaonly Returns only records having 1 or more images.
*/
if($this->getSearchMediaOnly()) {
$options['mediaonly'] = true;
}
if($this->getSearchTitleOnly()) {
$options['titleonly'] = true;
}
$exact = false;
if($this->getSearchAny()) {
$options['any'] = true;
} elseif($this->getSearchExact()) {
$options['exact'] = $exact = true;
}
$search = $this->getSearchText();
if(strlen($search)) {
if(! $exact) {
$search = $this->_tidySearch($search);
}
$options['search'] = $search ;
}
if(! isset($options['sort'])) {
$options['sort'] = 'date';
}
$mapper = $this->getMapper();
$items = $mapper->fetch($options);
if(false === $items) {
$this->addMessage($mapper->getMessages()) ;
return false;
}
foreach($items as $key => $item) {
$mediaStats = $this->_setMediaStats($item);
if($this->getSearchVideoOnly()) {
if(! isset($mediaStats['video']) || ! count($mediaStats['video'])) {
unset($items[$key]);
}
}
}
return $items;
}
protected function _setMediaStats($item) {
$mediaStats = array();
$media = $item->getMedia();
$index = 0;
foreach((array)$media as $key => $url) {
$parts = $this->_parseUrl($url) ;
$url = urldecode($url);
$url = str_replace('"', '"', $url);
$contentType = $parts['type'];
switch($contentType) {
case 'image':
$content = sprintf($this->_imageTpl, self::IMAGE_WIDTH, $url);
break;
case 'video':
$break = 1;
// FALL THROUGH
default: // video, link, photo
$content = $contentType;
if(! isset($c[$contentType])) {
$c[$contentType] = 0;
}
else {
$content .= '(' . (++$c[$contentType] + 1). ')';
}
break;
}
$mediaStats[$contentType][] = $url;
$media[$key] = sprintf($this->_linkTpl, '_blank', $url, $content);
$index++;
}
$item->setMedia($media);
$item->setMediaStats($mediaStats);
return $mediaStats;
}
public function getMediaDisplay($item) {
$display = array();
$media = $item->getMediaStats();
if(isset($media['image']) && is_array($media['image'])) {
$display[] = 'pic (' . count($media['image']) . ')';
}
if(isset($media['video']) && is_array($media['video'])) {
$display[] = 'video (' . count($media['video']) . ')';
}
$return = implode(' ', $display) ;
return $return;
}
public function getTotalCount(array $options = array()) {
$mapper = $this->getMapper();
$recordCount = $mapper->getCount($options);
if(false === $recordCount) {
$this->addMessage($mapper->getMessages()) ;
return false;
}
return $recordCount;
}
protected function _parseUrl($url) {
$default = array(
'scheme' => '',
'host' => '',
'port' => '',
'user' => '',
'pass' => '',
'path' => '',
'query' => '',
'fragment' => '',
'extension' => '',
'type' => ''
);
$parts = parse_url($url);
if(! is_array($parts)) {
return $default;
}
$elements = array_merge($default, $parts) ;
if(strlen($elements['path'])) {
$elements['extension'] = strtolower(pathinfo($elements['path'], PATHINFO_EXTENSION));
if(isset($this->_images[$elements['extension']])) {
$elements['type'] = 'image';
}
}
if(! strlen($elements['type'])) {
$elements['type'] = 'link';
if(strlen($elements['host'])) {
$host = strtolower($elements['host']);
if(preg_match('/^www[0-9]*\.(.*)$/', $host, $matches)) {
$host = $matches[1];
}
switch($host) {
case 'vimeo.com':
case 'youtube.com':
case 'youtu.be':
case 'vevo.com':
case 'veoh.com':
case 'metacafe.com':
case 'break.com':
$elements['type'] = 'video';
break;
case 'flickr.com':
// https://www.flickr.com/explore/video/
$elements['type'] = (false !== strpos(strtolower($elements['path']), 'video')) ? 'video' : 'photo';
break;
}
}
}
return $elements;
}
protected function _tidySearch($text) {
require_once dirname(__FILE__) . '/SpellCheck.php';
$speller = new SpellCheck();
$return = $speller->tidy($text, ['replace' => true]);
return $return;
}
public function formatForHtml($script) {
if(! is_string($script) || ! strlen(trim($script))) {
return '';
}
$patterns = array(
'`((?:http|ftp|https):\/\/(?:[\w\-_]+(?:(?:\.[\w\-_]+)+))(?:[\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?)`i'
=> '<a href="%s">link%s</a>',
'/(mailto[\\s]*:[\\s]*(?:[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}))/i'
=> ' <a href="%s">email</a>%s ',
'/([^:](?:[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}))/i'
=> ' <a href="mailto:%s">email</a>%s '
);
$replace = array();
$patternIndex = 0;
foreach($patterns as $pattern => $template) {
$matches = preg_split($pattern, $script, -1, PREG_SPLIT_DELIM_CAPTURE);
if(false === $matches) {
return $script;
}
$matchCount = count($matches);
if($matchCount > 1) {
// array_shift($matches);
for($index = 1; $index < $matchCount; $index += 2) {
if(0 == $patternIndex) {
$sequence = ($index > 1) ? ('-' . ($index - 1) / 2) : '' ;
}
$replace[] = sprintf($template, $matches[$index], $sequence);
$matches[$index] ='{{' . (count($replace) - 1) . '}}';
}
$script = implode('', $matches);
}
if(0 == $patternIndex) {
$sequence = '';
}
$patternIndex++;
}
if(count($replace)) {
$script = htmlentities($script);
for($index = 0; $index < count($replace); $index++) {
$script = str_replace('{{' . $index . '}}', $replace[$index], $script);
}
}
return $script;
}
public function getLayoutRelativePath() {
$path = "/classifiedsTemplates/". $this->getLayoutTemplate();
return $path;
}
public function getLayoutTemplatePath() {
$path = $this->getLayoutPath() . '/' . $this->getLayoutTemplate();
return $path;
}
public function getLayoutTemplateFilePath() {
$path = $this->getLayoutTemplatePath() . "/layoutTemplate.php";
return $path;
}
public function getDocumentRoot() {
// /home/procompu/public_html/classifiedsTemplates/Application.php
// /home/procompu/public_html/classifiedsTemplates
// /home/procompu/public_html
if(defined('DOCUMENT_ROOT')) {
$path = DOCUMENT_ROOT;
}
else {
$path = filter_input(INPUT_SERVER, 'DOCUMENT_ROOT');
}
return $path;
}
protected function _getRequestValue($paramName, $default = '') {
$value = isset($_POST[$paramName]) ? $_POST[$paramName] : null;
$return = (is_string($value) && strlen(trim($value))) ? $value : $default;
return $return;
}
public function getFormAction() {
return $this->_formAction;
}
public function setFormAction($action) {
$this->_formAction = $action;
return $this;
}
/**
*
* @return \DataMapper
*/
public function getMapper() {
if(! class_exists('DataMapper', false)) {
$file = dirname(__FILE__) . '/DataMapper.php';
require_once $file;
}
$mapper = new DataMapper();
return $mapper;
}
public function getMessagesHtml($class = 'errorlist') {
$messages = $this->getMessages();
if(! count($messages)) {
return '';
}
if(strlen($class)) {
$class = ' class ="' . $class . '"';
}
$return = "<ul{$class}><li>" . implode("</li>\n<li>", $messages) . "</li>\n</ul>";
return $return;
}
}
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.013 0.006 17.11 8.3.5 0.014 0.009 22.06 8.3.4 0.010 0.006 19.10 8.3.3 0.007 0.007 19.09 8.3.2 0.000 0.008 20.46 8.3.1 0.012 0.003 21.86 8.3.0 0.009 0.000 19.38 8.2.18 0.013 0.006 18.38 8.2.17 0.010 0.010 22.96 8.2.16 0.010 0.010 20.41 8.2.15 0.000 0.008 24.18 8.2.14 0.009 0.006 24.66 8.2.13 0.005 0.003 26.16 8.2.12 0.006 0.003 19.53 8.2.11 0.010 0.000 19.45 8.2.10 0.013 0.000 17.88 8.2.9 0.006 0.003 19.30 8.2.8 0.003 0.006 17.97 8.2.7 0.010 0.000 17.75 8.2.6 0.009 0.000 18.15 8.2.5 0.000 0.008 18.07 8.2.4 0.004 0.004 19.72 8.2.3 0.003 0.005 18.23 8.2.2 0.008 0.000 17.81 8.2.1 0.000 0.008 18.31 8.2.0 0.004 0.004 17.93 8.1.28 0.009 0.006 25.92 8.1.27 0.013 0.007 20.35 8.1.26 0.008 0.000 26.35 8.1.25 0.008 0.000 28.09 8.1.24 0.007 0.014 23.97 8.1.23 0.006 0.006 18.04 8.1.22 0.000 0.009 17.89 8.1.21 0.000 0.009 18.77 8.1.20 0.003 0.007 17.48 8.1.19 0.003 0.006 17.61 8.1.18 0.008 0.000 18.10 8.1.17 0.003 0.005 18.75 8.1.16 0.004 0.004 22.08 8.1.15 0.000 0.008 18.96 8.1.14 0.004 0.004 17.59 8.1.13 0.004 0.004 17.88 8.1.12 0.006 0.003 17.50 8.1.11 0.000 0.009 17.50 8.1.10 0.005 0.003 17.54 8.1.9 0.000 0.008 17.65 8.1.8 0.004 0.004 17.50 8.1.7 0.000 0.007 17.60 8.1.6 0.006 0.003 17.60 8.1.5 0.000 0.009 17.64 8.1.4 0.004 0.004 17.65 8.1.3 0.006 0.003 17.70 8.1.2 0.000 0.009 17.71 8.1.1 0.000 0.009 17.66 8.1.0 0.000 0.008 17.61 8.0.30 0.000 0.008 18.77 8.0.29 0.006 0.003 16.88 8.0.28 0.005 0.003 18.55 8.0.27 0.007 0.000 17.52 8.0.26 0.003 0.003 17.46 8.0.25 0.005 0.002 17.21 8.0.24 0.004 0.004 17.11 8.0.23 0.005 0.003 17.19 8.0.22 0.000 0.008 17.21 8.0.21 0.004 0.004 17.14 8.0.20 0.003 0.003 17.17 8.0.19 0.008 0.000 17.18 8.0.18 0.004 0.004 17.14 8.0.17 0.003 0.006 17.04 8.0.16 0.005 0.002 17.11 8.0.15 0.000 0.007 17.08 8.0.14 0.006 0.006 17.11 8.0.13 0.003 0.003 13.58 8.0.12 0.004 0.004 17.07 8.0.11 0.000 0.007 17.11 8.0.10 0.003 0.006 17.17 8.0.9 0.005 0.003 17.04 8.0.8 0.006 0.010 17.15 8.0.7 0.003 0.005 17.09 8.0.6 0.004 0.004 17.11 8.0.5 0.004 0.004 17.26 8.0.3 0.010 0.014 17.26 8.0.2 0.012 0.008 17.40 8.0.1 0.000 0.008 17.10 8.0.0 0.011 0.011 16.99 7.4.33 0.000 0.005 15.13 7.4.32 0.007 0.000 16.50 7.4.30 0.004 0.004 16.65 7.4.29 0.004 0.004 16.63 7.4.28 0.000 0.007 16.63 7.4.27 0.005 0.003 16.73 7.4.26 0.005 0.003 16.64 7.4.25 0.003 0.005 16.68 7.4.24 0.005 0.003 16.69 7.4.23 0.004 0.004 16.69 7.4.22 0.013 0.006 16.50 7.4.21 0.012 0.004 16.67 7.4.20 0.004 0.004 16.62 7.4.16 0.006 0.011 16.74 7.4.15 0.006 0.013 17.40 7.4.14 0.016 0.006 17.86 7.4.13 0.009 0.009 16.74 7.4.12 0.008 0.011 16.63 7.4.11 0.006 0.012 16.50 7.4.10 0.010 0.013 16.67 7.4.9 0.012 0.006 16.73 7.4.8 0.010 0.010 19.39 7.4.7 0.022 0.000 16.61 7.4.6 0.015 0.003 16.69 7.4.5 0.009 0.000 16.79 7.4.4 0.010 0.013 16.59 7.4.3 0.012 0.009 16.42 7.4.0 0.003 0.014 15.06 7.3.33 0.000 0.006 13.34 7.3.32 0.014 0.000 13.43 7.3.31 0.004 0.004 16.44 7.3.30 0.004 0.004 16.40 7.3.29 0.007 0.007 16.48 7.3.28 0.009 0.013 16.46 7.3.27 0.012 0.006 17.40 7.3.26 0.006 0.018 16.76 7.3.25 0.009 0.009 16.45 7.3.24 0.016 0.006 16.46 7.3.23 0.010 0.010 16.71 7.3.21 0.010 0.007 16.61 7.3.20 0.011 0.007 19.39 7.3.19 0.010 0.007 16.43 7.3.18 0.007 0.010 16.40 7.3.17 0.010 0.010 16.60 7.3.16 0.003 0.014 16.66 7.3.12 0.007 0.011 15.03 7.3.11 0.003 0.012 14.82 7.3.10 0.011 0.006 14.95 7.3.9 0.003 0.013 15.21 7.3.8 0.007 0.007 14.73 7.3.7 0.012 0.003 15.00 7.3.6 0.007 0.003 14.74 7.3.5 0.005 0.005 14.88 7.3.4 0.003 0.010 14.97 7.3.3 0.006 0.003 14.70 7.3.2 0.006 0.008 16.45 7.3.1 0.006 0.007 16.46 7.3.0 0.006 0.010 16.59 7.2.33 0.010 0.010 16.45 7.2.32 0.012 0.009 16.69 7.2.31 0.003 0.014 16.48 7.2.30 0.013 0.006 16.34 7.2.29 0.012 0.009 16.48 7.2.24 0.003 0.016 14.99 7.2.23 0.007 0.007 15.10 7.2.22 0.007 0.007 14.70 7.2.21 0.000 0.015 14.95 7.2.20 0.007 0.010 15.02 7.2.19 0.009 0.006 15.16 7.2.18 0.009 0.006 15.03 7.2.17 0.004 0.008 14.84 7.2.16 0.003 0.008 15.05 7.2.15 0.006 0.013 16.72 7.2.14 0.017 0.000 16.86 7.2.13 0.009 0.005 16.75 7.2.12 0.007 0.010 16.66 7.2.11 0.007 0.005 16.71 7.2.10 0.006 0.007 16.83 7.2.9 0.009 0.007 16.83 7.2.8 0.012 0.005 16.76 7.2.7 0.006 0.010 16.80 7.2.6 0.007 0.010 16.82 7.2.5 0.005 0.010 16.75 7.2.4 0.008 0.010 16.93 7.2.3 0.004 0.011 16.72 7.2.2 0.003 0.014 16.72 7.2.1 0.003 0.010 16.83 7.2.0 0.005 0.010 17.61 7.1.33 0.003 0.010 15.49 7.1.32 0.007 0.011 15.27 7.1.31 0.000 0.009 15.50 7.1.30 0.003 0.007 15.55 7.1.29 0.013 0.000 15.70 7.1.28 0.004 0.011 15.66 7.1.27 0.003 0.010 15.41 7.1.26 0.006 0.012 15.57 7.1.25 0.006 0.008 15.51 7.1.20 0.003 0.003 15.66 7.1.10 0.004 0.011 18.05 7.1.7 0.000 0.008 16.67 7.1.6 0.000 0.013 17.19 7.1.5 0.010 0.016 16.89 7.1.0 0.000 0.080 22.29 7.0.20 0.000 0.016 16.34 7.0.14 0.007 0.063 21.97 7.0.10 0.007 0.083 20.07 7.0.9 0.010 0.080 20.13 7.0.8 0.003 0.047 20.02 7.0.7 0.003 0.083 20.04 7.0.6 0.020 0.040 20.02 7.0.5 0.010 0.063 20.38 7.0.4 0.007 0.040 20.10 7.0.3 0.003 0.070 20.16 7.0.2 0.010 0.047 20.09 7.0.1 0.010 0.070 20.13 7.0.0 0.007 0.087 20.12 5.6.28 0.007 0.090 21.02 5.6.25 0.010 0.080 20.70 5.6.24 0.007 0.050 20.74 5.6.23 0.003 0.053 20.73 5.6.22 0.013 0.077 20.70 5.6.21 0.007 0.077 20.60 5.6.20 0.010 0.087 21.22 5.6.19 0.003 0.080 21.17 5.6.18 0.007 0.080 21.16 5.6.17 0.023 0.073 21.07 5.6.16 0.003 0.057 21.23 5.6.15 0.007 0.077 21.21 5.6.14 0.000 0.077 21.06 5.6.13 0.013 0.073 21.17 5.6.12 0.010 0.080 21.25 5.6.11 0.000 0.093 21.15 5.6.10 0.013 0.077 21.16 5.6.9 0.007 0.080 21.20 5.6.8 0.007 0.067 20.54 5.6.7 0.010 0.063 20.66 5.6.6 0.010 0.073 20.49 5.6.5 0.010 0.073 20.41 5.6.4 0.003 0.077 20.51 5.6.3 0.020 0.073 20.44 5.6.2 0.020 0.067 20.48 5.6.1 0.007 0.077 20.57 5.6.0 0.007 0.047 20.47 5.5.38 0.007 0.077 20.60 5.5.37 0.007 0.073 20.67 5.5.36 0.007 0.060 20.59 5.5.35 0.007 0.080 20.50 5.5.34 0.010 0.043 21.02 5.5.33 0.013 0.063 20.98 5.5.32 0.007 0.077 21.03 5.5.31 0.007 0.063 21.01 5.5.30 0.010 0.073 20.93 5.5.29 0.007 0.067 20.89 5.5.28 0.010 0.073 20.87 5.5.27 0.013 0.073 20.94 5.5.26 0.007 0.050 21.02 5.5.25 0.013 0.077 20.72 5.5.24 0.010 0.070 20.38 5.5.23 0.003 0.077 20.13 5.5.22 0.007 0.040 20.31 5.5.21 0.007 0.073 20.29 5.5.20 0.013 0.063 20.38 5.5.19 0.007 0.077 20.35 5.5.18 0.010 0.043 20.10 5.5.16 0.020 0.060 20.10 5.5.15 0.013 0.047 20.38 5.5.14 0.013 0.063 20.30 5.5.13 0.003 0.080 20.34 5.5.12 0.010 0.053 20.35 5.5.11 0.017 0.060 20.38 5.5.10 0.000 0.043 20.14 5.5.9 0.010 0.033 20.21 5.5.8 0.010 0.050 20.21 5.5.7 0.000 0.073 20.22 5.5.6 0.013 0.063 20.12 5.5.5 0.010 0.073 20.17 5.5.4 0.013 0.060 20.26 5.5.3 0.020 0.047 20.17 5.5.2 0.010 0.093 20.25 5.5.1 0.010 0.050 20.08 5.5.0 0.010 0.080 20.08 5.4.45 0.007 0.043 19.32 5.4.44 0.007 0.080 19.21 5.4.43 0.013 0.060 19.46 5.4.42 0.017 0.060 19.32 5.4.41 0.013 0.070 19.27 5.4.40 0.017 0.070 19.14 5.4.39 0.007 0.077 19.14 5.4.38 0.007 0.067 19.04 5.4.37 0.003 0.077 19.22 5.4.36 0.003 0.057 19.09 5.4.35 0.010 0.073 19.10 5.4.34 0.013 0.070 19.08 5.4.32 0.007 0.070 19.29 5.4.31 0.010 0.067 18.99 5.4.30 0.010 0.063 19.13 5.4.29 0.010 0.040 19.09 5.4.28 0.007 0.040 19.15 5.4.27 0.007 0.043 19.22 5.4.26 0.003 0.077 19.09 5.4.25 0.007 0.040 19.13 5.4.24 0.010 0.070 18.89 5.4.23 0.007 0.063 19.05 5.4.22 0.003 0.077 19.21 5.4.21 0.003 0.063 19.13 5.4.20 0.003 0.057 19.16 5.4.19 0.007 0.080 19.20 5.4.18 0.003 0.083 19.24 5.4.17 0.010 0.040 19.13 5.4.16 0.017 0.060 19.23 5.4.15 0.003 0.083 19.09 5.4.14 0.020 0.060 16.36 5.4.13 0.007 0.077 16.44 5.4.12 0.007 0.053 16.44 5.4.11 0.010 0.073 16.47 5.4.10 0.007 0.073 16.50 5.4.9 0.010 0.040 16.41 5.4.8 0.007 0.037 16.57 5.4.7 0.003 0.070 16.57 5.4.6 0.000 0.047 16.54 5.4.5 0.007 0.047 16.46 5.4.4 0.013 0.067 16.58 5.4.3 0.013 0.060 16.53 5.4.2 0.010 0.063 16.48 5.4.1 0.003 0.053 16.38 5.4.0 0.000 0.040 15.89
preferences:dark mode live preview
41.27 ms | 401 KiB | 5 Q