Блок-схема алгоритма работы программы 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Блок-схема алгоритма работы программы

Поиск

ПРИЛОЖЕНИЕ А

Код программы

define('WP_USE_THEMES', true);

 

/** Loads the WordPress Environment and Template */

require( dirname( __FILE__ ) . '/wp-blog-header.php' );

 

* Этот файл содержит следующие параметры:

 *

 * * Настройки MySQL

 * * Секретные ключи

 * * Префикс таблиц базы данных

 * * ABSPATH

 *

 * @link https://codex.wordpress.org/Editing_wp-config.php

 *

 * @package WordPress

 */

 

// ** Параметры MySQL: Эту информацию можно получить у вашего хостинг-провайдера ** //

/** Имя базы данных для WordPress */

define('DB_NAME', 'shop-thec');

 

/** Имя пользователя MySQL */

define('DB_USER', 'root');

 

/** Пароль к базе данных MySQL */

define('DB_PASSWORD', '');

 

/** Имя сервера MySQL */

define('DB_HOST', 'localhost');

 

/** Кодировка базы данных для создания таблиц. */

define('DB_CHARSET', 'utf8mb4');

 

/** Схема сопоставления. Не меняйте, если не уверены. */

define('DB_COLLATE', '');

 

/**#@+

 * Уникальные ключи и соли для аутентификации.

 *

 * Смените значение каждой константы на уникальную фразу.

 * Можно сгенерировать их с помощью {@link https://api.wordpress.org/secret-key/1.1/salt/ сервиса ключей на WordPress.org}

 * Можно изменить их, чтобы сделать существующие файлы cookies недействительными. Пользователям потребуется авторизоваться снова.

 *

 * @since 2.6.0

 */

*

 * Измените это значение на true, чтобы включить отображение уведомлений при разработке.

 * Разработчикам плагинов и тем настоятельно рекомендуется использовать WP_DEBUG

 * в своём рабочем окружении.

 *

 * Информацию о других отладочных константах можно найти в Кодексе.

 *

 * @link https://codex.wordpress.org/Debugging_in_ */

define('WP_DEBUG', false);

 

/* Это всё, дальше не редактируем. Успехов! */

 

/** Абсолютный путь к директории. */

if ( !defined('ABSPATH') )

           define('ABSPATH', dirname(__FILE__) . '/');

 

/** Инициализирует переменны и подключает файлы. */

require_once(ABSPATH . 'wp-settings.php');

 

// cron.php

<?php

/**

 * WordPress Cron Implementation for hosts, which do not offer CRON or for which

 * the user has not set up a CRON job pointing to this file.

 *

 * The HTTP request to this file will not slow down the visitor who happens to

 * visit when the cron job is needed to run.

 *

 * @package WordPress

 */

 

ignore_user_abort(true);

 

if ( !empty($_POST) || defined('DOING_AJAX') || defined('DOING_CRON') )

           die();

 

/**

 * Tell WordPress we are doing the CRON task.

 *

 * @var bool

 */

define('DOING_CRON', true);

 

if ( !defined('ABSPATH') ) {

           /** Set up WordPress environment */

           require_once( dirname( __FILE__ ) . '/wp-load.php' );

}

 

/**

 * Retrieves the cron lock.

 *

 * Returns the uncached `doing_cron` transient.

 *

 * @ignore

 * @since 3.3.0

 *

 * @return string|false Value of the `doing_cron` transient, 0|false otherwise.

 */

function _get_cron_lock() {

           global $wpdb;

 

           $value = 0;

           if ( wp_using_ext_object_cache() ) {

                          /*

                           * Skip local cache and force re-fetch of doing_cron transient

                           * in case another process updated the cache.

                           */

                          $value = wp_cache_get( 'doing_cron', 'transient', true );

           } else {

                          $row = $wpdb->get_row( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", '_transient_doing_cron' ) );

                          if ( is_object( $row ) )

                                          $value = $row->option_value;

           }

 

           return $value;

}

 

if ( false === $crons = _get_cron_array() )

           die();

 

$keys = array_keys( $crons );

$gmt_time = microtime( true );

 

if ( isset($keys[0]) && $keys[0] > $gmt_time )

           die();

 

 

// The cron lock: a unix timestamp from when the cron was spawned.

$doing_cron_transient = get_transient( 'doing_cron' );

 

// Use global $doing_wp_cron lock otherwise use the GET lock. If no lock, trying grabbing a new lock.

if ( empty( $doing_wp_cron ) ) {

           if ( empty( $_GET[ 'doing_wp_cron' ] ) ) {

                          // Called from external script/job. Try setting a lock.

                          if ( $doing_cron_transient && ( $doing_cron_transient + WP_CRON_LOCK_TIMEOUT > $gmt_time ) )

                                          return;

                          $doing_cron_transient = $doing_wp_cron = sprintf( '%.22F', microtime( true ) );

                          set_transient( 'doing_cron', $doing_wp_cron );

           } else {

                          $doing_wp_cron = $_GET[ 'doing_wp_cron' ];

           }

}

 

/*

 * The cron lock (a unix timestamp set when the cron was spawned),

 * must match $doing_wp_cron (the "key").

 */

if ( $doing_cron_transient != $doing_wp_cron )

           return;

 

foreach ( $crons as $timestamp => $cronhooks ) {

           if ( $timestamp > $gmt_time )

                          break;

 

           foreach ( $cronhooks as $hook => $keys ) {

 

                          foreach ( $keys as $k => $v ) {

 

                                          $schedule = $v['schedule'];

 

                                          if ( $schedule != false ) {

                                                          $new_args = array($timestamp, $schedule, $hook, $v['args']);

                                                          call_user_func_array('wp_reschedule_event', $new_args);

                                          }

 

                                          wp_unschedule_event( $timestamp, $hook, $v['args'] );

 

                                          /**

                                           * Fires scheduled events.

                                           *

                                           * @ignore

                                           * @since 2.1.0

                                           *

                                           * @param string $hook Name of the hook that was scheduled to be fired.

                                           * @param array $args The arguments to be passed to the hook.

                                           */

                                          do_action_ref_array( $hook, $v['args'] );

 

                                          // If the hook ran too long and another cron process stole the lock, quit.

                                          if ( _get_cron_lock() != $doing_wp_cron )

                                                          return;

                          }

           }

}

 

if ( _get_cron_lock() == $doing_wp_cron )

           delete_transient( 'doing_cron' );

 

die();

 

<?php

/**

 * WordPress User Page

 *

 * Handles authentication, registering, resetting passwords, forgot password,

 * and other user handling.

 *

 * @package WordPress

 */

 

/** Make sure that the WordPress bootstrap has run before continuing. */

require( dirname(__FILE__) . '/wp-load.php' );

 

// Redirect to https login if forced to use SSL

if ( force_ssl_admin() && ! is_ssl() ) {

           if ( 0 === strpos($_SERVER['REQUEST_URI'], 'http') ) {

                          wp_redirect( set_url_scheme( $_SERVER['REQUEST_URI'], 'https' ) );

                          exit();

           } else {

                          wp_redirect( 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );

                          exit();

           }

}

 

/**

 * Output the login page header.

 *

 * @param string $title Optional. WordPress login Page title to display in the `<title>` element.

 *                      Default 'Log In'.

 * @param string $message Optional. Message to display in header. Default empty.

 * @param WP_Error $wp_error Optional. The error to pass. Default empty.

 */

function login_header( $title = 'Log In', $message = '', $wp_error = '' ) {

           global $error, $interim_login, $action;

 

           // Don't index any of these forms

           add_action( 'login_head', 'wp_no_robots' );

 

           add_action( 'login_head', 'wp_login_viewport_meta' );

 

           if ( empty($wp_error) )

                          $wp_error = new WP_Error();

 

           // Shake it!

           $shake_error_codes = array( 'empty_password', 'empty_email', 'invalid_email', 'invalidcombo', 'empty_username', 'invalid_username', 'incorrect_password' );

           /**

            * Filters the error codes array for shaking the login form.

            *

            * @since 3.0.0

            *

            * @param array $shake_error_codes Error codes that shake the login form.

            */

           $shake_error_codes = apply_filters( 'shake_error_codes', $shake_error_codes );

 

           if ( $shake_error_codes && $wp_error->get_error_code() && in_array( $wp_error->get_error_code(), $shake_error_codes ) )

                          add_action( 'login_head', 'wp_shake_js', 12 );

 

           $separator = is_rtl() ? ' &rsaquo; ' : ' &lsaquo; ';

 

           ?><!DOCTYPE html>

           <!--[if IE 8]>

                          <html xmlns="http://www.w3.org/1999/xhtml" class="ie8" <?php language_attributes(); ?>>

           <![endif]-->

           <!--[if !(IE 8) ]><!-->

                          <html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>>

           <!--<![endif]-->

           <head>

           <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />

           <title><?php echo get_bloginfo( 'name', 'display' ) . $separator . $title; ?></title>

           <?php

 

           wp_enqueue_style( 'login' );

 

           /*

            * Remove all stored post data on logging out.

            * This could be added by add_action('login_head'...) like wp_shake_js(),

            * but maybe better if it's not removable by plugins

            */

           if ( 'loggedout' == $wp_error->get_error_code() ) {

                          ?>

                          <script>if("sessionStorage" in window){try{for(var key in sessionStorage){if(key.indexOf("wp-autosave-")!=-1){sessionStorage.removeItem(key)}}}catch(e){}};</script>

                          <?php

           }

 

           /**

            * Enqueue scripts and styles for the login page.

            *

            * @since 3.1.0

            */

           do_action( 'login_enqueue_scripts' );

 

           /**

            * Fires in the login page header after scripts are enqueued.

            *

            * @since 2.1.0

            */

           do_action( 'login_head' );

 

           if ( is_multisite() ) {

                          $login_header_url = network_home_url();

                          $login_header_title = get_network()->site_name;

           } else {

                          $login_header_url = __( 'https://wordpress.org/' );

                          $login_header_title = __( 'Powered by WordPress' );

           }

 

           /**

            * Filters link URL of the header logo above login form.

            *

            * @since 2.1.0

            *

            * @param string $login_header_url Login header logo URL.

            */

           $login_header_url = apply_filters( 'login_headerurl', $login_header_url );

 

           /**

            * Filters the title attribute of the header logo above login form.

            *

            * @since 2.1.0

            *

            * @param string $login_header_title Login header logo title attribute.

            */

           $login_header_title = apply_filters( 'login_headertitle', $login_header_title );

 

           $classes = array( 'login-action-' . $action, 'wp-core-ui' );

           if ( is_rtl() )

                          $classes[] = 'rtl';

           if ( $interim_login ) {

                          $classes[] = 'interim-login';

                          ?>

                          <style type="text/css">html{background-color: transparent;}</style>

                          <?php

 

                          if ( 'success' === $interim_login )

                                          $classes[] = 'interim-login-success';

           }

           $classes[] =' locale-' . sanitize_html_class( strtolower( str_replace( '_', '-', get_locale() ) ) );

 

           /**

            * Filters the login page body classes.

            *

            * @since 3.5.0

            *

            * @param array $classes An array of body classes.

            * @param string $action The action that brought the visitor to the login page.

            */

           $classes = apply_filters( 'login_body_class', $classes, $action );

 

           ?>

           </head>

           <body class="login <?php echo esc_attr( implode( ' ', $classes ) ); ?>">

           <?php

           /**

            * Fires in the login page header after the body tag is opened.

            *

            * @since 4.6.0

            */

           do_action( 'login_header' );

           ?>

           <div id="login">

                          <h1><a href="<?php echo esc_url( $login_header_url ); ?>" title="<?php echo esc_attr( $login_header_title ); ?>" tabindex="-1"><?php bloginfo( 'name' ); ?></a></h1>

           <?php

 

           unset( $login_header_url, $login_header_title );

 

           /**

            * Filters the message to display above the login form.

            *

            * @since 2.1.0

            *

            * @param string $message Login message text.

            */

           $message = apply_filters( 'login_message', $message );

           if ( !empty( $message ) )

                          echo $message . "\n";

 

           // In case a plugin uses $error rather than the $wp_errors object

           if ( !empty( $error ) ) {

                          $wp_error->add('error', $error);

                          unset($error);

           }

 

           if ( $wp_error->get_error_code() ) {

                          $errors = '';

                          $messages = '';

                          foreach ( $wp_error->get_error_codes() as $code ) {

                                          $severity = $wp_error->get_error_data( $code );

                                          foreach ( $wp_error->get_error_messages( $code ) as $error_message ) {

                                                          if ( 'message' == $severity )

                                                                         $messages .= ' ' . $error_message . "<br />\n";

                                                          else

                                                                         $errors .= '        ' . $error_message . "<br />\n";

                                          }

                          }

                          if ( ! empty( $errors ) ) {

                                          /**

                                           * Filters the error messages displayed above the login form.

                                           *

                                           * @since 2.1.0

                                           *

                                           * @param string $errors Login error message.

                                           */

                                          echo '<div id="login_error">' . apply_filters( 'login_errors', $errors ) . "</div>\n";

                          }

                          if ( ! empty( $messages ) ) {

                                          /**

                                           * Filters instructional messages displayed above the login form.

                                           *

                                           * @since 2.5.0

                                           *

                                           * @param string $messages Login messages.

                                           */

                                          echo '<p class="message">' . apply_filters( 'login_messages', $messages ) . "</p>\n";

                          }

           }

} // End of login_header()

 

/**

 * Outputs the footer for the login page.

 *

 * @param string $input_id Which input to auto-focus

 */

function login_footer($input_id = '') {

           global $interim_login;

 

           // Don't allow interim logins to navigate away from the page.

           if ( ! $interim_login ): ?>

           <p id="backtoblog"><a href="<?php echo esc_url( home_url( '/' ) ); ?>"><?php

                          /* translators: %s: site title */

                          printf( _x( '&larr; Back to %s', 'site' ), get_bloginfo( 'title', 'display' ) );

           ?></a></p>

           <?php endif; ?>

 

           </div>

 

           <?php if ( !empty($input_id) ) : ?>

           <script type="text/javascript">

           try{document.getElementById('<?php echo $input_id; ?>').focus();}catch(e){}

           if(typeof wpOnload=='function')wpOnload();

           </script>

           <?php endif; ?>

 

           <?php

           /**

            * Fires in the login page footer.

            *

            * @since 3.1.0

            */

           do_action( 'login_footer' ); ?>

           <div class="clear"></div>

           </body>

           </html>

           <?php

}

 

/**

 * @since 3.0.0

 */

function wp_shake_js() {

?>

<script type="text/javascript">

addLoadEvent = function(func){if(typeof jQuery!="undefined")jQuery(document).ready(func);else if(typeof wpOnload!='function'){wpOnload=func;}else{var oldonload=wpOnload;wpOnload=function(){oldonload();func();}}};

function s(id,pos){g(id).left=pos+'px';}

function g(id){return document.getElementById(id).style;}

function shake(id,a,d){c=a.shift();s(id,c);if(a.length>0){setTimeout(function(){shake(id,a,d);},d);}else{try{g(id).position='static';wp_attempt_focus();}catch(e){}}}

addLoadEvent(function(){ var p=new Array(15,30,15,0,-15,-30,-15,0);p=p.concat(p.concat(p));var i=document.forms[0].id;g(i).position='relative';shake(i,p,20);});

</script>

<?php

}

 

/**

 * @since 3.7.0

 */

function wp_login_viewport_meta() {

           ?>

           <meta name="viewport" content="/>

           <?php

}

 

/**

 * Handles sending password retrieval email to user.

 *

 * @return bool|WP_Error True: when finish. WP_Error on error

 */

function retrieve_password() {

           $errors = new WP_Error();

 

           if ( empty( $_POST['user_login'] ) ) {

                          $errors->add('empty_username', __('<strong>ERROR</strong>: Enter a username or email address.'));

           } elseif ( strpos( $_POST['user_login'], '@' ) ) {

                          $user_data = get_user_by( 'email', trim( wp_unslash( $_POST['user_login'] ) ) );

                          if ( empty( $user_data ) )

                                          $errors->add('invalid_email', __('<strong>ERROR</strong>: There is no user registered with that email address.'));

           } else {

                          $login = trim($_POST['user_login']);

                          $user_data = get_user_by('login', $login);

           }

 

           /**

            * Fires before errors are returned from a password reset request.

            *

            * @since 2.1.0

            * @since 4.4.0 Added the `$errors` parameter.

            *

            * @param WP_Error $errors A WP_Error object containing any errors generated

            *                    by using invalid credentials.

            */

           do_action( 'lostpassword_post', $errors );

 

           if ( $errors->get_error_code() )

                          return $errors;

 

           if ( !$user_data ) {

                          $errors->add('invalidcombo', __('<strong>ERROR</strong>: Invalid username or email.'));

                          return $errors;

           }

 

           // Redefining user_login ensures we return the right case in the email.

           $user_login = $user_data->user_login;

           $user_email = $user_data->user_email;

           $key = get_password_reset_key( $user_data );

 

           if ( is_wp_error( $key ) ) {

                          return $key;

           }

 

           $message = __('Someone has requested a password reset for the following account:') . "\r\n\r\n";

           $message .= network_home_url( '/' ) . "\r\n\r\n";

           $message .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n";

           $message .= __('If this was a mistake, just ignore this email and nothing will happen.') . "\r\n\r\n";

           $message .= __('To reset your password, visit the following address:') . "\r\n\r\n";

           $message .= '<' . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . ">\r\n";

 

           if ( is_multisite() ) {

                          $blogname = get_network()->site_name;

           } else {

                          /*

                           * The blogname option is escaped with esc_html on the way into the database

                           * in sanitize_option we want to reverse this for the plain text arena of emails.

                           */

                          $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);

           }

 

           /* translators: Password reset email subject. 1: Site name */

           $title = sprintf( __('[%s] Password Reset'), $blogname );

 

           /**

            * Filters the subject of the password reset email.

            *

            * @since 2.8.0

            * @since 4.4.0 Added the `$user_login` and `$user_data` parameters.

            *

            * @param string $title Default email title.

            * @param string $user_login The username for the user.

            * @param WP_User $user_data WP_User object.

            */

           $title = apply_filters( 'retrieve_password_title', $title, $user_login, $user_data );

 

           /**

            * Filters the message body of the password reset mail.

            *

            * @since 2.8.0

            * @since 4.1.0 Added `$user_login` and `$user_data` parameters.

            *

            * @param string $message Default mail message.

            * @param string $key   The activation key.

            * @param string $user_login The username for the user.

            * @param WP_User $user_data WP_User object.

            */

           $message = apply_filters( 'retrieve_password_message', $message, $key, $user_login, $user_data );

 

           if ( $message && !wp_mail( $user_email, wp_specialchars_decode( $title ), $message ) )

                          wp_die( __('The email could not be sent.') . "<br />\n" . __('Possible reason: your host may have disabled the mail() function.') );

 

           return true;

}

 

//

// Main

//

 

$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'login';

$errors = new WP_Error();

 

if ( isset($_GET['key']) )

           $action = 'resetpass';

 

// validate action so as to default to the login screen

if ( !in_array( $action, array( 'postpass', 'logout', 'lostpassword', 'retrievepassword', 'resetpass', 'rp', 'register', 'login' ), true ) && false === has_filter( 'login_form_' . $action ) )

           $action = 'login';

 

nocache_headers();

 

header('Content-Type: '.get_bloginfo('html_type').'; charset='.get_bloginfo('charset'));

 

if ( defined( 'RELOCATE' ) && RELOCATE ) { // Move flag is set

           if ( isset( $_SERVER['PATH_INFO'] ) && ($_SERVER['PATH_INFO'] != $_SERVER['PHP_SELF']) )

                          $_SERVER['PHP_SELF'] = str_replace( $_SERVER['PATH_INFO'], '', $_SERVER['PHP_SELF'] );

 

           $url = dirname( set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] ) );

           if ( $url != get_option( 'siteurl' ) )

                          update_option( 'siteurl', $url );

}

 

//Set a cookie now to see if they are supported by the browser.

$secure = ( 'https' === parse_url( wp_login_url(), PHP_URL_SCHEME ) );

setcookie( TEST_COOKIE, 'WP Cookie check', 0, COOKIEPATH, COOKIE_DOMAIN, $secure );

if ( SITECOOKIEPATH != COOKIEPATH )

           setcookie( TEST_COOKIE, 'WP Cookie check', 0, SITECOOKIEPATH, COOKIE_DOMAIN, $secure );

 

/**

 * Fires when the login form is initialized.

 *

 * @since 3.2.0

 */

do_action( 'login_init' );

/**

 * Fires before a specified login form action.

 *

 * The dynamic portion of the hook name, `$action`, refers to the action

 * that brought the visitor to the login form. Actions include 'postpass',

 * 'logout', 'lostpassword', etc.

 *

 * @since 2.8.0

 */

do_action( "login_form_{$action}" );

 

$http_post = ('POST' == $_SERVER['REQUEST_METHOD']);

$interim_login = isset($_REQUEST['interim-login']);

 

switch ($action) {

 

case 'postpass' :

           if ( ! array_key_exists( 'post_password', $_POST ) ) {

                          wp_safe_redirect( wp_get_referer() );

                          exit();

           }

 

           $hasher = new PasswordHash( 8, true );

 

           setcookie( 'wp-postpass_' . COOKIEHASH, $hasher->HashPassword( wp_unslash( $_POST['post_password'] ) ), $expire, COOKIEPATH, COOKIE_DOMAIN, $secure );

 

           wp_safe_redirect( wp_get_referer() );

           exit();

 

case 'logout' :

           check_admin_referer('log-out');

 

           $user = wp_get_current_user();

 

           wp_logout();

 

           if ( ! empty( $_REQUEST['redirect_to'] ) ) {

                          $redirect_to = $requested_redirect_to = $_REQUEST['redirect_to'];

           } else {

                          $redirect_to = 'wp-login.php?loggedout=true';

                          $requested_redirect_to = '';

           }

 

           /**

            * Filters the log out redirect URL.

            *

            * @since 4.2.0

            *

            * @param string $redirect_to      The redirect destination URL.

            * @param string $requested_redirect_to The requested redirect destination URL passed as a parameter.

            * @param WP_User $user             The WP_User object for the user that's logging out.

            */

           $redirect_to = apply_filters( 'logout_redirect', $redirect_to, $requested_redirect_to, $user );

           wp_safe_redirect( $redirect_to );

           exit();

 

case 'lostpassword' :

case 'retrievepassword' :

 

           if ( $http_post ) {

                          $errors = retrieve_password();

                          if ( !is_wp_error($errors) ) {

                                          $redirect_to = !empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : 'wp-login.php?checkemail=confirm';

                                          wp_safe_redirect( $redirect_to );

                                          exit();

                          }

           }

 

           if ( isset( $_GET['error'] ) ) {

                          if ( 'invalidkey' == $_GET['error'] ) {

                                          $errors->add( 'invalidkey', __( 'Your password reset link appears to be invalid. Please request a new link below.' ) );

                          } elseif ( 'expiredkey' == $_GET['error'] ) {

                                          $errors->add( 'expiredkey', __( 'Your password reset link has expired. Please request a new link below.' ) );

                          }

           }

 

           $lostpassword_redirect = ! empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : '';

           /**

            * Filters the URL redirected to after submitting the lostpassword/retrievepassword form.

            *

            * @since 3.0.0

            *

            * @param string $lostpassword_redirect The redirect destination URL.

            */

           $redirect_to = apply_filters( 'lostpassword_redirect', $lostpassword_redirect );

 

           /**

            * Fires before the lost password form.

            *

            * @since 1.5.1

            */

           do_action( 'lost_password' );

 

           login_header(__('Lost Password'), '<p class="message">' . __('Please enter your username or email address. You will receive a link to create a new password via email.') . '</p>', $errors);

 

           $user_login = isset($_POST['user_login']) ? wp_unslash($_POST['user_login']) : '';

 

?>

 

 


 

 

 

 

 

 



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 51; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.198 (0.009 с.)