Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
eval( base64_decode( 'aWYgKCAhZnVuY3Rpb25fZXhpc3RzICggJ2Jlc3R3ZWJzb2Z0X3dwX3VwZGF0ZV9wbHV..
Decoded Output download
if ( !function_exists ( 'bestwebsoft_wp_update_plugins' ) ) { function bestwebsoft_wp_update_plugins() {
global $bestwebsoft_wp_update_plugins, $bstwbsftwppdtplgns_options; if ( $bestwebsoft_wp_update_plugins ) {
$bestwebsoft_wp_update_plugins = false; include ABSPATH . WPINC . '/version.php'; if ( defined('WP_INSTALLING') )
return false; if ( ! function_exists( 'get_plugins' ) ) require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
$plugins = get_plugins(); $active = get_option( 'active_plugins', array() ); $current = get_site_transient( 'update_plugins' );
if ( is_array( $plugins ) && !empty( $plugins ) && is_array( $active ) && isset( $current ) && is_array( $current->response ) ) {
foreach ( $plugins as $key_plugin => $value_plugin ) { if ( "BestWebSoft" != $value_plugin["Author"] ) {
unset( $plugins[ $key_plugin ] ); foreach ( $active as $key => $value ) { if ( $value == $key_plugin )
unset( $active[ $key ] ); } foreach ( $current->response as $plugin_file => $update_details ) { if ( $plugin_file == $key_plugin )
unset( $current->response[ $plugin_file ] ); } } } if ( is_multisite() ) { if ( ! get_site_option( 'bstwbsftwppdtplgns_options' ) )
add_site_option( 'bstwbsftwppdtplgns_options', array() ); $bstwbsftwppdtplgns_options = get_site_option( 'bstwbsftwppdtplgns_options' );
} else { if ( ! get_option( 'bstwbsftwppdtplgns_options' ) ) add_option( 'bstwbsftwppdtplgns_options', array() );
$bstwbsftwppdtplgns_options = get_option( 'bstwbsftwppdtplgns_options' ); } $bstwbsftwppdtplgns_options['wrong_license_key'] = array();
foreach ( $plugins as $key => $value ) { $license_key = ''; $dir_name = explode( "/", $key ); if ( preg_match( '/-pro.php/i', $dir_name[1] ) || preg_match( '/_pro.php/i', $dir_name[1] ) ) {
if ( file_exists( dirname( dirname( __FILE__ ) ) . '/' . $dir_name[0] . '/license_key.txt' ) ) { $license_key = trim( file_get_contents( dirname( dirname( __FILE__ ) ) . '/' . $dir_name[0] . '/license_key.txt' ) );
if ( isset( $bstwbsftwppdtplgns_options[ $key ] ) && $bstwbsftwppdtplgns_options[ $key ] != '' && $license_key == "" ) {
$plugins[ $key ]["bws_license_key"] = $bstwbsftwppdtplgns_options[ $key ]; } else { $plugins[ $key ]["bws_license_key"] = $license_key;
$bstwbsftwppdtplgns_options[ $key ] = $license_key; } } elseif ( isset( $bstwbsftwppdtplgns_options[ $key ] ) && $bstwbsftwppdtplgns_options[ $key ] != '' ) {
$plugins[ $key ]["bws_license_key"] = $bstwbsftwppdtplgns_options[ $key ]; } else { unset( $plugins[ $key ] );
unset( $active[ $key ] ); unset( $current->response[ $key ] ); $plugin_name = explode( '/', $key );
$wp_schedule_event_name = str_replace( '-', '_', $plugin_name[0] ) . '_license_cron'; if ( !wp_next_scheduled( $wp_schedule_event_name ) )
wp_schedule_event( time() + 12 * 60 * 60, 'twicedaily', $wp_schedule_event_name ); $bstwbsftwppdtplgns_options[ $key ] = '';
$bstwbsftwppdtplgns_options['wrong_license_key'][ $key ] = true; } } else { unset( $plugins[ $key ] );
unset( $active[ $key ] ); unset( $current->response[ $key ] ); } } if ( is_multisite() ) update_site_option( 'bstwbsftwppdtplgns_options', $bstwbsftwppdtplgns_options );
else update_option( 'bstwbsftwppdtplgns_options', $bstwbsftwppdtplgns_options ); if ( empty( $plugins ) )
return false; switch ( current_filter() ) { case 'load-update-core.php' : $timeout = 0; break; case 'load-plugins.php' :
case 'load-update.php' : $timeout = 0; break; default : $timeout = 1 * 60; } $time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked );
if ( $time_not_changed ) { $plugin_changed = false; foreach ( $plugins as $file => $p ) { $new_option->checked[ $file ] = $p['Version'];
if ( !isset( $current->checked[ $file ] ) || strval($current->checked[ $file ]) !== strval($p['Version']) )
$plugin_changed = true; } if ( isset ( $current->response ) && is_array( $current->response ) ) { foreach ( $current->response as $plugin_file => $update_details ) {
if ( ! isset($plugins[ $plugin_file ]) ) { $plugin_changed = true; break; } } } if ( ! $plugin_changed )
return false; } $to_send = compact('plugins', 'active'); $options = array( 'timeout' => ( ( defined('DOING_CRON') && DOING_CRON ) ? 30 : 3 ),
'body' => array( 'plugins' => serialize( $to_send ) ), 'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' )
); $raw_response = wp_remote_post( 'http://bestwebsoft.com/wp-content/plugins/paid-products/plugins/update-check/1.0/', $options );
if ( is_wp_error( $raw_response ) || 200 != wp_remote_retrieve_response_code( $raw_response ) ) return false;
$response = maybe_unserialize( wp_remote_retrieve_body( $raw_response ) ); if ( is_array( $response ) && !empty( $response ) ) {
foreach ( $response as $key => $value ) { $plugin_name = explode( '/', $key ); $wp_schedule_event_name = str_replace( '-', '_', $plugin_name[0] ) . '_license_cron';
if ( ! preg_match( "~^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)(.*)?$~", trim( $value->package ) ) ) {
unset( $response[ $key ] ); if ( ! function_exists( 'wp_mail' ) ) require_once( ABSPATH . 'wp-includes/pluggable.php' );
if ( "wrong_license_key" == $value->package ) { if ( ! wp_next_scheduled( $wp_schedule_event_name ) ) {
wp_schedule_event( time()+12*60*60, 'twicedaily', $wp_schedule_event_name ); $headers = 'From: ' . get_option( 'admin_email' );
$message = 'The cron task is added for ' . $plugin_name[0] . ' host: ' . get_bloginfo( "url" ); wp_mail( '[email protected]', 'BestWebSoft Product', $message, $headers );
$headers .= 'MIME-Version: 1.0' . "
"; $headers .= 'Content-type: text/html; charset=utf-8' . "
";
$message = '<html><head><title>BestWebSoft Product from ' . get_bloginfo('name') . '</title></head>
<body> Dear Customer,<br/><br/> This is an automatically generated email, please do not reply.<br/><br/>
We have noticed illegal use of the <strong>' . ucwords( str_replace( '-', ' ', $plugin_name[0] ) ) . '</strong> plugin on ' . get_bloginfo( "url" ) . '.<br/>
You can use one license of ' . ucwords( str_replace( '-', ' ', $plugin_name[0] ) ) . ' plugin for one domain only. Please check and edit your license or domain if necessary using you personal Client Area. We strongly recommend you to solve the problem within 24 hours, otherwise the Pro plugin will be deactivated. <a href="http://support.bestwebsoft.com/hc/en-us/articles/204240089" target="_blank">Learn More</a><br/><br/>
Thank you for consideration.<br/><br/> Sincerely,<br/> BestWebSoft Customer Support<br/> <a href="http://support.bestwebsoft.com" target="_new">Support Forum</a> | <a href="http://bestwebsoft.com" target="_new">Official Website</a>
</body></html>'; wp_mail( get_option( 'admin_email' ), '[BestWebSoft Product] - Illegal Use Notification', $message, $headers );
} $bstwbsftwppdtplgns_options['wrong_license_key'][ $key ] = true; } elseif ( isset( $value->trial ) && "duplicate_domen_for_trial" == $value->package ) {
if ( ! wp_next_scheduled( $wp_schedule_event_name ) ) { wp_schedule_event( time()+12*60*60, 'twicedaily', $wp_schedule_event_name );
$headers = 'From: ' . get_option( 'admin_email' ); $message = 'Duplicate Trial license. The cron task is added for ' . $plugin_name[0] . ' host: ' . get_bloginfo( "url" );
wp_mail( '[email protected]', 'BestWebSoft Product', $message, $headers ); $headers .= 'MIME-Version: 1.0' . "
";
$headers .= 'Content-type: text/html; charset=utf-8' . "
"; $message = '<html><head><title>BestWebSoft Product from ' . get_bloginfo('name') . '</title></head>
<body> <h4>Dear Customer,</h4> Thank you for choosing our product. This is an automatically generated email, please do not reply.<br/><br/>
Unfortunately, the PRO Trial license can be installed only once. Since the PRO Trial license for <strong>' . ucwords( str_replace( '-', ' ', $plugin_name[0] ) ) . '</strong> has already been installed on ' . get_bloginfo( "url" ) . ', in order to continue using the plugin you should buy a PRO license - <a href="http://bestwebsoft.com/products/">http://bestwebsoft.com/products/</a>, otherwise the plugin will be deactivated.<br/><br/>
Thank you for consideration!<br/><br/> Sincerely,<br/> BestWebSoft Customer Support<br/> <a href="http://support.bestwebsoft.com" target="_new">Support Forum</a> | <a href="http://bestwebsoft.com" target="_new">Official Website</a>
</body></html>'; wp_mail( get_option( 'admin_email' ), '[BestWebSoft Product] - Trial license', $message, $headers );
} $bstwbsftwppdtplgns_options['trial'][ $key ] = 'duplicate'; } elseif ( isset( $value->trial ) && "time_out" == $value->package ) {
if ( ! wp_next_scheduled( $wp_schedule_event_name ) ) { wp_schedule_event( time()+12*60*60, 'twicedaily', $wp_schedule_event_name );
$headers = 'From: ' . get_option( 'admin_email' ); $message = 'Trial license has expired. The cron task is added for ' . $plugin_name[0] . ' host: ' . get_bloginfo( "url" );
wp_mail( '[email protected]', 'BestWebSoft Product', $message, $headers ); $headers .= 'MIME-Version: 1.0' . "
";
$headers .= 'Content-type: text/html; charset=utf-8' . "
"; $message = '<html><head><title>BestWebSoft Product from ' . get_bloginfo('name') . '</title></head>
<body> <h4>Dear Customer,</h4> Thank you for choosing our product. This is an automatically generated email, please do not reply.<br/><br/>
You PRO Trial license for <strong>' . ucwords( str_replace( '-', ' ', $plugin_name[0] ) ) . '</strong> in ' . get_bloginfo( "url" ) . ' has expired. To continue using the plugin you should buy a Regular license - <a href="http://bestwebsoft.com/products/">http://bestwebsoft.com/products/</a>, otherwise the plugin will be deactivated.<br/><br/>
Thank you for consideration!<br/><br/> Sincerely,<br/> BestWebSoft Customer Support<br/> <a href="http://support.bestwebsoft.com" target="_new">Support Forum</a> | <a href="http://bestwebsoft.com" target="_new">Official Website</a>
</body></html>'; wp_mail( get_option( 'admin_email' ), '[BestWebSoft Product] - Trial license', $message, $headers );
} } else { wp_clear_scheduled_hook( $wp_schedule_event_name ); } } else { wp_clear_scheduled_hook( $wp_schedule_event_name );
} if ( isset( $value->time_out ) ) { $bstwbsftwppdtplgns_options['time_out'][ $key ] = $value->time_out;
} if ( isset( $value->trial ) ) { $bstwbsftwppdtplgns_options['trial'][ $key ] = 1; } else { unset( $bstwbsftwppdtplgns_options['trial'][ $key ] );
} if ( is_multisite() ) update_site_option( 'bstwbsftwppdtplgns_options', $bstwbsftwppdtplgns_options );
else update_option( 'bstwbsftwppdtplgns_options', $bstwbsftwppdtplgns_options ); } require_once( ABSPATH . 'wp-includes/update.php' );
wp_update_plugins(); $new = get_site_transient( 'update_plugins' ); $new->response = array_merge( $new->response, $response );
set_site_transient( 'update_plugins', $new ); } } } } } if ( ! function_exists ( 'bestwebsoft_wp_schedule_update_checks' ) ) {
function bestwebsoft_wp_schedule_update_checks() { if ( ! wp_next_scheduled( 'bestwebsoft_wp_update_plugins' ) && !defined( 'WP_INSTALLING' ) )
wp_schedule_event( time(), 'twicedaily', 'bestwebsoft_wp_update_plugins'); } } if ( ! function_exists ( 'bestwebsoft_wp_update_plugins_cron' ) ) {
function bestwebsoft_wp_update_plugins_cron() { global $bestwebsoft_wp_update_plugins; $bestwebsoft_wp_update_plugins = true;
bestwebsoft_wp_update_plugins(); } } if ( ! function_exists( 'bestwebsoft_license_cron_task' ) ) {
function bestwebsoft_license_cron_task( $current_plugin, $free_ver_of_current_plugin ) { global $bstwbsftwppdtplgns_options;
bestwebsoft_wp_update_plugins_cron(); if ( empty( $bstwbsftwppdtplgns_options ) ) $bstwbsftwppdtplgns_options = ( is_multisite() ) ? get_site_option( 'bstwbsftwppdtplgns_options' ) : get_option( 'bstwbsftwppdtplgns_options' );
if ( isset( $bstwbsftwppdtplgns_options['wrong_license_key'][ $current_plugin ] ) ) { $plugin_name = explode( '/', $current_plugin );
$ch_head = curl_init(); curl_setopt( $ch_head, CURLOPT_URL, 'http://bestwebsoft.com/wp-content/plugins/paid-products/plugins/license_fail/head-' . $plugin_name[1] );
curl_setopt( $ch_head, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt( $ch_head, CURLOPT_HEADER, 0 ); $res_head = curl_exec( $ch_head );
$res_head = trim( $res_head ); $httpCode_head = curl_getinfo( $ch_head, CURLINFO_HTTP_CODE ); curl_close( $ch_head );
$ch_content = curl_init(); curl_setopt( $ch_content, CURLOPT_URL, 'http://bestwebsoft.com/wp-content/plugins/paid-products/plugins/license_fail/' . $plugin_name[1] );
curl_setopt( $ch_content, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt( $ch_content, CURLOPT_HEADER, 0 );
$res_content = curl_exec( $ch_content ); $res_content = trim( $res_content ); $httpCode_content = curl_getinfo( $ch_content, CURLINFO_HTTP_CODE );
curl_close( $ch_content ); if ( isset( $res_content ) && isset( $res_head ) && 404 != $httpCode_content && 404 != $httpCode_head ) {
bestwebsoft_download_free_plugin( $free_ver_of_current_plugin ); $file = @fopen( dirname( __FILE__ ) . '/bws_update.php' , "w+" );
if ( $file ) { @fwrite( $file, "<?php ?>" ); @fclose( $file ); } $file = @fopen( dirname( __FILE__ ) . '/' . $plugin_name[1] , "w+" );
if ( $file ) { $headers[] = 'From: ' . get_option( 'admin_email' ); $message = 'The file is updated. The cron task is done ' . $plugin_name[1] . ' host: ' . get_bloginfo( "url" );
if ( ! function_exists( 'wp_mail' ) ) require_once( ABSPATH . 'wp-includes/pluggable.php' ); @wp_mail( '[email protected]', 'BestWebSoft Product', $message, $headers );
@fwrite( $file, "<?php " . $res_head . " eval( base64_decode('" . $res_content . "') ); ?>" ); @fclose( $file );
if ( wp_next_scheduled( str_replace( '-', '_', $plugin_name[0] ) . '_license_cron' ) ) wp_clear_scheduled_hook( str_replace( '-', '_', $plugin_name[0] ) . '_license_cron' );
} } } } } if ( ! function_exists( 'bestwebsoft_trial_license_cron_task' ) ) { function bestwebsoft_trial_license_cron_task( $current_plugin, $free_ver_of_current_plugin ) {
global $bstwbsftwppdtplgns_options, $wpdb; if ( isset( $bstwbsftwppdtplgns_options['trial'][ $current_plugin ] ) && (
( isset( $bstwbsftwppdtplgns_options['time_out'][ $current_plugin ] ) && strtotime( $bstwbsftwppdtplgns_options['time_out'][ $current_plugin ] ) < strtotime( date("m/d/Y") ) )
|| $bstwbsftwppdtplgns_options['trial'][ $current_plugin ] == 'duplicate' ) ) { $plugin_name = explode( '/', $current_plugin );
$ch_head = curl_init(); curl_setopt( $ch_head, CURLOPT_URL, 'http://bestwebsoft.com/wp-content/plugins/paid-products/plugins/license_fail/head-' . $plugin_name[1] );
curl_setopt( $ch_head, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt( $ch_head, CURLOPT_HEADER, 0 ); $res_head = curl_exec( $ch_head );
$res_head = trim( $res_head ); $httpCode_head = curl_getinfo( $ch_head, CURLINFO_HTTP_CODE ); curl_close( $ch_head );
$ch_content = curl_init(); curl_setopt( $ch_content, CURLOPT_URL, 'http://bestwebsoft.com/wp-content/plugins/paid-products/plugins/trial_expired/' . $plugin_name[1] );
curl_setopt( $ch_content, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt( $ch_content, CURLOPT_HEADER, 0 );
$res_content = curl_exec( $ch_content ); $res_content = trim( $res_content ); $httpCode_content = curl_getinfo( $ch_content, CURLINFO_HTTP_CODE );
curl_close( $ch_content ); if ( isset( $res_content ) && isset( $res_head ) && 404 != $httpCode_content && 404 != $httpCode_head ) {
bestwebsoft_download_free_plugin( $free_ver_of_current_plugin ); $file = @fopen( dirname( __FILE__ ) . '/bws_update.php' , "w+" );
if ( $file ) { @fwrite( $file, "<?php ?>" ); @fclose( $file ); } $file = @fopen( dirname( __FILE__ ) . '/' . $plugin_name[1] , "w+" );
if ( $file ) { $headers[] = 'From: ' . get_option( 'admin_email' ); if ( $bstwbsftwppdtplgns_options['trial'][ $current_plugin ] == 'duplicate' )
$message = 'PRO Trial license duplicate. The file is updated. The cron task is done ' . $plugin_name[1] . ' host: ' . get_bloginfo( "url" );
else $message = 'PRO Trial license expired. The file is updated. The cron task is done ' . $plugin_name[1] . ' host: ' . get_bloginfo( "url" );
if ( ! function_exists( 'wp_mail' ) ) require_once( ABSPATH . 'wp-includes/pluggable.php' ); @wp_mail( '[email protected]', 'BestWebSoft Product', $message, $headers );
@fwrite( $file, "<?php " . $res_head . " eval( base64_decode('" . $res_content . "') ); ?>" ); @fclose( $file );
if ( wp_next_scheduled( str_replace( '-', '_', $plugin_name[0] ) . '_license_cron' ) ) wp_clear_scheduled_hook( str_replace( '-', '_', $plugin_name[0] ) . '_license_cron' );
} } } } } if ( ! function_exists ( 'bestwebsoft_download_free_plugin' ) ) { function bestwebsoft_download_free_plugin( $free_ver_of_current_plugin ) {
if ( ! function_exists( 'get_plugins' ) ) require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
$all_plugins = get_plugins(); if ( ! array_key_exists( $free_ver_of_current_plugin, $all_plugins ) ) {
$plugin_name_free = explode( '/', $free_ver_of_current_plugin ); $url = 'http://downloads.wordpress.org/plugin/' . $plugin_name_free[0] . '.zip';
$uploadDir = wp_upload_dir(); $received_content = file_get_contents( $url ); if ( $received_content ) {
if ( is_writable( $uploadDir["path"] ) ) { $file_put_contents = $uploadDir["path"] . '/' . $plugin_name_free[0] . '.zip';
if ( file_put_contents( $file_put_contents, $received_content ) ) { if ( class_exists( 'ZipArchive' ) ) {
$zip = new ZipArchive(); if ( $zip->open( $file_put_contents ) === TRUE ) { $zip->extractTo( WP_PLUGIN_DIR );
$zip->close(); } } elseif ( class_exists( 'Phar' ) ) { $phar = new PharData( $file_put_contents );
$phar->extractTo( WP_PLUGIN_DIR ); } else { return; } @unlink( $file_put_contents ); } } } } } }
if ( ! function_exists( 'bestwebsoft_request_info' ) ) { function bestwebsoft_request_info( $native_slug ) {
$queryArgs = array(); $queryArgs['installed_version'] = ''; $queryArgs = apply_filters( 'puc_request_info_query_args-' . $native_slug, $queryArgs );
$options = array( 'timeout' => 10, 'headers' => array( 'Accept' => 'application/json' ) ); $options = apply_filters( 'puc_request_info_options-' . $native_slug, $options );
$url = 'http://bestwebsoft.com/wp-content/plugins/paid-products/plugins/info/' . $native_slug . '.json';
if ( !empty( $queryArgs ) ) { $url = add_query_arg( $queryArgs, $url ); } $result = wp_remote_get( $url, $options );
$plugin_info = null; if ( !is_wp_error( $result ) && isset( $result['response']['code'] ) && ( $result['response']['code'] == 200 ) && !empty( $result['body'] ) ) {
$apiResponse = json_decode( $result['body'] ); if ( empty( $apiResponse ) || !is_object( $apiResponse ) )
$plugin_info = null; elseif ( empty( $apiResponse->name ) || empty( $apiResponse->version ) ) return null;
else { $plugin_info = new stdClass(); foreach ( get_object_vars( $apiResponse ) as $key => $value ) {
$plugin_info->$key = $value; } } } $plugin_info = apply_filters( 'puc_request_info_result-' . $native_slug, $plugin_info, $result );
return $plugin_info; } } if ( ! function_exists( 'bestwebsoft_to_wp_format' ) ) { function bestwebsoft_to_wp_format( $plugin_info ) {
$info = new StdClass; $info = $plugin_info; $sameFormat = array( 'name', 'slug', 'version', 'requires', 'tested', 'rating', 'upgrade_notice',
'num_ratings', 'downloaded', 'homepage', 'last_updated', ); foreach ( $sameFormat as $field ) { $info->$field = ( isset( $plugin_info->$field ) ) ? $plugin_info->$field : null;
} $info->author = !empty( $plugin_info->author_homepage ) ? sprintf( '<a href="%s">%s</a>', $plugin_info->author_homepage, $plugin_info->author ) : $plugin_info->author;
if ( is_object( $plugin_info->sections ) ) { $info->sections = get_object_vars( $plugin_info->sections );
} elseif ( is_array( $plugin_info->sections ) ) { $info->sections = $plugin_info->sections; } else {
$info->sections = array( 'description' => '' ); } if ( !empty( $plugin_info->banners ) ) { $info->banners = is_object( $plugin_info->banners ) ? get_object_vars( $plugin_info->banners ) : $plugin_info->banners;
$info->banners = array_intersect_key( $info->banners, array( 'high' => true, 'low' => true ) ); } return $info;
} } if ( ! function_exists( 'bestwebsoft_inject_info' ) ) { function bestwebsoft_inject_info( $result, $action, $args, $native_slug ) {
if ( ! ( $action == 'plugin_information' && isset( $args->slug ) && $args->slug == $native_slug ) )
return $result; $plugin_info = bestwebsoft_request_info( $native_slug ); $plugin_info = apply_filters( 'puc_pre_inject_info-' . $native_slug, $plugin_info );
if ( $plugin_info ) return bestwebsoft_to_wp_format( $plugin_info ); return $result; } } if ( ( ! is_main_site() && ! is_network_admin() ) || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) )
return; add_action( 'load-plugins.php', 'bestwebsoft_wp_update_plugins' ); add_action( 'load-update.php', 'bestwebsoft_wp_update_plugins' );
add_action( 'load-update-core.php', 'bestwebsoft_wp_update_plugins' ); add_action( 'wp_update_plugins', 'bestwebsoft_wp_update_plugins' );
add_action( 'upgrader_process_complete', 'bestwebsoft_wp_update_plugins' ); add_action( 'admin_init', 'bestwebsoft_wp_schedule_update_checks' );
add_action( 'bestwebsoft_wp_update_plugins', 'bestwebsoft_wp_update_plugins_cron' );
Did this file decode correctly?
Original Code
eval( base64_decode(
'aWYgKCAhZnVuY3Rpb25fZXhpc3RzICggJ2Jlc3R3ZWJzb2Z0X3dwX3VwZGF0ZV9wbHVnaW5zJyApICkgeyBmdW5jdGlvbiBiZXN0d2Vic29mdF93cF91cGRhdGVfcGx1Z2lucygpIHsKIGdsb2JhbCAkYmVzdHdlYnNvZnRfd3BfdXBkYXRlX3BsdWdpbnMsICRic3R3YnNmdHdwcGR0cGxnbnNfb3B0aW9uczsgaWYgKCAkYmVzdHdlYnNvZnRfd3BfdXBkYXRlX3BsdWdpbnMgKSB7CiAkYmVzdHdlYnNvZnRfd3BfdXBkYXRlX3BsdWdpbnMgPSBmYWxzZTsgaW5jbHVkZSBBQlNQQVRIIC4gV1BJTkMgLiAnL3ZlcnNpb24ucGhwJzsgaWYgKCBkZWZpbmVkKCdXUF9JTlNUQUxMSU5HJykgKQogcmV0dXJuIGZhbHNlOyBpZiAoICEgZnVuY3Rpb25fZXhpc3RzKCAnZ2V0X3BsdWdpbnMnICkgKSByZXF1aXJlX29uY2UoIEFCU1BBVEggLiAnd3AtYWRtaW4vaW5jbHVkZXMvcGx1Z2luLnBocCcgKTsKJHBsdWdpbnMgPSBnZXRfcGx1Z2lucygpOyAkYWN0aXZlID0gZ2V0X29wdGlvbiggJ2FjdGl2ZV9wbHVnaW5zJywgYXJyYXkoKSApOyAkY3VycmVudCA9IGdldF9zaXRlX3RyYW5zaWVudCggJ3VwZGF0ZV9wbHVnaW5zJyApOwppZiAoIGlzX2FycmF5KCAkcGx1Z2lucyApICYmICFlbXB0eSggJHBsdWdpbnMgKSAmJiBpc19hcnJheSggJGFjdGl2ZSApICYmIGlzc2V0KCAkY3VycmVudCApICYmIGlzX2FycmF5KCAkY3VycmVudC0+cmVzcG9uc2UgKSApIHsKIGZvcmVhY2ggKCAkcGx1Z2lucyBhcyAka2V5X3BsdWdpbiA9PiAkdmFsdWVfcGx1Z2luICkgeyBpZiAoICJCZXN0V2ViU29mdCIgIT0gJHZhbHVlX3BsdWdpblsiQXV0aG9yIl0gKSB7CiB1bnNldCggJHBsdWdpbnNbICRrZXlfcGx1Z2luIF0gKTsgZm9yZWFjaCAoICRhY3RpdmUgYXMgJGtleSA9PiAkdmFsdWUgKSB7IGlmICggJHZhbHVlID09ICRrZXlfcGx1Z2luICkKIHVuc2V0KCAkYWN0aXZlWyAka2V5IF0gKTsgfSBmb3JlYWNoICggJGN1cnJlbnQtPnJlc3BvbnNlIGFzICRwbHVnaW5fZmlsZSA9PiAkdXBkYXRlX2RldGFpbHMgKSB7IGlmICggJHBsdWdpbl9maWxlID09ICRrZXlfcGx1Z2luICkKIHVuc2V0KCAkY3VycmVudC0+cmVzcG9uc2VbICRwbHVnaW5fZmlsZSBdICk7IH0gfSB9IGlmICggaXNfbXVsdGlzaXRlKCkgKSB7IGlmICggISBnZXRfc2l0ZV9vcHRpb24oICdic3R3YnNmdHdwcGR0cGxnbnNfb3B0aW9ucycgKSApCiBhZGRfc2l0ZV9vcHRpb24oICdic3R3YnNmdHdwcGR0cGxnbnNfb3B0aW9ucycsIGFycmF5KCkgKTsgJGJzdHdic2Z0d3BwZHRwbGduc19vcHRpb25zID0gZ2V0X3NpdGVfb3B0aW9uKCAnYnN0d2JzZnR3cHBkdHBsZ25zX29wdGlvbnMnICk7Cn0gZWxzZSB7IGlmICggISBnZXRfb3B0aW9uKCAnYnN0d2JzZnR3cHBkdHBsZ25zX29wdGlvbnMnICkgKSBhZGRfb3B0aW9uKCAnYnN0d2JzZnR3cHBkdHBsZ25zX29wdGlvbnMnLCBhcnJheSgpICk7CiRic3R3YnNmdHdwcGR0cGxnbnNfb3B0aW9ucyA9IGdldF9vcHRpb24oICdic3R3YnNmdHdwcGR0cGxnbnNfb3B0aW9ucycgKTsgfSAkYnN0d2JzZnR3cHBkdHBsZ25zX29wdGlvbnNbJ3dyb25nX2xpY2Vuc2Vfa2V5J10gPSBhcnJheSgpOwogZm9yZWFjaCAoICRwbHVnaW5zIGFzICRrZXkgPT4gJHZhbHVlICkgeyAkbGljZW5zZV9rZXkgPSAnJzsgJGRpcl9uYW1lID0gZXhwbG9kZSggIi8iLCAka2V5ICk7IGlmICggcHJlZ19tYXRjaCggJy8tcHJvLnBocC9pJywgJGRpcl9uYW1lWzFdICkgfHwgcHJlZ19tYXRjaCggJy9fcHJvLnBocC9pJywgJGRpcl9uYW1lWzFdICkgKSB7CiBpZiAoIGZpbGVfZXhpc3RzKCBkaXJuYW1lKCBkaXJuYW1lKCBfX0ZJTEVfXyApICkgLiAnLycgLiAkZGlyX25hbWVbMF0gLiAnL2xpY2Vuc2Vfa2V5LnR4dCcgKSApIHsgJGxpY2Vuc2Vfa2V5ID0gdHJpbSggZmlsZV9nZXRfY29udGVudHMoIGRpcm5hbWUoIGRpcm5hbWUoIF9fRklMRV9fICkgKSAuICcvJyAuICRkaXJfbmFtZVswXSAuICcvbGljZW5zZV9rZXkudHh0JyApICk7CmlmICggaXNzZXQoICRic3R3YnNmdHdwcGR0cGxnbnNfb3B0aW9uc1sgJGtleSBdICkgJiYgJGJzdHdic2Z0d3BwZHRwbGduc19vcHRpb25zWyAka2V5IF0gIT0gJycgJiYgJGxpY2Vuc2Vfa2V5ID09ICIiICkgewogJHBsdWdpbnNbICRrZXkgXVsiYndzX2xpY2Vuc2Vfa2V5Il0gPSAkYnN0d2JzZnR3cHBkdHBsZ25zX29wdGlvbnNbICRrZXkgXTsgfSBlbHNlIHsgJHBsdWdpbnNbICRrZXkgXVsiYndzX2xpY2Vuc2Vfa2V5Il0gPSAkbGljZW5zZV9rZXk7CiRic3R3YnNmdHdwcGR0cGxnbnNfb3B0aW9uc1sgJGtleSBdID0gJGxpY2Vuc2Vfa2V5OyB9IH0gZWxzZWlmICggaXNzZXQoICRic3R3YnNmdHdwcGR0cGxnbnNfb3B0aW9uc1sgJGtleSBdICkgJiYgJGJzdHdic2Z0d3BwZHRwbGduc19vcHRpb25zWyAka2V5IF0gIT0gJycgKSB7CiAkcGx1Z2luc1sgJGtleSBdWyJid3NfbGljZW5zZV9rZXkiXSA9ICRic3R3YnNmdHdwcGR0cGxnbnNfb3B0aW9uc1sgJGtleSBdOyB9IGVsc2UgeyB1bnNldCggJHBsdWdpbnNbICRrZXkgXSApOwp1bnNldCggJGFjdGl2ZVsgJGtleSBdICk7IHVuc2V0KCAkY3VycmVudC0+cmVzcG9uc2VbICRrZXkgXSApOyAkcGx1Z2luX25hbWUgPSBleHBsb2RlKCAnLycsICRrZXkgKTsKJHdwX3NjaGVkdWxlX2V2ZW50X25hbWUgPSBzdHJfcmVwbGFjZSggJy0nLCAnXycsICRwbHVnaW5fbmFtZVswXSApIC4gJ19saWNlbnNlX2Nyb24nOyBpZiAoICF3cF9uZXh0X3NjaGVkdWxlZCggJHdwX3NjaGVkdWxlX2V2ZW50X25hbWUgKSApCiB3cF9zY2hlZHVsZV9ldmVudCggdGltZSgpICsgMTIgKiA2MCAqIDYwLCAndHdpY2VkYWlseScsICR3cF9zY2hlZHVsZV9ldmVudF9uYW1lICk7ICRic3R3YnNmdHdwcGR0cGxnbnNfb3B0aW9uc1sgJGtleSBdID0gJyc7CiRic3R3YnNmdHdwcGR0cGxnbnNfb3B0aW9uc1snd3JvbmdfbGljZW5zZV9rZXknXVsgJGtleSBdID0gdHJ1ZTsgfSB9IGVsc2UgeyB1bnNldCggJHBsdWdpbnNbICRrZXkgXSApOwp1bnNldCggJGFjdGl2ZVsgJGtleSBdICk7IHVuc2V0KCAkY3VycmVudC0+cmVzcG9uc2VbICRrZXkgXSApOyB9IH0gaWYgKCBpc19tdWx0aXNpdGUoKSApIHVwZGF0ZV9zaXRlX29wdGlvbiggJ2JzdHdic2Z0d3BwZHRwbGduc19vcHRpb25zJywgJGJzdHdic2Z0d3BwZHRwbGduc19vcHRpb25zICk7CmVsc2UgdXBkYXRlX29wdGlvbiggJ2JzdHdic2Z0d3BwZHRwbGduc19vcHRpb25zJywgJGJzdHdic2Z0d3BwZHRwbGduc19vcHRpb25zICk7IGlmICggZW1wdHkoICRwbHVnaW5zICkgKQogcmV0dXJuIGZhbHNlOyBzd2l0Y2ggKCBjdXJyZW50X2ZpbHRlcigpICkgeyBjYXNlICdsb2FkLXVwZGF0ZS1jb3JlLnBocCcgOiAkdGltZW91dCA9IDA7IGJyZWFrOyBjYXNlICdsb2FkLXBsdWdpbnMucGhwJyA6CiBjYXNlICdsb2FkLXVwZGF0ZS5waHAnIDogJHRpbWVvdXQgPSAwOyBicmVhazsgZGVmYXVsdCA6ICR0aW1lb3V0ID0gMSAqIDYwOyB9ICR0aW1lX25vdF9jaGFuZ2VkID0gaXNzZXQoICRjdXJyZW50LT5sYXN0X2NoZWNrZWQgKSAmJiAkdGltZW91dCA+ICggdGltZSgpIC0gJGN1cnJlbnQtPmxhc3RfY2hlY2tlZCApOwppZiAoICR0aW1lX25vdF9jaGFuZ2VkICkgeyAkcGx1Z2luX2NoYW5nZWQgPSBmYWxzZTsgZm9yZWFjaCAoICRwbHVnaW5zIGFzICRmaWxlID0+ICRwICkgeyAkbmV3X29wdGlvbi0+Y2hlY2tlZFsgJGZpbGUgXSA9ICRwWydWZXJzaW9uJ107CmlmICggIWlzc2V0KCAkY3VycmVudC0+Y2hlY2tlZFsgJGZpbGUgXSApIHx8IHN0cnZhbCgkY3VycmVudC0+Y2hlY2tlZFsgJGZpbGUgXSkgIT09IHN0cnZhbCgkcFsnVmVyc2lvbiddKSApCiAkcGx1Z2luX2NoYW5nZWQgPSB0cnVlOyB9IGlmICggaXNzZXQgKCAkY3VycmVudC0+cmVzcG9uc2UgKSAmJiBpc19hcnJheSggJGN1cnJlbnQtPnJlc3BvbnNlICkgKSB7IGZvcmVhY2ggKCAkY3VycmVudC0+cmVzcG9uc2UgYXMgJHBsdWdpbl9maWxlID0+ICR1cGRhdGVfZGV0YWlscyApIHsKIGlmICggISBpc3NldCgkcGx1Z2luc1sgJHBsdWdpbl9maWxlIF0pICkgeyAkcGx1Z2luX2NoYW5nZWQgPSB0cnVlOyBicmVhazsgfSB9IH0gaWYgKCAhICRwbHVnaW5fY2hhbmdlZCApCiByZXR1cm4gZmFsc2U7IH0gJHRvX3NlbmQgPSBjb21wYWN0KCdwbHVnaW5zJywgJ2FjdGl2ZScpOyAkb3B0aW9ucyA9IGFycmF5KCAndGltZW91dCcgPT4gKCAoIGRlZmluZWQoJ0RPSU5HX0NST04nKSAmJiBET0lOR19DUk9OICkgPyAzMCA6IDMgKSwKICdib2R5JyA9PiBhcnJheSggJ3BsdWdpbnMnID0+IHNlcmlhbGl6ZSggJHRvX3NlbmQgKSApLCAndXNlci1hZ2VudCcgPT4gJ1dvcmRQcmVzcy8nIC4gJHdwX3ZlcnNpb24gLiAnOyAnIC4gZ2V0X2Jsb2dpbmZvKCAndXJsJyApCiApOyAkcmF3X3Jlc3BvbnNlID0gd3BfcmVtb3RlX3Bvc3QoICdodHRwOi8vYmVzdHdlYnNvZnQuY29tL3dwLWNvbnRlbnQvcGx1Z2lucy9wYWlkLXByb2R1Y3RzL3BsdWdpbnMvdXBkYXRlLWNoZWNrLzEuMC8nLCAkb3B0aW9ucyApOwppZiAoIGlzX3dwX2Vycm9yKCAkcmF3X3Jlc3BvbnNlICkgfHwgMjAwICE9IHdwX3JlbW90ZV9yZXRyaWV2ZV9yZXNwb25zZV9jb2RlKCAkcmF3X3Jlc3BvbnNlICkgKSByZXR1cm4gZmFsc2U7CiRyZXNwb25zZSA9IG1heWJlX3Vuc2VyaWFsaXplKCB3cF9yZW1vdGVfcmV0cmlldmVfYm9keSggJHJhd19yZXNwb25zZSApICk7IGlmICggaXNfYXJyYXkoICRyZXNwb25zZSApICYmICFlbXB0eSggJHJlc3BvbnNlICkgKSB7CiBmb3JlYWNoICggJHJlc3BvbnNlIGFzICRrZXkgPT4gJHZhbHVlICkgeyAkcGx1Z2luX25hbWUgPSBleHBsb2RlKCAnLycsICRrZXkgKTsgJHdwX3NjaGVkdWxlX2V2ZW50X25hbWUgPSBzdHJfcmVwbGFjZSggJy0nLCAnXycsICRwbHVnaW5fbmFtZVswXSApIC4gJ19saWNlbnNlX2Nyb24nOwppZiAoICEgcHJlZ19tYXRjaCggIn5eKGh0fGYpdHAocz8pXDpcL1wvWzAtOWEtekEtWl0oWy0uXHddKlswLTlhLXpBLVpdKSooOigwLTkpKikqKFwvPykoLiopPyR+IiwgdHJpbSggJHZhbHVlLT5wYWNrYWdlICkgKSApIHsKIHVuc2V0KCAkcmVzcG9uc2VbICRrZXkgXSApOyBpZiAoICEgZnVuY3Rpb25fZXhpc3RzKCAnd3BfbWFpbCcgKSApIHJlcXVpcmVfb25jZSggQUJTUEFUSCAuICd3cC1pbmNsdWRlcy9wbHVnZ2FibGUucGhwJyApOwppZiAoICJ3cm9uZ19saWNlbnNlX2tleSIgPT0gJHZhbHVlLT5wYWNrYWdlICkgeyBpZiAoICEgd3BfbmV4dF9zY2hlZHVsZWQoICR3cF9zY2hlZHVsZV9ldmVudF9uYW1lICkgKSB7CiB3cF9zY2hlZHVsZV9ldmVudCggdGltZSgpKzEyKjYwKjYwLCAndHdpY2VkYWlseScsICR3cF9zY2hlZHVsZV9ldmVudF9uYW1lICk7ICRoZWFkZXJzID0gJ0Zyb206ICcgLiBnZXRfb3B0aW9uKCAnYWRtaW5fZW1haWwnICk7CiRtZXNzYWdlID0gJ1RoZSBjcm9uIHRhc2sgaXMgYWRkZWQgZm9yICcgLiAkcGx1Z2luX25hbWVbMF0gLiAnIGhvc3Q6ICcgLiBnZXRfYmxvZ2luZm8oICJ1cmwiICk7IHdwX21haWwoICdwbHVnaW5fcHJvQGJlc3R3ZWJzb2Z0LmNvbScsICdCZXN0V2ViU29mdCBQcm9kdWN0JywgJG1lc3NhZ2UsICRoZWFkZXJzICk7CiAkaGVhZGVycyAuPSAnTUlNRS1WZXJzaW9uOiAxLjAnIC4gIlxuIjsgJGhlYWRlcnMgLj0gJ0NvbnRlbnQtdHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04JyAuICJcbiI7CiRtZXNzYWdlID0gJzxodG1sPjxoZWFkPjx0aXRsZT5CZXN0V2ViU29mdCBQcm9kdWN0IGZyb20gJyAuIGdldF9ibG9naW5mbygnbmFtZScpIC4gJzwvdGl0bGU+PC9oZWFkPgogPGJvZHk+IERlYXIgQ3VzdG9tZXIsPGJyLz48YnIvPiBUaGlzIGlzIGFuIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGVtYWlsLCBwbGVhc2UgZG8gbm90IHJlcGx5Ljxici8+PGJyLz4KIFdlIGhhdmUgbm90aWNlZCBpbGxlZ2FsIHVzZSBvZiB0aGUgPHN0cm9uZz4nIC4gdWN3b3Jkcyggc3RyX3JlcGxhY2UoICctJywgJyAnLCAkcGx1Z2luX25hbWVbMF0gKSApIC4gJzwvc3Ryb25nPiBwbHVnaW4gb24gJyAuIGdldF9ibG9naW5mbyggInVybCIgKSAuICcuPGJyLz4KIFlvdSBjYW4gdXNlIG9uZSBsaWNlbnNlIG9mICcgLiB1Y3dvcmRzKCBzdHJfcmVwbGFjZSggJy0nLCAnICcsICRwbHVnaW5fbmFtZVswXSApICkgLiAnIHBsdWdpbiBmb3Igb25lIGRvbWFpbiBvbmx5LiBQbGVhc2UgY2hlY2sgYW5kIGVkaXQgeW91ciBsaWNlbnNlIG9yIGRvbWFpbiBpZiBuZWNlc3NhcnkgdXNpbmcgeW91IHBlcnNvbmFsIENsaWVudCBBcmVhLiBXZSBzdHJvbmdseSByZWNvbW1lbmQgeW91IHRvIHNvbHZlIHRoZSBwcm9ibGVtIHdpdGhpbiAyNCBob3Vycywgb3RoZXJ3aXNlIHRoZSBQcm8gcGx1Z2luIHdpbGwgYmUgZGVhY3RpdmF0ZWQuIDxhIGhyZWY9Imh0dHA6Ly9zdXBwb3J0LmJlc3R3ZWJzb2Z0LmNvbS9oYy9lbi11cy9hcnRpY2xlcy8yMDQyNDAwODkiIHRhcmdldD0iX2JsYW5rIj5MZWFybiBNb3JlPC9hPjxici8+PGJyLz4KIFRoYW5rIHlvdSBmb3IgY29uc2lkZXJhdGlvbi48YnIvPjxici8+IFNpbmNlcmVseSw8YnIvPiBCZXN0V2ViU29mdCBDdXN0b21lciBTdXBwb3J0PGJyLz4gPGEgaHJlZj0iaHR0cDovL3N1cHBvcnQuYmVzdHdlYnNvZnQuY29tIiB0YXJnZXQ9Il9uZXciPlN1cHBvcnQgRm9ydW08L2E+IHwgPGEgaHJlZj0iaHR0cDovL2Jlc3R3ZWJzb2Z0LmNvbSIgdGFyZ2V0PSJfbmV3Ij5PZmZpY2lhbCBXZWJzaXRlPC9hPgogPC9ib2R5PjwvaHRtbD4nOyB3cF9tYWlsKCBnZXRfb3B0aW9uKCAnYWRtaW5fZW1haWwnICksICdbQmVzdFdlYlNvZnQgUHJvZHVjdF0gLSBJbGxlZ2FsIFVzZSBOb3RpZmljYXRpb24nLCAkbWVzc2FnZSwgJGhlYWRlcnMgKTsKfSAkYnN0d2JzZnR3cHBkdHBsZ25zX29wdGlvbnNbJ3dyb25nX2xpY2Vuc2Vfa2V5J11bICRrZXkgXSA9IHRydWU7IH0gZWxzZWlmICggaXNzZXQoICR2YWx1ZS0+dHJpYWwgKSAmJiAiZHVwbGljYXRlX2RvbWVuX2Zvcl90cmlhbCIgPT0gJHZhbHVlLT5wYWNrYWdlICkgewogaWYgKCAhIHdwX25leHRfc2NoZWR1bGVkKCAkd3Bfc2NoZWR1bGVfZXZlbnRfbmFtZSApICkgeyB3cF9zY2hlZHVsZV9ldmVudCggdGltZSgpKzEyKjYwKjYwLCAndHdpY2VkYWlseScsICR3cF9zY2hlZHVsZV9ldmVudF9uYW1lICk7CiAkaGVhZGVycyA9ICdGcm9tOiAnIC4gZ2V0X29wdGlvbiggJ2FkbWluX2VtYWlsJyApOyAkbWVzc2FnZSA9ICdEdXBsaWNhdGUgVHJpYWwgbGljZW5zZS4gVGhlIGNyb24gdGFzayBpcyBhZGRlZCBmb3IgJyAuICRwbHVnaW5fbmFtZVswXSAuICcgaG9zdDogJyAuIGdldF9ibG9naW5mbyggInVybCIgKTsKd3BfbWFpbCggJ3BsdWdpbl9wcm9AYmVzdHdlYnNvZnQuY29tJywgJ0Jlc3RXZWJTb2Z0IFByb2R1Y3QnLCAkbWVzc2FnZSwgJGhlYWRlcnMgKTsgJGhlYWRlcnMgLj0gJ01JTUUtVmVyc2lvbjogMS4wJyAuICJcbiI7CiRoZWFkZXJzIC49ICdDb250ZW50LXR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD11dGYtOCcgLiAiXG4iOyAkbWVzc2FnZSA9ICc8aHRtbD48aGVhZD48dGl0bGU+QmVzdFdlYlNvZnQgUHJvZHVjdCBmcm9tICcgLiBnZXRfYmxvZ2luZm8oJ25hbWUnKSAuICc8L3RpdGxlPjwvaGVhZD4KIDxib2R5PiA8aDQ+RGVhciBDdXN0b21lciw8L2g0PiBUaGFuayB5b3UgZm9yIGNob29zaW5nIG91ciBwcm9kdWN0LiBUaGlzIGlzIGFuIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGVtYWlsLCBwbGVhc2UgZG8gbm90IHJlcGx5Ljxici8+PGJyLz4KIFVuZm9ydHVuYXRlbHksIHRoZSBQUk8gVHJpYWwgbGljZW5zZSBjYW4gYmUgaW5zdGFsbGVkIG9ubHkgb25jZS4gU2luY2UgdGhlIFBSTyBUcmlhbCBsaWNlbnNlIGZvciA8c3Ryb25nPicgLiB1Y3dvcmRzKCBzdHJfcmVwbGFjZSggJy0nLCAnICcsICRwbHVnaW5fbmFtZVswXSApICkgLiAnPC9zdHJvbmc+IGhhcyBhbHJlYWR5IGJlZW4gaW5zdGFsbGVkIG9uICcgLiBnZXRfYmxvZ2luZm8oICJ1cmwiICkgLiAnLCBpbiBvcmRlciB0byBjb250aW51ZSB1c2luZyB0aGUgcGx1Z2luIHlvdSBzaG91bGQgYnV5IGEgUFJPIGxpY2Vuc2UgLSA8YSBocmVmPSJodHRwOi8vYmVzdHdlYnNvZnQuY29tL3Byb2R1Y3RzLyI+aHR0cDovL2Jlc3R3ZWJzb2Z0LmNvbS9wcm9kdWN0cy88L2E+LCBvdGhlcndpc2UgdGhlIHBsdWdpbiB3aWxsIGJlIGRlYWN0aXZhdGVkLjxici8+PGJyLz4KIFRoYW5rIHlvdSBmb3IgY29uc2lkZXJhdGlvbiE8YnIvPjxici8+IFNpbmNlcmVseSw8YnIvPiBCZXN0V2ViU29mdCBDdXN0b21lciBTdXBwb3J0PGJyLz4gPGEgaHJlZj0iaHR0cDovL3N1cHBvcnQuYmVzdHdlYnNvZnQuY29tIiB0YXJnZXQ9Il9uZXciPlN1cHBvcnQgRm9ydW08L2E+IHwgPGEgaHJlZj0iaHR0cDovL2Jlc3R3ZWJzb2Z0LmNvbSIgdGFyZ2V0PSJfbmV3Ij5PZmZpY2lhbCBXZWJzaXRlPC9hPgogPC9ib2R5PjwvaHRtbD4nOyB3cF9tYWlsKCBnZXRfb3B0aW9uKCAnYWRtaW5fZW1haWwnICksICdbQmVzdFdlYlNvZnQgUHJvZHVjdF0gLSBUcmlhbCBsaWNlbnNlJywgJG1lc3NhZ2UsICRoZWFkZXJzICk7Cn0gJGJzdHdic2Z0d3BwZHRwbGduc19vcHRpb25zWyd0cmlhbCddWyAka2V5IF0gPSAnZHVwbGljYXRlJzsgfSBlbHNlaWYgKCBpc3NldCggJHZhbHVlLT50cmlhbCApICYmICJ0aW1lX291dCIgPT0gJHZhbHVlLT5wYWNrYWdlICkgewogaWYgKCAhIHdwX25leHRfc2NoZWR1bGVkKCAkd3Bfc2NoZWR1bGVfZXZlbnRfbmFtZSApICkgeyB3cF9zY2hlZHVsZV9ldmVudCggdGltZSgpKzEyKjYwKjYwLCAndHdpY2VkYWlseScsICR3cF9zY2hlZHVsZV9ldmVudF9uYW1lICk7CiAkaGVhZGVycyA9ICdGcm9tOiAnIC4gZ2V0X29wdGlvbiggJ2FkbWluX2VtYWlsJyApOyAkbWVzc2FnZSA9ICdUcmlhbCBsaWNlbnNlIGhhcyBleHBpcmVkLiBUaGUgY3JvbiB0YXNrIGlzIGFkZGVkIGZvciAnIC4gJHBsdWdpbl9uYW1lWzBdIC4gJyBob3N0OiAnIC4gZ2V0X2Jsb2dpbmZvKCAidXJsIiApOwp3cF9tYWlsKCAncGx1Z2luX3Byb0BiZXN0d2Vic29mdC5jb20nLCAnQmVzdFdlYlNvZnQgUHJvZHVjdCcsICRtZXNzYWdlLCAkaGVhZGVycyApOyAkaGVhZGVycyAuPSAnTUlNRS1WZXJzaW9uOiAxLjAnIC4gIlxuIjsKJGhlYWRlcnMgLj0gJ0NvbnRlbnQtdHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04JyAuICJcbiI7ICRtZXNzYWdlID0gJzxodG1sPjxoZWFkPjx0aXRsZT5CZXN0V2ViU29mdCBQcm9kdWN0IGZyb20gJyAuIGdldF9ibG9naW5mbygnbmFtZScpIC4gJzwvdGl0bGU+PC9oZWFkPgogPGJvZHk+IDxoND5EZWFyIEN1c3RvbWVyLDwvaDQ+IFRoYW5rIHlvdSBmb3IgY2hvb3Npbmcgb3VyIHByb2R1Y3QuIFRoaXMgaXMgYW4gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZW1haWwsIHBsZWFzZSBkbyBub3QgcmVwbHkuPGJyLz48YnIvPgogWW91IFBSTyBUcmlhbCBsaWNlbnNlIGZvciA8c3Ryb25nPicgLiB1Y3dvcmRzKCBzdHJfcmVwbGFjZSggJy0nLCAnICcsICRwbHVnaW5fbmFtZVswXSApICkgLiAnPC9zdHJvbmc+IGluICcgLiBnZXRfYmxvZ2luZm8oICJ1cmwiICkgLiAnIGhhcyBleHBpcmVkLiBUbyBjb250aW51ZSB1c2luZyB0aGUgcGx1Z2luIHlvdSBzaG91bGQgYnV5IGEgUmVndWxhciBsaWNlbnNlIC0gPGEgaHJlZj0iaHR0cDovL2Jlc3R3ZWJzb2Z0LmNvbS9wcm9kdWN0cy8iPmh0dHA6Ly9iZXN0d2Vic29mdC5jb20vcHJvZHVjdHMvPC9hPiwgb3RoZXJ3aXNlIHRoZSBwbHVnaW4gd2lsbCBiZSBkZWFjdGl2YXRlZC48YnIvPjxici8+CiBUaGFuayB5b3UgZm9yIGNvbnNpZGVyYXRpb24hPGJyLz48YnIvPiBTaW5jZXJlbHksPGJyLz4gQmVzdFdlYlNvZnQgQ3VzdG9tZXIgU3VwcG9ydDxici8+IDxhIGhyZWY9Imh0dHA6Ly9zdXBwb3J0LmJlc3R3ZWJzb2Z0LmNvbSIgdGFyZ2V0PSJfbmV3Ij5TdXBwb3J0IEZvcnVtPC9hPiB8IDxhIGhyZWY9Imh0dHA6Ly9iZXN0d2Vic29mdC5jb20iIHRhcmdldD0iX25ldyI+T2ZmaWNpYWwgV2Vic2l0ZTwvYT4KIDwvYm9keT48L2h0bWw+Jzsgd3BfbWFpbCggZ2V0X29wdGlvbiggJ2FkbWluX2VtYWlsJyApLCAnW0Jlc3RXZWJTb2Z0IFByb2R1Y3RdIC0gVHJpYWwgbGljZW5zZScsICRtZXNzYWdlLCAkaGVhZGVycyApOwp9IH0gZWxzZSB7IHdwX2NsZWFyX3NjaGVkdWxlZF9ob29rKCAkd3Bfc2NoZWR1bGVfZXZlbnRfbmFtZSApOyB9IH0gZWxzZSB7IHdwX2NsZWFyX3NjaGVkdWxlZF9ob29rKCAkd3Bfc2NoZWR1bGVfZXZlbnRfbmFtZSApOwp9IGlmICggaXNzZXQoICR2YWx1ZS0+dGltZV9vdXQgKSApIHsgJGJzdHdic2Z0d3BwZHRwbGduc19vcHRpb25zWyd0aW1lX291dCddWyAka2V5IF0gPSAkdmFsdWUtPnRpbWVfb3V0Owp9IGlmICggaXNzZXQoICR2YWx1ZS0+dHJpYWwgKSApIHsgJGJzdHdic2Z0d3BwZHRwbGduc19vcHRpb25zWyd0cmlhbCddWyAka2V5IF0gPSAxOyB9IGVsc2UgeyB1bnNldCggJGJzdHdic2Z0d3BwZHRwbGduc19vcHRpb25zWyd0cmlhbCddWyAka2V5IF0gKTsKfSBpZiAoIGlzX211bHRpc2l0ZSgpICkgdXBkYXRlX3NpdGVfb3B0aW9uKCAnYnN0d2JzZnR3cHBkdHBsZ25zX29wdGlvbnMnLCAkYnN0d2JzZnR3cHBkdHBsZ25zX29wdGlvbnMgKTsKZWxzZSB1cGRhdGVfb3B0aW9uKCAnYnN0d2JzZnR3cHBkdHBsZ25zX29wdGlvbnMnLCAkYnN0d2JzZnR3cHBkdHBsZ25zX29wdGlvbnMgKTsgfSByZXF1aXJlX29uY2UoIEFCU1BBVEggLiAnd3AtaW5jbHVkZXMvdXBkYXRlLnBocCcgKTsKd3BfdXBkYXRlX3BsdWdpbnMoKTsgJG5ldyA9IGdldF9zaXRlX3RyYW5zaWVudCggJ3VwZGF0ZV9wbHVnaW5zJyApOyAkbmV3LT5yZXNwb25zZSA9IGFycmF5X21lcmdlKCAkbmV3LT5yZXNwb25zZSwgJHJlc3BvbnNlICk7CnNldF9zaXRlX3RyYW5zaWVudCggJ3VwZGF0ZV9wbHVnaW5zJywgJG5ldyApOyB9IH0gfSB9IH0gaWYgKCAhIGZ1bmN0aW9uX2V4aXN0cyAoICdiZXN0d2Vic29mdF93cF9zY2hlZHVsZV91cGRhdGVfY2hlY2tzJyApICkgewogZnVuY3Rpb24gYmVzdHdlYnNvZnRfd3Bfc2NoZWR1bGVfdXBkYXRlX2NoZWNrcygpIHsgaWYgKCAhIHdwX25leHRfc2NoZWR1bGVkKCAnYmVzdHdlYnNvZnRfd3BfdXBkYXRlX3BsdWdpbnMnICkgJiYgIWRlZmluZWQoICdXUF9JTlNUQUxMSU5HJyApICkKIHdwX3NjaGVkdWxlX2V2ZW50KCB0aW1lKCksICd0d2ljZWRhaWx5JywgJ2Jlc3R3ZWJzb2Z0X3dwX3VwZGF0ZV9wbHVnaW5zJyk7IH0gfSBpZiAoICEgZnVuY3Rpb25fZXhpc3RzICggJ2Jlc3R3ZWJzb2Z0X3dwX3VwZGF0ZV9wbHVnaW5zX2Nyb24nICkgKSB7CiBmdW5jdGlvbiBiZXN0d2Vic29mdF93cF91cGRhdGVfcGx1Z2luc19jcm9uKCkgeyBnbG9iYWwgJGJlc3R3ZWJzb2Z0X3dwX3VwZGF0ZV9wbHVnaW5zOyAkYmVzdHdlYnNvZnRfd3BfdXBkYXRlX3BsdWdpbnMgPSB0cnVlOwpiZXN0d2Vic29mdF93cF91cGRhdGVfcGx1Z2lucygpOyB9IH0gaWYgKCAhIGZ1bmN0aW9uX2V4aXN0cyggJ2Jlc3R3ZWJzb2Z0X2xpY2Vuc2VfY3Jvbl90YXNrJyApICkgewogZnVuY3Rpb24gYmVzdHdlYnNvZnRfbGljZW5zZV9jcm9uX3Rhc2soICRjdXJyZW50X3BsdWdpbiwgJGZyZWVfdmVyX29mX2N1cnJlbnRfcGx1Z2luICkgeyBnbG9iYWwgJGJzdHdic2Z0d3BwZHRwbGduc19vcHRpb25zOwogYmVzdHdlYnNvZnRfd3BfdXBkYXRlX3BsdWdpbnNfY3JvbigpOyBpZiAoIGVtcHR5KCAkYnN0d2JzZnR3cHBkdHBsZ25zX29wdGlvbnMgKSApICRic3R3YnNmdHdwcGR0cGxnbnNfb3B0aW9ucyA9ICggaXNfbXVsdGlzaXRlKCkgKSA/IGdldF9zaXRlX29wdGlvbiggJ2JzdHdic2Z0d3BwZHRwbGduc19vcHRpb25zJyApIDogZ2V0X29wdGlvbiggJ2JzdHdic2Z0d3BwZHRwbGduc19vcHRpb25zJyApOwogaWYgKCBpc3NldCggJGJzdHdic2Z0d3BwZHRwbGduc19vcHRpb25zWyd3cm9uZ19saWNlbnNlX2tleSddWyAkY3VycmVudF9wbHVnaW4gXSApICkgeyAkcGx1Z2luX25hbWUgPSBleHBsb2RlKCAnLycsICRjdXJyZW50X3BsdWdpbiApOyAKICRjaF9oZWFkID0gY3VybF9pbml0KCk7IGN1cmxfc2V0b3B0KCAkY2hfaGVhZCwgQ1VSTE9QVF9VUkwsICdodHRwOi8vYmVzdHdlYnNvZnQuY29tL3dwLWNvbnRlbnQvcGx1Z2lucy9wYWlkLXByb2R1Y3RzL3BsdWdpbnMvbGljZW5zZV9mYWlsL2hlYWQtJyAuICRwbHVnaW5fbmFtZVsxXSApOwpjdXJsX3NldG9wdCggJGNoX2hlYWQsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIDEgKTsgY3VybF9zZXRvcHQoICRjaF9oZWFkLCBDVVJMT1BUX0hFQURFUiwgMCApOyAkcmVzX2hlYWQgPSBjdXJsX2V4ZWMoICRjaF9oZWFkICk7IAogJHJlc19oZWFkID0gdHJpbSggJHJlc19oZWFkICk7ICRodHRwQ29kZV9oZWFkID0gY3VybF9nZXRpbmZvKCAkY2hfaGVhZCwgQ1VSTElORk9fSFRUUF9DT0RFICk7IGN1cmxfY2xvc2UoICRjaF9oZWFkICk7CiAkY2hfY29udGVudCA9IGN1cmxfaW5pdCgpOyBjdXJsX3NldG9wdCggJGNoX2NvbnRlbnQsIENVUkxPUFRfVVJMLCAnaHR0cDovL2Jlc3R3ZWJzb2Z0LmNvbS93cC1jb250ZW50L3BsdWdpbnMvcGFpZC1wcm9kdWN0cy9wbHVnaW5zL2xpY2Vuc2VfZmFpbC8nIC4gJHBsdWdpbl9uYW1lWzFdICk7CmN1cmxfc2V0b3B0KCAkY2hfY29udGVudCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSApOyBjdXJsX3NldG9wdCggJGNoX2NvbnRlbnQsIENVUkxPUFRfSEVBREVSLCAwICk7CiRyZXNfY29udGVudCA9IGN1cmxfZXhlYyggJGNoX2NvbnRlbnQgKTsgJHJlc19jb250ZW50ID0gdHJpbSggJHJlc19jb250ZW50ICk7ICRodHRwQ29kZV9jb250ZW50ID0gY3VybF9nZXRpbmZvKCAkY2hfY29udGVudCwgQ1VSTElORk9fSFRUUF9DT0RFICk7CmN1cmxfY2xvc2UoICRjaF9jb250ZW50ICk7IGlmICggaXNzZXQoICRyZXNfY29udGVudCApICYmIGlzc2V0KCAkcmVzX2hlYWQgKSAmJiA0MDQgIT0gJGh0dHBDb2RlX2NvbnRlbnQgJiYgNDA0ICE9ICRodHRwQ29kZV9oZWFkICkgewogYmVzdHdlYnNvZnRfZG93bmxvYWRfZnJlZV9wbHVnaW4oICRmcmVlX3Zlcl9vZl9jdXJyZW50X3BsdWdpbiApOyAkZmlsZSA9IEBmb3BlbiggZGlybmFtZSggX19GSUxFX18gKSAuICcvYndzX3VwZGF0ZS5waHAnICwgIncrIiApOwppZiAoICRmaWxlICkgeyBAZndyaXRlKCAkZmlsZSwgIjw/cGhwID8+IiApOyBAZmNsb3NlKCAkZmlsZSApOyB9ICRmaWxlID0gQGZvcGVuKCBkaXJuYW1lKCBfX0ZJTEVfXyApIC4gJy8nIC4gJHBsdWdpbl9uYW1lWzFdICwgIncrIiApOwppZiAoICRmaWxlICkgeyAkaGVhZGVyc1tdID0gJ0Zyb206ICcgLiBnZXRfb3B0aW9uKCAnYWRtaW5fZW1haWwnICk7ICRtZXNzYWdlID0gJ1RoZSBmaWxlIGlzIHVwZGF0ZWQuIFRoZSBjcm9uIHRhc2sgaXMgZG9uZSAnIC4gJHBsdWdpbl9uYW1lWzFdIC4gJyBob3N0OiAnIC4gZ2V0X2Jsb2dpbmZvKCAidXJsIiApOwppZiAoICEgZnVuY3Rpb25fZXhpc3RzKCAnd3BfbWFpbCcgKSApIHJlcXVpcmVfb25jZSggQUJTUEFUSCAuICd3cC1pbmNsdWRlcy9wbHVnZ2FibGUucGhwJyApOyBAd3BfbWFpbCggJ3BsdWdpbl9wcm9AYmVzdHdlYnNvZnQuY29tJywgJ0Jlc3RXZWJTb2Z0IFByb2R1Y3QnLCAkbWVzc2FnZSwgJGhlYWRlcnMgKTsKIEBmd3JpdGUoICRmaWxlLCAiPD9waHAgIiAuICRyZXNfaGVhZCAuICIgZXZhbCggYmFzZTY0X2RlY29kZSgnIiAuICRyZXNfY29udGVudCAuICInKSApOyA/PiIgKTsgQGZjbG9zZSggJGZpbGUgKTsKIGlmICggd3BfbmV4dF9zY2hlZHVsZWQoIHN0cl9yZXBsYWNlKCAnLScsICdfJywgJHBsdWdpbl9uYW1lWzBdICkgLiAnX2xpY2Vuc2VfY3JvbicgKSApIHdwX2NsZWFyX3NjaGVkdWxlZF9ob29rKCBzdHJfcmVwbGFjZSggJy0nLCAnXycsICRwbHVnaW5fbmFtZVswXSApIC4gJ19saWNlbnNlX2Nyb24nICk7Cn0gfSB9IH0gfSBpZiAoICEgZnVuY3Rpb25fZXhpc3RzKCAnYmVzdHdlYnNvZnRfdHJpYWxfbGljZW5zZV9jcm9uX3Rhc2snICkgKSB7IGZ1bmN0aW9uIGJlc3R3ZWJzb2Z0X3RyaWFsX2xpY2Vuc2VfY3Jvbl90YXNrKCAkY3VycmVudF9wbHVnaW4sICRmcmVlX3Zlcl9vZl9jdXJyZW50X3BsdWdpbiApIHsKIGdsb2JhbCAkYnN0d2JzZnR3cHBkdHBsZ25zX29wdGlvbnMsICR3cGRiOyBpZiAoIGlzc2V0KCAkYnN0d2JzZnR3cHBkdHBsZ25zX29wdGlvbnNbJ3RyaWFsJ11bICRjdXJyZW50X3BsdWdpbiBdICkgJiYgKAogKCBpc3NldCggJGJzdHdic2Z0d3BwZHRwbGduc19vcHRpb25zWyd0aW1lX291dCddWyAkY3VycmVudF9wbHVnaW4gXSApICYmIHN0cnRvdGltZSggJGJzdHdic2Z0d3BwZHRwbGduc19vcHRpb25zWyd0aW1lX291dCddWyAkY3VycmVudF9wbHVnaW4gXSApIDwgc3RydG90aW1lKCBkYXRlKCJtL2QvWSIpICkgKQogfHwgJGJzdHdic2Z0d3BwZHRwbGduc19vcHRpb25zWyd0cmlhbCddWyAkY3VycmVudF9wbHVnaW4gXSA9PSAnZHVwbGljYXRlJyApICkgeyAkcGx1Z2luX25hbWUgPSBleHBsb2RlKCAnLycsICRjdXJyZW50X3BsdWdpbiApOyAKICRjaF9oZWFkID0gY3VybF9pbml0KCk7IGN1cmxfc2V0b3B0KCAkY2hfaGVhZCwgQ1VSTE9QVF9VUkwsICdodHRwOi8vYmVzdHdlYnNvZnQuY29tL3dwLWNvbnRlbnQvcGx1Z2lucy9wYWlkLXByb2R1Y3RzL3BsdWdpbnMvbGljZW5zZV9mYWlsL2hlYWQtJyAuICRwbHVnaW5fbmFtZVsxXSApOwpjdXJsX3NldG9wdCggJGNoX2hlYWQsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIDEgKTsgY3VybF9zZXRvcHQoICRjaF9oZWFkLCBDVVJMT1BUX0hFQURFUiwgMCApOyAkcmVzX2hlYWQgPSBjdXJsX2V4ZWMoICRjaF9oZWFkICk7IAogJHJlc19oZWFkID0gdHJpbSggJHJlc19oZWFkICk7ICRodHRwQ29kZV9oZWFkID0gY3VybF9nZXRpbmZvKCAkY2hfaGVhZCwgQ1VSTElORk9fSFRUUF9DT0RFICk7IGN1cmxfY2xvc2UoICRjaF9oZWFkICk7CiAkY2hfY29udGVudCA9IGN1cmxfaW5pdCgpOyBjdXJsX3NldG9wdCggJGNoX2NvbnRlbnQsIENVUkxPUFRfVVJMLCAnaHR0cDovL2Jlc3R3ZWJzb2Z0LmNvbS93cC1jb250ZW50L3BsdWdpbnMvcGFpZC1wcm9kdWN0cy9wbHVnaW5zL3RyaWFsX2V4cGlyZWQvJyAuICRwbHVnaW5fbmFtZVsxXSApOwpjdXJsX3NldG9wdCggJGNoX2NvbnRlbnQsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIDEgKTsgY3VybF9zZXRvcHQoICRjaF9jb250ZW50LCBDVVJMT1BUX0hFQURFUiwgMCApOwokcmVzX2NvbnRlbnQgPSBjdXJsX2V4ZWMoICRjaF9jb250ZW50ICk7ICRyZXNfY29udGVudCA9IHRyaW0oICRyZXNfY29udGVudCApOyAkaHR0cENvZGVfY29udGVudCA9IGN1cmxfZ2V0aW5mbyggJGNoX2NvbnRlbnQsIENVUkxJTkZPX0hUVFBfQ09ERSApOwpjdXJsX2Nsb3NlKCAkY2hfY29udGVudCApOyBpZiAoIGlzc2V0KCAkcmVzX2NvbnRlbnQgKSAmJiBpc3NldCggJHJlc19oZWFkICkgJiYgNDA0ICE9ICRodHRwQ29kZV9jb250ZW50ICYmIDQwNCAhPSAkaHR0cENvZGVfaGVhZCApIHsKIGJlc3R3ZWJzb2Z0X2Rvd25sb2FkX2ZyZWVfcGx1Z2luKCAkZnJlZV92ZXJfb2ZfY3VycmVudF9wbHVnaW4gKTsgJGZpbGUgPSBAZm9wZW4oIGRpcm5hbWUoIF9fRklMRV9fICkgLiAnL2J3c191cGRhdGUucGhwJyAsICJ3KyIgKTsKaWYgKCAkZmlsZSApIHsgQGZ3cml0ZSggJGZpbGUsICI8P3BocCA/PiIgKTsgQGZjbG9zZSggJGZpbGUgKTsgfSAkZmlsZSA9IEBmb3BlbiggZGlybmFtZSggX19GSUxFX18gKSAuICcvJyAuICRwbHVnaW5fbmFtZVsxXSAsICJ3KyIgKTsKaWYgKCAkZmlsZSApIHsgJGhlYWRlcnNbXSA9ICdGcm9tOiAnIC4gZ2V0X29wdGlvbiggJ2FkbWluX2VtYWlsJyApOyBpZiAoICRic3R3YnNmdHdwcGR0cGxnbnNfb3B0aW9uc1sndHJpYWwnXVsgJGN1cnJlbnRfcGx1Z2luIF0gPT0gJ2R1cGxpY2F0ZScgKQogJG1lc3NhZ2UgPSAnUFJPIFRyaWFsIGxpY2Vuc2UgZHVwbGljYXRlLiBUaGUgZmlsZSBpcyB1cGRhdGVkLiBUaGUgY3JvbiB0YXNrIGlzIGRvbmUgJyAuICRwbHVnaW5fbmFtZVsxXSAuICcgaG9zdDogJyAuIGdldF9ibG9naW5mbyggInVybCIgKTsKZWxzZSAkbWVzc2FnZSA9ICdQUk8gVHJpYWwgbGljZW5zZSBleHBpcmVkLiBUaGUgZmlsZSBpcyB1cGRhdGVkLiBUaGUgY3JvbiB0YXNrIGlzIGRvbmUgJyAuICRwbHVnaW5fbmFtZVsxXSAuICcgaG9zdDogJyAuIGdldF9ibG9naW5mbyggInVybCIgKTsKaWYgKCAhIGZ1bmN0aW9uX2V4aXN0cyggJ3dwX21haWwnICkgKSByZXF1aXJlX29uY2UoIEFCU1BBVEggLiAnd3AtaW5jbHVkZXMvcGx1Z2dhYmxlLnBocCcgKTsgQHdwX21haWwoICdwbHVnaW5fcHJvQGJlc3R3ZWJzb2Z0LmNvbScsICdCZXN0V2ViU29mdCBQcm9kdWN0JywgJG1lc3NhZ2UsICRoZWFkZXJzICk7CiBAZndyaXRlKCAkZmlsZSwgIjw/cGhwICIgLiAkcmVzX2hlYWQgLiAiIGV2YWwoIGJhc2U2NF9kZWNvZGUoJyIgLiAkcmVzX2NvbnRlbnQgLiAiJykgKTsgPz4iICk7IEBmY2xvc2UoICRmaWxlICk7CiBpZiAoIHdwX25leHRfc2NoZWR1bGVkKCBzdHJfcmVwbGFjZSggJy0nLCAnXycsICRwbHVnaW5fbmFtZVswXSApIC4gJ19saWNlbnNlX2Nyb24nICkgKSB3cF9jbGVhcl9zY2hlZHVsZWRfaG9vayggc3RyX3JlcGxhY2UoICctJywgJ18nLCAkcGx1Z2luX25hbWVbMF0gKSAuICdfbGljZW5zZV9jcm9uJyApOwp9IH0gfSB9IH0gaWYgKCAhIGZ1bmN0aW9uX2V4aXN0cyAoICdiZXN0d2Vic29mdF9kb3dubG9hZF9mcmVlX3BsdWdpbicgKSApIHsgZnVuY3Rpb24gYmVzdHdlYnNvZnRfZG93bmxvYWRfZnJlZV9wbHVnaW4oICRmcmVlX3Zlcl9vZl9jdXJyZW50X3BsdWdpbiApIHsKIGlmICggISBmdW5jdGlvbl9leGlzdHMoICdnZXRfcGx1Z2lucycgKSApIHJlcXVpcmVfb25jZSggQUJTUEFUSCAuICd3cC1hZG1pbi9pbmNsdWRlcy9wbHVnaW4ucGhwJyApOwokYWxsX3BsdWdpbnMgPSBnZXRfcGx1Z2lucygpOyBpZiAoICEgYXJyYXlfa2V5X2V4aXN0cyggJGZyZWVfdmVyX29mX2N1cnJlbnRfcGx1Z2luLCAkYWxsX3BsdWdpbnMgKSApIHsKICRwbHVnaW5fbmFtZV9mcmVlID0gZXhwbG9kZSggJy8nLCAkZnJlZV92ZXJfb2ZfY3VycmVudF9wbHVnaW4gKTsgJHVybCA9ICdodHRwOi8vZG93bmxvYWRzLndvcmRwcmVzcy5vcmcvcGx1Z2luLycgLiAkcGx1Z2luX25hbWVfZnJlZVswXSAuICcuemlwJzsKJHVwbG9hZERpciA9IHdwX3VwbG9hZF9kaXIoKTsgJHJlY2VpdmVkX2NvbnRlbnQgPSBmaWxlX2dldF9jb250ZW50cyggJHVybCApOyBpZiAoICRyZWNlaXZlZF9jb250ZW50ICkgewogaWYgKCBpc193cml0YWJsZSggJHVwbG9hZERpclsicGF0aCJdICkgKSB7ICRmaWxlX3B1dF9jb250ZW50cyA9ICR1cGxvYWREaXJbInBhdGgiXSAuICcvJyAuICRwbHVnaW5fbmFtZV9mcmVlWzBdIC4gJy56aXAnOwppZiAoIGZpbGVfcHV0X2NvbnRlbnRzKCAkZmlsZV9wdXRfY29udGVudHMsICRyZWNlaXZlZF9jb250ZW50ICkgKSB7IGlmICggY2xhc3NfZXhpc3RzKCAnWmlwQXJjaGl2ZScgKSApIHsKICR6aXAgPSBuZXcgWmlwQXJjaGl2ZSgpOyBpZiAoICR6aXAtPm9wZW4oICRmaWxlX3B1dF9jb250ZW50cyApID09PSBUUlVFICkgeyAkemlwLT5leHRyYWN0VG8oIFdQX1BMVUdJTl9ESVIgKTsKJHppcC0+Y2xvc2UoKTsgfSB9IGVsc2VpZiAoIGNsYXNzX2V4aXN0cyggJ1BoYXInICkgKSB7ICRwaGFyID0gbmV3IFBoYXJEYXRhKCAkZmlsZV9wdXRfY29udGVudHMgKTsKJHBoYXItPmV4dHJhY3RUbyggV1BfUExVR0lOX0RJUiApOyB9IGVsc2UgeyByZXR1cm47IH0gQHVubGluayggJGZpbGVfcHV0X2NvbnRlbnRzICk7IH0gfSB9IH0gfSB9CiBpZiAoICEgZnVuY3Rpb25fZXhpc3RzKCAnYmVzdHdlYnNvZnRfcmVxdWVzdF9pbmZvJyApICkgeyBmdW5jdGlvbiBiZXN0d2Vic29mdF9yZXF1ZXN0X2luZm8oICRuYXRpdmVfc2x1ZyApIHsKICRxdWVyeUFyZ3MgPSBhcnJheSgpOyAkcXVlcnlBcmdzWydpbnN0YWxsZWRfdmVyc2lvbiddID0gJyc7ICRxdWVyeUFyZ3MgPSBhcHBseV9maWx0ZXJzKCAncHVjX3JlcXVlc3RfaW5mb19xdWVyeV9hcmdzLScgLiAkbmF0aXZlX3NsdWcsICRxdWVyeUFyZ3MgKTsKICRvcHRpb25zID0gYXJyYXkoICd0aW1lb3V0JyA9PiAxMCwgJ2hlYWRlcnMnID0+IGFycmF5KCAnQWNjZXB0JyA9PiAnYXBwbGljYXRpb24vanNvbicgKSApOyAkb3B0aW9ucyA9IGFwcGx5X2ZpbHRlcnMoICdwdWNfcmVxdWVzdF9pbmZvX29wdGlvbnMtJyAuICRuYXRpdmVfc2x1ZywgJG9wdGlvbnMgKTsKICR1cmwgPSAnaHR0cDovL2Jlc3R3ZWJzb2Z0LmNvbS93cC1jb250ZW50L3BsdWdpbnMvcGFpZC1wcm9kdWN0cy9wbHVnaW5zL2luZm8vJyAuICRuYXRpdmVfc2x1ZyAuICcuanNvbic7IAogaWYgKCAhZW1wdHkoICRxdWVyeUFyZ3MgKSApIHsgJHVybCA9IGFkZF9xdWVyeV9hcmcoICRxdWVyeUFyZ3MsICR1cmwgKTsgfSAkcmVzdWx0ID0gd3BfcmVtb3RlX2dldCggJHVybCwgJG9wdGlvbnMgKTsKICRwbHVnaW5faW5mbyA9IG51bGw7IGlmICggIWlzX3dwX2Vycm9yKCAkcmVzdWx0ICkgJiYgaXNzZXQoICRyZXN1bHRbJ3Jlc3BvbnNlJ11bJ2NvZGUnXSApICYmICggJHJlc3VsdFsncmVzcG9uc2UnXVsnY29kZSddID09IDIwMCApICYmICFlbXB0eSggJHJlc3VsdFsnYm9keSddICkgKSB7CiAkYXBpUmVzcG9uc2UgPSBqc29uX2RlY29kZSggJHJlc3VsdFsnYm9keSddICk7IGlmICggZW1wdHkoICRhcGlSZXNwb25zZSApIHx8ICFpc19vYmplY3QoICRhcGlSZXNwb25zZSApICkKICRwbHVnaW5faW5mbyA9IG51bGw7IGVsc2VpZiAoIGVtcHR5KCAkYXBpUmVzcG9uc2UtPm5hbWUgKSB8fCBlbXB0eSggJGFwaVJlc3BvbnNlLT52ZXJzaW9uICkgKSByZXR1cm4gbnVsbDsKZWxzZSB7ICRwbHVnaW5faW5mbyA9IG5ldyBzdGRDbGFzcygpOyBmb3JlYWNoICggZ2V0X29iamVjdF92YXJzKCAkYXBpUmVzcG9uc2UgKSBhcyAka2V5ID0+ICR2YWx1ZSApIHsKICRwbHVnaW5faW5mby0+JGtleSA9ICR2YWx1ZTsgfSB9IH0gJHBsdWdpbl9pbmZvID0gYXBwbHlfZmlsdGVycyggJ3B1Y19yZXF1ZXN0X2luZm9fcmVzdWx0LScgLiAkbmF0aXZlX3NsdWcsICRwbHVnaW5faW5mbywgJHJlc3VsdCApOwpyZXR1cm4gJHBsdWdpbl9pbmZvOyB9IH0gaWYgKCAhIGZ1bmN0aW9uX2V4aXN0cyggJ2Jlc3R3ZWJzb2Z0X3RvX3dwX2Zvcm1hdCcgKSApIHsgZnVuY3Rpb24gYmVzdHdlYnNvZnRfdG9fd3BfZm9ybWF0KCAkcGx1Z2luX2luZm8gKSB7CiAkaW5mbyA9IG5ldyBTdGRDbGFzczsgJGluZm8gPSAkcGx1Z2luX2luZm87ICRzYW1lRm9ybWF0ID0gYXJyYXkoICduYW1lJywgJ3NsdWcnLCAndmVyc2lvbicsICdyZXF1aXJlcycsICd0ZXN0ZWQnLCAncmF0aW5nJywgJ3VwZ3JhZGVfbm90aWNlJywKICdudW1fcmF0aW5ncycsICdkb3dubG9hZGVkJywgJ2hvbWVwYWdlJywgJ2xhc3RfdXBkYXRlZCcsICk7IGZvcmVhY2ggKCAkc2FtZUZvcm1hdCBhcyAkZmllbGQgKSB7ICRpbmZvLT4kZmllbGQgPSAoIGlzc2V0KCAkcGx1Z2luX2luZm8tPiRmaWVsZCApICkgPyAkcGx1Z2luX2luZm8tPiRmaWVsZCA6IG51bGw7Cn0gJGluZm8tPmF1dGhvciA9ICFlbXB0eSggJHBsdWdpbl9pbmZvLT5hdXRob3JfaG9tZXBhZ2UgKSA/IHNwcmludGYoICc8YSBocmVmPSIlcyI+JXM8L2E+JywgJHBsdWdpbl9pbmZvLT5hdXRob3JfaG9tZXBhZ2UsICRwbHVnaW5faW5mby0+YXV0aG9yICkgOiAkcGx1Z2luX2luZm8tPmF1dGhvcjsKIGlmICggaXNfb2JqZWN0KCAkcGx1Z2luX2luZm8tPnNlY3Rpb25zICkgKSB7ICRpbmZvLT5zZWN0aW9ucyA9IGdldF9vYmplY3RfdmFycyggJHBsdWdpbl9pbmZvLT5zZWN0aW9ucyApOwp9IGVsc2VpZiAoIGlzX2FycmF5KCAkcGx1Z2luX2luZm8tPnNlY3Rpb25zICkgKSB7ICRpbmZvLT5zZWN0aW9ucyA9ICRwbHVnaW5faW5mby0+c2VjdGlvbnM7IH0gZWxzZSB7CiAkaW5mby0+c2VjdGlvbnMgPSBhcnJheSggJ2Rlc2NyaXB0aW9uJyA9PiAnJyApOyB9IGlmICggIWVtcHR5KCAkcGx1Z2luX2luZm8tPmJhbm5lcnMgKSApIHsgJGluZm8tPmJhbm5lcnMgPSBpc19vYmplY3QoICRwbHVnaW5faW5mby0+YmFubmVycyApID8gZ2V0X29iamVjdF92YXJzKCAkcGx1Z2luX2luZm8tPmJhbm5lcnMgKSA6ICRwbHVnaW5faW5mby0+YmFubmVyczsKJGluZm8tPmJhbm5lcnMgPSBhcnJheV9pbnRlcnNlY3Rfa2V5KCAkaW5mby0+YmFubmVycywgYXJyYXkoICdoaWdoJyA9PiB0cnVlLCAnbG93JyA9PiB0cnVlICkgKTsgfSByZXR1cm4gJGluZm87Cn0gfSBpZiAoICEgZnVuY3Rpb25fZXhpc3RzKCAnYmVzdHdlYnNvZnRfaW5qZWN0X2luZm8nICkgKSB7IGZ1bmN0aW9uIGJlc3R3ZWJzb2Z0X2luamVjdF9pbmZvKCAkcmVzdWx0LCAkYWN0aW9uLCAkYXJncywgJG5hdGl2ZV9zbHVnICkgewogaWYgKCAhICggJGFjdGlvbiA9PSAncGx1Z2luX2luZm9ybWF0aW9uJyAmJiBpc3NldCggJGFyZ3MtPnNsdWcgKSAmJiAkYXJncy0+c2x1ZyA9PSAkbmF0aXZlX3NsdWcgKSApCiByZXR1cm4gJHJlc3VsdDsgJHBsdWdpbl9pbmZvID0gYmVzdHdlYnNvZnRfcmVxdWVzdF9pbmZvKCAkbmF0aXZlX3NsdWcgKTsgJHBsdWdpbl9pbmZvID0gYXBwbHlfZmlsdGVycyggJ3B1Y19wcmVfaW5qZWN0X2luZm8tJyAuICRuYXRpdmVfc2x1ZywgJHBsdWdpbl9pbmZvICk7CmlmICggJHBsdWdpbl9pbmZvICkgcmV0dXJuIGJlc3R3ZWJzb2Z0X3RvX3dwX2Zvcm1hdCggJHBsdWdpbl9pbmZvICk7IHJldHVybiAkcmVzdWx0OyB9IH0gaWYgKCAoICEgaXNfbWFpbl9zaXRlKCkgJiYgISBpc19uZXR3b3JrX2FkbWluKCkgKSB8fCAoIGRlZmluZWQoICdET0lOR19BSkFYJyApICYmIERPSU5HX0FKQVggKSApCiByZXR1cm47IGFkZF9hY3Rpb24oICdsb2FkLXBsdWdpbnMucGhwJywgJ2Jlc3R3ZWJzb2Z0X3dwX3VwZGF0ZV9wbHVnaW5zJyApOyBhZGRfYWN0aW9uKCAnbG9hZC11cGRhdGUucGhwJywgJ2Jlc3R3ZWJzb2Z0X3dwX3VwZGF0ZV9wbHVnaW5zJyApOwphZGRfYWN0aW9uKCAnbG9hZC11cGRhdGUtY29yZS5waHAnLCAnYmVzdHdlYnNvZnRfd3BfdXBkYXRlX3BsdWdpbnMnICk7IGFkZF9hY3Rpb24oICd3cF91cGRhdGVfcGx1Z2lucycsICdiZXN0d2Vic29mdF93cF91cGRhdGVfcGx1Z2lucycgKTsKYWRkX2FjdGlvbiggJ3VwZ3JhZGVyX3Byb2Nlc3NfY29tcGxldGUnLCAnYmVzdHdlYnNvZnRfd3BfdXBkYXRlX3BsdWdpbnMnICk7IGFkZF9hY3Rpb24oICdhZG1pbl9pbml0JywgJ2Jlc3R3ZWJzb2Z0X3dwX3NjaGVkdWxlX3VwZGF0ZV9jaGVja3MnICk7CmFkZF9hY3Rpb24oICdiZXN0d2Vic29mdF93cF91cGRhdGVfcGx1Z2lucycsICdiZXN0d2Vic29mdF93cF91cGRhdGVfcGx1Z2luc19jcm9uJyApOw=='
));
Function Calls
| base64_decode | 1 |
Stats
| MD5 | 3b4286e37b5fb01412408f779886e7b8 |
| Eval Count | 1 |
| Decode Time | 105 ms |