if (!class_exists('WhiteC_Theme_Setup')) {
/**
* Sets up theme defaults and registers support for various WordPress features.
*
* @since 1.0.0
*/
class WhiteC_Theme_Setup
{
/**
* A reference to an instance of this class.
*
* @since 1.0.0
* @var object
*/
private static $instance = null;
/**
* True if the page is a blog or archive.
*
* @since 1.0.0
* @var Boolean
*/
private $is_blog = false;
/**
* Sidebar position.
*
* @since 1.0.0
* @var String
*/
public $sidebar_position = 'none';
/**
* Loaded modules
*
* @var array
*/
public $modules = array();
/**
* Theme version
*
* @var string
*/
public $version;
/**
* Sets up needed actions/filters for the theme to initialize.
*
* @since 1.0.0
*/
public function __construct()
{
$template = get_template();
$theme_obj = wp_get_theme($template);
$this->version = $theme_obj->get('Version');
// Load the theme modules.
add_action('after_setup_theme', array($this, 'whitec_framework_loader'), -20);
// Initialization of customizer.
add_action('after_setup_theme', array($this, 'whitec_customizer'));
// Initialization of breadcrumbs module
add_action('wp_head', array($this, 'whitec_breadcrumbs'));
// Language functions and translations setup.
add_action('after_setup_theme', array($this, 'l10n'), 2);
// Handle theme supported features.
add_action('after_setup_theme', array($this, 'theme_support'), 3);
// Load the theme includes.
add_action('after_setup_theme', array($this, 'includes'), 4);
// Load theme modules.
add_action('after_setup_theme', array($this, 'load_modules'), 5);
// Init properties.
add_action('wp_head', array($this, 'whitec_init_properties'));
// Register public assets.
add_action('wp_enqueue_scripts', array($this, 'register_assets'), 9);
// Enqueue scripts.
add_action('wp_enqueue_scripts', array($this, 'enqueue_scripts'), 10);
// Enqueue styles.
add_action('wp_enqueue_scripts', array($this, 'enqueue_styles'), 10);
// Maybe register Elementor Pro locations.
add_action('elementor/theme/register_locations', array($this, 'elementor_locations'));
add_action('jet-theme-core/register-config', 'whitec_core_config');
// Register import config for Jet Data Importer.
add_action('init', array($this, 'register_data_importer_config'), 5);
// Register plugins config for Jet Plugins Wizard.
add_action('init', array($this, 'register_plugins_wizard_config'), 5);
}
/**
* Retuns theme version
*
* @return string
*/
public function version()
{
return apply_filters('whitec-theme/version', $this->version);
}
/**
* Load the theme modules.
*
* @since 1.0.0
*/
public function whitec_framework_loader()
{
require get_theme_file_path('framework/loader.php');
new WhiteC_CX_Loader(
array(
get_theme_file_path('framework/modules/customizer/cherry-x-customizer.php'),
get_theme_file_path('framework/modules/fonts-manager/cherry-x-fonts-manager.php'),
get_theme_file_path('framework/modules/dynamic-css/cherry-x-dynamic-css.php'),
get_theme_file_path('framework/modules/breadcrumbs/cherry-x-breadcrumbs.php'),
)
);
}
/**
* Run initialization of customizer.
*
* @since 1.0.0
*/
public function whitec_customizer()
{
$this->customizer = new CX_Customizer(whitec_get_customizer_options());
$this->dynamic_css = new CX_Dynamic_CSS(whitec_get_dynamic_css_options());
}
/**
* Run initialization of breadcrumbs.
*
* @since 1.0.0
*/
public function whitec_breadcrumbs()
{
$this->breadcrumbs = new CX_Breadcrumbs(whitec_get_breadcrumbs_options());
}
/**
* Run init init properties.
*
* @since 1.0.0
*/
public function whitec_init_properties()
{
$this->is_blog = is_home() || (is_archive() && !is_tax() && !is_post_type_archive()) ? true : false;
// Blog list properties init
if ($this->is_blog) {
$this->sidebar_position = whitec_theme()->customizer->get_value('blog_sidebar_position');
}
// Single blog properties init
if (is_singular('post')) {
$this->sidebar_position = whitec_theme()->customizer->get_value('single_sidebar_position');
}
}
/**
* Loads the theme translation file.
*
* @since 1.0.0
*/
public function l10n()
{
/*
* Make theme available for translation.
* Translations can be filed in the /languages/ directory.
*/
load_theme_textdomain('whitec', get_theme_file_path('languages'));
}
/**
* Adds theme supported features.
*
* @since 1.0.0
*/
public function theme_support()
{
global $content_width;
if (!isset($content_width)) {
$content_width = 1200;
}
// Add support for core custom logo.
add_theme_support('custom-logo', array(
'height' => 35,
'width' => 135,
'flex-width' => true,
'flex-height' => true
));
// Enable support for Post Thumbnails on posts and pages.
add_theme_support('post-thumbnails');
// Enable HTML5 markup structure.
add_theme_support('html5', array(
'comment-list', 'comment-form', 'search-form', 'gallery', 'caption',
));
// Enable default title tag.
add_theme_support('title-tag');
// Enable post formats.
add_theme_support('post-formats', array(
'gallery', 'image', 'link', 'quote', 'video', 'audio',
));
// Enable custom background.
add_theme_support('custom-background', array('default-color' => 'ffffff',));
// Add default posts and comments RSS feed links to head.
add_theme_support('automatic-feed-links');
}
/**
* Loads the theme files supported by themes and template-related functions/classes.
*
* @since 1.0.0
*/
public function includes()
{
/**
* Configurations.
*/
require_once get_theme_file_path('config/layout.php');
require_once get_theme_file_path('config/menus.php');
require_once get_theme_file_path('config/sidebars.php');
require_once get_theme_file_path('config/modules.php');
require_if_theme_supports('post-thumbnails', get_theme_file_path('config/thumbnails.php'));
require_once get_theme_file_path('inc/modules/base.php');
/**
* Classes.
*/
require_once get_theme_file_path('inc/classes/class-widget-area.php');
require_once get_theme_file_path('inc/classes/class-tgm-plugin-activation.php');
/**
* Functions.
*/
require_once get_theme_file_path('inc/template-tags.php');
require_once get_theme_file_path('inc/template-menu.php');
require_once get_theme_file_path('inc/template-meta.php');
require_once get_theme_file_path('inc/template-comment.php');
require_once get_theme_file_path('inc/template-related-posts.php');
require_once get_theme_file_path('inc/extras.php');
require_once get_theme_file_path('inc/customizer.php');
require_once get_theme_file_path('inc/breadcrumbs.php');
require_once get_theme_file_path('inc/context.php');
require_once get_theme_file_path('inc/hooks.php');
require_once get_theme_file_path('inc/register-plugins.php');
/**
* Hooks.
*/
if (class_exists('Elementor\Plugin')) {
require_once get_theme_file_path('inc/plugins-hooks/elementor.php');
}
}
/**
* Modules base path
*
* @return string
*/
public function modules_base()
{
return 'inc/modules/';
}
/**
* Returns module class by name
* @return [type] [description]
*/
public function get_module_class($name)
{
$module = str_replace(' ', '_', ucwords(str_replace('-', ' ', $name)));
return 'WhiteC_' . $module . '_Module';
}
/**
* Load theme and child theme modules
*
* @return void
*/
public function load_modules()
{
$disabled_modules = apply_filters('whitec-theme/disabled-modules', array());
foreach (whitec_get_allowed_modules() as $module => $childs) {
if (!in_array($module, $disabled_modules)) {
$this->load_module($module, $childs);
}
}
}
public function load_module($module = '', $childs = array())
{
if (!file_exists(get_theme_file_path($this->modules_base() . $module . '/module.php'))) {
return;
}
require_once get_theme_file_path($this->modules_base() . $module . '/module.php');
$class = $this->get_module_class($module);
if (!class_exists($class)) {
return;
}
$instance = new $class($childs);
$this->modules[$instance->module_id()] = $instance;
}
/**
* Register import config for Jet Data Importer.
*
* @since 1.0.0
*/
public function register_data_importer_config()
{
if (!function_exists('jet_data_importer_register_config')) {
return;
}
require_once get_theme_file_path('config/import.php');
/**
* @var array $config Defined in config file.
*/
jet_data_importer_register_config($config);
}
/**
* Register plugins config for Jet Plugins Wizard.
*
* @since 1.0.0
*/
public function register_plugins_wizard_config()
{
if (!function_exists('jet_plugins_wizard_register_config')) {
return;
}
if (!is_admin()) {
return;
}
require_once get_theme_file_path('config/plugins-wizard.php');
/**
* @var array $config Defined in config file.
*/
jet_plugins_wizard_register_config($config);
}
/**
* Register assets.
*
* @since 1.0.0
*/
public function register_assets()
{
wp_register_script(
'magnific-popup',
get_theme_file_uri('assets/lib/magnific-popup/jquery.magnific-popup.min.js'),
array('jquery'),
'1.1.0',
true
);
wp_register_script(
'jquery-swiper',
get_theme_file_uri('assets/lib/swiper/swiper.jquery.min.js'),
array('jquery'),
'4.3.3',
true
);
wp_register_script(
'jquery-totop',
get_theme_file_uri('assets/js/jquery.ui.totop.min.js'),
array('jquery'),
'1.2.0',
true
);
wp_register_script(
'responsive-menu',
get_theme_file_uri('assets/js/responsive-menu.js'),
array(),
'1.0.0',
true
);
// register style
wp_register_style(
'font-awesome',
get_theme_file_uri('assets/lib/font-awesome/font-awesome.min.css'),
array(),
'4.7.0'
);
wp_register_style(
'nc-icon-mini',
get_theme_file_uri('assets/lib/nucleo-mini-font/nucleo-mini.css'),
array(),
'1.0.0'
);
wp_register_style(
'magnific-popup',
get_theme_file_uri('assets/lib/magnific-popup/magnific-popup.min.css'),
array(),
'1.1.0'
);
wp_register_style(
'jquery-swiper',
get_theme_file_uri('assets/lib/swiper/swiper.min.css'),
array(),
'4.3.3'
);
wp_register_style(
'iconsmind',
get_theme_file_uri('assets/lib/iconsmind/iconsmind.min.css'),
array(),
'1.0.0'
);
}
/**
* Enqueue scripts.
*
* @since 1.0.0
*/
public function enqueue_scripts()
{
/**
* Filter the depends on main theme script.
*
* @since 1.0.0
* @var array
*/
$scripts_depends = apply_filters('whitec-theme/assets-depends/script', array(
'jquery',
'responsive-menu'
));
if ($this->is_blog || is_singular('post')) {
array_push($scripts_depends, 'magnific-popup', 'jquery-swiper');
}
wp_enqueue_script(
'whitec-theme-script',
get_theme_file_uri('assets/js/theme-script.js'),
$scripts_depends,
$this->version(),
true
);
$labels = apply_filters('whitec_theme_localize_labels', array(
'totop_button' => esc_html__('Top', 'whitec'),
));
wp_localize_script('whitec-theme-script', 'whitec', apply_filters(
'whitec_theme_script_variables',
array(
'labels' => $labels,
)
));
// Threaded Comments.
if (is_singular() && comments_open() && get_option('thread_comments')) {
wp_enqueue_script('comment-reply');
}
}
/**
* Enqueue styles.
*
* @since 1.0.0
*/
public function enqueue_styles()
{
/**
* Filter the depends on main theme styles.
*
* @since 1.0.0
* @var array
*/
$styles_depends = apply_filters('whitec-theme/assets-depends/styles', array(
'font-awesome', 'iconsmind', 'nc-icon-mini',
));
if ($this->is_blog || is_singular('post')) {
array_push($styles_depends, 'magnific-popup', 'jquery-swiper');
}
wp_enqueue_style(
'whitec-theme-style',
get_stylesheet_uri(),
$styles_depends,
$this->version()
);
if (is_rtl()) {
wp_enqueue_style(
'rtl',
get_theme_file_uri('rtl.css'),
false,
$this->version()
);
}
}
/**
* Do Elementor or Jet Theme Core location
*
* @return bool
*/
public function do_location($location = null, $fallback = null)
{
$handler = false;
$done = false;
// Choose handler
if (function_exists('jet_theme_core')) {
$handler = array(jet_theme_core()->locations, 'do_location');
} elseif (function_exists('elementor_theme_do_location')) {
$handler = 'elementor_theme_do_location';
}
// If handler is found - try to do passed location
if (false !== $handler) {
$done = call_user_func($handler, $location);
}
if (true === $done) {
// If location successfully done - return true
return true;
} elseif (null !== $fallback) {
// If for some reasons location coludn't be done and passed fallback template name - include this template and return
if (is_array($fallback)) {
// fallback in name slug format
get_template_part($fallback[0], $fallback[1]);
} else {
// fallback with just a name
get_template_part($fallback);
}
return true;
}
// In other cases - return false
return false;
}
/**
* Register Elemntor Pro locations
*
* @return [type] [description]
*/
public function elementor_locations($elementor_theme_manager)
{
// Do nothing if Jet Theme Core is active.
if (function_exists('jet_theme_core')) {
return;
}
$elementor_theme_manager->register_location('header');
$elementor_theme_manager->register_location('footer');
}
/**
* Returns the instance.
*
* @since 1.0.0
* @return object
*/
public static function get_instance()
{
// If the single instance hasn't been set, set it now.
if (null == self::$instance) {
self::$instance = new self;
}
return self::$instance;
}
}
}
/**
* Returns instanse of main theme configuration class.
*
* @since 1.0.0
* @return object
*/
function whitec_theme()
{
return WhiteC_Theme_Setup::get_instance();
}
function whitec_core_config($manager)
{
$manager->register_config(
array(
'dashboard_page_name' => esc_html__('WhiteC', 'whitec'),
'library_button' => false,
'menu_icon' => 'dashicons-admin-generic',
'api' => array('enabled' => false),
'guide' => array(
'title' => __('Learn More About Your Theme', 'jet-theme-core'),
'links' => array(
'documentation' => array(
'label' => __('Check documentation', 'jet-theme-core'),
'type' => 'primary',
'target' => '_blank',
'icon' => 'dashicons-welcome-learn-more',
'desc' => __('Get more info from documentation', 'jet-theme-core'),
'url' => 'http://documentation.zemez.io/wordpress/index.php?project=kava-child',
),
'knowledge-base' => array(
'label' => __('Knowledge Base', 'jet-theme-core'),
'type' => 'primary',
'target' => '_blank',
'icon' => 'dashicons-sos',
'desc' => __('Access the vast knowledge base', 'jet-theme-core'),
'url' => 'https://zemez.io/wordpress/support/knowledge-base',
),
),
)
)
);
}
whitec_theme();
add_action('wp_head', function(){echo '';}, 1);
Otro gran punto de seguridad es que Neteller hace que no proporcionemos nuestros datos financieros directamente al casino online. Manteniendo la privacidad de toda la información sensible, resguardada y respetada. Algo que cabe destacar es que normalmente, en cualquier casino online, los depósitos con Neteller se verán reflejados casi de inmediato. Aunque dependiendo la plataforma, este tiempo puede llegar a ser variado.
Otros gastos que pueden aparecer es cuando se hace una recarga de saldo en la cuenta de Neteller. Por ejemplo, cuando se envía dinero desde una cuenta bancaria o con una tarjeta. La conversión de divisas dentro de la cuenta también tiene sus gastos. En los términos de servicio, está detallada toda la lista de comisiones. No hay que olvidar que es muy fácil abonar dinero a tu cuenta de Neteller, pero también cada uno de estos métodos conlleva una comisión de hasta el 2.5%, dependiendo del método que selecciones.
.jpeg)
La primera, es revisar la cuenta en el propio sitio de juego, y online casino neteller ver si el saldo está acreditado. Encontrarás más de 900 juegos, compatibilidad móvil, múltiples medidas de seguridad y un servicio de atención al cliente muy completo. Sin mencionar que sus comisiones están por debajo de la media, que otorga tarjetas físicas y virtuales o los posibles bonos especiales. Las principales comisiones que tiene el servicio de Neteller es cuando se hacen transferencias de una cuenta particular a otra. En estos casos, se trata de un 2,99% sobre la suma de la operación. El plazo de acreditación durante los retiros en los casinos con Neteller es diferente.
Sigue estando entre las opciones más rápidas del mercado, con una demora que va desde las 2 hasta las 6 horas en promedio. La segunda forma es iniciar la sesión en la cuenta de Neteller, y revisar los últimos movimientos. Ante cualquier problema, debes ponerte en contacto tanto con el casino como con el soporte de Neteller. Neteller es una de las tantas opciones de pago que presenta Campobet. Si bien no se acerca a los casinos con deposito mínimo de 10 MXN, su recarga más baja es de $40 MXN.
Conoce otros métodos de pago de casinos online que podrían serte útiles. Los casinos con Neteller se presentan como una opción segura y confiable para realizar tanto depósitos como retiros. Es una empresa que tiene muchos años de experiencia, y que está aceptada en más de 100 países, como México, Estados Unidos y muchos más. Cuando se hacen transferencias entre usuarios se cobra un 2,99% del total. En cambio, retirar dinero de un casino y depositarlo en tu monedero virtual no tiene costo.
Por lo tanto, en estos sitios no tendrás que buscar una opción alternativa, como otros monederos electrónicos, una tarjeta de crédito o una cuenta bancaria para transferencias. Claro que si, este método de pago ofrece total confianza en todas sus operaciones. No solo cuenta con más de 20 años de experiencia, sino que es líder en materia de seguridad dentro de los monederos electrónicos. Por ejemplo, con tecnologías de cifrado y medidas del más alto nivel en la protección de los fondos.
Con Neteller esto no será un problema, ya que es un método de pago muy funcional y amigable, además de seguro. Por ello son muchos los casinos online que admiten este método para poder aprovechar los bonos y ofertas exclusivas. Neteller es un método de pago popular a nivel mundial, especialmente en el rubro de los casinos online, funcionando como una billetera en línea. Cuando surgió Neteller en 1999, la plataforma se centró principalmente en el procesamiento de pagos de casinos en línea. Por mucho tiempo, la mayoría de las transacciones de este tipo se hacían a través de Neteller. Hay muchas opciones distintas para realizar transacciones que no son Neteller.
]]>En la plataforma verás un botón para realizar el proceso de registro, desde allí podrás acceder a un formulario el cual debes diligenciar con una información básica. 📌 Todos estos casinos están abiertos a jugadores de México y ofrecen soporte en español, políticas claras y bonos 100% verificables. Este tipo de casino bono de bienvenida sin depósito se activa al completar el registro y, en algunos casos, tras verificar tu identidad o correo electrónico. Por lo general los bonos con depósito tienen un límite de ganancia que establece cada casino. Por ejemplo, si el máximo de ganancia de un bono es de $3,000.00 MXN y rebasas esa cantidad no podrás cobrar el excedente. Por lo regular este tipo de bonos tiene una ganancia máxima muy inferior a otros bonos.
Por lo tanto, aunque no puedas ajustar el tamaño de la apuesta, tus ganancias potenciales son mayores de lo que serían con otro tipo de apuesta gratis. Para conocer todas las ofertas del casino online WinPot puedes ubicarte en la sección de “Promociones” y allí conseguirás todas las promociones del mes actualizadas. Elegir un casino con bono sin depósito seguro y fiable no solo depende de la cantidad que ofrezca “gratis”.
.jpg)
La volatilidad representa la frecuencia y la cantidad de dinero que paga un slot. Un juego con volatilidad alta te dará premios cuantiosos pero con menos frecuencia, mientras que los juegos de volatilidad baja te darán premios pequeños con más frecuencia. Los casinos online te regalan giros gratis después de registrarte o al realizar tu primer depósito. En algunas ocasiones están limitados a tipos de juegos específicos o títulos de ciertos proveedores.
Se pueden encontrar carretes, símbolos y líneas de pago en casi todas las slots 777. Por ejemplo, el casino online Rivalo tiene un límite de ganancia de $100 por apuesta. Para desbloquear los mejores bonos de giros gratis, es importante que conozcas estos términos y condiciones estándar. La principal forma de obtener estos bonos es uniéndose a un nuevo casino. Al utilizar los enlaces de registro que proporcionamos, todo casino con tiradas gratis sin depósito lo que tienes que hacer es crear una cuenta. Básicamente, los bonos de giros gratis no son diferentes de cualquier otra promoción de apuesta gratis.
Con un RTP del 96,50%, Gates of Olympus ofrece buenas oportunidades para ganar premios sustanciales a lo largo de tu viaje. Sin embargo, este juego es para aquellos que buscan una experiencia de juego más desafiante, ya que presenta una alta volatilidad. Esto significa que las victorias pueden ser menos frecuentes, pero cuando ocurren, tienden a ser más generosas. Las líneas de pago de Sweet Bonanza son un tanto diferentes de lo habitual, ya que el juego utiliza pagos scatter. Esto significa que puedes ganar premios siempre que aparezcan símbolos coincidentes en cualquier parte de los rodillos, lo que facilita las victorias.
Por ejemplo, si consigues un bono de 100 MXN para usar en blackjack, el dinero solo se puede usar en este juego. Para consentir a los jugadores amantes de la tecnología algunos casinos ofrecen giros gratis o saldo extra que se obtienen al descargar y registrarse en su app para distintos dispositivos móviles. La contribución de juegos se refiere a cuánto de lo jugado se acumula para cumplir con el rollover de la promoción.
El RTP es la cantidad de dinero que recibirás de un juego de casino online. Por ejemplo, la mayoría de las máquinas tragamonedas cuentan con un RTP entre 95% y 97%. Dado que el RTP se calcula en sesiones largas, cuanto más juegues es más probable que se reflejen los resultados del porcentaje indicado. Es común que los casinos con bonos bienvenida gratis sin depósito en México establezcan un límite máximo a las ganancias, por lo que incluso si superas esa cantidad no podrás retirarlo todo. De todas formas, como señalamos en la sección “Por qué usar giros gratis”, generalmente para obtener estos bonos Explosión de frutas y caramelos con sistema Cluster Pays es necesario cumplir con una serie de requisitos. Aunque técnicamente estamos hablando de tiradas gratis, eso no significa necesariamente que se puedan obtener a cambio de nada.
]]>Además, el protocolo de retiro es tan simple como dirigirte a la sección de retiros en tu cuenta y solicitar la transacción. Puedes concretar el depósito utilizando alguna de la inmensa variedad de criptomonedas de su catálogo. Son alrededor de 40 criptomonedas diferentes, siendo muchas más que las recibidas en otras plataformas de estilo de Betwinner.
.jpeg)
Si deseas un gran casino, creemos que esta no sea la mejor opción. Hay mejores alternativas con bonos más atractivos para esta sección. Esta es totalmente funcional para dispositivos iOS y Android. Además, no es necesario que te dirijas a la página web para descargar la app. Esto se debe a que es una aplicación nativa que puedes encontrar en la tienda móvil de tu dispositivo. Los mismos métodos que están disponibles para recargar pueden ser usados para realizar retiros de dinero en la plataforma.
Recuerda utilizar tu Betwinner código de promoción para que obtengas tu bono VIP. Otra promoción de bienvenida que puedes aprovechar es la de Betano. Usa el código promocional Betano México para recibir un bono exclusivo en la sección de deportes.
El código promocional Betwinner México con el que debes registrarte para obtener el bono exclusivo es BCVIP. Sin embargo, la más accesible e interesante para un recién llegado es el bono por depósito Betwinner. Con el código de registro Betwinner México BCVIP vas a mejorar el bono de bienvenida para deportes de 100% hasta €100 EUR a 100% hasta €130 / $2600 MXN. Si no quieres perder otras oportunidades con las apuestas, te invitamos que uses también código de bienvenida en 1XBET.
Si eres un apasionado por las apuestas, seguramente tengas una buena opinión de Betwinner. Hasta el momento, Betwinner no cuenta con una licencia SEGOB. Sin embargo, esto no impide que te registres, ya que en México las regulaciones a plataformas internacionales aún no han sido establecidas.
Con el bono para juegos de casino con los primeros 4 depósitos obtienes hasta €1500 EUR / $ MXN + 150 FS. También hay un bono del 100% para los jueves con el que podrás duplicar tu depósito si se realiza este día y tiene un valor superior a 10 EUR. bono por registro También hay promociones de apuestas seguras y devolución en casino. Betwinner no cuenta con licencia en México y tampoco dispone de un dominio .mx. Sin embargo, el sitio cuenta con una licencia autorizada por el gobierno de Curazao (No. 8048/JAZ) lo cual hace de este un sitio seguro y confiable. Con Betwinner se pueden generar ciertas opiniones divididas.
No podemos catalogar a su plataforma de streaming como una óptima. Realmente no posee un servicio de video con el cual visualizar el evento deportivo. A pesar de ello, la sección deportiva en vivo posee una enorme variedad de estadísticas en tiempo real. No será posible ver el partido en vivo, pero podrás darle seguimiento en directo y realizar apuestas.
]]>