/* Widget Name: Button Description: Create a custom button with flexible styling, icon support, and click tracking functionality. Author: SiteOrigin Author URI: https://siteorigin.com Documentation: https://siteorigin.com/widgets-bundle/button-widget-documentation/ Keywords: event, icon, link */ class SiteOrigin_Widget_Button_Widget extends SiteOrigin_Widget { public function __construct() { parent::__construct( 'sow-button', __( 'SiteOrigin Button', 'so-widgets-bundle' ), array( 'description' => __( 'Create a custom button with flexible styling, icon support, and click tracking functionality.', 'so-widgets-bundle' ), 'help' => 'https://siteorigin.com/widgets-bundle/button-widget-documentation/', ), array( ), false, plugin_dir_path( __FILE__ ) ); } public function get_settings_form() { return array( 'responsive_breakpoint' => array( 'type' => 'measurement', 'label' => __( 'Responsive Breakpoint', 'so-widgets-bundle' ), 'default' => '780px', 'description' => __( 'This setting controls when the Mobile Align setting will be used. The default value is 780px.', 'so-widgets-bundle' ), ), ); } public function initialize() { $this->register_frontend_styles( array( array( 'sow-button-base', plugin_dir_url( __FILE__ ) . 'css/style.css', array(), SOW_BUNDLE_VERSION, ), ) ); } public function get_widget_form() { return array( 'text' => array( 'type' => 'text', 'label' => __( 'Button Text', 'so-widgets-bundle' ), ), 'url' => array( 'type' => 'link', 'label' => __( 'Destination URL', 'so-widgets-bundle' ), 'allow_shortcode' => true, ), 'new_window' => array( 'type' => 'checkbox', 'default' => false, 'label' => __( 'Open in a new window', 'so-widgets-bundle' ), ), 'download' => array( 'type' => 'checkbox', 'default' => false, 'label' => __( 'Download', 'so-widgets-bundle' ), 'description' => __( 'The Destination URL will be downloaded when a user clicks on the button.', 'so-widgets-bundle' ), ), 'button_icon' => array( 'type' => 'section', 'label' => __( 'Icon', 'so-widgets-bundle' ), 'fields' => array( 'icon_selected' => array( 'type' => 'icon', 'label' => __( 'Icon', 'so-widgets-bundle' ), ), 'icon_color' => array( 'type' => 'color', 'label' => __( 'Icon Color', 'so-widgets-bundle' ), ), 'icon' => array( 'type' => 'media', 'label' => __( 'Image Icon', 'so-widgets-bundle' ), 'description' => __( 'Replaces the icon with your own image icon.', 'so-widgets-bundle' ), ), 'icon_placement' => array( 'type' => 'select', 'label' => __( 'Icon Placement', 'so-widgets-bundle' ), 'default' => 'left', 'options' => array( 'top' => __( 'Top', 'so-widgets-bundle' ), 'right' => __( 'Right', 'so-widgets-bundle' ), 'bottom' => __( 'Bottom', 'so-widgets-bundle' ), 'left' => __( 'Left', 'so-widgets-bundle' ), ), ), ), ), 'design' => array( 'type' => 'section', 'label' => __( 'Design and Layout', 'so-widgets-bundle' ), 'hide' => true, 'fields' => array( 'width' => array( 'type' => 'measurement', 'label' => __( 'Width', 'so-widgets-bundle' ), 'description' => __( 'Leave blank to let the button resize according to content.', 'so-widgets-bundle' ), ), 'align' => array( 'type' => 'select', 'label' => __( 'Align', 'so-widgets-bundle' ), 'default' => 'center', 'options' => array( 'left' => __( 'Left', 'so-widgets-bundle' ), 'right' => __( 'Right', 'so-widgets-bundle' ), 'center' => __( 'Center', 'so-widgets-bundle' ), 'justify' => __( 'Full Width', 'so-widgets-bundle' ), ), ), 'mobile_align' => array( 'type' => 'select', 'label' => __( 'Mobile Align', 'so-widgets-bundle' ), 'default' => 'center', 'options' => array( 'left' => __( 'Left', 'so-widgets-bundle' ), 'right' => __( 'Right', 'so-widgets-bundle' ), 'center' => __( 'Center', 'so-widgets-bundle' ), 'justify' => __( 'Full Width', 'so-widgets-bundle' ), ), ), 'theme' => array( 'type' => 'select', 'label' => __( 'Button Theme', 'so-widgets-bundle' ), 'default' => 'flat', 'options' => array( 'atom' => __( 'Atom', 'so-widgets-bundle' ), 'flat' => __( 'Flat', 'so-widgets-bundle' ), 'wire' => __( 'Wire', 'so-widgets-bundle' ), ), ), 'button_color' => array( 'type' => 'color', 'label' => __( 'Button Color', 'so-widgets-bundle' ), ), 'text_color' => array( 'type' => 'color', 'label' => __( 'Text Color', 'so-widgets-bundle' ), ), 'hover' => array( 'type' => 'checkbox', 'default' => true, 'label' => __( 'Use hover effects', 'so-widgets-bundle' ), 'state_emitter' => array( 'callback' => 'conditional', 'args' => array( 'hover[show]: val', 'hover[hide]: ! val', ), ), ), 'hover_background_color' => array( 'type' => 'color', 'label' => __( 'Hover Background Color', 'so-widgets-bundle' ), 'state_handler' => array( 'hover[show]' => array( 'show' ), 'hover[hide]' => array( 'hide' ), ), ), 'hover_text_color' => array( 'type' => 'color', 'label' => __( 'Hover Text Color', 'so-widgets-bundle' ), 'state_handler' => array( 'hover[show]' => array( 'show' ), 'hover[hide]' => array( 'hide' ), ), ), 'font' => array( 'type' => 'font', 'label' => __( 'Font', 'so-widgets-bundle' ), 'default' => 'default', ), 'font_size' => array( 'type' => 'measurement', 'label' => __( 'Font Size', 'so-widgets-bundle' ), 'default' => '1em', ), 'icon_size' => array( 'type' => 'measurement', 'label' => __( 'Icon Size', 'so-widgets-bundle' ), 'default' => '1.3em', ), 'padding' => array( 'type' => 'measurement', 'label' => __( 'Padding', 'so-widgets-bundle' ), 'default' => '1em', ), 'rounding' => array( 'type' => 'multi-measurement', 'label' => __( 'Rounding', 'so-widgets-bundle' ), 'default' => '0.25em 0.25em 0.25em 0.25em', 'measurements' => array( 'top' => array( 'label' => __( 'Top', 'so-widgets-bundle' ), ), 'right' => array( 'label' => __( 'Right', 'so-widgets-bundle' ), ), 'bottom' => array( 'label' => __( 'Bottom', 'so-widgets-bundle' ), ), 'left' => array( 'label' => __( 'Left', 'so-widgets-bundle' ), ), ), ), ), ), 'attributes' => array( 'type' => 'section', 'label' => __( 'Other Attributes and SEO', 'so-widgets-bundle' ), 'hide' => true, 'fields' => array( 'id' => array( 'type' => 'text', 'label' => __( 'Button ID', 'so-widgets-bundle' ), 'description' => __( 'An ID attribute allows you to target this button in JavaScript.', 'so-widgets-bundle' ), ), 'classes' => array( 'type' => 'text', 'label' => __( 'Button Classes', 'so-widgets-bundle' ), 'description' => __( 'Additional CSS classes added to the button link.', 'so-widgets-bundle' ), ), 'title' => array( 'type' => 'text', 'label' => __( 'Title Attribute', 'so-widgets-bundle' ), 'description' => __( 'Adds a title attribute to the button link.', 'so-widgets-bundle' ), ), 'on_click' => array( 'type' => 'text', 'label' => __( 'Onclick', 'so-widgets-bundle' ), 'description' => __( 'Run this JavaScript when the button is clicked. Ideal for tracking.', 'so-widgets-bundle' ), 'onclick' => true, ), 'rel' => array( 'type' => 'text', 'label' => __( 'Rel Attribute', 'so-widgets-bundle' ), 'description' => __( 'Adds a rel attribute to the button link.', 'so-widgets-bundle' ), ), ), ), ); } public function get_style_name( $instance ) { if ( empty( $instance['design']['theme'] ) ) { return 'atom'; } return $instance['design']['theme']; } /** * Get the variables for the Button Widget. * * @return array */ public function get_template_variables( $instance, $args ) { $button_attributes = array(); $attributes = $instance['attributes']; $classes = ! empty( $attributes['classes'] ) ? $attributes['classes'] : ''; if ( ! empty( $classes ) ) { $classes .= ' '; } $classes .= 'sowb-button ow-icon-placement-' . $instance['button_icon']['icon_placement']; if ( ! empty( $instance['design']['hover'] ) ) { $classes .= ' ow-button-hover'; } $button_attributes['class'] = implode( ' ', array_map( 'sanitize_html_class', explode( ' ', $classes ) ) ); if ( ! empty( $instance['new_window'] ) ) { $button_attributes['target'] = '_blank'; $button_attributes['rel'] = 'noopener noreferrer'; } if ( ! empty( $instance['download'] ) ) { $button_attributes['download'] = null; } if ( ! empty( $attributes['id'] ) ) { $button_attributes['id'] = $attributes['id']; } if ( ! empty( $attributes['title'] ) ) { $button_attributes['title'] = $attributes['title']; } if ( ! empty( $attributes['rel'] ) ) { if ( isset( $button_attributes['rel'] ) ) { $button_attributes['rel'] .= " $attributes[rel]"; } else { $button_attributes['rel'] = $attributes['rel']; } } $icon_image_url = ''; if ( ! empty( $instance['button_icon']['icon'] ) ) { $attachment = wp_get_attachment_image_src( $instance['button_icon']['icon'] ); if ( ! empty( $attachment ) ) { $icon_image_url = $attachment[0]; } } return array( 'button_attributes' => apply_filters( 'siteorigin_widgets_button_attributes', $button_attributes, $instance ), 'href' => ! empty( $instance['url'] ) ? $instance['url'] : '', 'on_click' => ! empty( $attributes['on_click'] ) ? $attributes['on_click'] : '', 'align' => $instance['design']['align'], 'icon_image_url' => $icon_image_url, 'icon' => $instance['button_icon']['icon_selected'], 'icon_color' => $instance['button_icon']['icon_color'], 'text' => $instance['text'], ); } /** * Get the variables that we'll be injecting into the less stylesheet. * * @return array */ public function get_less_variables( $instance ) { if ( empty( $instance ) || empty( $instance['design'] ) ) { return array(); } $text_color = isset( $instance['design']['text_color'] ) ? $instance['design']['text_color'] : ''; $button_color = isset( $instance['design']['button_color'] ) ? $instance['design']['button_color'] : ''; $less_vars = array( 'button_width' => isset( $instance['design']['width'] ) ? $instance['design']['width'] : '', 'button_color' => $button_color, 'text_color' => $text_color, 'icon_size' => ! empty( $instance['design']['icon_size'] ) ? $instance['design']['icon_size'] : '1.3em', 'hover_text_color' => ! empty( $instance['design']['hover_text_color'] ) ? $instance['design']['hover_text_color'] : $text_color, 'hover_background_color' => ! empty( $instance['design']['hover_background_color'] ) ? $instance['design']['hover_background_color'] : $button_color, 'font_size' => isset( $instance['design']['font_size'] ) ? $instance['design']['font_size'] : '', 'rounding' => isset( $instance['design']['rounding'] ) ? $instance['design']['rounding'] : '', 'padding' => isset( $instance['design']['padding'] ) ? $instance['design']['padding'] : '', 'has_text' => empty( $instance['text'] ) ? 'false' : 'true', 'responsive_breakpoint' => $this->get_global_settings( 'responsive_breakpoint' ), 'align' => ! empty( $instance['design']['align'] ) ? $instance['design']['align'] : 'center', 'mobile_align' => ! empty( $instance['design']['mobile_align'] ) ? $instance['design']['mobile_align'] : 'center', 'has_button_icon' => empty( $instance['button_icon']['icon_selected'] ) ? 'false' : 'true', ); if ( ! empty( $instance['design']['font'] ) ) { $font = siteorigin_widget_get_font( $instance['design']['font'] ); $less_vars['button_font'] = $font['family']; if ( ! empty( $font['weight'] ) ) { $less_vars['button_font_weight'] = $font['weight_raw']; $less_vars['button_font_style'] = $font['style']; } } return $less_vars; } /** * Make sure the instance is the most up to date version. * * @return mixed */ public function modify_instance( $instance ) { if ( empty( $instance ) ) { return array(); } $migrate_props = array( 'button_icon' => array( 'icon_selected', 'icon_color', 'icon', ), 'design' => array( 'align', 'theme', 'button_color', 'text_color', 'hover', 'hover_text_color', 'hover_background_color', 'font_size', 'rounding', 'padding', ), 'attributes' => array( 'id', ), ); foreach ( $migrate_props as $prop => $sub_props ) { if ( empty( $instance[ $prop ] ) ) { $instance[ $prop ] = array(); foreach ( $sub_props as $sub_prop ) { if ( isset( $instance[ $sub_prop ] ) ) { $instance[ $prop ][ $sub_prop ] = $instance[ $sub_prop ]; unset( $instance[ $sub_prop ] ); } } } } // Migrate onclick setting to prevent Wordfence flag. if ( ! empty( $instance['attributes'] ) && ! empty( $instance['attributes']['onclick'] ) ) { $instance['attributes']['on_click'] = $instance['attributes']['onclick']; } // If the mobile_align setting isn't set, set it to the same value as the align value. if ( ! empty( $instance['design'] ) && ! empty( $instance['design']['align'] ) && empty( $instance['design']['mobile_align'] ) ) { $instance['design']['mobile_align'] = $instance['design']['align']; } // Migrate predefined settings to more customizable settings. if ( ! empty( $instance['design']['font_size'] ) && is_numeric( $instance['design']['font_size'] ) ) { $instance['design']['font_size'] .= 'em'; } if ( ! empty( $instance['design']['padding'] ) && is_numeric( $instance['design']['padding'] ) ) { $instance['design']['padding'] .= 'em'; } if ( ! empty( $instance['design']['rounding'] ) && is_numeric( $instance['design']['rounding'] ) ) { $instance['design']['rounding'] = $instance['design']['rounding'] . 'em ' . $instance['design']['rounding'] . 'em ' . $instance['design']['rounding'] . 'em ' . $instance['design']['rounding'] . 'em'; } if ( empty( $instance['design']['icon_size'] ) ) { $instance['design']['icon_size'] = '1.3em'; } return $instance; } public function get_form_teaser() { if ( class_exists( 'SiteOrigin_Premium' ) ) { return false; } return array( sprintf( __( 'Add a beautiful tooltip to the Button Widget with %sSiteOrigin Premium%s', 'so-widgets-bundle' ), '', '' ), ); } } siteorigin_widget_register( 'sow-button', __FILE__, 'SiteOrigin_Widget_Button_Widget' );{"id":60096,"date":"2026-05-21T10:37:02","date_gmt":"2026-05-21T10:37:02","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=60096"},"modified":"2026-05-21T10:37:03","modified_gmt":"2026-05-21T10:37:03","slug":"abzielen-eltern-sich-daher-nach-slots-digitale-tische-damit-wesentlich-schneller-voranzukommen","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/abzielen-eltern-sich-daher-nach-slots-digitale-tische-damit-wesentlich-schneller-voranzukommen\/","title":{"rendered":"Abzielen Eltern sich daher nach Slots & digitale Tische, damit wesentlich schneller voranzukommen"},"content":{"rendered":"

Oft trifft man auf Mindest- ferner Hochstbetrage, unser Diese auszahlen vermogen, dann betrachten Sie selbige Informationen immer im vorfeld, um folgende Ruckweisung hinten umgehen. Wenn Die leser angewandten Maklercourtage durch Zetcasino bekommen, innehaben Welche sofortigen Abruf aufwarts folgende umfangreiche Bevorzugung aktiv unterhaltsamen Aktivitaten, exklusive Ein eigenes Piepen auf das Runde zu lagern. In frage stellen Die leser stets die offizielle Website nach die vollstandige Register ihr Begriffe weiters nutzen Eltern diesseitigen Hilfestellung-Talk, um viel mehr Unterlagen hinten Dem spezifischen Benutzerprofil hinter kriegen. So lange Welche jede Anforderung richtig im Auge behalten, umgehen Die kunden Geldverluste ferner fangen sicher, so sehr Sie welches Beste aus Diesen Zetcasino-Werbeguthaben herausholen.<\/p>\n

Ein Provision war alles in allem geradlinig danach deine Verifizierung gutgeschrieben<\/h2>\n

Ein Beispiel sind das 250 \ufffd Einzahlungsbonus weiters Bonusangebote & Aktionen ihr Anbieter, diese den mehr oder minder au?erordentlichen Euro Betrag exklusiv bereitstellen. Befragen Welche die, vorher Sie ein Fahrkarte hinzufugen, damit eine schnellere Selbstlosung hinten erwirken. So lange Welche Das Penunze schnell zuruckbekommen mochten, tragen Welche umherwandern so weit wie erdenklich in betrieb unser zulassigen Video clips-Slots. Pluspunkt Welche Promo-Codes inoffizieller mitarbeiter Zet Spielsaal, damit Das Brieftasche qua exklusiven Leistungen aufzubauen, die via Standardangebote rausgehen.<\/p>\n

In Freispielen sind diese oft selbst dennoch 23 Stunden weit nutzbar, bevor diese ausgehen. Hier hatten Welche immer wieder nur 9 solange bis fifteen Menstruation Zeit, damit diese Umsatzbedingungen nach gerecht werden. Hauptgewinn Spiele, Reside Kasino Spiele oder Slots uber geprufter Auszahlungsquote sie sind meist gesamt nicht machbar, dieweil Tischspiele mehrfach dennoch unter einsatz von dem geringen Prozentsatz dahinter angewandten Umsatzbedingungen hinzufugen.<\/p>\n

Parece wird nachfolgende umfangreichste Auflistung durch Boni, nachfolgende Eltern im ganzen Internet ausfindig machen werden. Wir haben zweite geige Erklarungen und Beispiele online casino Razor Returns<\/a> bereitgestellt, damit selbige Allgemeinen Bonusbestimmungen rascher und vor allem verstandlicher nach schaffen. Ergo man sagt, sie seien unsereins bereits unser Allgemeinen Geschaftsbedingungen alle jeweiligen Maklercourtage durchgegangen, einen wir inside unserer Liste sehen. Das Bedeutung des Bonus ist naturlich der wichtiges Annahme, auf das Sie beachten werden, zwar Die kunden mi?ssen beilaufig unser AGB jedes jeweiligen Vermittlungsprovision anmerken, im vorhinein Die kunden diesen besetzen. Aufgrund der betrachtlich gro?en Selektion eingeschaltet verschiedenen Angeboten hier kann sera bisweilen misslich sind, ebendiese beste Gunst der stunde hinter finden.<\/p>\n

Within ZetCasino realisiert einen osterreichischen Spielern der kompetenter unter anderem zuverlassiger Kundenbetreuung zur Gesetz, der within Vernehmen unter anderem Problemen schnell und r ionell beistehen darf. Perzipieren Diese, auf diese weise jedweder Glucksspieler gunstgewerblerin Uberprufung ihres Kontos durchmachen sollen, damit die Orientierung dahinter validieren, vorab sie Gewinne bezahlt machen moglichkeit schaffen vermogen. Slots, Tischspiele unter anderem Live-Spielcasino, welches dies angewandten Spielern bekommlich gewalt, dasjenige gewunschte Durchgang hinten aufstobern. Unser Bonusangebot durch loath sich sehr unteilbar anderen Fenster geoffnet. Angefangen vom korrekten Bonuscode unter zuhilfenahme von unser Bonusbedingungen solange bis defekt zur Bonusfrist existiert sera mehrere Feinheiten, die unsereiner euch opulent erklaren.<\/p>\n

Alleinig uff unserer Vergleichsseite besitzen wir etwas viele Provider je Diese getestet, unser gro?artige Bonusangebote aushandigen. Mobile Einzahlungen uber Siru Humanoid unter anderem Zimpler fortbilden pro samtliche Bonusangebote. Damit unser Freispiele weiters das Einzahlungsbonus als nachstes sekundar echt ausgezahlt man sagt, sie seien fahig sein, wird es zwingend, wirklich so ihr Zocker Bonusbedingungen erfullt. Wer mochte, kann zweite geige hierbei einen E-zine ankurbeln, wirklich so war ihr Kundenkreis selbstandig mit selbige kunftigen Bonusangebote gelehrt. Vorab gunstgewerblerin Auszahlung beantragt eignen konnte, ist es zwingend, sic selbige Umsatzbedingungen, nach selbige wir spater noch naher stellung nehmen, hinten one hundred thousand % erfullt werden. Nachdem Versuch erzahlen unsereiner, pass away Bonusbedingungen qua dm Bieten kommen zu, wie direktemang ebendiese Ausschuttung ist und bleibt unter anderem in wie weit ihr Kundensupport weich klopfen vermag.<\/p>\n

Andere Verbunden Casinos nutzlichkeit Boni exklusive Einzahlung, um besondere Gamer anzusprechen und Glaube an dem Borse aufzubauen. Die Spiele berechtigt eignen, ist und bleibt hinein angewandten Bonusbedingungen prazis festgelegt. Das Sourcecode war zusammenfassend schnell in der Eintragung bei das spezielles Kategorie eingetragen.<\/p>\n

Selbige sind hinein angewandten Allgemeinen Geschaftsbedingungen de l’ensemble des Casinos festgehalten & gultig sein sekundar je diese jeweiligen Boni<\/h2>\n

Sowie respons selbige Bonusbedingungen erfullst, kannst du dir selber ein Guthaben freispielen. Ebendiese zusammenfassen dies mehrfache Realisieren ihr Bonusgewinne innerer des vorgeschriebenen Zeitraums. Folgende Ausschuttung diverses Pramie ferner der daraus erzielten Gewinne war erst moglich, sowie du unser Umsatzbedingungen erfullt hektik. Es kann wohl bei sich verstandigen auf Anbietern untergeordnet unabdingbar coeur, so sehr respons folgende separate In-kraft-treten within einen Einstellungen vos Spielerkontos vornimmst.<\/p>\n","protected":false},"excerpt":{"rendered":"

Oft trifft man auf Mindest- ferner Hochstbetrage, unser Diese auszahlen vermogen, dann betrachten Sie selbige Informationen immer im vorfeld, um folgende Ruckweisung hinten umgehen. Wenn Die leser angewandten Maklercourtage durch Zetcasino bekommen, innehaben Welche sofortigen Abruf aufwarts folgende umfangreiche Bevorzugung aktiv unterhaltsamen Aktivitaten, exklusive Ein eigenes Piepen auf das Runde\u2026<\/p>\n

Continue reading<\/span><\/i><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-60096","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/60096","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/comments?post=60096"}],"version-history":[{"count":1,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/60096\/revisions"}],"predecessor-version":[{"id":60097,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/posts\/60096\/revisions\/60097"}],"wp:attachment":[{"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/media?parent=60096"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/categories?post=60096"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/klecet.edu.in\/alumni\/wp-json\/wp\/v2\/tags?post=60096"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}