3v4l.org

run code in 300+ PHP versions simultaneously
<?php class FirePHP { /** * Gets singleton instance of FirePHP * * @param boolean $AutoCreate * @return FirePHP */ public static function getInstance($AutoCreate=false) { if($AutoCreate===true && !self::$instance) { self::init(); } return self::$instance; } /** * Creates FirePHP object and stores it for singleton access * * @return FirePHP */ public static function init() { return self::$instance = new self(); } /** * Enable and disable logging to Firebug * * @param boolean $Enabled TRUE to enable, FALSE to disable * @return void */ public function setEnabled($Enabled) { $this->enabled = $Enabled; } /** * Check if logging is enabled * * @return boolean TRUE if enabled */ public function getEnabled() { return $this->enabled; } /** * Specify a filter to be used when encoding an object * * Filters are used to exclude object members. * * @param string $Class The class name of the object * @param array $Filter An array or members to exclude * @return void */ public function setObjectFilter($Class, $Filter) { $this->objectFilters[$Class] = $Filter; } /** * Register FirePHP as your error handler * * Will throw exceptions for each php error. */ public function registerErrorHandler() { //NOTE: The following errors will not be caught by this error handler: // E_ERROR, E_PARSE, E_CORE_ERROR, // E_CORE_WARNING, E_COMPILE_ERROR, // E_COMPILE_WARNING, E_STRICT set_error_handler(array($this,'errorHandler')); } /** * FirePHP's error handler * * Throws exception for each php error that will occur. * * @param int $errno * @param string $errstr * @param string $errfile * @param int $errline * @param array $errcontext */ public function errorHandler($errno, $errstr, $errfile, $errline, $errcontext) { // Don't throw exception if error reporting is switched off if (error_reporting() == 0) { return; } // Only throw exceptions for errors we are asking for if (error_reporting() & $errno) { throw new ErrorException($errstr, 0, $errno, $errfile, $errline); } } /** * Register FirePHP as your exception handler */ public function registerExceptionHandler() { set_exception_handler(array($this,'exceptionHandler')); } /** * FirePHP's exception handler * * Logs all exceptions to your firebug console and then stops the script. * * @param Exception $Exception * @throws Exception */ function exceptionHandler($Exception) { $this->fb($Exception); } /** * Set custom processor url for FirePHP * * @param string $URL */ public function setProcessorUrl($URL) { $this->setHeader('X-FirePHP-ProcessorURL', $URL); } /** * Set custom renderer url for FirePHP * * @param string $URL */ public function setRendererUrl($URL) { $this->setHeader('X-FirePHP-RendererURL', $URL); } /** * Start a group for following messages * * @param string $Name * @return true * @throws Exception */ public function group($Name) { return $this->fb(null, $Name, FirePHP::GROUP_START); } /** * Ends a group you have started before * * @return true * @throws Exception */ public function groupEnd() { return $this->fb(null, null, FirePHP::GROUP_END); } /** * Log object with label to firebug console * * @see FirePHP::LOG * @param mixes $Object * @param string $Label * @return true * @throws Exception */ public function log($Object, $Label=null) { return $this->fb($Object, $Label, FirePHP::LOG); } /** * Log object with label to firebug console * * @see FirePHP::INFO * @param mixes $Object * @param string $Label * @return true * @throws Exception */ public function info($Object, $Label=null) { return $this->fb($Object, $Label, FirePHP::INFO); } /** * Log object with label to firebug console * * @see FirePHP::WARN * @param mixes $Object * @param string $Label * @return true * @throws Exception */ public function warn($Object, $Label=null) { return $this->fb($Object, $Label, FirePHP::WARN); } /** * Log object with label to firebug console * * @see FirePHP::ERROR * @param mixes $Object * @param string $Label * @return true * @throws Exception */ public function error($Object, $Label=null) { return $this->fb($Object, $Label, FirePHP::ERROR); } /** * Dumps key and variable to firebug server panel * * @see FirePHP::DUMP * @param string $Key * @param mixed $Variable * @return true * @throws Exception */ public function dump($Key, $Variable) { return $this->fb($Variable, $Key, FirePHP::DUMP); } /** * Log a trace in the firebug console * * @see FirePHP::TRACE * @param string $Label * @return true * @throws Exception */ public function trace($Label) { return $this->fb($Label, FirePHP::TRACE); } /** * Log a table in the firebug console * * @see FirePHP::TABLE * @param string $Label * @param string $Table * @return true * @throws Exception */ public function table($Label, $Table) { return $this->fb($Table, $Label, FirePHP::TABLE); } /** * Check if FirePHP is installed on client * * @return boolean */ public function detectClientExtension() { /* Check if FirePHP is installed on client */ if(!@preg_match_all('/\sFirePHP\/([\.|\d]*)\s?/si',$this->getUserAgent(),$m) || !version_compare($m[1][0],'0.0.6','>=')) { return false; } return true; } /** * Log varible to Firebug * * @see http://www.firephp.org/Wiki/Reference/Fb * @param mixed $Object The variable to be logged * @return true Return TRUE if message was added to headers, FALSE otherwise * @throws Exception */ public function fb($Object) { if(!$this->enabled) { return false; } if (headers_sent($filename, $linenum)) { throw $this->newException('Headers already sent in '.$filename.' on line '.$linenum.'. Cannot send log data to FirePHP. You must have Output Buffering enabled via ob_start() or output_buffering ini directive.'); } $Type = null; $Label = null; if(func_num_args()==1) { } else if(func_num_args()==2) { switch(func_get_arg(1)) { case self::LOG: case self::INFO: case self::WARN: case self::ERROR: case self::DUMP: case self::TRACE: case self::EXCEPTION: case self::TABLE: case self::GROUP_START: case self::GROUP_END: $Type = func_get_arg(1); break; default: $Label = func_get_arg(1); break; } } else if(func_num_args()==3) { $Type = func_get_arg(2); $Label = func_get_arg(1); } else { throw $this->newException('Wrong number of arguments to fb() function!'); } if(!$this->detectClientExtension()) { return false; } $meta = array(); $skipFinalObjectEncode = false; if($Object instanceof Exception) { $meta['file'] = $this->_escapeTraceFile($Object->getFile()); $meta['line'] = $Object->getLine(); $trace = $Object->getTrace(); if($Object instanceof ErrorException && isset($trace[0]['function']) && $trace[0]['function']=='errorHandler' && isset($trace[0]['class']) && $trace[0]['class']=='FirePHP') { $severity = false; switch($Object->getSeverity()) { case E_WARNING: $severity = 'E_WARNING'; break; case E_NOTICE: $severity = 'E_NOTICE'; break; case E_USER_ERROR: $severity = 'E_USER_ERROR'; break; case E_USER_WARNING: $severity = 'E_USER_WARNING'; break; case E_USER_NOTICE: $severity = 'E_USER_NOTICE'; break; case E_STRICT: $severity = 'E_STRICT'; break; case E_RECOVERABLE_ERROR: $severity = 'E_RECOVERABLE_ERROR'; break; case E_DEPRECATED: $severity = 'E_DEPRECATED'; break; case E_USER_DEPRECATED: $severity = 'E_USER_DEPRECATED'; break; } $Object = array('Class'=>get_class($Object), 'Message'=>$severity.': '.$Object->getMessage(), 'File'=>$this->_escapeTraceFile($Object->getFile()), 'Line'=>$Object->getLine(), 'Type'=>'trigger', 'Trace'=>$this->_escapeTrace(array_splice($trace,2))); $skipFinalObjectEncode = true; } else { $Object = array('Class'=>get_class($Object), 'Message'=>$Object->getMessage(), 'File'=>$this->_escapeTraceFile($Object->getFile()), 'Line'=>$Object->getLine(), 'Type'=>'throw', 'Trace'=>$this->_escapeTrace($trace)); $skipFinalObjectEncode = true; } $Type = self::EXCEPTION; } else if($Type==self::TRACE) { $trace = debug_backtrace(); if(!$trace) return false; for( $i=0 ; $i<sizeof($trace) ; $i++ ) { if(isset($trace[$i]['class']) && isset($trace[$i]['file']) && ($trace[$i]['class']=='FirePHP' || $trace[$i]['class']=='FB') && (substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php' || substr($this->_standardizePath($trace[$i]['file']),-29,29)=='FirePHPCore/FirePHP.class.php')) { /* Skip - FB::trace(), FB::send(), $firephp->trace(), $firephp->fb() */ } else if(isset($trace[$i]['class']) && isset($trace[$i+1]['file']) && $trace[$i]['class']=='FirePHP' && substr($this->_standardizePath($trace[$i+1]['file']),-18,18)=='FirePHPCore/fb.php') { /* Skip fb() */ } else if($trace[$i]['function']=='fb' || $trace[$i]['function']=='trace' || $trace[$i]['function']=='send') { $Object = array('Class'=>isset($trace[$i]['class'])?$trace[$i]['class']:'', 'Type'=>isset($trace[$i]['type'])?$trace[$i]['type']:'', 'Function'=>isset($trace[$i]['function'])?$trace[$i]['function']:'', 'Message'=>$trace[$i]['args'][0], 'File'=>isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):'', 'Line'=>isset($trace[$i]['line'])?$trace[$i]['line']:'', 'Args'=>isset($trace[$i]['args'])?$this->encodeObject($trace[$i]['args']):'', 'Trace'=>$this->_escapeTrace(array_splice($trace,$i+1))); $skipFinalObjectEncode = true; $meta['file'] = isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):''; $meta['line'] = isset($trace[$i]['line'])?$trace[$i]['line']:''; break; } } } else if($Type==self::TABLE) { if(isset($Object[0]) && is_string($Object[0])) { $Object[1] = $this->encodeTable($Object[1]); } else { $Object = $this->encodeTable($Object); } $skipFinalObjectEncode = true; } else { if($Type===null) { $Type = self::LOG; } } if($this->options['includeLineNumbers']) { if(!isset($meta['file']) || !isset($meta['line'])) { $trace = debug_backtrace(); for( $i=0 ; $trace && $i<sizeof($trace) ; $i++ ) { if(isset($trace[$i]['class']) && isset($trace[$i]['file']) && ($trace[$i]['class']=='FirePHP' || $trace[$i]['class']=='FB') && (substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php' || substr($this->_standardizePath($trace[$i]['file']),-29,29)=='FirePHPCore/FirePHP.class.php')) { /* Skip - FB::trace(), FB::send(), $firephp->trace(), $firephp->fb() */ } else if(isset($trace[$i]['class']) && isset($trace[$i+1]['file']) && $trace[$i]['class']=='FirePHP' && substr($this->_standardizePath($trace[$i+1]['file']),-18,18)=='FirePHPCore/fb.php') { /* Skip fb() */ } else if(isset($trace[$i]['file']) && substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php') { /* Skip FB::fb() */ } else { $meta['file'] = isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):''; $meta['line'] = isset($trace[$i]['line'])?$trace[$i]['line']:''; break; } } } } else { unset($meta['file']); unset($meta['line']); } $this->setHeader('X-Wf-Protocol-1','http://meta.wildfirehq.org/Protocol/JsonStream/0.2'); $this->setHeader('X-Wf-1-Plugin-1','http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/'.self::VERSION); $structure_index = 1; if($Type==self::DUMP) { $structure_index = 2; $this->setHeader('X-Wf-1-Structure-2','http://meta.firephp.org/Wildfire/Structure/FirePHP/Dump/0.1'); } else { $this->setHeader('X-Wf-1-Structure-1','http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1'); } if($Type==self::DUMP) { $msg = '{"'.$Label.'":'.$this->jsonEncode($Object, $skipFinalObjectEncode).'}'; } else { $msg_meta = array('Type'=>$Type); if($Label!==null) { $msg_meta['Label'] = $Label; } if(isset($meta['file'])) { $msg_meta['File'] = $meta['file']; } if(isset($meta['line'])) { $msg_meta['Line'] = $meta['line']; } $msg = '['.$this->jsonEncode($msg_meta).','.$this->jsonEncode($Object, $skipFinalObjectEncode).']'; } $parts = explode("\n",chunk_split($msg, 5000, "\n")); for( $i=0 ; $i<count($parts) ; $i++) { $part = $parts[$i]; if ($part) { if(count($parts)>2) { // Message needs to be split into multiple parts $this->setHeader('X-Wf-1-'.$structure_index.'-'.'1-'.$this->messageIndex, (($i==0)?strlen($msg):'') . '|' . $part . '|' . (($i<count($parts)-2)?'\\':'')); } else { $this->setHeader('X-Wf-1-'.$structure_index.'-'.'1-'.$this->messageIndex, strlen($part) . '|' . $part . '|'); } $this->messageIndex++; if ($this->messageIndex > 99999) { throw new Exception('Maximum number (99,999) of messages reached!'); } } } $this->setHeader('X-Wf-1-Index',$this->messageIndex-1); return true; } /** * Standardizes path for windows systems. * * @param string $Path * @return string */ protected function _standardizePath($Path) { } /** * Escape trace path for windows systems * * @param array $Trace * @return array */ protected function _escapeTrace($Trace) { if(!$Trace) return $Trace; for( $i=0 ; $i<sizeof($Trace) ; $i++ ) { if(isset($Trace[$i]['file'])) { $Trace[$i]['file'] = $this->_escapeTraceFile($Trace[$i]['file']); } if(isset($Trace[$i]['args'])) { $Trace[$i]['args'] = $this->encodeObject($Trace[$i]['args']); } } return $Trace; } /** * Escape file information of trace for windows systems * * @param string $File * @return string */ protected function _escapeTraceFile($File) { /* Check if we have a windows filepath */ if(strpos($File,'\\')) { /* First strip down to single \ */ $file = preg_replace('/\\\\+/','\\',$File); return $file; } return $File; } /** * Send header * * @param string $Name * @param string_type $Value */ protected function setHeader($Name, $Value) { return header($Name.': '.$Value); } /** * Get user agent * * @return string|false */ protected function getUserAgent() { if(!isset($_SERVER['HTTP_USER_AGENT'])) return false; return $_SERVER['HTTP_USER_AGENT']; } /** * Returns a new exception * * @param string $Message * @return Exception */ protected function newException($Message) { return new Exception($Message); } /** * Encode an object into a JSON string * * Uses PHP's jeson_encode() if available * * @param object $Object The object to be encoded * @return string The JSON string */ public function jsonEncode($Object, $skipObjectEncode=false) { } /** * Encodes a table by encoding each row and column with encodeObject() * * @param array $Table The table to be encoded * @return array */ protected function encodeTable($Table) { } /** * Encodes an object including members with * protected and private visibility * * @param Object $Object The object to be encoded * @param int $Depth The current traversal depth * @return array All members of the object */ protected function encodeObject($Object, $ObjectDepth = 1, $ArrayDepth = 1) { } /** * Returns true if $string is valid UTF-8 and false otherwise. * * @param mixed $str String to be tested * @return boolean */ protected static function is_utf8($str) { } private function json_encode($var) { } private function json_name_value($name, $value) { } } function ciao() { $out = '<pre>'; $args = func_get_args(); if(!empty($args)) { // var_export() causes fatal errors on recursion... ob_start(); ini_set('xdebug.var_display_max_depth', 4); var_dump($args); $out .= ob_get_contents()."\n\n"; ob_end_clean(); } $out .= get_backtrace(1); die($out); } class A { function B() { while (ob_get_level() > 1) ob_end_flush(); // store possible trailing content $content = ob_get_clean(); // start an output buffer which cannot be flushed (3rd parameter is false) // callback function get all output and corrects Content-Length header ob_start(function($buffer) { ciao($buffer); }, 0, false); } } $a = new A; $a->B();

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).

VersionSystem time (s)User time (s)Memory (MiB)
8.3.60.0040.01118.43
8.3.50.0240.00521.98
8.3.40.0090.01218.92
8.3.30.0220.00018.79
8.3.20.0000.00919.02
8.3.10.0080.01121.05
8.3.00.0000.00821.90
8.2.180.0100.01316.98
8.2.170.0090.00622.96
8.2.160.0040.01120.73
8.2.150.0060.00324.18
8.2.140.0100.00024.66
8.2.130.0060.00926.16
8.2.120.0000.00821.11
8.2.110.0070.00322.27
8.2.100.0080.00417.97
8.2.90.0050.00319.30
8.2.80.0040.00418.18
8.2.70.0080.00017.88
8.2.60.0030.00618.18
8.2.50.0060.00318.07
8.2.40.0050.00318.47
8.2.30.0000.00919.90
8.2.20.0080.00017.82
8.2.10.0080.00017.98
8.2.00.0050.00317.85
8.1.270.0040.00423.99
8.1.260.0090.00026.35
8.1.250.0040.00428.09
8.1.240.0030.00722.55
8.1.230.0030.00821.27
8.1.220.0090.00018.77
8.1.210.0060.00319.13
8.1.200.0060.00317.60
8.1.190.0040.00417.78
8.1.180.0030.00518.10
8.1.170.0040.00418.78
8.1.160.0000.00819.04
8.1.150.0050.00318.91
8.1.140.0040.00417.73
8.1.130.0000.00718.12
8.1.120.0040.00417.59
8.1.110.0000.00817.67
8.1.100.0040.00417.58
8.1.90.0040.00717.59
8.1.80.0000.00817.59
8.1.70.0000.00817.64
8.1.60.0030.00617.79
8.1.50.0090.00017.73
8.1.40.0090.00017.64
8.1.30.0000.00817.76
8.1.20.0030.00617.93
8.1.10.0000.00817.82
8.1.00.0000.00817.52
8.0.300.0040.00420.15
8.0.290.0000.00717.41
8.0.280.0040.00418.68
8.0.270.0000.00717.35
8.0.260.0040.00417.16
8.0.250.0050.00317.28
8.0.240.0040.00817.15
8.0.230.0050.00317.33
8.0.220.0040.00417.10
8.0.210.0060.00617.24
8.0.200.0030.00317.09
8.0.190.0040.00417.27
8.0.180.0040.00417.11
8.0.170.0060.00317.23
8.0.160.0040.00417.21
8.0.150.0000.00917.16
8.0.140.0030.00517.21
8.0.130.0000.00613.66
8.0.120.0080.00017.04
8.0.110.0040.00417.20
8.0.100.0080.00017.21
8.0.90.0040.00417.22
8.0.80.0090.00617.14
8.0.70.0040.00417.08
8.0.60.0080.00017.17
8.0.50.0110.00017.08
8.0.30.0070.01217.43
8.0.20.0070.01217.42
8.0.10.0040.00417.38
8.0.00.0110.01117.03
7.4.330.0030.00314.83
7.4.320.0070.00016.80
7.4.300.0000.00616.74
7.4.290.0080.00016.72
7.4.280.0070.00316.73
7.4.270.0050.00316.64
7.4.260.0030.00313.43
7.4.250.0060.00316.72
7.4.240.0050.00316.84
7.4.230.0040.00416.50
7.4.220.0080.01216.69
7.4.210.0060.01216.77
7.4.200.0030.00516.83
7.4.190.0040.00416.72
7.4.160.0120.00616.64
7.4.150.0120.00617.40
7.4.140.0060.01417.86
7.4.130.0090.00916.65
7.4.120.0090.00916.78
7.4.110.0070.01016.83
7.4.100.0070.01016.64
7.4.90.0040.01516.71
7.4.80.0070.01019.37
7.4.70.0110.00716.73
7.4.60.0000.01716.70
7.4.50.0000.00716.49
7.4.40.0090.00622.27
7.4.30.0100.00816.84
7.4.00.0080.00815.18
7.3.330.0000.00513.38
7.3.320.0020.00513.38
7.3.310.0070.00016.62
7.3.300.0050.00316.47
7.3.290.0070.01016.61
7.3.280.0070.01016.59
7.3.270.0100.00717.40
7.3.260.0120.00918.24
7.3.250.0110.01316.65
7.3.240.0030.01416.80
7.3.230.0110.00816.74
7.3.210.0080.01216.54
7.3.200.0120.00619.39
7.3.190.0120.00616.67
7.3.180.0030.01416.82
7.3.170.0030.01416.77
7.3.160.0110.00616.64
7.3.120.0050.01215.24
7.3.110.0040.00715.09
7.3.100.0030.00915.09
7.3.90.0070.00315.13
7.3.80.0040.01114.77
7.3.70.0120.00314.90
7.3.60.0000.01414.98
7.3.50.0030.01614.91
7.3.40.0100.00614.71
7.3.30.0070.00715.05
7.3.20.0070.01016.73
7.3.10.0030.01316.55
7.3.00.0030.00916.42
7.2.330.0040.01617.00
7.2.320.0110.00716.73
7.2.310.0120.00616.98
7.2.300.0120.00617.01
7.2.290.0080.00917.07
7.2.250.0130.00615.50
7.2.240.0030.01715.39
7.2.230.0110.00315.25
7.2.220.0060.00615.37
7.2.210.0070.00715.47
7.2.200.0030.01515.28
7.2.190.0060.00614.91
7.2.180.0040.01215.10
7.2.170.0100.00715.38
7.2.60.0050.00817.00
7.2.00.0070.00719.46
7.1.330.0030.01015.80
7.1.320.0090.00315.54
7.1.310.0000.00915.90
7.1.300.0030.00715.76
7.1.290.0070.01115.88
7.1.280.0070.00715.71
7.1.270.0030.01015.59
7.1.260.0030.01215.78
7.1.200.0110.00315.46
7.1.100.0090.00318.21
7.1.70.0040.00417.12
7.1.60.0100.01719.40
7.1.50.0100.01016.87
7.1.00.0030.05022.36
7.0.200.0030.00616.68
7.0.140.0070.06721.96
7.0.100.0030.04320.16
7.0.90.0300.07720.09
7.0.80.0000.08320.20
7.0.70.0070.06320.10
7.0.60.0170.06720.08
7.0.50.0070.05020.56
7.0.40.0100.08020.16
7.0.30.0070.04019.93
7.0.20.0030.04320.18
7.0.10.0030.04320.09
7.0.00.0070.04020.10
5.6.280.0030.07321.27
5.6.250.0100.07320.68
5.6.240.0000.07020.86
5.6.230.0070.08020.63
5.6.220.0070.07320.68
5.6.210.0100.07720.83
5.6.200.0230.07321.21
5.6.190.0230.07321.27
5.6.180.0070.08721.21
5.6.170.0200.03721.18
5.6.160.0000.05721.30
5.6.150.0030.04721.12
5.6.140.0030.04321.18
5.6.130.0070.04021.14
5.6.120.0030.04321.20
5.6.110.0070.04021.14
5.6.100.0030.04321.18
5.6.90.0100.06321.16
5.6.80.0030.03720.54
5.6.70.0130.05020.55
5.6.60.0100.03320.57
5.6.50.0000.03720.56
5.6.40.0030.04320.53
5.6.30.0030.04020.53
5.6.20.0100.03320.53
5.6.10.0130.03020.43
5.6.00.0000.04320.46
5.5.380.0070.08320.70
5.5.370.0030.05320.64
5.5.360.0100.03720.48
5.5.350.0130.05320.57
5.5.340.0030.09320.89
5.5.330.0030.08020.77
5.5.320.0070.04021.05
5.5.310.0130.03320.95
5.5.300.0030.04021.00
5.5.290.0070.04021.04
5.5.280.0070.04021.00
5.5.270.0070.03721.02
5.5.260.0130.03320.76
5.5.250.0000.04720.73
5.5.240.0030.04320.27
5.5.230.0000.04720.41
5.5.220.0100.03320.29
5.5.210.0070.03720.28
5.5.200.0070.03720.32
5.5.190.0000.04720.27
5.5.180.0070.03720.30
5.5.160.0000.04020.12
5.5.150.0000.04320.25
5.5.140.0070.03020.30
5.5.130.0000.03720.35
5.5.120.0000.04320.34
5.5.110.0030.03320.11
5.5.100.0000.03720.08
5.5.90.0100.02720.20
5.5.80.0000.04020.28
5.5.70.0030.03720.19
5.5.60.0030.03320.21
5.5.50.0000.07720.26
5.5.40.0100.07020.13
5.5.30.0130.06320.18
5.5.20.0100.06320.27
5.5.10.0030.06720.23
5.5.00.0130.06320.13
5.4.450.0030.04019.44
5.4.440.0100.03319.24
5.4.430.0000.04319.49
5.4.420.0030.04319.58
5.4.410.0070.06719.36
5.4.400.0000.04019.12
5.4.390.0000.04319.09
5.4.380.0100.03019.09
5.4.370.0030.03719.10
5.4.360.0130.03319.20
5.4.350.0030.03019.25
5.4.340.0100.03319.26
5.4.320.0030.04319.05
5.4.310.0070.03719.07
5.4.300.0100.02719.31
5.4.290.0030.03718.96
5.4.280.0100.02719.13
5.4.270.0100.02318.92
5.4.260.0070.02719.14
5.4.250.0000.03319.02
5.4.240.0000.03319.10
5.4.230.0030.03018.95
5.4.220.0030.03319.02
5.4.210.0100.04719.13
5.4.200.0070.06719.02
5.4.190.0030.07719.25
5.4.180.0000.07718.93
5.4.170.0000.04019.24
5.4.160.0070.03318.95
5.4.150.0030.06018.91
5.4.140.0070.07016.53
5.4.130.0030.06316.50
5.4.120.0030.03716.38
5.4.110.0030.05716.61
5.4.100.0030.03316.55
5.4.90.0030.06716.62
5.4.80.0000.06316.50
5.4.70.0000.03716.53
5.4.60.0070.06016.41
5.4.50.0070.05716.45
5.4.40.0030.05316.59
5.4.30.0070.06316.54
5.4.20.0100.04716.40
5.4.10.0030.04716.57
5.4.00.0070.03715.97
5.3.290.0100.03014.95
5.3.280.0030.03014.74
5.3.270.0070.04714.81
5.3.260.0000.07314.91
5.3.250.0000.07014.81
5.3.240.0170.07314.89
5.3.230.0030.04714.85
5.3.220.0070.07714.86
5.3.210.0000.07014.74
5.3.200.0000.08314.77
5.3.190.0070.05314.76
5.3.180.0170.05014.88
5.3.170.0030.03714.88
5.3.160.0000.07314.69
5.3.150.0070.04014.70
5.3.140.0030.05314.84
5.3.130.0070.03714.72
5.3.120.0030.08014.73
5.3.110.0070.07314.79
5.3.100.0030.07014.29
5.3.90.0070.06714.27
5.3.80.0030.06014.12
5.3.70.0030.03314.15
5.3.60.0030.03714.34
5.3.50.0070.07014.20
5.3.40.0070.03314.28
5.3.30.0100.06314.17
5.3.20.0100.02713.91
5.3.10.0030.05713.98
5.3.00.0000.04713.81

preferences:
49.67 ms | 400 KiB | 5 Q