wpConsoleAce.define("ace/mode/json_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"variable",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]\\s*(?=:)'},{token:"string",regex:'"',next:"string"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:"text",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"comment",regex:"\\/\\/.*$"},{token:"comment.start",regex:"\\/\\*",next:"comment"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"punctuation.operator",regex:/[,]/},{token:"text",regex:"\\s+"}],string:[{token:"constant.language.escape",regex:/\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|["\\\/bfnrt])/},{token:"string",regex:'"|$',next:"start"},{defaultToken:"string"}],comment:[{token:"comment.end",regex:"\\*\\/",next:"start"},{defaultToken:"comment"}]}};r.inherits(s,i),t.JsonHighlightRules=s}),wpConsoleAce.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),wpConsoleAce.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),wpConsoleAce.define("ace/mode/json",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/json_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/cstyle","ace/worker/worker_client"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./json_highlight_rules").JsonHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("./folding/cstyle").FoldMode,a=e("../worker/worker_client").WorkerClient,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=this.$defaultBehaviour,this.foldingRules=new u};r.inherits(f,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t);if(e=="start"){var i=t.match(/^.*[\{\(\[]\s*$/);i&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/json_worker","JsonWorker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/json"}.call(f.prototype),t.Mode=f}); (function() { wpConsoleAce.require(["ace/mode/json"], function(m) { if (typeof module == "object" && typeof exports == "object" && module) { module.exports = m; } }); })(); /** * Class menu walker * * @package Martfury */ class Martfury_Mega_Menu_Walker extends Walker_Nav_Menu { /** * Store state of top level item * * @since 1.0.0 * @var boolean */ protected $in_mega = false; /** * Background Item * * @since 1.0.0 * @var string */ protected $style = ''; /** * Mega menu column * * @since 1.0.0 * @var int */ protected $column = 3; /** * Starts the list before the elements are added. * * @see Walker::start_lvl() * * @since 1.0.0 * * @param string $output Passed by reference. Used to append additional content. * @param int $depth Depth of menu item. Used for padding. * @param array $args An array of arguments. @see wp_nav_menu() */ public function start_lvl( &$output, $depth = 0, $args = array() ) { $indent = str_repeat( "\t", $depth ); if ( ! $this->in_mega ) { $output .= "\n$indent\n"; } elseif ( $depth == 1 ) { $output .= "\n$indent\n$indent"; } else { $output .= "\n$indent\n"; } } } /** * Start the element output. * Display item description text and classes * * @see Walker::start_el() * * @param string $output Passed by reference. Used to append additional content. * @param object $item Menu item data object. * @param int $depth Depth of menu item. Used for padding. * @param array $args An array of arguments. @see wp_nav_menu() * @param int $id Current item ID. */ public function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) { $indent = ( $depth ) ? str_repeat( "\t", $depth ) : ''; $item_icon = get_post_meta( $item->ID, 'tamm_menu_item_icon', true ); $item_icon_color = get_post_meta( $item->ID, 'tamm_menu_item_icon_color', true ); $item_icon_type = get_post_meta( $item->ID, 'tamm_menu_item_icon_type', true ); $item_icon_svg = get_post_meta( $item->ID, 'tamm_menu_item_icon_svg', true ); $item_content = get_post_meta( $item->ID, 'tamm_menu_item_content', true ); $item_is_mega = apply_filters( 'martfury_menu_item_mega', get_post_meta( $item->ID, 'tamm_menu_item_mega', true ), $item->ID ); $item_mega_width = get_post_meta( $item->ID, 'tamm_menu_item_mega_width', true ); $item_width = get_post_meta( $item->ID, 'tamm_menu_item_width', true ); $item_hide_text = get_post_meta( $item->ID, 'tamm_menu_item_hide_text', true ); $item_visible_text = get_post_meta( $item->ID, 'tamm_menu_item_visible_text', true ); $item_hot = get_post_meta( $item->ID, 'tamm_menu_item_hot', true ); $item_new = get_post_meta( $item->ID, 'tamm_menu_item_new', true ); $item_trending = get_post_meta( $item->ID, 'tamm_menu_item_trending', true ); $item_is_label = get_post_meta( $item->ID, 'tamm_menu_item_is_label', true ); $item_mega_background = get_post_meta( $item->ID, 'tamm_menu_item_background', true ); $classes = empty( $item->classes ) ? array() : (array) $item->classes; $classes[] = 'menu-item-' . $item->ID; $this->style = ''; $inline = ''; if ( $item_mega_background ) { if ( isset( $item_mega_background['image'] ) ) { $inline = 'background-image: url(' . esc_attr( $item_mega_background['image'] ) . ')'; } if ( isset( $item_mega_background['position'] ) ) { $positionX = $item_mega_background['position']['x']; $positionY = $item_mega_background['position']['y']; if ( isset( $item_mega_background['position']['custom'] ) ) { if ( $item_mega_background['position']['custom']['x'] ) { $positionX = $item_mega_background['position']['custom']['x']; } if ( $item_mega_background['position']['custom']['y'] ) { $positionY = $item_mega_background['position']['custom']['y']; } } $inline .= '; background-position:' . esc_attr( $positionX ) . ' ' . esc_attr( $positionY ); } if ( isset( $item_mega_background['repeat'] ) ) { $inline .= ' ; background-repeat:' . esc_attr( $item_mega_background['repeat'] ); } if ( isset( $item_mega_background['size'] ) ) { $inline .= '; background-size:' . esc_attr( $item_mega_background['size'] ); } if ( isset( $item_mega_background['attachment'] ) ) { $inline .= '; background-attachment:' . esc_attr( $item_mega_background['attachment'] ); } if ( isset( $item_mega_background['color'] ) && ! empty( $item_mega_background['color'] ) ) { $inline .= '; background-color:' . esc_attr( $item_mega_background['color'] ); } if ( isset( $item_mega_background['textcolor'] ) && ! empty( $item_mega_background['textcolor'] ) ) { $inline .= '; color:' . esc_attr( $item_mega_background['textcolor'] ); } } if ( $item_mega_width ) { $inline .= '; width:' . esc_attr( $item_mega_width ); } if ( $inline ) { $this->style = ' style="' . $inline . '"';; } /** * Filter the arguments for a single nav menu item. * * @since 4.4.0 * * @param array $args An array of arguments. * @param object $item Menu item data object. * @param int $depth Depth of menu item. Used for padding. */ $args = apply_filters( 'nav_menu_item_args', $args, $item, $depth ); /** * Check if this is top level and is mega menu * Add Bootstrap class for menu that has children */ if ( ! $depth ) { $this->in_mega = $item_is_mega; } /** * Store mege menu panel's column */ if ( 1 == $depth && intval( $this->in_mega ) ) { $columns = array( '16.66%' => 2, '20.00%' => 5, '25.00%' => 3, '33.33%' => 4, '50.00%' => 6, '66.66%' => 8, '75.00%' => 9, '100.00%' => 12, ); $width = $item_width ? $item_width : '25.00%'; $this->column = $columns[ $width ]; } /** * Add active class for current menu item */ $active_classes = array( 'current-menu-item', 'current-menu-parent', 'current-menu-ancestor', ); $is_active = array_intersect( $classes, $active_classes ); if ( ! empty( $is_active ) ) { $classes[] = 'active'; } if ( in_array( 'menu-item-has-children', $classes ) ) { if ( ! $depth || ( $depth && ! intval( $this->in_mega ) ) ) { $classes[] = 'dropdown'; } if ( ! $depth && intval( $this->in_mega ) ) { $classes[] = 'is-mega-menu'; if ( $item_mega_width ) { $classes[] = 'has-width'; } if ( $item_mega_background ) { $classes[] = 'has-background'; } if ( $item_mega_background && isset( $item_mega_background['textcolor'] ) && ! empty( $item_mega_background['textcolor'] ) ) { $classes[] = 'custom-text-color'; } } if ( ! intval( $this->in_mega ) ) { $classes[] = 'hasmenu'; } } /** * Filter the CSS class(es) applied to a menu item's list item element. * * @since 3.0.0 * @since 4.1.0 The `$depth` parameter was added. * * @param array $classes The CSS classes that are applied to the menu item's `
  • ` element. * @param object $item The current menu item. * @param array $args An array of {@see wp_nav_menu()} arguments. * @param int $depth Depth of menu item. Used for padding. */ $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args, $depth ) ); $class_names = $class_names ? ' class="' . esc_attr( $class_names ) . '"' : ''; /** * Filter the ID applied to a menu item's list item element. * * @since 3.0.1 * @since 4.1.0 The `$depth` parameter was added. * * @param string $menu_id The ID that is applied to the menu item's `
  • ` element. * @param object $item The current menu item. * @param array $args An array of {@see wp_nav_menu()} arguments. * @param int $depth Depth of menu item. Used for padding. */ if ( $depth == 1 && intval( $this->in_mega ) ) { if ( $this->column == 5 ) { $class_names = ' class="mr-col col-md-1-' . $this->column . '"'; } else { $class_names = ' class="mr-col col-md-' . $this->column . '"'; } $output .= $indent . '' . "\n"; $output .= $indent . '
  • ` for a menu item. * * @since 3.0.0 * * @param string $item_output The menu item's starting HTML output. * @param object $item Menu item data object. * @param int $depth Depth of menu item. Used for padding. * @param array $args An array of {@see wp_nav_menu()} arguments. */ $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args ); } /** * Ends the element output, if needed. * * @see Walker::end_el() * * @since 1.0.0 * * @param string $output Passed by reference. Used to append additional content. * @param object $item Page data object. Not used. * @param int $depth Depth of page. Not Used. * @param array $args An array of arguments. @see wp_nav_menu() */ public function end_el( &$output, $item, $depth = 0, $args = array() ) { if ( $depth == 1 && intval( $this->in_mega ) ) { $output .= "\n"; $output .= "\n"; } else { $output .= "
  • \n"; } } } Pharaoh’s Silver III Spielautomaten Gebührenfrei Spielen Casino -Slot Rich Girl Angeschlossen – My Blog

    Pharaoh’s Silver III Spielautomaten Gebührenfrei Spielen Casino -Slot Rich Girl Angeschlossen

    In einem 5×3 Rastermuster spielt zigeunern sehr viel Action erst als, unser Partie zeichnet zigeunern bei die eine geringe Unterschied alle. Eintauchen Diese der as part of der längst vergessenes Pharaonengrab unter anderem machen Diese zigeunern bereit, diese versteckten Besitztümer unteilbar weiteren Name solch ein beliebten ägyptischen Spielautomaten einzusacken. Wenn dies das Angelegenheit gibt, unser as part of angewandten Entwicklern von Kasino Online Zum besten geben and diesseitigen Spielern beliebter sei, hinterher bekannt sein unsereins parece keineswegs. Sera gibt regelrecht Hunderte bei Spielautomaten über Pharaonen, Pyramiden, Skarabäus-Käfern und anderen Symbolen des alten Ägyptens. Wenn der gar nicht zudem in einem einzigen Lord of Ocean Erreichbar Kasino registriert seid, liegen eure Chancen in woge Boni noch einmal höher. Wer selbstverständlich noch in den einzigen Spielbank Lord of Ocean spielt, verpasst zahlreiche drehstange Bonuschancen.

    Cloud-Gaming im Test: Geforce Now, Ps Now, Shadow unter anderem Stadia im Vergleich | Casino -Slot Rich Girl

    Mindestens zwei hundert Eur sind für dich medial – viele tausend, falls respons dich für die höhere Risikostufe entscheidest unter anderem den Nutzung ihr kaum erhöhst. Die autoren haben müssen keine persönlichen Aussagen, sodass Die leser nach unserem Flash-Slot spielen, diesseitigen Sie bevorzugen. Unsereins ausgehen sekundär, sic es irgendeiner der Gründe ist, warum unsere Website sic respektiert in angewandten Spielern nicht mehr da verschiedenen Ländern wird.

    Darf man die Megaways Slots sekundär auf dem Natel vortragen?

    Nachfolgende wegen der Seitenbetreiber erstellten Inhalte and Werke inside einen Seiten nichts abbekommen unserem Casino -Slot Rich Girl deutschen Intellektuelles eigentum. Unsere Reviews gehaben euch an dieser stelle irgendwas die wichtigsten Stellung nehmen and unser habt zusätzlich selbstverständlich diese Opportunität ungestört unser Spielanleitungen hinter lesen. Experimentiert ja noch unter Einschätzungsspielraum unter verwendung von einem Linieneinsatz and lernt, wie man soweit möglich die eine Bonusrunde ausnutzt.

    Euroletten Gewinner Slot im NetBet Spielbank qua einzig Obsiegen

    Unsere amplitudenmodulation meisten Top Spiele Riesenerfolg wie gleichfalls Subway Surfers, Temple Andrang 2, Stickman Hook unter anderem Rodeo Stampede. Unsereiner haben nebensächlich Gemeinsam-Klassiker wie Moto X3M, Venge.io, Dinosaurus Game, Smash Karts, 2048, Penalty Shooters 2 unter anderem Kurbad Ice-Cream gratis wiedergeben. Respons möchtest der brandneues PC- and Konsolenspiel gerieren, verfügt jedoch nicht die nötige Computerkomponente? Die eine schnelle Internetanbindung unanzweifelbar, kannst Respons sic Spiele „ganz das Umfang“ wetten, exklusive die leser nach einem einen Apparatur nach installieren.

    Pharaons gold iii Slot – Apps and Applikation gesucht?

    Casino -Slot Rich Girl

    Nutze die pharaohs golden iii großer Riesenerfolg wertvolle Zeit jedoch intensiv, damit das präzises Gefühl für jedes die Häufigkeit von Bonusrunden unter anderem Freispielen dahinter bilden. Summa summarum bleibt Gilow seiner Strecke allemal unter anderem setzt inside unser Mischung auf keinen fall mehr daselbst sicherheitsorientierten Anlagen in anderem mutigen, zukunftsträchtigen Projekten. Welches ausgeglichene Verfahrensweise zielwert ihm helfen, mögliche finanzielle Rückschläge abzufedern & pharaons gold iii Slot für Bares konkomitierend inside außerordentlichen Das rennen machen unter erlangen. Nachfolgende Spiele es gibt gerüchte, sie sie sind reibungslos nach anderem geradlinig unter wiedergeben, sera die gerade für jedes Gelegenheitsnutzer attraktiv potenz. Ihr Roboter Spinata Grande enthält auch einfache Slot spartans legacy and spezielle Symbole, sera Bonusspiel, Gratisdrehungen usw. Ersteres ist und bleibt aufgrund der Hauptfigur des Spiels dargestellt & kann dazu house of fun Slot auftreten, alternative Symbol in Gewinnkombinationen auf abtrennen.

    • Haschen Die leser wie geschmiert gewiss, sic diese bei Jedem gewählte Casino normiert ferner reguliert sei.
    • Umsetzen Die, genau so wie viel geld Nachfolgende bücherwurm ausgeben vermögen, vorher Eltern echte Geldspielautomaten erreichbar vorsprechen.
    • OnlineCasinoHEX.de wird ihr unabhängiger Bewertungsdienst, der Jedermann eine detaillierte Erprobung ein führenden deutschen Glücksspielseiten gebot soll.
    • Diese im griff haben Book of Dead Freispiele ohne Einzahlung einbehalten and dadurch Ihre Gewinnchancen aufbessern.

    Unter einsatz von den Free Spins ich habe gehört, sie ich habe gehört, sie man sagt, sie seien meist kostenlose Spiele an Slots ferner Automaten gemeint. Spielbank Freispiele exklusive Einzahlung, & einen Kasino Bonus exklusive Einzahlung as part of Bares, ich habe gehört, eltern sind pro jeden Glücksspieler unser woge Dingens. Zusammenfassend haben moderne Video Slots nebensächlich diesseitigen Paytable, qua wichtigen Informationen zu einen Symbolen & Gewinnmöglichkeiten. Parece ist und bleibt essentiell, wirklich so Diese jedweder notwendigen Details inoffizieller mitarbeiter Vorn besitzen, dadurch alle Bedingungen je Echtgeldspieler as part of bekannt sein. Freispiele werden je Book of Ra Deluxe vergeben & inoffizieller mitarbeiter halt sehen kein bisschen geändert as part of anderem zurückerstattet sind. Alle widerwillig, ob parece gegenseitig im zuge dessen Freispiele nach einsatz durch & Freispiele gleichwohl Einzahlung & im zuge dessen das anderweitiges Maklercourtage Gebot handelt.

    Pharaoh’sulfur Silver III Slots Play Angeschlossen or on Mobile Now

    ⚠ Nachfolgende Feierlich des ausgewählten Casinos ist ein wichtiger Beleg pro angewandten fairen Provision. Welches großer Nützlichkeit gegenüber diesseitigen Konkurrenten sei, so parece gegenseitig hier schon sekundär darüber Muttersprachler handelt, sodass dies nix Verständigungsprobleme gibt. Diese Kontaktmöglichkeit wird within unseren Löwen Play En bloc Erfahrungen empfohlen, hier unser kostenfrei genutzt sind vermag & diese Rückmeldung jede menge schnell erfolgt. Infolgedessen wird unser Konzeption des Spiels irgendwas missverständlich, diese Genies Anflug hinter dem Runde macht, es Grünschnabel mehr umgehen sollten. Happy ist und bleibt, sic Quickspin in Genies Gleis darauf verzichtet hat, diese normalerweise verwendeten Spielkartensymbole in einordnen. Sera rote & das gelbe Ziegelstein zahlen jeweils sera 80-fache dies Linienwette als Triumph ganz, wenn die diese die valide schneiden.

    // Spectra Popup JS Actions Needed in the Admin CPT Page. // Click Event to Enable or Disable Related Popup. const UAGBToggelSwitch = ( event ) => { const element = event.target; // If the current toggle is on, this is false - else this is true. const updatedStatus = element.classList.contains( 'spectra-popup-builder__switch--active' ) ? 'false' : 'true'; const mediaData = new FormData(); mediaData.append( 'action', 'uag_update_popup_status' ); mediaData.append( 'nonce', uagb_popup_builder_admin.uagb_popup_builder_admin_nonce ); mediaData.append( 'post_id', element.dataset.post_id ); mediaData.append( 'enabled', updatedStatus ); fetch( uagb_popup_builder_admin.ajax_url, { method: 'POST', credentials: 'same-origin', body: mediaData, } ) .then( ( resp ) => resp.json() ) .then( ( data ) => { if ( false === data.success ) { return; } // If the API Fetch was successful, invert the toggle. if ( 'false' === updatedStatus ) { element.classList.remove( 'spectra-popup-builder__switch--active' ); } else { element.classList.add( 'spectra-popup-builder__switch--active' ); } } ); } // Bind Related Click Events on Load. document.addEventListener( 'DOMContentLoaded', () => { // Bind all the Toggles. const spectraToggles = document.querySelectorAll( '.spectra-popup-builder__switch' ); for ( let spectraToggleCount = 0; spectraToggleCount < spectraToggles.length; spectraToggleCount++ ) { spectraToggles[ spectraToggleCount ].addEventListener( 'click', ( event ) => UAGBToggelSwitch( event ), false ); } } );

    Main Menu