From 0a054cc97204f5172ecb06da1d551b285b8869e0 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 30 Oct 2026 16:24:54 +0000 Subject: [PATCH 1/2] Web 0.13.5: Anweisungen ohne Klasse im Code gelb, Pseudocode-Schleifen ganz farbig Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Ugz28U8wYCXi1s1XAhMW6n --- CHANGELOG.md | 1 + web/package-lock.json | 4 +- web/package.json | 2 +- web/prog.png | Bin 0 -> 225010 bytes web/src/ui/javaEditor.ts | 35 +- .../{index-DpeMIv3e.js => index-B50bSr2K.js} | 2452 ++++++++--------- ...tApp-C6ZS5O9z.js => objectApp-CAsum0qy.js} | 8 +- ...Zip-vbJDEaKJ.js => projectZip-CGO1ec3D.js} | 2 +- ...obot3d-s_ti3AsW.js => robot3d-io7_npI9.js} | 2 +- website/app/index.html | 2 +- 10 files changed, 1270 insertions(+), 1238 deletions(-) create mode 100644 web/prog.png rename website/app/assets/{index-DpeMIv3e.js => index-B50bSr2K.js} (94%) rename website/app/assets/{objectApp-C6ZS5O9z.js => objectApp-CAsum0qy.js} (99%) rename website/app/assets/{projectZip-vbJDEaKJ.js => projectZip-CGO1ec3D.js} (99%) rename website/app/assets/{robot3d-s_ti3AsW.js => robot3d-io7_npI9.js} (99%) diff --git a/CHANGELOG.md b/CHANGELOG.md index f72da106..5a452490 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ The format is loosely inspired by Keep a Changelog. ### Added +- **Web 0.13.5, statements without class are coloured too:** when Programmieren shows the code without `class` and `main` (e.g. „Aufstehen;“, „Zähne putzen;“ in lesson 1), the statements now sit in a yellow block like a method, matching the yellow statements in the Struktogramm; loops and branches inside keep their own colours, and a loop with pseudocode condition (`while (Tee noch zu heiß) {`) is coloured up to its closing brace. - **Web 0.13.3, Struktogramm and Elemente in the code block colours:** the Struktogramm uses the same soft colours as the blocks in Programmieren: statements yellow like the method, loops (for, while, do-until, endless) pink, Verzweigung and Fallauswahl blue; elements inside a loop or branch take its colour, so code and diagram side by side show the matching blocks at a glance. The boxes in „Elemente“ get the same colours. The setting is now called „Blöcke farbig“ and switches code, diagram and Elemente together; a colour stored in the file still wins, and exports stay white. Lesson 1 uses the same colours (statements yellow, branch blue, loop pink; the sequence itself has no colour, it is the row of statements). - **Web 0.13.1, divider between Struktogramm and Programmieren always draggable:** with four open columns (lessons, Struktogramm, Programmieren, „mBot2 live“) the diagram sat at its minimum width and the divider barely moved. Dragging it now first uses the space of the two columns next to it, then takes width from „mBot2 live“, then from the lessons and files columns (down to their minimum widths). Works in both orders after ⇄; all widths are remembered. - **Web 0.13.0, VisuBot simulation in the „mBot2 live“ window:** in the VisuBot world „Simulation starten“ no longer shows a second 3D world in the simulation column; the mBot2 of the simulation drives in the „mBot2 live“ window instead (title „🤖 Simulation“, world buttons and distance/line values there, its own ▶ rests until the simulation ends). The window opens by itself for the simulation and closes again afterwards if it was closed before; if it is closed during the simulation, the 3D world goes back to the simulation column. Controls, variables, console, sensor sliders and the real mBot2 stay in the simulation column. diff --git a/web/package-lock.json b/web/package-lock.json index 9035f0a5..819e5a5c 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -1,12 +1,12 @@ { "name": "visustruct-web", - "version": "0.13.3", + "version": "0.13.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "visustruct-web", - "version": "0.13.3", + "version": "0.13.5", "dependencies": { "@codemirror/autocomplete": "^6.20.4", "@codemirror/commands": "^6.11.1", diff --git a/web/package.json b/web/package.json index 6b1838af..2d2b6874 100644 --- a/web/package.json +++ b/web/package.json @@ -1,7 +1,7 @@ { "name": "visustruct-web", "private": true, - "version": "0.13.3", + "version": "0.13.5", "type": "module", "scripts": { "dev": "vite", diff --git a/web/prog.png b/web/prog.png new file mode 100644 index 0000000000000000000000000000000000000000..d1cce0639f3bd2ef7e74010b740961ca72c4f6db GIT binary patch literal 225010 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�wqp-qNV&klJc&n|}K0r7EU}3b{U9Nk2 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ξ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 ojcsn~i = { TryStatement: 'try', } +/** + * Zeile der `}`, die den Block schließt, der in der Zeile von `pos` mit `{` beginnt. Bei Pseudocode + * (`while (Tee noch zu heiß) {`) bricht der Java-Parser den Block nach der ersten Zeile ab; so reicht der Kasten + * trotzdem bis zur schließenden Klammer wie im Struktogramm. + */ +function closingLine(doc: Text, pos: number): number { + const first = doc.lineAt(pos) + if (!first.text.trimEnd().endsWith('{')) return first.number + let depth = 0 + for (let n = first.number; n <= doc.lines; n++) { + for (const ch of doc.line(n).text.replace(/"(?:[^"\\]|\\.)*"|\/\/.*$/g, '')) { + if (ch === '{') depth++ + else if (ch === '}' && --depth === 0) return n + } + } + return first.number +} + /** * Jeder Block (Klasse, Methode, Schleife, Verzweigung …) bekommt einen eigenen Kasten, der bei seiner * Einrückung beginnt; die Kästen liegen ineinander. Das ausgewählte Element bekommt einen Rahmen darüber. @@ -151,6 +169,18 @@ function scopeMarkers(view: EditorView): RectangleMarker[] { return new RectangleMarker(className, left, top, Math.max(right - left, 20), Math.max(bottom - top, 4)) } const markers: RectangleMarker[] = [] + // Anweisungen ohne Klasse und Methode (Einstellung ohne `class`/`main`): ein gelber Kasten wie die Methode, + // damit sie wie die Anweisungen im Struktogramm aussehen. + const top = syntaxTree(state).topNode + const loose: { from: number; to: number }[] = [] + for (let c = top.firstChild; c; c = c.nextSibling) { + if (scopeKinds[c.name] === 'class' || c.name === 'MethodDeclaration') { + loose.length = 0 + break + } + if (c.name !== 'ImportDeclaration' && c.name !== 'PackageDeclaration' && !c.name.includes('Comment')) loose.push(c) + } + if (loose.length) markers.push(box('cm-scope cm-scope-method', doc.lineAt(loose[0].from).number, doc.lineAt(loose[loose.length - 1].to).number, 1)) // Äußere Blöcke zuerst: Die inneren liegen darüber. syntaxTree(state).iterate({ from: view.viewport.from, @@ -160,7 +190,8 @@ function scopeMarkers(view: EditorView): RectangleMarker[] { if (!kind) return // `else if` gehört zum Kasten des ersten `if`. if (node.name === 'IfStatement' && node.node.parent?.name === 'IfStatement') return - markers.push(box(`cm-scope cm-scope-${kind}`, doc.lineAt(node.from).number, doc.lineAt(node.to).number, 1)) + const from = doc.lineAt(node.from).number + markers.push(box(`cm-scope cm-scope-${kind}`, from, Math.max(doc.lineAt(node.to).number, closingLine(doc, node.from)), 1)) }, }) const sel = state.field(marksField).marks.lines diff --git a/website/app/assets/index-DpeMIv3e.js b/website/app/assets/index-B50bSr2K.js similarity index 94% rename from website/app/assets/index-DpeMIv3e.js rename to website/app/assets/index-B50bSr2K.js index 74b3971c..eeb17208 100644 --- a/website/app/assets/index-DpeMIv3e.js +++ b/website/app/assets/index-B50bSr2K.js @@ -1,25 +1,25 @@ -var qf=Object.defineProperty;var Uf=(i,e,t)=>e in i?qf(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var v=(i,e,t)=>Uf(i,typeof e!="symbol"?e+"":e,t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))n(a);new MutationObserver(a=>{for(const s of a)if(s.type==="childList")for(const r of s.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&n(r)}).observe(document,{childList:!0,subtree:!0});function t(a){const s={};return a.integrity&&(s.integrity=a.integrity),a.referrerPolicy&&(s.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?s.credentials="include":a.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function n(a){if(a.ep)return;a.ep=!0;const s=t(a);fetch(a.href,s)}})();const $f="modulepreload",Yf=function(i,e){return new URL(i,e).href},J0={},q=function(e,t,n){let a=Promise.resolve();if(t&&t.length>0){let r=function(m){return Promise.all(m.map(c=>Promise.resolve(c).then(d=>({status:"fulfilled",value:d}),d=>({status:"rejected",reason:d}))))};const o=document.getElementsByTagName("link"),l=document.querySelector("meta[property=csp-nonce]"),u=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));a=r(t.map(m=>{if(m=Yf(m,n),m in J0)return;J0[m]=!0;const c=m.endsWith(".css"),d=c?'[rel="stylesheet"]':"";if(!!n)for(let f=o.length-1;f>=0;f--){const x=o[f];if(x.href===m&&(!c||x.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${m}"]${d}`))return;const g=document.createElement("link");if(g.rel=c?"stylesheet":$f,c||(g.as="script"),g.crossOrigin="",g.href=m,u&&g.setAttribute("nonce",u),document.head.appendChild(g),c)return new Promise((f,x)=>{g.addEventListener("load",f),g.addEventListener("error",()=>x(new Error(`Unable to preload CSS for ${m}`)))})}))}function s(r){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=r,window.dispatchEvent(o),!o.defaultPrevented)throw r}return a.then(r=>{for(const o of r||[])o.status==="rejected"&&s(o.reason);return e().catch(s)})};var I=(i=>(i[i.anweisung=0]="anweisung",i[i.verzweigung=1]="verzweigung",i[i.fallauswahl=2]="fallauswahl",i[i.forSchleife=3]="forSchleife",i[i.whileSchleife=4]="whileSchleife",i[i.doUntilSchleife=5]="doUntilSchleife",i[i.endlosschleife=6]="endlosschleife",i[i.aussprung=7]="aussprung",i[i.aufruf=8]="aufruf",i[i.leerElement=9]="leerElement",i))(I||{});function Xf(i){return i===3||i===4||i===5||i===6}function Kf(i){return i===1||i===2}function ze(i,e={}){return{type:i,zoomX:0,zoomY:0,textLines:[""],...e}}function e2(i){const e=i.textLines;if(!e.every(t=>t.trim()===""))switch(i.type){case I.forSchleife:return e.length<=1?e:[n2(e)];case I.verzweigung:return Vi("if",e);case I.whileSchleife:return Vi("while",e);case I.doUntilSchleife:return Vi("while",t2(e));case I.fallauswahl:return Vi("switch",e);default:return e}}function t2(i){if(i.length===0)return i;const e=i[0].trim(),t=e.toLowerCase(),n=[...i];if(t==="until")n[0]="";else if(t.startsWith("until "))n[0]=e.slice(6).trim();else if(t.startsWith("until("))n[0]=e.slice(5);else return i;return n}function R0(i){const e=new Set(["if","for","while","until","switch"]),t=["input:","output:","print:"],n=i.trim(),a=n.toLowerCase();for(const o of t){if(a===o)return{keyword:n,rest:""};if(a.startsWith(o+" "))return{keyword:n.slice(0,o.length),rest:n.slice(o.length).trim()}}const s=n.indexOf(" ");if(s<0)return;const r=n.slice(0,s);if(e.has(r.toLowerCase()))return{keyword:r,rest:n.slice(s+1).trim()}}function Vi(i,e){if(e.length===0)return e;const t=e[0].trim(),n=t.toLowerCase();if(n===i||n.startsWith(i+" "))return e;const a=[...e];return a[0]=i+" "+t,a}function n2(i){let e=[...i];for(;e.length<3;)e.push("");e=e.slice(0,3);const t=a=>{let s=a.trim();for(;s.endsWith(";");)s=s.slice(0,-1).trim();return s},n=e.map(t).join("; ").trim();return n===""?"for":"for "+n}const Td={[I.anweisung]:"Anweisung",[I.verzweigung]:"Bedingung",[I.fallauswahl]:"Fallauswahl",[I.forSchleife]:"for 0 < i < anzahl",[I.whileSchleife]:"while …",[I.doUntilSchleife]:"while …",[I.endlosschleife]:"endless",[I.aussprung]:"break",[I.aufruf]:"Aufruf()",[I.leerElement]:"ø"};function i2(i){Object.assign(Td,i)}function Ol(i){return e2(i)??[Td[i.type]]}class Ce extends Error{}const hn=i=>structuredClone(i);function en(){return ze(I.anweisung,{textLines:["ø"]})}function a2(){return{caption:"",elements:[en()]}}function Al(i){if(i.type===I.leerElement)return!0;if(i.type===I.anweisung){const e=i.textLines;return e.length===0||e.length===1&&e[0]==="ø"}return!1}function wn(i,e){const t=Nt(i,e);return t!==void 0&&Al(t)}function Zi(i,e){if(e.length===0)throw new Ce("Invalid element path.");const[t,...n]=e;if(t<0||t>=i.length)throw new Ce("Invalid element path.");if(n.length===0)return{list:i,index:t};const[a,...s]=n;if(s.length===0)throw new Ce("Invalid element path.");return Zi(Od(i[t],a),s)}function Od(i,e){if(Xf(i.type)){if(e!==0||!i.loopBody)throw new Ce("Invalid element path.");return i.loopBody}if(Kf(i.type)){if(!i.cases||e<0||e>=i.cases.length)throw new Ce("Invalid element path.");return i.cases[e].elements}throw new Ce("Invalid element path.")}function At(i,e){const{list:t,index:n}=Zi(i.elements,e);return t[n]}function Nt(i,e){try{return At(i,e)}catch{return}}function Pn(i,e,t){const n=hn(i),{list:a,index:s}=Zi(n.elements,e);return a[s]=hn(t),n}function Qi(i,e,t){const n=hn(At(i,e));return n.textLines=t.length===0?[""]:t,Pn(i,e,n)}function rr(i,e){return e.length===0?!1:e.length===1&&i.elements.length===1?!wn(i,e):Nt(i,e)!==void 0}function fi(i,e){const t=hn(i),{list:n,index:a}=Zi(t.elements,e);if(e.length===1&&n.length===1){if(Al(n[0]))throw new Ce("The last root element cannot be deleted.");return n[0]=en(),t}return n.splice(a,1),e.length>1&&n.length===0&&n.push(en()),t}function ti(i,e,t,n){const a=hn(i);let s;if(e.length===0)s=a.elements;else{const r=e.slice(0,-1),o=e[e.length-1],{list:l,index:u}=Zi(a.elements,r);s=Od(l[u],o)}return s.splice(Math.min(Math.max(0,t),s.length),0,hn(n)),a}function Ad(i,e,t){if(t.length===0)throw new Ce("Invalid element path.");return ti(i,t.slice(0,-1),t[t.length-1],e)}function io(i,e,t){if(t.length===0)throw new Ce("Invalid element path.");return ti(i,t.slice(0,-1),t[t.length-1]+1,e)}function Pl(i,e){return i.lengthe[n]===t)}function jl(i,e){if(e.length===0)return i;const t=e[e.length-1],n=e.slice(0,-1);if(i.length<=n.length||!n.every((r,o)=>i[o]===r))return i;const a=n.length;if(i[a]<=t)return i;const s=[...i];return s[a]-=1,s}const Cl=(i,e)=>i.length===e.length&&i.every((t,n)=>t===e[n]);function s2(i,e,t){if(Cl(e,t))return i;if(Pl(e,t))throw new Ce("Invalid element path.");const n=At(i,e),a=fi(i,e);return Ad(a,n,jl(t,e))}function r2(i,e,t){if(Cl(e,t))return i;if(Pl(e,t))throw new Ce("Invalid element path.");const n=At(i,e),a=fi(i,e);return io(a,n,jl(t,e))}function o2(i,e,t){if(!wn(i,t))throw new Ce("Invalid element path.");if(Cl(e,t))return i;if(Pl(e,t))throw new Ce("Invalid element path.");const n=At(i,e),a=fi(i,e);return Pn(a,jl(t,e),n)}function l2(i,e){const t=hn(At(i,e)),n=t.cases;if(t.type!==I.fallauswahl||!n||n.length===0)throw new Ce("Invalid element path.");const a=n[n.length-1].name.toLowerCase()==="default",s=a?n.length-1:n.length,r=String(a?n.length:n.length+1);return n.splice(s,0,{name:r,elements:[en()]}),{doc:Pn(i,e,t),path:[...e,s,0]}}function u2(i,e,t){const n=hn(At(i,e)),a=n.cases;if(n.type!==I.fallauswahl||!a)throw new Ce("Invalid element path.");if(a.length<=2)throw new Ce("A switch needs at least two cases.");if(t<0||t>=a.length)throw new Ce("Invalid element path.");a.splice(t,1);const s=Math.min(t,a.length-1);return{doc:Pn(i,e,n),path:[...e,s,0]}}function m2(i,e,t,n){const a=hn(At(i,e)),s=a.cases;if(a.type!==I.fallauswahl||!s)throw new Ce("Invalid element path.");if(t<0||t>=s.length)throw new Ce("Invalid element path.");const r=n.trim();if(r==="")throw new Ce("Invalid element path.");return s[t].name=r,Pn(i,e,a)}function c2(i,e){var t;if(!(!i||i.length===0))for(let n=i.length;n>=1;n--){const a=i.slice(0,n);if(((t=Nt(e,a))==null?void 0:t.type)===I.fallauswahl)return a}}function d2(i,e){if(!(!i||i.length<=e.length))return i[e.length]}function or(i,e){if(e.elements.length!==0)return!i||!Nt(e,i)?[0]:i}const Pd=i=>i!==void 0&&/\s/.test(i);function Qa(i){const e=i.trim().toLowerCase();return e.startsWith("input:")?"input":e.startsWith("output:")||e.startsWith("print:")?"output":"statement"}function h2(i){const e=i.trim(),t=e.toLowerCase();return t.startsWith("input:")?e.slice(6).trim():t.startsWith("output:")?e.slice(7).trim():t.startsWith("print:")?e.slice(6).trim():i}function G0(i,e){const t=e.trim();return t===""?`${i} `:`${i} ${t}`}function g2(i,e){const t=h2(e);switch(i){case"statement":return t;case"input":return G0("input:",t);case"output":return G0("output:",t)}}const ja=i=>Pd(i[0])?i.slice(1):i;function p2(i){const e=i.replace(/^\s+/,""),t=e.toLowerCase();return t.startsWith("input:")?ja(e.slice(6)):t.startsWith("output:")?ja(e.slice(7)):t.startsWith("print:")?ja(e.slice(6)):i}function H0(i,e){const t=e.replace(/^\s+/,"");if(!t.toLowerCase().startsWith(i.toLowerCase()))return e;const n=t.slice(i.length);if(!(n===""||Pd(n[0])||n[0]==="("))return e;const a=ja(n);return a.startsWith("(")&&a.endsWith(")")&&a.length>=2?a.slice(1,-1):a}function V0(i,e){if(i==="input:"||i==="output:")return p2(e);const t=H0(i,e);if(i==="while"&&t===e){const n=H0("until",e);if(n!==e)return n}return t}function f2(i,e){return e===""?`${i} `:`${i} ${e}`}function jd(i){return i.replace(/[“”„«»]/g,'"').replace(/[’‘‚´]/g,"'")}function Q0(i){const e=i.length===0?[""]:i.slice(0,3);for(;e.length<3;)e.push("");return e}function x2(i){let e=jd(i);for(;;){const t=e.trim();if(!t.endsWith(";"))return e;e=t.slice(0,-1).trim()}}const Ls='system-ui, -apple-system, "Segoe UI", Roboto, sans-serif';function b2(i,e){return`${e==="bold"?700:500} ${i}px ${Ls}`}const Cd=(i,e,t)=>[...i].length*e*(t==="bold"?.68:.62);function y2(){if(typeof document>"u"||!document.body)return;const i="http://www.w3.org/2000/svg",e=document.createElementNS(i,"svg");e.setAttribute("aria-hidden","true"),e.setAttribute("width","0"),e.setAttribute("height","0"),e.style.cssText="position:absolute;left:-9999px;top:0;visibility:hidden;overflow:hidden";const t=document.createElementNS(i,"text");if(t.setAttribute("font-family",Ls),t.style.whiteSpace="pre",e.append(t),document.body.append(e),typeof t.getComputedTextLength!="function"||typeof t.getBBox!="function"){e.remove();return}if(t.textContent="Mg",t.setAttribute("font-size","20"),!(t.getComputedTextLength()>0)){e.remove();return}return t}let lr;function Bd(){return lr===void 0&&(lr=y2()??null),lr??void 0}function Dd(i,e,t){i.setAttribute("font-size",String(e)),i.setAttribute("font-weight",t==="bold"?"700":"500")}function q0(i,e){const t=`${i}|${e}`;let n=U0.get(t);if(!n){const a=Bd();if(n={ascent:i*.95,descent:i*.24},a){Dd(a,i,e),a.setAttribute("y","0"),a.textContent="Mg";const s=a.getBBox();s.height>0&&(n={ascent:-s.y,descent:s.height+s.y})}U0.set(t,n)}return n}const U0=new Map;function v2(){const i=Bd();if(i){const n=new Map;return(a,s,r)=>{const o=`${s}|${r}|${a}`;let l=n.get(o);return l===void 0&&(Dd(i,s,r),i.textContent=a,l=a===""?0:i.getComputedTextLength(),n.size>2e3&&n.clear(),n.set(o,l)),l}}const e=typeof document<"u"?document.createElement("canvas").getContext("2d"):null;if(!e)return Cd;const t=new Map;return(n,a,s)=>{const r=`${a}|${s}|${n}`;let o=t.get(r);return o===void 0&&(e.font=b2(a,s),o=e.measureText(n).width,t.size>2e3&&t.clear(),t.set(r,o)),o}}const Zd={fontSize:15,lineHeight:20,charWidth:7,baseHeaderExtra:20,minSidePadding:42,cellTextInsetY:15,doUntilDoLabelTopInset:2,doUntilFooterTopInset:6,doUntilFooterBottomInset:8};function w2(i){return{...Zd,fontSize:14,lineHeight:21,charWidth:5.5*(14/12),baseHeaderExtra:21,minSidePadding:40}}const qi=i=>i===I.forSchleife||i===I.whileSchleife||i===I.doUntilSchleife||i===I.endlosschleife,Ui=i=>i===I.fallauswahl||i===I.verzweigung;function $i(i,e,t,n=0){return{idPath:i,element:e,frame:t,headerBandHeight:n,topBandHeight:0,loopBodyLeadingInset:0,caseColumnFrames:[],children:[]}}function $e(i){return{...i,frame:{...i.frame}}}class Md{constructor(e=Zd,t=Cd){this.metrics=e,this.measure=t}layout(e,t={left:28,top:28}){const a=this.layoutList(e.elements,t.left,t.top,[]).map(l=>this.stretchLoopBodiesVertically(l));let s=0,r=0;const o=l=>{s=Math.max(s,l.frame.x+l.frame.width),r=Math.max(r,l.frame.y+l.frame.height),l.children.forEach(o)};return a.forEach(o),{canvasSize:{width:s+t.left,height:r+t.top},elements:a}}lineWidth(e){return Math.ceil(this.measure(e,this.metrics.fontSize,"medium"))}lineWidthBold(e){return Math.ceil(this.measure(e,this.metrics.fontSize,"bold"))}layoutList(e,t,n,a){let s=[],r=n;e.forEach((l,u)=>{const m=this.layoutElement(l,t,r,[...a,u]);s.push(m),r+=m.frame.height});const o=Math.max(0,...s.map(l=>l.frame.width));return o>0&&(s=s.map(l=>this.stretchNodeTreeToWidth(l,o))),s}stretchMultiwayNodeToWidth(e,t){const n=$e(e),a=n.frame.width;if(!(a>0)||n.caseColumnFrames.length===0)return n;const s=t/a;n.frame.width=t;let r=n.frame.x;const o=n.caseColumnFrames.map(l=>{const u=l.width*s,m={x:r,y:l.y,width:u,height:l.height};return r+=u,m});return n.caseColumnFrames=o,n.dividerX=o.length>0?o[o.length-1].x:n.frame.x+t,n.columns&&n.columns.length===o.length&&(n.columns=n.columns.map((l,u)=>{const m=o[u];return l.map(c=>{const d=$e(c);return d.frame.x=m.x,d.frame.width=m.width,this.stretchDescendantsWidths(d,m.width)})}),n.children=n.columns.flat()),n}stretchLoopChildren(e,t){const n=this.effectiveLoopBodyLeading(e),a=Math.max(0,t-n);e.children=e.children.map(s=>{const r=$e(s);return r.frame.x=e.frame.x+n,r.frame.width=a,this.stretchDescendantsWidths(r,a)})}stretchNodeTreeToWidth(e,t){const n=$e(e);return n.frame.width>0?Ui(n.element.type)&&n.caseColumnFrames.length>0?this.stretchMultiwayNodeToWidth(n,t):(n.frame.width=t,qi(n.element.type)?this.stretchLoopChildren(n,t):n.children=n.children.map(s=>this.stretchDescendantsWidths(s,t)),n):n}stretchDescendantsWidths(e,t){let n=$e(e);return Ui(n.element.type)?n=this.stretchNodeTreeToWidth(n,t):qi(n.element.type)?(n.frame.width=t,this.stretchLoopChildren(n,t)):(n.frame.width=t,n.children=n.children.map(a=>this.stretchDescendantsWidths(a,t))),n}stretchLoopBodiesVertically(e){const t=$e(e);if(t.columns&&t.columns.length>0)return t.columns=t.columns.map(s=>s.map(r=>this.stretchLoopBodiesVertically(r))),t.children=t.columns.flat(),t;t.children=t.children.map(s=>this.stretchLoopBodiesVertically(s));const n=s=>s===I.anweisung||s===I.leerElement||s===I.aufruf||s===I.aussprung||qi(s);let a;switch(t.element.type){case I.forSchleife:case I.whileSchleife:case I.endlosschleife:{const s=t.element.type===I.endlosschleife?40:0;a=t.frame.y+t.frame.height-s;break}case I.doUntilSchleife:a=t.frame.y+t.frame.height-t.headerBandHeight;break}if(a!==void 0&&t.children.length>0){const s=t.children.length-1;let r=$e(t.children[s]);const o=a-(r.frame.y+r.frame.height);o>.5&&n(r.element.type)&&(r.frame.height+=o,r=this.stretchLoopBodiesVertically(r),t.children=[...t.children.slice(0,s),r])}return t}headerHeight(e){const t=this.metrics,n=Math.max(1,e.textLines.length);if(e.type===I.doUntilSchleife)return t.doUntilFooterTopInset+n*t.lineHeight+t.doUntilFooterBottomInset+e.zoomY;let a;switch(e.type){case I.fallauswahl:a=40;break;case I.verzweigung:a=20;break;case I.forSchleife:case I.whileSchleife:case I.endlosschleife:a=t.baseHeaderExtra+4;break;default:a=14}return a+n*t.lineHeight+e.zoomY}doUntilBodyLeadingInset(){return Math.max(20,this.lineWidthBold("do")+12)}effectiveLoopBodyLeading(e){return e.element.type===I.doUntilSchleife?e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:this.doUntilBodyLeadingInset():20}horizontalPaddingInsideCell(e){return Ui(e)?Math.max(100,this.metrics.minSidePadding*2.45):this.metrics.minSidePadding}minWidth(e){const t=e.textLines.length===0?0:Math.max(...e.textLines.map(s=>this.lineWidth(s)));let n=t+e.zoomX+this.horizontalPaddingInsideCell(e.type);if(e.type===I.aufruf){const s=Math.max(68,this.metrics.minSidePadding*1.7),r=Math.max(8,this.metrics.minSidePadding*.2);n=Math.max(n,t+e.zoomX+s+r)}const a=e.type===I.leerElement?76:e.type===I.aufruf?104:72;return Math.max(a,n)}layoutElement(e,t,n,a){if(Ui(e.type))return this.layoutMultiway(e,t,n,a);if(qi(e.type))return this.layoutLoop(e,t,n,a);const s=this.headerHeight(e);return $i(a,e,{x:t,y:n,width:this.minWidth(e),height:s},s)}layoutLoop(e,t,n,a){const s=x=>x.reduce((b,y)=>b+y.frame.height,0),r=x=>Math.max(0,...x.map(b=>b.frame.width)),o=e.loopBody??[];if(e.type===I.doUntilSchleife){const x=this.doUntilBodyLeadingInset(),b=e.zoomY,y=this.headerHeight(e),w=this.layoutList(o,t+x,n+b,[...a,0]),S=Math.max(this.minWidth(e),r(w)+x),z=s(w)+y+b,k=Math.max(0,S-x),_=$i(a,e,{x:t,y:n,width:S,height:z},y);return _.topBandHeight=b,_.loopBodyLeadingInset=x,_.children=w.map(T=>{const j=$e(T);return j.frame.x=t+x,j.frame.width=k,this.stretchDescendantsWidths(j,k)}),_}const l=20,u=this.headerHeight(e),m=e.type===I.endlosschleife?40:0,c=this.layoutList(o,t+l,n+u,[...a,0]),d=Math.max(this.minWidth(e),r(c)+l),h=u+m+s(c),g=Math.max(0,d-l),f=$i(a,e,{x:t,y:n,width:d,height:h},u);return f.children=c.map(x=>{const b=$e(x);return b.frame.x=t+l,b.frame.width=g,this.stretchDescendantsWidths(b,g)}),f}layoutMultiway(e,t,n,a){const s=this.headerHeight(e),r=e.cases??[],o=Math.max(1,r.length),l=Math.max(this.minWidth(e)/o,132);let u=[],m=[],c=0,d=0;if(r.forEach((x,b)=>{const y=t+c,w=this.layoutList(x.elements,y,n+s,[...a,b]),S=Math.max(0,...w.map(_=>_.frame.width));let z;e.type===I.verzweigung&&o===2?z=Math.max(S,(b===0?"true":"false").length*this.metrics.charWidth+24):z=Math.max(l,S);const k=w.reduce((_,T)=>_+T.frame.height,0);d=Math.max(d,k),u.push({x:y,y:n+s,width:z,height:k}),m.push(w.map(_=>{const T=$e(_);return T.frame.x=y,T.frame.width=z,this.stretchDescendantsWidths(T,z)})),c+=z}),e.type===I.verzweigung&&o===2&&u.length===2){const x=Math.max(u[0].width,u[1].width),b=t,y=t+x,w=y-u[1].x;u[0]={...u[0],x:b,width:x},u[1]={...u[1],x:y,width:x},c=x*2,m[0]=m[0].map(S=>{const z=$e(S);return z.frame.x=b,z.frame.width=x,this.stretchDescendantsWidths(z,x)}),m[1]=m[1].map(S=>{const z=ao(S,w);return z.frame.width=x,this.stretchDescendantsWidths(z,x)})}if(m.length>0){const x=z2(m,n+s);m=x.columns.map(b=>b.map(y=>this.stretchLoopBodiesVertically(y)));for(let b=0;b0?Math.max(...x.columnHeights):d}let h=Math.max(c,this.minWidth(e));if(c>.5&&h>c+.5){const x=h/c;let b=t;const y=[],w=[];u.forEach((S,z)=>{const k=S.width*x;w.push(m[z].map(_=>{const T=$e(_);return T.frame.x=b,T.frame.width=k,this.stretchDescendantsWidths(T,k)})),y.push({x:b,y:S.y,width:k,height:S.height}),b+=k}),u=y,m=w,c=b-t,h=c}const g=u.length>0?u[u.length-1].width:c/o,f=$i(a,e,{x:t,y:n,width:h,height:s+d},s);return f.caseColumnFrames=u,f.dividerX=u.length>0?u[u.length-1].x:t+c-g,f.dividerYInset=e.type===I.fallauswahl?-20:0,f.columns=m,f.children=m.flat(),f}}function Ld(i,e){if(Math.abs(e)<=1e-4)return i;const t=$e(i),n=a=>{const s=$e(a);return s.frame.y+=e,Ld(s,e)};return t.columns?(t.columns=t.columns.map(a=>a.map(n)),t.children=t.columns.flat()):t.children=t.children.map(n),t}function ao(i,e){if(Math.abs(e)<=1e-4)return i;const t=$e(i);return t.frame.x+=e,t.columns?(t.columns=t.columns.map(n=>n.map(a=>ao(a,e))),t.children=t.columns.flat()):t.children=t.children.map(n=>ao(n,e)),t}function z2(i,e){if(i.length<2)return{columns:i,columnHeights:i.map(u=>u.reduce((m,c)=>m+c.frame.height,0))};const t=.5,n=[e];for(const u of i)for(const m of u)n.push(m.frame.y+m.frame.height);const a=Math.max(...n);n.push(a),n.sort((u,m)=>u-m);let s=[];for(const u of n)s.length>0&&Math.abs(u-s[s.length-1])<=t||s.push(u);(s.length===0||Math.abs(s[0]-e)>t)&&s.unshift(e),s.length===0?s=[e,a]:s[s.length-1]{let c=Math.max(0,m);for(;c{let g=$e(d);const f=s[c],x=d.frame.y+d.frame.height,b=h===u.length-1?s.length-1:r(x,c+1),y=s[b],w=f-g.frame.y;g.frame.y=f,g.frame.height=Math.max(0,y-f),g=Ld(g,w),m.push(g),c=b}),o.push(m),l.push(s[s.length-1]-e)}return{columns:o,columnHeights:l}}const I2=[{item:"anweisung",label:"Anweisung"},{item:"verzweigung",label:"Verzweigung"},{item:"fallauswahl",label:"Fallauswahl"},{item:"forZaehlSchleife",label:"For-Schleife"},{item:"whileSchleife",label:"While-Schleife"},{item:"doUntilSchleife",label:"Do-while-Schleife"},{item:"endlosschleife",label:"Endlosschleife"},{item:"aufruf",label:"Aufruf"},{item:"aussprung",label:"Aussprung"}];function $0(i){const e=en;switch(i){case"anweisung":return ze(I.anweisung);case"verzweigung":return ze(I.verzweigung,{cases:[{name:"true",elements:[e()]},{name:"false",elements:[e()]}]});case"fallauswahl":return ze(I.fallauswahl,{cases:[{name:"1",elements:[e()]},{name:"2",elements:[e()]},{name:"default",elements:[e()]}]});case"forZaehlSchleife":return ze(I.forSchleife,{textLines:["","",""],loopBody:[e()]});case"whileSchleife":return ze(I.whileSchleife,{loopBody:[e()]});case"doUntilSchleife":return ze(I.doUntilSchleife,{loopBody:[e()]});case"endlosschleife":return ze(I.endlosschleife,{loopBody:[e()]});case"aussprung":return ze(I.aussprung);case"aufruf":return ze(I.aufruf)}}function qa(i){if(i==="")return"-1;";let e="";for(const t of i)e+=t.codePointAt(0)+";";return e}function so(i){const e=i.split(";").filter(n=>n!=="");if(e.length===1&&e[0]==="-1")return"";let t="";for(const n of e){if(!/^[+-]?\d+$/.test(n))continue;const a=Number(n);a!==-1&&(a<0||a>1114111||a>=55296&&a<=57343||(t+=String.fromCodePoint(a)))}return t}class Y0 extends Error{}function Bl(i){const e=new DOMParser().parseFromString(i,"application/xml");if(e.getElementsByTagName("parsererror").length>0)throw new Y0("Could not read XML.");const t=e.documentElement;if(!t||t.tagName!=="struktogramm")throw new Y0("Invalid XML: root element is not .");const n={caption:K0(t,"caption")??"",elements:oo(t)},a=K0(t,"fontfamily");a!==void 0&&(n.fontFamily=a);const s=ni(t,"fontsize");s!==void 0&&(n.fontSize=s);const r=ni(t,"fontstyle");return r!==void 0&&(n.fontStyle=r),t.getAttribute("pseudocode")==="true"&&(n.pseudocode=!0),n}function o1(i){const e=(n,a)=>a===void 0?"":` ${n}="${Wd(a)}"`;let t=` +var Uf=Object.defineProperty;var $f=(i,e,t)=>e in i?Uf(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var v=(i,e,t)=>$f(i,typeof e!="symbol"?e+"":e,t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))n(a);new MutationObserver(a=>{for(const s of a)if(s.type==="childList")for(const r of s.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&n(r)}).observe(document,{childList:!0,subtree:!0});function t(a){const s={};return a.integrity&&(s.integrity=a.integrity),a.referrerPolicy&&(s.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?s.credentials="include":a.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function n(a){if(a.ep)return;a.ep=!0;const s=t(a);fetch(a.href,s)}})();const Yf="modulepreload",Xf=function(i,e){return new URL(i,e).href},J0={},q=function(e,t,n){let a=Promise.resolve();if(t&&t.length>0){let r=function(m){return Promise.all(m.map(c=>Promise.resolve(c).then(d=>({status:"fulfilled",value:d}),d=>({status:"rejected",reason:d}))))};const o=document.getElementsByTagName("link"),l=document.querySelector("meta[property=csp-nonce]"),u=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));a=r(t.map(m=>{if(m=Xf(m,n),m in J0)return;J0[m]=!0;const c=m.endsWith(".css"),d=c?'[rel="stylesheet"]':"";if(!!n)for(let f=o.length-1;f>=0;f--){const x=o[f];if(x.href===m&&(!c||x.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${m}"]${d}`))return;const g=document.createElement("link");if(g.rel=c?"stylesheet":Yf,c||(g.as="script"),g.crossOrigin="",g.href=m,u&&g.setAttribute("nonce",u),document.head.appendChild(g),c)return new Promise((f,x)=>{g.addEventListener("load",f),g.addEventListener("error",()=>x(new Error(`Unable to preload CSS for ${m}`)))})}))}function s(r){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=r,window.dispatchEvent(o),!o.defaultPrevented)throw r}return a.then(r=>{for(const o of r||[])o.status==="rejected"&&s(o.reason);return e().catch(s)})};var I=(i=>(i[i.anweisung=0]="anweisung",i[i.verzweigung=1]="verzweigung",i[i.fallauswahl=2]="fallauswahl",i[i.forSchleife=3]="forSchleife",i[i.whileSchleife=4]="whileSchleife",i[i.doUntilSchleife=5]="doUntilSchleife",i[i.endlosschleife=6]="endlosschleife",i[i.aussprung=7]="aussprung",i[i.aufruf=8]="aufruf",i[i.leerElement=9]="leerElement",i))(I||{});function Kf(i){return i===3||i===4||i===5||i===6}function e2(i){return i===1||i===2}function ze(i,e={}){return{type:i,zoomX:0,zoomY:0,textLines:[""],...e}}function t2(i){const e=i.textLines;if(!e.every(t=>t.trim()===""))switch(i.type){case I.forSchleife:return e.length<=1?e:[i2(e)];case I.verzweigung:return Vi("if",e);case I.whileSchleife:return Vi("while",e);case I.doUntilSchleife:return Vi("while",n2(e));case I.fallauswahl:return Vi("switch",e);default:return e}}function n2(i){if(i.length===0)return i;const e=i[0].trim(),t=e.toLowerCase(),n=[...i];if(t==="until")n[0]="";else if(t.startsWith("until "))n[0]=e.slice(6).trim();else if(t.startsWith("until("))n[0]=e.slice(5);else return i;return n}function R0(i){const e=new Set(["if","for","while","until","switch"]),t=["input:","output:","print:"],n=i.trim(),a=n.toLowerCase();for(const o of t){if(a===o)return{keyword:n,rest:""};if(a.startsWith(o+" "))return{keyword:n.slice(0,o.length),rest:n.slice(o.length).trim()}}const s=n.indexOf(" ");if(s<0)return;const r=n.slice(0,s);if(e.has(r.toLowerCase()))return{keyword:r,rest:n.slice(s+1).trim()}}function Vi(i,e){if(e.length===0)return e;const t=e[0].trim(),n=t.toLowerCase();if(n===i||n.startsWith(i+" "))return e;const a=[...e];return a[0]=i+" "+t,a}function i2(i){let e=[...i];for(;e.length<3;)e.push("");e=e.slice(0,3);const t=a=>{let s=a.trim();for(;s.endsWith(";");)s=s.slice(0,-1).trim();return s},n=e.map(t).join("; ").trim();return n===""?"for":"for "+n}const Od={[I.anweisung]:"Anweisung",[I.verzweigung]:"Bedingung",[I.fallauswahl]:"Fallauswahl",[I.forSchleife]:"for 0 < i < anzahl",[I.whileSchleife]:"while …",[I.doUntilSchleife]:"while …",[I.endlosschleife]:"endless",[I.aussprung]:"break",[I.aufruf]:"Aufruf()",[I.leerElement]:"ø"};function a2(i){Object.assign(Od,i)}function Ol(i){return t2(i)??[Od[i.type]]}class Ce extends Error{}const hn=i=>structuredClone(i);function en(){return ze(I.anweisung,{textLines:["ø"]})}function s2(){return{caption:"",elements:[en()]}}function Al(i){if(i.type===I.leerElement)return!0;if(i.type===I.anweisung){const e=i.textLines;return e.length===0||e.length===1&&e[0]==="ø"}return!1}function wn(i,e){const t=Nt(i,e);return t!==void 0&&Al(t)}function Zi(i,e){if(e.length===0)throw new Ce("Invalid element path.");const[t,...n]=e;if(t<0||t>=i.length)throw new Ce("Invalid element path.");if(n.length===0)return{list:i,index:t};const[a,...s]=n;if(s.length===0)throw new Ce("Invalid element path.");return Zi(Ad(i[t],a),s)}function Ad(i,e){if(Kf(i.type)){if(e!==0||!i.loopBody)throw new Ce("Invalid element path.");return i.loopBody}if(e2(i.type)){if(!i.cases||e<0||e>=i.cases.length)throw new Ce("Invalid element path.");return i.cases[e].elements}throw new Ce("Invalid element path.")}function At(i,e){const{list:t,index:n}=Zi(i.elements,e);return t[n]}function Nt(i,e){try{return At(i,e)}catch{return}}function Pn(i,e,t){const n=hn(i),{list:a,index:s}=Zi(n.elements,e);return a[s]=hn(t),n}function Qi(i,e,t){const n=hn(At(i,e));return n.textLines=t.length===0?[""]:t,Pn(i,e,n)}function rr(i,e){return e.length===0?!1:e.length===1&&i.elements.length===1?!wn(i,e):Nt(i,e)!==void 0}function fi(i,e){const t=hn(i),{list:n,index:a}=Zi(t.elements,e);if(e.length===1&&n.length===1){if(Al(n[0]))throw new Ce("The last root element cannot be deleted.");return n[0]=en(),t}return n.splice(a,1),e.length>1&&n.length===0&&n.push(en()),t}function ti(i,e,t,n){const a=hn(i);let s;if(e.length===0)s=a.elements;else{const r=e.slice(0,-1),o=e[e.length-1],{list:l,index:u}=Zi(a.elements,r);s=Ad(l[u],o)}return s.splice(Math.min(Math.max(0,t),s.length),0,hn(n)),a}function Pd(i,e,t){if(t.length===0)throw new Ce("Invalid element path.");return ti(i,t.slice(0,-1),t[t.length-1],e)}function io(i,e,t){if(t.length===0)throw new Ce("Invalid element path.");return ti(i,t.slice(0,-1),t[t.length-1]+1,e)}function Pl(i,e){return i.lengthe[n]===t)}function jl(i,e){if(e.length===0)return i;const t=e[e.length-1],n=e.slice(0,-1);if(i.length<=n.length||!n.every((r,o)=>i[o]===r))return i;const a=n.length;if(i[a]<=t)return i;const s=[...i];return s[a]-=1,s}const Cl=(i,e)=>i.length===e.length&&i.every((t,n)=>t===e[n]);function r2(i,e,t){if(Cl(e,t))return i;if(Pl(e,t))throw new Ce("Invalid element path.");const n=At(i,e),a=fi(i,e);return Pd(a,n,jl(t,e))}function o2(i,e,t){if(Cl(e,t))return i;if(Pl(e,t))throw new Ce("Invalid element path.");const n=At(i,e),a=fi(i,e);return io(a,n,jl(t,e))}function l2(i,e,t){if(!wn(i,t))throw new Ce("Invalid element path.");if(Cl(e,t))return i;if(Pl(e,t))throw new Ce("Invalid element path.");const n=At(i,e),a=fi(i,e);return Pn(a,jl(t,e),n)}function u2(i,e){const t=hn(At(i,e)),n=t.cases;if(t.type!==I.fallauswahl||!n||n.length===0)throw new Ce("Invalid element path.");const a=n[n.length-1].name.toLowerCase()==="default",s=a?n.length-1:n.length,r=String(a?n.length:n.length+1);return n.splice(s,0,{name:r,elements:[en()]}),{doc:Pn(i,e,t),path:[...e,s,0]}}function m2(i,e,t){const n=hn(At(i,e)),a=n.cases;if(n.type!==I.fallauswahl||!a)throw new Ce("Invalid element path.");if(a.length<=2)throw new Ce("A switch needs at least two cases.");if(t<0||t>=a.length)throw new Ce("Invalid element path.");a.splice(t,1);const s=Math.min(t,a.length-1);return{doc:Pn(i,e,n),path:[...e,s,0]}}function c2(i,e,t,n){const a=hn(At(i,e)),s=a.cases;if(a.type!==I.fallauswahl||!s)throw new Ce("Invalid element path.");if(t<0||t>=s.length)throw new Ce("Invalid element path.");const r=n.trim();if(r==="")throw new Ce("Invalid element path.");return s[t].name=r,Pn(i,e,a)}function d2(i,e){var t;if(!(!i||i.length===0))for(let n=i.length;n>=1;n--){const a=i.slice(0,n);if(((t=Nt(e,a))==null?void 0:t.type)===I.fallauswahl)return a}}function h2(i,e){if(!(!i||i.length<=e.length))return i[e.length]}function or(i,e){if(e.elements.length!==0)return!i||!Nt(e,i)?[0]:i}const jd=i=>i!==void 0&&/\s/.test(i);function Qa(i){const e=i.trim().toLowerCase();return e.startsWith("input:")?"input":e.startsWith("output:")||e.startsWith("print:")?"output":"statement"}function g2(i){const e=i.trim(),t=e.toLowerCase();return t.startsWith("input:")?e.slice(6).trim():t.startsWith("output:")?e.slice(7).trim():t.startsWith("print:")?e.slice(6).trim():i}function G0(i,e){const t=e.trim();return t===""?`${i} `:`${i} ${t}`}function p2(i,e){const t=g2(e);switch(i){case"statement":return t;case"input":return G0("input:",t);case"output":return G0("output:",t)}}const ja=i=>jd(i[0])?i.slice(1):i;function f2(i){const e=i.replace(/^\s+/,""),t=e.toLowerCase();return t.startsWith("input:")?ja(e.slice(6)):t.startsWith("output:")?ja(e.slice(7)):t.startsWith("print:")?ja(e.slice(6)):i}function H0(i,e){const t=e.replace(/^\s+/,"");if(!t.toLowerCase().startsWith(i.toLowerCase()))return e;const n=t.slice(i.length);if(!(n===""||jd(n[0])||n[0]==="("))return e;const a=ja(n);return a.startsWith("(")&&a.endsWith(")")&&a.length>=2?a.slice(1,-1):a}function V0(i,e){if(i==="input:"||i==="output:")return f2(e);const t=H0(i,e);if(i==="while"&&t===e){const n=H0("until",e);if(n!==e)return n}return t}function x2(i,e){return e===""?`${i} `:`${i} ${e}`}function Cd(i){return i.replace(/[“”„«»]/g,'"').replace(/[’‘‚´]/g,"'")}function Q0(i){const e=i.length===0?[""]:i.slice(0,3);for(;e.length<3;)e.push("");return e}function b2(i){let e=Cd(i);for(;;){const t=e.trim();if(!t.endsWith(";"))return e;e=t.slice(0,-1).trim()}}const Ls='system-ui, -apple-system, "Segoe UI", Roboto, sans-serif';function y2(i,e){return`${e==="bold"?700:500} ${i}px ${Ls}`}const Bd=(i,e,t)=>[...i].length*e*(t==="bold"?.68:.62);function v2(){if(typeof document>"u"||!document.body)return;const i="http://www.w3.org/2000/svg",e=document.createElementNS(i,"svg");e.setAttribute("aria-hidden","true"),e.setAttribute("width","0"),e.setAttribute("height","0"),e.style.cssText="position:absolute;left:-9999px;top:0;visibility:hidden;overflow:hidden";const t=document.createElementNS(i,"text");if(t.setAttribute("font-family",Ls),t.style.whiteSpace="pre",e.append(t),document.body.append(e),typeof t.getComputedTextLength!="function"||typeof t.getBBox!="function"){e.remove();return}if(t.textContent="Mg",t.setAttribute("font-size","20"),!(t.getComputedTextLength()>0)){e.remove();return}return t}let lr;function Dd(){return lr===void 0&&(lr=v2()??null),lr??void 0}function Zd(i,e,t){i.setAttribute("font-size",String(e)),i.setAttribute("font-weight",t==="bold"?"700":"500")}function q0(i,e){const t=`${i}|${e}`;let n=U0.get(t);if(!n){const a=Dd();if(n={ascent:i*.95,descent:i*.24},a){Zd(a,i,e),a.setAttribute("y","0"),a.textContent="Mg";const s=a.getBBox();s.height>0&&(n={ascent:-s.y,descent:s.height+s.y})}U0.set(t,n)}return n}const U0=new Map;function w2(){const i=Dd();if(i){const n=new Map;return(a,s,r)=>{const o=`${s}|${r}|${a}`;let l=n.get(o);return l===void 0&&(Zd(i,s,r),i.textContent=a,l=a===""?0:i.getComputedTextLength(),n.size>2e3&&n.clear(),n.set(o,l)),l}}const e=typeof document<"u"?document.createElement("canvas").getContext("2d"):null;if(!e)return Bd;const t=new Map;return(n,a,s)=>{const r=`${a}|${s}|${n}`;let o=t.get(r);return o===void 0&&(e.font=y2(a,s),o=e.measureText(n).width,t.size>2e3&&t.clear(),t.set(r,o)),o}}const Md={fontSize:15,lineHeight:20,charWidth:7,baseHeaderExtra:20,minSidePadding:42,cellTextInsetY:15,doUntilDoLabelTopInset:2,doUntilFooterTopInset:6,doUntilFooterBottomInset:8};function z2(i){return{...Md,fontSize:14,lineHeight:21,charWidth:5.5*(14/12),baseHeaderExtra:21,minSidePadding:40}}const qi=i=>i===I.forSchleife||i===I.whileSchleife||i===I.doUntilSchleife||i===I.endlosschleife,Ui=i=>i===I.fallauswahl||i===I.verzweigung;function $i(i,e,t,n=0){return{idPath:i,element:e,frame:t,headerBandHeight:n,topBandHeight:0,loopBodyLeadingInset:0,caseColumnFrames:[],children:[]}}function Ye(i){return{...i,frame:{...i.frame}}}class Ld{constructor(e=Md,t=Bd){this.metrics=e,this.measure=t}layout(e,t={left:28,top:28}){const a=this.layoutList(e.elements,t.left,t.top,[]).map(l=>this.stretchLoopBodiesVertically(l));let s=0,r=0;const o=l=>{s=Math.max(s,l.frame.x+l.frame.width),r=Math.max(r,l.frame.y+l.frame.height),l.children.forEach(o)};return a.forEach(o),{canvasSize:{width:s+t.left,height:r+t.top},elements:a}}lineWidth(e){return Math.ceil(this.measure(e,this.metrics.fontSize,"medium"))}lineWidthBold(e){return Math.ceil(this.measure(e,this.metrics.fontSize,"bold"))}layoutList(e,t,n,a){let s=[],r=n;e.forEach((l,u)=>{const m=this.layoutElement(l,t,r,[...a,u]);s.push(m),r+=m.frame.height});const o=Math.max(0,...s.map(l=>l.frame.width));return o>0&&(s=s.map(l=>this.stretchNodeTreeToWidth(l,o))),s}stretchMultiwayNodeToWidth(e,t){const n=Ye(e),a=n.frame.width;if(!(a>0)||n.caseColumnFrames.length===0)return n;const s=t/a;n.frame.width=t;let r=n.frame.x;const o=n.caseColumnFrames.map(l=>{const u=l.width*s,m={x:r,y:l.y,width:u,height:l.height};return r+=u,m});return n.caseColumnFrames=o,n.dividerX=o.length>0?o[o.length-1].x:n.frame.x+t,n.columns&&n.columns.length===o.length&&(n.columns=n.columns.map((l,u)=>{const m=o[u];return l.map(c=>{const d=Ye(c);return d.frame.x=m.x,d.frame.width=m.width,this.stretchDescendantsWidths(d,m.width)})}),n.children=n.columns.flat()),n}stretchLoopChildren(e,t){const n=this.effectiveLoopBodyLeading(e),a=Math.max(0,t-n);e.children=e.children.map(s=>{const r=Ye(s);return r.frame.x=e.frame.x+n,r.frame.width=a,this.stretchDescendantsWidths(r,a)})}stretchNodeTreeToWidth(e,t){const n=Ye(e);return n.frame.width>0?Ui(n.element.type)&&n.caseColumnFrames.length>0?this.stretchMultiwayNodeToWidth(n,t):(n.frame.width=t,qi(n.element.type)?this.stretchLoopChildren(n,t):n.children=n.children.map(s=>this.stretchDescendantsWidths(s,t)),n):n}stretchDescendantsWidths(e,t){let n=Ye(e);return Ui(n.element.type)?n=this.stretchNodeTreeToWidth(n,t):qi(n.element.type)?(n.frame.width=t,this.stretchLoopChildren(n,t)):(n.frame.width=t,n.children=n.children.map(a=>this.stretchDescendantsWidths(a,t))),n}stretchLoopBodiesVertically(e){const t=Ye(e);if(t.columns&&t.columns.length>0)return t.columns=t.columns.map(s=>s.map(r=>this.stretchLoopBodiesVertically(r))),t.children=t.columns.flat(),t;t.children=t.children.map(s=>this.stretchLoopBodiesVertically(s));const n=s=>s===I.anweisung||s===I.leerElement||s===I.aufruf||s===I.aussprung||qi(s);let a;switch(t.element.type){case I.forSchleife:case I.whileSchleife:case I.endlosschleife:{const s=t.element.type===I.endlosschleife?40:0;a=t.frame.y+t.frame.height-s;break}case I.doUntilSchleife:a=t.frame.y+t.frame.height-t.headerBandHeight;break}if(a!==void 0&&t.children.length>0){const s=t.children.length-1;let r=Ye(t.children[s]);const o=a-(r.frame.y+r.frame.height);o>.5&&n(r.element.type)&&(r.frame.height+=o,r=this.stretchLoopBodiesVertically(r),t.children=[...t.children.slice(0,s),r])}return t}headerHeight(e){const t=this.metrics,n=Math.max(1,e.textLines.length);if(e.type===I.doUntilSchleife)return t.doUntilFooterTopInset+n*t.lineHeight+t.doUntilFooterBottomInset+e.zoomY;let a;switch(e.type){case I.fallauswahl:a=40;break;case I.verzweigung:a=20;break;case I.forSchleife:case I.whileSchleife:case I.endlosschleife:a=t.baseHeaderExtra+4;break;default:a=14}return a+n*t.lineHeight+e.zoomY}doUntilBodyLeadingInset(){return Math.max(20,this.lineWidthBold("do")+12)}effectiveLoopBodyLeading(e){return e.element.type===I.doUntilSchleife?e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:this.doUntilBodyLeadingInset():20}horizontalPaddingInsideCell(e){return Ui(e)?Math.max(100,this.metrics.minSidePadding*2.45):this.metrics.minSidePadding}minWidth(e){const t=e.textLines.length===0?0:Math.max(...e.textLines.map(s=>this.lineWidth(s)));let n=t+e.zoomX+this.horizontalPaddingInsideCell(e.type);if(e.type===I.aufruf){const s=Math.max(68,this.metrics.minSidePadding*1.7),r=Math.max(8,this.metrics.minSidePadding*.2);n=Math.max(n,t+e.zoomX+s+r)}const a=e.type===I.leerElement?76:e.type===I.aufruf?104:72;return Math.max(a,n)}layoutElement(e,t,n,a){if(Ui(e.type))return this.layoutMultiway(e,t,n,a);if(qi(e.type))return this.layoutLoop(e,t,n,a);const s=this.headerHeight(e);return $i(a,e,{x:t,y:n,width:this.minWidth(e),height:s},s)}layoutLoop(e,t,n,a){const s=x=>x.reduce((b,y)=>b+y.frame.height,0),r=x=>Math.max(0,...x.map(b=>b.frame.width)),o=e.loopBody??[];if(e.type===I.doUntilSchleife){const x=this.doUntilBodyLeadingInset(),b=e.zoomY,y=this.headerHeight(e),w=this.layoutList(o,t+x,n+b,[...a,0]),S=Math.max(this.minWidth(e),r(w)+x),z=s(w)+y+b,k=Math.max(0,S-x),_=$i(a,e,{x:t,y:n,width:S,height:z},y);return _.topBandHeight=b,_.loopBodyLeadingInset=x,_.children=w.map(T=>{const j=Ye(T);return j.frame.x=t+x,j.frame.width=k,this.stretchDescendantsWidths(j,k)}),_}const l=20,u=this.headerHeight(e),m=e.type===I.endlosschleife?40:0,c=this.layoutList(o,t+l,n+u,[...a,0]),d=Math.max(this.minWidth(e),r(c)+l),h=u+m+s(c),g=Math.max(0,d-l),f=$i(a,e,{x:t,y:n,width:d,height:h},u);return f.children=c.map(x=>{const b=Ye(x);return b.frame.x=t+l,b.frame.width=g,this.stretchDescendantsWidths(b,g)}),f}layoutMultiway(e,t,n,a){const s=this.headerHeight(e),r=e.cases??[],o=Math.max(1,r.length),l=Math.max(this.minWidth(e)/o,132);let u=[],m=[],c=0,d=0;if(r.forEach((x,b)=>{const y=t+c,w=this.layoutList(x.elements,y,n+s,[...a,b]),S=Math.max(0,...w.map(_=>_.frame.width));let z;e.type===I.verzweigung&&o===2?z=Math.max(S,(b===0?"true":"false").length*this.metrics.charWidth+24):z=Math.max(l,S);const k=w.reduce((_,T)=>_+T.frame.height,0);d=Math.max(d,k),u.push({x:y,y:n+s,width:z,height:k}),m.push(w.map(_=>{const T=Ye(_);return T.frame.x=y,T.frame.width=z,this.stretchDescendantsWidths(T,z)})),c+=z}),e.type===I.verzweigung&&o===2&&u.length===2){const x=Math.max(u[0].width,u[1].width),b=t,y=t+x,w=y-u[1].x;u[0]={...u[0],x:b,width:x},u[1]={...u[1],x:y,width:x},c=x*2,m[0]=m[0].map(S=>{const z=Ye(S);return z.frame.x=b,z.frame.width=x,this.stretchDescendantsWidths(z,x)}),m[1]=m[1].map(S=>{const z=ao(S,w);return z.frame.width=x,this.stretchDescendantsWidths(z,x)})}if(m.length>0){const x=I2(m,n+s);m=x.columns.map(b=>b.map(y=>this.stretchLoopBodiesVertically(y)));for(let b=0;b0?Math.max(...x.columnHeights):d}let h=Math.max(c,this.minWidth(e));if(c>.5&&h>c+.5){const x=h/c;let b=t;const y=[],w=[];u.forEach((S,z)=>{const k=S.width*x;w.push(m[z].map(_=>{const T=Ye(_);return T.frame.x=b,T.frame.width=k,this.stretchDescendantsWidths(T,k)})),y.push({x:b,y:S.y,width:k,height:S.height}),b+=k}),u=y,m=w,c=b-t,h=c}const g=u.length>0?u[u.length-1].width:c/o,f=$i(a,e,{x:t,y:n,width:h,height:s+d},s);return f.caseColumnFrames=u,f.dividerX=u.length>0?u[u.length-1].x:t+c-g,f.dividerYInset=e.type===I.fallauswahl?-20:0,f.columns=m,f.children=m.flat(),f}}function Wd(i,e){if(Math.abs(e)<=1e-4)return i;const t=Ye(i),n=a=>{const s=Ye(a);return s.frame.y+=e,Wd(s,e)};return t.columns?(t.columns=t.columns.map(a=>a.map(n)),t.children=t.columns.flat()):t.children=t.children.map(n),t}function ao(i,e){if(Math.abs(e)<=1e-4)return i;const t=Ye(i);return t.frame.x+=e,t.columns?(t.columns=t.columns.map(n=>n.map(a=>ao(a,e))),t.children=t.columns.flat()):t.children=t.children.map(n=>ao(n,e)),t}function I2(i,e){if(i.length<2)return{columns:i,columnHeights:i.map(u=>u.reduce((m,c)=>m+c.frame.height,0))};const t=.5,n=[e];for(const u of i)for(const m of u)n.push(m.frame.y+m.frame.height);const a=Math.max(...n);n.push(a),n.sort((u,m)=>u-m);let s=[];for(const u of n)s.length>0&&Math.abs(u-s[s.length-1])<=t||s.push(u);(s.length===0||Math.abs(s[0]-e)>t)&&s.unshift(e),s.length===0?s=[e,a]:s[s.length-1]{let c=Math.max(0,m);for(;c{let g=Ye(d);const f=s[c],x=d.frame.y+d.frame.height,b=h===u.length-1?s.length-1:r(x,c+1),y=s[b],w=f-g.frame.y;g.frame.y=f,g.frame.height=Math.max(0,y-f),g=Wd(g,w),m.push(g),c=b}),o.push(m),l.push(s[s.length-1]-e)}return{columns:o,columnHeights:l}}const k2=[{item:"anweisung",label:"Anweisung"},{item:"verzweigung",label:"Verzweigung"},{item:"fallauswahl",label:"Fallauswahl"},{item:"forZaehlSchleife",label:"For-Schleife"},{item:"whileSchleife",label:"While-Schleife"},{item:"doUntilSchleife",label:"Do-while-Schleife"},{item:"endlosschleife",label:"Endlosschleife"},{item:"aufruf",label:"Aufruf"},{item:"aussprung",label:"Aussprung"}];function $0(i){const e=en;switch(i){case"anweisung":return ze(I.anweisung);case"verzweigung":return ze(I.verzweigung,{cases:[{name:"true",elements:[e()]},{name:"false",elements:[e()]}]});case"fallauswahl":return ze(I.fallauswahl,{cases:[{name:"1",elements:[e()]},{name:"2",elements:[e()]},{name:"default",elements:[e()]}]});case"forZaehlSchleife":return ze(I.forSchleife,{textLines:["","",""],loopBody:[e()]});case"whileSchleife":return ze(I.whileSchleife,{loopBody:[e()]});case"doUntilSchleife":return ze(I.doUntilSchleife,{loopBody:[e()]});case"endlosschleife":return ze(I.endlosschleife,{loopBody:[e()]});case"aussprung":return ze(I.aussprung);case"aufruf":return ze(I.aufruf)}}function qa(i){if(i==="")return"-1;";let e="";for(const t of i)e+=t.codePointAt(0)+";";return e}function so(i){const e=i.split(";").filter(n=>n!=="");if(e.length===1&&e[0]==="-1")return"";let t="";for(const n of e){if(!/^[+-]?\d+$/.test(n))continue;const a=Number(n);a!==-1&&(a<0||a>1114111||a>=55296&&a<=57343||(t+=String.fromCodePoint(a)))}return t}class Y0 extends Error{}function Bl(i){const e=new DOMParser().parseFromString(i,"application/xml");if(e.getElementsByTagName("parsererror").length>0)throw new Y0("Could not read XML.");const t=e.documentElement;if(!t||t.tagName!=="struktogramm")throw new Y0("Invalid XML: root element is not .");const n={caption:K0(t,"caption")??"",elements:oo(t)},a=K0(t,"fontfamily");a!==void 0&&(n.fontFamily=a);const s=ni(t,"fontsize");s!==void 0&&(n.fontSize=s);const r=ni(t,"fontstyle");return r!==void 0&&(n.fontStyle=r),t.getAttribute("pseudocode")==="true"&&(n.pseudocode=!0),n}function o1(i){const e=(n,a)=>a===void 0?"":` ${n}="${Ed(a)}"`;let t=` `;t+=" `;for(const n of i.elements)t+=ro(n," ");return t+=` `,t}function ro(i,e){let t=`${e} -`;for(const n of i.textLines)t+=`${e} ${k2(qa(n))} +`;for(const n of i.textLines)t+=`${e} ${S2(qa(n))} `;if(i.loopBody){t+=`${e} `;for(const n of i.loopBody)t+=ro(n,e+" ");t+=`${e} -`}if(i.cases)for(const n of i.cases){t+=`${e} +`}if(i.cases)for(const n of i.cases){t+=`${e} `;for(const a of n.elements)t+=ro(a,e+" ");t+=`${e} `}return t+=`${e} -`,t}function Wd(i){return i.replace(/&/g,"&").replace(/"/g,""").replace(//g,">")}function k2(i){return i.replace(/&/g,"&").replace(//g,">")}function X0(i){return String(i.a<<24|i.r<<16|i.g<<8|i.b|0)}function Ca(i,e){return Array.from(i.children).filter(t=>t.tagName===e)}function oo(i){const e=[];for(const t of Ca(i,"strelem")){const n=S2(t);n&&e.push(n)}return e}function S2(i){const e=ni(i,"typ");if(e===void 0||I[e]===void 0)return;const t={type:e,zoomX:ni(i,"zx")??0,zoomY:ni(i,"zy")??0,textLines:Ca(i,"text").map(o=>so((o.textContent??"").trim()))},n=eu(i.getAttribute("textcolor"));n&&(t.textColor=n);const a=eu(i.getAttribute("bgcolor"));a&&(t.backgroundColor=a),t.textLines.length===0&&(t.textLines=[""]);const s=Ca(i,"schleifeninhalt")[0];if(s){const o=oo(s);o.length>0&&(t.loopBody=o)}const r=Ca(i,"fall").map(o=>({name:so(o.getAttribute("fallname")??""),elements:oo(o)}));return r.length>0&&(t.cases=r),t}function K0(i,e){const t=i.getAttribute(e);return t===null?void 0:so(t)}function ni(i,e){const t=i.getAttribute(e);if(!(t===null||!/^[+-]?\d+$/.test(t)))return Number(t)}function eu(i){if(i===null||!/^[+-]?\d+$/.test(i))return;const e=Number(i);if(e<-2147483648||e>2147483647)return;const t=e>>>0;return{a:t>>>24&255,r:t>>>16&255,g:t>>>8&255,b:t&255}}const _2="http://www.w3.org/2000/svg",Be={diagramLineWidth:2,outerFrameLineWidth:2,selectionLineWidth:3.5,canvasOuterMargin:16,cellTextInsetX:18,cellTextInsetY:15,multiHeaderFirstLineY:14,branchLabelInsetX:10,fallauswahlCaseLabelBand:26,callSideBarInset:14,callTextInsetFromSideBar:20,loopBodyLeadingInset:20};function Ed(i){switch(i){case I.forSchleife:case I.whileSchleife:case I.doUntilSchleife:case I.endlosschleife:return"loop";case I.verzweigung:case I.fallauswahl:return"if";default:return}}function ye(i,e={}){const t=document.createElementNS(_2,i);for(const[n,a]of Object.entries(e))t.setAttribute(n,String(a));return t}class Nd{constructor(e,t){v(this,"usesSimulationHighlight",!1);v(this,"fillsSelection",!1);this.metrics=e,this.measure=t}get lineHeight(){return this.metrics.lineHeight}get fontSize(){return this.metrics.fontSize}render(e,t,n,a=Be.canvasOuterMargin){const s=ye("svg",{width:t.width,height:t.height,viewBox:`0 0 ${t.width} ${t.height}`,"font-family":Ls,"font-size":this.fontSize,class:"diagram"});s.append(ye("rect",{x:0,y:0,width:t.width,height:t.height,fill:"#fafafa"}));const r=a;s.append(ye("rect",{x:r,y:r,width:e.canvasSize.width-2*r-1,height:e.canvasSize.height-2*r-1,fill:"none",stroke:"black","stroke-width":Be.outerFrameLineWidth}));const o=ye("g");for(const l of e.elements)this.drawNode(l,o,n,{},void 0,"method");return s.append(o),s}line(e,t){e.append(ye("polyline",{points:t.map(n=>n.join(",")).join(" "),fill:"none",stroke:"black","stroke-width":Be.diagramLineWidth,"stroke-linejoin":"miter"}))}strokeCellBorder(e,t,n){const a=t.x,s=t.y,r=t.x+t.width,o=t.y+t.height;if(!n.top&&!n.left&&!n.bottom&&!n.right){e.append(ye("rect",{x:a,y:s,width:t.width,height:t.height,fill:"none",stroke:"black","stroke-width":Be.diagramLineWidth}));return}n.top||this.line(e,[[a,s],[r,s]]),n.right||this.line(e,[[r,s],[r,o]]),n.bottom||this.line(e,[[r,o],[a,o]]),n.left||this.line(e,[[a,o],[a,s]])}textWidth(e){const t=R0(e);return t?this.measure(t.keyword,this.fontSize,"bold")+(t.rest===""?0:this.measure(" "+t.rest,this.fontSize,"medium")):this.measure(e,this.fontSize,"medium")}drawKeywordLine(e,t,n,a){const s=ye("text",{x:n,y:a+q0(this.fontSize,"medium").ascent,"font-weight":500});s.style.whiteSpace="pre";const r=R0(t);if(r){const o=ye("tspan",{"font-weight":700});if(o.textContent=r.keyword,s.append(o),r.rest!==""){const l=ye("tspan",{});l.textContent=" "+r.rest,s.append(l)}}else s.textContent=t;e.append(s)}drawLabel(e,t,n,a,s,r){const o=q0(this.fontSize,s?"bold":"medium"),l=ye("text",{x:n,y:r==="top"?a+o.ascent:a-o.descent,"font-weight":s?700:500});l.style.whiteSpace="pre",l.textContent=t,e.append(l)}roofMetrics(e,t,n,a){const s=t.y+n,r=e.dividerYInset??0,o=12,l=Math.max(e.element.textLines.length,1)*this.lineHeight,u=t.y+Be.multiHeaderFirstLineY;if(e.element.type===I.fallauswahl){const c=Math.max(Be.fallauswahlCaseLabelBand,this.lineHeight+10),d=s-c,h=Math.min(s+r,d-8),g=Math.max(h,u+l+6);return{apex:{x:a,y:g},maxTextBottom:d-o,roofBottom:s}}const m={x:a,y:s+r};return{apex:m,maxTextBottom:m.y-o,roofBottom:s}}drawNode(e,t,n,a,s,r){var T;const o=e.frame,l=e.element,u=o.x+o.width,m=o.y+o.height,c=l.type===I.verzweigung||l.type===I.fallauswahl,d=c?e.headerBandHeight:0,h=n!==void 0&&lo(e.idPath,n),g=Ol(l),f=ye("g",{"data-path":e.idPath.join(",")});t.append(f);const x=this.usesSimulationHighlight,b=l.backgroundColor,y=b&&b.a>0?`rgba(${b.r}, ${b.g}, ${b.b}, ${b.a/255})`:"white",w=h&&(x||this.fillsSelection)?"rgba(199, 230, 255, 0.55)":y,S=Ed(l.type)??r,z=ye("rect",{x:o.x,y:o.y,width:o.width,height:o.height,fill:w});w==="white"&&S&&z.setAttribute("class",`ns-scope ns-scope-${S}`),f.append(z),this.strokeCellBorder(f,o,a);const k=Be.callSideBarInset;if(l.type===I.aufruf?(this.line(f,[[o.x+k,o.y],[o.x+k,m]]),this.line(f,[[u-k,o.y],[u-k,m]])):l.type===I.aussprung&&this.line(f,[[o.x+k,o.y],[o.x,o.y+o.height/2],[o.x+k,m]]),c&&e.dividerX!==void 0){const j=e.dividerX,C=this.roofMetrics(e,o,d,j),P=Math.max(g.length,1)*this.lineHeight,O=o.y+Be.multiHeaderFirstLineY;this.line(f,[[o.x,o.y],[C.apex.x,C.apex.y],[u,o.y]]),l.type===I.fallauswahl&&this.line(f,[[o.x,C.roofBottom],[u,C.roofBottom]]);let L;O+P<=C.maxTextBottom?L=O:L=Math.max(o.y+2,C.maxTextBottom-(Math.max(g.length,1)-1)*this.lineHeight-this.lineHeight),g.forEach((E,Q)=>{const $=this.textWidth(E);let he;if(l.type===I.verzweigung){const Te=o.x+Be.cellTextInsetX,xe=u-$-Be.cellTextInsetX;he=Math.min(Math.max(j-$/2,Te),xe)}else he=o.x+o.width/2-$/2;this.drawKeywordLine(f,E,he,L+Q*this.lineHeight)})}else if(l.type!==I.doUntilSchleife)if(l.type===I.anweisung||l.type===I.aufruf||l.type===I.aussprung){const j=Be.cellTextInsetX;let C=o.x+j,P=u-j;l.type===I.aufruf?(C=o.x+k+Be.callTextInsetFromSideBar,P=u-k-Be.callTextInsetFromSideBar):l.type===I.aussprung&&(C=o.x+k+j);const O=Math.max(0,P-C);let L=o.y+o.height/2-Math.max(1,g.length)*this.lineHeight/2;for(const E of g)this.drawKeywordLine(f,E,C+(O-this.textWidth(E))/2,L),L+=this.lineHeight}else{const j=Math.max(1,g.length)*this.lineHeight;let C=s===I.doUntilSchleife?o.y+o.height/2-j/2:o.y+Be.cellTextInsetY;for(const P of g)this.drawKeywordLine(f,P,o.x+Be.cellTextInsetX,C),C+=this.lineHeight}e.children.forEach((j,C)=>{const P=l.type===I.doUntilSchleife&&C===0?{top:!0,left:!0}:{};this.drawNode(j,t,n,P,l.type,S)});const _=ye("g");if(t.append(_),l.type===I.doUntilSchleife){const j=((T=e.children[0])==null?void 0:T.frame.x)??o.x+(e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:Be.loopBodyLeadingInset);this.drawLabel(_,"do",o.x+4,o.y+this.metrics.doUntilDoLabelTopInset,!0,"top");const C=m-e.headerBandHeight;this.line(_,[[j,C],[u,C]]),this.line(_,[[j,o.y],[j,C]]);let P=C+this.metrics.doUntilFooterTopInset;for(const O of g)this.drawKeywordLine(_,O,o.x+Be.cellTextInsetX,P),P+=this.lineHeight}if(c&&e.dividerX!==void 0&&e.caseColumnFrames.length>1){const j=this.roofMetrics(e,o,d,e.dividerX),C=j.apex;e.caseColumnFrames.forEach((O,L)=>{if(L>=e.caseColumnFrames.length-1)return;const E=O.x+O.width,Q=T2(E,o,C),$=Number.isFinite(Q)?Math.min(Math.max(Q,o.y),m):o.y;this.line(_,[[E,m],[E,$]])});const P=l.cases;if(P&&P.length===e.caseColumnFrames.length){const O=l.type===I.fallauswahl?j.roofBottom-6:o.y+d-8,L=Be.branchLabelInsetX;if(l.type===I.verzweigung&&P.length===2){this.drawLabel(_,"true",o.x+L,O,!0,"bottom");const E=e.caseColumnFrames[1],Q=this.measure("false",this.fontSize,"bold");this.drawLabel(_,"false",E.x+E.width-L-Q,O,!0,"bottom")}else P.forEach((E,Q)=>{const $=e.caseColumnFrames[Q],he=["default","true","false"].includes(E.name.toLowerCase()),Te=this.measure(E.name,this.fontSize,he?"bold":"medium");this.drawLabel(_,E.name,$.x+$.width/2-Te/2,O,he,"bottom")})}}h&&_.append(ye("rect",{x:o.x,y:o.y,width:o.width,height:o.height,class:"selection-frame",fill:"none",stroke:x?"rgba(66, 140, 242, 0.78)":"rgba(0, 122, 255, 0.9)","stroke-width":Be.selectionLineWidth}))}}function T2(i,e,t){const n=e.y;if(i<=t.x){const s=t.x-e.x;return Math.abs(s)<.5?t.y:n+(t.y-n)/s*(i-e.x)}const a=e.x+e.width-t.x;return Math.abs(a)<.5?t.y:t.y+(n-t.y)/a*(i-t.x)}function lo(i,e){return i.length===e.length&&i.every((t,n)=>t===e[n])}function O2(i){const e=[],t=n=>{e.push(n),n.children.forEach(t)};return i.forEach(t),e}function Ua(i){var e,t;return{...i,textLines:Ol(i),loopBody:(e=i.loopBody)==null?void 0:e.map(Ua),cases:(t=i.cases)==null?void 0:t.map(n=>({name:n.name,elements:n.elements.map(Ua)}))}}const A2=[{code:"de",name:"Deutsch"},{code:"en",name:"English"},{code:"es",name:"Español"},{code:"fr",name:"Français"},{code:"it",name:"Italiano"},{code:"pl",name:"Polski"},{code:"tr",name:"Türkçe"},{code:"ko",name:"한국어"},{code:"ja",name:"日本語"},{code:"el",name:"Ελληνικά"},{code:"uk",name:"Українська"},{code:"ar",name:"العربية"},{code:"ru",name:"Русский"},{code:"he",name:"עברית"},{code:"nl",name:"Nederlands"},{code:"sv",name:"Svenska"},{code:"da",name:"Dansk"},{code:"nb",name:"Norsk bokmål"},{code:"zh-Hans",name:"中文(简体)"},{code:"zh-Hant",name:"中文(繁體)"},{code:"pt-PT",name:"Português"},{code:"java",name:"Java (Keywords)"}],Fd=["de","en","pt-PT"],Jd=A2.filter(i=>Fd.includes(i.code)),tu=i=>Fd.includes(i),P2=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ar.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CxCno28C.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/da.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BAutdlBb.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/de.lproj/Localizable.strings":()=>q(()=>import("./Localizable-Dk8F86qS.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/el.lproj/Localizable.strings":()=>q(()=>import("./Localizable-rqA-20hM.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/en.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DBLIUcBd.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/es.lproj/Localizable.strings":()=>q(()=>import("./Localizable-LSTVB2Q5.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/fr.lproj/Localizable.strings":()=>q(()=>import("./Localizable-ByPZS4RL.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/he.lproj/Localizable.strings":()=>q(()=>import("./Localizable-R-16GCrk.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/it.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DXAPah1g.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ja.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CkJEmEEP.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ko.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BudCXCER.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nb.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DSvkBkp-.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nl.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BJ55WGVD.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pl.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BYJK0mdR.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pt-PT.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CHv0OL9S.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ru.lproj/Localizable.strings":()=>q(()=>import("./Localizable-1QZ0wfvJ.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/sv.lproj/Localizable.strings":()=>q(()=>import("./Localizable-M33nNbEe.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/tr.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BM86Igqt.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/uk.lproj/Localizable.strings":()=>q(()=>import("./Localizable-UGog_aku.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hans.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CaVEL1es.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hant.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DqIDp_hh.js"),[],import.meta.url).then(i=>i.default)}),Rd=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/Java.strings":()=>q(()=>import("./Java-Bpx1Vwvg.js"),[],import.meta.url).then(i=>i.default)}),j2=Object.assign({"../i18n/ar.strings":()=>q(()=>import("./ar-Ce_JBvN0.js"),[],import.meta.url).then(i=>i.default),"../i18n/da.strings":()=>q(()=>import("./da-DECOxrcR.js"),[],import.meta.url).then(i=>i.default),"../i18n/de.strings":()=>q(()=>import("./de-aPa6h38I.js"),[],import.meta.url).then(i=>i.default),"../i18n/el.strings":()=>q(()=>import("./el-yeMMlSVC.js"),[],import.meta.url).then(i=>i.default),"../i18n/en.strings":()=>q(()=>import("./en-CZyy4vg0.js"),[],import.meta.url).then(i=>i.default),"../i18n/es.strings":()=>q(()=>import("./es-ha3UN8DQ.js"),[],import.meta.url).then(i=>i.default),"../i18n/fr.strings":()=>q(()=>import("./fr-UiUxTyGK.js"),[],import.meta.url).then(i=>i.default),"../i18n/he.strings":()=>q(()=>import("./he-D_LHtXfc.js"),[],import.meta.url).then(i=>i.default),"../i18n/it.strings":()=>q(()=>import("./it-Bxp07svi.js"),[],import.meta.url).then(i=>i.default),"../i18n/ja.strings":()=>q(()=>import("./ja-9S_323Dj.js"),[],import.meta.url).then(i=>i.default),"../i18n/ko.strings":()=>q(()=>import("./ko-DHMRauQa.js"),[],import.meta.url).then(i=>i.default),"../i18n/nb.strings":()=>q(()=>import("./nb-Cr772wdv.js"),[],import.meta.url).then(i=>i.default),"../i18n/nl.strings":()=>q(()=>import("./nl-CiVlWKIy.js"),[],import.meta.url).then(i=>i.default),"../i18n/pl.strings":()=>q(()=>import("./pl-B4o_YjNG.js"),[],import.meta.url).then(i=>i.default),"../i18n/pt-PT.strings":()=>q(()=>import("./pt-PT-BcL3wukx.js"),[],import.meta.url).then(i=>i.default),"../i18n/ru.strings":()=>q(()=>import("./ru-DLZRltoa.js"),[],import.meta.url).then(i=>i.default),"../i18n/sv.strings":()=>q(()=>import("./sv-IXV83uxu.js"),[],import.meta.url).then(i=>i.default),"../i18n/tr.strings":()=>q(()=>import("./tr-DZP25RUK.js"),[],import.meta.url).then(i=>i.default),"../i18n/uk.strings":()=>q(()=>import("./uk-F1BqsLKX.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hans.strings":()=>q(()=>import("./zh-Hans-p7zVv8W8.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hant.strings":()=>q(()=>import("./zh-Hant-Dxf58hMr.js"),[],import.meta.url).then(i=>i.default)});function Ba(i,e){var t;return(t=Object.entries(i).find(([n])=>n.endsWith(e)))==null?void 0:t[1]}function Gd(i){const e=new Map,t=i.replace(/\/\*[\s\S]*?\*\//g,"").replace(/^\s*\/\/.*$/gm,""),n=/"((?:[^"\\]|\\.)*)"\s*=\s*"((?:[^"\\]|\\.)*)"\s*;/g,a=s=>s.replace(/\\(u[0-9a-fA-F]{4}|.)/g,(r,o)=>o==="n"?` -`:o==="t"?" ":o.startsWith("u")&&o.length===5?String.fromCharCode(parseInt(o.slice(1),16)):o);for(const s of t.matchAll(n))e.set(a(s[1]),a(s[2]));return e}async function uo(i){const e=i==="java"?Ba(Rd,"/Java.strings"):Ba(P2,`/${i}.lproj/Localizable.strings`),t=Ba(j2,`/${i}.strings`),n=new Map;for(const a of[e,t])if(a)for(const[s,r]of Gd(await a()))n.set(s,r);return n}let Hd="en",Vd=new Map,$n=new Map;const $a="appLanguageCode",Dl="visustruct.keywords";let mo=new Map,Zl=!1;const C2=i=>i.startsWith("element_")||i.startsWith("canvas_stub_");function B2(){try{const i=new URLSearchParams(location.search).get("lang")==="java"||localStorage.getItem($a)==="java";return i&&(localStorage.setItem($a,"en"),localStorage.setItem(Dl,"1")),i}catch{return!1}}function D2(){try{return localStorage.getItem(Dl)==="1"}catch{return!1}}async function Qd(i,e=!0){if(i&&mo.size===0){$n.size===0&&($n=await uo("en"));const t=Ba(Rd,"/Java.strings");if(t)for(const[n,a]of Gd(await t()))C2(n)&&a!==$n.get(n)&&mo.set(n,a)}if(Zl=i,e)try{localStorage.setItem(Dl,i?"1":"0")}catch{}}function Z2(){return Zl}function M2(){if(B2())return"en";const i=new URLSearchParams(location.search).get("lang");if(i&&tu(i))return i;try{const e=localStorage.getItem($a);if(e&&tu(e))return e}catch{}for(const e of navigator.languages??[navigator.language]){const t=e.toLowerCase();if(t.startsWith("pt"))return"pt-PT";const n=Jd.find(a=>a.code===t.split("-")[0]);if(n)return n.code}return"en"}async function qd(i,e=!0){if($n.size===0&&($n=await uo("en")),Vd=i==="en"?$n:await uo(i),Hd=i,e)try{localStorage.setItem($a,i)}catch{}const t=document.documentElement;t.lang=i==="java"?"en":i,t.dir=i==="ar"||i==="he"?"rtl":"ltr"}function i1(){return Hd}function p(i,...e){const t=(Zl?mo.get(i):void 0)??Vd.get(i)??$n.get(i)??i;if(e.length===0)return t;let n=0;return t.replace(/%(?:(\d+)\$)?[@d]/g,(a,s)=>String(e[s?Number(s)-1:n++]??""))}const Ya=243,L2=244,Ud=40,ur=4,W2=1;function Ml(i){const e=i.length,t=Ya+(e&255)+(e>>8)&255,n=i.reduce((a,s)=>a+s,0)&255;return Uint8Array.from([Ya,t,e&255,e>>8,...i,n,L2])}function E2(i,e,t){const n=Array.from(new TextEncoder().encode(i));return Ml([Ud,e,t&255,t>>8&255,n.length&255,n.length>>8,...n])}function N2(i){if(i[0]!==Ud||i.length<6)return;const e=new TextDecoder().decode(Uint8Array.from(i.slice(6))),t=/"ret"\s*:\s*([^}]*)\}/.exec(e);return t?{idx:i[2]|i[3]<<8,value:J2(t[1].trim())}:void 0}function F2(i){const e=[];for(;;){const t=i.indexOf(Ya);if(t<0){i.length=0;break}if(i.splice(0,t),i.length<4)break;const n=i[2]|i[3]<<8;if(i[1]!==(Ya+i[2]+i[3]&255)||n>4096){i.splice(0,1);continue}if(i.length/g,">")}function S2(i){return i.replace(/&/g,"&").replace(//g,">")}function X0(i){return String(i.a<<24|i.r<<16|i.g<<8|i.b|0)}function Ca(i,e){return Array.from(i.children).filter(t=>t.tagName===e)}function oo(i){const e=[];for(const t of Ca(i,"strelem")){const n=_2(t);n&&e.push(n)}return e}function _2(i){const e=ni(i,"typ");if(e===void 0||I[e]===void 0)return;const t={type:e,zoomX:ni(i,"zx")??0,zoomY:ni(i,"zy")??0,textLines:Ca(i,"text").map(o=>so((o.textContent??"").trim()))},n=eu(i.getAttribute("textcolor"));n&&(t.textColor=n);const a=eu(i.getAttribute("bgcolor"));a&&(t.backgroundColor=a),t.textLines.length===0&&(t.textLines=[""]);const s=Ca(i,"schleifeninhalt")[0];if(s){const o=oo(s);o.length>0&&(t.loopBody=o)}const r=Ca(i,"fall").map(o=>({name:so(o.getAttribute("fallname")??""),elements:oo(o)}));return r.length>0&&(t.cases=r),t}function K0(i,e){const t=i.getAttribute(e);return t===null?void 0:so(t)}function ni(i,e){const t=i.getAttribute(e);if(!(t===null||!/^[+-]?\d+$/.test(t)))return Number(t)}function eu(i){if(i===null||!/^[+-]?\d+$/.test(i))return;const e=Number(i);if(e<-2147483648||e>2147483647)return;const t=e>>>0;return{a:t>>>24&255,r:t>>>16&255,g:t>>>8&255,b:t&255}}const T2="http://www.w3.org/2000/svg",Be={diagramLineWidth:2,outerFrameLineWidth:2,selectionLineWidth:3.5,canvasOuterMargin:16,cellTextInsetX:18,cellTextInsetY:15,multiHeaderFirstLineY:14,branchLabelInsetX:10,fallauswahlCaseLabelBand:26,callSideBarInset:14,callTextInsetFromSideBar:20,loopBodyLeadingInset:20};function Nd(i){switch(i){case I.forSchleife:case I.whileSchleife:case I.doUntilSchleife:case I.endlosschleife:return"loop";case I.verzweigung:case I.fallauswahl:return"if";default:return}}function ye(i,e={}){const t=document.createElementNS(T2,i);for(const[n,a]of Object.entries(e))t.setAttribute(n,String(a));return t}class Fd{constructor(e,t){v(this,"usesSimulationHighlight",!1);v(this,"fillsSelection",!1);this.metrics=e,this.measure=t}get lineHeight(){return this.metrics.lineHeight}get fontSize(){return this.metrics.fontSize}render(e,t,n,a=Be.canvasOuterMargin){const s=ye("svg",{width:t.width,height:t.height,viewBox:`0 0 ${t.width} ${t.height}`,"font-family":Ls,"font-size":this.fontSize,class:"diagram"});s.append(ye("rect",{x:0,y:0,width:t.width,height:t.height,fill:"#fafafa"}));const r=a;s.append(ye("rect",{x:r,y:r,width:e.canvasSize.width-2*r-1,height:e.canvasSize.height-2*r-1,fill:"none",stroke:"black","stroke-width":Be.outerFrameLineWidth}));const o=ye("g");for(const l of e.elements)this.drawNode(l,o,n,{},void 0,"method");return s.append(o),s}line(e,t){e.append(ye("polyline",{points:t.map(n=>n.join(",")).join(" "),fill:"none",stroke:"black","stroke-width":Be.diagramLineWidth,"stroke-linejoin":"miter"}))}strokeCellBorder(e,t,n){const a=t.x,s=t.y,r=t.x+t.width,o=t.y+t.height;if(!n.top&&!n.left&&!n.bottom&&!n.right){e.append(ye("rect",{x:a,y:s,width:t.width,height:t.height,fill:"none",stroke:"black","stroke-width":Be.diagramLineWidth}));return}n.top||this.line(e,[[a,s],[r,s]]),n.right||this.line(e,[[r,s],[r,o]]),n.bottom||this.line(e,[[r,o],[a,o]]),n.left||this.line(e,[[a,o],[a,s]])}textWidth(e){const t=R0(e);return t?this.measure(t.keyword,this.fontSize,"bold")+(t.rest===""?0:this.measure(" "+t.rest,this.fontSize,"medium")):this.measure(e,this.fontSize,"medium")}drawKeywordLine(e,t,n,a){const s=ye("text",{x:n,y:a+q0(this.fontSize,"medium").ascent,"font-weight":500});s.style.whiteSpace="pre";const r=R0(t);if(r){const o=ye("tspan",{"font-weight":700});if(o.textContent=r.keyword,s.append(o),r.rest!==""){const l=ye("tspan",{});l.textContent=" "+r.rest,s.append(l)}}else s.textContent=t;e.append(s)}drawLabel(e,t,n,a,s,r){const o=q0(this.fontSize,s?"bold":"medium"),l=ye("text",{x:n,y:r==="top"?a+o.ascent:a-o.descent,"font-weight":s?700:500});l.style.whiteSpace="pre",l.textContent=t,e.append(l)}roofMetrics(e,t,n,a){const s=t.y+n,r=e.dividerYInset??0,o=12,l=Math.max(e.element.textLines.length,1)*this.lineHeight,u=t.y+Be.multiHeaderFirstLineY;if(e.element.type===I.fallauswahl){const c=Math.max(Be.fallauswahlCaseLabelBand,this.lineHeight+10),d=s-c,h=Math.min(s+r,d-8),g=Math.max(h,u+l+6);return{apex:{x:a,y:g},maxTextBottom:d-o,roofBottom:s}}const m={x:a,y:s+r};return{apex:m,maxTextBottom:m.y-o,roofBottom:s}}drawNode(e,t,n,a,s,r){var T;const o=e.frame,l=e.element,u=o.x+o.width,m=o.y+o.height,c=l.type===I.verzweigung||l.type===I.fallauswahl,d=c?e.headerBandHeight:0,h=n!==void 0&&lo(e.idPath,n),g=Ol(l),f=ye("g",{"data-path":e.idPath.join(",")});t.append(f);const x=this.usesSimulationHighlight,b=l.backgroundColor,y=b&&b.a>0?`rgba(${b.r}, ${b.g}, ${b.b}, ${b.a/255})`:"white",w=h&&(x||this.fillsSelection)?"rgba(199, 230, 255, 0.55)":y,S=Nd(l.type)??r,z=ye("rect",{x:o.x,y:o.y,width:o.width,height:o.height,fill:w});w==="white"&&S&&z.setAttribute("class",`ns-scope ns-scope-${S}`),f.append(z),this.strokeCellBorder(f,o,a);const k=Be.callSideBarInset;if(l.type===I.aufruf?(this.line(f,[[o.x+k,o.y],[o.x+k,m]]),this.line(f,[[u-k,o.y],[u-k,m]])):l.type===I.aussprung&&this.line(f,[[o.x+k,o.y],[o.x,o.y+o.height/2],[o.x+k,m]]),c&&e.dividerX!==void 0){const j=e.dividerX,C=this.roofMetrics(e,o,d,j),P=Math.max(g.length,1)*this.lineHeight,O=o.y+Be.multiHeaderFirstLineY;this.line(f,[[o.x,o.y],[C.apex.x,C.apex.y],[u,o.y]]),l.type===I.fallauswahl&&this.line(f,[[o.x,C.roofBottom],[u,C.roofBottom]]);let L;O+P<=C.maxTextBottom?L=O:L=Math.max(o.y+2,C.maxTextBottom-(Math.max(g.length,1)-1)*this.lineHeight-this.lineHeight),g.forEach((E,Q)=>{const $=this.textWidth(E);let he;if(l.type===I.verzweigung){const Te=o.x+Be.cellTextInsetX,xe=u-$-Be.cellTextInsetX;he=Math.min(Math.max(j-$/2,Te),xe)}else he=o.x+o.width/2-$/2;this.drawKeywordLine(f,E,he,L+Q*this.lineHeight)})}else if(l.type!==I.doUntilSchleife)if(l.type===I.anweisung||l.type===I.aufruf||l.type===I.aussprung){const j=Be.cellTextInsetX;let C=o.x+j,P=u-j;l.type===I.aufruf?(C=o.x+k+Be.callTextInsetFromSideBar,P=u-k-Be.callTextInsetFromSideBar):l.type===I.aussprung&&(C=o.x+k+j);const O=Math.max(0,P-C);let L=o.y+o.height/2-Math.max(1,g.length)*this.lineHeight/2;for(const E of g)this.drawKeywordLine(f,E,C+(O-this.textWidth(E))/2,L),L+=this.lineHeight}else{const j=Math.max(1,g.length)*this.lineHeight;let C=s===I.doUntilSchleife?o.y+o.height/2-j/2:o.y+Be.cellTextInsetY;for(const P of g)this.drawKeywordLine(f,P,o.x+Be.cellTextInsetX,C),C+=this.lineHeight}e.children.forEach((j,C)=>{const P=l.type===I.doUntilSchleife&&C===0?{top:!0,left:!0}:{};this.drawNode(j,t,n,P,l.type,S)});const _=ye("g");if(t.append(_),l.type===I.doUntilSchleife){const j=((T=e.children[0])==null?void 0:T.frame.x)??o.x+(e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:Be.loopBodyLeadingInset);this.drawLabel(_,"do",o.x+4,o.y+this.metrics.doUntilDoLabelTopInset,!0,"top");const C=m-e.headerBandHeight;this.line(_,[[j,C],[u,C]]),this.line(_,[[j,o.y],[j,C]]);let P=C+this.metrics.doUntilFooterTopInset;for(const O of g)this.drawKeywordLine(_,O,o.x+Be.cellTextInsetX,P),P+=this.lineHeight}if(c&&e.dividerX!==void 0&&e.caseColumnFrames.length>1){const j=this.roofMetrics(e,o,d,e.dividerX),C=j.apex;e.caseColumnFrames.forEach((O,L)=>{if(L>=e.caseColumnFrames.length-1)return;const E=O.x+O.width,Q=O2(E,o,C),$=Number.isFinite(Q)?Math.min(Math.max(Q,o.y),m):o.y;this.line(_,[[E,m],[E,$]])});const P=l.cases;if(P&&P.length===e.caseColumnFrames.length){const O=l.type===I.fallauswahl?j.roofBottom-6:o.y+d-8,L=Be.branchLabelInsetX;if(l.type===I.verzweigung&&P.length===2){this.drawLabel(_,"true",o.x+L,O,!0,"bottom");const E=e.caseColumnFrames[1],Q=this.measure("false",this.fontSize,"bold");this.drawLabel(_,"false",E.x+E.width-L-Q,O,!0,"bottom")}else P.forEach((E,Q)=>{const $=e.caseColumnFrames[Q],he=["default","true","false"].includes(E.name.toLowerCase()),Te=this.measure(E.name,this.fontSize,he?"bold":"medium");this.drawLabel(_,E.name,$.x+$.width/2-Te/2,O,he,"bottom")})}}h&&_.append(ye("rect",{x:o.x,y:o.y,width:o.width,height:o.height,class:"selection-frame",fill:"none",stroke:x?"rgba(66, 140, 242, 0.78)":"rgba(0, 122, 255, 0.9)","stroke-width":Be.selectionLineWidth}))}}function O2(i,e,t){const n=e.y;if(i<=t.x){const s=t.x-e.x;return Math.abs(s)<.5?t.y:n+(t.y-n)/s*(i-e.x)}const a=e.x+e.width-t.x;return Math.abs(a)<.5?t.y:t.y+(n-t.y)/a*(i-t.x)}function lo(i,e){return i.length===e.length&&i.every((t,n)=>t===e[n])}function A2(i){const e=[],t=n=>{e.push(n),n.children.forEach(t)};return i.forEach(t),e}function Ua(i){var e,t;return{...i,textLines:Ol(i),loopBody:(e=i.loopBody)==null?void 0:e.map(Ua),cases:(t=i.cases)==null?void 0:t.map(n=>({name:n.name,elements:n.elements.map(Ua)}))}}const P2=[{code:"de",name:"Deutsch"},{code:"en",name:"English"},{code:"es",name:"Español"},{code:"fr",name:"Français"},{code:"it",name:"Italiano"},{code:"pl",name:"Polski"},{code:"tr",name:"Türkçe"},{code:"ko",name:"한국어"},{code:"ja",name:"日本語"},{code:"el",name:"Ελληνικά"},{code:"uk",name:"Українська"},{code:"ar",name:"العربية"},{code:"ru",name:"Русский"},{code:"he",name:"עברית"},{code:"nl",name:"Nederlands"},{code:"sv",name:"Svenska"},{code:"da",name:"Dansk"},{code:"nb",name:"Norsk bokmål"},{code:"zh-Hans",name:"中文(简体)"},{code:"zh-Hant",name:"中文(繁體)"},{code:"pt-PT",name:"Português"},{code:"java",name:"Java (Keywords)"}],Jd=["de","en","pt-PT"],Rd=P2.filter(i=>Jd.includes(i.code)),tu=i=>Jd.includes(i),j2=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ar.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CxCno28C.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/da.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BAutdlBb.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/de.lproj/Localizable.strings":()=>q(()=>import("./Localizable-Dk8F86qS.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/el.lproj/Localizable.strings":()=>q(()=>import("./Localizable-rqA-20hM.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/en.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DBLIUcBd.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/es.lproj/Localizable.strings":()=>q(()=>import("./Localizable-LSTVB2Q5.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/fr.lproj/Localizable.strings":()=>q(()=>import("./Localizable-ByPZS4RL.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/he.lproj/Localizable.strings":()=>q(()=>import("./Localizable-R-16GCrk.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/it.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DXAPah1g.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ja.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CkJEmEEP.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ko.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BudCXCER.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nb.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DSvkBkp-.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nl.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BJ55WGVD.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pl.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BYJK0mdR.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pt-PT.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CHv0OL9S.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ru.lproj/Localizable.strings":()=>q(()=>import("./Localizable-1QZ0wfvJ.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/sv.lproj/Localizable.strings":()=>q(()=>import("./Localizable-M33nNbEe.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/tr.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BM86Igqt.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/uk.lproj/Localizable.strings":()=>q(()=>import("./Localizable-UGog_aku.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hans.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CaVEL1es.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hant.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DqIDp_hh.js"),[],import.meta.url).then(i=>i.default)}),Gd=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/Java.strings":()=>q(()=>import("./Java-Bpx1Vwvg.js"),[],import.meta.url).then(i=>i.default)}),C2=Object.assign({"../i18n/ar.strings":()=>q(()=>import("./ar-Ce_JBvN0.js"),[],import.meta.url).then(i=>i.default),"../i18n/da.strings":()=>q(()=>import("./da-DECOxrcR.js"),[],import.meta.url).then(i=>i.default),"../i18n/de.strings":()=>q(()=>import("./de-aPa6h38I.js"),[],import.meta.url).then(i=>i.default),"../i18n/el.strings":()=>q(()=>import("./el-yeMMlSVC.js"),[],import.meta.url).then(i=>i.default),"../i18n/en.strings":()=>q(()=>import("./en-CZyy4vg0.js"),[],import.meta.url).then(i=>i.default),"../i18n/es.strings":()=>q(()=>import("./es-ha3UN8DQ.js"),[],import.meta.url).then(i=>i.default),"../i18n/fr.strings":()=>q(()=>import("./fr-UiUxTyGK.js"),[],import.meta.url).then(i=>i.default),"../i18n/he.strings":()=>q(()=>import("./he-D_LHtXfc.js"),[],import.meta.url).then(i=>i.default),"../i18n/it.strings":()=>q(()=>import("./it-Bxp07svi.js"),[],import.meta.url).then(i=>i.default),"../i18n/ja.strings":()=>q(()=>import("./ja-9S_323Dj.js"),[],import.meta.url).then(i=>i.default),"../i18n/ko.strings":()=>q(()=>import("./ko-DHMRauQa.js"),[],import.meta.url).then(i=>i.default),"../i18n/nb.strings":()=>q(()=>import("./nb-Cr772wdv.js"),[],import.meta.url).then(i=>i.default),"../i18n/nl.strings":()=>q(()=>import("./nl-CiVlWKIy.js"),[],import.meta.url).then(i=>i.default),"../i18n/pl.strings":()=>q(()=>import("./pl-B4o_YjNG.js"),[],import.meta.url).then(i=>i.default),"../i18n/pt-PT.strings":()=>q(()=>import("./pt-PT-BcL3wukx.js"),[],import.meta.url).then(i=>i.default),"../i18n/ru.strings":()=>q(()=>import("./ru-DLZRltoa.js"),[],import.meta.url).then(i=>i.default),"../i18n/sv.strings":()=>q(()=>import("./sv-IXV83uxu.js"),[],import.meta.url).then(i=>i.default),"../i18n/tr.strings":()=>q(()=>import("./tr-DZP25RUK.js"),[],import.meta.url).then(i=>i.default),"../i18n/uk.strings":()=>q(()=>import("./uk-F1BqsLKX.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hans.strings":()=>q(()=>import("./zh-Hans-p7zVv8W8.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hant.strings":()=>q(()=>import("./zh-Hant-Dxf58hMr.js"),[],import.meta.url).then(i=>i.default)});function Ba(i,e){var t;return(t=Object.entries(i).find(([n])=>n.endsWith(e)))==null?void 0:t[1]}function Hd(i){const e=new Map,t=i.replace(/\/\*[\s\S]*?\*\//g,"").replace(/^\s*\/\/.*$/gm,""),n=/"((?:[^"\\]|\\.)*)"\s*=\s*"((?:[^"\\]|\\.)*)"\s*;/g,a=s=>s.replace(/\\(u[0-9a-fA-F]{4}|.)/g,(r,o)=>o==="n"?` +`:o==="t"?" ":o.startsWith("u")&&o.length===5?String.fromCharCode(parseInt(o.slice(1),16)):o);for(const s of t.matchAll(n))e.set(a(s[1]),a(s[2]));return e}async function uo(i){const e=i==="java"?Ba(Gd,"/Java.strings"):Ba(j2,`/${i}.lproj/Localizable.strings`),t=Ba(C2,`/${i}.strings`),n=new Map;for(const a of[e,t])if(a)for(const[s,r]of Hd(await a()))n.set(s,r);return n}let Vd="en",Qd=new Map,$n=new Map;const $a="appLanguageCode",Dl="visustruct.keywords";let mo=new Map,Zl=!1;const B2=i=>i.startsWith("element_")||i.startsWith("canvas_stub_");function D2(){try{const i=new URLSearchParams(location.search).get("lang")==="java"||localStorage.getItem($a)==="java";return i&&(localStorage.setItem($a,"en"),localStorage.setItem(Dl,"1")),i}catch{return!1}}function Z2(){try{return localStorage.getItem(Dl)==="1"}catch{return!1}}async function qd(i,e=!0){if(i&&mo.size===0){$n.size===0&&($n=await uo("en"));const t=Ba(Gd,"/Java.strings");if(t)for(const[n,a]of Hd(await t()))B2(n)&&a!==$n.get(n)&&mo.set(n,a)}if(Zl=i,e)try{localStorage.setItem(Dl,i?"1":"0")}catch{}}function M2(){return Zl}function L2(){if(D2())return"en";const i=new URLSearchParams(location.search).get("lang");if(i&&tu(i))return i;try{const e=localStorage.getItem($a);if(e&&tu(e))return e}catch{}for(const e of navigator.languages??[navigator.language]){const t=e.toLowerCase();if(t.startsWith("pt"))return"pt-PT";const n=Rd.find(a=>a.code===t.split("-")[0]);if(n)return n.code}return"en"}async function Ud(i,e=!0){if($n.size===0&&($n=await uo("en")),Qd=i==="en"?$n:await uo(i),Vd=i,e)try{localStorage.setItem($a,i)}catch{}const t=document.documentElement;t.lang=i==="java"?"en":i,t.dir=i==="ar"||i==="he"?"rtl":"ltr"}function i1(){return Vd}function p(i,...e){const t=(Zl?mo.get(i):void 0)??Qd.get(i)??$n.get(i)??i;if(e.length===0)return t;let n=0;return t.replace(/%(?:(\d+)\$)?[@d]/g,(a,s)=>String(e[s?Number(s)-1:n++]??""))}const Ya=243,W2=244,$d=40,ur=4,E2=1;function Ml(i){const e=i.length,t=Ya+(e&255)+(e>>8)&255,n=i.reduce((a,s)=>a+s,0)&255;return Uint8Array.from([Ya,t,e&255,e>>8,...i,n,W2])}function N2(i,e,t){const n=Array.from(new TextEncoder().encode(i));return Ml([$d,e,t&255,t>>8&255,n.length&255,n.length>>8,...n])}function F2(i){if(i[0]!==$d||i.length<6)return;const e=new TextDecoder().decode(Uint8Array.from(i.slice(6))),t=/"ret"\s*:\s*([^}]*)\}/.exec(e);return t?{idx:i[2]|i[3]<<8,value:R2(t[1].trim())}:void 0}function J2(i){const e=[];for(;;){const t=i.indexOf(Ya);if(t<0){i.length=0;break}if(i.splice(0,t),i.length<4)break;const n=i[2]|i[3]<<8;if(i[1]!==(Ya+i[2]+i[3]&255)||n>4096){i.splice(0,1);continue}if(i.lengthArray.from({length:e},(t,n)=>i>>>8*n&255);function V2(i){let e=0;for(let t=0;t>>0;return ii(e,4)}const mr=(i,e)=>Ml([1,0,$d,i,...ii(e.length,2),...e]);function Q2(i,e=R2){const t=new TextEncoder().encode(i),n=(4-t.length%W1+W1)%W1,a=new Uint8Array(t.length+n).fill(10);a.set(t);const s=[mr(1,[0,...ii(a.length,4),...V2(a),...Array.from(new TextEncoder().encode(e))])],r=a.length-4;for(let o=0;oi.length===3&&i[0]===13,U2=i=>i.length===7||i.some((e,t)=>e===$d&&i[t+1]===240),Yd=()=>typeof navigator>"u"?void 0:navigator.serial,cr=()=>Yd()!==void 0,$2=(...i)=>`exec(${JSON.stringify(i.join("; "))})`,Ws=(i,e=24)=>$2("cyberpi.display.clear()",`cyberpi.display.show_label(${JSON.stringify(i)}, ${e}, 'center')`),Xd=Ws("VisuBot",32);class Y2{constructor(){v(this,"port");v(this,"writer");v(this,"reader");v(this,"loop");v(this,"rx",[]);v(this,"idx",1);v(this,"frameWaiters",[]);v(this,"waiting",new Map);v(this,"queue",Promise.resolve());v(this,"listeners",new Set);v(this,"error");v(this,"connecting",!1)}listen(e){return this.listeners.add(e),()=>this.listeners.delete(e)}changed(){for(const e of this.listeners)e()}get connected(){return this.writer!==void 0&&!this.connecting}async connect(){const e=Yd();if(!e)throw new Error("Web Serial");const t=await e.requestPort();await t.open({baudRate:115200}),this.port=t,this.writer=t.writable.getWriter(),this.error=void 0,this.connecting=!0,this.changed(),this.loop=this.readLoop(),window.addEventListener("pagehide",()=>void this.disconnect(),{once:!0}),await new Promise(n=>setTimeout(n,3e3)),this.writer&&(this.rx.length=0,this.connecting=!1,this.changed(),await this.run(Xd))}async disconnect(e){if(!this.port)return this.error=e,this.changed();if(!e&&this.writer&&!this.connecting)for(const r of["mbot2.EM_stop('ALL')","cyberpi.led.off()",Ws("Bis bald!")])await this.send(r,ur,2e3).catch(()=>{});const t=this.port,n=this.writer,a=this.reader,s=this.loop;this.port=this.writer=this.reader=this.loop=void 0,this.error=e,this.connecting=!1;for(const r of this.waiting.values())r.reject(new Error(e??"getrennt"));this.waiting.clear();try{await(a==null?void 0:a.cancel()),await s,await(n==null?void 0:n.close())}catch{}try{n==null||n.releaseLock(),await t.close()}catch(r){console.warn("[mBot2] Schließen",r.message)}this.changed()}run(e){return this.send(e,ur,3e4).then(()=>{})}ask(e){return this.send(e,W2,3e3)}async upload(e,t=()=>{}){if(this.port||await this.connect(),!this.writer)throw new Error(this.error??"nicht verbunden");const n=Q2(e),a=6+n.length+3;let s=0;const r=()=>t(++s,a),o=async()=>{await this.sendFrame(Ml(G2),q2),r();for(const l of H2)await this.send(l,ur,3e3),r()};await o(),await o();for(const l of n)await this.sendFrame(l,U2),r();s=a-3,await o(),await this.restart()}sendFrame(e,t){const n=this.queue.then(async()=>{for(let a=0;a<3;a++){if(!this.writer)throw new Error("nicht verbunden");let s=()=>{};const r=new Promise(u=>s=u),o={match:t,resolve:s};this.frameWaiters.push(o),await this.writer.write(e);const l=await Promise.race([r.then(()=>!0),new Promise(u=>setTimeout(()=>u(!1),3e3))]);if(this.frameWaiters=this.frameWaiters.filter(u=>u!==o),l)return}throw new Error("keine Antwort")});return this.queue=n.catch(()=>{}),n}async restart(){const e=this.port;await this.disconnect("restart"),this.error=void 0,await new Promise(t=>setTimeout(t,300)),await e.open({baudRate:115200}),await new Promise(t=>setTimeout(t,500)),await e.close(),this.changed()}send(e,t,n){const a=this.queue.then(()=>new Promise((s,r)=>{if(!this.writer)return r(new Error("nicht verbunden"));const o=this.idx;this.idx=this.idx%65535+1;const l=setTimeout(()=>{this.waiting.delete(o),r(new Error("keine Antwort"))},n);this.waiting.set(o,{resolve:u=>(clearTimeout(l),s(u)),reject:u=>(clearTimeout(l),r(u))}),this.writer.write(E2(e,t,o)).catch(u=>{this.waiting.delete(o),r(u)})}));return this.queue=a.catch(()=>{}),a}async readLoop(){var e;for(;(e=this.port)!=null&&e.readable;){const t=this.port.readable.getReader();this.reader=t;try{for(;;){const{value:n,done:a}=await t.read();if(a)break;this.rx.push(...n);for(const s of F2(this.rx)){const r=this.frameWaiters.findIndex(u=>u.match(s));r>=0&&this.frameWaiters.splice(r,1)[0].resolve();const o=N2(s);if(!o)continue;const l=this.waiting.get(o.idx);this.waiting.delete(o.idx),l==null||l.resolve(o.value)}}}catch(n){const a=["BufferOverrunError","FramingError","BreakError","ParityError"].includes(n.name);console.warn("[mBot2] Lesefehler",n.name,n.message),!a&&this.port&&this.disconnect(n.message)}finally{t.releaseLock()}if(!this.writer)break}}}const le=new Y2,Kd=5,X2=i=>Number.isInteger(i)&&i>=0&&iString(Math.round(i*100)/100),xi={forward:{args:1,defaults:[nu],python:([i])=>`mbot2.straight(${be(i)})`,label:([i])=>`${be(i)} cm vorwärts`},backward:{args:1,defaults:[nu],python:([i])=>`mbot2.straight(${be(-i)})`,label:([i])=>`${be(i)} cm rückwärts`},turnLeft:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${be(-i)})`,label:([i])=>`${be(i)}° nach links drehen`},turnRight:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${be(i)})`,label:([i])=>`${be(i)}° nach rechts drehen`},stop:{args:0,python:()=>'mbot2.EM_stop("ALL")',label:()=>"anhalten"},drive:{args:2,python:([i,e])=>`mbot2.drive_power(${be(i)}, ${be(-e)})`,label:([i,e])=>`Räder links ${be(i)} %, rechts ${be(e)} %`},setLed:{args:3,python:([i,e,t])=>`cyberpi.led.on(${be(i)}, ${be(e)}, ${be(t)})`,label:([i,e,t])=>`LEDs (${be(i)}, ${be(e)}, ${be(t)})`},ledOff:{args:0,python:()=>"cyberpi.led.off()",label:()=>"LEDs aus"},ledColor:{args:1,text:!0,choices:Object.keys(Xa),valid:([i])=>X2(i),python:([i],e)=>`cyberpi.led.on(${Xa[e].join(", ")}, id=${i+1})`,label:([i],e)=>`LED ${i}: ${e}`},playTone:{args:2,python:([i,e])=>`cyberpi.audio.play_tone(${be(i)}, ${be(e/1e3)})`,label:([i,e])=>`Ton ${be(i)} Hz, ${be(e)} ms`},pause:{args:1,label:([i])=>`${be(i)} ms warten`},resetTimer:{args:0,python:()=>"cyberpi.timer.reset()",label:()=>"Stoppuhr auf 0"},emotion:{args:0,text:!0,choices:K2,python:(i,e)=>`cyberpi.emotion.${e}()`,label:(i,e)=>`Gefühl: ${e}`},showText:{args:0,text:!0,python:(i,e)=>Ws(e),label:(i,e)=>`Bildschirm: ${e}`}},iu={red:{de:"rot",en:"red"},green:{de:"grün",en:"green"},blue:{de:"blau",en:"blue"},yellow:{de:"gelb",en:"yellow"},cyan:{de:"türkis",en:"cyan"},purple:{de:"lila",en:"purple"},white:{de:"weiß",en:"white"},black:{de:"schwarz",en:"black"}};let Ll="en";function e3(i){Ll=i==="de"?"de":"en"}const t3=()=>Ll;function eh(i){const e=i.trim().toLowerCase(),t=iu[e]??Object.values(iu).find(n=>n.de===e);return t?t[Ll]:e}const l1=i=>({python:`cyberpi.controller.is_press('${i}')`,simulated:!1}),St={getDistance:{python:"mbuild.ultrasonic2.get(1)",simulated:100},getLine:{python:"mbuild.quad_rgb_sensor.get_line_sta('all', 1)",simulated:0},isLineLeft:{python:"mbuild.quad_rgb_sensor.is_line('L1', 1)",simulated:!1},isLineRight:{python:"mbuild.quad_rgb_sensor.is_line('R1', 1)",simulated:!1},getColor:{python:"mbuild.quad_rgb_sensor.get_color_sta('L1', 1)",simulated:"white"},isButtonA:l1("a"),isButtonB:l1("b"),isJoystickUp:l1("up"),isJoystickDown:l1("down"),isJoystickLeft:l1("left"),isJoystickRight:l1("right"),getBrightness:{python:"cyberpi.get_bri()",simulated:50},getLoudness:{python:"cyberpi.get_loudness('maximum')",simulated:0},getPitch:{python:"cyberpi.get_pitch()",simulated:0},getRoll:{python:"cyberpi.get_roll()",simulated:0},isShaken:{python:"cyberpi.is_shake()",simulated:!1},getBattery:{python:"cyberpi.get_battery()",simulated:100},getTimer:{python:"cyberpi.timer.get()",simulated:0}};function n3(i){const e=new Set;for(const t of i.matchAll(/\bmbot\s*\.\s*([A-Za-z_]\w*)\s*\(\s*\)/gu))t[1]in St&&e.add(t[1]);return[...e]}function i3(i){const e=/^mbot\s*\.\s*led\s*\(([^()]*(?:\([^()]*\)[^()]*)*)\)\s*\.\s*setColor\s*\(([\s\S]*)\)\s*;?$/u.exec(i.trim());if(e)return{method:"ledColor",args:[e[1].trim(),e[2].trim()]};const t=/^mbot\s*\.\s*([A-Za-z_]\w*)\s*\(([\s\S]*)\)\s*;?$/u.exec(i.trim());if(!t)return;const n=t[2].trim();return{method:t[1],args:n===""?[]:r3(n)}}function Ka(i,e){const t=xi[i];if(!t)return;const n=e.length===0&&t.defaults?t.defaults:e;if(n.length===t.args)return!t.valid||t.valid(n)?n:void 0}function au(i,e,t=""){var a;const n=xi[i];return{method:i,args:e,python:(a=n.python)==null?void 0:a.call(n,e,t),waitMs:i==="pause"?Math.max(0,e[0]):void 0,label:n.label(e,t),...n.text?{text:t}:{}}}function th(i){return i.map(e=>[e.method,...e.args.map(be),...e.text!==void 0?[JSON.stringify(e.text)]:[]].join(" "))}function a3(i){let e=0;const t=i.trim(),n=()=>{const s=[];for(;;){for(;t[e]===" "||t[e]===",";)e++;if(e>=t.length||t[e]===")")return s;const r=/^(\d+)\s*[x×]\s*\(/u.exec(t.slice(e));if(r){e+=r[0].length;const c=n();if(t[e]!==")")throw new Error(`„)“ fehlt in „${i}“`);e++;for(let d=0;d{if(!(n in St))return t;const a=e(n);return typeof a=="string"?JSON.stringify(n==="getColor"?eh(a):a):String(a)}):i}function r3(i){const e=[];let t=0,n=!1,a=0;for(let s=0;s{const a=t==="turn"?((n+180)%360+360)%360-180:n;if(Math.abs(a)<1e-6)return[];const s=Math.round(Math.abs(a)*100)/100;return t==="drive"?[`${a>0?"forward":"backward"} ${s}`]:[a===-180?"turnRight 180":`${a>0?"turnRight":"turnLeft"} ${s}`]})}function nh(i){let e=0;const t=i.trim(),n=()=>{const s=[];for(;;){for(;t[e]===" "||t[e]===",";)e++;if(e>=t.length||t[e]===")")return s;const r=/^(\d+)\s*[x×]\s*\(/u.exec(t.slice(e));if(r){e+=r[0].length;const u=n();if(t[e]!==")")throw new Error(`„)“ fehlt in „${i}“`);e++;for(let m=0;ma===i[s%t])){const a=U1(i.slice(0,t));return`${n} x ${t===1?a:`(${a})`}`}}return i.join(", ")}const ih=["cyberpi","screen","joystick","buttons","leds","lightSensor","microphone","shield","powerSwitch","motors","wheels","ultrasonic","lineSensor","caster","chassis"],o3=i=>ih.includes(i),l3=100;function ah(i){switch(i.kind){case"finished":return"Simulation finished.";case"infiniteLoopWithoutBody":return"Infinite loop has no body.";case"unsupportedStatement":return`Unsupported statement: ${i.text}`;case"invalidExpression":return`Invalid expression: ${i.text}`;case"unknownVariable":return`Unknown variable: ${i.text}`;case"divisionByZero":return"Division by zero.";case"wholeNumberExpected":return"Please enter a whole number.";case"numberExpected":return"Please enter a number.";case"booleanExpected":return"Please enter true or false.";case"subprogramNotFound":return`No open diagram is called ${i.text}. The call was skipped.`;case"callTooDeep":return"Too many nested calls. Does a subprogram call itself?";case"callArguments":return`The call does not match the header of ${i.text}. Check the values in the parentheses.`;case"missingReturn":return`${i.text} ended without returning a value with return.`;case"fileNotFound":return`There is no file called ${i.text}.`;case"endOfFile":return`The file ${i.text} has no more lines.`;case"nullValue":return`${i.text} is null.`;case"other":return i.text}}class Ze extends Error{constructor(e){super(ah(e)),this.notice=e}}const Qe=i=>new Ze({kind:"unsupportedStatement",text:i}),F=i=>new Ze({kind:"invalidExpression",text:i}),$1=i=>new Ze({kind:"unknownVariable",text:i}),u3=()=>new Ze({kind:"divisionByZero"}),ts=new Map;function m3(i,e){ts.set(i,e)}const sh=()=>[...ts];function su(i){return i instanceof Ze?i.notice:{kind:"other",text:i instanceof Error?i.message:String(i)}}function c3(i){if(i===0)return"0";if(!Number.isFinite(i))return Number.isNaN(i)?"nan":i>0?"inf":"-inf";const e=Math.floor(Math.log10(Math.abs(Number(i.toPrecision(12)))));if(e<-4||e>=12){const[n,a]=i.toExponential(11).split("e"),s=n.includes(".")?n.replace(/0+$/,"").replace(/\.$/,""):n,r=Number(a);return`${s}e${r<0?"-":"+"}${String(Math.abs(r)).padStart(2,"0")}`}const t=i.toFixed(Math.max(0,11-e));return t.includes(".")?t.replace(/0+$/,"").replace(/\.$/,""):t}function ru(i){return Number.isFinite(i)&&Math.round(i)===i?i.toFixed(1):c3(i)}function we(i){switch(i.kind){case"int":return String(i.value);case"double":return ru(i.value);case"string":return i.value;case"boolean":return String(i.value);case"intArray":return"["+i.value.map(String).join(", ")+"]";case"doubleArray":return"["+i.value.map(ru).join(", ")+"]";case"stringArray":return"["+i.value.join(", ")+"]";case"booleanArray":return"["+i.value.map(String).join(", ")+"]";case"grid":return"["+d3(i).join(", ")+"]";case"reader":return`${i.className}(${i.file})`;case"writer":return`PrintWriter(${i.file})`;case"null":return"null"}}function d3(i){return i.value.map(e=>"["+e.map(t=>we(co(i.elementType,t))).join(", ")+"]")}function co(i,e){switch(i){case"int":return{kind:"int",value:e};case"double":return{kind:"double",value:e};case"string":return{kind:"string",value:e};case"boolean":return{kind:"boolean",value:e}}}function ou(i){return i==="string"?"":i==="boolean"?!1:0}function ho(i){return i.kind==="intArray"||i.kind==="doubleArray"||i.kind==="stringArray"||i.kind==="booleanArray"||i.kind==="grid"}function h3(i){return i.kind==="int"||i.kind==="double"?i.value:NaN}const vt=i=>({kind:"int",value:i}),wt=i=>({kind:"double",value:i}),Wl=i=>i!==void 0&&/\s/u.test(i),ns=i=>new RegExp("\\p{L}","u").test(i),Y1=i=>new RegExp("\\p{N}","u").test(i);function ai(i){const e=Array.from(i);return e.length===0||!(ns(e[0])||e[0]==="_")?!1:e.every(t=>ns(t)||Y1(t)||t==="_")}function Kt(i){switch(i.toLowerCase()){case"int":return"int";case"double":return"double";case"string":return"string";case"char":return"string";case"boolean":case"bool":return"boolean";default:return}}function lu(i){return i.kind==="int"?"int":i.kind==="double"?"double":i.kind==="boolean"?"boolean":"string"}function at(i){const e=Array.from(i);if(e.length===3&&e[0]==="'"&&e[2]==="'")return e[1];if(e.length<2||e[0]!=='"'||e[e.length-1]!=='"')return;const t=e.slice(1,-1).join("");if(/^(?:[^"\\]|\\.)*$/u.test(t))return t.replaceAll('\\"','"').replaceAll("\\n",` -`)}function uu(i){return i.replaceAll("(int)","").replaceAll("(double)","").trim()}function El(i){const e=new Array(i.length).fill(!1);let t=0,n=!1,a=!1;return i.forEach((s,r)=>{if(n){a?a=!1:s==="\\"?a=!0:s==='"'&&(n=!1);return}switch(s){case'"':n=!0;break;case"(":case"[":t+=1;break;case")":case"]":t-=1;break;default:e[r]=t===0}}),e}function is(i,e){const t=Array.from(i),n=Array.from(e),a=El(t),s=[];let r=[],o=0;for(;ot[o+m]===u)&&a.slice(o,l).every(Boolean)){s.push(r.join("").trim()),r=[],o=l;continue}r.push(t[o]),o+=1}return s.push(r.join("").trim()),s}function g3(i){const e=Array.from(i),t=El(e);for(let n=0;n=","<=","==","!="].includes(o)&&(a=o)}if(a===void 0&&(e[n]==="<"||e[n]===">")&&(a=e[n]),a===void 0)continue;const s=e.slice(0,n).join("").trim(),r=e.slice(n+a.length).join("").trim();return{lhs:s,op:a,rhs:r}}}function Es(i,e){let t=0,n=!1,a=!1;for(let s=e;se.length||!t.every((r,o)=>e[a+o]===r))continue;const s=a+t.length-1;if(Es(e,s)===e.length-1)return{lhs:e.slice(0,a).join("").trim(),rhs:e.slice(s+1,-1).join("").trim()}}}function Yi(i){const e=i.trim();for(const t of["if","while","until","switch"]){if(!e.startsWith(t))continue;const n=e.slice(t.length);if(!(n===""||Wl(n[0])||n[0]==="("))continue;let a=n.trim();const s=rh(a);return s!==void 0&&(a=s),a===""?"true":a}return e===""?"true":e}function d1(i){const e=i.trim(),t=e.indexOf("[");if(!e.endsWith("]")||t<0)return;const n=e.slice(0,t).trim();if(!ai(n))return;const a=[];let s=t;for(;s2))return{arrayName:n,indexExpressions:a}}function f3(i){const e=i.trim();if(!e.endsWith(")"))return;const t=/^([A-Za-z_]\w*(?:\s*\[[^\[\]]*\])*|"(?:[^"\\]|\\.)*")\s*\.\s*([A-Za-z_]\w*)\s*\(/u.exec(e);if(!t)return;const n=Array.from(e),a=Array.from(t[0]).length-1;if(Es(n,a)!==n.length-1)return;const s=n.slice(a+1,-1).join("").trim();return{target:t[1],method:t[2],args:s===""?[]:is(s,",")}}function mu(i){return ai(i)||d1(i)!==void 0}function dr(i){const e=[];let t="",n=!1,a=!1,s=0;for(const r of i){if(a){t+=r,a=!1;continue}if(r==="\\"){t+=r,a=!0;continue}if(r==='"'){n=!n,t+=r;continue}if(!n&&r==="("&&(s+=1),!n&&r===")"&&(s-=1),r==="+"&&!n&&s===0){e.push(t),t="";continue}t+=r}if(n)throw F(i);return e.push(t),e}function x3(i){const e=[];let t=0,n="";for(const a of i){if(a==="{"&&(t+=1),a==="}"&&(t-=1),a===","&&t===0){e.push(n),n="";continue}n+=a}return n.trim()!==""&&e.push(n),e}function cu(i){const e=Array.from(i),t=[];let n=0;for(;n1)throw F(i)}else if(!Y1(e[n]))break;n+=1}const o=e.slice(s,n).join("");if(o==="."||!/^[0-9]*\.?[0-9]*$/.test(o))throw F(i);t.push({t:"number",literal:o,value:Number(o)});continue}if(ns(a)||a==="_"){const s=n;for(;n=0&&s=0&&o=0&&s|&&|\|\||^\s*!/u.test(e)}function Yn(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function hu(i){const e=i.slice(0,3);for(;e.length<3;)e.push("");return e}function po(i){const e=i.map(t=>Yn(t).trim());return e.length===1&&e[0].includes(";")?hu(e[0].split(";").map(t=>t.trim())):hu(e)}const lt=i=>i.frame?{frame:i.frame,callPath:i.callPath}:{};function qt(i,e=[],t={}){const n=[],a=s=>n.push(t.frame?{...s,...t}:s);return i.forEach((s,r)=>{const o=[...e,r],l=s.textLines.join(" ").trim();switch(s.type){case I.anweisung:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"statement"});break;case I.verzweigung:a({path:o,text:l||"true",kind:"branch",cases:s.cases});break;case I.fallauswahl:a({path:o,text:l||"0",kind:"switchSelection",cases:s.cases});break;case I.forSchleife:a({path:o,text:l,kind:"forLoopStart",loopBody:s.loopBody,forParts:po(s.textLines)});break;case I.whileSchleife:a({path:o,text:l||"true",kind:"whileLoop",loopBody:s.loopBody});break;case I.doUntilSchleife:a({path:o,text:l||"true",kind:"doUntilLoop",loopBody:s.loopBody});break;case I.endlosschleife:a({path:o,text:l||"true",kind:"infiniteLoop",loopBody:s.loopBody});break;case I.aussprung:a({path:o,text:l,kind:"jump"});break;case I.aufruf:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"call"});break}}),n}function y3(i,e){const t=i.trim().replaceAll(",",".");switch(e){case"int":if(!/^[+-]?[0-9]+$/.test(t))throw new Ze({kind:"wholeNumberExpected"});return vt(Number(t));case"double":if(!/^[+-]?([0-9]+\.?[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?$/.test(t))throw new Ze({kind:"numberExpected"});return wt(Number(t));case"string":return{kind:"string",value:i};case"boolean":switch(t.toLowerCase()){case"true":case"wahr":return{kind:"boolean",value:!0};case"false":case"falsch":return{kind:"boolean",value:!1};default:throw new Ze({kind:"booleanExpected"})}}}function gu(){return{stepIndex:0,variables:new Map,outputLines:[],isHalted:!1,files:new Map,robotActions:[]}}function v3(i,e){for(let t=0;tt===e.path[n])}function yt(i){const e=/^(void|int|double|String|boolean)\s+([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(Yn(i));if(!e)return;const t=[];if(e[3].trim()!=="")for(const n of e[3].split(",")){const a=/^(int|double|String|boolean|char)\s*((?:\[\s*\]){0,2})\s+([A-Za-z_]\w*)$/u.exec(n.trim());if(!a)return;const s=(a[2].match(/\[/gu)??[]).length;t.push({type:Kt(a[1]),name:a[3],...s>0?{dims:s}:{}})}return{returnType:Kt(e[1]),name:e[2],params:t}}function oh(i){const e=/^(?:(?:(int|double|String|boolean)\s+)?([A-Za-z_]\w*)\s*=\s*)?([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(Yn(i));if(e)return{targetType:e[1]?Kt(e[1]):void 0,target:e[2],name:e[3],args:e[4].trim()===""?[]:is(e[4],",")}}function as(i){var t,n;const e=Yn(i);return((t=yt(e))==null?void 0:t.name)??((n=oh(e))==null?void 0:n.name)??e.replace(/\(\s*\)$/u,"").trim()}class bi{constructor(e,t=()=>{}){v(this,"steps");v(this,"state",gu());v(this,"nextFrame",1);v(this,"callDepth",0);v(this,"frames",new Map);v(this,"peeking",!1);v(this,"robotSensors",{});v(this,"afterOutput",!1);this.resolveSubprogram=t,this.steps=qt(e.elements)}get currentStepPath(){const e=this.steps[this.state.stepIndex];return(e==null?void 0:e.callPath)??(e==null?void 0:e.path)}get canStep(){return!this.state.isHalted&&!this.state.inputRequest&&this.state.stepIndex ${we(n)}`}catch(n){this.state.inputErrorNotice=su(n);return}this.state.inputRequest=void 0,this.state.inputErrorNotice=void 0,this.state.stepIndex+=1,this.state.notice=this.finishedIfAtEnd()}}finishedIfAtEnd(){return this.state.stepIndex>=this.steps.length?{kind:"finished"}:void 0}splice(e){this.steps.splice(this.state.stepIndex,1,...e)}noticeAfterEntering(e){return e.length>0?void 0:this.finishedIfAtEnd()}executeBranch(e){const t=e.cases;if(!t||t.length<2)throw Qe(e.text);const n=Yi(e.text),a=this.evaluateBool(n),s=a?0:1,r=qt(t[s].elements,[...e.path,s],lt(e));this.splice(r),this.state.lastTrace=`${n} -> ${a}`,this.state.notice=this.noticeAfterEntering(r)}executeSwitchSelection(e){const t=e.cases;if(!t||t.length===0)throw Qe(e.text);const n=Yi(e.text),a=this.evaluateSwitchSelector(n),s=v3(a,t)??t.length-1,r=qt(t[s].elements,[...e.path,s],lt(e));this.splice(r),this.state.lastTrace=`${n} -> ${t[s].name}`,this.state.notice=this.noticeAfterEntering(r)}executeForLoopStart(e){const t=po(e.forParts??[e.text]);t[0]!==""&&this.executeStatement(t[0]),this.splice([{...lt(e),path:e.path,text:t[1],kind:"forLoopCondition",loopBody:e.loopBody,forParts:t}])}executeForLoopCondition(e){const t=po(e.forParts??[e.text]),n=t[1]===""?"true":t[1],a=this.evaluateBool(n);if(this.state.lastTrace=`${n} -> ${a}`,a){const s=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...s,{...lt(e),path:e.path,text:t[2],kind:"forLoopIncrement",loopBody:e.loopBody,forParts:t},{...lt(e),path:e.path,text:t[1],kind:"forLoopCondition",loopBody:e.loopBody,forParts:t}])}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}executeForLoopIncrement(e){const t=e.text.trim();t!==""&&this.executeIncrement(t),this.splice([])}executeWhileLoop(e){const t=Yi(e.text),n=this.evaluateBool(t);if(this.state.lastTrace=`${t} -> ${n}`,n){const a=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...a,{...lt(e),path:e.path,text:e.text,kind:"whileLoop",loopBody:e.loopBody}]),this.state.notice=this.noticeAfterEntering(a)}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}enterDoUntilLoop(e){const t=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...t,{...lt(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}]),this.state.notice=this.noticeAfterEntering(t)}executeDoUntilCondition(e){const t=Yi(e.text),n=this.evaluateBool(t);if(this.state.lastTrace=`${t} -> ${n}`,n){const a=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...a,{...lt(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}])}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}enterInfiniteLoop(e){const t=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...t,{...lt(e),path:e.path,text:e.text,kind:"infiniteLoop",loopBody:e.loopBody}]),this.state.lastTrace="true -> true",this.state.notice=t.length>0?void 0:{kind:"infiniteLoopWithoutBody"}}executeJump(e){const t=e.frame??0,n=o=>o.lengthl===e.path[u]);let a=this.steps.length,s="end";for(let o=this.state.stepIndex+1;o ${s}`,s==="return"&&this.finishFrame(r),this.state.notice=this.finishedIfAtEnd()}executeCall(e){const t=e.text,n=this.resolveSubprogram(as(t));if(!n){this.splice([]),this.state.lastTrace=`${t} -> ?`,this.state.notice={kind:"subprogramNotFound",text:t},this.state.stepIndex>=this.steps.length&&(this.state.notice={kind:"finished"});return}const a=oh(t),s=yt(n.caption);if(s?((a==null?void 0:a.args.length)??0)!==s.params.length||(a==null?void 0:a.target)!==void 0&&!s.returnType:a!==void 0&&(a.args.length>0||a.target!==void 0))throw new Ze({kind:"callArguments",text:(s==null?void 0:s.name)??as(t)});if(this.callDepth>=l3)throw new Ze({kind:"callTooDeep"});const o=new Map,l=[];s==null||s.params.forEach((d,h)=>{const g=a.args[h].trim();if(!d.dims){o.set(d.name,this.evaluateExpression(g,d.type));return}const f=this.state.variables.get(g);if(!f)throw/^[A-Za-z_]\w*$/u.test(g)?new Ze({kind:"unknownVariable",text:g}):F(g);if(!(d.dims===1?f.kind===`${d.type}Array`:f.kind==="grid"&&f.elementType===d.type))throw F(g);o.set(d.name,f),l.push({param:d.name,callerName:g})}),this.callDepth+=1;const u={frame:this.nextFrame++,callPath:e.callPath??e.path};s&&(this.frames.set(u.frame,{saved:this.state.variables,header:s,call:a,references:l}),this.state.variables=o);const m=qt(n.elements,[],u);this.splice([...m,{...u,path:e.path,text:t,kind:"callEnd"}]);const c=s==null?void 0:s.params.map((d,h)=>`${d.name} = ${d.dims?a.args[h].trim():we(o.get(d.name))}`).join(", ");this.state.lastTrace=c?`${t} -> ${c}`:`${t} -> call`}executeCallEnd(e){this.callDepth-=1,this.splice([]),this.state.lastTrace=`${e.text} -> return`,this.finishFrame(e),this.state.notice=this.finishedIfAtEnd()}executeReturn(e){const t=e.frame??0,n=Yn(e.text).slice(6).trim(),a=this.frames.get(t);if(a&&n!==""){if(!a.header.returnType)throw F(e.text);a.returnValue=this.evaluateExpression(n,a.header.returnType)}const s=a!=null&&a.returnValue?`${e.text} -> ${we(a.returnValue)}`:`${e.text} -> return`;if(t===0){this.steps.splice(this.state.stepIndex),this.state.lastTrace=s,this.state.notice={kind:"finished"};return}let r=this.state.stepIndex+1;for(;r0?new Map(t.saved):t.saved;for(const m of t.references){const c=this.state.variables.get(m.param);c&&n.set(m.callerName,c)}this.state.variables=n;const a=t.returnValue;if(t.header.returnType&&!a)throw new Ze({kind:"missingReturn",text:t.header.name});const s=(l=t.call)==null?void 0:l.target;if(!s||!a)return;let r=(u=t.call)==null?void 0:u.targetType;if(!r)try{r=this.inferTargetValueType(s)}catch{r=t.header.returnType}const o=r==="double"&&a.kind==="int"?wt(a.value):r==="string"?{kind:"string",value:we(a)}:a;if(lu(o)!==r)throw F(e.text);this.assignValue(o,s),this.state.lastTrace=`${s} = ${e.text.slice(e.text.indexOf("=")+1).trim()} -> ${we(o)}`}executeStatement(e){const t=this.state,n=e.trim(),a=n.toLowerCase(),s=this.afterOutput;if(this.afterOutput=!1,a.startsWith("input:")){t.inputRequest=this.parseInputRequest(n,s),t.outputLineOpen=!1,t.inputErrorNotice=void 0;return}const r=/^System\s*\.\s*out\s*\.\s*(println|print)\s*\(([\s\S]*)\)\s*;?$/u.exec(n);if(a.startsWith("output:")||a.startsWith("print:")||r){const y=r?r[2]:n.slice(a.startsWith("output:")?7:6),w=this.peek(()=>this.renderOutputExpression(y)),S=y.trim()===""?"":this.evaluateOutputExpression(y);t.outputLineOpen&&t.outputLines.length?t.outputLines[t.outputLines.length-1]+=S:t.outputLines.push(S),t.outputLineOpen=(r==null?void 0:r[1])==="print",this.afterOutput=!0,t.lastTrace=`${w} -> ${S}`;return}const o=i3(n);if(o){this.executeMBotCommand(o.method,o.args,n);return}if(this.executeFileStatement(n))return;if(n.endsWith("++")||n.endsWith("--")||n.includes("+=")||n.includes("-=")){this.executeIncrement(n);return}const l=/^(?:final\s+)?([A-Za-z]+)\s+([A-Za-z_]\w*(?:\s*,\s*[A-Za-z_]\w*)*)$/u.exec(Yn(n).trim()),u=l?Kt(l[1]):void 0;if(l&&u){const y=l[2].split(",").map(w=>w.trim());for(const w of y)t.variables.set(w,co(u,ou(u)));t.lastTrace=y.map(w=>`${w} = ${we(t.variables.get(w))}`).join(", ");return}const m=n.indexOf("=");if(m<0)throw Qe(n);const c=n.slice(0,m).trim(),d=n.slice(m+1),h=this.parseArrayDeclaration(c,d);if(h){t.variables.set(h.name,h.value),t.lastTrace=`${h.name} = new ${h.typeName}[${h.count}]`;return}const g=this.parseAssignmentTarget(c);let f;try{f=this.peek(()=>this.renderNumericExpression(d))}catch{f=d.trim()}let x=g.valueType;if(!x)try{x=this.inferTargetValueType(g.variableName)}catch{x="int"}const b=this.evaluateExpression(d,x);this.assignValue(b,g.variableName),t.lastTrace=`${g.variableName} = ${f} -> ${we(b)}`}executeMBotCommand(e,t,n){var r;if((r=xi[e])!=null&&r.text){const o=xi[e];if(t.length!==o.args+1)throw F(n);const l=Ka(e,t.slice(0,-1).map(c=>this.evaluateDouble(c)));if(!l)throw F(n);const u=au(e,l,this.evaluateOutputExpression(t[t.length-1])),m=o.choices;if(m&&!m.includes(u.text??""))throw F(`${n} (${m.join(", ")})`);this.state.robotActions.push(u),this.state.lastTrace=`${n} -> ${u.label}`;return}const a=Ka(e,t.map(o=>this.evaluateDouble(o)));if(!a)throw F(n);const s=au(e,a);this.state.robotActions.push(s),this.state.lastTrace=`${n} -> ${s.label}`}executeFileStatement(e){const t=this.state,n=Yn(e).trim(),a=/^(?:(Scanner|BufferedReader|PrintWriter)\s+)?([A-Za-z_]\w*)\s*=\s*new\s+(Scanner|BufferedReader|PrintWriter)\s*\(([\s\S]*)\)$/u.exec(n);if(a){const[,m,c,d,h]=a;if(m&&m!==d)throw F(n);const g=d==="Scanner"?/^new\s+File\s*\(([\s\S]+)\)$/u.exec(h.trim()):d==="BufferedReader"?/^new\s+FileReader\s*\(([\s\S]+)\)$/u.exec(h.trim()):/^(?:new\s+(?:File|FileWriter)\s*\(([\s\S]+)\)|([\s\S]+))$/u.exec(h.trim());if(!g)throw Qe(n);const f=this.fileNameValue(g[1]??g[2]);if(d==="PrintWriter")t.variables.set(c,{kind:"writer",file:f,text:""});else{const b=this.fileContent(f).split(/\r?\n/u);b[b.length-1]===""&&b.pop(),t.variables.set(c,{kind:"reader",className:d,file:f,lines:b,next:0})}return t.lastTrace=`${c} = new ${d}(${f})`,!0}const s=/^Files\s*\.\s*writeString\s*\(\s*(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(([^()]+)\)\s*,([\s\S]+)\)$/u.exec(n);if(s){const m=this.fileNameValue(s[1]),c=this.evaluateOutputExpression(s[2]);return t.files.set(m,c),t.lastTrace=`${m} ← ${JSON.stringify(c)}`,!0}const r=/^([A-Za-z_]\w*)\s*\.\s*(println|print|close)\s*\(([\s\S]*)\)$/u.exec(n),o=r&&t.variables.get(r[1]);if(!r||!o)return!1;if(o.kind==="null")throw new Ze({kind:"nullValue",text:r[1]});if(o.kind==="reader"&&r[2]==="close")return t.lastTrace=`${r[1]}.close()`,!0;if(o.kind!=="writer")return!1;if(r[2]==="close")return t.files.set(o.file,o.text),t.lastTrace=`${o.file} ← ${JSON.stringify(o.text)}`,!0;const l=r[3].trim()===""?"":this.evaluateOutputExpression(r[3]),u=r[2]==="println"?l+` -`:l;return t.variables.set(r[1],{...o,text:o.text+u}),t.lastTrace=`${r[1]}.${r[2]}(${JSON.stringify(l)})`,!0}fileNameValue(e){const t=e.trim(),n=at(t);if(n!==void 0)return n;const a=this.evaluateReference(t);if((a==null?void 0:a.kind)==="string")return a.value;throw F(t)}fileContent(e){const t=this.state.files.get(e)??ts.get(e);if(t===void 0)throw new Ze({kind:"fileNotFound",text:e});return t}readerMethod(e,t,n,a){if(n.args.length)throw F(a);const s=t.next0?"+":"-";if(r.kind==="int"){t.set(s,vt(r.value+a)),this.state.lastTrace=`${s} = ${r.value} ${o} 1 -> ${r.value+a}`;return}if(r.kind==="double"){const l=r.value+a;t.set(s,wt(l)),this.state.lastTrace=`${s} = ${we(r)} ${o} 1 -> ${we(wt(l))}`;return}throw Qe(e)}for(const[n,a]of[["+=",1],["-=",-1]]){const s=e.indexOf(n);if(s<0)continue;const r=e.slice(0,s).trim(),o=e.slice(s+2),l=t.get(r);if(!ai(r)||!l)throw Qe(e);const u=a>0?"+":"-";if(l.kind==="int"){const m=this.evaluateInt(o),c=l.value+a*m;t.set(r,vt(c)),this.state.lastTrace=`${r} = ${l.value} ${u} ${m} -> ${c}`;return}if(l.kind==="double"){const m=this.evaluateDouble(o),c=l.value+a*m;t.set(r,wt(c)),this.state.lastTrace=`${r} = ${we(l)} ${u} ${we(wt(m))} -> ${we(wt(c))}`;return}throw Qe(e)}this.executeStatement(e)}parseAssignmentTarget(e){if(d1(e))return{variableName:e.trim()};const t=e.split(/\s+/u).filter(Boolean);let n,a;if(t.length===1)n=t[0];else if(t.length===2&&Kt(t[0]))n=t[1],a=Kt(t[0]);else if(t.length===3&&t[0]==="const"&&Kt(t[1]))n=t[2],a=Kt(t[1]);else throw Qe(e);if(!mu(n))throw Qe(e);return{variableName:n,valueType:a}}parseInputRequest(e,t=!1){const n=e.slice(6).trim(),a=/^(\S+)(?:\s+(\S+))?(?:\s+([\s\S]*))?$/u.exec(n);if(!a)throw Qe(e);const s=[a[1],a[2],a[3]].filter(c=>c!==void 0);let r,o,l;const u=Kt(s[0]);if(s.length>=2&&u?(r=s[1],o=u,l=(s[2]??"").trim()):(r=s[0],o=this.inferTargetValueType(r),l=(s[1]??"").trim()),!mu(r))throw Qe(e);const m=at(l)??l;return m===""&&t?this.state.outputLineOpen?{variableName:r,valueType:o,prompt:"",continuesLine:!0}:{variableName:r,valueType:o,prompt:""}:{variableName:r,valueType:o,prompt:m===""?`${r}:`:m}}parseArrayDeclaration(e,t){const n=e.split(/\s+/u).filter(Boolean);if(n.length!==2||!n[0].endsWith("[]"))return;const a=n[0].endsWith("[][]"),s=n[0].slice(0,a?-4:-2),r=Kt(s),o=n[1];if(!r||!ai(o))throw Qe(e);if(a)return this.parseGridDeclaration(o,s,r,t);const l=t.trim();if(l.startsWith("{")&&l.endsWith("}")){const h=l.slice(1,-1).split(",").map(f=>f.trim());let g;switch(r){case"int":g={kind:"intArray",value:h.map(f=>this.evaluateInt(f))};break;case"double":g={kind:"doubleArray",value:h.map(f=>this.evaluateDouble(f))};break;case"string":g={kind:"stringArray",value:h.map(f=>at(f)??this.evaluateOutputExpression(f))};break;case"boolean":g={kind:"booleanArray",value:h.map(f=>this.evaluateBool(f))};break}return{name:o,typeName:s,count:h.length,value:g}}const u=`new ${s}[`;if(!l.startsWith(u)){const h=this.evaluateStringMethod(l);if((h==null?void 0:h.kind)==="stringArray"&&r==="string")return{name:o,typeName:s,count:h.value.length,value:h}}if(!l.startsWith(u)||!l.endsWith("]"))throw Qe(t);const m=l.slice(u.length,-1),c=this.evaluateInt(m);if(c<0)throw F(m);const d=r==="int"?{kind:"intArray",value:new Array(c).fill(0)}:r==="double"?{kind:"doubleArray",value:new Array(c).fill(0)}:r==="boolean"?{kind:"booleanArray",value:new Array(c).fill(!1)}:{kind:"stringArray",value:new Array(c).fill("")};return{name:o,typeName:s,count:c,value:d}}parseGridDeclaration(e,t,n,a){var c;const s=a.trim(),r=d=>{switch(n){case"int":return this.evaluateInt(d);case"double":return this.evaluateDouble(d);case"boolean":return this.evaluateBool(d);case"string":return at(d.trim())??this.evaluateOutputExpression(d)}};if(s.startsWith("{")&&s.endsWith("}")){const d=x3(s.slice(1,-1)).map(h=>{const g=h.trim();if(!g.startsWith("{")||!g.endsWith("}"))throw F(g);return g.slice(1,-1).trim()===""?[]:g.slice(1,-1).split(",").map(f=>r(f.trim()))});return{name:e,typeName:t,count:`${d.length}][${((c=d[0])==null?void 0:c.length)??0}`,value:{kind:"grid",elementType:n,value:d}}}const o=new RegExp(String.raw`^new\s+${t}\s*\[(.+)\]\s*\[(.+)\]$`,"u").exec(s);if(!o)throw Qe(a);const l=this.evaluateInt(o[1]),u=this.evaluateInt(o[2]);if(l<0)throw F(o[1]);if(u<0)throw F(o[2]);const m={kind:"grid",elementType:n,value:Array.from({length:l},()=>new Array(u).fill(ou(n)))};return{name:e,typeName:t,count:`${l}][${u}`,value:m}}arrayIndex(e){const t=this.evaluateInt(e);if(t<0)throw F(e);return t}evaluateReference(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return n;const a=this.evaluateStringMethod(t);if(a)return a;const s=/^\(\s*char\s*\)\s*(.+)$/su.exec(t);if(s){const o=this.evaluateInt(s[1]);if(!(o>=0&&o<=1114111))throw F(t);return{kind:"string",value:String.fromCodePoint(o)}}const r=d1(t);if(r)return this.valueInArray(r.arrayName,r.indexExpressions.map(o=>this.arrayIndex(o)))}evaluateStringMethod(e){const t=f3(e);if(!t)return;const n=this.evaluateStaticCall(e,t);if(n)return n;const a=this.state.variables.get(t.target.trim());if((a==null?void 0:a.kind)==="reader")return this.readerMethod(t.target.trim(),a,t,e);if((a==null?void 0:a.kind)==="null")throw new Ze({kind:"nullValue",text:t.target.trim()});const s=at(t.target)??this.stringValueOf(t.target);if(s===void 0)return;const r=t.args,o=d=>{const h=r[d];if(h===void 0)throw F(e);const g=at(h.trim());if(g!==void 0)return g;const f=this.evaluateReference(h);if((f==null?void 0:f.kind)==="string")return f.value;throw F(h)},l=d=>{if(r[d]===void 0)throw F(e);return this.evaluateInt(r[d])},u=d=>{if(r.length!==d)throw F(e)},m=Array.from(s),c=(d,h)=>{if(d<0||d>h)throw F(e);return d};switch(t.method){case"length":return u(0),vt(m.length);case"charAt":return u(1),{kind:"string",value:m[c(l(0),m.length-1)]};case"substring":{if(r.length!==1&&r.length!==2)throw F(e);const d=c(l(0),m.length),h=r.length===2?c(l(1),m.length):m.length;if(h0&&h[h.length-1]==="";)h.pop();return{kind:"stringArray",value:h}}default:return}}evaluateStaticCall(e,t){const n=()=>{if(t.args.length!==1)throw F(e);return t.args[0]},a=s=>{const r=at(s.trim());if(r!==void 0)return r;const o=this.evaluateReference(s);if((o==null?void 0:o.kind)==="string")return o.value;throw F(s)};switch(`${t.target}.${t.method}`){case"Integer.parseInt":{const s=a(n()).trim();if(!/^[+-]?\d+$/u.test(s))throw new Ze({kind:"wholeNumberExpected"});return vt(Number(s))}case"Double.parseDouble":{const s=Number(a(n()).trim());if(!Number.isFinite(s))throw new Ze({kind:"numberExpected"});return wt(s)}case"String.valueOf":return{kind:"string",value:this.evaluateOutputExpression(n())};case"Files.readString":{const s=/^(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)$/u.exec(n().trim());if(!s)throw F(e);const r=at(s[1]),o=ts.get(r);if(o===void 0)throw new Ze({kind:"fileNotFound",text:r});return{kind:"string",value:o}}default:return}}stringValueOf(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return n.kind==="string"?n.value:void 0;const a=d1(t);if(!a)return;const s=this.valueInArray(a.arrayName,a.indexExpressions.map(r=>this.arrayIndex(r)));return s.kind==="string"?s.value:void 0}substituteStringCalls(e){if(!e.includes("("))return e;let t="",n=e;const a=/([A-Za-z_]\w*(?:\[[^\[\]]*\])*|"(?:[^"\\]|\\.)*")\s*\.\s*(length|indexOf|lastIndexOf|compareTo|charAt|parseInt|parseDouble)\s*\(/u;for(let s=a.exec(n);s;s=a.exec(n)){const r=s.index+s[0].length-1,o=Es(Array.from(n),Array.from(n.slice(0,r)).length);if(o===void 0)break;const l=Array.from(n),u=l.slice(Array.from(n.slice(0,s.index)).length,o+1).join(""),m=this.evaluateStringMethod(u),c=l.slice(0,Array.from(n.slice(0,s.index)).length).join(""),d=(m==null?void 0:m.kind)==="string"?go(m.value):void 0;(m==null?void 0:m.kind)==="int"?t+=c+String(m.value):(m==null?void 0:m.kind)==="double"?t+=c+(Number.isInteger(m.value)?m.value.toFixed(1):String(m.value)):d!==void 0?t+=c+String(d):t+=c+u,n=l.slice(o+1).join("")}return t+n}valueInArray(e,t){const n=this.state.variables.get(e);if(!n)throw $1(e);const a=`${e}[${t.join("][")}]`;if(n.kind==="grid"){if(t.length!==2)throw F(a);const r=n.value[t[0]];if(!r||t[1]>=r.length)throw F(a);return co(n.elementType,r[t[1]])}if(t.length!==1)throw F(a);const s=t[0];if(!ho(n))throw F(e);if(s>=n.value.length)throw F(a);switch(n.kind){case"intArray":return vt(n.value[s]);case"doubleArray":return wt(n.value[s]);case"stringArray":return{kind:"string",value:n.value[s]};case"booleanArray":return{kind:"boolean",value:n.value[s]};default:throw F(e)}}inferTargetValueType(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return lu(n);const a=d1(t);if(a){const s=this.state.variables.get(a.arrayName);if(!s)throw $1(a.arrayName);if(s.kind==="intArray")return"int";if(s.kind==="doubleArray")return"double";if(s.kind==="stringArray")return"string";if(s.kind==="booleanArray")return"boolean";if(s.kind==="grid")return s.elementType;throw F(a.arrayName)}throw Qe(e)}assignValue(e,t){const n=t.trim(),a=d1(n);if(!a){this.state.variables.set(n,e);return}const s=a.indexExpressions.map(u=>this.arrayIndex(u)),r=this.state.variables.get(a.arrayName);if(!r)throw $1(a.arrayName);if(r.kind==="grid"){if(s.length!==2||s[0]>=r.value.length||s[1]>=r.value[s[0]].length)throw F(n);const u=r.elementType==="double"&&e.kind==="int"||e.kind===r.elementType?e.value:void 0;if(u===void 0||ho(e))throw F(n);const m=r.value.map(c=>[...c]);m[s[0]][s[1]]=u,this.state.variables.set(a.arrayName,{...r,value:m});return}if(s.length!==1)throw F(n);const o=s[0];let l;if(r.kind==="intArray"&&e.kind==="int")l={kind:"intArray",value:[...r.value]};else if(r.kind==="doubleArray"&&(e.kind==="double"||e.kind==="int"))l={kind:"doubleArray",value:[...r.value]};else if(r.kind==="stringArray"&&e.kind==="string")l={kind:"stringArray",value:[...r.value]};else if(r.kind==="booleanArray"&&e.kind==="boolean")l={kind:"booleanArray",value:[...r.value]};else throw F(n);if(o>=l.value.length)throw F(n);l.value[o]=e.value,this.state.variables.set(a.arrayName,l)}evaluateOutputExpression(e){const t=this.withSensors(e).trim();if(du(t)&&dr(t).every(s=>at(s.trim())===void 0)&&!this.evaluateReference(t))return String(this.evaluateBool(t));let n,a;for(const s of dr(this.withSensors(e))){const r=s.trim(),o=at(r),l=o!==void 0?{kind:"string",value:o}:this.evaluateReference(r)??(du(r)?{kind:"boolean",value:this.evaluateBool(r)}:this.evaluateNumeric(r)),u=l.kind==="int"||l.kind==="double";if(a===void 0&&u){n?n=n.kind==="int"&&l.kind==="int"?vt(n.value+l.value):wt(n.value+l.value):n=l;continue}a=(a??(n?we(n):""))+we(l),n=void 0}return a??(n?we(n):"")}renderOutputExpression(e){return dr(e).map(t=>{const n=t.trim();if(at(n)!==void 0)return n;const a=this.evaluateReference(n);if(a)return we(a);try{return this.renderNumericExpression(n)}catch{return n}}).join(" + ")}evaluateExpression(e,t){switch(t){case"int":return vt(this.evaluateInt(e));case"double":return wt(this.evaluateDouble(e));case"string":{const n=e.trim(),a=at(n);if(a!==void 0)return{kind:"string",value:a};if(n==="null")return{kind:"null"};const s=this.evaluateReference(n);return(s==null?void 0:s.kind)==="null"?s:s?{kind:"string",value:we(s)}:{kind:"string",value:this.evaluateOutputExpression(e)}}case"boolean":return{kind:"boolean",value:this.evaluateBool(e)}}}evaluateNumeric(e){const{v:t,int:n}=this.parser(e).parseNumber();return n||Number.isFinite(t)&&Math.round(t)===t?vt(t):wt(t)}parser(e){const t=this.withSensors(e);return new b3(cu(uu(this.substituteStringCalls(t))),this.state.variables)}withSensors(e){return s3(e,t=>this.robotSensors[t]??St[t].simulated)}evaluateInt(e){return this.parser(e).parseInt()}evaluateDouble(e){return this.parser(e).parseDouble()}evaluateBool(e){const t=this.withSensors(e).trim();if(t==="true")return!0;if(t==="false")return!1;const n=this.evaluateReference(t);if((n==null?void 0:n.kind)==="boolean")return n.value;const a=is(t,"||");if(a.length>1)return a.some(u=>this.evaluateBool(u));const s=is(t,"&&");if(s.length>1)return s.every(u=>this.evaluateBool(u));if(t.startsWith("!")&&!t.startsWith("!="))return!this.evaluateBool(t.slice(1));const r=rh(t);if(r!==void 0)return this.evaluateBool(r);const o=p3(t);if(o)return this.evaluateComparison(o.lhs,"==",o.rhs);const l=g3(t);if(l)return this.evaluateComparison(l.lhs,l.op,l.rhs);if(this.stringOperand(t)!==void 0)throw F(t);return this.evaluateDouble(t)!==0}evaluateComparison(e,t,n){if((e.trim()==="null"||n.trim()==="null")&&(t==="=="||t==="!=")){const m=d=>{var h;return d.trim()==="null"||((h=this.evaluateReference(d))==null?void 0:h.kind)==="null"},c=m(e)===m(n);return t==="=="?c:!c}const a=this.booleanOperand(e),s=this.booleanOperand(n);if((a!==void 0||s!==void 0)&&(t==="=="||t==="!=")){const m=a??this.evaluateBool(e),c=s??this.evaluateBool(n);return t==="=="?m===c:m!==c}const r=this.stringOperand(e),o=this.stringOperand(n);let l,u;if(r!==void 0||o!==void 0){if(r===void 0||o===void 0)throw F(`${e} ${t} ${n}`);l=r,u=o}else l=this.evaluateDouble(e),u=this.evaluateDouble(n);switch(t){case"==":return l===u;case"!=":return l!==u;case"<":return l":return l>u;case">=":return l>=u;default:throw F(`${e} ${t} ${n}`)}}booleanOperand(e){const t=e.trim();if(t==="true")return!0;if(t==="false")return!1;const n=this.evaluateReference(t);return(n==null?void 0:n.kind)==="boolean"?n.value:void 0}stringOperand(e){const t=e.trim(),n=at(t);if(n!==void 0)return n;const a=this.evaluateReference(t);return(a==null?void 0:a.kind)==="string"?a.value:void 0}evaluateSwitchSelector(e){const t=this.withSensors(e).trim(),n=at(t);if(n!==void 0)return{kind:"text",value:n};const a=this.state.variables.get(t);if(a)switch(a.kind){case"int":return{kind:"int",value:a.value};case"double":return{kind:"int",value:Math.trunc(a.value)};case"string":return{kind:"text",value:a.value};default:throw F(t)}return/^[+-]?[0-9]+$/.test(t)?{kind:"int",value:Number(t)}:{kind:"int",value:this.evaluateInt(t)}}renderNumericExpression(e){return cu(uu(e)).map(t=>{if(t.t==="number")return t.literal;if(t.t==="identifier"){const n=this.state.variables.get(t.name);if(!n)throw $1(t.name);return we(n)}return t.t}).join(" ").replaceAll("( ","(").replaceAll(" )",")").replaceAll(" . ",".").replaceAll("[ ","[").replaceAll(" ]","]")}}const lh={baseIndent:0,indentPerLevel:4,includeDiagramTextAsComments:!1,includeEmptyElseBranch:!0,pseudocodeNote:"Pseudocode – not a runnable program"};function ss(i,e,t={},n=[]){const a=Nl(i,e,t);let s="";e==="javascript"&&(s+=`"use strict"; + pass`],ii=(i,e)=>Array.from({length:e},(t,n)=>i>>>8*n&255);function Q2(i){let e=0;for(let t=0;t>>0;return ii(e,4)}const mr=(i,e)=>Ml([1,0,Yd,i,...ii(e.length,2),...e]);function q2(i,e=G2){const t=new TextEncoder().encode(i),n=(4-t.length%W1+W1)%W1,a=new Uint8Array(t.length+n).fill(10);a.set(t);const s=[mr(1,[0,...ii(a.length,4),...Q2(a),...Array.from(new TextEncoder().encode(e))])],r=a.length-4;for(let o=0;oi.length===3&&i[0]===13,$2=i=>i.length===7||i.some((e,t)=>e===Yd&&i[t+1]===240),Xd=()=>typeof navigator>"u"?void 0:navigator.serial,cr=()=>Xd()!==void 0,Y2=(...i)=>`exec(${JSON.stringify(i.join("; "))})`,Ws=(i,e=24)=>Y2("cyberpi.display.clear()",`cyberpi.display.show_label(${JSON.stringify(i)}, ${e}, 'center')`),Kd=Ws("VisuBot",32);class X2{constructor(){v(this,"port");v(this,"writer");v(this,"reader");v(this,"loop");v(this,"rx",[]);v(this,"idx",1);v(this,"frameWaiters",[]);v(this,"waiting",new Map);v(this,"queue",Promise.resolve());v(this,"listeners",new Set);v(this,"error");v(this,"connecting",!1)}listen(e){return this.listeners.add(e),()=>this.listeners.delete(e)}changed(){for(const e of this.listeners)e()}get connected(){return this.writer!==void 0&&!this.connecting}async connect(){const e=Xd();if(!e)throw new Error("Web Serial");const t=await e.requestPort();await t.open({baudRate:115200}),this.port=t,this.writer=t.writable.getWriter(),this.error=void 0,this.connecting=!0,this.changed(),this.loop=this.readLoop(),window.addEventListener("pagehide",()=>void this.disconnect(),{once:!0}),await new Promise(n=>setTimeout(n,3e3)),this.writer&&(this.rx.length=0,this.connecting=!1,this.changed(),await this.run(Kd))}async disconnect(e){if(!this.port)return this.error=e,this.changed();if(!e&&this.writer&&!this.connecting)for(const r of["mbot2.EM_stop('ALL')","cyberpi.led.off()",Ws("Bis bald!")])await this.send(r,ur,2e3).catch(()=>{});const t=this.port,n=this.writer,a=this.reader,s=this.loop;this.port=this.writer=this.reader=this.loop=void 0,this.error=e,this.connecting=!1;for(const r of this.waiting.values())r.reject(new Error(e??"getrennt"));this.waiting.clear();try{await(a==null?void 0:a.cancel()),await s,await(n==null?void 0:n.close())}catch{}try{n==null||n.releaseLock(),await t.close()}catch(r){console.warn("[mBot2] Schließen",r.message)}this.changed()}run(e){return this.send(e,ur,3e4).then(()=>{})}ask(e){return this.send(e,E2,3e3)}async upload(e,t=()=>{}){if(this.port||await this.connect(),!this.writer)throw new Error(this.error??"nicht verbunden");const n=q2(e),a=6+n.length+3;let s=0;const r=()=>t(++s,a),o=async()=>{await this.sendFrame(Ml(H2),U2),r();for(const l of V2)await this.send(l,ur,3e3),r()};await o(),await o();for(const l of n)await this.sendFrame(l,$2),r();s=a-3,await o(),await this.restart()}sendFrame(e,t){const n=this.queue.then(async()=>{for(let a=0;a<3;a++){if(!this.writer)throw new Error("nicht verbunden");let s=()=>{};const r=new Promise(u=>s=u),o={match:t,resolve:s};this.frameWaiters.push(o),await this.writer.write(e);const l=await Promise.race([r.then(()=>!0),new Promise(u=>setTimeout(()=>u(!1),3e3))]);if(this.frameWaiters=this.frameWaiters.filter(u=>u!==o),l)return}throw new Error("keine Antwort")});return this.queue=n.catch(()=>{}),n}async restart(){const e=this.port;await this.disconnect("restart"),this.error=void 0,await new Promise(t=>setTimeout(t,300)),await e.open({baudRate:115200}),await new Promise(t=>setTimeout(t,500)),await e.close(),this.changed()}send(e,t,n){const a=this.queue.then(()=>new Promise((s,r)=>{if(!this.writer)return r(new Error("nicht verbunden"));const o=this.idx;this.idx=this.idx%65535+1;const l=setTimeout(()=>{this.waiting.delete(o),r(new Error("keine Antwort"))},n);this.waiting.set(o,{resolve:u=>(clearTimeout(l),s(u)),reject:u=>(clearTimeout(l),r(u))}),this.writer.write(N2(e,t,o)).catch(u=>{this.waiting.delete(o),r(u)})}));return this.queue=a.catch(()=>{}),a}async readLoop(){var e;for(;(e=this.port)!=null&&e.readable;){const t=this.port.readable.getReader();this.reader=t;try{for(;;){const{value:n,done:a}=await t.read();if(a)break;this.rx.push(...n);for(const s of J2(this.rx)){const r=this.frameWaiters.findIndex(u=>u.match(s));r>=0&&this.frameWaiters.splice(r,1)[0].resolve();const o=F2(s);if(!o)continue;const l=this.waiting.get(o.idx);this.waiting.delete(o.idx),l==null||l.resolve(o.value)}}}catch(n){const a=["BufferOverrunError","FramingError","BreakError","ParityError"].includes(n.name);console.warn("[mBot2] Lesefehler",n.name,n.message),!a&&this.port&&this.disconnect(n.message)}finally{t.releaseLock()}if(!this.writer)break}}}const le=new X2,eh=5,K2=i=>Number.isInteger(i)&&i>=0&&iString(Math.round(i*100)/100),xi={forward:{args:1,defaults:[nu],python:([i])=>`mbot2.straight(${be(i)})`,label:([i])=>`${be(i)} cm vorwärts`},backward:{args:1,defaults:[nu],python:([i])=>`mbot2.straight(${be(-i)})`,label:([i])=>`${be(i)} cm rückwärts`},turnLeft:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${be(-i)})`,label:([i])=>`${be(i)}° nach links drehen`},turnRight:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${be(i)})`,label:([i])=>`${be(i)}° nach rechts drehen`},stop:{args:0,python:()=>'mbot2.EM_stop("ALL")',label:()=>"anhalten"},drive:{args:2,python:([i,e])=>`mbot2.drive_power(${be(i)}, ${be(-e)})`,label:([i,e])=>`Räder links ${be(i)} %, rechts ${be(e)} %`},setLed:{args:3,python:([i,e,t])=>`cyberpi.led.on(${be(i)}, ${be(e)}, ${be(t)})`,label:([i,e,t])=>`LEDs (${be(i)}, ${be(e)}, ${be(t)})`},ledOff:{args:0,python:()=>"cyberpi.led.off()",label:()=>"LEDs aus"},ledColor:{args:1,text:!0,choices:Object.keys(Xa),valid:([i])=>K2(i),python:([i],e)=>`cyberpi.led.on(${Xa[e].join(", ")}, id=${i+1})`,label:([i],e)=>`LED ${i}: ${e}`},playTone:{args:2,python:([i,e])=>`cyberpi.audio.play_tone(${be(i)}, ${be(e/1e3)})`,label:([i,e])=>`Ton ${be(i)} Hz, ${be(e)} ms`},pause:{args:1,label:([i])=>`${be(i)} ms warten`},resetTimer:{args:0,python:()=>"cyberpi.timer.reset()",label:()=>"Stoppuhr auf 0"},emotion:{args:0,text:!0,choices:e3,python:(i,e)=>`cyberpi.emotion.${e}()`,label:(i,e)=>`Gefühl: ${e}`},showText:{args:0,text:!0,python:(i,e)=>Ws(e),label:(i,e)=>`Bildschirm: ${e}`}},iu={red:{de:"rot",en:"red"},green:{de:"grün",en:"green"},blue:{de:"blau",en:"blue"},yellow:{de:"gelb",en:"yellow"},cyan:{de:"türkis",en:"cyan"},purple:{de:"lila",en:"purple"},white:{de:"weiß",en:"white"},black:{de:"schwarz",en:"black"}};let Ll="en";function t3(i){Ll=i==="de"?"de":"en"}const n3=()=>Ll;function th(i){const e=i.trim().toLowerCase(),t=iu[e]??Object.values(iu).find(n=>n.de===e);return t?t[Ll]:e}const l1=i=>({python:`cyberpi.controller.is_press('${i}')`,simulated:!1}),St={getDistance:{python:"mbuild.ultrasonic2.get(1)",simulated:100},getLine:{python:"mbuild.quad_rgb_sensor.get_line_sta('all', 1)",simulated:0},isLineLeft:{python:"mbuild.quad_rgb_sensor.is_line('L1', 1)",simulated:!1},isLineRight:{python:"mbuild.quad_rgb_sensor.is_line('R1', 1)",simulated:!1},getColor:{python:"mbuild.quad_rgb_sensor.get_color_sta('L1', 1)",simulated:"white"},isButtonA:l1("a"),isButtonB:l1("b"),isJoystickUp:l1("up"),isJoystickDown:l1("down"),isJoystickLeft:l1("left"),isJoystickRight:l1("right"),getBrightness:{python:"cyberpi.get_bri()",simulated:50},getLoudness:{python:"cyberpi.get_loudness('maximum')",simulated:0},getPitch:{python:"cyberpi.get_pitch()",simulated:0},getRoll:{python:"cyberpi.get_roll()",simulated:0},isShaken:{python:"cyberpi.is_shake()",simulated:!1},getBattery:{python:"cyberpi.get_battery()",simulated:100},getTimer:{python:"cyberpi.timer.get()",simulated:0}};function i3(i){const e=new Set;for(const t of i.matchAll(/\bmbot\s*\.\s*([A-Za-z_]\w*)\s*\(\s*\)/gu))t[1]in St&&e.add(t[1]);return[...e]}function a3(i){const e=/^mbot\s*\.\s*led\s*\(([^()]*(?:\([^()]*\)[^()]*)*)\)\s*\.\s*setColor\s*\(([\s\S]*)\)\s*;?$/u.exec(i.trim());if(e)return{method:"ledColor",args:[e[1].trim(),e[2].trim()]};const t=/^mbot\s*\.\s*([A-Za-z_]\w*)\s*\(([\s\S]*)\)\s*;?$/u.exec(i.trim());if(!t)return;const n=t[2].trim();return{method:t[1],args:n===""?[]:o3(n)}}function Ka(i,e){const t=xi[i];if(!t)return;const n=e.length===0&&t.defaults?t.defaults:e;if(n.length===t.args)return!t.valid||t.valid(n)?n:void 0}function au(i,e,t=""){var a;const n=xi[i];return{method:i,args:e,python:(a=n.python)==null?void 0:a.call(n,e,t),waitMs:i==="pause"?Math.max(0,e[0]):void 0,label:n.label(e,t),...n.text?{text:t}:{}}}function nh(i){return i.map(e=>[e.method,...e.args.map(be),...e.text!==void 0?[JSON.stringify(e.text)]:[]].join(" "))}function s3(i){let e=0;const t=i.trim(),n=()=>{const s=[];for(;;){for(;t[e]===" "||t[e]===",";)e++;if(e>=t.length||t[e]===")")return s;const r=/^(\d+)\s*[x×]\s*\(/u.exec(t.slice(e));if(r){e+=r[0].length;const c=n();if(t[e]!==")")throw new Error(`„)“ fehlt in „${i}“`);e++;for(let d=0;d{if(!(n in St))return t;const a=e(n);return typeof a=="string"?JSON.stringify(n==="getColor"?th(a):a):String(a)}):i}function o3(i){const e=[];let t=0,n=!1,a=0;for(let s=0;s{const a=t==="turn"?((n+180)%360+360)%360-180:n;if(Math.abs(a)<1e-6)return[];const s=Math.round(Math.abs(a)*100)/100;return t==="drive"?[`${a>0?"forward":"backward"} ${s}`]:[a===-180?"turnRight 180":`${a>0?"turnRight":"turnLeft"} ${s}`]})}function ih(i){let e=0;const t=i.trim(),n=()=>{const s=[];for(;;){for(;t[e]===" "||t[e]===",";)e++;if(e>=t.length||t[e]===")")return s;const r=/^(\d+)\s*[x×]\s*\(/u.exec(t.slice(e));if(r){e+=r[0].length;const u=n();if(t[e]!==")")throw new Error(`„)“ fehlt in „${i}“`);e++;for(let m=0;ma===i[s%t])){const a=U1(i.slice(0,t));return`${n} x ${t===1?a:`(${a})`}`}}return i.join(", ")}const ah=["cyberpi","screen","joystick","buttons","leds","lightSensor","microphone","shield","powerSwitch","motors","wheels","ultrasonic","lineSensor","caster","chassis"],l3=i=>ah.includes(i),u3=100;function sh(i){switch(i.kind){case"finished":return"Simulation finished.";case"infiniteLoopWithoutBody":return"Infinite loop has no body.";case"unsupportedStatement":return`Unsupported statement: ${i.text}`;case"invalidExpression":return`Invalid expression: ${i.text}`;case"unknownVariable":return`Unknown variable: ${i.text}`;case"divisionByZero":return"Division by zero.";case"wholeNumberExpected":return"Please enter a whole number.";case"numberExpected":return"Please enter a number.";case"booleanExpected":return"Please enter true or false.";case"subprogramNotFound":return`No open diagram is called ${i.text}. The call was skipped.`;case"callTooDeep":return"Too many nested calls. Does a subprogram call itself?";case"callArguments":return`The call does not match the header of ${i.text}. Check the values in the parentheses.`;case"missingReturn":return`${i.text} ended without returning a value with return.`;case"fileNotFound":return`There is no file called ${i.text}.`;case"endOfFile":return`The file ${i.text} has no more lines.`;case"nullValue":return`${i.text} is null.`;case"other":return i.text}}class Ze extends Error{constructor(e){super(sh(e)),this.notice=e}}const qe=i=>new Ze({kind:"unsupportedStatement",text:i}),F=i=>new Ze({kind:"invalidExpression",text:i}),$1=i=>new Ze({kind:"unknownVariable",text:i}),m3=()=>new Ze({kind:"divisionByZero"}),ts=new Map;function c3(i,e){ts.set(i,e)}const rh=()=>[...ts];function su(i){return i instanceof Ze?i.notice:{kind:"other",text:i instanceof Error?i.message:String(i)}}function d3(i){if(i===0)return"0";if(!Number.isFinite(i))return Number.isNaN(i)?"nan":i>0?"inf":"-inf";const e=Math.floor(Math.log10(Math.abs(Number(i.toPrecision(12)))));if(e<-4||e>=12){const[n,a]=i.toExponential(11).split("e"),s=n.includes(".")?n.replace(/0+$/,"").replace(/\.$/,""):n,r=Number(a);return`${s}e${r<0?"-":"+"}${String(Math.abs(r)).padStart(2,"0")}`}const t=i.toFixed(Math.max(0,11-e));return t.includes(".")?t.replace(/0+$/,"").replace(/\.$/,""):t}function ru(i){return Number.isFinite(i)&&Math.round(i)===i?i.toFixed(1):d3(i)}function we(i){switch(i.kind){case"int":return String(i.value);case"double":return ru(i.value);case"string":return i.value;case"boolean":return String(i.value);case"intArray":return"["+i.value.map(String).join(", ")+"]";case"doubleArray":return"["+i.value.map(ru).join(", ")+"]";case"stringArray":return"["+i.value.join(", ")+"]";case"booleanArray":return"["+i.value.map(String).join(", ")+"]";case"grid":return"["+h3(i).join(", ")+"]";case"reader":return`${i.className}(${i.file})`;case"writer":return`PrintWriter(${i.file})`;case"null":return"null"}}function h3(i){return i.value.map(e=>"["+e.map(t=>we(co(i.elementType,t))).join(", ")+"]")}function co(i,e){switch(i){case"int":return{kind:"int",value:e};case"double":return{kind:"double",value:e};case"string":return{kind:"string",value:e};case"boolean":return{kind:"boolean",value:e}}}function ou(i){return i==="string"?"":i==="boolean"?!1:0}function ho(i){return i.kind==="intArray"||i.kind==="doubleArray"||i.kind==="stringArray"||i.kind==="booleanArray"||i.kind==="grid"}function g3(i){return i.kind==="int"||i.kind==="double"?i.value:NaN}const vt=i=>({kind:"int",value:i}),wt=i=>({kind:"double",value:i}),Wl=i=>i!==void 0&&/\s/u.test(i),ns=i=>new RegExp("\\p{L}","u").test(i),Y1=i=>new RegExp("\\p{N}","u").test(i);function ai(i){const e=Array.from(i);return e.length===0||!(ns(e[0])||e[0]==="_")?!1:e.every(t=>ns(t)||Y1(t)||t==="_")}function Kt(i){switch(i.toLowerCase()){case"int":return"int";case"double":return"double";case"string":return"string";case"char":return"string";case"boolean":case"bool":return"boolean";default:return}}function lu(i){return i.kind==="int"?"int":i.kind==="double"?"double":i.kind==="boolean"?"boolean":"string"}function at(i){const e=Array.from(i);if(e.length===3&&e[0]==="'"&&e[2]==="'")return e[1];if(e.length<2||e[0]!=='"'||e[e.length-1]!=='"')return;const t=e.slice(1,-1).join("");if(/^(?:[^"\\]|\\.)*$/u.test(t))return t.replaceAll('\\"','"').replaceAll("\\n",` +`)}function uu(i){return i.replaceAll("(int)","").replaceAll("(double)","").trim()}function El(i){const e=new Array(i.length).fill(!1);let t=0,n=!1,a=!1;return i.forEach((s,r)=>{if(n){a?a=!1:s==="\\"?a=!0:s==='"'&&(n=!1);return}switch(s){case'"':n=!0;break;case"(":case"[":t+=1;break;case")":case"]":t-=1;break;default:e[r]=t===0}}),e}function is(i,e){const t=Array.from(i),n=Array.from(e),a=El(t),s=[];let r=[],o=0;for(;ot[o+m]===u)&&a.slice(o,l).every(Boolean)){s.push(r.join("").trim()),r=[],o=l;continue}r.push(t[o]),o+=1}return s.push(r.join("").trim()),s}function p3(i){const e=Array.from(i),t=El(e);for(let n=0;n=","<=","==","!="].includes(o)&&(a=o)}if(a===void 0&&(e[n]==="<"||e[n]===">")&&(a=e[n]),a===void 0)continue;const s=e.slice(0,n).join("").trim(),r=e.slice(n+a.length).join("").trim();return{lhs:s,op:a,rhs:r}}}function Es(i,e){let t=0,n=!1,a=!1;for(let s=e;se.length||!t.every((r,o)=>e[a+o]===r))continue;const s=a+t.length-1;if(Es(e,s)===e.length-1)return{lhs:e.slice(0,a).join("").trim(),rhs:e.slice(s+1,-1).join("").trim()}}}function Yi(i){const e=i.trim();for(const t of["if","while","until","switch"]){if(!e.startsWith(t))continue;const n=e.slice(t.length);if(!(n===""||Wl(n[0])||n[0]==="("))continue;let a=n.trim();const s=oh(a);return s!==void 0&&(a=s),a===""?"true":a}return e===""?"true":e}function d1(i){const e=i.trim(),t=e.indexOf("[");if(!e.endsWith("]")||t<0)return;const n=e.slice(0,t).trim();if(!ai(n))return;const a=[];let s=t;for(;s2))return{arrayName:n,indexExpressions:a}}function x3(i){const e=i.trim();if(!e.endsWith(")"))return;const t=/^([A-Za-z_]\w*(?:\s*\[[^\[\]]*\])*|"(?:[^"\\]|\\.)*")\s*\.\s*([A-Za-z_]\w*)\s*\(/u.exec(e);if(!t)return;const n=Array.from(e),a=Array.from(t[0]).length-1;if(Es(n,a)!==n.length-1)return;const s=n.slice(a+1,-1).join("").trim();return{target:t[1],method:t[2],args:s===""?[]:is(s,",")}}function mu(i){return ai(i)||d1(i)!==void 0}function dr(i){const e=[];let t="",n=!1,a=!1,s=0;for(const r of i){if(a){t+=r,a=!1;continue}if(r==="\\"){t+=r,a=!0;continue}if(r==='"'){n=!n,t+=r;continue}if(!n&&r==="("&&(s+=1),!n&&r===")"&&(s-=1),r==="+"&&!n&&s===0){e.push(t),t="";continue}t+=r}if(n)throw F(i);return e.push(t),e}function b3(i){const e=[];let t=0,n="";for(const a of i){if(a==="{"&&(t+=1),a==="}"&&(t-=1),a===","&&t===0){e.push(n),n="";continue}n+=a}return n.trim()!==""&&e.push(n),e}function cu(i){const e=Array.from(i),t=[];let n=0;for(;n1)throw F(i)}else if(!Y1(e[n]))break;n+=1}const o=e.slice(s,n).join("");if(o==="."||!/^[0-9]*\.?[0-9]*$/.test(o))throw F(i);t.push({t:"number",literal:o,value:Number(o)});continue}if(ns(a)||a==="_"){const s=n;for(;n=0&&s=0&&o=0&&s|&&|\|\||^\s*!/u.test(e)}function Yn(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function hu(i){const e=i.slice(0,3);for(;e.length<3;)e.push("");return e}function po(i){const e=i.map(t=>Yn(t).trim());return e.length===1&&e[0].includes(";")?hu(e[0].split(";").map(t=>t.trim())):hu(e)}const lt=i=>i.frame?{frame:i.frame,callPath:i.callPath}:{};function qt(i,e=[],t={}){const n=[],a=s=>n.push(t.frame?{...s,...t}:s);return i.forEach((s,r)=>{const o=[...e,r],l=s.textLines.join(" ").trim();switch(s.type){case I.anweisung:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"statement"});break;case I.verzweigung:a({path:o,text:l||"true",kind:"branch",cases:s.cases});break;case I.fallauswahl:a({path:o,text:l||"0",kind:"switchSelection",cases:s.cases});break;case I.forSchleife:a({path:o,text:l,kind:"forLoopStart",loopBody:s.loopBody,forParts:po(s.textLines)});break;case I.whileSchleife:a({path:o,text:l||"true",kind:"whileLoop",loopBody:s.loopBody});break;case I.doUntilSchleife:a({path:o,text:l||"true",kind:"doUntilLoop",loopBody:s.loopBody});break;case I.endlosschleife:a({path:o,text:l||"true",kind:"infiniteLoop",loopBody:s.loopBody});break;case I.aussprung:a({path:o,text:l,kind:"jump"});break;case I.aufruf:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"call"});break}}),n}function v3(i,e){const t=i.trim().replaceAll(",",".");switch(e){case"int":if(!/^[+-]?[0-9]+$/.test(t))throw new Ze({kind:"wholeNumberExpected"});return vt(Number(t));case"double":if(!/^[+-]?([0-9]+\.?[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?$/.test(t))throw new Ze({kind:"numberExpected"});return wt(Number(t));case"string":return{kind:"string",value:i};case"boolean":switch(t.toLowerCase()){case"true":case"wahr":return{kind:"boolean",value:!0};case"false":case"falsch":return{kind:"boolean",value:!1};default:throw new Ze({kind:"booleanExpected"})}}}function gu(){return{stepIndex:0,variables:new Map,outputLines:[],isHalted:!1,files:new Map,robotActions:[]}}function w3(i,e){for(let t=0;tt===e.path[n])}function yt(i){const e=/^(void|int|double|String|boolean)\s+([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(Yn(i));if(!e)return;const t=[];if(e[3].trim()!=="")for(const n of e[3].split(",")){const a=/^(int|double|String|boolean|char)\s*((?:\[\s*\]){0,2})\s+([A-Za-z_]\w*)$/u.exec(n.trim());if(!a)return;const s=(a[2].match(/\[/gu)??[]).length;t.push({type:Kt(a[1]),name:a[3],...s>0?{dims:s}:{}})}return{returnType:Kt(e[1]),name:e[2],params:t}}function lh(i){const e=/^(?:(?:(int|double|String|boolean)\s+)?([A-Za-z_]\w*)\s*=\s*)?([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(Yn(i));if(e)return{targetType:e[1]?Kt(e[1]):void 0,target:e[2],name:e[3],args:e[4].trim()===""?[]:is(e[4],",")}}function as(i){var t,n;const e=Yn(i);return((t=yt(e))==null?void 0:t.name)??((n=lh(e))==null?void 0:n.name)??e.replace(/\(\s*\)$/u,"").trim()}class bi{constructor(e,t=()=>{}){v(this,"steps");v(this,"state",gu());v(this,"nextFrame",1);v(this,"callDepth",0);v(this,"frames",new Map);v(this,"peeking",!1);v(this,"robotSensors",{});v(this,"afterOutput",!1);this.resolveSubprogram=t,this.steps=qt(e.elements)}get currentStepPath(){const e=this.steps[this.state.stepIndex];return(e==null?void 0:e.callPath)??(e==null?void 0:e.path)}get canStep(){return!this.state.isHalted&&!this.state.inputRequest&&this.state.stepIndex ${we(n)}`}catch(n){this.state.inputErrorNotice=su(n);return}this.state.inputRequest=void 0,this.state.inputErrorNotice=void 0,this.state.stepIndex+=1,this.state.notice=this.finishedIfAtEnd()}}finishedIfAtEnd(){return this.state.stepIndex>=this.steps.length?{kind:"finished"}:void 0}splice(e){this.steps.splice(this.state.stepIndex,1,...e)}noticeAfterEntering(e){return e.length>0?void 0:this.finishedIfAtEnd()}executeBranch(e){const t=e.cases;if(!t||t.length<2)throw qe(e.text);const n=Yi(e.text),a=this.evaluateBool(n),s=a?0:1,r=qt(t[s].elements,[...e.path,s],lt(e));this.splice(r),this.state.lastTrace=`${n} -> ${a}`,this.state.notice=this.noticeAfterEntering(r)}executeSwitchSelection(e){const t=e.cases;if(!t||t.length===0)throw qe(e.text);const n=Yi(e.text),a=this.evaluateSwitchSelector(n),s=w3(a,t)??t.length-1,r=qt(t[s].elements,[...e.path,s],lt(e));this.splice(r),this.state.lastTrace=`${n} -> ${t[s].name}`,this.state.notice=this.noticeAfterEntering(r)}executeForLoopStart(e){const t=po(e.forParts??[e.text]);t[0]!==""&&this.executeStatement(t[0]),this.splice([{...lt(e),path:e.path,text:t[1],kind:"forLoopCondition",loopBody:e.loopBody,forParts:t}])}executeForLoopCondition(e){const t=po(e.forParts??[e.text]),n=t[1]===""?"true":t[1],a=this.evaluateBool(n);if(this.state.lastTrace=`${n} -> ${a}`,a){const s=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...s,{...lt(e),path:e.path,text:t[2],kind:"forLoopIncrement",loopBody:e.loopBody,forParts:t},{...lt(e),path:e.path,text:t[1],kind:"forLoopCondition",loopBody:e.loopBody,forParts:t}])}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}executeForLoopIncrement(e){const t=e.text.trim();t!==""&&this.executeIncrement(t),this.splice([])}executeWhileLoop(e){const t=Yi(e.text),n=this.evaluateBool(t);if(this.state.lastTrace=`${t} -> ${n}`,n){const a=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...a,{...lt(e),path:e.path,text:e.text,kind:"whileLoop",loopBody:e.loopBody}]),this.state.notice=this.noticeAfterEntering(a)}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}enterDoUntilLoop(e){const t=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...t,{...lt(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}]),this.state.notice=this.noticeAfterEntering(t)}executeDoUntilCondition(e){const t=Yi(e.text),n=this.evaluateBool(t);if(this.state.lastTrace=`${t} -> ${n}`,n){const a=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...a,{...lt(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}])}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}enterInfiniteLoop(e){const t=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...t,{...lt(e),path:e.path,text:e.text,kind:"infiniteLoop",loopBody:e.loopBody}]),this.state.lastTrace="true -> true",this.state.notice=t.length>0?void 0:{kind:"infiniteLoopWithoutBody"}}executeJump(e){const t=e.frame??0,n=o=>o.lengthl===e.path[u]);let a=this.steps.length,s="end";for(let o=this.state.stepIndex+1;o ${s}`,s==="return"&&this.finishFrame(r),this.state.notice=this.finishedIfAtEnd()}executeCall(e){const t=e.text,n=this.resolveSubprogram(as(t));if(!n){this.splice([]),this.state.lastTrace=`${t} -> ?`,this.state.notice={kind:"subprogramNotFound",text:t},this.state.stepIndex>=this.steps.length&&(this.state.notice={kind:"finished"});return}const a=lh(t),s=yt(n.caption);if(s?((a==null?void 0:a.args.length)??0)!==s.params.length||(a==null?void 0:a.target)!==void 0&&!s.returnType:a!==void 0&&(a.args.length>0||a.target!==void 0))throw new Ze({kind:"callArguments",text:(s==null?void 0:s.name)??as(t)});if(this.callDepth>=u3)throw new Ze({kind:"callTooDeep"});const o=new Map,l=[];s==null||s.params.forEach((d,h)=>{const g=a.args[h].trim();if(!d.dims){o.set(d.name,this.evaluateExpression(g,d.type));return}const f=this.state.variables.get(g);if(!f)throw/^[A-Za-z_]\w*$/u.test(g)?new Ze({kind:"unknownVariable",text:g}):F(g);if(!(d.dims===1?f.kind===`${d.type}Array`:f.kind==="grid"&&f.elementType===d.type))throw F(g);o.set(d.name,f),l.push({param:d.name,callerName:g})}),this.callDepth+=1;const u={frame:this.nextFrame++,callPath:e.callPath??e.path};s&&(this.frames.set(u.frame,{saved:this.state.variables,header:s,call:a,references:l}),this.state.variables=o);const m=qt(n.elements,[],u);this.splice([...m,{...u,path:e.path,text:t,kind:"callEnd"}]);const c=s==null?void 0:s.params.map((d,h)=>`${d.name} = ${d.dims?a.args[h].trim():we(o.get(d.name))}`).join(", ");this.state.lastTrace=c?`${t} -> ${c}`:`${t} -> call`}executeCallEnd(e){this.callDepth-=1,this.splice([]),this.state.lastTrace=`${e.text} -> return`,this.finishFrame(e),this.state.notice=this.finishedIfAtEnd()}executeReturn(e){const t=e.frame??0,n=Yn(e.text).slice(6).trim(),a=this.frames.get(t);if(a&&n!==""){if(!a.header.returnType)throw F(e.text);a.returnValue=this.evaluateExpression(n,a.header.returnType)}const s=a!=null&&a.returnValue?`${e.text} -> ${we(a.returnValue)}`:`${e.text} -> return`;if(t===0){this.steps.splice(this.state.stepIndex),this.state.lastTrace=s,this.state.notice={kind:"finished"};return}let r=this.state.stepIndex+1;for(;r0?new Map(t.saved):t.saved;for(const m of t.references){const c=this.state.variables.get(m.param);c&&n.set(m.callerName,c)}this.state.variables=n;const a=t.returnValue;if(t.header.returnType&&!a)throw new Ze({kind:"missingReturn",text:t.header.name});const s=(l=t.call)==null?void 0:l.target;if(!s||!a)return;let r=(u=t.call)==null?void 0:u.targetType;if(!r)try{r=this.inferTargetValueType(s)}catch{r=t.header.returnType}const o=r==="double"&&a.kind==="int"?wt(a.value):r==="string"?{kind:"string",value:we(a)}:a;if(lu(o)!==r)throw F(e.text);this.assignValue(o,s),this.state.lastTrace=`${s} = ${e.text.slice(e.text.indexOf("=")+1).trim()} -> ${we(o)}`}executeStatement(e){const t=this.state,n=e.trim(),a=n.toLowerCase(),s=this.afterOutput;if(this.afterOutput=!1,a.startsWith("input:")){t.inputRequest=this.parseInputRequest(n,s),t.outputLineOpen=!1,t.inputErrorNotice=void 0;return}const r=/^System\s*\.\s*out\s*\.\s*(println|print)\s*\(([\s\S]*)\)\s*;?$/u.exec(n);if(a.startsWith("output:")||a.startsWith("print:")||r){const y=r?r[2]:n.slice(a.startsWith("output:")?7:6),w=this.peek(()=>this.renderOutputExpression(y)),S=y.trim()===""?"":this.evaluateOutputExpression(y);t.outputLineOpen&&t.outputLines.length?t.outputLines[t.outputLines.length-1]+=S:t.outputLines.push(S),t.outputLineOpen=(r==null?void 0:r[1])==="print",this.afterOutput=!0,t.lastTrace=`${w} -> ${S}`;return}const o=a3(n);if(o){this.executeMBotCommand(o.method,o.args,n);return}if(this.executeFileStatement(n))return;if(n.endsWith("++")||n.endsWith("--")||n.includes("+=")||n.includes("-=")){this.executeIncrement(n);return}const l=/^(?:final\s+)?([A-Za-z]+)\s+([A-Za-z_]\w*(?:\s*,\s*[A-Za-z_]\w*)*)$/u.exec(Yn(n).trim()),u=l?Kt(l[1]):void 0;if(l&&u){const y=l[2].split(",").map(w=>w.trim());for(const w of y)t.variables.set(w,co(u,ou(u)));t.lastTrace=y.map(w=>`${w} = ${we(t.variables.get(w))}`).join(", ");return}const m=n.indexOf("=");if(m<0)throw qe(n);const c=n.slice(0,m).trim(),d=n.slice(m+1),h=this.parseArrayDeclaration(c,d);if(h){t.variables.set(h.name,h.value),t.lastTrace=`${h.name} = new ${h.typeName}[${h.count}]`;return}const g=this.parseAssignmentTarget(c);let f;try{f=this.peek(()=>this.renderNumericExpression(d))}catch{f=d.trim()}let x=g.valueType;if(!x)try{x=this.inferTargetValueType(g.variableName)}catch{x="int"}const b=this.evaluateExpression(d,x);this.assignValue(b,g.variableName),t.lastTrace=`${g.variableName} = ${f} -> ${we(b)}`}executeMBotCommand(e,t,n){var r;if((r=xi[e])!=null&&r.text){const o=xi[e];if(t.length!==o.args+1)throw F(n);const l=Ka(e,t.slice(0,-1).map(c=>this.evaluateDouble(c)));if(!l)throw F(n);const u=au(e,l,this.evaluateOutputExpression(t[t.length-1])),m=o.choices;if(m&&!m.includes(u.text??""))throw F(`${n} (${m.join(", ")})`);this.state.robotActions.push(u),this.state.lastTrace=`${n} -> ${u.label}`;return}const a=Ka(e,t.map(o=>this.evaluateDouble(o)));if(!a)throw F(n);const s=au(e,a);this.state.robotActions.push(s),this.state.lastTrace=`${n} -> ${s.label}`}executeFileStatement(e){const t=this.state,n=Yn(e).trim(),a=/^(?:(Scanner|BufferedReader|PrintWriter)\s+)?([A-Za-z_]\w*)\s*=\s*new\s+(Scanner|BufferedReader|PrintWriter)\s*\(([\s\S]*)\)$/u.exec(n);if(a){const[,m,c,d,h]=a;if(m&&m!==d)throw F(n);const g=d==="Scanner"?/^new\s+File\s*\(([\s\S]+)\)$/u.exec(h.trim()):d==="BufferedReader"?/^new\s+FileReader\s*\(([\s\S]+)\)$/u.exec(h.trim()):/^(?:new\s+(?:File|FileWriter)\s*\(([\s\S]+)\)|([\s\S]+))$/u.exec(h.trim());if(!g)throw qe(n);const f=this.fileNameValue(g[1]??g[2]);if(d==="PrintWriter")t.variables.set(c,{kind:"writer",file:f,text:""});else{const b=this.fileContent(f).split(/\r?\n/u);b[b.length-1]===""&&b.pop(),t.variables.set(c,{kind:"reader",className:d,file:f,lines:b,next:0})}return t.lastTrace=`${c} = new ${d}(${f})`,!0}const s=/^Files\s*\.\s*writeString\s*\(\s*(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(([^()]+)\)\s*,([\s\S]+)\)$/u.exec(n);if(s){const m=this.fileNameValue(s[1]),c=this.evaluateOutputExpression(s[2]);return t.files.set(m,c),t.lastTrace=`${m} ← ${JSON.stringify(c)}`,!0}const r=/^([A-Za-z_]\w*)\s*\.\s*(println|print|close)\s*\(([\s\S]*)\)$/u.exec(n),o=r&&t.variables.get(r[1]);if(!r||!o)return!1;if(o.kind==="null")throw new Ze({kind:"nullValue",text:r[1]});if(o.kind==="reader"&&r[2]==="close")return t.lastTrace=`${r[1]}.close()`,!0;if(o.kind!=="writer")return!1;if(r[2]==="close")return t.files.set(o.file,o.text),t.lastTrace=`${o.file} ← ${JSON.stringify(o.text)}`,!0;const l=r[3].trim()===""?"":this.evaluateOutputExpression(r[3]),u=r[2]==="println"?l+` +`:l;return t.variables.set(r[1],{...o,text:o.text+u}),t.lastTrace=`${r[1]}.${r[2]}(${JSON.stringify(l)})`,!0}fileNameValue(e){const t=e.trim(),n=at(t);if(n!==void 0)return n;const a=this.evaluateReference(t);if((a==null?void 0:a.kind)==="string")return a.value;throw F(t)}fileContent(e){const t=this.state.files.get(e)??ts.get(e);if(t===void 0)throw new Ze({kind:"fileNotFound",text:e});return t}readerMethod(e,t,n,a){if(n.args.length)throw F(a);const s=t.next0?"+":"-";if(r.kind==="int"){t.set(s,vt(r.value+a)),this.state.lastTrace=`${s} = ${r.value} ${o} 1 -> ${r.value+a}`;return}if(r.kind==="double"){const l=r.value+a;t.set(s,wt(l)),this.state.lastTrace=`${s} = ${we(r)} ${o} 1 -> ${we(wt(l))}`;return}throw qe(e)}for(const[n,a]of[["+=",1],["-=",-1]]){const s=e.indexOf(n);if(s<0)continue;const r=e.slice(0,s).trim(),o=e.slice(s+2),l=t.get(r);if(!ai(r)||!l)throw qe(e);const u=a>0?"+":"-";if(l.kind==="int"){const m=this.evaluateInt(o),c=l.value+a*m;t.set(r,vt(c)),this.state.lastTrace=`${r} = ${l.value} ${u} ${m} -> ${c}`;return}if(l.kind==="double"){const m=this.evaluateDouble(o),c=l.value+a*m;t.set(r,wt(c)),this.state.lastTrace=`${r} = ${we(l)} ${u} ${we(wt(m))} -> ${we(wt(c))}`;return}throw qe(e)}this.executeStatement(e)}parseAssignmentTarget(e){if(d1(e))return{variableName:e.trim()};const t=e.split(/\s+/u).filter(Boolean);let n,a;if(t.length===1)n=t[0];else if(t.length===2&&Kt(t[0]))n=t[1],a=Kt(t[0]);else if(t.length===3&&t[0]==="const"&&Kt(t[1]))n=t[2],a=Kt(t[1]);else throw qe(e);if(!mu(n))throw qe(e);return{variableName:n,valueType:a}}parseInputRequest(e,t=!1){const n=e.slice(6).trim(),a=/^(\S+)(?:\s+(\S+))?(?:\s+([\s\S]*))?$/u.exec(n);if(!a)throw qe(e);const s=[a[1],a[2],a[3]].filter(c=>c!==void 0);let r,o,l;const u=Kt(s[0]);if(s.length>=2&&u?(r=s[1],o=u,l=(s[2]??"").trim()):(r=s[0],o=this.inferTargetValueType(r),l=(s[1]??"").trim()),!mu(r))throw qe(e);const m=at(l)??l;return m===""&&t?this.state.outputLineOpen?{variableName:r,valueType:o,prompt:"",continuesLine:!0}:{variableName:r,valueType:o,prompt:""}:{variableName:r,valueType:o,prompt:m===""?`${r}:`:m}}parseArrayDeclaration(e,t){const n=e.split(/\s+/u).filter(Boolean);if(n.length!==2||!n[0].endsWith("[]"))return;const a=n[0].endsWith("[][]"),s=n[0].slice(0,a?-4:-2),r=Kt(s),o=n[1];if(!r||!ai(o))throw qe(e);if(a)return this.parseGridDeclaration(o,s,r,t);const l=t.trim();if(l.startsWith("{")&&l.endsWith("}")){const h=l.slice(1,-1).split(",").map(f=>f.trim());let g;switch(r){case"int":g={kind:"intArray",value:h.map(f=>this.evaluateInt(f))};break;case"double":g={kind:"doubleArray",value:h.map(f=>this.evaluateDouble(f))};break;case"string":g={kind:"stringArray",value:h.map(f=>at(f)??this.evaluateOutputExpression(f))};break;case"boolean":g={kind:"booleanArray",value:h.map(f=>this.evaluateBool(f))};break}return{name:o,typeName:s,count:h.length,value:g}}const u=`new ${s}[`;if(!l.startsWith(u)){const h=this.evaluateStringMethod(l);if((h==null?void 0:h.kind)==="stringArray"&&r==="string")return{name:o,typeName:s,count:h.value.length,value:h}}if(!l.startsWith(u)||!l.endsWith("]"))throw qe(t);const m=l.slice(u.length,-1),c=this.evaluateInt(m);if(c<0)throw F(m);const d=r==="int"?{kind:"intArray",value:new Array(c).fill(0)}:r==="double"?{kind:"doubleArray",value:new Array(c).fill(0)}:r==="boolean"?{kind:"booleanArray",value:new Array(c).fill(!1)}:{kind:"stringArray",value:new Array(c).fill("")};return{name:o,typeName:s,count:c,value:d}}parseGridDeclaration(e,t,n,a){var c;const s=a.trim(),r=d=>{switch(n){case"int":return this.evaluateInt(d);case"double":return this.evaluateDouble(d);case"boolean":return this.evaluateBool(d);case"string":return at(d.trim())??this.evaluateOutputExpression(d)}};if(s.startsWith("{")&&s.endsWith("}")){const d=b3(s.slice(1,-1)).map(h=>{const g=h.trim();if(!g.startsWith("{")||!g.endsWith("}"))throw F(g);return g.slice(1,-1).trim()===""?[]:g.slice(1,-1).split(",").map(f=>r(f.trim()))});return{name:e,typeName:t,count:`${d.length}][${((c=d[0])==null?void 0:c.length)??0}`,value:{kind:"grid",elementType:n,value:d}}}const o=new RegExp(String.raw`^new\s+${t}\s*\[(.+)\]\s*\[(.+)\]$`,"u").exec(s);if(!o)throw qe(a);const l=this.evaluateInt(o[1]),u=this.evaluateInt(o[2]);if(l<0)throw F(o[1]);if(u<0)throw F(o[2]);const m={kind:"grid",elementType:n,value:Array.from({length:l},()=>new Array(u).fill(ou(n)))};return{name:e,typeName:t,count:`${l}][${u}`,value:m}}arrayIndex(e){const t=this.evaluateInt(e);if(t<0)throw F(e);return t}evaluateReference(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return n;const a=this.evaluateStringMethod(t);if(a)return a;const s=/^\(\s*char\s*\)\s*(.+)$/su.exec(t);if(s){const o=this.evaluateInt(s[1]);if(!(o>=0&&o<=1114111))throw F(t);return{kind:"string",value:String.fromCodePoint(o)}}const r=d1(t);if(r)return this.valueInArray(r.arrayName,r.indexExpressions.map(o=>this.arrayIndex(o)))}evaluateStringMethod(e){const t=x3(e);if(!t)return;const n=this.evaluateStaticCall(e,t);if(n)return n;const a=this.state.variables.get(t.target.trim());if((a==null?void 0:a.kind)==="reader")return this.readerMethod(t.target.trim(),a,t,e);if((a==null?void 0:a.kind)==="null")throw new Ze({kind:"nullValue",text:t.target.trim()});const s=at(t.target)??this.stringValueOf(t.target);if(s===void 0)return;const r=t.args,o=d=>{const h=r[d];if(h===void 0)throw F(e);const g=at(h.trim());if(g!==void 0)return g;const f=this.evaluateReference(h);if((f==null?void 0:f.kind)==="string")return f.value;throw F(h)},l=d=>{if(r[d]===void 0)throw F(e);return this.evaluateInt(r[d])},u=d=>{if(r.length!==d)throw F(e)},m=Array.from(s),c=(d,h)=>{if(d<0||d>h)throw F(e);return d};switch(t.method){case"length":return u(0),vt(m.length);case"charAt":return u(1),{kind:"string",value:m[c(l(0),m.length-1)]};case"substring":{if(r.length!==1&&r.length!==2)throw F(e);const d=c(l(0),m.length),h=r.length===2?c(l(1),m.length):m.length;if(h0&&h[h.length-1]==="";)h.pop();return{kind:"stringArray",value:h}}default:return}}evaluateStaticCall(e,t){const n=()=>{if(t.args.length!==1)throw F(e);return t.args[0]},a=s=>{const r=at(s.trim());if(r!==void 0)return r;const o=this.evaluateReference(s);if((o==null?void 0:o.kind)==="string")return o.value;throw F(s)};switch(`${t.target}.${t.method}`){case"Integer.parseInt":{const s=a(n()).trim();if(!/^[+-]?\d+$/u.test(s))throw new Ze({kind:"wholeNumberExpected"});return vt(Number(s))}case"Double.parseDouble":{const s=Number(a(n()).trim());if(!Number.isFinite(s))throw new Ze({kind:"numberExpected"});return wt(s)}case"String.valueOf":return{kind:"string",value:this.evaluateOutputExpression(n())};case"Files.readString":{const s=/^(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)$/u.exec(n().trim());if(!s)throw F(e);const r=at(s[1]),o=ts.get(r);if(o===void 0)throw new Ze({kind:"fileNotFound",text:r});return{kind:"string",value:o}}default:return}}stringValueOf(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return n.kind==="string"?n.value:void 0;const a=d1(t);if(!a)return;const s=this.valueInArray(a.arrayName,a.indexExpressions.map(r=>this.arrayIndex(r)));return s.kind==="string"?s.value:void 0}substituteStringCalls(e){if(!e.includes("("))return e;let t="",n=e;const a=/([A-Za-z_]\w*(?:\[[^\[\]]*\])*|"(?:[^"\\]|\\.)*")\s*\.\s*(length|indexOf|lastIndexOf|compareTo|charAt|parseInt|parseDouble)\s*\(/u;for(let s=a.exec(n);s;s=a.exec(n)){const r=s.index+s[0].length-1,o=Es(Array.from(n),Array.from(n.slice(0,r)).length);if(o===void 0)break;const l=Array.from(n),u=l.slice(Array.from(n.slice(0,s.index)).length,o+1).join(""),m=this.evaluateStringMethod(u),c=l.slice(0,Array.from(n.slice(0,s.index)).length).join(""),d=(m==null?void 0:m.kind)==="string"?go(m.value):void 0;(m==null?void 0:m.kind)==="int"?t+=c+String(m.value):(m==null?void 0:m.kind)==="double"?t+=c+(Number.isInteger(m.value)?m.value.toFixed(1):String(m.value)):d!==void 0?t+=c+String(d):t+=c+u,n=l.slice(o+1).join("")}return t+n}valueInArray(e,t){const n=this.state.variables.get(e);if(!n)throw $1(e);const a=`${e}[${t.join("][")}]`;if(n.kind==="grid"){if(t.length!==2)throw F(a);const r=n.value[t[0]];if(!r||t[1]>=r.length)throw F(a);return co(n.elementType,r[t[1]])}if(t.length!==1)throw F(a);const s=t[0];if(!ho(n))throw F(e);if(s>=n.value.length)throw F(a);switch(n.kind){case"intArray":return vt(n.value[s]);case"doubleArray":return wt(n.value[s]);case"stringArray":return{kind:"string",value:n.value[s]};case"booleanArray":return{kind:"boolean",value:n.value[s]};default:throw F(e)}}inferTargetValueType(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return lu(n);const a=d1(t);if(a){const s=this.state.variables.get(a.arrayName);if(!s)throw $1(a.arrayName);if(s.kind==="intArray")return"int";if(s.kind==="doubleArray")return"double";if(s.kind==="stringArray")return"string";if(s.kind==="booleanArray")return"boolean";if(s.kind==="grid")return s.elementType;throw F(a.arrayName)}throw qe(e)}assignValue(e,t){const n=t.trim(),a=d1(n);if(!a){this.state.variables.set(n,e);return}const s=a.indexExpressions.map(u=>this.arrayIndex(u)),r=this.state.variables.get(a.arrayName);if(!r)throw $1(a.arrayName);if(r.kind==="grid"){if(s.length!==2||s[0]>=r.value.length||s[1]>=r.value[s[0]].length)throw F(n);const u=r.elementType==="double"&&e.kind==="int"||e.kind===r.elementType?e.value:void 0;if(u===void 0||ho(e))throw F(n);const m=r.value.map(c=>[...c]);m[s[0]][s[1]]=u,this.state.variables.set(a.arrayName,{...r,value:m});return}if(s.length!==1)throw F(n);const o=s[0];let l;if(r.kind==="intArray"&&e.kind==="int")l={kind:"intArray",value:[...r.value]};else if(r.kind==="doubleArray"&&(e.kind==="double"||e.kind==="int"))l={kind:"doubleArray",value:[...r.value]};else if(r.kind==="stringArray"&&e.kind==="string")l={kind:"stringArray",value:[...r.value]};else if(r.kind==="booleanArray"&&e.kind==="boolean")l={kind:"booleanArray",value:[...r.value]};else throw F(n);if(o>=l.value.length)throw F(n);l.value[o]=e.value,this.state.variables.set(a.arrayName,l)}evaluateOutputExpression(e){const t=this.withSensors(e).trim();if(du(t)&&dr(t).every(s=>at(s.trim())===void 0)&&!this.evaluateReference(t))return String(this.evaluateBool(t));let n,a;for(const s of dr(this.withSensors(e))){const r=s.trim(),o=at(r),l=o!==void 0?{kind:"string",value:o}:this.evaluateReference(r)??(du(r)?{kind:"boolean",value:this.evaluateBool(r)}:this.evaluateNumeric(r)),u=l.kind==="int"||l.kind==="double";if(a===void 0&&u){n?n=n.kind==="int"&&l.kind==="int"?vt(n.value+l.value):wt(n.value+l.value):n=l;continue}a=(a??(n?we(n):""))+we(l),n=void 0}return a??(n?we(n):"")}renderOutputExpression(e){return dr(e).map(t=>{const n=t.trim();if(at(n)!==void 0)return n;const a=this.evaluateReference(n);if(a)return we(a);try{return this.renderNumericExpression(n)}catch{return n}}).join(" + ")}evaluateExpression(e,t){switch(t){case"int":return vt(this.evaluateInt(e));case"double":return wt(this.evaluateDouble(e));case"string":{const n=e.trim(),a=at(n);if(a!==void 0)return{kind:"string",value:a};if(n==="null")return{kind:"null"};const s=this.evaluateReference(n);return(s==null?void 0:s.kind)==="null"?s:s?{kind:"string",value:we(s)}:{kind:"string",value:this.evaluateOutputExpression(e)}}case"boolean":return{kind:"boolean",value:this.evaluateBool(e)}}}evaluateNumeric(e){const{v:t,int:n}=this.parser(e).parseNumber();return n||Number.isFinite(t)&&Math.round(t)===t?vt(t):wt(t)}parser(e){const t=this.withSensors(e);return new y3(cu(uu(this.substituteStringCalls(t))),this.state.variables)}withSensors(e){return r3(e,t=>this.robotSensors[t]??St[t].simulated)}evaluateInt(e){return this.parser(e).parseInt()}evaluateDouble(e){return this.parser(e).parseDouble()}evaluateBool(e){const t=this.withSensors(e).trim();if(t==="true")return!0;if(t==="false")return!1;const n=this.evaluateReference(t);if((n==null?void 0:n.kind)==="boolean")return n.value;const a=is(t,"||");if(a.length>1)return a.some(u=>this.evaluateBool(u));const s=is(t,"&&");if(s.length>1)return s.every(u=>this.evaluateBool(u));if(t.startsWith("!")&&!t.startsWith("!="))return!this.evaluateBool(t.slice(1));const r=oh(t);if(r!==void 0)return this.evaluateBool(r);const o=f3(t);if(o)return this.evaluateComparison(o.lhs,"==",o.rhs);const l=p3(t);if(l)return this.evaluateComparison(l.lhs,l.op,l.rhs);if(this.stringOperand(t)!==void 0)throw F(t);return this.evaluateDouble(t)!==0}evaluateComparison(e,t,n){if((e.trim()==="null"||n.trim()==="null")&&(t==="=="||t==="!=")){const m=d=>{var h;return d.trim()==="null"||((h=this.evaluateReference(d))==null?void 0:h.kind)==="null"},c=m(e)===m(n);return t==="=="?c:!c}const a=this.booleanOperand(e),s=this.booleanOperand(n);if((a!==void 0||s!==void 0)&&(t==="=="||t==="!=")){const m=a??this.evaluateBool(e),c=s??this.evaluateBool(n);return t==="=="?m===c:m!==c}const r=this.stringOperand(e),o=this.stringOperand(n);let l,u;if(r!==void 0||o!==void 0){if(r===void 0||o===void 0)throw F(`${e} ${t} ${n}`);l=r,u=o}else l=this.evaluateDouble(e),u=this.evaluateDouble(n);switch(t){case"==":return l===u;case"!=":return l!==u;case"<":return l":return l>u;case">=":return l>=u;default:throw F(`${e} ${t} ${n}`)}}booleanOperand(e){const t=e.trim();if(t==="true")return!0;if(t==="false")return!1;const n=this.evaluateReference(t);return(n==null?void 0:n.kind)==="boolean"?n.value:void 0}stringOperand(e){const t=e.trim(),n=at(t);if(n!==void 0)return n;const a=this.evaluateReference(t);return(a==null?void 0:a.kind)==="string"?a.value:void 0}evaluateSwitchSelector(e){const t=this.withSensors(e).trim(),n=at(t);if(n!==void 0)return{kind:"text",value:n};const a=this.state.variables.get(t);if(a)switch(a.kind){case"int":return{kind:"int",value:a.value};case"double":return{kind:"int",value:Math.trunc(a.value)};case"string":return{kind:"text",value:a.value};default:throw F(t)}return/^[+-]?[0-9]+$/.test(t)?{kind:"int",value:Number(t)}:{kind:"int",value:this.evaluateInt(t)}}renderNumericExpression(e){return cu(uu(e)).map(t=>{if(t.t==="number")return t.literal;if(t.t==="identifier"){const n=this.state.variables.get(t.name);if(!n)throw $1(t.name);return we(n)}return t.t}).join(" ").replaceAll("( ","(").replaceAll(" )",")").replaceAll(" . ",".").replaceAll("[ ","[").replaceAll(" ]","]")}}const uh={baseIndent:0,indentPerLevel:4,includeDiagramTextAsComments:!1,includeEmptyElseBranch:!0,pseudocodeNote:"Pseudocode – not a runnable program"};function ss(i,e,t={},n=[]){const a=Nl(i,e,t);let s="";e==="javascript"&&(s+=`"use strict"; -`);const r=[i,...e==="java"?[]:n];if(e==="python"&&r.some(Ih)&&(s+=`import random +`);const r=[i,...e==="java"?[]:n];if(e==="python"&&r.some(kh)&&(s+=`import random `),e!=="java"&&(s+=bo(r,e)),e==="java"&&ls(i)&&(s+=`// import java.util.Scanner; `,s+=`Scanner scanner = new Scanner(System.in); @@ -27,49 +27,49 @@ except: `),i.pseudocode&&(s+=(e==="python"?"# ":"// ")+a.pseudocodeNote+` `),e!=="java")for(const u of n){if(u===i)continue;const m=yt(u.caption);m&&(s+=fo(u,m,e,t,0)+` -`)}const o=yt(i.caption),l={out:""};if(o)l.out=fo(i,o,e,t,a.baseIndent);else for(const u of i.elements)Rs(u,e,a,a.baseIndent,l);if(s+=l.out,s.trim()===""){const u=I3(e);return e==="javascript"?`"use strict"; +`)}const o=yt(i.caption),l={out:""};if(o)l.out=fo(i,o,e,t,a.baseIndent);else for(const u of i.elements)Rs(u,e,a,a.baseIndent,l);if(s+=l.out,s.trim()===""){const u=k3(e);return e==="javascript"?`"use strict"; -`+u:u}return Th(s.replace(/^[\n\r]+|[\n\r]+$/g,""),e)}function Nl(i,e,t){const n={...lh,...t,jsIntVariables:new Set,arrayElementTypes:C3(i),stringVariables:j3(i)};return e!=="java"&&(n.jsIntVariables=K3(i)),n}const pu=i=>i==="string"?"String":i===void 0?"void":i;function uh(i){const e=i.params.map(t=>`${pu(t.type)}${"[]".repeat(t.dims??0)} ${t.name}`).join(", ");return`public static ${pu(i.returnType)} ${i.name}(${e}) {`}function fo(i,e,t,n,a){const s=Nl(i,t,n);for(const l of e.params)l.dims||(l.type==="int"&&s.jsIntVariables.add(l.name),l.type==="string"&&s.stringVariables.add(l.name));const r=e.params.map(l=>l.name).join(", "),o={out:""};for(const l of i.elements)Rs(l,t,s,a+s.indentPerLevel,o);switch(o.out.trim()===""&&(o.out=Z(a+s.indentPerLevel)+(t==="python"?`pass +`+u:u}return Oh(s.replace(/^[\n\r]+|[\n\r]+$/g,""),e)}function Nl(i,e,t){const n={...uh,...t,jsIntVariables:new Set,arrayElementTypes:B3(i),stringVariables:C3(i)};return e!=="java"&&(n.jsIntVariables=ex(i)),n}const pu=i=>i==="string"?"String":i===void 0?"void":i;function mh(i){const e=i.params.map(t=>`${pu(t.type)}${"[]".repeat(t.dims??0)} ${t.name}`).join(", ");return`public static ${pu(i.returnType)} ${i.name}(${e}) {`}function fo(i,e,t,n,a){const s=Nl(i,t,n);for(const l of e.params)l.dims||(l.type==="int"&&s.jsIntVariables.add(l.name),l.type==="string"&&s.stringVariables.add(l.name));const r=e.params.map(l=>l.name).join(", "),o={out:""};for(const l of i.elements)Rs(l,t,s,a+s.indentPerLevel,o);switch(o.out.trim()===""&&(o.out=Z(a+s.indentPerLevel)+(t==="python"?`pass `:` -`)),t){case"java":return`${Z(a)}${uh(e)} +`)),t){case"java":return`${Z(a)}${mh(e)} ${o.out}${Z(a)}} `;case"python":return`${Z(a)}def ${e.name}(${r}): ${o.out}`;case"javascript":return`${Z(a)}function ${e.name}(${r}) { ${o.out}${Z(a)}} -`}}const Z=i=>i>0?" ".repeat(i):"";function ce(i,e){const t=i.exec(e);return t?Array.from(t,n=>n??""):void 0}function I3(i,e){return i==="python"?"# empty element":"// empty element"}const xo=i=>i.trim()==="ø";function mh(i,e){return Z(i)+(e==="python"?`# empty element +`}}const Z=i=>i>0?" ".repeat(i):"";function ce(i,e){const t=i.exec(e);return t?Array.from(t,n=>n??""):void 0}function k3(i,e){return i==="python"?"# empty element":"// empty element"}const xo=i=>i.trim()==="ø";function ch(i,e){return Z(i)+(e==="python"?`# empty element `:`// empty element -`)}function k3(i){switch(i.type){case I.leerElement:return!0;case I.anweisung:case I.aufruf:return i.textLines.map(e=>e.trim()).every(e=>e===""||xo(e));default:return!1}}function S3(i){return i.every(k3)}function Fl(i,e,t){const n=i.map(a=>a.replace(/^[ \t]+|[ \t]+$/g,"")).filter(a=>a!=="");return n.length===0?"":e==="python"?Z(t)+`""" +`)}function S3(i){switch(i.type){case I.leerElement:return!0;case I.anweisung:case I.aufruf:return i.textLines.map(e=>e.trim()).every(e=>e===""||xo(e));default:return!1}}function _3(i){return i.every(S3)}function Fl(i,e,t){const n=i.map(a=>a.replace(/^[ \t]+|[ \t]+$/g,"")).filter(a=>a!=="");return n.length===0?"":e==="python"?Z(t)+`""" `+n.map(a=>Z(t)+a+` `).join("")+Z(t)+`""" `:n.length===1?Z(t)+"/* "+n[0]+` */ `:Z(t)+`/* `+n.map(a=>Z(t)+" * "+a+` `).join("")+Z(t)+` */ -`}const _3=i=>i==="java"||i==="javascript";function rs(i){const e=i.trim();if(e==="")return"";if(e.startsWith("//")||e.startsWith("/*")||e.startsWith("*")||e.startsWith("#")||e.startsWith("{")||e.startsWith("}")||e.endsWith("{")||e.endsWith(";"))return e;const t=e.toLowerCase();for(const n of["if ","else","for ","while ","do ","switch ","case ","default"])if(t.startsWith(n))return e;return e+";"}function Da(i){const e=i.map(t=>t.trim()).filter(t=>t!=="");return T3(e.length===0?"true":e.join(" "))}function T3(i){const e=i.trim();for(const t of["if","while","until","switch"]){const n=ch(t,e);if(n!==void 0)return n===""?"true":n}return e}function ch(i,e){if(!e.toLowerCase().startsWith(i))return;const t=e.slice(i.length);if(!(t===""||/^\s/.test(t)||t[0]==="("))return;let n=t.trim();return n.startsWith("(")&&n.endsWith(")")&&n.length>=2&&(n=n.slice(1,-1).trim()),n}function Ht(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function O3(i){const e=i.trim(),t=e.toLowerCase();let n;if(t.startsWith("output:"))n=e.slice(7).trim();else if(t.startsWith("print:"))n=e.slice(6).trim();else return;return n===""?void 0:n}const Ns=i=>i.name.includes("[")&&i.name.includes("]");function Jl(i){const e=i.trim();if(e==="")return;const t=ce(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s+([a-zA-Z_]\w*(?:\s*\[[^\]]+\])?)(?:\s+"([^"]*)")?\s*$/i,e);if(t){const s=t[2].replaceAll(" ","");if(s==="")return;const r=(t[3]??"").trim();return{type:os(t[1]),name:s,customPrompt:r===""?void 0:r}}const n=ce(/^\s*([a-zA-Z_]\w*(?:\s*\[[^\]]+\])?)\s+"([^"]*)"\s*$/i,e);if(n){const s=n[1].replaceAll(" ","");return["int","integer","long","float","double","string","boolean","char","bool","void"].includes(s.toLowerCase())?void 0:{type:s.includes("[")?"String":"int",name:s,customPrompt:n[2].trim()}}const a=A3(e);if(a)return{type:os(a[0]),name:a[1]}}function os(i){switch(i.trim().toLowerCase()){case"integer":case"int":return"int";case"long":return"long";case"float":return"float";case"double":return"double";case"string":return"String";case"boolean":case"bool":return"boolean";case"char":return"char";default:return i}}function A3(i){const e=i.split(/[ \t]+/).filter(Boolean);if(e.length===0)return;if(e.length>=2)return[e[0],e[1]];if(!["int","double","string","boolean","char","long","float","short","byte","void","bool","integer"].includes(e[0].toLowerCase()))return["int",e[0]]}function P3(i,e,t,n,a){const s=Ht(i).trim();if(s.startsWith('"'))switch(e){case"java":return Z(t)+"System.out.println("+s+`); +`}const T3=i=>i==="java"||i==="javascript";function rs(i){const e=i.trim();if(e==="")return"";if(e.startsWith("//")||e.startsWith("/*")||e.startsWith("*")||e.startsWith("#")||e.startsWith("{")||e.startsWith("}")||e.endsWith("{")||e.endsWith(";"))return e;const t=e.toLowerCase();for(const n of["if ","else","for ","while ","do ","switch ","case ","default"])if(t.startsWith(n))return e;return e+";"}function Da(i){const e=i.map(t=>t.trim()).filter(t=>t!=="");return O3(e.length===0?"true":e.join(" "))}function O3(i){const e=i.trim();for(const t of["if","while","until","switch"]){const n=dh(t,e);if(n!==void 0)return n===""?"true":n}return e}function dh(i,e){if(!e.toLowerCase().startsWith(i))return;const t=e.slice(i.length);if(!(t===""||/^\s/.test(t)||t[0]==="("))return;let n=t.trim();return n.startsWith("(")&&n.endsWith(")")&&n.length>=2&&(n=n.slice(1,-1).trim()),n}function Ht(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function A3(i){const e=i.trim(),t=e.toLowerCase();let n;if(t.startsWith("output:"))n=e.slice(7).trim();else if(t.startsWith("print:"))n=e.slice(6).trim();else return;return n===""?void 0:n}const Ns=i=>i.name.includes("[")&&i.name.includes("]");function Jl(i){const e=i.trim();if(e==="")return;const t=ce(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s+([a-zA-Z_]\w*(?:\s*\[[^\]]+\])?)(?:\s+"([^"]*)")?\s*$/i,e);if(t){const s=t[2].replaceAll(" ","");if(s==="")return;const r=(t[3]??"").trim();return{type:os(t[1]),name:s,customPrompt:r===""?void 0:r}}const n=ce(/^\s*([a-zA-Z_]\w*(?:\s*\[[^\]]+\])?)\s+"([^"]*)"\s*$/i,e);if(n){const s=n[1].replaceAll(" ","");return["int","integer","long","float","double","string","boolean","char","bool","void"].includes(s.toLowerCase())?void 0:{type:s.includes("[")?"String":"int",name:s,customPrompt:n[2].trim()}}const a=P3(e);if(a)return{type:os(a[0]),name:a[1]}}function os(i){switch(i.trim().toLowerCase()){case"integer":case"int":return"int";case"long":return"long";case"float":return"float";case"double":return"double";case"string":return"String";case"boolean":case"bool":return"boolean";case"char":return"char";default:return i}}function P3(i){const e=i.split(/[ \t]+/).filter(Boolean);if(e.length===0)return;if(e.length>=2)return[e[0],e[1]];if(!["int","double","string","boolean","char","long","float","short","byte","void","bool","integer"].includes(e[0].toLowerCase()))return["int",e[0]]}function j3(i,e,t,n,a){const s=Ht(i).trim();if(s.startsWith('"'))switch(e){case"java":return Z(t)+"System.out.println("+s+`); `;case"javascript":return Z(t)+"console.log("+s+`); `;case"python":return Z(t)+"print("+jn(s,n,a)+`) `}}function yi(i){return i.replaceAll("\\","\\\\").replaceAll('"','\\"').replaceAll(` -`,"\\n").replaceAll("\r","\\r")}function Rl(i,e){const t=i.trim();if(!t.toLowerCase().startsWith("input:"))return;const n=t.slice(6).trim();if(n==="")return;const a=Jl(n);if(a&&Ns(a)&&!/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s/i.test(n)){const s=e.get(a.name.slice(0,a.name.indexOf("[")).trim());if(s)return{...a,type:s}}return a}function j3(i){const e=new Set;return gn(i.elements,t=>{for(const n of t.textLines){const a=n.trim();if(a.toLowerCase().startsWith("input:")){const o=Jl(a.slice(6).trim());(o==null?void 0:o.type)==="String"&&!Ns(o)&&e.add(o.name);continue}const s=ce(/^\s*(?:const\s+)?string\s+([a-zA-Z_]\w*)\s*=/i,a);s&&e.add(s[1]);const r=ce(/^\s*string\s*\[\s*\]\s*([a-zA-Z_]\w*)\s*=/i,a);r&&e.add(r[1]+"[]")}}),e}function C3(i){const e=new Map;return gn(i.elements,t=>{for(const n of t.textLines){const a=ce(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s*\[\s*\]\s*([a-zA-Z_]\w*)/i,n)??ce(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s+([a-zA-Z_]\w*)\s*\[\s*\]/i,n);a&&e.set(a[2],os(a[1]))}}),e}function B3(i,e,t){const n=Rl(i,t);if(!n)return;const a=n.customPrompt?n.customPrompt:n.name+": ",s=Z(e)+'System.out.println("'+yi(a)+`"); +`,"\\n").replaceAll("\r","\\r")}function Rl(i,e){const t=i.trim();if(!t.toLowerCase().startsWith("input:"))return;const n=t.slice(6).trim();if(n==="")return;const a=Jl(n);if(a&&Ns(a)&&!/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s/i.test(n)){const s=e.get(a.name.slice(0,a.name.indexOf("[")).trim());if(s)return{...a,type:s}}return a}function C3(i){const e=new Set;return gn(i.elements,t=>{for(const n of t.textLines){const a=n.trim();if(a.toLowerCase().startsWith("input:")){const o=Jl(a.slice(6).trim());(o==null?void 0:o.type)==="String"&&!Ns(o)&&e.add(o.name);continue}const s=ce(/^\s*(?:const\s+)?string\s+([a-zA-Z_]\w*)\s*=/i,a);s&&e.add(s[1]);const r=ce(/^\s*string\s*\[\s*\]\s*([a-zA-Z_]\w*)\s*=/i,a);r&&e.add(r[1]+"[]")}}),e}function B3(i){const e=new Map;return gn(i.elements,t=>{for(const n of t.textLines){const a=ce(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s*\[\s*\]\s*([a-zA-Z_]\w*)/i,n)??ce(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s+([a-zA-Z_]\w*)\s*\[\s*\]/i,n);a&&e.set(a[2],os(a[1]))}}),e}function D3(i,e,t){const n=Rl(i,t);if(!n)return;const a=n.customPrompt?n.customPrompt:n.name+": ",s=Z(e)+'System.out.println("'+yi(a)+`"); `,r=o=>Ns(n)?n.name:`${o} ${n.name}`;switch(n.type){case"int":return s+Z(e)+`${r("int")} = scanner.nextInt(); `;case"double":return s+Z(e)+`${r("double")} = scanner.nextDouble(); `;case"String":return s+Z(e)+`${r("String")} = scanner.next(); `;case"boolean":return s+Z(e)+`${r("boolean")} = scanner.nextBoolean(); -`;default:return}}function D3(i,e,t){const n=Rl(i,t);if(!n)return;const a=!!n.customPrompt,s=a?"":Z(e)+'console.log("'+yi(n.name+": ")+`"); +`;default:return}}function Z3(i,e,t){const n=Rl(i,t);if(!n)return;const a=!!n.customPrompt,s=a?"":Z(e)+'console.log("'+yi(n.name+": ")+`"); `,r=l=>{const u=a?n.customPrompt:n.name+": ";return`(prompt("${yi(u)}") ?? "${l}")`},o=Ns(n)?n.name:`let ${n.name}`;switch(n.type){case"int":return s+Z(e)+`${o} = parseInt(${r("0")}, 10); `;case"double":return s+Z(e)+`${o} = Number(${r("0")}); `;case"String":return s+Z(e)+`${o} = ${r("")}; `;case"boolean":return s+Z(e)+`${o} = ${r("")}.trim().toLowerCase() === "true"; -`;default:return}}function Z3(i,e,t){const n=Rl(i,t);if(!n)return;const a=!!n.customPrompt,s=a?"":Z(e)+'print("'+yi(n.name+": ")+`") +`;default:return}}function M3(i,e,t){const n=Rl(i,t);if(!n)return;const a=!!n.customPrompt,s=a?"":Z(e)+'print("'+yi(n.name+": ")+`") `,r=`input("${yi(a?n.customPrompt:n.name+": ")}")`;switch(n.type){case"int":return s+Z(e)+`${n.name} = int(${r}) `;case"double":return s+Z(e)+`${n.name} = float(${r}) `;case"String":return s+Z(e)+`${n.name} = ${r} `;case"boolean":return s+Z(e)+`${n.name} = ${r}.strip().lower() in ("true", "wahr") -`;default:return}}const hr=String.raw`("(?:[^"\\]|\\.)*"|[A-Za-z_]\w*)`,M3=[[new RegExp(String.raw`^new\s+Scanner\s*\(\s*new\s+File\s*\(\s*${hr}\s*\)\s*\)$`),"Scanner"],[new RegExp(String.raw`^new\s+BufferedReader\s*\(\s*new\s+FileReader\s*\(\s*${hr}\s*\)\s*\)$`),"BufferedReader"],[new RegExp(String.raw`^new\s+PrintWriter\s*\(\s*(?:new\s+(?:File|FileWriter)\s*\(\s*)?${hr}\s*\)?\s*\)$`),"PrintWriter"]];function dh(i){const e=i.trim();for(const[t,n]of M3){const a=t.exec(e);if(a)return{kind:n,name:a[1]}}}function L3(i,e,t,n,a){if(e==="java")return;const s=Ht(i).trim(),r=/^(?:(?:Scanner|BufferedReader|PrintWriter)\s+)?([A-Za-z_]\w*)\s*=\s*(new\s[\s\S]+)$/.exec(s),o=r&&dh(r[2]);if(r&&o){const m=/^(?:Scanner|BufferedReader|PrintWriter)\s/.test(s);return e==="python"?Z(t)+`${r[1]} = ${o.kind}(${o.name}) +`;default:return}}const hr=String.raw`("(?:[^"\\]|\\.)*"|[A-Za-z_]\w*)`,L3=[[new RegExp(String.raw`^new\s+Scanner\s*\(\s*new\s+File\s*\(\s*${hr}\s*\)\s*\)$`),"Scanner"],[new RegExp(String.raw`^new\s+BufferedReader\s*\(\s*new\s+FileReader\s*\(\s*${hr}\s*\)\s*\)$`),"BufferedReader"],[new RegExp(String.raw`^new\s+PrintWriter\s*\(\s*(?:new\s+(?:File|FileWriter)\s*\(\s*)?${hr}\s*\)?\s*\)$`),"PrintWriter"]];function hh(i){const e=i.trim();for(const[t,n]of L3){const a=t.exec(e);if(a)return{kind:n,name:a[1]}}}function W3(i,e,t,n,a){if(e==="java")return;const s=Ht(i).trim(),r=/^(?:(?:Scanner|BufferedReader|PrintWriter)\s+)?([A-Za-z_]\w*)\s*=\s*(new\s[\s\S]+)$/.exec(s),o=r&&hh(r[2]);if(r&&o){const m=/^(?:Scanner|BufferedReader|PrintWriter)\s/.test(s);return e==="python"?Z(t)+`${r[1]} = ${o.kind}(${o.name}) `:Z(t)+`${m?"let ":""}${r[1]} = new ${o.kind}(${o.name}); `}const l=/^([A-Za-z_]\w*)\.(println|print)\s*\(([\s\S]*)\)$/.exec(s);if(l&&l[1]!=="System"){const m=l[3].trim(),c=e==="python"&&m!==""?jn(m,n,a):m;return Z(t)+`${l[1]}.${l[2]}(${c})${e==="javascript"?";":""} `}const u=/^Files\.writeString\s*\(\s*(?:Path\.of|Paths\.get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)\s*,\s*([\s\S]+)\)$/.exec(s);if(u){const m=u[2].trim();return e==="python"?Z(t)+`open(${u[1]}, "w", encoding="utf-8").write(${jn(m,n,a)}) `:Z(t)+`require("fs").writeFileSync(${u[1]}, ${m}); -`}}function W3(i){const e=new Set;for(const t of i)gn(t.elements,n=>{for(const a of n.textLines){const s=/=\s*(new\s.+?);?\s*$/.exec(a),r=s&&dh(s[1]);r&&e.add(r.kind)}});return e}const E3={Scanner:`class Scanner: +`}}function E3(i){const e=new Set;for(const t of i)gn(t.elements,n=>{for(const a of n.textLines){const s=/=\s*(new\s.+?);?\s*$/.exec(a),r=s&&hh(s[1]);r&&e.add(r.kind)}});return e}const N3={Scanner:`class Scanner: def __init__(self, name): self.lines = open(name, encoding="utf-8").read().splitlines() def hasNextLine(self): @@ -94,7 +94,7 @@ ${o.out}${Z(a)}} self.file.write(str(text)) def close(self): self.file.close() -`},N3={Scanner:`class Scanner { +`},F3={Scanner:`class Scanner { constructor(name) { this.lines = require("fs").readFileSync(name, "utf8").split(/\\r?\\n/); if (this.lines.at(-1) === "") this.lines.pop(); } hasNextLine() { return this.lines.length > 0; } nextLine() { return this.lines.shift(); } @@ -111,34 +111,34 @@ ${o.out}${Z(a)}} print(text) { this.text += text; } close() { require("fs").writeFileSync(this.name, this.text); } } -`};function bo(i,e){const t=W3(i);if(t.size===0)return"";const n=e==="python"?E3:N3;return[...t].map(a=>n[a]).join(` +`};function bo(i,e){const t=E3(i);if(t.size===0)return"";const n=e==="python"?N3:F3;return[...t].map(a=>n[a]).join(` `)+` -`}function F3(i,e,t,n,a){const s=/^System\s*\.\s*out\s*\.\s*print\s*\(([\s\S]*)\)$/.exec(Ht(i).trim());if(s){const o=s[1].trim();switch(e){case"java":return Z(t)+"System.out.print("+o+`); +`}function J3(i,e,t,n,a){const s=/^System\s*\.\s*out\s*\.\s*print\s*\(([\s\S]*)\)$/.exec(Ht(i).trim());if(s){const o=s[1].trim();switch(e){case"java":return Z(t)+"System.out.print("+o+`); `;case"javascript":return Z(t)+"process.stdout.write(String("+o+`)); `;case"python":return Z(t)+"print("+(o===""?"":jn(o,n,a)+", ")+`end="") -`}}const r=O3(i);if(r===void 0)return/^\s*(?:output|print):\s*$/i.test(i)?Z(t)+{java:"System.out.println();",javascript:"console.log();",python:"print()"}[e]+` +`}}const r=A3(i);if(r===void 0)return/^\s*(?:output|print):\s*$/i.test(i)?Z(t)+{java:"System.out.println();",javascript:"console.log();",python:"print()"}[e]+` `:void 0;switch(e){case"java":return Z(t)+"System.out.println("+r+`); `;case"javascript":return Z(t)+"console.log("+r+`); `;case"python":return Z(t)+"print("+jn(r,n,a)+`) -`}}function Gl(i){const e=i.map(Ht).filter(t=>t!=="");return e.length===0?";;":e.join("; ")}function J3(i){const t=Gl(i).split(";"),n=hh(t[0]);return n!==void 0&&(t[0]=n),t.join(";")}function hh(i){const e=ce(/^(\s*)(?:integer|int|long|float|double|string|boolean|char|bool)\s+(\w+)(?:\s*=\s*(.*))?\s*$/i,i);if(!e)return;const t=e[2].trim();if(t==="")return;const n=(e[3]??"").trim();return i.includes("=")&&n!==""?e[1]+`let ${t} = ${n}`:e[1]+`let ${t}`}function R3(i){const e=i.map(n=>Ht(n).trim()).filter(n=>n!=="");let t=e;if(e.length===1){let n=e[0];const a=ch("for",n);a!==void 0&&(n=a),t=n.split(";").map(s=>s.trim())}if(!(t.length!==3||t.some(n=>n==="")))return[t[0],t[1],t[2]]}function gh(i,e){let t=ce(/^\s*(\w+)\s*(\+\+|--)\s*$/,i)??ce(/^\s*(\+\+|--)\s*(\w+)\s*$/,i);if(t){const[n,a]=t[1]==="++"||t[1]==="--"?[t[2],t[1]]:[t[1],t[2]];return n===e?a==="++"?1:-1:void 0}if(t=ce(/^\s*(\w+)\s*(\+|-)=\s*(\d+)\s*$/,i),t)return t[1]===e?(t[2]==="+"?1:-1)*Number(t[3]):void 0;if(t=ce(/^\s*(\w+)\s*=\s*(\w+)\s*(\+|-)\s*(\d+)\s*$/,i),t)return t[1]===e&&t[2]===e?(t[3]==="+"?1:-1)*Number(t[4]):void 0}function yo(i,e){if(/^-?\d+$/.test(i))return String(Number(i)+e);const t=/^[\w.()[\]]+$/.test(i)?i:`(${i})`;return e>0?`${t} + ${e}`:`${t} - ${-e}`}function G3(i,e){const t=R3(i);if(!t)return;const[n,a,s]=t,r=ce(/^\s*(?:integer|int|long|short|byte|double|float)?\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,n);if(!r)return;const o=r[1],l={variable:o,init:`${o} = ${Pe(r[2],e)}`,condition:a,increment:s},u=ce(/^\s*(\w+)\s*(<=|<|>=|>)\s*(.+)$/,a),m=gh(s,o);if(!u||u[1]!==o||m===void 0||m===0)return l;const c=Pe(r[2],e);let d=Pe(u[3],e);const h=u[2];if(m>0&&h==="<=")d=yo(d,1);else if(m<0&&h===">=")d=yo(d,-1);else if(!(m>0&&h==="<")&&!(m<0&&h===">"))return l;const g=m===1?c==="0"?[d]:[c,d]:[c,d,String(m)];return l.rangeLine=`for ${o} in range(${g.join(", ")}):`,l}function ph(i){const e=Ht(i).trim();if(e==="")return;const t=ce(/^\s*const\s+(integer|int|long|float|double|string|boolean|char|bool)\s+(\w+)(?:\s*=\s*(.*))?$/i,e);if(!t)return;const n=t[2].trim();if(n==="")return;if(!e.includes("="))return{rawType:t[1].trim(),name:n};const a=(t[3]??"").trim();if(a!=="")return{rawType:t[1].trim(),name:n,rhs:a}}function H3(i,e,t,n){var o;const a=ph(i);if(!a)return;const s=os(a.rawType),r=(o=a.rhs)==null?void 0:o.trim();switch(e){case"java":return Z(t)+rs(r?`final ${s} ${a.name} = ${r}`:`final ${s} ${a.name}`)+` +`}}function Gl(i){const e=i.map(Ht).filter(t=>t!=="");return e.length===0?";;":e.join("; ")}function R3(i){const t=Gl(i).split(";"),n=gh(t[0]);return n!==void 0&&(t[0]=n),t.join(";")}function gh(i){const e=ce(/^(\s*)(?:integer|int|long|float|double|string|boolean|char|bool)\s+(\w+)(?:\s*=\s*(.*))?\s*$/i,i);if(!e)return;const t=e[2].trim();if(t==="")return;const n=(e[3]??"").trim();return i.includes("=")&&n!==""?e[1]+`let ${t} = ${n}`:e[1]+`let ${t}`}function G3(i){const e=i.map(n=>Ht(n).trim()).filter(n=>n!=="");let t=e;if(e.length===1){let n=e[0];const a=dh("for",n);a!==void 0&&(n=a),t=n.split(";").map(s=>s.trim())}if(!(t.length!==3||t.some(n=>n==="")))return[t[0],t[1],t[2]]}function ph(i,e){let t=ce(/^\s*(\w+)\s*(\+\+|--)\s*$/,i)??ce(/^\s*(\+\+|--)\s*(\w+)\s*$/,i);if(t){const[n,a]=t[1]==="++"||t[1]==="--"?[t[2],t[1]]:[t[1],t[2]];return n===e?a==="++"?1:-1:void 0}if(t=ce(/^\s*(\w+)\s*(\+|-)=\s*(\d+)\s*$/,i),t)return t[1]===e?(t[2]==="+"?1:-1)*Number(t[3]):void 0;if(t=ce(/^\s*(\w+)\s*=\s*(\w+)\s*(\+|-)\s*(\d+)\s*$/,i),t)return t[1]===e&&t[2]===e?(t[3]==="+"?1:-1)*Number(t[4]):void 0}function yo(i,e){if(/^-?\d+$/.test(i))return String(Number(i)+e);const t=/^[\w.()[\]]+$/.test(i)?i:`(${i})`;return e>0?`${t} + ${e}`:`${t} - ${-e}`}function H3(i,e){const t=G3(i);if(!t)return;const[n,a,s]=t,r=ce(/^\s*(?:integer|int|long|short|byte|double|float)?\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,n);if(!r)return;const o=r[1],l={variable:o,init:`${o} = ${Pe(r[2],e)}`,condition:a,increment:s},u=ce(/^\s*(\w+)\s*(<=|<|>=|>)\s*(.+)$/,a),m=ph(s,o);if(!u||u[1]!==o||m===void 0||m===0)return l;const c=Pe(r[2],e);let d=Pe(u[3],e);const h=u[2];if(m>0&&h==="<=")d=yo(d,1);else if(m<0&&h===">=")d=yo(d,-1);else if(!(m>0&&h==="<")&&!(m<0&&h===">"))return l;const g=m===1?c==="0"?[d]:[c,d]:[c,d,String(m)];return l.rangeLine=`for ${o} in range(${g.join(", ")}):`,l}function fh(i){const e=Ht(i).trim();if(e==="")return;const t=ce(/^\s*const\s+(integer|int|long|float|double|string|boolean|char|bool)\s+(\w+)(?:\s*=\s*(.*))?$/i,e);if(!t)return;const n=t[2].trim();if(n==="")return;if(!e.includes("="))return{rawType:t[1].trim(),name:n};const a=(t[3]??"").trim();if(a!=="")return{rawType:t[1].trim(),name:n,rhs:a}}function V3(i,e,t,n){var o;const a=fh(i);if(!a)return;const s=os(a.rawType),r=(o=a.rhs)==null?void 0:o.trim();switch(e){case"java":return Z(t)+rs(r?`final ${s} ${a.name} = ${r}`:`final ${s} ${a.name}`)+` `;case"javascript":return r?Z(t)+rs(`const ${a.name} = ${r}`)+` `:Z(t)+`let ${a.name}; // from diagram: const ${s} ${a.name} `;case"python":return r?Z(t)+`${a.name} = ${Js(r,n)} # const ${s} `:Z(t)+`${a.name} = None # const ${s}, uninitialized -`}}function V3(i){const e=Ht(i).trim();if(e===""||wh(e))return;const t=ce(/^\s*(?:integer|int|long|float|double|string|boolean|char|bool)(?:\s*\[\s*\]\s+(\w+)|\s+(\w+)(\s*\[\s*\])?)\s*=\s*(.*)$/i,e);if(!t)return;const n=t[1]===""?t[2]:t[1],a=t[4].trim();if(a!=="")return{name:n,rhs:a,isArray:t[1]!==""||t[3]!==""}}function Fs(i){const e=ce(/^\s*\(\s*int(?:eger)?\s*\)\s*(.+?)\s*$/i,i),t=e==null?void 0:e[1].trim();if(!(!t||fh(t)))return t.startsWith("(")&&vo(t,0)===t.length-1?t.slice(1,-1).trim():t}function vo(i,e){let t=0;for(let n=e;n/^'.'$/u.test(i)||/\.charAt\(.*\)$/.test(i);function Q3(i,e){if(i[e]==="("){const a=vo(i,e);return a<0?-1:a+1}if(i[e]==="'")return i[e+2]==="'"?e+3:-1;const t=/^(?:[A-Za-z_]\w*|\d+)/.exec(i.slice(e));if(!t)return-1;let n=e+t[0].length;for(;;){const a=/^\.[A-Za-z_]\w*/.exec(i.slice(n));if(a)n+=a[0].length;else if(i[n]==="("||i[n]==="["){const s=vo(i,n);if(s<0)return-1;n=s+1}else return n}}function wo(i,e){return Hl(i,t=>{const n=/\(\s*(int|char)\s*\)\s*/g;let a="",s=0;for(let r=n.exec(t);r;r=n.exec(t)){const o=r.index+r[0].length,l=Q3(t,o);if(l<0)continue;const u=t.slice(o,l);if(r[1]==="int"&&!fh(u))continue;const m=wo(u.startsWith("(")?u.slice(1,-1).trim():u,e),c=r[1]==="int"?e==="python"?`ord(${m})`:`${m}.charCodeAt(0)`:e==="python"?`chr(${m})`:`String.fromCharCode(${m})`;a+=t.slice(s,r.index)+c,s=l,n.lastIndex=l}return a+t.slice(s)})}function Js(i,e=new Set){const t=i.trim();if(t==="null")return"None";const n=Fs(t);return n!==void 0?`int(${Js(n,e)})`:Pe(t,e)}function Hl(i,e){let t="",n="",a=0;for(;a/^\d+$/.test(a)||e.has(a);return Hl(t,a=>a.replace(/\bMath\.random\s*\(\s*\)/gi,"random.random()").replace(/===/g,"==").replace(/!==/g,"!=").replace(/\s*&&\s*/g," and ").replace(/\s*\|\|\s*/g," or ").replace(/!(?!=)\s*/g,"not ").replace(/\btrue\b/g,"True").replace(/\bfalse\b/g,"False").replace(/\bnull\b/g,"None").replace(new RegExp("(?n(r)&&n(o)?`${r} // ${o}`:s))}function xh(i){const e=[];let t=0,n="",a=!1;for(let s=0;s/^"(?:[^"\\]|\\.)*"$/.test(i);function jn(i,e,t){const n=xh(i),a=s=>Vl(s)||t.has(s)||t.has(s.replace(/^([A-Za-z_]\w*)\[[^[\]]*\]$/u,"$1[]"));return n.length<2||!n.some(a)||n.some(s=>s==="")?Pe(i,e):n.map(s=>a(s)?s:`str(${Pe(s,e)})`).join(" + ")}function bh(i,e,t=new Set){const n=Ht(i).trim(),a=ce(/^(\w+(?:\[[^\]]*\])?)\s*(\+\+|--)$/,n)??ce(/^(\+\+|--)\s*(\w+(?:\[[^\]]*\])?)$/,n);if(a){const[o,l]=a[1]==="++"||a[1]==="--"?[a[2],a[1]]:[a[1],a[2]];return`${Pe(o,e)} ${l==="++"?"+=":"-="} 1`}const s=ce(/^(\w+)\s*\/=\s*(.+)$/,n);if(s&&e.has(s[1]))return`${s[1]} //= ${Pe(s[2],e)}`;const r=ce(/^([\w[\]. ]+?)\s*(=|\+=|-=|\*=|\/=|%=)\s*(.+)$/,n);if(r&&!r[3].startsWith("=")){const[,o,l,u]=r;let m;if(l==="+="&&t.has(o.trim())){const c=xh(u);m=jn(`"" + ${u}`,e,t).replace(/^"" \+ /,""),c.length===1&&!Vl(u.trim())&&!t.has(u.trim())&&(m=`str(${Pe(u,e)})`)}else l==="="&&Fs(u)===void 0&&u.trim()!=="null"?m=jn(u,e,t):m=l==="="?Js(u,e):Pe(u,e);return`${o} ${l} ${m}`}return Pe(n,e)}const q3=i=>i.replace(/\bMath\.random\b(?!\s*\()/gi,"Math.random()");function yh(i){const e=i.trim();return e.startsWith("{")&&e.endsWith("}")?"["+e.slice(1,-1)+"]":i}function vh(i){const e=ce(/^\s*new\s+(?:byte|short|int|long|float|double|boolean|char|string)\s*\[\s*(.+)\s*\]\s*$/i,i),t=e==null?void 0:e[1].trim();return t||void 0}function wh(i){const e=ce(/^\s*(int|double|string|boolean)\s*\[\s*\]\s*\[\s*\]\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,Ht(i).trim());return e?{elementType:e[1].toLowerCase(),name:e[2],rhs:e[3].trim()}:void 0}function U3(i){const e=ce(/^\s*new\s+(?:int|double|string|boolean)\s*\[\s*(.+?)\s*\]\s*\[\s*(.+?)\s*\]\s*$/i,i);return e?[e[1],e[2]]:void 0}const fu=i=>i.replaceAll("{","[").replaceAll("}","]");function xu(i,e){return i==="boolean"?e==="python"?"False":"false":i==="string"?'""':i==="double"?"0.0":"0"}function $3(i,e,t){const n=U3(i.rhs);return e==="javascript"?n?`Array.from({ length: ${n[0]} }, () => new Array(${n[1]}).fill(${xu(i.elementType,e)}))`:fu(i.rhs):n?`[[${xu(i.elementType,e)}] * ${Pe(n[1],t)} for _ in range(${Pe(n[0],t)})]`:Pe(fu(i.rhs),t)}function zh(i,e){const t=i.trim();if(e){const a=vh(t);return a!==void 0?`new Array(${a})`:yh(t)}const n=Fs(t);return n!==void 0?`Math.floor(${zh(n,!1)})`:q3(t)}function Y3(i,e,t){const n=i.trim();if(e){const a=vh(n);return a!==void 0?`[None] * ${a}`:Pe(yh(n),t)}return Js(n,t)}function X3(i,e,t,n,a){if(e==="java")return;const s=wh(i);if(s){const u=$3(s,e,n);return e==="javascript"?Z(t)+`let ${s.name} = ${u}; +`}}function Q3(i){const e=Ht(i).trim();if(e===""||zh(e))return;const t=ce(/^\s*(?:integer|int|long|float|double|string|boolean|char|bool)(?:\s*\[\s*\]\s+(\w+)|\s+(\w+)(\s*\[\s*\])?)\s*=\s*(.*)$/i,e);if(!t)return;const n=t[1]===""?t[2]:t[1],a=t[4].trim();if(a!=="")return{name:n,rhs:a,isArray:t[1]!==""||t[3]!==""}}function Fs(i){const e=ce(/^\s*\(\s*int(?:eger)?\s*\)\s*(.+?)\s*$/i,i),t=e==null?void 0:e[1].trim();if(!(!t||xh(t)))return t.startsWith("(")&&vo(t,0)===t.length-1?t.slice(1,-1).trim():t}function vo(i,e){let t=0;for(let n=e;n/^'.'$/u.test(i)||/\.charAt\(.*\)$/.test(i);function q3(i,e){if(i[e]==="("){const a=vo(i,e);return a<0?-1:a+1}if(i[e]==="'")return i[e+2]==="'"?e+3:-1;const t=/^(?:[A-Za-z_]\w*|\d+)/.exec(i.slice(e));if(!t)return-1;let n=e+t[0].length;for(;;){const a=/^\.[A-Za-z_]\w*/.exec(i.slice(n));if(a)n+=a[0].length;else if(i[n]==="("||i[n]==="["){const s=vo(i,n);if(s<0)return-1;n=s+1}else return n}}function wo(i,e){return Hl(i,t=>{const n=/\(\s*(int|char)\s*\)\s*/g;let a="",s=0;for(let r=n.exec(t);r;r=n.exec(t)){const o=r.index+r[0].length,l=q3(t,o);if(l<0)continue;const u=t.slice(o,l);if(r[1]==="int"&&!xh(u))continue;const m=wo(u.startsWith("(")?u.slice(1,-1).trim():u,e),c=r[1]==="int"?e==="python"?`ord(${m})`:`${m}.charCodeAt(0)`:e==="python"?`chr(${m})`:`String.fromCharCode(${m})`;a+=t.slice(s,r.index)+c,s=l,n.lastIndex=l}return a+t.slice(s)})}function Js(i,e=new Set){const t=i.trim();if(t==="null")return"None";const n=Fs(t);return n!==void 0?`int(${Js(n,e)})`:Pe(t,e)}function Hl(i,e){let t="",n="",a=0;for(;a/^\d+$/.test(a)||e.has(a);return Hl(t,a=>a.replace(/\bMath\.random\s*\(\s*\)/gi,"random.random()").replace(/===/g,"==").replace(/!==/g,"!=").replace(/\s*&&\s*/g," and ").replace(/\s*\|\|\s*/g," or ").replace(/!(?!=)\s*/g,"not ").replace(/\btrue\b/g,"True").replace(/\bfalse\b/g,"False").replace(/\bnull\b/g,"None").replace(new RegExp("(?n(r)&&n(o)?`${r} // ${o}`:s))}function bh(i){const e=[];let t=0,n="",a=!1;for(let s=0;s/^"(?:[^"\\]|\\.)*"$/.test(i);function jn(i,e,t){const n=bh(i),a=s=>Vl(s)||t.has(s)||t.has(s.replace(/^([A-Za-z_]\w*)\[[^[\]]*\]$/u,"$1[]"));return n.length<2||!n.some(a)||n.some(s=>s==="")?Pe(i,e):n.map(s=>a(s)?s:`str(${Pe(s,e)})`).join(" + ")}function yh(i,e,t=new Set){const n=Ht(i).trim(),a=ce(/^(\w+(?:\[[^\]]*\])?)\s*(\+\+|--)$/,n)??ce(/^(\+\+|--)\s*(\w+(?:\[[^\]]*\])?)$/,n);if(a){const[o,l]=a[1]==="++"||a[1]==="--"?[a[2],a[1]]:[a[1],a[2]];return`${Pe(o,e)} ${l==="++"?"+=":"-="} 1`}const s=ce(/^(\w+)\s*\/=\s*(.+)$/,n);if(s&&e.has(s[1]))return`${s[1]} //= ${Pe(s[2],e)}`;const r=ce(/^([\w[\]. ]+?)\s*(=|\+=|-=|\*=|\/=|%=)\s*(.+)$/,n);if(r&&!r[3].startsWith("=")){const[,o,l,u]=r;let m;if(l==="+="&&t.has(o.trim())){const c=bh(u);m=jn(`"" + ${u}`,e,t).replace(/^"" \+ /,""),c.length===1&&!Vl(u.trim())&&!t.has(u.trim())&&(m=`str(${Pe(u,e)})`)}else l==="="&&Fs(u)===void 0&&u.trim()!=="null"?m=jn(u,e,t):m=l==="="?Js(u,e):Pe(u,e);return`${o} ${l} ${m}`}return Pe(n,e)}const U3=i=>i.replace(/\bMath\.random\b(?!\s*\()/gi,"Math.random()");function vh(i){const e=i.trim();return e.startsWith("{")&&e.endsWith("}")?"["+e.slice(1,-1)+"]":i}function wh(i){const e=ce(/^\s*new\s+(?:byte|short|int|long|float|double|boolean|char|string)\s*\[\s*(.+)\s*\]\s*$/i,i),t=e==null?void 0:e[1].trim();return t||void 0}function zh(i){const e=ce(/^\s*(int|double|string|boolean)\s*\[\s*\]\s*\[\s*\]\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,Ht(i).trim());return e?{elementType:e[1].toLowerCase(),name:e[2],rhs:e[3].trim()}:void 0}function $3(i){const e=ce(/^\s*new\s+(?:int|double|string|boolean)\s*\[\s*(.+?)\s*\]\s*\[\s*(.+?)\s*\]\s*$/i,i);return e?[e[1],e[2]]:void 0}const fu=i=>i.replaceAll("{","[").replaceAll("}","]");function xu(i,e){return i==="boolean"?e==="python"?"False":"false":i==="string"?'""':i==="double"?"0.0":"0"}function Y3(i,e,t){const n=$3(i.rhs);return e==="javascript"?n?`Array.from({ length: ${n[0]} }, () => new Array(${n[1]}).fill(${xu(i.elementType,e)}))`:fu(i.rhs):n?`[[${xu(i.elementType,e)}] * ${Pe(n[1],t)} for _ in range(${Pe(n[0],t)})]`:Pe(fu(i.rhs),t)}function Ih(i,e){const t=i.trim();if(e){const a=wh(t);return a!==void 0?`new Array(${a})`:vh(t)}const n=Fs(t);return n!==void 0?`Math.floor(${Ih(n,!1)})`:U3(t)}function X3(i,e,t){const n=i.trim();if(e){const a=wh(n);return a!==void 0?`[None] * ${a}`:Pe(vh(n),t)}return Js(n,t)}function K3(i,e,t,n,a){if(e==="java")return;const s=zh(i);if(s){const u=Y3(s,e,n);return e==="javascript"?Z(t)+`let ${s.name} = ${u}; `:Z(t)+`${s.name} = ${u} -`}const r=V3(i);if(!r)return;if(e==="javascript")return Z(t)+rs(`let ${r.name} = ${zh(r.rhs,r.isArray)}`)+` -`;const l=!r.isArray&&Fs(r.rhs)===void 0&&r.rhs.trim()!=="null"?jn(r.rhs,n,a):Y3(r.rhs,r.isArray,n);return Z(t)+`${r.name} = ${l} -`}function gn(i,e){for(const t of i){e(t),t.loopBody&&gn(t.loopBody,e);for(const n of t.cases??[])gn(n.elements,e)}}function K3(i){const e=n=>["int","integer","long","short","byte"].includes(n.trim().toLowerCase()),t=new Set;return gn(i.elements,n=>{for(const a of n.textLines){const s=a.trim();if(s==="")continue;if(s.toLowerCase().startsWith("input:")){const l=Jl(s.slice(6).trim());l&&e(l.type)&&!l.name.includes("[")&&t.add(l.name);continue}const r=ph(s);if(r&&e(r.rawType)){t.add(r.name);continue}const o=ce(/^\s*(integer|int|long|short|byte)\s+([a-zA-Z_]\w*)\s*=/i,s);o&&t.add(o[2].trim())}}),t}function zo(i,e){const t=r=>/^\d+$/.test(r)||e.has(r),n=String.raw`(?:[a-zA-Z_]\w*|\d+(?:\.\d+)?)`,a=new RegExp(String.raw`(?{const o=r.split(/\s*([*/%])\s*/);if(!o.some(m=>m==="/"))return r;let l=o[0],u=t(o[0]);for(let m=1;mr.replace(a,s).replace(new RegExp("(?t(l)&&t(u)?`${l} = Math.trunc(${l} / ${u})`:o))}function ls(i){let e=!1;return gn(i.elements,t=>{t.type===I.anweisung&&t.textLines.some(n=>n.trim().toLowerCase().startsWith("input:"))&&(e=!0)}),e}function Ql(i){let e=!1,t=!1,n=!1;return gn(i.elements,a=>{for(const s of a.textLines)/\bFiles\s*\./.test(s)&&(e=!0),/\bnew\s+(?:File|PrintWriter|FileReader|FileWriter|BufferedReader)\s*\(/.test(s)&&(t=!0),/\bnew\s+Scanner\s*\(\s*new\s+File\b/.test(s)&&(n=!0)}),[...t?["import java.io.*;"]:[],...e?["import java.nio.file.*;"]:[],...n?["import java.util.Scanner;"]:[]]}function ex(i){return Ql(i).length>0}function Ih(i){let e=!1;return gn(i.elements,t=>{t.textLines.some(n=>/\bMath\.random\s*\(/i.test(n))&&(e=!0)}),e}function Xi(i,e){const t=i.trim();return t===""?e==="python"?'""':"0":e==="java"||new RegExp("^\\p{N}+$","u").test(t)||Vl(t)?t:'"'+t.replaceAll('"','\\"')+'"'}function E1(i,e){const t=i.trim();if(t==="")return"";switch(e){case"java":return"/* "+t+" */";case"python":return" # "+t;case"javascript":return" /* "+t+" */"}}function tx(i,e,t,n,a){const s=i.map(r=>r.trim());if(s.every(r=>r==="")){t.live&&(a.out+=Z(n)+(e==="python"?"pass":";")+` -`);return}if(t.includeDiagramTextAsComments){const r=s.filter(o=>o!==""&&!xo(o));r.length>0&&(a.out+=Fl(r,e,n))}for(const r of s){if(r==="")continue;if(xo(r)){a.out+=t.live?Ul(n,t.live):mh(n,e);continue}const o=t.jsIntVariables??new Set,l=t.arrayElementTypes??new Map,u=t.stringVariables??new Set,m=(e==="java"?B3(r,n,l):void 0)??(e==="javascript"?D3(r,n,l):void 0)??(e==="python"?Z3(r,n,l):void 0)??L3(r,e,n,o,u)??F3(r,e,n,o,u)??H3(r,e,n,o)??X3(r,e,n,o,u)??P3(r,e,n,o,u);if(m!==void 0){a.out+=e==="javascript"?zo(m,o):m;continue}let c=r;_3(e)?c=rs(e==="javascript"?zo(r,o):r):e==="python"&&(c=bh(r,o,u)),c!==""&&(a.out+=Z(n)+c+` +`}const r=Q3(i);if(!r)return;if(e==="javascript")return Z(t)+rs(`let ${r.name} = ${Ih(r.rhs,r.isArray)}`)+` +`;const l=!r.isArray&&Fs(r.rhs)===void 0&&r.rhs.trim()!=="null"?jn(r.rhs,n,a):X3(r.rhs,r.isArray,n);return Z(t)+`${r.name} = ${l} +`}function gn(i,e){for(const t of i){e(t),t.loopBody&&gn(t.loopBody,e);for(const n of t.cases??[])gn(n.elements,e)}}function ex(i){const e=n=>["int","integer","long","short","byte"].includes(n.trim().toLowerCase()),t=new Set;return gn(i.elements,n=>{for(const a of n.textLines){const s=a.trim();if(s==="")continue;if(s.toLowerCase().startsWith("input:")){const l=Jl(s.slice(6).trim());l&&e(l.type)&&!l.name.includes("[")&&t.add(l.name);continue}const r=fh(s);if(r&&e(r.rawType)){t.add(r.name);continue}const o=ce(/^\s*(integer|int|long|short|byte)\s+([a-zA-Z_]\w*)\s*=/i,s);o&&t.add(o[2].trim())}}),t}function zo(i,e){const t=r=>/^\d+$/.test(r)||e.has(r),n=String.raw`(?:[a-zA-Z_]\w*|\d+(?:\.\d+)?)`,a=new RegExp(String.raw`(?{const o=r.split(/\s*([*/%])\s*/);if(!o.some(m=>m==="/"))return r;let l=o[0],u=t(o[0]);for(let m=1;mr.replace(a,s).replace(new RegExp("(?t(l)&&t(u)?`${l} = Math.trunc(${l} / ${u})`:o))}function ls(i){let e=!1;return gn(i.elements,t=>{t.type===I.anweisung&&t.textLines.some(n=>n.trim().toLowerCase().startsWith("input:"))&&(e=!0)}),e}function Ql(i){let e=!1,t=!1,n=!1;return gn(i.elements,a=>{for(const s of a.textLines)/\bFiles\s*\./.test(s)&&(e=!0),/\bnew\s+(?:File|PrintWriter|FileReader|FileWriter|BufferedReader)\s*\(/.test(s)&&(t=!0),/\bnew\s+Scanner\s*\(\s*new\s+File\b/.test(s)&&(n=!0)}),[...t?["import java.io.*;"]:[],...e?["import java.nio.file.*;"]:[],...n?["import java.util.Scanner;"]:[]]}function tx(i){return Ql(i).length>0}function kh(i){let e=!1;return gn(i.elements,t=>{t.textLines.some(n=>/\bMath\.random\s*\(/i.test(n))&&(e=!0)}),e}function Xi(i,e){const t=i.trim();return t===""?e==="python"?'""':"0":e==="java"||new RegExp("^\\p{N}+$","u").test(t)||Vl(t)?t:'"'+t.replaceAll('"','\\"')+'"'}function E1(i,e){const t=i.trim();if(t==="")return"";switch(e){case"java":return"/* "+t+" */";case"python":return" # "+t;case"javascript":return" /* "+t+" */"}}function nx(i,e,t,n,a){const s=i.map(r=>r.trim());if(s.every(r=>r==="")){t.live&&(a.out+=Z(n)+(e==="python"?"pass":";")+` +`);return}if(t.includeDiagramTextAsComments){const r=s.filter(o=>o!==""&&!xo(o));r.length>0&&(a.out+=Fl(r,e,n))}for(const r of s){if(r==="")continue;if(xo(r)){a.out+=t.live?Ul(n,t.live):ch(n,e);continue}const o=t.jsIntVariables??new Set,l=t.arrayElementTypes??new Map,u=t.stringVariables??new Set,m=(e==="java"?D3(r,n,l):void 0)??(e==="javascript"?Z3(r,n,l):void 0)??(e==="python"?M3(r,n,l):void 0)??W3(r,e,n,o,u)??J3(r,e,n,o,u)??V3(r,e,n,o)??K3(r,e,n,o,u)??j3(r,e,n,o,u);if(m!==void 0){a.out+=e==="javascript"?zo(m,o):m;continue}let c=r;T3(e)?c=rs(e==="javascript"?zo(r,o):r):e==="python"&&(c=yh(r,o,u)),c!==""&&(a.out+=Z(n)+c+` `)}}function si(i,e,t,n,a,s,r,o=(l=>(l=a.live)==null?void 0:l.labels.condition)()){if(a.includeDiagramTextAsComments&&(r.out+=Fl(t,n,s)),o!==void 0&&$l(t)){r.out+=Z(s)+i+Xn(o)+e;return}const u=Da(t),m=a.jsIntVariables??new Set,c=n==="python"?Pe(u,m):n==="javascript"?zo(u,m):u;r.out+=Z(s)+i+c+e}function p1(i,e,t,n,a){const s=a.out.length;for(const o of i)Rs(o,e,t,n,a);if(t.live&&a.out.length===s&&(a.out+=Ul(n,t.live)),e!=="python")return;a.out.slice(s).split(` `).map(o=>o.trim()).every(o=>o===""||o.startsWith("#"))&&(a.out+=Z(n)+`pass -`)}function nx(i,e){var n;if(e.includeDiagramTextAsComments||i.length!==1)return;const t=i[0];return t.type===I.verzweigung&&(((n=t.cases)==null?void 0:n.length)??0)>=2?t:void 0}function Io(i,e,t,n,a,s){const r=i.cases;if(!r||r.length<2)return;const o=e==="python",l=n+t.indentPerLevel,u=!t.includeEmptyElseBranch&&S3(r[1].elements),m=u?void 0:nx(r[1].elements,t);if(o){si(s?"elif ":"if ",`: +`)}function ix(i,e){var n;if(e.includeDiagramTextAsComments||i.length!==1)return;const t=i[0];return t.type===I.verzweigung&&(((n=t.cases)==null?void 0:n.length)??0)>=2?t:void 0}function Io(i,e,t,n,a,s){const r=i.cases;if(!r||r.length<2)return;const o=e==="python",l=n+t.indentPerLevel,u=!t.includeEmptyElseBranch&&_3(r[1].elements),m=u?void 0:ix(r[1].elements,t);if(o){si(s?"elif ":"if ",`: `,i.textLines,e,t,n,a),p1(r[0].elements,e,t,l,a),m?Io(m,e,t,n,a,!0):u||(a.out+=Z(n)+`else: `,p1(r[1].elements,e,t,l,a));return}if(si(s?"} else if (":"if (",`) { -`,i.textLines,e,t,n,a),p1(r[0].elements,e,t,l,a),m){const c=a.out.length;Io(m,e,t,n,a,!0),Sh(t,m,a,c)}else u||(a.out+=Z(n)+`} else { +`,i.textLines,e,t,n,a),p1(r[0].elements,e,t,l,a),m){const c=a.out.length;Io(m,e,t,n,a,!0),_h(t,m,a,c)}else u||(a.out+=Z(n)+`} else { `,p1(r[1].elements,e,t,l,a)),a.out+=Z(n)+`} -`}function Rs(i,e,t,n,a){const s=a.out.length;ix(i,e,t,n,a),Sh(t,i,a,s)}function ix(i,e,t,n,a){var m;const s=t.indentPerLevel,r=e==="python",o=(c,d)=>p1(c,e,t,d,a),l=(c,d)=>si(c,d,i.textLines,e,t,n,a),u=(c=n)=>{t.includeDiagramTextAsComments&&(a.out+=Fl(i.textLines,e,c))};switch(i.type){case I.leerElement:a.out+=t.live?Ul(n,t.live):mh(n,e);return;case I.anweisung:case I.aufruf:tx(i.textLines,e,t,n,a);return;case I.aussprung:{const c=Da(i.textLines);i.textLines.some(d=>d.trim()!=="")&&u(),r?a.out+=Z(n)+(c===""?`break +`}function Rs(i,e,t,n,a){const s=a.out.length;ax(i,e,t,n,a),_h(t,i,a,s)}function ax(i,e,t,n,a){var m;const s=t.indentPerLevel,r=e==="python",o=(c,d)=>p1(c,e,t,d,a),l=(c,d)=>si(c,d,i.textLines,e,t,n,a),u=(c=n)=>{t.includeDiagramTextAsComments&&(a.out+=Fl(i.textLines,e,c))};switch(i.type){case I.leerElement:a.out+=t.live?Ul(n,t.live):ch(n,e);return;case I.anweisung:case I.aufruf:nx(i.textLines,e,t,n,a);return;case I.aussprung:{const c=Da(i.textLines);i.textLines.some(d=>d.trim()!=="")&&u(),r?a.out+=Z(n)+(c===""?`break `:`break # ${c} `):a.out+=Z(n)+(c===""?`break; `:`break; // ${c} @@ -155,14 +155,14 @@ ${o.out}${Z(a)}} `,o(d.elements,n+s*2)}else{const f=g?"default:"+E1(d.name,e):"case "+Xi(d.name,e)+":";a.out+=Z(n+s)+f+` `,o(d.elements,n+s*2),a.out+=Z(n+s*2)+`break; `}}),r||(a.out+=Z(n)+`} -`);return}case I.forSchleife:if(e==="java"){u();const c=t.live?kh(i.textLines,t.live.labels):Gl(i.textLines);a.out+=Z(n)+"for ("+c+`) { -`}else if(r){const c=t.jsIntVariables??new Set,d=G3(i.textLines,c);if((d==null?void 0:d.rangeLine)!==void 0)u(),a.out+=Z(n)+d.rangeLine+` +`);return}case I.forSchleife:if(e==="java"){u();const c=t.live?Sh(i.textLines,t.live.labels):Gl(i.textLines);a.out+=Z(n)+"for ("+c+`) { +`}else if(r){const c=t.jsIntVariables??new Set,d=H3(i.textLines,c);if((d==null?void 0:d.rangeLine)!==void 0)u(),a.out+=Z(n)+d.rangeLine+` `;else if(d){u(),a.out+=Z(n)+d.init+` `,a.out+=Z(n)+"while "+Pe(d.condition,c)+`: -`;for(const h of i.loopBody??[])Rs(h,e,t,n+s,a);a.out+=Z(n+s)+bh(d.increment,c)+` -`;return}else t.live?a.out+=Z(n)+sx(i.textLines,t.live.labels,c)+` +`;for(const h of i.loopBody??[])Rs(h,e,t,n+s,a);a.out+=Z(n+s)+yh(d.increment,c)+` +`;return}else t.live?a.out+=Z(n)+rx(i.textLines,t.live.labels,c)+` `:l("for ",`: -`)}else{u();const c=t.live?ax(i.textLines,t.live.labels):J3(i.textLines);a.out+=Z(n)+"for ("+c+`) { +`)}else{u();const c=t.live?sx(i.textLines,t.live.labels):R3(i.textLines);a.out+=Z(n)+"for ("+c+`) { `}o(i.loopBody??[],n+s),r||(a.out+=Z(n)+`} `);return;case I.whileSchleife:l(r?"while ":"while (",r?`: `:`) { @@ -178,22 +178,22 @@ ${o.out}${Z(a)}} `:`while (true) /* ${c} */ { `),o(i.loopBody??[],n+s),r||(a.out+=Z(n)+`} `);return}}}const Mi="",ql="",Xn=i=>Mi+i+ql,Ul=(i,e)=>Z(i)+Xn(e.target==="python"?`pass # ${e.labels.code}`:`// ${e.labels.code}`)+` -`,$l=i=>i.every(e=>e.trim()==="");function kh(i,e){return $l(i)||i.length===3?[e.start,e.condition,e.step].map((n,a)=>{const s=Ht(i[a]??"");return s===""?Xn(n):s}).join("; "):Gl(i)}function ax(i,e){const t=kh(i,e).split(";"),n=t[0].includes(Mi)?void 0:hh(t[0]);return n!==void 0&&(t[0]=n),t.join(";")}function sx(i,e,t){var h;const[n="",a="",s=""]=i.length===3?i.map(g=>Ht(g)):[],r=ce(/^\s*(?:integer|int|long|short|byte|double|float)?\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,n),o=(r==null?void 0:r[1])??((h=ce(/^\s*([a-zA-Z_]\w*)\s*(?:<=|<|>=|>)/,a))==null?void 0:h[1]),l=r?Pe(r[2],t):Xn(e.start),u=ce(/^\s*(\w+)\s*(<=|<)\s*(.+)$/,a);let m=Xn(e.end);u&&(o===void 0||u[1]===o)&&(m=Pe(u[3],t),u[2]==="<="&&(m=yo(m,1)));const c=o===void 0?void 0:gh(s,o),d=[l,m,...c!==void 0&&c!==1?[String(c)]:[]];return`for ${o??Xn(e.selector)} in range(${d.join(", ")}):`}function ko(i,e=[],t=new Map){return i.forEach((n,a)=>{var r;const s=[...e,a];t.has(n)||t.set(n,s),n.loopBody&&ko(n.loopBody,[...s,0],t),(r=n.cases)==null||r.forEach((o,l)=>ko(o.elements,[...s,l],t))}),t}function Sh(i,e,t,n){const a=i.live,s=a==null?void 0:a.paths.get(e);if(!a||!s||t.out.length===n)return;const r=o=>t.out.slice(0,o).split(` -`).length-1;a.spans.push({path:s,from:r(n),to:r(t.out.length-1)})}function _h(i,e,t){const n={target:e,labels:t,paths:ko(i.elements),spans:[]},a=Nl(i,e,{includeEmptyElseBranch:!0,live:n}),s=yt(i.caption);let r="";if(e==="java"){const u=Ql(i);for(const m of u)r+=m+` +`,$l=i=>i.every(e=>e.trim()==="");function Sh(i,e){return $l(i)||i.length===3?[e.start,e.condition,e.step].map((n,a)=>{const s=Ht(i[a]??"");return s===""?Xn(n):s}).join("; "):Gl(i)}function sx(i,e){const t=Sh(i,e).split(";"),n=t[0].includes(Mi)?void 0:gh(t[0]);return n!==void 0&&(t[0]=n),t.join(";")}function rx(i,e,t){var h;const[n="",a="",s=""]=i.length===3?i.map(g=>Ht(g)):[],r=ce(/^\s*(?:integer|int|long|short|byte|double|float)?\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,n),o=(r==null?void 0:r[1])??((h=ce(/^\s*([a-zA-Z_]\w*)\s*(?:<=|<|>=|>)/,a))==null?void 0:h[1]),l=r?Pe(r[2],t):Xn(e.start),u=ce(/^\s*(\w+)\s*(<=|<)\s*(.+)$/,a);let m=Xn(e.end);u&&(o===void 0||u[1]===o)&&(m=Pe(u[3],t),u[2]==="<="&&(m=yo(m,1)));const c=o===void 0?void 0:ph(s,o),d=[l,m,...c!==void 0&&c!==1?[String(c)]:[]];return`for ${o??Xn(e.selector)} in range(${d.join(", ")}):`}function ko(i,e=[],t=new Map){return i.forEach((n,a)=>{var r;const s=[...e,a];t.has(n)||t.set(n,s),n.loopBody&&ko(n.loopBody,[...s,0],t),(r=n.cases)==null||r.forEach((o,l)=>ko(o.elements,[...s,l],t))}),t}function _h(i,e,t,n){const a=i.live,s=a==null?void 0:a.paths.get(e);if(!a||!s||t.out.length===n)return;const r=o=>t.out.slice(0,o).split(` +`).length-1;a.spans.push({path:s,from:r(n),to:r(t.out.length-1)})}function Th(i,e,t){const n={target:e,labels:t,paths:ko(i.elements),spans:[]},a=Nl(i,e,{includeEmptyElseBranch:!0,live:n}),s=yt(i.caption);let r="";if(e==="java"){const u=Ql(i);for(const m of u)r+=m+` `;ls(i)?(u.includes("import java.util.Scanner;")||(r+=`import java.util.Scanner; `),r+=`Scanner scanner = new Scanner(System.in); `):u.length&&(r+=` -`),s&&(r+=uh(s)+` +`),s&&(r+=mh(s)+` `)}else{if(s)for(const m of s.params)m.dims||(m.type==="int"&&a.jsIntVariables.add(m.name),m.type==="string"&&a.stringVariables.add(m.name));const u=s==null?void 0:s.params.map(m=>m.name).join(", ");e==="javascript"?(r+=`"use strict"; `,r+=bo([i],"javascript"),s&&(r+=`function ${s.name}(${u}) { -`)):(Ih(i)&&(r+=`import random +`)):(kh(i)&&(r+=`import random `),r+=bo([i],"python"),s&&(r+=`def ${s.name}(${u}): `))}const o={out:""};p1(i.elements,e,a,s?a.indentPerLevel:0,o),s&&e!=="python"&&(o.out+=`} `);const l=r.split(` -`).length-1;return{text:Th((r+o.out).replace(/\n+$/,""),e),spans:n.spans.map(u=>({...u,from:u.from+l,to:u.to+l}))}}function Th(i,e){switch(e){case"javascript":return lx(wo(i,"javascript")).replace(/\.length\(\)/g,".length").replace(/\.contains\(/g,".includes(");case"python":return rx(wo(i,"python")).replace(/\b([a-zA-Z_]\w*(?:\[[^[\]]*\])?)\.length(?:\(\)|\b)/g,"len($1)");case"java":return cx(i)}}function rx(i){for(let e=0;e<5;e++){const t=Oh(ox(i),"python");if(t===i)break;i=t}return i}const bu={indexOf:"find",lastIndexOf:"rfind",toUpperCase:"upper",toLowerCase:"lower",trim:"strip",startsWith:"startswith",endsWith:"endswith"};function ox(i){return Yl(i,["charAt","substring","contains","isEmpty","equalsIgnoreCase","compareTo","repeat","concat",...Object.keys(bu)],(e,t,n)=>{switch(t){case"charAt":return`${e}[${n}]`;case"substring":{const a=ux(n);return a.length===2?`${e}[${a[0].trim()}:${a[1].trim()}]`:`${e}[${n.trim()}:]`}case"contains":return`(${n.trim()} in ${e})`;case"isEmpty":return`(len(${e}) == 0)`;case"equalsIgnoreCase":return`(${e}.lower() == ${n.trim()}.lower())`;case"compareTo":return`((${e} > ${n.trim()}) - (${e} < ${n.trim()}))`;case"repeat":return`(${e} * ${n.trim()})`;case"concat":return`(${e} + ${n.trim()})`;default:return`${e}.${bu[t]}(${n})`}})}function lx(i){for(let e=0;e<5;e++){const t=Oh(Yl(i,["isEmpty","equalsIgnoreCase","compareTo","replace"],(n,a,s)=>{switch(a){case"isEmpty":return`(${n}.length === 0)`;case"equalsIgnoreCase":return`(${n}.toLowerCase() === ${s.trim()}.toLowerCase())`;case"compareTo":return`${n}.localeCompare(${s.trim()})`;default:return`${n}.replaceAll(${s})`}}),"javascript");if(t===i)break;i=t}return i}function Oh(i,e){const t=/\bFiles\.readString\(\s*(?:Path\.of|Paths\.get)\(\s*("(?:[^"\\]|\\.)*")\s*\)\s*\)/g;return e==="python"?i.replace(t,'open($1, encoding="utf-8").read()').replace(/\bInteger\.parseInt\(/g,"int(").replace(/\bDouble\.parseDouble\(/g,"float(").replace(/\bString\.valueOf\(/g,"str("):i.replace(t,'require("fs").readFileSync($1, "utf8")').replace(/\bInteger\.parseInt\(/g,"parseInt(").replace(/\bDouble\.parseDouble\(/g,"parseFloat(").replace(/\bString\.valueOf\(/g,"String(")}function ux(i){let e=0;const t=[...i].findIndex(n=>n==="("?(e+=1,!1):n===")"?(e-=1,!1):n===","&&e===0);return t<0?[i]:[i.slice(0,t),i.slice(t+1)]}function Yl(i,e,t){const n=new RegExp(`([A-Za-z_]\\w*(?:\\[[^[\\]]*\\]|\\.\\w+\\(\\))*|"(?:[^"\\\\]|\\\\.)*")\\.(${e.join("|")})\\(`,"g");let a="",s=0;for(let r=n.exec(i);r;r=n.exec(i)){const o=r.index+r[0].length-1;let l=0,u=-1;for(let c=o;ce.has(n.toLowerCase())?t:`${n}.length()`)}const dx=new Set("abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while true false null var record sealed permits yield module open opens requires exports to uses provides with transitive".split(" "));function Gs(i){const e=i.trim();if(e==="")return"Main";let t="";return Array.from(e).forEach((n,a)=>{a===0?new RegExp("\\p{L}","u").test(n)||n==="_"||n==="$"?t+=n:new RegExp("\\p{Nd}","u").test(n)?t+="_"+n:t+="_":/[\p{L}\p{M}\p{N}]/u.test(n)||n==="_"||n==="$"?t+=n:t+="_"}),t=t.replace(/_{2,}/g,"_").replace(/^_+|_+$/g,""),t===""?"Main":(new RegExp("^\\p{Nd}","u").test(t)&&(t="_"+t),dx.has(t.toLowerCase())&&(t="_"+t),t)}function yu(i,e,t={},n=[]){const a={...lh,...t},s=Gs(e),r=[i,...n].filter((S,z,k)=>k.indexOf(S)===z).map(S=>({d:S,header:yt(S.caption)})).filter(S=>S.header!==void 0),o=r.map(S=>fo(S.d,S.header,"java",t,a.indentPerLevel)),l=yt(i.caption),u=r.some(S=>ls(S.d)),m=ss(i,"java",a),c=a.indentPerLevel*2,d=ls(i),h=d?hx(m):m,g=Z(c),f=h.trim()===""?"":h.split(` +`).length-1;return{text:Oh((r+o.out).replace(/\n+$/,""),e),spans:n.spans.map(u=>({...u,from:u.from+l,to:u.to+l}))}}function Oh(i,e){switch(e){case"javascript":return ux(wo(i,"javascript")).replace(/\.length\(\)/g,".length").replace(/\.contains\(/g,".includes(");case"python":return ox(wo(i,"python")).replace(/\b([a-zA-Z_]\w*(?:\[[^[\]]*\])?)\.length(?:\(\)|\b)/g,"len($1)");case"java":return dx(i)}}function ox(i){for(let e=0;e<5;e++){const t=Ah(lx(i),"python");if(t===i)break;i=t}return i}const bu={indexOf:"find",lastIndexOf:"rfind",toUpperCase:"upper",toLowerCase:"lower",trim:"strip",startsWith:"startswith",endsWith:"endswith"};function lx(i){return Yl(i,["charAt","substring","contains","isEmpty","equalsIgnoreCase","compareTo","repeat","concat",...Object.keys(bu)],(e,t,n)=>{switch(t){case"charAt":return`${e}[${n}]`;case"substring":{const a=mx(n);return a.length===2?`${e}[${a[0].trim()}:${a[1].trim()}]`:`${e}[${n.trim()}:]`}case"contains":return`(${n.trim()} in ${e})`;case"isEmpty":return`(len(${e}) == 0)`;case"equalsIgnoreCase":return`(${e}.lower() == ${n.trim()}.lower())`;case"compareTo":return`((${e} > ${n.trim()}) - (${e} < ${n.trim()}))`;case"repeat":return`(${e} * ${n.trim()})`;case"concat":return`(${e} + ${n.trim()})`;default:return`${e}.${bu[t]}(${n})`}})}function ux(i){for(let e=0;e<5;e++){const t=Ah(Yl(i,["isEmpty","equalsIgnoreCase","compareTo","replace"],(n,a,s)=>{switch(a){case"isEmpty":return`(${n}.length === 0)`;case"equalsIgnoreCase":return`(${n}.toLowerCase() === ${s.trim()}.toLowerCase())`;case"compareTo":return`${n}.localeCompare(${s.trim()})`;default:return`${n}.replaceAll(${s})`}}),"javascript");if(t===i)break;i=t}return i}function Ah(i,e){const t=/\bFiles\.readString\(\s*(?:Path\.of|Paths\.get)\(\s*("(?:[^"\\]|\\.)*")\s*\)\s*\)/g;return e==="python"?i.replace(t,'open($1, encoding="utf-8").read()').replace(/\bInteger\.parseInt\(/g,"int(").replace(/\bDouble\.parseDouble\(/g,"float(").replace(/\bString\.valueOf\(/g,"str("):i.replace(t,'require("fs").readFileSync($1, "utf8")').replace(/\bInteger\.parseInt\(/g,"parseInt(").replace(/\bDouble\.parseDouble\(/g,"parseFloat(").replace(/\bString\.valueOf\(/g,"String(")}function mx(i){let e=0;const t=[...i].findIndex(n=>n==="("?(e+=1,!1):n===")"?(e-=1,!1):n===","&&e===0);return t<0?[i]:[i.slice(0,t),i.slice(t+1)]}function Yl(i,e,t){const n=new RegExp(`([A-Za-z_]\\w*(?:\\[[^[\\]]*\\]|\\.\\w+\\(\\))*|"(?:[^"\\\\]|\\\\.)*")\\.(${e.join("|")})\\(`,"g");let a="",s=0;for(let r=n.exec(i);r;r=n.exec(i)){const o=r.index+r[0].length-1;let l=0,u=-1;for(let c=o;ce.has(n.toLowerCase())?t:`${n}.length()`)}const hx=new Set("abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while true false null var record sealed permits yield module open opens requires exports to uses provides with transitive".split(" "));function Gs(i){const e=i.trim();if(e==="")return"Main";let t="";return Array.from(e).forEach((n,a)=>{a===0?new RegExp("\\p{L}","u").test(n)||n==="_"||n==="$"?t+=n:new RegExp("\\p{Nd}","u").test(n)?t+="_"+n:t+="_":/[\p{L}\p{M}\p{N}]/u.test(n)||n==="_"||n==="$"?t+=n:t+="_"}),t=t.replace(/_{2,}/g,"_").replace(/^_+|_+$/g,""),t===""?"Main":(new RegExp("^\\p{Nd}","u").test(t)&&(t="_"+t),hx.has(t.toLowerCase())&&(t="_"+t),t)}function yu(i,e,t={},n=[]){const a={...uh,...t},s=Gs(e),r=[i,...n].filter((S,z,k)=>k.indexOf(S)===z).map(S=>({d:S,header:yt(S.caption)})).filter(S=>S.header!==void 0),o=r.map(S=>fo(S.d,S.header,"java",t,a.indentPerLevel)),l=yt(i.caption),u=r.some(S=>ls(S.d)),m=ss(i,"java",a),c=a.indentPerLevel*2,d=ls(i),h=d?gx(m):m,g=Z(c),f=h.trim()===""?"":h.split(` `).map(S=>S.trim()===""?g:g+S).join(` `);let x="";const b=o.length>0&&(d||u),y=[...new Set([i,...r.map(S=>S.d)].flatMap(Ql))],w=y.length>0;(d||u)&&!y.includes("import java.util.Scanner;")&&y.push("import java.util.Scanner;");for(const S of y)x+=S+` `;y.length&&(x+=` @@ -208,9 +208,9 @@ ${o.out}${Z(a)}} `),x+=Z(a.indentPerLevel)+`} `);for(const[S,z]of o.entries())x+=(S>0||!l?` `:"")+z;return x+=`} -`,x}function hx(i){const e=i.split(` +`,x}function gx(i){const e=i.split(` `);let t=0;for(e[t]==="// import java.util.Scanner;"&&t++;t=e.length?"":e.slice(t).join(` -`)}const xn={target:"visustruct.codegen.target",javaMode:"visustruct.codegen.javaOutputMode",comments:"visustruct.codegen.includeDiagramComments",emptyElse:"visustruct.codegen.includeEmptyElse"};function Ki(i){try{return localStorage.getItem(i)}catch{return null}}function ea(i,e){try{localStorage.setItem(i,e)}catch{}}const gx=()=>p("web_run_stopped_loop"),Ah=()=>p("web_run_cancelled"),De=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function px(i){let e=0;return i.replace(/^(\s*)while\s*\(\s*true\s*\)(?:\s*\/\*.*?\*\/)?\s*\{/gm,(t,n)=>{const a=`__visuStructLoopGuard${e++}`;return`${n}for (let ${a} = 0; ${a} < 100000 || (() => { throw new Error(${JSON.stringify(gx())}); })(); ${a}++) {`})}function fx(i){return px(i).replace(/\bprompt\s*\(/g,"await __visuStructPrompt(")}const xx=` +`)}const xn={target:"visustruct.codegen.target",javaMode:"visustruct.codegen.javaOutputMode",comments:"visustruct.codegen.includeDiagramComments",emptyElse:"visustruct.codegen.includeEmptyElse"};function Ki(i){try{return localStorage.getItem(i)}catch{return null}}function ea(i,e){try{localStorage.setItem(i,e)}catch{}}const px=()=>p("web_run_stopped_loop"),Ph=()=>p("web_run_cancelled"),De=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function fx(i){let e=0;return i.replace(/^(\s*)while\s*\(\s*true\s*\)(?:\s*\/\*.*?\*\/)?\s*\{/gm,(t,n)=>{const a=`__visuStructLoopGuard${e++}`;return`${n}for (let ${a} = 0; ${a} < 100000 || (() => { throw new Error(${JSON.stringify(px())}); })(); ${a}++) {`})}function xx(i){return fx(i).replace(/\bprompt\s*\(/g,"await __visuStructPrompt(")}const bx=` let answer let lines = [] // Text von \`process.stdout.write\` ohne neue Zeile (wie \`System.out.print\`). @@ -242,7 +242,7 @@ const process = { stdout: { write: (text) => { } } } setInterval(flush, 50) const __visuStructPrompt = (label) => new Promise((resolve, reject) => { - answer = (value) => (value === null ? reject(new Error(${JSON.stringify(Ah())})) : resolve(value)) + answer = (value) => (value === null ? reject(new Error(${JSON.stringify(Ph())})) : resolve(value)) send('prompt', String(label ?? '')) }) onmessage = async (e) => { @@ -255,7 +255,7 @@ onmessage = async (e) => { send('error', String(err)) } } -`,gr=2e3;class bx{constructor(e,t,n,a,s=()=>[]){v(this,"element");v(this,"target");v(this,"javaMode");v(this,"comments");v(this,"emptyElse");v(this,"code","");v(this,"codeView");v(this,"javaModeRow");v(this,"runButton");v(this,"saveButton");v(this,"copyButton");v(this,"runner");v(this,"runOutput");v(this,"runInput");v(this,"pseudocodeBox");v(this,"pseudocodeHint");v(this,"worker");v(this,"outputLines",[]);v(this,"droppedLines",0);v(this,"outputFrame");v(this,"pendingAnswer");this.currentDocument=e,this.saveFile=t,this.onClose=n,this.setPseudocode=a,this.subprograms=s;const r=Ki(xn.target);this.target=r==="python"||r==="javascript"?r:"java",this.javaMode=Ki(xn.javaMode)==="class"?"class":"snippet",this.comments=Ki(xn.comments)==="true",this.emptyElse=Ki(xn.emptyElse)!=="false",this.element=document.createElement("aside"),this.element.className="codepanel",this.build()}refresh(){const e=this.currentDocument(),t=this.options();this.code=this.target==="java"&&this.javaMode==="class"?yu(e,this.classStem(),t,this.subprograms()):ss(e,this.target,t,this.subprograms()),this.codeView.textContent=this.code,this.javaModeRow.hidden=this.target!=="java",this.saveButton.hidden=this.target!=="java",this.runButton.hidden=this.target!=="javascript"||!!e.pseudocode,this.runButton.hidden&&this.stopRun(!0),this.pseudocodeBox.checked=!!e.pseudocode,this.pseudocodeHint.hidden=!e.pseudocode;for(const n of this.element.querySelectorAll("[data-target]"))n.setAttribute("aria-pressed",String(n.dataset.target===this.target));for(const n of this.element.querySelectorAll("[data-java-mode]"))n.setAttribute("aria-pressed",String(n.dataset.javaMode===this.javaMode))}close(){this.stopRun(!0)}options(){return{includeDiagramTextAsComments:this.comments,includeEmptyElseBranch:this.emptyElse,pseudocodeNote:p("codegen_pseudocode_note")}}classStem(){return as(this.currentDocument().caption)||"Main"}build(){this.element.innerHTML=` +`,gr=2e3;class yx{constructor(e,t,n,a,s=()=>[]){v(this,"element");v(this,"target");v(this,"javaMode");v(this,"comments");v(this,"emptyElse");v(this,"code","");v(this,"codeView");v(this,"javaModeRow");v(this,"runButton");v(this,"saveButton");v(this,"copyButton");v(this,"runner");v(this,"runOutput");v(this,"runInput");v(this,"pseudocodeBox");v(this,"pseudocodeHint");v(this,"worker");v(this,"outputLines",[]);v(this,"droppedLines",0);v(this,"outputFrame");v(this,"pendingAnswer");this.currentDocument=e,this.saveFile=t,this.onClose=n,this.setPseudocode=a,this.subprograms=s;const r=Ki(xn.target);this.target=r==="python"||r==="javascript"?r:"java",this.javaMode=Ki(xn.javaMode)==="class"?"class":"snippet",this.comments=Ki(xn.comments)==="true",this.emptyElse=Ki(xn.emptyElse)!=="false",this.element=document.createElement("aside"),this.element.className="codepanel",this.build()}refresh(){const e=this.currentDocument(),t=this.options();this.code=this.target==="java"&&this.javaMode==="class"?yu(e,this.classStem(),t,this.subprograms()):ss(e,this.target,t,this.subprograms()),this.codeView.textContent=this.code,this.javaModeRow.hidden=this.target!=="java",this.saveButton.hidden=this.target!=="java",this.runButton.hidden=this.target!=="javascript"||!!e.pseudocode,this.runButton.hidden&&this.stopRun(!0),this.pseudocodeBox.checked=!!e.pseudocode,this.pseudocodeHint.hidden=!e.pseudocode;for(const n of this.element.querySelectorAll("[data-target]"))n.setAttribute("aria-pressed",String(n.dataset.target===this.target));for(const n of this.element.querySelectorAll("[data-java-mode]"))n.setAttribute("aria-pressed",String(n.dataset.javaMode===this.javaMode))}close(){this.stopRun(!0)}options(){return{includeDiagramTextAsComments:this.comments,includeEmptyElseBranch:this.emptyElse,pseudocodeNote:p("codegen_pseudocode_note")}}classStem(){return as(this.currentDocument().caption)||"Main"}build(){this.element.innerHTML=`

${De(p("codegen_placeholder_title"))}

@@ -285,12 +285,12 @@ onmessage = async (e) => {

${De(p("codegen_generated_hint"))}

- `;const e=a=>this.element.querySelector(a);this.codeView=e(".code-view"),this.javaModeRow=e(".java-mode"),this.runButton=e("[data-act=run]"),this.saveButton=e("[data-act=save]"),this.copyButton=e("[data-act=copy]"),this.runner=e(".runner"),this.runOutput=e(".runner-out"),this.runInput=e(".runner-input"),this.pseudocodeBox=e("[data-opt=pseudocode]"),this.pseudocodeHint=e(".pseudocode-hint"),this.pseudocodeBox.addEventListener("change",()=>this.setPseudocode(this.pseudocodeBox.checked)),e(".code-close").addEventListener("click",()=>this.onClose());for(const a of this.element.querySelectorAll("[data-target]"))a.addEventListener("click",()=>{this.target=a.dataset.target,ea(xn.target,this.target),this.refresh()});for(const a of this.element.querySelectorAll("[data-java-mode]"))a.addEventListener("click",()=>{this.javaMode=a.dataset.javaMode,ea(xn.javaMode,this.javaMode),this.refresh()});const t=e("[data-opt=comments]");t.checked=this.comments,t.addEventListener("change",()=>{this.comments=t.checked,ea(xn.comments,String(this.comments)),this.refresh()});const n=e("[data-opt=emptyElse]");n.checked=this.emptyElse,n.addEventListener("change",()=>{this.emptyElse=n.checked,ea(xn.emptyElse,String(this.emptyElse)),this.refresh()}),this.copyButton.addEventListener("click",()=>this.copy()),this.saveButton.addEventListener("click",()=>{const a=Gs(this.classStem()),s=yu(this.currentDocument(),this.classStem(),this.options());this.saveFile(`${a}.java`,s)}),this.runButton.addEventListener("click",()=>this.run()),e("[data-act=stop]").addEventListener("click",()=>this.stopRun(!1)),e("[data-act=cancel]").addEventListener("click",()=>this.answer(null)),this.runInput.addEventListener("submit",a=>{a.preventDefault(),this.answer(this.runInput.querySelector("input").value)})}async copy(){var t;let e=!1;try{await navigator.clipboard.writeText(this.code),e=!0}catch{const n=document.createRange();n.selectNodeContents(this.codeView);const a=getSelection();a==null||a.removeAllRanges(),a==null||a.addRange(n),e=((t=document.execCommand)==null?void 0:t.call(document,"copy"))??!1}this.copyButton.textContent=p(e?"web_copied_check":"web_copy_manual"),setTimeout(()=>this.copyButton.textContent=p("codegen_copy"),2e3)}run(){this.stopRun(!0),this.runner.hidden=!1,this.runOutput.textContent="",this.outputLines=[],this.droppedLines=0,this.runOutput.classList.remove("error");const e=fx(this.code),t=n=>this.onRunnerMessage(n);try{const n=URL.createObjectURL(new Blob([xx],{type:"text/javascript"})),a=new Worker(n);URL.revokeObjectURL(n),a.onmessage=s=>t(s.data),a.onerror=s=>{s.preventDefault(),t({type:"error",text:s.message||p("web_run_error")})},a.postMessage({type:"run",code:e}),this.worker=a}catch{this.runInPage(e,t)}this.setRunning(!0)}runInPage(e,t){const n={log:(...r)=>t({type:"log",lines:[r.map(o=>typeof o=="string"?o:JSON.stringify(o)).join(" ")]})},a=r=>new Promise((o,l)=>{this.pendingAnswer=u=>u===null?l(new Error(Ah())):o(u),t({type:"prompt",text:r})}),s=(async()=>{}).constructor;new s("__visuStructPrompt","console",e)(a,n).then(()=>t({type:"done"})).catch(r=>t({type:"error",text:String(r)}))}onRunnerMessage(e){switch(e.type){case"log":this.appendOutput(e.lines??[]);break;case"prompt":{this.runInput.hidden=!1,this.runInput.querySelector("label").textContent=e.text??"";const t=this.runInput.querySelector("input");t.value="",t.focus();break}case"error":this.appendOutput([e.text??""]),this.runOutput.classList.add("error"),this.stopRun(!1);break;case"done":this.stopRun(!1);break}}appendOutput(e){this.outputLines.push(...e),this.outputLines.length>gr&&(this.droppedLines+=this.outputLines.length-gr,this.outputLines.splice(0,this.outputLines.length-gr)),this.outputFrame===void 0&&(this.outputFrame=requestAnimationFrame(()=>{this.outputFrame=void 0;const t=this.droppedLines>0?p("web_run_dropped_fmt",this.droppedLines)+` + `;const e=a=>this.element.querySelector(a);this.codeView=e(".code-view"),this.javaModeRow=e(".java-mode"),this.runButton=e("[data-act=run]"),this.saveButton=e("[data-act=save]"),this.copyButton=e("[data-act=copy]"),this.runner=e(".runner"),this.runOutput=e(".runner-out"),this.runInput=e(".runner-input"),this.pseudocodeBox=e("[data-opt=pseudocode]"),this.pseudocodeHint=e(".pseudocode-hint"),this.pseudocodeBox.addEventListener("change",()=>this.setPseudocode(this.pseudocodeBox.checked)),e(".code-close").addEventListener("click",()=>this.onClose());for(const a of this.element.querySelectorAll("[data-target]"))a.addEventListener("click",()=>{this.target=a.dataset.target,ea(xn.target,this.target),this.refresh()});for(const a of this.element.querySelectorAll("[data-java-mode]"))a.addEventListener("click",()=>{this.javaMode=a.dataset.javaMode,ea(xn.javaMode,this.javaMode),this.refresh()});const t=e("[data-opt=comments]");t.checked=this.comments,t.addEventListener("change",()=>{this.comments=t.checked,ea(xn.comments,String(this.comments)),this.refresh()});const n=e("[data-opt=emptyElse]");n.checked=this.emptyElse,n.addEventListener("change",()=>{this.emptyElse=n.checked,ea(xn.emptyElse,String(this.emptyElse)),this.refresh()}),this.copyButton.addEventListener("click",()=>this.copy()),this.saveButton.addEventListener("click",()=>{const a=Gs(this.classStem()),s=yu(this.currentDocument(),this.classStem(),this.options());this.saveFile(`${a}.java`,s)}),this.runButton.addEventListener("click",()=>this.run()),e("[data-act=stop]").addEventListener("click",()=>this.stopRun(!1)),e("[data-act=cancel]").addEventListener("click",()=>this.answer(null)),this.runInput.addEventListener("submit",a=>{a.preventDefault(),this.answer(this.runInput.querySelector("input").value)})}async copy(){var t;let e=!1;try{await navigator.clipboard.writeText(this.code),e=!0}catch{const n=document.createRange();n.selectNodeContents(this.codeView);const a=getSelection();a==null||a.removeAllRanges(),a==null||a.addRange(n),e=((t=document.execCommand)==null?void 0:t.call(document,"copy"))??!1}this.copyButton.textContent=p(e?"web_copied_check":"web_copy_manual"),setTimeout(()=>this.copyButton.textContent=p("codegen_copy"),2e3)}run(){this.stopRun(!0),this.runner.hidden=!1,this.runOutput.textContent="",this.outputLines=[],this.droppedLines=0,this.runOutput.classList.remove("error");const e=xx(this.code),t=n=>this.onRunnerMessage(n);try{const n=URL.createObjectURL(new Blob([bx],{type:"text/javascript"})),a=new Worker(n);URL.revokeObjectURL(n),a.onmessage=s=>t(s.data),a.onerror=s=>{s.preventDefault(),t({type:"error",text:s.message||p("web_run_error")})},a.postMessage({type:"run",code:e}),this.worker=a}catch{this.runInPage(e,t)}this.setRunning(!0)}runInPage(e,t){const n={log:(...r)=>t({type:"log",lines:[r.map(o=>typeof o=="string"?o:JSON.stringify(o)).join(" ")]})},a=r=>new Promise((o,l)=>{this.pendingAnswer=u=>u===null?l(new Error(Ph())):o(u),t({type:"prompt",text:r})}),s=(async()=>{}).constructor;new s("__visuStructPrompt","console",e)(a,n).then(()=>t({type:"done"})).catch(r=>t({type:"error",text:String(r)}))}onRunnerMessage(e){switch(e.type){case"log":this.appendOutput(e.lines??[]);break;case"prompt":{this.runInput.hidden=!1,this.runInput.querySelector("label").textContent=e.text??"";const t=this.runInput.querySelector("input");t.value="",t.focus();break}case"error":this.appendOutput([e.text??""]),this.runOutput.classList.add("error"),this.stopRun(!1);break;case"done":this.stopRun(!1);break}}appendOutput(e){this.outputLines.push(...e),this.outputLines.length>gr&&(this.droppedLines+=this.outputLines.length-gr,this.outputLines.splice(0,this.outputLines.length-gr)),this.outputFrame===void 0&&(this.outputFrame=requestAnimationFrame(()=>{this.outputFrame=void 0;const t=this.droppedLines>0?p("web_run_dropped_fmt",this.droppedLines)+` `:"";this.runOutput.textContent=t+this.outputLines.join(` `)+(this.outputLines.length?` -`:""),this.runOutput.scrollTop=this.runOutput.scrollHeight}))}answer(e){var t;this.runInput.hidden=!0,this.worker?this.worker.postMessage({type:"answer",value:e}):(t=this.pendingAnswer)==null||t.call(this,e),this.pendingAnswer=void 0}stopRun(e){var t;(t=this.worker)==null||t.terminate(),this.worker=void 0,this.pendingAnswer=void 0,this.runInput&&(this.runInput.hidden=!0),e&&this.runner&&(this.runner.hidden=!0),this.setRunning(!1)}setRunning(e){const t=this.element.querySelector("[data-act=stop]");t&&(t.disabled=!e)}}const Oe=(i,e=!1)=>``,ne={newFile:Oe(''),open:Oe(''),save:Oe(''),undo:Oe(''),redo:Oe(''),cut:Oe(''),copy:Oe(''),paste:Oe(''),trash:Oe(''),share:Oe(''),book:Oe(''),code:Oe(''),play:Oe('',!0),step:Oe(''),indent:Oe(''),stop:Oe('',!0),folder:Oe(''),newFolder:Oe(''),diagram:Oe(''),fileText:Oe('')},yx="visustruct.learn.progress",pr={"04-sequenz":"05-sequenz","05-variablen-und-datentypen":"04-variablen-und-datentypen","07-verzweigung":"08-verzweigung","08-bedingungen-verknuepfen":"09-bedingungen-verknuepfen","09-fallauswahl":"10-fallauswahl","10-while-schleife":"11-while-schleife","11-do-while-schleife":"12-do-while-schleife","12-for-schleife":"13-for-schleife","13-verschachteln":"14-verschachteln","14-arrays":"15-arrays","15-aufruf-und-aussprung":"18-aufruf-und-aussprung","16-aufruf-und-aussprung":"18-aufruf-und-aussprung","17-aufruf-und-aussprung":"18-aufruf-und-aussprung","17-suchen-und-sortieren":"19-suchen-und-sortieren","18-suchen-und-sortieren":"19-suchen-und-sortieren","16-simulation-und-schreibtischtest":"07-simulation-und-schreibtischtest","17-java":"20-java","18-java":"20-java","19-java":"20-java","18-python-und-javascript":"21-python-und-javascript","19-python-und-javascript":"21-python-und-javascript","20-python-und-javascript":"21-python-und-javascript","22-erstes-fenster":"28-erstes-fenster","23-knopf-im-fenster":"29-knopf-im-fenster","24-der-knopf-reagiert":"30-der-knopf-reagiert","23-erstes-fenster":"28-erstes-fenster","24-knopf-im-fenster":"29-knopf-im-fenster","25-der-knopf-reagiert":"30-der-knopf-reagiert","26-zahl-verdoppeln":"31-zahl-verdoppeln","27-klickzaehler":"32-klickzaehler","28-ampel":"33-ampel","29-notenrechner":"34-notenrechner","30-taschenrechner":"35-taschenrechner","31-zahlenraten":"36-zahlenraten","13-lautsprecher":"16-lautsprecher","14-bildschirm":"18-bildschirm","15-motoren":"20-motoren","16-stoppuhr-akku":"21-stoppuhr-akku","03-sensoren":"04-sensoren","04-bis-zur-wand":"05-bis-zur-wand","05-abstand":"06-abstand","06-linie":"07-linie","07-farben":"08-farben","08-tasten-joystick":"10-tasten-joystick","09-licht":"11-licht","10-lautstaerke":"12-lautstaerke","11-neigung":"13-neigung","12-leds":"14-leds","13-einzelne-leds":"15-einzelne-leds","14-lautsprecher":"16-lautsprecher","15-bildschirm":"18-bildschirm","16-motoren":"20-motoren","17-stoppuhr-akku":"21-stoppuhr-akku"};function vx(i){var n;const e={...i.lessons};for(const[a,s]of Object.entries(pr))i.lessons[a]&&!i.lessons[s]&&(e[s]=i.lessons[a]),i.lessons[a]&&delete e[a];const t=(n=i.view)!=null&&n.lesson&&pr[i.view.lesson]?{...i.view,lesson:pr[i.view.lesson]}:i.view;return{...i,lessons:e,view:t}}function wx(){try{localStorage.removeItem(yx)}catch{}}const Ph=()=>({lessons:{},exercises:{}});wx();let qe=Ph();const So=new Set;function ta(){for(const i of So)i()}const vu="visustruct-lernstand";function jh(i,e){return i||e||void 0}function zx(i,e){if(!i)return e;const t={...e.checks};for(const[n,a]of Object.entries(i.checks??{}))t[n]=a||!!t[n];return{step:Math.max(i.step??0,e.step??0),done:jh(i.done,e.done),checks:Object.keys(t).length?t:void 0,quiz:i.quiz||e.quiz?{...e.quiz,...i.quiz}:void 0}}function Ix(i,e){const t={...i.lessons};for(const[a,s]of Object.entries(e.lessons))t[a]=zx(i.lessons[a],s);const n={...i.exercises};for(const[a,s]of Object.entries(e.exercises)){const r=i.exercises[a];n[a]=r?{done:jh(r.done,s.done),xml:r.xml??s.xml}:s}return{lessons:t,exercises:n}}const ge={lesson(i){return qe.lessons[i]??{step:0}},updateLesson(i,e){qe.lessons[i]={...ge.lesson(i),...e},ta()},exercise(i){return qe.exercises[i]??{}},updateExercise(i,e){qe.exercises[i]={...ge.exercise(i),...e},ta()},resetExercise(i){delete qe.exercises[i],ta()},view(){return qe.view},hasContent(){return Object.values(qe.lessons).some(i=>i.step>0||i.done||i.checks||i.quiz)||Object.keys(qe.exercises).length>0},setView(i){qe.view=i,ta()},onChange(i){return So.add(i),()=>So.delete(i)},toFile(){return JSON.stringify({format:vu,version:1,saved:new Date().toISOString(),lessons:qe.lessons,exercises:qe.exercises,view:qe.view},null,2)},loadFile(i,e=!1){let t;try{t=JSON.parse(i)}catch{return!1}if((t==null?void 0:t.format)!==vu)return!1;const n=vx({lessons:t.lessons??{},exercises:t.exercises??{},view:t.view});return qe=e?{...Ix(qe,n),view:n.view??qe.view}:n,!0},clear(){qe=Ph()}};function wu(i=new Date){const e=t=>String(t).padStart(2,"0");return`${i.getFullYear()}-${e(i.getMonth()+1)}-${e(i.getDate())}`}const zu=i=>/^\d{4}-\d{2}-\d{2}$/.test(i);function kx(i,e){return i.kind!==e.kind?i.kind==="directory"?-1:1:zu(i.name)&&zu(e.name)?e.name.localeCompare(i.name):i.name.localeCompare(e.name,void 0,{numeric:!0,sensitivity:"base"})}function Sx(i,e){return i.replace(/\.(visustruct|strk|java)$/i,"").replace(/[\\/:*?"<>|\u0000-\u001f]/g,"-").replace(/\s+/g," ").trim().replace(/^\.+/,"")||e}function _x(i,e){const t=new Set([...e].map(a=>a.toLowerCase())),n=a=>!t.has(`${a}.visustruct`.toLowerCase())&&!t.has(`${a}.java`.toLowerCase());if(n(i))return i;for(let a=2;;a++)if(n(`${i} ${a}`))return`${i} ${a}`}function Tx(i){const e=i.replace(/[\\/:*?"<>|\u0000-\u001f]/g,"").trim();return e&&e!=="."&&e!==".."?e:void 0}const Vn=10;function Ox(i){let e=i.replace(/\r/g,"").split(` -`).filter(m=>!m.startsWith("//"));const t=e.filter(m=>/^linie:/.test(m)).map(m=>m.slice(6).trim());e=e.filter(m=>!/^linie:/.test(m));const n=e.findIndex(m=>/^raster:\s*\d+\s*$/.test(m));if(n>=0){const m=Number(e[n].split(":")[1]);e.splice(n,1),e=e.flatMap(c=>Array.from({length:m},(d,h)=>Array.from(c).map(g=>Array.from({length:m},(f,x)=>"^>v<".includes(g)?h===m>>1&&x===m>>1?g:".":g).join("")).join("")))}for(;e.length&&e[e.length-1].trim()==="";)e.pop();for(;e.length&&e[0].trim()==="";)e.shift();const s=Math.max(...e.map(m=>m.length))*Vn,r=e.length*Vn,o=(m,c)=>({x:-s/2+(m+.5)*Vn,y:r/2-(c+.5)*Vn}),l={width:s,depth:r,start:{x:0,y:0,heading:0},walls:[],lines:[],blocks:[],marks:[],goals:[],targets:[],colors:[]};let u=0;e.forEach((m,c)=>{Array.from(m).forEach((d,h)=>{const g=o(h,c);d==="#"?l.blocks.push(g):d==="="?l.marks.push(g):d==="Z"?l.goals.push(g):d==="o"?l.targets.push(g):d in Iu?l.colors.push({at:g,color:Iu[d]}):"^>v<".includes(d)&&(u++,l.start={...g,heading:{"^":0,">":90,v:180,"<":270}[d]})})});for(const m of t)l.lines.push(m.split(/\s+/).map(c=>{const[d,h]=c.split(",").map(Number);if(!Number.isFinite(d)||!Number.isFinite(h))throw new Error(`Linie: „${c}“ ist kein Feld (Spalte,Zeile).`);return o(d,h)}));if(u!==1)throw new Error(`Die Weltkarte braucht genau einen Start (^ > v <), gefunden: ${u}`);return l}const Iu={r:"red",g:"green",b:"blue",y:"yellow"},N1=(i,e)=>Math.abs(i.x-e.x)<=Vn/2&&Math.abs(i.y-e.y)<=Vn/2,ku=10,Su=9,Ax=300,u1=8,Px=[-3.6,-1.2,1.2,3.6],jx=2.5,Cx=20,Bx=12,Xl=100,vi={width:200,depth:200,start:{x:0,y:0,heading:0},walls:[],lines:[]},_u=i=>i*Math.PI/180,m1=i=>({x:Math.sin(_u(i)),y:Math.cos(_u(i))}),na=()=>Array.from({length:Kd},()=>{}),Tu=([i,e,t])=>i>0||e>0||t>0?[i,e,t]:void 0;class us{constructor(e=vi){v(this,"pose");v(this,"trail");v(this,"bumps",0);v(this,"leds",na());v(this,"screen");v(this,"wheels",[0,0]);v(this,"time",0);v(this,"timerStart",0);v(this,"blocked",!1);v(this,"blockWallCache");this.setup=e,this.pose={...e.start},this.trail=[{x:e.start.x,y:e.start.y}]}reset(){this.pose={...this.setup.start},this.trail=[{x:this.pose.x,y:this.pose.y}],this.bumps=0,this.leds=na(),this.screen=void 0,this.wheels=[0,0],this.time=0,this.timerStart=0,this.blocked=!1}get allWalls(){const e=this.setup.width/2,t=this.setup.depth/2,n=[{x:-e,y:-t},{x:e,y:-t},{x:e,y:t},{x:-e,y:t}];return[...this.setup.walls,...n.map((a,s)=>({from:a,to:n[(s+1)%4]})),...this.blockWalls]}get blockWalls(){return this.blockWallCache??(this.blockWallCache=(this.setup.blocks??[]).flatMap(e=>{const t=Vn/2,n=[{x:e.x-t,y:e.y-t},{x:e.x+t,y:e.y-t},{x:e.x+t,y:e.y+t},{x:e.x-t,y:e.y+t}];return n.map((a,s)=>({from:a,to:n[(s+1)%4]}))})),this.blockWallCache}atGoal(){const e=m1(this.pose.heading),t={x:this.pose.x+e.x*u1,y:this.pose.y+e.y*u1};return(this.setup.goals??[]).some(n=>N1(this.pose,n)||N1(t,n))||(this.setup.targets??[]).some(n=>N1(this.pose,n))}apply(e){switch(e.method){case"forward":return this.wheels=[0,0],this.drive(e.args[0]);case"backward":return this.wheels=[0,0],this.drive(-e.args[0]);case"turnRight":return this.wheels=[0,0],this.turn(e.args[0]);case"turnLeft":return this.wheels=[0,0],this.turn(-e.args[0]);case"stop":this.wheels=[0,0];return;case"drive":this.wheels=[Ou(e.args[0]),Ou(e.args[1])];return;case"pause":return this.tick(e.args[0]);case"resetTimer":this.timerStart=this.time;return;case"setLed":this.leds=na().map(()=>Tu(e.args));return;case"ledOff":this.leds=na();return;case"ledColor":this.leds[e.args[0]]=Tu(Xa[e.text??""]??[0,0,0]);return;case"showText":this.screen=e.text;return}}tick(e){if(e<=0)return;this.time+=e;const[t,n]=this.wheels.map(o=>o/100*Cx);if(t===0&&n===0)return;const a=Math.ceil(e/10),s=e/1e3/a;let r=!1;for(let o=0;o{const r={x:this.pose.x+e.x*u1+t.x*a,y:this.pose.y+e.y*u1+t.y*a};([...this.setup.marks??[],...this.setup.goals??[]].some(l=>N1(r,l))||this.setup.lines.some(l=>Zx(r,l)<=jx/2))&&(n|=1<<3-s)}),n}colorUnder(){var n;const e=m1(this.pose.heading),t={x:this.pose.x+e.x*u1,y:this.pose.y+e.y*u1};return(n=(this.setup.colors??[]).find(a=>N1(t,a.at)))==null?void 0:n.color}sensors(){const e=this.lineState();return{getDistance:this.distance(),getLine:e,getColor:this.colorUnder()??(e&6?"black":"white"),isLineLeft:(e&4)!==0,isLineRight:(e&2)!==0,getTimer:this.timer}}freeDistance(e,t){let n=1/0;for(const a of this.allWalls){const s=Dx(e,t,a.from,a.to);s!==void 0&&sMath.max(-100,Math.min(100,i));function Au(i){const e=(i%360+360)%360;return Math.abs(e-360)<1e-9?0:e}function Dx(i,e,t,n){const a={x:n.x-t.x,y:n.y-t.y},s=e.x*a.y-e.y*a.x;if(Math.abs(s)<1e-12)return;const r={x:t.x-i.x,y:t.y-i.y},o=(r.x*a.y-r.y*a.x)/s,l=(r.x*e.y-r.y*e.x)/s;return o>=0&&l>=0&&l<=1?o:void 0}function Zx(i,e){let t=1/0;for(let n=0;n+10&&o.tick(Xl),s.robotSensors={...o.sensors(),...Fx(a,u)};const c=()=>({outputs:[...m.outputLines],files:new Map(m.files),drive:m.robotActions.length?es(m.robotActions):void 0,...n?{atGoal:o.atGoal(),bumps:o.bumps}:{},led:o.leds.some(d=>d!==void 0),tone:m.robotActions.some(d=>d.method==="playTone"),screen:o.screen,actions:th(m.robotActions.filter(d=>!Ex.has(d.method)))});if(m.inputRequest){const d=r.shift();if(d===void 0)return{...c(),missingInput:!0};if(s.provideInput(d),m.inputErrorNotice)return{...c(),error:m.inputErrorNotice};continue}if(m.isHalted)return{...c(),error:m.notice};if(!s.canStep)return{...c(),unusedInputs:r.length||void 0};s.step()}return{outputs:[...s.state.outputLines],files:new Map(s.state.files),drive:es(s.state.robotActions),tooManySteps:!0}}function Fx(i,e){const t=Math.floor(e/Lx);return Object.fromEntries(Object.entries(i??{}).map(([n,a])=>[n,a[Math.min(t,a.length-1)]]))}function Ch(i){return i===void 0||i===""?[]:i.replace(/\n$/,"").split(` -`)}function ia(i,e){return i.length!==e.length?!1:i.every((t,n)=>Pu(t)===Pu(e[n]))}function Pu(i){const e=i.trim().replace(/\s+/g," ");return/^-?\d+\.0+$/.test(e)?e.replace(/\.0+$/,""):e}function Jx(i,e,t,n){return e.map(a=>{var d,h,g;const s=a.world?n==null?void 0:n(a.world):void 0;if(a.world&&!s)throw new Error(`Weltkarte „${a.world}“ fehlt.`);const r=Nx(i,a.inputs,t,s,a.sensors),o=(a.files??[]).every(f=>{var x;return ia(Ch((x=r.files)==null?void 0:x.get(f.name)),f.lines)}),l=!a.drive||ia(r.drive??[],a.drive),u=!a.world||r.bumps===0&&(!((d=s==null?void 0:s.goals)!=null&&d.length||(h=s==null?void 0:s.targets)!=null&&h.length)||r.atGoal===!0),m=(a.led===void 0||r.led===a.led)&&(a.tone===void 0||r.tone===a.tone)&&(a.screen===void 0||r.screen===a.screen)&&(a.drives===void 0||(((g=r.drive)==null?void 0:g.length)??0)>0===a.drives)&&(!a.actions||ia(r.actions??[],a.actions)),c=!r.error&&!r.missingInput&&!r.tooManySteps&&ia(r.outputs,a.expected)&&o&&l&&u&&m;return{test:a,result:r,passed:c}})}function Rx(i){const e=new Set,t=n=>{for(const a of n){e.add(a.type),a.loopBody&&t(a.loopBody);for(const s of a.cases??[])t(s.elements)}};return t(i.elements),e}function _o(i){const e=[I.forSchleife,I.whileSchleife,I.doUntilSchleife,I.endlosschleife];let t=0;for(const n of i){const a=Math.max(_o(n.loopBody??[]),...(n.cases??[]).map(s=>_o(s.elements)));t=Math.max(t,a+(e.includes(n.type)?1:0))}return t}class wi extends Error{}function Gx(i,e){const t=[],n=[];for(const a of i){const s=a.trim();if(!s)continue;if(s.startsWith("?")){const o=s.slice(1).trim();ms(o,Hx(t)),n.push(o);continue}const r=/^([A-Za-z_]\w*)\s*:\s*(?:(-?\d+)\s*\.\.\s*(-?\d+)|(boolean))$/.exec(s);if(!r)throw new wi(`${e}: Unbekannte Zeile im Spiel: „${s}“`);t.push(r[4]?{name:r[1],kind:"boolean"}:{name:r[1],kind:"int",min:Number(r[2]),max:Number(r[3])})}if(!n.length)throw new wi(`${e}: Das Spiel braucht mindestens eine Zeile „? bedingung“.`);return{vars:t,conditions:n}}function Hx(i){return Object.fromEntries(i.map(e=>[e.name,e.kind==="boolean"?!0:e.min]))}function Vx(i){const e=[],t=/\s*(?:(\d+)|(true|false)\b|([A-Za-z_]\w*)|(&&|\|\||==|!=|<=|>=|<|>|!|\(|\)))/y;let n=0;for(;nt[n],s=d=>{var h;return((h=a())==null?void 0:h.kind)==="op"&&a().value===d},r=()=>{throw new wi(`Bedingung nicht lesbar: „${i}“`)},o=()=>{const d=t[n++]??r();if(d.kind==="num"||d.kind==="bool")return d.value;if(d.kind==="name"){if(!(d.value in e))throw new wi(`Unbekannte Variable „${d.value}“ in „${i}“`);return e[d.value]}if(d.value==="("){const h=m();return s(")")||r(),n++,h}if(d.value==="!"){const h=o();return typeof h!="boolean"&&r(),!h}return r()},l=()=>{const d=o(),h=a();if((h==null?void 0:h.kind)==="op"&&["==","!=","<","<=",">",">="].includes(h.value)){n++;const g=o();switch(h.value){case"==":return d===g;case"!=":return d!==g}(typeof d!="number"||typeof g!="number")&&r();const[f,x]=[d,g];return h.value==="<"?f"?f>x:f>=x}return d},u=()=>{let d=l();for(;s("&&");){n++;const h=l();d=d&&h}return d},m=()=>{let d=u();for(;s("||");){n++;const h=u();d=d||h}return d},c=m();return n!==t.length||typeof c!="boolean"?r():c}function Qx(i,e){const t=[i],n=i.replace(/\b[A-Za-z_]\w*\b/g,r=>r in e?String(e[r]):r);n!==i&&t.push(n);const a=n.replace(/(-?\d+|true|false)\s*(==|!=|<=|>=|<|>)\s*(-?\d+|true|false)/g,r=>String(ms(r,{})));a!==t[t.length-1]&&t.push(a);const s=String(ms(i,e));return s!==t[t.length-1]&&t.push(s),t}function qx(i,e){const t=[],n=new RegExp(`\\b${e}\\s*(?:==|!=|<=|>=|<|>)\\s*(-?\\d+)|(-?\\d+)\\s*(?:==|!=|<=|>=|<|>)\\s*${e}\\b`,"g");for(const a of i.matchAll(n)){const s=Number(a[1]??a[2]);t.push(s-1,s,s+1)}return t}function Ux(i,e,t,n=Math.random){const a=i.conditions.length,s=Math.floor(e*a/t),r=Math.min(a-1,s+(n()<.5?0:1)),o=i.conditions[r],l={};for(const u of i.vars){if(u.kind==="boolean"){l[u.name]=n()<.5;continue}const m=qx(o,u.name).filter(c=>c>=u.min&&c<=u.max);l[u.name]=m.length&&n()<.6?m[Math.floor(n()*m.length)]:u.min+Math.floor(n()*(u.max-u.min+1))}return{condition:o,values:l,answer:ms(o,l)}}function $x(i){return Object.entries(i.values).filter(([e])=>new RegExp(`\\b${e}\\b`).test(i.condition))}const Yx=`--- +`:""),this.runOutput.scrollTop=this.runOutput.scrollHeight}))}answer(e){var t;this.runInput.hidden=!0,this.worker?this.worker.postMessage({type:"answer",value:e}):(t=this.pendingAnswer)==null||t.call(this,e),this.pendingAnswer=void 0}stopRun(e){var t;(t=this.worker)==null||t.terminate(),this.worker=void 0,this.pendingAnswer=void 0,this.runInput&&(this.runInput.hidden=!0),e&&this.runner&&(this.runner.hidden=!0),this.setRunning(!1)}setRunning(e){const t=this.element.querySelector("[data-act=stop]");t&&(t.disabled=!e)}}const Oe=(i,e=!1)=>``,ne={newFile:Oe(''),open:Oe(''),save:Oe(''),undo:Oe(''),redo:Oe(''),cut:Oe(''),copy:Oe(''),paste:Oe(''),trash:Oe(''),share:Oe(''),book:Oe(''),code:Oe(''),play:Oe('',!0),step:Oe(''),indent:Oe(''),stop:Oe('',!0),folder:Oe(''),newFolder:Oe(''),diagram:Oe(''),fileText:Oe('')},vx="visustruct.learn.progress",pr={"04-sequenz":"05-sequenz","05-variablen-und-datentypen":"04-variablen-und-datentypen","07-verzweigung":"08-verzweigung","08-bedingungen-verknuepfen":"09-bedingungen-verknuepfen","09-fallauswahl":"10-fallauswahl","10-while-schleife":"11-while-schleife","11-do-while-schleife":"12-do-while-schleife","12-for-schleife":"13-for-schleife","13-verschachteln":"14-verschachteln","14-arrays":"15-arrays","15-aufruf-und-aussprung":"18-aufruf-und-aussprung","16-aufruf-und-aussprung":"18-aufruf-und-aussprung","17-aufruf-und-aussprung":"18-aufruf-und-aussprung","17-suchen-und-sortieren":"19-suchen-und-sortieren","18-suchen-und-sortieren":"19-suchen-und-sortieren","16-simulation-und-schreibtischtest":"07-simulation-und-schreibtischtest","17-java":"20-java","18-java":"20-java","19-java":"20-java","18-python-und-javascript":"21-python-und-javascript","19-python-und-javascript":"21-python-und-javascript","20-python-und-javascript":"21-python-und-javascript","22-erstes-fenster":"28-erstes-fenster","23-knopf-im-fenster":"29-knopf-im-fenster","24-der-knopf-reagiert":"30-der-knopf-reagiert","23-erstes-fenster":"28-erstes-fenster","24-knopf-im-fenster":"29-knopf-im-fenster","25-der-knopf-reagiert":"30-der-knopf-reagiert","26-zahl-verdoppeln":"31-zahl-verdoppeln","27-klickzaehler":"32-klickzaehler","28-ampel":"33-ampel","29-notenrechner":"34-notenrechner","30-taschenrechner":"35-taschenrechner","31-zahlenraten":"36-zahlenraten","13-lautsprecher":"16-lautsprecher","14-bildschirm":"18-bildschirm","15-motoren":"20-motoren","16-stoppuhr-akku":"21-stoppuhr-akku","03-sensoren":"04-sensoren","04-bis-zur-wand":"05-bis-zur-wand","05-abstand":"06-abstand","06-linie":"07-linie","07-farben":"08-farben","08-tasten-joystick":"10-tasten-joystick","09-licht":"11-licht","10-lautstaerke":"12-lautstaerke","11-neigung":"13-neigung","12-leds":"14-leds","13-einzelne-leds":"15-einzelne-leds","14-lautsprecher":"16-lautsprecher","15-bildschirm":"18-bildschirm","16-motoren":"20-motoren","17-stoppuhr-akku":"21-stoppuhr-akku"};function wx(i){var n;const e={...i.lessons};for(const[a,s]of Object.entries(pr))i.lessons[a]&&!i.lessons[s]&&(e[s]=i.lessons[a]),i.lessons[a]&&delete e[a];const t=(n=i.view)!=null&&n.lesson&&pr[i.view.lesson]?{...i.view,lesson:pr[i.view.lesson]}:i.view;return{...i,lessons:e,view:t}}function zx(){try{localStorage.removeItem(vx)}catch{}}const jh=()=>({lessons:{},exercises:{}});zx();let Ue=jh();const So=new Set;function ta(){for(const i of So)i()}const vu="visustruct-lernstand";function Ch(i,e){return i||e||void 0}function Ix(i,e){if(!i)return e;const t={...e.checks};for(const[n,a]of Object.entries(i.checks??{}))t[n]=a||!!t[n];return{step:Math.max(i.step??0,e.step??0),done:Ch(i.done,e.done),checks:Object.keys(t).length?t:void 0,quiz:i.quiz||e.quiz?{...e.quiz,...i.quiz}:void 0}}function kx(i,e){const t={...i.lessons};for(const[a,s]of Object.entries(e.lessons))t[a]=Ix(i.lessons[a],s);const n={...i.exercises};for(const[a,s]of Object.entries(e.exercises)){const r=i.exercises[a];n[a]=r?{done:Ch(r.done,s.done),xml:r.xml??s.xml}:s}return{lessons:t,exercises:n}}const ge={lesson(i){return Ue.lessons[i]??{step:0}},updateLesson(i,e){Ue.lessons[i]={...ge.lesson(i),...e},ta()},exercise(i){return Ue.exercises[i]??{}},updateExercise(i,e){Ue.exercises[i]={...ge.exercise(i),...e},ta()},resetExercise(i){delete Ue.exercises[i],ta()},view(){return Ue.view},hasContent(){return Object.values(Ue.lessons).some(i=>i.step>0||i.done||i.checks||i.quiz)||Object.keys(Ue.exercises).length>0},setView(i){Ue.view=i,ta()},onChange(i){return So.add(i),()=>So.delete(i)},toFile(){return JSON.stringify({format:vu,version:1,saved:new Date().toISOString(),lessons:Ue.lessons,exercises:Ue.exercises,view:Ue.view},null,2)},loadFile(i,e=!1){let t;try{t=JSON.parse(i)}catch{return!1}if((t==null?void 0:t.format)!==vu)return!1;const n=wx({lessons:t.lessons??{},exercises:t.exercises??{},view:t.view});return Ue=e?{...kx(Ue,n),view:n.view??Ue.view}:n,!0},clear(){Ue=jh()}};function wu(i=new Date){const e=t=>String(t).padStart(2,"0");return`${i.getFullYear()}-${e(i.getMonth()+1)}-${e(i.getDate())}`}const zu=i=>/^\d{4}-\d{2}-\d{2}$/.test(i);function Sx(i,e){return i.kind!==e.kind?i.kind==="directory"?-1:1:zu(i.name)&&zu(e.name)?e.name.localeCompare(i.name):i.name.localeCompare(e.name,void 0,{numeric:!0,sensitivity:"base"})}function _x(i,e){return i.replace(/\.(visustruct|strk|java)$/i,"").replace(/[\\/:*?"<>|\u0000-\u001f]/g,"-").replace(/\s+/g," ").trim().replace(/^\.+/,"")||e}function Tx(i,e){const t=new Set([...e].map(a=>a.toLowerCase())),n=a=>!t.has(`${a}.visustruct`.toLowerCase())&&!t.has(`${a}.java`.toLowerCase());if(n(i))return i;for(let a=2;;a++)if(n(`${i} ${a}`))return`${i} ${a}`}function Ox(i){const e=i.replace(/[\\/:*?"<>|\u0000-\u001f]/g,"").trim();return e&&e!=="."&&e!==".."?e:void 0}const Vn=10;function Ax(i){let e=i.replace(/\r/g,"").split(` +`).filter(m=>!m.startsWith("//"));const t=e.filter(m=>/^linie:/.test(m)).map(m=>m.slice(6).trim());e=e.filter(m=>!/^linie:/.test(m));const n=e.findIndex(m=>/^raster:\s*\d+\s*$/.test(m));if(n>=0){const m=Number(e[n].split(":")[1]);e.splice(n,1),e=e.flatMap(c=>Array.from({length:m},(d,h)=>Array.from(c).map(g=>Array.from({length:m},(f,x)=>"^>v<".includes(g)?h===m>>1&&x===m>>1?g:".":g).join("")).join("")))}for(;e.length&&e[e.length-1].trim()==="";)e.pop();for(;e.length&&e[0].trim()==="";)e.shift();const s=Math.max(...e.map(m=>m.length))*Vn,r=e.length*Vn,o=(m,c)=>({x:-s/2+(m+.5)*Vn,y:r/2-(c+.5)*Vn}),l={width:s,depth:r,start:{x:0,y:0,heading:0},walls:[],lines:[],blocks:[],marks:[],goals:[],targets:[],colors:[]};let u=0;e.forEach((m,c)=>{Array.from(m).forEach((d,h)=>{const g=o(h,c);d==="#"?l.blocks.push(g):d==="="?l.marks.push(g):d==="Z"?l.goals.push(g):d==="o"?l.targets.push(g):d in Iu?l.colors.push({at:g,color:Iu[d]}):"^>v<".includes(d)&&(u++,l.start={...g,heading:{"^":0,">":90,v:180,"<":270}[d]})})});for(const m of t)l.lines.push(m.split(/\s+/).map(c=>{const[d,h]=c.split(",").map(Number);if(!Number.isFinite(d)||!Number.isFinite(h))throw new Error(`Linie: „${c}“ ist kein Feld (Spalte,Zeile).`);return o(d,h)}));if(u!==1)throw new Error(`Die Weltkarte braucht genau einen Start (^ > v <), gefunden: ${u}`);return l}const Iu={r:"red",g:"green",b:"blue",y:"yellow"},N1=(i,e)=>Math.abs(i.x-e.x)<=Vn/2&&Math.abs(i.y-e.y)<=Vn/2,ku=10,Su=9,Px=300,u1=8,jx=[-3.6,-1.2,1.2,3.6],Cx=2.5,Bx=20,Dx=12,Xl=100,vi={width:200,depth:200,start:{x:0,y:0,heading:0},walls:[],lines:[]},_u=i=>i*Math.PI/180,m1=i=>({x:Math.sin(_u(i)),y:Math.cos(_u(i))}),na=()=>Array.from({length:eh},()=>{}),Tu=([i,e,t])=>i>0||e>0||t>0?[i,e,t]:void 0;class us{constructor(e=vi){v(this,"pose");v(this,"trail");v(this,"bumps",0);v(this,"leds",na());v(this,"screen");v(this,"wheels",[0,0]);v(this,"time",0);v(this,"timerStart",0);v(this,"blocked",!1);v(this,"blockWallCache");this.setup=e,this.pose={...e.start},this.trail=[{x:e.start.x,y:e.start.y}]}reset(){this.pose={...this.setup.start},this.trail=[{x:this.pose.x,y:this.pose.y}],this.bumps=0,this.leds=na(),this.screen=void 0,this.wheels=[0,0],this.time=0,this.timerStart=0,this.blocked=!1}get allWalls(){const e=this.setup.width/2,t=this.setup.depth/2,n=[{x:-e,y:-t},{x:e,y:-t},{x:e,y:t},{x:-e,y:t}];return[...this.setup.walls,...n.map((a,s)=>({from:a,to:n[(s+1)%4]})),...this.blockWalls]}get blockWalls(){return this.blockWallCache??(this.blockWallCache=(this.setup.blocks??[]).flatMap(e=>{const t=Vn/2,n=[{x:e.x-t,y:e.y-t},{x:e.x+t,y:e.y-t},{x:e.x+t,y:e.y+t},{x:e.x-t,y:e.y+t}];return n.map((a,s)=>({from:a,to:n[(s+1)%4]}))})),this.blockWallCache}atGoal(){const e=m1(this.pose.heading),t={x:this.pose.x+e.x*u1,y:this.pose.y+e.y*u1};return(this.setup.goals??[]).some(n=>N1(this.pose,n)||N1(t,n))||(this.setup.targets??[]).some(n=>N1(this.pose,n))}apply(e){switch(e.method){case"forward":return this.wheels=[0,0],this.drive(e.args[0]);case"backward":return this.wheels=[0,0],this.drive(-e.args[0]);case"turnRight":return this.wheels=[0,0],this.turn(e.args[0]);case"turnLeft":return this.wheels=[0,0],this.turn(-e.args[0]);case"stop":this.wheels=[0,0];return;case"drive":this.wheels=[Ou(e.args[0]),Ou(e.args[1])];return;case"pause":return this.tick(e.args[0]);case"resetTimer":this.timerStart=this.time;return;case"setLed":this.leds=na().map(()=>Tu(e.args));return;case"ledOff":this.leds=na();return;case"ledColor":this.leds[e.args[0]]=Tu(Xa[e.text??""]??[0,0,0]);return;case"showText":this.screen=e.text;return}}tick(e){if(e<=0)return;this.time+=e;const[t,n]=this.wheels.map(o=>o/100*Bx);if(t===0&&n===0)return;const a=Math.ceil(e/10),s=e/1e3/a;let r=!1;for(let o=0;o{const r={x:this.pose.x+e.x*u1+t.x*a,y:this.pose.y+e.y*u1+t.y*a};([...this.setup.marks??[],...this.setup.goals??[]].some(l=>N1(r,l))||this.setup.lines.some(l=>Mx(r,l)<=Cx/2))&&(n|=1<<3-s)}),n}colorUnder(){var n;const e=m1(this.pose.heading),t={x:this.pose.x+e.x*u1,y:this.pose.y+e.y*u1};return(n=(this.setup.colors??[]).find(a=>N1(t,a.at)))==null?void 0:n.color}sensors(){const e=this.lineState();return{getDistance:this.distance(),getLine:e,getColor:this.colorUnder()??(e&6?"black":"white"),isLineLeft:(e&4)!==0,isLineRight:(e&2)!==0,getTimer:this.timer}}freeDistance(e,t){let n=1/0;for(const a of this.allWalls){const s=Zx(e,t,a.from,a.to);s!==void 0&&sMath.max(-100,Math.min(100,i));function Au(i){const e=(i%360+360)%360;return Math.abs(e-360)<1e-9?0:e}function Zx(i,e,t,n){const a={x:n.x-t.x,y:n.y-t.y},s=e.x*a.y-e.y*a.x;if(Math.abs(s)<1e-12)return;const r={x:t.x-i.x,y:t.y-i.y},o=(r.x*a.y-r.y*a.x)/s,l=(r.x*e.y-r.y*e.x)/s;return o>=0&&l>=0&&l<=1?o:void 0}function Mx(i,e){let t=1/0;for(let n=0;n+10&&o.tick(Xl),s.robotSensors={...o.sensors(),...Jx(a,u)};const c=()=>({outputs:[...m.outputLines],files:new Map(m.files),drive:m.robotActions.length?es(m.robotActions):void 0,...n?{atGoal:o.atGoal(),bumps:o.bumps}:{},led:o.leds.some(d=>d!==void 0),tone:m.robotActions.some(d=>d.method==="playTone"),screen:o.screen,actions:nh(m.robotActions.filter(d=>!Nx.has(d.method)))});if(m.inputRequest){const d=r.shift();if(d===void 0)return{...c(),missingInput:!0};if(s.provideInput(d),m.inputErrorNotice)return{...c(),error:m.inputErrorNotice};continue}if(m.isHalted)return{...c(),error:m.notice};if(!s.canStep)return{...c(),unusedInputs:r.length||void 0};s.step()}return{outputs:[...s.state.outputLines],files:new Map(s.state.files),drive:es(s.state.robotActions),tooManySteps:!0}}function Jx(i,e){const t=Math.floor(e/Wx);return Object.fromEntries(Object.entries(i??{}).map(([n,a])=>[n,a[Math.min(t,a.length-1)]]))}function Bh(i){return i===void 0||i===""?[]:i.replace(/\n$/,"").split(` +`)}function ia(i,e){return i.length!==e.length?!1:i.every((t,n)=>Pu(t)===Pu(e[n]))}function Pu(i){const e=i.trim().replace(/\s+/g," ");return/^-?\d+\.0+$/.test(e)?e.replace(/\.0+$/,""):e}function Rx(i,e,t,n){return e.map(a=>{var d,h,g;const s=a.world?n==null?void 0:n(a.world):void 0;if(a.world&&!s)throw new Error(`Weltkarte „${a.world}“ fehlt.`);const r=Fx(i,a.inputs,t,s,a.sensors),o=(a.files??[]).every(f=>{var x;return ia(Bh((x=r.files)==null?void 0:x.get(f.name)),f.lines)}),l=!a.drive||ia(r.drive??[],a.drive),u=!a.world||r.bumps===0&&(!((d=s==null?void 0:s.goals)!=null&&d.length||(h=s==null?void 0:s.targets)!=null&&h.length)||r.atGoal===!0),m=(a.led===void 0||r.led===a.led)&&(a.tone===void 0||r.tone===a.tone)&&(a.screen===void 0||r.screen===a.screen)&&(a.drives===void 0||(((g=r.drive)==null?void 0:g.length)??0)>0===a.drives)&&(!a.actions||ia(r.actions??[],a.actions)),c=!r.error&&!r.missingInput&&!r.tooManySteps&&ia(r.outputs,a.expected)&&o&&l&&u&&m;return{test:a,result:r,passed:c}})}function Gx(i){const e=new Set,t=n=>{for(const a of n){e.add(a.type),a.loopBody&&t(a.loopBody);for(const s of a.cases??[])t(s.elements)}};return t(i.elements),e}function _o(i){const e=[I.forSchleife,I.whileSchleife,I.doUntilSchleife,I.endlosschleife];let t=0;for(const n of i){const a=Math.max(_o(n.loopBody??[]),...(n.cases??[]).map(s=>_o(s.elements)));t=Math.max(t,a+(e.includes(n.type)?1:0))}return t}class wi extends Error{}function Hx(i,e){const t=[],n=[];for(const a of i){const s=a.trim();if(!s)continue;if(s.startsWith("?")){const o=s.slice(1).trim();ms(o,Vx(t)),n.push(o);continue}const r=/^([A-Za-z_]\w*)\s*:\s*(?:(-?\d+)\s*\.\.\s*(-?\d+)|(boolean))$/.exec(s);if(!r)throw new wi(`${e}: Unbekannte Zeile im Spiel: „${s}“`);t.push(r[4]?{name:r[1],kind:"boolean"}:{name:r[1],kind:"int",min:Number(r[2]),max:Number(r[3])})}if(!n.length)throw new wi(`${e}: Das Spiel braucht mindestens eine Zeile „? bedingung“.`);return{vars:t,conditions:n}}function Vx(i){return Object.fromEntries(i.map(e=>[e.name,e.kind==="boolean"?!0:e.min]))}function Qx(i){const e=[],t=/\s*(?:(\d+)|(true|false)\b|([A-Za-z_]\w*)|(&&|\|\||==|!=|<=|>=|<|>|!|\(|\)))/y;let n=0;for(;nt[n],s=d=>{var h;return((h=a())==null?void 0:h.kind)==="op"&&a().value===d},r=()=>{throw new wi(`Bedingung nicht lesbar: „${i}“`)},o=()=>{const d=t[n++]??r();if(d.kind==="num"||d.kind==="bool")return d.value;if(d.kind==="name"){if(!(d.value in e))throw new wi(`Unbekannte Variable „${d.value}“ in „${i}“`);return e[d.value]}if(d.value==="("){const h=m();return s(")")||r(),n++,h}if(d.value==="!"){const h=o();return typeof h!="boolean"&&r(),!h}return r()},l=()=>{const d=o(),h=a();if((h==null?void 0:h.kind)==="op"&&["==","!=","<","<=",">",">="].includes(h.value)){n++;const g=o();switch(h.value){case"==":return d===g;case"!=":return d!==g}(typeof d!="number"||typeof g!="number")&&r();const[f,x]=[d,g];return h.value==="<"?f"?f>x:f>=x}return d},u=()=>{let d=l();for(;s("&&");){n++;const h=l();d=d&&h}return d},m=()=>{let d=u();for(;s("||");){n++;const h=u();d=d||h}return d},c=m();return n!==t.length||typeof c!="boolean"?r():c}function qx(i,e){const t=[i],n=i.replace(/\b[A-Za-z_]\w*\b/g,r=>r in e?String(e[r]):r);n!==i&&t.push(n);const a=n.replace(/(-?\d+|true|false)\s*(==|!=|<=|>=|<|>)\s*(-?\d+|true|false)/g,r=>String(ms(r,{})));a!==t[t.length-1]&&t.push(a);const s=String(ms(i,e));return s!==t[t.length-1]&&t.push(s),t}function Ux(i,e){const t=[],n=new RegExp(`\\b${e}\\s*(?:==|!=|<=|>=|<|>)\\s*(-?\\d+)|(-?\\d+)\\s*(?:==|!=|<=|>=|<|>)\\s*${e}\\b`,"g");for(const a of i.matchAll(n)){const s=Number(a[1]??a[2]);t.push(s-1,s,s+1)}return t}function $x(i,e,t,n=Math.random){const a=i.conditions.length,s=Math.floor(e*a/t),r=Math.min(a-1,s+(n()<.5?0:1)),o=i.conditions[r],l={};for(const u of i.vars){if(u.kind==="boolean"){l[u.name]=n()<.5;continue}const m=Ux(o,u.name).filter(c=>c>=u.min&&c<=u.max);l[u.name]=m.length&&n()<.6?m[Math.floor(n()*m.length)]:u.min+Math.floor(n()*(u.max-u.min+1))}return{condition:o,values:l,answer:ms(o,l)}}function Yx(i){return Object.entries(i.values).filter(([e])=>new RegExp(`\\b${e}\\b`).test(i.condition))}const Xx=`--- titel: Was ist ein Struktogramm? bereich: Erste Schritte kurz: Algorithmen als Folge klarer Schritte darstellen und lesen. @@ -563,7 +563,7 @@ richtig: Verzweigung - [ ] Ein Pfeil > Alles zwischen SOLANGE und ENDE SOLANGE ist eingerückt und wird wiederholt. ::: -`,Xx=`--- +`,Kx=`--- titel: Der Editor bereich: Erste Schritte kurz: Elemente einfügen, Text eingeben, verschieben und löschen. @@ -736,7 +736,7 @@ frage: Du klickst im Bereich Elemente auf ein Element, ohne zu ziehen. Wo landet - [ ] input: "Guten Tag" > Ohne Anführungszeichen wird Guten Tag als Name einer Variablen verstanden. ::: -`,Kx=`--- +`,eb=`--- titel: Speichern, Öffnen, Exportieren bereich: Erste Schritte kurz: Dateien sichern, deinen Workspace nutzen, mehrere Diagramme öffnen und als Bild oder PDF weitergeben. @@ -870,7 +870,7 @@ richtig: PNG - [ ] Direkt im Workspace ohne Unterordner > VisuStruct legt für jeden Tag automatisch einen Datumsordner an. So bleiben die Programme nach Stunden sortiert. ::: -`,eb=`--- +`,tb=`--- titel: Variablen und Datentypen bereich: Grundlagen kurz: Werte speichern, die Datentypen int, double, String und boolean kennen und rechnen. @@ -1189,7 +1189,7 @@ richtig: String - [ ] Double preis = 2.5 > Kommazahlen schreibst du mit Punkt, und am Ende steht ein Semikolon. ::: -`,tb=`--- +`,nb=`--- titel: Sequenz bereich: Grundlagen kurz: Schritte nacheinander ausführen, auf die Reihenfolge achten und Werte tauschen. @@ -1406,7 +1406,7 @@ frage: Ludwig kocht Tee. - [ ] Mit einem Doppelpunkt : > Fehlt das Semikolon, zeigt VisuStruct unter dem Code einen Hinweis. ::: -`,nb=`--- +`,ib=`--- titel: Eingabe und Ausgabe bereich: Grundlagen kurz: Werte abfragen, Ergebnisse anzeigen und das EVA-Prinzip anwenden. @@ -1718,7 +1718,7 @@ frage: Zu welchem Teil von EVA gehört dieser Kasten? - [ ] Einen ganzen Satz > Für Kommazahlen gibt es \`scanner.nextDouble()\`, für ein Wort \`scanner.next()\`. ::: -`,ib=`--- +`,ab=`--- titel: Simulation und Schreibtischtest bereich: Grundlagen kurz: Ein Struktogramm Schritt für Schritt ausführen, von Hand nachrechnen und Fehler finden. @@ -1995,7 +1995,7 @@ besser: preis = preis + preis * 0.1; - [ ] Die Zeile wird übersprungen. > Das ist ein Haltepunkt. Mit ▶︎ oder dem Einzelschritt geht es weiter. ::: -`,ab=`--- +`,sb=`--- titel: Verzweigung bereich: Grundlagen kurz: Mit einer Bedingung entscheiden, welcher von zwei Wegen ausgeführt wird. @@ -2312,7 +2312,7 @@ frage: Was wird ausgegeben? - [ ] Hinter einem Semikolon > \`if (alter >= 18) { … }\`: Die runden Klammern gehören zur Bedingung, die geschweiften zum Zweig. ::: -`,sb=`--- +`,rb=`--- titel: Bedingungen verknüpfen bereich: Grundlagen kurz: Mehrere Bedingungen mit und, oder und nicht verbinden und Wertebereiche prüfen. @@ -2604,7 +2604,7 @@ lösung: l09-java-fehler-loesung.visustruct - [ ] if (alter >= 12 || alter < 18) > Jeder Vergleich steht für sich, verbunden mit \`&&\`. ::: -`,rb=`--- +`,ob=`--- titel: Fallauswahl bereich: Grundlagen kurz: Je nach Wert einer Variablen einen von vielen Fällen ausführen. @@ -2901,7 +2901,7 @@ frage: Ein Würfel zeigt 1 bis 6, und für jede Zahl soll ein anderes Wort ersch - [x] default - [ ] case 0 ::: -`,ob=`--- +`,lb=`--- titel: While-Schleife bereich: Grundlagen kurz: Schritte wiederholen, solange eine Bedingung wahr ist. @@ -3227,7 +3227,7 @@ frage: Wie oft läuft der Rumpf? - [ ] while (zahl > 0); > Die Bedingung steht in runden Klammern, danach öffnet \`{\` den Rumpf. ::: -`,lb=`--- +`,ub=`--- titel: Do-while-Schleife bereich: Grundlagen kurz: Erst ausführen, dann prüfen: Schleifen mit mindestens einem Durchlauf. @@ -3474,7 +3474,7 @@ frage: Wofür nimmt man typischerweise eine Do-while-Schleife? - [ ] } until (bedingung); > Nach der Bedingung kommt ein Semikolon. ::: -`,ub=`--- +`,mb=`--- titel: For-Schleife bereich: Grundlagen kurz: Mit Start, Bedingung und Schritt eine feste Anzahl von Durchläufen zählen. @@ -3770,7 +3770,7 @@ besser: for (int i = 2; i <= 10; i = i + 2) { - [ ] i wird ausgegeben. > \`i++\` ist die Kurzform von \`i = i + 1\`. ::: -`,mb=`--- +`,cb=`--- titel: Verschachteln bereich: Grundlagen kurz: Verzweigungen in Schleifen und Schleifen in Schleifen kombinieren. @@ -4036,7 +4036,7 @@ frage: Was passiert? - [x] An den geschweiften Klammern und der Einrückung - [ ] An den Semikolons ::: -`,cb=`--- +`,db=`--- titel: Arrays bereich: Grundlagen kurz: Viele Werte unter einem Namen speichern, mit dem Index darauf zugreifen und sie mit einer Schleife durchlaufen. @@ -4346,7 +4346,7 @@ besser: for (int i = zahlen.length - 1; i >= 0; i--) { - [ ] int zahlen = [1, 2, 3]; - [ ] array zahlen = (1, 2, 3); ::: -`,db=`--- +`,hb=`--- titel: Zweidimensionale Arrays bereich: Grundlagen kurz: Werte in Zeilen und Spalten speichern, wie die Sitze in einem Kinosaal, und mit zwei verschachtelten Schleifen durchlaufen. @@ -4631,7 +4631,7 @@ frage: Zwei Schleifen gehen den Saal \`new boolean[3][5]\` durch. Welches Fach k - [ ] 5, die Zahl der Plätze - [ ] 15, alle Plätze zusammen ::: -`,hb=`--- +`,gb=`--- titel: Zeichenketten bereich: Grundlagen kurz: Mit Texten arbeiten, also einzelne Zeichen lesen, Teile herausschneiden, suchen, vergleichen und zerlegen. @@ -5082,7 +5082,7 @@ ende: Zora ist frei, und der Fuchs ist schnell davongelaufen. Das geheime Wort w - [ ] eine Fehlermeldung > parseInt macht aus dem Text eine Zahl. Danach rechnet Java ganz normal. ::: -`,gb=`--- +`,pb=`--- titel: Aufruf und Aussprung bereich: Grundlagen kurz: Große Aufgaben in Unterprogramme zerlegen und Schleifen vorzeitig verlassen. @@ -5539,7 +5539,7 @@ frage: Was wird ausgegeben? - [ ] return > void heißt „leer“: Die Methode macht etwas, gibt aber keinen Wert zurück. ::: -`,pb=`--- +`,fb=`--- titel: Suchen und Sortieren bereich: Grundlagen kurz: Mit Spielkarten verstehen, wie lineare und binäre Suche und Bubblesort arbeiten und warum manche Verfahren viel schneller sind. @@ -5855,7 +5855,7 @@ frage: Bubblesort tauscht \`karten[i]\` und \`karten[i + 1]\`. Was braucht es da - [ ] Eine While-Schleife kann keine Arrays durchlaufen. > Die Karte kann mehrmals vorkommen. Darum gehst du alle Karten bis zum Ende durch. ::: -`,fb=`--- +`,xb=`--- titel: Struktogramm und Code bereich: Vom Struktogramm zum Code kurz: Alle Elemente in Java auf einen Blick, Code erzeugen, im Bereich Programmieren Java schreiben, ausführen und Fehler suchen. @@ -6205,7 +6205,7 @@ frage: Im Debugger ist eine Zeile gelb. Was bedeutet das? - [ ] Die Zeile enthält einen Fehler. > Das ist ein Haltepunkt. Danach geht es mit ▶︎ oder dem Einzelschritt weiter. ::: -`,xb=`--- +`,bb=`--- titel: Python und JavaScript bereich: Vom Struktogramm zum Code kurz: Python- und JavaScript-Code aus dem Struktogramm erzeugen und JavaScript direkt im Browser ausführen. @@ -6428,7 +6428,7 @@ richtig: JavaScript - [ ] Es wird Summe: ausgegeben. > Mit str(summe) wird aus der Zahl ein Text. ::: -`,bb=`--- +`,yb=`--- titel: Wenn das Programm abstürzt: try und catch bereich: Fehler abfangen kurz: Mit echtem Java Fehlermeldungen lesen und Abstürze mit try und catch abfangen. @@ -6695,7 +6695,7 @@ Die Exception heißt \`ArithmeticException\`. Schreib in den \`try\`-Block nur d = ArithmeticException -> Teilen durch 0 = NumberFormatException -> Text ist keine Zahl ::: -`,yb=`--- +`,vb=`--- titel: Text einlesen und speichern bereich: Dateien kurz: Mit Scanner eine Textdatei Zeile für Zeile lesen und mit PrintWriter eine Datei speichern. @@ -6933,7 +6933,7 @@ runde: = println(text) -> schreibt eine Zeile = close() -> schließt die Datei ::: -`,vb=`--- +`,wb=`--- titel: Zeile für Zeile mit BufferedReader bereich: Dateien kurz: Mit BufferedReader und readLine lesen, bis null kommt, und mit Files eine ganze Datei auf einmal lesen. @@ -7173,7 +7173,7 @@ runde: = Files.readString -> kleine Dateien auf einmal = Scanner -> Zahlen und Wörter lesen ::: -`,wb=`--- +`,zb=`--- titel: Tabellen als CSV bereich: Dateien kurz: Eine Tabelle als CSV-Datei lesen, jede Zeile mit split zerlegen und mit den Zahlen rechnen. @@ -7380,7 +7380,7 @@ besser: Ludwig;2;3;1 = Datensatz -> eine Zeile mit Werten = Trennzeichen -> trennt die Spalten, meist ; ::: -`,zb=`--- +`,Ib=`--- titel: Daten als JSON bereich: Dateien kurz: JSON-Dateien verstehen, Werte mit indexOf und substring herausholen und selbst JSON schreiben. @@ -7588,7 +7588,7 @@ frage: Welcher Schlüssel hat einen Wahrheitswert? = [ ] -> eine Liste = : -> trennt Schlüssel und Wert ::: -`,Ib=`--- +`,kb=`--- titel: Formate im Vergleich bereich: Dateien kurz: Dieselben Daten als txt, CSV und JSON vergleichen, das passende Format wählen und eine Datei in ein anderes Format umwandeln. @@ -7748,7 +7748,7 @@ richtig: txt = die Notenliste der Klasse -> CSV = ein Spielstand mit Listen -> JSON ::: -`,kb=`--- +`,Sb=`--- titel: Dein erstes Fenster bereich: Fenster mit Swing kurz: Mit Java und Swing ein eigenes Fenster öffnen, Zeile für Zeile erklärt. @@ -7955,7 +7955,7 @@ Du willst nicht so viel tippen? Mit „Echtes Java“ darfst du im Bereich Progr - [ ] Sie stehen in geschweiften Klammern. - [ ] Sie enden mit Window. ::: -`,Sb=`--- +`,_b=`--- titel: Ein Knopf im Fenster bereich: Fenster mit Swing kurz: Einen Knopf ins Fenster legen und mit einem Layout ordentlich anordnen. @@ -8156,7 +8156,7 @@ Jeder Knopf braucht eine eigene Variable, zum Beispiel \`knopf\` und \`knopf2\`, - [ ] Auf dem Knopf steht „Ich wurde geklickt“. > Was beim Klick passieren soll, lernst du in der nächsten Lektion. ::: -`,_b=`--- +`,Tb=`--- titel: Der Knopf reagiert bereich: Fenster mit Swing kurz: Mit einem ActionListener festlegen, was beim Klick passiert. @@ -8483,7 +8483,7 @@ Jeder Knopf bekommt seinen eigenen Zuhörer mit eigenem \`addActionListener\`. D = setText -> Beschriftung ändern = setVisible(true) -> Fenster zeigen ::: -`,Tb=`--- +`,Ob=`--- titel: Zahl verdoppeln im Fenster bereich: Fenster mit Swing kurz: Beschriftung, Textfeld und Knopf mit einem GridLayout anordnen und mit dem Text im Textfeld rechnen. @@ -8748,7 +8748,7 @@ Der Knopf „Halbieren“ kommt als vierte Zeile ins GridLayout und bekommt sein = JButton -> Knopf = GridLayout -> Anordnung im Gitter ::: -`,Ob=`--- +`,Ab=`--- titel: Klickzähler mit Reset bereich: Fenster mit Swing kurz: Zwei Knöpfe ändern dieselbe Zahl: eine Variable für die ganze Klasse anlegen. @@ -8966,7 +8966,7 @@ Für „nie unter 0“ brauchst du im Zuhörer von −1 ein \`if\`: Nur wenn \`a - [ ] Es setzt das Fenster in die Mitte des Bildschirms. - [ ] Es macht die Schrift größer. ::: -`,Ab=`--- +`,Pb=`--- titel: Eine Ampel mit Farben bereich: Fenster mit Swing kurz: Hintergrundfarben setzen und mit einer Zustandsvariable eine Ampel weiterschalten. @@ -9227,7 +9227,7 @@ Mit vier Phasen kommt nach 3 wieder 0. Pass also die Zahl in \`if (phase > 2)\` - [ ] 3 > Nach phase++ ist sie 3, das ist größer als 2, also wird sie 0. ::: -`,Pb=`--- +`,jb=`--- titel: Notenrechner im Fenster bereich: Fenster mit Swing kurz: Punkte eingeben, mit else if die Note bestimmen und falsche Eingaben abfangen. @@ -9489,7 +9489,7 @@ Teste immer die Grenzen: 92 muss eine 1 sein, 91 eine 2. An den Grenzen stecken - [ ] punkte >= 0 || punkte <= 100 > Eine Zahl kann nicht gleichzeitig kleiner als 0 und größer als 100 sein, deshalb braucht es oder. ::: -`,jb=`--- +`,Cb=`--- titel: Ein Taschenrechner bereich: Fenster mit Swing kurz: Zwei Spalten mit GridLayout, vier Rechenknöpfe und die Division durch 0 abfangen. @@ -9746,7 +9746,7 @@ Für „abc“ brauchst du in jedem Zuhörer ein try/catch mit \`NumberFormatExc - [ ] Spalte für Spalte, erst ganz links von oben nach unten - [ ] Zufällig ::: -`,Cb=`--- +`,Bb=`--- titel: Zahlenraten bereich: Fenster mit Swing kurz: Ein Spiel mit Zufallszahl, Versuchszähler und einem Knopf, der sich am Ende abschaltet. @@ -9888,7 +9888,7 @@ Für „zählt nicht als Versuch“ muss \`versuche++\` **hinter** \`Integer.par - [x] 7 > Jeder Tipp halbiert den Bereich, und 2 hoch 7 = 128 ist größer als 100. ::: -`,Bb=`--- +`,Db=`--- titel: Viele Knöpfe, ein Zuhörer bereich: Fenster mit Swing kurz: Ein Zuhörer für viele Knöpfe, mit getActionCommand und getSource herausfinden, welcher Knopf geklickt wurde. @@ -10178,7 +10178,7 @@ Auch beim Taschenrechner aus Lektion 35 reicht ein Zuhörer für +, -, \\* und / = ActionEvent -> das Ereignis e mit den Infos zum Klick = JPanel -> eine Fläche mit eigenem Layout ::: -`,Db=`--- +`,Zb=`--- titel: Innere Klassen bereich: Fenster mit Swing kurz: Einen Zuhörer als benannte innere Klasse, als anonyme Klasse und als Lambda schreiben und wissen, wer was sehen darf. @@ -10394,7 +10394,7 @@ Probiere aus, ob alle drei Knöpfe wie erwartet zählen. Lass dann bei der Klass = new ActionListener() { … } -> anonyme Klasse = der Pfeil hinter e -> Lambda ::: -`,Zb=`--- +`,Mb=`--- titel: Zwei Reiter bereich: Fenster mit Swing kurz: Ein Fenster mit zwei Reitern bauen, Daten von einem Reiter zum anderen bringen und die Liste als Textdatei speichern. @@ -10659,7 +10659,7 @@ Dann mach es besser: = JPanel -> die Fläche eines Reiters = JTextArea -> ein Textbereich mit mehreren Zeilen ::: -`,Mb=`--- +`,Lb=`--- titel: Model View Controller bereich: Fenster mit Swing kurz: Den Klickzähler in Model, View und Controller zerlegen und verstehen, wer mit wem redet. @@ -11056,7 +11056,7 @@ Dann mach es besser: = ZahlAnzeige mit aktualisieren(int wert) -> View = der Zuhörer am Knopf -> Controller ::: -`,Lb=`Fachbegriffe für den Lernbereich. Kommt ein Begriff in einem Schritt vor, wird er dort einmal markiert und zeigt beim +`,Wb=`Fachbegriffe für den Lernbereich. Kommt ein Begriff in einem Schritt vor, wird er dort einmal markiert und zeigt beim Hovern oder Antippen seine Erklärung. Steht er im Schritt fett, wird er gerade erklärt und deshalb nicht markiert. \`auch:\` nennt weitere Formen, die ebenfalls erkannt werden. Groß- und Kleinschreibung zählt. @@ -11246,7 +11246,7 @@ Ein fertiger Baustein von Java, der Eingaben über die Tastatur liest, z. B. mit ### import Eine Zeile ganz oben im Java-Code, die einen fertigen Baustein aus einem Paket holt, z. B. \`import java.util.Scanner;\`. Ohne sie kennt Java den Namen nicht. -`,Wb=`## Grundbausteine +`,Eb=`## Grundbausteine ### Anweisung @@ -11372,7 +11372,7 @@ boolean[][] sitze = new boolean[3][5] sitze[1][4] = true output: sitze.length + " Reihen, " + sitze[0].length + " Plätze" \`\`\` -`,Eb=`--- +`,Nb=`--- titel: What is a structure chart? bereich: First steps kurz: Show and read algorithms as a series of clear steps. @@ -11645,7 +11645,7 @@ richtig: branch - [ ] An arrow > Everything between WHILE and END WHILE is indented and is repeated. ::: -`,Nb=`--- +`,Fb=`--- titel: The editor bereich: First steps kurz: Insert elements, type text, move and delete. @@ -11818,7 +11818,7 @@ frage: You click an element in the Elements area without dragging. Where does it - [ ] input: "Good morning" > Without quotation marks, Good morning is understood as the name of a variable. ::: -`,Fb=`--- +`,Jb=`--- titel: Save, open, export bereich: First steps kurz: Keep your files safe, use your workspace, open several diagrams and share them as an image or PDF. @@ -11952,7 +11952,7 @@ Open one of your exercises from lesson 2 and try the following: - [ ] Directly in the workspace without a subfolder > VisuStruct automatically creates a date folder for each day. That keeps the programs sorted by lesson. ::: -`,Jb=`--- +`,Rb=`--- titel: Variables and data types bereich: Basics kurz: Store values, get to know the data types int, double, String and boolean, and calculate. @@ -12271,7 +12271,7 @@ richtig: String - [ ] Double price = 2.5 > Decimal numbers use a point, and the line ends with a semicolon. ::: -`,Rb=`--- +`,Gb=`--- titel: Sequence bereich: Basics kurz: Run steps one after another, watch the order and swap values. @@ -12488,7 +12488,7 @@ frage: Ludwig makes tea. - [ ] With a colon : > If the semicolon is missing, VisuStruct shows a hint below the code. ::: -`,Gb=`--- +`,Hb=`--- titel: Input and output bereich: Basics kurz: Ask for values, show results and use the IPO model. @@ -12800,7 +12800,7 @@ frage: Which part of IPO does this box belong to? - [ ] A whole sentence > For decimal numbers there is \`scanner.nextDouble()\`, for a word \`scanner.next()\`. ::: -`,Hb=`--- +`,Vb=`--- titel: Simulation and desk check bereich: Basics kurz: Run a structure chart step by step, work it out by hand and find mistakes. @@ -13077,7 +13077,7 @@ besser: price = price + price * 0.1; - [ ] The line is skipped. > That is a breakpoint. ▶︎ or Step carries on. ::: -`,Vb=`--- +`,Qb=`--- titel: Branch bereich: Basics kurz: Use a condition to decide which of two paths runs. @@ -13394,7 +13394,7 @@ frage: What is output? - [ ] After a semicolon > \`if (age >= 18) { … }\`: the round brackets belong to the condition, the curly ones to the branch. ::: -`,Qb=`--- +`,qb=`--- titel: Combining conditions bereich: Basics kurz: Join several conditions with and, or and not, and check ranges of values. @@ -13686,7 +13686,7 @@ lösung: l09-java-fehler-loesung.visustruct - [ ] if (age >= 12 || age < 18) > Each comparison stands on its own, joined with \`&&\`. ::: -`,qb=`--- +`,Ub=`--- titel: Switch bereich: Basics kurz: Run one of many cases, depending on the value of a variable. @@ -13983,7 +13983,7 @@ frage: A dice shows 1 to 6, and for every number a different word should appear. - [x] default - [ ] case 0 ::: -`,Ub=`--- +`,$b=`--- titel: While loop bereich: Basics kurz: Repeat steps as long as a condition is true. @@ -14309,7 +14309,7 @@ frage: How often does the body run? - [ ] while (number > 0); > The condition is in round brackets, then \`{\` opens the body. ::: -`,$b=`--- +`,Yb=`--- titel: Do-while loop bereich: Basics kurz: Run first, check afterwards: loops with at least one pass. @@ -14556,7 +14556,7 @@ frage: What is a do-while loop typically used for? - [ ] } until (condition); > A semicolon follows the condition. ::: -`,Yb=`--- +`,Xb=`--- titel: For loop bereich: Basics kurz: Count a fixed number of passes with Init, Condition and Step. @@ -14852,7 +14852,7 @@ besser: for (int i = 2; i <= 10; i = i + 2) { - [ ] i is output. > \`i++\` is short for \`i = i + 1\`. ::: -`,Xb=`--- +`,Kb=`--- titel: Nesting bereich: Basics kurz: Combine branches inside loops and loops inside loops. @@ -15118,7 +15118,7 @@ frage: What happens? - [x] By the curly brackets and the indentation - [ ] By the semicolons ::: -`,Kb=`--- +`,e4=`--- titel: Arrays bereich: Basics kurz: Store many values under one name, reach them with the index and go through them with a loop. @@ -15428,7 +15428,7 @@ besser: for (int i = numbers.length - 1; i >= 0; i--) { - [ ] int numbers = [1, 2, 3]; - [ ] array numbers = (1, 2, 3); ::: -`,e4=`--- +`,t4=`--- titel: Two-dimensional arrays bereich: Basics kurz: Store values in rows and columns, like the seats in a cinema, and go through them with two nested loops. @@ -15713,7 +15713,7 @@ frage: Two loops go through the cinema \`new boolean[3][5]\`. Which slot comes r - [ ] 5, the number of seats - [ ] 15, all seats together ::: -`,t4=`--- +`,n4=`--- titel: Strings bereich: Basics kurz: Work with text: read single characters, cut out parts, search, compare and split. @@ -16162,7 +16162,7 @@ ende: Zora is free, and the fox has run off. The secret word was \`BREAK\`: with - [ ] an error message > parseInt turns the text into a number. After that Java calculates as usual. ::: -`,n4=`--- +`,i4=`--- titel: Call and break bereich: Basics kurz: Split big tasks into subprograms and leave loops early. @@ -16618,7 +16618,7 @@ frage: What is output? - [ ] return > void means “empty”: the method does something but returns no value. ::: -`,i4=`--- +`,a4=`--- titel: Searching and sorting bereich: Basics kurz: Use playing cards to understand how linear search, binary search and bubble sort work, and why some methods are much faster. @@ -16934,7 +16934,7 @@ frage: Bubble sort swaps \`cards[i]\` and \`cards[i + 1]\`. What does it need fo - [ ] A while loop cannot go through arrays. > The card can appear several times. That is why you go through all cards to the end. ::: -`,a4=`--- +`,s4=`--- titel: Structure chart and code bereich: From structure chart to code kurz: All elements in Java at a glance, generate code, write Java in the Programming area, run it and find mistakes. @@ -17284,7 +17284,7 @@ frage: In the debugger, a line is yellow. What does that mean? - [ ] The line contains a mistake. > That is a breakpoint. Continue with ▶︎ or Step. ::: -`,s4=`--- +`,r4=`--- titel: Python and JavaScript bereich: From structure chart to code kurz: Generate Python and JavaScript code from the structure chart and run JavaScript straight in the browser. @@ -17507,7 +17507,7 @@ richtig: JavaScript - [ ] Sum: is output. > str(sum) turns the number into text. ::: -`,r4=`--- +`,o4=`--- titel: When the program crashes: try and catch bereich: Catching errors kurz: Use real Java to read error messages and catch crashes with try and catch. @@ -17774,7 +17774,7 @@ The exception is called \`ArithmeticException\`. Only put the line that can cras = ArithmeticException -> dividing by 0 = NumberFormatException -> text is not a number ::: -`,o4=`--- +`,l4=`--- titel: Reading and saving text bereich: Files kurz: Read a text file line by line with Scanner and save a file with PrintWriter. @@ -18012,7 +18012,7 @@ runde: = println(text) -> writes a line = close() -> closes the file ::: -`,l4=`--- +`,u4=`--- titel: Line by line with BufferedReader bereich: Files kurz: Read with BufferedReader and readLine until null comes, and read a whole file at once with Files. @@ -18252,7 +18252,7 @@ runde: = Files.readString -> small files all at once = Scanner -> reading numbers and words ::: -`,u4=`--- +`,m4=`--- titel: Tables as CSV bereich: Files kurz: Read a table as a CSV file, split each line with split and calculate with the numbers. @@ -18459,7 +18459,7 @@ besser: Ludwig;2;3;1 = record -> a line with values = separator -> separates the columns, often ; ::: -`,m4=`--- +`,c4=`--- titel: Data as JSON bereich: Files kurz: Understand JSON files, get values out with indexOf and substring, and write JSON yourself. @@ -18667,7 +18667,7 @@ frage: Which key has a truth value? = [ ] -> a list = : -> separates key and value ::: -`,c4=`--- +`,d4=`--- titel: Comparing formats bereich: Files kurz: Compare the same data as txt, CSV and JSON, choose the right format and convert a file into another format. @@ -18827,7 +18827,7 @@ richtig: txt = the class grade list -> CSV = a game save with lists -> JSON ::: -`,d4=`--- +`,h4=`--- titel: Your first window bereich: Windows with Swing kurz: Open your own window with Java and Swing, explained line by line. @@ -19034,7 +19034,7 @@ Don't feel like typing so much? With “Real Java” you may type just the four - [ ] They are in curly brackets. - [ ] They end in Window. ::: -`,h4=`--- +`,g4=`--- titel: A button in the window bereich: Windows with Swing kurz: Put a button into the window and arrange it neatly with a layout. @@ -19235,7 +19235,7 @@ Every button needs its own variable, for example \`button\` and \`button2\`, and - [ ] The button says “I was clicked”. > What should happen on a click is what you learn in the next lesson. ::: -`,g4=`--- +`,p4=`--- titel: The button reacts bereich: Windows with Swing kurz: Use an ActionListener to decide what happens on a click. @@ -19562,7 +19562,7 @@ Every button gets its own listener with its own \`addActionListener\`. You chang = setText -> change the label = setVisible(true) -> show the window ::: -`,p4=`--- +`,f4=`--- titel: Doubling a number in a window bereich: Windows with Swing kurz: Arrange a label, a text field and a button with a GridLayout and calculate with the text in the text field. @@ -19827,7 +19827,7 @@ The “Halve” button goes into the GridLayout as the fourth row and gets its o = JButton -> button = GridLayout -> arrangement in a grid ::: -`,f4=`--- +`,x4=`--- titel: Click counter with reset bereich: Windows with Swing kurz: Two buttons change the same number: create a variable for the whole class. @@ -20045,7 +20045,7 @@ For “never below 0” the listener of −1 needs an \`if\`: only if \`count > - [ ] It puts the window in the middle of the screen. - [ ] It makes the font bigger. ::: -`,x4=`--- +`,b4=`--- titel: A traffic light with colours bereich: Windows with Swing kurz: Set background colours and switch a traffic light on with a state variable. @@ -20306,7 +20306,7 @@ With four phases, 0 comes after 3. So change the number in \`if (phase > 2)\`. - [ ] 3 > After phase++ it is 3, which is greater than 2, so it becomes 0. ::: -`,b4=`--- +`,y4=`--- titel: Grade calculator in a window bereich: Windows with Swing kurz: Enter points, work out the grade with else if and catch wrong input. @@ -20563,7 +20563,7 @@ Always test the limits: 90 must be an A, 89 a B. Most mistakes hide at the limit - [ ] points >= 0 || points <= 100 > A number can't be smaller than 0 and bigger than 100 at the same time, so you need or. ::: -`,y4=`--- +`,v4=`--- titel: A calculator bereich: Windows with Swing kurz: Two columns with GridLayout, four arithmetic buttons and catching division by 0. @@ -20820,7 +20820,7 @@ For “abc” every listener needs a try/catch with \`NumberFormatException\`. A - [ ] Column by column, starting top to bottom on the far left - [ ] Randomly ::: -`,v4=`--- +`,w4=`--- titel: Guess the number bereich: Windows with Swing kurz: A game with a random number, a counter for the guesses and a button that switches itself off at the end. @@ -20962,7 +20962,7 @@ For “doesn't count as a guess”, \`guesses++\` must come **after** \`Integer. - [x] 7 > Each guess halves the range, and 2 to the power of 7 = 128 is bigger than 100. ::: -`,w4=`--- +`,z4=`--- titel: Many buttons, one listener bereich: Windows with Swing kurz: One listener for many buttons, and finding out with getActionCommand and getSource which button was clicked. @@ -21251,7 +21251,7 @@ For the calculator from lesson 35, one listener is enough for +, -, \\* and / to = ActionEvent -> the event e with the information about the click = JPanel -> an area with its own layout ::: -`,z4=`--- +`,I4=`--- titel: Inner classes bereich: Windows with Swing kurz: Write a listener as a named inner class, as an anonymous class and as a lambda, and know who can see what. @@ -21467,7 +21467,7 @@ Check that all three buttons count as expected. Then remove the \`static\` from = new ActionListener() { … } -> anonymous class = the arrow after e -> lambda ::: -`,I4=`--- +`,k4=`--- titel: Two tabs bereich: Windows with Swing kurz: Build a window with two tabs, bring data from one tab to the other and save the list as a text file. @@ -21732,7 +21732,7 @@ Then make it better: = JPanel -> the area of a tab = JTextArea -> a text area with several lines ::: -`,k4=`--- +`,S4=`--- titel: Model View Controller bereich: Windows with Swing kurz: Split the click counter into model, view and controller and understand who talks to whom. @@ -22129,7 +22129,7 @@ Then make it better: = NumberView with update(int value) -> view = the listener at the button -> controller ::: -`,S4=`Technical terms for the learning area. When a term appears in a step, it is marked there once and shows its explanation +`,_4=`Technical terms for the learning area. When a term appears in a step, it is marked there once and shows its explanation on hover or tap. If it is in bold in that step, it is being explained right there and is not marked. \`also:\` lists other forms that are recognised too. Upper and lower case matter. @@ -22324,7 +22324,7 @@ A ready-made Java building block that reads input from the keyboard, for example ### import A line at the very top of Java code that fetches a ready-made building block from a package, for example \`import java.util.Scanner;\`. Without it, Java doesn't know the name. -`,_4=`## Basics +`,T4=`## Basics ### Statement @@ -22450,7 +22450,7 @@ boolean[][] seats = new boolean[3][5] seats[1][4] = true output: seats.length + " rows, " + seats[0].length + " seats" \`\`\` -`,T4=`--- +`,O4=`--- titel: O que é um estrutograma? bereich: Primeiros passos kurz: Mostrar e ler algoritmos como uma série de passos claros. @@ -22723,7 +22723,7 @@ richtig: decisão - [ ] Uma seta > Tudo o que está entre ENQUANTO e FIM ENQUANTO está recuado e é repetido. ::: -`,O4=`--- +`,A4=`--- titel: O editor bereich: Primeiros passos kurz: Inserir elementos, escrever texto, mover e eliminar. @@ -22896,7 +22896,7 @@ frage: Clicas num elemento da área Elementos, sem arrastar. Onde fica? - [ ] input: "Bom dia" > Sem aspas, Bom dia é entendido como o nome de uma variável. ::: -`,A4=`--- +`,P4=`--- titel: Guardar, abrir, exportar bereich: Primeiros passos kurz: Guardar os teus ficheiros em segurança, usar o teu espaço de trabalho, abrir vários diagramas e partilhá-los como imagem ou PDF. @@ -23030,7 +23030,7 @@ Abre um dos teus exercícios da lição 2 e experimenta o seguinte: - [ ] Diretamente no espaço de trabalho, sem subpasta > O VisuStruct cria automaticamente uma pasta com a data de cada dia. Assim os programas ficam ordenados por aula. ::: -`,P4=`--- +`,j4=`--- titel: Variáveis e tipos de dados bereich: Fundamentos kurz: Guardar valores, conhecer os tipos de dados int, double, String e boolean, e fazer contas. @@ -23349,7 +23349,7 @@ richtig: String - [ ] Double preco = 2.5 > Os números decimais escrevem-se com ponto, e no fim há um ponto e vírgula. ::: -`,j4=`--- +`,C4=`--- titel: Sequência bereich: Fundamentos kurz: Executar passos um a seguir ao outro, prestar atenção à ordem e trocar valores. @@ -23566,7 +23566,7 @@ frage: O Ludwig faz chá. - [ ] Com dois pontos : > Se faltar o ponto e vírgula, o VisuStruct mostra uma indicação por baixo do código. ::: -`,C4=`--- +`,B4=`--- titel: Entrada e saída bereich: Fundamentos kurz: Pedir valores, mostrar resultados e usar o modelo EPS. @@ -23878,7 +23878,7 @@ frage: A que parte do modelo EPS pertence este bloco? - [ ] Uma frase inteira > Para números decimais há \`scanner.nextDouble()\`, para uma palavra \`scanner.next()\`. ::: -`,B4=`--- +`,D4=`--- titel: Simulação e teste de secretária bereich: Fundamentos kurz: Executar um estrutograma passo a passo, segui-lo à mão e encontrar erros. @@ -24155,7 +24155,7 @@ besser: preco = preco + preco * 0.1; - [ ] A linha é saltada. > É um ponto de paragem. Continuas com ▶︎ ou com Passo a passo. ::: -`,D4=`--- +`,Z4=`--- titel: Decisão bereich: Fundamentos kurz: Usar uma condição para decidir qual de dois ramos é executado. @@ -24472,7 +24472,7 @@ frage: O que aparece? - [ ] Depois de um ponto e vírgula > \`if (idade >= 18) { … }\`: os parênteses curvos pertencem à condição, as chavetas ao ramo. ::: -`,Z4=`--- +`,M4=`--- titel: Combinar condições bereich: Fundamentos kurz: Juntar várias condições com e, ou e não, e verificar intervalos de valores. @@ -24764,7 +24764,7 @@ lösung: l09-java-fehler-loesung.visustruct - [ ] if (idade >= 12 || idade < 18) > Cada comparação fica sozinha, ligada com \`&&\`. ::: -`,M4=`--- +`,L4=`--- titel: Seleção bereich: Fundamentos kurz: Executar um de vários casos, consoante o valor de uma variável. @@ -25061,7 +25061,7 @@ frage: Um dado mostra de 1 a 6, e para cada número deve aparecer uma palavra di - [x] default - [ ] case 0 ::: -`,L4=`--- +`,W4=`--- titel: Ciclo while bereich: Fundamentos kurz: Repetir passos enquanto uma condição for verdadeira. @@ -25387,7 +25387,7 @@ frage: Quantas vezes corre o corpo? - [ ] while (numero > 0); > A condição fica entre parênteses curvos, depois \`{\` abre o corpo. ::: -`,W4=`--- +`,E4=`--- titel: Ciclo do-while bereich: Fundamentos kurz: Primeiro executar, depois verificar: ciclos com pelo menos uma iteração. @@ -25634,7 +25634,7 @@ frage: Para que se usa tipicamente um ciclo do-while? - [ ] } until (condicao); > Depois da condição vem um ponto e vírgula. ::: -`,E4=`--- +`,N4=`--- titel: Ciclo for bereich: Fundamentos kurz: Contar um número fixo de iterações com Início, Condição e Passo. @@ -25930,7 +25930,7 @@ besser: for (int i = 2; i <= 10; i = i + 2) { - [ ] i é mostrado. > \`i++\` é a forma curta de \`i = i + 1\`. ::: -`,N4=`--- +`,F4=`--- titel: Encaixar bereich: Fundamentos kurz: Combinar decisões dentro de ciclos e ciclos dentro de ciclos. @@ -26196,7 +26196,7 @@ frage: O que acontece? - [x] Pelas chavetas e pela indentação - [ ] Pelos pontos e vírgulas ::: -`,F4=`--- +`,J4=`--- titel: Arrays bereich: Fundamentos kurz: Guardar muitos valores com um só nome, chegar a eles com o índice e percorrê-los com um ciclo. @@ -26506,7 +26506,7 @@ besser: for (int i = numeros.length - 1; i >= 0; i--) { - [ ] int numeros = [1, 2, 3]; - [ ] array numeros = (1, 2, 3); ::: -`,J4=`--- +`,R4=`--- titel: Arrays bidimensionais bereich: Fundamentos kurz: Guardar valores em linhas e colunas, como os lugares de um cinema, e percorrê-los com dois ciclos encaixados. @@ -26791,7 +26791,7 @@ frage: Dois ciclos percorrem a sala \`new boolean[3][5]\`. Que posição vem log - [ ] 5, o número de lugares - [ ] 15, todos os lugares juntos ::: -`,R4=`--- +`,G4=`--- titel: Strings bereich: Fundamentos kurz: Trabalhar com texto: ler caracteres, recortar partes, pesquisar, comparar e dividir. @@ -27242,7 +27242,7 @@ ende: A Zora está livre, e a raposa fugiu a correr. A palavra secreta era \`BRE - [ ] uma mensagem de erro > parseInt transforma o texto num número. Depois o Java faz a conta normalmente. ::: -`,G4=`--- +`,H4=`--- titel: Chamada e interrupção bereich: Fundamentos kurz: Dividir tarefas grandes em subprogramas e sair mais cedo dos ciclos. @@ -27698,7 +27698,7 @@ frage: O que aparece? - [ ] return > void significa “vazio”: o método faz alguma coisa, mas não devolve nenhum valor. ::: -`,H4=`--- +`,V4=`--- titel: Pesquisar e ordenar bereich: Fundamentos kurz: Perceber com cartas de jogar como funcionam a pesquisa linear, a pesquisa binária e o bubble sort, e porque é que alguns métodos são muito mais rápidos. @@ -28014,7 +28014,7 @@ frage: O bubble sort troca \`cartas[i]\` e \`cartas[i + 1]\`. De que precisa par - [ ] Um ciclo while não consegue percorrer arrays. > A carta pode aparecer várias vezes. Por isso percorres todas as cartas até ao fim. ::: -`,V4=`--- +`,Q4=`--- titel: Estrutograma e código bereich: Do estrutograma ao código kurz: Todos os elementos em Java num relance, gerar código, escrever Java na área Programação, executá-lo e procurar erros. @@ -28364,7 +28364,7 @@ frage: No depurador, uma linha está amarela. O que quer dizer? - [ ] A linha tem um erro. > É um ponto de paragem. Continua-se com ▶︎ ou com Passo a passo. ::: -`,Q4=`--- +`,q4=`--- titel: Python e JavaScript bereich: Do estrutograma ao código kurz: Gerar código Python e JavaScript a partir do estrutograma e executar JavaScript diretamente no navegador. @@ -28587,7 +28587,7 @@ richtig: JavaScript - [ ] É mostrado Soma:. > str(soma) transforma o número em texto. ::: -`,q4=`--- +`,U4=`--- titel: Quando o programa falha: try e catch bereich: Apanhar erros kurz: Ler mensagens de erro com Java verdadeiro e apanhar falhas com try e catch. @@ -28854,7 +28854,7 @@ A exceção chama-se \`ArithmeticException\`. Põe no bloco \`try\` só a linha = ArithmeticException -> divisão por 0 = NumberFormatException -> o texto não é um número ::: -`,U4=`--- +`,$4=`--- titel: Ler e guardar texto bereich: Ficheiros kurz: Ler um ficheiro de texto linha a linha com Scanner e guardar um ficheiro com PrintWriter. @@ -29092,7 +29092,7 @@ runde: = println(texto) -> escreve uma linha = close() -> fecha o ficheiro ::: -`,$4=`--- +`,Y4=`--- titel: Linha a linha com BufferedReader bereich: Ficheiros kurz: Ler com BufferedReader e readLine até chegar null, e ler um ficheiro inteiro de uma vez com Files. @@ -29332,7 +29332,7 @@ runde: = Files.readString -> ficheiros pequenos de uma vez = Scanner -> ler números e palavras ::: -`,Y4=`--- +`,X4=`--- titel: Tabelas em CSV bereich: Ficheiros kurz: Ler uma tabela num ficheiro CSV, dividir cada linha com split e fazer contas com os números. @@ -29539,7 +29539,7 @@ besser: Ludwig;2;3;1 = registo -> uma linha com valores = separador -> separa as colunas, muitas vezes ; ::: -`,X4=`--- +`,K4=`--- titel: Dados em JSON bereich: Ficheiros kurz: Perceber ficheiros JSON, tirar valores com indexOf e substring e escrever JSON tu mesmo. @@ -29747,7 +29747,7 @@ frage: Que chave tem um valor lógico? = [ ] -> uma lista = : -> separa a chave do valor ::: -`,K4=`--- +`,ey=`--- titel: Comparar formatos bereich: Ficheiros kurz: Comparar os mesmos dados em txt, CSV e JSON, escolher o formato certo e converter um ficheiro noutro formato. @@ -29907,7 +29907,7 @@ richtig: txt = a pauta de notas da turma -> CSV = um jogo guardado com listas -> JSON ::: -`,ey=`--- +`,ty=`--- titel: A tua primeira janela bereich: Janelas com Swing kurz: Abrir uma janela tua com Java e Swing, explicado linha a linha. @@ -30114,7 +30114,7 @@ Não te apetece escrever tanto? Com o “Java verdadeiro” podes escrever na á - [ ] Estão entre chavetas. - [ ] Terminam em Window. ::: -`,ty=`--- +`,ny=`--- titel: Um botão na janela bereich: Janelas com Swing kurz: Pôr um botão na janela e arrumá-lo bem com um layout. @@ -30315,7 +30315,7 @@ Cada botão precisa da sua própria variável, por exemplo \`botao\` e \`botao2\ - [ ] No botão aparece “Fui clicado”. > O que deve acontecer com um clique aprendes na próxima lição. ::: -`,ny=`--- +`,iy=`--- titel: O botão reage bereich: Janelas com Swing kurz: Com um ActionListener decides o que acontece com um clique. @@ -30642,7 +30642,7 @@ Cada botão recebe o seu próprio ouvinte, com o seu próprio \`addActionListene = setText -> mudar o texto = setVisible(true) -> mostrar a janela ::: -`,iy=`--- +`,ay=`--- titel: Duplicar um número na janela bereich: Janelas com Swing kurz: Arrumar uma etiqueta, um campo de texto e um botão com um GridLayout e calcular com o texto do campo de texto. @@ -30907,7 +30907,7 @@ O botão “Dividir por 2” entra no GridLayout como quarta linha e recebe o se = JButton -> botão = GridLayout -> arrumação em grelha ::: -`,ay=`--- +`,sy=`--- titel: Contador de cliques com reset bereich: Janelas com Swing kurz: Dois botões alteram o mesmo número: criar uma variável para a classe toda. @@ -31125,7 +31125,7 @@ Para “nunca abaixo de 0”, o ouvinte do −1 precisa de um \`if\`: só se \`c - [ ] Põe a janela no meio do ecrã. - [ ] Aumenta a letra. ::: -`,sy=`--- +`,ry=`--- titel: Um semáforo com cores bereich: Janelas com Swing kurz: Definir cores de fundo e mudar um semáforo com uma variável de estado. @@ -31386,7 +31386,7 @@ Com quatro fases, depois do 3 vem o 0. Ajusta por isso o número em \`if (fase > - [ ] 3 > Depois de fase++ é 3, que é maior do que 2, por isso passa a 0. ::: -`,ry=`--- +`,oy=`--- titel: Calculadora de notas na janela bereich: Janelas com Swing kurz: Escrever a percentagem, determinar o nível com else if e apanhar entradas erradas. @@ -31643,7 +31643,7 @@ Testa sempre os limites: 90 tem de dar 5, 89 tem de dar 4. É nos limites que se - [ ] percentagem >= 0 || percentagem <= 100 > Um número não pode ser ao mesmo tempo menor do que 0 e maior do que 100, por isso é preciso o ou. ::: -`,oy=`--- +`,ly=`--- titel: Uma calculadora bereich: Janelas com Swing kurz: Duas colunas com GridLayout, quatro botões de cálculo e apanhar a divisão por 0. @@ -31900,7 +31900,7 @@ Para o “abc” cada ouvinte precisa de um try/catch com \`NumberFormatExceptio - [ ] Coluna a coluna, começando de cima para baixo na coluna da esquerda - [ ] Ao acaso ::: -`,ly=`--- +`,uy=`--- titel: Adivinha o número bereich: Janelas com Swing kurz: Um jogo com número aleatório, contagem de tentativas e um botão que se desliga no fim. @@ -32042,7 +32042,7 @@ Para “não conta como tentativa”, o \`tentativas++\` tem de vir **depois** d - [x] 7 > Cada palpite corta o intervalo a meio, e 2 elevado a 7 = 128 é maior do que 100. ::: -`,uy=`--- +`,my=`--- titel: Muitos botões, um ouvinte bereich: Janelas com Swing kurz: Um ouvinte para muitos botões e descobrir com getActionCommand e getSource qual foi o botão clicado. @@ -32331,7 +32331,7 @@ Também na calculadora da lição 35 chega um ouvinte para +, -, \\* e /. Verifi = ActionEvent -> o evento e com a informação sobre o clique = JPanel -> uma área com o seu próprio layout ::: -`,my=`--- +`,cy=`--- titel: Classes internas bereich: Janelas com Swing kurz: Escrever um ouvinte como classe interna com nome, como classe anónima e como lambda, e saber quem vê o quê. @@ -32547,7 +32547,7 @@ Experimenta se os três botões contam como esperado. Depois tira o \`static\` d = new ActionListener() { … } -> classe anónima = a seta depois de e -> lambda ::: -`,cy=`--- +`,dy=`--- titel: Dois separadores bereich: Janelas com Swing kurz: Construir uma janela com dois separadores, levar dados de um separador para o outro e guardar a lista num ficheiro de texto. @@ -32812,7 +32812,7 @@ Depois melhora-o: = JPanel -> a área de um separador = JTextArea -> uma área de texto com várias linhas ::: -`,dy=`--- +`,hy=`--- titel: Model View Controller bereich: Janelas com Swing kurz: Dividir o contador de cliques em model, view e controller e perceber quem fala com quem. @@ -33209,7 +33209,7 @@ Depois melhora-o: = VistaNumero com atualizar(int valor) -> view = o ouvinte do botão -> controller ::: -`,hy=`Termos técnicos da área de aprendizagem. Quando um termo aparece num passo, fica marcado uma vez e mostra a sua +`,gy=`Termos técnicos da área de aprendizagem. Quando um termo aparece num passo, fica marcado uma vez e mostra a sua explicação ao passar o rato ou ao tocar. Se estiver a negrito nesse passo, é explicado ali mesmo e não é marcado. \`auch:\` indica outras formas que também são reconhecidas. Maiúsculas e minúsculas contam. @@ -33408,7 +33408,7 @@ Um bloco pronto do Java que lê entradas do teclado, por exemplo um número com ### import Uma linha mesmo no início do código Java que vai buscar um bloco pronto a um pacote, por exemplo \`import java.util.Scanner;\`. Sem ela, o Java não conhece o nome. -`,gy=`## Elementos básicos +`,py=`## Elementos básicos ### Instrução @@ -33534,7 +33534,7 @@ boolean[][] lugares = new boolean[3][5] lugares[1][4] = true output: lugares.length + " filas, " + lugares[0].length + " lugares" \`\`\` -`,py=`--- +`,fy=`--- titel: Alter im Unterprogramm nach: 18 stufe: 2 @@ -33555,7 +33555,7 @@ tipp: Öffne die Übung im Editor und baue dort das Hauptprogramm mit dem Aufruf lösung: aufgabe-alter-haupt-loesung.visustruct unterprogramm: aufgabe-alter-unterprogramm-loesung.visustruct ::: -`,fy=`--- +`,xy=`--- titel: Ballwurf auswerten nach: 25 stufe: 2 @@ -33584,7 +33584,7 @@ tipp: Du brauchst vier Variablen vor der Schleife: die Anzahl, die Summe als \`d tipp: In der Schleife: \`String[] teile = zeile.split(";");\` und \`int weite = Integer.parseInt(teile[1]);\`. Ist \`weite > besteWeite\`, merkst du dir Weite und Namen. Zum Speichern: \`PrintWriter aus = new PrintWriter("sieger.txt");\`, \`aus.println(…)\` und \`aus.close();\`. lösung: aufgabe-ballwurf-loesung.visustruct ::: -`,xy=`--- +`,by=`--- titel: Bestenliste nach: 19 stufe: 2 @@ -33618,7 +33618,7 @@ tipp: Lies jede Zahl erst in eine Variable ein und schreibe sie dann ins Array: tipp: Der Tausch braucht auch in Java eine Hilfsvariable: \`int hilf = punkte[i]; punkte[i] = punkte[i + 1]; punkte[i + 1] = hilf;\`. lösung: aufgabe-bestenliste-loesung.visustruct ::: -`,by=`--- +`,yy=`--- titel: Binärzahl nach: 11 stufe: 3 @@ -33660,7 +33660,7 @@ tipp: Fang mit \`String binaer = "";\` an. Die Schleife läuft mit \`while (zahl tipp: Im Rumpf: \`int rest = zahl % 2;\`, dann \`binaer = rest + binaer;\` und \`zahl = zahl / 2;\`. Weil \`binaer\` ein String ist, hängt \`+\` den Rest vorne an. lösung: aufgabe-binaer-loesung.visustruct ::: -`,yy=`--- +`,vy=`--- titel: Caesar-Verschlüsselung nach: 17 stufe: 3 @@ -33794,7 +33794,7 @@ lösung: aufgabe-caesar-entschluesseln-loesung.visustruct ::: angeberwissen Sicher ist Caesar leider nicht. Es gibt nur 25 Schlüssel, die kann man in ein paar Minuten alle ausprobieren. Noch schneller geht es mit einem Trick: Im Deutschen ist E der häufigste Buchstabe. Kommt im Geheimtext H am häufigsten vor, war der Schlüssel wohl 3. Im Internet gibt es übrigens ROT13, das ist Caesar mit dem Schlüssel 13. Zweimal ROT13 ergibt wieder den Klartext, weil 13 + 13 = 26. ::: -`,vy=`--- +`,wy=`--- titel: Collatz-Folge nach: 11 stufe: 2 @@ -33838,7 +33838,7 @@ lösung: aufgabe-collatz-loesung.visustruct ::: angeberwissen Mit dieser Aufgabe kann man reich werden! Der Mathematiker Paul Erdős setzte für einen Beweis 500 Dollar aus. 2021 legte die japanische Firma Bakuage noch einiges drauf: 120 Millionen Yen, damals umgerechnet rund eine Million Dollar, für einen Beweis oder ein Gegenbeispiel. Abgeholt hat das Geld bis heute niemand. Erfunden hat das Rätsel übrigens der deutsche Mathematiker Lothar Collatz im Jahr 1937. Ich rechne gleich mal los, für so viel Geld gibt es eine Menge Heu. ::: -`,wy=`--- +`,zy=`--- titel: Einheitenrechner nach: 35 stufe: 2 @@ -33887,7 +33887,7 @@ Zusatz: Ein vierter Knopf **in Fuß** rechnet in die englische Einheit um. Ein F ::: ludwig Tick im [Zahnrad](#zeige-einstellungen) **Echtes Java (mit Swing)** an. Für „abc“ im Feld brauchst du in jedem Zuhörer ein try/catch mit \`NumberFormatException\`, wie beim Taschenrechner. ::: -`,zy=`--- +`,Iy=`--- titel: Fibonacci-Zahlen nach: 13 stufe: 2 @@ -33941,7 +33941,7 @@ lösung: aufgabe-fibonacci-loesung.visustruct - [ ] Die Reihenfolge ist egal > Andersherum hätten zahl1 und zahl2 danach denselben Wert. Wie beim Tauschen gilt: Erst retten, dann überschreiben. ::: -`,Iy=`--- +`,ky=`--- titel: Gerade oder ungerade nach: 8 stufe: 1 @@ -33977,7 +33977,7 @@ tipp: Eine Zahl liest du mit \`int zahl = scanner.nextInt();\` ein. Vorher frags tipp: \`if (zahl % 2 == 0) { … } else { … }\`. Die Ausgabe ist \`System.out.println(zahl + " ist gerade");\`. lösung: aufgabe-gerade-loesung.visustruct ::: -`,ky=`--- +`,Sy=`--- titel: Mehrwertsteuer nach: 6 stufe: 1 @@ -34018,7 +34018,7 @@ lösung: aufgabe-mehrwertsteuer-loesung.visustruct - [ ] Weil man Kommazahlen nur als Konstante speichern kann > Eine Konstante behält ihren Wert. Ändert sich der Steuersatz einmal, passt du nur die eine Zeile mit \`const\` an. ::: -`,Sy=`--- +`,_y=`--- titel: Notendurchschnitt nach: 13 stufe: 2 @@ -34053,7 +34053,7 @@ tipp: \`for (int i = 0; i < anzahl; i++)\` liest genau so viele Noten ein, wie v tipp: Teile mit \`double schnitt = summe * 1.0 / anzahl;\`. Ohne \`* 1.0\` teilt Java zwei \`int\` ganzzahlig, und aus 1.5 wird 1. lösung: aufgabe-durchschnitt-loesung.visustruct ::: -`,_y=`--- +`,Ty=`--- titel: PIN prüfen nach: 12 stufe: 2 @@ -34093,7 +34093,7 @@ tipp: \`do { … } while (…);\` fragt mindestens einmal. Hinter \`while (…)\ tipp: Lege vorher \`int pin = 0;\` und \`int versuche = 0;\` an. In der Schleife: \`int eingabe = scanner.nextInt();\`, \`pin = eingabe;\` und \`versuche++;\`. Die Bedingung ist \`pin != 1234 && versuche < 3\`. lösung: aufgabe-pin-java-loesung.visustruct ::: -`,Ty=`--- +`,Oy=`--- titel: Schiffe versenken nach: 16 stufe: 2 @@ -34130,7 +34130,7 @@ tipp: Zwei \`for\`-Schleifen ineinander: außen die Reihe, innen die Spalte, bei tipp: \`if (meer[reihe][spalte]) { System.out.println(spalten[spalte] + (reihe + 1)); }\`. Die Klammer um \`reihe + 1\` sorgt dafür, dass Java erst rechnet. lösung: aufgabe-schiffe-loesung.visustruct ::: -`,Oy=`--- +`,Ay=`--- titel: Speisekarte nach: 10 stufe: 1 @@ -34166,7 +34166,7 @@ tipp: In Java ist das eine Fallauswahl mit \`switch (nummer) { … }\`. tipp: Jeder Fall sieht so aus: \`case 1 -> { System.out.println("…"); }\`. Für alle anderen Nummern gibt es \`default -> { … }\`. lösung: aufgabe-speisekarte-loesung.visustruct ::: -`,Ay=`--- +`,Py=`--- titel: Summe bilden nach: 2 stufe: 1 @@ -34182,7 +34182,7 @@ tipp: Du brauchst drei Variablen: zwei für die Zahlen und eine für das Ergebni tipp: Eine Variable legst du mit einer Anweisung wie \`int zahl1 = 4\` fest. Für die Ausgabe schreibst du den Namen der Variablen ohne Anführungszeichen. lösung: aufgabe-summe-loesung.visustruct ::: -`,Py=`--- +`,jy=`--- titel: Tafeldienst auslosen nach: 15 stufe: 2 @@ -34219,7 +34219,7 @@ lösung: aufgabe-tafeldienst-loesung.visustruct ::: > Mit \`int nummer = (int) (Math.random() * 5) + 1\` kannst du die Losnummer auch vom Zufall ziehen lassen. Für die automatische Prüfung brauchen wir aber eine feste Eingabe. -`,jy=`--- +`,Cy=`--- titel: Taschenrechner nach: 10 stufe: 2 @@ -34255,7 +34255,7 @@ tipp: Das Rechenzeichen ist ein Text. Du liest es mit \`String zeichen = scanner tipp: \`switch (zeichen) { case "+" -> { … } … default -> { … } }\`. Bei Texten stehen die Fälle in Anführungszeichen. lösung: aufgabe-rechner-loesung.visustruct ::: -`,Cy=`--- +`,By=`--- titel: Verleih-Menü nach: 18 stufe: 2 @@ -34290,7 +34290,7 @@ tipp: \`while (true) { … }\` läuft endlos, bis ein \`break;\` kommt. tipp: Nimm in Java hier \`if\`/\`else if\` statt \`switch\`: Ein \`break;\` in einem \`switch\` verlässt nur den \`switch\`, nicht die Schleife. \`if (wahl == 0) { System.out.println("Tschüss"); break; } else if (wahl == 1) { … }\`. lösung: aufgabe-verleih-java-loesung.visustruct ::: -`,By=`--- +`,Dy=`--- titel: Vokabeltrainer nach: 27 stufe: 3 @@ -34325,7 +34325,7 @@ tipp: Überspringe die Kopfzeile. In der Schleife zerlegst du jede Zeile mit \`s tipp: Texte vergleichst du mit \`antwort.equals(teile[1])\`, nicht mit \`==\`. Zähle vor der Schleife mit \`int richtig = 0;\` und \`int anzahl = 0;\` mit. lösung: aufgabe-vokabeln-loesung.visustruct ::: -`,Dy=`--- +`,Zy=`--- titel: Volljährig? nach: 8 stufe: 1 @@ -34361,7 +34361,7 @@ tipp: Lies das Alter mit \`int alter = scanner.nextInt();\` ein. tipp: \`if (alter >= 18) { … } else { … }\`, in jedem Zweig ein \`System.out.println(…)\`. lösung: aufgabe-volljaehrig-loesung.visustruct ::: -`,Zy=`--- +`,My=`--- titel: Würfeln mit MVC nach: 40 stufe: 3 @@ -34399,7 +34399,7 @@ Zusatz: Ein Knopf **Neues Spiel** setzt alles auf Anfang. Die Methode dafür geh ::: ludwig Denk an die Regel aus Lektion 40: Im Model steht kein einziges \`JLabel\`. Wenn du beim Würfeln die Schriftgröße änderst, gehört das in die View. ::: -`,My=`--- +`,Ly=`--- titel: Zahl verdoppeln nach: 2 stufe: 1 @@ -34415,7 +34415,7 @@ tipp: Verdoppeln heißt: mal 2. Das Ergebnis speicherst du wieder in derselben V tipp: \`zahl = zahl * 2\` rechnet mit dem alten Wert und speichert das Ergebnis wieder in \`zahl\`. Text und Variable verbindest du mit \`+\`. lösung: aufgabe-verdoppeln-loesung.visustruct ::: -`,Ly=`--- +`,Wy=`--- titel: Age in a subprogram nach: 18 stufe: 2 @@ -34436,7 +34436,7 @@ tipp: Open the exercise in the editor and build the main program there with the lösung: aufgabe-alter-haupt-loesung.visustruct unterprogramm: aufgabe-alter-unterprogramm-loesung.visustruct ::: -`,Wy=`--- +`,Ey=`--- titel: Ball throw results nach: 25 stufe: 2 @@ -34465,7 +34465,7 @@ tipp: You need four variables before the loop: the count, the sum as a \`double\ tipp: In the loop: \`String[] parts = line.split(";");\` and \`int distance = Integer.parseInt(parts[1]);\`. If \`distance > bestDistance\`, remember the distance and the name. To save: \`PrintWriter out = new PrintWriter("winner.txt");\`, \`out.println(…)\` and \`out.close();\`. lösung: aufgabe-ballwurf-loesung.visustruct ::: -`,Ey=`--- +`,Ny=`--- titel: Leaderboard nach: 19 stufe: 2 @@ -34499,7 +34499,7 @@ tipp: Read each number into a variable first and then put it into the array: \`i tipp: The swap needs a temporary variable in Java too: \`int temp = points[i]; points[i] = points[i + 1]; points[i + 1] = temp;\`. lösung: aufgabe-bestenliste-loesung.visustruct ::: -`,Ny=`--- +`,Fy=`--- titel: Binary number nach: 11 stufe: 3 @@ -34541,7 +34541,7 @@ tipp: Start with \`String binary = "";\`. The loop runs with \`while (number > 0 tipp: In the body: \`int remainder = number % 2;\`, then \`binary = remainder + binary;\` and \`number = number / 2;\`. Because \`binary\` is a String, \`+\` puts the remainder at the front. lösung: aufgabe-binaer-loesung.visustruct ::: -`,Fy=`--- +`,Jy=`--- titel: Caesar cipher nach: 17 stufe: 3 @@ -34675,7 +34675,7 @@ lösung: aufgabe-caesar-entschluesseln-loesung.visustruct ::: angeberwissen Unfortunately, Caesar is not secure. There are only 25 keys, and you can try them all in a few minutes. It is even quicker with a trick: in English, E is the most common letter. If H is the most common letter in the secret text, the key was probably 3. On the internet there is also ROT13, which is Caesar with the key 13. Applying ROT13 twice gives you the plain text again, because 13 + 13 = 26. ::: -`,Jy=`--- +`,Ry=`--- titel: Collatz sequence nach: 11 stufe: 2 @@ -34719,7 +34719,7 @@ lösung: aufgabe-collatz-loesung.visustruct ::: angeberwissen This task could make you rich! The mathematician Paul Erdős offered 500 dollars for a proof. In 2021 the Japanese company Bakuage added quite a bit more: 120 million yen, about a million dollars at the time, for a proof or a counterexample. Nobody has collected the money yet. By the way, the puzzle was invented by the German mathematician Lothar Collatz in 1937. I am going to start calculating right now; that much money buys a lot of hay. ::: -`,Ry=`--- +`,Gy=`--- titel: Unit converter nach: 35 stufe: 2 @@ -34768,7 +34768,7 @@ Extra: a fourth button **in feet** converts to the imperial unit. One foot is 0. ::: ludwig Tick **Real Java (with Swing)** in the [gear](#zeige-einstellungen). For "abc" in the field, every listener needs a try/catch with \`NumberFormatException\`, just like the calculator. ::: -`,Gy=`--- +`,Hy=`--- titel: Fibonacci numbers nach: 13 stufe: 2 @@ -34822,7 +34822,7 @@ lösung: aufgabe-fibonacci-loesung.visustruct - [ ] The order does not matter > The other way round, number1 and number2 would have the same value afterwards. Just like swapping: first save, then overwrite. ::: -`,Hy=`--- +`,Vy=`--- titel: Even or odd nach: 8 stufe: 1 @@ -34858,7 +34858,7 @@ tipp: Read a number with \`int number = scanner.nextInt();\`. Ask with \`System. tipp: \`if (number % 2 == 0) { … } else { … }\`. The output is \`System.out.println(number + " is even");\`. lösung: aufgabe-gerade-loesung.visustruct ::: -`,Vy=`--- +`,Qy=`--- titel: Sales tax nach: 6 stufe: 1 @@ -34899,7 +34899,7 @@ lösung: aufgabe-mehrwertsteuer-loesung.visustruct - [ ] Because decimal numbers can only be stored as constants > A constant keeps its value. If the tax rate ever changes, you only change the one line with \`const\`. ::: -`,Qy=`--- +`,qy=`--- titel: Grade average nach: 13 stufe: 2 @@ -34934,7 +34934,7 @@ tipp: \`for (int i = 0; i < count; i++)\` reads exactly as many grades as were g tipp: Divide with \`double average = sum * 1.0 / count;\`. Without \`* 1.0\`, Java divides two \`int\` values as whole numbers, and 1.5 becomes 1. lösung: aufgabe-durchschnitt-loesung.visustruct ::: -`,qy=`--- +`,Uy=`--- titel: Check the PIN nach: 12 stufe: 2 @@ -34974,7 +34974,7 @@ tipp: \`do { … } while (…);\` asks at least once. There is a semicolon after tipp: Create \`int pin = 0;\` and \`int attempts = 0;\` first. In the loop: \`int entered = scanner.nextInt();\`, \`pin = entered;\` and \`attempts++;\`. The condition is \`pin != 1234 && attempts < 3\`. lösung: aufgabe-pin-java-loesung.visustruct ::: -`,Uy=`--- +`,$y=`--- titel: Battleship nach: 16 stufe: 2 @@ -35011,7 +35011,7 @@ tipp: Two \`for\` loops inside each other: the row outside, the column inside, b tipp: \`if (sea[row][column]) { System.out.println(columns[column] + (row + 1)); }\`. The brackets around \`row + 1\` make Java calculate first. lösung: aufgabe-schiffe-loesung.visustruct ::: -`,$y=`--- +`,Yy=`--- titel: Menu nach: 10 stufe: 1 @@ -35047,7 +35047,7 @@ tipp: In Java this is a switch: \`switch (pick) { … }\`. tipp: Every case looks like this: \`case 1 -> { System.out.println("…"); }\`. All other numbers go to \`default -> { … }\`. lösung: aufgabe-speisekarte-loesung.visustruct ::: -`,Yy=`--- +`,Xy=`--- titel: Add up nach: 2 stufe: 1 @@ -35063,7 +35063,7 @@ tipp: You need three variables: two for the numbers and one for the result. tipp: You set a variable with a statement such as \`int number1 = 4\`. For the output you write the name of the variable without quotation marks. lösung: aufgabe-summe-loesung.visustruct ::: -`,Xy=`--- +`,Ky=`--- titel: Draw for board duty nach: 15 stufe: 2 @@ -35100,7 +35100,7 @@ lösung: aufgabe-tafeldienst-loesung.visustruct ::: > With \`int pick = (int) (Math.random() * 5) + 1\` you can also let chance draw the number. But for the automatic check we need a fixed input. -`,Ky=`--- +`,ev=`--- titel: Calculator nach: 10 stufe: 2 @@ -35136,7 +35136,7 @@ tipp: The operator is a text. Read it with \`String operator = scanner.next();\` tipp: \`switch (operator) { case "+" -> { … } … default -> { … } }\`. With texts, the cases are in quotation marks. lösung: aufgabe-rechner-loesung.visustruct ::: -`,ev=`--- +`,tv=`--- titel: Rental menu nach: 18 stufe: 2 @@ -35171,7 +35171,7 @@ tipp: \`while (true) { … }\` runs forever until a \`break;\` comes. tipp: In Java, use \`if\`/\`else if\` here instead of \`switch\`: a \`break;\` inside a \`switch\` only leaves the \`switch\`, not the loop. \`if (choice == 0) { System.out.println("Bye"); break; } else if (choice == 1) { … }\`. lösung: aufgabe-verleih-java-loesung.visustruct ::: -`,tv=`--- +`,nv=`--- titel: Vocabulary trainer nach: 27 stufe: 3 @@ -35206,7 +35206,7 @@ tipp: Skip the header line. In the loop, split every line with \`split(";")\`: \ tipp: Compare texts with \`answer.equals(parts[1])\`, not with \`==\`. Count along with \`int right = 0;\` and \`int count = 0;\` before the loop. lösung: aufgabe-vokabeln-loesung.visustruct ::: -`,nv=`--- +`,iv=`--- titel: Adult? nach: 8 stufe: 1 @@ -35242,7 +35242,7 @@ tipp: Read the age with \`int age = scanner.nextInt();\`. tipp: \`if (age >= 18) { … } else { … }\`, with a \`System.out.println(…)\` in each branch. lösung: aufgabe-volljaehrig-loesung.visustruct ::: -`,iv=`--- +`,av=`--- titel: Rolling dice with MVC nach: 40 stufe: 3 @@ -35280,7 +35280,7 @@ Extra: a button **New game** resets everything. The method for that belongs in t ::: ludwig Remember the rule from lesson 40: there isn't a single \`JLabel\` in the model. If you change the font size when rolling, that belongs in the view. ::: -`,av=`--- +`,sv=`--- titel: Double a number nach: 2 stufe: 1 @@ -35296,7 +35296,7 @@ tipp: Doubling means: times 2. You store the result in the same variable again. tipp: \`number = number * 2\` calculates with the old value and stores the result in \`number\` again. You join text and a variable with \`+\`. lösung: aufgabe-verdoppeln-loesung.visustruct ::: -`,sv=`--- +`,rv=`--- titel: Idade num subprograma nach: 18 stufe: 2 @@ -35317,7 +35317,7 @@ tipp: Abre o exercício no editor e constrói lá o programa principal com a cha lösung: aufgabe-alter-haupt-loesung.visustruct unterprogramm: aufgabe-alter-unterprogramm-loesung.visustruct ::: -`,rv=`--- +`,ov=`--- titel: Avaliar o lançamento da bola nach: 25 stufe: 2 @@ -35346,7 +35346,7 @@ tipp: Precisas de quatro variáveis antes do ciclo: a contagem, a soma como \`do tipp: No ciclo: \`String[] partes = linha.split(";");\` e \`int distancia = Integer.parseInt(partes[1]);\`. Se \`distancia > melhorDistancia\`, guarda a distância e o nome. Para guardar: \`PrintWriter saida = new PrintWriter("vencedor.txt");\`, \`saida.println(…)\` e \`saida.close();\`. lösung: aufgabe-ballwurf-loesung.visustruct ::: -`,ov=`--- +`,lv=`--- titel: Classificação nach: 19 stufe: 2 @@ -35380,7 +35380,7 @@ tipp: Lê cada número primeiro para uma variável e depois põe-no no array: \` tipp: A troca também precisa de uma variável auxiliar em Java: \`int aux = pontos[i]; pontos[i] = pontos[i + 1]; pontos[i + 1] = aux;\`. lösung: aufgabe-bestenliste-loesung.visustruct ::: -`,lv=`--- +`,uv=`--- titel: Número binário nach: 11 stufe: 3 @@ -35422,7 +35422,7 @@ tipp: Começa com \`String binario = "";\`. O ciclo corre com \`while (numero > tipp: No corpo: \`int resto = numero % 2;\`, depois \`binario = resto + binario;\` e \`numero = numero / 2;\`. Como \`binario\` é uma String, o \`+\` põe o resto à frente. lösung: aufgabe-binaer-loesung.visustruct ::: -`,uv=`--- +`,mv=`--- titel: Cifra de César nach: 17 stufe: 3 @@ -35556,7 +35556,7 @@ lösung: aufgabe-caesar-entschluesseln-loesung.visustruct ::: angeberwissen Infelizmente, a cifra de César não é segura. Há apenas 25 chaves, e é possível experimentá-las todas em poucos minutos. Com um truque é ainda mais rápido: em português, as letras mais frequentes são o A e o E. Se no texto cifrado o H aparecer muitas vezes, a chave foi provavelmente 3. Na internet existe ainda o ROT13, que é a cifra de César com a chave 13. Aplicar ROT13 duas vezes devolve o texto simples, porque 13 + 13 = 26. ::: -`,mv=`--- +`,cv=`--- titel: Sequência de Collatz nach: 11 stufe: 2 @@ -35600,7 +35600,7 @@ lösung: aufgabe-collatz-loesung.visustruct ::: angeberwissen Esta tarefa pode tornar-te rico! O matemático Paul Erdős ofereceu 500 dólares por uma demonstração. Em 2021, a empresa japonesa Bakuage juntou bastante mais: 120 milhões de ienes, na altura cerca de um milhão de dólares, por uma demonstração ou um contraexemplo. Ainda ninguém foi buscar o dinheiro. Já agora, o enigma foi inventado pelo matemático alemão Lothar Collatz em 1937. Vou já começar a fazer contas; com tanto dinheiro compra-se muito feno. ::: -`,cv=`--- +`,dv=`--- titel: Conversor de unidades nach: 35 stufe: 2 @@ -35649,7 +35649,7 @@ Extra: um quarto botão **em pés** converte para a unidade inglesa. Um pé são ::: ludwig Marca **Java verdadeiro (com Swing)** na [roda dentada](#zeige-einstellungen). Para "abc" no campo, cada ouvinte precisa de um try/catch com \`NumberFormatException\`, tal como na calculadora. ::: -`,dv=`--- +`,hv=`--- titel: Números de Fibonacci nach: 13 stufe: 2 @@ -35703,7 +35703,7 @@ lösung: aufgabe-fibonacci-loesung.visustruct - [ ] A ordem não importa > Ao contrário, numero1 e numero2 ficariam depois com o mesmo valor. Tal como na troca: primeiro guardar, depois substituir. ::: -`,hv=`--- +`,gv=`--- titel: Par ou ímpar nach: 8 stufe: 1 @@ -35739,7 +35739,7 @@ tipp: Lês um número com \`int numero = scanner.nextInt();\`. Antes disso pergu tipp: \`if (numero % 2 == 0) { … } else { … }\`. A saída é \`System.out.println(numero + " é par");\`. lösung: aufgabe-gerade-loesung.visustruct ::: -`,gv=`--- +`,pv=`--- titel: IVA nach: 6 stufe: 1 @@ -35780,7 +35780,7 @@ lösung: aufgabe-mehrwertsteuer-loesung.visustruct - [ ] Porque os números decimais só podem ser guardados como constantes > Uma constante mantém o seu valor. Se a taxa alguma vez mudar, só alteras a linha com \`const\`. ::: -`,pv=`--- +`,fv=`--- titel: Média das notas nach: 13 stufe: 2 @@ -35815,7 +35815,7 @@ tipp: \`for (int i = 0; i < quantidade; i++)\` lê exatamente as notas que foram tipp: Divide com \`double media = soma * 1.0 / quantidade;\`. Sem \`* 1.0\`, o Java divide dois \`int\` como inteiros, e 1.5 passa a 1. lösung: aufgabe-durchschnitt-loesung.visustruct ::: -`,fv=`--- +`,xv=`--- titel: Verificar o PIN nach: 12 stufe: 2 @@ -35855,7 +35855,7 @@ tipp: \`do { … } while (…);\` pergunta pelo menos uma vez. Depois do \`while tipp: Cria antes \`int pin = 0;\` e \`int tentativas = 0;\`. No ciclo: \`int entrada = scanner.nextInt();\`, \`pin = entrada;\` e \`tentativas++;\`. A condição é \`pin != 1234 && tentativas < 3\`. lösung: aufgabe-pin-java-loesung.visustruct ::: -`,xv=`--- +`,bv=`--- titel: Batalha naval nach: 16 stufe: 2 @@ -35892,7 +35892,7 @@ tipp: Dois ciclos \`for\` um dentro do outro: fora a fila, dentro a coluna, ambo tipp: \`if (mar[fila][coluna]) { System.out.println(colunas[coluna] + (fila + 1)); }\`. Os parênteses à volta de \`fila + 1\` fazem o Java calcular primeiro. lösung: aufgabe-schiffe-loesung.visustruct ::: -`,bv=`--- +`,yv=`--- titel: Ementa nach: 10 stufe: 1 @@ -35928,7 +35928,7 @@ tipp: Em Java isto é uma seleção com \`switch (prato) { … }\`. tipp: Cada caso é assim: \`case 1 -> { System.out.println("…"); }\`. Para todos os outros números há \`default -> { … }\`. lösung: aufgabe-speisekarte-loesung.visustruct ::: -`,yv=`--- +`,vv=`--- titel: Somar nach: 2 stufe: 1 @@ -35944,7 +35944,7 @@ tipp: Precisas de três variáveis: duas para os números e uma para o resultado tipp: Defines uma variável com uma instrução como \`int numero1 = 4\`. Na saída escreves o nome da variável sem aspas. lösung: aufgabe-summe-loesung.visustruct ::: -`,vv=`--- +`,wv=`--- titel: Sortear quem limpa o quadro nach: 15 stufe: 2 @@ -35981,7 +35981,7 @@ lösung: aufgabe-tafeldienst-loesung.visustruct ::: > Com \`int sorteado = (int) (Math.random() * 5) + 1\` também podes deixar o acaso sortear o número. Mas para a verificação automática precisamos de uma entrada fixa. -`,wv=`--- +`,zv=`--- titel: Calculadora nach: 10 stufe: 2 @@ -36017,7 +36017,7 @@ tipp: O operador é um texto. Lês com \`String operador = scanner.next();\`. tipp: \`switch (operador) { case "+" -> { … } … default -> { … } }\`. Com textos, os casos ficam entre aspas. lösung: aufgabe-rechner-loesung.visustruct ::: -`,zv=`--- +`,Iv=`--- titel: Menu de aluguer nach: 18 stufe: 2 @@ -36052,7 +36052,7 @@ tipp: \`while (true) { … }\` corre sem fim até aparecer um \`break;\`. tipp: Em Java usa aqui \`if\`/\`else if\` em vez de \`switch\`: um \`break;\` dentro de um \`switch\` só sai do \`switch\`, não do ciclo. \`if (escolha == 0) { System.out.println("Adeus"); break; } else if (escolha == 1) { … }\`. lösung: aufgabe-verleih-java-loesung.visustruct ::: -`,Iv=`--- +`,kv=`--- titel: Treino de vocabulário nach: 27 stufe: 3 @@ -36087,7 +36087,7 @@ tipp: Salta a linha de cabeçalho. No ciclo, divide cada linha com \`split(";")\ tipp: Os textos comparam-se com \`resposta.equals(partes[1])\`, não com \`==\`. Conta com \`int certas = 0;\` e \`int contagem = 0;\` antes do ciclo. lösung: aufgabe-vokabeln-loesung.visustruct ::: -`,kv=`--- +`,Sv=`--- titel: Maior de idade? nach: 8 stufe: 1 @@ -36123,7 +36123,7 @@ tipp: Lê a idade com \`int idade = scanner.nextInt();\`. tipp: \`if (idade >= 18) { … } else { … }\`, com um \`System.out.println(…)\` em cada ramo. lösung: aufgabe-volljaehrig-loesung.visustruct ::: -`,Sv=`--- +`,_v=`--- titel: Lançar o dado com MVC nach: 40 stufe: 3 @@ -36161,7 +36161,7 @@ Extra: um botão **Novo jogo** põe tudo no início. O método para isso pertenc ::: ludwig Lembra-te da regra da lição 40: no model não há um único \`JLabel\`. Se mudares o tamanho da letra ao lançar, isso pertence à view. ::: -`,_v=`--- +`,Tv=`--- titel: Duplicar um número nach: 2 stufe: 1 @@ -36177,7 +36177,7 @@ tipp: Duplicar quer dizer: vezes 2. Guardas o resultado outra vez na mesma vari tipp: \`numero = numero * 2\` calcula com o valor antigo e volta a guardar o resultado em \`numero\`. Juntas texto e uma variável com \`+\`. lösung: aufgabe-verdoppeln-loesung.visustruct ::: -`,Tv=`--- +`,Ov=`--- titel: Der mBot2 bereich: VisuBot kurz: Lerne den Roboter kennen, den du gleich programmierst. @@ -36492,7 +36492,7 @@ Ist der mBot2 verbunden, erscheint unter der Welt **🔧 mBot2 testen**. Klapp e - Ich kann den echten mBot2 per USB-C verbinden und wieder trennen. → Den echten mBot2 verbinden - Ich kann prüfen, ob alle Sensoren und Aktoren funktionieren. → Den mBot2 testen ::: -`,Ov=`--- +`,Av=`--- titel: Das Quadrat bereich: VisuBot kurz: Vom langen Struktogramm zur dreifach verschachtelten Schleife. @@ -36616,7 +36616,7 @@ Das Programm bleibt gespeichert, auch wenn du den mBot2 aus- und wieder einschal - Ich kann drei Schleifen ineinander schachteln. → Vier Quadrate - Ich kann mein Programm auf den mBot2 übertragen und ohne Kabel mit Taste A starten. → Ohne Kabel fahren ::: -`,Av='---\ntitel: Variablen und Ausgabe\nbereich: VisuBot\nkurz: Werte in Variablen speichern, den mBot2 damit fahren lassen und Ergebnisse ausgeben.\n---\n\n## Eine Variable für die Seite\n\nMit `mbot.forward(30)` fährt der mBot2 30 cm am Stück. Fährst du damit ein Quadrat ohne Schleife, steht die 30 aber viermal im Programm. Soll das Quadrat größer werden, musst du sie an vier Stellen ändern. Besser ist es, die Seitenlänge **einmal** zu speichern und dann überall zu benutzen.\n\nDafür gibt es **Variablen**. Eine Variable ist ein Kästchen mit einem Namen, in dem ein Wert liegt:\n\n```java\nint seite = 30;\nmbot.forward(seite);\n```\n\n- `int` ist der **Datentyp**: eine ganze Zahl.\n- `seite` ist der **Name**. Du darfst ihn selbst wählen.\n- `30` ist der **Wert**. Das `=` legt ihn in das Kästchen.\n\nWo danach `seite` steht, setzt der Computer den Wert ein. `mbot.forward(seite)` fährt also 30 cm.\n\n::: übung vb-variable-seite\ntitel: Quadrat mit Variable\nauftrag: Lege in einer Anweisung die Variable `int seite = 30` an. Danach fährt der mBot2 ein Quadrat: viermal `seite` Zentimeter vor und nach rechts drehen.\nfahrt: 4 x (forward 30, turnRight)\nbraucht: forSchleife\ntipp: Die erste Anweisung ist `int seite = 30`. Darunter kommt eine For-Schleife, die viermal läuft.\ntipp: In der Schleife stehen `mbot.forward(seite)` und `mbot.turnRight()`.\nlösung: vb-variable-seite-loesung.visustruct\n:::\n\n> Ändere jetzt nur die 30 in eine 60 und starte die Simulation. Das ganze Quadrat wird doppelt so groß.\n\n## Welche Datentypen gibt es?\n\nJede Variable hat einen Datentyp. Er legt fest, welche Werte hineinpassen:\n\n| Datentyp | Was passt hinein? | Beispiel |\n|---|---|---|\n| `int` | ganze Zahlen | `int seite = 30;` |\n| `double` | Kommazahlen, mit Punkt geschrieben | `double tempo = 1.5;` |\n| `String` | Text in Anführungszeichen | `String name = "Visu";` |\n| `boolean` | wahr oder falsch | `boolean fertig = false;` |\n\nMit Variablen kannst du auch rechnen: `int strecke = 4 * seite;` rechnet die ganze Strecke des Quadrats aus.\n\n## Jetzt in Java: Rechteck\n\nEin Rechteck hat zwei verschiedene Seiten. Also brauchst du zwei Variablen.\n\n::: übung vb-java-rechteck\ntitel: Rechteck mit Variablen\ncode: java\nauftrag: Schreibe in Java: Lege `int laenge = 60` und `int breite = 30` an. Der mBot2 fährt ein Rechteck: Länge, rechts drehen, Breite, rechts drehen, und das zweimal.\nfahrt: 2 x (forward 60, turnRight, forward 30, turnRight)\nbraucht: forSchleife\ntipp: Zwei Variablen oben: `int laenge = 60;` und `int breite = 30;`. Darunter eine For-Schleife, die zweimal läuft.\ntipp: In der Schleife: `mbot.forward(laenge);`, `mbot.turnRight();`, `mbot.forward(breite);`, `mbot.turnRight();`\nlösung: vb-java-rechteck-loesung.visustruct\n:::\n\n## Jetzt ohne Roboter: Ausgabe\n\nNicht jedes Ergebnis muss der Roboter fahren. Mit `System.out.println(…)` gibt ein Java-Programm Text in der [Konsole](#zeige-konsole) aus. Mit `+` hängst du Text und Werte aneinander:\n\n```java\nint seite = 30;\nint strecke = 4 * seite;\nSystem.out.println("Strecke: " + strecke + " cm");\n```\n\nDie Konsole zeigt dann **Strecke: 120 cm**.\n\n::: übung vb-ohne-strecke\ntitel: Wie weit fährt er?\ncode: java\nauftrag: Ein Rechteck ist 60 cm lang und 30 cm breit. Lege `laenge` und `breite` als Variablen an. Berechne in einer Variablen `strecke`, wie weit der mBot2 einmal ganz herum fährt, und gib **Strecke: 180 cm** aus. Ganz ohne `mbot`!\ntest: - -> Strecke: 180 cm\nbraucht: anweisung\ntipp: Einmal herum sind zweimal die Länge und zweimal die Breite.\ntipp: `int strecke = 2 * laenge + 2 * breite;` und dann `System.out.println("Strecke: " + strecke + " cm");`\nlösung: vb-ohne-strecke-loesung.visustruct\n:::\n\n::: quiz\n? Was fährt `mbot.forward(seite)`, wenn vorher `int seite = 40;` steht?\n- [ ] 4 cm\n- [x] 40 cm\n- [ ] gar nichts, `seite` ist kein Befehl\n> Wo `seite` steht, setzt Java den Wert 40 ein.\n? Welcher Datentyp passt zu `"Visu"`?\n- [ ] `int`\n- [ ] `double`\n- [x] `String`\n> Text in Anführungszeichen ist ein `String`.\n? Was gibt `System.out.println("Seite: " + 30);` aus?\n- [x] Seite: 30\n- [ ] "Seite: " + 30\n- [ ] 30\n> Das `+` hängt den Text und die Zahl aneinander.\n:::\n\n::: checkliste\n- Ich kann eine Variable anlegen und benutzen. → Eine Variable für die Seite\n- Ich kenne die Datentypen `int`, `double`, `String` und `boolean`. → Welche Datentypen gibt es?\n- Ich kann mit zwei Variablen ein Rechteck in Java fahren. → Jetzt in Java: Rechteck\n- Ich kann mit `System.out.println` etwas ausgeben. → Jetzt ohne Roboter: Ausgabe\n:::\n',Pv=`--- +`,Pv='---\ntitel: Variablen und Ausgabe\nbereich: VisuBot\nkurz: Werte in Variablen speichern, den mBot2 damit fahren lassen und Ergebnisse ausgeben.\n---\n\n## Eine Variable für die Seite\n\nMit `mbot.forward(30)` fährt der mBot2 30 cm am Stück. Fährst du damit ein Quadrat ohne Schleife, steht die 30 aber viermal im Programm. Soll das Quadrat größer werden, musst du sie an vier Stellen ändern. Besser ist es, die Seitenlänge **einmal** zu speichern und dann überall zu benutzen.\n\nDafür gibt es **Variablen**. Eine Variable ist ein Kästchen mit einem Namen, in dem ein Wert liegt:\n\n```java\nint seite = 30;\nmbot.forward(seite);\n```\n\n- `int` ist der **Datentyp**: eine ganze Zahl.\n- `seite` ist der **Name**. Du darfst ihn selbst wählen.\n- `30` ist der **Wert**. Das `=` legt ihn in das Kästchen.\n\nWo danach `seite` steht, setzt der Computer den Wert ein. `mbot.forward(seite)` fährt also 30 cm.\n\n::: übung vb-variable-seite\ntitel: Quadrat mit Variable\nauftrag: Lege in einer Anweisung die Variable `int seite = 30` an. Danach fährt der mBot2 ein Quadrat: viermal `seite` Zentimeter vor und nach rechts drehen.\nfahrt: 4 x (forward 30, turnRight)\nbraucht: forSchleife\ntipp: Die erste Anweisung ist `int seite = 30`. Darunter kommt eine For-Schleife, die viermal läuft.\ntipp: In der Schleife stehen `mbot.forward(seite)` und `mbot.turnRight()`.\nlösung: vb-variable-seite-loesung.visustruct\n:::\n\n> Ändere jetzt nur die 30 in eine 60 und starte die Simulation. Das ganze Quadrat wird doppelt so groß.\n\n## Welche Datentypen gibt es?\n\nJede Variable hat einen Datentyp. Er legt fest, welche Werte hineinpassen:\n\n| Datentyp | Was passt hinein? | Beispiel |\n|---|---|---|\n| `int` | ganze Zahlen | `int seite = 30;` |\n| `double` | Kommazahlen, mit Punkt geschrieben | `double tempo = 1.5;` |\n| `String` | Text in Anführungszeichen | `String name = "Visu";` |\n| `boolean` | wahr oder falsch | `boolean fertig = false;` |\n\nMit Variablen kannst du auch rechnen: `int strecke = 4 * seite;` rechnet die ganze Strecke des Quadrats aus.\n\n## Jetzt in Java: Rechteck\n\nEin Rechteck hat zwei verschiedene Seiten. Also brauchst du zwei Variablen.\n\n::: übung vb-java-rechteck\ntitel: Rechteck mit Variablen\ncode: java\nauftrag: Schreibe in Java: Lege `int laenge = 60` und `int breite = 30` an. Der mBot2 fährt ein Rechteck: Länge, rechts drehen, Breite, rechts drehen, und das zweimal.\nfahrt: 2 x (forward 60, turnRight, forward 30, turnRight)\nbraucht: forSchleife\ntipp: Zwei Variablen oben: `int laenge = 60;` und `int breite = 30;`. Darunter eine For-Schleife, die zweimal läuft.\ntipp: In der Schleife: `mbot.forward(laenge);`, `mbot.turnRight();`, `mbot.forward(breite);`, `mbot.turnRight();`\nlösung: vb-java-rechteck-loesung.visustruct\n:::\n\n## Jetzt ohne Roboter: Ausgabe\n\nNicht jedes Ergebnis muss der Roboter fahren. Mit `System.out.println(…)` gibt ein Java-Programm Text in der [Konsole](#zeige-konsole) aus. Mit `+` hängst du Text und Werte aneinander:\n\n```java\nint seite = 30;\nint strecke = 4 * seite;\nSystem.out.println("Strecke: " + strecke + " cm");\n```\n\nDie Konsole zeigt dann **Strecke: 120 cm**.\n\n::: übung vb-ohne-strecke\ntitel: Wie weit fährt er?\ncode: java\nauftrag: Ein Rechteck ist 60 cm lang und 30 cm breit. Lege `laenge` und `breite` als Variablen an. Berechne in einer Variablen `strecke`, wie weit der mBot2 einmal ganz herum fährt, und gib **Strecke: 180 cm** aus. Ganz ohne `mbot`!\ntest: - -> Strecke: 180 cm\nbraucht: anweisung\ntipp: Einmal herum sind zweimal die Länge und zweimal die Breite.\ntipp: `int strecke = 2 * laenge + 2 * breite;` und dann `System.out.println("Strecke: " + strecke + " cm");`\nlösung: vb-ohne-strecke-loesung.visustruct\n:::\n\n::: quiz\n? Was fährt `mbot.forward(seite)`, wenn vorher `int seite = 40;` steht?\n- [ ] 4 cm\n- [x] 40 cm\n- [ ] gar nichts, `seite` ist kein Befehl\n> Wo `seite` steht, setzt Java den Wert 40 ein.\n? Welcher Datentyp passt zu `"Visu"`?\n- [ ] `int`\n- [ ] `double`\n- [x] `String`\n> Text in Anführungszeichen ist ein `String`.\n? Was gibt `System.out.println("Seite: " + 30);` aus?\n- [x] Seite: 30\n- [ ] "Seite: " + 30\n- [ ] 30\n> Das `+` hängt den Text und die Zahl aneinander.\n:::\n\n::: checkliste\n- Ich kann eine Variable anlegen und benutzen. → Eine Variable für die Seite\n- Ich kenne die Datentypen `int`, `double`, `String` und `boolean`. → Welche Datentypen gibt es?\n- Ich kann mit zwei Variablen ein Rechteck in Java fahren. → Jetzt in Java: Rechteck\n- Ich kann mit `System.out.println` etwas ausgeben. → Jetzt ohne Roboter: Ausgabe\n:::\n',jv=`--- titel: Sensoren abfragen bereich: VisuBot kurz: Der mBot2 misst etwas, und dein Programm entscheidet. @@ -36685,7 +36685,7 @@ lösung: vb-wand-vorn-loesung.visustruct - Ich kenne den Unterschied zwischen Befehl und Sensor. → Befehle und Sensoren - Ich kann einen Sensor in eine Bedingung einbauen. → Wand vorn? ::: -`,jv=`--- +`,Cv=`--- titel: Bis zur Wand bereich: VisuBot kurz: Der mBot2 misst den Abstand und hält rechtzeitig an. @@ -36760,7 +36760,7 @@ lösung: vb-bis-ziel-loesung.visustruct - Ich weiß, wann ich eine While-Schleife statt einer For-Schleife nehme. → Drei Welten, ein Programm - Ich kann mit dem Liniensensor ein Ziel finden. → Bis zum Ziel ::: -`,Cv=`--- +`,Bv=`--- titel: Der Ultraschallsensor bereich: VisuBot kurz: Abstand messen, Abstand halten und das Ganze in Java. @@ -36846,7 +36846,7 @@ lösung: vb-java-wand-piep-loesung.visustruct - Ich kann zwei Verzweigungen ineinander bauen. → Abstand halten im Struktogramm - Ich kann eine While-Schleife mit dem Abstand in Java schreiben. → Jetzt in Java ::: -`,Bv=`--- +`,Dv=`--- titel: Der Liniensensor bereich: VisuBot kurz: Dunkle Linien auf dem Boden erkennen und nicht vom Tisch fallen. @@ -36928,7 +36928,7 @@ lösung: vb-java-rand-loesung.visustruct - Ich kann bis zu einer Linie fahren. → Am Rand umkehren im Struktogramm - Ich kann in Java mit einer Variable Schritte zählen. → Jetzt in Java: hin und zurück ::: -`,Dv=`--- +`,Zv=`--- titel: Farben erkennen bereich: VisuBot kurz: Der Quad-RGB-Sensor sagt, auf welcher Farbe der mBot2 steht. @@ -37006,7 +37006,7 @@ lösung: vb-java-blau-gruen-loesung.visustruct - Ich kann mit \`!\` eine Bedingung umdrehen. → Fahre bis Rot im Struktogramm - Ich kann eine Verzweigung in eine Schleife schreiben. → Jetzt in Java: bei Grün piepen ::: -`,Zv=`--- +`,Mv=`--- titel: Fallauswahl mit Farben bereich: VisuBot kurz: Je nach Farbe oder Linie etwas anderes tun, mit einer Fallauswahl statt vieler Verzweigungen. @@ -37116,7 +37116,7 @@ lösung: vb-ohne-noten-loesung.visustruct - Ich kann eine Fallauswahl mit Zahlen in Java schreiben. → Jetzt in Java: Linienmuster - Ich kann eine Zahl einlesen und je nach Wert etwas ausgeben. → Jetzt ohne Roboter: Noten in Worten ::: -`,Mv=`--- +`,Lv=`--- titel: Tasten und Joystick bereich: VisuBot kurz: Der mBot2 wartet auf dich und lässt sich fernsteuern. @@ -37193,7 +37193,7 @@ lösung: vb-java-joystick-loesung.visustruct - Ich kann auf eine Taste warten. → Warten auf Taste A im Struktogramm - Ich kann den mBot2 mit dem Joystick steuern. → Jetzt in Java: Fernsteuerung ::: -`,Lv=`--- +`,Wv=`--- titel: Der Lichtsensor bereich: VisuBot kurz: Hell oder dunkel? Der mBot2 wird zum Nachtlicht. @@ -37261,7 +37261,7 @@ lösung: vb-java-nachtlicht-ton-loesung.visustruct - Ich kann mit einer Verzweigung die LEDs schalten. → Nachtlicht im Struktogramm - Ich kann mehrere Befehle in einen Zweig schreiben. → Jetzt in Java: Nachtlicht mit Ton ::: -`,Wv=`--- +`,Ev=`--- titel: Das Mikrofon bereich: VisuBot kurz: Klatschen zum Losfahren und eine Lärmampel für das Klassenzimmer. @@ -37327,7 +37327,7 @@ Lautstärke misst man eigentlich in **Dezibel** (dB). Flüstern hat etwa 30 dB, - Ich kann warten, bis etwas passiert. → Klatschen zum Losfahren im Struktogramm - Ich kann eine Lärmampel in Java schreiben. → Jetzt in Java: Lärmampel ::: -`,Ev=`--- +`,Nv=`--- titel: Der Lagesensor bereich: VisuBot kurz: Neigung messen und Schütteln erkennen. @@ -37401,7 +37401,7 @@ lösung: vb-java-wasserwaage-loesung.visustruct - Ich kann zwei Bedingungen mit „oder“ verbinden. → Schräglage-Warnung im Struktogramm - Ich kann mehrere Bedingungen mit „und“ verbinden. → Jetzt in Java: Wasserwaage ::: -`,Nv=`--- +`,Fv=`--- titel: Die LEDs bereich: VisuBot kurz: Farben mischen, eine Ampel bauen und blinken lassen. @@ -37476,7 +37476,7 @@ lösung: vb-java-blinken-loesung.visustruct - Ich kann Farben mit Pausen nacheinander zeigen. → Ampel im Struktogramm - Ich kann die LEDs in Java blinken lassen. → Jetzt in Java: Blaulicht ::: -`,Fv=`--- +`,Jv=`--- titel: Einzelne LEDs bereich: VisuBot kurz: Jede der fünf LEDs bekommt ihre eigene Farbe, bis zum Lauflicht. @@ -37551,7 +37551,7 @@ lösung: vb-java-lauflicht-loesung.visustruct - Ich kann einzelne LEDs in verschiedenen Farben leuchten lassen. → Drei Lichter im Struktogramm - Ich kann mit einer Schleife ein Lauflicht bauen. → Jetzt in Java: Lauflicht ::: -`,Jv=`--- +`,Rv=`--- titel: Der Lautsprecher bereich: VisuBot kurz: Töne, eine Tonleiter und eine Sirene. @@ -37642,7 +37642,7 @@ Der mBot2 kann auch fröhlich, traurig oder müde sein. Mit **Gefühl zeigen** ( - Ich kann in Java mit der Zählvariable rechnen. → Jetzt in Java: immer höher - Ich kann den mBot2 ein Gefühl zeigen lassen. → Gefühle zeigen ::: -`,Rv='---\ntitel: Arrays und Melodien\nbereich: VisuBot\nkurz: Viele Werte in einem Array speichern und mit einer Schleife abarbeiten.\n---\n\n## Eine Melodie als Array\n\nEine Melodie ist eine Reihe von Tönen. Statt fünf Variablen `ton1`, `ton2`, … nimmst du ein **Array**. Ein Array ist eine Reihe von Fächern unter **einem** Namen:\n\n```java\nint[] toene = {262, 294, 330, 349, 392};\n```\n\n- `int[]` heißt: ein Array aus ganzen Zahlen.\n- Die Fächer sind von **0** an nummeriert. `toene[0]` ist 262, `toene[4]` ist 392.\n- `toene.length` sagt, wie viele Fächer es gibt, hier 5.\n\nEine For-Schleife mit `i` von 0 bis `toene.length - 1` kommt so an jedes Fach.\n\n::: übung vb-melodie\ntitel: Melodie\nauftrag: Lege ein Array `toene` mit den Tonhöhen 262, 294, 330, 349 und 392 an. Eine For-Schleife spielt sie nacheinander, jeden 300 Millisekunden lang.\nbefehle: playTone 262 300, playTone 294 300, playTone 330 300, playTone 349 300, playTone 392 300\nbraucht: forSchleife\ntipp: `int[] toene = {262, 294, 330, 349, 392}` legt das Array an.\ntipp: Die Schleife läuft von `i = 0` bis `i < toene.length`. Darin steht `mbot.playTone(toene[i], 300)`.\nlösung: vb-melodie-loesung.visustruct\n:::\n\n> Willst du eine andere Melodie, änderst du nur das Array. Die Schleife bleibt gleich.\n\n## Jetzt in Java: Regenbogen\n\nDie fünf LEDs haben die Nummern 0 bis 4, genau wie die Fächer eines Arrays mit fünf Werten. Ein Array kann auch Texte enthalten: `String[] farben = {"rot", "gelb"};`. LED `i` bekommt dann die Farbe aus Fach `i`: `mbot.led(i).setColor(farben[i])`.\n\n::: übung vb-farben\ntitel: Regenbogen\ncode: java\nauftrag: Schreibe in Java: Lege ein Array `farben` mit den Texten `"rot"`, `"gelb"`, `"grün"`, `"blau"` und `"lila"` an. Eine For-Schleife gibt jeder LED `i` die Farbe aus `farben[i]`.\nbefehle: ledColor 0 "rot", ledColor 1 "gelb", ledColor 2 "grün", ledColor 3 "blau", ledColor 4 "lila"\nbraucht: forSchleife\ntipp: `String[] farben = {"rot", "gelb", "grün", "blau", "lila"};` legt das Array an.\ntipp: `for (int i = 0; i < farben.length; i++) { mbot.led(i).setColor(farben[i]); }`\nlösung: vb-farben-loesung.visustruct\n:::\n\n## Jetzt ohne Roboter: Summe der Noten\n\nMit einer Schleife kannst du auch alle Werte eines Arrays zusammenzählen. Dafür brauchst du eine Variable, die mit 0 anfängt und in jedem Durchgang wächst:\n\n```java\nint summe = 0;\nfor (int i = 0; i < noten.length; i++) {\n summe = summe + noten[i];\n}\n```\n\n::: übung vb-ohne-summe\ntitel: Summe der Noten\ncode: java\nauftrag: Lege `int[] noten = {2, 1, 3, 2}` an. Zähle in einer Schleife alle Noten zusammen und gib danach **Summe: 8** und in einer zweiten Zeile **Anzahl: 4** aus. Die Anzahl liefert `noten.length`. Ganz ohne `mbot`!\ntest: - -> Summe: 8 | Anzahl: 4\nbraucht: forSchleife\ntipp: Vor der Schleife `int summe = 0;`, in der Schleife `summe = summe + noten[i];`.\ntipp: Nach der Schleife `System.out.println("Summe: " + summe);` und `System.out.println("Anzahl: " + noten.length);`.\nlösung: vb-ohne-summe-loesung.visustruct\n:::\n\n::: quiz\n? Was ist `toene[1]`, wenn `int[] toene = {262, 294, 330};`?\n- [ ] 262\n- [x] 294\n- [ ] 1\n> Die Fächer zählen ab 0. Fach 1 ist also das zweite.\n? Wie viele Fächer hat `{262, 294, 330}`, also was ist `toene.length`?\n- [ ] 2\n- [x] 3\n- [ ] 330\n> `length` zählt die Fächer, hier drei. Das letzte Fach hat deshalb die Nummer 2.\n:::\n\n::: checkliste\n- Ich kann ein Array anlegen und mit einer Schleife abspielen. → Eine Melodie als Array\n- Ich kann ein Array mit Texten in Java benutzen. → Jetzt in Java: Regenbogen\n- Ich kann alle Werte eines Arrays zusammenzählen. → Jetzt ohne Roboter: Summe der Noten\n:::\n',Gv=`--- +`,Gv='---\ntitel: Arrays und Melodien\nbereich: VisuBot\nkurz: Viele Werte in einem Array speichern und mit einer Schleife abarbeiten.\n---\n\n## Eine Melodie als Array\n\nEine Melodie ist eine Reihe von Tönen. Statt fünf Variablen `ton1`, `ton2`, … nimmst du ein **Array**. Ein Array ist eine Reihe von Fächern unter **einem** Namen:\n\n```java\nint[] toene = {262, 294, 330, 349, 392};\n```\n\n- `int[]` heißt: ein Array aus ganzen Zahlen.\n- Die Fächer sind von **0** an nummeriert. `toene[0]` ist 262, `toene[4]` ist 392.\n- `toene.length` sagt, wie viele Fächer es gibt, hier 5.\n\nEine For-Schleife mit `i` von 0 bis `toene.length - 1` kommt so an jedes Fach.\n\n::: übung vb-melodie\ntitel: Melodie\nauftrag: Lege ein Array `toene` mit den Tonhöhen 262, 294, 330, 349 und 392 an. Eine For-Schleife spielt sie nacheinander, jeden 300 Millisekunden lang.\nbefehle: playTone 262 300, playTone 294 300, playTone 330 300, playTone 349 300, playTone 392 300\nbraucht: forSchleife\ntipp: `int[] toene = {262, 294, 330, 349, 392}` legt das Array an.\ntipp: Die Schleife läuft von `i = 0` bis `i < toene.length`. Darin steht `mbot.playTone(toene[i], 300)`.\nlösung: vb-melodie-loesung.visustruct\n:::\n\n> Willst du eine andere Melodie, änderst du nur das Array. Die Schleife bleibt gleich.\n\n## Jetzt in Java: Regenbogen\n\nDie fünf LEDs haben die Nummern 0 bis 4, genau wie die Fächer eines Arrays mit fünf Werten. Ein Array kann auch Texte enthalten: `String[] farben = {"rot", "gelb"};`. LED `i` bekommt dann die Farbe aus Fach `i`: `mbot.led(i).setColor(farben[i])`.\n\n::: übung vb-farben\ntitel: Regenbogen\ncode: java\nauftrag: Schreibe in Java: Lege ein Array `farben` mit den Texten `"rot"`, `"gelb"`, `"grün"`, `"blau"` und `"lila"` an. Eine For-Schleife gibt jeder LED `i` die Farbe aus `farben[i]`.\nbefehle: ledColor 0 "rot", ledColor 1 "gelb", ledColor 2 "grün", ledColor 3 "blau", ledColor 4 "lila"\nbraucht: forSchleife\ntipp: `String[] farben = {"rot", "gelb", "grün", "blau", "lila"};` legt das Array an.\ntipp: `for (int i = 0; i < farben.length; i++) { mbot.led(i).setColor(farben[i]); }`\nlösung: vb-farben-loesung.visustruct\n:::\n\n## Jetzt ohne Roboter: Summe der Noten\n\nMit einer Schleife kannst du auch alle Werte eines Arrays zusammenzählen. Dafür brauchst du eine Variable, die mit 0 anfängt und in jedem Durchgang wächst:\n\n```java\nint summe = 0;\nfor (int i = 0; i < noten.length; i++) {\n summe = summe + noten[i];\n}\n```\n\n::: übung vb-ohne-summe\ntitel: Summe der Noten\ncode: java\nauftrag: Lege `int[] noten = {2, 1, 3, 2}` an. Zähle in einer Schleife alle Noten zusammen und gib danach **Summe: 8** und in einer zweiten Zeile **Anzahl: 4** aus. Die Anzahl liefert `noten.length`. Ganz ohne `mbot`!\ntest: - -> Summe: 8 | Anzahl: 4\nbraucht: forSchleife\ntipp: Vor der Schleife `int summe = 0;`, in der Schleife `summe = summe + noten[i];`.\ntipp: Nach der Schleife `System.out.println("Summe: " + summe);` und `System.out.println("Anzahl: " + noten.length);`.\nlösung: vb-ohne-summe-loesung.visustruct\n:::\n\n::: quiz\n? Was ist `toene[1]`, wenn `int[] toene = {262, 294, 330};`?\n- [ ] 262\n- [x] 294\n- [ ] 1\n> Die Fächer zählen ab 0. Fach 1 ist also das zweite.\n? Wie viele Fächer hat `{262, 294, 330}`, also was ist `toene.length`?\n- [ ] 2\n- [x] 3\n- [ ] 330\n> `length` zählt die Fächer, hier drei. Das letzte Fach hat deshalb die Nummer 2.\n:::\n\n::: checkliste\n- Ich kann ein Array anlegen und mit einer Schleife abspielen. → Eine Melodie als Array\n- Ich kann ein Array mit Texten in Java benutzen. → Jetzt in Java: Regenbogen\n- Ich kann alle Werte eines Arrays zusammenzählen. → Jetzt ohne Roboter: Summe der Noten\n:::\n',Hv=`--- titel: Der Bildschirm bereich: VisuBot kurz: Text, Zahlen und Messwerte auf dem CyberPi anzeigen. @@ -37717,7 +37717,7 @@ lösung: vb-java-countdown-loesung.visustruct - Ich kann Zahlen und Messwerte anzeigen. → Zahlen und Messwerte - Ich kann einen Countdown in Java schreiben. → Jetzt in Java: Countdown ::: -`,Hv=`--- +`,Vv=`--- titel: Zeichenketten bereich: VisuBot kurz: Mit Texten rechnen, Buchstaben herausholen und auf dem Bildschirm zeigen. @@ -37799,7 +37799,7 @@ lösung: vb-ohne-rueckwaerts-loesung.visustruct - Ich kann Texte und Zahlen mit \`+\` verbinden. → Jetzt in Java: Text und Länge - Ich kann mit \`charAt(…)\` einzelne Zeichen holen. → Jetzt ohne Roboter: rückwärts lesen ::: -`,Vv=`--- +`,Qv=`--- titel: Motoren und Geschwindigkeit bereich: VisuBot kurz: Gas geben, lenken und einer Linie folgen. @@ -37889,7 +37889,7 @@ lösung: vb-java-linienfolger-loesung.visustruct - Ich kann fahren, bis ein Sensor etwas meldet. → Gas geben bis zur Wand im Struktogramm - Ich kann einen Linienfolger in Java schreiben. → Jetzt in Java: Linienfolger ::: -`,Qv=`--- +`,qv=`--- titel: Stoppuhr und Akku bereich: VisuBot kurz: Zeit messen und den Akku im Blick behalten. @@ -37968,7 +37968,7 @@ lösung: vb-java-akku-loesung.visustruct - Ich kann eine bestimmte Zeit lang fahren. → Zwei Sekunden fahren im Struktogramm - Ich kann den Akkustand anzeigen. → Jetzt in Java: Akku-Anzeige ::: -`,qv=`--- +`,Uv=`--- titel: Eigene Methoden bereich: VisuBot kurz: Eigene Befehle mit Parametern und Rückgabewert schreiben und aufrufen. @@ -38058,7 +38058,7 @@ unterprogramm: vb-ohne-quadratzahl-unterprogramm-loesung.visustruct - Ich weiß, wie Methoden in Java aussehen. → Methoden in Java - Ich kann eine Methode mit Rückgabewert schreiben. → Jetzt ohne Roboter: Methode mit Rückgabe ::: -`,Uv=`## 🤖 mBot2-Befehle +`,$v=`## 🤖 mBot2-Befehle Ein Befehl sagt dem mBot2, was er **tun** soll. Jeder Befehl beginnt mit \`mbot.\` und endet mit Klammern. In die Klammern schreibst du oft eine Zahl. @@ -38210,7 +38210,7 @@ Mit **🔌 mBot2** neben „Simulation starten“ verbindest du den echten Robot ### Ohne Kabel fahren Mit **⬆ Übertragen** speicherst du dein Programm fest auf dem mBot2. Danach Kabel ab, mBot2 an den Start und **Taste A** drücken: Er fährt dein Programm allein. Es bleibt gespeichert, bis du ein neues überträgst. Eingaben mit der Tastatur gehen am mBot2 nicht. -`,$v=`--- +`,Yv=`--- titel: The mBot2 bereich: VisuBot kurz: Get to know the robot you are about to program. @@ -38525,7 +38525,7 @@ If a value does not change although you do something, something is wrong. Then t - I can connect the real mBot2 with USB-C and disconnect it again. → Connecting the real mBot2 - I can check that all sensors and actuators work. → Testing the mBot2 ::: -`,Yv=`--- +`,Xv=`--- titel: The square bereich: VisuBot kurz: From a long structure chart to a triple nested loop. @@ -38649,7 +38649,7 @@ The program stays saved, even when you switch the mBot2 off and on again. Only t - I can nest three loops. → Four squares - I can upload my program to the mBot2 and start it with button A without a cable. → Driving without a cable ::: -`,Xv='---\ntitel: Variables and output\nbereich: VisuBot\nkurz: Store values in variables, drive the mBot2 with them and print results.\n---\n\n## A variable for the side\n\nWith `mbot.forward(30)` the mBot2 drives 30 cm in one go. If you drive a square with it and no loop, the 30 appears four times in your program. To make the square bigger, you have to change it in four places. It is better to store the side length **once** and then use it everywhere.\n\nThat is what **variables** are for. A variable is a box with a name that holds a value:\n\n```java\nint side = 30;\nmbot.forward(side);\n```\n\n- `int` is the **data type**: a whole number.\n- `side` is the **name**. You may choose it yourself.\n- `30` is the **value**. The `=` puts it into the box.\n\nWherever `side` appears afterwards, the computer uses its value. So `mbot.forward(side)` drives 30 cm.\n\n::: übung vb-variable-seite\ntitel: Square with a variable\nauftrag: In one statement, create the variable `int side = 30`. After that the mBot2 drives a square: four times `side` centimetres forward and turn right.\nfahrt: 4 x (forward 30, turnRight)\nbraucht: forSchleife\ntipp: The first statement is `int side = 30`. Below it comes a for loop that runs four times.\ntipp: Inside the loop are `mbot.forward(side)` and `mbot.turnRight()`.\nlösung: vb-variable-seite-loesung.visustruct\n:::\n\n> Now change only the 30 to 60 and start the simulation. The whole square becomes twice as big.\n\n## Which data types are there?\n\nEvery variable has a data type. It decides which values fit inside:\n\n| Data type | What fits inside? | Example |\n|---|---|---|\n| `int` | whole numbers | `int side = 30;` |\n| `double` | decimal numbers, written with a point | `double speed = 1.5;` |\n| `String` | text in quotation marks | `String name = "Visu";` |\n| `boolean` | true or false | `boolean done = false;` |\n\nYou can also calculate with variables: `int distance = 4 * side;` works out the whole distance around the square.\n\n## Now in Java: rectangle\n\nA rectangle has two different sides. So you need two variables.\n\n::: übung vb-java-rechteck\ntitel: Rectangle with variables\ncode: java\nauftrag: Write in Java: create `int length = 60` and `int width = 30`. The mBot2 drives a rectangle: length, turn right, width, turn right, and all that twice.\nfahrt: 2 x (forward 60, turnRight, forward 30, turnRight)\nbraucht: forSchleife\ntipp: Two variables at the top: `int length = 60;` and `int width = 30;`. Below them a for loop that runs twice.\ntipp: Inside the loop: `mbot.forward(length);`, `mbot.turnRight();`, `mbot.forward(width);`, `mbot.turnRight();`\nlösung: vb-java-rechteck-loesung.visustruct\n:::\n\n## Now without the robot: output\n\nNot every result has to be driven by the robot. With `System.out.println(…)` a Java program prints text in the [console](#zeige-konsole). With `+` you join text and values:\n\n```java\nint side = 30;\nint distance = 4 * side;\nSystem.out.println("Distance: " + distance + " cm");\n```\n\nThe console then shows **Distance: 120 cm**.\n\n::: übung vb-ohne-strecke\ntitel: How far does it drive?\ncode: java\nauftrag: A rectangle is 60 cm long and 30 cm wide. Create `length` and `width` as variables. Calculate in a variable `distance` how far the mBot2 drives once all the way round, and print **Distance: 180 cm**. No `mbot` at all!\ntest: - -> Distance: 180 cm\nbraucht: anweisung\ntipp: Once round is twice the length plus twice the width.\ntipp: `int distance = 2 * length + 2 * width;` and then `System.out.println("Distance: " + distance + " cm");`\nlösung: vb-ohne-strecke-loesung.visustruct\n:::\n\n::: quiz\n? What does `mbot.forward(side)` drive if `int side = 40;` comes first?\n- [ ] 4 cm\n- [x] 40 cm\n- [ ] nothing, `side` is not a command\n> Wherever `side` appears, Java uses the value 40.\n? Which data type fits `"Visu"`?\n- [ ] `int`\n- [ ] `double`\n- [x] `String`\n> Text in quotation marks is a `String`.\n? What does `System.out.println("Side: " + 30);` print?\n- [x] Side: 30\n- [ ] "Side: " + 30\n- [ ] 30\n> The `+` joins the text and the number.\n:::\n\n::: checkliste\n- I can create and use a variable. → A variable for the side\n- I know the data types `int`, `double`, `String` and `boolean`. → Which data types are there?\n- I can drive a rectangle in Java with two variables. → Now in Java: rectangle\n- I can print something with `System.out.println`. → Now without the robot: output\n:::\n',Kv=`--- +`,Kv='---\ntitel: Variables and output\nbereich: VisuBot\nkurz: Store values in variables, drive the mBot2 with them and print results.\n---\n\n## A variable for the side\n\nWith `mbot.forward(30)` the mBot2 drives 30 cm in one go. If you drive a square with it and no loop, the 30 appears four times in your program. To make the square bigger, you have to change it in four places. It is better to store the side length **once** and then use it everywhere.\n\nThat is what **variables** are for. A variable is a box with a name that holds a value:\n\n```java\nint side = 30;\nmbot.forward(side);\n```\n\n- `int` is the **data type**: a whole number.\n- `side` is the **name**. You may choose it yourself.\n- `30` is the **value**. The `=` puts it into the box.\n\nWherever `side` appears afterwards, the computer uses its value. So `mbot.forward(side)` drives 30 cm.\n\n::: übung vb-variable-seite\ntitel: Square with a variable\nauftrag: In one statement, create the variable `int side = 30`. After that the mBot2 drives a square: four times `side` centimetres forward and turn right.\nfahrt: 4 x (forward 30, turnRight)\nbraucht: forSchleife\ntipp: The first statement is `int side = 30`. Below it comes a for loop that runs four times.\ntipp: Inside the loop are `mbot.forward(side)` and `mbot.turnRight()`.\nlösung: vb-variable-seite-loesung.visustruct\n:::\n\n> Now change only the 30 to 60 and start the simulation. The whole square becomes twice as big.\n\n## Which data types are there?\n\nEvery variable has a data type. It decides which values fit inside:\n\n| Data type | What fits inside? | Example |\n|---|---|---|\n| `int` | whole numbers | `int side = 30;` |\n| `double` | decimal numbers, written with a point | `double speed = 1.5;` |\n| `String` | text in quotation marks | `String name = "Visu";` |\n| `boolean` | true or false | `boolean done = false;` |\n\nYou can also calculate with variables: `int distance = 4 * side;` works out the whole distance around the square.\n\n## Now in Java: rectangle\n\nA rectangle has two different sides. So you need two variables.\n\n::: übung vb-java-rechteck\ntitel: Rectangle with variables\ncode: java\nauftrag: Write in Java: create `int length = 60` and `int width = 30`. The mBot2 drives a rectangle: length, turn right, width, turn right, and all that twice.\nfahrt: 2 x (forward 60, turnRight, forward 30, turnRight)\nbraucht: forSchleife\ntipp: Two variables at the top: `int length = 60;` and `int width = 30;`. Below them a for loop that runs twice.\ntipp: Inside the loop: `mbot.forward(length);`, `mbot.turnRight();`, `mbot.forward(width);`, `mbot.turnRight();`\nlösung: vb-java-rechteck-loesung.visustruct\n:::\n\n## Now without the robot: output\n\nNot every result has to be driven by the robot. With `System.out.println(…)` a Java program prints text in the [console](#zeige-konsole). With `+` you join text and values:\n\n```java\nint side = 30;\nint distance = 4 * side;\nSystem.out.println("Distance: " + distance + " cm");\n```\n\nThe console then shows **Distance: 120 cm**.\n\n::: übung vb-ohne-strecke\ntitel: How far does it drive?\ncode: java\nauftrag: A rectangle is 60 cm long and 30 cm wide. Create `length` and `width` as variables. Calculate in a variable `distance` how far the mBot2 drives once all the way round, and print **Distance: 180 cm**. No `mbot` at all!\ntest: - -> Distance: 180 cm\nbraucht: anweisung\ntipp: Once round is twice the length plus twice the width.\ntipp: `int distance = 2 * length + 2 * width;` and then `System.out.println("Distance: " + distance + " cm");`\nlösung: vb-ohne-strecke-loesung.visustruct\n:::\n\n::: quiz\n? What does `mbot.forward(side)` drive if `int side = 40;` comes first?\n- [ ] 4 cm\n- [x] 40 cm\n- [ ] nothing, `side` is not a command\n> Wherever `side` appears, Java uses the value 40.\n? Which data type fits `"Visu"`?\n- [ ] `int`\n- [ ] `double`\n- [x] `String`\n> Text in quotation marks is a `String`.\n? What does `System.out.println("Side: " + 30);` print?\n- [x] Side: 30\n- [ ] "Side: " + 30\n- [ ] 30\n> The `+` joins the text and the number.\n:::\n\n::: checkliste\n- I can create and use a variable. → A variable for the side\n- I know the data types `int`, `double`, `String` and `boolean`. → Which data types are there?\n- I can drive a rectangle in Java with two variables. → Now in Java: rectangle\n- I can print something with `System.out.println`. → Now without the robot: output\n:::\n',e9=`--- titel: Reading sensors bereich: VisuBot kurz: The mBot2 measures something, and your program decides. @@ -38718,7 +38718,7 @@ lösung: vb-wand-vorn-loesung.visustruct - I know the difference between a command and a sensor. → Commands and sensors - I can build a sensor into a condition. → Wall ahead? ::: -`,e9=`--- +`,t9=`--- titel: Up to the wall bereich: VisuBot kurz: The mBot2 measures the distance and stops in time. @@ -38793,7 +38793,7 @@ lösung: vb-bis-ziel-loesung.visustruct - I know when to use a while loop instead of a for loop. → Three worlds, one program - I can find a goal with the line sensor. → To the goal ::: -`,t9=`--- +`,n9=`--- titel: The ultrasonic sensor bereich: VisuBot kurz: Measure the distance, keep your distance, and do it all in Java. @@ -38879,7 +38879,7 @@ lösung: vb-java-wand-piep-loesung.visustruct - I can put one branch inside another. → Keep your distance in the structure chart - I can write a while loop with the distance in Java. → Now in Java ::: -`,n9=`--- +`,i9=`--- titel: The line sensor bereich: VisuBot kurz: Detect dark lines on the floor and don't fall off the table. @@ -38961,7 +38961,7 @@ lösung: vb-java-rand-loesung.visustruct - I can drive up to a line. → Turn round at the edge in the structure chart - I can count steps with a variable in Java. → Now in Java: there and back ::: -`,i9=`--- +`,a9=`--- titel: Recognising colours bereich: VisuBot kurz: The quad RGB sensor tells you which colour the mBot2 is standing on. @@ -39039,7 +39039,7 @@ lösung: vb-java-blau-gruen-loesung.visustruct - I can turn a condition round with \`!\`. → Drive to red in the structure chart - I can put a branch inside a loop. → Now in Java: beep on green ::: -`,a9=`--- +`,s9=`--- titel: Case selection with colours bereich: VisuBot kurz: Do something different for each colour or line, with one case selection instead of many branches. @@ -39149,7 +39149,7 @@ lösung: vb-ohne-noten-loesung.visustruct - I can write a case selection with numbers in Java. → Now in Java: line patterns - I can read a number and print something depending on its value. → Now without the robot: grades in words ::: -`,s9=`--- +`,r9=`--- titel: Buttons and joystick bereich: VisuBot kurz: The mBot2 waits for you and can be remote controlled. @@ -39226,7 +39226,7 @@ lösung: vb-java-joystick-loesung.visustruct - I can wait for a button. → Waiting for button A in the structure chart - I can steer the mBot2 with the joystick. → Now in Java: remote control ::: -`,r9=`--- +`,o9=`--- titel: The light sensor bereich: VisuBot kurz: Bright or dark? The mBot2 becomes a night light. @@ -39294,7 +39294,7 @@ lösung: vb-java-nachtlicht-ton-loesung.visustruct - I can switch the LEDs with a branch. → Night light in the structure chart - I can write several commands in one branch. → Now in Java: night light with sound ::: -`,o9=`--- +`,l9=`--- titel: The microphone bereich: VisuBot kurz: Clap to start, and a noise light for the classroom. @@ -39360,7 +39360,7 @@ Loudness is really measured in **decibels** (dB). Whispering is about 30 dB, a c - I can wait until something happens. → Clap to start in the structure chart - I can write a noise light in Java. → Now in Java: noise light ::: -`,l9=`--- +`,u9=`--- titel: The motion sensor bereich: VisuBot kurz: Measure tilt and detect shaking. @@ -39434,7 +39434,7 @@ lösung: vb-java-wasserwaage-loesung.visustruct - I can join two conditions with “or”. → Tilt warning in the structure chart - I can join several conditions with “and”. → Now in Java: spirit level ::: -`,u9=`--- +`,m9=`--- titel: The LEDs bereich: VisuBot kurz: Mix colours, build a traffic light and make it blink. @@ -39509,7 +39509,7 @@ lösung: vb-java-blinken-loesung.visustruct - I can show colours one after the other with pauses. → Traffic light in the structure chart - I can make the LEDs blink in Java. → Now in Java: blue light ::: -`,m9=`--- +`,c9=`--- titel: Single LEDs bereich: VisuBot kurz: Each of the five LEDs gets its own colour, all the way to a running light. @@ -39584,7 +39584,7 @@ lösung: vb-java-lauflicht-loesung.visustruct - I can make single LEDs light up in different colours. → Three lights in the structogram - I can build a running light with a loop. → Now in Java: running light ::: -`,c9=`--- +`,d9=`--- titel: The speaker bereich: VisuBot kurz: Tones, a scale and a siren. @@ -39675,7 +39675,7 @@ The mBot2 can also be happy, sad or sleepy. With **show a feeling** (\`mbot.emot - I can calculate with the counting variable in Java. → Now in Java: higher and higher - I can make the mBot2 show a feeling. → Showing feelings ::: -`,d9='---\ntitel: Arrays and melodies\nbereich: VisuBot\nkurz: Store many values in one array and work through them with a loop.\n---\n\n## A melody as an array\n\nA melody is a row of tones. Instead of five variables `tone1`, `tone2`, … you use an **array**. An array is a row of slots under **one** name:\n\n```java\nint[] tones = {262, 294, 330, 349, 392};\n```\n\n- `int[]` means: an array of whole numbers.\n- The slots are numbered from **0**. `tones[0]` is 262, `tones[4]` is 392.\n- `tones.length` tells you how many slots there are, here 5.\n\nA for loop with `i` from 0 to `tones.length - 1` reaches every slot.\n\n::: übung vb-melodie\ntitel: Melody\nauftrag: Create an array `tones` with the pitches 262, 294, 330, 349 and 392. A for loop plays them one after the other, each for 300 milliseconds.\nbefehle: playTone 262 300, playTone 294 300, playTone 330 300, playTone 349 300, playTone 392 300\nbraucht: forSchleife\ntipp: `int[] tones = {262, 294, 330, 349, 392}` creates the array.\ntipp: The loop runs from `i = 0` while `i < tones.length`. Inside is `mbot.playTone(tones[i], 300)`.\nlösung: vb-melodie-loesung.visustruct\n:::\n\n> If you want a different melody, you only change the array. The loop stays the same.\n\n## Now in Java: rainbow\n\nThe five LEDs have the numbers 0 to 4, just like the slots of an array with five values. An array can hold texts too: `String[] colours = {"red", "yellow"};`. LED `i` then gets the colour from slot `i`: `mbot.led(i).setColor(colours[i])`.\n\n::: übung vb-farben\ntitel: Rainbow\ncode: java\nauftrag: Write in Java: create an array `colours` with the texts `"red"`, `"yellow"`, `"green"`, `"blue"` and `"purple"`. A for loop gives every LED `i` the colour from `colours[i]`.\nbefehle: ledColor 0 "red", ledColor 1 "yellow", ledColor 2 "green", ledColor 3 "blue", ledColor 4 "purple"\nbraucht: forSchleife\ntipp: `String[] colours = {"red", "yellow", "green", "blue", "purple"};` creates the array.\ntipp: `for (int i = 0; i < colours.length; i++) { mbot.led(i).setColor(colours[i]); }`\nlösung: vb-farben-loesung.visustruct\n:::\n\n## Now without the robot: sum of the grades\n\nWith a loop you can also add up all the values of an array. You need a variable that starts at 0 and grows in every round:\n\n```java\nint sum = 0;\nfor (int i = 0; i < grades.length; i++) {\n sum = sum + grades[i];\n}\n```\n\n::: übung vb-ohne-summe\ntitel: Sum of the grades\ncode: java\nauftrag: Create `int[] grades = {2, 1, 3, 2}`. Add up all grades in a loop and then print **Sum: 8** and on a second line **Count: 4**. The count comes from `grades.length`. No `mbot` at all!\ntest: - -> Sum: 8 | Count: 4\nbraucht: forSchleife\ntipp: Before the loop `int sum = 0;`, inside the loop `sum = sum + grades[i];`.\ntipp: After the loop `System.out.println("Sum: " + sum);` and `System.out.println("Count: " + grades.length);`.\nlösung: vb-ohne-summe-loesung.visustruct\n:::\n\n::: quiz\n? What is `tones[1]` if `int[] tones = {262, 294, 330};`?\n- [ ] 262\n- [x] 294\n- [ ] 1\n> The slots count from 0. So slot 1 is the second one.\n? How many slots does `{262, 294, 330}` have, so what is `tones.length`?\n- [ ] 2\n- [x] 3\n- [ ] 330\n> `length` counts the slots, here three. That is why the last slot has the number 2.\n:::\n\n::: checkliste\n- I can create an array and play it with a loop. → A melody as an array\n- I can use an array of texts in Java. → Now in Java: rainbow\n- I can add up all values of an array. → Now without the robot: sum of the grades\n:::\n',h9=`--- +`,h9='---\ntitel: Arrays and melodies\nbereich: VisuBot\nkurz: Store many values in one array and work through them with a loop.\n---\n\n## A melody as an array\n\nA melody is a row of tones. Instead of five variables `tone1`, `tone2`, … you use an **array**. An array is a row of slots under **one** name:\n\n```java\nint[] tones = {262, 294, 330, 349, 392};\n```\n\n- `int[]` means: an array of whole numbers.\n- The slots are numbered from **0**. `tones[0]` is 262, `tones[4]` is 392.\n- `tones.length` tells you how many slots there are, here 5.\n\nA for loop with `i` from 0 to `tones.length - 1` reaches every slot.\n\n::: übung vb-melodie\ntitel: Melody\nauftrag: Create an array `tones` with the pitches 262, 294, 330, 349 and 392. A for loop plays them one after the other, each for 300 milliseconds.\nbefehle: playTone 262 300, playTone 294 300, playTone 330 300, playTone 349 300, playTone 392 300\nbraucht: forSchleife\ntipp: `int[] tones = {262, 294, 330, 349, 392}` creates the array.\ntipp: The loop runs from `i = 0` while `i < tones.length`. Inside is `mbot.playTone(tones[i], 300)`.\nlösung: vb-melodie-loesung.visustruct\n:::\n\n> If you want a different melody, you only change the array. The loop stays the same.\n\n## Now in Java: rainbow\n\nThe five LEDs have the numbers 0 to 4, just like the slots of an array with five values. An array can hold texts too: `String[] colours = {"red", "yellow"};`. LED `i` then gets the colour from slot `i`: `mbot.led(i).setColor(colours[i])`.\n\n::: übung vb-farben\ntitel: Rainbow\ncode: java\nauftrag: Write in Java: create an array `colours` with the texts `"red"`, `"yellow"`, `"green"`, `"blue"` and `"purple"`. A for loop gives every LED `i` the colour from `colours[i]`.\nbefehle: ledColor 0 "red", ledColor 1 "yellow", ledColor 2 "green", ledColor 3 "blue", ledColor 4 "purple"\nbraucht: forSchleife\ntipp: `String[] colours = {"red", "yellow", "green", "blue", "purple"};` creates the array.\ntipp: `for (int i = 0; i < colours.length; i++) { mbot.led(i).setColor(colours[i]); }`\nlösung: vb-farben-loesung.visustruct\n:::\n\n## Now without the robot: sum of the grades\n\nWith a loop you can also add up all the values of an array. You need a variable that starts at 0 and grows in every round:\n\n```java\nint sum = 0;\nfor (int i = 0; i < grades.length; i++) {\n sum = sum + grades[i];\n}\n```\n\n::: übung vb-ohne-summe\ntitel: Sum of the grades\ncode: java\nauftrag: Create `int[] grades = {2, 1, 3, 2}`. Add up all grades in a loop and then print **Sum: 8** and on a second line **Count: 4**. The count comes from `grades.length`. No `mbot` at all!\ntest: - -> Sum: 8 | Count: 4\nbraucht: forSchleife\ntipp: Before the loop `int sum = 0;`, inside the loop `sum = sum + grades[i];`.\ntipp: After the loop `System.out.println("Sum: " + sum);` and `System.out.println("Count: " + grades.length);`.\nlösung: vb-ohne-summe-loesung.visustruct\n:::\n\n::: quiz\n? What is `tones[1]` if `int[] tones = {262, 294, 330};`?\n- [ ] 262\n- [x] 294\n- [ ] 1\n> The slots count from 0. So slot 1 is the second one.\n? How many slots does `{262, 294, 330}` have, so what is `tones.length`?\n- [ ] 2\n- [x] 3\n- [ ] 330\n> `length` counts the slots, here three. That is why the last slot has the number 2.\n:::\n\n::: checkliste\n- I can create an array and play it with a loop. → A melody as an array\n- I can use an array of texts in Java. → Now in Java: rainbow\n- I can add up all values of an array. → Now without the robot: sum of the grades\n:::\n',g9=`--- titel: The screen bereich: VisuBot kurz: Show text, numbers and sensor values on the CyberPi. @@ -39750,7 +39750,7 @@ lösung: vb-java-countdown-loesung.visustruct - I can show numbers and sensor values. → Numbers and sensor values - I can write a countdown in Java. → Now in Java: countdown ::: -`,g9=`--- +`,p9=`--- titel: Strings bereich: VisuBot kurz: Work with texts, pick out letters and show them on the screen. @@ -39832,7 +39832,7 @@ lösung: vb-ohne-rueckwaerts-loesung.visustruct - I can join texts and numbers with \`+\`. → Now in Java: text and length - I can get single characters with \`charAt(…)\`. → Now without the robot: read it backwards ::: -`,p9=`--- +`,f9=`--- titel: Motors and speed bereich: VisuBot kurz: Step on the gas, steer and follow a line. @@ -39922,7 +39922,7 @@ lösung: vb-java-linienfolger-loesung.visustruct - I can drive until a sensor reports something. → Full speed to the wall in the structure chart - I can write a line follower in Java. → Now in Java: line follower ::: -`,f9=`--- +`,x9=`--- titel: Stopwatch and battery bereich: VisuBot kurz: Measure time and keep an eye on the battery. @@ -40001,7 +40001,7 @@ lösung: vb-java-akku-loesung.visustruct - I can drive for a certain time. → Driving two seconds in the structure chart - I can show the battery level. → Now in Java: battery display ::: -`,x9=`--- +`,b9=`--- titel: Your own methods bereich: VisuBot kurz: Write and call your own commands with parameters and return values. @@ -40091,7 +40091,7 @@ unterprogramm: vb-ohne-quadratzahl-unterprogramm-loesung.visustruct - I know what methods look like in Java. → Methods in Java - I can write a method with a return value. → Now without the robot: a method with a return value ::: -`,b9=`## 🤖 mBot2 commands +`,y9=`## 🤖 mBot2 commands A command tells the mBot2 what to **do**. Every command starts with \`mbot.\` and ends with brackets. Often you write a number in the brackets. @@ -40243,7 +40243,7 @@ With **🔌 mBot2** next to "Start simulation" you connect the real robot with t ### Driving without a cable With **⬆ Upload** you save your program on the mBot2. Then unplug the cable, put the mBot2 at the start and press **button A**: it drives your program on its own. It stays saved until you upload a new one. Keyboard inputs do not work on the mBot2. -`,y9=`--- +`,v9=`--- titel: Die Alarmanlage nach: 16 stufe: 2 @@ -40262,7 +40262,7 @@ tipp: Außen steht eine While-Schleife mit \`!mbot.isButtonB()\`. Darin eine Ver tipp: Die Bedingung der Verzweigung: \`mbot.getDistance() < 20 || mbot.getLoudness() > 60\`. Im Ja-Zweig \`mbot.setLed(255, 0, 0)\` und \`mbot.playTone(880, 200)\`, im Nein-Zweig \`mbot.ledOff()\`. lösung: vb-alarmanlage-loesung.visustruct ::: -`,v9=`--- +`,w9=`--- titel: Labyrinth mit Ausgängen nach: 5 stufe: 3 @@ -40281,7 +40281,7 @@ tipp: In jedem Durchlauf dreht sich der mBot2 zuerst nach links und misst. Ist o tipp: Durch die Lücke sind es zwei Felder bis in den nächsten Gang. Danach soll er wieder nach rechts schauen. Ist oben eine Wand, dreht er sich zurück und fährt ein Feld weiter. lösung: vb-ausgang-loesung.visustruct ::: -`,w9=`--- +`,z9=`--- titel: Binär zählen nach: 15 stufe: 3 @@ -40306,7 +40306,7 @@ tipp: Ob LED 0 an ist, verrät der Rest beim Teilen durch 2: \`zahl % 2 == 1\`. tipp: In der Schleife stehen drei Verzweigungen und danach **kurz warten**. Im Ja-Zweig zum Beispiel \`mbot.led(0).setColor("grün")\`, im Nein-Zweig \`mbot.led(0).setColor("aus")\`. lösung: vb-binaer-zaehlen-loesung.visustruct ::: -`,z9=`--- +`,I9=`--- titel: Das Dreieck nach: 2 stufe: 1 @@ -40329,7 +40329,7 @@ lösung: vb-dreieck-loesung.visustruct ::: angeberwissen Die Idee, mit einem fahrenden Roboter Figuren zu zeichnen, ist über 50 Jahre alt: Ende der 1960er-Jahre entstand die Sprache **Logo**. Kinder steuerten damit eine „Schildkröte“, die mit einem Stift über das Papier fuhr. ::: -`,I9=`--- +`,k9=`--- titel: Rückwärts einparken nach: 16 stufe: 2 @@ -40349,7 +40349,7 @@ tipp: Zwei While-Schleifen hintereinander: erst \`!mbot.getColor().equals("blau" tipp: Am Ende: \`mbot.setLed(0, 255, 0)\` und \`mbot.showText("Geparkt!")\`. lösung: vb-einparken-loesung.visustruct ::: -`,k9='---\ntitel: Hindernis ausweichen\nnach: 16\nstufe: 2\n---\n\nAuf dem Weg zum roten Feld stehen Klötze im Weg. Der mBot2 fährt in 10-cm-Schritten vor. Taucht ein Klotz auf (näher als 20 cm), warnt er mit Licht und Ton und fährt außen herum: nach rechts drehen, 30 cm vor, nach links drehen. Dann geht es weiter geradeaus.\n\n::: übung vb-hindernis\ntitel: Hindernis ausweichen\nauftrag: Der mBot2 fährt, solange er nicht auf Rot steht. Ist ein Klotz näher als 20 cm, leuchten die LEDs orange (`mbot.setLed(255, 128, 0)`), er piept und weicht aus. Danach gehen die LEDs aus. Sonst fährt er 10 cm vor. Es gibt zwei Welten.\nwelt: hindernis-1 -> tone\nwelt: hindernis-2 -> tone\nbraucht: whileSchleife, verzweigung\ntipp: Außen eine While-Schleife mit `!mbot.getColor().equals("rot")`, darin eine Verzweigung mit `mbot.getDistance() < 20`.\ntipp: Im Ja-Zweig: `mbot.setLed(255, 128, 0)`, `mbot.playTone(880, 200)`, `mbot.turnRight()`, `mbot.forward(30)`, `mbot.turnLeft()`, `mbot.ledOff()`. Im Nein-Zweig: `mbot.forward()`.\nlösung: vb-hindernis-loesung.visustruct\n:::\n',S9=`--- +`,S9='---\ntitel: Hindernis ausweichen\nnach: 16\nstufe: 2\n---\n\nAuf dem Weg zum roten Feld stehen Klötze im Weg. Der mBot2 fährt in 10-cm-Schritten vor. Taucht ein Klotz auf (näher als 20 cm), warnt er mit Licht und Ton und fährt außen herum: nach rechts drehen, 30 cm vor, nach links drehen. Dann geht es weiter geradeaus.\n\n::: übung vb-hindernis\ntitel: Hindernis ausweichen\nauftrag: Der mBot2 fährt, solange er nicht auf Rot steht. Ist ein Klotz näher als 20 cm, leuchten die LEDs orange (`mbot.setLed(255, 128, 0)`), er piept und weicht aus. Danach gehen die LEDs aus. Sonst fährt er 10 cm vor. Es gibt zwei Welten.\nwelt: hindernis-1 -> tone\nwelt: hindernis-2 -> tone\nbraucht: whileSchleife, verzweigung\ntipp: Außen eine While-Schleife mit `!mbot.getColor().equals("rot")`, darin eine Verzweigung mit `mbot.getDistance() < 20`.\ntipp: Im Ja-Zweig: `mbot.setLed(255, 128, 0)`, `mbot.playTone(880, 200)`, `mbot.turnRight()`, `mbot.forward(30)`, `mbot.turnLeft()`, `mbot.ledOff()`. Im Nein-Zweig: `mbot.forward()`.\nlösung: vb-hindernis-loesung.visustruct\n:::\n',_9=`--- titel: Knight Rider nach: 15 stufe: 2 @@ -40366,7 +40366,7 @@ tipp: Die erste Schleife zählt \`i\` von 0 bis 4 hoch. Die zweite startet bei 3 tipp: In beiden Schleifen: \`mbot.led(i).setColor("rot")\`, \`mbot.pause(100)\`, \`mbot.led(i).setColor("aus")\`. lösung: vb-knight-rider-loesung.visustruct ::: -`,_9=`--- +`,T9=`--- titel: Das Labyrinth nach: 5 stufe: 2 @@ -40391,7 +40391,7 @@ lösung: vb-labyrinth-loesung.visustruct ::: angeberwissen Mit der Regel „Hand immer an der Wand“ findet man aus jedem Labyrinth, dessen Wände alle zusammenhängen. Schon die Griechen erzählten von Theseus, der sich im Labyrinth des Minotaurus mit einem Wollfaden half. ::: -`,T9='---\ntitel: Linienfolger mit Stopp\nnach: 20\nstufe: 3\n---\n\nDer mBot2 folgt einer schwarzen Linie und hält am roten Feld an ihrem Ende an.\n\nDafür gibt er mit **Räder einzeln** Gas: `mbot.drive(40, 40)` lässt beide Räder gleich schnell drehen, er fährt geradeaus weiter, bis ein anderer Fahrbefehl kommt. `mbot.drive(10, 40)` macht eine Linkskurve, `mbot.drive(40, 10)` eine Rechtskurve. `mbot.stop()` hält ihn an.\n\nDie beiden mittleren Fühler des Liniensensors fragst du mit `mbot.isLineLeft()` und `mbot.isLineRight()` ab. Sehen beide die Linie, fährt er geradeaus. Sieht nur der linke sie, lenkt er nach links, sieht nur der rechte sie, nach rechts.\n\n::: übung vb-linienfolger-stopp\ntitel: Linienfolger mit Stopp\nauftrag: Solange der mBot2 nicht auf Rot steht, folgt er der Linie. Danach hält er an. In der zweiten Welt schlängelt sich die Linie.\nwelt: linie-rot-1, linie-rot-2\nbraucht: whileSchleife, verzweigung\ntipp: Außen eine While-Schleife mit `!mbot.getColor().equals("rot")`, danach **anhalten**.\ntipp: In der Schleife: Sind `mbot.isLineLeft() && mbot.isLineRight()`, dann `mbot.drive(40, 40)`. Sonst, wenn `mbot.isLineLeft()`, dann `mbot.drive(10, 40)`. Sonst, wenn `mbot.isLineRight()`, dann `mbot.drive(40, 10)`.\nlösung: vb-linienfolger-stopp-loesung.visustruct\n:::\n',O9=`--- +`,O9='---\ntitel: Linienfolger mit Stopp\nnach: 20\nstufe: 3\n---\n\nDer mBot2 folgt einer schwarzen Linie und hält am roten Feld an ihrem Ende an.\n\nDafür gibt er mit **Räder einzeln** Gas: `mbot.drive(40, 40)` lässt beide Räder gleich schnell drehen, er fährt geradeaus weiter, bis ein anderer Fahrbefehl kommt. `mbot.drive(10, 40)` macht eine Linkskurve, `mbot.drive(40, 10)` eine Rechtskurve. `mbot.stop()` hält ihn an.\n\nDie beiden mittleren Fühler des Liniensensors fragst du mit `mbot.isLineLeft()` und `mbot.isLineRight()` ab. Sehen beide die Linie, fährt er geradeaus. Sieht nur der linke sie, lenkt er nach links, sieht nur der rechte sie, nach rechts.\n\n::: übung vb-linienfolger-stopp\ntitel: Linienfolger mit Stopp\nauftrag: Solange der mBot2 nicht auf Rot steht, folgt er der Linie. Danach hält er an. In der zweiten Welt schlängelt sich die Linie.\nwelt: linie-rot-1, linie-rot-2\nbraucht: whileSchleife, verzweigung\ntipp: Außen eine While-Schleife mit `!mbot.getColor().equals("rot")`, danach **anhalten**.\ntipp: In der Schleife: Sind `mbot.isLineLeft() && mbot.isLineRight()`, dann `mbot.drive(40, 40)`. Sonst, wenn `mbot.isLineLeft()`, dann `mbot.drive(10, 40)`. Sonst, wenn `mbot.isLineRight()`, dann `mbot.drive(40, 10)`.\nlösung: vb-linienfolger-stopp-loesung.visustruct\n:::\n',A9=`--- titel: Morsen nach: 15 stufe: 2 @@ -40408,7 +40408,7 @@ tipp: Drei For-Schleifen hintereinander, jede läuft dreimal. Dazwischen steht j tipp: In der ersten und dritten Schleife: \`mbot.led(2).setColor("weiß")\`, \`mbot.pause(200)\`, \`mbot.led(2).setColor("aus")\`, \`mbot.pause(200)\`. In der mittleren wartet er nach dem Einschalten 600. lösung: vb-morsen-loesung.visustruct ::: -`,A9=`--- +`,P9=`--- titel: Der Nachtwächter nach: 18 stufe: 1 @@ -40426,7 +40426,7 @@ tipp: Eine While-Schleife mit \`mbot.getBrightness() < 20\`. Darin \`mbot.forwar tipp: Nach der Schleife steht \`mbot.showText("Zzz")\`. lösung: vb-nachtwaechter-loesung.visustruct ::: -`,P9=`--- +`,j9=`--- titel: Slalom nach: 2 stufe: 2 @@ -40445,7 +40445,7 @@ tipp: Überlege zuerst, wie der mBot2 oben um einen einzigen Pylon herumfährt: tipp: Unten herum geht genauso, nur mit links und rechts vertauscht. „Oben herum, dann unten herum“ wiederholt sich zweimal. lösung: vb-slalom-loesung.visustruct ::: -`,j9=`--- +`,C9=`--- titel: Die Spirale nach: 2 stufe: 2 @@ -40464,7 +40464,7 @@ tipp: Lass die Zählvariable von 1 bis 8 laufen. Wie lang ist dann die Seite in tipp: In der Klammer von **fahre vor** steht eine Rechnung mit der Zählvariable. lösung: vb-spirale-loesung.visustruct ::: -`,C9=`--- +`,B9=`--- titel: Die Treppe nach: 2 stufe: 1 @@ -40481,7 +40481,7 @@ tipp: Schreib zuerst eine Stufe auf. Dann packst du sie in eine For-Schleife, di tipp: In der Schleife: \`mbot.forward(20)\`, \`mbot.turnLeft()\`, \`mbot.forward(20)\`, \`mbot.turnRight()\`. lösung: vb-treppe-loesung.visustruct ::: -`,B9=`--- +`,D9=`--- titel: Der Tunnelsucher nach: 5 stufe: 3 @@ -40502,7 +40502,7 @@ tipp: In jedem Durchlauf fährt der mBot2 ein Feld vor und schaut sich dann nach tipp: Hier passt eine Schleife, die erst fährt und danach prüft. Sie läuft weiter, solange links **oder** rechts mindestens 20 cm frei ist: \`links >= 20 || rechts >= 20\`. lösung: vb-tunnel-loesung.visustruct ::: -`,D9=`--- +`,Z9=`--- titel: Kleeblatt im Wald nach: 5 stufe: 2 @@ -40521,7 +40521,7 @@ tipp: Wie bei „Fahre bis zum Ziel“ läuft außen eine Schleife, bis der Lini tipp: Um einen Baum herum: nach links drehen, ein Feld vor, nach rechts drehen, zwei Felder vor, nach rechts drehen, ein Feld vor, nach links drehen. lösung: vb-wald-loesung.visustruct ::: -`,Z9=`--- +`,M9=`--- titel: The alarm system nach: 16 stufe: 2 @@ -40540,7 +40540,7 @@ tipp: On the outside is a while loop with \`!mbot.isButtonB()\`. Inside a branch tipp: The condition of the branch: \`mbot.getDistance() < 20 || mbot.getLoudness() > 60\`. In the yes branch \`mbot.setLed(255, 0, 0)\` and \`mbot.playTone(880, 200)\`, in the no branch \`mbot.ledOff()\`. lösung: vb-alarmanlage-loesung.visustruct ::: -`,M9=`--- +`,L9=`--- titel: Maze with exits nach: 5 stufe: 3 @@ -40559,7 +40559,7 @@ tipp: In each pass the mBot2 first turns left and measures. If the way up is fre tipp: Through the gap it is two squares into the next corridor. Afterwards it should face right again. If there is a wall above, it turns back and drives one square further. lösung: vb-ausgang-loesung.visustruct ::: -`,L9=`--- +`,W9=`--- titel: Counting in binary nach: 15 stufe: 3 @@ -40584,7 +40584,7 @@ tipp: Whether LED 0 is on is given by the remainder when dividing by 2: \`number tipp: The loop contains three branches and then **wait a moment**. In the yes branch, for example, \`mbot.led(0).setColor("green")\`, in the no branch \`mbot.led(0).setColor("off")\`. lösung: vb-binaer-zaehlen-loesung.visustruct ::: -`,W9=`--- +`,E9=`--- titel: The triangle nach: 2 stufe: 1 @@ -40607,7 +40607,7 @@ lösung: vb-dreieck-loesung.visustruct ::: angeberwissen The idea of drawing shapes with a driving robot is more than 50 years old: the language **Logo** was created in the late 1960s. Children used it to steer a "turtle" that rolled across paper with a pen. ::: -`,E9=`--- +`,N9=`--- titel: Reverse parking nach: 16 stufe: 2 @@ -40627,7 +40627,7 @@ tipp: Two while loops one after the other: first \`!mbot.getColor().equals("blue tipp: At the end: \`mbot.setLed(0, 255, 0)\` and \`mbot.showText("Parked!")\`. lösung: vb-einparken-loesung.visustruct ::: -`,N9='---\ntitel: Avoid obstacles\nnach: 16\nstufe: 2\n---\n\nOn the way to the red field there are blocks in the way. The mBot2 drives forward in steps of 10 cm. If a block shows up (closer than 20 cm), it warns with light and sound and drives around it: turn right, 30 cm forward, turn left. Then it carries on straight ahead.\n\n::: übung vb-hindernis\ntitel: Avoid obstacles\nauftrag: The mBot2 drives as long as it is not on red. If a block is closer than 20 cm, the LEDs light up orange (`mbot.setLed(255, 128, 0)`), it beeps and drives around it. Then the LEDs go off. Otherwise it drives forward 10 cm. There are two worlds.\nwelt: hindernis-1 -> tone\nwelt: hindernis-2 -> tone\nbraucht: whileSchleife, verzweigung\ntipp: On the outside a while loop with `!mbot.getColor().equals("red")`, inside a branch with `mbot.getDistance() < 20`.\ntipp: In the yes branch: `mbot.setLed(255, 128, 0)`, `mbot.playTone(880, 200)`, `mbot.turnRight()`, `mbot.forward(30)`, `mbot.turnLeft()`, `mbot.ledOff()`. In the no branch: `mbot.forward()`.\nlösung: vb-hindernis-loesung.visustruct\n:::\n',F9=`--- +`,F9='---\ntitel: Avoid obstacles\nnach: 16\nstufe: 2\n---\n\nOn the way to the red field there are blocks in the way. The mBot2 drives forward in steps of 10 cm. If a block shows up (closer than 20 cm), it warns with light and sound and drives around it: turn right, 30 cm forward, turn left. Then it carries on straight ahead.\n\n::: übung vb-hindernis\ntitel: Avoid obstacles\nauftrag: The mBot2 drives as long as it is not on red. If a block is closer than 20 cm, the LEDs light up orange (`mbot.setLed(255, 128, 0)`), it beeps and drives around it. Then the LEDs go off. Otherwise it drives forward 10 cm. There are two worlds.\nwelt: hindernis-1 -> tone\nwelt: hindernis-2 -> tone\nbraucht: whileSchleife, verzweigung\ntipp: On the outside a while loop with `!mbot.getColor().equals("red")`, inside a branch with `mbot.getDistance() < 20`.\ntipp: In the yes branch: `mbot.setLed(255, 128, 0)`, `mbot.playTone(880, 200)`, `mbot.turnRight()`, `mbot.forward(30)`, `mbot.turnLeft()`, `mbot.ledOff()`. In the no branch: `mbot.forward()`.\nlösung: vb-hindernis-loesung.visustruct\n:::\n',J9=`--- titel: Knight Rider nach: 15 stufe: 2 @@ -40644,7 +40644,7 @@ tipp: The first loop counts \`i\` up from 0 to 4. The second starts at 3 and cou tipp: In both loops: \`mbot.led(i).setColor("red")\`, \`mbot.pause(100)\`, \`mbot.led(i).setColor("off")\`. lösung: vb-knight-rider-loesung.visustruct ::: -`,J9=`--- +`,R9=`--- titel: The maze nach: 5 stufe: 2 @@ -40669,7 +40669,7 @@ lösung: vb-labyrinth-loesung.visustruct ::: angeberwissen With the rule "always keep one hand on the wall" you get out of any maze whose walls are all connected. The ancient Greeks already told of Theseus, who found his way through the Minotaur's labyrinth with a ball of thread. ::: -`,R9='---\ntitel: Line follower with stop\nnach: 20\nstufe: 3\n---\n\nThe mBot2 follows a black line and stops at the red field at its end.\n\nFor this it steps on the gas with **wheels separately**: `mbot.drive(40, 40)` turns both wheels equally fast, it keeps driving straight ahead until another driving command comes. `mbot.drive(10, 40)` makes a left curve, `mbot.drive(40, 10)` a right curve. `mbot.stop()` stops it.\n\nYou ask the two middle probes of the line sensor with `mbot.isLineLeft()` and `mbot.isLineRight()`. If both see the line, it drives straight ahead. If only the left one sees it, it steers left, if only the right one sees it, right.\n\n::: übung vb-linienfolger-stopp\ntitel: Line follower with stop\nauftrag: As long as the mBot2 is not on red, it follows the line. Then it stops. In the second world the line winds about.\nwelt: linie-rot-1, linie-rot-2\nbraucht: whileSchleife, verzweigung\ntipp: On the outside a while loop with `!mbot.getColor().equals("red")`, after it **stop**.\ntipp: Inside the loop: if `mbot.isLineLeft() && mbot.isLineRight()`, then `mbot.drive(40, 40)`. Otherwise, if `mbot.isLineLeft()`, then `mbot.drive(10, 40)`. Otherwise, if `mbot.isLineRight()`, then `mbot.drive(40, 10)`.\nlösung: vb-linienfolger-stopp-loesung.visustruct\n:::\n',G9=`--- +`,G9='---\ntitel: Line follower with stop\nnach: 20\nstufe: 3\n---\n\nThe mBot2 follows a black line and stops at the red field at its end.\n\nFor this it steps on the gas with **wheels separately**: `mbot.drive(40, 40)` turns both wheels equally fast, it keeps driving straight ahead until another driving command comes. `mbot.drive(10, 40)` makes a left curve, `mbot.drive(40, 10)` a right curve. `mbot.stop()` stops it.\n\nYou ask the two middle probes of the line sensor with `mbot.isLineLeft()` and `mbot.isLineRight()`. If both see the line, it drives straight ahead. If only the left one sees it, it steers left, if only the right one sees it, right.\n\n::: übung vb-linienfolger-stopp\ntitel: Line follower with stop\nauftrag: As long as the mBot2 is not on red, it follows the line. Then it stops. In the second world the line winds about.\nwelt: linie-rot-1, linie-rot-2\nbraucht: whileSchleife, verzweigung\ntipp: On the outside a while loop with `!mbot.getColor().equals("red")`, after it **stop**.\ntipp: Inside the loop: if `mbot.isLineLeft() && mbot.isLineRight()`, then `mbot.drive(40, 40)`. Otherwise, if `mbot.isLineLeft()`, then `mbot.drive(10, 40)`. Otherwise, if `mbot.isLineRight()`, then `mbot.drive(40, 10)`.\nlösung: vb-linienfolger-stopp-loesung.visustruct\n:::\n',H9=`--- titel: Morse code nach: 15 stufe: 2 @@ -40686,7 +40686,7 @@ tipp: Three for loops one after the other, each runs three times. Between them t tipp: In the first and third loop: \`mbot.led(2).setColor("white")\`, \`mbot.pause(200)\`, \`mbot.led(2).setColor("off")\`, \`mbot.pause(200)\`. In the middle one it waits 600 after switching on. lösung: vb-morsen-loesung.visustruct ::: -`,H9=`--- +`,V9=`--- titel: The night watchman nach: 18 stufe: 1 @@ -40704,7 +40704,7 @@ tipp: A while loop with \`mbot.getBrightness() < 20\`. Inside \`mbot.forward(30) tipp: After the loop is \`mbot.showText("Zzz")\`. lösung: vb-nachtwaechter-loesung.visustruct ::: -`,V9=`--- +`,Q9=`--- titel: Slalom nach: 2 stufe: 2 @@ -40723,7 +40723,7 @@ tipp: First think about how the mBot2 drives around a single cone on the top sid tipp: Around the bottom works the same way, only with left and right swapped. "Top, then bottom" repeats twice. lösung: vb-slalom-loesung.visustruct ::: -`,Q9=`--- +`,q9=`--- titel: The spiral nach: 2 stufe: 2 @@ -40742,7 +40742,7 @@ tipp: Let the counter variable run from 1 to 8. How long is the side in each pas tipp: The brackets of **drive forward** contain a calculation with the counter variable. lösung: vb-spirale-loesung.visustruct ::: -`,q9=`--- +`,U9=`--- titel: The staircase nach: 2 stufe: 1 @@ -40759,7 +40759,7 @@ tipp: Write down one step first. Then put it into a for loop that runs three tim tipp: Inside the loop: \`mbot.forward(20)\`, \`mbot.turnLeft()\`, \`mbot.forward(20)\`, \`mbot.turnRight()\`. lösung: vb-treppe-loesung.visustruct ::: -`,U9=`--- +`,$9=`--- titel: The tunnel finder nach: 5 stufe: 3 @@ -40780,7 +40780,7 @@ tipp: In each pass the mBot2 drives one square forward and then looks left and r tipp: A loop that drives first and checks afterwards fits here. It keeps going as long as at least 20 cm are free on the left **or** on the right: \`left >= 20 || right >= 20\`. lösung: vb-tunnel-loesung.visustruct ::: -`,$9=`--- +`,Y9=`--- titel: Clover in the forest nach: 5 stufe: 2 @@ -40799,7 +40799,7 @@ tipp: As in "Drive to the goal", a loop on the outside runs until the line senso tipp: Around a tree: turn left, one square forward, turn right, two squares forward, turn right, one square forward, turn left. lösung: vb-wald-loesung.visustruct ::: -`,Y9=` +`,X9=` 111;117;116;112;117;116;58;32;34;87;105;108;108;107;111;109;109;101;110;34; @@ -40811,7 +40811,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;117;102;32;87;105;101;100;101;114;115;101;104;101;110;34; -`,X9=` +`,K9=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -40830,7 +40830,7 @@ lösung: vb-wald-loesung.visustruct -`,K9=` +`,ew=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;98;97;108;108;119;117;114;102;46;99;115;118;34;41;41; @@ -40911,7 +40911,7 @@ lösung: vb-wald-loesung.visustruct 97;117;115;46;99;108;111;115;101;40;41; -`,ew=` +`,tw=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;98;97;108;108;119;117;114;102;46;99;115;118;34;41;41; @@ -40920,7 +40920,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,tw=` +`,nw=` 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -40985,7 +40985,7 @@ lösung: vb-wald-loesung.visustruct -`,nw=` +`,iw=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;71;97;110;122;101;32;90;97;104;108;32;101;105;110;103;101;98;101;110;34; @@ -41011,7 +41011,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;105;110;97;101;114; -`,iw=` +`,aw=` 99;104;97;114;91;93;32;97;108;112;104;97;98;101;116;32;61;32;123;39;65;39;44;32;39;66;39;44;32;39;67;39;44;32;39;68;39;44;32;39;69;39;44;32;39;70;39;44;32;39;71;39;44;32;39;72;39;44;32;39;73;39;44;32;39;74;39;44;32;39;75;39;44;32;39;76;39;44;32;39;77;39;44;32;39;78;39;44;32;39;79;39;44;32;39;80;39;44;32;39;81;39;44;32;39;82;39;44;32;39;83;39;44;32;39;84;39;44;32;39;85;39;44;32;39;86;39;44;32;39;87;39;44;32;39;88;39;44;32;39;89;39;44;32;39;90;39;125; @@ -41065,13 +41065,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;103;101;104;101;105;109; -`,aw=` +`,sw=` 99;104;97;114;91;93;32;97;108;112;104;97;98;101;116;32;61;32;123;39;65;39;44;32;39;66;39;44;32;39;67;39;44;32;39;68;39;44;32;39;69;39;44;32;39;70;39;44;32;39;71;39;44;32;39;72;39;44;32;39;73;39;44;32;39;74;39;44;32;39;75;39;44;32;39;76;39;44;32;39;77;39;44;32;39;78;39;44;32;39;79;39;44;32;39;80;39;44;32;39;81;39;44;32;39;82;39;44;32;39;83;39;44;32;39;84;39;44;32;39;85;39;44;32;39;86;39;44;32;39;87;39;44;32;39;88;39;44;32;39;89;39;44;32;39;90;39;125; -`,sw=` +`,rw=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;116;32;34;87;101;108;99;104;101;115;32;87;111;114;116;32;40;110;117;114;32;71;114;111;223;98;117;99;104;115;116;97;98;101;110;41;63;34; @@ -41102,7 +41102,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;103;101;104;101;105;109; -`,rw=` +`,ow=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;103;101;104;101;105;109;32;34;87;101;108;99;104;101;114;32;71;101;104;101;105;109;116;101;120;116;63;34; @@ -41133,7 +41133,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;107;108;97;114;116;101;120;116; -`,ow=` +`,lw=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;32;101;105;110;103;101;98;101;110;34; @@ -41169,7 +41169,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;99;104;114;105;116;116;101;58;32;34;32;43;32;115;99;104;114;105;116;116;101; -`,lw=` +`,uw=` 105;110;112;117;116;58;32;105;110;116;32;97;110;122;97;104;108;32;34;87;105;101;32;118;105;101;108;101;32;78;111;116;101;110;63;34; @@ -41197,7 +41197,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;99;104;110;105;116;116; -`,uw=` +`,mw=` 105;110;112;117;116;58;32;105;110;116;32;97;110;122;97;104;108;32;34;87;105;101;32;118;105;101;108;101;32;90;97;104;108;101;110;63;34; @@ -41234,7 +41234,7 @@ lösung: vb-wald-loesung.visustruct -`,mw=` +`,cw=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;90;97;104;108;32;101;105;110;103;101;98;101;110;34; @@ -41253,7 +41253,7 @@ lösung: vb-wald-loesung.visustruct -`,cw=` +`,dw=` 99;111;110;115;116;32;100;111;117;98;108;101;32;77;87;83;84;32;61;32;48;46;49;57; @@ -41274,7 +41274,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;114;117;116;116;111;112;114;101;105;115; -`,dw=` +`,hw=` 105;110;116;32;112;105;110;32;61;32;48; @@ -41310,7 +41310,7 @@ lösung: vb-wald-loesung.visustruct -`,hw=` +`,gw=` 99;111;110;115;116;32;105;110;116;32;80;73;78;32;61;32;49;50;51;52; @@ -41346,7 +41346,7 @@ lösung: vb-wald-loesung.visustruct -`,gw=` +`,pw=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;49;32;34;69;114;115;116;101;32;90;97;104;108;34; @@ -41390,7 +41390,7 @@ lösung: vb-wald-loesung.visustruct -`,pw=` +`,fw=` 98;111;111;108;101;97;110;91;93;91;93;32;109;101;101;114;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;53;93;91;53;93; @@ -41444,7 +41444,7 @@ lösung: vb-wald-loesung.visustruct -`,fw=` +`,xw=` 98;111;111;108;101;97;110;91;93;91;93;32;109;101;101;114;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;53;93;91;53;93; @@ -41471,7 +41471,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;115;112;97;108;116;101;110;32;61;32;123;34;65;34;44;32;34;66;34;44;32;34;67;34;44;32;34;68;34;44;32;34;69;34;125; -`,xw=` +`,bw=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;109;101;114;32;34;87;101;108;99;104;101;115;32;71;101;114;105;99;104;116;63;32;40;49;44;32;50;32;111;100;101;114;32;51;41;34; @@ -41500,7 +41500,7 @@ lösung: vb-wald-loesung.visustruct -`,bw=` +`,yw=` 105;110;116;32;122;97;104;108;49;32;61;32;52; @@ -41515,7 +41515,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,yw=` +`,vw=` 83;116;114;105;110;103;91;93;32;110;97;109;101;110;32;61;32;110;101;119;32;83;116;114;105;110;103;91;53;93; @@ -41537,7 +41537,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;97;102;101;108;100;105;101;110;115;116;58;32;34;32;43;32;110;97;109;101;110;91;110;117;109;109;101;114;32;45;32;49;93; -`,vw=` +`,ww=` 105;110;116;32;122;97;104;108;32;61;32;52; @@ -41549,7 +41549,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;101;114;100;111;112;112;101;108;116;101;32;90;97;104;108;58;32;34;32;43;32;122;97;104;108; -`,ww=` +`,zw=` -1; @@ -41596,7 +41596,7 @@ lösung: vb-wald-loesung.visustruct -`,zw=` +`,Iw=` @@ -41633,7 +41633,7 @@ lösung: vb-wald-loesung.visustruct -`,Iw=` +`,kw=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;118;111;107;97;98;101;108;110;46;99;115;118;34;41;41; @@ -41693,7 +41693,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;114;105;99;104;116;105;103;32;43;32;34;32;118;111;110;32;34;32;43;32;97;110;122;97;104;108;32;43;32;34;32;114;105;99;104;116;105;103;34; -`,kw=` +`,Sw=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;118;111;107;97;98;101;108;110;46;99;115;118;34;41;41; @@ -41702,7 +41702,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,Sw=` +`,_w=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -41721,7 +41721,7 @@ lösung: vb-wald-loesung.visustruct -`,_w=` +`,Tw=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;117;99;104;46;116;120;116;34;41;41; @@ -41744,7 +41744,7 @@ lösung: vb-wald-loesung.visustruct 108;101;115;101;114;46;99;108;111;115;101;40;41; -`,Tw=` +`,Ow=` 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;34;90;111;114;97;59;49;59;50;59;50;34; @@ -41762,7 +41762,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;32;43;32;34;32;104;97;116;32;105;110;32;77;97;116;104;101;32;101;105;110;101;32;34;32;43;32;109;97;116;104;101; -`,Ow=` +`,Aw=` 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;34;123;92;34;110;97;109;101;92;34;58;32;92;34;90;111;114;97;92;34;44;32;92;34;97;114;116;92;34;58;32;92;34;90;105;101;103;101;92;34;44;32;92;34;97;108;116;101;114;92;34;58;32;54;125;44;34; @@ -41780,7 +41780,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101; -`,Aw=` +`,Pw=` 83;99;97;110;110;101;114;32;100;97;116;101;105;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;101;105;110;107;97;117;102;46;116;120;116;34;41;41; @@ -41800,7 +41800,7 @@ lösung: vb-wald-loesung.visustruct 100;97;116;101;105;46;99;108;111;115;101;40;41; -`,Pw=` +`,jw=` 111;117;116;112;117;116;58;32;34;87;101;108;99;111;109;101;34; @@ -41812,7 +41812,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;111;100;98;121;101;34; -`,jw=` +`,Cw=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -41831,7 +41831,7 @@ lösung: vb-wald-loesung.visustruct -`,Cw=` +`,Bw=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;104;114;111;119;46;99;115;118;34;41;41; @@ -41912,7 +41912,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;46;99;108;111;115;101;40;41; -`,Bw=` +`,Dw=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;104;114;111;119;46;99;115;118;34;41;41; @@ -41921,7 +41921,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,Dw=` +`,Zw=` 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -41986,7 +41986,7 @@ lösung: vb-wald-loesung.visustruct -`,Zw=` +`,Mw=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;69;110;116;101;114;32;97;32;119;104;111;108;101;32;110;117;109;98;101;114;34; @@ -42012,7 +42012,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;105;110;97;114;121; -`,Mw=` +`,Lw=` 99;104;97;114;91;93;32;97;108;112;104;97;98;101;116;32;61;32;123;39;65;39;44;32;39;66;39;44;32;39;67;39;44;32;39;68;39;44;32;39;69;39;44;32;39;70;39;44;32;39;71;39;44;32;39;72;39;44;32;39;73;39;44;32;39;74;39;44;32;39;75;39;44;32;39;76;39;44;32;39;77;39;44;32;39;78;39;44;32;39;79;39;44;32;39;80;39;44;32;39;81;39;44;32;39;82;39;44;32;39;83;39;44;32;39;84;39;44;32;39;85;39;44;32;39;86;39;44;32;39;87;39;44;32;39;88;39;44;32;39;89;39;44;32;39;90;39;125; @@ -42066,13 +42066,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;101;99;114;101;116; -`,Lw=` +`,Ww=` 99;104;97;114;91;93;32;97;108;112;104;97;98;101;116;32;61;32;123;39;65;39;44;32;39;66;39;44;32;39;67;39;44;32;39;68;39;44;32;39;69;39;44;32;39;70;39;44;32;39;71;39;44;32;39;72;39;44;32;39;73;39;44;32;39;74;39;44;32;39;75;39;44;32;39;76;39;44;32;39;77;39;44;32;39;78;39;44;32;39;79;39;44;32;39;80;39;44;32;39;81;39;44;32;39;82;39;44;32;39;83;39;44;32;39;84;39;44;32;39;85;39;44;32;39;86;39;44;32;39;87;39;44;32;39;88;39;44;32;39;89;39;44;32;39;90;39;125; -`,Ww=` +`,Ew=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;100;32;34;87;104;105;99;104;32;119;111;114;100;32;40;99;97;112;105;116;97;108;32;108;101;116;116;101;114;115;32;111;110;108;121;41;63;34; @@ -42103,7 +42103,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;101;99;114;101;116; -`,Ew=` +`,Nw=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;115;101;99;114;101;116;32;34;87;104;105;99;104;32;115;101;99;114;101;116;32;116;101;120;116;63;34; @@ -42134,7 +42134,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;112;108;97;105;110; -`,Nw=` +`,Fw=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;69;110;116;101;114;32;97;32;115;116;97;114;116;32;110;117;109;98;101;114;34; @@ -42170,7 +42170,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;101;112;115;58;32;34;32;43;32;115;116;101;112;115; -`,Fw=` +`,Jw=` 105;110;112;117;116;58;32;105;110;116;32;99;111;117;110;116;32;34;72;111;119;32;109;97;110;121;32;103;114;97;100;101;115;63;34; @@ -42198,7 +42198,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;118;101;114;97;103;101; -`,Jw=` +`,Rw=` 105;110;112;117;116;58;32;105;110;116;32;99;111;117;110;116;32;34;72;111;119;32;109;97;110;121;32;110;117;109;98;101;114;115;63;34; @@ -42235,7 +42235,7 @@ lösung: vb-wald-loesung.visustruct -`,Rw=` +`,Gw=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;69;110;116;101;114;32;97;32;110;117;109;98;101;114;34; @@ -42254,7 +42254,7 @@ lösung: vb-wald-loesung.visustruct -`,Gw=` +`,Hw=` 99;111;110;115;116;32;100;111;117;98;108;101;32;86;65;84;32;61;32;48;46;49;57; @@ -42275,7 +42275,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;103;114;111;115;115;80;114;105;99;101; -`,Hw=` +`,Vw=` 105;110;116;32;112;105;110;32;61;32;48; @@ -42311,7 +42311,7 @@ lösung: vb-wald-loesung.visustruct -`,Vw=` +`,Qw=` 99;111;110;115;116;32;105;110;116;32;80;73;78;32;61;32;49;50;51;52; @@ -42347,7 +42347,7 @@ lösung: vb-wald-loesung.visustruct -`,Qw=` +`,qw=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;49;32;34;70;105;114;115;116;32;110;117;109;98;101;114;34; @@ -42391,7 +42391,7 @@ lösung: vb-wald-loesung.visustruct -`,qw=` +`,Uw=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;53;93;91;53;93; @@ -42445,7 +42445,7 @@ lösung: vb-wald-loesung.visustruct -`,Uw=` +`,$w=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;53;93;91;53;93; @@ -42472,7 +42472,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;99;111;108;117;109;110;115;32;61;32;123;34;65;34;44;32;34;66;34;44;32;34;67;34;44;32;34;68;34;44;32;34;69;34;125; -`,$w=` +`,Yw=` 105;110;112;117;116;58;32;105;110;116;32;112;105;99;107;32;34;87;104;105;99;104;32;100;105;115;104;63;32;40;49;44;32;50;32;111;114;32;51;41;34; @@ -42501,7 +42501,7 @@ lösung: vb-wald-loesung.visustruct -`,Yw=` +`,Xw=` 105;110;116;32;110;117;109;98;101;114;49;32;61;32;52; @@ -42516,7 +42516,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,Xw=` +`,Kw=` 83;116;114;105;110;103;91;93;32;110;97;109;101;115;32;61;32;110;101;119;32;83;116;114;105;110;103;91;53;93; @@ -42538,7 +42538,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;66;111;97;114;100;32;100;117;116;121;58;32;34;32;43;32;110;97;109;101;115;91;112;105;99;107;32;45;32;49;93; -`,Kw=` +`,e5=` 105;110;116;32;110;117;109;98;101;114;32;61;32;52; @@ -42550,7 +42550,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;111;117;98;108;101;100;32;110;117;109;98;101;114;58;32;34;32;43;32;110;117;109;98;101;114; -`,e5=` +`,t5=` -1; @@ -42597,7 +42597,7 @@ lösung: vb-wald-loesung.visustruct -`,t5=` +`,n5=` @@ -42634,7 +42634,7 @@ lösung: vb-wald-loesung.visustruct -`,n5=` +`,i5=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;119;111;114;100;115;46;99;115;118;34;41;41; @@ -42694,7 +42694,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;114;105;103;104;116;32;43;32;34;32;111;102;32;34;32;43;32;99;111;117;110;116;32;43;32;34;32;114;105;103;104;116;34; -`,i5=` +`,a5=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;119;111;114;100;115;46;99;115;118;34;41;41; @@ -42703,7 +42703,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,a5=` +`,s5=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -42722,7 +42722,7 @@ lösung: vb-wald-loesung.visustruct -`,s5=` +`,r5=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;111;111;107;46;116;120;116;34;41;41; @@ -42745,7 +42745,7 @@ lösung: vb-wald-loesung.visustruct 114;101;97;100;101;114;46;99;108;111;115;101;40;41; -`,r5=` +`,o5=` 83;116;114;105;110;103;32;108;105;110;101;32;61;32;34;90;111;114;97;59;49;59;50;59;50;34; @@ -42763,7 +42763,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;32;43;32;34;32;103;111;116;32;97;32;34;32;43;32;109;97;116;104;115;32;43;32;34;32;105;110;32;109;97;116;104;115;34; -`,o5=` +`,l5=` 83;116;114;105;110;103;32;108;105;110;101;32;61;32;34;123;92;34;110;97;109;101;92;34;58;32;92;34;90;111;114;97;92;34;44;32;92;34;115;112;101;99;105;101;115;92;34;58;32;92;34;103;111;97;116;92;34;44;32;92;34;97;103;101;92;34;58;32;54;125;44;34; @@ -42781,7 +42781,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101; -`,l5=` +`,u5=` 83;99;97;110;110;101;114;32;102;105;108;101;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;115;104;111;112;112;105;110;103;46;116;120;116;34;41;41; @@ -42801,7 +42801,7 @@ lösung: vb-wald-loesung.visustruct 102;105;108;101;46;99;108;111;115;101;40;41; -`,u5=` +`,m5=` 105;110;116;91;93;91;93;32;116;97;98;108;101;32;61;32;110;101;119;32;105;110;116;91;49;48;93;91;49;48;93; @@ -42833,7 +42833,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;183;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;116;97;98;108;101;91;97;32;45;32;49;93;91;98;32;45;32;49;93; -`,m5=` +`,c5=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;116;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -42881,7 +42881,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;114;101;101;58;32;34;32;43;32;102;114;101;101; -`,c5=` +`,d5=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;116;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -42896,7 +42896,7 @@ lösung: vb-wald-loesung.visustruct 115;101;97;116;115;91;50;93;91;51;93;32;61;32;116;114;117;101; -`,d5=` +`,h5=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;116;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -42930,7 +42930,7 @@ lösung: vb-wald-loesung.visustruct -`,h5=` +`,g5=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;116;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -42948,7 +42948,7 @@ lösung: vb-wald-loesung.visustruct 105;110;112;117;116;58;32;105;110;116;32;115;101;97;116;32;34;83;101;97;116;34; -`,g5=` +`,p5=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;116;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -42996,7 +42996,7 @@ lösung: vb-wald-loesung.visustruct -`,p5=` +`,f5=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;116;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -43020,7 +43020,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;111;119;32;49;44;32;115;101;97;116;32;50;32;115;111;108;100;63;32;34;32;43;32;115;101;97;116;115;91;49;93;91;50;93; -`,f5=` +`,x5=` 105;110;116;32;115;101;99;111;110;100;115;32;61;32;50;48;48; @@ -43035,7 +43035,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;115;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;32;43;32;34;32;115;34; -`,x5=` +`,b5=` 105;110;116;32;115;101;99;111;110;100;115;32;61;32;50;48;48; @@ -43050,7 +43050,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;115;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;32;43;32;34;32;115;34; -`,b5=` +`,y5=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -43068,7 +43068,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;105;103;104;116;58;32;34;32;43;32;104;101;105;103;104;116;32;43;32;34;32;109;34; -`,y5=` +`,v5=` 105;110;116;32;110;117;109;98;101;114;32;61;32;51; @@ -43083,7 +43083,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;98;101;114; -`,v5=` +`,w5=` 105;110;116;32;110;117;109;98;101;114;32;61;32;50; @@ -43098,7 +43098,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;98;101;114; -`,w5=` +`,z5=` 111;117;116;112;117;116;58;32;110;117;109;98;101;114; @@ -43113,7 +43113,7 @@ lösung: vb-wald-loesung.visustruct 110;117;109;98;101;114;32;61;32;110;117;109;98;101;114;32;43;32;51; -`,z5=` +`,I5=` 83;116;114;105;110;103;32;108;101;102;116;32;61;32;34;106;117;105;99;101;34; @@ -43137,7 +43137,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;105;103;104;116;58;32;34;32;43;32;114;105;103;104;116; -`,I5=` +`,k5=` 83;116;114;105;110;103;32;108;101;102;116;32;61;32;34;106;117;105;99;101;34; @@ -43152,7 +43152,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;105;103;104;116;58;32;34;32;43;32;114;105;103;104;116; -`,k5=` +`,S5=` 105;110;116;32;97;32;61;32;53; @@ -43176,7 +43176,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,S5=` +`,_5=` 105;110;116;32;97;103;101;32;61;32;49;52; @@ -43194,7 +43194,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;105;103;104;116;58;32;34;32;43;32;104;101;105;103;104;116;32;43;32;34;32;109;34; -`,_5=` +`,T5=` 105;110;116;32;109;105;110;117;116;101;115;32;61;32;49;51;53; @@ -43209,7 +43209,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;104;111;117;114;115;32;43;32;34;32;104;111;117;114;115;32;97;110;100;32;34;32;43;32;114;101;109;97;105;110;100;101;114;32;43;32;34;32;109;105;110;117;116;101;115;34; -`,T5=` +`,O5=` 105;110;116;32;99;111;117;110;116;32;61;32;51; @@ -43224,7 +43224,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108;80;114;105;99;101;32;43;32;34;32;101;117;114;111;115;34; -`,O5=` +`,A5=` 105;110;116;32;99;114;101;100;105;116;32;61;32;50;48; @@ -43239,7 +43239,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;101;102;116;58;32;34;32;43;32;99;114;101;100;105;116; -`,A5=` +`,P5=` 105;110;116;32;99;114;101;100;105;116;32;61;32;50;48; @@ -43254,7 +43254,7 @@ lösung: vb-wald-loesung.visustruct 99;114;101;100;105;116;32;61;32;99;114;101;100;105;116;32;45;32;112;114;105;99;101; -`,P5=` +`,j5=` 105;110;116;32;112;114;105;99;101;32;61;32;57; @@ -43269,7 +43269,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,j5=` +`,C5=` 105;110;116;32;108;101;110;103;116;104;32;61;32;55; @@ -43290,7 +43290,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;101;114;105;109;101;116;101;114;58;32;34;32;43;32;112;101;114;105;109;101;116;101;114; -`,C5=` +`,B5=` 105;110;116;32;115;101;99;111;110;100;115;32;61;32;50;48;48; @@ -43305,7 +43305,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;115;32;43;32;34;32;109;105;110;117;116;101;115;32;97;110;100;32;34;32;43;32;114;101;109;97;105;110;100;101;114;32;43;32;34;32;115;101;99;111;110;100;115;34; -`,B5=` +`,D5=` 105;110;116;32;115;101;99;111;110;100;115;32;61;32;50;48;48; @@ -43314,7 +43314,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;115;32;43;32;34;32;109;105;110;117;116;101;115;32;97;110;100;32;34;32;43;32;114;101;109;97;105;110;100;101;114;32;43;32;34;32;115;101;99;111;110;100;115;34; -`,D5=` +`,Z5=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;97;109;101;32;34;87;104;97;116;32;105;115;32;121;111;117;114;32;110;97;109;101;63;34; @@ -43323,7 +43323,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;108;108;111;32;34;32;43;32;110;97;109;101;32;43;32;34;33;34; -`,Z5=` +`,M5=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -43338,7 +43338,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,M5=` +`,L5=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -43350,7 +43350,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;40;97;32;43;32;98;41; -`,L5=` +`,W5=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -43362,7 +43362,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;97;32;43;32;98; -`,W5=` +`,E5=` 105;110;112;117;116;58;32;105;110;116;32;121;101;97;114;115;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -43374,7 +43374,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;104;97;116;32;105;115;32;97;98;111;117;116;32;34;32;43;32;100;97;121;115;32;43;32;34;32;100;97;121;115;46;34; -`,E5=` +`,N5=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;120;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -43389,7 +43389,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;101;97;110;58;32;34;32;43;32;109;101;97;110; -`,N5=` +`,F5=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -43410,7 +43410,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;114;111;100;117;99;116;58;32;34;32;43;32;112;114;111;100;117;99;116; -`,F5=` +`,J5=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -43429,7 +43429,7 @@ lösung: vb-wald-loesung.visustruct -`,J5=` +`,R5=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;78;117;109;98;101;114;63;34; @@ -43451,7 +43451,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;98;101;114; -`,R5=` +`,G5=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;78;117;109;98;101;114;63;34; @@ -43470,7 +43470,7 @@ lösung: vb-wald-loesung.visustruct -`,G5=` +`,H5=` 105;110;116;32;112;111;105;110;116;115;32;61;32;48; @@ -43488,7 +43488,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;105;110;116;115;58;32;34;32;43;32;112;111;105;110;116;115; -`,H5=` +`,V5=` 105;110;116;32;112;111;105;110;116;115;32;61;32;48; @@ -43506,7 +43506,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;105;110;116;115;58;32;34;32;43;32;112;111;105;110;116;115; -`,V5=` +`,Q5=` 105;110;116;32;112;114;105;99;101;32;61;32;56; @@ -43524,7 +43524,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,Q5=` +`,q5=` 105;110;116;32;112;114;105;99;101;32;61;32;56; @@ -43542,7 +43542,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,q5=` +`,U5=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -43564,7 +43564,7 @@ lösung: vb-wald-loesung.visustruct -`,U5=` +`,$5=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;112;114;105;99;101;32;34;80;114;105;99;101;32;105;110;32;101;117;114;111;115;63;34; @@ -43586,7 +43586,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;32;112;97;121;58;32;34;32;43;32;112;114;105;99;101;32;43;32;34;32;101;117;114;111;115;34; -`,$5=` +`,Y5=` 105;110;112;117;116;58;32;105;110;116;32;103;114;97;100;101;32;34;71;114;97;100;101;63;34; @@ -43605,7 +43605,7 @@ lösung: vb-wald-loesung.visustruct -`,Y5=` +`,X5=` 105;110;112;117;116;58;32;105;110;116;32;112;111;105;110;116;115;32;34;72;111;119;32;109;97;110;121;32;112;111;105;110;116;115;63;34; @@ -43624,7 +43624,7 @@ lösung: vb-wald-loesung.visustruct -`,X5=` +`,K5=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -43643,7 +43643,7 @@ lösung: vb-wald-loesung.visustruct -`,K5=` +`,e6=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -43662,7 +43662,7 @@ lösung: vb-wald-loesung.visustruct -`,e6=` +`,t6=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -43681,7 +43681,7 @@ lösung: vb-wald-loesung.visustruct -`,t6=` +`,n6=` 105;110;112;117;116;58;32;105;110;116;32;103;114;97;100;101;32;34;71;114;97;100;101;63;34; @@ -43700,7 +43700,7 @@ lösung: vb-wald-loesung.visustruct -`,n6=` +`,i6=` 105;110;112;117;116;58;32;105;110;116;32;121;101;97;114;32;34;89;101;97;114;63;34; @@ -43719,7 +43719,7 @@ lösung: vb-wald-loesung.visustruct -`,i6=` +`,a6=` 105;110;112;117;116;58;32;105;110;116;32;100;97;121;32;34;68;97;121;32;40;49;32;116;111;32;55;41;63;34; @@ -43738,7 +43738,7 @@ lösung: vb-wald-loesung.visustruct -`,a6=` +`,s6=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;99;111;108;111;114;32;34;87;104;97;116;32;99;111;108;111;114;32;105;115;32;116;104;101;32;116;114;97;102;102;105;99;32;108;105;103;104;116;63;34; @@ -43767,7 +43767,7 @@ lösung: vb-wald-loesung.visustruct -`,s6=` +`,r6=` 105;110;112;117;116;58;32;105;110;116;32;99;104;111;105;99;101;32;34;49;32;119;97;116;101;114;44;32;50;32;106;117;105;99;101;44;32;51;32;99;111;99;111;97;34; @@ -43796,7 +43796,7 @@ lösung: vb-wald-loesung.visustruct -`,r6=` +`,o6=` 105;110;112;117;116;58;32;105;110;116;32;100;97;121;32;34;87;104;105;99;104;32;100;97;121;32;40;49;32;116;111;32;55;41;63;34; @@ -43815,7 +43815,7 @@ lösung: vb-wald-loesung.visustruct -`,o6=` +`,l6=` 105;110;112;117;116;58;32;105;110;116;32;100;97;121;32;34;87;104;105;99;104;32;100;97;121;32;40;49;32;116;111;32;55;41;63;34; @@ -43834,7 +43834,7 @@ lösung: vb-wald-loesung.visustruct -`,l6=` +`,u6=` 105;110;112;117;116;58;32;105;110;116;32;104;111;117;114;32;34;87;104;97;116;32;116;105;109;101;32;105;115;32;105;116;32;40;106;117;115;116;32;116;104;101;32;104;111;117;114;41;63;34; @@ -43853,7 +43853,7 @@ lösung: vb-wald-loesung.visustruct -`,u6=` +`,m6=` 105;110;112;117;116;58;32;105;110;116;32;103;114;97;100;101;32;34;87;104;105;99;104;32;103;114;97;100;101;63;34; @@ -43897,7 +43897,7 @@ lösung: vb-wald-loesung.visustruct -`,m6=` +`,c6=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;34; @@ -43944,7 +43944,7 @@ lösung: vb-wald-loesung.visustruct -`,c6=` +`,d6=` 105;110;112;117;116;58;32;105;110;116;32;99;104;111;105;99;101;32;34;49;32;119;97;116;101;114;44;32;50;32;106;117;105;99;101;44;32;51;32;99;111;99;111;97;34; @@ -43983,7 +43983,7 @@ lösung: vb-wald-loesung.visustruct -`,d6=` +`,h6=` 80;117;116;32;97;32;99;117;112;32;111;110;32;116;104;101;32;116;97;98;108;101; @@ -44013,7 +44013,7 @@ lösung: vb-wald-loesung.visustruct 68;114;105;110;107;32;116;104;101;32;116;101;97; -`,h6=` +`,g6=` 71;101;116;32;117;112; @@ -44028,7 +44028,7 @@ lösung: vb-wald-loesung.visustruct 72;97;118;101;32;98;114;101;97;107;102;97;115;116; -`,g6=` +`,p6=` 70;105;108;108;32;116;104;101;32;107;101;116;116;108;101;32;119;105;116;104;32;119;97;116;101;114; @@ -44049,7 +44049,7 @@ lösung: vb-wald-loesung.visustruct 84;97;107;101;32;111;117;116;32;116;104;101;32;116;101;97;32;98;97;103; -`,p6=` +`,f6=` 73;115;32;105;116;32;114;97;105;110;105;110;103;63; @@ -44068,7 +44068,7 @@ lösung: vb-wald-loesung.visustruct 76;101;97;118;101; -`,f6=` +`,x6=` 80;108;97;116;101;32;110;111;116;32;101;109;112;116;121; @@ -44082,7 +44082,7 @@ lösung: vb-wald-loesung.visustruct 67;108;101;97;114;32;116;104;101;32;112;108;97;116;101; -`,x6=` +`,b6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;67;111;117;110;116;32;117;112;32;116;111;63;34; @@ -44102,7 +44102,7 @@ lösung: vb-wald-loesung.visustruct -`,b6=` +`,y6=` 105;110;116;32;110;117;109;98;101;114;32;61;32;51; @@ -44122,7 +44122,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,y6=` +`,v6=` 105;110;116;32;110;117;109;98;101;114;32;61;32;51; @@ -44139,7 +44139,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,v6=` +`,w6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;70;97;99;116;111;114;105;97;108;32;111;102;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -44165,7 +44165,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;32;43;32;34;33;32;61;32;34;32;43;32;102;97;99;116;111;114;105;97;108; -`,w6=` +`,z6=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -44200,7 +44200,7 @@ lösung: vb-wald-loesung.visustruct -`,z6=` +`,I6=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -44235,7 +44235,7 @@ lösung: vb-wald-loesung.visustruct -`,I6=` +`,k6=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;87;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -44264,7 +44264,7 @@ lösung: vb-wald-loesung.visustruct -`,k6=` +`,S6=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;83;116;97;114;116;32;110;117;109;98;101;114;34; @@ -44287,7 +44287,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;116;101;112;115; -`,S6=` +`,_6=` 105;110;116;32;110;117;109;98;101;114;32;61;32;48; @@ -44304,7 +44304,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;104;97;110;107;32;121;111;117;33;34; -`,_6=` +`,T6=` 105;110;116;32;105;32;61;32;49;48; @@ -44321,7 +44321,7 @@ lösung: vb-wald-loesung.visustruct -`,T6=` +`,O6=` 105;110;112;117;116;58;32;105;110;116;32;103;111;97;108;32;34;83;97;118;105;110;103;115;32;103;111;97;108;63;34; @@ -44347,7 +44347,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;101;101;107;115;58;32;34;32;43;32;119;101;101;107;115; -`,O6=` +`,A6=` 105;110;112;117;116;58;32;105;110;116;32;103;111;97;108;32;34;83;97;118;105;110;103;115;32;103;111;97;108;63;34; @@ -44373,7 +44373,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;101;101;107;115;58;32;34;32;43;32;119;101;101;107;115; -`,A6=` +`,P6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;101;114;101;63;34; @@ -44393,7 +44393,7 @@ lösung: vb-wald-loesung.visustruct -`,P6=` +`,j6=` 105;110;116;32;103;114;97;100;101;32;61;32;48; @@ -44410,7 +44410,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;89;111;117;114;32;103;114;97;100;101;58;32;34;32;43;32;103;114;97;100;101; -`,j6=` +`,C6=` 105;110;116;32;115;117;109;32;61;32;48; @@ -44433,7 +44433,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,C6=` +`,B6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;83;116;97;114;116;32;110;117;109;98;101;114;34; @@ -44452,7 +44452,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;33;34; -`,B6=` +`,D6=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;87;104;105;99;104;32;116;105;109;101;115;32;116;97;98;108;101;63;34; @@ -44471,7 +44471,7 @@ lösung: vb-wald-loesung.visustruct -`,D6=` +`,Z6=` 105;110;116;32;105;32;61;32;49; @@ -44484,7 +44484,7 @@ lösung: vb-wald-loesung.visustruct -`,Z6=` +`,M6=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;83;116;97;114;116;32;110;117;109;98;101;114;63;34; @@ -44501,7 +44501,7 @@ lösung: vb-wald-loesung.visustruct -`,M6=` +`,L6=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;83;116;97;114;116;32;110;117;109;98;101;114;63;34; @@ -44518,7 +44518,7 @@ lösung: vb-wald-loesung.visustruct -`,L6=` +`,W6=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;83;116;97;114;116;32;110;117;109;98;101;114;63;34; @@ -44535,7 +44535,7 @@ lösung: vb-wald-loesung.visustruct -`,W6=` +`,E6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -44557,7 +44557,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,E6=` +`,N6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;72;111;119;32;109;97;110;121;32;108;105;110;101;115;63;34; @@ -44586,7 +44586,7 @@ lösung: vb-wald-loesung.visustruct -`,N6=` +`,F6=` 105;110;116;32;99;111;117;110;116;32;61;32;48; @@ -44618,7 +44618,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;99;111;117;110;116; -`,F6=` +`,J6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -44650,7 +44650,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;99;111;117;110;116; -`,J6=` +`,R6=` 105;110;112;117;116;58;32;105;110;116;32;114;111;119;32;34;87;104;105;99;104;32;116;105;109;101;115;32;116;97;98;108;101;63;34; @@ -44666,7 +44666,7 @@ lösung: vb-wald-loesung.visustruct -`,R6=` +`,G6=` 105;110;112;117;116;58;32;105;110;116;32;114;111;119;32;34;87;104;105;99;104;32;116;105;109;101;115;32;116;97;98;108;101;63;34; @@ -44682,7 +44682,7 @@ lösung: vb-wald-loesung.visustruct -`,G6=` +`,H6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -44698,7 +44698,7 @@ lösung: vb-wald-loesung.visustruct -`,H6=` +`,V6=` 105;110;112;117;116;58;32;105;110;116;32;119;105;100;116;104;32;34;87;105;100;116;104;34; @@ -44730,7 +44730,7 @@ lösung: vb-wald-loesung.visustruct -`,V6=` +`,Q6=` 105;110;116;91;93;32;110;117;109;98;101;114;115;32;61;32;123;50;44;32;52;44;32;54;44;32;56;44;32;49;48;125; @@ -44746,7 +44746,7 @@ lösung: vb-wald-loesung.visustruct -`,Q6=` +`,q6=` 105;110;116;91;93;32;118;97;108;117;101;115;32;61;32;123;52;44;32;56;44;32;49;53;44;32;49;54;44;32;50;51;44;32;52;50;125; @@ -44761,7 +44761,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;118;97;108;117;101;115;46;108;101;110;103;116;104; -`,q6=` +`,U6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -44793,7 +44793,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;117;110;116;58;32;34;32;43;32;99;111;117;110;116; -`,U6=` +`,$6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -44825,7 +44825,7 @@ lösung: vb-wald-loesung.visustruct -`,$6=` +`,Y6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;72;111;119;32;109;97;110;121;32;115;116;101;112;115;63;34; @@ -44854,7 +44854,7 @@ lösung: vb-wald-loesung.visustruct -`,Y6=` +`,X6=` 83;116;114;105;110;103;91;93;32;110;97;109;101;115;32;61;32;110;101;119;32;83;116;114;105;110;103;91;51;93; @@ -44873,7 +44873,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;105;114;115;116;32;110;97;109;101;58;32;34;32;43;32;110;97;109;101;115;91;48;93; -`,X6=` +`,K6=` 105;110;116;91;93;32;110;117;109;98;101;114;115;32;61;32;110;101;119;32;105;110;116;91;52;93; @@ -44899,7 +44899,7 @@ lösung: vb-wald-loesung.visustruct -`,K6=` +`,ez=` 105;110;116;91;93;32;110;117;109;98;101;114;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -44950,7 +44950,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;97;120;105;109;117;109;58;32;34;32;43;32;109;97;120; -`,ez=` +`,tz=` 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;123;49;50;44;32;55;44;32;49;57;44;32;52;125; @@ -44991,7 +44991,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;97;120;105;109;117;109;58;32;34;32;43;32;109;97;120; -`,tz=` +`,nz=` 105;110;116;32;115;117;109;32;61;32;48; @@ -45014,7 +45014,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,nz=` +`,iz=` 105;110;116;32;115;117;109;32;61;32;48; @@ -45044,7 +45044,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,iz=` +`,az=` 105;110;112;117;116;58;32;105;110;116;32;108;101;110;103;116;104;32;34;76;101;110;103;116;104;63;34; @@ -45059,13 +45059,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;114;101;97;58;32;34;32;43;32;102; -`,az=` +`,sz=` 114;101;116;117;114;110;32;97;32;42;32;98; -`,sz=` +`,rz=` 115;104;111;119;71;114;101;101;116;105;110;103;40;41; @@ -45077,7 +45077,7 @@ lösung: vb-wald-loesung.visustruct 115;104;111;119;82;101;115;117;108;116;40;41; -`,rz=` +`,oz=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;101;115;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -45109,7 +45109,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;105;103;104;101;115;116;32;116;101;109;112;101;114;97;116;117;114;101;58;32;34;32;43;32;109;97;120; -`,oz=` +`,lz=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;101;115;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -45141,7 +45141,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;105;103;104;101;115;116;32;116;101;109;112;101;114;97;116;117;114;101;58;32;34;32;43;32;109;97;120; -`,lz=` +`,uz=` 105;110;116;91;93;32;103;114;97;100;101;115;32;61;32;123;50;44;32;51;44;32;49;44;32;52;125; @@ -45163,7 +45163,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,uz=` +`,mz=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;87;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -45175,7 +45175,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;104;101;32;115;113;117;97;114;101;32;105;115;32;34;32;43;32;113; -`,mz=` +`,cz=` 105;110;116;32;114;101;115;117;108;116;32;61;32;120;32;42;32;120; @@ -45184,7 +45184,7 @@ lösung: vb-wald-loesung.visustruct 114;101;116;117;114;110;32;114;101;115;117;108;116; -`,cz=` +`,dz=` 115;104;111;119;84;105;116;108;101;40;41; @@ -45196,7 +45196,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;108;108;111;32;34;32;43;32;110;97;109;101; -`,dz=` +`,hz=` 111;117;116;112;117;116;58;32;34;87;101;108;99;111;109;101;32;116;111;32;116;104;101;32;113;117;105;122;33;34; @@ -45205,7 +45205,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;89;111;117;32;103;101;116;32;116;104;114;101;101;32;113;117;101;115;116;105;111;110;115;46;34; -`,hz=` +`,gz=` 115;104;111;119;83;117;109;40;51;44;32;52;41; @@ -45217,7 +45217,7 @@ lösung: vb-wald-loesung.visustruct 115;104;111;119;83;117;109;40;120;44;32;120;32;43;32;49;41; -`,gz=` +`,pz=` 105;110;116;32;115;117;109;32;61;32;97;32;43;32;98; @@ -45226,7 +45226,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;43;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;115;117;109; -`,pz=` +`,fz=` 105;110;112;117;116;58;32;105;110;116;32;115;116;97;114;116;32;34;83;116;97;114;116;32;118;97;108;117;101;34; @@ -45249,7 +45249,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;33;34; -`,fz=` +`,xz=` 105;110;112;117;116;58;32;105;110;116;32;115;116;97;114;116;32;34;83;116;97;114;116;32;118;97;108;117;101;34; @@ -45272,7 +45272,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;34; -`,xz=` +`,bz=` 105;110;116;91;93;91;93;32;112;111;105;110;116;115;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -45294,7 +45294,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;108;97;121;101;114;32;50;58;32;34;32;43;32;116;111;116;97;108; -`,bz=` +`,yz=` 105;110;116;91;93;91;93;32;112;111;105;110;116;115;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -45316,7 +45316,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;108;97;121;101;114;32;50;58;32;34;32;43;32;116;111;116;97;108; -`,yz=` +`,vz=` 105;110;116;91;93;91;93;32;112;111;105;110;116;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;49;125;44;32;123;50;44;32;50;125;125; @@ -45345,7 +45345,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,vz=` +`,wz=` 105;110;116;32;115;117;109;32;61;32;48; @@ -45368,7 +45368,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,wz=` +`,zz=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -45390,7 +45390,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,zz=` +`,Iz=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -45412,7 +45412,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,Iz=` +`,kz=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;87;104;105;99;104;32;116;105;109;101;115;32;116;97;98;108;101;63;34; @@ -45444,7 +45444,7 @@ lösung: vb-wald-loesung.visustruct -`,kz=` +`,Sz=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;69;110;116;101;114;32;97;32;110;117;109;98;101;114;34; @@ -45466,7 +45466,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;97;99;116;111;114;105;97;108; -`,Sz=` +`,_z=` 83;116;114;105;110;103;32;108;101;116;116;101;114;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;101;116;116;101;114;46;116;120;116;34;41;41; @@ -45498,13 +45498,13 @@ lösung: vb-wald-loesung.visustruct -`,_z=` +`,Tz=` 83;116;114;105;110;103;32;108;101;116;116;101;114;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;101;116;116;101;114;46;116;120;116;34;41;41; -`,Tz=` +`,Oz=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;102;105;114;115;116;32;34;70;105;114;115;116;32;110;97;109;101;63;34; @@ -45516,7 +45516,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;105;114;115;116;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;108;97;115;116;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,Oz=` +`,Az=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;102;105;114;115;116;32;34;70;105;114;115;116;32;110;97;109;101;63;34; @@ -45528,7 +45528,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;105;114;115;116;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;32;34;32;43;32;108;97;115;116;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;34; -`,Az=` +`,Pz=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;105;110;112;117;116;32;34;80;97;115;115;119;111;114;100;63;34; @@ -45547,7 +45547,7 @@ lösung: vb-wald-loesung.visustruct -`,Pz=` +`,jz=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -45576,7 +45576,7 @@ lösung: vb-wald-loesung.visustruct -`,jz=` +`,Cz=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;83;116;97;114;116;32;118;97;108;117;101;63;34; @@ -45596,7 +45596,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;110;100;34; -`,Cz=` +`,Bz=` 105;110;116;32;116;114;105;101;115;32;61;32;48; @@ -45629,7 +45629,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;114;105;101;115;58;32;34;32;43;32;116;114;105;101;115; -`,Bz=` +`,Dz=` 105;110;116;32;116;114;105;101;115;32;61;32;48; @@ -45662,7 +45662,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;114;105;101;115;58;32;34;32;43;32;116;114;105;101;115; -`,Dz=` +`,Zz=` 105;110;116;32;115;117;109;32;61;32;48; @@ -45704,7 +45704,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;115;117;109; -`,Zz=` +`,Mz=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -45726,7 +45726,7 @@ lösung: vb-wald-loesung.visustruct -`,Mz=` +`,Lz=` 105;110;112;117;116;58;32;105;110;116;32;108;105;109;105;116;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -45742,7 +45742,7 @@ lösung: vb-wald-loesung.visustruct -`,Lz=` +`,Wz=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -45781,7 +45781,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,Wz=` +`,Ez=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -45820,7 +45820,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,Ez=` +`,Nz=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -45855,7 +45855,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;117;110;116;58;32;34;32;43;32;99;111;117;110;116; -`,Nz=` +`,Fz=` 111;117;116;112;117;116;58;32;34;71;111;111;100;32;109;111;114;110;105;110;103;34; @@ -45864,13 +45864,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;100;97;121;32;119;101;32;108;101;97;114;110;32;115;116;114;117;99;116;117;114;101;32;99;104;97;114;116;115;46;34; -`,Fz=` +`,Jz=` 111;117;116;112;117;116;58;32;34;72;101;108;108;111;32;87;111;114;108;100;34; -`,Jz=` +`,Rz=` 111;117;116;112;117;116;58;32;34;72;101;108;108;111;34; @@ -45879,7 +45879,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;73;32;97;109;32;108;101;97;114;110;105;110;103;32;115;116;114;117;99;116;117;114;101;32;99;104;97;114;116;115;34; -`,Rz=` +`,Gz=` 83;99;97;110;110;101;114;32;102;105;108;101;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;115;104;111;112;112;105;110;103;46;116;120;116;34;41;41; @@ -45920,7 +45920,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;99;111;117;110;116;32;43;32;34;32;108;105;110;101;115;32;115;97;118;101;100;34; -`,Gz=` +`,Hz=` 83;99;97;110;110;101;114;32;102;105;108;101;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;115;104;111;112;112;105;110;103;46;116;120;116;34;41;41; @@ -45929,7 +45929,7 @@ lösung: vb-wald-loesung.visustruct 80;114;105;110;116;87;114;105;116;101;114;32;111;117;116;32;61;32;110;101;119;32;80;114;105;110;116;87;114;105;116;101;114;40;34;115;104;111;112;112;105;110;103;45;110;101;119;46;116;120;116;34;41; -`,Hz=` +`,Vz=` 83;99;97;110;110;101;114;32;102;105;108;101;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;115;104;111;112;112;105;110;103;46;116;120;116;34;41;41; @@ -45955,13 +45955,13 @@ lösung: vb-wald-loesung.visustruct 102;105;108;101;46;99;108;111;115;101;40;41; -`,Vz=` +`,Qz=` 83;99;97;110;110;101;114;32;102;105;108;101;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;115;104;111;112;112;105;110;103;46;116;120;116;34;41;41; -`,Qz=` +`,qz=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;111;111;107;46;116;120;116;34;41;41; @@ -46000,7 +46000,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;111;120;58;32;34;32;43;32;99;111;117;110;116; -`,qz=` +`,Uz=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;111;111;107;46;116;120;116;34;41;41; @@ -46009,7 +46009,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,Uz=` +`,$z=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;111;103;98;111;111;107;46;116;120;116;34;41;41; @@ -46044,7 +46044,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;111;110;103;101;115;116;32;101;110;116;114;121;58;32;34;32;43;32;108;111;110;103;101;115;116; -`,$z=` +`,Yz=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;111;103;98;111;111;107;46;116;120;116;34;41;41; @@ -46053,7 +46053,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;108;105;110;101;115;32;61;32;116;101;120;116;46;115;112;108;105;116;40;34;92;110;34;41; -`,Yz=` +`,Xz=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;99;108;97;115;115;46;99;115;118;34;41;41; @@ -46107,7 +46107,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;66;101;115;116;32;103;114;97;100;101;32;105;110;32;69;110;103;108;105;115;104;58;32;34;32;43;32;98;101;115;116;78;97;109;101;32;43;32;34;32;40;34;32;43;32;98;101;115;116;71;114;97;100;101;32;43;32;34;41;34; -`,Xz=` +`,Kz=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;99;108;97;115;115;46;99;115;118;34;41;41; @@ -46116,7 +46116,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,Kz=` +`,e7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;99;108;97;115;115;46;99;115;118;34;41;41; @@ -46157,7 +46157,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;97;116;104;115;32;97;118;101;114;97;103;101;58;32;34;32;43;32;115;117;109;32;47;32;99;111;117;110;116; -`,e7=` +`,t7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;99;108;97;115;115;46;99;115;118;34;41;41; @@ -46166,7 +46166,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,t7=` +`,n7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -46205,7 +46205,7 @@ lösung: vb-wald-loesung.visustruct 114;101;97;100;101;114;46;99;108;111;115;101;40;41; -`,n7=` +`,i7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -46214,7 +46214,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,i7=` +`,a7=` 83;116;114;105;110;103;91;93;32;110;97;109;101;115;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;70;111;120;34;125; @@ -46264,7 +46264,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;115;46;108;101;110;103;116;104;32;43;32;34;32;101;110;116;114;105;101;115;32;115;97;118;101;100;34; -`,a7=` +`,s7=` 83;116;114;105;110;103;91;93;32;110;97;109;101;115;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;70;111;120;34;125; @@ -46282,7 +46282,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;46;99;108;111;115;101;40;41; -`,s7=` +`,r7=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;97;110;105;109;97;108;115;46;99;115;118;34;41;41; @@ -46335,7 +46335,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;40;108;105;110;101;115;46;108;101;110;103;116;104;32;45;32;49;41;32;43;32;34;32;97;110;105;109;97;108;115;32;115;97;118;101;100;34; -`,r7=` +`,o7=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;97;110;105;109;97;108;115;46;99;115;118;34;41;41; @@ -46356,7 +46356,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;46;99;108;111;115;101;40;41; -`,o7=` +`,l7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;97;110;105;109;97;108;115;46;99;115;118;34;41;41; @@ -46400,7 +46400,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;99;111;117;110;116;32;43;32;34;32;115;101;110;116;101;110;99;101;115;32;115;97;118;101;100;34; -`,l7=` +`,u7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;97;110;105;109;97;108;115;46;99;115;118;34;41;41; @@ -46421,7 +46421,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;46;99;108;111;115;101;40;41; -`,u7=` +`,m7=` 105;110;112;117;116;58;32;105;110;116;32;99;111;117;110;116;32;34;72;111;119;32;109;97;110;121;32;116;105;99;107;101;116;115;63;34; @@ -46433,7 +46433,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,m7=` +`,c7=` 105;110;112;117;116;58;32;105;110;116;32;99;111;117;110;116;32;34;72;111;119;32;109;97;110;121;32;116;105;99;107;101;116;115;63;34; @@ -46445,7 +46445,7 @@ lösung: vb-wald-loesung.visustruct 100;111;117;98;108;101;32;116;111;116;97;108;32;61;32;99;111;117;110;116;32;42;32;56;46;53; -`,c7=` +`,d7=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;34; @@ -46469,7 +46469,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,d7=` +`,h7=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;34; @@ -46490,7 +46490,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,h7=` +`,g7=` 105;110;116;32;97;32;61;32;51; @@ -46514,7 +46514,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,g7=` +`,p7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -46573,7 +46573,7 @@ lösung: vb-wald-loesung.visustruct -`,p7=` +`,f7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -46632,7 +46632,7 @@ lösung: vb-wald-loesung.visustruct -`,f7=` +`,x7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -46706,7 +46706,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;109;112;97;114;105;115;111;110;115;58;32;34;32;43;32;99;111;109;112;97;114;105;115;111;110;115; -`,x7=` +`,b7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;55;44;32;51;44;32;49;48;44;32;53;44;32;50;125; @@ -46755,7 +46755,7 @@ lösung: vb-wald-loesung.visustruct -`,b7=` +`,y7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -46804,7 +46804,7 @@ lösung: vb-wald-loesung.visustruct -`,y7=` +`,v7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -46862,7 +46862,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;109;112;97;114;105;115;111;110;115;58;32;34;32;43;32;99;111;109;112;97;114;105;115;111;110;115; -`,v7=` +`,w7=` 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;123;51;44;32;53;44;32;56;125; @@ -46881,7 +46881,7 @@ lösung: vb-wald-loesung.visustruct -`,w7=` +`,z7=` 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;123;51;44;32;53;44;32;56;125; @@ -46900,7 +46900,7 @@ lösung: vb-wald-loesung.visustruct -`,z7=` +`,I7=` 105;110;116;32;105;32;61;32;48; @@ -46913,7 +46913,7 @@ lösung: vb-wald-loesung.visustruct -`,I7=` +`,k7=` 105;110;116;32;110;117;109;98;101;114;32;61;32;53; @@ -46937,7 +46937,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;102;116;101;114;58;32;34;32;43;32;114;111;119;91;48;93;32;43;32;34;44;32;34;32;43;32;114;111;119;91;49;93; -`,k7=` +`,S7=` 105;110;116;32;105;32;61;32;48; @@ -46950,7 +46950,7 @@ lösung: vb-wald-loesung.visustruct -`,S7=` +`,_7=` 120;32;61;32;120;32;42;32;50; @@ -46959,7 +46959,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;73;110;32;116;104;101;32;115;117;98;112;114;111;103;114;97;109;58;32;120;32;61;32;34;32;43;32;120; -`,_7=` +`,T7=` 105;110;116;32;100;105;115;116;97;110;99;101;32;61;32;109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41; @@ -46968,7 +46968,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;105;115;116;97;110;99;101;58;32;34;32;43;32;100;105;115;116;97;110;99;101;32;43;32;34;32;99;109;34;41; -`,T7=` +`,O7=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;49;48; @@ -46994,7 +46994,7 @@ lösung: vb-wald-loesung.visustruct -`,O7=` +`,A7=` 33;109;98;111;116;46;105;115;66;117;116;116;111;110;66;40;41; @@ -47021,7 +47021,7 @@ lösung: vb-wald-loesung.visustruct -`,A7=` +`,P7=` 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;48;44;32;48;41; @@ -47039,7 +47039,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;101;116;76;101;100;40;48;44;32;50;53;53;44;32;48;41; -`,P7=` +`,j7=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -47069,7 +47069,7 @@ lösung: vb-wald-loesung.visustruct -`,j7=` +`,C7=` 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;72;101;108;108;111;33;34;41; @@ -47081,7 +47081,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;73;32;97;109;32;86;105;115;117;66;111;116;34;41; -`,C7=` +`,B7=` 105;110;116;32;110;117;109;98;101;114;32;61;32;48; @@ -47133,7 +47133,7 @@ lösung: vb-wald-loesung.visustruct -`,B7=` +`,D7=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;101;100;34;41; @@ -47144,7 +47144,7 @@ lösung: vb-wald-loesung.visustruct -`,D7=` +`,Z7=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -47155,7 +47155,7 @@ lösung: vb-wald-loesung.visustruct -`,Z7=` +`,M7=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -47166,7 +47166,7 @@ lösung: vb-wald-loesung.visustruct -`,M7=` +`,L7=` 83;116;114;105;110;103;32;119;111;114;100;32;61;32;34;86;105;115;117;66;111;116;34; @@ -47185,7 +47185,7 @@ lösung: vb-wald-loesung.visustruct -`,L7=` +`,W7=` 109;98;111;116;46;108;101;100;40;48;41;46;115;101;116;67;111;108;111;114;40;34;114;101;100;34;41; @@ -47197,7 +47197,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;108;101;100;40;52;41;46;115;101;116;67;111;108;111;114;40;34;103;114;101;101;110;34;41; -`,W7=` +`,E7=` 105;110;116;32;105;32;61;32;48; @@ -47213,7 +47213,7 @@ lösung: vb-wald-loesung.visustruct -`,E7=` +`,N7=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;98;108;117;101;34;41; @@ -47241,7 +47241,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;80;97;114;107;101;100;33;34;41; -`,N7=` +`,F7=` 83;116;114;105;110;103;91;93;32;99;111;108;111;117;114;115;32;61;32;123;34;114;101;100;34;44;32;34;121;101;108;108;111;119;34;44;32;34;103;114;101;101;110;34;44;32;34;98;108;117;101;34;44;32;34;112;117;114;112;108;101;34;125; @@ -47257,7 +47257,7 @@ lösung: vb-wald-loesung.visustruct -`,F7=` +`,J7=` 109;98;111;116;46;103;101;116;67;111;108;111;114;40;41; @@ -47283,7 +47283,7 @@ lösung: vb-wald-loesung.visustruct -`,J7=` +`,R7=` 109;98;111;116;46;100;114;105;118;101;40;53;48;44;32;53;48;41; @@ -47300,7 +47300,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,R7=` +`,G7=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -47318,7 +47318,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;41; -`,G7=` +`,H7=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;101;100;34;41; @@ -47354,7 +47354,7 @@ lösung: vb-wald-loesung.visustruct -`,H7=` +`,V7=` 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;66;97;116;116;101;114;121;58;32;34;32;43;32;109;98;111;116;46;103;101;116;66;97;116;116;101;114;121;40;41;32;43;32;34;32;37;34;41; @@ -47373,7 +47373,7 @@ lösung: vb-wald-loesung.visustruct -`,V7=` +`,Q7=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;98;108;117;101;34;41; @@ -47397,7 +47397,7 @@ lösung: vb-wald-loesung.visustruct -`,Q7=` +`,q7=` 105;110;116;32;105;32;61;32;48; @@ -47419,7 +47419,7 @@ lösung: vb-wald-loesung.visustruct -`,q7=` +`,U7=` 105;110;116;32;105;32;61;32;51; @@ -47438,7 +47438,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;71;111;33;34;41; -`,U7=` +`,$7=` 105;110;116;32;105;32;61;32;49; @@ -47451,7 +47451,7 @@ lösung: vb-wald-loesung.visustruct -`,$7=` +`,Y7=` 105;110;116;32;105;32;61;32;48; @@ -47484,7 +47484,7 @@ lösung: vb-wald-loesung.visustruct -`,Y7=` +`,X7=` 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;62;32;54;48; @@ -47500,7 +47500,7 @@ lösung: vb-wald-loesung.visustruct -`,X7=` +`,K7=` 105;110;116;32;105;32;61;32;48; @@ -47519,7 +47519,7 @@ lösung: vb-wald-loesung.visustruct -`,K7=` +`,eI=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -47563,7 +47563,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,eI=` +`,tI=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;51;48; @@ -47582,7 +47582,7 @@ lösung: vb-wald-loesung.visustruct -`,tI=` +`,nI=` 105;110;116;32;115;116;101;112;115;32;61;32;48; @@ -47612,7 +47612,7 @@ lösung: vb-wald-loesung.visustruct -`,nI=` +`,iI=` 105;110;116;32;108;101;110;103;116;104;32;61;32;54;48; @@ -47640,7 +47640,7 @@ lösung: vb-wald-loesung.visustruct -`,iI=` +`,aI=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;34;72;101;108;108;111;32;99;108;97;115;115;34; @@ -47649,7 +47649,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;116;101;120;116;32;43;32;34;32;40;34;32;43;32;116;101;120;116;46;108;101;110;103;116;104;40;41;32;43;32;34;41;34;41; -`,aI=` +`,sI=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -47663,7 +47663,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;44;32;51;48;48;41; -`,sI=` +`,rI=` 109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;62;32;45;53;32;38;38;32;109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;60;32;53;32;38;38;32;109;98;111;116;46;103;101;116;82;111;108;108;40;41;32;62;32;45;53;32;38;38;32;109;98;111;116;46;103;101;116;82;111;108;108;40;41;32;60;32;53; @@ -47679,7 +47679,7 @@ lösung: vb-wald-loesung.visustruct -`,rI=` +`,oI=` 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;60;32;53;48; @@ -47693,7 +47693,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;51;48;41; -`,oI=` +`,lI=` 105;110;116;32;105;32;61;32;48; @@ -47728,7 +47728,7 @@ lösung: vb-wald-loesung.visustruct -`,lI=` +`,uI=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -47762,7 +47762,7 @@ lösung: vb-wald-loesung.visustruct -`,uI=` +`,mI=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;101;100;34;41; @@ -47806,7 +47806,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,mI=` +`,cI=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41; @@ -47832,7 +47832,7 @@ lösung: vb-wald-loesung.visustruct -`,cI=` +`,dI=` 105;110;116;91;93;32;116;111;110;101;115;32;61;32;123;50;54;50;44;32;50;57;52;44;32;51;51;48;44;32;51;52;57;44;32;51;57;50;125; @@ -47848,7 +47848,7 @@ lösung: vb-wald-loesung.visustruct -`,dI=` +`,hI=` 105;110;116;32;105;32;61;32;48; @@ -47914,7 +47914,7 @@ lösung: vb-wald-loesung.visustruct -`,hI=` +`,gI=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;51;48; @@ -47930,7 +47930,7 @@ lösung: vb-wald-loesung.visustruct -`,gI=` +`,pI=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;50;48; @@ -47947,7 +47947,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;90;122;122;34;41; -`,pI=` +`,fI=` 105;110;112;117;116;58;32;105;110;116;32;103;114;97;100;101; @@ -47976,7 +47976,7 @@ lösung: vb-wald-loesung.visustruct -`,fI=` +`,xI=` 105;110;116;32;97;32;61;32;115;113;117;97;114;101;78;117;109;98;101;114;40;51;41; @@ -47991,13 +47991,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,xI=` +`,bI=` 114;101;116;117;114;110;32;120;32;42;32;120; -`,bI=` +`,yI=` 83;116;114;105;110;103;32;119;111;114;100;32;61;32;34;76;117;100;119;105;103;34; @@ -48019,7 +48019,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;97;99;107;119;97;114;100;115; -`,yI=` +`,vI=` 105;110;116;32;108;101;110;103;116;104;32;61;32;54;48; @@ -48034,7 +48034,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;105;115;116;97;110;99;101;58;32;34;32;43;32;100;105;115;116;97;110;99;101;32;43;32;34;32;99;109;34; -`,vI=` +`,wI=` 105;110;116;91;93;32;103;114;97;100;101;115;32;61;32;123;50;44;32;49;44;32;51;44;32;50;125; @@ -48059,7 +48059,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;117;110;116;58;32;34;32;43;32;103;114;97;100;101;115;46;108;101;110;103;116;104; -`,wI=` +`,zI=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -48134,7 +48134,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; -`,zI=` +`,II=` 115;113;117;97;114;101;40;51;48;41; @@ -48143,7 +48143,7 @@ lösung: vb-wald-loesung.visustruct 115;113;117;97;114;101;40;53;48;41; -`,II=` +`,kI=` 105;110;116;32;105;32;61;32;48; @@ -48198,7 +48198,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; -`,kI=` +`,SI=` 105;110;116;32;105;32;61;32;48; @@ -48214,7 +48214,7 @@ lösung: vb-wald-loesung.visustruct -`,SI=` +`,_I=` 105;110;116;32;105;32;61;32;48; @@ -48237,7 +48237,7 @@ lösung: vb-wald-loesung.visustruct -`,_I=` +`,TI=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -48251,7 +48251,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;49;56;48;41; -`,TI=` +`,OI=` 109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;62;32;50;48;32;124;124;32;109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;60;32;45;50;48; @@ -48267,7 +48267,7 @@ lösung: vb-wald-loesung.visustruct -`,OI=` +`,AI=` 105;110;116;32;105;32;61;32;48; @@ -48319,7 +48319,7 @@ lösung: vb-wald-loesung.visustruct -`,AI=` +`,PI=` 105;110;116;32;105;32;61;32;49; @@ -48335,7 +48335,7 @@ lösung: vb-wald-loesung.visustruct -`,PI=` +`,jI=` 33;109;98;111;116;46;105;115;66;117;116;116;111;110;65;40;41; @@ -48349,7 +48349,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;51;48;41; -`,jI=` +`,CI=` 109;98;111;116;46;112;108;97;121;84;111;110;101;40;50;54;50;44;32;51;48;48;41; @@ -48367,7 +48367,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;51;57;50;44;32;51;48;48;41; -`,CI=` +`,BI=` 105;110;116;32;105;32;61;32;48; @@ -48389,7 +48389,7 @@ lösung: vb-wald-loesung.visustruct -`,BI=` +`,DI=` 105;110;116;32;108;101;102;116;32;61;32;57;57; @@ -48421,7 +48421,7 @@ lösung: vb-wald-loesung.visustruct -`,DI=` +`,ZI=` 105;110;116;32;115;105;100;101;32;61;32;51;48; @@ -48440,7 +48440,7 @@ lösung: vb-wald-loesung.visustruct -`,ZI=` +`,MI=` 105;110;116;32;105;32;61;32;48; @@ -48473,7 +48473,7 @@ lösung: vb-wald-loesung.visustruct -`,MI=` +`,LI=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -48512,7 +48512,7 @@ lösung: vb-wald-loesung.visustruct -`,LI=` +`,WI=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;50;48; @@ -48528,7 +48528,7 @@ lösung: vb-wald-loesung.visustruct -`,WI=` +`,EI=` 109;98;111;116;46;114;101;115;101;116;84;105;109;101;114;40;41; @@ -48548,7 +48548,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,EI=` +`,NI=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;102;105;114;115;116;78;97;109;101;32;34;70;105;114;115;116;32;110;97;109;101;34; @@ -48560,7 +48560,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;105;114;115;116;78;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;108;97;115;116;78;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,NI=` +`,FI=` 83;116;114;105;110;103;32;119;111;114;100;32;61;32;34;66;105;108;108;121;103;111;97;116;34; @@ -48599,7 +48599,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;116;101;120;116; -`,FI=` +`,JI=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;100;32;34;69;110;116;101;114;32;97;32;119;111;114;100;34; @@ -48621,7 +48621,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;97;99;107;119;97;114;100;115; -`,JI=` +`,RI=` 83;116;114;105;110;103;32;108;105;110;101;32;61;32;34;76;117;100;119;105;103;59;98;105;108;108;121;32;103;111;97;116;59;55;34; @@ -48640,7 +48640,7 @@ lösung: vb-wald-loesung.visustruct -`,RI=` +`,GI=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;115;101;110;116;101;110;99;101;32;34;69;110;116;101;114;32;97;32;115;101;110;116;101;110;99;101;34; @@ -48652,7 +48652,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;111;114;100;115;58;32;34;32;43;32;119;111;114;100;115;46;108;101;110;103;116;104; -`,GI=` +`,HI=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;100;32;34;69;110;116;101;114;32;97;32;119;111;114;100;34; @@ -48684,7 +48684,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;117;109;98;101;114;32;111;102;32;101;58;32;34;32;43;32;99;111;117;110;116; -`,HI=` +`,VI=` 83;116;114;105;110;103;32;119;111;114;100;32;61;32;34;66;105;108;108;121;103;111;97;116;34; @@ -48708,7 +48708,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;119;111;114;100;46;116;111;85;112;112;101;114;67;97;115;101;40;41; -`,VI=` +`,QI=` 105;110;116;91;93;91;93;32;116;97;98;101;108;108;101;32;61;32;110;101;119;32;105;110;116;91;49;48;93;91;49;48;93; @@ -48740,7 +48740,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;183;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;116;97;98;101;108;108;101;91;97;32;45;32;49;93;91;98;32;45;32;49;93; -`,QI=` +`,qI=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -48788,7 +48788,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;114;101;105;58;32;34;32;43;32;102;114;101;105; -`,qI=` +`,UI=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -48803,7 +48803,7 @@ lösung: vb-wald-loesung.visustruct 115;105;116;122;101;91;50;93;91;51;93;32;61;32;116;114;117;101; -`,UI=` +`,$I=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -48837,7 +48837,7 @@ lösung: vb-wald-loesung.visustruct -`,$I=` +`,YI=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -48855,7 +48855,7 @@ lösung: vb-wald-loesung.visustruct 105;110;112;117;116;58;32;105;110;116;32;112;108;97;116;122;32;34;80;108;97;116;122;34; -`,YI=` +`,XI=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -48903,7 +48903,7 @@ lösung: vb-wald-loesung.visustruct -`,XI=` +`,KI=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -48927,7 +48927,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;105;104;101;32;49;44;32;80;108;97;116;122;32;50;32;118;101;114;107;97;117;102;116;63;32;34;32;43;32;115;105;116;122;101;91;49;93;91;50;93; -`,KI=` +`,e8=` 105;110;116;32;115;101;107;117;110;100;101;110;32;61;32;50;48;48; @@ -48942,7 +48942,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;110;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;32;43;32;34;32;115;34; -`,e8=` +`,t8=` 105;110;116;32;115;101;107;117;110;100;101;110;32;61;32;50;48;48; @@ -48957,7 +48957,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;110;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;32;43;32;34;32;115;34; -`,t8=` +`,n8=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -48975,7 +48975,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;114;246;223;101;58;32;34;32;43;32;103;114;111;101;115;115;101;32;43;32;34;32;109;34; -`,n8=` +`,i8=` 105;110;116;32;122;97;104;108;32;61;32;51; @@ -48990,7 +48990,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;122;97;104;108; -`,i8=` +`,a8=` 105;110;116;32;122;97;104;108;32;61;32;50; @@ -49005,7 +49005,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;122;97;104;108; -`,a8=` +`,s8=` 111;117;116;112;117;116;58;32;122;97;104;108; @@ -49020,7 +49020,7 @@ lösung: vb-wald-loesung.visustruct 122;97;104;108;32;61;32;122;97;104;108;32;43;32;51; -`,s8=` +`,r8=` 83;116;114;105;110;103;32;108;105;110;107;115;32;61;32;34;83;97;102;116;34; @@ -49044,7 +49044,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;99;104;116;115;58;32;34;32;43;32;114;101;99;104;116;115; -`,r8=` +`,o8=` 83;116;114;105;110;103;32;108;105;110;107;115;32;61;32;34;83;97;102;116;34; @@ -49059,7 +49059,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;99;104;116;115;58;32;34;32;43;32;114;101;99;104;116;115; -`,o8=` +`,l8=` 105;110;116;32;97;32;61;32;53; @@ -49083,7 +49083,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,l8=` +`,u8=` 105;110;116;32;97;108;116;101;114;32;61;32;49;52; @@ -49101,7 +49101,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;114;246;223;101;58;32;34;32;43;32;103;114;111;101;115;115;101;32;43;32;34;32;109;34; -`,u8=` +`,m8=` 105;110;116;32;109;105;110;117;116;101;110;32;61;32;49;51;53; @@ -49116,7 +49116,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;116;117;110;100;101;110;32;43;32;34;32;83;116;117;110;100;101;110;32;117;110;100;32;34;32;43;32;114;101;115;116;32;43;32;34;32;77;105;110;117;116;101;110;34; -`,m8=` +`,c8=` 105;110;116;32;97;110;122;97;104;108;32;61;32;51; @@ -49131,7 +49131,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;103;101;115;97;109;116;80;114;101;105;115;32;43;32;34;32;69;117;114;111;34; -`,c8=` +`,d8=` 105;110;116;32;103;117;116;104;97;98;101;110;32;61;32;50;48; @@ -49146,7 +49146,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;220;98;114;105;103;58;32;34;32;43;32;103;117;116;104;97;98;101;110; -`,d8=` +`,h8=` 105;110;116;32;103;117;116;104;97;98;101;110;32;61;32;50;48; @@ -49161,7 +49161,7 @@ lösung: vb-wald-loesung.visustruct 103;117;116;104;97;98;101;110;32;61;32;103;117;116;104;97;98;101;110;32;45;32;112;114;101;105;115; -`,h8=` +`,g8=` 105;110;116;32;112;114;101;105;115;32;61;32;57; @@ -49176,7 +49176,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;103;101;115;97;109;116; -`,g8=` +`,p8=` 105;110;116;32;108;97;101;110;103;101;32;61;32;55; @@ -49197,7 +49197,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;85;109;102;97;110;103;58;32;34;32;43;32;117;109;102;97;110;103; -`,p8=` +`,f8=` 105;110;116;32;115;101;107;117;110;100;101;110;32;61;32;50;48;48; @@ -49212,7 +49212,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;110;32;43;32;34;32;77;105;110;117;116;101;110;32;117;110;100;32;34;32;43;32;114;101;115;116;32;43;32;34;32;83;101;107;117;110;100;101;110;34; -`,f8=` +`,x8=` 105;110;116;32;115;101;107;117;110;100;101;110;32;61;32;50;48;48; @@ -49221,7 +49221,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;110;32;43;32;34;32;77;105;110;117;116;101;110;32;117;110;100;32;34;32;43;32;114;101;115;116;32;43;32;34;32;83;101;107;117;110;100;101;110;34; -`,x8=` +`,b8=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;97;109;101;32;34;87;105;101;32;104;101;105;223;116;32;100;117;63;34; @@ -49230,7 +49230,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;97;108;108;111;32;34;32;43;32;110;97;109;101;32;43;32;34;33;34; -`,b8=` +`,y8=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -49245,7 +49245,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,y8=` +`,v8=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -49257,7 +49257,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;40;97;32;43;32;98;41; -`,v8=` +`,w8=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -49269,7 +49269,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;97;32;43;32;98; -`,w8=` +`,z8=` 105;110;112;117;116;58;32;105;110;116;32;106;97;104;114;101;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -49281,7 +49281,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;97;115;32;115;105;110;100;32;101;116;119;97;32;34;32;43;32;116;97;103;101;32;43;32;34;32;84;97;103;101;46;34; -`,z8=` +`,I8=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;120;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -49296,7 +49296,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;105;116;116;101;108;119;101;114;116;58;32;34;32;43;32;109;105;116;116;101;108; -`,I8=` +`,k8=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -49317,7 +49317,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;114;111;100;117;107;116;58;32;34;32;43;32;112;114;111;100;117;107;116; -`,k8=` +`,S8=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -49336,7 +49336,7 @@ lösung: vb-wald-loesung.visustruct -`,S8=` +`,_8=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;90;97;104;108;63;34; @@ -49358,7 +49358,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;122;97;104;108; -`,_8=` +`,T8=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;90;97;104;108;63;34; @@ -49377,7 +49377,7 @@ lösung: vb-wald-loesung.visustruct -`,T8=` +`,O8=` 105;110;116;32;112;117;110;107;116;101;32;61;32;48; @@ -49395,7 +49395,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;117;110;107;116;101;58;32;34;32;43;32;112;117;110;107;116;101; -`,O8=` +`,A8=` 105;110;116;32;112;117;110;107;116;101;32;61;32;48; @@ -49413,7 +49413,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;117;110;107;116;101;58;32;34;32;43;32;112;117;110;107;116;101; -`,A8=` +`,P8=` 105;110;116;32;112;114;101;105;115;32;61;32;56; @@ -49431,7 +49431,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;103;101;115;97;109;116; -`,P8=` +`,j8=` 105;110;116;32;112;114;101;105;115;32;61;32;56; @@ -49449,7 +49449,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;103;101;115;97;109;116; -`,j8=` +`,C8=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -49471,7 +49471,7 @@ lösung: vb-wald-loesung.visustruct -`,C8=` +`,B8=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;112;114;101;105;115;32;34;80;114;101;105;115;32;105;110;32;69;117;114;111;63;34; @@ -49493,7 +49493,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;90;117;32;122;97;104;108;101;110;58;32;34;32;43;32;112;114;101;105;115;32;43;32;34;32;69;117;114;111;34; -`,B8=` +`,D8=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;101;32;34;78;111;116;101;63;34; @@ -49512,7 +49512,7 @@ lösung: vb-wald-loesung.visustruct -`,D8=` +`,Z8=` 105;110;112;117;116;58;32;105;110;116;32;112;117;110;107;116;101;32;34;87;105;101;32;118;105;101;108;101;32;80;117;110;107;116;101;63;34; @@ -49531,7 +49531,7 @@ lösung: vb-wald-loesung.visustruct -`,Z8=` +`,M8=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -49550,7 +49550,7 @@ lösung: vb-wald-loesung.visustruct -`,M8=` +`,L8=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -49569,7 +49569,7 @@ lösung: vb-wald-loesung.visustruct -`,L8=` +`,W8=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -49588,7 +49588,7 @@ lösung: vb-wald-loesung.visustruct -`,W8=` +`,E8=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;101;32;34;78;111;116;101;63;34; @@ -49607,7 +49607,7 @@ lösung: vb-wald-loesung.visustruct -`,E8=` +`,N8=` 105;110;112;117;116;58;32;105;110;116;32;106;97;104;114;32;34;74;97;104;114;63;34; @@ -49626,7 +49626,7 @@ lösung: vb-wald-loesung.visustruct -`,N8=` +`,F8=` 105;110;112;117;116;58;32;105;110;116;32;116;97;103;32;34;84;97;103;32;40;49;32;98;105;115;32;55;41;63;34; @@ -49645,7 +49645,7 @@ lösung: vb-wald-loesung.visustruct -`,F8=` +`,J8=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;102;97;114;98;101;32;34;87;101;108;99;104;101;32;70;97;114;98;101;32;104;97;116;32;100;105;101;32;65;109;112;101;108;63;34; @@ -49674,7 +49674,7 @@ lösung: vb-wald-loesung.visustruct -`,J8=` +`,R8=` 105;110;112;117;116;58;32;105;110;116;32;119;97;104;108;32;34;49;32;87;97;115;115;101;114;44;32;50;32;83;97;102;116;44;32;51;32;75;97;107;97;111;34; @@ -49703,7 +49703,7 @@ lösung: vb-wald-loesung.visustruct -`,R8=` +`,G8=` 105;110;112;117;116;58;32;105;110;116;32;116;97;103;32;34;87;101;108;99;104;101;114;32;84;97;103;32;40;49;32;98;105;115;32;55;41;63;34; @@ -49722,7 +49722,7 @@ lösung: vb-wald-loesung.visustruct -`,G8=` +`,H8=` 105;110;112;117;116;58;32;105;110;116;32;116;97;103;32;34;87;101;108;99;104;101;114;32;84;97;103;32;40;49;32;98;105;115;32;55;41;63;34; @@ -49741,7 +49741,7 @@ lösung: vb-wald-loesung.visustruct -`,H8=` +`,V8=` 105;110;112;117;116;58;32;105;110;116;32;115;116;117;110;100;101;32;34;87;105;101;32;115;112;228;116;32;105;115;116;32;101;115;32;40;110;117;114;32;100;105;101;32;83;116;117;110;100;101;41;63;34; @@ -49760,7 +49760,7 @@ lösung: vb-wald-loesung.visustruct -`,V8=` +`,Q8=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;101;32;34;87;101;108;99;104;101;32;78;111;116;101;63;34; @@ -49804,7 +49804,7 @@ lösung: vb-wald-loesung.visustruct -`,Q8=` +`,q8=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;34; @@ -49851,7 +49851,7 @@ lösung: vb-wald-loesung.visustruct -`,q8=` +`,U8=` 105;110;112;117;116;58;32;105;110;116;32;119;97;104;108;32;34;49;32;87;97;115;115;101;114;44;32;50;32;83;97;102;116;44;32;51;32;75;97;107;97;111;34; @@ -49890,7 +49890,7 @@ lösung: vb-wald-loesung.visustruct -`,U8=` +`,$8=` 84;97;115;115;101;32;97;117;102;32;100;101;110;32;84;105;115;99;104;32;115;116;101;108;108;101;110; @@ -49920,7 +49920,7 @@ lösung: vb-wald-loesung.visustruct 84;101;101;32;116;114;105;110;107;101;110; -`,$8=` +`,Y8=` 65;117;102;115;116;101;104;101;110; @@ -49935,7 +49935,7 @@ lösung: vb-wald-loesung.visustruct 70;114;252;104;115;116;252;99;107;101;110; -`,Y8=` +`,X8=` 87;97;115;115;101;114;32;105;110;32;100;101;110;32;87;97;115;115;101;114;107;111;99;104;101;114;32;102;252;108;108;101;110; @@ -49956,7 +49956,7 @@ lösung: vb-wald-loesung.visustruct 84;101;101;98;101;117;116;101;108;32;104;101;114;97;117;115;110;101;104;109;101;110; -`,X8=` +`,K8=` 82;101;103;110;101;116;32;101;115;63; @@ -49975,7 +49975,7 @@ lösung: vb-wald-loesung.visustruct 76;111;115;103;101;104;101;110; -`,K8=` +`,ek=` 84;101;108;108;101;114;32;110;105;99;104;116;32;108;101;101;114; @@ -49989,7 +49989,7 @@ lösung: vb-wald-loesung.visustruct 84;101;108;108;101;114;32;97;98;114;228;117;109;101;110; -`,ek=` +`,tk=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;119;111;104;105;110;32;122;228;104;108;101;110;63;34; @@ -50009,7 +50009,7 @@ lösung: vb-wald-loesung.visustruct -`,tk=` +`,nk=` 105;110;116;32;122;97;104;108;32;61;32;51; @@ -50029,7 +50029,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,nk=` +`,ik=` 105;110;116;32;122;97;104;108;32;61;32;51; @@ -50046,7 +50046,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,ik=` +`,ak=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;70;97;107;117;108;116;228;116;32;118;111;110;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -50072,7 +50072,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;32;43;32;34;33;32;61;32;34;32;43;32;102;97;107;117;108;116;97;101;116; -`,ak=` +`,sk=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -50107,7 +50107,7 @@ lösung: vb-wald-loesung.visustruct -`,sk=` +`,rk=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -50142,7 +50142,7 @@ lösung: vb-wald-loesung.visustruct -`,rk=` +`,ok=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;87;101;108;99;104;101;32;90;97;104;108;63;34; @@ -50171,7 +50171,7 @@ lösung: vb-wald-loesung.visustruct -`,ok=` +`,lk=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;34; @@ -50194,7 +50194,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;99;104;114;105;116;116;101; -`,lk=` +`,uk=` 105;110;116;32;122;97;104;108;32;61;32;48; @@ -50211,7 +50211,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;97;110;107;101;33;34; -`,uk=` +`,mk=` 105;110;116;32;105;32;61;32;49;48; @@ -50228,7 +50228,7 @@ lösung: vb-wald-loesung.visustruct -`,mk=` +`,ck=` 105;110;112;117;116;58;32;105;110;116;32;122;105;101;108;32;34;83;112;97;114;122;105;101;108;63;34; @@ -50254,7 +50254,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;111;99;104;101;110;58;32;34;32;43;32;119;111;99;104;101;110; -`,ck=` +`,dk=` 105;110;112;117;116;58;32;105;110;116;32;122;105;101;108;32;34;83;112;97;114;122;105;101;108;63;34; @@ -50280,7 +50280,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;111;99;104;101;110;58;32;34;32;43;32;119;111;99;104;101;110; -`,dk=` +`,hk=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;119;111;104;105;110;63;34; @@ -50300,7 +50300,7 @@ lösung: vb-wald-loesung.visustruct -`,hk=` +`,gk=` 105;110;116;32;110;111;116;101;32;61;32;48; @@ -50317,7 +50317,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;101;105;110;101;32;78;111;116;101;58;32;34;32;43;32;110;111;116;101; -`,gk=` +`,pk=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -50340,7 +50340,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,pk=` +`,fk=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;83;116;97;114;116;122;97;104;108;34; @@ -50359,7 +50359,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;111;115;33;34; -`,fk=` +`,xk=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;87;101;108;99;104;101;32;82;101;105;104;101;63;34; @@ -50378,7 +50378,7 @@ lösung: vb-wald-loesung.visustruct -`,xk=` +`,bk=` 105;110;116;32;105;32;61;32;49; @@ -50391,7 +50391,7 @@ lösung: vb-wald-loesung.visustruct -`,bk=` +`,yk=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;63;34; @@ -50408,7 +50408,7 @@ lösung: vb-wald-loesung.visustruct -`,yk=` +`,vk=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;63;34; @@ -50425,7 +50425,7 @@ lösung: vb-wald-loesung.visustruct -`,vk=` +`,wk=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;63;34; @@ -50442,7 +50442,7 @@ lösung: vb-wald-loesung.visustruct -`,wk=` +`,zk=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;122;117;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -50464,7 +50464,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,zk=` +`,Ik=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;87;105;101;32;118;105;101;108;101;32;90;101;105;108;101;110;63;34; @@ -50493,7 +50493,7 @@ lösung: vb-wald-loesung.visustruct -`,Ik=` +`,kk=` 105;110;116;32;97;110;122;97;104;108;32;61;32;48; @@ -50525,7 +50525,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;110;122;97;104;108; -`,kk=` +`,Sk=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;122;117;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -50557,7 +50557,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;110;122;97;104;108; -`,Sk=` +`,_k=` 105;110;112;117;116;58;32;105;110;116;32;114;101;105;104;101;32;34;87;101;108;99;104;101;32;82;101;105;104;101;63;34; @@ -50573,7 +50573,7 @@ lösung: vb-wald-loesung.visustruct -`,_k=` +`,Tk=` 105;110;112;117;116;58;32;105;110;116;32;114;101;105;104;101;32;34;87;101;108;99;104;101;32;82;101;105;104;101;63;34; @@ -50589,7 +50589,7 @@ lösung: vb-wald-loesung.visustruct -`,Tk=` +`,Ok=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;122;117;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -50605,7 +50605,7 @@ lösung: vb-wald-loesung.visustruct -`,Ok=` +`,Ak=` 105;110;112;117;116;58;32;105;110;116;32;98;114;101;105;116;101;32;34;66;114;101;105;116;101;34; @@ -50637,7 +50637,7 @@ lösung: vb-wald-loesung.visustruct -`,Ak=` +`,Pk=` 105;110;116;91;93;32;122;97;104;108;101;110;32;61;32;123;50;44;32;52;44;32;54;44;32;56;44;32;49;48;125; @@ -50653,7 +50653,7 @@ lösung: vb-wald-loesung.visustruct -`,Pk=` +`,jk=` 105;110;116;91;93;32;119;101;114;116;101;32;61;32;123;52;44;32;56;44;32;49;53;44;32;49;54;44;32;50;51;44;32;52;50;125; @@ -50668,7 +50668,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;119;101;114;116;101;46;108;101;110;103;116;104; -`,jk=` +`,Ck=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;122;117;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -50700,7 +50700,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;110;122;97;104;108;58;32;34;32;43;32;97;110;122;97;104;108; -`,Ck=` +`,Bk=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;122;117;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -50732,7 +50732,7 @@ lösung: vb-wald-loesung.visustruct -`,Bk=` +`,Dk=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;87;105;101;32;118;105;101;108;101;32;83;116;117;102;101;110;63;34; @@ -50761,7 +50761,7 @@ lösung: vb-wald-loesung.visustruct -`,Dk=` +`,Zk=` 83;116;114;105;110;103;91;93;32;110;97;109;101;110;32;61;32;110;101;119;32;83;116;114;105;110;103;91;51;93; @@ -50780,7 +50780,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;114;115;116;101;114;32;78;97;109;101;58;32;34;32;43;32;110;97;109;101;110;91;48;93; -`,Zk=` +`,Mk=` 105;110;116;91;93;32;122;97;104;108;101;110;32;61;32;110;101;119;32;105;110;116;91;52;93; @@ -50806,7 +50806,7 @@ lösung: vb-wald-loesung.visustruct -`,Mk=` +`,Lk=` 105;110;116;91;93;32;122;97;104;108;101;110;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -50857,7 +50857,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;97;120;105;109;117;109;58;32;34;32;43;32;109;97;120; -`,Lk=` +`,Wk=` 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;123;49;50;44;32;55;44;32;49;57;44;32;52;125; @@ -50898,7 +50898,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;97;120;105;109;117;109;58;32;34;32;43;32;109;97;120; -`,Wk=` +`,Ek=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -50921,7 +50921,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,Ek=` +`,Nk=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -50951,7 +50951,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,Nk=` +`,Fk=` 105;110;112;117;116;58;32;105;110;116;32;108;97;101;110;103;101;32;34;76;228;110;103;101;63;34; @@ -50966,13 +50966,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;108;228;99;104;101;58;32;34;32;43;32;102; -`,Fk=` +`,Jk=` 114;101;116;117;114;110;32;97;32;42;32;98; -`,Jk=` +`,Rk=` 122;101;105;103;101;66;101;103;114;117;101;115;115;117;110;103;40;41; @@ -50984,7 +50984,7 @@ lösung: vb-wald-loesung.visustruct 122;101;105;103;101;69;114;103;101;98;110;105;115;40;41; -`,Rk=` +`,Gk=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;101;110;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -51016,7 +51016,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;246;99;104;115;116;101;32;84;101;109;112;101;114;97;116;117;114;58;32;34;32;43;32;109;97;120; -`,Gk=` +`,Hk=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;101;110;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -51048,7 +51048,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;246;99;104;115;116;101;32;84;101;109;112;101;114;97;116;117;114;58;32;34;32;43;32;109;97;120; -`,Hk=` +`,Vk=` 105;110;116;91;93;32;110;111;116;101;110;32;61;32;123;50;44;32;51;44;32;49;44;32;52;125; @@ -51070,7 +51070,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,Vk=` +`,Qk=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;87;101;108;99;104;101;32;90;97;104;108;63;34; @@ -51082,7 +51082,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;97;115;32;81;117;97;100;114;97;116;32;105;115;116;32;34;32;43;32;113; -`,Qk=` +`,qk=` 105;110;116;32;101;114;103;101;98;110;105;115;32;61;32;120;32;42;32;120; @@ -51091,7 +51091,7 @@ lösung: vb-wald-loesung.visustruct 114;101;116;117;114;110;32;101;114;103;101;98;110;105;115; -`,qk=` +`,Uk=` 122;101;105;103;101;84;105;116;101;108;40;41; @@ -51103,7 +51103,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;97;108;108;111;32;34;32;43;32;110;97;109;101; -`,Uk=` +`,$k=` 111;117;116;112;117;116;58;32;34;87;105;108;108;107;111;109;109;101;110;32;122;117;109;32;81;117;105;122;33;34; @@ -51112,7 +51112,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;117;32;98;101;107;111;109;109;115;116;32;100;114;101;105;32;70;114;97;103;101;110;46;34; -`,$k=` +`,Yk=` 122;101;105;103;101;83;117;109;109;101;40;51;44;32;52;41; @@ -51124,7 +51124,7 @@ lösung: vb-wald-loesung.visustruct 122;101;105;103;101;83;117;109;109;101;40;120;44;32;120;32;43;32;49;41; -`,Yk=` +`,Xk=` 105;110;116;32;115;117;109;109;101;32;61;32;97;32;43;32;98; @@ -51133,7 +51133,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;43;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;115;117;109;109;101; -`,Xk=` +`,Kk=` 105;110;112;117;116;58;32;105;110;116;32;115;116;97;114;116;32;34;83;116;97;114;116;119;101;114;116;34; @@ -51156,7 +51156,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;111;115;33;34; -`,Kk=` +`,eS=` 105;110;112;117;116;58;32;105;110;116;32;115;116;97;114;116;32;34;83;116;97;114;116;119;101;114;116;34; @@ -51179,7 +51179,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;111;115;34; -`,eS=` +`,tS=` 105;110;116;91;93;91;93;32;112;117;110;107;116;101;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -51201,7 +51201,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;112;105;101;108;101;114;32;50;58;32;34;32;43;32;115;117;109;109;101; -`,tS=` +`,nS=` 105;110;116;91;93;91;93;32;112;117;110;107;116;101;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -51223,7 +51223,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;112;105;101;108;101;114;32;50;58;32;34;32;43;32;115;117;109;109;101; -`,nS=` +`,iS=` 105;110;116;91;93;91;93;32;112;117;110;107;116;101;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;49;125;44;32;123;50;44;32;50;125;125; @@ -51252,7 +51252,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,iS=` +`,aS=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -51275,7 +51275,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,aS=` +`,sS=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;119;111;104;105;110;63;34; @@ -51297,7 +51297,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,sS=` +`,rS=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;119;111;104;105;110;63;34; @@ -51319,7 +51319,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,rS=` +`,oS=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;87;101;108;99;104;101;32;82;101;105;104;101;63;34; @@ -51351,7 +51351,7 @@ lösung: vb-wald-loesung.visustruct -`,oS=` +`,lS=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;90;97;104;108;32;101;105;110;103;101;98;101;110;34; @@ -51373,7 +51373,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;97;107;117;108;116;97;101;116; -`,lS=` +`,uS=` 83;116;114;105;110;103;32;98;114;105;101;102;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;98;114;105;101;102;46;116;120;116;34;41;41; @@ -51405,13 +51405,13 @@ lösung: vb-wald-loesung.visustruct -`,uS=` +`,mS=` 83;116;114;105;110;103;32;98;114;105;101;102;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;98;114;105;101;102;46;116;120;116;34;41;41; -`,mS=` +`,cS=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;118;111;114;110;97;109;101;32;34;86;111;114;110;97;109;101;63;34; @@ -51423,7 +51423,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;118;111;114;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;110;97;99;104;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,cS=` +`,dS=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;118;111;114;110;97;109;101;32;34;86;111;114;110;97;109;101;63;34; @@ -51435,7 +51435,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;118;111;114;110;97;109;101;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;32;34;32;43;32;110;97;99;104;110;97;109;101;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;34; -`,dS=` +`,hS=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;101;105;110;103;97;98;101;32;34;80;97;115;115;119;111;114;116;63;34; @@ -51454,7 +51454,7 @@ lösung: vb-wald-loesung.visustruct -`,hS=` +`,gS=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -51483,7 +51483,7 @@ lösung: vb-wald-loesung.visustruct -`,gS=` +`,pS=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;119;101;114;116;63;34; @@ -51503,7 +51503,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;110;100;101;34; -`,pS=` +`,fS=` 105;110;116;32;118;101;114;115;117;99;104;101;32;61;32;48; @@ -51536,7 +51536,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;101;114;115;117;99;104;101;58;32;34;32;43;32;118;101;114;115;117;99;104;101; -`,fS=` +`,xS=` 105;110;116;32;118;101;114;115;117;99;104;101;32;61;32;48; @@ -51569,7 +51569,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;101;114;115;117;99;104;101;58;32;34;32;43;32;118;101;114;115;117;99;104;101; -`,xS=` +`,bS=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -51611,7 +51611,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;115;117;109;109;101; -`,bS=` +`,yS=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -51633,7 +51633,7 @@ lösung: vb-wald-loesung.visustruct -`,yS=` +`,vS=` 105;110;112;117;116;58;32;105;110;116;32;103;114;101;110;122;101;32;34;66;105;115;32;119;111;104;105;110;63;34; @@ -51649,7 +51649,7 @@ lösung: vb-wald-loesung.visustruct -`,vS=` +`,wS=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -51688,7 +51688,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,wS=` +`,zS=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -51727,7 +51727,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,zS=` +`,IS=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -51762,7 +51762,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;110;122;97;104;108;58;32;34;32;43;32;97;110;122;97;104;108; -`,IS=` +`,kS=` 111;117;116;112;117;116;58;32;34;71;117;116;101;110;32;77;111;114;103;101;110;34; @@ -51771,13 +51771,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;117;116;101;32;108;101;114;110;101;110;32;119;105;114;32;83;116;114;117;107;116;111;103;114;97;109;109;101;46;34; -`,kS=` +`,SS=` 111;117;116;112;117;116;58;32;34;72;97;108;108;111;32;87;101;108;116;34; -`,SS=` +`,_S=` 111;117;116;112;117;116;58;32;34;72;97;108;108;111;34; @@ -51786,7 +51786,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;73;99;104;32;108;101;114;110;101;32;83;116;114;117;107;116;111;103;114;97;109;109;101;34; -`,_S=` +`,TS=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;63;34; @@ -51806,7 +51806,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,TS=` +`,OS=` 83;99;97;110;110;101;114;32;100;97;116;101;105;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;101;105;110;107;97;117;102;46;116;120;116;34;41;41; @@ -51847,7 +51847,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;110;122;97;104;108;32;43;32;34;32;90;101;105;108;101;110;32;103;101;115;112;101;105;99;104;101;114;116;34; -`,OS=` +`,AS=` 83;99;97;110;110;101;114;32;100;97;116;101;105;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;101;105;110;107;97;117;102;46;116;120;116;34;41;41; @@ -51856,7 +51856,7 @@ lösung: vb-wald-loesung.visustruct 80;114;105;110;116;87;114;105;116;101;114;32;97;117;115;32;61;32;110;101;119;32;80;114;105;110;116;87;114;105;116;101;114;40;34;101;105;110;107;97;117;102;45;110;101;117;46;116;120;116;34;41; -`,AS=` +`,PS=` 83;99;97;110;110;101;114;32;100;97;116;101;105;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;101;105;110;107;97;117;102;46;116;120;116;34;41;41; @@ -51882,13 +51882,13 @@ lösung: vb-wald-loesung.visustruct 100;97;116;101;105;46;99;108;111;115;101;40;41; -`,PS=` +`,jS=` 83;99;97;110;110;101;114;32;100;97;116;101;105;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;101;105;110;107;97;117;102;46;116;120;116;34;41;41; -`,jS=` +`,CS=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;117;99;104;46;116;120;116;34;41;41; @@ -51927,7 +51927,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;117;99;104;115;58;32;34;32;43;32;97;110;122;97;104;108; -`,CS=` +`,BS=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;117;99;104;46;116;120;116;34;41;41; @@ -51936,7 +51936,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,BS=` +`,DS=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;111;103;98;117;99;104;46;116;120;116;34;41;41; @@ -51971,7 +51971,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;228;110;103;115;116;101;114;32;69;105;110;116;114;97;103;58;32;34;32;43;32;108;97;101;110;103;115;116;101;114; -`,DS=` +`,ZS=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;111;103;98;117;99;104;46;116;120;116;34;41;41; @@ -51980,7 +51980,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;122;101;105;108;101;110;32;61;32;116;101;120;116;46;115;112;108;105;116;40;34;92;110;34;41; -`,ZS=` +`,MS=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;107;108;97;115;115;101;46;99;115;118;34;41;41; @@ -52034,7 +52034,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;66;101;115;116;101;32;78;111;116;101;32;105;110;32;69;110;103;108;105;115;99;104;58;32;34;32;43;32;98;101;115;116;101;114;78;97;109;101;32;43;32;34;32;40;34;32;43;32;98;101;115;116;101;78;111;116;101;32;43;32;34;41;34; -`,MS=` +`,LS=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;107;108;97;115;115;101;46;99;115;118;34;41;41; @@ -52043,7 +52043,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,LS=` +`,WS=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;107;108;97;115;115;101;46;99;115;118;34;41;41; @@ -52084,7 +52084,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;99;104;110;105;116;116;32;77;97;116;104;101;58;32;34;32;43;32;115;117;109;109;101;32;47;32;97;110;122;97;104;108; -`,WS=` +`,ES=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;107;108;97;115;115;101;46;99;115;118;34;41;41; @@ -52093,7 +52093,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,ES=` +`,NS=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -52132,7 +52132,7 @@ lösung: vb-wald-loesung.visustruct 108;101;115;101;114;46;99;108;111;115;101;40;41; -`,NS=` +`,FS=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -52141,7 +52141,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,FS=` +`,JS=` 83;116;114;105;110;103;91;93;32;110;97;109;101;110;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;70;117;99;104;115;34;125; @@ -52191,7 +52191,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;110;46;108;101;110;103;116;104;32;43;32;34;32;69;105;110;116;114;228;103;101;32;103;101;115;112;101;105;99;104;101;114;116;34; -`,JS=` +`,RS=` 83;116;114;105;110;103;91;93;32;110;97;109;101;110;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;70;117;99;104;115;34;125; @@ -52209,7 +52209,7 @@ lösung: vb-wald-loesung.visustruct 97;117;115;46;99;108;111;115;101;40;41; -`,RS=` +`,GS=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;116;105;101;114;101;46;99;115;118;34;41;41; @@ -52262,7 +52262,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;40;122;101;105;108;101;110;46;108;101;110;103;116;104;32;45;32;49;41;32;43;32;34;32;84;105;101;114;101;32;103;101;115;112;101;105;99;104;101;114;116;34; -`,GS=` +`,HS=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;116;105;101;114;101;46;99;115;118;34;41;41; @@ -52283,7 +52283,7 @@ lösung: vb-wald-loesung.visustruct 97;117;115;46;99;108;111;115;101;40;41; -`,HS=` +`,VS=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;105;101;114;101;46;99;115;118;34;41;41; @@ -52327,7 +52327,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;110;122;97;104;108;32;43;32;34;32;83;228;116;122;101;32;103;101;115;112;101;105;99;104;101;114;116;34; -`,VS=` +`,QS=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;105;101;114;101;46;99;115;118;34;41;41; @@ -52348,7 +52348,7 @@ lösung: vb-wald-loesung.visustruct 97;117;115;46;99;108;111;115;101;40;41; -`,QS=` +`,qS=` 111;117;116;112;117;116;58;32;34;66;101;109;45;118;105;110;100;111;34; @@ -52360,7 +52360,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;100;101;117;115;34; -`,qS=` +`,US=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -52379,7 +52379,7 @@ lösung: vb-wald-loesung.visustruct -`,US=` +`,$S=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;97;110;99;97;109;101;110;116;111;46;99;115;118;34;41;41; @@ -52460,7 +52460,7 @@ lösung: vb-wald-loesung.visustruct 115;97;105;100;97;46;99;108;111;115;101;40;41; -`,$S=` +`,YS=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;97;110;99;97;109;101;110;116;111;46;99;115;118;34;41;41; @@ -52469,7 +52469,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,YS=` +`,XS=` 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -52534,7 +52534,7 @@ lösung: vb-wald-loesung.visustruct -`,XS=` +`,KS=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;73;110;116;114;111;100;117;122;32;117;109;32;110;250;109;101;114;111;32;105;110;116;101;105;114;111;34; @@ -52560,7 +52560,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;105;110;97;114;105;111; -`,KS=` +`,e_=` 99;104;97;114;91;93;32;97;108;102;97;98;101;116;111;32;61;32;123;39;65;39;44;32;39;66;39;44;32;39;67;39;44;32;39;68;39;44;32;39;69;39;44;32;39;70;39;44;32;39;71;39;44;32;39;72;39;44;32;39;73;39;44;32;39;74;39;44;32;39;75;39;44;32;39;76;39;44;32;39;77;39;44;32;39;78;39;44;32;39;79;39;44;32;39;80;39;44;32;39;81;39;44;32;39;82;39;44;32;39;83;39;44;32;39;84;39;44;32;39;85;39;44;32;39;86;39;44;32;39;87;39;44;32;39;88;39;44;32;39;89;39;44;32;39;90;39;125; @@ -52614,13 +52614,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;101;103;114;101;100;111; -`,e_=` +`,t_=` 99;104;97;114;91;93;32;97;108;102;97;98;101;116;111;32;61;32;123;39;65;39;44;32;39;66;39;44;32;39;67;39;44;32;39;68;39;44;32;39;69;39;44;32;39;70;39;44;32;39;71;39;44;32;39;72;39;44;32;39;73;39;44;32;39;74;39;44;32;39;75;39;44;32;39;76;39;44;32;39;77;39;44;32;39;78;39;44;32;39;79;39;44;32;39;80;39;44;32;39;81;39;44;32;39;82;39;44;32;39;83;39;44;32;39;84;39;44;32;39;85;39;44;32;39;86;39;44;32;39;87;39;44;32;39;88;39;44;32;39;89;39;44;32;39;90;39;125; -`,t_=` +`,n_=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;112;97;108;97;118;114;97;32;34;81;117;101;32;112;97;108;97;118;114;97;32;40;115;243;32;109;97;105;250;115;99;117;108;97;115;41;63;34; @@ -52651,7 +52651,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;101;103;114;101;100;111; -`,n_=` +`,i_=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;115;101;103;114;101;100;111;32;34;81;117;97;108;32;233;32;111;32;116;101;120;116;111;32;99;105;102;114;97;100;111;63;34; @@ -52682,7 +52682,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;116;101;120;116;111; -`,i_=` +`,a_=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;73;110;116;114;111;100;117;122;32;117;109;32;110;250;109;101;114;111;32;105;110;105;99;105;97;108;34; @@ -52718,7 +52718,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;97;115;115;111;115;58;32;34;32;43;32;112;97;115;115;111;115; -`,a_=` +`,s_=` 105;110;112;117;116;58;32;105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;34;81;117;97;110;116;97;115;32;110;111;116;97;115;63;34; @@ -52746,7 +52746,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;101;100;105;97; -`,s_=` +`,r_=` 105;110;112;117;116;58;32;105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;110;250;109;101;114;111;115;63;34; @@ -52783,7 +52783,7 @@ lösung: vb-wald-loesung.visustruct -`,r_=` +`,o_=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;73;110;116;114;111;100;117;122;32;117;109;32;110;250;109;101;114;111;34; @@ -52802,7 +52802,7 @@ lösung: vb-wald-loesung.visustruct -`,o_=` +`,l_=` 99;111;110;115;116;32;100;111;117;98;108;101;32;73;86;65;32;61;32;48;46;50;51; @@ -52823,7 +52823,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;112;114;101;99;111;67;111;109;73;118;97; -`,l_=` +`,u_=` 105;110;116;32;112;105;110;32;61;32;48; @@ -52859,7 +52859,7 @@ lösung: vb-wald-loesung.visustruct -`,u_=` +`,m_=` 99;111;110;115;116;32;105;110;116;32;80;73;78;32;61;32;49;50;51;52; @@ -52895,7 +52895,7 @@ lösung: vb-wald-loesung.visustruct -`,m_=` +`,c_=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;49;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;34; @@ -52939,7 +52939,7 @@ lösung: vb-wald-loesung.visustruct -`,c_=` +`,d_=` 98;111;111;108;101;97;110;91;93;91;93;32;109;97;114;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;53;93;91;53;93; @@ -52993,7 +52993,7 @@ lösung: vb-wald-loesung.visustruct -`,d_=` +`,h_=` 98;111;111;108;101;97;110;91;93;91;93;32;109;97;114;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;53;93;91;53;93; @@ -53020,7 +53020,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;99;111;108;117;110;97;115;32;61;32;123;34;65;34;44;32;34;66;34;44;32;34;67;34;44;32;34;68;34;44;32;34;69;34;125; -`,h_=` +`,g_=` 105;110;112;117;116;58;32;105;110;116;32;112;114;97;116;111;32;34;81;117;101;32;112;114;97;116;111;63;32;40;49;44;32;50;32;111;117;32;51;41;34; @@ -53049,7 +53049,7 @@ lösung: vb-wald-loesung.visustruct -`,g_=` +`,p_=` 105;110;116;32;110;117;109;101;114;111;49;32;61;32;52; @@ -53064,7 +53064,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,p_=` +`,f_=` 83;116;114;105;110;103;91;93;32;110;111;109;101;115;32;61;32;110;101;119;32;83;116;114;105;110;103;91;53;93; @@ -53086,7 +53086,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;105;109;112;97;32;111;32;113;117;97;100;114;111;58;32;34;32;43;32;110;111;109;101;115;91;115;111;114;116;101;97;100;111;32;45;32;49;93; -`,f_=` +`,x_=` 105;110;116;32;110;117;109;101;114;111;32;61;32;52; @@ -53098,7 +53098,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;250;109;101;114;111;32;100;117;112;108;105;99;97;100;111;58;32;34;32;43;32;110;117;109;101;114;111; -`,x_=` +`,b_=` -1; @@ -53145,7 +53145,7 @@ lösung: vb-wald-loesung.visustruct -`,b_=` +`,y_=` @@ -53182,7 +53182,7 @@ lösung: vb-wald-loesung.visustruct -`,y_=` +`,v_=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;118;111;99;97;98;117;108;97;114;105;111;46;99;115;118;34;41;41; @@ -53242,7 +53242,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;99;101;114;116;97;115;32;43;32;34;32;100;101;32;34;32;43;32;99;111;110;116;97;103;101;109;32;43;32;34;32;99;101;114;116;97;115;34; -`,v_=` +`,w_=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;118;111;99;97;98;117;108;97;114;105;111;46;99;115;118;34;41;41; @@ -53251,7 +53251,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,w_=` +`,z_=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -53270,7 +53270,7 @@ lösung: vb-wald-loesung.visustruct -`,z_=` +`,I_=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;100;105;97;114;105;111;46;116;120;116;34;41;41; @@ -53293,7 +53293,7 @@ lösung: vb-wald-loesung.visustruct 108;101;105;116;111;114;46;99;108;111;115;101;40;41; -`,I_=` +`,k_=` 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;34;90;111;114;97;59;49;59;50;59;50;34; @@ -53311,7 +53311,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;32;43;32;34;32;116;101;109;32;34;32;43;32;109;97;116;101;109;97;116;105;99;97;32;43;32;34;32;97;32;77;97;116;101;109;225;116;105;99;97;34; -`,k_=` +`,S_=` 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;34;123;92;34;110;111;109;101;92;34;58;32;92;34;90;111;114;97;92;34;44;32;92;34;101;115;112;101;99;105;101;92;34;58;32;92;34;99;97;98;114;97;92;34;44;32;92;34;105;100;97;100;101;92;34;58;32;54;125;44;34; @@ -53329,7 +53329,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101; -`,S_=` +`,__=` 83;99;97;110;110;101;114;32;102;105;99;104;101;105;114;111;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;99;111;109;112;114;97;115;46;116;120;116;34;41;41; @@ -53349,7 +53349,7 @@ lösung: vb-wald-loesung.visustruct 102;105;99;104;101;105;114;111;46;99;108;111;115;101;40;41; -`,__=` +`,T_=` 105;110;116;91;93;91;93;32;116;97;98;101;108;97;32;61;32;110;101;119;32;105;110;116;91;49;48;93;91;49;48;93; @@ -53381,7 +53381,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;183;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;116;97;98;101;108;97;91;97;32;45;32;49;93;91;98;32;45;32;49;93; -`,T_=` +`,O_=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -53429,7 +53429,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;105;118;114;101;115;58;32;34;32;43;32;108;105;118;114;101;115; -`,O_=` +`,A_=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -53444,7 +53444,7 @@ lösung: vb-wald-loesung.visustruct 108;117;103;97;114;101;115;91;50;93;91;51;93;32;61;32;116;114;117;101; -`,A_=` +`,P_=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -53478,7 +53478,7 @@ lösung: vb-wald-loesung.visustruct -`,P_=` +`,j_=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -53496,7 +53496,7 @@ lösung: vb-wald-loesung.visustruct 105;110;112;117;116;58;32;105;110;116;32;108;117;103;97;114;32;34;76;117;103;97;114;34; -`,j_=` +`,C_=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -53544,7 +53544,7 @@ lösung: vb-wald-loesung.visustruct -`,C_=` +`,B_=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -53568,7 +53568,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;105;108;97;32;49;44;32;108;117;103;97;114;32;50;32;118;101;110;100;105;100;111;63;32;34;32;43;32;108;117;103;97;114;101;115;91;49;93;91;50;93; -`,B_=` +`,D_=` 105;110;116;32;115;101;103;117;110;100;111;115;32;61;32;50;48;48; @@ -53583,7 +53583,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;111;115;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;111;32;43;32;34;32;115;34; -`,D_=` +`,Z_=` 105;110;116;32;115;101;103;117;110;100;111;115;32;61;32;50;48;48; @@ -53598,7 +53598,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;111;115;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;111;32;43;32;34;32;115;34; -`,Z_=` +`,M_=` 83;116;114;105;110;103;32;110;111;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -53616,7 +53616,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;108;116;117;114;97;58;32;34;32;43;32;97;108;116;117;114;97;32;43;32;34;32;109;34; -`,M_=` +`,L_=` 105;110;116;32;110;117;109;101;114;111;32;61;32;51; @@ -53631,7 +53631,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;101;114;111; -`,L_=` +`,W_=` 105;110;116;32;110;117;109;101;114;111;32;61;32;50; @@ -53646,7 +53646,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;101;114;111; -`,W_=` +`,E_=` 111;117;116;112;117;116;58;32;110;117;109;101;114;111; @@ -53661,7 +53661,7 @@ lösung: vb-wald-loesung.visustruct 110;117;109;101;114;111;32;61;32;110;117;109;101;114;111;32;43;32;51; -`,E_=` +`,N_=` 83;116;114;105;110;103;32;101;115;113;117;101;114;100;97;32;61;32;34;115;117;109;111;34; @@ -53685,7 +53685,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;105;114;101;105;116;97;58;32;34;32;43;32;100;105;114;101;105;116;97; -`,N_=` +`,F_=` 83;116;114;105;110;103;32;101;115;113;117;101;114;100;97;32;61;32;34;115;117;109;111;34; @@ -53700,7 +53700,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;105;114;101;105;116;97;58;32;34;32;43;32;100;105;114;101;105;116;97; -`,F_=` +`,J_=` 105;110;116;32;97;32;61;32;53; @@ -53724,7 +53724,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,J_=` +`,R_=` 105;110;116;32;105;100;97;100;101;32;61;32;49;52; @@ -53742,7 +53742,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;108;116;117;114;97;58;32;34;32;43;32;97;108;116;117;114;97;32;43;32;34;32;109;34; -`,R_=` +`,G_=` 105;110;116;32;109;105;110;117;116;111;115;32;61;32;49;51;53; @@ -53757,7 +53757,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;104;111;114;97;115;32;43;32;34;32;104;111;114;97;115;32;101;32;34;32;43;32;114;101;115;116;111;32;43;32;34;32;109;105;110;117;116;111;115;34; -`,G_=` +`,H_=` 105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;61;32;51; @@ -53772,7 +53772,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;112;114;101;99;111;84;111;116;97;108;32;43;32;34;32;101;117;114;111;115;34; -`,H_=` +`,V_=` 105;110;116;32;115;97;108;100;111;32;61;32;50;48; @@ -53787,7 +53787,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;115;116;97;58;32;34;32;43;32;115;97;108;100;111; -`,V_=` +`,Q_=` 105;110;116;32;115;97;108;100;111;32;61;32;50;48; @@ -53802,7 +53802,7 @@ lösung: vb-wald-loesung.visustruct 115;97;108;100;111;32;61;32;115;97;108;100;111;32;45;32;112;114;101;99;111; -`,Q_=` +`,q_=` 105;110;116;32;112;114;101;99;111;32;61;32;57; @@ -53817,7 +53817,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,q_=` +`,U_=` 105;110;116;32;99;111;109;112;114;105;109;101;110;116;111;32;61;32;55; @@ -53838,7 +53838,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;101;114;237;109;101;116;114;111;58;32;34;32;43;32;112;101;114;105;109;101;116;114;111; -`,U_=` +`,$_=` 105;110;116;32;115;101;103;117;110;100;111;115;32;61;32;50;48;48; @@ -53853,7 +53853,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;111;115;32;43;32;34;32;109;105;110;117;116;111;115;32;101;32;34;32;43;32;114;101;115;116;111;32;43;32;34;32;115;101;103;117;110;100;111;115;34; -`,$_=` +`,Y_=` 105;110;116;32;115;101;103;117;110;100;111;115;32;61;32;50;48;48; @@ -53862,7 +53862,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;111;115;32;43;32;34;32;109;105;110;117;116;111;115;32;101;32;34;32;43;32;114;101;115;116;111;32;43;32;34;32;115;101;103;117;110;100;111;115;34; -`,Y_=` +`,X_=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;111;109;101;32;34;67;111;109;111;32;116;101;32;99;104;97;109;97;115;63;34; @@ -53871,7 +53871,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;79;108;225;32;34;32;43;32;110;111;109;101;32;43;32;34;33;34; -`,X_=` +`,K_=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -53886,7 +53886,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,K_=` +`,eT=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -53898,7 +53898,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;40;97;32;43;32;98;41; -`,eT=` +`,tT=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -53910,7 +53910,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;97;32;43;32;98; -`,tT=` +`,nT=` 105;110;112;117;116;58;32;105;110;116;32;97;110;111;115;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -53922,7 +53922,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;227;111;32;99;101;114;99;97;32;100;101;32;34;32;43;32;100;105;97;115;32;43;32;34;32;100;105;97;115;46;34; -`,nT=` +`,iT=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;120;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -53937,7 +53937,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;233;100;105;97;58;32;34;32;43;32;109;101;100;105;97; -`,iT=` +`,aT=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -53958,7 +53958,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;114;111;100;117;116;111;58;32;34;32;43;32;112;114;111;100;117;116;111; -`,aT=` +`,sT=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -53977,7 +53977,7 @@ lösung: vb-wald-loesung.visustruct -`,sT=` +`,rT=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;63;34; @@ -53999,7 +53999,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;101;114;111; -`,rT=` +`,oT=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;63;34; @@ -54018,7 +54018,7 @@ lösung: vb-wald-loesung.visustruct -`,oT=` +`,lT=` 105;110;116;32;112;111;110;116;111;115;32;61;32;48; @@ -54036,7 +54036,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;110;116;111;115;58;32;34;32;43;32;112;111;110;116;111;115; -`,lT=` +`,uT=` 105;110;116;32;112;111;110;116;111;115;32;61;32;48; @@ -54054,7 +54054,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;110;116;111;115;58;32;34;32;43;32;112;111;110;116;111;115; -`,uT=` +`,mT=` 105;110;116;32;112;114;101;99;111;32;61;32;56; @@ -54072,7 +54072,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,mT=` +`,cT=` 105;110;116;32;112;114;101;99;111;32;61;32;56; @@ -54090,7 +54090,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,cT=` +`,dT=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -54112,7 +54112,7 @@ lösung: vb-wald-loesung.visustruct -`,dT=` +`,hT=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;112;114;101;99;111;32;34;80;114;101;231;111;32;101;109;32;101;117;114;111;115;63;34; @@ -54134,7 +54134,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;32;112;97;103;97;114;58;32;34;32;43;32;112;114;101;99;111;32;43;32;34;32;101;117;114;111;115;34; -`,hT=` +`,gT=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;97;32;34;78;111;116;97;63;34; @@ -54153,7 +54153,7 @@ lösung: vb-wald-loesung.visustruct -`,gT=` +`,pT=` 105;110;112;117;116;58;32;105;110;116;32;112;111;110;116;111;115;32;34;81;117;97;110;116;111;115;32;112;111;110;116;111;115;63;34; @@ -54172,7 +54172,7 @@ lösung: vb-wald-loesung.visustruct -`,pT=` +`,fT=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;101;32;105;100;97;100;101;32;116;101;110;115;63;34; @@ -54191,7 +54191,7 @@ lösung: vb-wald-loesung.visustruct -`,fT=` +`,xT=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;101;32;105;100;97;100;101;32;116;101;110;115;63;34; @@ -54210,7 +54210,7 @@ lösung: vb-wald-loesung.visustruct -`,xT=` +`,bT=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -54229,7 +54229,7 @@ lösung: vb-wald-loesung.visustruct -`,bT=` +`,yT=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;97;32;34;78;111;116;97;63;34; @@ -54248,7 +54248,7 @@ lösung: vb-wald-loesung.visustruct -`,yT=` +`,vT=` 105;110;112;117;116;58;32;105;110;116;32;97;110;111;32;34;65;110;111;63;34; @@ -54267,7 +54267,7 @@ lösung: vb-wald-loesung.visustruct -`,vT=` +`,wT=` 105;110;112;117;116;58;32;105;110;116;32;100;105;97;32;34;68;105;97;32;40;49;32;97;32;55;41;63;34; @@ -54286,7 +54286,7 @@ lösung: vb-wald-loesung.visustruct -`,wT=` +`,zT=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;99;111;114;32;34;68;101;32;113;117;101;32;99;111;114;32;101;115;116;225;32;111;32;115;101;109;225;102;111;114;111;63;34; @@ -54315,7 +54315,7 @@ lösung: vb-wald-loesung.visustruct -`,zT=` +`,IT=` 105;110;112;117;116;58;32;105;110;116;32;101;115;99;111;108;104;97;32;34;49;32;225;103;117;97;44;32;50;32;115;117;109;111;44;32;51;32;99;104;111;99;111;108;97;116;101;32;113;117;101;110;116;101;34; @@ -54344,7 +54344,7 @@ lösung: vb-wald-loesung.visustruct -`,IT=` +`,kT=` 105;110;112;117;116;58;32;105;110;116;32;100;105;97;32;34;81;117;101;32;100;105;97;32;40;49;32;97;32;55;41;63;34; @@ -54363,7 +54363,7 @@ lösung: vb-wald-loesung.visustruct -`,kT=` +`,ST=` 105;110;112;117;116;58;32;105;110;116;32;100;105;97;32;34;81;117;101;32;100;105;97;32;40;49;32;97;32;55;41;63;34; @@ -54382,7 +54382,7 @@ lösung: vb-wald-loesung.visustruct -`,ST=` +`,_T=` 105;110;112;117;116;58;32;105;110;116;32;104;111;114;97;32;34;81;117;101;32;104;111;114;97;115;32;115;227;111;32;40;115;243;32;97;32;104;111;114;97;41;63;34; @@ -54401,7 +54401,7 @@ lösung: vb-wald-loesung.visustruct -`,_T=` +`,TT=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;97;32;34;81;117;101;32;110;111;116;97;63;34; @@ -54440,7 +54440,7 @@ lösung: vb-wald-loesung.visustruct -`,TT=` +`,OT=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;34; @@ -54487,7 +54487,7 @@ lösung: vb-wald-loesung.visustruct -`,OT=` +`,AT=` 105;110;112;117;116;58;32;105;110;116;32;101;115;99;111;108;104;97;32;34;49;32;225;103;117;97;44;32;50;32;115;117;109;111;44;32;51;32;99;104;111;99;111;108;97;116;101;32;113;117;101;110;116;101;34; @@ -54526,7 +54526,7 @@ lösung: vb-wald-loesung.visustruct -`,AT=` +`,PT=` 80;244;114;32;117;109;97;32;99;104;225;118;101;110;97;32;110;97;32;109;101;115;97; @@ -54556,7 +54556,7 @@ lösung: vb-wald-loesung.visustruct 66;101;98;101;114;32;111;32;99;104;225; -`,PT=` +`,jT=` 76;101;118;97;110;116;97;114; @@ -54571,7 +54571,7 @@ lösung: vb-wald-loesung.visustruct 84;111;109;97;114;32;111;32;112;101;113;117;101;110;111;45;97;108;109;111;231;111; -`,jT=` +`,CT=` 69;110;99;104;101;114;32;97;32;99;104;97;108;101;105;114;97;32;99;111;109;32;225;103;117;97; @@ -54592,7 +54592,7 @@ lösung: vb-wald-loesung.visustruct 84;105;114;97;114;32;97;32;115;97;113;117;101;116;97;32;100;101;32;99;104;225; -`,CT=` +`,BT=` 69;115;116;225;32;97;32;99;104;111;118;101;114;63; @@ -54611,7 +54611,7 @@ lösung: vb-wald-loesung.visustruct 83;97;105;114; -`,BT=` +`,DT=` 80;114;97;116;111;32;110;227;111;32;118;97;122;105;111; @@ -54625,7 +54625,7 @@ lösung: vb-wald-loesung.visustruct 76;101;118;97;110;116;97;114;32;111;32;112;114;97;116;111; -`,DT=` +`,ZT=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;67;111;110;116;97;114;32;97;116;233;63;34; @@ -54645,7 +54645,7 @@ lösung: vb-wald-loesung.visustruct -`,ZT=` +`,MT=` 105;110;116;32;110;117;109;101;114;111;32;61;32;51; @@ -54665,7 +54665,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;97;114;116;105;100;97;33;34; -`,MT=` +`,LT=` 105;110;116;32;110;117;109;101;114;111;32;61;32;51; @@ -54682,7 +54682,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;97;114;116;105;100;97;33;34; -`,LT=` +`,WT=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;70;97;116;111;114;105;97;108;32;100;101;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -54708,7 +54708,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;32;43;32;34;33;32;61;32;34;32;43;32;102;97;116;111;114;105;97;108; -`,WT=` +`,ET=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -54743,7 +54743,7 @@ lösung: vb-wald-loesung.visustruct -`,ET=` +`,NT=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -54778,7 +54778,7 @@ lösung: vb-wald-loesung.visustruct -`,NT=` +`,FT=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;81;117;101;32;110;250;109;101;114;111;63;34; @@ -54807,7 +54807,7 @@ lösung: vb-wald-loesung.visustruct -`,FT=` +`,JT=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;32;105;110;105;99;105;97;108;34; @@ -54830,7 +54830,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;112;97;115;115;111;115; -`,JT=` +`,RT=` 105;110;116;32;110;117;109;101;114;111;32;61;32;48; @@ -54847,7 +54847,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;79;98;114;105;103;97;100;111;33;34; -`,RT=` +`,GT=` 105;110;116;32;105;32;61;32;49;48; @@ -54864,7 +54864,7 @@ lösung: vb-wald-loesung.visustruct -`,GT=` +`,HT=` 105;110;112;117;116;58;32;105;110;116;32;111;98;106;101;116;105;118;111;32;34;79;98;106;101;116;105;118;111;63;34; @@ -54890,7 +54890,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;101;109;97;110;97;115;58;32;34;32;43;32;115;101;109;97;110;97;115; -`,HT=` +`,VT=` 105;110;112;117;116;58;32;105;110;116;32;111;98;106;101;116;105;118;111;32;34;79;98;106;101;116;105;118;111;63;34; @@ -54916,7 +54916,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;101;109;97;110;97;115;58;32;34;32;43;32;115;101;109;97;110;97;115; -`,VT=` +`,QT=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;111;110;100;101;63;34; @@ -54936,7 +54936,7 @@ lösung: vb-wald-loesung.visustruct -`,QT=` +`,qT=` 105;110;116;32;110;111;116;97;32;61;32;48; @@ -54953,7 +54953,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;32;116;117;97;32;110;111;116;97;58;32;34;32;43;32;110;111;116;97; -`,qT=` +`,UT=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -54976,7 +54976,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,UT=` +`,$T=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;78;250;109;101;114;111;32;105;110;105;99;105;97;108;34; @@ -54995,7 +54995,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;225;33;34; -`,$T=` +`,YT=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;81;117;101;32;116;97;98;117;97;100;97;63;34; @@ -55014,7 +55014,7 @@ lösung: vb-wald-loesung.visustruct -`,YT=` +`,XT=` 105;110;116;32;105;32;61;32;49; @@ -55027,7 +55027,7 @@ lösung: vb-wald-loesung.visustruct -`,XT=` +`,KT=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;32;105;110;105;99;105;97;108;63;34; @@ -55044,7 +55044,7 @@ lösung: vb-wald-loesung.visustruct -`,KT=` +`,eO=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;32;105;110;105;99;105;97;108;63;34; @@ -55061,7 +55061,7 @@ lösung: vb-wald-loesung.visustruct -`,eO=` +`,tO=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;32;105;110;105;99;105;97;108;63;34; @@ -55078,7 +55078,7 @@ lösung: vb-wald-loesung.visustruct -`,tO=` +`,nO=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -55100,7 +55100,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,nO=` +`,iO=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;81;117;97;110;116;97;115;32;108;105;110;104;97;115;63;34; @@ -55129,7 +55129,7 @@ lösung: vb-wald-loesung.visustruct -`,iO=` +`,aO=` 105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;61;32;48; @@ -55161,7 +55161,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;113;117;97;110;116;105;100;97;100;101; -`,aO=` +`,sO=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -55193,7 +55193,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;113;117;97;110;116;105;100;97;100;101; -`,sO=` +`,rO=` 105;110;112;117;116;58;32;105;110;116;32;116;97;98;117;97;100;97;32;34;81;117;101;32;116;97;98;117;97;100;97;63;34; @@ -55209,7 +55209,7 @@ lösung: vb-wald-loesung.visustruct -`,rO=` +`,oO=` 105;110;112;117;116;58;32;105;110;116;32;116;97;98;117;97;100;97;32;34;81;117;101;32;116;97;98;117;97;100;97;63;34; @@ -55225,7 +55225,7 @@ lösung: vb-wald-loesung.visustruct -`,oO=` +`,lO=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -55241,7 +55241,7 @@ lösung: vb-wald-loesung.visustruct -`,lO=` +`,uO=` 105;110;112;117;116;58;32;105;110;116;32;108;97;114;103;117;114;97;32;34;76;97;114;103;117;114;97;34; @@ -55273,7 +55273,7 @@ lösung: vb-wald-loesung.visustruct -`,uO=` +`,mO=` 105;110;116;91;93;32;110;117;109;101;114;111;115;32;61;32;123;50;44;32;52;44;32;54;44;32;56;44;32;49;48;125; @@ -55289,7 +55289,7 @@ lösung: vb-wald-loesung.visustruct -`,mO=` +`,cO=` 105;110;116;91;93;32;118;97;108;111;114;101;115;32;61;32;123;52;44;32;56;44;32;49;53;44;32;49;54;44;32;50;51;44;32;52;50;125; @@ -55304,7 +55304,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;118;97;108;111;114;101;115;46;108;101;110;103;116;104; -`,cO=` +`,dO=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -55336,7 +55336,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;81;117;97;110;116;105;100;97;100;101;58;32;34;32;43;32;113;117;97;110;116;105;100;97;100;101; -`,dO=` +`,hO=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -55368,7 +55368,7 @@ lösung: vb-wald-loesung.visustruct -`,hO=` +`,gO=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;81;117;97;110;116;111;115;32;100;101;103;114;97;117;115;63;34; @@ -55397,7 +55397,7 @@ lösung: vb-wald-loesung.visustruct -`,gO=` +`,pO=` 83;116;114;105;110;103;91;93;32;110;111;109;101;115;32;61;32;110;101;119;32;83;116;114;105;110;103;91;51;93; @@ -55416,7 +55416,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;114;105;109;101;105;114;111;32;110;111;109;101;58;32;34;32;43;32;110;111;109;101;115;91;48;93; -`,pO=` +`,fO=` 105;110;116;91;93;32;110;117;109;101;114;111;115;32;61;32;110;101;119;32;105;110;116;91;52;93; @@ -55442,7 +55442,7 @@ lösung: vb-wald-loesung.visustruct -`,fO=` +`,xO=` 105;110;116;91;93;32;110;117;109;101;114;111;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -55493,7 +55493,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;225;120;105;109;111;58;32;34;32;43;32;109;97;120; -`,xO=` +`,bO=` 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;123;49;50;44;32;55;44;32;49;57;44;32;52;125; @@ -55534,7 +55534,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;225;120;105;109;111;58;32;34;32;43;32;109;97;120; -`,bO=` +`,yO=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -55557,7 +55557,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,yO=` +`,vO=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -55587,7 +55587,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,vO=` +`,wO=` 105;110;112;117;116;58;32;105;110;116;32;99;111;109;112;114;105;109;101;110;116;111;32;34;67;111;109;112;114;105;109;101;110;116;111;63;34; @@ -55602,7 +55602,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;193;114;101;97;58;32;34;32;43;32;102; -`,wO=` +`,zO=` 109;111;115;116;114;97;114;66;111;97;115;86;105;110;100;97;115;40;41; @@ -55614,7 +55614,7 @@ lösung: vb-wald-loesung.visustruct 109;111;115;116;114;97;114;82;101;115;117;108;116;97;100;111;40;41; -`,zO=` +`,IO=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;97;115;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -55646,7 +55646,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;101;109;112;101;114;97;116;117;114;97;32;109;97;105;115;32;97;108;116;97;58;32;34;32;43;32;109;97;120; -`,IO=` +`,kO=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;97;115;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -55678,7 +55678,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;101;109;112;101;114;97;116;117;114;97;32;109;97;105;115;32;97;108;116;97;58;32;34;32;43;32;109;97;120; -`,kO=` +`,SO=` 105;110;116;91;93;32;110;111;116;97;115;32;61;32;123;50;44;32;51;44;32;49;44;32;52;125; @@ -55700,7 +55700,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,SO=` +`,_O=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;81;117;101;32;110;250;109;101;114;111;63;34; @@ -55712,7 +55712,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;79;32;113;117;97;100;114;97;100;111;32;233;32;34;32;43;32;113; -`,_O=` +`,TO=` 105;110;116;32;114;101;115;117;108;116;97;100;111;32;61;32;120;32;42;32;120; @@ -55721,7 +55721,7 @@ lösung: vb-wald-loesung.visustruct 114;101;116;117;114;110;32;114;101;115;117;108;116;97;100;111; -`,TO=` +`,OO=` 109;111;115;116;114;97;114;84;105;116;117;108;111;40;41; @@ -55733,7 +55733,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;79;108;225;32;34;32;43;32;110;111;109;101; -`,OO=` +`,AO=` 111;117;116;112;117;116;58;32;34;66;101;109;45;118;105;110;100;111;32;97;111;32;113;117;105;122;33;34; @@ -55742,7 +55742,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;97;105;115;32;116;101;114;32;116;114;234;115;32;112;101;114;103;117;110;116;97;115;46;34; -`,AO=` +`,PO=` 109;111;115;116;114;97;114;83;111;109;97;40;51;44;32;52;41; @@ -55754,7 +55754,7 @@ lösung: vb-wald-loesung.visustruct 109;111;115;116;114;97;114;83;111;109;97;40;120;44;32;120;32;43;32;49;41; -`,PO=` +`,jO=` 105;110;116;32;115;111;109;97;32;61;32;97;32;43;32;98; @@ -55763,7 +55763,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;43;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;115;111;109;97; -`,jO=` +`,CO=` 105;110;112;117;116;58;32;105;110;116;32;105;110;105;99;105;111;32;34;86;97;108;111;114;32;105;110;105;99;105;97;108;34; @@ -55786,7 +55786,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;225;33;34; -`,CO=` +`,BO=` 105;110;112;117;116;58;32;105;110;116;32;105;110;105;99;105;111;32;34;86;97;108;111;114;32;105;110;105;99;105;97;108;34; @@ -55809,7 +55809,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;225;34; -`,BO=` +`,DO=` 105;110;116;91;93;91;93;32;112;111;110;116;111;115;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -55831,7 +55831,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;111;103;97;100;111;114;32;50;58;32;34;32;43;32;115;111;109;97; -`,DO=` +`,ZO=` 105;110;116;91;93;91;93;32;112;111;110;116;111;115;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -55853,7 +55853,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;111;103;97;100;111;114;32;50;58;32;34;32;43;32;115;111;109;97; -`,ZO=` +`,MO=` 105;110;116;91;93;91;93;32;112;111;110;116;111;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;49;125;44;32;123;50;44;32;50;125;125; @@ -55882,7 +55882,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,MO=` +`,LO=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -55905,7 +55905,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,LO=` +`,WO=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -55927,7 +55927,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,WO=` +`,EO=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -55949,7 +55949,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,EO=` +`,NO=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;81;117;101;32;116;97;98;117;97;100;97;63;34; @@ -55981,7 +55981,7 @@ lösung: vb-wald-loesung.visustruct -`,NO=` +`,FO=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;73;110;116;114;111;100;117;122;32;117;109;32;110;250;109;101;114;111;34; @@ -56003,7 +56003,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;97;116;111;114;105;97;108; -`,FO=` +`,JO=` 83;116;114;105;110;103;32;99;97;114;116;97;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;99;97;114;116;97;46;116;120;116;34;41;41; @@ -56035,13 +56035,13 @@ lösung: vb-wald-loesung.visustruct -`,JO=` +`,RO=` 83;116;114;105;110;103;32;99;97;114;116;97;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;99;97;114;116;97;46;116;120;116;34;41;41; -`,RO=` +`,GO=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;111;109;101;32;34;78;111;109;101;32;112;114;243;112;114;105;111;63;34; @@ -56053,7 +56053,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;97;112;101;108;105;100;111;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,GO=` +`,HO=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;111;109;101;32;34;78;111;109;101;32;112;114;243;112;114;105;111;63;34; @@ -56065,7 +56065,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;32;34;32;43;32;97;112;101;108;105;100;111;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;34; -`,HO=` +`,VO=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;101;110;116;114;97;100;97;32;34;80;97;108;97;118;114;97;45;112;97;115;115;101;63;34; @@ -56084,7 +56084,7 @@ lösung: vb-wald-loesung.visustruct -`,VO=` +`,QO=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -56113,7 +56113,7 @@ lösung: vb-wald-loesung.visustruct -`,QO=` +`,qO=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;86;97;108;111;114;32;105;110;105;99;105;97;108;63;34; @@ -56133,7 +56133,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;105;109;34; -`,qO=` +`,UO=` 105;110;116;32;116;101;110;116;97;116;105;118;97;115;32;61;32;48; @@ -56166,7 +56166,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;101;110;116;97;116;105;118;97;115;58;32;34;32;43;32;116;101;110;116;97;116;105;118;97;115; -`,UO=` +`,$O=` 105;110;116;32;116;101;110;116;97;116;105;118;97;115;32;61;32;48; @@ -56199,7 +56199,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;101;110;116;97;116;105;118;97;115;58;32;34;32;43;32;116;101;110;116;97;116;105;118;97;115; -`,$O=` +`,YO=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -56241,7 +56241,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;115;111;109;97; -`,YO=` +`,XO=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -56263,7 +56263,7 @@ lösung: vb-wald-loesung.visustruct -`,XO=` +`,KO=` 105;110;112;117;116;58;32;105;110;116;32;108;105;109;105;116;101;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -56279,7 +56279,7 @@ lösung: vb-wald-loesung.visustruct -`,KO=` +`,eA=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -56318,7 +56318,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;231;227;111;58;32;34;32;43;32;112;111;115;105;99;97;111; -`,eA=` +`,tA=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -56357,7 +56357,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;231;227;111;58;32;34;32;43;32;112;111;115;105;99;97;111; -`,tA=` +`,nA=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -56392,7 +56392,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;81;117;97;110;116;105;100;97;100;101;58;32;34;32;43;32;113;117;97;110;116;105;100;97;100;101; -`,nA=` +`,iA=` 111;117;116;112;117;116;58;32;34;66;111;109;32;100;105;97;34; @@ -56401,13 +56401,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;111;106;101;32;97;112;114;101;110;100;101;109;111;115;32;101;115;116;114;117;116;111;103;114;97;109;97;115;46;34; -`,iA=` +`,aA=` 111;117;116;112;117;116;58;32;34;79;108;225;32;77;117;110;100;111;34; -`,aA=` +`,sA=` 111;117;116;112;117;116;58;32;34;79;108;225;34; @@ -56416,7 +56416,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;115;116;111;117;32;97;32;97;112;114;101;110;100;101;114;32;101;115;116;114;117;116;111;103;114;97;109;97;115;34; -`,sA=` +`,rA=` 83;99;97;110;110;101;114;32;102;105;99;104;101;105;114;111;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;99;111;109;112;114;97;115;46;116;120;116;34;41;41; @@ -56457,7 +56457,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;113;117;97;110;116;105;100;97;100;101;32;43;32;34;32;108;105;110;104;97;115;32;103;117;97;114;100;97;100;97;115;34; -`,rA=` +`,oA=` 83;99;97;110;110;101;114;32;102;105;99;104;101;105;114;111;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;99;111;109;112;114;97;115;46;116;120;116;34;41;41; @@ -56466,7 +56466,7 @@ lösung: vb-wald-loesung.visustruct 80;114;105;110;116;87;114;105;116;101;114;32;115;97;105;100;97;32;61;32;110;101;119;32;80;114;105;110;116;87;114;105;116;101;114;40;34;99;111;109;112;114;97;115;45;110;111;118;97;46;116;120;116;34;41; -`,oA=` +`,lA=` 83;99;97;110;110;101;114;32;102;105;99;104;101;105;114;111;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;99;111;109;112;114;97;115;46;116;120;116;34;41;41; @@ -56492,13 +56492,13 @@ lösung: vb-wald-loesung.visustruct 102;105;99;104;101;105;114;111;46;99;108;111;115;101;40;41; -`,lA=` +`,uA=` 83;99;97;110;110;101;114;32;102;105;99;104;101;105;114;111;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;99;111;109;112;114;97;115;46;116;120;116;34;41;41; -`,uA=` +`,mA=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;100;105;97;114;105;111;46;116;120;116;34;41;41; @@ -56537,7 +56537,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;97;112;111;115;97;58;32;34;32;43;32;113;117;97;110;116;105;100;97;100;101; -`,mA=` +`,cA=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;100;105;97;114;105;111;46;116;120;116;34;41;41; @@ -56546,7 +56546,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,cA=` +`,dA=` 83;116;114;105;110;103;32;116;101;120;116;111;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;100;105;97;114;105;111;46;116;120;116;34;41;41; @@ -56581,7 +56581,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;110;116;114;97;100;97;32;109;97;105;115;32;108;111;110;103;97;58;32;34;32;43;32;109;97;105;115;76;111;110;103;97; -`,dA=` +`,hA=` 83;116;114;105;110;103;32;116;101;120;116;111;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;100;105;97;114;105;111;46;116;120;116;34;41;41; @@ -56590,7 +56590,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;108;105;110;104;97;115;32;61;32;116;101;120;116;111;46;115;112;108;105;116;40;34;92;110;34;41; -`,hA=` +`,gA=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;117;114;109;97;46;99;115;118;34;41;41; @@ -56644,7 +56644,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;101;108;104;111;114;32;110;111;116;97;32;97;32;73;110;103;108;234;115;58;32;34;32;43;32;109;101;108;104;111;114;78;111;109;101;32;43;32;34;32;40;34;32;43;32;109;101;108;104;111;114;78;111;116;97;32;43;32;34;41;34; -`,gA=` +`,pA=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;117;114;109;97;46;99;115;118;34;41;41; @@ -56653,7 +56653,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,pA=` +`,fA=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;117;114;109;97;46;99;115;118;34;41;41; @@ -56694,7 +56694,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;233;100;105;97;32;100;101;32;77;97;116;101;109;225;116;105;99;97;58;32;34;32;43;32;115;111;109;97;32;47;32;113;117;97;110;116;105;100;97;100;101; -`,fA=` +`,xA=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;117;114;109;97;46;99;115;118;34;41;41; @@ -56703,7 +56703,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,xA=` +`,bA=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -56742,7 +56742,7 @@ lösung: vb-wald-loesung.visustruct 108;101;105;116;111;114;46;99;108;111;115;101;40;41; -`,bA=` +`,yA=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -56751,7 +56751,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,yA=` +`,vA=` 83;116;114;105;110;103;91;93;32;110;111;109;101;115;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;82;97;112;111;115;97;34;125; @@ -56801,7 +56801,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;115;46;108;101;110;103;116;104;32;43;32;34;32;101;110;116;114;97;100;97;115;32;103;117;97;114;100;97;100;97;115;34; -`,vA=` +`,wA=` 83;116;114;105;110;103;91;93;32;110;111;109;101;115;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;82;97;112;111;115;97;34;125; @@ -56819,7 +56819,7 @@ lösung: vb-wald-loesung.visustruct 115;97;105;100;97;46;99;108;111;115;101;40;41; -`,wA=` +`,zA=` 83;116;114;105;110;103;32;116;101;120;116;111;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;97;110;105;109;97;105;115;46;99;115;118;34;41;41; @@ -56872,7 +56872,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;40;108;105;110;104;97;115;46;108;101;110;103;116;104;32;45;32;49;41;32;43;32;34;32;97;110;105;109;97;105;115;32;103;117;97;114;100;97;100;111;115;34; -`,zA=` +`,IA=` 83;116;114;105;110;103;32;116;101;120;116;111;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;97;110;105;109;97;105;115;46;99;115;118;34;41;41; @@ -56893,7 +56893,7 @@ lösung: vb-wald-loesung.visustruct 115;97;105;100;97;46;99;108;111;115;101;40;41; -`,IA=` +`,kA=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;97;110;105;109;97;105;115;46;99;115;118;34;41;41; @@ -56937,7 +56937,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;113;117;97;110;116;105;100;97;100;101;32;43;32;34;32;102;114;97;115;101;115;32;103;117;97;114;100;97;100;97;115;34; -`,kA=` +`,SA=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;97;110;105;109;97;105;115;46;99;115;118;34;41;41; @@ -56958,7 +56958,7 @@ lösung: vb-wald-loesung.visustruct 115;97;105;100;97;46;99;108;111;115;101;40;41; -`,SA=` +`,_A=` 105;110;112;117;116;58;32;105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;98;105;108;104;101;116;101;115;63;34; @@ -56970,7 +56970,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,_A=` +`,TA=` 105;110;112;117;116;58;32;105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;98;105;108;104;101;116;101;115;63;34; @@ -56982,7 +56982,7 @@ lösung: vb-wald-loesung.visustruct 100;111;117;98;108;101;32;116;111;116;97;108;32;61;32;113;117;97;110;116;105;100;97;100;101;32;42;32;56;46;53; -`,TA=` +`,OA=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;34; @@ -57006,7 +57006,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,OA=` +`,AA=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;34; @@ -57027,7 +57027,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,AA=` +`,PA=` 105;110;116;32;97;32;61;32;51; @@ -57051,7 +57051,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,PA=` +`,jA=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -57110,7 +57110,7 @@ lösung: vb-wald-loesung.visustruct -`,jA=` +`,CA=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -57169,7 +57169,7 @@ lösung: vb-wald-loesung.visustruct -`,CA=` +`,BA=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -57243,7 +57243,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;109;112;97;114;97;231;245;101;115;58;32;34;32;43;32;99;111;109;112;97;114;97;99;111;101;115; -`,BA=` +`,DA=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;55;44;32;51;44;32;49;48;44;32;53;44;32;50;125; @@ -57292,7 +57292,7 @@ lösung: vb-wald-loesung.visustruct -`,DA=` +`,ZA=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -57341,7 +57341,7 @@ lösung: vb-wald-loesung.visustruct -`,ZA=` +`,MA=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -57399,7 +57399,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;109;112;97;114;97;231;245;101;115;58;32;34;32;43;32;99;111;109;112;97;114;97;99;111;101;115; -`,MA=` +`,LA=` 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;123;51;44;32;53;44;32;56;125; @@ -57418,7 +57418,7 @@ lösung: vb-wald-loesung.visustruct -`,LA=` +`,WA=` 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;123;51;44;32;53;44;32;56;125; @@ -57437,7 +57437,7 @@ lösung: vb-wald-loesung.visustruct -`,WA=` +`,EA=` 105;110;116;32;105;32;61;32;48; @@ -57450,7 +57450,7 @@ lösung: vb-wald-loesung.visustruct -`,EA=` +`,NA=` 105;110;116;32;110;117;109;101;114;111;32;61;32;53; @@ -57474,7 +57474,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;101;112;111;105;115;58;32;34;32;43;32;102;105;108;97;91;48;93;32;43;32;34;44;32;34;32;43;32;102;105;108;97;91;49;93; -`,NA=` +`,FA=` 105;110;116;32;105;32;61;32;48; @@ -57487,7 +57487,7 @@ lösung: vb-wald-loesung.visustruct -`,FA=` +`,JA=` 120;32;61;32;120;32;42;32;50; @@ -57496,7 +57496,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;111;32;115;117;98;112;114;111;103;114;97;109;97;58;32;120;32;61;32;34;32;43;32;120; -`,JA=` +`,RA=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;111;109;101;32;34;78;111;109;101;32;112;114;243;112;114;105;111;34; @@ -57508,7 +57508,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;97;112;101;108;105;100;111;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,RA=` +`,GA=` 83;116;114;105;110;103;32;112;97;108;97;118;114;97;32;61;32;34;80;97;115;115;97;116;101;109;112;111;34; @@ -57547,7 +57547,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;116;101;120;116; -`,GA=` +`,HA=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;112;97;108;97;118;114;97;32;34;73;110;116;114;111;100;117;122;32;117;109;97;32;112;97;108;97;118;114;97;34; @@ -57569,7 +57569,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;105;110;118;101;114;116;105;100;97; -`,HA=` +`,VA=` 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;34;76;117;100;119;105;103;59;98;111;100;101;59;55;34; @@ -57588,7 +57588,7 @@ lösung: vb-wald-loesung.visustruct -`,VA=` +`,QA=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;102;114;97;115;101;32;34;73;110;116;114;111;100;117;122;32;117;109;97;32;102;114;97;115;101;34; @@ -57600,7 +57600,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;97;108;97;118;114;97;115;58;32;34;32;43;32;112;97;108;97;118;114;97;115;46;108;101;110;103;116;104; -`,QA=` +`,qA=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;112;97;108;97;118;114;97;32;34;73;110;116;114;111;100;117;122;32;117;109;97;32;112;97;108;97;118;114;97;34; @@ -57632,7 +57632,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;250;109;101;114;111;32;100;101;32;97;58;32;34;32;43;32;113;117;97;110;116;105;100;97;100;101; -`,qA=` +`,UA=` 83;116;114;105;110;103;32;112;97;108;97;118;114;97;32;61;32;34;80;97;115;115;97;116;101;109;112;111;34; @@ -57656,7 +57656,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;112;97;108;97;118;114;97;46;116;111;85;112;112;101;114;67;97;115;101;40;41; -`,UA=` +`,$A=` 105;110;112;117;116;58;32;105;110;116;32;97;110;122;97;104;108;32;34;87;105;101;32;118;105;101;108;101;32;75;97;114;116;101;110;63;34; @@ -57668,7 +57668,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;103;101;115;97;109;116; -`,$A=` +`,YA=` 105;110;112;117;116;58;32;105;110;116;32;97;110;122;97;104;108;32;34;87;105;101;32;118;105;101;108;101;32;75;97;114;116;101;110;63;34; @@ -57680,7 +57680,7 @@ lösung: vb-wald-loesung.visustruct 100;111;117;98;108;101;32;103;101;115;97;109;116;32;61;32;97;110;122;97;104;108;32;42;32;56;46;53; -`,YA=` +`,XA=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;34; @@ -57704,7 +57704,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,XA=` +`,KA=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;34; @@ -57725,7 +57725,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,KA=` +`,eP=` 105;110;116;32;97;32;61;32;51; @@ -57749,7 +57749,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,eP=` +`,tP=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -57808,7 +57808,7 @@ lösung: vb-wald-loesung.visustruct -`,tP=` +`,nP=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -57867,7 +57867,7 @@ lösung: vb-wald-loesung.visustruct -`,nP=` +`,iP=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -57941,7 +57941,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;101;114;103;108;101;105;99;104;101;58;32;34;32;43;32;118;101;114;103;108;101;105;99;104;101; -`,iP=` +`,aP=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;55;44;32;51;44;32;49;48;44;32;53;44;32;50;125; @@ -57990,7 +57990,7 @@ lösung: vb-wald-loesung.visustruct -`,aP=` +`,sP=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -58039,7 +58039,7 @@ lösung: vb-wald-loesung.visustruct -`,sP=` +`,rP=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -58097,7 +58097,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;101;114;103;108;101;105;99;104;101;58;32;34;32;43;32;118;101;114;103;108;101;105;99;104;101; -`,rP=` +`,oP=` 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;123;51;44;32;53;44;32;56;125; @@ -58116,7 +58116,7 @@ lösung: vb-wald-loesung.visustruct -`,oP=` +`,lP=` 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;123;51;44;32;53;44;32;56;125; @@ -58135,7 +58135,7 @@ lösung: vb-wald-loesung.visustruct -`,lP=` +`,uP=` 105;110;116;32;105;32;61;32;48; @@ -58148,7 +58148,7 @@ lösung: vb-wald-loesung.visustruct -`,uP=` +`,mP=` 105;110;116;32;122;97;104;108;32;61;32;53; @@ -58172,7 +58172,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;97;99;104;104;101;114;58;32;34;32;43;32;114;101;105;104;101;91;48;93;32;43;32;34;44;32;34;32;43;32;114;101;105;104;101;91;49;93; -`,mP=` +`,cP=` 105;110;116;32;105;32;61;32;48; @@ -58185,7 +58185,7 @@ lösung: vb-wald-loesung.visustruct -`,cP=` +`,dP=` 120;32;61;32;120;32;42;32;50; @@ -58194,7 +58194,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;73;109;32;85;110;116;101;114;112;114;111;103;114;97;109;109;58;32;120;32;61;32;34;32;43;32;120; -`,dP=` +`,hP=` 105;110;116;32;97;98;115;116;97;110;100;32;61;32;109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41; @@ -58203,7 +58203,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;65;98;115;116;97;110;100;58;32;34;32;43;32;97;98;115;116;97;110;100;32;43;32;34;32;99;109;34;41; -`,hP=` +`,gP=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;49;48; @@ -58229,7 +58229,7 @@ lösung: vb-wald-loesung.visustruct -`,gP=` +`,pP=` 33;109;98;111;116;46;105;115;66;117;116;116;111;110;66;40;41; @@ -58256,7 +58256,7 @@ lösung: vb-wald-loesung.visustruct -`,pP=` +`,fP=` 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;48;44;32;48;41; @@ -58274,7 +58274,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;101;116;76;101;100;40;48;44;32;50;53;53;44;32;48;41; -`,fP=` +`,xP=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -58304,7 +58304,7 @@ lösung: vb-wald-loesung.visustruct -`,xP=` +`,bP=` 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;72;97;108;108;111;33;34;41; @@ -58316,7 +58316,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;73;99;104;32;98;105;110;32;86;105;115;117;66;111;116;34;41; -`,bP=` +`,yP=` 105;110;116;32;122;97;104;108;32;61;32;48; @@ -58368,7 +58368,7 @@ lösung: vb-wald-loesung.visustruct -`,yP=` +`,vP=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;111;116;34;41; @@ -58379,7 +58379,7 @@ lösung: vb-wald-loesung.visustruct -`,vP=` +`,wP=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -58390,7 +58390,7 @@ lösung: vb-wald-loesung.visustruct -`,wP=` +`,zP=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -58401,7 +58401,7 @@ lösung: vb-wald-loesung.visustruct -`,zP=` +`,IP=` 83;116;114;105;110;103;32;119;111;114;116;32;61;32;34;86;105;115;117;66;111;116;34; @@ -58420,7 +58420,7 @@ lösung: vb-wald-loesung.visustruct -`,IP=` +`,kP=` 109;98;111;116;46;108;101;100;40;48;41;46;115;101;116;67;111;108;111;114;40;34;114;111;116;34;41; @@ -58432,7 +58432,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;108;101;100;40;52;41;46;115;101;116;67;111;108;111;114;40;34;103;114;252;110;34;41; -`,kP=` +`,SP=` 105;110;116;32;105;32;61;32;48; @@ -58448,7 +58448,7 @@ lösung: vb-wald-loesung.visustruct -`,SP=` +`,_P=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;98;108;97;117;34;41; @@ -58476,7 +58476,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;71;101;112;97;114;107;116;33;34;41; -`,_P=` +`,TP=` 83;116;114;105;110;103;91;93;32;102;97;114;98;101;110;32;61;32;123;34;114;111;116;34;44;32;34;103;101;108;98;34;44;32;34;103;114;252;110;34;44;32;34;98;108;97;117;34;44;32;34;108;105;108;97;34;125; @@ -58492,7 +58492,7 @@ lösung: vb-wald-loesung.visustruct -`,TP=` +`,OP=` 109;98;111;116;46;103;101;116;67;111;108;111;114;40;41; @@ -58518,7 +58518,7 @@ lösung: vb-wald-loesung.visustruct -`,OP=` +`,AP=` 109;98;111;116;46;100;114;105;118;101;40;53;48;44;32;53;48;41; @@ -58535,7 +58535,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,AP=` +`,PP=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -58553,7 +58553,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;41; -`,PP=` +`,jP=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;111;116;34;41; @@ -58589,7 +58589,7 @@ lösung: vb-wald-loesung.visustruct -`,jP=` +`,CP=` 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;65;107;107;117;58;32;34;32;43;32;109;98;111;116;46;103;101;116;66;97;116;116;101;114;121;40;41;32;43;32;34;32;37;34;41; @@ -58608,7 +58608,7 @@ lösung: vb-wald-loesung.visustruct -`,CP=` +`,BP=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;98;108;97;117;34;41; @@ -58632,7 +58632,7 @@ lösung: vb-wald-loesung.visustruct -`,BP=` +`,DP=` 105;110;116;32;105;32;61;32;48; @@ -58654,7 +58654,7 @@ lösung: vb-wald-loesung.visustruct -`,DP=` +`,ZP=` 105;110;116;32;105;32;61;32;51; @@ -58673,7 +58673,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;76;111;115;33;34;41; -`,ZP=` +`,MP=` 105;110;116;32;105;32;61;32;49; @@ -58686,7 +58686,7 @@ lösung: vb-wald-loesung.visustruct -`,MP=` +`,LP=` 105;110;116;32;105;32;61;32;48; @@ -58719,7 +58719,7 @@ lösung: vb-wald-loesung.visustruct -`,LP=` +`,WP=` 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;62;32;54;48; @@ -58735,7 +58735,7 @@ lösung: vb-wald-loesung.visustruct -`,WP=` +`,EP=` 105;110;116;32;105;32;61;32;48; @@ -58754,7 +58754,7 @@ lösung: vb-wald-loesung.visustruct -`,EP=` +`,NP=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -58798,7 +58798,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,NP=` +`,FP=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;51;48; @@ -58817,7 +58817,7 @@ lösung: vb-wald-loesung.visustruct -`,FP=` +`,JP=` 105;110;116;32;115;99;104;114;105;116;116;101;32;61;32;48; @@ -58847,7 +58847,7 @@ lösung: vb-wald-loesung.visustruct -`,JP=` +`,RP=` 105;110;116;32;108;97;101;110;103;101;32;61;32;54;48; @@ -58875,7 +58875,7 @@ lösung: vb-wald-loesung.visustruct -`,RP=` +`,GP=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;34;72;97;108;108;111;32;75;108;97;115;115;101;34; @@ -58884,7 +58884,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;116;101;120;116;32;43;32;34;32;40;34;32;43;32;116;101;120;116;46;108;101;110;103;116;104;40;41;32;43;32;34;41;34;41; -`,GP=` +`,HP=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -58898,7 +58898,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;44;32;51;48;48;41; -`,HP=` +`,VP=` 109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;62;32;45;53;32;38;38;32;109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;60;32;53;32;38;38;32;109;98;111;116;46;103;101;116;82;111;108;108;40;41;32;62;32;45;53;32;38;38;32;109;98;111;116;46;103;101;116;82;111;108;108;40;41;32;60;32;53; @@ -58914,7 +58914,7 @@ lösung: vb-wald-loesung.visustruct -`,VP=` +`,QP=` 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;60;32;53;48; @@ -58928,7 +58928,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;51;48;41; -`,QP=` +`,qP=` 105;110;116;32;105;32;61;32;48; @@ -58963,7 +58963,7 @@ lösung: vb-wald-loesung.visustruct -`,qP=` +`,UP=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -58997,7 +58997,7 @@ lösung: vb-wald-loesung.visustruct -`,UP=` +`,$P=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;111;116;34;41; @@ -59041,7 +59041,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,$P=` +`,YP=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41; @@ -59067,7 +59067,7 @@ lösung: vb-wald-loesung.visustruct -`,YP=` +`,XP=` 105;110;116;91;93;32;116;111;101;110;101;32;61;32;123;50;54;50;44;32;50;57;52;44;32;51;51;48;44;32;51;52;57;44;32;51;57;50;125; @@ -59083,7 +59083,7 @@ lösung: vb-wald-loesung.visustruct -`,XP=` +`,KP=` 105;110;116;32;105;32;61;32;48; @@ -59149,7 +59149,7 @@ lösung: vb-wald-loesung.visustruct -`,KP=` +`,ej=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;51;48; @@ -59165,7 +59165,7 @@ lösung: vb-wald-loesung.visustruct -`,ej=` +`,tj=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;50;48; @@ -59182,7 +59182,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;90;122;122;34;41; -`,tj=` +`,nj=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;101; @@ -59211,7 +59211,7 @@ lösung: vb-wald-loesung.visustruct -`,nj=` +`,ij=` 105;110;116;32;97;32;61;32;113;117;97;100;114;97;116;122;97;104;108;40;51;41; @@ -59226,13 +59226,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,ij=` +`,aj=` 114;101;116;117;114;110;32;120;32;42;32;120; -`,aj=` +`,sj=` 83;116;114;105;110;103;32;119;111;114;116;32;61;32;34;76;117;100;119;105;103;34; @@ -59254,7 +59254,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;114;117;101;99;107;119;97;101;114;116;115; -`,sj=` +`,rj=` 105;110;116;32;108;97;101;110;103;101;32;61;32;54;48; @@ -59269,7 +59269,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;114;101;99;107;101;58;32;34;32;43;32;115;116;114;101;99;107;101;32;43;32;34;32;99;109;34; -`,rj=` +`,oj=` 105;110;116;91;93;32;110;111;116;101;110;32;61;32;123;50;44;32;49;44;32;51;44;32;50;125; @@ -59294,7 +59294,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;110;122;97;104;108;58;32;34;32;43;32;110;111;116;101;110;46;108;101;110;103;116;104; -`,oj=` +`,lj=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -59369,7 +59369,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; -`,lj=` +`,uj=` 113;117;97;100;114;97;116;40;51;48;41; @@ -59378,7 +59378,7 @@ lösung: vb-wald-loesung.visustruct 113;117;97;100;114;97;116;40;53;48;41; -`,uj=` +`,mj=` 105;110;116;32;105;32;61;32;48; @@ -59433,7 +59433,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; -`,mj=` +`,cj=` 105;110;116;32;105;32;61;32;48; @@ -59449,7 +59449,7 @@ lösung: vb-wald-loesung.visustruct -`,cj=` +`,dj=` 105;110;116;32;105;32;61;32;48; @@ -59472,7 +59472,7 @@ lösung: vb-wald-loesung.visustruct -`,dj=` +`,hj=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -59486,7 +59486,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;49;56;48;41; -`,hj=` +`,gj=` 109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;62;32;50;48;32;124;124;32;109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;60;32;45;50;48; @@ -59502,7 +59502,7 @@ lösung: vb-wald-loesung.visustruct -`,gj=` +`,pj=` 105;110;116;32;105;32;61;32;48; @@ -59554,7 +59554,7 @@ lösung: vb-wald-loesung.visustruct -`,pj=` +`,fj=` 105;110;116;32;105;32;61;32;49; @@ -59570,7 +59570,7 @@ lösung: vb-wald-loesung.visustruct -`,fj=` +`,xj=` 33;109;98;111;116;46;105;115;66;117;116;116;111;110;65;40;41; @@ -59584,7 +59584,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;51;48;41; -`,xj=` +`,bj=` 109;98;111;116;46;112;108;97;121;84;111;110;101;40;50;54;50;44;32;51;48;48;41; @@ -59602,7 +59602,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;51;57;50;44;32;51;48;48;41; -`,bj=` +`,yj=` 105;110;116;32;105;32;61;32;48; @@ -59624,7 +59624,7 @@ lösung: vb-wald-loesung.visustruct -`,yj=` +`,vj=` 105;110;116;32;108;105;110;107;115;32;61;32;57;57; @@ -59656,7 +59656,7 @@ lösung: vb-wald-loesung.visustruct -`,vj=` +`,wj=` 105;110;116;32;115;101;105;116;101;32;61;32;51;48; @@ -59675,7 +59675,7 @@ lösung: vb-wald-loesung.visustruct -`,wj=` +`,zj=` 105;110;116;32;105;32;61;32;48; @@ -59708,7 +59708,7 @@ lösung: vb-wald-loesung.visustruct -`,zj=` +`,Ij=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -59747,7 +59747,7 @@ lösung: vb-wald-loesung.visustruct -`,Ij=` +`,kj=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;50;48; @@ -59763,7 +59763,7 @@ lösung: vb-wald-loesung.visustruct -`,kj=` +`,Sj=` 109;98;111;116;46;114;101;115;101;116;84;105;109;101;114;40;41; @@ -59783,7 +59783,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,Sj=` +`,_j=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;118;111;114;110;97;109;101;32;34;86;111;114;110;97;109;101;34; @@ -59795,7 +59795,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;118;111;114;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;110;97;99;104;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,_j=` +`,Tj=` 83;116;114;105;110;103;32;119;111;114;116;32;61;32;34;90;105;101;103;101;110;98;111;99;107;34; @@ -59834,7 +59834,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;116;101;120;116; -`,Tj=` +`,Oj=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;116;32;34;87;111;114;116;32;101;105;110;103;101;98;101;110;34; @@ -59856,7 +59856,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;114;117;101;99;107;119;97;101;114;116;115; -`,Oj=` +`,Aj=` 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;34;76;117;100;119;105;103;59;71;101;105;223;98;111;99;107;59;55;34; @@ -59875,7 +59875,7 @@ lösung: vb-wald-loesung.visustruct -`,Aj=` +`,Pj=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;115;97;116;122;32;34;83;97;116;122;32;101;105;110;103;101;98;101;110;34; @@ -59887,7 +59887,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;246;114;116;101;114;58;32;34;32;43;32;119;111;101;114;116;101;114;46;108;101;110;103;116;104; -`,Pj=` +`,jj=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;116;32;34;87;111;114;116;32;101;105;110;103;101;98;101;110;34; @@ -59919,7 +59919,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;110;122;97;104;108;32;101;58;32;34;32;43;32;97;110;122;97;104;108; -`,jj=` +`,Cj=` 83;116;114;105;110;103;32;119;111;114;116;32;61;32;34;71;101;105;223;98;111;99;107;34; @@ -59943,14 +59943,14 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;119;111;114;116;46;116;111;85;112;112;101;114;67;97;115;101;40;41; -`,Cj=`// Labyrinth mit Ausgängen (nach Kara): jede Wandreihe hat genau eine Lücke, immer weiter rechts. Ein Zeichen = 30 cm. +`,Bj=`// Labyrinth mit Ausgängen (nach Kara): jede Wandreihe hat genau eine Lücke, immer weiter rechts. Ein Zeichen = 30 cm. raster: 3 .......Z #####.## ........ ##.##### >....... -`,Bj=`// Labyrinth mit Ausgängen, drei Reihen. Ein Zeichen = 30 cm. +`,Dj=`// Labyrinth mit Ausgängen, drei Reihen. Ein Zeichen = 30 cm. raster: 3 ........Z ######.## @@ -59959,20 +59959,20 @@ raster: 3 ......... .######## >........ -`,Dj=`// Um die Ecke (Sequenz im Kurs, Lektion 5): ein Zeichen = 30 cm. +`,Zj=`// Um die Ecke (Sequenz im Kurs, Lektion 5): ein Zeichen = 30 cm. raster: 3 Z.... ###.. ..... ..### ^.... -`,Zj=`// Fahre bis Rot: kurzer Weg +`,Mj=`// Fahre bis Rot: kurzer Weg ..... ..r.. ..... ..... ..^.. -`,Mj=`// Fahre bis Rot: erst kommt ein grünes Feld +`,Lj=`// Fahre bis Rot: erst kommt ein grünes Feld ..... ..r.. ..... @@ -59981,21 +59981,21 @@ Z.... ..... ..... ..^.. -`,Lj=`// Bis Blau, bei Grün piepen +`,Wj=`// Bis Blau, bei Grün piepen ..... ..b.. ..... ..g.. ..... ..^.. -`,Wj=`// Bis Blau, ohne grünes Feld +`,Ej=`// Bis Blau, ohne grünes Feld ..... ..b.. ..... ..... ..... ..^.. -`,Ej=`// Hindernis ausweichen: ein Klotz im Weg, das rote Feld liegt dahinter. +`,Nj=`// Hindernis ausweichen: ein Klotz im Weg, das rote Feld liegt dahinter. ......... .....r... .....o... @@ -60006,7 +60006,7 @@ Z.... ......... ......... ..^...... -`,Nj=`// Hindernis ausweichen: zwei Klötze im Weg. +`,Fj=`// Hindernis ausweichen: zwei Klötze im Weg. ......... .......r. .......o. @@ -60021,7 +60021,7 @@ Z.... ......... ......... .^....... -`,Fj=`// Labyrinth: Gänge 30 cm breit, Wände 10 cm dick. Ziel oben links. +`,Jj=`// Labyrinth: Gänge 30 cm breit, Wände 10 cm dick. Ziel oben links. ........... .Z......... ........... @@ -60033,7 +60033,7 @@ Z.... ........... .........<. ........... -`,Jj=`// Labyrinth: Gänge 30 cm breit, Wände 10 cm dick. Ziel oben rechts. +`,Rj=`// Labyrinth: Gänge 30 cm breit, Wände 10 cm dick. Ziel oben rechts. ........... .........Z. ........... @@ -60045,7 +60045,7 @@ Z.... ........... .>......... ........... -`,Rj=`// Linienfolger: Die Linie biegt nach rechts ab und endet vor der Wand. +`,Gj=`// Linienfolger: Die Linie biegt nach rechts ab und endet vor der Wand. ######### ......... ......... @@ -60060,7 +60060,7 @@ Z.... ......... ..^...... linie: 2,12 2,8 4,5 4,0.6 -`,Gj=`// Linienfolger: Die Linie biegt nach links ab und endet vor der Wand. +`,Hj=`// Linienfolger: Die Linie biegt nach links ab und endet vor der Wand. ######### ......... ......... @@ -60075,7 +60075,7 @@ linie: 2,12 2,8 4,5 4,0.6 ......... ......^.. linie: 6,12 6,8 4,5 4,0.6 -`,Hj=`// Linienfolger mit Stopp: Am Ende der Linie liegt ein rotes Feld. +`,Vj=`// Linienfolger mit Stopp: Am Ende der Linie liegt ein rotes Feld. ......... .....r... .....o... @@ -60089,7 +60089,7 @@ linie: 6,12 6,8 4,5 4,0.6 ......... ..^...... linie: 2,11 2,8 5,4 5,1.5 -`,Vj=`// Linienfolger mit Stopp: Die Linie schlängelt sich zum roten Feld. +`,Qj=`// Linienfolger mit Stopp: Die Linie schlängelt sich zum roten Feld. ........... ...r....... ...o....... @@ -60105,7 +60105,7 @@ linie: 2,11 2,8 5,4 5,1.5 ........... .......^... linie: 7,13 7,10 5,8 5,7 3,5 3,1.5 -`,Qj=`// Einparken: rechts parken Autos (Klötze), die blaue Markierung zeigt die Lücke. +`,qj=`// Einparken: rechts parken Autos (Klötze), die blaue Markierung zeigt die Lücke. #....#### #....#### #....#### @@ -60118,7 +60118,7 @@ linie: 7,13 7,10 5,8 5,7 3,5 3,1.5 #....#### #....#### #..^.#### -`,qj=`// Einparken: Die Lücke liegt weiter vorn. +`,Uj=`// Einparken: Die Lücke liegt weiter vorn. #....#### #..b....# #.....o.# @@ -60131,14 +60131,14 @@ linie: 7,13 7,10 5,8 5,7 3,5 3,1.5 #....#### #....#### #..^.#### -`,Uj=`// Bis zur Linie: der schwarze Rand ist nah +`,$j=`// Bis zur Linie: der schwarze Rand ist nah ..... ===== ..... ..... ..^.. ..... -`,$j=`// Bis zur Linie: der schwarze Rand ist weiter weg +`,Yj=`// Bis zur Linie: der schwarze Rand ist weiter weg ..... ===== ..... @@ -60148,17 +60148,17 @@ linie: 7,13 7,10 5,8 5,7 3,5 3,1.5 ..... ..^.. ..... -`,Yj=`// Slalom: ein Zeichen = 30 cm. Vier Pylonen, abwechselnd oben und unten herum, Ziel am Ende. +`,Xj=`// Slalom: ein Zeichen = 30 cm. Vier Pylonen, abwechselnd oben und unten herum, Ziel am Ende. raster: 3 ......... >#.#.#.#Z ......... -`,Xj=`// Tunnelsucher (nach Kara): Halt im ersten Feld mit Wand links UND rechts (hellgrün). Ein Zeichen = 30 cm. +`,Kj=`// Tunnelsucher (nach Kara): Halt im ersten Feld mit Wand links UND rechts (hellgrün). Ein Zeichen = 30 cm. raster: 3 ..#..###. >....o... ....##### -`,Kj=`// Tunnelsucher, nach oben. Ein Zeichen = 30 cm. +`,eC=`// Tunnelsucher, nach oben. Ein Zeichen = 30 cm. raster: 3 .#.#. .#o#. @@ -60166,12 +60166,12 @@ raster: 3 .#... ..... ..^.. -`,eC=`// Kleeblatt im Wald (nach Kara): Bäume liegen auf dem Weg zum Ziel, nie zwei nebeneinander. Ein Zeichen = 30 cm. +`,tC=`// Kleeblatt im Wald (nach Kara): Bäume liegen auf dem Weg zum Ziel, nie zwei nebeneinander. Ein Zeichen = 30 cm. raster: 3 .......... >..#.#..#Z .......... -`,tC=`// Kleeblatt im Wald, nach oben. Ein Zeichen = 30 cm. +`,nC=`// Kleeblatt im Wald, nach oben. Ein Zeichen = 30 cm. raster: 3 .Z. .#. @@ -60180,7 +60180,7 @@ raster: 3 ... ... .^. -`,nC=`// Wand vorn? Vor dem mBot2 ist viel Platz. +`,iC=`// Wand vorn? Vor dem mBot2 ist viel Platz. ##### ..... ..... @@ -60190,14 +60190,14 @@ raster: 3 ..... ..^.. ..... -`,iC=`// Bis zur Wand: kurzer Weg +`,aC=`// Bis zur Wand: kurzer Weg ##### ..... ..Z.. ..... ..... ..^.. -`,aC=`// Bis zur Wand: langer Weg +`,sC=`// Bis zur Wand: langer Weg ##### ..... ..Z.. @@ -60213,7 +60213,7 @@ raster: 3 ..... ..... ..^.. -`,sC=`// Bis zur Wand: mittlerer Weg +`,rC=`// Bis zur Wand: mittlerer Weg ##### ..... ..Z.. @@ -60224,26 +60224,26 @@ raster: 3 ..... ..... ..^.. -`,rC=`// Wand vorn? Die Wand steht direkt vor dem mBot2. +`,oC=`// Wand vorn? Die Wand steht direkt vor dem mBot2. ##### ..... ..^.. ..... -`,oC=`// Zwei Sekunden mit halber Kraft: Wo bleibt er stehen? +`,lC=`// Zwei Sekunden mit halber Kraft: Wo bleibt er stehen? ..... ..... ..... ..o.. ..... ..^.. -`,lC=`// Fahre bis zum Ziel: kurzer Weg, keine Wand +`,uC=`// Fahre bis zum Ziel: kurzer Weg, keine Wand ..... ..Z.. ..... ..... ..^.. ..... -`,uC=`// Fahre bis zum Ziel: langer Weg, keine Wand +`,mC=`// Fahre bis zum Ziel: langer Weg, keine Wand ..... ..Z.. ..... @@ -60256,37 +60256,37 @@ raster: 3 ..... ..^.. ..... -`,mC=""+new URL("aufgabe-mehrwertsteuer-C-TFTrWz.svg",import.meta.url).href,cC=""+new URL("ben-shneiderman-Cev5hrqS.jpg",import.meta.url).href,dC=""+new URL("caesar-ascii-Bix93F5i.svg",import.meta.url).href,hC=""+new URL("caesar-scheibe-CMRPZI6Y.svg",import.meta.url).href,gC=""+new URL("caesar-verschiebung-DIR-lDbs.svg",import.meta.url).href,pC=""+new URL("aufgabe-mehrwertsteuer-CnrZ00ny.svg",import.meta.url).href,fC=""+new URL("kino-saal-C8zaJk4X.svg",import.meta.url).href,xC=""+new URL("kino-schleifen-D7sfo9iK.svg",import.meta.url).href,bC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5TdGFydDwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iNzYiPlB1dCBhIGN1cCBvbiB0aGUgdGFibGU8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjEzMyI+U3VnYXIgd2FudGVkPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTk0Ij5BZGQgc3VnYXI8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI4NSI+VGVhIHN0aWxsIHRvbyBob3Q/PC90ZXh0PgogICAgPHRleHQgeD0iMzI3LjUiIHk9IjI4NSI+V2FpdCAxIG1pbnV0ZTwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5EcmluayB0aGUgdGVhPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSIzOTUiPkVuZDwvdGV4dD4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZm9udC13ZWlnaHQ9IjYwMCI+CiAgICA8dGV4dCB4PSIxNTYiIHk9IjE2OCIgZmlsbD0iIzI0OGEzZCI+eWVzPC90ZXh0PgogICAgPHRleHQgeD0iMjQyIiB5PSIxMjIiIGZpbGw9IiNkNzAwMTUiPm5vPC90ZXh0PgogICAgPHRleHQgeD0iMjQwIiB5PSIyNzQiIGZpbGw9IiMyNDhhM2QiPnllczwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMzIwIiBmaWxsPSIjZDcwMDE1Ij5ubzwvdGV4dD4KICA8L2c+CiAgPCEtLSBMZWdlbmRlIC0tPgogIDxsaW5lIHgxPSIxMCIgeTE9IjQxOCIgeDI9IjM5MCIgeTI9IjQxOCIgc3Ryb2tlPSIjZDFkMWQ2Ii8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cmVjdCB4PSI0MCIgeT0iNDMwIiB3aWR0aD0iMzYiIGhlaWdodD0iMTgiIHJ4PSI5IiBmaWxsPSIjZDFmMmQ5Ii8+CiAgICA8cmVjdCB4PSIyMjAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8cGF0aCBkPSJNNTggNDU4IEw3NiA0NjkgTDU4IDQ4MCBMNDAgNDY5IFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxwYXRoIGQ9Ik0yMjYgNDYwIEwyNTYgNDYwIEwyNTAgNDc4IEwyMjAgNDc4IFoiIGZpbGw9IiNmMmU2ZmYiLz4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZmlsbD0iIzNhM2EzYyI+CiAgICA8dGV4dCB4PSI4NiIgeT0iNDQzIj5TdGFydCBvciBlbmQ8L3RleHQ+CiAgICA8dGV4dCB4PSIyNjYiIHk9IjQ0MyI+U3RhdGVtZW50PC90ZXh0PgogICAgPHRleHQgeD0iODYiIHk9IjQ3MyI+RGVjaXNpb248L3RleHQ+CiAgICA8dGV4dCB4PSIyNjYiIHk9IjQ3MyI+SW5wdXQgb3Igb3V0cHV0PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",yC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V2hlcmUgZG9lcyB0aGUgZWxlbWVudCBsYW5kPzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij50b3AgaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIxMTUiIHk9Ijk3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj5ib3R0b20gaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+aW4gZnJvbnQ8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YWZ0ZXI8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iMTMyIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjQwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iMTU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2Ij7DuDwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjE1NyI+4oaSIDx0c3BhbiBmb250LXdlaWdodD0iNjAwIj5yZXBsYWNlczwvdHNwYW4+IGl0PC90ZXh0Pgo8L3N2Zz4K",vC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWdlID0gMTQ8L3RleHQ+CiAgPHBhdGggZD0iTTEzMCA3MCBMMTcwIDUwIEwzMDAgNTAgTDI2MCA3MCBaIiBmaWxsPSIjYzk4YTNjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE4MCIgeT0iMzQiIHdpZHRoPSI0NCIgaGVpZ2h0PSI1MCIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMDIiIHk9IjYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iNzAwIj4xNDwvdGV4dD4KICA8cmVjdCB4PSIxMzAiIHk9IjcwIiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5Yjg3MiIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cGF0aCBkPSJNMjYwIDcwIEwzMDAgNTAgTDMwMCAxNTAgTDI2MCAxNzAgWiIgZmlsbD0iI2Q0OWE0YyIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cmVjdCB4PSIxNTAiIHk9IjEwMCIgd2lkdGg9IjkwIiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjOGE1YTFmIi8+CiAgPHRleHQgeD0iMTk1IiB5PSIxMjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmFnZTwvdGV4dD4KICA8cmVjdCB4PSIxMzgiIHk9IjE0MiIgd2lkdGg9IjM0IiBoZWlnaHQ9IjIwIiByeD0iMTAiIGZpbGw9IiMwMDdhZmYiLz4KICA8dGV4dCB4PSIxNTUiIHk9IjE1NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMiIgZmlsbD0iI2ZmZmZmZiIgZm9udC13ZWlnaHQ9IjYwMCI+aW50PC90ZXh0PgogIDxnIHN0cm9rZT0iIzZlNmU3MyI+CiAgICA8bGluZSB4MT0iMzEwIiB5MT0iNDgiIHgyPSIyMjYiIHkyPSI1MiIvPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjExNSIgeDI9IjI0MiIgeTI9IjExNSIvPgogICAgPGxpbmUgeDE9IjgwIiB5MT0iMTUyIiB4Mj0iMTM0IiB5Mj0iMTUyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjMxNiIgeT0iNTIiPlZhbHVlPC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0YSB0eXBlPC90ZXh0PgogIDx0ZXh0IHg9IjIwMCIgeT0iMTk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgbmFtZSBnZXRzIHlvdSB0byB0aGUgdmFsdWUuPC90ZXh0Pgo8L3N2Zz4K",wC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9pbnRzPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCB3b3JrIG91dCB0aGUgcmlnaHQ6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIHN0b3JlIHRoZSByZXN1bHQgb24gdGhlIGxlZnQ8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzIGJlZm9yZTogPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiPjEwPC90c3Bhbj4gICDihpIgICBwb2ludHMgYWZ0ZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",zC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjYwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjYwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+bGVmdDwvdGV4dD4KICA8dGV4dCB4PSI3NSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5qdWljZTwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+dGVtcDwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+ZW1wdHk8L3RleHQ+CiAgPHRleHQgeD0iMzI1IiB5PSIyMDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnJpZ2h0PC90ZXh0PgogIDx0ZXh0IHg9IjMyNSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53YXRlcjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxwYXRoIGQ9Ik04OCAxMDQgQzExMCA3MCwgMTYwIDcwLCAxODYgMTA0Ii8+CiAgICA8cGF0aCBkPSJNMzE4IDEwNCBDMjcwIDE1LCAxMzAgMTUsIDgyIDEwNCIvPgogICAgPHBhdGggZD0iTTIxNCAxMDQgQzI0MCA3MCwgMjkwIDcwLCAzMTIgMTA0Ii8+CiAgPC9nPgogIDxnIGZvbnQtd2VpZ2h0PSI3MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPGNpcmNsZSBjeD0iMTM3IiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIxMzciIHk9Ijg1Ij4xPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjAwIiBjeT0iMzgiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyMDAiIHk9IjQzIj4yPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjYzIiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyNjMiIHk9Ijg1Ij4zPC90ZXh0PgogIDwvZz4KICA8ZyB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMiI+CiAgICA8dGV4dCB4PSI3MCIgeT0iMjQ3Ij4xOiB0ZW1wID0gbGVmdDwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMjQ3Ij4yOiBsZWZ0ID0gcmlnaHQ8L3RleHQ+CiAgICA8dGV4dCB4PSIzMzAiIHk9IjI0NyI+MzogcmlnaHQgPSB0ZW1wPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",IC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dmFsaWQ8L3RleHQ+CiAgPHRleHQgeD0iNDAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnZhbGlkPC90ZXh0Pjx0ZXh0IHg9IjM2MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludmFsaWQ8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPmdyYWRlICZndDs9IDEgJmFtcDsmYW1wOyBncmFkZSAmbHQ7PSA2PC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIxNDIiIGZpbGw9IiNiOTFjMWMiPmdyYWRlICZsdDsgMSB8fCBncmFkZSAmZ3Q7IDY8L3RleHQ+CiAgPC9nPgo8L3N2Zz4K",kC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Ib3cgdGhlIHdoaWxlIGxvb3AgcnVuczwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjQ0IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iMjAiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI2OSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGNoZWNrIHRoZSBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgcnVuIHRoZSBpbnNpZGU8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5iYWNrPC90ZXh0PgogIDx0ZXh0IHg9IjM4IiB5PSIxMjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPnRvIHRoZSB0b3A8L3RleHQ+CiAgPHRleHQgeD0iMzQ4IiB5PSIxMzQiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmZhbHNlPC90ZXh0PgogIDx0ZXh0IHg9IjI3NiIgeT0iMjA1IiB0ZXh0LWFuY2hvcj0iZW5kIj5jb250aW51ZSBiZWxvdyB0aGUgbG9vcDwvdGV4dD4KPC9zdmc+Cg==",SC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHJlLXRlc3QgKHdoaWxlKTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5wb3N0LXRlc3QgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBpbnNpZGU8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGluc2lkZTwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgY29uZGl0aW9uPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5JZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlIGF0IG9uY2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj50aGUgaW5zaWRlIHJ1bnMgPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm5ldmVyPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgaW5zaWRlIGFsd2F5cyBydW5zPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj48dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+YXQgbGVhc3Qgb25jZTwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",_C="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIFN0YXJ0IDx0c3BhbiBmaWxsPSIjNmU2ZTczIj4ob25seSBvbmNlKTwvdHNwYW4+PC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iNzYiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzQiIHJ4PSIxNyIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgY2hlY2sgdGhlIGNvbmRpdGlvbjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjEzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIxNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoiBydW4gdGhlIGluc2lkZTwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjIwMCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIyMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoyBzdGVwLCBlLmcuIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+YmFjazwvdGV4dD4KICA8dGV4dCB4PSI0OCIgeT0iMTc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj50byDikaE8L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSI4NCIgZmlsbD0iI2I5MWMxYyIgZm9udC13ZWlnaHQ9IjYwMCI+ZmFsc2U8L3RleHQ+CiAgPHRleHQgeD0iMzM2IiB5PSI5OCI+ZG9uZTwvdGV4dD4KPC9zdmc+Cg==",TC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gbnVtYmVycyA9IHsyLCA0LCA2LCA4LCAxMH08L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjU0IiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5JbmRleDwvdGV4dD4KICA8dGV4dCB4PSI5MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjA8L3RleHQ+PHJlY3QgeD0iNjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iOTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj4yPC90ZXh0PgogIDx0ZXh0IHg9IjE1MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjE8L3RleHQ+PHJlY3QgeD0iMTIwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjE1MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjQ8L3RleHQ+CiAgPHRleHQgeD0iMjEwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MjwvdGV4dD48cmVjdCB4PSIxODAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjEwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NjwvdGV4dD4KICA8dGV4dCB4PSIyNzAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4zPC90ZXh0PjxyZWN0IHg9IjI0MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyNzAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj44PC90ZXh0PgogIDx0ZXh0IHg9IjMzMCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjQ8L3RleHQ+PHJlY3QgeD0iMzAwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjMzMCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjEwPC90ZXh0PgogIDx0ZXh0IHg9IjIwIiB5PSI5MCIgZmlsbD0iIzZlNmU3MyIgZm9udC1zaXplPSIxMiI+VmFsdWU8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+PGxpbmUgeDE9IjkwIiB5MT0iMTQwIiB4Mj0iOTAiIHkyPSIxMTIiLz48bGluZSB4MT0iMzMwIiB5MT0iMTQwIiB4Mj0iMzMwIiB5Mj0iMTEyIi8+PC9nPgogIDxnIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjEzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dGV4dCB4PSI5MCIgeT0iMTU2Ij5udW1iZXJzWzBdIGlzIDI8L3RleHQ+PHRleHQgeD0iMzMwIiB5PSIxNTYiPm51bWJlcnNbNF0gaXMgMTA8L3RleHQ+PC9nPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTgyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj41IHNsb3RzLCBjb3VudGluZyBzdGFydHMgYXQgMDogdGhlIGxhc3QgaW5kZXggaXMgNC48L3RleHQ+Cjwvc3ZnPgo=",OC=""+new URL("mvc-klick-BIA_bYzu.svg",import.meta.url).href,AC=""+new URL("ss-binaere-suche-D02W1TH_.svg",import.meta.url).href,PC=""+new URL("ss-bubblesort-CmKEoNfO.svg",import.meta.url).href,jC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5Mb29raW5nIGZvciB0aGUgOS4gVGhlIGNhcmRzIGFyZSBtaXhlZCB1cC48L3RleHQ+CjxnPjxyZWN0IHg9IjE0IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIzNC4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjZGMyNjI2Ij43PC90ZXh0Pjx0ZXh0IHg9IjM0LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjZGMyNjI2Ij7imaU8L3RleHQ+PC9nPgo8dGV4dCB4PSIzNC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMzQuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4xLjwvdGV4dD4KPGc+PHJlY3QgeD0iNjIiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjgyLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjM8L3RleHQ+PHRleHQgeD0iODIuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZoDwvdGV4dD48L2c+Cjx0ZXh0IHg9IjgyLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSI4Mi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjIuPC90ZXh0Pgo8Zz48cmVjdCB4PSIxMTAiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjEzMC4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjZGMyNjI2Ij4xMDwvdGV4dD48dGV4dCB4PSIxMzAuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpjwvdGV4dD48L2c+Cjx0ZXh0IHg9IjEzMC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTMwLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+My48L3RleHQ+CjxnPjxyZWN0IHg9IjE1OCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTc4LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjU8L3RleHQ+PHRleHQgeD0iMTc4LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaM8L3RleHQ+PC9nPgo8dGV4dCB4PSIxNzguMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjQuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyMDYiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMyIvPjx0ZXh0IHg9IjIyNi4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjMWMxYzFlIj45PC90ZXh0Pjx0ZXh0IHg9IjIyNi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iMjI2LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iIzE1ODAzZCI+4pyTPC90ZXh0Pgo8dGV4dCB4PSIyMjYuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj41LjwvdGV4dD4KPGc+PHJlY3QgeD0iMjU0IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIyNTgiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjMwMiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzA2IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8Zz48cmVjdCB4PSIzNTAiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjM1NCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPHRleHQgeD0iMTQiIHk9IjE2OCIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzZlNmU3MyI+VHVybiB0aGVtIG92ZXIgZnJvbSBsZWZ0IHRvIHJpZ2h0OjwvdGV4dD48dGV4dCB4PSIxNCIgeT0iMTg4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5BZnRlciA1IGNvbXBhcmlzb25zIHRoZSA5IGlzIGZvdW5kLjwvdGV4dD4KPC9zdmc+Cg==",CC=""+new URL("ss-vergleiche-UczNldcC.svg",import.meta.url).href,BC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPkNhbGwgYnkgdmFsdWU6IGEgY29weTwvdGV4dD4KPHJlY3QgeD0iMTAiIHk9IjM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9Ijg2IiByeD0iOCIgZmlsbD0iI2VmZjZmZiIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyMCIgeT0iNTgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPk1haW4gcHJvZ3JhbTwvdGV4dD4KPHRleHQgeD0iMTYiIHk9Ijk4IiBmb250LXNpemU9IjEyIj5udW1iZXI8L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+ZG91YmxlSXQ8L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iOTgiPng8L3RleHQ+CjxyZWN0IHg9IjI4MCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMCIgcng9IjQiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8dGV4dCB4PSIzMjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dHNwYW4gZmlsbD0iIzZlNmU3MyIgdGV4dC1kZWNvcmF0aW9uPSJsaW5lLXRocm91Z2giPjU8L3RzcGFuPiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPjwvdGV4dD4KPGxpbmUgeDE9IjEyOCIgeTE9IjkzIiB4Mj0iMjQ4IiB5Mj0iOTMiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIgbWFya2VyLWVuZD0idXJsKCNrKSIvPgo8dGV4dCB4PSIyMTAiIHk9Ijg0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jb3B5PC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iMTUwIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj54IGJlY29tZXMgMTAsIGJ1dCBudW1iZXIgc3RheXMgNS48L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNjgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPkxpa2UgYSBwaG90b2NvcHk6IHdyaXRpbmcgb24gdGhlIGNvcHk8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxODYiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPmRvZXMgbm90IGNoYW5nZSB0aGUgb3JpZ2luYWwuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5DYWxsIGJ5IHJlZmVyZW5jZTogdGhlIHNhbWUgYXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPk1haW4gcHJvZ3JhbTwvdGV4dD4KPHRleHQgeD0iMjAiIHk9IjMwMCI+cm93PC90ZXh0Pgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiMxZDRlZDgiLz4KPHJlY3QgeD0iMjUwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZmZmN2VkIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI2MCIgeT0iMjcyIiBmb250LXNpemU9IjEzIiBmaWxsPSIjYjQ1MzA5Ij5jbGVhcjwvdGV4dD4KPHRleHQgeD0iMjYwIiB5PSIzMDAiPnNlYXRzPC90ZXh0Pgo8Y2lyY2xlIGN4PSIzOTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiNiNDUzMDkiLz4KPHBhdGggZD0iTTE1MCAzMDAgTDE1MCAzNDAgTDE0MCAzNTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjYikiLz4KPHBhdGggZD0iTTM5MCAzMDAgTDM5MCAzNDAgTDMyMiAzNTQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjbykiLz4KPHJlY3QgeD0iOTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMTUwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjIxMCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyNzAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMTIwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxODAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjI0MCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMzAwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDE2IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5UaGVyZSBpcyBvbmx5IG9uZSBhcnJheS4gV2hhdCBjbGVhciBjaGFuZ2VzIHRocm91Z2ggc2VhdHMsPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDM0IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj50aGUgbWFpbiBwcm9ncmFtIHNlZXMgdW5kZXIgcm93LjwvdGV4dD4KPC9zdmc+Cg==",DC=""+new URL("zk-zeichen-CgUEhNoK.svg",import.meta.url).href,ZC=""+new URL("ike-nassi-D2w47gvX.jpg",import.meta.url).href,MC=""+new URL("kino-saal-CYMOok4_.svg",import.meta.url).href,LC=""+new URL("kino-schleifen-DrTQV7dq.svg",import.meta.url).href,WC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5TdGFydDwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iNzYiPlRhc3NlIGF1ZiBkZW4gVGlzY2ggc3RlbGxlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTMzIj5adWNrZXIgZ2V3w7xuc2NodD88L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjE5NCI+WnVja2VyIGhpbmVpbmdlYmVuPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSIyODUiPlRlZSBub2NoIHp1IGhlacOfPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjMyNy41IiB5PSIyODUiPjEgTWludXRlIHdhcnRlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5UZWUgdHJpbmtlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzk1Ij5FbmRlPC90ZXh0PgogIDwvZz4KICA8ZyBmb250LXNpemU9IjEyIiBmb250LXdlaWdodD0iNjAwIj4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMTY4IiBmaWxsPSIjMjQ4YTNkIj5qYTwvdGV4dD4KICAgIDx0ZXh0IHg9IjI0MiIgeT0iMTIyIiBmaWxsPSIjZDcwMDE1Ij5uZWluPC90ZXh0PgogICAgPHRleHQgeD0iMjQwIiB5PSIyNzQiIGZpbGw9IiMyNDhhM2QiPmphPC90ZXh0PgogICAgPHRleHQgeD0iMTU2IiB5PSIzMjAiIGZpbGw9IiNkNzAwMTUiPm5laW48L3RleHQ+CiAgPC9nPgogIDwhLS0gTGVnZW5kZSAtLT4KICA8bGluZSB4MT0iMTAiIHkxPSI0MTgiIHgyPSIzOTAiIHkyPSI0MTgiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxnIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiPgogICAgPHJlY3QgeD0iNDAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiByeD0iOSIgZmlsbD0iI2QxZjJkOSIvPgogICAgPHJlY3QgeD0iMjIwIiB5PSI0MzAiIHdpZHRoPSIzNiIgaGVpZ2h0PSIxOCIgZmlsbD0iI2U1ZjBmZiIvPgogICAgPHBhdGggZD0iTTU4IDQ1OCBMNzYgNDY5IEw1OCA0ODAgTDQwIDQ2OSBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8cGF0aCBkPSJNMjI2IDQ2MCBMMjU2IDQ2MCBMMjUwIDQ3OCBMMjIwIDQ3OCBaIiBmaWxsPSIjZjJlNmZmIi8+CiAgPC9nPgogIDxnIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiMzYTNhM2MiPgogICAgPHRleHQgeD0iODYiIHk9IjQ0MyI+U3RhcnQgb2RlciBFbmRlPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NDMiPkFud2Vpc3VuZzwvdGV4dD4KICAgIDx0ZXh0IHg9Ijg2IiB5PSI0NzMiPlZlcnp3ZWlndW5nPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NzMiPkVpbi0gb2RlciBBdXNnYWJlPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",EC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V29oaW4gbGFuZGV0IGRhcyBFbGVtZW50PzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij5vYmVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnVudGVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjIyNCIgeT0iNjIiPuKGkiBrb21tdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGF2b3I8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIga29tbXQgPHRzcGFuIGZvbnQtd2VpZ2h0PSI2MDAiPmRhaGludGVyPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZXJzZXR6dDwvdHNwYW4+IGRlbiBQbGF0emhhbHRlcjwvdGV4dD4KPC9zdmc+Cg==",NC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWx0ZXIgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+YWx0ZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5XZXJ0PC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0ZW50eXA8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPsOcYmVyIGRlbiBOYW1lbiBrb21tc3QgZHUgYW4gZGVuIFdlcnQuPC90ZXh0Pgo8L3N2Zz4K",FC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cHVua3RlPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cHVua3RlICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCByZWNodHMgYXVzcmVjaG5lbjogMTAgKyA1ID0gMTU8L3RleHQ+CiAgPHBhdGggZD0iTTI1MCA4MiBDMjMwIDMwLCA5MCAzMCwgNjQgODQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIyLjUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICA8dGV4dCB4PSIxNjAiIHk9IjM2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIj7ikaEgRXJnZWJuaXMgbGlua3Mgc3BlaWNoZXJuPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSIxNjQiIHdpZHRoPSIzNjAiIGhlaWdodD0iMjYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3Ii8+CiAgPHRleHQgeD0iMjAwIiB5PSIxODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPnB1bmt0ZSB2b3JoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xMDwvdHNwYW4+ICAg4oaSICAgcHVua3RlIG5hY2hoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",JC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjYwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjYwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+bGlua3M8L3RleHQ+CiAgPHRleHQgeD0iNzUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+U2FmdDwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+aGlsZjwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+bGVlcjwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cmVjaHRzPC90ZXh0PgogIDx0ZXh0IHg9IjMyNSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5XYXNzZXI8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8cGF0aCBkPSJNODggMTA0IEMxMTAgNzAsIDE2MCA3MCwgMTg2IDEwNCIvPgogICAgPHBhdGggZD0iTTMxOCAxMDQgQzI3MCAxNSwgMTMwIDE1LCA4MiAxMDQiLz4KICAgIDxwYXRoIGQ9Ik0yMTQgMTA0IEMyNDAgNzAsIDI5MCA3MCwgMzEyIDEwNCIvPgogIDwvZz4KICA8ZyBmb250LXdlaWdodD0iNzAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4KICAgIDxjaXJjbGUgY3g9IjEzNyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMTM3IiB5PSI4NSI+MTwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjIwMCIgY3k9IjM4IiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjAwIiB5PSI0MyI+MjwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjI2MyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjYzIiB5PSI4NSI+MzwvdGV4dD4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTIiPgogICAgPHRleHQgeD0iNzAiIHk9IjI0NyI+MTogaGlsZiA9IGxpbmtzPC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIyNDciPjI6IGxpbmtzID0gcmVjaHRzPC90ZXh0PgogICAgPHRleHQgeD0iMzMwIiB5PSIyNDciPjM6IHJlY2h0cyA9IGhpbGY8L3RleHQ+CiAgPC9nPgo8L3N2Zz4K",RC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+Z8O8bHRpZzwvdGV4dD4KICA8dGV4dCB4PSI0MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPnVuZ8O8bHRpZzwvdGV4dD48dGV4dCB4PSIzNjAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj51bmfDvGx0aWc8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGUgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGUgJmx0Oz0gNjwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RlICZsdDsgMSB8fCBub3RlICZndDsgNjwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",GC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMTkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+CiAgPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIxOTAiIGZpbGw9IiNmZmZmZmYiLz4KICA8cmVjdCB4PSIyMCIgeT0iMTQiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iNjAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmE8L3RleHQ+CiAgPHJlY3QgeD0iMTAwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIxNDAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmI8L3RleHQ+CiAgPHJlY3QgeD0iMTgwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIyMjAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmEgJmFtcDsmYW1wOyBiPC90ZXh0PgogIDxyZWN0IHg9IjI2MCIgeT0iMTQiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzAwLjAiIHk9IjM1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNzAwIj5hIHx8IGI8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzODAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPiFhPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSI0NiIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSI2MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIxMDAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjE0MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIxODAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIyNjAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjMwMC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIzNDAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjM4MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjYwLjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj50cnVlPC90ZXh0PgogIDxyZWN0IHg9IjEwMCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMTQwLjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIj5mYWxzZTwvdGV4dD4KICA8cmVjdCB4PSIxODAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjYwIiB5PSI3OCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzMDAuMCIgeT0iOTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnRydWU8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSI3OCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzODAuMCIgeT0iOTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiPmZhbHNlPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSIxMTAiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iNjAuMCIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIj5mYWxzZTwvdGV4dD4KICA8cmVjdCB4PSIxMDAiIHk9IjExMCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIxNDAuMCIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj50cnVlPC90ZXh0PgogIDxyZWN0IHg9IjE4MCIgeT0iMTEwIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiPmZhbHNlPC90ZXh0PgogIDxyZWN0IHg9IjI2MCIgeT0iMTEwIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjMwMC4wIiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnRydWU8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxMTAiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzgwLjAiIHk9IjEzMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iMTQyIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjYwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMTAwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMTQwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMTgwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMjIwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjYwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzAwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzgwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8bGluZSB4MT0iMTgwIiB5MT0iMTQiIHgyPSIxODAiIHkyPSIxNzQiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIzIi8+Cjwvc3ZnPgo=",HC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5BYmxhdWYgZGVyIFdoaWxlLVNjaGxlaWZlPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iNDQiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSIyMCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjY5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaAgQmVkaW5ndW5nIHByw7xmZW48L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgSW5oYWx0IGF1c2bDvGhyZW48L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53aWVkZXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+bmFjaCBvYmVuPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+d2VpdGVyIHVudGVyIGRlciBTY2hsZWlmZTwvdGV4dD4KPC9zdmc+Cg==",VC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+a29wZmdlc3RldWVydCAoV2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmZ1w59nZXN0ZXVlcnQgKERvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBCZWRpbmd1bmc8L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBJbmhhbHQ8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluaGFsdDwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgQmVkaW5ndW5nPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5Jc3QgZGllIEJlZGluZ3VuZyBnbGVpY2ggZmFsc2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5sw6R1ZnQgZGVyIEluaGFsdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+bmllPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5EZXIgSW5oYWx0IGzDpHVmdCBpbW1lcjwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm1pbmRlc3RlbnMgZWlubWFsPC90c3Bhbj4uPC90ZXh0Pgo8L3N2Zz4K",QC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIFN0YXJ0IDx0c3BhbiBmaWxsPSIjNmU2ZTczIj4obnVyIGVpbm1hbCk8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9Ijc2IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iMTciIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIEJlZGluZ3VuZyBwcsO8ZmVuPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMTM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iNiIgZmlsbD0iI2RiZWFmZSIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGiIEluaGFsdCBhdXNmw7xocmVuPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMjAwIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iNiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjMTU4MDNkIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGjIFNjaHJpdHQsIHouIEIuIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+enVyw7xjazwvdGV4dD4KICA8dGV4dCB4PSI0OCIgeT0iMTc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj56dSDikaE8L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSI4NCIgZmlsbD0iI2I5MWMxYyIgZm9udC13ZWlnaHQ9IjYwMCI+ZmFsc2U8L3RleHQ+CiAgPHRleHQgeD0iMzM2IiB5PSI5OCI+ZmVydGlnPC90ZXh0Pgo8L3N2Zz4K",qC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gemFobGVuID0gezIsIDQsIDYsIDgsIDEwfTwvdGV4dD4KICA8dGV4dCB4PSIyMCIgeT0iNTQiIGZpbGw9IiM2ZTZlNzMiIGZvbnQtc2l6ZT0iMTIiPkluZGV4PC90ZXh0PgogIDx0ZXh0IHg9IjkwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MDwvdGV4dD48cmVjdCB4PSI2MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjI8L3RleHQ+CiAgPHRleHQgeD0iMTUwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MTwvdGV4dD48cmVjdCB4PSIxMjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTUwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NDwvdGV4dD4KICA8dGV4dCB4PSIyMTAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4yPC90ZXh0PjxyZWN0IHg9IjE4MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyMTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj42PC90ZXh0PgogIDx0ZXh0IHg9IjI3MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjM8L3RleHQ+PHJlY3QgeD0iMjQwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjI3MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjg8L3RleHQ+CiAgPHRleHQgeD0iMzMwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+NDwvdGV4dD48cmVjdCB4PSIzMDAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzMwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+MTA8L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjkwIiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5XZXJ0PC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjYSkiPjxsaW5lIHgxPSI5MCIgeTE9IjE0MCIgeDI9IjkwIiB5Mj0iMTEyIi8+PGxpbmUgeDE9IjMzMCIgeTE9IjE0MCIgeDI9IjMzMCIgeTI9IjExMiIvPjwvZz4KICA8ZyBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+PHRleHQgeD0iOTAiIHk9IjE1NiI+emFobGVuWzBdIGlzdCAyPC90ZXh0Pjx0ZXh0IHg9IjMzMCIgeT0iMTU2Ij56YWhsZW5bNF0gaXN0IDEwPC90ZXh0PjwvZz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+NSBGw6RjaGVyLCBnZXrDpGhsdCB3aXJkIGFiIDA6IGRlciBsZXR6dGUgSW5kZXggaXN0IDQuPC90ZXh0Pgo8L3N2Zz4K",UC=""+new URL("mvc-klick-KmFKqxH-.svg",import.meta.url).href,$C=""+new URL("aufgabe-mehrwertsteuer-KUkerRBd.svg",import.meta.url).href,YC=""+new URL("kino-saal-BOvcmdzb.svg",import.meta.url).href,XC=""+new URL("kino-schleifen-Ci9yPnbo.svg",import.meta.url).href,KC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5JbsOtY2lvPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSI3NiI+UMO0ciB1bWEgY2jDoXZlbmEgbmEgbWVzYTwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTMzIj5RdWVyIGHDp8O6Y2FyPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTk0Ij5KdW50YXIgYcOnw7pjYXI8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI4NSI+Q2jDoSBtdWl0byBxdWVudGU/PC90ZXh0PgogICAgPHRleHQgeD0iMzI3LjUiIHk9IjI4NSI+RXNwZXJhciAxIG1pbnV0bzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5CZWJlciBvIGNow6E8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjM5NSI+RmltPC90ZXh0PgogIDwvZz4KICA8ZyBmb250LXNpemU9IjEyIiBmb250LXdlaWdodD0iNjAwIj4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMTY4IiBmaWxsPSIjMjQ4YTNkIj5zaW08L3RleHQ+CiAgICA8dGV4dCB4PSIyNDIiIHk9IjEyMiIgZmlsbD0iI2Q3MDAxNSI+bsOjbzwvdGV4dD4KICAgIDx0ZXh0IHg9IjI0MCIgeT0iMjc0IiBmaWxsPSIjMjQ4YTNkIj5zaW08L3RleHQ+CiAgICA8dGV4dCB4PSIxNTYiIHk9IjMyMCIgZmlsbD0iI2Q3MDAxNSI+bsOjbzwvdGV4dD4KICA8L2c+CiAgPCEtLSBMZWdlbmRlIC0tPgogIDxsaW5lIHgxPSIxMCIgeTE9IjQxOCIgeDI9IjM5MCIgeTI9IjQxOCIgc3Ryb2tlPSIjZDFkMWQ2Ii8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cmVjdCB4PSI0MCIgeT0iNDMwIiB3aWR0aD0iMzYiIGhlaWdodD0iMTgiIHJ4PSI5IiBmaWxsPSIjZDFmMmQ5Ii8+CiAgICA8cmVjdCB4PSIyMjAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8cGF0aCBkPSJNNTggNDU4IEw3NiA0NjkgTDU4IDQ4MCBMNDAgNDY5IFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxwYXRoIGQ9Ik0yMjYgNDYwIEwyNTYgNDYwIEwyNTAgNDc4IEwyMjAgNDc4IFoiIGZpbGw9IiNmMmU2ZmYiLz4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZmlsbD0iIzNhM2EzYyI+CiAgICA8dGV4dCB4PSI4NiIgeT0iNDQzIj5JbsOtY2lvIG91IGZpbTwvdGV4dD4KICAgIDx0ZXh0IHg9IjI2NiIgeT0iNDQzIj5JbnN0cnXDp8OjbzwvdGV4dD4KICAgIDx0ZXh0IHg9Ijg2IiB5PSI0NzMiPkRlY2lzw6NvPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NzMiPkVudHJhZGEgb3Ugc2HDrWRhPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",eB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+T25kZSBmaWNhIG8gZWxlbWVudG8/PC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RiZWFmZSIvPgogIDxyZWN0IHg9IjIwIiB5PSI3NSIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc1IiB4Mj0iMjEwIiB5Mj0iNzUiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLWRhc2hhcnJheT0iNCAzIi8+CiAgPHJlY3QgeD0iMjAiIHk9IjQwIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjcwIiBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iNjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxZDRlZDgiPm1ldGFkZSBkZSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPm1ldGFkZSBkZSBiYWl4bzwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YW50ZXM8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGVwb2lzPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+c3Vic3RpdHVpLW88L3RzcGFuPjwvdGV4dD4KPC9zdmc+Cg==",tB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgaWRhZGUgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+aWRhZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5WYWxvcjwvdGV4dD4KICA8dGV4dCB4PSIzMTYiIHk9IjExOSI+Tm9tZTwvdGV4dD4KICA8dGV4dCB4PSI4IiB5PSIxNTYiPlRpcG8gZGUgZGFkb3M8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPlBlbG8gbm9tZSBjaGVnYXMgYW8gdmFsb3IuPC90ZXh0Pgo8L3N2Zz4K",nB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9udG9zPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCBjYWxjdWxhciBhIGRpcmVpdGE6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIGd1YXJkYXIgbyByZXN1bHRhZG8gw6AgZXNxdWVyZGE8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zIGFudGVzOiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPiAgIOKGkiAgIHBvbnRvcyBkZXBvaXM6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",iB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMzAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMzAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+ZXNxdWVyZGE8L3RleHQ+CiAgPHRleHQgeD0iNzUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+c3VtbzwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+YXV4PC90ZXh0PgogIDx0ZXh0IHg9IjIwMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj52YXppbzwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+ZGlyZWl0YTwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+w6FndWE8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8cGF0aCBkPSJNODggMTA0IEMxMTAgNzAsIDE2MCA3MCwgMTg2IDEwNCIvPgogICAgPHBhdGggZD0iTTMxOCAxMDQgQzI3MCAxNSwgMTMwIDE1LCA4MiAxMDQiLz4KICAgIDxwYXRoIGQ9Ik0yMTQgMTA0IEMyNDAgNzAsIDI5MCA3MCwgMzEyIDEwNCIvPgogIDwvZz4KICA8ZyBmb250LXdlaWdodD0iNzAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4KICAgIDxjaXJjbGUgY3g9IjEzNyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMTM3IiB5PSI4NSI+MTwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjIwMCIgY3k9IjM4IiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjAwIiB5PSI0MyI+MjwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjI2MyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjYzIiB5PSI4NSI+MzwvdGV4dD4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTIiPgogICAgPHRleHQgeD0iMjAwIiB5PSIyNTAiPjE6IGF1eCA9IGVzcXVlcmRhPC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIyNjgiPjI6IGVzcXVlcmRhID0gZGlyZWl0YTwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMjg2Ij4zOiBkaXJlaXRhID0gYXV4PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",aB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzAwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iMTAwIiB5PSI1MCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyNCIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc0IiB4Mj0iMzgwIiB5Mj0iNzQiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPGxpbmUgeDE9IjUwIiB5MT0iNjgiIHgyPSI1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MDwvdGV4dD4KICA8bGluZSB4MT0iMTAwIiB5MT0iNjgiIHgyPSIxMDAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxMDAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4xPC90ZXh0PgogIDxsaW5lIHgxPSIxNTAiIHkxPSI2OCIgeDI9IjE1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjE1MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjI8L3RleHQ+CiAgPGxpbmUgeDE9IjIwMCIgeTE9IjY4IiB4Mj0iMjAwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MzwvdGV4dD4KICA8bGluZSB4MT0iMjUwIiB5MT0iNjgiIHgyPSIyNTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyNTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj40PC90ZXh0PgogIDxsaW5lIHgxPSIzMDAiIHkxPSI2OCIgeDI9IjMwMCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjMwMCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjU8L3RleHQ+CiAgPGxpbmUgeDE9IjM1MCIgeTE9IjY4IiB4Mj0iMzUwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NjwvdGV4dD4KICA8Y2lyY2xlIGN4PSIxMDAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMwMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dsOhbGlkYTwvdGV4dD4KICA8dGV4dCB4PSI1MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludsOhbGlkYTwvdGV4dD48dGV4dCB4PSIzNTAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnbDoWxpZGE8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGEgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGEgJmx0Oz0gNTwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RhICZsdDsgMSB8fCBub3RhICZndDsgNTwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",sB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Db21vIGZ1bmNpb25hIG8gY2ljbG8gd2hpbGU8L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSI0NCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI0MCIgcng9IjIwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iNjkiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCB2ZXJpZmljYXIgYSBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMTI4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iNiIgZmlsbD0iI2RiZWFmZSIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE1MyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIGV4ZWN1dGFyIG8gaW50ZXJpb3I8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj52b2x0YXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+cGFyYSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+Y29udGludWFyIHBvciBiYWl4byBkbyBjaWNsbzwvdGV4dD4KPC9zdmc+Cg==",rB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHLDqS10ZXN0ZSAod2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnDDs3MtdGVzdGUgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjM1IiB5PSIxMjQiIHdpZHRoPSIxMzAiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgaW50ZXJpb3I8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGludGVyaW9yPC90ZXh0PgogIDxyZWN0IHg9IjIzNSIgeT0iMTI0IiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjM2IiByeD0iMTgiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBjb25kacOnw6NvPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5TZSBhIGNvbmRpw6fDo28gZm9yIGxvZ28gZmFsc2EsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5vIGludGVyaW9yIDx0c3BhbiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjMWMxYzFlIj5udW5jYTwvdHNwYW4+IMOpIGV4ZWN1dGFkby48L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSIxOTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPk8gaW50ZXJpb3Igw6kgc2VtcHJlIGV4ZWN1dGFkbzwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPnBlbG8gbWVub3MgdW1hIHZlejwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",oB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluw61jaW8gPHRzcGFuIGZpbGw9IiM2ZTZlNzMiPihzw7MgdW1hIHZleik8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9Ijc2IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iMTciIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIHZlcmlmaWNhciBhIGNvbmRpw6fDo288L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMzgiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzQiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaIgZXhlY3V0YXIgbyBpbnRlcmlvcjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjIwMCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIyMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoyBwYXNzbywgcC4gZXguIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+dm9sdGFyPC90ZXh0PgogIDx0ZXh0IHg9IjQ4IiB5PSIxNzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPmFvIOKRoTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9Ijg0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIzMzYiIHk9Ijk4Ij5maW08L3RleHQ+Cjwvc3ZnPgo=",lB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gbnVtZXJvcyA9IHsyLCA0LCA2LCA4LCAxMH08L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjU0IiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj7DjW5kaWNlPC90ZXh0PgogIDx0ZXh0IHg9IjkwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MDwvdGV4dD48cmVjdCB4PSI2MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjI8L3RleHQ+CiAgPHRleHQgeD0iMTUwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MTwvdGV4dD48cmVjdCB4PSIxMjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTUwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NDwvdGV4dD4KICA8dGV4dCB4PSIyMTAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4yPC90ZXh0PjxyZWN0IHg9IjE4MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyMTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj42PC90ZXh0PgogIDx0ZXh0IHg9IjI3MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjM8L3RleHQ+PHJlY3QgeD0iMjQwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjI3MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjg8L3RleHQ+CiAgPHRleHQgeD0iMzMwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+NDwvdGV4dD48cmVjdCB4PSIzMDAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzMwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+MTA8L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjkwIiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5WYWxvcjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj48bGluZSB4MT0iOTAiIHkxPSIxNDAiIHgyPSI5MCIgeTI9IjExMiIvPjxsaW5lIHgxPSIzMzAiIHkxPSIxNDAiIHgyPSIzMzAiIHkyPSIxMTIiLz48L2c+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjx0ZXh0IHg9IjkwIiB5PSIxNTYiPm51bWVyb3NbMF0gw6kgMjwvdGV4dD48dGV4dCB4PSIzMzAiIHk9IjE1NiI+bnVtZXJvc1s0XSDDqSAxMDwvdGV4dD48L2c+CiAgPHRleHQgeD0iMjAwIiB5PSIxODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPjUgcG9zacOnw7VlcywgY29udGEtc2UgYSBwYXJ0aXIgZGUgMDogbyDDumx0aW1vIMOtbmRpY2Ugw6kgNC48L3RleHQ+Cjwvc3ZnPgo=",uB=""+new URL("mvc-klick-DKonBpbs.svg",import.meta.url).href,mB=""+new URL("schiffe-versenken-iEBDHIxD.svg",import.meta.url).href,cB=""+new URL("ss-binaere-suche-DVVS2SNc.svg",import.meta.url).href,dB=""+new URL("ss-bubblesort-AFDcFDah.svg",import.meta.url).href,hB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5Qcm9jdXJhLXNlIG8gOS4gQXMgY2FydGFzIGVzdMOjbyBiYXJhbGhhZGFzLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjM0LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjc8L3RleHQ+PHRleHQgeD0iMzQuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpTwvdGV4dD48L2c+Cjx0ZXh0IHg9IjM0LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIzNC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjEuPC90ZXh0Pgo8Zz48cmVjdCB4PSI2MiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iODIuMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+MzwvdGV4dD48dGV4dCB4PSI4Mi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iODIuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjgyLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+Mi48L3RleHQ+CjxnPjxyZWN0IHg9IjExMCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTMwLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjEwPC90ZXh0Pjx0ZXh0IHg9IjEzMC4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iI2RjMjYyNiI+4pmmPC90ZXh0PjwvZz4KPHRleHQgeD0iMTMwLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIxMzAuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4zLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTU4IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIxNzguMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+NTwvdGV4dD48dGV4dCB4PSIxNzguMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZozwvdGV4dD48L2c+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTc4LjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+NC48L3RleHQ+CjxnPjxyZWN0IHg9IjIwNiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIzIi8+PHRleHQgeD0iMjI2LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjk8L3RleHQ+PHRleHQgeD0iMjI2LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaA8L3RleHQ+PC9nPgo8dGV4dCB4PSIyMjYuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjMTU4MDNkIj7inJM8L3RleHQ+Cjx0ZXh0IHg9IjIyNi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjUuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyNTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjI1OCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPGc+PHJlY3QgeD0iMzAyIiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIzMDYiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjM1MCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzU0IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8dGV4dCB4PSIxNCIgeT0iMTY4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5WaXJhciBkYSBlc3F1ZXJkYSBwYXJhIGEgZGlyZWl0YTo8L3RleHQ+PHRleHQgeD0iMTQiIHk9IjE4OCIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzZlNmU3MyI+QXDDs3MgNSBjb21wYXJhw6fDtWVzLCBvIDkgw6kgZW5jb250cmFkby48L3RleHQ+Cjwvc3ZnPgo=",gB=""+new URL("ss-vergleiche-DWgkIvLr.svg",import.meta.url).href,pB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPlBhc3NhZ2VtIHBvciB2YWxvcjogdW1hIGPDs3BpYTwvdGV4dD4KPHJlY3QgeD0iMTAiIHk9IjM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9Ijg2IiByeD0iOCIgZmlsbD0iI2VmZjZmZiIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyMCIgeT0iNTgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPlByb2dyYW1hIHByaW5jaXBhbDwvdGV4dD4KPHRleHQgeD0iMTYiIHk9Ijk4IiBmb250LXNpemU9IjEyIj5udW1lcm88L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+ZHVwbGljYXI8L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iOTgiPng8L3RleHQ+CjxyZWN0IHg9IjI4MCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMCIgcng9IjQiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8dGV4dCB4PSIzMjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dHNwYW4gZmlsbD0iIzZlNmU3MyIgdGV4dC1kZWNvcmF0aW9uPSJsaW5lLXRocm91Z2giPjU8L3RzcGFuPiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPjwvdGV4dD4KPGxpbmUgeDE9IjEyOCIgeTE9IjkzIiB4Mj0iMjQ4IiB5Mj0iOTMiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIgbWFya2VyLWVuZD0idXJsKCNrKSIvPgo8dGV4dCB4PSIyMTAiIHk9Ijg0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jw7NwaWE8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNTAiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPnggcGFzc2EgYSAxMCwgbWFzIG51bWVybyBmaWNhIDUuPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iMTY4IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5Db21vIHVtYSBmb3RvY8OzcGlhOiBlc2NyZXZlciBuYSBjw7NwaWE8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxODYiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPm7Do28gYWx0ZXJhIG8gb3JpZ2luYWwuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5QYXNzYWdlbSBwb3IgcmVmZXLDqm5jaWE6IG8gbWVzbW8gYXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPlByb2dyYW1hIHByaW5jaXBhbDwvdGV4dD4KPHRleHQgeD0iMjAiIHk9IjMwMCI+ZmlsYTwvdGV4dD4KPGNpcmNsZSBjeD0iMTUwIiBjeT0iMjk1IiByPSI1IiBmaWxsPSIjMWQ0ZWQ4Ii8+CjxyZWN0IHg9IjI1MCIgeT0iMjUyIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjYyIiByeD0iOCIgZmlsbD0iI2ZmZjdlZCIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyNjAiIHk9IjI3MiIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+bGltcGFyPC90ZXh0Pgo8dGV4dCB4PSIyNjAiIHk9IjMwMCI+bHVnYXJlczwvdGV4dD4KPGNpcmNsZSBjeD0iMzkwIiBjeT0iMjk1IiByPSI1IiBmaWxsPSIjYjQ1MzA5Ii8+CjxwYXRoIGQ9Ik0xNTAgMzAwIEwxNTAgMzQwIEwxNDAgMzUyIiBmaWxsPSJub25lIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41IiBtYXJrZXItZW5kPSJ1cmwoI2IpIi8+CjxwYXRoIGQ9Ik0zOTAgMzAwIEwzOTAgMzQwIEwzMjIgMzU0IiBmaWxsPSJub25lIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41IiBtYXJrZXItZW5kPSJ1cmwoI28pIi8+CjxyZWN0IHg9IjkwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjE1MCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyMTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMjcwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9IjEyMCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMTgwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIyNDAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjMwMCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQxNiIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+U8OzIGjDoSB1bSBhcnJheS4gTyBxdWUgbGltcGFyIGFsdGVyYSBhdHJhdsOpcyBkZSBsdWdhcmVzLDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQzNCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+byBwcm9ncmFtYSBwcmluY2lwYWwgdsOqIGVtIGZpbGEuPC90ZXh0Pgo8L3N2Zz4K",fB=""+new URL("zk-zeichen-8efNmpGx.svg",import.meta.url).href,xB=""+new URL("schiffe-versenken-CXt1SF0S.svg",import.meta.url).href,bB=""+new URL("ss-binaere-suche-CPsLGldq.svg",import.meta.url).href,yB=""+new URL("ss-bubblesort-Dic2ZfaT.svg",import.meta.url).href,vB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5HZXN1Y2h0OiBkaWUgOS4gRGllIEthcnRlbiBzaW5kIGdlbWlzY2h0LjwvdGV4dD4KPGc+PHJlY3QgeD0iMTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjM0LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjc8L3RleHQ+PHRleHQgeD0iMzQuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpTwvdGV4dD48L2c+Cjx0ZXh0IHg9IjM0LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIzNC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjEuPC90ZXh0Pgo8Zz48cmVjdCB4PSI2MiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iODIuMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+MzwvdGV4dD48dGV4dCB4PSI4Mi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iODIuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjgyLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+Mi48L3RleHQ+CjxnPjxyZWN0IHg9IjExMCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTMwLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjEwPC90ZXh0Pjx0ZXh0IHg9IjEzMC4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iI2RjMjYyNiI+4pmmPC90ZXh0PjwvZz4KPHRleHQgeD0iMTMwLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIxMzAuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4zLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTU4IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIxNzguMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+NTwvdGV4dD48dGV4dCB4PSIxNzguMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZozwvdGV4dD48L2c+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTc4LjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+NC48L3RleHQ+CjxnPjxyZWN0IHg9IjIwNiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIzIi8+PHRleHQgeD0iMjI2LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjk8L3RleHQ+PHRleHQgeD0iMjI2LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaA8L3RleHQ+PC9nPgo8dGV4dCB4PSIyMjYuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjMTU4MDNkIj7inJM8L3RleHQ+Cjx0ZXh0IHg9IjIyNi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjUuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyNTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjI1OCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPGc+PHJlY3QgeD0iMzAyIiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIzMDYiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjM1MCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzU0IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8dGV4dCB4PSIxNCIgeT0iMTY4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5Wb24gbGlua3MgbmFjaCByZWNodHMgdW1kcmVoZW46PC90ZXh0Pjx0ZXh0IHg9IjE0IiB5PSIxODgiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiM2ZTZlNzMiPk5hY2ggNSBWZXJnbGVpY2hlbiBpc3QgZGllIDkgZ2VmdW5kZW4uPC90ZXh0Pgo8L3N2Zz4K",wB=""+new URL("ss-vergleiche-DRqzU2TZ.svg",import.meta.url).href,zB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPldlcnTDvGJlcmdhYmU6IGVpbmUgS29waWU8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNlZmY2ZmYiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjAiIHk9IjU4IiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWQ0ZWQ4Ij5IYXVwdHByb2dyYW1tPC90ZXh0Pgo8dGV4dCB4PSIyMCIgeT0iOTgiPnphaGw8L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+dmVyZG9wcGxlPC90ZXh0Pgo8dGV4dCB4PSIyNjAiIHk9Ijk4Ij54PC90ZXh0Pgo8cmVjdCB4PSIyODAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMzIwIiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+PHRzcGFuIGZpbGw9IiM2ZTZlNzMiIHRleHQtZGVjb3JhdGlvbj0ibGluZS10aHJvdWdoIj41PC90c3Bhbj4gPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiPjEwPC90c3Bhbj48L3RleHQ+CjxsaW5lIHgxPSIxMjgiIHkxPSI5MyIgeDI9IjI0OCIgeTI9IjkzIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtZGFzaGFycmF5PSI1IDQiIG1hcmtlci1lbmQ9InVybCgjaykiLz4KPHRleHQgeD0iMjEwIiB5PSI4NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+S29waWU8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNTAiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPnggd2lyZCAxMCwgYWJlciB6YWhsIGJsZWlidCA1LjwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjE2OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+V2llIGJlaSBlaW5lciBGb3Rva29waWU6IFdlciBhdWYgZGVyIEtvcGllIHNjaHJlaWJ0LDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjE4NiIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+w6RuZGVydCBkYXMgT3JpZ2luYWwgbmljaHQuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5SZWZlcmVuesO8YmVyZ2FiZTogZGFzc2VsYmUgQXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPkhhdXB0cHJvZ3JhbW08L3RleHQ+Cjx0ZXh0IHg9IjIwIiB5PSIzMDAiPnJlaWhlPC90ZXh0Pgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiMxZDRlZDgiLz4KPHJlY3QgeD0iMjUwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZmZmN2VkIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI2MCIgeT0iMjcyIiBmb250LXNpemU9IjEzIiBmaWxsPSIjYjQ1MzA5Ij5sZWVyZW48L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iMzAwIj5wbGFldHplPC90ZXh0Pgo8Y2lyY2xlIGN4PSIzOTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiNiNDUzMDkiLz4KPHBhdGggZD0iTTE1MCAzMDAgTDE1MCAzNDAgTDE0MCAzNTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjYikiLz4KPHBhdGggZD0iTTM5MCAzMDAgTDM5MCAzNDAgTDMyMiAzNTQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjbykiLz4KPHJlY3QgeD0iOTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMTUwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjIxMCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyNzAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMTIwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxODAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjI0MCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMzAwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDE2IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5FcyBnaWJ0IG51ciBlaW4gQXJyYXkuIFdhcyBsZWVyZW4gw7xiZXIgcGxhZXR6ZSDDpG5kZXJ0LDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQzNCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+c2llaHQgZGFzIEhhdXB0cHJvZ3JhbW0gdW50ZXIgcmVpaGUuPC90ZXh0Pgo8L3N2Zz4K",IB=""+new URL("zk-zeichen-vYvc3iJg.svg",import.meta.url).href;function kB(i){const e=[];for(const t of i.replace(/\r\n/g,` +`,cC=""+new URL("aufgabe-mehrwertsteuer-C-TFTrWz.svg",import.meta.url).href,dC=""+new URL("ben-shneiderman-Cev5hrqS.jpg",import.meta.url).href,hC=""+new URL("caesar-ascii-Bix93F5i.svg",import.meta.url).href,gC=""+new URL("caesar-scheibe-CMRPZI6Y.svg",import.meta.url).href,pC=""+new URL("caesar-verschiebung-DIR-lDbs.svg",import.meta.url).href,fC=""+new URL("aufgabe-mehrwertsteuer-CnrZ00ny.svg",import.meta.url).href,xC=""+new URL("kino-saal-C8zaJk4X.svg",import.meta.url).href,bC=""+new URL("kino-schleifen-D7sfo9iK.svg",import.meta.url).href,yC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5TdGFydDwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iNzYiPlB1dCBhIGN1cCBvbiB0aGUgdGFibGU8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjEzMyI+U3VnYXIgd2FudGVkPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTk0Ij5BZGQgc3VnYXI8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI4NSI+VGVhIHN0aWxsIHRvbyBob3Q/PC90ZXh0PgogICAgPHRleHQgeD0iMzI3LjUiIHk9IjI4NSI+V2FpdCAxIG1pbnV0ZTwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5EcmluayB0aGUgdGVhPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSIzOTUiPkVuZDwvdGV4dD4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZm9udC13ZWlnaHQ9IjYwMCI+CiAgICA8dGV4dCB4PSIxNTYiIHk9IjE2OCIgZmlsbD0iIzI0OGEzZCI+eWVzPC90ZXh0PgogICAgPHRleHQgeD0iMjQyIiB5PSIxMjIiIGZpbGw9IiNkNzAwMTUiPm5vPC90ZXh0PgogICAgPHRleHQgeD0iMjQwIiB5PSIyNzQiIGZpbGw9IiMyNDhhM2QiPnllczwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMzIwIiBmaWxsPSIjZDcwMDE1Ij5ubzwvdGV4dD4KICA8L2c+CiAgPCEtLSBMZWdlbmRlIC0tPgogIDxsaW5lIHgxPSIxMCIgeTE9IjQxOCIgeDI9IjM5MCIgeTI9IjQxOCIgc3Ryb2tlPSIjZDFkMWQ2Ii8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cmVjdCB4PSI0MCIgeT0iNDMwIiB3aWR0aD0iMzYiIGhlaWdodD0iMTgiIHJ4PSI5IiBmaWxsPSIjZDFmMmQ5Ii8+CiAgICA8cmVjdCB4PSIyMjAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8cGF0aCBkPSJNNTggNDU4IEw3NiA0NjkgTDU4IDQ4MCBMNDAgNDY5IFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxwYXRoIGQ9Ik0yMjYgNDYwIEwyNTYgNDYwIEwyNTAgNDc4IEwyMjAgNDc4IFoiIGZpbGw9IiNmMmU2ZmYiLz4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZmlsbD0iIzNhM2EzYyI+CiAgICA8dGV4dCB4PSI4NiIgeT0iNDQzIj5TdGFydCBvciBlbmQ8L3RleHQ+CiAgICA8dGV4dCB4PSIyNjYiIHk9IjQ0MyI+U3RhdGVtZW50PC90ZXh0PgogICAgPHRleHQgeD0iODYiIHk9IjQ3MyI+RGVjaXNpb248L3RleHQ+CiAgICA8dGV4dCB4PSIyNjYiIHk9IjQ3MyI+SW5wdXQgb3Igb3V0cHV0PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",vC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V2hlcmUgZG9lcyB0aGUgZWxlbWVudCBsYW5kPzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij50b3AgaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIxMTUiIHk9Ijk3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj5ib3R0b20gaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+aW4gZnJvbnQ8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YWZ0ZXI8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iMTMyIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjQwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iMTU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2Ij7DuDwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjE1NyI+4oaSIDx0c3BhbiBmb250LXdlaWdodD0iNjAwIj5yZXBsYWNlczwvdHNwYW4+IGl0PC90ZXh0Pgo8L3N2Zz4K",wC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWdlID0gMTQ8L3RleHQ+CiAgPHBhdGggZD0iTTEzMCA3MCBMMTcwIDUwIEwzMDAgNTAgTDI2MCA3MCBaIiBmaWxsPSIjYzk4YTNjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE4MCIgeT0iMzQiIHdpZHRoPSI0NCIgaGVpZ2h0PSI1MCIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMDIiIHk9IjYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iNzAwIj4xNDwvdGV4dD4KICA8cmVjdCB4PSIxMzAiIHk9IjcwIiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5Yjg3MiIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cGF0aCBkPSJNMjYwIDcwIEwzMDAgNTAgTDMwMCAxNTAgTDI2MCAxNzAgWiIgZmlsbD0iI2Q0OWE0YyIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cmVjdCB4PSIxNTAiIHk9IjEwMCIgd2lkdGg9IjkwIiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjOGE1YTFmIi8+CiAgPHRleHQgeD0iMTk1IiB5PSIxMjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmFnZTwvdGV4dD4KICA8cmVjdCB4PSIxMzgiIHk9IjE0MiIgd2lkdGg9IjM0IiBoZWlnaHQ9IjIwIiByeD0iMTAiIGZpbGw9IiMwMDdhZmYiLz4KICA8dGV4dCB4PSIxNTUiIHk9IjE1NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMiIgZmlsbD0iI2ZmZmZmZiIgZm9udC13ZWlnaHQ9IjYwMCI+aW50PC90ZXh0PgogIDxnIHN0cm9rZT0iIzZlNmU3MyI+CiAgICA8bGluZSB4MT0iMzEwIiB5MT0iNDgiIHgyPSIyMjYiIHkyPSI1MiIvPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjExNSIgeDI9IjI0MiIgeTI9IjExNSIvPgogICAgPGxpbmUgeDE9IjgwIiB5MT0iMTUyIiB4Mj0iMTM0IiB5Mj0iMTUyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjMxNiIgeT0iNTIiPlZhbHVlPC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0YSB0eXBlPC90ZXh0PgogIDx0ZXh0IHg9IjIwMCIgeT0iMTk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgbmFtZSBnZXRzIHlvdSB0byB0aGUgdmFsdWUuPC90ZXh0Pgo8L3N2Zz4K",zC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9pbnRzPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCB3b3JrIG91dCB0aGUgcmlnaHQ6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIHN0b3JlIHRoZSByZXN1bHQgb24gdGhlIGxlZnQ8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzIGJlZm9yZTogPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiPjEwPC90c3Bhbj4gICDihpIgICBwb2ludHMgYWZ0ZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",IC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjYwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjYwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+bGVmdDwvdGV4dD4KICA8dGV4dCB4PSI3NSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5qdWljZTwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+dGVtcDwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+ZW1wdHk8L3RleHQ+CiAgPHRleHQgeD0iMzI1IiB5PSIyMDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnJpZ2h0PC90ZXh0PgogIDx0ZXh0IHg9IjMyNSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53YXRlcjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxwYXRoIGQ9Ik04OCAxMDQgQzExMCA3MCwgMTYwIDcwLCAxODYgMTA0Ii8+CiAgICA8cGF0aCBkPSJNMzE4IDEwNCBDMjcwIDE1LCAxMzAgMTUsIDgyIDEwNCIvPgogICAgPHBhdGggZD0iTTIxNCAxMDQgQzI0MCA3MCwgMjkwIDcwLCAzMTIgMTA0Ii8+CiAgPC9nPgogIDxnIGZvbnQtd2VpZ2h0PSI3MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPGNpcmNsZSBjeD0iMTM3IiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIxMzciIHk9Ijg1Ij4xPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjAwIiBjeT0iMzgiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyMDAiIHk9IjQzIj4yPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjYzIiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyNjMiIHk9Ijg1Ij4zPC90ZXh0PgogIDwvZz4KICA8ZyB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMiI+CiAgICA8dGV4dCB4PSI3MCIgeT0iMjQ3Ij4xOiB0ZW1wID0gbGVmdDwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMjQ3Ij4yOiBsZWZ0ID0gcmlnaHQ8L3RleHQ+CiAgICA8dGV4dCB4PSIzMzAiIHk9IjI0NyI+MzogcmlnaHQgPSB0ZW1wPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",kC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dmFsaWQ8L3RleHQ+CiAgPHRleHQgeD0iNDAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnZhbGlkPC90ZXh0Pjx0ZXh0IHg9IjM2MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludmFsaWQ8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPmdyYWRlICZndDs9IDEgJmFtcDsmYW1wOyBncmFkZSAmbHQ7PSA2PC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIxNDIiIGZpbGw9IiNiOTFjMWMiPmdyYWRlICZsdDsgMSB8fCBncmFkZSAmZ3Q7IDY8L3RleHQ+CiAgPC9nPgo8L3N2Zz4K",SC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Ib3cgdGhlIHdoaWxlIGxvb3AgcnVuczwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjQ0IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iMjAiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI2OSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGNoZWNrIHRoZSBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgcnVuIHRoZSBpbnNpZGU8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5iYWNrPC90ZXh0PgogIDx0ZXh0IHg9IjM4IiB5PSIxMjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPnRvIHRoZSB0b3A8L3RleHQ+CiAgPHRleHQgeD0iMzQ4IiB5PSIxMzQiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmZhbHNlPC90ZXh0PgogIDx0ZXh0IHg9IjI3NiIgeT0iMjA1IiB0ZXh0LWFuY2hvcj0iZW5kIj5jb250aW51ZSBiZWxvdyB0aGUgbG9vcDwvdGV4dD4KPC9zdmc+Cg==",_C="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHJlLXRlc3QgKHdoaWxlKTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5wb3N0LXRlc3QgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBpbnNpZGU8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGluc2lkZTwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgY29uZGl0aW9uPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5JZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlIGF0IG9uY2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj50aGUgaW5zaWRlIHJ1bnMgPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm5ldmVyPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgaW5zaWRlIGFsd2F5cyBydW5zPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj48dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+YXQgbGVhc3Qgb25jZTwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",TC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIFN0YXJ0IDx0c3BhbiBmaWxsPSIjNmU2ZTczIj4ob25seSBvbmNlKTwvdHNwYW4+PC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iNzYiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzQiIHJ4PSIxNyIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgY2hlY2sgdGhlIGNvbmRpdGlvbjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjEzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIxNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoiBydW4gdGhlIGluc2lkZTwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjIwMCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIyMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoyBzdGVwLCBlLmcuIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+YmFjazwvdGV4dD4KICA8dGV4dCB4PSI0OCIgeT0iMTc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj50byDikaE8L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSI4NCIgZmlsbD0iI2I5MWMxYyIgZm9udC13ZWlnaHQ9IjYwMCI+ZmFsc2U8L3RleHQ+CiAgPHRleHQgeD0iMzM2IiB5PSI5OCI+ZG9uZTwvdGV4dD4KPC9zdmc+Cg==",OC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gbnVtYmVycyA9IHsyLCA0LCA2LCA4LCAxMH08L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjU0IiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5JbmRleDwvdGV4dD4KICA8dGV4dCB4PSI5MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjA8L3RleHQ+PHJlY3QgeD0iNjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iOTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj4yPC90ZXh0PgogIDx0ZXh0IHg9IjE1MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjE8L3RleHQ+PHJlY3QgeD0iMTIwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjE1MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjQ8L3RleHQ+CiAgPHRleHQgeD0iMjEwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MjwvdGV4dD48cmVjdCB4PSIxODAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjEwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NjwvdGV4dD4KICA8dGV4dCB4PSIyNzAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4zPC90ZXh0PjxyZWN0IHg9IjI0MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyNzAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj44PC90ZXh0PgogIDx0ZXh0IHg9IjMzMCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjQ8L3RleHQ+PHJlY3QgeD0iMzAwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjMzMCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjEwPC90ZXh0PgogIDx0ZXh0IHg9IjIwIiB5PSI5MCIgZmlsbD0iIzZlNmU3MyIgZm9udC1zaXplPSIxMiI+VmFsdWU8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+PGxpbmUgeDE9IjkwIiB5MT0iMTQwIiB4Mj0iOTAiIHkyPSIxMTIiLz48bGluZSB4MT0iMzMwIiB5MT0iMTQwIiB4Mj0iMzMwIiB5Mj0iMTEyIi8+PC9nPgogIDxnIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjEzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dGV4dCB4PSI5MCIgeT0iMTU2Ij5udW1iZXJzWzBdIGlzIDI8L3RleHQ+PHRleHQgeD0iMzMwIiB5PSIxNTYiPm51bWJlcnNbNF0gaXMgMTA8L3RleHQ+PC9nPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTgyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj41IHNsb3RzLCBjb3VudGluZyBzdGFydHMgYXQgMDogdGhlIGxhc3QgaW5kZXggaXMgNC48L3RleHQ+Cjwvc3ZnPgo=",AC=""+new URL("mvc-klick-BIA_bYzu.svg",import.meta.url).href,PC=""+new URL("ss-binaere-suche-D02W1TH_.svg",import.meta.url).href,jC=""+new URL("ss-bubblesort-CmKEoNfO.svg",import.meta.url).href,CC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5Mb29raW5nIGZvciB0aGUgOS4gVGhlIGNhcmRzIGFyZSBtaXhlZCB1cC48L3RleHQ+CjxnPjxyZWN0IHg9IjE0IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIzNC4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjZGMyNjI2Ij43PC90ZXh0Pjx0ZXh0IHg9IjM0LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjZGMyNjI2Ij7imaU8L3RleHQ+PC9nPgo8dGV4dCB4PSIzNC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMzQuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4xLjwvdGV4dD4KPGc+PHJlY3QgeD0iNjIiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjgyLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjM8L3RleHQ+PHRleHQgeD0iODIuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZoDwvdGV4dD48L2c+Cjx0ZXh0IHg9IjgyLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSI4Mi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjIuPC90ZXh0Pgo8Zz48cmVjdCB4PSIxMTAiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjEzMC4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjZGMyNjI2Ij4xMDwvdGV4dD48dGV4dCB4PSIxMzAuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpjwvdGV4dD48L2c+Cjx0ZXh0IHg9IjEzMC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTMwLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+My48L3RleHQ+CjxnPjxyZWN0IHg9IjE1OCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTc4LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjU8L3RleHQ+PHRleHQgeD0iMTc4LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaM8L3RleHQ+PC9nPgo8dGV4dCB4PSIxNzguMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjQuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyMDYiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMyIvPjx0ZXh0IHg9IjIyNi4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjMWMxYzFlIj45PC90ZXh0Pjx0ZXh0IHg9IjIyNi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iMjI2LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iIzE1ODAzZCI+4pyTPC90ZXh0Pgo8dGV4dCB4PSIyMjYuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj41LjwvdGV4dD4KPGc+PHJlY3QgeD0iMjU0IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIyNTgiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjMwMiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzA2IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8Zz48cmVjdCB4PSIzNTAiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjM1NCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPHRleHQgeD0iMTQiIHk9IjE2OCIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzZlNmU3MyI+VHVybiB0aGVtIG92ZXIgZnJvbSBsZWZ0IHRvIHJpZ2h0OjwvdGV4dD48dGV4dCB4PSIxNCIgeT0iMTg4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5BZnRlciA1IGNvbXBhcmlzb25zIHRoZSA5IGlzIGZvdW5kLjwvdGV4dD4KPC9zdmc+Cg==",BC=""+new URL("ss-vergleiche-UczNldcC.svg",import.meta.url).href,DC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPkNhbGwgYnkgdmFsdWU6IGEgY29weTwvdGV4dD4KPHJlY3QgeD0iMTAiIHk9IjM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9Ijg2IiByeD0iOCIgZmlsbD0iI2VmZjZmZiIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyMCIgeT0iNTgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPk1haW4gcHJvZ3JhbTwvdGV4dD4KPHRleHQgeD0iMTYiIHk9Ijk4IiBmb250LXNpemU9IjEyIj5udW1iZXI8L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+ZG91YmxlSXQ8L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iOTgiPng8L3RleHQ+CjxyZWN0IHg9IjI4MCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMCIgcng9IjQiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8dGV4dCB4PSIzMjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dHNwYW4gZmlsbD0iIzZlNmU3MyIgdGV4dC1kZWNvcmF0aW9uPSJsaW5lLXRocm91Z2giPjU8L3RzcGFuPiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPjwvdGV4dD4KPGxpbmUgeDE9IjEyOCIgeTE9IjkzIiB4Mj0iMjQ4IiB5Mj0iOTMiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIgbWFya2VyLWVuZD0idXJsKCNrKSIvPgo8dGV4dCB4PSIyMTAiIHk9Ijg0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jb3B5PC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iMTUwIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj54IGJlY29tZXMgMTAsIGJ1dCBudW1iZXIgc3RheXMgNS48L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNjgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPkxpa2UgYSBwaG90b2NvcHk6IHdyaXRpbmcgb24gdGhlIGNvcHk8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxODYiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPmRvZXMgbm90IGNoYW5nZSB0aGUgb3JpZ2luYWwuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5DYWxsIGJ5IHJlZmVyZW5jZTogdGhlIHNhbWUgYXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPk1haW4gcHJvZ3JhbTwvdGV4dD4KPHRleHQgeD0iMjAiIHk9IjMwMCI+cm93PC90ZXh0Pgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiMxZDRlZDgiLz4KPHJlY3QgeD0iMjUwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZmZmN2VkIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI2MCIgeT0iMjcyIiBmb250LXNpemU9IjEzIiBmaWxsPSIjYjQ1MzA5Ij5jbGVhcjwvdGV4dD4KPHRleHQgeD0iMjYwIiB5PSIzMDAiPnNlYXRzPC90ZXh0Pgo8Y2lyY2xlIGN4PSIzOTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiNiNDUzMDkiLz4KPHBhdGggZD0iTTE1MCAzMDAgTDE1MCAzNDAgTDE0MCAzNTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjYikiLz4KPHBhdGggZD0iTTM5MCAzMDAgTDM5MCAzNDAgTDMyMiAzNTQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjbykiLz4KPHJlY3QgeD0iOTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMTUwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjIxMCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyNzAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMTIwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxODAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjI0MCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMzAwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDE2IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5UaGVyZSBpcyBvbmx5IG9uZSBhcnJheS4gV2hhdCBjbGVhciBjaGFuZ2VzIHRocm91Z2ggc2VhdHMsPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDM0IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj50aGUgbWFpbiBwcm9ncmFtIHNlZXMgdW5kZXIgcm93LjwvdGV4dD4KPC9zdmc+Cg==",ZC=""+new URL("zk-zeichen-CgUEhNoK.svg",import.meta.url).href,MC=""+new URL("ike-nassi-D2w47gvX.jpg",import.meta.url).href,LC=""+new URL("kino-saal-CYMOok4_.svg",import.meta.url).href,WC=""+new URL("kino-schleifen-DrTQV7dq.svg",import.meta.url).href,EC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5TdGFydDwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iNzYiPlRhc3NlIGF1ZiBkZW4gVGlzY2ggc3RlbGxlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTMzIj5adWNrZXIgZ2V3w7xuc2NodD88L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjE5NCI+WnVja2VyIGhpbmVpbmdlYmVuPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSIyODUiPlRlZSBub2NoIHp1IGhlacOfPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjMyNy41IiB5PSIyODUiPjEgTWludXRlIHdhcnRlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5UZWUgdHJpbmtlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzk1Ij5FbmRlPC90ZXh0PgogIDwvZz4KICA8ZyBmb250LXNpemU9IjEyIiBmb250LXdlaWdodD0iNjAwIj4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMTY4IiBmaWxsPSIjMjQ4YTNkIj5qYTwvdGV4dD4KICAgIDx0ZXh0IHg9IjI0MiIgeT0iMTIyIiBmaWxsPSIjZDcwMDE1Ij5uZWluPC90ZXh0PgogICAgPHRleHQgeD0iMjQwIiB5PSIyNzQiIGZpbGw9IiMyNDhhM2QiPmphPC90ZXh0PgogICAgPHRleHQgeD0iMTU2IiB5PSIzMjAiIGZpbGw9IiNkNzAwMTUiPm5laW48L3RleHQ+CiAgPC9nPgogIDwhLS0gTGVnZW5kZSAtLT4KICA8bGluZSB4MT0iMTAiIHkxPSI0MTgiIHgyPSIzOTAiIHkyPSI0MTgiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxnIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiPgogICAgPHJlY3QgeD0iNDAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiByeD0iOSIgZmlsbD0iI2QxZjJkOSIvPgogICAgPHJlY3QgeD0iMjIwIiB5PSI0MzAiIHdpZHRoPSIzNiIgaGVpZ2h0PSIxOCIgZmlsbD0iI2U1ZjBmZiIvPgogICAgPHBhdGggZD0iTTU4IDQ1OCBMNzYgNDY5IEw1OCA0ODAgTDQwIDQ2OSBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8cGF0aCBkPSJNMjI2IDQ2MCBMMjU2IDQ2MCBMMjUwIDQ3OCBMMjIwIDQ3OCBaIiBmaWxsPSIjZjJlNmZmIi8+CiAgPC9nPgogIDxnIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiMzYTNhM2MiPgogICAgPHRleHQgeD0iODYiIHk9IjQ0MyI+U3RhcnQgb2RlciBFbmRlPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NDMiPkFud2Vpc3VuZzwvdGV4dD4KICAgIDx0ZXh0IHg9Ijg2IiB5PSI0NzMiPlZlcnp3ZWlndW5nPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NzMiPkVpbi0gb2RlciBBdXNnYWJlPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",NC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V29oaW4gbGFuZGV0IGRhcyBFbGVtZW50PzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij5vYmVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnVudGVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjIyNCIgeT0iNjIiPuKGkiBrb21tdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGF2b3I8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIga29tbXQgPHRzcGFuIGZvbnQtd2VpZ2h0PSI2MDAiPmRhaGludGVyPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZXJzZXR6dDwvdHNwYW4+IGRlbiBQbGF0emhhbHRlcjwvdGV4dD4KPC9zdmc+Cg==",FC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWx0ZXIgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+YWx0ZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5XZXJ0PC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0ZW50eXA8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPsOcYmVyIGRlbiBOYW1lbiBrb21tc3QgZHUgYW4gZGVuIFdlcnQuPC90ZXh0Pgo8L3N2Zz4K",JC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cHVua3RlPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cHVua3RlICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCByZWNodHMgYXVzcmVjaG5lbjogMTAgKyA1ID0gMTU8L3RleHQ+CiAgPHBhdGggZD0iTTI1MCA4MiBDMjMwIDMwLCA5MCAzMCwgNjQgODQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIyLjUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICA8dGV4dCB4PSIxNjAiIHk9IjM2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIj7ikaEgRXJnZWJuaXMgbGlua3Mgc3BlaWNoZXJuPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSIxNjQiIHdpZHRoPSIzNjAiIGhlaWdodD0iMjYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3Ii8+CiAgPHRleHQgeD0iMjAwIiB5PSIxODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPnB1bmt0ZSB2b3JoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xMDwvdHNwYW4+ICAg4oaSICAgcHVua3RlIG5hY2hoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",RC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjYwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjYwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+bGlua3M8L3RleHQ+CiAgPHRleHQgeD0iNzUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+U2FmdDwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+aGlsZjwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+bGVlcjwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cmVjaHRzPC90ZXh0PgogIDx0ZXh0IHg9IjMyNSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5XYXNzZXI8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8cGF0aCBkPSJNODggMTA0IEMxMTAgNzAsIDE2MCA3MCwgMTg2IDEwNCIvPgogICAgPHBhdGggZD0iTTMxOCAxMDQgQzI3MCAxNSwgMTMwIDE1LCA4MiAxMDQiLz4KICAgIDxwYXRoIGQ9Ik0yMTQgMTA0IEMyNDAgNzAsIDI5MCA3MCwgMzEyIDEwNCIvPgogIDwvZz4KICA8ZyBmb250LXdlaWdodD0iNzAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4KICAgIDxjaXJjbGUgY3g9IjEzNyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMTM3IiB5PSI4NSI+MTwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjIwMCIgY3k9IjM4IiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjAwIiB5PSI0MyI+MjwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjI2MyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjYzIiB5PSI4NSI+MzwvdGV4dD4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTIiPgogICAgPHRleHQgeD0iNzAiIHk9IjI0NyI+MTogaGlsZiA9IGxpbmtzPC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIyNDciPjI6IGxpbmtzID0gcmVjaHRzPC90ZXh0PgogICAgPHRleHQgeD0iMzMwIiB5PSIyNDciPjM6IHJlY2h0cyA9IGhpbGY8L3RleHQ+CiAgPC9nPgo8L3N2Zz4K",GC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+Z8O8bHRpZzwvdGV4dD4KICA8dGV4dCB4PSI0MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPnVuZ8O8bHRpZzwvdGV4dD48dGV4dCB4PSIzNjAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj51bmfDvGx0aWc8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGUgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGUgJmx0Oz0gNjwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RlICZsdDsgMSB8fCBub3RlICZndDsgNjwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",HC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMTkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+CiAgPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIxOTAiIGZpbGw9IiNmZmZmZmYiLz4KICA8cmVjdCB4PSIyMCIgeT0iMTQiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iNjAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmE8L3RleHQ+CiAgPHJlY3QgeD0iMTAwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIxNDAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmI8L3RleHQ+CiAgPHJlY3QgeD0iMTgwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIyMjAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmEgJmFtcDsmYW1wOyBiPC90ZXh0PgogIDxyZWN0IHg9IjI2MCIgeT0iMTQiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzAwLjAiIHk9IjM1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNzAwIj5hIHx8IGI8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzODAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPiFhPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSI0NiIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSI2MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIxMDAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjE0MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIxODAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIyNjAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjMwMC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIzNDAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjM4MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjYwLjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj50cnVlPC90ZXh0PgogIDxyZWN0IHg9IjEwMCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMTQwLjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIj5mYWxzZTwvdGV4dD4KICA8cmVjdCB4PSIxODAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjYwIiB5PSI3OCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzMDAuMCIgeT0iOTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnRydWU8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSI3OCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzODAuMCIgeT0iOTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiPmZhbHNlPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSIxMTAiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iNjAuMCIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIj5mYWxzZTwvdGV4dD4KICA8cmVjdCB4PSIxMDAiIHk9IjExMCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIxNDAuMCIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj50cnVlPC90ZXh0PgogIDxyZWN0IHg9IjE4MCIgeT0iMTEwIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiPmZhbHNlPC90ZXh0PgogIDxyZWN0IHg9IjI2MCIgeT0iMTEwIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjMwMC4wIiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnRydWU8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxMTAiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzgwLjAiIHk9IjEzMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iMTQyIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjYwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMTAwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMTQwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMTgwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMjIwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjYwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzAwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzgwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8bGluZSB4MT0iMTgwIiB5MT0iMTQiIHgyPSIxODAiIHkyPSIxNzQiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIzIi8+Cjwvc3ZnPgo=",VC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5BYmxhdWYgZGVyIFdoaWxlLVNjaGxlaWZlPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iNDQiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSIyMCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjY5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaAgQmVkaW5ndW5nIHByw7xmZW48L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgSW5oYWx0IGF1c2bDvGhyZW48L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53aWVkZXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+bmFjaCBvYmVuPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+d2VpdGVyIHVudGVyIGRlciBTY2hsZWlmZTwvdGV4dD4KPC9zdmc+Cg==",QC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+a29wZmdlc3RldWVydCAoV2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmZ1w59nZXN0ZXVlcnQgKERvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBCZWRpbmd1bmc8L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBJbmhhbHQ8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluaGFsdDwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgQmVkaW5ndW5nPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5Jc3QgZGllIEJlZGluZ3VuZyBnbGVpY2ggZmFsc2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5sw6R1ZnQgZGVyIEluaGFsdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+bmllPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5EZXIgSW5oYWx0IGzDpHVmdCBpbW1lcjwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm1pbmRlc3RlbnMgZWlubWFsPC90c3Bhbj4uPC90ZXh0Pgo8L3N2Zz4K",qC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIFN0YXJ0IDx0c3BhbiBmaWxsPSIjNmU2ZTczIj4obnVyIGVpbm1hbCk8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9Ijc2IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iMTciIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIEJlZGluZ3VuZyBwcsO8ZmVuPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMTM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iNiIgZmlsbD0iI2RiZWFmZSIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGiIEluaGFsdCBhdXNmw7xocmVuPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMjAwIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iNiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjMTU4MDNkIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGjIFNjaHJpdHQsIHouIEIuIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+enVyw7xjazwvdGV4dD4KICA8dGV4dCB4PSI0OCIgeT0iMTc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj56dSDikaE8L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSI4NCIgZmlsbD0iI2I5MWMxYyIgZm9udC13ZWlnaHQ9IjYwMCI+ZmFsc2U8L3RleHQ+CiAgPHRleHQgeD0iMzM2IiB5PSI5OCI+ZmVydGlnPC90ZXh0Pgo8L3N2Zz4K",UC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gemFobGVuID0gezIsIDQsIDYsIDgsIDEwfTwvdGV4dD4KICA8dGV4dCB4PSIyMCIgeT0iNTQiIGZpbGw9IiM2ZTZlNzMiIGZvbnQtc2l6ZT0iMTIiPkluZGV4PC90ZXh0PgogIDx0ZXh0IHg9IjkwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MDwvdGV4dD48cmVjdCB4PSI2MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjI8L3RleHQ+CiAgPHRleHQgeD0iMTUwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MTwvdGV4dD48cmVjdCB4PSIxMjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTUwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NDwvdGV4dD4KICA8dGV4dCB4PSIyMTAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4yPC90ZXh0PjxyZWN0IHg9IjE4MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyMTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj42PC90ZXh0PgogIDx0ZXh0IHg9IjI3MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjM8L3RleHQ+PHJlY3QgeD0iMjQwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjI3MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjg8L3RleHQ+CiAgPHRleHQgeD0iMzMwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+NDwvdGV4dD48cmVjdCB4PSIzMDAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzMwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+MTA8L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjkwIiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5XZXJ0PC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjYSkiPjxsaW5lIHgxPSI5MCIgeTE9IjE0MCIgeDI9IjkwIiB5Mj0iMTEyIi8+PGxpbmUgeDE9IjMzMCIgeTE9IjE0MCIgeDI9IjMzMCIgeTI9IjExMiIvPjwvZz4KICA8ZyBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+PHRleHQgeD0iOTAiIHk9IjE1NiI+emFobGVuWzBdIGlzdCAyPC90ZXh0Pjx0ZXh0IHg9IjMzMCIgeT0iMTU2Ij56YWhsZW5bNF0gaXN0IDEwPC90ZXh0PjwvZz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+NSBGw6RjaGVyLCBnZXrDpGhsdCB3aXJkIGFiIDA6IGRlciBsZXR6dGUgSW5kZXggaXN0IDQuPC90ZXh0Pgo8L3N2Zz4K",$C=""+new URL("mvc-klick-KmFKqxH-.svg",import.meta.url).href,YC=""+new URL("aufgabe-mehrwertsteuer-KUkerRBd.svg",import.meta.url).href,XC=""+new URL("kino-saal-BOvcmdzb.svg",import.meta.url).href,KC=""+new URL("kino-schleifen-Ci9yPnbo.svg",import.meta.url).href,eB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5JbsOtY2lvPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSI3NiI+UMO0ciB1bWEgY2jDoXZlbmEgbmEgbWVzYTwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTMzIj5RdWVyIGHDp8O6Y2FyPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTk0Ij5KdW50YXIgYcOnw7pjYXI8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI4NSI+Q2jDoSBtdWl0byBxdWVudGU/PC90ZXh0PgogICAgPHRleHQgeD0iMzI3LjUiIHk9IjI4NSI+RXNwZXJhciAxIG1pbnV0bzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5CZWJlciBvIGNow6E8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjM5NSI+RmltPC90ZXh0PgogIDwvZz4KICA8ZyBmb250LXNpemU9IjEyIiBmb250LXdlaWdodD0iNjAwIj4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMTY4IiBmaWxsPSIjMjQ4YTNkIj5zaW08L3RleHQ+CiAgICA8dGV4dCB4PSIyNDIiIHk9IjEyMiIgZmlsbD0iI2Q3MDAxNSI+bsOjbzwvdGV4dD4KICAgIDx0ZXh0IHg9IjI0MCIgeT0iMjc0IiBmaWxsPSIjMjQ4YTNkIj5zaW08L3RleHQ+CiAgICA8dGV4dCB4PSIxNTYiIHk9IjMyMCIgZmlsbD0iI2Q3MDAxNSI+bsOjbzwvdGV4dD4KICA8L2c+CiAgPCEtLSBMZWdlbmRlIC0tPgogIDxsaW5lIHgxPSIxMCIgeTE9IjQxOCIgeDI9IjM5MCIgeTI9IjQxOCIgc3Ryb2tlPSIjZDFkMWQ2Ii8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cmVjdCB4PSI0MCIgeT0iNDMwIiB3aWR0aD0iMzYiIGhlaWdodD0iMTgiIHJ4PSI5IiBmaWxsPSIjZDFmMmQ5Ii8+CiAgICA8cmVjdCB4PSIyMjAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8cGF0aCBkPSJNNTggNDU4IEw3NiA0NjkgTDU4IDQ4MCBMNDAgNDY5IFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxwYXRoIGQ9Ik0yMjYgNDYwIEwyNTYgNDYwIEwyNTAgNDc4IEwyMjAgNDc4IFoiIGZpbGw9IiNmMmU2ZmYiLz4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZmlsbD0iIzNhM2EzYyI+CiAgICA8dGV4dCB4PSI4NiIgeT0iNDQzIj5JbsOtY2lvIG91IGZpbTwvdGV4dD4KICAgIDx0ZXh0IHg9IjI2NiIgeT0iNDQzIj5JbnN0cnXDp8OjbzwvdGV4dD4KICAgIDx0ZXh0IHg9Ijg2IiB5PSI0NzMiPkRlY2lzw6NvPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NzMiPkVudHJhZGEgb3Ugc2HDrWRhPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",tB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+T25kZSBmaWNhIG8gZWxlbWVudG8/PC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RiZWFmZSIvPgogIDxyZWN0IHg9IjIwIiB5PSI3NSIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc1IiB4Mj0iMjEwIiB5Mj0iNzUiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLWRhc2hhcnJheT0iNCAzIi8+CiAgPHJlY3QgeD0iMjAiIHk9IjQwIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjcwIiBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iNjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxZDRlZDgiPm1ldGFkZSBkZSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPm1ldGFkZSBkZSBiYWl4bzwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YW50ZXM8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGVwb2lzPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+c3Vic3RpdHVpLW88L3RzcGFuPjwvdGV4dD4KPC9zdmc+Cg==",nB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgaWRhZGUgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+aWRhZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5WYWxvcjwvdGV4dD4KICA8dGV4dCB4PSIzMTYiIHk9IjExOSI+Tm9tZTwvdGV4dD4KICA8dGV4dCB4PSI4IiB5PSIxNTYiPlRpcG8gZGUgZGFkb3M8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPlBlbG8gbm9tZSBjaGVnYXMgYW8gdmFsb3IuPC90ZXh0Pgo8L3N2Zz4K",iB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9udG9zPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCBjYWxjdWxhciBhIGRpcmVpdGE6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIGd1YXJkYXIgbyByZXN1bHRhZG8gw6AgZXNxdWVyZGE8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zIGFudGVzOiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPiAgIOKGkiAgIHBvbnRvcyBkZXBvaXM6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",aB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMzAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMzAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+ZXNxdWVyZGE8L3RleHQ+CiAgPHRleHQgeD0iNzUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+c3VtbzwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+YXV4PC90ZXh0PgogIDx0ZXh0IHg9IjIwMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj52YXppbzwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+ZGlyZWl0YTwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+w6FndWE8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8cGF0aCBkPSJNODggMTA0IEMxMTAgNzAsIDE2MCA3MCwgMTg2IDEwNCIvPgogICAgPHBhdGggZD0iTTMxOCAxMDQgQzI3MCAxNSwgMTMwIDE1LCA4MiAxMDQiLz4KICAgIDxwYXRoIGQ9Ik0yMTQgMTA0IEMyNDAgNzAsIDI5MCA3MCwgMzEyIDEwNCIvPgogIDwvZz4KICA8ZyBmb250LXdlaWdodD0iNzAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4KICAgIDxjaXJjbGUgY3g9IjEzNyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMTM3IiB5PSI4NSI+MTwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjIwMCIgY3k9IjM4IiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjAwIiB5PSI0MyI+MjwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjI2MyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjYzIiB5PSI4NSI+MzwvdGV4dD4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTIiPgogICAgPHRleHQgeD0iMjAwIiB5PSIyNTAiPjE6IGF1eCA9IGVzcXVlcmRhPC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIyNjgiPjI6IGVzcXVlcmRhID0gZGlyZWl0YTwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMjg2Ij4zOiBkaXJlaXRhID0gYXV4PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",sB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzAwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iMTAwIiB5PSI1MCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyNCIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc0IiB4Mj0iMzgwIiB5Mj0iNzQiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPGxpbmUgeDE9IjUwIiB5MT0iNjgiIHgyPSI1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MDwvdGV4dD4KICA8bGluZSB4MT0iMTAwIiB5MT0iNjgiIHgyPSIxMDAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxMDAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4xPC90ZXh0PgogIDxsaW5lIHgxPSIxNTAiIHkxPSI2OCIgeDI9IjE1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjE1MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjI8L3RleHQ+CiAgPGxpbmUgeDE9IjIwMCIgeTE9IjY4IiB4Mj0iMjAwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MzwvdGV4dD4KICA8bGluZSB4MT0iMjUwIiB5MT0iNjgiIHgyPSIyNTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyNTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj40PC90ZXh0PgogIDxsaW5lIHgxPSIzMDAiIHkxPSI2OCIgeDI9IjMwMCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjMwMCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjU8L3RleHQ+CiAgPGxpbmUgeDE9IjM1MCIgeTE9IjY4IiB4Mj0iMzUwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NjwvdGV4dD4KICA8Y2lyY2xlIGN4PSIxMDAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMwMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dsOhbGlkYTwvdGV4dD4KICA8dGV4dCB4PSI1MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludsOhbGlkYTwvdGV4dD48dGV4dCB4PSIzNTAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnbDoWxpZGE8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGEgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGEgJmx0Oz0gNTwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RhICZsdDsgMSB8fCBub3RhICZndDsgNTwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",rB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Db21vIGZ1bmNpb25hIG8gY2ljbG8gd2hpbGU8L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSI0NCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI0MCIgcng9IjIwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iNjkiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCB2ZXJpZmljYXIgYSBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMTI4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iNiIgZmlsbD0iI2RiZWFmZSIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE1MyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIGV4ZWN1dGFyIG8gaW50ZXJpb3I8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj52b2x0YXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+cGFyYSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+Y29udGludWFyIHBvciBiYWl4byBkbyBjaWNsbzwvdGV4dD4KPC9zdmc+Cg==",oB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHLDqS10ZXN0ZSAod2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnDDs3MtdGVzdGUgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjM1IiB5PSIxMjQiIHdpZHRoPSIxMzAiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgaW50ZXJpb3I8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGludGVyaW9yPC90ZXh0PgogIDxyZWN0IHg9IjIzNSIgeT0iMTI0IiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjM2IiByeD0iMTgiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBjb25kacOnw6NvPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5TZSBhIGNvbmRpw6fDo28gZm9yIGxvZ28gZmFsc2EsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5vIGludGVyaW9yIDx0c3BhbiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjMWMxYzFlIj5udW5jYTwvdHNwYW4+IMOpIGV4ZWN1dGFkby48L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSIxOTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPk8gaW50ZXJpb3Igw6kgc2VtcHJlIGV4ZWN1dGFkbzwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPnBlbG8gbWVub3MgdW1hIHZlejwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",lB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluw61jaW8gPHRzcGFuIGZpbGw9IiM2ZTZlNzMiPihzw7MgdW1hIHZleik8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9Ijc2IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iMTciIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIHZlcmlmaWNhciBhIGNvbmRpw6fDo288L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMzgiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzQiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaIgZXhlY3V0YXIgbyBpbnRlcmlvcjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjIwMCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIyMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoyBwYXNzbywgcC4gZXguIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+dm9sdGFyPC90ZXh0PgogIDx0ZXh0IHg9IjQ4IiB5PSIxNzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPmFvIOKRoTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9Ijg0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIzMzYiIHk9Ijk4Ij5maW08L3RleHQ+Cjwvc3ZnPgo=",uB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gbnVtZXJvcyA9IHsyLCA0LCA2LCA4LCAxMH08L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjU0IiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj7DjW5kaWNlPC90ZXh0PgogIDx0ZXh0IHg9IjkwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MDwvdGV4dD48cmVjdCB4PSI2MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjI8L3RleHQ+CiAgPHRleHQgeD0iMTUwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MTwvdGV4dD48cmVjdCB4PSIxMjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTUwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NDwvdGV4dD4KICA8dGV4dCB4PSIyMTAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4yPC90ZXh0PjxyZWN0IHg9IjE4MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyMTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj42PC90ZXh0PgogIDx0ZXh0IHg9IjI3MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjM8L3RleHQ+PHJlY3QgeD0iMjQwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjI3MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjg8L3RleHQ+CiAgPHRleHQgeD0iMzMwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+NDwvdGV4dD48cmVjdCB4PSIzMDAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzMwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+MTA8L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjkwIiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5WYWxvcjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj48bGluZSB4MT0iOTAiIHkxPSIxNDAiIHgyPSI5MCIgeTI9IjExMiIvPjxsaW5lIHgxPSIzMzAiIHkxPSIxNDAiIHgyPSIzMzAiIHkyPSIxMTIiLz48L2c+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjx0ZXh0IHg9IjkwIiB5PSIxNTYiPm51bWVyb3NbMF0gw6kgMjwvdGV4dD48dGV4dCB4PSIzMzAiIHk9IjE1NiI+bnVtZXJvc1s0XSDDqSAxMDwvdGV4dD48L2c+CiAgPHRleHQgeD0iMjAwIiB5PSIxODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPjUgcG9zacOnw7VlcywgY29udGEtc2UgYSBwYXJ0aXIgZGUgMDogbyDDumx0aW1vIMOtbmRpY2Ugw6kgNC48L3RleHQ+Cjwvc3ZnPgo=",mB=""+new URL("mvc-klick-DKonBpbs.svg",import.meta.url).href,cB=""+new URL("schiffe-versenken-iEBDHIxD.svg",import.meta.url).href,dB=""+new URL("ss-binaere-suche-DVVS2SNc.svg",import.meta.url).href,hB=""+new URL("ss-bubblesort-AFDcFDah.svg",import.meta.url).href,gB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5Qcm9jdXJhLXNlIG8gOS4gQXMgY2FydGFzIGVzdMOjbyBiYXJhbGhhZGFzLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjM0LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjc8L3RleHQ+PHRleHQgeD0iMzQuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpTwvdGV4dD48L2c+Cjx0ZXh0IHg9IjM0LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIzNC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjEuPC90ZXh0Pgo8Zz48cmVjdCB4PSI2MiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iODIuMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+MzwvdGV4dD48dGV4dCB4PSI4Mi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iODIuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjgyLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+Mi48L3RleHQ+CjxnPjxyZWN0IHg9IjExMCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTMwLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjEwPC90ZXh0Pjx0ZXh0IHg9IjEzMC4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iI2RjMjYyNiI+4pmmPC90ZXh0PjwvZz4KPHRleHQgeD0iMTMwLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIxMzAuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4zLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTU4IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIxNzguMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+NTwvdGV4dD48dGV4dCB4PSIxNzguMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZozwvdGV4dD48L2c+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTc4LjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+NC48L3RleHQ+CjxnPjxyZWN0IHg9IjIwNiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIzIi8+PHRleHQgeD0iMjI2LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjk8L3RleHQ+PHRleHQgeD0iMjI2LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaA8L3RleHQ+PC9nPgo8dGV4dCB4PSIyMjYuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjMTU4MDNkIj7inJM8L3RleHQ+Cjx0ZXh0IHg9IjIyNi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjUuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyNTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjI1OCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPGc+PHJlY3QgeD0iMzAyIiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIzMDYiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjM1MCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzU0IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8dGV4dCB4PSIxNCIgeT0iMTY4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5WaXJhciBkYSBlc3F1ZXJkYSBwYXJhIGEgZGlyZWl0YTo8L3RleHQ+PHRleHQgeD0iMTQiIHk9IjE4OCIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzZlNmU3MyI+QXDDs3MgNSBjb21wYXJhw6fDtWVzLCBvIDkgw6kgZW5jb250cmFkby48L3RleHQ+Cjwvc3ZnPgo=",pB=""+new URL("ss-vergleiche-DWgkIvLr.svg",import.meta.url).href,fB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPlBhc3NhZ2VtIHBvciB2YWxvcjogdW1hIGPDs3BpYTwvdGV4dD4KPHJlY3QgeD0iMTAiIHk9IjM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9Ijg2IiByeD0iOCIgZmlsbD0iI2VmZjZmZiIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyMCIgeT0iNTgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPlByb2dyYW1hIHByaW5jaXBhbDwvdGV4dD4KPHRleHQgeD0iMTYiIHk9Ijk4IiBmb250LXNpemU9IjEyIj5udW1lcm88L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+ZHVwbGljYXI8L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iOTgiPng8L3RleHQ+CjxyZWN0IHg9IjI4MCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMCIgcng9IjQiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8dGV4dCB4PSIzMjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dHNwYW4gZmlsbD0iIzZlNmU3MyIgdGV4dC1kZWNvcmF0aW9uPSJsaW5lLXRocm91Z2giPjU8L3RzcGFuPiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPjwvdGV4dD4KPGxpbmUgeDE9IjEyOCIgeTE9IjkzIiB4Mj0iMjQ4IiB5Mj0iOTMiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIgbWFya2VyLWVuZD0idXJsKCNrKSIvPgo8dGV4dCB4PSIyMTAiIHk9Ijg0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jw7NwaWE8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNTAiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPnggcGFzc2EgYSAxMCwgbWFzIG51bWVybyBmaWNhIDUuPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iMTY4IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5Db21vIHVtYSBmb3RvY8OzcGlhOiBlc2NyZXZlciBuYSBjw7NwaWE8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxODYiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPm7Do28gYWx0ZXJhIG8gb3JpZ2luYWwuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5QYXNzYWdlbSBwb3IgcmVmZXLDqm5jaWE6IG8gbWVzbW8gYXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPlByb2dyYW1hIHByaW5jaXBhbDwvdGV4dD4KPHRleHQgeD0iMjAiIHk9IjMwMCI+ZmlsYTwvdGV4dD4KPGNpcmNsZSBjeD0iMTUwIiBjeT0iMjk1IiByPSI1IiBmaWxsPSIjMWQ0ZWQ4Ii8+CjxyZWN0IHg9IjI1MCIgeT0iMjUyIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjYyIiByeD0iOCIgZmlsbD0iI2ZmZjdlZCIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyNjAiIHk9IjI3MiIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+bGltcGFyPC90ZXh0Pgo8dGV4dCB4PSIyNjAiIHk9IjMwMCI+bHVnYXJlczwvdGV4dD4KPGNpcmNsZSBjeD0iMzkwIiBjeT0iMjk1IiByPSI1IiBmaWxsPSIjYjQ1MzA5Ii8+CjxwYXRoIGQ9Ik0xNTAgMzAwIEwxNTAgMzQwIEwxNDAgMzUyIiBmaWxsPSJub25lIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41IiBtYXJrZXItZW5kPSJ1cmwoI2IpIi8+CjxwYXRoIGQ9Ik0zOTAgMzAwIEwzOTAgMzQwIEwzMjIgMzU0IiBmaWxsPSJub25lIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41IiBtYXJrZXItZW5kPSJ1cmwoI28pIi8+CjxyZWN0IHg9IjkwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjE1MCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyMTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMjcwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9IjEyMCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMTgwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIyNDAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjMwMCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQxNiIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+U8OzIGjDoSB1bSBhcnJheS4gTyBxdWUgbGltcGFyIGFsdGVyYSBhdHJhdsOpcyBkZSBsdWdhcmVzLDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQzNCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+byBwcm9ncmFtYSBwcmluY2lwYWwgdsOqIGVtIGZpbGEuPC90ZXh0Pgo8L3N2Zz4K",xB=""+new URL("zk-zeichen-8efNmpGx.svg",import.meta.url).href,bB=""+new URL("schiffe-versenken-CXt1SF0S.svg",import.meta.url).href,yB=""+new URL("ss-binaere-suche-CPsLGldq.svg",import.meta.url).href,vB=""+new URL("ss-bubblesort-Dic2ZfaT.svg",import.meta.url).href,wB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5HZXN1Y2h0OiBkaWUgOS4gRGllIEthcnRlbiBzaW5kIGdlbWlzY2h0LjwvdGV4dD4KPGc+PHJlY3QgeD0iMTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjM0LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjc8L3RleHQ+PHRleHQgeD0iMzQuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpTwvdGV4dD48L2c+Cjx0ZXh0IHg9IjM0LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIzNC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjEuPC90ZXh0Pgo8Zz48cmVjdCB4PSI2MiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iODIuMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+MzwvdGV4dD48dGV4dCB4PSI4Mi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iODIuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjgyLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+Mi48L3RleHQ+CjxnPjxyZWN0IHg9IjExMCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTMwLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjEwPC90ZXh0Pjx0ZXh0IHg9IjEzMC4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iI2RjMjYyNiI+4pmmPC90ZXh0PjwvZz4KPHRleHQgeD0iMTMwLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIxMzAuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4zLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTU4IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIxNzguMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+NTwvdGV4dD48dGV4dCB4PSIxNzguMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZozwvdGV4dD48L2c+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTc4LjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+NC48L3RleHQ+CjxnPjxyZWN0IHg9IjIwNiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIzIi8+PHRleHQgeD0iMjI2LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjk8L3RleHQ+PHRleHQgeD0iMjI2LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaA8L3RleHQ+PC9nPgo8dGV4dCB4PSIyMjYuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjMTU4MDNkIj7inJM8L3RleHQ+Cjx0ZXh0IHg9IjIyNi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjUuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyNTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjI1OCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPGc+PHJlY3QgeD0iMzAyIiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIzMDYiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjM1MCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzU0IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8dGV4dCB4PSIxNCIgeT0iMTY4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5Wb24gbGlua3MgbmFjaCByZWNodHMgdW1kcmVoZW46PC90ZXh0Pjx0ZXh0IHg9IjE0IiB5PSIxODgiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiM2ZTZlNzMiPk5hY2ggNSBWZXJnbGVpY2hlbiBpc3QgZGllIDkgZ2VmdW5kZW4uPC90ZXh0Pgo8L3N2Zz4K",zB=""+new URL("ss-vergleiche-DRqzU2TZ.svg",import.meta.url).href,IB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPldlcnTDvGJlcmdhYmU6IGVpbmUgS29waWU8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNlZmY2ZmYiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjAiIHk9IjU4IiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWQ0ZWQ4Ij5IYXVwdHByb2dyYW1tPC90ZXh0Pgo8dGV4dCB4PSIyMCIgeT0iOTgiPnphaGw8L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+dmVyZG9wcGxlPC90ZXh0Pgo8dGV4dCB4PSIyNjAiIHk9Ijk4Ij54PC90ZXh0Pgo8cmVjdCB4PSIyODAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMzIwIiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+PHRzcGFuIGZpbGw9IiM2ZTZlNzMiIHRleHQtZGVjb3JhdGlvbj0ibGluZS10aHJvdWdoIj41PC90c3Bhbj4gPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiPjEwPC90c3Bhbj48L3RleHQ+CjxsaW5lIHgxPSIxMjgiIHkxPSI5MyIgeDI9IjI0OCIgeTI9IjkzIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtZGFzaGFycmF5PSI1IDQiIG1hcmtlci1lbmQ9InVybCgjaykiLz4KPHRleHQgeD0iMjEwIiB5PSI4NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+S29waWU8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNTAiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPnggd2lyZCAxMCwgYWJlciB6YWhsIGJsZWlidCA1LjwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjE2OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+V2llIGJlaSBlaW5lciBGb3Rva29waWU6IFdlciBhdWYgZGVyIEtvcGllIHNjaHJlaWJ0LDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjE4NiIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+w6RuZGVydCBkYXMgT3JpZ2luYWwgbmljaHQuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5SZWZlcmVuesO8YmVyZ2FiZTogZGFzc2VsYmUgQXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPkhhdXB0cHJvZ3JhbW08L3RleHQ+Cjx0ZXh0IHg9IjIwIiB5PSIzMDAiPnJlaWhlPC90ZXh0Pgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiMxZDRlZDgiLz4KPHJlY3QgeD0iMjUwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZmZmN2VkIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI2MCIgeT0iMjcyIiBmb250LXNpemU9IjEzIiBmaWxsPSIjYjQ1MzA5Ij5sZWVyZW48L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iMzAwIj5wbGFldHplPC90ZXh0Pgo8Y2lyY2xlIGN4PSIzOTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiNiNDUzMDkiLz4KPHBhdGggZD0iTTE1MCAzMDAgTDE1MCAzNDAgTDE0MCAzNTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjYikiLz4KPHBhdGggZD0iTTM5MCAzMDAgTDM5MCAzNDAgTDMyMiAzNTQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjbykiLz4KPHJlY3QgeD0iOTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMTUwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjIxMCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyNzAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMTIwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxODAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjI0MCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMzAwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDE2IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5FcyBnaWJ0IG51ciBlaW4gQXJyYXkuIFdhcyBsZWVyZW4gw7xiZXIgcGxhZXR6ZSDDpG5kZXJ0LDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQzNCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+c2llaHQgZGFzIEhhdXB0cHJvZ3JhbW0gdW50ZXIgcmVpaGUuPC90ZXh0Pgo8L3N2Zz4K",kB=""+new URL("zk-zeichen-vYvc3iJg.svg",import.meta.url).href;function SB(i){const e=[];for(const t of i.replace(/\r\n/g,` `).split(` -`)){const n=/^###\s+(.+)$/.exec(t),a=e.at(-1);if(n){const s=n[1].trim();e.push({term:s,forms:[s],text:""})}else a&&/^(auch|also):/i.test(t)?a.forms.push(...t.replace(/^(auch|also):/i,"").split(",").map(s=>s.trim()).filter(Boolean)):a&&t.trim()!==""&&(a.text=(a.text+" "+t.trim()).trim())}return e.filter(t=>t.text!=="")}const SB=i=>i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");function ju(i){const e=i.flatMap(t=>t.forms).sort((t,n)=>n.length-t.length);if(e.length!==0)return new RegExp(`(?t.forms.includes(e))}class To extends Error{}function _B(i){return i==="zuhoerer"||i==="vertrag"||i==="layout"||i==="bombe"||i==="frage"||i==="reihenfolge"}function TB(i,e,t){const n=h=>{throw new To(`${t}: ${h}`)};let a="",s="",r="",o=[],l,u;const m=[];let c,d=!1;for(const h of e){const g=h.trim();if(c&&d&&(/^ {4}|^\t/.test(h)||g==="")){c.code+=(c.code?` +`)){const n=/^###\s+(.+)$/.exec(t),a=e.at(-1);if(n){const s=n[1].trim();e.push({term:s,forms:[s],text:""})}else a&&/^(auch|also):/i.test(t)?a.forms.push(...t.replace(/^(auch|also):/i,"").split(",").map(s=>s.trim()).filter(Boolean)):a&&t.trim()!==""&&(a.text=(a.text+" "+t.trim()).trim())}return e.filter(t=>t.text!=="")}const _B=i=>i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");function ju(i){const e=i.flatMap(t=>t.forms).sort((t,n)=>n.length-t.length);if(e.length!==0)return new RegExp(`(?t.forms.includes(e))}class To extends Error{}function TB(i){return i==="zuhoerer"||i==="vertrag"||i==="layout"||i==="bombe"||i==="frage"||i==="reihenfolge"}function OB(i,e,t){const n=h=>{throw new To(`${t}: ${h}`)};let a="",s="",r="",o=[],l,u;const m=[];let c,d=!1;for(const h of e){const g=h.trim();if(c&&d&&(/^ {4}|^\t/.test(h)||g==="")){c.code+=(c.code?` `:"")+h.replace(/^( {4}|\t)/,"");continue}if(d=!1,!g)continue;const f=/^(titel|intro|antworten|frage|runde|klicks|richtig|zeit|fehler|besser|daten):\s*(.*)$/.exec(g);if(f){const[,y,w]=f;y==="runde"?(c={code:"",question:r,options:[],explanation:"",clicks:[]},m.push(c),d=!0):c?y==="frage"?c.question=w:y==="fehler"?c.wrongLine=Number(w):y==="besser"?c.fix=w:y==="klicks"?c.clicks=w.split(",").map(S=>S.trim()).filter(Boolean):y==="richtig"?c.rightText=w:n(`„${y}:“ gehört vor die erste Runde.`):y==="titel"?a=w:y==="intro"?s=w:y==="antworten"?o=w.split("|").map(S=>S.trim()):y==="frage"?r=w:y==="zeit"?l=Number(w):y==="daten"?u=w==="csv"?w:n("„daten:“ kennt nur „csv“."):n(`„${y}:“ gehört in eine Runde.`);continue}c||n(`Unbekannte Zeile vor der ersten Runde: „${g}“`);const x=c,b=/^-\s+(\[x\]\s+)?(.+)$/.exec(g);b?x.options.push({text:b[2].trim().replaceAll("\\n",` `),right:!!b[1]}):g.startsWith(">")?x.explanation+=(x.explanation?" ":"")+g.slice(1).trim():n(`Unbekannte Zeile im Spiel: „${g}“`)}return a||n("Das Spiel braucht eine Zeile „titel:“."),m.length||n("Das Spiel braucht mindestens eine „runde:“."),m.forEach((h,g)=>{if(h.code=h.code.replace(/\n+$/,""),i==="bombe"){const f=h.code.split(` -`),x=h.wrongLine;(!x||!Number.isInteger(x)||x<1||x>f.length||!f[x-1].trim())&&n(`Runde ${g+1}: „fehler:“ muss eine Zeile des Codes sein.`),h.fix||n(`Runde ${g+1}: „besser:“ fehlt.`),h.options.length&&n(`Runde ${g+1}: Bei „bombe“ gibt es keine Antworten, man tippt auf die Zeile.`),h.question||n(`Runde ${g+1}: keine Frage.`);return}if(i==="reihenfolge"){h.options.length<3&&n(`Runde ${g+1}: „reihenfolge“ braucht mindestens drei Schritte.`),h.options.some(f=>f.right)&&n(`Runde ${g+1}: Bei „reihenfolge“ gibt es kein [x], die Schritte stehen der Reihe nach da.`),new Set(h.options.map(f=>f.text)).size!==h.options.length&&n(`Runde ${g+1}: zwei Schritte sind gleich.`),h.question||n(`Runde ${g+1}: keine Frage.`);return}if(h.options.length||(o.length||n(`Runde ${g+1}: keine Antworten.`),(!h.rightText||!o.includes(h.rightText))&&n(`Runde ${g+1}: „richtig:“ muss eine der Antworten sein.`),h.options=o.map(f=>({text:f,right:f===h.rightText}))),h.options.filter(f=>f.right).length!==1&&n(`Runde ${g+1}: genau eine Antwort muss richtig sein.`),h.question||n(`Runde ${g+1}: keine Frage.`),i==="layout"&&h.options.forEach(f=>Bh(f.text,`Runde ${g+1}`,n)),i==="zuhoerer")try{const f=Dh(h.code);for(const x of h.clicks)f.buttons.some(b=>b.caption===x)||n(`Runde ${g+1}: Knopf „${x}“ gibt es nicht.`);OB(f,h.clicks)}catch(f){if(f instanceof To)throw f;n(`Runde ${g+1}: ${f.message}`)}delete h.rightText}),i==="bombe"&&!(l&&l>0)&&n("„bombe“ braucht „zeit:“ mit den Sekunden je Runde."),{kind:i,title:a,intro:s,...i==="bombe"?{seconds:l,...u?{data:u}:{}}:{},rounds:m}}function Bh(i,e="",t=n=>{throw new To(n)}){const n=/^(grid|flow|border):\s*(.+)$/.exec(i);if(!n)return t(`${e}: Antwort „${i}“ ist kein Fensterbild (grid:, flow: oder border:).`);if(n[1]==="border"){const s={};for(const r of n[2].split(/\s+/)){const o=/^([NSWEC])=(.+)$/.exec(r);o||t(`${e}: „${r}“ im BorderLayout-Bild verstehe ich nicht (z. B. N=A).`),s[o[1]]=o[2]}return{kind:"border",areas:s}}const a=n[2].split("/").map(s=>s.trim().split(/\s+/).filter(Boolean));return{kind:n[1],rows:a}}const Za='"((?:[^"\\\\]|\\\\.)*)"';function Dh(i){const e=i.split(` -`),t={title:"",buttons:[],labels:[],ints:{},listeners:[]},n=new Map,a=(r,o,l)=>{if(o.startsWith("{")){let m=r+1;const c=[];for(;m=e.length)throw new Error(`Dem Zuhörer fehlt „${l}“.`);return{from:r,to:m,statements:Oo(c.join(" "))}}const u=l==="});"?o.replace(/\)\s*;\s*$/,""):o.replace(/;\s*$/,"");return{from:r,to:r,statements:Oo(u)}},s=r=>{if(!t.buttons.some(o=>o.name===r))throw new Error(`Knopf ${r} ist nicht angelegt.`);return r};for(let r=0;r\s*(.*)$/.exec(o)){const u=a(r,l[2],"};");n.set(l[1],u),r=u.to}else if(l=/^(\w+)\.addActionListener\(\s*(\w+)\s*\)\s*;$/.exec(o)){const u=n.get(l[2]);if(!u)throw new Error(`Zuhörer ${l[2]} ist nicht angelegt.`);t.listeners.push({button:s(l[1]),...u})}else if(l=/^(\w+)\.addActionListener\(\s*\w+\s*->\s*(.*)$/.exec(o)){const u=a(r,l[2],"});");t.listeners.push({button:s(l[1]),...u}),r=u.to}}return t}function Oo(i){const e=[];let t=0;const n=()=>{for(;t{let u=0,m=!1;const c=t+1;for(;t{let o=0,l=!1;const u=t;for(;t{if(n(),i[t]==="{")return Oo(a("{","}"));if(/^if\s*\(/.test(i.slice(t))){t=i.indexOf("(",t);const l=a("(",")").trim(),u=r();n();let m=[];return/^else\b/.test(i.slice(t))&&(t+=4,m=r()),[{condition:l,then:u,otherwise:m}]}const o=s();return o?[o]:[]};for(n();ta.caption===t)??i.buttons.find(a=>e.texts[a.name]===t);if(!n)throw new Error(`Knopf „${t}“ gibt es nicht.`);return Lh(i,e,n.name)}function Lh(i,e,t){const n=i.listeners.find(r=>r.button===t),a=[],s={source:t,command:e.texts[t]};for(const r of(n==null?void 0:n.statements)??[])Wh(r,e,a,s);return{button:t,listener:n,texts:{...e.texts},console:a}}function OB(i,e){const t=Zh(i);return e.map(n=>Mh(i,t,n))}function Wh(i,e,t,n){if(typeof i!="string"){for(const s of AB(i.condition,e,n)?i.then:i.otherwise)Wh(s,e,t,n);return}let a;if(a=/^(\w+)\.setText\((.*)\)$/.exec(i)){if(!(a[1]in e.texts))throw new Error(`${a[1]} ist keine Beschriftung und kein Knopf.`);e.texts[a[1]]=String(Qn(a[2],e,n))}else if(a=/^System\.out\.println\((.*)\)$/.exec(i))t.push(String(Qn(a[1],e,n)));else if(a=/^(\w+)\s*(\+\+|--)$/.exec(i))e.ints[Bu(a[1],e)]+=a[2]==="++"?1:-1;else if(a=/^(\w+)\s*([+-]?=)\s*(.+)$/.exec(i)){const s=Bu(a[1],e),r=Number(Qn(a[3],e,n));e.ints[s]=a[2]==="="?r:a[2]==="+="?e.ints[s]+r:e.ints[s]-r}else throw new Error(`Diese Anweisung kann das Spiel nicht nachspielen: „${i}“`)}function AB(i,e,t){let n;if(n=/^e\.getSource\(\)\s*(==|!=)\s*(\w+)$/.exec(i)){if(!(n[2]in e.texts))throw new Error(`${n[2]} ist kein Knopf.`);return t.source===n[2]==(n[1]==="==")}if(n=/^(!?)(.+)\.equals\((.+)\)$/.exec(i))return String(Qn(n[2],e,t))===String(Qn(n[3],e,t))!=(n[1]==="!");if(n=/^(.+?)\s*(==|!=|<=|>=|<|>)\s*(.+)$/.exec(i)){const a=Number(Qn(n[1],e,t)),s=Number(Qn(n[3],e,t));return{"==":a===s,"!=":a!==s,"<=":a<=s,">=":a>=s,"<":a":a>s}[n[2]]}throw new Error(`Diese Bedingung kann das Spiel nicht nachspielen: „${i}“`)}function Bu(i,e){if(!(i in e.ints))throw new Error(`Variable ${i} ist nicht angelegt.`);return i}function Qn(i,e,t){const n=i.match(new RegExp(`${Za}|\\d+|e\\.getActionCommand\\(\\)|\\w+(?:\\.getText\\(\\))?|[-+*/()]`,"g"))??[];let a=0;const s=()=>{const l=n[a++];if(l===void 0)throw new Error(`Unvollständiger Ausdruck „${i}“`);if(l==="("){const u=o();return a++,u}if(l.startsWith('"'))return JSON.parse(l);if(/^\d+$/.test(l))return Number(l);if(l==="e.getActionCommand()"){if(!t)throw new Error("e.getActionCommand() gibt es nur im Zuhörer.");return t.command}if(l.endsWith(".getText()"))return e.texts[l.slice(0,-10)]??"";if(l in e.ints)return e.ints[l];throw new Error(`Unbekannt: „${l}“`)},r=()=>{let l=s();for(;n[a]==="*"||n[a]==="/";){const u=n[a++],m=Number(s());l=u==="*"?Number(l)*m:Math.trunc(Number(l)/m)}return l},o=()=>{let l=r();for(;n[a]==="+"||n[a]==="-";){const u=n[a++],m=r();u==="+"?l=typeof l=="string"||typeof m=="string"?`${l}${m}`:l+m:l=Number(l)-Number(m)}return l};return o()}class PB extends Error{}const cs="___";function jB(i){const e=Array.from({length:i.rows},()=>Array(i.cols).fill(""));for(const t of i.words)[...t.word].forEach((n,a)=>e[t.row+(t.across?0:a)][t.col+(t.across?a:0)]=n);return e}function CB(i,e){const t=T=>{throw new PB(`${e}: ${T}`)},n=(T,j)=>{const C=/^(\d+)\s+(\d+)$/.exec(T.trim());return!C||Number(C[1])<1||Number(C[2])<1?t(`${j}: „${T}“ ist kein Feld (Zeile Spalte, ab 1).`):{row:Number(C[1])-1,col:Number(C[2])-1}};let a="",s="",r="ABCDEFGHIJKLMNOPQRSTUVWXYZ",o="",l="",u="",m="";const c=[],d=[];let h=[],g,f="start";for(const T of i){const j=T.trim();if(g&&(/^( {4}|\t)/.test(T)||j==="")){const P=T.replace(/^( {4}|\t)/,"");if(g==="station"){const O=c[c.length-1];O.code+=(O.code?` +`),x=h.wrongLine;(!x||!Number.isInteger(x)||x<1||x>f.length||!f[x-1].trim())&&n(`Runde ${g+1}: „fehler:“ muss eine Zeile des Codes sein.`),h.fix||n(`Runde ${g+1}: „besser:“ fehlt.`),h.options.length&&n(`Runde ${g+1}: Bei „bombe“ gibt es keine Antworten, man tippt auf die Zeile.`),h.question||n(`Runde ${g+1}: keine Frage.`);return}if(i==="reihenfolge"){h.options.length<3&&n(`Runde ${g+1}: „reihenfolge“ braucht mindestens drei Schritte.`),h.options.some(f=>f.right)&&n(`Runde ${g+1}: Bei „reihenfolge“ gibt es kein [x], die Schritte stehen der Reihe nach da.`),new Set(h.options.map(f=>f.text)).size!==h.options.length&&n(`Runde ${g+1}: zwei Schritte sind gleich.`),h.question||n(`Runde ${g+1}: keine Frage.`);return}if(h.options.length||(o.length||n(`Runde ${g+1}: keine Antworten.`),(!h.rightText||!o.includes(h.rightText))&&n(`Runde ${g+1}: „richtig:“ muss eine der Antworten sein.`),h.options=o.map(f=>({text:f,right:f===h.rightText}))),h.options.filter(f=>f.right).length!==1&&n(`Runde ${g+1}: genau eine Antwort muss richtig sein.`),h.question||n(`Runde ${g+1}: keine Frage.`),i==="layout"&&h.options.forEach(f=>Dh(f.text,`Runde ${g+1}`,n)),i==="zuhoerer")try{const f=Zh(h.code);for(const x of h.clicks)f.buttons.some(b=>b.caption===x)||n(`Runde ${g+1}: Knopf „${x}“ gibt es nicht.`);AB(f,h.clicks)}catch(f){if(f instanceof To)throw f;n(`Runde ${g+1}: ${f.message}`)}delete h.rightText}),i==="bombe"&&!(l&&l>0)&&n("„bombe“ braucht „zeit:“ mit den Sekunden je Runde."),{kind:i,title:a,intro:s,...i==="bombe"?{seconds:l,...u?{data:u}:{}}:{},rounds:m}}function Dh(i,e="",t=n=>{throw new To(n)}){const n=/^(grid|flow|border):\s*(.+)$/.exec(i);if(!n)return t(`${e}: Antwort „${i}“ ist kein Fensterbild (grid:, flow: oder border:).`);if(n[1]==="border"){const s={};for(const r of n[2].split(/\s+/)){const o=/^([NSWEC])=(.+)$/.exec(r);o||t(`${e}: „${r}“ im BorderLayout-Bild verstehe ich nicht (z. B. N=A).`),s[o[1]]=o[2]}return{kind:"border",areas:s}}const a=n[2].split("/").map(s=>s.trim().split(/\s+/).filter(Boolean));return{kind:n[1],rows:a}}const Za='"((?:[^"\\\\]|\\\\.)*)"';function Zh(i){const e=i.split(` +`),t={title:"",buttons:[],labels:[],ints:{},listeners:[]},n=new Map,a=(r,o,l)=>{if(o.startsWith("{")){let m=r+1;const c=[];for(;m=e.length)throw new Error(`Dem Zuhörer fehlt „${l}“.`);return{from:r,to:m,statements:Oo(c.join(" "))}}const u=l==="});"?o.replace(/\)\s*;\s*$/,""):o.replace(/;\s*$/,"");return{from:r,to:r,statements:Oo(u)}},s=r=>{if(!t.buttons.some(o=>o.name===r))throw new Error(`Knopf ${r} ist nicht angelegt.`);return r};for(let r=0;r\s*(.*)$/.exec(o)){const u=a(r,l[2],"};");n.set(l[1],u),r=u.to}else if(l=/^(\w+)\.addActionListener\(\s*(\w+)\s*\)\s*;$/.exec(o)){const u=n.get(l[2]);if(!u)throw new Error(`Zuhörer ${l[2]} ist nicht angelegt.`);t.listeners.push({button:s(l[1]),...u})}else if(l=/^(\w+)\.addActionListener\(\s*\w+\s*->\s*(.*)$/.exec(o)){const u=a(r,l[2],"});");t.listeners.push({button:s(l[1]),...u}),r=u.to}}return t}function Oo(i){const e=[];let t=0;const n=()=>{for(;t{let u=0,m=!1;const c=t+1;for(;t{let o=0,l=!1;const u=t;for(;t{if(n(),i[t]==="{")return Oo(a("{","}"));if(/^if\s*\(/.test(i.slice(t))){t=i.indexOf("(",t);const l=a("(",")").trim(),u=r();n();let m=[];return/^else\b/.test(i.slice(t))&&(t+=4,m=r()),[{condition:l,then:u,otherwise:m}]}const o=s();return o?[o]:[]};for(n();ta.caption===t)??i.buttons.find(a=>e.texts[a.name]===t);if(!n)throw new Error(`Knopf „${t}“ gibt es nicht.`);return Wh(i,e,n.name)}function Wh(i,e,t){const n=i.listeners.find(r=>r.button===t),a=[],s={source:t,command:e.texts[t]};for(const r of(n==null?void 0:n.statements)??[])Eh(r,e,a,s);return{button:t,listener:n,texts:{...e.texts},console:a}}function AB(i,e){const t=Mh(i);return e.map(n=>Lh(i,t,n))}function Eh(i,e,t,n){if(typeof i!="string"){for(const s of PB(i.condition,e,n)?i.then:i.otherwise)Eh(s,e,t,n);return}let a;if(a=/^(\w+)\.setText\((.*)\)$/.exec(i)){if(!(a[1]in e.texts))throw new Error(`${a[1]} ist keine Beschriftung und kein Knopf.`);e.texts[a[1]]=String(Qn(a[2],e,n))}else if(a=/^System\.out\.println\((.*)\)$/.exec(i))t.push(String(Qn(a[1],e,n)));else if(a=/^(\w+)\s*(\+\+|--)$/.exec(i))e.ints[Bu(a[1],e)]+=a[2]==="++"?1:-1;else if(a=/^(\w+)\s*([+-]?=)\s*(.+)$/.exec(i)){const s=Bu(a[1],e),r=Number(Qn(a[3],e,n));e.ints[s]=a[2]==="="?r:a[2]==="+="?e.ints[s]+r:e.ints[s]-r}else throw new Error(`Diese Anweisung kann das Spiel nicht nachspielen: „${i}“`)}function PB(i,e,t){let n;if(n=/^e\.getSource\(\)\s*(==|!=)\s*(\w+)$/.exec(i)){if(!(n[2]in e.texts))throw new Error(`${n[2]} ist kein Knopf.`);return t.source===n[2]==(n[1]==="==")}if(n=/^(!?)(.+)\.equals\((.+)\)$/.exec(i))return String(Qn(n[2],e,t))===String(Qn(n[3],e,t))!=(n[1]==="!");if(n=/^(.+?)\s*(==|!=|<=|>=|<|>)\s*(.+)$/.exec(i)){const a=Number(Qn(n[1],e,t)),s=Number(Qn(n[3],e,t));return{"==":a===s,"!=":a!==s,"<=":a<=s,">=":a>=s,"<":a":a>s}[n[2]]}throw new Error(`Diese Bedingung kann das Spiel nicht nachspielen: „${i}“`)}function Bu(i,e){if(!(i in e.ints))throw new Error(`Variable ${i} ist nicht angelegt.`);return i}function Qn(i,e,t){const n=i.match(new RegExp(`${Za}|\\d+|e\\.getActionCommand\\(\\)|\\w+(?:\\.getText\\(\\))?|[-+*/()]`,"g"))??[];let a=0;const s=()=>{const l=n[a++];if(l===void 0)throw new Error(`Unvollständiger Ausdruck „${i}“`);if(l==="("){const u=o();return a++,u}if(l.startsWith('"'))return JSON.parse(l);if(/^\d+$/.test(l))return Number(l);if(l==="e.getActionCommand()"){if(!t)throw new Error("e.getActionCommand() gibt es nur im Zuhörer.");return t.command}if(l.endsWith(".getText()"))return e.texts[l.slice(0,-10)]??"";if(l in e.ints)return e.ints[l];throw new Error(`Unbekannt: „${l}“`)},r=()=>{let l=s();for(;n[a]==="*"||n[a]==="/";){const u=n[a++],m=Number(s());l=u==="*"?Number(l)*m:Math.trunc(Number(l)/m)}return l},o=()=>{let l=r();for(;n[a]==="+"||n[a]==="-";){const u=n[a++],m=r();u==="+"?l=typeof l=="string"||typeof m=="string"?`${l}${m}`:l+m:l=Number(l)-Number(m)}return l};return o()}class jB extends Error{}const cs="___";function CB(i){const e=Array.from({length:i.rows},()=>Array(i.cols).fill(""));for(const t of i.words)[...t.word].forEach((n,a)=>e[t.row+(t.across?0:a)][t.col+(t.across?a:0)]=n);return e}function BB(i,e){const t=T=>{throw new jB(`${e}: ${T}`)},n=(T,j)=>{const C=/^(\d+)\s+(\d+)$/.exec(T.trim());return!C||Number(C[1])<1||Number(C[2])<1?t(`${j}: „${T}“ ist kein Feld (Zeile Spalte, ab 1).`):{row:Number(C[1])-1,col:Number(C[2])-1}};let a="",s="",r="ABCDEFGHIJKLMNOPQRSTUVWXYZ",o="",l="",u="",m="";const c=[],d=[];let h=[],g,f="start";for(const T of i){const j=T.trim();if(g&&(/^( {4}|\t)/.test(T)||j==="")){const P=T.replace(/^( {4}|\t)/,"");if(g==="station"){const O=c[c.length-1];O.code+=(O.code?` `:"")+P}else u+=(u?` -`:"")+P;continue}if(g=void 0,!j)continue;const C=/^(titel|intro|alphabet|station|frage|zahl|feld|tipp|kreuzwort|lösung|loesung|tor|ende):\s*(.*)$/.exec(j);if(C){const[,P,O]=C;if(P==="station")c.push({name:O,code:"",question:"",hint:"",explanation:""}),f="station",g="station";else if(P==="kreuzwort")o=O,f="crossword";else if(P==="tor")l=O,f="gate",g="gate";else if(P==="titel")a=O;else if(P==="intro")s=O;else if(P==="alphabet")r=O;else if(P==="ende")m=O;else if(P==="lösung"||P==="loesung")f!=="crossword"&&t("„lösung:“ gehört zum Kreuzworträtsel."),h=O.split(",").map(L=>n(L,"lösung"));else{f!=="station"&&t(`„${P}:“ gehört in eine Station.`);const L=c[c.length-1];P==="frage"?L.question=O:P==="tipp"?L.hint=O:P==="zahl"?L.answer=/^-?\d+$/.test(O)?Number(O):t(`Station „${L.name}“: „zahl:“ muss eine ganze Zahl sein.`):Object.assign(L,n(O,`Station „${L.name}“`))}continue}if(f==="crossword"){const P=/^-\s+([→↓])\s+(\d+)\s+(\d+)\s+([A-ZÄÖÜ]+):\s*(.+)$/u.exec(j);P||t(`Kreuzworträtsel: „${j}“ verstehe ich nicht (z. B. „- → 1 3 STRING: Hinweis“).`),d.push({across:P[1]==="→",row:Number(P[2])-1,col:Number(P[3])-1,word:P[4],clue:P[5]});continue}if(f==="station"&&j.startsWith(">")){const P=c[c.length-1];P.explanation+=(P.explanation?" ":"")+j.slice(1).trim();continue}t(`Unbekannte Zeile im Spiel: „${j}“`)}a||t("Das Spiel braucht eine Zeile „titel:“."),c.length||t("Das Spiel braucht mindestens eine „station:“."),d.length||t("Das Spiel braucht ein „kreuzwort:“ mit Wörtern."),h.length||t("Das Kreuzworträtsel braucht eine Zeile „lösung:“."),u.includes(cs)||t(`Der Code bei „tor:“ braucht ${cs} für das Eingabefeld.`),new Set(r).size!==r.length&&t("Im Alphabet kommt ein Zeichen doppelt vor.");const x=Math.max(...d.map(T=>T.row+(T.across?1:T.word.length))),b=Math.max(...d.map(T=>T.col+(T.across?T.word.length:1))),y=Array.from({length:x},()=>Array(b).fill(""));for(const T of d)[...T.word].forEach((j,C)=>{const P=T.row+(T.across?0:C),O=T.col+(T.across?C:0);y[P][O]&&y[P][O]!==j&&t(`Kreuzworträtsel: ${T.word} passt in Zeile ${P+1}, Spalte ${O+1} nicht (dort steht ${y[P][O]}).`),y[P][O]=j});const w=[...new Set(d.map(T=>T.row*b+T.col))].sort((T,j)=>T-j),S=d.map(T=>({...T,number:w.indexOf(T.row*b+T.col)+1})),z=(T,j)=>{var C;return((C=y[T])==null?void 0:C[j])??""},k=h.map(({row:T,col:j})=>z(T,j)||t(`lösung: In Zeile ${T+1}, Spalte ${j+1} ist kein Feld.`)).join(""),_=c.map(T=>{T.code||t(`Station „${T.name}“: Code fehlt.`),T.question||t(`Station „${T.name}“: „frage:“ fehlt.`),T.answer===void 0&&t(`Station „${T.name}“: „zahl:“ fehlt.`),T.row===void 0&&t(`Station „${T.name}“: „feld:“ fehlt.`);const j=r.charAt(T.answer);j||t(`Station „${T.name}“: alphabet.charAt(${T.answer}) gibt es nicht.`);const C=z(T.row,T.col);return C!==j&&t(`Station „${T.name}“: alphabet.charAt(${T.answer}) ist ${j}, im Feld ${T.row+1} ${T.col+1} steht aber „${C}“.`),T.code=T.code.replace(/\n+$/,""),T});return{title:a,intro:s,alphabet:r,stations:_,crosswordText:o,rows:x,cols:b,words:S,solution:h,keyword:k,gateText:l,gateCode:u.replace(/\n+$/,""),end:m}}const BB=/\[\[(.+?)\]\]/g;function DB(i,e){const t={title:"",task:"",blocks:[]},n=[];let a=!1;for(const s of i){if(/^\s*```/.test(s)){a||n.push([]),a=!a;continue}if(a){n[n.length-1].push(s.replace(/\s+$/,""));continue}const r=s.trim();if(!r)continue;const o=/^([a-zäöü]+):\s*(.*)$/i.exec(r);if(!o)throw new Error(`${e}: Unbekannte Zeile im Lückentext: „${r}“.`);const l=o[2].trim();switch(o[1].toLowerCase()){case"titel":t.title=l;break;case"auftrag":t.task=l;break;case"erklärung":case"erklaerung":t.explanation=l;break;default:throw new Error(`${e}: Unbekannter Schlüssel „${o[1]}“ im Lückentext.`)}}if(a)throw new Error(`${e}: Der Codeblock im Lückentext wird nicht mit \`\`\` geschlossen.`);if(!t.title)throw new Error(`${e}: Ein Lückentext braucht einen Titel.`);if(!n.some(s=>s.some(r=>r.trim())))throw new Error(`${e}: Lückentext „${t.title}“ braucht einen Codeblock.`);if(t.blocks=n.map(s=>{const r=Math.min(...s.filter(o=>o.trim()).map(o=>/^ */.exec(o)[0].length));return s.map(o=>ZB(o.slice(r),e,t.title))}),!MB(t).length)throw new Error(`${e}: Lückentext „${t.title}“ braucht mindestens eine Lücke [[…]].`);return t}function ZB(i,e,t){const n=[];let a=0;for(const s of i.matchAll(BB)){s.index>a&&n.push(i.slice(a,s.index));const r=s[1].split(/\s+\|\s+/).map(o=>o.trim()).filter(Boolean);if(!r.length)throw new Error(`${e}: Leere Lücke im Lückentext „${t}“.`);n.push({answers:r}),a=s.index+s[0].length}if(atypeof s=="string"&&(s.includes("[[")||s.includes("]]"))))throw new Error(`${e}: Unvollständige Lücke im Lückentext „${t}“: „${i}“.`);return n}function MB(i){return i.blocks.flat().flatMap(e=>e.flatMap(t=>typeof t=="string"?[]:[t.answers]))}function LB(i,e){const t=n=>n.replace(/\s+/g,"");return t(e)!==""&&i.some(n=>t(n)===t(e))}class te extends Error{}function Eh(i,e){const t=/^---\n([\s\S]*?)\n---\n?/.exec(i.replace(/\r\n/g,` +`:"")+P;continue}if(g=void 0,!j)continue;const C=/^(titel|intro|alphabet|station|frage|zahl|feld|tipp|kreuzwort|lösung|loesung|tor|ende):\s*(.*)$/.exec(j);if(C){const[,P,O]=C;if(P==="station")c.push({name:O,code:"",question:"",hint:"",explanation:""}),f="station",g="station";else if(P==="kreuzwort")o=O,f="crossword";else if(P==="tor")l=O,f="gate",g="gate";else if(P==="titel")a=O;else if(P==="intro")s=O;else if(P==="alphabet")r=O;else if(P==="ende")m=O;else if(P==="lösung"||P==="loesung")f!=="crossword"&&t("„lösung:“ gehört zum Kreuzworträtsel."),h=O.split(",").map(L=>n(L,"lösung"));else{f!=="station"&&t(`„${P}:“ gehört in eine Station.`);const L=c[c.length-1];P==="frage"?L.question=O:P==="tipp"?L.hint=O:P==="zahl"?L.answer=/^-?\d+$/.test(O)?Number(O):t(`Station „${L.name}“: „zahl:“ muss eine ganze Zahl sein.`):Object.assign(L,n(O,`Station „${L.name}“`))}continue}if(f==="crossword"){const P=/^-\s+([→↓])\s+(\d+)\s+(\d+)\s+([A-ZÄÖÜ]+):\s*(.+)$/u.exec(j);P||t(`Kreuzworträtsel: „${j}“ verstehe ich nicht (z. B. „- → 1 3 STRING: Hinweis“).`),d.push({across:P[1]==="→",row:Number(P[2])-1,col:Number(P[3])-1,word:P[4],clue:P[5]});continue}if(f==="station"&&j.startsWith(">")){const P=c[c.length-1];P.explanation+=(P.explanation?" ":"")+j.slice(1).trim();continue}t(`Unbekannte Zeile im Spiel: „${j}“`)}a||t("Das Spiel braucht eine Zeile „titel:“."),c.length||t("Das Spiel braucht mindestens eine „station:“."),d.length||t("Das Spiel braucht ein „kreuzwort:“ mit Wörtern."),h.length||t("Das Kreuzworträtsel braucht eine Zeile „lösung:“."),u.includes(cs)||t(`Der Code bei „tor:“ braucht ${cs} für das Eingabefeld.`),new Set(r).size!==r.length&&t("Im Alphabet kommt ein Zeichen doppelt vor.");const x=Math.max(...d.map(T=>T.row+(T.across?1:T.word.length))),b=Math.max(...d.map(T=>T.col+(T.across?T.word.length:1))),y=Array.from({length:x},()=>Array(b).fill(""));for(const T of d)[...T.word].forEach((j,C)=>{const P=T.row+(T.across?0:C),O=T.col+(T.across?C:0);y[P][O]&&y[P][O]!==j&&t(`Kreuzworträtsel: ${T.word} passt in Zeile ${P+1}, Spalte ${O+1} nicht (dort steht ${y[P][O]}).`),y[P][O]=j});const w=[...new Set(d.map(T=>T.row*b+T.col))].sort((T,j)=>T-j),S=d.map(T=>({...T,number:w.indexOf(T.row*b+T.col)+1})),z=(T,j)=>{var C;return((C=y[T])==null?void 0:C[j])??""},k=h.map(({row:T,col:j})=>z(T,j)||t(`lösung: In Zeile ${T+1}, Spalte ${j+1} ist kein Feld.`)).join(""),_=c.map(T=>{T.code||t(`Station „${T.name}“: Code fehlt.`),T.question||t(`Station „${T.name}“: „frage:“ fehlt.`),T.answer===void 0&&t(`Station „${T.name}“: „zahl:“ fehlt.`),T.row===void 0&&t(`Station „${T.name}“: „feld:“ fehlt.`);const j=r.charAt(T.answer);j||t(`Station „${T.name}“: alphabet.charAt(${T.answer}) gibt es nicht.`);const C=z(T.row,T.col);return C!==j&&t(`Station „${T.name}“: alphabet.charAt(${T.answer}) ist ${j}, im Feld ${T.row+1} ${T.col+1} steht aber „${C}“.`),T.code=T.code.replace(/\n+$/,""),T});return{title:a,intro:s,alphabet:r,stations:_,crosswordText:o,rows:x,cols:b,words:S,solution:h,keyword:k,gateText:l,gateCode:u.replace(/\n+$/,""),end:m}}const DB=/\[\[(.+?)\]\]/g;function ZB(i,e){const t={title:"",task:"",blocks:[]},n=[];let a=!1;for(const s of i){if(/^\s*```/.test(s)){a||n.push([]),a=!a;continue}if(a){n[n.length-1].push(s.replace(/\s+$/,""));continue}const r=s.trim();if(!r)continue;const o=/^([a-zäöü]+):\s*(.*)$/i.exec(r);if(!o)throw new Error(`${e}: Unbekannte Zeile im Lückentext: „${r}“.`);const l=o[2].trim();switch(o[1].toLowerCase()){case"titel":t.title=l;break;case"auftrag":t.task=l;break;case"erklärung":case"erklaerung":t.explanation=l;break;default:throw new Error(`${e}: Unbekannter Schlüssel „${o[1]}“ im Lückentext.`)}}if(a)throw new Error(`${e}: Der Codeblock im Lückentext wird nicht mit \`\`\` geschlossen.`);if(!t.title)throw new Error(`${e}: Ein Lückentext braucht einen Titel.`);if(!n.some(s=>s.some(r=>r.trim())))throw new Error(`${e}: Lückentext „${t.title}“ braucht einen Codeblock.`);if(t.blocks=n.map(s=>{const r=Math.min(...s.filter(o=>o.trim()).map(o=>/^ */.exec(o)[0].length));return s.map(o=>MB(o.slice(r),e,t.title))}),!LB(t).length)throw new Error(`${e}: Lückentext „${t.title}“ braucht mindestens eine Lücke [[…]].`);return t}function MB(i,e,t){const n=[];let a=0;for(const s of i.matchAll(DB)){s.index>a&&n.push(i.slice(a,s.index));const r=s[1].split(/\s+\|\s+/).map(o=>o.trim()).filter(Boolean);if(!r.length)throw new Error(`${e}: Leere Lücke im Lückentext „${t}“.`);n.push({answers:r}),a=s.index+s[0].length}if(atypeof s=="string"&&(s.includes("[[")||s.includes("]]"))))throw new Error(`${e}: Unvollständige Lücke im Lückentext „${t}“: „${i}“.`);return n}function LB(i){return i.blocks.flat().flatMap(e=>e.flatMap(t=>typeof t=="string"?[]:[t.answers]))}function WB(i,e){const t=n=>n.replace(/\s+/g,"");return t(e)!==""&&i.some(n=>t(n)===t(e))}class te extends Error{}function Nh(i,e){const t=/^---\n([\s\S]*?)\n---\n?/.exec(i.replace(/\r\n/g,` `));if(!t)throw new te(`${e}: Kopfzeilen (--- … ---) fehlen.`);const n=new Map;for(const a of t[1].split(` `)){const s=/^([a-zäöüß]+):\s*(.*)$/i.exec(a.trim());s&&n.set(s[1].toLowerCase(),s[2].trim())}return{meta:n,body:i.replace(/\r\n/g,` -`).slice(t[0].length)}}function WB(i,e){const t=i.split(/\s*(?:->|→)\s*/);if(t.length!==2)throw new te(`${e}: Test „${i}“ braucht genau ein „->“.`);const n=(a,s)=>a.trim()===""||a.trim()==="-"?[]:a.split(s).map(r=>r.trim());return{inputs:n(t[0],/\s*,\s*/),expected:n(t[1],/\s*\|\s*/)}}function EB(i){const e=/^(.*?)\s*(?:->|→)\s*(.*)$/.exec(i.trim());if(!e)throw new Error(`„messwerte: ${i}“ braucht ein „->“.`);const t={};for(const n of e[1].split(/\s*,\s*/).filter(Boolean)){const a=/^(\w+)\s*=\s*(.+)$/.exec(n);if(!a||!(a[1]in St))throw new Error(`Unbekannter Sensor in „${n}“.`);t[a[1]]=a[2].split("/").map(s=>{const r=s.trim();if(r==="true"||r==="false")return r==="true";if(/^-?\d+(\.\d+)?$/.test(r))return Number(r);if(typeof St[a[1]].simulated=="string")return r;throw new Error(`Messwert „${r}“ ist keine Zahl und nicht true/false.`)})}return Nh({inputs:[],expected:[],sensors:t},e[2])}function Nh(i,e){const t=[];e=e.replace(/\bscreen\s+("(?:[^"\\]|\\.)*")/u,(n,a)=>(i.screen=JSON.parse(a),""));for(const n of e.split(/\s*,\s*/).filter(Boolean))n==="ledOn"||n==="ledOff"?i.led=n==="ledOn":n==="tone"||n==="noTone"?i.tone=n==="tone":n==="none"?i.drive=[]:n==="drives"?i.drives=!0:t.push(n);return t.length&&(i.drive=es(nh(t.join(", ")))),i}function NB(i,e,t){const n={id:i,title:"",task:"",tests:[],requires:[],hints:[],subprograms:[]};let a;for(const s of e){const r=/^(titel|auftrag|start|test|datei|fahrt|befehle|welt|messwerte|schleifentiefe|braucht|tipp|lösung|loesung|unterprogramm|code):\s*(.*)$/i.exec(s.trim());if(r){const[,o,l]=r;switch(a=void 0,o.toLowerCase()){case"titel":n.title=l;break;case"auftrag":n.task=l,a="task";break;case"start":n.start=l;break;case"test":n.tests.push(WB(l,t));break;case"datei":{const u=/^([\w.-]+)\s*(?:->|→)\s*(.*)$/.exec(l.trim());if(!u||!n.tests.length)throw new te(`${t}: Übung „${i}“: „datei:“ braucht vorher einen Test und die Form „name.txt -> Zeile | Zeile“.`);const m=n.tests[n.tests.length-1];m.files=[...m.files??[],{name:u[1],lines:u[2].trim()===""?[]:u[2].split(/\s*\|\s*/).map(c=>c.trim())}];break}case"fahrt":try{n.tests.push({inputs:[],expected:[],drive:es(nh(l))})}catch(u){throw new te(`${t}: Übung „${i}“: ${u.message}`)}break;case"welt":{const u=/^([\w-]+)\s*(?:->|→)\s*(.+)$/.exec(l.trim());if(u){try{n.tests.push(Nh({inputs:[],expected:[],world:u[1]},u[2]))}catch(m){throw new te(`${t}: Übung „${i}“: ${m.message}`)}break}for(const m of l.split(/\s*,\s*/).filter(Boolean)){if(!/^[\w-]+$/.test(m))throw new te(`${t}: Übung „${i}“: Weltname „${m}“ (nur Buchstaben, Ziffern, -).`);n.tests.push({inputs:[],expected:[],world:m})}break}case"befehle":try{n.tests.push({inputs:[],expected:[],actions:a3(l)})}catch(u){throw new te(`${t}: Übung „${i}“: ${u.message}`)}break;case"messwerte":try{n.tests.push(EB(l))}catch(u){throw new te(`${t}: Übung „${i}“: ${u.message}`)}break;case"schleifentiefe":if(n.loopDepth=Number(l),!Number.isInteger(n.loopDepth)||n.loopDepth<1)throw new te(`${t}: Übung „${i}“: „schleifentiefe:“ braucht eine Zahl ab 1.`);break;case"braucht":n.requires.push(...l.split(/\s*,\s*/).filter(Boolean));break;case"tipp":n.hints.push(l),a="hint";break;case"lösung":case"loesung":n.solution=l;break;case"unterprogramm":n.subprograms.push(...l.split(/\s*,\s*/).filter(Boolean));break;case"code":if(l.trim().toLowerCase()!=="java")throw new te(`${t}: Übung „${i}“: „code:“ kennt nur „java“.`);n.code="java";break}}else a&&s.trim()!==""?a==="task"?n.task+=` +`).slice(t[0].length)}}function EB(i,e){const t=i.split(/\s*(?:->|→)\s*/);if(t.length!==2)throw new te(`${e}: Test „${i}“ braucht genau ein „->“.`);const n=(a,s)=>a.trim()===""||a.trim()==="-"?[]:a.split(s).map(r=>r.trim());return{inputs:n(t[0],/\s*,\s*/),expected:n(t[1],/\s*\|\s*/)}}function NB(i){const e=/^(.*?)\s*(?:->|→)\s*(.*)$/.exec(i.trim());if(!e)throw new Error(`„messwerte: ${i}“ braucht ein „->“.`);const t={};for(const n of e[1].split(/\s*,\s*/).filter(Boolean)){const a=/^(\w+)\s*=\s*(.+)$/.exec(n);if(!a||!(a[1]in St))throw new Error(`Unbekannter Sensor in „${n}“.`);t[a[1]]=a[2].split("/").map(s=>{const r=s.trim();if(r==="true"||r==="false")return r==="true";if(/^-?\d+(\.\d+)?$/.test(r))return Number(r);if(typeof St[a[1]].simulated=="string")return r;throw new Error(`Messwert „${r}“ ist keine Zahl und nicht true/false.`)})}return Fh({inputs:[],expected:[],sensors:t},e[2])}function Fh(i,e){const t=[];e=e.replace(/\bscreen\s+("(?:[^"\\]|\\.)*")/u,(n,a)=>(i.screen=JSON.parse(a),""));for(const n of e.split(/\s*,\s*/).filter(Boolean))n==="ledOn"||n==="ledOff"?i.led=n==="ledOn":n==="tone"||n==="noTone"?i.tone=n==="tone":n==="none"?i.drive=[]:n==="drives"?i.drives=!0:t.push(n);return t.length&&(i.drive=es(ih(t.join(", ")))),i}function FB(i,e,t){const n={id:i,title:"",task:"",tests:[],requires:[],hints:[],subprograms:[]};let a;for(const s of e){const r=/^(titel|auftrag|start|test|datei|fahrt|befehle|welt|messwerte|schleifentiefe|braucht|tipp|lösung|loesung|unterprogramm|code):\s*(.*)$/i.exec(s.trim());if(r){const[,o,l]=r;switch(a=void 0,o.toLowerCase()){case"titel":n.title=l;break;case"auftrag":n.task=l,a="task";break;case"start":n.start=l;break;case"test":n.tests.push(EB(l,t));break;case"datei":{const u=/^([\w.-]+)\s*(?:->|→)\s*(.*)$/.exec(l.trim());if(!u||!n.tests.length)throw new te(`${t}: Übung „${i}“: „datei:“ braucht vorher einen Test und die Form „name.txt -> Zeile | Zeile“.`);const m=n.tests[n.tests.length-1];m.files=[...m.files??[],{name:u[1],lines:u[2].trim()===""?[]:u[2].split(/\s*\|\s*/).map(c=>c.trim())}];break}case"fahrt":try{n.tests.push({inputs:[],expected:[],drive:es(ih(l))})}catch(u){throw new te(`${t}: Übung „${i}“: ${u.message}`)}break;case"welt":{const u=/^([\w-]+)\s*(?:->|→)\s*(.+)$/.exec(l.trim());if(u){try{n.tests.push(Fh({inputs:[],expected:[],world:u[1]},u[2]))}catch(m){throw new te(`${t}: Übung „${i}“: ${m.message}`)}break}for(const m of l.split(/\s*,\s*/).filter(Boolean)){if(!/^[\w-]+$/.test(m))throw new te(`${t}: Übung „${i}“: Weltname „${m}“ (nur Buchstaben, Ziffern, -).`);n.tests.push({inputs:[],expected:[],world:m})}break}case"befehle":try{n.tests.push({inputs:[],expected:[],actions:s3(l)})}catch(u){throw new te(`${t}: Übung „${i}“: ${u.message}`)}break;case"messwerte":try{n.tests.push(NB(l))}catch(u){throw new te(`${t}: Übung „${i}“: ${u.message}`)}break;case"schleifentiefe":if(n.loopDepth=Number(l),!Number.isInteger(n.loopDepth)||n.loopDepth<1)throw new te(`${t}: Übung „${i}“: „schleifentiefe:“ braucht eine Zahl ab 1.`);break;case"braucht":n.requires.push(...l.split(/\s*,\s*/).filter(Boolean));break;case"tipp":n.hints.push(l),a="hint";break;case"lösung":case"loesung":n.solution=l;break;case"unterprogramm":n.subprograms.push(...l.split(/\s*,\s*/).filter(Boolean));break;case"code":if(l.trim().toLowerCase()!=="java")throw new te(`${t}: Übung „${i}“: „code:“ kennt nur „java“.`);n.code="java";break}}else a&&s.trim()!==""?a==="task"?n.task+=` `+s.trim():n.hints[n.hints.length-1]+=` `+s.trim():s.trim()===""&&a==="task"&&(n.task+=` -`)}if(!n.title)throw new te(`${t}: Übung „${i}“ hat keinen Titel.`);if(!n.task.trim())throw new te(`${t}: Übung „${i}“ hat keinen Auftrag.`);return n.task=n.task.trim(),n}function FB(i,e){const t=[];for(const n of i){const a=n.trim();if(a.startsWith("?"))t.push({question:a.slice(1).trim(),options:[]});else if(/^- \[[ xX]\]/.test(a)){const s=t.at(-1);if(!s)throw new te(`${e}: Antwort ohne Frage im Quiz.`);s.options.push({text:a.slice(5).trim(),correct:a[3].toLowerCase()==="x"})}else if(a.startsWith("= ")){const s=t.at(-1),r=/^=\s+(.+?)\s+->\s+(.+)$/.exec(a);if(!s||!r)throw new te(`${e}: Zuordnung „${a}“ braucht die Form „= links -> rechts“ nach einer Frage.`);(s.pairs??(s.pairs=[])).push({left:r[1].trim(),right:r[2].trim()})}else if(a.startsWith(">")){const s=t.at(-1);s&&(s.explanation=((s.explanation?s.explanation+" ":"")+a.slice(1).trim()).trim())}}for(const n of t){if(n.pairs){const a=new Set(n.pairs.map(s=>s.right));if(n.options.length>0||n.pairs.length<2||a.size!==n.pairs.length)throw new te(`${e}: Zuordnung „${n.question}“ braucht mindestens zwei Paare mit verschiedenen rechten Seiten und keine Antworten.`);continue}if(n.options.length<2||!n.options.some(a=>a.correct))throw new te(`${e}: Quizfrage „${n.question}“ braucht mindestens zwei Antworten, davon eine richtige.`)}return t}function Fh(i,e){const t=[],n=i.split(` +`)}if(!n.title)throw new te(`${t}: Übung „${i}“ hat keinen Titel.`);if(!n.task.trim())throw new te(`${t}: Übung „${i}“ hat keinen Auftrag.`);return n.task=n.task.trim(),n}function JB(i,e){const t=[];for(const n of i){const a=n.trim();if(a.startsWith("?"))t.push({question:a.slice(1).trim(),options:[]});else if(/^- \[[ xX]\]/.test(a)){const s=t.at(-1);if(!s)throw new te(`${e}: Antwort ohne Frage im Quiz.`);s.options.push({text:a.slice(5).trim(),correct:a[3].toLowerCase()==="x"})}else if(a.startsWith("= ")){const s=t.at(-1),r=/^=\s+(.+?)\s+->\s+(.+)$/.exec(a);if(!s||!r)throw new te(`${e}: Zuordnung „${a}“ braucht die Form „= links -> rechts“ nach einer Frage.`);(s.pairs??(s.pairs=[])).push({left:r[1].trim(),right:r[2].trim()})}else if(a.startsWith(">")){const s=t.at(-1);s&&(s.explanation=((s.explanation?s.explanation+" ":"")+a.slice(1).trim()).trim())}}for(const n of t){if(n.pairs){const a=new Set(n.pairs.map(s=>s.right));if(n.options.length>0||n.pairs.length<2||a.size!==n.pairs.length)throw new te(`${e}: Zuordnung „${n.question}“ braucht mindestens zwei Paare mit verschiedenen rechten Seiten und keine Antworten.`);continue}if(n.options.length<2||!n.options.some(a=>a.correct))throw new te(`${e}: Quizfrage „${n.question}“ braucht mindestens zwei Antworten, davon eine richtige.`)}return t}function Jh(i,e){const t=[],n=i.split(` `);let a=[];const s=()=>{const r=a.join(` -`).trim();r&&t.push({kind:"markdown",text:r}),a=[]};for(let r=0;r=n.length)throw new te(`${e}: Block „::: ${o[1]}“ wird nicht mit „:::“ geschlossen.`);const m=o[1].toLowerCase(),c=o[2].trim();switch(m){case"diagramm":if(!c)throw new te(`${e}: „::: diagramm“ braucht einen Dateinamen.`);t.push({kind:"diagram",file:c,caption:l.join(" ").trim()});break;case"übung":case"uebung":if(!c)throw new te(`${e}: „::: übung“ braucht eine Kennung.`);t.push({kind:"exercise",exercise:NB(c,l,e)});break;case"checkliste":t.push({kind:"checklist",items:l.map(d=>d.trim()).filter(d=>d.startsWith("- ")).map(d=>JB(d.slice(2).trim()))});break;case"quiz":t.push({kind:"quiz",questions:FB(l,e)});break;case"bild":if(!c)throw new te(`${e}: „::: bild“ braucht einen Dateinamen.`);t.push({kind:"images",files:c.split(/\s+/),caption:l.join(" ").trim()});break;case"grafik":if(!c)throw new te(`${e}: „::: grafik“ braucht einen Dateinamen.`);t.push({kind:"graphic",file:c,caption:l.join(" ").trim()});break;case"angeberwissen":t.push({kind:"brag",text:l.join(` -`).trim()});break;case"spiel":try{if(_B(c))t.push({kind:"roundGame",game:TB(c,l,e)});else if(c==="prinzessin")t.push({kind:"rescueGame",game:CB(l,e)});else{if(c)throw new te(`${e}: Unbekanntes Spiel „${c}“ (zuhoerer, vertrag, layout, bombe, frage, reihenfolge oder prinzessin).`);t.push({kind:"game",game:Gx(l,e)})}}catch(d){throw new te(d.message)}break;case"lückentext":case"lueckentext":try{t.push({kind:"cloze",cloze:DB(l,e)})}catch(d){throw new te(d.message)}break;case"ludwig":t.push({kind:"brag",text:l.join(` +`).trim();r&&t.push({kind:"markdown",text:r}),a=[]};for(let r=0;r=n.length)throw new te(`${e}: Block „::: ${o[1]}“ wird nicht mit „:::“ geschlossen.`);const m=o[1].toLowerCase(),c=o[2].trim();switch(m){case"diagramm":if(!c)throw new te(`${e}: „::: diagramm“ braucht einen Dateinamen.`);t.push({kind:"diagram",file:c,caption:l.join(" ").trim()});break;case"übung":case"uebung":if(!c)throw new te(`${e}: „::: übung“ braucht eine Kennung.`);t.push({kind:"exercise",exercise:FB(c,l,e)});break;case"checkliste":t.push({kind:"checklist",items:l.map(d=>d.trim()).filter(d=>d.startsWith("- ")).map(d=>RB(d.slice(2).trim()))});break;case"quiz":t.push({kind:"quiz",questions:JB(l,e)});break;case"bild":if(!c)throw new te(`${e}: „::: bild“ braucht einen Dateinamen.`);t.push({kind:"images",files:c.split(/\s+/),caption:l.join(" ").trim()});break;case"grafik":if(!c)throw new te(`${e}: „::: grafik“ braucht einen Dateinamen.`);t.push({kind:"graphic",file:c,caption:l.join(" ").trim()});break;case"angeberwissen":t.push({kind:"brag",text:l.join(` +`).trim()});break;case"spiel":try{if(TB(c))t.push({kind:"roundGame",game:OB(c,l,e)});else if(c==="prinzessin")t.push({kind:"rescueGame",game:BB(l,e)});else{if(c)throw new te(`${e}: Unbekanntes Spiel „${c}“ (zuhoerer, vertrag, layout, bombe, frage, reihenfolge oder prinzessin).`);t.push({kind:"game",game:Hx(l,e)})}}catch(d){throw new te(d.message)}break;case"lückentext":case"lueckentext":try{t.push({kind:"cloze",cloze:ZB(l,e)})}catch(d){throw new te(d.message)}break;case"ludwig":t.push({kind:"brag",text:l.join(` `).trim(),tip:!0});break;case"caesar":{const d=c?Number(c):3;if(!Number.isInteger(d)||d<0||d>25)throw new te(`${e}: „::: caesar“ braucht einen Schlüssel von 0 bis 25.`);t.push({kind:"caesar",key:d,text:l.join(" ").trim()});break}case"mbot2":{const d={kind:"robotModel",focus:[]};for(const h of l.filter(g=>g.trim())){const g=/^\s*(fokus|focus|ansicht|view|drehen|spin):\s*(.*)$/i.exec(h);if(!g)throw new te(`${e}: „::: mbot2“ kennt nur Zeilen „fokus:“, „ansicht:“ und „drehen:“.`);const f=g[1].toLowerCase();f==="fokus"||f==="focus"?d.focus=Du(g[2],e):f==="ansicht"||f==="view"?d.view=g[2].trim().toLowerCase():d.spin=/^(ja|yes|true|sim)$/i.test(g[2].trim())}t.push(d);break}case"mbot2quiz":{const d={kind:"robotQuiz",tasks:[]};for(const h of l.filter(g=>g.trim())){const g=/^\s*-\s*(\w+)\s*:\s*(.+)$/.exec(h),f=/^\s*(fertig|done):\s*(.+)$/i.exec(h);if(g)d.tasks.push({part:Du(g[1],e)[0],question:g[2].trim()});else if(f)d.done=f[2].trim();else throw new te(`${e}: „::: mbot2quiz“ braucht Zeilen „- teil: Frage“ und optional „fertig: Text“.`)}if(!d.tasks.length)throw new te(`${e}: „::: mbot2quiz“ hat keine Fragen.`);t.push(d);break}case"datei":{if(!/^[\w.-]+\.(txt|csv|json)$/u.test(c))throw new te(`${e}: „::: datei“ braucht einen Dateinamen wie brief.txt, liste.csv oder daten.json.`);for(;l.length&&l[0].trim()==="";)l.shift();for(;l.length&&l[l.length-1].trim()==="";)l.pop();t.push({kind:"textFile",name:c,content:l.join(` -`)});break}default:throw new te(`${e}: Unbekannter Block „::: ${o[1]}“.`)}r=u}return s(),t}function JB(i){const e=/^(.*?)\s+→\s+(.+)$/.exec(i);return e?{text:e[1],ref:e[2].trim()}:{text:i}}function RB(i,e){const t=new Map(i.map((n,a)=>[n.title.toLowerCase(),a]));for(const n of i.flatMap(a=>a.blocks))if(n.kind==="checklist"){for(const a of n.items)if(a.ref!==void 0&&(a.step=t.get(a.ref.toLowerCase()),a.step===void 0))throw new te(`${e}: Checkliste verweist auf unbekannten Schritt „${a.ref}“.`)}}function GB(i,e){var c;const{meta:t,body:n}=Eh(i,e),a=e.replace(/^.*\//,"").replace(/\.md$/,""),s=Number((c=/^(\d+)/.exec(a))==null?void 0:c[1]);if(!Number.isFinite(s))throw new te(`${e}: Dateiname muss mit der Nummer beginnen (z. B. 01-…).`);const r=[];let o=[],l;const u=()=>{l&&r.push({title:l.title,blocks:Fh(l.lines.join(` +`)});break}default:throw new te(`${e}: Unbekannter Block „::: ${o[1]}“.`)}r=u}return s(),t}function RB(i){const e=/^(.*?)\s+→\s+(.+)$/.exec(i);return e?{text:e[1],ref:e[2].trim()}:{text:i}}function GB(i,e){const t=new Map(i.map((n,a)=>[n.title.toLowerCase(),a]));for(const n of i.flatMap(a=>a.blocks))if(n.kind==="checklist"){for(const a of n.items)if(a.ref!==void 0&&(a.step=t.get(a.ref.toLowerCase()),a.step===void 0))throw new te(`${e}: Checkliste verweist auf unbekannten Schritt „${a.ref}“.`)}}function HB(i,e){var c;const{meta:t,body:n}=Nh(i,e),a=e.replace(/^.*\//,"").replace(/\.md$/,""),s=Number((c=/^(\d+)/.exec(a))==null?void 0:c[1]);if(!Number.isFinite(s))throw new te(`${e}: Dateiname muss mit der Nummer beginnen (z. B. 01-…).`);const r=[];let o=[],l;const u=()=>{l&&r.push({title:l.title,blocks:Jh(l.lines.join(` `),e)})};for(const d of n.split(` -`)){const h=/^##\s+(.*)$/.exec(d);h?(u(),l={title:h[1].trim(),lines:[]}):l?l.lines.push(d):o.push(d)}if(u(),r.length===0)throw new te(`${e}: Keine Schritte (## Überschrift) gefunden.`);RB(r,e);const m=t.get("titel");if(!m)throw new te(`${e}: „titel:“ fehlt.`);return{id:a,number:s,title:m,section:t.get("bereich")??"",summary:t.get("kurz")??o.join(" ").trim(),steps:r}}function HB(i,e){const{meta:t,body:n}=Eh(i,e),a=t.get("titel");if(!a)throw new te(`${e}: „titel:“ fehlt.`);const s=t.get("nach");return{id:e.replace(/^.*\//,"").replace(/\.md$/,""),title:a,after:s?Number(s):void 0,level:Number(t.get("stufe")??"1")||1,blocks:Fh(n,e)}}function Du(i,e){const t=i.split(/\s*,\s*/).map(n=>n.trim()).filter(Boolean);for(const n of t)if(!o3(n))throw new te(`${e}: Unbekanntes Teil „${n}“. Bekannt: ${ih.join(", ")}.`);return t}const VB=Object.assign({"../../lessons/de/01-was-ist-ein-struktogramm.md":Yx,"../../lessons/de/02-der-editor.md":Xx,"../../lessons/de/03-speichern-oeffnen-exportieren.md":Kx,"../../lessons/de/04-variablen-und-datentypen.md":eb,"../../lessons/de/05-sequenz.md":tb,"../../lessons/de/06-eingabe-und-ausgabe.md":nb,"../../lessons/de/07-simulation-und-schreibtischtest.md":ib,"../../lessons/de/08-verzweigung.md":ab,"../../lessons/de/09-bedingungen-verknuepfen.md":sb,"../../lessons/de/10-fallauswahl.md":rb,"../../lessons/de/11-while-schleife.md":ob,"../../lessons/de/12-do-while-schleife.md":lb,"../../lessons/de/13-for-schleife.md":ub,"../../lessons/de/14-verschachteln.md":mb,"../../lessons/de/15-arrays.md":cb,"../../lessons/de/16-zweidimensionale-arrays.md":db,"../../lessons/de/17-zeichenketten.md":hb,"../../lessons/de/18-aufruf-und-aussprung.md":gb,"../../lessons/de/19-suchen-und-sortieren.md":pb,"../../lessons/de/20-java.md":fb,"../../lessons/de/21-python-und-javascript.md":xb,"../../lessons/de/22-try-und-catch.md":bb,"../../lessons/de/23-text-einlesen-und-speichern.md":yb,"../../lessons/de/24-zeile-fuer-zeile.md":vb,"../../lessons/de/25-tabellen-als-csv.md":wb,"../../lessons/de/26-json.md":zb,"../../lessons/de/27-formate-im-vergleich.md":Ib,"../../lessons/de/28-erstes-fenster.md":kb,"../../lessons/de/29-knopf-im-fenster.md":Sb,"../../lessons/de/30-der-knopf-reagiert.md":_b,"../../lessons/de/31-zahl-verdoppeln.md":Tb,"../../lessons/de/32-klickzaehler.md":Ob,"../../lessons/de/33-ampel.md":Ab,"../../lessons/de/34-notenrechner.md":Pb,"../../lessons/de/35-taschenrechner.md":jb,"../../lessons/de/36-zahlenraten.md":Cb,"../../lessons/de/37-viele-knoepfe-ein-zuhoerer.md":Bb,"../../lessons/de/38-innere-klassen.md":Db,"../../lessons/de/39-zwei-reiter.md":Zb,"../../lessons/de/40-model-view-controller.md":Mb,"../../lessons/de/begriffe.md":Lb,"../../lessons/de/nachschlagen.md":Wb,"../../lessons/en/01-was-ist-ein-struktogramm.md":Eb,"../../lessons/en/02-der-editor.md":Nb,"../../lessons/en/03-speichern-oeffnen-exportieren.md":Fb,"../../lessons/en/04-variablen-und-datentypen.md":Jb,"../../lessons/en/05-sequenz.md":Rb,"../../lessons/en/06-eingabe-und-ausgabe.md":Gb,"../../lessons/en/07-simulation-und-schreibtischtest.md":Hb,"../../lessons/en/08-verzweigung.md":Vb,"../../lessons/en/09-bedingungen-verknuepfen.md":Qb,"../../lessons/en/10-fallauswahl.md":qb,"../../lessons/en/11-while-schleife.md":Ub,"../../lessons/en/12-do-while-schleife.md":$b,"../../lessons/en/13-for-schleife.md":Yb,"../../lessons/en/14-verschachteln.md":Xb,"../../lessons/en/15-arrays.md":Kb,"../../lessons/en/16-zweidimensionale-arrays.md":e4,"../../lessons/en/17-zeichenketten.md":t4,"../../lessons/en/18-aufruf-und-aussprung.md":n4,"../../lessons/en/19-suchen-und-sortieren.md":i4,"../../lessons/en/20-java.md":a4,"../../lessons/en/21-python-und-javascript.md":s4,"../../lessons/en/22-try-und-catch.md":r4,"../../lessons/en/23-text-einlesen-und-speichern.md":o4,"../../lessons/en/24-zeile-fuer-zeile.md":l4,"../../lessons/en/25-tabellen-als-csv.md":u4,"../../lessons/en/26-json.md":m4,"../../lessons/en/27-formate-im-vergleich.md":c4,"../../lessons/en/28-erstes-fenster.md":d4,"../../lessons/en/29-knopf-im-fenster.md":h4,"../../lessons/en/30-der-knopf-reagiert.md":g4,"../../lessons/en/31-zahl-verdoppeln.md":p4,"../../lessons/en/32-klickzaehler.md":f4,"../../lessons/en/33-ampel.md":x4,"../../lessons/en/34-notenrechner.md":b4,"../../lessons/en/35-taschenrechner.md":y4,"../../lessons/en/36-zahlenraten.md":v4,"../../lessons/en/37-viele-knoepfe-ein-zuhoerer.md":w4,"../../lessons/en/38-innere-klassen.md":z4,"../../lessons/en/39-zwei-reiter.md":I4,"../../lessons/en/40-model-view-controller.md":k4,"../../lessons/en/begriffe.md":S4,"../../lessons/en/nachschlagen.md":_4,"../../lessons/pt/01-was-ist-ein-struktogramm.md":T4,"../../lessons/pt/02-der-editor.md":O4,"../../lessons/pt/03-speichern-oeffnen-exportieren.md":A4,"../../lessons/pt/04-variablen-und-datentypen.md":P4,"../../lessons/pt/05-sequenz.md":j4,"../../lessons/pt/06-eingabe-und-ausgabe.md":C4,"../../lessons/pt/07-simulation-und-schreibtischtest.md":B4,"../../lessons/pt/08-verzweigung.md":D4,"../../lessons/pt/09-bedingungen-verknuepfen.md":Z4,"../../lessons/pt/10-fallauswahl.md":M4,"../../lessons/pt/11-while-schleife.md":L4,"../../lessons/pt/12-do-while-schleife.md":W4,"../../lessons/pt/13-for-schleife.md":E4,"../../lessons/pt/14-verschachteln.md":N4,"../../lessons/pt/15-arrays.md":F4,"../../lessons/pt/16-zweidimensionale-arrays.md":J4,"../../lessons/pt/17-zeichenketten.md":R4,"../../lessons/pt/18-aufruf-und-aussprung.md":G4,"../../lessons/pt/19-suchen-und-sortieren.md":H4,"../../lessons/pt/20-java.md":V4,"../../lessons/pt/21-python-und-javascript.md":Q4,"../../lessons/pt/22-try-und-catch.md":q4,"../../lessons/pt/23-text-einlesen-und-speichern.md":U4,"../../lessons/pt/24-zeile-fuer-zeile.md":$4,"../../lessons/pt/25-tabellen-als-csv.md":Y4,"../../lessons/pt/26-json.md":X4,"../../lessons/pt/27-formate-im-vergleich.md":K4,"../../lessons/pt/28-erstes-fenster.md":ey,"../../lessons/pt/29-knopf-im-fenster.md":ty,"../../lessons/pt/30-der-knopf-reagiert.md":ny,"../../lessons/pt/31-zahl-verdoppeln.md":iy,"../../lessons/pt/32-klickzaehler.md":ay,"../../lessons/pt/33-ampel.md":sy,"../../lessons/pt/34-notenrechner.md":ry,"../../lessons/pt/35-taschenrechner.md":oy,"../../lessons/pt/36-zahlenraten.md":ly,"../../lessons/pt/37-viele-knoepfe-ein-zuhoerer.md":uy,"../../lessons/pt/38-innere-klassen.md":my,"../../lessons/pt/39-zwei-reiter.md":cy,"../../lessons/pt/40-model-view-controller.md":dy,"../../lessons/pt/begriffe.md":hy,"../../lessons/pt/nachschlagen.md":gy}),QB=Object.assign({"../../lessons/de/aufgaben/alter-unterprogramm.md":py,"../../lessons/de/aufgaben/ballwurf.md":fy,"../../lessons/de/aufgaben/bestenliste.md":xy,"../../lessons/de/aufgaben/binaerzahl.md":by,"../../lessons/de/aufgaben/caesar.md":yy,"../../lessons/de/aufgaben/collatz.md":vy,"../../lessons/de/aufgaben/einheitenrechner.md":wy,"../../lessons/de/aufgaben/fibonacci.md":zy,"../../lessons/de/aufgaben/gerade-ungerade.md":Iy,"../../lessons/de/aufgaben/mehrwertsteuer.md":ky,"../../lessons/de/aufgaben/notendurchschnitt.md":Sy,"../../lessons/de/aufgaben/pin-pruefen.md":_y,"../../lessons/de/aufgaben/schiffe-versenken.md":Ty,"../../lessons/de/aufgaben/speisekarte.md":Oy,"../../lessons/de/aufgaben/summe-bilden.md":Ay,"../../lessons/de/aufgaben/tafeldienst.md":Py,"../../lessons/de/aufgaben/taschenrechner.md":jy,"../../lessons/de/aufgaben/verleih-menue.md":Cy,"../../lessons/de/aufgaben/vokabeltrainer.md":By,"../../lessons/de/aufgaben/volljaehrig.md":Dy,"../../lessons/de/aufgaben/wuerfel-mvc.md":Zy,"../../lessons/de/aufgaben/zahl-verdoppeln.md":My,"../../lessons/en/aufgaben/alter-unterprogramm.md":Ly,"../../lessons/en/aufgaben/ballwurf.md":Wy,"../../lessons/en/aufgaben/bestenliste.md":Ey,"../../lessons/en/aufgaben/binaerzahl.md":Ny,"../../lessons/en/aufgaben/caesar.md":Fy,"../../lessons/en/aufgaben/collatz.md":Jy,"../../lessons/en/aufgaben/einheitenrechner.md":Ry,"../../lessons/en/aufgaben/fibonacci.md":Gy,"../../lessons/en/aufgaben/gerade-ungerade.md":Hy,"../../lessons/en/aufgaben/mehrwertsteuer.md":Vy,"../../lessons/en/aufgaben/notendurchschnitt.md":Qy,"../../lessons/en/aufgaben/pin-pruefen.md":qy,"../../lessons/en/aufgaben/schiffe-versenken.md":Uy,"../../lessons/en/aufgaben/speisekarte.md":$y,"../../lessons/en/aufgaben/summe-bilden.md":Yy,"../../lessons/en/aufgaben/tafeldienst.md":Xy,"../../lessons/en/aufgaben/taschenrechner.md":Ky,"../../lessons/en/aufgaben/verleih-menue.md":ev,"../../lessons/en/aufgaben/vokabeltrainer.md":tv,"../../lessons/en/aufgaben/volljaehrig.md":nv,"../../lessons/en/aufgaben/wuerfel-mvc.md":iv,"../../lessons/en/aufgaben/zahl-verdoppeln.md":av,"../../lessons/pt/aufgaben/alter-unterprogramm.md":sv,"../../lessons/pt/aufgaben/ballwurf.md":rv,"../../lessons/pt/aufgaben/bestenliste.md":ov,"../../lessons/pt/aufgaben/binaerzahl.md":lv,"../../lessons/pt/aufgaben/caesar.md":uv,"../../lessons/pt/aufgaben/collatz.md":mv,"../../lessons/pt/aufgaben/einheitenrechner.md":cv,"../../lessons/pt/aufgaben/fibonacci.md":dv,"../../lessons/pt/aufgaben/gerade-ungerade.md":hv,"../../lessons/pt/aufgaben/mehrwertsteuer.md":gv,"../../lessons/pt/aufgaben/notendurchschnitt.md":pv,"../../lessons/pt/aufgaben/pin-pruefen.md":fv,"../../lessons/pt/aufgaben/schiffe-versenken.md":xv,"../../lessons/pt/aufgaben/speisekarte.md":bv,"../../lessons/pt/aufgaben/summe-bilden.md":yv,"../../lessons/pt/aufgaben/tafeldienst.md":vv,"../../lessons/pt/aufgaben/taschenrechner.md":wv,"../../lessons/pt/aufgaben/verleih-menue.md":zv,"../../lessons/pt/aufgaben/vokabeltrainer.md":Iv,"../../lessons/pt/aufgaben/volljaehrig.md":kv,"../../lessons/pt/aufgaben/wuerfel-mvc.md":Sv,"../../lessons/pt/aufgaben/zahl-verdoppeln.md":_v}),Zu=Object.assign({"../../lessons/de/visubot/01-der-mbot2.md":Tv,"../../lessons/de/visubot/02-das-quadrat.md":Ov,"../../lessons/de/visubot/03-variablen-und-ausgabe.md":Av,"../../lessons/de/visubot/04-sensoren.md":Pv,"../../lessons/de/visubot/05-bis-zur-wand.md":jv,"../../lessons/de/visubot/06-abstand.md":Cv,"../../lessons/de/visubot/07-linie.md":Bv,"../../lessons/de/visubot/08-farben.md":Dv,"../../lessons/de/visubot/09-fallauswahl.md":Zv,"../../lessons/de/visubot/10-tasten-joystick.md":Mv,"../../lessons/de/visubot/11-licht.md":Lv,"../../lessons/de/visubot/12-lautstaerke.md":Wv,"../../lessons/de/visubot/13-neigung.md":Ev,"../../lessons/de/visubot/14-leds.md":Nv,"../../lessons/de/visubot/15-einzelne-leds.md":Fv,"../../lessons/de/visubot/16-lautsprecher.md":Jv,"../../lessons/de/visubot/17-arrays-melodie.md":Rv,"../../lessons/de/visubot/18-bildschirm.md":Gv,"../../lessons/de/visubot/19-zeichenketten.md":Hv,"../../lessons/de/visubot/20-motoren.md":Vv,"../../lessons/de/visubot/21-stoppuhr-akku.md":Qv,"../../lessons/de/visubot/22-eigene-methoden.md":qv,"../../lessons/de/visubot/nachschlagen.md":Uv,"../../lessons/en/visubot/01-der-mbot2.md":$v,"../../lessons/en/visubot/02-das-quadrat.md":Yv,"../../lessons/en/visubot/03-variablen-und-ausgabe.md":Xv,"../../lessons/en/visubot/04-sensoren.md":Kv,"../../lessons/en/visubot/05-bis-zur-wand.md":e9,"../../lessons/en/visubot/06-abstand.md":t9,"../../lessons/en/visubot/07-linie.md":n9,"../../lessons/en/visubot/08-farben.md":i9,"../../lessons/en/visubot/09-fallauswahl.md":a9,"../../lessons/en/visubot/10-tasten-joystick.md":s9,"../../lessons/en/visubot/11-licht.md":r9,"../../lessons/en/visubot/12-lautstaerke.md":o9,"../../lessons/en/visubot/13-neigung.md":l9,"../../lessons/en/visubot/14-leds.md":u9,"../../lessons/en/visubot/15-einzelne-leds.md":m9,"../../lessons/en/visubot/16-lautsprecher.md":c9,"../../lessons/en/visubot/17-arrays-melodie.md":d9,"../../lessons/en/visubot/18-bildschirm.md":h9,"../../lessons/en/visubot/19-zeichenketten.md":g9,"../../lessons/en/visubot/20-motoren.md":p9,"../../lessons/en/visubot/21-stoppuhr-akku.md":f9,"../../lessons/en/visubot/22-eigene-methoden.md":x9,"../../lessons/en/visubot/nachschlagen.md":b9}),qB=Object.assign({"../../lessons/de/visubot/aufgaben/alarmanlage.md":y9,"../../lessons/de/visubot/aufgaben/ausgang.md":v9,"../../lessons/de/visubot/aufgaben/binaer-zaehlen.md":w9,"../../lessons/de/visubot/aufgaben/dreieck.md":z9,"../../lessons/de/visubot/aufgaben/einparken.md":I9,"../../lessons/de/visubot/aufgaben/hindernis.md":k9,"../../lessons/de/visubot/aufgaben/knight-rider.md":S9,"../../lessons/de/visubot/aufgaben/labyrinth.md":_9,"../../lessons/de/visubot/aufgaben/linienfolger-stopp.md":T9,"../../lessons/de/visubot/aufgaben/morsen.md":O9,"../../lessons/de/visubot/aufgaben/nachtwaechter.md":A9,"../../lessons/de/visubot/aufgaben/slalom.md":P9,"../../lessons/de/visubot/aufgaben/spirale.md":j9,"../../lessons/de/visubot/aufgaben/treppe.md":C9,"../../lessons/de/visubot/aufgaben/tunnel.md":B9,"../../lessons/de/visubot/aufgaben/wald.md":D9,"../../lessons/en/visubot/aufgaben/alarmanlage.md":Z9,"../../lessons/en/visubot/aufgaben/ausgang.md":M9,"../../lessons/en/visubot/aufgaben/binaer-zaehlen.md":L9,"../../lessons/en/visubot/aufgaben/dreieck.md":W9,"../../lessons/en/visubot/aufgaben/einparken.md":E9,"../../lessons/en/visubot/aufgaben/hindernis.md":N9,"../../lessons/en/visubot/aufgaben/knight-rider.md":F9,"../../lessons/en/visubot/aufgaben/labyrinth.md":J9,"../../lessons/en/visubot/aufgaben/linienfolger-stopp.md":R9,"../../lessons/en/visubot/aufgaben/morsen.md":G9,"../../lessons/en/visubot/aufgaben/nachtwaechter.md":H9,"../../lessons/en/visubot/aufgaben/slalom.md":V9,"../../lessons/en/visubot/aufgaben/spirale.md":Q9,"../../lessons/en/visubot/aufgaben/treppe.md":q9,"../../lessons/en/visubot/aufgaben/tunnel.md":U9,"../../lessons/en/visubot/aufgaben/wald.md":$9}),UB=Object.assign({"../../lessons/diagramme/aufgabe-alter-haupt-loesung.visustruct":Y9,"../../lessons/diagramme/aufgabe-alter-unterprogramm-loesung.visustruct":X9,"../../lessons/diagramme/aufgabe-ballwurf-loesung.visustruct":K9,"../../lessons/diagramme/aufgabe-ballwurf-start.visustruct":ew,"../../lessons/diagramme/aufgabe-bestenliste-loesung.visustruct":tw,"../../lessons/diagramme/aufgabe-binaer-loesung.visustruct":nw,"../../lessons/diagramme/aufgabe-caesar-array-loesung.visustruct":iw,"../../lessons/diagramme/aufgabe-caesar-array-start.visustruct":aw,"../../lessons/diagramme/aufgabe-caesar-ascii-loesung.visustruct":sw,"../../lessons/diagramme/aufgabe-caesar-entschluesseln-loesung.visustruct":rw,"../../lessons/diagramme/aufgabe-collatz-loesung.visustruct":ow,"../../lessons/diagramme/aufgabe-durchschnitt-loesung.visustruct":lw,"../../lessons/diagramme/aufgabe-fibonacci-loesung.visustruct":uw,"../../lessons/diagramme/aufgabe-gerade-loesung.visustruct":mw,"../../lessons/diagramme/aufgabe-mehrwertsteuer-loesung.visustruct":cw,"../../lessons/diagramme/aufgabe-pin-java-loesung.visustruct":dw,"../../lessons/diagramme/aufgabe-pin-loesung.visustruct":hw,"../../lessons/diagramme/aufgabe-rechner-loesung.visustruct":gw,"../../lessons/diagramme/aufgabe-schiffe-loesung.visustruct":pw,"../../lessons/diagramme/aufgabe-schiffe-start.visustruct":fw,"../../lessons/diagramme/aufgabe-speisekarte-loesung.visustruct":xw,"../../lessons/diagramme/aufgabe-summe-loesung.visustruct":bw,"../../lessons/diagramme/aufgabe-tafeldienst-loesung.visustruct":yw,"../../lessons/diagramme/aufgabe-verdoppeln-loesung.visustruct":vw,"../../lessons/diagramme/aufgabe-verleih-java-loesung.visustruct":ww,"../../lessons/diagramme/aufgabe-verleih-loesung.visustruct":zw,"../../lessons/diagramme/aufgabe-vokabeln-loesung.visustruct":Iw,"../../lessons/diagramme/aufgabe-vokabeln-start.visustruct":kw,"../../lessons/diagramme/aufgabe-volljaehrig-loesung.visustruct":Sw,"../../lessons/diagramme/dt-buffered.visustruct":_w,"../../lessons/diagramme/dt-csv.visustruct":Tw,"../../lessons/diagramme/dt-json.visustruct":Ow,"../../lessons/diagramme/dt-lesen.visustruct":Aw,"../../lessons/diagramme/en/aufgabe-alter-haupt-loesung.visustruct":Pw,"../../lessons/diagramme/en/aufgabe-alter-unterprogramm-loesung.visustruct":jw,"../../lessons/diagramme/en/aufgabe-ballwurf-loesung.visustruct":Cw,"../../lessons/diagramme/en/aufgabe-ballwurf-start.visustruct":Bw,"../../lessons/diagramme/en/aufgabe-bestenliste-loesung.visustruct":Dw,"../../lessons/diagramme/en/aufgabe-binaer-loesung.visustruct":Zw,"../../lessons/diagramme/en/aufgabe-caesar-array-loesung.visustruct":Mw,"../../lessons/diagramme/en/aufgabe-caesar-array-start.visustruct":Lw,"../../lessons/diagramme/en/aufgabe-caesar-ascii-loesung.visustruct":Ww,"../../lessons/diagramme/en/aufgabe-caesar-entschluesseln-loesung.visustruct":Ew,"../../lessons/diagramme/en/aufgabe-collatz-loesung.visustruct":Nw,"../../lessons/diagramme/en/aufgabe-durchschnitt-loesung.visustruct":Fw,"../../lessons/diagramme/en/aufgabe-fibonacci-loesung.visustruct":Jw,"../../lessons/diagramme/en/aufgabe-gerade-loesung.visustruct":Rw,"../../lessons/diagramme/en/aufgabe-mehrwertsteuer-loesung.visustruct":Gw,"../../lessons/diagramme/en/aufgabe-pin-java-loesung.visustruct":Hw,"../../lessons/diagramme/en/aufgabe-pin-loesung.visustruct":Vw,"../../lessons/diagramme/en/aufgabe-rechner-loesung.visustruct":Qw,"../../lessons/diagramme/en/aufgabe-schiffe-loesung.visustruct":qw,"../../lessons/diagramme/en/aufgabe-schiffe-start.visustruct":Uw,"../../lessons/diagramme/en/aufgabe-speisekarte-loesung.visustruct":$w,"../../lessons/diagramme/en/aufgabe-summe-loesung.visustruct":Yw,"../../lessons/diagramme/en/aufgabe-tafeldienst-loesung.visustruct":Xw,"../../lessons/diagramme/en/aufgabe-verdoppeln-loesung.visustruct":Kw,"../../lessons/diagramme/en/aufgabe-verleih-java-loesung.visustruct":e5,"../../lessons/diagramme/en/aufgabe-verleih-loesung.visustruct":t5,"../../lessons/diagramme/en/aufgabe-vokabeln-loesung.visustruct":n5,"../../lessons/diagramme/en/aufgabe-vokabeln-start.visustruct":i5,"../../lessons/diagramme/en/aufgabe-volljaehrig-loesung.visustruct":a5,"../../lessons/diagramme/en/dt-buffered.visustruct":s5,"../../lessons/diagramme/en/dt-csv.visustruct":r5,"../../lessons/diagramme/en/dt-json.visustruct":o5,"../../lessons/diagramme/en/dt-lesen.visustruct":l5,"../../lessons/diagramme/en/kino-einmaleins-loesung.visustruct":u5,"../../lessons/diagramme/en/kino-frei-loesung.visustruct":m5,"../../lessons/diagramme/en/kino-frei-start.visustruct":c5,"../../lessons/diagramme/en/kino-karte-loesung.visustruct":d5,"../../lessons/diagramme/en/kino-karte-start.visustruct":h5,"../../lessons/diagramme/en/kino-saalplan.visustruct":g5,"../../lessons/diagramme/en/kino-verkaufen.visustruct":p5,"../../lessons/diagramme/en/l04-java-fehler-loesung.visustruct":f5,"../../lessons/diagramme/en/l04-java-fehler-start.visustruct":x5,"../../lessons/diagramme/en/l04-java-steckbrief-loesung.visustruct":b5,"../../lessons/diagramme/en/l04-rechnen.visustruct":y5,"../../lessons/diagramme/en/l04-reihenfolge-loesung.visustruct":v5,"../../lessons/diagramme/en/l04-reihenfolge-start.visustruct":w5,"../../lessons/diagramme/en/l04-tauschen-loesung.visustruct":z5,"../../lessons/diagramme/en/l04-tauschen-start.visustruct":I5,"../../lessons/diagramme/en/l04-tauschen.visustruct":k5,"../../lessons/diagramme/en/l05-datentypen.visustruct":S5,"../../lessons/diagramme/en/l05-division.visustruct":_5,"../../lessons/diagramme/en/l05-einkauf-loesung.visustruct":T5,"../../lessons/diagramme/en/l05-java-fehler-loesung.visustruct":O5,"../../lessons/diagramme/en/l05-java-fehler-start.visustruct":A5,"../../lessons/diagramme/en/l05-java-kino-loesung.visustruct":P5,"../../lessons/diagramme/en/l05-rechteck-loesung.visustruct":j5,"../../lessons/diagramme/en/l05-sekunden-loesung.visustruct":C5,"../../lessons/diagramme/en/l05-sekunden-start.visustruct":B5,"../../lessons/diagramme/en/l06-begruessung-loesung.visustruct":D5,"../../lessons/diagramme/en/l06-eva.visustruct":Z5,"../../lessons/diagramme/en/l06-java-fehler-loesung.visustruct":M5,"../../lessons/diagramme/en/l06-java-fehler-start.visustruct":L5,"../../lessons/diagramme/en/l06-java-tage-loesung.visustruct":W5,"../../lessons/diagramme/en/l06-mittelwert-loesung.visustruct":E5,"../../lessons/diagramme/en/l06-rechner-loesung.visustruct":N5,"../../lessons/diagramme/en/l07-alter-pruefen.visustruct":F5,"../../lessons/diagramme/en/l07-betrag-loesung.visustruct":J5,"../../lessons/diagramme/en/l07-gerade-loesung.visustruct":R5,"../../lessons/diagramme/en/l07-java-fehler-loesung.visustruct":G5,"../../lessons/diagramme/en/l07-java-fehler-start.visustruct":H5,"../../lessons/diagramme/en/l07-java-pizza-loesung.visustruct":V5,"../../lessons/diagramme/en/l07-java-pizza-start.visustruct":Q5,"../../lessons/diagramme/en/l07-maximum-loesung.visustruct":q5,"../../lessons/diagramme/en/l07-rabatt.visustruct":U5,"../../lessons/diagramme/en/l08-gueltig-loesung.visustruct":$5,"../../lessons/diagramme/en/l08-java-bestanden-loesung.visustruct":Y5,"../../lessons/diagramme/en/l08-java-fehler-loesung.visustruct":X5,"../../lessons/diagramme/en/l08-java-fehler-start.visustruct":K5,"../../lessons/diagramme/en/l08-jugendticket.visustruct":e6,"../../lessons/diagramme/en/l08-note.visustruct":t6,"../../lessons/diagramme/en/l08-schaltjahr-loesung.visustruct":n6,"../../lessons/diagramme/en/l08-wochenende-loesung.visustruct":i6,"../../lessons/diagramme/en/l09-ampel.visustruct":a6,"../../lessons/diagramme/en/l09-automat.visustruct":s6,"../../lessons/diagramme/en/l09-java-fehler-loesung.visustruct":r6,"../../lessons/diagramme/en/l09-java-fehler-start.visustruct":o6,"../../lessons/diagramme/en/l09-java-schule-loesung.visustruct":l6,"../../lessons/diagramme/en/l09-note-loesung.visustruct":u6,"../../lessons/diagramme/en/l09-rechner-loesung.visustruct":m6,"../../lessons/diagramme/en/l09-verschachtelt.visustruct":c6,"../../lessons/diagramme/en/l1-grundbausteine.visustruct":d6,"../../lessons/diagramme/en/l1-sequenz.visustruct":h6,"../../lessons/diagramme/en/l1-tee.visustruct":g6,"../../lessons/diagramme/en/l1-verzweigung.visustruct":p6,"../../lessons/diagramme/en/l1-wiederholung.visustruct":f6,"../../lessons/diagramme/en/l10-bis-n-loesung.visustruct":x6,"../../lessons/diagramme/en/l10-countdown.visustruct":b6,"../../lessons/diagramme/en/l10-endlos.visustruct":y6,"../../lessons/diagramme/en/l10-fakultaet.visustruct":v6,"../../lessons/diagramme/en/l10-java-fehler-loesung.visustruct":w6,"../../lessons/diagramme/en/l10-java-fehler-start.visustruct":z6,"../../lessons/diagramme/en/l10-java-wuerfel-loesung.visustruct":I6,"../../lessons/diagramme/en/l10-verdoppeln-loesung.visustruct":k6,"../../lessons/diagramme/en/l11-eingabe-pruefen.visustruct":S6,"../../lessons/diagramme/en/l11-einmal.visustruct":_6,"../../lessons/diagramme/en/l11-java-fehler-loesung.visustruct":T6,"../../lessons/diagramme/en/l11-java-fehler-start.visustruct":O6,"../../lessons/diagramme/en/l11-java-gerade-loesung.visustruct":A6,"../../lessons/diagramme/en/l11-note-loesung.visustruct":P6,"../../lessons/diagramme/en/l11-summe-loesung.visustruct":j6,"../../lessons/diagramme/en/l12-countdown-loesung.visustruct":C6,"../../lessons/diagramme/en/l12-einmaleins-loesung.visustruct":B6,"../../lessons/diagramme/en/l12-eins-bis-fuenf.visustruct":D6,"../../lessons/diagramme/en/l12-java-fehler-loesung.visustruct":Z6,"../../lessons/diagramme/en/l12-java-fehler-start.visustruct":M6,"../../lessons/diagramme/en/l12-java-verdoppeln-loesung.visustruct":L6,"../../lessons/diagramme/en/l12-summe.visustruct":W6,"../../lessons/diagramme/en/l13-dreieck.visustruct":E6,"../../lessons/diagramme/en/l13-gerade-eingaben-loesung.visustruct":N6,"../../lessons/diagramme/en/l13-gerade-zaehlen.visustruct":F6,"../../lessons/diagramme/en/l13-java-fehler-loesung.visustruct":J6,"../../lessons/diagramme/en/l13-java-fehler-start.visustruct":R6,"../../lessons/diagramme/en/l13-java-quadrate-loesung.visustruct":G6,"../../lessons/diagramme/en/l13-rechteck-loesung.visustruct":H6,"../../lessons/diagramme/en/l14-array-durchlaufen.visustruct":V6,"../../lessons/diagramme/en/l14-erster-letzter-loesung.visustruct":Q6,"../../lessons/diagramme/en/l14-java-fehler-loesung.visustruct":q6,"../../lessons/diagramme/en/l14-java-fehler-start.visustruct":U6,"../../lessons/diagramme/en/l14-java-treppe-loesung.visustruct":$6,"../../lessons/diagramme/en/l14-namen-eingeben.visustruct":Y6,"../../lessons/diagramme/en/l14-rueckwaerts-loesung.visustruct":X6,"../../lessons/diagramme/en/l14-summe-max-loesung.visustruct":K6,"../../lessons/diagramme/en/l14-summe-maximum.visustruct":ez,"../../lessons/diagramme/en/l15-bis-null-loesung.visustruct":tz,"../../lessons/diagramme/en/l15-endlos-aussprung.visustruct":nz,"../../lessons/diagramme/en/l15-flaeche-loesung.visustruct":iz,"../../lessons/diagramme/en/l15-flaeche-unterprogramm-loesung.visustruct":az,"../../lessons/diagramme/en/l15-hauptprogramm.visustruct":sz,"../../lessons/diagramme/en/l15-java-fehler-loesung.visustruct":rz,"../../lessons/diagramme/en/l15-java-fehler-start.visustruct":oz,"../../lessons/diagramme/en/l15-java-noten-loesung.visustruct":lz,"../../lessons/diagramme/en/l15-quadrat-haupt.visustruct":uz,"../../lessons/diagramme/en/l15-quadrat.visustruct":mz,"../../lessons/diagramme/en/l15-titel-loesung.visustruct":cz,"../../lessons/diagramme/en/l15-unterprogramm.visustruct":dz,"../../lessons/diagramme/en/l15-zeige-summe-haupt.visustruct":hz,"../../lessons/diagramme/en/l15-zeige-summe.visustruct":gz,"../../lessons/diagramme/en/l16-countdown-loesung.visustruct":pz,"../../lessons/diagramme/en/l16-countdown-start.visustruct":fz,"../../lessons/diagramme/en/l16-java-fehler-loesung.visustruct":xz,"../../lessons/diagramme/en/l16-java-fehler-start.visustruct":bz,"../../lessons/diagramme/en/l16-java-punkte-loesung.visustruct":yz,"../../lessons/diagramme/en/l16-schreibtisch.visustruct":vz,"../../lessons/diagramme/en/l16-summe-loesung.visustruct":wz,"../../lessons/diagramme/en/l16-summe-start.visustruct":zz,"../../lessons/diagramme/en/l17-beispiel.visustruct":Iz,"../../lessons/diagramme/en/l17-fakultaet-loesung.visustruct":kz,"../../lessons/diagramme/en/l17-java-brief-loesung.visustruct":Sz,"../../lessons/diagramme/en/l17-java-brief-start.visustruct":_z,"../../lessons/diagramme/en/l17-java-fehler-loesung.visustruct":Tz,"../../lessons/diagramme/en/l17-java-fehler-start.visustruct":Oz,"../../lessons/diagramme/en/l17-java-passwort-loesung.visustruct":Az,"../../lessons/diagramme/en/l17-ticket-loesung.visustruct":Pz,"../../lessons/diagramme/en/l18-beispiel.visustruct":jz,"../../lessons/diagramme/en/l18-java-fehler-loesung.visustruct":Cz,"../../lessons/diagramme/en/l18-java-fehler-start.visustruct":Bz,"../../lessons/diagramme/en/l18-java-kasse-loesung.visustruct":Dz,"../../lessons/diagramme/en/l18-js-loesung.visustruct":Zz,"../../lessons/diagramme/en/l18-python-loesung.visustruct":Mz,"../../lessons/diagramme/en/l19-java-fehler-loesung.visustruct":Lz,"../../lessons/diagramme/en/l19-java-fehler-start.visustruct":Wz,"../../lessons/diagramme/en/l19-java-zaehlen-loesung.visustruct":Ez,"../../lessons/diagramme/en/l2-ausgabe.visustruct":Nz,"../../lessons/diagramme/en/l2-hallo-loesung.visustruct":Fz,"../../lessons/diagramme/en/l2-zwei-zeilen-loesung.visustruct":Jz,"../../lessons/diagramme/en/l23-java-ergaenzen-loesung.visustruct":Rz,"../../lessons/diagramme/en/l23-java-ergaenzen-start.visustruct":Gz,"../../lessons/diagramme/en/l23-java-nummern-loesung.visustruct":Hz,"../../lessons/diagramme/en/l23-java-nummern-start.visustruct":Vz,"../../lessons/diagramme/en/l24-java-fuchs-loesung.visustruct":Qz,"../../lessons/diagramme/en/l24-java-fuchs-start.visustruct":qz,"../../lessons/diagramme/en/l24-java-laengster-loesung.visustruct":Uz,"../../lessons/diagramme/en/l24-java-laengster-start.visustruct":$z,"../../lessons/diagramme/en/l25-java-beste-loesung.visustruct":Yz,"../../lessons/diagramme/en/l25-java-beste-start.visustruct":Xz,"../../lessons/diagramme/en/l25-java-schnitt-loesung.visustruct":Kz,"../../lessons/diagramme/en/l25-java-schnitt-start.visustruct":e7,"../../lessons/diagramme/en/l26-java-namen-loesung.visustruct":t7,"../../lessons/diagramme/en/l26-java-namen-start.visustruct":n7,"../../lessons/diagramme/en/l26-java-schreiben-loesung.visustruct":i7,"../../lessons/diagramme/en/l26-java-schreiben-start.visustruct":a7,"../../lessons/diagramme/en/l27-java-json-loesung.visustruct":s7,"../../lessons/diagramme/en/l27-java-json-start.visustruct":r7,"../../lessons/diagramme/en/l27-java-saetze-loesung.visustruct":o7,"../../lessons/diagramme/en/l27-java-saetze-start.visustruct":l7,"../../lessons/diagramme/en/sim-kino-loesung.visustruct":u7,"../../lessons/diagramme/en/sim-kino-start.visustruct":m7,"../../lessons/diagramme/en/sim-tausch-loesung.visustruct":c7,"../../lessons/diagramme/en/sim-tausch-start.visustruct":d7,"../../lessons/diagramme/en/sim-tausch.visustruct":h7,"../../lessons/diagramme/en/ss-absteigend-loesung.visustruct":g7,"../../lessons/diagramme/en/ss-absteigend-start.visustruct":p7,"../../lessons/diagramme/en/ss-binaere-suche.visustruct":f7,"../../lessons/diagramme/en/ss-bubblesort.visustruct":x7,"../../lessons/diagramme/en/ss-karte-suchen-loesung.visustruct":b7,"../../lessons/diagramme/en/ss-lineare-suche.visustruct":y7,"../../lessons/diagramme/en/uebergabe-bonus-loesung.visustruct":v7,"../../lessons/diagramme/en/uebergabe-bonus-start.visustruct":w7,"../../lessons/diagramme/en/uebergabe-bonus-unterprogramm-loesung.visustruct":z7,"../../lessons/diagramme/en/uebergabe-haupt.visustruct":I7,"../../lessons/diagramme/en/uebergabe-leeren.visustruct":k7,"../../lessons/diagramme/en/uebergabe-verdopple.visustruct":S7,"../../lessons/diagramme/en/vb-abstand-anzeigen-loesung.visustruct":_7,"../../lessons/diagramme/en/vb-abstand-halten-loesung.visustruct":T7,"../../lessons/diagramme/en/vb-alarmanlage-loesung.visustruct":O7,"../../lessons/diagramme/en/vb-ampel-loesung.visustruct":A7,"../../lessons/diagramme/en/vb-ausgang-loesung.visustruct":P7,"../../lessons/diagramme/en/vb-begruessung-loesung.visustruct":j7,"../../lessons/diagramme/en/vb-binaer-zaehlen-loesung.visustruct":C7,"../../lessons/diagramme/en/vb-bis-rot-loesung.visustruct":B7,"../../lessons/diagramme/en/vb-bis-wand-loesung.visustruct":D7,"../../lessons/diagramme/en/vb-bis-ziel-loesung.visustruct":Z7,"../../lessons/diagramme/en/vb-buchstaben-loesung.visustruct":M7,"../../lessons/diagramme/en/vb-drei-lichter-loesung.visustruct":L7,"../../lessons/diagramme/en/vb-dreieck-loesung.visustruct":W7,"../../lessons/diagramme/en/vb-einparken-loesung.visustruct":E7,"../../lessons/diagramme/en/vb-farben-loesung.visustruct":N7,"../../lessons/diagramme/en/vb-farbweiche-loesung.visustruct":F7,"../../lessons/diagramme/en/vb-gas-bis-wand-loesung.visustruct":J7,"../../lessons/diagramme/en/vb-gerade-loesung.visustruct":R7,"../../lessons/diagramme/en/vb-hindernis-loesung.visustruct":G7,"../../lessons/diagramme/en/vb-java-akku-loesung.visustruct":H7,"../../lessons/diagramme/en/vb-java-blau-gruen-loesung.visustruct":V7,"../../lessons/diagramme/en/vb-java-blinken-loesung.visustruct":Q7,"../../lessons/diagramme/en/vb-java-countdown-loesung.visustruct":q7,"../../lessons/diagramme/en/vb-java-hoeher-loesung.visustruct":U7,"../../lessons/diagramme/en/vb-java-joystick-loesung.visustruct":$7,"../../lessons/diagramme/en/vb-java-laermampel-loesung.visustruct":Y7,"../../lessons/diagramme/en/vb-java-lauflicht-loesung.visustruct":X7,"../../lessons/diagramme/en/vb-java-linienfolger-loesung.visustruct":K7,"../../lessons/diagramme/en/vb-java-nachtlicht-ton-loesung.visustruct":eI,"../../lessons/diagramme/en/vb-java-rand-loesung.visustruct":tI,"../../lessons/diagramme/en/vb-java-rechteck-loesung.visustruct":nI,"../../lessons/diagramme/en/vb-java-textlaenge-loesung.visustruct":iI,"../../lessons/diagramme/en/vb-java-wand-piep-loesung.visustruct":aI,"../../lessons/diagramme/en/vb-java-wasserwaage-loesung.visustruct":sI,"../../lessons/diagramme/en/vb-klatschen-loesung.visustruct":rI,"../../lessons/diagramme/en/vb-knight-rider-loesung.visustruct":oI,"../../lessons/diagramme/en/vb-labyrinth-loesung.visustruct":lI,"../../lessons/diagramme/en/vb-linienfolger-stopp-loesung.visustruct":uI,"../../lessons/diagramme/en/vb-linienmuster-loesung.visustruct":mI,"../../lessons/diagramme/en/vb-melodie-loesung.visustruct":cI,"../../lessons/diagramme/en/vb-morsen-loesung.visustruct":dI,"../../lessons/diagramme/en/vb-nachtlicht-loesung.visustruct":hI,"../../lessons/diagramme/en/vb-nachtwaechter-loesung.visustruct":gI,"../../lessons/diagramme/en/vb-ohne-noten-loesung.visustruct":pI,"../../lessons/diagramme/en/vb-ohne-quadratzahl-loesung.visustruct":fI,"../../lessons/diagramme/en/vb-ohne-quadratzahl-unterprogramm-loesung.visustruct":xI,"../../lessons/diagramme/en/vb-ohne-rueckwaerts-loesung.visustruct":bI,"../../lessons/diagramme/en/vb-ohne-strecke-loesung.visustruct":yI,"../../lessons/diagramme/en/vb-ohne-summe-loesung.visustruct":vI,"../../lessons/diagramme/en/vb-quadrat-loesung.visustruct":wI,"../../lessons/diagramme/en/vb-quadrat-methode-loesung.visustruct":zI,"../../lessons/diagramme/en/vb-quadrat-schleife-loesung.visustruct":II,"../../lessons/diagramme/en/vb-quadrat-unterprogramm-loesung.visustruct":kI,"../../lessons/diagramme/en/vb-quadrat-verschachtelt-loesung.visustruct":SI,"../../lessons/diagramme/en/vb-rand-loesung.visustruct":_I,"../../lessons/diagramme/en/vb-schraeglage-loesung.visustruct":TI,"../../lessons/diagramme/en/vb-slalom-loesung.visustruct":OI,"../../lessons/diagramme/en/vb-spirale-loesung.visustruct":AI,"../../lessons/diagramme/en/vb-start-a-loesung.visustruct":PI,"../../lessons/diagramme/en/vb-tonleiter-loesung.visustruct":jI,"../../lessons/diagramme/en/vb-treppe-loesung.visustruct":CI,"../../lessons/diagramme/en/vb-tunnel-loesung.visustruct":BI,"../../lessons/diagramme/en/vb-variable-seite-loesung.visustruct":DI,"../../lessons/diagramme/en/vb-vier-quadrate-loesung.visustruct":ZI,"../../lessons/diagramme/en/vb-wald-loesung.visustruct":MI,"../../lessons/diagramme/en/vb-wand-vorn-loesung.visustruct":LI,"../../lessons/diagramme/en/vb-zwei-sekunden-loesung.visustruct":WI,"../../lessons/diagramme/en/zk-initialen-loesung.visustruct":EI,"../../lessons/diagramme/en/zk-mehr.visustruct":NI,"../../lessons/diagramme/en/zk-rueckwaerts-loesung.visustruct":FI,"../../lessons/diagramme/en/zk-split.visustruct":JI,"../../lessons/diagramme/en/zk-woerter-loesung.visustruct":RI,"../../lessons/diagramme/en/zk-zaehlen.visustruct":GI,"../../lessons/diagramme/en/zk-zeichen.visustruct":HI,"../../lessons/diagramme/kino-einmaleins-loesung.visustruct":VI,"../../lessons/diagramme/kino-frei-loesung.visustruct":QI,"../../lessons/diagramme/kino-frei-start.visustruct":qI,"../../lessons/diagramme/kino-karte-loesung.visustruct":UI,"../../lessons/diagramme/kino-karte-start.visustruct":$I,"../../lessons/diagramme/kino-saalplan.visustruct":YI,"../../lessons/diagramme/kino-verkaufen.visustruct":XI,"../../lessons/diagramme/l04-java-fehler-loesung.visustruct":KI,"../../lessons/diagramme/l04-java-fehler-start.visustruct":e8,"../../lessons/diagramme/l04-java-steckbrief-loesung.visustruct":t8,"../../lessons/diagramme/l04-rechnen.visustruct":n8,"../../lessons/diagramme/l04-reihenfolge-loesung.visustruct":i8,"../../lessons/diagramme/l04-reihenfolge-start.visustruct":a8,"../../lessons/diagramme/l04-tauschen-loesung.visustruct":s8,"../../lessons/diagramme/l04-tauschen-start.visustruct":r8,"../../lessons/diagramme/l04-tauschen.visustruct":o8,"../../lessons/diagramme/l05-datentypen.visustruct":l8,"../../lessons/diagramme/l05-division.visustruct":u8,"../../lessons/diagramme/l05-einkauf-loesung.visustruct":m8,"../../lessons/diagramme/l05-java-fehler-loesung.visustruct":c8,"../../lessons/diagramme/l05-java-fehler-start.visustruct":d8,"../../lessons/diagramme/l05-java-kino-loesung.visustruct":h8,"../../lessons/diagramme/l05-rechteck-loesung.visustruct":g8,"../../lessons/diagramme/l05-sekunden-loesung.visustruct":p8,"../../lessons/diagramme/l05-sekunden-start.visustruct":f8,"../../lessons/diagramme/l06-begruessung-loesung.visustruct":x8,"../../lessons/diagramme/l06-eva.visustruct":b8,"../../lessons/diagramme/l06-java-fehler-loesung.visustruct":y8,"../../lessons/diagramme/l06-java-fehler-start.visustruct":v8,"../../lessons/diagramme/l06-java-tage-loesung.visustruct":w8,"../../lessons/diagramme/l06-mittelwert-loesung.visustruct":z8,"../../lessons/diagramme/l06-rechner-loesung.visustruct":I8,"../../lessons/diagramme/l07-alter-pruefen.visustruct":k8,"../../lessons/diagramme/l07-betrag-loesung.visustruct":S8,"../../lessons/diagramme/l07-gerade-loesung.visustruct":_8,"../../lessons/diagramme/l07-java-fehler-loesung.visustruct":T8,"../../lessons/diagramme/l07-java-fehler-start.visustruct":O8,"../../lessons/diagramme/l07-java-pizza-loesung.visustruct":A8,"../../lessons/diagramme/l07-java-pizza-start.visustruct":P8,"../../lessons/diagramme/l07-maximum-loesung.visustruct":j8,"../../lessons/diagramme/l07-rabatt.visustruct":C8,"../../lessons/diagramme/l08-gueltig-loesung.visustruct":B8,"../../lessons/diagramme/l08-java-bestanden-loesung.visustruct":D8,"../../lessons/diagramme/l08-java-fehler-loesung.visustruct":Z8,"../../lessons/diagramme/l08-java-fehler-start.visustruct":M8,"../../lessons/diagramme/l08-jugendticket.visustruct":L8,"../../lessons/diagramme/l08-note.visustruct":W8,"../../lessons/diagramme/l08-schaltjahr-loesung.visustruct":E8,"../../lessons/diagramme/l08-wochenende-loesung.visustruct":N8,"../../lessons/diagramme/l09-ampel.visustruct":F8,"../../lessons/diagramme/l09-automat.visustruct":J8,"../../lessons/diagramme/l09-java-fehler-loesung.visustruct":R8,"../../lessons/diagramme/l09-java-fehler-start.visustruct":G8,"../../lessons/diagramme/l09-java-schule-loesung.visustruct":H8,"../../lessons/diagramme/l09-note-loesung.visustruct":V8,"../../lessons/diagramme/l09-rechner-loesung.visustruct":Q8,"../../lessons/diagramme/l09-verschachtelt.visustruct":q8,"../../lessons/diagramme/l1-grundbausteine.visustruct":U8,"../../lessons/diagramme/l1-sequenz.visustruct":$8,"../../lessons/diagramme/l1-tee.visustruct":Y8,"../../lessons/diagramme/l1-verzweigung.visustruct":X8,"../../lessons/diagramme/l1-wiederholung.visustruct":K8,"../../lessons/diagramme/l10-bis-n-loesung.visustruct":ek,"../../lessons/diagramme/l10-countdown.visustruct":tk,"../../lessons/diagramme/l10-endlos.visustruct":nk,"../../lessons/diagramme/l10-fakultaet.visustruct":ik,"../../lessons/diagramme/l10-java-fehler-loesung.visustruct":ak,"../../lessons/diagramme/l10-java-fehler-start.visustruct":sk,"../../lessons/diagramme/l10-java-wuerfel-loesung.visustruct":rk,"../../lessons/diagramme/l10-verdoppeln-loesung.visustruct":ok,"../../lessons/diagramme/l11-eingabe-pruefen.visustruct":lk,"../../lessons/diagramme/l11-einmal.visustruct":uk,"../../lessons/diagramme/l11-java-fehler-loesung.visustruct":mk,"../../lessons/diagramme/l11-java-fehler-start.visustruct":ck,"../../lessons/diagramme/l11-java-gerade-loesung.visustruct":dk,"../../lessons/diagramme/l11-note-loesung.visustruct":hk,"../../lessons/diagramme/l11-summe-loesung.visustruct":gk,"../../lessons/diagramme/l12-countdown-loesung.visustruct":pk,"../../lessons/diagramme/l12-einmaleins-loesung.visustruct":fk,"../../lessons/diagramme/l12-eins-bis-fuenf.visustruct":xk,"../../lessons/diagramme/l12-java-fehler-loesung.visustruct":bk,"../../lessons/diagramme/l12-java-fehler-start.visustruct":yk,"../../lessons/diagramme/l12-java-verdoppeln-loesung.visustruct":vk,"../../lessons/diagramme/l12-summe.visustruct":wk,"../../lessons/diagramme/l13-dreieck.visustruct":zk,"../../lessons/diagramme/l13-gerade-eingaben-loesung.visustruct":Ik,"../../lessons/diagramme/l13-gerade-zaehlen.visustruct":kk,"../../lessons/diagramme/l13-java-fehler-loesung.visustruct":Sk,"../../lessons/diagramme/l13-java-fehler-start.visustruct":_k,"../../lessons/diagramme/l13-java-quadrate-loesung.visustruct":Tk,"../../lessons/diagramme/l13-rechteck-loesung.visustruct":Ok,"../../lessons/diagramme/l14-array-durchlaufen.visustruct":Ak,"../../lessons/diagramme/l14-erster-letzter-loesung.visustruct":Pk,"../../lessons/diagramme/l14-java-fehler-loesung.visustruct":jk,"../../lessons/diagramme/l14-java-fehler-start.visustruct":Ck,"../../lessons/diagramme/l14-java-treppe-loesung.visustruct":Bk,"../../lessons/diagramme/l14-namen-eingeben.visustruct":Dk,"../../lessons/diagramme/l14-rueckwaerts-loesung.visustruct":Zk,"../../lessons/diagramme/l14-summe-max-loesung.visustruct":Mk,"../../lessons/diagramme/l14-summe-maximum.visustruct":Lk,"../../lessons/diagramme/l15-bis-null-loesung.visustruct":Wk,"../../lessons/diagramme/l15-endlos-aussprung.visustruct":Ek,"../../lessons/diagramme/l15-flaeche-loesung.visustruct":Nk,"../../lessons/diagramme/l15-flaeche-unterprogramm-loesung.visustruct":Fk,"../../lessons/diagramme/l15-hauptprogramm.visustruct":Jk,"../../lessons/diagramme/l15-java-fehler-loesung.visustruct":Rk,"../../lessons/diagramme/l15-java-fehler-start.visustruct":Gk,"../../lessons/diagramme/l15-java-noten-loesung.visustruct":Hk,"../../lessons/diagramme/l15-quadrat-haupt.visustruct":Vk,"../../lessons/diagramme/l15-quadrat.visustruct":Qk,"../../lessons/diagramme/l15-titel-loesung.visustruct":qk,"../../lessons/diagramme/l15-unterprogramm.visustruct":Uk,"../../lessons/diagramme/l15-zeige-summe-haupt.visustruct":$k,"../../lessons/diagramme/l15-zeige-summe.visustruct":Yk,"../../lessons/diagramme/l16-countdown-loesung.visustruct":Xk,"../../lessons/diagramme/l16-countdown-start.visustruct":Kk,"../../lessons/diagramme/l16-java-fehler-loesung.visustruct":eS,"../../lessons/diagramme/l16-java-fehler-start.visustruct":tS,"../../lessons/diagramme/l16-java-punkte-loesung.visustruct":nS,"../../lessons/diagramme/l16-schreibtisch.visustruct":iS,"../../lessons/diagramme/l16-summe-loesung.visustruct":aS,"../../lessons/diagramme/l16-summe-start.visustruct":sS,"../../lessons/diagramme/l17-beispiel.visustruct":rS,"../../lessons/diagramme/l17-fakultaet-loesung.visustruct":oS,"../../lessons/diagramme/l17-java-brief-loesung.visustruct":lS,"../../lessons/diagramme/l17-java-brief-start.visustruct":uS,"../../lessons/diagramme/l17-java-fehler-loesung.visustruct":mS,"../../lessons/diagramme/l17-java-fehler-start.visustruct":cS,"../../lessons/diagramme/l17-java-passwort-loesung.visustruct":dS,"../../lessons/diagramme/l17-ticket-loesung.visustruct":hS,"../../lessons/diagramme/l18-beispiel.visustruct":gS,"../../lessons/diagramme/l18-java-fehler-loesung.visustruct":pS,"../../lessons/diagramme/l18-java-fehler-start.visustruct":fS,"../../lessons/diagramme/l18-java-kasse-loesung.visustruct":xS,"../../lessons/diagramme/l18-js-loesung.visustruct":bS,"../../lessons/diagramme/l18-python-loesung.visustruct":yS,"../../lessons/diagramme/l19-java-fehler-loesung.visustruct":vS,"../../lessons/diagramme/l19-java-fehler-start.visustruct":wS,"../../lessons/diagramme/l19-java-zaehlen-loesung.visustruct":zS,"../../lessons/diagramme/l2-ausgabe.visustruct":IS,"../../lessons/diagramme/l2-hallo-loesung.visustruct":kS,"../../lessons/diagramme/l2-zwei-zeilen-loesung.visustruct":SS,"../../lessons/diagramme/l20-countdown-loesung.visustruct":_S,"../../lessons/diagramme/l23-java-ergaenzen-loesung.visustruct":TS,"../../lessons/diagramme/l23-java-ergaenzen-start.visustruct":OS,"../../lessons/diagramme/l23-java-nummern-loesung.visustruct":AS,"../../lessons/diagramme/l23-java-nummern-start.visustruct":PS,"../../lessons/diagramme/l24-java-fuchs-loesung.visustruct":jS,"../../lessons/diagramme/l24-java-fuchs-start.visustruct":CS,"../../lessons/diagramme/l24-java-laengster-loesung.visustruct":BS,"../../lessons/diagramme/l24-java-laengster-start.visustruct":DS,"../../lessons/diagramme/l25-java-beste-loesung.visustruct":ZS,"../../lessons/diagramme/l25-java-beste-start.visustruct":MS,"../../lessons/diagramme/l25-java-schnitt-loesung.visustruct":LS,"../../lessons/diagramme/l25-java-schnitt-start.visustruct":WS,"../../lessons/diagramme/l26-java-namen-loesung.visustruct":ES,"../../lessons/diagramme/l26-java-namen-start.visustruct":NS,"../../lessons/diagramme/l26-java-schreiben-loesung.visustruct":FS,"../../lessons/diagramme/l26-java-schreiben-start.visustruct":JS,"../../lessons/diagramme/l27-java-json-loesung.visustruct":RS,"../../lessons/diagramme/l27-java-json-start.visustruct":GS,"../../lessons/diagramme/l27-java-saetze-loesung.visustruct":HS,"../../lessons/diagramme/l27-java-saetze-start.visustruct":VS,"../../lessons/diagramme/pt/aufgabe-alter-haupt-loesung.visustruct":QS,"../../lessons/diagramme/pt/aufgabe-alter-unterprogramm-loesung.visustruct":qS,"../../lessons/diagramme/pt/aufgabe-ballwurf-loesung.visustruct":US,"../../lessons/diagramme/pt/aufgabe-ballwurf-start.visustruct":$S,"../../lessons/diagramme/pt/aufgabe-bestenliste-loesung.visustruct":YS,"../../lessons/diagramme/pt/aufgabe-binaer-loesung.visustruct":XS,"../../lessons/diagramme/pt/aufgabe-caesar-array-loesung.visustruct":KS,"../../lessons/diagramme/pt/aufgabe-caesar-array-start.visustruct":e_,"../../lessons/diagramme/pt/aufgabe-caesar-ascii-loesung.visustruct":t_,"../../lessons/diagramme/pt/aufgabe-caesar-entschluesseln-loesung.visustruct":n_,"../../lessons/diagramme/pt/aufgabe-collatz-loesung.visustruct":i_,"../../lessons/diagramme/pt/aufgabe-durchschnitt-loesung.visustruct":a_,"../../lessons/diagramme/pt/aufgabe-fibonacci-loesung.visustruct":s_,"../../lessons/diagramme/pt/aufgabe-gerade-loesung.visustruct":r_,"../../lessons/diagramme/pt/aufgabe-mehrwertsteuer-loesung.visustruct":o_,"../../lessons/diagramme/pt/aufgabe-pin-java-loesung.visustruct":l_,"../../lessons/diagramme/pt/aufgabe-pin-loesung.visustruct":u_,"../../lessons/diagramme/pt/aufgabe-rechner-loesung.visustruct":m_,"../../lessons/diagramme/pt/aufgabe-schiffe-loesung.visustruct":c_,"../../lessons/diagramme/pt/aufgabe-schiffe-start.visustruct":d_,"../../lessons/diagramme/pt/aufgabe-speisekarte-loesung.visustruct":h_,"../../lessons/diagramme/pt/aufgabe-summe-loesung.visustruct":g_,"../../lessons/diagramme/pt/aufgabe-tafeldienst-loesung.visustruct":p_,"../../lessons/diagramme/pt/aufgabe-verdoppeln-loesung.visustruct":f_,"../../lessons/diagramme/pt/aufgabe-verleih-java-loesung.visustruct":x_,"../../lessons/diagramme/pt/aufgabe-verleih-loesung.visustruct":b_,"../../lessons/diagramme/pt/aufgabe-vokabeln-loesung.visustruct":y_,"../../lessons/diagramme/pt/aufgabe-vokabeln-start.visustruct":v_,"../../lessons/diagramme/pt/aufgabe-volljaehrig-loesung.visustruct":w_,"../../lessons/diagramme/pt/dt-buffered.visustruct":z_,"../../lessons/diagramme/pt/dt-csv.visustruct":I_,"../../lessons/diagramme/pt/dt-json.visustruct":k_,"../../lessons/diagramme/pt/dt-lesen.visustruct":S_,"../../lessons/diagramme/pt/kino-einmaleins-loesung.visustruct":__,"../../lessons/diagramme/pt/kino-frei-loesung.visustruct":T_,"../../lessons/diagramme/pt/kino-frei-start.visustruct":O_,"../../lessons/diagramme/pt/kino-karte-loesung.visustruct":A_,"../../lessons/diagramme/pt/kino-karte-start.visustruct":P_,"../../lessons/diagramme/pt/kino-saalplan.visustruct":j_,"../../lessons/diagramme/pt/kino-verkaufen.visustruct":C_,"../../lessons/diagramme/pt/l04-java-fehler-loesung.visustruct":B_,"../../lessons/diagramme/pt/l04-java-fehler-start.visustruct":D_,"../../lessons/diagramme/pt/l04-java-steckbrief-loesung.visustruct":Z_,"../../lessons/diagramme/pt/l04-rechnen.visustruct":M_,"../../lessons/diagramme/pt/l04-reihenfolge-loesung.visustruct":L_,"../../lessons/diagramme/pt/l04-reihenfolge-start.visustruct":W_,"../../lessons/diagramme/pt/l04-tauschen-loesung.visustruct":E_,"../../lessons/diagramme/pt/l04-tauschen-start.visustruct":N_,"../../lessons/diagramme/pt/l04-tauschen.visustruct":F_,"../../lessons/diagramme/pt/l05-datentypen.visustruct":J_,"../../lessons/diagramme/pt/l05-division.visustruct":R_,"../../lessons/diagramme/pt/l05-einkauf-loesung.visustruct":G_,"../../lessons/diagramme/pt/l05-java-fehler-loesung.visustruct":H_,"../../lessons/diagramme/pt/l05-java-fehler-start.visustruct":V_,"../../lessons/diagramme/pt/l05-java-kino-loesung.visustruct":Q_,"../../lessons/diagramme/pt/l05-rechteck-loesung.visustruct":q_,"../../lessons/diagramme/pt/l05-sekunden-loesung.visustruct":U_,"../../lessons/diagramme/pt/l05-sekunden-start.visustruct":$_,"../../lessons/diagramme/pt/l06-begruessung-loesung.visustruct":Y_,"../../lessons/diagramme/pt/l06-eva.visustruct":X_,"../../lessons/diagramme/pt/l06-java-fehler-loesung.visustruct":K_,"../../lessons/diagramme/pt/l06-java-fehler-start.visustruct":eT,"../../lessons/diagramme/pt/l06-java-tage-loesung.visustruct":tT,"../../lessons/diagramme/pt/l06-mittelwert-loesung.visustruct":nT,"../../lessons/diagramme/pt/l06-rechner-loesung.visustruct":iT,"../../lessons/diagramme/pt/l07-alter-pruefen.visustruct":aT,"../../lessons/diagramme/pt/l07-betrag-loesung.visustruct":sT,"../../lessons/diagramme/pt/l07-gerade-loesung.visustruct":rT,"../../lessons/diagramme/pt/l07-java-fehler-loesung.visustruct":oT,"../../lessons/diagramme/pt/l07-java-fehler-start.visustruct":lT,"../../lessons/diagramme/pt/l07-java-pizza-loesung.visustruct":uT,"../../lessons/diagramme/pt/l07-java-pizza-start.visustruct":mT,"../../lessons/diagramme/pt/l07-maximum-loesung.visustruct":cT,"../../lessons/diagramme/pt/l07-rabatt.visustruct":dT,"../../lessons/diagramme/pt/l08-gueltig-loesung.visustruct":hT,"../../lessons/diagramme/pt/l08-java-bestanden-loesung.visustruct":gT,"../../lessons/diagramme/pt/l08-java-fehler-loesung.visustruct":pT,"../../lessons/diagramme/pt/l08-java-fehler-start.visustruct":fT,"../../lessons/diagramme/pt/l08-jugendticket.visustruct":xT,"../../lessons/diagramme/pt/l08-note.visustruct":bT,"../../lessons/diagramme/pt/l08-schaltjahr-loesung.visustruct":yT,"../../lessons/diagramme/pt/l08-wochenende-loesung.visustruct":vT,"../../lessons/diagramme/pt/l09-ampel.visustruct":wT,"../../lessons/diagramme/pt/l09-automat.visustruct":zT,"../../lessons/diagramme/pt/l09-java-fehler-loesung.visustruct":IT,"../../lessons/diagramme/pt/l09-java-fehler-start.visustruct":kT,"../../lessons/diagramme/pt/l09-java-schule-loesung.visustruct":ST,"../../lessons/diagramme/pt/l09-note-loesung.visustruct":_T,"../../lessons/diagramme/pt/l09-rechner-loesung.visustruct":TT,"../../lessons/diagramme/pt/l09-verschachtelt.visustruct":OT,"../../lessons/diagramme/pt/l1-grundbausteine.visustruct":AT,"../../lessons/diagramme/pt/l1-sequenz.visustruct":PT,"../../lessons/diagramme/pt/l1-tee.visustruct":jT,"../../lessons/diagramme/pt/l1-verzweigung.visustruct":CT,"../../lessons/diagramme/pt/l1-wiederholung.visustruct":BT,"../../lessons/diagramme/pt/l10-bis-n-loesung.visustruct":DT,"../../lessons/diagramme/pt/l10-countdown.visustruct":ZT,"../../lessons/diagramme/pt/l10-endlos.visustruct":MT,"../../lessons/diagramme/pt/l10-fakultaet.visustruct":LT,"../../lessons/diagramme/pt/l10-java-fehler-loesung.visustruct":WT,"../../lessons/diagramme/pt/l10-java-fehler-start.visustruct":ET,"../../lessons/diagramme/pt/l10-java-wuerfel-loesung.visustruct":NT,"../../lessons/diagramme/pt/l10-verdoppeln-loesung.visustruct":FT,"../../lessons/diagramme/pt/l11-eingabe-pruefen.visustruct":JT,"../../lessons/diagramme/pt/l11-einmal.visustruct":RT,"../../lessons/diagramme/pt/l11-java-fehler-loesung.visustruct":GT,"../../lessons/diagramme/pt/l11-java-fehler-start.visustruct":HT,"../../lessons/diagramme/pt/l11-java-gerade-loesung.visustruct":VT,"../../lessons/diagramme/pt/l11-note-loesung.visustruct":QT,"../../lessons/diagramme/pt/l11-summe-loesung.visustruct":qT,"../../lessons/diagramme/pt/l12-countdown-loesung.visustruct":UT,"../../lessons/diagramme/pt/l12-einmaleins-loesung.visustruct":$T,"../../lessons/diagramme/pt/l12-eins-bis-fuenf.visustruct":YT,"../../lessons/diagramme/pt/l12-java-fehler-loesung.visustruct":XT,"../../lessons/diagramme/pt/l12-java-fehler-start.visustruct":KT,"../../lessons/diagramme/pt/l12-java-verdoppeln-loesung.visustruct":eO,"../../lessons/diagramme/pt/l12-summe.visustruct":tO,"../../lessons/diagramme/pt/l13-dreieck.visustruct":nO,"../../lessons/diagramme/pt/l13-gerade-eingaben-loesung.visustruct":iO,"../../lessons/diagramme/pt/l13-gerade-zaehlen.visustruct":aO,"../../lessons/diagramme/pt/l13-java-fehler-loesung.visustruct":sO,"../../lessons/diagramme/pt/l13-java-fehler-start.visustruct":rO,"../../lessons/diagramme/pt/l13-java-quadrate-loesung.visustruct":oO,"../../lessons/diagramme/pt/l13-rechteck-loesung.visustruct":lO,"../../lessons/diagramme/pt/l14-array-durchlaufen.visustruct":uO,"../../lessons/diagramme/pt/l14-erster-letzter-loesung.visustruct":mO,"../../lessons/diagramme/pt/l14-java-fehler-loesung.visustruct":cO,"../../lessons/diagramme/pt/l14-java-fehler-start.visustruct":dO,"../../lessons/diagramme/pt/l14-java-treppe-loesung.visustruct":hO,"../../lessons/diagramme/pt/l14-namen-eingeben.visustruct":gO,"../../lessons/diagramme/pt/l14-rueckwaerts-loesung.visustruct":pO,"../../lessons/diagramme/pt/l14-summe-max-loesung.visustruct":fO,"../../lessons/diagramme/pt/l14-summe-maximum.visustruct":xO,"../../lessons/diagramme/pt/l15-bis-null-loesung.visustruct":bO,"../../lessons/diagramme/pt/l15-endlos-aussprung.visustruct":yO,"../../lessons/diagramme/pt/l15-flaeche-loesung.visustruct":vO,"../../lessons/diagramme/pt/l15-hauptprogramm.visustruct":wO,"../../lessons/diagramme/pt/l15-java-fehler-loesung.visustruct":zO,"../../lessons/diagramme/pt/l15-java-fehler-start.visustruct":IO,"../../lessons/diagramme/pt/l15-java-noten-loesung.visustruct":kO,"../../lessons/diagramme/pt/l15-quadrat-haupt.visustruct":SO,"../../lessons/diagramme/pt/l15-quadrat.visustruct":_O,"../../lessons/diagramme/pt/l15-titel-loesung.visustruct":TO,"../../lessons/diagramme/pt/l15-unterprogramm.visustruct":OO,"../../lessons/diagramme/pt/l15-zeige-summe-haupt.visustruct":AO,"../../lessons/diagramme/pt/l15-zeige-summe.visustruct":PO,"../../lessons/diagramme/pt/l16-countdown-loesung.visustruct":jO,"../../lessons/diagramme/pt/l16-countdown-start.visustruct":CO,"../../lessons/diagramme/pt/l16-java-fehler-loesung.visustruct":BO,"../../lessons/diagramme/pt/l16-java-fehler-start.visustruct":DO,"../../lessons/diagramme/pt/l16-java-punkte-loesung.visustruct":ZO,"../../lessons/diagramme/pt/l16-schreibtisch.visustruct":MO,"../../lessons/diagramme/pt/l16-summe-loesung.visustruct":LO,"../../lessons/diagramme/pt/l16-summe-start.visustruct":WO,"../../lessons/diagramme/pt/l17-beispiel.visustruct":EO,"../../lessons/diagramme/pt/l17-fakultaet-loesung.visustruct":NO,"../../lessons/diagramme/pt/l17-java-brief-loesung.visustruct":FO,"../../lessons/diagramme/pt/l17-java-brief-start.visustruct":JO,"../../lessons/diagramme/pt/l17-java-fehler-loesung.visustruct":RO,"../../lessons/diagramme/pt/l17-java-fehler-start.visustruct":GO,"../../lessons/diagramme/pt/l17-java-passwort-loesung.visustruct":HO,"../../lessons/diagramme/pt/l17-ticket-loesung.visustruct":VO,"../../lessons/diagramme/pt/l18-beispiel.visustruct":QO,"../../lessons/diagramme/pt/l18-java-fehler-loesung.visustruct":qO,"../../lessons/diagramme/pt/l18-java-fehler-start.visustruct":UO,"../../lessons/diagramme/pt/l18-java-kasse-loesung.visustruct":$O,"../../lessons/diagramme/pt/l18-js-loesung.visustruct":YO,"../../lessons/diagramme/pt/l18-python-loesung.visustruct":XO,"../../lessons/diagramme/pt/l19-java-fehler-loesung.visustruct":KO,"../../lessons/diagramme/pt/l19-java-fehler-start.visustruct":eA,"../../lessons/diagramme/pt/l19-java-zaehlen-loesung.visustruct":tA,"../../lessons/diagramme/pt/l2-ausgabe.visustruct":nA,"../../lessons/diagramme/pt/l2-hallo-loesung.visustruct":iA,"../../lessons/diagramme/pt/l2-zwei-zeilen-loesung.visustruct":aA,"../../lessons/diagramme/pt/l23-java-ergaenzen-loesung.visustruct":sA,"../../lessons/diagramme/pt/l23-java-ergaenzen-start.visustruct":rA,"../../lessons/diagramme/pt/l23-java-nummern-loesung.visustruct":oA,"../../lessons/diagramme/pt/l23-java-nummern-start.visustruct":lA,"../../lessons/diagramme/pt/l24-java-fuchs-loesung.visustruct":uA,"../../lessons/diagramme/pt/l24-java-fuchs-start.visustruct":mA,"../../lessons/diagramme/pt/l24-java-laengster-loesung.visustruct":cA,"../../lessons/diagramme/pt/l24-java-laengster-start.visustruct":dA,"../../lessons/diagramme/pt/l25-java-beste-loesung.visustruct":hA,"../../lessons/diagramme/pt/l25-java-beste-start.visustruct":gA,"../../lessons/diagramme/pt/l25-java-schnitt-loesung.visustruct":pA,"../../lessons/diagramme/pt/l25-java-schnitt-start.visustruct":fA,"../../lessons/diagramme/pt/l26-java-namen-loesung.visustruct":xA,"../../lessons/diagramme/pt/l26-java-namen-start.visustruct":bA,"../../lessons/diagramme/pt/l26-java-schreiben-loesung.visustruct":yA,"../../lessons/diagramme/pt/l26-java-schreiben-start.visustruct":vA,"../../lessons/diagramme/pt/l27-java-json-loesung.visustruct":wA,"../../lessons/diagramme/pt/l27-java-json-start.visustruct":zA,"../../lessons/diagramme/pt/l27-java-saetze-loesung.visustruct":IA,"../../lessons/diagramme/pt/l27-java-saetze-start.visustruct":kA,"../../lessons/diagramme/pt/sim-kino-loesung.visustruct":SA,"../../lessons/diagramme/pt/sim-kino-start.visustruct":_A,"../../lessons/diagramme/pt/sim-tausch-loesung.visustruct":TA,"../../lessons/diagramme/pt/sim-tausch-start.visustruct":OA,"../../lessons/diagramme/pt/sim-tausch.visustruct":AA,"../../lessons/diagramme/pt/ss-absteigend-loesung.visustruct":PA,"../../lessons/diagramme/pt/ss-absteigend-start.visustruct":jA,"../../lessons/diagramme/pt/ss-binaere-suche.visustruct":CA,"../../lessons/diagramme/pt/ss-bubblesort.visustruct":BA,"../../lessons/diagramme/pt/ss-karte-suchen-loesung.visustruct":DA,"../../lessons/diagramme/pt/ss-lineare-suche.visustruct":ZA,"../../lessons/diagramme/pt/uebergabe-bonus-loesung.visustruct":MA,"../../lessons/diagramme/pt/uebergabe-bonus-start.visustruct":LA,"../../lessons/diagramme/pt/uebergabe-bonus-unterprogramm-loesung.visustruct":WA,"../../lessons/diagramme/pt/uebergabe-haupt.visustruct":EA,"../../lessons/diagramme/pt/uebergabe-leeren.visustruct":NA,"../../lessons/diagramme/pt/uebergabe-verdopple.visustruct":FA,"../../lessons/diagramme/pt/zk-initialen-loesung.visustruct":JA,"../../lessons/diagramme/pt/zk-mehr.visustruct":RA,"../../lessons/diagramme/pt/zk-rueckwaerts-loesung.visustruct":GA,"../../lessons/diagramme/pt/zk-split.visustruct":HA,"../../lessons/diagramme/pt/zk-woerter-loesung.visustruct":VA,"../../lessons/diagramme/pt/zk-zaehlen.visustruct":QA,"../../lessons/diagramme/pt/zk-zeichen.visustruct":qA,"../../lessons/diagramme/sim-kino-loesung.visustruct":UA,"../../lessons/diagramme/sim-kino-start.visustruct":$A,"../../lessons/diagramme/sim-tausch-loesung.visustruct":YA,"../../lessons/diagramme/sim-tausch-start.visustruct":XA,"../../lessons/diagramme/sim-tausch.visustruct":KA,"../../lessons/diagramme/ss-absteigend-loesung.visustruct":eP,"../../lessons/diagramme/ss-absteigend-start.visustruct":tP,"../../lessons/diagramme/ss-binaere-suche.visustruct":nP,"../../lessons/diagramme/ss-bubblesort.visustruct":iP,"../../lessons/diagramme/ss-karte-suchen-loesung.visustruct":aP,"../../lessons/diagramme/ss-lineare-suche.visustruct":sP,"../../lessons/diagramme/uebergabe-bonus-loesung.visustruct":rP,"../../lessons/diagramme/uebergabe-bonus-start.visustruct":oP,"../../lessons/diagramme/uebergabe-bonus-unterprogramm-loesung.visustruct":lP,"../../lessons/diagramme/uebergabe-haupt.visustruct":uP,"../../lessons/diagramme/uebergabe-leeren.visustruct":mP,"../../lessons/diagramme/uebergabe-verdopple.visustruct":cP,"../../lessons/diagramme/vb-abstand-anzeigen-loesung.visustruct":dP,"../../lessons/diagramme/vb-abstand-halten-loesung.visustruct":hP,"../../lessons/diagramme/vb-alarmanlage-loesung.visustruct":gP,"../../lessons/diagramme/vb-ampel-loesung.visustruct":pP,"../../lessons/diagramme/vb-ausgang-loesung.visustruct":fP,"../../lessons/diagramme/vb-begruessung-loesung.visustruct":xP,"../../lessons/diagramme/vb-binaer-zaehlen-loesung.visustruct":bP,"../../lessons/diagramme/vb-bis-rot-loesung.visustruct":yP,"../../lessons/diagramme/vb-bis-wand-loesung.visustruct":vP,"../../lessons/diagramme/vb-bis-ziel-loesung.visustruct":wP,"../../lessons/diagramme/vb-buchstaben-loesung.visustruct":zP,"../../lessons/diagramme/vb-drei-lichter-loesung.visustruct":IP,"../../lessons/diagramme/vb-dreieck-loesung.visustruct":kP,"../../lessons/diagramme/vb-einparken-loesung.visustruct":SP,"../../lessons/diagramme/vb-farben-loesung.visustruct":_P,"../../lessons/diagramme/vb-farbweiche-loesung.visustruct":TP,"../../lessons/diagramme/vb-gas-bis-wand-loesung.visustruct":OP,"../../lessons/diagramme/vb-gerade-loesung.visustruct":AP,"../../lessons/diagramme/vb-hindernis-loesung.visustruct":PP,"../../lessons/diagramme/vb-java-akku-loesung.visustruct":jP,"../../lessons/diagramme/vb-java-blau-gruen-loesung.visustruct":CP,"../../lessons/diagramme/vb-java-blinken-loesung.visustruct":BP,"../../lessons/diagramme/vb-java-countdown-loesung.visustruct":DP,"../../lessons/diagramme/vb-java-hoeher-loesung.visustruct":ZP,"../../lessons/diagramme/vb-java-joystick-loesung.visustruct":MP,"../../lessons/diagramme/vb-java-laermampel-loesung.visustruct":LP,"../../lessons/diagramme/vb-java-lauflicht-loesung.visustruct":WP,"../../lessons/diagramme/vb-java-linienfolger-loesung.visustruct":EP,"../../lessons/diagramme/vb-java-nachtlicht-ton-loesung.visustruct":NP,"../../lessons/diagramme/vb-java-rand-loesung.visustruct":FP,"../../lessons/diagramme/vb-java-rechteck-loesung.visustruct":JP,"../../lessons/diagramme/vb-java-textlaenge-loesung.visustruct":RP,"../../lessons/diagramme/vb-java-wand-piep-loesung.visustruct":GP,"../../lessons/diagramme/vb-java-wasserwaage-loesung.visustruct":HP,"../../lessons/diagramme/vb-klatschen-loesung.visustruct":VP,"../../lessons/diagramme/vb-knight-rider-loesung.visustruct":QP,"../../lessons/diagramme/vb-labyrinth-loesung.visustruct":qP,"../../lessons/diagramme/vb-linienfolger-stopp-loesung.visustruct":UP,"../../lessons/diagramme/vb-linienmuster-loesung.visustruct":$P,"../../lessons/diagramme/vb-melodie-loesung.visustruct":YP,"../../lessons/diagramme/vb-morsen-loesung.visustruct":XP,"../../lessons/diagramme/vb-nachtlicht-loesung.visustruct":KP,"../../lessons/diagramme/vb-nachtwaechter-loesung.visustruct":ej,"../../lessons/diagramme/vb-ohne-noten-loesung.visustruct":tj,"../../lessons/diagramme/vb-ohne-quadratzahl-loesung.visustruct":nj,"../../lessons/diagramme/vb-ohne-quadratzahl-unterprogramm-loesung.visustruct":ij,"../../lessons/diagramme/vb-ohne-rueckwaerts-loesung.visustruct":aj,"../../lessons/diagramme/vb-ohne-strecke-loesung.visustruct":sj,"../../lessons/diagramme/vb-ohne-summe-loesung.visustruct":rj,"../../lessons/diagramme/vb-quadrat-loesung.visustruct":oj,"../../lessons/diagramme/vb-quadrat-methode-loesung.visustruct":lj,"../../lessons/diagramme/vb-quadrat-schleife-loesung.visustruct":uj,"../../lessons/diagramme/vb-quadrat-unterprogramm-loesung.visustruct":mj,"../../lessons/diagramme/vb-quadrat-verschachtelt-loesung.visustruct":cj,"../../lessons/diagramme/vb-rand-loesung.visustruct":dj,"../../lessons/diagramme/vb-schraeglage-loesung.visustruct":hj,"../../lessons/diagramme/vb-slalom-loesung.visustruct":gj,"../../lessons/diagramme/vb-spirale-loesung.visustruct":pj,"../../lessons/diagramme/vb-start-a-loesung.visustruct":fj,"../../lessons/diagramme/vb-tonleiter-loesung.visustruct":xj,"../../lessons/diagramme/vb-treppe-loesung.visustruct":bj,"../../lessons/diagramme/vb-tunnel-loesung.visustruct":yj,"../../lessons/diagramme/vb-variable-seite-loesung.visustruct":vj,"../../lessons/diagramme/vb-vier-quadrate-loesung.visustruct":wj,"../../lessons/diagramme/vb-wald-loesung.visustruct":zj,"../../lessons/diagramme/vb-wand-vorn-loesung.visustruct":Ij,"../../lessons/diagramme/vb-zwei-sekunden-loesung.visustruct":kj,"../../lessons/diagramme/zk-initialen-loesung.visustruct":Sj,"../../lessons/diagramme/zk-mehr.visustruct":_j,"../../lessons/diagramme/zk-rueckwaerts-loesung.visustruct":Tj,"../../lessons/diagramme/zk-split.visustruct":Oj,"../../lessons/diagramme/zk-woerter-loesung.visustruct":Aj,"../../lessons/diagramme/zk-zaehlen.visustruct":Pj,"../../lessons/diagramme/zk-zeichen.visustruct":jj}),$B=Object.assign({"../../lessons/welten/ausgang-1.txt":Cj,"../../lessons/welten/ausgang-2.txt":Bj,"../../lessons/welten/ecke.txt":Dj,"../../lessons/welten/farbe-1.txt":Zj,"../../lessons/welten/farbe-2.txt":Mj,"../../lessons/welten/farbe-3.txt":Lj,"../../lessons/welten/farbe-4.txt":Wj,"../../lessons/welten/hindernis-1.txt":Ej,"../../lessons/welten/hindernis-2.txt":Nj,"../../lessons/welten/labyrinth-1.txt":Fj,"../../lessons/welten/labyrinth-2.txt":Jj,"../../lessons/welten/linie-1.txt":Rj,"../../lessons/welten/linie-2.txt":Gj,"../../lessons/welten/linie-rot-1.txt":Hj,"../../lessons/welten/linie-rot-2.txt":Vj,"../../lessons/welten/parken-1.txt":Qj,"../../lessons/welten/parken-2.txt":qj,"../../lessons/welten/rand-1.txt":Uj,"../../lessons/welten/rand-2.txt":$j,"../../lessons/welten/slalom.txt":Yj,"../../lessons/welten/tunnel-1.txt":Xj,"../../lessons/welten/tunnel-2.txt":Kj,"../../lessons/welten/wald-1.txt":eC,"../../lessons/welten/wald-2.txt":tC,"../../lessons/welten/wand-frei.txt":nC,"../../lessons/welten/wand-kurz.txt":iC,"../../lessons/welten/wand-lang.txt":aC,"../../lessons/welten/wand-mittel.txt":sC,"../../lessons/welten/wand-nah.txt":rC,"../../lessons/welten/zeit-1.txt":oC,"../../lessons/welten/ziel-kurz.txt":lC,"../../lessons/welten/ziel-lang.txt":uC}),YB=Object.assign({"../../lessons/bilder/aufgabe-mehrwertsteuer.svg":mC,"../../lessons/bilder/ben-shneiderman.jpg":cC,"../../lessons/bilder/caesar-ascii.svg":dC,"../../lessons/bilder/caesar-scheibe.svg":hC,"../../lessons/bilder/caesar-verschiebung.svg":gC,"../../lessons/bilder/en/aufgabe-mehrwertsteuer.svg":pC,"../../lessons/bilder/en/kino-saal.svg":fC,"../../lessons/bilder/en/kino-schleifen.svg":xC,"../../lessons/bilder/en/l01-pap.svg":bC,"../../lessons/bilder/en/l02-einfuegen.svg":yC,"../../lessons/bilder/en/l04-variable.svg":vC,"../../lessons/bilder/en/l04-zuweisung.svg":wC,"../../lessons/bilder/en/l05-tauschen.svg":zC,"../../lessons/bilder/en/l08-zahlenstrahl.svg":IC,"../../lessons/bilder/en/l10-kopfgesteuert.svg":kC,"../../lessons/bilder/en/l11-vergleich.svg":SC,"../../lessons/bilder/en/l12-for-ablauf.svg":_C,"../../lessons/bilder/en/l14-array.svg":TC,"../../lessons/bilder/en/mvc-klick.svg":OC,"../../lessons/bilder/en/ss-binaere-suche.svg":AC,"../../lessons/bilder/en/ss-bubblesort.svg":PC,"../../lessons/bilder/en/ss-lineare-suche.svg":jC,"../../lessons/bilder/en/ss-vergleiche.svg":CC,"../../lessons/bilder/en/uebergabe.svg":BC,"../../lessons/bilder/en/zk-zeichen.svg":DC,"../../lessons/bilder/ike-nassi.jpg":ZC,"../../lessons/bilder/kino-saal.svg":MC,"../../lessons/bilder/kino-schleifen.svg":LC,"../../lessons/bilder/l01-pap.svg":WC,"../../lessons/bilder/l02-einfuegen.svg":EC,"../../lessons/bilder/l04-variable.svg":NC,"../../lessons/bilder/l04-zuweisung.svg":FC,"../../lessons/bilder/l05-tauschen.svg":JC,"../../lessons/bilder/l08-zahlenstrahl.svg":RC,"../../lessons/bilder/l09-wahrheitstabelle.svg":GC,"../../lessons/bilder/l10-kopfgesteuert.svg":HC,"../../lessons/bilder/l11-vergleich.svg":VC,"../../lessons/bilder/l12-for-ablauf.svg":QC,"../../lessons/bilder/l14-array.svg":qC,"../../lessons/bilder/mvc-klick.svg":UC,"../../lessons/bilder/pt/aufgabe-mehrwertsteuer.svg":$C,"../../lessons/bilder/pt/kino-saal.svg":YC,"../../lessons/bilder/pt/kino-schleifen.svg":XC,"../../lessons/bilder/pt/l01-pap.svg":KC,"../../lessons/bilder/pt/l02-einfuegen.svg":eB,"../../lessons/bilder/pt/l04-variable.svg":tB,"../../lessons/bilder/pt/l04-zuweisung.svg":nB,"../../lessons/bilder/pt/l05-tauschen.svg":iB,"../../lessons/bilder/pt/l08-zahlenstrahl.svg":aB,"../../lessons/bilder/pt/l10-kopfgesteuert.svg":sB,"../../lessons/bilder/pt/l11-vergleich.svg":rB,"../../lessons/bilder/pt/l12-for-ablauf.svg":oB,"../../lessons/bilder/pt/l14-array.svg":lB,"../../lessons/bilder/pt/mvc-klick.svg":uB,"../../lessons/bilder/pt/schiffe-versenken.svg":mB,"../../lessons/bilder/pt/ss-binaere-suche.svg":cB,"../../lessons/bilder/pt/ss-bubblesort.svg":dB,"../../lessons/bilder/pt/ss-lineare-suche.svg":hB,"../../lessons/bilder/pt/ss-vergleiche.svg":gB,"../../lessons/bilder/pt/uebergabe.svg":pB,"../../lessons/bilder/pt/zk-zeichen.svg":fB,"../../lessons/bilder/schiffe-versenken.svg":xB,"../../lessons/bilder/ss-binaere-suche.svg":bB,"../../lessons/bilder/ss-bubblesort.svg":yB,"../../lessons/bilder/ss-lineare-suche.svg":vB,"../../lessons/bilder/ss-vergleiche.svg":wB,"../../lessons/bilder/uebergabe.svg":zB,"../../lessons/bilder/zk-zeichen.svg":IB}),Jh=i=>i.replace(/^.*\//,"");function F1(i,e,t){const n=s=>new Map(Object.entries(i).filter(([r])=>{var o;return((o=e.exec(r))==null?void 0:o[1])===s}).map(([r,o])=>[Jh(r),o]));return[...new Map([...n("en"),...t==="en"?[]:n(t)])]}function Mu(i){return i==="de"?"de":i==="pt-PT"?"pt":"en"}let w1="en",Ot=[],Tn=[],Ma="",La=[],ds="off";function Lu(i){i!==ds&&(ds=i,Ot=[],hs(w1))}function hs(i){var s,r,o;if(e3(i),i===w1&&Ot.length>0)return;w1=i;const e=F1(VB,/\/lessons\/([^/]+)\/[^/]+\.md$/,i),t=(l,u)=>l.filter(([m])=>/^\d+/.test(m)).map(([m,c])=>GB(Nu(c,u),`${i}/${m}`)).sort((m,c)=>m.number-c.number),n=(l,u,m)=>l.map(([c,d])=>{const h=HB(Nu(d,m),`${i}/${u}${c}`);return m&&h.after!==void 0?{...h,after:m.get(h.after)??h.after}:h}),a=F1(QB,/\/lessons\/([^/]+)\/aufgaben\/[^/]+\.md$/,i);if(ds==="on"){const l=F1(Zu,/\/lessons\/([^/]+)\/visubot\/[^/]+\.md$/,i),u=XB(Eu(e),Eu(l)),m=t(e,u.normal),c=h=>{var g;return((g=[...m].reverse().find(f=>u.normal.get(f.number)({...h,number:u.normal.get(h.number)})),...t(l,u.robot).map(h=>{const g=u.robot.get(h.number);return{...h,number:g,section:c(g),robot:!0}})].sort((h,g)=>h.number-g.number);const d=F1(qB,/\/lessons\/([^/]+)\/visubot\/aufgaben\/[^/]+\.md$/,i);Tn=[...n(a,"aufgaben/",u.normal),...n(d,"visubot/aufgaben/",u.robot).map(h=>({...h,robot:!0}))]}else Ot=t(e),Tn=n(a,"aufgaben/");Tn.sort((l,u)=>(l.after??0)-(u.after??0)||l.level-u.level||l.title.localeCompare(u.title,i));for(const l of[...Ot.flatMap(u=>u.steps.flatMap(m=>m.blocks)),...Tn.flatMap(u=>u.blocks)])l.kind==="textFile"&&m3(l.name,l.content);if(Ma=((s=e.find(([l])=>l==="nachschlagen.md"))==null?void 0:s[1])??"",ds!=="off"){const l=(r=F1(Zu,/\/lessons\/([^/]+)\/visubot\/[^/]+\.md$/,i).find(([u])=>u==="nachschlagen.md"))==null?void 0:r[1];l&&(Ma=`${Ma.trimEnd()} +`)){const h=/^##\s+(.*)$/.exec(d);h?(u(),l={title:h[1].trim(),lines:[]}):l?l.lines.push(d):o.push(d)}if(u(),r.length===0)throw new te(`${e}: Keine Schritte (## Überschrift) gefunden.`);GB(r,e);const m=t.get("titel");if(!m)throw new te(`${e}: „titel:“ fehlt.`);return{id:a,number:s,title:m,section:t.get("bereich")??"",summary:t.get("kurz")??o.join(" ").trim(),steps:r}}function VB(i,e){const{meta:t,body:n}=Nh(i,e),a=t.get("titel");if(!a)throw new te(`${e}: „titel:“ fehlt.`);const s=t.get("nach");return{id:e.replace(/^.*\//,"").replace(/\.md$/,""),title:a,after:s?Number(s):void 0,level:Number(t.get("stufe")??"1")||1,blocks:Jh(n,e)}}function Du(i,e){const t=i.split(/\s*,\s*/).map(n=>n.trim()).filter(Boolean);for(const n of t)if(!l3(n))throw new te(`${e}: Unbekanntes Teil „${n}“. Bekannt: ${ah.join(", ")}.`);return t}const QB=Object.assign({"../../lessons/de/01-was-ist-ein-struktogramm.md":Xx,"../../lessons/de/02-der-editor.md":Kx,"../../lessons/de/03-speichern-oeffnen-exportieren.md":eb,"../../lessons/de/04-variablen-und-datentypen.md":tb,"../../lessons/de/05-sequenz.md":nb,"../../lessons/de/06-eingabe-und-ausgabe.md":ib,"../../lessons/de/07-simulation-und-schreibtischtest.md":ab,"../../lessons/de/08-verzweigung.md":sb,"../../lessons/de/09-bedingungen-verknuepfen.md":rb,"../../lessons/de/10-fallauswahl.md":ob,"../../lessons/de/11-while-schleife.md":lb,"../../lessons/de/12-do-while-schleife.md":ub,"../../lessons/de/13-for-schleife.md":mb,"../../lessons/de/14-verschachteln.md":cb,"../../lessons/de/15-arrays.md":db,"../../lessons/de/16-zweidimensionale-arrays.md":hb,"../../lessons/de/17-zeichenketten.md":gb,"../../lessons/de/18-aufruf-und-aussprung.md":pb,"../../lessons/de/19-suchen-und-sortieren.md":fb,"../../lessons/de/20-java.md":xb,"../../lessons/de/21-python-und-javascript.md":bb,"../../lessons/de/22-try-und-catch.md":yb,"../../lessons/de/23-text-einlesen-und-speichern.md":vb,"../../lessons/de/24-zeile-fuer-zeile.md":wb,"../../lessons/de/25-tabellen-als-csv.md":zb,"../../lessons/de/26-json.md":Ib,"../../lessons/de/27-formate-im-vergleich.md":kb,"../../lessons/de/28-erstes-fenster.md":Sb,"../../lessons/de/29-knopf-im-fenster.md":_b,"../../lessons/de/30-der-knopf-reagiert.md":Tb,"../../lessons/de/31-zahl-verdoppeln.md":Ob,"../../lessons/de/32-klickzaehler.md":Ab,"../../lessons/de/33-ampel.md":Pb,"../../lessons/de/34-notenrechner.md":jb,"../../lessons/de/35-taschenrechner.md":Cb,"../../lessons/de/36-zahlenraten.md":Bb,"../../lessons/de/37-viele-knoepfe-ein-zuhoerer.md":Db,"../../lessons/de/38-innere-klassen.md":Zb,"../../lessons/de/39-zwei-reiter.md":Mb,"../../lessons/de/40-model-view-controller.md":Lb,"../../lessons/de/begriffe.md":Wb,"../../lessons/de/nachschlagen.md":Eb,"../../lessons/en/01-was-ist-ein-struktogramm.md":Nb,"../../lessons/en/02-der-editor.md":Fb,"../../lessons/en/03-speichern-oeffnen-exportieren.md":Jb,"../../lessons/en/04-variablen-und-datentypen.md":Rb,"../../lessons/en/05-sequenz.md":Gb,"../../lessons/en/06-eingabe-und-ausgabe.md":Hb,"../../lessons/en/07-simulation-und-schreibtischtest.md":Vb,"../../lessons/en/08-verzweigung.md":Qb,"../../lessons/en/09-bedingungen-verknuepfen.md":qb,"../../lessons/en/10-fallauswahl.md":Ub,"../../lessons/en/11-while-schleife.md":$b,"../../lessons/en/12-do-while-schleife.md":Yb,"../../lessons/en/13-for-schleife.md":Xb,"../../lessons/en/14-verschachteln.md":Kb,"../../lessons/en/15-arrays.md":e4,"../../lessons/en/16-zweidimensionale-arrays.md":t4,"../../lessons/en/17-zeichenketten.md":n4,"../../lessons/en/18-aufruf-und-aussprung.md":i4,"../../lessons/en/19-suchen-und-sortieren.md":a4,"../../lessons/en/20-java.md":s4,"../../lessons/en/21-python-und-javascript.md":r4,"../../lessons/en/22-try-und-catch.md":o4,"../../lessons/en/23-text-einlesen-und-speichern.md":l4,"../../lessons/en/24-zeile-fuer-zeile.md":u4,"../../lessons/en/25-tabellen-als-csv.md":m4,"../../lessons/en/26-json.md":c4,"../../lessons/en/27-formate-im-vergleich.md":d4,"../../lessons/en/28-erstes-fenster.md":h4,"../../lessons/en/29-knopf-im-fenster.md":g4,"../../lessons/en/30-der-knopf-reagiert.md":p4,"../../lessons/en/31-zahl-verdoppeln.md":f4,"../../lessons/en/32-klickzaehler.md":x4,"../../lessons/en/33-ampel.md":b4,"../../lessons/en/34-notenrechner.md":y4,"../../lessons/en/35-taschenrechner.md":v4,"../../lessons/en/36-zahlenraten.md":w4,"../../lessons/en/37-viele-knoepfe-ein-zuhoerer.md":z4,"../../lessons/en/38-innere-klassen.md":I4,"../../lessons/en/39-zwei-reiter.md":k4,"../../lessons/en/40-model-view-controller.md":S4,"../../lessons/en/begriffe.md":_4,"../../lessons/en/nachschlagen.md":T4,"../../lessons/pt/01-was-ist-ein-struktogramm.md":O4,"../../lessons/pt/02-der-editor.md":A4,"../../lessons/pt/03-speichern-oeffnen-exportieren.md":P4,"../../lessons/pt/04-variablen-und-datentypen.md":j4,"../../lessons/pt/05-sequenz.md":C4,"../../lessons/pt/06-eingabe-und-ausgabe.md":B4,"../../lessons/pt/07-simulation-und-schreibtischtest.md":D4,"../../lessons/pt/08-verzweigung.md":Z4,"../../lessons/pt/09-bedingungen-verknuepfen.md":M4,"../../lessons/pt/10-fallauswahl.md":L4,"../../lessons/pt/11-while-schleife.md":W4,"../../lessons/pt/12-do-while-schleife.md":E4,"../../lessons/pt/13-for-schleife.md":N4,"../../lessons/pt/14-verschachteln.md":F4,"../../lessons/pt/15-arrays.md":J4,"../../lessons/pt/16-zweidimensionale-arrays.md":R4,"../../lessons/pt/17-zeichenketten.md":G4,"../../lessons/pt/18-aufruf-und-aussprung.md":H4,"../../lessons/pt/19-suchen-und-sortieren.md":V4,"../../lessons/pt/20-java.md":Q4,"../../lessons/pt/21-python-und-javascript.md":q4,"../../lessons/pt/22-try-und-catch.md":U4,"../../lessons/pt/23-text-einlesen-und-speichern.md":$4,"../../lessons/pt/24-zeile-fuer-zeile.md":Y4,"../../lessons/pt/25-tabellen-als-csv.md":X4,"../../lessons/pt/26-json.md":K4,"../../lessons/pt/27-formate-im-vergleich.md":ey,"../../lessons/pt/28-erstes-fenster.md":ty,"../../lessons/pt/29-knopf-im-fenster.md":ny,"../../lessons/pt/30-der-knopf-reagiert.md":iy,"../../lessons/pt/31-zahl-verdoppeln.md":ay,"../../lessons/pt/32-klickzaehler.md":sy,"../../lessons/pt/33-ampel.md":ry,"../../lessons/pt/34-notenrechner.md":oy,"../../lessons/pt/35-taschenrechner.md":ly,"../../lessons/pt/36-zahlenraten.md":uy,"../../lessons/pt/37-viele-knoepfe-ein-zuhoerer.md":my,"../../lessons/pt/38-innere-klassen.md":cy,"../../lessons/pt/39-zwei-reiter.md":dy,"../../lessons/pt/40-model-view-controller.md":hy,"../../lessons/pt/begriffe.md":gy,"../../lessons/pt/nachschlagen.md":py}),qB=Object.assign({"../../lessons/de/aufgaben/alter-unterprogramm.md":fy,"../../lessons/de/aufgaben/ballwurf.md":xy,"../../lessons/de/aufgaben/bestenliste.md":by,"../../lessons/de/aufgaben/binaerzahl.md":yy,"../../lessons/de/aufgaben/caesar.md":vy,"../../lessons/de/aufgaben/collatz.md":wy,"../../lessons/de/aufgaben/einheitenrechner.md":zy,"../../lessons/de/aufgaben/fibonacci.md":Iy,"../../lessons/de/aufgaben/gerade-ungerade.md":ky,"../../lessons/de/aufgaben/mehrwertsteuer.md":Sy,"../../lessons/de/aufgaben/notendurchschnitt.md":_y,"../../lessons/de/aufgaben/pin-pruefen.md":Ty,"../../lessons/de/aufgaben/schiffe-versenken.md":Oy,"../../lessons/de/aufgaben/speisekarte.md":Ay,"../../lessons/de/aufgaben/summe-bilden.md":Py,"../../lessons/de/aufgaben/tafeldienst.md":jy,"../../lessons/de/aufgaben/taschenrechner.md":Cy,"../../lessons/de/aufgaben/verleih-menue.md":By,"../../lessons/de/aufgaben/vokabeltrainer.md":Dy,"../../lessons/de/aufgaben/volljaehrig.md":Zy,"../../lessons/de/aufgaben/wuerfel-mvc.md":My,"../../lessons/de/aufgaben/zahl-verdoppeln.md":Ly,"../../lessons/en/aufgaben/alter-unterprogramm.md":Wy,"../../lessons/en/aufgaben/ballwurf.md":Ey,"../../lessons/en/aufgaben/bestenliste.md":Ny,"../../lessons/en/aufgaben/binaerzahl.md":Fy,"../../lessons/en/aufgaben/caesar.md":Jy,"../../lessons/en/aufgaben/collatz.md":Ry,"../../lessons/en/aufgaben/einheitenrechner.md":Gy,"../../lessons/en/aufgaben/fibonacci.md":Hy,"../../lessons/en/aufgaben/gerade-ungerade.md":Vy,"../../lessons/en/aufgaben/mehrwertsteuer.md":Qy,"../../lessons/en/aufgaben/notendurchschnitt.md":qy,"../../lessons/en/aufgaben/pin-pruefen.md":Uy,"../../lessons/en/aufgaben/schiffe-versenken.md":$y,"../../lessons/en/aufgaben/speisekarte.md":Yy,"../../lessons/en/aufgaben/summe-bilden.md":Xy,"../../lessons/en/aufgaben/tafeldienst.md":Ky,"../../lessons/en/aufgaben/taschenrechner.md":ev,"../../lessons/en/aufgaben/verleih-menue.md":tv,"../../lessons/en/aufgaben/vokabeltrainer.md":nv,"../../lessons/en/aufgaben/volljaehrig.md":iv,"../../lessons/en/aufgaben/wuerfel-mvc.md":av,"../../lessons/en/aufgaben/zahl-verdoppeln.md":sv,"../../lessons/pt/aufgaben/alter-unterprogramm.md":rv,"../../lessons/pt/aufgaben/ballwurf.md":ov,"../../lessons/pt/aufgaben/bestenliste.md":lv,"../../lessons/pt/aufgaben/binaerzahl.md":uv,"../../lessons/pt/aufgaben/caesar.md":mv,"../../lessons/pt/aufgaben/collatz.md":cv,"../../lessons/pt/aufgaben/einheitenrechner.md":dv,"../../lessons/pt/aufgaben/fibonacci.md":hv,"../../lessons/pt/aufgaben/gerade-ungerade.md":gv,"../../lessons/pt/aufgaben/mehrwertsteuer.md":pv,"../../lessons/pt/aufgaben/notendurchschnitt.md":fv,"../../lessons/pt/aufgaben/pin-pruefen.md":xv,"../../lessons/pt/aufgaben/schiffe-versenken.md":bv,"../../lessons/pt/aufgaben/speisekarte.md":yv,"../../lessons/pt/aufgaben/summe-bilden.md":vv,"../../lessons/pt/aufgaben/tafeldienst.md":wv,"../../lessons/pt/aufgaben/taschenrechner.md":zv,"../../lessons/pt/aufgaben/verleih-menue.md":Iv,"../../lessons/pt/aufgaben/vokabeltrainer.md":kv,"../../lessons/pt/aufgaben/volljaehrig.md":Sv,"../../lessons/pt/aufgaben/wuerfel-mvc.md":_v,"../../lessons/pt/aufgaben/zahl-verdoppeln.md":Tv}),Zu=Object.assign({"../../lessons/de/visubot/01-der-mbot2.md":Ov,"../../lessons/de/visubot/02-das-quadrat.md":Av,"../../lessons/de/visubot/03-variablen-und-ausgabe.md":Pv,"../../lessons/de/visubot/04-sensoren.md":jv,"../../lessons/de/visubot/05-bis-zur-wand.md":Cv,"../../lessons/de/visubot/06-abstand.md":Bv,"../../lessons/de/visubot/07-linie.md":Dv,"../../lessons/de/visubot/08-farben.md":Zv,"../../lessons/de/visubot/09-fallauswahl.md":Mv,"../../lessons/de/visubot/10-tasten-joystick.md":Lv,"../../lessons/de/visubot/11-licht.md":Wv,"../../lessons/de/visubot/12-lautstaerke.md":Ev,"../../lessons/de/visubot/13-neigung.md":Nv,"../../lessons/de/visubot/14-leds.md":Fv,"../../lessons/de/visubot/15-einzelne-leds.md":Jv,"../../lessons/de/visubot/16-lautsprecher.md":Rv,"../../lessons/de/visubot/17-arrays-melodie.md":Gv,"../../lessons/de/visubot/18-bildschirm.md":Hv,"../../lessons/de/visubot/19-zeichenketten.md":Vv,"../../lessons/de/visubot/20-motoren.md":Qv,"../../lessons/de/visubot/21-stoppuhr-akku.md":qv,"../../lessons/de/visubot/22-eigene-methoden.md":Uv,"../../lessons/de/visubot/nachschlagen.md":$v,"../../lessons/en/visubot/01-der-mbot2.md":Yv,"../../lessons/en/visubot/02-das-quadrat.md":Xv,"../../lessons/en/visubot/03-variablen-und-ausgabe.md":Kv,"../../lessons/en/visubot/04-sensoren.md":e9,"../../lessons/en/visubot/05-bis-zur-wand.md":t9,"../../lessons/en/visubot/06-abstand.md":n9,"../../lessons/en/visubot/07-linie.md":i9,"../../lessons/en/visubot/08-farben.md":a9,"../../lessons/en/visubot/09-fallauswahl.md":s9,"../../lessons/en/visubot/10-tasten-joystick.md":r9,"../../lessons/en/visubot/11-licht.md":o9,"../../lessons/en/visubot/12-lautstaerke.md":l9,"../../lessons/en/visubot/13-neigung.md":u9,"../../lessons/en/visubot/14-leds.md":m9,"../../lessons/en/visubot/15-einzelne-leds.md":c9,"../../lessons/en/visubot/16-lautsprecher.md":d9,"../../lessons/en/visubot/17-arrays-melodie.md":h9,"../../lessons/en/visubot/18-bildschirm.md":g9,"../../lessons/en/visubot/19-zeichenketten.md":p9,"../../lessons/en/visubot/20-motoren.md":f9,"../../lessons/en/visubot/21-stoppuhr-akku.md":x9,"../../lessons/en/visubot/22-eigene-methoden.md":b9,"../../lessons/en/visubot/nachschlagen.md":y9}),UB=Object.assign({"../../lessons/de/visubot/aufgaben/alarmanlage.md":v9,"../../lessons/de/visubot/aufgaben/ausgang.md":w9,"../../lessons/de/visubot/aufgaben/binaer-zaehlen.md":z9,"../../lessons/de/visubot/aufgaben/dreieck.md":I9,"../../lessons/de/visubot/aufgaben/einparken.md":k9,"../../lessons/de/visubot/aufgaben/hindernis.md":S9,"../../lessons/de/visubot/aufgaben/knight-rider.md":_9,"../../lessons/de/visubot/aufgaben/labyrinth.md":T9,"../../lessons/de/visubot/aufgaben/linienfolger-stopp.md":O9,"../../lessons/de/visubot/aufgaben/morsen.md":A9,"../../lessons/de/visubot/aufgaben/nachtwaechter.md":P9,"../../lessons/de/visubot/aufgaben/slalom.md":j9,"../../lessons/de/visubot/aufgaben/spirale.md":C9,"../../lessons/de/visubot/aufgaben/treppe.md":B9,"../../lessons/de/visubot/aufgaben/tunnel.md":D9,"../../lessons/de/visubot/aufgaben/wald.md":Z9,"../../lessons/en/visubot/aufgaben/alarmanlage.md":M9,"../../lessons/en/visubot/aufgaben/ausgang.md":L9,"../../lessons/en/visubot/aufgaben/binaer-zaehlen.md":W9,"../../lessons/en/visubot/aufgaben/dreieck.md":E9,"../../lessons/en/visubot/aufgaben/einparken.md":N9,"../../lessons/en/visubot/aufgaben/hindernis.md":F9,"../../lessons/en/visubot/aufgaben/knight-rider.md":J9,"../../lessons/en/visubot/aufgaben/labyrinth.md":R9,"../../lessons/en/visubot/aufgaben/linienfolger-stopp.md":G9,"../../lessons/en/visubot/aufgaben/morsen.md":H9,"../../lessons/en/visubot/aufgaben/nachtwaechter.md":V9,"../../lessons/en/visubot/aufgaben/slalom.md":Q9,"../../lessons/en/visubot/aufgaben/spirale.md":q9,"../../lessons/en/visubot/aufgaben/treppe.md":U9,"../../lessons/en/visubot/aufgaben/tunnel.md":$9,"../../lessons/en/visubot/aufgaben/wald.md":Y9}),$B=Object.assign({"../../lessons/diagramme/aufgabe-alter-haupt-loesung.visustruct":X9,"../../lessons/diagramme/aufgabe-alter-unterprogramm-loesung.visustruct":K9,"../../lessons/diagramme/aufgabe-ballwurf-loesung.visustruct":ew,"../../lessons/diagramme/aufgabe-ballwurf-start.visustruct":tw,"../../lessons/diagramme/aufgabe-bestenliste-loesung.visustruct":nw,"../../lessons/diagramme/aufgabe-binaer-loesung.visustruct":iw,"../../lessons/diagramme/aufgabe-caesar-array-loesung.visustruct":aw,"../../lessons/diagramme/aufgabe-caesar-array-start.visustruct":sw,"../../lessons/diagramme/aufgabe-caesar-ascii-loesung.visustruct":rw,"../../lessons/diagramme/aufgabe-caesar-entschluesseln-loesung.visustruct":ow,"../../lessons/diagramme/aufgabe-collatz-loesung.visustruct":lw,"../../lessons/diagramme/aufgabe-durchschnitt-loesung.visustruct":uw,"../../lessons/diagramme/aufgabe-fibonacci-loesung.visustruct":mw,"../../lessons/diagramme/aufgabe-gerade-loesung.visustruct":cw,"../../lessons/diagramme/aufgabe-mehrwertsteuer-loesung.visustruct":dw,"../../lessons/diagramme/aufgabe-pin-java-loesung.visustruct":hw,"../../lessons/diagramme/aufgabe-pin-loesung.visustruct":gw,"../../lessons/diagramme/aufgabe-rechner-loesung.visustruct":pw,"../../lessons/diagramme/aufgabe-schiffe-loesung.visustruct":fw,"../../lessons/diagramme/aufgabe-schiffe-start.visustruct":xw,"../../lessons/diagramme/aufgabe-speisekarte-loesung.visustruct":bw,"../../lessons/diagramme/aufgabe-summe-loesung.visustruct":yw,"../../lessons/diagramme/aufgabe-tafeldienst-loesung.visustruct":vw,"../../lessons/diagramme/aufgabe-verdoppeln-loesung.visustruct":ww,"../../lessons/diagramme/aufgabe-verleih-java-loesung.visustruct":zw,"../../lessons/diagramme/aufgabe-verleih-loesung.visustruct":Iw,"../../lessons/diagramme/aufgabe-vokabeln-loesung.visustruct":kw,"../../lessons/diagramme/aufgabe-vokabeln-start.visustruct":Sw,"../../lessons/diagramme/aufgabe-volljaehrig-loesung.visustruct":_w,"../../lessons/diagramme/dt-buffered.visustruct":Tw,"../../lessons/diagramme/dt-csv.visustruct":Ow,"../../lessons/diagramme/dt-json.visustruct":Aw,"../../lessons/diagramme/dt-lesen.visustruct":Pw,"../../lessons/diagramme/en/aufgabe-alter-haupt-loesung.visustruct":jw,"../../lessons/diagramme/en/aufgabe-alter-unterprogramm-loesung.visustruct":Cw,"../../lessons/diagramme/en/aufgabe-ballwurf-loesung.visustruct":Bw,"../../lessons/diagramme/en/aufgabe-ballwurf-start.visustruct":Dw,"../../lessons/diagramme/en/aufgabe-bestenliste-loesung.visustruct":Zw,"../../lessons/diagramme/en/aufgabe-binaer-loesung.visustruct":Mw,"../../lessons/diagramme/en/aufgabe-caesar-array-loesung.visustruct":Lw,"../../lessons/diagramme/en/aufgabe-caesar-array-start.visustruct":Ww,"../../lessons/diagramme/en/aufgabe-caesar-ascii-loesung.visustruct":Ew,"../../lessons/diagramme/en/aufgabe-caesar-entschluesseln-loesung.visustruct":Nw,"../../lessons/diagramme/en/aufgabe-collatz-loesung.visustruct":Fw,"../../lessons/diagramme/en/aufgabe-durchschnitt-loesung.visustruct":Jw,"../../lessons/diagramme/en/aufgabe-fibonacci-loesung.visustruct":Rw,"../../lessons/diagramme/en/aufgabe-gerade-loesung.visustruct":Gw,"../../lessons/diagramme/en/aufgabe-mehrwertsteuer-loesung.visustruct":Hw,"../../lessons/diagramme/en/aufgabe-pin-java-loesung.visustruct":Vw,"../../lessons/diagramme/en/aufgabe-pin-loesung.visustruct":Qw,"../../lessons/diagramme/en/aufgabe-rechner-loesung.visustruct":qw,"../../lessons/diagramme/en/aufgabe-schiffe-loesung.visustruct":Uw,"../../lessons/diagramme/en/aufgabe-schiffe-start.visustruct":$w,"../../lessons/diagramme/en/aufgabe-speisekarte-loesung.visustruct":Yw,"../../lessons/diagramme/en/aufgabe-summe-loesung.visustruct":Xw,"../../lessons/diagramme/en/aufgabe-tafeldienst-loesung.visustruct":Kw,"../../lessons/diagramme/en/aufgabe-verdoppeln-loesung.visustruct":e5,"../../lessons/diagramme/en/aufgabe-verleih-java-loesung.visustruct":t5,"../../lessons/diagramme/en/aufgabe-verleih-loesung.visustruct":n5,"../../lessons/diagramme/en/aufgabe-vokabeln-loesung.visustruct":i5,"../../lessons/diagramme/en/aufgabe-vokabeln-start.visustruct":a5,"../../lessons/diagramme/en/aufgabe-volljaehrig-loesung.visustruct":s5,"../../lessons/diagramme/en/dt-buffered.visustruct":r5,"../../lessons/diagramme/en/dt-csv.visustruct":o5,"../../lessons/diagramme/en/dt-json.visustruct":l5,"../../lessons/diagramme/en/dt-lesen.visustruct":u5,"../../lessons/diagramme/en/kino-einmaleins-loesung.visustruct":m5,"../../lessons/diagramme/en/kino-frei-loesung.visustruct":c5,"../../lessons/diagramme/en/kino-frei-start.visustruct":d5,"../../lessons/diagramme/en/kino-karte-loesung.visustruct":h5,"../../lessons/diagramme/en/kino-karte-start.visustruct":g5,"../../lessons/diagramme/en/kino-saalplan.visustruct":p5,"../../lessons/diagramme/en/kino-verkaufen.visustruct":f5,"../../lessons/diagramme/en/l04-java-fehler-loesung.visustruct":x5,"../../lessons/diagramme/en/l04-java-fehler-start.visustruct":b5,"../../lessons/diagramme/en/l04-java-steckbrief-loesung.visustruct":y5,"../../lessons/diagramme/en/l04-rechnen.visustruct":v5,"../../lessons/diagramme/en/l04-reihenfolge-loesung.visustruct":w5,"../../lessons/diagramme/en/l04-reihenfolge-start.visustruct":z5,"../../lessons/diagramme/en/l04-tauschen-loesung.visustruct":I5,"../../lessons/diagramme/en/l04-tauschen-start.visustruct":k5,"../../lessons/diagramme/en/l04-tauschen.visustruct":S5,"../../lessons/diagramme/en/l05-datentypen.visustruct":_5,"../../lessons/diagramme/en/l05-division.visustruct":T5,"../../lessons/diagramme/en/l05-einkauf-loesung.visustruct":O5,"../../lessons/diagramme/en/l05-java-fehler-loesung.visustruct":A5,"../../lessons/diagramme/en/l05-java-fehler-start.visustruct":P5,"../../lessons/diagramme/en/l05-java-kino-loesung.visustruct":j5,"../../lessons/diagramme/en/l05-rechteck-loesung.visustruct":C5,"../../lessons/diagramme/en/l05-sekunden-loesung.visustruct":B5,"../../lessons/diagramme/en/l05-sekunden-start.visustruct":D5,"../../lessons/diagramme/en/l06-begruessung-loesung.visustruct":Z5,"../../lessons/diagramme/en/l06-eva.visustruct":M5,"../../lessons/diagramme/en/l06-java-fehler-loesung.visustruct":L5,"../../lessons/diagramme/en/l06-java-fehler-start.visustruct":W5,"../../lessons/diagramme/en/l06-java-tage-loesung.visustruct":E5,"../../lessons/diagramme/en/l06-mittelwert-loesung.visustruct":N5,"../../lessons/diagramme/en/l06-rechner-loesung.visustruct":F5,"../../lessons/diagramme/en/l07-alter-pruefen.visustruct":J5,"../../lessons/diagramme/en/l07-betrag-loesung.visustruct":R5,"../../lessons/diagramme/en/l07-gerade-loesung.visustruct":G5,"../../lessons/diagramme/en/l07-java-fehler-loesung.visustruct":H5,"../../lessons/diagramme/en/l07-java-fehler-start.visustruct":V5,"../../lessons/diagramme/en/l07-java-pizza-loesung.visustruct":Q5,"../../lessons/diagramme/en/l07-java-pizza-start.visustruct":q5,"../../lessons/diagramme/en/l07-maximum-loesung.visustruct":U5,"../../lessons/diagramme/en/l07-rabatt.visustruct":$5,"../../lessons/diagramme/en/l08-gueltig-loesung.visustruct":Y5,"../../lessons/diagramme/en/l08-java-bestanden-loesung.visustruct":X5,"../../lessons/diagramme/en/l08-java-fehler-loesung.visustruct":K5,"../../lessons/diagramme/en/l08-java-fehler-start.visustruct":e6,"../../lessons/diagramme/en/l08-jugendticket.visustruct":t6,"../../lessons/diagramme/en/l08-note.visustruct":n6,"../../lessons/diagramme/en/l08-schaltjahr-loesung.visustruct":i6,"../../lessons/diagramme/en/l08-wochenende-loesung.visustruct":a6,"../../lessons/diagramme/en/l09-ampel.visustruct":s6,"../../lessons/diagramme/en/l09-automat.visustruct":r6,"../../lessons/diagramme/en/l09-java-fehler-loesung.visustruct":o6,"../../lessons/diagramme/en/l09-java-fehler-start.visustruct":l6,"../../lessons/diagramme/en/l09-java-schule-loesung.visustruct":u6,"../../lessons/diagramme/en/l09-note-loesung.visustruct":m6,"../../lessons/diagramme/en/l09-rechner-loesung.visustruct":c6,"../../lessons/diagramme/en/l09-verschachtelt.visustruct":d6,"../../lessons/diagramme/en/l1-grundbausteine.visustruct":h6,"../../lessons/diagramme/en/l1-sequenz.visustruct":g6,"../../lessons/diagramme/en/l1-tee.visustruct":p6,"../../lessons/diagramme/en/l1-verzweigung.visustruct":f6,"../../lessons/diagramme/en/l1-wiederholung.visustruct":x6,"../../lessons/diagramme/en/l10-bis-n-loesung.visustruct":b6,"../../lessons/diagramme/en/l10-countdown.visustruct":y6,"../../lessons/diagramme/en/l10-endlos.visustruct":v6,"../../lessons/diagramme/en/l10-fakultaet.visustruct":w6,"../../lessons/diagramme/en/l10-java-fehler-loesung.visustruct":z6,"../../lessons/diagramme/en/l10-java-fehler-start.visustruct":I6,"../../lessons/diagramme/en/l10-java-wuerfel-loesung.visustruct":k6,"../../lessons/diagramme/en/l10-verdoppeln-loesung.visustruct":S6,"../../lessons/diagramme/en/l11-eingabe-pruefen.visustruct":_6,"../../lessons/diagramme/en/l11-einmal.visustruct":T6,"../../lessons/diagramme/en/l11-java-fehler-loesung.visustruct":O6,"../../lessons/diagramme/en/l11-java-fehler-start.visustruct":A6,"../../lessons/diagramme/en/l11-java-gerade-loesung.visustruct":P6,"../../lessons/diagramme/en/l11-note-loesung.visustruct":j6,"../../lessons/diagramme/en/l11-summe-loesung.visustruct":C6,"../../lessons/diagramme/en/l12-countdown-loesung.visustruct":B6,"../../lessons/diagramme/en/l12-einmaleins-loesung.visustruct":D6,"../../lessons/diagramme/en/l12-eins-bis-fuenf.visustruct":Z6,"../../lessons/diagramme/en/l12-java-fehler-loesung.visustruct":M6,"../../lessons/diagramme/en/l12-java-fehler-start.visustruct":L6,"../../lessons/diagramme/en/l12-java-verdoppeln-loesung.visustruct":W6,"../../lessons/diagramme/en/l12-summe.visustruct":E6,"../../lessons/diagramme/en/l13-dreieck.visustruct":N6,"../../lessons/diagramme/en/l13-gerade-eingaben-loesung.visustruct":F6,"../../lessons/diagramme/en/l13-gerade-zaehlen.visustruct":J6,"../../lessons/diagramme/en/l13-java-fehler-loesung.visustruct":R6,"../../lessons/diagramme/en/l13-java-fehler-start.visustruct":G6,"../../lessons/diagramme/en/l13-java-quadrate-loesung.visustruct":H6,"../../lessons/diagramme/en/l13-rechteck-loesung.visustruct":V6,"../../lessons/diagramme/en/l14-array-durchlaufen.visustruct":Q6,"../../lessons/diagramme/en/l14-erster-letzter-loesung.visustruct":q6,"../../lessons/diagramme/en/l14-java-fehler-loesung.visustruct":U6,"../../lessons/diagramme/en/l14-java-fehler-start.visustruct":$6,"../../lessons/diagramme/en/l14-java-treppe-loesung.visustruct":Y6,"../../lessons/diagramme/en/l14-namen-eingeben.visustruct":X6,"../../lessons/diagramme/en/l14-rueckwaerts-loesung.visustruct":K6,"../../lessons/diagramme/en/l14-summe-max-loesung.visustruct":ez,"../../lessons/diagramme/en/l14-summe-maximum.visustruct":tz,"../../lessons/diagramme/en/l15-bis-null-loesung.visustruct":nz,"../../lessons/diagramme/en/l15-endlos-aussprung.visustruct":iz,"../../lessons/diagramme/en/l15-flaeche-loesung.visustruct":az,"../../lessons/diagramme/en/l15-flaeche-unterprogramm-loesung.visustruct":sz,"../../lessons/diagramme/en/l15-hauptprogramm.visustruct":rz,"../../lessons/diagramme/en/l15-java-fehler-loesung.visustruct":oz,"../../lessons/diagramme/en/l15-java-fehler-start.visustruct":lz,"../../lessons/diagramme/en/l15-java-noten-loesung.visustruct":uz,"../../lessons/diagramme/en/l15-quadrat-haupt.visustruct":mz,"../../lessons/diagramme/en/l15-quadrat.visustruct":cz,"../../lessons/diagramme/en/l15-titel-loesung.visustruct":dz,"../../lessons/diagramme/en/l15-unterprogramm.visustruct":hz,"../../lessons/diagramme/en/l15-zeige-summe-haupt.visustruct":gz,"../../lessons/diagramme/en/l15-zeige-summe.visustruct":pz,"../../lessons/diagramme/en/l16-countdown-loesung.visustruct":fz,"../../lessons/diagramme/en/l16-countdown-start.visustruct":xz,"../../lessons/diagramme/en/l16-java-fehler-loesung.visustruct":bz,"../../lessons/diagramme/en/l16-java-fehler-start.visustruct":yz,"../../lessons/diagramme/en/l16-java-punkte-loesung.visustruct":vz,"../../lessons/diagramme/en/l16-schreibtisch.visustruct":wz,"../../lessons/diagramme/en/l16-summe-loesung.visustruct":zz,"../../lessons/diagramme/en/l16-summe-start.visustruct":Iz,"../../lessons/diagramme/en/l17-beispiel.visustruct":kz,"../../lessons/diagramme/en/l17-fakultaet-loesung.visustruct":Sz,"../../lessons/diagramme/en/l17-java-brief-loesung.visustruct":_z,"../../lessons/diagramme/en/l17-java-brief-start.visustruct":Tz,"../../lessons/diagramme/en/l17-java-fehler-loesung.visustruct":Oz,"../../lessons/diagramme/en/l17-java-fehler-start.visustruct":Az,"../../lessons/diagramme/en/l17-java-passwort-loesung.visustruct":Pz,"../../lessons/diagramme/en/l17-ticket-loesung.visustruct":jz,"../../lessons/diagramme/en/l18-beispiel.visustruct":Cz,"../../lessons/diagramme/en/l18-java-fehler-loesung.visustruct":Bz,"../../lessons/diagramme/en/l18-java-fehler-start.visustruct":Dz,"../../lessons/diagramme/en/l18-java-kasse-loesung.visustruct":Zz,"../../lessons/diagramme/en/l18-js-loesung.visustruct":Mz,"../../lessons/diagramme/en/l18-python-loesung.visustruct":Lz,"../../lessons/diagramme/en/l19-java-fehler-loesung.visustruct":Wz,"../../lessons/diagramme/en/l19-java-fehler-start.visustruct":Ez,"../../lessons/diagramme/en/l19-java-zaehlen-loesung.visustruct":Nz,"../../lessons/diagramme/en/l2-ausgabe.visustruct":Fz,"../../lessons/diagramme/en/l2-hallo-loesung.visustruct":Jz,"../../lessons/diagramme/en/l2-zwei-zeilen-loesung.visustruct":Rz,"../../lessons/diagramme/en/l23-java-ergaenzen-loesung.visustruct":Gz,"../../lessons/diagramme/en/l23-java-ergaenzen-start.visustruct":Hz,"../../lessons/diagramme/en/l23-java-nummern-loesung.visustruct":Vz,"../../lessons/diagramme/en/l23-java-nummern-start.visustruct":Qz,"../../lessons/diagramme/en/l24-java-fuchs-loesung.visustruct":qz,"../../lessons/diagramme/en/l24-java-fuchs-start.visustruct":Uz,"../../lessons/diagramme/en/l24-java-laengster-loesung.visustruct":$z,"../../lessons/diagramme/en/l24-java-laengster-start.visustruct":Yz,"../../lessons/diagramme/en/l25-java-beste-loesung.visustruct":Xz,"../../lessons/diagramme/en/l25-java-beste-start.visustruct":Kz,"../../lessons/diagramme/en/l25-java-schnitt-loesung.visustruct":e7,"../../lessons/diagramme/en/l25-java-schnitt-start.visustruct":t7,"../../lessons/diagramme/en/l26-java-namen-loesung.visustruct":n7,"../../lessons/diagramme/en/l26-java-namen-start.visustruct":i7,"../../lessons/diagramme/en/l26-java-schreiben-loesung.visustruct":a7,"../../lessons/diagramme/en/l26-java-schreiben-start.visustruct":s7,"../../lessons/diagramme/en/l27-java-json-loesung.visustruct":r7,"../../lessons/diagramme/en/l27-java-json-start.visustruct":o7,"../../lessons/diagramme/en/l27-java-saetze-loesung.visustruct":l7,"../../lessons/diagramme/en/l27-java-saetze-start.visustruct":u7,"../../lessons/diagramme/en/sim-kino-loesung.visustruct":m7,"../../lessons/diagramme/en/sim-kino-start.visustruct":c7,"../../lessons/diagramme/en/sim-tausch-loesung.visustruct":d7,"../../lessons/diagramme/en/sim-tausch-start.visustruct":h7,"../../lessons/diagramme/en/sim-tausch.visustruct":g7,"../../lessons/diagramme/en/ss-absteigend-loesung.visustruct":p7,"../../lessons/diagramme/en/ss-absteigend-start.visustruct":f7,"../../lessons/diagramme/en/ss-binaere-suche.visustruct":x7,"../../lessons/diagramme/en/ss-bubblesort.visustruct":b7,"../../lessons/diagramme/en/ss-karte-suchen-loesung.visustruct":y7,"../../lessons/diagramme/en/ss-lineare-suche.visustruct":v7,"../../lessons/diagramme/en/uebergabe-bonus-loesung.visustruct":w7,"../../lessons/diagramme/en/uebergabe-bonus-start.visustruct":z7,"../../lessons/diagramme/en/uebergabe-bonus-unterprogramm-loesung.visustruct":I7,"../../lessons/diagramme/en/uebergabe-haupt.visustruct":k7,"../../lessons/diagramme/en/uebergabe-leeren.visustruct":S7,"../../lessons/diagramme/en/uebergabe-verdopple.visustruct":_7,"../../lessons/diagramme/en/vb-abstand-anzeigen-loesung.visustruct":T7,"../../lessons/diagramme/en/vb-abstand-halten-loesung.visustruct":O7,"../../lessons/diagramme/en/vb-alarmanlage-loesung.visustruct":A7,"../../lessons/diagramme/en/vb-ampel-loesung.visustruct":P7,"../../lessons/diagramme/en/vb-ausgang-loesung.visustruct":j7,"../../lessons/diagramme/en/vb-begruessung-loesung.visustruct":C7,"../../lessons/diagramme/en/vb-binaer-zaehlen-loesung.visustruct":B7,"../../lessons/diagramme/en/vb-bis-rot-loesung.visustruct":D7,"../../lessons/diagramme/en/vb-bis-wand-loesung.visustruct":Z7,"../../lessons/diagramme/en/vb-bis-ziel-loesung.visustruct":M7,"../../lessons/diagramme/en/vb-buchstaben-loesung.visustruct":L7,"../../lessons/diagramme/en/vb-drei-lichter-loesung.visustruct":W7,"../../lessons/diagramme/en/vb-dreieck-loesung.visustruct":E7,"../../lessons/diagramme/en/vb-einparken-loesung.visustruct":N7,"../../lessons/diagramme/en/vb-farben-loesung.visustruct":F7,"../../lessons/diagramme/en/vb-farbweiche-loesung.visustruct":J7,"../../lessons/diagramme/en/vb-gas-bis-wand-loesung.visustruct":R7,"../../lessons/diagramme/en/vb-gerade-loesung.visustruct":G7,"../../lessons/diagramme/en/vb-hindernis-loesung.visustruct":H7,"../../lessons/diagramme/en/vb-java-akku-loesung.visustruct":V7,"../../lessons/diagramme/en/vb-java-blau-gruen-loesung.visustruct":Q7,"../../lessons/diagramme/en/vb-java-blinken-loesung.visustruct":q7,"../../lessons/diagramme/en/vb-java-countdown-loesung.visustruct":U7,"../../lessons/diagramme/en/vb-java-hoeher-loesung.visustruct":$7,"../../lessons/diagramme/en/vb-java-joystick-loesung.visustruct":Y7,"../../lessons/diagramme/en/vb-java-laermampel-loesung.visustruct":X7,"../../lessons/diagramme/en/vb-java-lauflicht-loesung.visustruct":K7,"../../lessons/diagramme/en/vb-java-linienfolger-loesung.visustruct":eI,"../../lessons/diagramme/en/vb-java-nachtlicht-ton-loesung.visustruct":tI,"../../lessons/diagramme/en/vb-java-rand-loesung.visustruct":nI,"../../lessons/diagramme/en/vb-java-rechteck-loesung.visustruct":iI,"../../lessons/diagramme/en/vb-java-textlaenge-loesung.visustruct":aI,"../../lessons/diagramme/en/vb-java-wand-piep-loesung.visustruct":sI,"../../lessons/diagramme/en/vb-java-wasserwaage-loesung.visustruct":rI,"../../lessons/diagramme/en/vb-klatschen-loesung.visustruct":oI,"../../lessons/diagramme/en/vb-knight-rider-loesung.visustruct":lI,"../../lessons/diagramme/en/vb-labyrinth-loesung.visustruct":uI,"../../lessons/diagramme/en/vb-linienfolger-stopp-loesung.visustruct":mI,"../../lessons/diagramme/en/vb-linienmuster-loesung.visustruct":cI,"../../lessons/diagramme/en/vb-melodie-loesung.visustruct":dI,"../../lessons/diagramme/en/vb-morsen-loesung.visustruct":hI,"../../lessons/diagramme/en/vb-nachtlicht-loesung.visustruct":gI,"../../lessons/diagramme/en/vb-nachtwaechter-loesung.visustruct":pI,"../../lessons/diagramme/en/vb-ohne-noten-loesung.visustruct":fI,"../../lessons/diagramme/en/vb-ohne-quadratzahl-loesung.visustruct":xI,"../../lessons/diagramme/en/vb-ohne-quadratzahl-unterprogramm-loesung.visustruct":bI,"../../lessons/diagramme/en/vb-ohne-rueckwaerts-loesung.visustruct":yI,"../../lessons/diagramme/en/vb-ohne-strecke-loesung.visustruct":vI,"../../lessons/diagramme/en/vb-ohne-summe-loesung.visustruct":wI,"../../lessons/diagramme/en/vb-quadrat-loesung.visustruct":zI,"../../lessons/diagramme/en/vb-quadrat-methode-loesung.visustruct":II,"../../lessons/diagramme/en/vb-quadrat-schleife-loesung.visustruct":kI,"../../lessons/diagramme/en/vb-quadrat-unterprogramm-loesung.visustruct":SI,"../../lessons/diagramme/en/vb-quadrat-verschachtelt-loesung.visustruct":_I,"../../lessons/diagramme/en/vb-rand-loesung.visustruct":TI,"../../lessons/diagramme/en/vb-schraeglage-loesung.visustruct":OI,"../../lessons/diagramme/en/vb-slalom-loesung.visustruct":AI,"../../lessons/diagramme/en/vb-spirale-loesung.visustruct":PI,"../../lessons/diagramme/en/vb-start-a-loesung.visustruct":jI,"../../lessons/diagramme/en/vb-tonleiter-loesung.visustruct":CI,"../../lessons/diagramme/en/vb-treppe-loesung.visustruct":BI,"../../lessons/diagramme/en/vb-tunnel-loesung.visustruct":DI,"../../lessons/diagramme/en/vb-variable-seite-loesung.visustruct":ZI,"../../lessons/diagramme/en/vb-vier-quadrate-loesung.visustruct":MI,"../../lessons/diagramme/en/vb-wald-loesung.visustruct":LI,"../../lessons/diagramme/en/vb-wand-vorn-loesung.visustruct":WI,"../../lessons/diagramme/en/vb-zwei-sekunden-loesung.visustruct":EI,"../../lessons/diagramme/en/zk-initialen-loesung.visustruct":NI,"../../lessons/diagramme/en/zk-mehr.visustruct":FI,"../../lessons/diagramme/en/zk-rueckwaerts-loesung.visustruct":JI,"../../lessons/diagramme/en/zk-split.visustruct":RI,"../../lessons/diagramme/en/zk-woerter-loesung.visustruct":GI,"../../lessons/diagramme/en/zk-zaehlen.visustruct":HI,"../../lessons/diagramme/en/zk-zeichen.visustruct":VI,"../../lessons/diagramme/kino-einmaleins-loesung.visustruct":QI,"../../lessons/diagramme/kino-frei-loesung.visustruct":qI,"../../lessons/diagramme/kino-frei-start.visustruct":UI,"../../lessons/diagramme/kino-karte-loesung.visustruct":$I,"../../lessons/diagramme/kino-karte-start.visustruct":YI,"../../lessons/diagramme/kino-saalplan.visustruct":XI,"../../lessons/diagramme/kino-verkaufen.visustruct":KI,"../../lessons/diagramme/l04-java-fehler-loesung.visustruct":e8,"../../lessons/diagramme/l04-java-fehler-start.visustruct":t8,"../../lessons/diagramme/l04-java-steckbrief-loesung.visustruct":n8,"../../lessons/diagramme/l04-rechnen.visustruct":i8,"../../lessons/diagramme/l04-reihenfolge-loesung.visustruct":a8,"../../lessons/diagramme/l04-reihenfolge-start.visustruct":s8,"../../lessons/diagramme/l04-tauschen-loesung.visustruct":r8,"../../lessons/diagramme/l04-tauschen-start.visustruct":o8,"../../lessons/diagramme/l04-tauschen.visustruct":l8,"../../lessons/diagramme/l05-datentypen.visustruct":u8,"../../lessons/diagramme/l05-division.visustruct":m8,"../../lessons/diagramme/l05-einkauf-loesung.visustruct":c8,"../../lessons/diagramme/l05-java-fehler-loesung.visustruct":d8,"../../lessons/diagramme/l05-java-fehler-start.visustruct":h8,"../../lessons/diagramme/l05-java-kino-loesung.visustruct":g8,"../../lessons/diagramme/l05-rechteck-loesung.visustruct":p8,"../../lessons/diagramme/l05-sekunden-loesung.visustruct":f8,"../../lessons/diagramme/l05-sekunden-start.visustruct":x8,"../../lessons/diagramme/l06-begruessung-loesung.visustruct":b8,"../../lessons/diagramme/l06-eva.visustruct":y8,"../../lessons/diagramme/l06-java-fehler-loesung.visustruct":v8,"../../lessons/diagramme/l06-java-fehler-start.visustruct":w8,"../../lessons/diagramme/l06-java-tage-loesung.visustruct":z8,"../../lessons/diagramme/l06-mittelwert-loesung.visustruct":I8,"../../lessons/diagramme/l06-rechner-loesung.visustruct":k8,"../../lessons/diagramme/l07-alter-pruefen.visustruct":S8,"../../lessons/diagramme/l07-betrag-loesung.visustruct":_8,"../../lessons/diagramme/l07-gerade-loesung.visustruct":T8,"../../lessons/diagramme/l07-java-fehler-loesung.visustruct":O8,"../../lessons/diagramme/l07-java-fehler-start.visustruct":A8,"../../lessons/diagramme/l07-java-pizza-loesung.visustruct":P8,"../../lessons/diagramme/l07-java-pizza-start.visustruct":j8,"../../lessons/diagramme/l07-maximum-loesung.visustruct":C8,"../../lessons/diagramme/l07-rabatt.visustruct":B8,"../../lessons/diagramme/l08-gueltig-loesung.visustruct":D8,"../../lessons/diagramme/l08-java-bestanden-loesung.visustruct":Z8,"../../lessons/diagramme/l08-java-fehler-loesung.visustruct":M8,"../../lessons/diagramme/l08-java-fehler-start.visustruct":L8,"../../lessons/diagramme/l08-jugendticket.visustruct":W8,"../../lessons/diagramme/l08-note.visustruct":E8,"../../lessons/diagramme/l08-schaltjahr-loesung.visustruct":N8,"../../lessons/diagramme/l08-wochenende-loesung.visustruct":F8,"../../lessons/diagramme/l09-ampel.visustruct":J8,"../../lessons/diagramme/l09-automat.visustruct":R8,"../../lessons/diagramme/l09-java-fehler-loesung.visustruct":G8,"../../lessons/diagramme/l09-java-fehler-start.visustruct":H8,"../../lessons/diagramme/l09-java-schule-loesung.visustruct":V8,"../../lessons/diagramme/l09-note-loesung.visustruct":Q8,"../../lessons/diagramme/l09-rechner-loesung.visustruct":q8,"../../lessons/diagramme/l09-verschachtelt.visustruct":U8,"../../lessons/diagramme/l1-grundbausteine.visustruct":$8,"../../lessons/diagramme/l1-sequenz.visustruct":Y8,"../../lessons/diagramme/l1-tee.visustruct":X8,"../../lessons/diagramme/l1-verzweigung.visustruct":K8,"../../lessons/diagramme/l1-wiederholung.visustruct":ek,"../../lessons/diagramme/l10-bis-n-loesung.visustruct":tk,"../../lessons/diagramme/l10-countdown.visustruct":nk,"../../lessons/diagramme/l10-endlos.visustruct":ik,"../../lessons/diagramme/l10-fakultaet.visustruct":ak,"../../lessons/diagramme/l10-java-fehler-loesung.visustruct":sk,"../../lessons/diagramme/l10-java-fehler-start.visustruct":rk,"../../lessons/diagramme/l10-java-wuerfel-loesung.visustruct":ok,"../../lessons/diagramme/l10-verdoppeln-loesung.visustruct":lk,"../../lessons/diagramme/l11-eingabe-pruefen.visustruct":uk,"../../lessons/diagramme/l11-einmal.visustruct":mk,"../../lessons/diagramme/l11-java-fehler-loesung.visustruct":ck,"../../lessons/diagramme/l11-java-fehler-start.visustruct":dk,"../../lessons/diagramme/l11-java-gerade-loesung.visustruct":hk,"../../lessons/diagramme/l11-note-loesung.visustruct":gk,"../../lessons/diagramme/l11-summe-loesung.visustruct":pk,"../../lessons/diagramme/l12-countdown-loesung.visustruct":fk,"../../lessons/diagramme/l12-einmaleins-loesung.visustruct":xk,"../../lessons/diagramme/l12-eins-bis-fuenf.visustruct":bk,"../../lessons/diagramme/l12-java-fehler-loesung.visustruct":yk,"../../lessons/diagramme/l12-java-fehler-start.visustruct":vk,"../../lessons/diagramme/l12-java-verdoppeln-loesung.visustruct":wk,"../../lessons/diagramme/l12-summe.visustruct":zk,"../../lessons/diagramme/l13-dreieck.visustruct":Ik,"../../lessons/diagramme/l13-gerade-eingaben-loesung.visustruct":kk,"../../lessons/diagramme/l13-gerade-zaehlen.visustruct":Sk,"../../lessons/diagramme/l13-java-fehler-loesung.visustruct":_k,"../../lessons/diagramme/l13-java-fehler-start.visustruct":Tk,"../../lessons/diagramme/l13-java-quadrate-loesung.visustruct":Ok,"../../lessons/diagramme/l13-rechteck-loesung.visustruct":Ak,"../../lessons/diagramme/l14-array-durchlaufen.visustruct":Pk,"../../lessons/diagramme/l14-erster-letzter-loesung.visustruct":jk,"../../lessons/diagramme/l14-java-fehler-loesung.visustruct":Ck,"../../lessons/diagramme/l14-java-fehler-start.visustruct":Bk,"../../lessons/diagramme/l14-java-treppe-loesung.visustruct":Dk,"../../lessons/diagramme/l14-namen-eingeben.visustruct":Zk,"../../lessons/diagramme/l14-rueckwaerts-loesung.visustruct":Mk,"../../lessons/diagramme/l14-summe-max-loesung.visustruct":Lk,"../../lessons/diagramme/l14-summe-maximum.visustruct":Wk,"../../lessons/diagramme/l15-bis-null-loesung.visustruct":Ek,"../../lessons/diagramme/l15-endlos-aussprung.visustruct":Nk,"../../lessons/diagramme/l15-flaeche-loesung.visustruct":Fk,"../../lessons/diagramme/l15-flaeche-unterprogramm-loesung.visustruct":Jk,"../../lessons/diagramme/l15-hauptprogramm.visustruct":Rk,"../../lessons/diagramme/l15-java-fehler-loesung.visustruct":Gk,"../../lessons/diagramme/l15-java-fehler-start.visustruct":Hk,"../../lessons/diagramme/l15-java-noten-loesung.visustruct":Vk,"../../lessons/diagramme/l15-quadrat-haupt.visustruct":Qk,"../../lessons/diagramme/l15-quadrat.visustruct":qk,"../../lessons/diagramme/l15-titel-loesung.visustruct":Uk,"../../lessons/diagramme/l15-unterprogramm.visustruct":$k,"../../lessons/diagramme/l15-zeige-summe-haupt.visustruct":Yk,"../../lessons/diagramme/l15-zeige-summe.visustruct":Xk,"../../lessons/diagramme/l16-countdown-loesung.visustruct":Kk,"../../lessons/diagramme/l16-countdown-start.visustruct":eS,"../../lessons/diagramme/l16-java-fehler-loesung.visustruct":tS,"../../lessons/diagramme/l16-java-fehler-start.visustruct":nS,"../../lessons/diagramme/l16-java-punkte-loesung.visustruct":iS,"../../lessons/diagramme/l16-schreibtisch.visustruct":aS,"../../lessons/diagramme/l16-summe-loesung.visustruct":sS,"../../lessons/diagramme/l16-summe-start.visustruct":rS,"../../lessons/diagramme/l17-beispiel.visustruct":oS,"../../lessons/diagramme/l17-fakultaet-loesung.visustruct":lS,"../../lessons/diagramme/l17-java-brief-loesung.visustruct":uS,"../../lessons/diagramme/l17-java-brief-start.visustruct":mS,"../../lessons/diagramme/l17-java-fehler-loesung.visustruct":cS,"../../lessons/diagramme/l17-java-fehler-start.visustruct":dS,"../../lessons/diagramme/l17-java-passwort-loesung.visustruct":hS,"../../lessons/diagramme/l17-ticket-loesung.visustruct":gS,"../../lessons/diagramme/l18-beispiel.visustruct":pS,"../../lessons/diagramme/l18-java-fehler-loesung.visustruct":fS,"../../lessons/diagramme/l18-java-fehler-start.visustruct":xS,"../../lessons/diagramme/l18-java-kasse-loesung.visustruct":bS,"../../lessons/diagramme/l18-js-loesung.visustruct":yS,"../../lessons/diagramme/l18-python-loesung.visustruct":vS,"../../lessons/diagramme/l19-java-fehler-loesung.visustruct":wS,"../../lessons/diagramme/l19-java-fehler-start.visustruct":zS,"../../lessons/diagramme/l19-java-zaehlen-loesung.visustruct":IS,"../../lessons/diagramme/l2-ausgabe.visustruct":kS,"../../lessons/diagramme/l2-hallo-loesung.visustruct":SS,"../../lessons/diagramme/l2-zwei-zeilen-loesung.visustruct":_S,"../../lessons/diagramme/l20-countdown-loesung.visustruct":TS,"../../lessons/diagramme/l23-java-ergaenzen-loesung.visustruct":OS,"../../lessons/diagramme/l23-java-ergaenzen-start.visustruct":AS,"../../lessons/diagramme/l23-java-nummern-loesung.visustruct":PS,"../../lessons/diagramme/l23-java-nummern-start.visustruct":jS,"../../lessons/diagramme/l24-java-fuchs-loesung.visustruct":CS,"../../lessons/diagramme/l24-java-fuchs-start.visustruct":BS,"../../lessons/diagramme/l24-java-laengster-loesung.visustruct":DS,"../../lessons/diagramme/l24-java-laengster-start.visustruct":ZS,"../../lessons/diagramme/l25-java-beste-loesung.visustruct":MS,"../../lessons/diagramme/l25-java-beste-start.visustruct":LS,"../../lessons/diagramme/l25-java-schnitt-loesung.visustruct":WS,"../../lessons/diagramme/l25-java-schnitt-start.visustruct":ES,"../../lessons/diagramme/l26-java-namen-loesung.visustruct":NS,"../../lessons/diagramme/l26-java-namen-start.visustruct":FS,"../../lessons/diagramme/l26-java-schreiben-loesung.visustruct":JS,"../../lessons/diagramme/l26-java-schreiben-start.visustruct":RS,"../../lessons/diagramme/l27-java-json-loesung.visustruct":GS,"../../lessons/diagramme/l27-java-json-start.visustruct":HS,"../../lessons/diagramme/l27-java-saetze-loesung.visustruct":VS,"../../lessons/diagramme/l27-java-saetze-start.visustruct":QS,"../../lessons/diagramme/pt/aufgabe-alter-haupt-loesung.visustruct":qS,"../../lessons/diagramme/pt/aufgabe-alter-unterprogramm-loesung.visustruct":US,"../../lessons/diagramme/pt/aufgabe-ballwurf-loesung.visustruct":$S,"../../lessons/diagramme/pt/aufgabe-ballwurf-start.visustruct":YS,"../../lessons/diagramme/pt/aufgabe-bestenliste-loesung.visustruct":XS,"../../lessons/diagramme/pt/aufgabe-binaer-loesung.visustruct":KS,"../../lessons/diagramme/pt/aufgabe-caesar-array-loesung.visustruct":e_,"../../lessons/diagramme/pt/aufgabe-caesar-array-start.visustruct":t_,"../../lessons/diagramme/pt/aufgabe-caesar-ascii-loesung.visustruct":n_,"../../lessons/diagramme/pt/aufgabe-caesar-entschluesseln-loesung.visustruct":i_,"../../lessons/diagramme/pt/aufgabe-collatz-loesung.visustruct":a_,"../../lessons/diagramme/pt/aufgabe-durchschnitt-loesung.visustruct":s_,"../../lessons/diagramme/pt/aufgabe-fibonacci-loesung.visustruct":r_,"../../lessons/diagramme/pt/aufgabe-gerade-loesung.visustruct":o_,"../../lessons/diagramme/pt/aufgabe-mehrwertsteuer-loesung.visustruct":l_,"../../lessons/diagramme/pt/aufgabe-pin-java-loesung.visustruct":u_,"../../lessons/diagramme/pt/aufgabe-pin-loesung.visustruct":m_,"../../lessons/diagramme/pt/aufgabe-rechner-loesung.visustruct":c_,"../../lessons/diagramme/pt/aufgabe-schiffe-loesung.visustruct":d_,"../../lessons/diagramme/pt/aufgabe-schiffe-start.visustruct":h_,"../../lessons/diagramme/pt/aufgabe-speisekarte-loesung.visustruct":g_,"../../lessons/diagramme/pt/aufgabe-summe-loesung.visustruct":p_,"../../lessons/diagramme/pt/aufgabe-tafeldienst-loesung.visustruct":f_,"../../lessons/diagramme/pt/aufgabe-verdoppeln-loesung.visustruct":x_,"../../lessons/diagramme/pt/aufgabe-verleih-java-loesung.visustruct":b_,"../../lessons/diagramme/pt/aufgabe-verleih-loesung.visustruct":y_,"../../lessons/diagramme/pt/aufgabe-vokabeln-loesung.visustruct":v_,"../../lessons/diagramme/pt/aufgabe-vokabeln-start.visustruct":w_,"../../lessons/diagramme/pt/aufgabe-volljaehrig-loesung.visustruct":z_,"../../lessons/diagramme/pt/dt-buffered.visustruct":I_,"../../lessons/diagramme/pt/dt-csv.visustruct":k_,"../../lessons/diagramme/pt/dt-json.visustruct":S_,"../../lessons/diagramme/pt/dt-lesen.visustruct":__,"../../lessons/diagramme/pt/kino-einmaleins-loesung.visustruct":T_,"../../lessons/diagramme/pt/kino-frei-loesung.visustruct":O_,"../../lessons/diagramme/pt/kino-frei-start.visustruct":A_,"../../lessons/diagramme/pt/kino-karte-loesung.visustruct":P_,"../../lessons/diagramme/pt/kino-karte-start.visustruct":j_,"../../lessons/diagramme/pt/kino-saalplan.visustruct":C_,"../../lessons/diagramme/pt/kino-verkaufen.visustruct":B_,"../../lessons/diagramme/pt/l04-java-fehler-loesung.visustruct":D_,"../../lessons/diagramme/pt/l04-java-fehler-start.visustruct":Z_,"../../lessons/diagramme/pt/l04-java-steckbrief-loesung.visustruct":M_,"../../lessons/diagramme/pt/l04-rechnen.visustruct":L_,"../../lessons/diagramme/pt/l04-reihenfolge-loesung.visustruct":W_,"../../lessons/diagramme/pt/l04-reihenfolge-start.visustruct":E_,"../../lessons/diagramme/pt/l04-tauschen-loesung.visustruct":N_,"../../lessons/diagramme/pt/l04-tauschen-start.visustruct":F_,"../../lessons/diagramme/pt/l04-tauschen.visustruct":J_,"../../lessons/diagramme/pt/l05-datentypen.visustruct":R_,"../../lessons/diagramme/pt/l05-division.visustruct":G_,"../../lessons/diagramme/pt/l05-einkauf-loesung.visustruct":H_,"../../lessons/diagramme/pt/l05-java-fehler-loesung.visustruct":V_,"../../lessons/diagramme/pt/l05-java-fehler-start.visustruct":Q_,"../../lessons/diagramme/pt/l05-java-kino-loesung.visustruct":q_,"../../lessons/diagramme/pt/l05-rechteck-loesung.visustruct":U_,"../../lessons/diagramme/pt/l05-sekunden-loesung.visustruct":$_,"../../lessons/diagramme/pt/l05-sekunden-start.visustruct":Y_,"../../lessons/diagramme/pt/l06-begruessung-loesung.visustruct":X_,"../../lessons/diagramme/pt/l06-eva.visustruct":K_,"../../lessons/diagramme/pt/l06-java-fehler-loesung.visustruct":eT,"../../lessons/diagramme/pt/l06-java-fehler-start.visustruct":tT,"../../lessons/diagramme/pt/l06-java-tage-loesung.visustruct":nT,"../../lessons/diagramme/pt/l06-mittelwert-loesung.visustruct":iT,"../../lessons/diagramme/pt/l06-rechner-loesung.visustruct":aT,"../../lessons/diagramme/pt/l07-alter-pruefen.visustruct":sT,"../../lessons/diagramme/pt/l07-betrag-loesung.visustruct":rT,"../../lessons/diagramme/pt/l07-gerade-loesung.visustruct":oT,"../../lessons/diagramme/pt/l07-java-fehler-loesung.visustruct":lT,"../../lessons/diagramme/pt/l07-java-fehler-start.visustruct":uT,"../../lessons/diagramme/pt/l07-java-pizza-loesung.visustruct":mT,"../../lessons/diagramme/pt/l07-java-pizza-start.visustruct":cT,"../../lessons/diagramme/pt/l07-maximum-loesung.visustruct":dT,"../../lessons/diagramme/pt/l07-rabatt.visustruct":hT,"../../lessons/diagramme/pt/l08-gueltig-loesung.visustruct":gT,"../../lessons/diagramme/pt/l08-java-bestanden-loesung.visustruct":pT,"../../lessons/diagramme/pt/l08-java-fehler-loesung.visustruct":fT,"../../lessons/diagramme/pt/l08-java-fehler-start.visustruct":xT,"../../lessons/diagramme/pt/l08-jugendticket.visustruct":bT,"../../lessons/diagramme/pt/l08-note.visustruct":yT,"../../lessons/diagramme/pt/l08-schaltjahr-loesung.visustruct":vT,"../../lessons/diagramme/pt/l08-wochenende-loesung.visustruct":wT,"../../lessons/diagramme/pt/l09-ampel.visustruct":zT,"../../lessons/diagramme/pt/l09-automat.visustruct":IT,"../../lessons/diagramme/pt/l09-java-fehler-loesung.visustruct":kT,"../../lessons/diagramme/pt/l09-java-fehler-start.visustruct":ST,"../../lessons/diagramme/pt/l09-java-schule-loesung.visustruct":_T,"../../lessons/diagramme/pt/l09-note-loesung.visustruct":TT,"../../lessons/diagramme/pt/l09-rechner-loesung.visustruct":OT,"../../lessons/diagramme/pt/l09-verschachtelt.visustruct":AT,"../../lessons/diagramme/pt/l1-grundbausteine.visustruct":PT,"../../lessons/diagramme/pt/l1-sequenz.visustruct":jT,"../../lessons/diagramme/pt/l1-tee.visustruct":CT,"../../lessons/diagramme/pt/l1-verzweigung.visustruct":BT,"../../lessons/diagramme/pt/l1-wiederholung.visustruct":DT,"../../lessons/diagramme/pt/l10-bis-n-loesung.visustruct":ZT,"../../lessons/diagramme/pt/l10-countdown.visustruct":MT,"../../lessons/diagramme/pt/l10-endlos.visustruct":LT,"../../lessons/diagramme/pt/l10-fakultaet.visustruct":WT,"../../lessons/diagramme/pt/l10-java-fehler-loesung.visustruct":ET,"../../lessons/diagramme/pt/l10-java-fehler-start.visustruct":NT,"../../lessons/diagramme/pt/l10-java-wuerfel-loesung.visustruct":FT,"../../lessons/diagramme/pt/l10-verdoppeln-loesung.visustruct":JT,"../../lessons/diagramme/pt/l11-eingabe-pruefen.visustruct":RT,"../../lessons/diagramme/pt/l11-einmal.visustruct":GT,"../../lessons/diagramme/pt/l11-java-fehler-loesung.visustruct":HT,"../../lessons/diagramme/pt/l11-java-fehler-start.visustruct":VT,"../../lessons/diagramme/pt/l11-java-gerade-loesung.visustruct":QT,"../../lessons/diagramme/pt/l11-note-loesung.visustruct":qT,"../../lessons/diagramme/pt/l11-summe-loesung.visustruct":UT,"../../lessons/diagramme/pt/l12-countdown-loesung.visustruct":$T,"../../lessons/diagramme/pt/l12-einmaleins-loesung.visustruct":YT,"../../lessons/diagramme/pt/l12-eins-bis-fuenf.visustruct":XT,"../../lessons/diagramme/pt/l12-java-fehler-loesung.visustruct":KT,"../../lessons/diagramme/pt/l12-java-fehler-start.visustruct":eO,"../../lessons/diagramme/pt/l12-java-verdoppeln-loesung.visustruct":tO,"../../lessons/diagramme/pt/l12-summe.visustruct":nO,"../../lessons/diagramme/pt/l13-dreieck.visustruct":iO,"../../lessons/diagramme/pt/l13-gerade-eingaben-loesung.visustruct":aO,"../../lessons/diagramme/pt/l13-gerade-zaehlen.visustruct":sO,"../../lessons/diagramme/pt/l13-java-fehler-loesung.visustruct":rO,"../../lessons/diagramme/pt/l13-java-fehler-start.visustruct":oO,"../../lessons/diagramme/pt/l13-java-quadrate-loesung.visustruct":lO,"../../lessons/diagramme/pt/l13-rechteck-loesung.visustruct":uO,"../../lessons/diagramme/pt/l14-array-durchlaufen.visustruct":mO,"../../lessons/diagramme/pt/l14-erster-letzter-loesung.visustruct":cO,"../../lessons/diagramme/pt/l14-java-fehler-loesung.visustruct":dO,"../../lessons/diagramme/pt/l14-java-fehler-start.visustruct":hO,"../../lessons/diagramme/pt/l14-java-treppe-loesung.visustruct":gO,"../../lessons/diagramme/pt/l14-namen-eingeben.visustruct":pO,"../../lessons/diagramme/pt/l14-rueckwaerts-loesung.visustruct":fO,"../../lessons/diagramme/pt/l14-summe-max-loesung.visustruct":xO,"../../lessons/diagramme/pt/l14-summe-maximum.visustruct":bO,"../../lessons/diagramme/pt/l15-bis-null-loesung.visustruct":yO,"../../lessons/diagramme/pt/l15-endlos-aussprung.visustruct":vO,"../../lessons/diagramme/pt/l15-flaeche-loesung.visustruct":wO,"../../lessons/diagramme/pt/l15-hauptprogramm.visustruct":zO,"../../lessons/diagramme/pt/l15-java-fehler-loesung.visustruct":IO,"../../lessons/diagramme/pt/l15-java-fehler-start.visustruct":kO,"../../lessons/diagramme/pt/l15-java-noten-loesung.visustruct":SO,"../../lessons/diagramme/pt/l15-quadrat-haupt.visustruct":_O,"../../lessons/diagramme/pt/l15-quadrat.visustruct":TO,"../../lessons/diagramme/pt/l15-titel-loesung.visustruct":OO,"../../lessons/diagramme/pt/l15-unterprogramm.visustruct":AO,"../../lessons/diagramme/pt/l15-zeige-summe-haupt.visustruct":PO,"../../lessons/diagramme/pt/l15-zeige-summe.visustruct":jO,"../../lessons/diagramme/pt/l16-countdown-loesung.visustruct":CO,"../../lessons/diagramme/pt/l16-countdown-start.visustruct":BO,"../../lessons/diagramme/pt/l16-java-fehler-loesung.visustruct":DO,"../../lessons/diagramme/pt/l16-java-fehler-start.visustruct":ZO,"../../lessons/diagramme/pt/l16-java-punkte-loesung.visustruct":MO,"../../lessons/diagramme/pt/l16-schreibtisch.visustruct":LO,"../../lessons/diagramme/pt/l16-summe-loesung.visustruct":WO,"../../lessons/diagramme/pt/l16-summe-start.visustruct":EO,"../../lessons/diagramme/pt/l17-beispiel.visustruct":NO,"../../lessons/diagramme/pt/l17-fakultaet-loesung.visustruct":FO,"../../lessons/diagramme/pt/l17-java-brief-loesung.visustruct":JO,"../../lessons/diagramme/pt/l17-java-brief-start.visustruct":RO,"../../lessons/diagramme/pt/l17-java-fehler-loesung.visustruct":GO,"../../lessons/diagramme/pt/l17-java-fehler-start.visustruct":HO,"../../lessons/diagramme/pt/l17-java-passwort-loesung.visustruct":VO,"../../lessons/diagramme/pt/l17-ticket-loesung.visustruct":QO,"../../lessons/diagramme/pt/l18-beispiel.visustruct":qO,"../../lessons/diagramme/pt/l18-java-fehler-loesung.visustruct":UO,"../../lessons/diagramme/pt/l18-java-fehler-start.visustruct":$O,"../../lessons/diagramme/pt/l18-java-kasse-loesung.visustruct":YO,"../../lessons/diagramme/pt/l18-js-loesung.visustruct":XO,"../../lessons/diagramme/pt/l18-python-loesung.visustruct":KO,"../../lessons/diagramme/pt/l19-java-fehler-loesung.visustruct":eA,"../../lessons/diagramme/pt/l19-java-fehler-start.visustruct":tA,"../../lessons/diagramme/pt/l19-java-zaehlen-loesung.visustruct":nA,"../../lessons/diagramme/pt/l2-ausgabe.visustruct":iA,"../../lessons/diagramme/pt/l2-hallo-loesung.visustruct":aA,"../../lessons/diagramme/pt/l2-zwei-zeilen-loesung.visustruct":sA,"../../lessons/diagramme/pt/l23-java-ergaenzen-loesung.visustruct":rA,"../../lessons/diagramme/pt/l23-java-ergaenzen-start.visustruct":oA,"../../lessons/diagramme/pt/l23-java-nummern-loesung.visustruct":lA,"../../lessons/diagramme/pt/l23-java-nummern-start.visustruct":uA,"../../lessons/diagramme/pt/l24-java-fuchs-loesung.visustruct":mA,"../../lessons/diagramme/pt/l24-java-fuchs-start.visustruct":cA,"../../lessons/diagramme/pt/l24-java-laengster-loesung.visustruct":dA,"../../lessons/diagramme/pt/l24-java-laengster-start.visustruct":hA,"../../lessons/diagramme/pt/l25-java-beste-loesung.visustruct":gA,"../../lessons/diagramme/pt/l25-java-beste-start.visustruct":pA,"../../lessons/diagramme/pt/l25-java-schnitt-loesung.visustruct":fA,"../../lessons/diagramme/pt/l25-java-schnitt-start.visustruct":xA,"../../lessons/diagramme/pt/l26-java-namen-loesung.visustruct":bA,"../../lessons/diagramme/pt/l26-java-namen-start.visustruct":yA,"../../lessons/diagramme/pt/l26-java-schreiben-loesung.visustruct":vA,"../../lessons/diagramme/pt/l26-java-schreiben-start.visustruct":wA,"../../lessons/diagramme/pt/l27-java-json-loesung.visustruct":zA,"../../lessons/diagramme/pt/l27-java-json-start.visustruct":IA,"../../lessons/diagramme/pt/l27-java-saetze-loesung.visustruct":kA,"../../lessons/diagramme/pt/l27-java-saetze-start.visustruct":SA,"../../lessons/diagramme/pt/sim-kino-loesung.visustruct":_A,"../../lessons/diagramme/pt/sim-kino-start.visustruct":TA,"../../lessons/diagramme/pt/sim-tausch-loesung.visustruct":OA,"../../lessons/diagramme/pt/sim-tausch-start.visustruct":AA,"../../lessons/diagramme/pt/sim-tausch.visustruct":PA,"../../lessons/diagramme/pt/ss-absteigend-loesung.visustruct":jA,"../../lessons/diagramme/pt/ss-absteigend-start.visustruct":CA,"../../lessons/diagramme/pt/ss-binaere-suche.visustruct":BA,"../../lessons/diagramme/pt/ss-bubblesort.visustruct":DA,"../../lessons/diagramme/pt/ss-karte-suchen-loesung.visustruct":ZA,"../../lessons/diagramme/pt/ss-lineare-suche.visustruct":MA,"../../lessons/diagramme/pt/uebergabe-bonus-loesung.visustruct":LA,"../../lessons/diagramme/pt/uebergabe-bonus-start.visustruct":WA,"../../lessons/diagramme/pt/uebergabe-bonus-unterprogramm-loesung.visustruct":EA,"../../lessons/diagramme/pt/uebergabe-haupt.visustruct":NA,"../../lessons/diagramme/pt/uebergabe-leeren.visustruct":FA,"../../lessons/diagramme/pt/uebergabe-verdopple.visustruct":JA,"../../lessons/diagramme/pt/zk-initialen-loesung.visustruct":RA,"../../lessons/diagramme/pt/zk-mehr.visustruct":GA,"../../lessons/diagramme/pt/zk-rueckwaerts-loesung.visustruct":HA,"../../lessons/diagramme/pt/zk-split.visustruct":VA,"../../lessons/diagramme/pt/zk-woerter-loesung.visustruct":QA,"../../lessons/diagramme/pt/zk-zaehlen.visustruct":qA,"../../lessons/diagramme/pt/zk-zeichen.visustruct":UA,"../../lessons/diagramme/sim-kino-loesung.visustruct":$A,"../../lessons/diagramme/sim-kino-start.visustruct":YA,"../../lessons/diagramme/sim-tausch-loesung.visustruct":XA,"../../lessons/diagramme/sim-tausch-start.visustruct":KA,"../../lessons/diagramme/sim-tausch.visustruct":eP,"../../lessons/diagramme/ss-absteigend-loesung.visustruct":tP,"../../lessons/diagramme/ss-absteigend-start.visustruct":nP,"../../lessons/diagramme/ss-binaere-suche.visustruct":iP,"../../lessons/diagramme/ss-bubblesort.visustruct":aP,"../../lessons/diagramme/ss-karte-suchen-loesung.visustruct":sP,"../../lessons/diagramme/ss-lineare-suche.visustruct":rP,"../../lessons/diagramme/uebergabe-bonus-loesung.visustruct":oP,"../../lessons/diagramme/uebergabe-bonus-start.visustruct":lP,"../../lessons/diagramme/uebergabe-bonus-unterprogramm-loesung.visustruct":uP,"../../lessons/diagramme/uebergabe-haupt.visustruct":mP,"../../lessons/diagramme/uebergabe-leeren.visustruct":cP,"../../lessons/diagramme/uebergabe-verdopple.visustruct":dP,"../../lessons/diagramme/vb-abstand-anzeigen-loesung.visustruct":hP,"../../lessons/diagramme/vb-abstand-halten-loesung.visustruct":gP,"../../lessons/diagramme/vb-alarmanlage-loesung.visustruct":pP,"../../lessons/diagramme/vb-ampel-loesung.visustruct":fP,"../../lessons/diagramme/vb-ausgang-loesung.visustruct":xP,"../../lessons/diagramme/vb-begruessung-loesung.visustruct":bP,"../../lessons/diagramme/vb-binaer-zaehlen-loesung.visustruct":yP,"../../lessons/diagramme/vb-bis-rot-loesung.visustruct":vP,"../../lessons/diagramme/vb-bis-wand-loesung.visustruct":wP,"../../lessons/diagramme/vb-bis-ziel-loesung.visustruct":zP,"../../lessons/diagramme/vb-buchstaben-loesung.visustruct":IP,"../../lessons/diagramme/vb-drei-lichter-loesung.visustruct":kP,"../../lessons/diagramme/vb-dreieck-loesung.visustruct":SP,"../../lessons/diagramme/vb-einparken-loesung.visustruct":_P,"../../lessons/diagramme/vb-farben-loesung.visustruct":TP,"../../lessons/diagramme/vb-farbweiche-loesung.visustruct":OP,"../../lessons/diagramme/vb-gas-bis-wand-loesung.visustruct":AP,"../../lessons/diagramme/vb-gerade-loesung.visustruct":PP,"../../lessons/diagramme/vb-hindernis-loesung.visustruct":jP,"../../lessons/diagramme/vb-java-akku-loesung.visustruct":CP,"../../lessons/diagramme/vb-java-blau-gruen-loesung.visustruct":BP,"../../lessons/diagramme/vb-java-blinken-loesung.visustruct":DP,"../../lessons/diagramme/vb-java-countdown-loesung.visustruct":ZP,"../../lessons/diagramme/vb-java-hoeher-loesung.visustruct":MP,"../../lessons/diagramme/vb-java-joystick-loesung.visustruct":LP,"../../lessons/diagramme/vb-java-laermampel-loesung.visustruct":WP,"../../lessons/diagramme/vb-java-lauflicht-loesung.visustruct":EP,"../../lessons/diagramme/vb-java-linienfolger-loesung.visustruct":NP,"../../lessons/diagramme/vb-java-nachtlicht-ton-loesung.visustruct":FP,"../../lessons/diagramme/vb-java-rand-loesung.visustruct":JP,"../../lessons/diagramme/vb-java-rechteck-loesung.visustruct":RP,"../../lessons/diagramme/vb-java-textlaenge-loesung.visustruct":GP,"../../lessons/diagramme/vb-java-wand-piep-loesung.visustruct":HP,"../../lessons/diagramme/vb-java-wasserwaage-loesung.visustruct":VP,"../../lessons/diagramme/vb-klatschen-loesung.visustruct":QP,"../../lessons/diagramme/vb-knight-rider-loesung.visustruct":qP,"../../lessons/diagramme/vb-labyrinth-loesung.visustruct":UP,"../../lessons/diagramme/vb-linienfolger-stopp-loesung.visustruct":$P,"../../lessons/diagramme/vb-linienmuster-loesung.visustruct":YP,"../../lessons/diagramme/vb-melodie-loesung.visustruct":XP,"../../lessons/diagramme/vb-morsen-loesung.visustruct":KP,"../../lessons/diagramme/vb-nachtlicht-loesung.visustruct":ej,"../../lessons/diagramme/vb-nachtwaechter-loesung.visustruct":tj,"../../lessons/diagramme/vb-ohne-noten-loesung.visustruct":nj,"../../lessons/diagramme/vb-ohne-quadratzahl-loesung.visustruct":ij,"../../lessons/diagramme/vb-ohne-quadratzahl-unterprogramm-loesung.visustruct":aj,"../../lessons/diagramme/vb-ohne-rueckwaerts-loesung.visustruct":sj,"../../lessons/diagramme/vb-ohne-strecke-loesung.visustruct":rj,"../../lessons/diagramme/vb-ohne-summe-loesung.visustruct":oj,"../../lessons/diagramme/vb-quadrat-loesung.visustruct":lj,"../../lessons/diagramme/vb-quadrat-methode-loesung.visustruct":uj,"../../lessons/diagramme/vb-quadrat-schleife-loesung.visustruct":mj,"../../lessons/diagramme/vb-quadrat-unterprogramm-loesung.visustruct":cj,"../../lessons/diagramme/vb-quadrat-verschachtelt-loesung.visustruct":dj,"../../lessons/diagramme/vb-rand-loesung.visustruct":hj,"../../lessons/diagramme/vb-schraeglage-loesung.visustruct":gj,"../../lessons/diagramme/vb-slalom-loesung.visustruct":pj,"../../lessons/diagramme/vb-spirale-loesung.visustruct":fj,"../../lessons/diagramme/vb-start-a-loesung.visustruct":xj,"../../lessons/diagramme/vb-tonleiter-loesung.visustruct":bj,"../../lessons/diagramme/vb-treppe-loesung.visustruct":yj,"../../lessons/diagramme/vb-tunnel-loesung.visustruct":vj,"../../lessons/diagramme/vb-variable-seite-loesung.visustruct":wj,"../../lessons/diagramme/vb-vier-quadrate-loesung.visustruct":zj,"../../lessons/diagramme/vb-wald-loesung.visustruct":Ij,"../../lessons/diagramme/vb-wand-vorn-loesung.visustruct":kj,"../../lessons/diagramme/vb-zwei-sekunden-loesung.visustruct":Sj,"../../lessons/diagramme/zk-initialen-loesung.visustruct":_j,"../../lessons/diagramme/zk-mehr.visustruct":Tj,"../../lessons/diagramme/zk-rueckwaerts-loesung.visustruct":Oj,"../../lessons/diagramme/zk-split.visustruct":Aj,"../../lessons/diagramme/zk-woerter-loesung.visustruct":Pj,"../../lessons/diagramme/zk-zaehlen.visustruct":jj,"../../lessons/diagramme/zk-zeichen.visustruct":Cj}),YB=Object.assign({"../../lessons/welten/ausgang-1.txt":Bj,"../../lessons/welten/ausgang-2.txt":Dj,"../../lessons/welten/ecke.txt":Zj,"../../lessons/welten/farbe-1.txt":Mj,"../../lessons/welten/farbe-2.txt":Lj,"../../lessons/welten/farbe-3.txt":Wj,"../../lessons/welten/farbe-4.txt":Ej,"../../lessons/welten/hindernis-1.txt":Nj,"../../lessons/welten/hindernis-2.txt":Fj,"../../lessons/welten/labyrinth-1.txt":Jj,"../../lessons/welten/labyrinth-2.txt":Rj,"../../lessons/welten/linie-1.txt":Gj,"../../lessons/welten/linie-2.txt":Hj,"../../lessons/welten/linie-rot-1.txt":Vj,"../../lessons/welten/linie-rot-2.txt":Qj,"../../lessons/welten/parken-1.txt":qj,"../../lessons/welten/parken-2.txt":Uj,"../../lessons/welten/rand-1.txt":$j,"../../lessons/welten/rand-2.txt":Yj,"../../lessons/welten/slalom.txt":Xj,"../../lessons/welten/tunnel-1.txt":Kj,"../../lessons/welten/tunnel-2.txt":eC,"../../lessons/welten/wald-1.txt":tC,"../../lessons/welten/wald-2.txt":nC,"../../lessons/welten/wand-frei.txt":iC,"../../lessons/welten/wand-kurz.txt":aC,"../../lessons/welten/wand-lang.txt":sC,"../../lessons/welten/wand-mittel.txt":rC,"../../lessons/welten/wand-nah.txt":oC,"../../lessons/welten/zeit-1.txt":lC,"../../lessons/welten/ziel-kurz.txt":uC,"../../lessons/welten/ziel-lang.txt":mC}),XB=Object.assign({"../../lessons/bilder/aufgabe-mehrwertsteuer.svg":cC,"../../lessons/bilder/ben-shneiderman.jpg":dC,"../../lessons/bilder/caesar-ascii.svg":hC,"../../lessons/bilder/caesar-scheibe.svg":gC,"../../lessons/bilder/caesar-verschiebung.svg":pC,"../../lessons/bilder/en/aufgabe-mehrwertsteuer.svg":fC,"../../lessons/bilder/en/kino-saal.svg":xC,"../../lessons/bilder/en/kino-schleifen.svg":bC,"../../lessons/bilder/en/l01-pap.svg":yC,"../../lessons/bilder/en/l02-einfuegen.svg":vC,"../../lessons/bilder/en/l04-variable.svg":wC,"../../lessons/bilder/en/l04-zuweisung.svg":zC,"../../lessons/bilder/en/l05-tauschen.svg":IC,"../../lessons/bilder/en/l08-zahlenstrahl.svg":kC,"../../lessons/bilder/en/l10-kopfgesteuert.svg":SC,"../../lessons/bilder/en/l11-vergleich.svg":_C,"../../lessons/bilder/en/l12-for-ablauf.svg":TC,"../../lessons/bilder/en/l14-array.svg":OC,"../../lessons/bilder/en/mvc-klick.svg":AC,"../../lessons/bilder/en/ss-binaere-suche.svg":PC,"../../lessons/bilder/en/ss-bubblesort.svg":jC,"../../lessons/bilder/en/ss-lineare-suche.svg":CC,"../../lessons/bilder/en/ss-vergleiche.svg":BC,"../../lessons/bilder/en/uebergabe.svg":DC,"../../lessons/bilder/en/zk-zeichen.svg":ZC,"../../lessons/bilder/ike-nassi.jpg":MC,"../../lessons/bilder/kino-saal.svg":LC,"../../lessons/bilder/kino-schleifen.svg":WC,"../../lessons/bilder/l01-pap.svg":EC,"../../lessons/bilder/l02-einfuegen.svg":NC,"../../lessons/bilder/l04-variable.svg":FC,"../../lessons/bilder/l04-zuweisung.svg":JC,"../../lessons/bilder/l05-tauschen.svg":RC,"../../lessons/bilder/l08-zahlenstrahl.svg":GC,"../../lessons/bilder/l09-wahrheitstabelle.svg":HC,"../../lessons/bilder/l10-kopfgesteuert.svg":VC,"../../lessons/bilder/l11-vergleich.svg":QC,"../../lessons/bilder/l12-for-ablauf.svg":qC,"../../lessons/bilder/l14-array.svg":UC,"../../lessons/bilder/mvc-klick.svg":$C,"../../lessons/bilder/pt/aufgabe-mehrwertsteuer.svg":YC,"../../lessons/bilder/pt/kino-saal.svg":XC,"../../lessons/bilder/pt/kino-schleifen.svg":KC,"../../lessons/bilder/pt/l01-pap.svg":eB,"../../lessons/bilder/pt/l02-einfuegen.svg":tB,"../../lessons/bilder/pt/l04-variable.svg":nB,"../../lessons/bilder/pt/l04-zuweisung.svg":iB,"../../lessons/bilder/pt/l05-tauschen.svg":aB,"../../lessons/bilder/pt/l08-zahlenstrahl.svg":sB,"../../lessons/bilder/pt/l10-kopfgesteuert.svg":rB,"../../lessons/bilder/pt/l11-vergleich.svg":oB,"../../lessons/bilder/pt/l12-for-ablauf.svg":lB,"../../lessons/bilder/pt/l14-array.svg":uB,"../../lessons/bilder/pt/mvc-klick.svg":mB,"../../lessons/bilder/pt/schiffe-versenken.svg":cB,"../../lessons/bilder/pt/ss-binaere-suche.svg":dB,"../../lessons/bilder/pt/ss-bubblesort.svg":hB,"../../lessons/bilder/pt/ss-lineare-suche.svg":gB,"../../lessons/bilder/pt/ss-vergleiche.svg":pB,"../../lessons/bilder/pt/uebergabe.svg":fB,"../../lessons/bilder/pt/zk-zeichen.svg":xB,"../../lessons/bilder/schiffe-versenken.svg":bB,"../../lessons/bilder/ss-binaere-suche.svg":yB,"../../lessons/bilder/ss-bubblesort.svg":vB,"../../lessons/bilder/ss-lineare-suche.svg":wB,"../../lessons/bilder/ss-vergleiche.svg":zB,"../../lessons/bilder/uebergabe.svg":IB,"../../lessons/bilder/zk-zeichen.svg":kB}),Rh=i=>i.replace(/^.*\//,"");function F1(i,e,t){const n=s=>new Map(Object.entries(i).filter(([r])=>{var o;return((o=e.exec(r))==null?void 0:o[1])===s}).map(([r,o])=>[Rh(r),o]));return[...new Map([...n("en"),...t==="en"?[]:n(t)])]}function Mu(i){return i==="de"?"de":i==="pt-PT"?"pt":"en"}let w1="en",Ot=[],Tn=[],Ma="",La=[],ds="off";function Lu(i){i!==ds&&(ds=i,Ot=[],hs(w1))}function hs(i){var s,r,o;if(t3(i),i===w1&&Ot.length>0)return;w1=i;const e=F1(QB,/\/lessons\/([^/]+)\/[^/]+\.md$/,i),t=(l,u)=>l.filter(([m])=>/^\d+/.test(m)).map(([m,c])=>HB(Nu(c,u),`${i}/${m}`)).sort((m,c)=>m.number-c.number),n=(l,u,m)=>l.map(([c,d])=>{const h=VB(Nu(d,m),`${i}/${u}${c}`);return m&&h.after!==void 0?{...h,after:m.get(h.after)??h.after}:h}),a=F1(qB,/\/lessons\/([^/]+)\/aufgaben\/[^/]+\.md$/,i);if(ds==="on"){const l=F1(Zu,/\/lessons\/([^/]+)\/visubot\/[^/]+\.md$/,i),u=KB(Eu(e),Eu(l)),m=t(e,u.normal),c=h=>{var g;return((g=[...m].reverse().find(f=>u.normal.get(f.number)({...h,number:u.normal.get(h.number)})),...t(l,u.robot).map(h=>{const g=u.robot.get(h.number);return{...h,number:g,section:c(g),robot:!0}})].sort((h,g)=>h.number-g.number);const d=F1(UB,/\/lessons\/([^/]+)\/visubot\/aufgaben\/[^/]+\.md$/,i);Tn=[...n(a,"aufgaben/",u.normal),...n(d,"visubot/aufgaben/",u.robot).map(h=>({...h,robot:!0}))]}else Ot=t(e),Tn=n(a,"aufgaben/");Tn.sort((l,u)=>(l.after??0)-(u.after??0)||l.level-u.level||l.title.localeCompare(u.title,i));for(const l of[...Ot.flatMap(u=>u.steps.flatMap(m=>m.blocks)),...Tn.flatMap(u=>u.blocks)])l.kind==="textFile"&&c3(l.name,l.content);if(Ma=((s=e.find(([l])=>l==="nachschlagen.md"))==null?void 0:s[1])??"",ds!=="off"){const l=(r=F1(Zu,/\/lessons\/([^/]+)\/visubot\/[^/]+\.md$/,i).find(([u])=>u==="nachschlagen.md"))==null?void 0:r[1];l&&(Ma=`${Ma.trimEnd()} -${l}`)}La=kB(((o=e.find(([l])=>l==="begriffe.md"))==null?void 0:o[1])??"")}const Wu={1:3,2:5,3:5,4:8,5:11,6:11,7:11,8:11,9:11,10:11,11:11,12:11,13:11,14:11,15:11,16:14,17:15,18:15,19:17,20:17,21:17,22:18},Eu=i=>i.map(([e])=>{var t;return Number((t=/^(\d+)/.exec(e))==null?void 0:t[1])}).filter(Number.isFinite).sort((e,t)=>e-t);function XB(i,e){const t=[...i].reverse().find(o=>o<=19)??i.at(-1)??0,n=o=>i.includes(Wu[o])?Wu[o]:t,a=new Map,s=new Map;let r=1;for(const o of i){a.set(o,r++);for(const l of e.filter(u=>n(u)===o))s.set(l,r++)}return{normal:a,robot:s}}function Nu(i,e){return e?i.replace(/\b(Lektion(?:en)?|Lessons?|Li[cç](?:ão|ões))(\s+\d+(?:\s*(?:,|bis|und|and|to|a|e|–|-)\s*\d+)*)/gi,(t,n,a)=>n+a.replace(/\d+/g,s=>String(e.get(Number(s))??s))):i}hs("en");function Rh(i,e){return w1==="de"?i.get(e)??i.get(`en/${e}`):(w1==="en"?void 0:i.get(`${w1}/${e}`))??i.get(`en/${e}`)??i.get(e)}const Gh=(i,e)=>i.slice(i.indexOf(e)+e.length),KB=new Map(Object.entries(UB).map(([i,e])=>[Gh(i,"/diagramme/"),e]));function X1(i){const e=Rh(KB,i);return e===void 0?void 0:Bl(e)}const eD=new Map(Object.entries(YB).map(([i,e])=>[Gh(i,"/bilder/"),e]));function Fu(i){return Rh(eD,i)}const tD=new Map(Object.entries($B).map(([i,e])=>[Jh(i).replace(/\.txt$/,""),e])),Ju=new Map;function Wa(i){const e=tD.get(i);if(e===void 0)return;let t=Ju.get(i);return t||Ju.set(i,t=Ox(e)),t}const Hh=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function Re(i){const e=[];let t=Hh(i).replace(/`([^`]+)`/g,(n,a)=>(e.push(a),`\0${e.length-1}\0`));return t=t.replace(/\*\*(.+?)\*\*/g,"$1").replace(/(^|[^*])\*([^*\s][^*]*?)\*/g,"$1$2").replace(/\[([^\]]+)\]\(([^)\s]+)\)/g,(n,a,s)=>{const r=/^(https?:|mailto:|#|\.{0,2}\/)/.test(s)?s:"#",o=/^https?:/.test(r)?' target="_blank" rel="noopener noreferrer"':"";return`
${a}`}).replace(/\[([^\]]+)\]\{\.(blau|orange|gruen|gelb|rosa)\}/g,'$1').replace(/\[([^\]]+)\]\{(?:teil|part)=([\w,]+)\}/g,'$1'),t.replace(/\u0000(\d+)\u0000/g,(n,a)=>`${e[Number(a)]}`)}function kn(i){const e=[],t=i.replace(/\r\n/g,` +${l}`)}La=SB(((o=e.find(([l])=>l==="begriffe.md"))==null?void 0:o[1])??"")}const Wu={1:3,2:5,3:5,4:8,5:11,6:11,7:11,8:11,9:11,10:11,11:11,12:11,13:11,14:11,15:11,16:14,17:15,18:15,19:17,20:17,21:17,22:18},Eu=i=>i.map(([e])=>{var t;return Number((t=/^(\d+)/.exec(e))==null?void 0:t[1])}).filter(Number.isFinite).sort((e,t)=>e-t);function KB(i,e){const t=[...i].reverse().find(o=>o<=19)??i.at(-1)??0,n=o=>i.includes(Wu[o])?Wu[o]:t,a=new Map,s=new Map;let r=1;for(const o of i){a.set(o,r++);for(const l of e.filter(u=>n(u)===o))s.set(l,r++)}return{normal:a,robot:s}}function Nu(i,e){return e?i.replace(/\b(Lektion(?:en)?|Lessons?|Li[cç](?:ão|ões))(\s+\d+(?:\s*(?:,|bis|und|and|to|a|e|–|-)\s*\d+)*)/gi,(t,n,a)=>n+a.replace(/\d+/g,s=>String(e.get(Number(s))??s))):i}hs("en");function Gh(i,e){return w1==="de"?i.get(e)??i.get(`en/${e}`):(w1==="en"?void 0:i.get(`${w1}/${e}`))??i.get(`en/${e}`)??i.get(e)}const Hh=(i,e)=>i.slice(i.indexOf(e)+e.length),eD=new Map(Object.entries($B).map(([i,e])=>[Hh(i,"/diagramme/"),e]));function X1(i){const e=Gh(eD,i);return e===void 0?void 0:Bl(e)}const tD=new Map(Object.entries(XB).map(([i,e])=>[Hh(i,"/bilder/"),e]));function Fu(i){return Gh(tD,i)}const nD=new Map(Object.entries(YB).map(([i,e])=>[Rh(i).replace(/\.txt$/,""),e])),Ju=new Map;function Wa(i){const e=nD.get(i);if(e===void 0)return;let t=Ju.get(i);return t||Ju.set(i,t=Ax(e)),t}const Vh=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function Re(i){const e=[];let t=Vh(i).replace(/`([^`]+)`/g,(n,a)=>(e.push(a),`\0${e.length-1}\0`));return t=t.replace(/\*\*(.+?)\*\*/g,"$1").replace(/(^|[^*])\*([^*\s][^*]*?)\*/g,"$1$2").replace(/\[([^\]]+)\]\(([^)\s]+)\)/g,(n,a,s)=>{const r=/^(https?:|mailto:|#|\.{0,2}\/)/.test(s)?s:"#",o=/^https?:/.test(r)?' target="_blank" rel="noopener noreferrer"':"";return`${a}`}).replace(/\[([^\]]+)\]\{\.(blau|orange|gruen|gelb|rosa)\}/g,'$1').replace(/\[([^\]]+)\]\{(?:teil|part)=([\w,]+)\}/g,'$1'),t.replace(/\u0000(\d+)\u0000/g,(n,a)=>`${e[Number(a)]}`)}function kn(i){const e=[],t=i.replace(/\r\n/g,` `).split(` -`);let n=0;for(;n${Hh(l.join(` +`);let n=0;for(;n${Vh(l.join(` `))}`);continue}const s=/^(#{2,4})\s+(.*)$/.exec(a);if(s){const o=s[1].length;e.push(`${Re(s[2])}`),n++;continue}if(/^\s*([-*]|\d+\.)\s+/.test(a)){const o=/^\s*\d+\./.test(a),l=[];for(;n${Re(u)}`)}e.push(o?`
    ${l.join("")}
`:`
    ${l.join("")}
`);continue}if(a.startsWith("|")&&/^\|?[\s:|-]*-{3,}[\s:|-]*$/.test(t[n+1]??"")){const o=m=>m.trim().replace(/^\|/,"").replace(/\|$/,"").split("|").map(c=>Re(c.trim())),l=o(a);n+=2;const u=[];for(;n${l.map(m=>``).join("")}${u.map(m=>`${m.map(c=>``).join("")}`).join("")}
${m}
${c}
`);continue}if(a.startsWith(">")){const o=[];for(;n");)o.push(t[n++].replace(/^>\s?/,""));e.push(``);continue}const r=[];for(;n|\||\s*([-*]|\d+\.)\s+)/.test(t[n]);)r.push(t[n++].trim());e.push(`

${Re(r.join(" "))}

`)}return e.join(` -`)}const aa=""+new URL("ludwig-Cus1i402.webp",import.meta.url).href,Ao="f4ecc8e489ae7865308288c7d0fa313333cf2be3ff529b23bc214bee010310e0",Kl="visustruct.learn.teacher";let e0=!1;function Ru(){if(e0)return!0;try{return localStorage.getItem(Kl)===Ao}catch{return!1}}async function nD(i){const e=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(i));return[...new Uint8Array(e)].map(t=>t.toString(16).padStart(2,"0")).join("")}async function iD(i){let e=!1;try{e=await nD(i.trim())===Ao}catch{return!1}if(e){e0=!0;try{localStorage.setItem(Kl,Ao)}catch{}}return e}function aD(){e0=!1;try{localStorage.removeItem(Kl)}catch{}}function Vh(i,e,t=!1){const n=document.createElement("figure");n.className=t?"learn-file written":"learn-file";const a=document.createElement("figcaption"),s=document.createElement("span");s.className="learn-file-icon",s.setAttribute("aria-hidden","true"),s.textContent="📄",a.append(s,t?p("web_sim_written_file_fmt",i):i);const r=document.createElement("pre");return r.className="learn-file-text",r.dir="ltr",e.replace(/\n$/,"").split(` +`)}const aa=""+new URL("ludwig-Cus1i402.webp",import.meta.url).href,Ao="f4ecc8e489ae7865308288c7d0fa313333cf2be3ff529b23bc214bee010310e0",Kl="visustruct.learn.teacher";let e0=!1;function Ru(){if(e0)return!0;try{return localStorage.getItem(Kl)===Ao}catch{return!1}}async function iD(i){const e=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(i));return[...new Uint8Array(e)].map(t=>t.toString(16).padStart(2,"0")).join("")}async function aD(i){let e=!1;try{e=await iD(i.trim())===Ao}catch{return!1}if(e){e0=!0;try{localStorage.setItem(Kl,Ao)}catch{}}return e}function sD(){e0=!1;try{localStorage.removeItem(Kl)}catch{}}function Qh(i,e,t=!1){const n=document.createElement("figure");n.className=t?"learn-file written":"learn-file";const a=document.createElement("figcaption"),s=document.createElement("span");s.className="learn-file-icon",s.setAttribute("aria-hidden","true"),s.textContent="📄",a.append(s,t?p("web_sim_written_file_fmt",i):i);const r=document.createElement("pre");return r.className="learn-file-text",r.dir="ltr",e.replace(/\n$/,"").split(` `).forEach((l,u)=>{const m=document.createElement("span");m.className="ln",m.textContent=String(u+1),r.append(m,l+` -`)}),n.append(a,r),n}function Qh(i){return[...i].map(([e,t])=>Vh(e,t,!0))}function Kn(i){switch(i.kind){case"finished":return p("sim_notice_finished");case"infiniteLoopWithoutBody":return p("sim_notice_infinite_loop_empty");case"unsupportedStatement":return p("sim_notice_unsupported_statement_fmt",i.text);case"invalidExpression":return p("sim_notice_invalid_expression_fmt",i.text);case"unknownVariable":return p("sim_notice_unknown_variable_fmt",i.text);case"divisionByZero":return p("sim_notice_division_by_zero");case"wholeNumberExpected":return p("sim_notice_whole_number_expected");case"numberExpected":return p("sim_notice_number_expected");case"booleanExpected":return p("sim_notice_boolean_expected");case"subprogramNotFound":return p("sim_notice_subprogram_not_found_fmt",i.text);case"callTooDeep":return p("sim_notice_call_too_deep");case"callArguments":return p("web_sim_call_arguments_fmt",i.text);case"missingReturn":return p("web_sim_missing_return_fmt",i.text);case"fileNotFound":return p("web_sim_file_not_found_fmt",i.text);case"endOfFile":return p("web_sim_end_of_file_fmt",i.text);case"nullValue":return p("web_sim_null_value_fmt",i.text);case"other":return i.text}}const Ae=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,"""),Gu=["0.2","0.5","1.0","1.5","2.0"],sD=i=>Number(i).toLocaleString(i1()==="java"?"en":i1(),{minimumFractionDigits:1}),fr="visustruct.simulation.stepDelay",Hu="visustruct.simulation.highlightMode";function xr(i){try{return localStorage.getItem(i)}catch{return null}}function Vu(i,e){try{localStorage.setItem(i,e)}catch{}}class rD{constructor(e,t,n=()=>{},a=()=>{},s=()=>{}){v(this,"element");v(this,"engine");v(this,"isPlaying",!1);v(this,"playTimer");v(this,"wasPlayingBeforeInput",!1);v(this,"delay",Gu.includes(xr(fr)??"")?xr(fr):"0.5");v(this,"highlightMode",xr(Hu)==="nextToExecute"?"nextToExecute":"lastExecuted");v(this,"buttons");v(this,"inputSection");v(this,"trace");v(this,"variables");v(this,"output");v(this,"transcript",[]);v(this,"printed",0);v(this,"notice");v(this,"editButton");v(this,"robot");v(this,"liveBusy",!1);this.currentDocument=e,this.onHighlight=t,this.findSubprogram=n,this.onEdit=a,this.onTranscript=s,this.engine=new bi(e(),n),this.element=document.createElement("aside"),this.element.className="simpanel",this.build()}setRobot(e){var t;this.robot!==e&&((t=this.robot)==null||t.element.remove(),this.robot=e,e&&(this.element.querySelector("section").after(e.element),e.onWorldChange=()=>this.restartEngine(),e.reset()))}showRobot(){var e;(e=this.robot)==null||e.show()}begin(){this.pause(),this.restartEngine(),this.showRobot()}end(){this.pause()}step(){var n,a,s;if((n=this.robot)!=null&&n.live){this.stepLive();return}if(!this.engine.canStep){this.pause();return}const e=this.isPlaying,t=this.engine.currentStepPath;(a=this.robot)==null||a.prepare(this.engine),this.engine.step(),(s=this.robot)==null||s.follow(this.engine.state.robotActions,e?Number(this.delay)*850:450),this.afterStep(e,t)}async stepLive(){if(this.liveBusy)return;if(!this.engine.canStep){this.pause();return}this.liveBusy=!0;const e=this.robot,t=this.isPlaying,n=this.engine.currentStepPath;try{await e.prepareLive(this.engine,n3(JSON.stringify(this.currentDocument()))),this.engine.step(),e.follow(this.engine.state.robotActions,450),await e.drive(this.engine.state.robotActions)}catch(a){e.liveFailed(a),this.isPlaying=!1}finally{this.liveBusy=!1}this.afterStep(t,n)}afterStep(e,t){this.collectOutput(),this.highlightMode==="nextToExecute"&&this.engine.canStep?this.onHighlight(this.engine.currentStepPath):this.onHighlight(t??this.engine.currentStepPath),this.engine.state.inputRequest&&e&&(this.wasPlayingBeforeInput=!0),this.engine.canStep||this.pause(),this.update()}reset(){this.pause(),this.restartEngine()}play(){if(this.isPlaying||!this.engine.canStep)return;this.isPlaying=!0;const e=async()=>{var t;this.playTimer=void 0,this.isPlaying&&((t=this.robot)!=null&&t.live?await this.stepLive():this.step(),this.isPlaying&&this.engine.canStep?this.playTimer=window.setTimeout(()=>void e(),Number(this.delay)*1e3):(this.isPlaying=!1,this.update()))};e()}pause(){this.playTimer!==void 0&&window.clearTimeout(this.playTimer),this.playTimer=void 0,this.isPlaying=!1,this.update()}submitInput(e){var s,r;const t=this.isPlaying||this.wasPlayingBeforeInput;this.pause();const n=((s=this.engine.state.inputRequest)==null?void 0:s.prompt)??"",a=(r=this.engine.state.inputRequest)==null?void 0:r.continuesLine;if(this.engine.provideInput(e.value),!this.engine.state.inputRequest){const o=this.transcript[this.transcript.length-1];a&&o&&o.typed===void 0?o.typed=e.value:this.transcript.push({text:n?`${n} `:"",typed:e.value}),e.value=""}this.onHighlight(this.engine.currentStepPath),t&&this.engine.canStep&&(this.wasPlayingBeforeInput=!1,this.play()),this.update()}restartEngine(){var e;this.engine=new bi(this.currentDocument(),this.findSubprogram),this.transcript=[],this.printed=0,this.wasPlayingBeforeInput=!1,(e=this.robot)==null||e.reset(),this.onHighlight(this.engine.currentStepPath),this.update()}build(){this.element.innerHTML=` +`)}),n.append(a,r),n}function qh(i){return[...i].map(([e,t])=>Qh(e,t,!0))}function Kn(i){switch(i.kind){case"finished":return p("sim_notice_finished");case"infiniteLoopWithoutBody":return p("sim_notice_infinite_loop_empty");case"unsupportedStatement":return p("sim_notice_unsupported_statement_fmt",i.text);case"invalidExpression":return p("sim_notice_invalid_expression_fmt",i.text);case"unknownVariable":return p("sim_notice_unknown_variable_fmt",i.text);case"divisionByZero":return p("sim_notice_division_by_zero");case"wholeNumberExpected":return p("sim_notice_whole_number_expected");case"numberExpected":return p("sim_notice_number_expected");case"booleanExpected":return p("sim_notice_boolean_expected");case"subprogramNotFound":return p("sim_notice_subprogram_not_found_fmt",i.text);case"callTooDeep":return p("sim_notice_call_too_deep");case"callArguments":return p("web_sim_call_arguments_fmt",i.text);case"missingReturn":return p("web_sim_missing_return_fmt",i.text);case"fileNotFound":return p("web_sim_file_not_found_fmt",i.text);case"endOfFile":return p("web_sim_end_of_file_fmt",i.text);case"nullValue":return p("web_sim_null_value_fmt",i.text);case"other":return i.text}}const Ae=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,"""),Gu=["0.2","0.5","1.0","1.5","2.0"],rD=i=>Number(i).toLocaleString(i1()==="java"?"en":i1(),{minimumFractionDigits:1}),fr="visustruct.simulation.stepDelay",Hu="visustruct.simulation.highlightMode";function xr(i){try{return localStorage.getItem(i)}catch{return null}}function Vu(i,e){try{localStorage.setItem(i,e)}catch{}}class oD{constructor(e,t,n=()=>{},a=()=>{},s=()=>{}){v(this,"element");v(this,"engine");v(this,"isPlaying",!1);v(this,"playTimer");v(this,"wasPlayingBeforeInput",!1);v(this,"delay",Gu.includes(xr(fr)??"")?xr(fr):"0.5");v(this,"highlightMode",xr(Hu)==="nextToExecute"?"nextToExecute":"lastExecuted");v(this,"buttons");v(this,"inputSection");v(this,"trace");v(this,"variables");v(this,"output");v(this,"transcript",[]);v(this,"printed",0);v(this,"notice");v(this,"editButton");v(this,"robot");v(this,"liveBusy",!1);this.currentDocument=e,this.onHighlight=t,this.findSubprogram=n,this.onEdit=a,this.onTranscript=s,this.engine=new bi(e(),n),this.element=document.createElement("aside"),this.element.className="simpanel",this.build()}setRobot(e){var t;this.robot!==e&&((t=this.robot)==null||t.element.remove(),this.robot=e,e&&(this.element.querySelector("section").after(e.element),e.onWorldChange=()=>this.restartEngine(),e.reset()))}showRobot(){var e;(e=this.robot)==null||e.show()}begin(){this.pause(),this.restartEngine(),this.showRobot()}end(){this.pause()}step(){var n,a,s;if((n=this.robot)!=null&&n.live){this.stepLive();return}if(!this.engine.canStep){this.pause();return}const e=this.isPlaying,t=this.engine.currentStepPath;(a=this.robot)==null||a.prepare(this.engine),this.engine.step(),(s=this.robot)==null||s.follow(this.engine.state.robotActions,e?Number(this.delay)*850:450),this.afterStep(e,t)}async stepLive(){if(this.liveBusy)return;if(!this.engine.canStep){this.pause();return}this.liveBusy=!0;const e=this.robot,t=this.isPlaying,n=this.engine.currentStepPath;try{await e.prepareLive(this.engine,i3(JSON.stringify(this.currentDocument()))),this.engine.step(),e.follow(this.engine.state.robotActions,450),await e.drive(this.engine.state.robotActions)}catch(a){e.liveFailed(a),this.isPlaying=!1}finally{this.liveBusy=!1}this.afterStep(t,n)}afterStep(e,t){this.collectOutput(),this.highlightMode==="nextToExecute"&&this.engine.canStep?this.onHighlight(this.engine.currentStepPath):this.onHighlight(t??this.engine.currentStepPath),this.engine.state.inputRequest&&e&&(this.wasPlayingBeforeInput=!0),this.engine.canStep||this.pause(),this.update()}reset(){this.pause(),this.restartEngine()}play(){if(this.isPlaying||!this.engine.canStep)return;this.isPlaying=!0;const e=async()=>{var t;this.playTimer=void 0,this.isPlaying&&((t=this.robot)!=null&&t.live?await this.stepLive():this.step(),this.isPlaying&&this.engine.canStep?this.playTimer=window.setTimeout(()=>void e(),Number(this.delay)*1e3):(this.isPlaying=!1,this.update()))};e()}pause(){this.playTimer!==void 0&&window.clearTimeout(this.playTimer),this.playTimer=void 0,this.isPlaying=!1,this.update()}submitInput(e){var s,r;const t=this.isPlaying||this.wasPlayingBeforeInput;this.pause();const n=((s=this.engine.state.inputRequest)==null?void 0:s.prompt)??"",a=(r=this.engine.state.inputRequest)==null?void 0:r.continuesLine;if(this.engine.provideInput(e.value),!this.engine.state.inputRequest){const o=this.transcript[this.transcript.length-1];a&&o&&o.typed===void 0?o.typed=e.value:this.transcript.push({text:n?`${n} `:"",typed:e.value}),e.value=""}this.onHighlight(this.engine.currentStepPath),t&&this.engine.canStep&&(this.wasPlayingBeforeInput=!1,this.play()),this.update()}restartEngine(){var e;this.engine=new bi(this.currentDocument(),this.findSubprogram),this.transcript=[],this.printed=0,this.wasPlayingBeforeInput=!1,(e=this.robot)==null||e.reset(),this.onHighlight(this.engine.currentStepPath),this.update()}build(){this.element.innerHTML=`

${Ae(p("simulation_controls"))}

@@ -60302,7 +60302,7 @@ ${l}`)}La=kB(((o=e.find(([l])=>l==="begriffe.md"))==null?void 0:o[1])??"")}const

@@ -60311,22 +60311,22 @@ ${l}`)}La=kB(((o=e.find(([l])=>l==="begriffe.md"))==null?void 0:o[1])??"")}const

${Ae(p("simulation_trace"))}

${Ae(p("simulation_variables"))}

${Ae(p("simulation_output"))}

- `;const e=a=>this.element.querySelector(a);this.buttons={play:e("[data-sim=play]"),pause:e("[data-sim=pause]"),step:e("[data-sim=step]"),stop:e("[data-sim=stop]")},this.buttons.play.addEventListener("click",()=>this.play()),this.buttons.pause.addEventListener("click",()=>this.pause()),this.buttons.step.addEventListener("click",()=>this.step()),this.buttons.stop.addEventListener("click",()=>this.reset()),this.editButton=e(".sim-edit"),this.editButton.addEventListener("click",()=>this.onEdit());const t=e("[data-sim=highlight]");t.value=this.highlightMode,t.addEventListener("change",()=>{this.highlightMode=t.value,Vu(Hu,this.highlightMode)});const n=e("[data-sim=delay]");n.value=this.delay,n.addEventListener("change",()=>{this.delay=n.value,Vu(fr,this.delay)}),this.inputSection=e(".sim-input > div"),this.trace=e(".sim-trace"),this.variables=e(".sim-vars"),this.output=e(".sim-output"),this.notice=e(".sim-notice")}collectOutput(){const e=this.engine.state.outputLines;for(;this.printedr.localeCompare(o));if(n.length===0)this.variables.innerHTML=`

${Ae(p("simulation_variables_placeholder"))}

`;else{const r=document.createElement("table");for(const o of n){const l=r.insertRow();l.insertCell().textContent=o;const u=e.variables.get(o),m=l.insertCell();u.kind==="grid"?m.append(qh(u)):m.textContent=we(u)}this.variables.replaceChildren(r)}e.outputLines.length===0&&e.files.size===0?this.output.innerHTML=`

${Ae(p("simulation_output_placeholder"))}

`:(this.output.replaceChildren(...e.outputLines.map(r=>{const o=document.createElement("div");return o.textContent=r,o}),...Qh(e.files)),this.output.scrollTop=this.output.scrollHeight)}updateInput(){const e=this.engine.state.inputRequest,t=this.inputSection;if(t.parentElement.classList.toggle("active",!!e),!e){t.innerHTML=`

${Ae(p("simulation_input_placeholder"))}

`;return}let n=t.querySelector("form");if(!n){n=document.createElement("form"),n.innerHTML=`

`;const l=n.querySelector("input");n.addEventListener("submit",u=>{u.preventDefault(),this.submitInput(l)}),t.replaceChildren(n),requestAnimationFrame(()=>l.focus())}const a=this.engine.state.outputLines;n.querySelector(".sim-prompt").textContent=e.prompt||(a[a.length-1]??"");const s=n.querySelector("input");s.inputMode=e.valueType==="string"||e.valueType==="boolean"?"text":"decimal";const r=this.engine.state.inputErrorNotice,o=n.querySelector(".sim-input-error");o.textContent=r?Kn(r):"",o.hidden=!r}}function qh(i){const e=document.createElement("table");e.className="sim-grid";for(const t of i.value){const n=e.insertRow();for(const a of t){const s=n.insertCell();s.textContent=String(a),a===!0&&(s.className="sim-grid-true")}}return e}const f1=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZ"),Jn=360/f1.length,oD="http://www.w3.org/2000/svg";function Me(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function ft(i,e={},t){const n=document.createElementNS(oD,i);for(const[a,s]of Object.entries(e))n.setAttribute(a,String(s));return t!==void 0&&(n.textContent=t),n}function lD(i,e){const t=(e%26+26)%26;return Array.from(i).map(n=>{const a=n.charCodeAt(0);return a>=65&&a<=90?String.fromCharCode((a-65+t)%26+65):a>=97&&a<=122?String.fromCharCode((a-97+t)%26+97):n}).join("")}function Qu(i,e){const t=ft("g",{class:e}),n=f1.map((a,s)=>{const r=ft("g",{transform:`rotate(${s*Jn})`});return r.append(ft("text",{x:0,y:-i,"text-anchor":"middle","dominant-baseline":"central"},a)),t.append(r),r});return{group:t,cells:n}}function uD(i,e){let t=i,n=!1,a=-t*Jn;const s=Me("section",{class:"learn-game learn-caesar"});s.append(Me("div",{class:"learn-game-head"},Me("strong",{},p("web_learn_caesar_title")))),s.append(Me("p",{class:"learn-game-status"},p("web_learn_caesar_hint")));const r=ft("svg",{viewBox:"-200 -200 400 400",class:"learn-caesar-disc",role:"img"});r.append(ft("circle",{r:196,class:"outer-disc"})),r.append(ft("path",{d:mD(196,92,Jn/2),class:"window"}));const o=Qu(168,"outer-letters");r.append(o.group);for(let O=0;O{o.cells.forEach((L,E)=>L.classList.toggle("marked",E===O)),u.cells.forEach((L,E)=>L.classList.toggle("marked",O!==void 0&&E===(O+t)%26))},_=()=>{m.textContent=String(t),l.setAttribute("transform",`rotate(${a})`),r.setAttribute("aria-label",p("web_learn_caesar_key_fmt",t)),b.textContent=p(n?"web_learn_caesar_secret":"web_learn_caesar_plain"),w.textContent=p(n?"web_learn_caesar_plain":"web_learn_caesar_secret"),f.classList.toggle("active",!n),x.classList.toggle("active",n),S.textContent=lD(y.value,n?-t:t)||" ";const O=Array.from(y.value.toUpperCase()).reverse().find(E=>f1.includes(E));if(O===void 0)return k();const L=f1.indexOf(O);k(n?(L-t+26)%26:L)},T=O=>{t=(O%26+26)%26,a=-t*Jn,_()};c.addEventListener("click",()=>T(t-1)),d.addEventListener("click",()=>T(t+1)),f.addEventListener("click",()=>{var O;n&&(y.value=((O=S.textContent)==null?void 0:O.trim())??""),n=!1,_()}),x.addEventListener("click",()=>{var O;n||(y.value=((O=S.textContent)==null?void 0:O.trim())??""),n=!0,_()}),y.addEventListener("input",_),o.cells.forEach((O,L)=>O.addEventListener("click",()=>k(L)));let j;const C=O=>{const L=r.getBoundingClientRect();return Math.atan2(O.clientY-(L.top+L.height/2),O.clientX-(L.left+L.width/2))*180/Math.PI};l.addEventListener("pointerdown",O=>{const L=O;j=C(L)-a,l.classList.add("dragging"),r.setPointerCapture(L.pointerId),L.preventDefault()}),r.addEventListener("pointermove",O=>{if(j===void 0)return;a=C(O)-j,l.setAttribute("transform",`rotate(${a})`);const L=Math.round(-a/Jn);if((L%26+26)%26!==t){t=(L%26+26)%26;const E=a;_(),a=E,l.setAttribute("transform",`rotate(${a})`)}});const P=()=>{j!==void 0&&(j=void 0,l.classList.remove("dragging"),T(t))};return r.addEventListener("pointerup",P),r.addEventListener("pointercancel",P),_(),s}function mD(i,e,t){const n=(a,s)=>{const r=(s-90)*Math.PI/180;return`${(a*Math.cos(r)).toFixed(2)} ${(a*Math.sin(r)).toFixed(2)}`};return`M ${n(i,-t)} A ${i} ${i} 0 0 1 ${n(i,t)} L ${n(e,t)} A ${e} ${e} 0 0 0 ${n(e,-t)} Z`}const t0=i=>p(`web_visubot_part_${i}`),Uh=new WeakMap;function $h(i,e,t,n){const a=document.createElement("div");a.className="visubot-model";const s=document.createElement("div");s.className="visubot-stage";const r=document.createElement("div");r.className="visubot-part-label",r.hidden=!0,s.append(r);const o=(c,d,h)=>{r.hidden=!1,r.textContent=t0(c),r.style.left=`${Math.min(d+12,s.clientWidth-140)}px`,r.style.top=`${h+12}px`},l=document.createElement("p");l.className="visubot-model-hint hint",l.textContent=p("web_visubot_tap_part"),l.hidden=!!n,a.append(s,l);const u=q(async()=>{const{Robot3D:c}=await import("./robot3d-s_ti3AsW.js");return{Robot3D:c}},[],import.meta.url).then(({Robot3D:c})=>{const d=new c(s);d.showcase(),d.highlight(i),i.includes("leds")&&d.setLed([40,90,255]),d.focusOn([],e==="unten"||e==="bottom"?"":e,!1,1),d.focusOn(i,e,t);let h;return s.addEventListener("pointerdown",g=>h={x:g.clientX,y:g.clientY}),s.addEventListener("pointerup",g=>{if(!h||Math.hypot(g.clientX-h.x,g.clientY-h.y)>5)return;const f=d.partAt(g.clientX,g.clientY);if(!f)return;if(n)return n(f);d.highlight(f);const x=s.getBoundingClientRect();o(f,g.clientX-x.left,g.clientY-x.top)}),s.addEventListener("pointermove",g=>{if(g.pointerType!=="mouse"||n)return;const f=d.partAt(g.clientX,g.clientY);if(r.hidden=!f,!f)return;const x=s.getBoundingClientRect();o(f,g.clientX-x.left,g.clientY-x.top)}),s.addEventListener("pointerleave",()=>r.hidden=!0),d}).catch(c=>{console.error(c),s.textContent=p("web_visubot_no_3d")}),m={box:a,ready:u,focus:i,view:e};return Uh.set(a,m),m}function cD(i,e,t=!1){return $h(i,e,t).box}function dD(i){const e=i.querySelector(".visubot-model"),t=e&&Uh.get(e);for(const n of i.querySelectorAll("[data-robot-part]")){const a=(n.dataset.robotPart??"").split(",").filter(Boolean);if(n.title=a.map(t0).join(", "),!t)continue;const s=()=>void t.ready.then(o=>o==null?void 0:o.highlight(a)),r=()=>void t.ready.then(o=>o==null?void 0:o.highlight(t.focus));n.addEventListener("mouseenter",s),n.addEventListener("focus",s),n.addEventListener("mouseleave",r),n.addEventListener("blur",r),n.addEventListener("click",()=>{t.ready.then(o=>{o==null||o.highlight(a),o==null||o.focusOn(a,t.view)}),t.box.scrollIntoView({block:"nearest",behavior:"smooth"})})}}function hD(i,e){let t=0;const n=document.createElement("div");n.className="visubot-quiz-question";const a=document.createElement("p");a.className="visubot-quiz-feedback",a.setAttribute("aria-live","polite");const s=()=>{n.innerHTML=kn(`**${t+1}/${i.length}** ${i[t].question}`)},r=$h([],void 0,!1,l=>{if(!(t>=i.length)){if(r.ready.then(u=>u==null?void 0:u.highlight(l)),l!==i[t].part){a.className="visubot-quiz-feedback wrong",a.textContent=p("web_visubot_quiz_wrong_fmt",t0(l));return}t++,a.className="visubot-quiz-feedback right",t{u.forEach(y=>{window.clearTimeout(y),window.clearInterval(y)}),u=[]},c=()=>{a.textContent=`${p("web_game_round_fmt",o+1,r)} · ${p("web_game_score_fmt",l)}`},d=()=>{const y=V("button",{class:"primary"},o+1{o++,o{const y=i.rounds[o],w=i.seconds,S=V("div",{class:"learn-bomb-fuse"},V("span",{})),z=V("span",{class:"learn-bomb-time"}),k=V("div",{class:"learn-bomb","aria-live":"polite"},V("span",{class:"learn-bomb-icon","aria-hidden":"true"},"💣"),z,S),_=V("div",{class:"learn-game-feedback",role:"status"}),T=y.code.split(` -`).map((E,Q)=>{const $=V("button",{class:"ln",type:"button"},E||" ");return $.disabled=!E.trim(),$.addEventListener("click",()=>O(Q+1===y.wrongLine?"right":"wrong",$)),$}),j=V("div",{class:"learn-game-code learn-bomb-code mono",dir:"ltr"},...T),C=Date.now(),P=()=>{if(!t.isConnected&&Date.now()-C>1e3)return m();const E=Math.max(0,w-(Date.now()-C)/1e3);z.textContent=p("web_game_time_fmt",Math.ceil(E)),S.firstChild.style.width=`${E/w*100}%`,k.classList.toggle("hurry",E<=5),E<=0&&O("time")},O=(E,Q)=>{m(),T.forEach((Te,xe)=>{Te.disabled=!0,xe+1===y.wrongLine&&Te.classList.add("right")}),Q&&E==="wrong"&&Q.classList.add("wrong");const $=E==="right";$&&l++,c(),k.classList.add($?"defused":"boom"),k.firstChild.textContent=$?"✂️":"💥",_.className=`learn-game-feedback ${$?"right":"wrong"}`;const he=d();_.replaceChildren(V("p",{},p($?"web_game_defused":E==="time"?"web_game_boom_time":"web_game_boom_wrong")),Nn("div",{class:"learn-game-explain"},y.explanation),V("p",{class:"learn-bomb-fix"},`${p("web_game_fix")} `,V("code",{},y.fix.trim())),he),he.focus({preventScroll:!0})};s.replaceChildren(k,Nn("p",{class:"learn-game-question"},y.question),j,_),P();const L=window.setInterval(P,200);u.push(L)},g=()=>{const y=i.rounds[o],w=[];y.code.trim()&&w.push(Uu(y.code).element),w.push(Nn("p",{class:"learn-game-question"},y.question),V("p",{class:"learn-order-hint"},p("web_game_order_hint")));const S=V("div",{class:"learn-game-options learn-order"}),z=V("div",{class:"learn-game-feedback",role:"status"});let k=0;const _=pD(y.options.length).map(j=>{const C=V("span",{class:"learn-order-badge","aria-hidden":"true"}),P=V("span",{});P.innerHTML=Re(y.options[j].text);const O=V("button",{},C,P);return O.addEventListener("click",()=>{if(j!==k)return O.classList.add("wrong"),T(!1);O.classList.add("right"),C.textContent=String(++k),O.disabled=!0,k===y.options.length&&T(!0)}),S.append(O),{k:j,b:O,badge:C}}),T=j=>{for(const{k:P,b:O,badge:L}of[..._].sort((E,Q)=>E.k-Q.k))O.disabled=!0,L.textContent=String(P+1),S.append(O);j&&l++,c(),z.className=`learn-game-feedback ${j?"right":"wrong"}`;const C=d();z.replaceChildren(V("p",{},p(j?"web_game_right":"web_game_wrong_short")),Nn("div",{class:"learn-game-explain"},y.explanation),C),C.focus({preventScroll:!0})};s.replaceChildren(...w,S,z)},f=()=>{if(m(),i.kind==="bombe"||i.kind==="reihenfolge"){c(),i.kind==="bombe"?h():g();return}const y=i.rounds[o];c();const w=Uu(y.code),S=[];let z;i.kind==="zuhoerer"?(z=fD(Dh(y.code),w),S.push(V("div",{class:"learn-swing-row"},w.element,z.element)),y.clicks.length&&S.push(V("p",{class:"learn-swing-clicks"},`${p("web_game_clicks")} `,...y.clicks.flatMap((C,P)=>[...P?[" → "]:[],V("code",{},C)])))):y.code.trim()&&S.push(w.element),S.push(Nn("p",{class:"learn-game-question"},y.question));const k=V("div",{class:`learn-game-options ${i.kind==="layout"?"pictures":""}`}),_=V("div",{class:"learn-game-feedback",role:"status"}),T=y.options.map(C=>{const P=V("button",{});return i.kind==="layout"?P.append(bD(C.text)):C.text.includes(` -`)?P.append(xD(C.text)):P.innerHTML=Re(C.text),P.addEventListener("click",()=>j(C.right,P)),k.append(P),P}),j=(C,P)=>{T.forEach((L,E)=>{L.disabled=!0,y.options[E].right&&L.classList.add("right")}),C||P.classList.add("wrong"),C&&l++,c(),_.className=`learn-game-feedback ${C?"right":"wrong"}`;const O=d();_.replaceChildren(V("p",{},p(C?"web_game_right":"web_game_wrong_short")),Nn("div",{class:"learn-game-explain"},y.explanation)),_.append(O),z&&(u=z.replay(y.clicks,()=>O.before(V("p",{class:"learn-swing-try"},p("web_game_try"))))),O.focus({preventScroll:!0})};s.replaceChildren(...S,k,_)},x=()=>{m(),a.textContent="";const y=V("button",{class:"primary"},p("web_game_again"));y.addEventListener("click",()=>{o=l=0,f()}),s.replaceChildren(V("p",{class:"learn-game-result"},p("web_game_done_fmt",l,r)),V("p",{},p(l===r?"web_game_perfect":l>=r*.7?"web_game_good":"web_game_practice_short")),y)},b=V("button",{class:"primary"},p("web_game_start"));return b.addEventListener("click",f),s.append(Nn("p",{},i.intro),b),t}function pD(i){const e=[...Array(i).keys()];for(;e.every((t,n)=>t===n);)for(let t=i-1;t>0;t--){const n=Math.floor(Math.random()*(t+1));[e[t],e[n]]=[e[n],e[t]]}return e}function Uu(i){const e=i.split(` -`).map(n=>V("div",{class:"ln"},n||" "));return{element:V("pre",{class:"learn-game-code mono",dir:"ltr"},...e),highlight(n,a){e.forEach((s,r)=>s.classList.toggle("hit",n!==void 0&&r>=n&&r<=(a??n)))}}}function fD(i,e){const t=Zh(i),n=V("div",{class:"learn-swing-window",dir:"ltr"});n.append(V("div",{class:"learn-swing-title"},i.title||" "));const a=V("div",{class:"learn-swing-body"}),s=new Map;for(const c of i.labels){const d=V("div",{class:"learn-swing-label"},t.texts[c.name]);s.set(c.name,d),a.append(d)}const r=i.buttons.map(c=>{const d=V("button",{class:"learn-swing-button",disabled:""},t.texts[c.name]);return s.set(c.name,d),a.append(d),d}),o=V("p",{class:"learn-swing-event",role:"status"}),l=V("pre",{class:"learn-swing-console mono",hidden:""});n.append(a,o,l);const u=c=>{var h,g;const d=s.get(c.button);d.classList.add("pressed"),window.setTimeout(()=>d.classList.remove("pressed"),350),e.highlight((h=c.listener)==null?void 0:h.from,(g=c.listener)==null?void 0:g.to),o.textContent=c.listener?p("web_game_event_fmt",d.textContent??""):p("web_game_nobody"),o.className=`learn-swing-event ${c.listener?"heard":"nobody"}`;for(const[f,x]of Object.entries(c.texts)){const b=s.get(f);b&&b.textContent!==x&&(b.textContent=x,b.classList.remove("changed"),b.offsetWidth,b.classList.add("changed"))}c.console.length&&(l.hidden=!1,l.textContent+=c.console.map(f=>`${f} -`).join(""))},m=c=>u(Mh(i,t,c));return{element:n,replay(c,d){const h=c.map((g,f)=>window.setTimeout(()=>m(g),(f+.3)*qu));return h.push(window.setTimeout(()=>{i.buttons.forEach((g,f)=>{r[f].disabled=!1,r[f].addEventListener("click",()=>u(Lh(i,t,g.name)))}),d()},(c.length+.3)*qu)),h}}}function xD(i){return V("pre",{class:"learn-game-file mono",dir:"ltr"},i)}function bD(i){const e=Bh(i),t=V("div",{class:"learn-layout-window",dir:"ltr"},V("div",{class:"learn-layout-title"})),n=V("div",{class:`learn-layout-body ${e.kind}`}),a=(s,r)=>V("span",{class:"learn-layout-cell",...r?{style:`grid-area:${r}`}:{}},s);if(e.kind==="border")for(const[s,r]of Object.entries(e.areas))n.append(a(r,s));else if(e.kind==="grid"){const s=Math.max(...e.rows.map(r=>r.length));n.style.gridTemplateColumns=`repeat(${s}, 1fr)`;for(const r of e.rows)for(let o=0;oa(r))));return t.append(n),t}function R(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function vn(i,e,t){const n=R(i,e);return n.innerHTML=Re(t),n}function $u(i){return R("pre",{class:"learn-game-code mono",dir:"ltr"},...i.split(` -`).map(e=>R("div",{class:"ln"},e||" ")))}function yD(i,e){const t=R("section",{class:"learn-game learn-rescue"}),n=R("div",{class:"learn-game-head"});n.append(R("img",{src:e,alt:"",width:"40",height:"40"}),R("strong",{},i.title));const a=i.stations.length,s=i.stations.map(()=>R("span",{class:"learn-rescue-dot"})),r=R("img",{class:"learn-rescue-ludwig",src:e,alt:"",width:"32",height:"32"}),o=R("span",{class:"learn-rescue-tower","aria-hidden":"true"},"🏰",R("span",{class:"learn-rescue-zora"},"🐐"),R("span",{class:"learn-rescue-fox"},"🦊")),l=R("span",{class:"learn-rescue-free"},"🐐"),u=R("div",{class:"learn-rescue-path","aria-hidden":"true"},r,...s,o),m=R("p",{class:"learn-game-status"}),c=R("div",{class:"learn-game-stage"}),d=vD(i);t.append(n,u,m,c);let h=0;const g=()=>{s.forEach((z,k)=>z.classList.toggle("done",k{const z=[...i.alphabet].map((k,_)=>R("span",{class:"learn-rescue-letter"},R("b",{},k),R("small",{},String(_))));return{element:R("div",{class:"learn-rescue-alphabet mono",dir:"ltr"},...z),cells:z}},x=z=>{const k=i.stations[z];m.textContent=p("web_learn_rescue_station_fmt",z+1,a,k.name);const _=f(),T=R("input",{type:"text",inputmode:"numeric",autocomplete:"off",class:"learn-rescue-number mono","aria-label":p("web_learn_rescue_number")}),j=R("button",{class:"primary"},p("web_learn_check")),C=R("div",{class:"learn-game-feedback",role:"status"}),P=()=>{const O=T.value.trim();if(!/^-?\d+$/.test(O)){C.className="learn-game-feedback wrong",C.replaceChildren(R("p",{},p("web_learn_rescue_not_number")));return}if(Number(O)!==k.answer){C.className="learn-game-feedback wrong",C.replaceChildren(R("p",{},p("web_learn_rescue_wrong")),...k.hint?[vn("div",{class:"learn-game-explain"},`**${p("web_learn_hint")}:** ${k.hint}`)]:[]),T.select();return}T.disabled=j.disabled=!0;const L=i.alphabet.charAt(k.answer);_.cells[k.answer].classList.add("hit"),d.give(k.row,k.col,L),h++,g();const E=z+1===a,Q=R("button",{class:"primary"},p(E?"web_learn_rescue_to_crossword":"web_game_next"));Q.addEventListener("click",()=>E?b():x(z+1)),C.className="learn-game-feedback right",C.replaceChildren(R("p",{},p("web_game_right")),R("p",{class:"learn-rescue-charat mono",dir:"ltr"},`alphabet.charAt(${k.answer})`,R("span",{"aria-hidden":"true"}," → "),R("code",{},`'${L}'`)),vn("div",{class:"learn-game-explain"},k.explanation),R("p",{class:"learn-rescue-moved"},p("web_learn_rescue_letter_moved")),Q),Q.focus({preventScroll:!0})};j.addEventListener("click",P),T.addEventListener("keydown",O=>{O.key==="Enter"&&P()}),c.replaceChildren($u(k.code),vn("p",{class:"learn-game-question"},k.question),R("div",{class:"learn-rescue-answer"},T,j),C,R("p",{class:"learn-rescue-label"},p("web_learn_rescue_alphabet")),$u(`String alphabet = "${i.alphabet}";`),_.element,d.element),T.focus({preventScroll:!0})},b=()=>{m.textContent=p("web_learn_rescue_crossword");const z=R("div",{class:"learn-game-feedback",role:"status"}),k=R("button",{class:"primary"},p("web_learn_check"));k.addEventListener("click",()=>{if(!d.check()){z.className="learn-game-feedback wrong",z.replaceChildren(R("p",{},p("web_learn_rescue_cw_wrong")));return}k.disabled=!0,d.lock();const _=R("button",{class:"primary"},p("web_learn_rescue_to_gate"));_.addEventListener("click",y),z.className="learn-game-feedback right",z.replaceChildren(R("p",{},p("web_learn_rescue_cw_done")),_),_.focus({preventScroll:!0})}),d.unlock(),c.replaceChildren(vn("p",{},i.crosswordText),d.element,k,z),d.focusFirst()},y=()=>{m.textContent=p("web_learn_rescue_gate");const z=R("input",{type:"text",autocomplete:"off",autocapitalize:"off",spellcheck:"false",class:"learn-rescue-word mono",size:String(i.keyword.length+2),"aria-label":p("web_learn_rescue_word")}),k=i.gateCode.split(` -`).map(C=>{const P=C.indexOf(cs);return P<0?R("div",{class:"ln"},C||" "):R("div",{class:"ln"},C.slice(0,P),z,C.slice(P+cs.length))}),_=R("button",{class:"primary"},p("web_learn_rescue_open")),T=R("div",{class:"learn-game-feedback",role:"status"}),j=()=>{const C=z.value.trim();if(C!==i.keyword){const O=C.toUpperCase()===i.keyword.toUpperCase();T.className="learn-game-feedback wrong",T.replaceChildren(R("p",{},p(O?"web_learn_rescue_gate_case":"web_learn_rescue_gate_wrong"))),z.select();return}z.disabled=_.disabled=!0,t.classList.add("freed"),r.after(l),m.textContent="";const P=R("button",{},p("web_game_again"));P.addEventListener("click",w),T.className="learn-game-feedback right",T.replaceChildren(R("p",{},p("web_learn_rescue_freed")),vn("div",{class:"learn-game-explain"},i.end),P)};_.addEventListener("click",j),z.addEventListener("keydown",C=>{C.key==="Enter"&&j()}),c.replaceChildren(vn("p",{},i.gateText),R("div",{class:"learn-game-code mono learn-rescue-gate",dir:"ltr"},...k),_,T),z.focus({preventScroll:!0})},w=()=>{h=0,t.classList.remove("freed"),l.remove(),d.reset(),g(),x(0)},S=R("button",{class:"primary"},p("web_game_start"));return S.addEventListener("click",w),c.append(vn("p",{},i.intro),S),t}function vD(i){const e=jB(i),t=new Map(i.solution.map((g,f)=>[`${g.row} ${g.col}`,f])),n=new Map;for(const g of i.words)n.set(`${g.row} ${g.col}`,g.number);const a=new Map,s=R("div",{class:"learn-cw-grid",dir:"ltr"});s.style.gridTemplateColumns=`repeat(${i.cols}, var(--cw-cell))`;let r=!0;const o=(g,f)=>i.words.filter(x=>x.across?x.row===g&&f>=x.col&&f=x.row&&g{var y;const b=r?`${g} ${f+x}`:`${g+x} ${f}`;(y=a.get(b))==null||y.focus()};e.forEach((g,f)=>g.forEach((x,b)=>{if(!x)return s.append(R("span",{class:"learn-cw-empty"}));const y=`${f} ${b}`,w=R("input",{type:"text",maxlength:"1",autocomplete:"off",autocapitalize:"characters",spellcheck:"false","aria-label":p("web_learn_rescue_cell_fmt",f+1,b+1)});w.disabled=!0,w.addEventListener("focus",()=>{const _=o(f,b);_.some(T=>T.across===r)||(r=_[0].across),w.select()}),w.addEventListener("input",()=>{w.value=w.value.slice(-1).toUpperCase(),w.classList.remove("wrong"),c(),w.value&&l(f,b,1)}),w.addEventListener("keydown",_=>{if(_.key==="Backspace"&&!w.value)l(f,b,-1);else if(_.key==="ArrowRight"||_.key==="ArrowLeft")r=!0,l(f,b,_.key==="ArrowRight"?1:-1);else if(_.key==="ArrowDown"||_.key==="ArrowUp")r=!1,l(f,b,_.key==="ArrowDown"?1:-1);else return;_.preventDefault()}),a.set(y,w);const S=t.get(y),z=R("span",{class:`learn-cw-cell${S!==void 0?" key":""}`}),k=n.get(y);k&&z.append(R("small",{class:"learn-cw-number"},String(k))),S!==void 0&&z.append(R("small",{class:"learn-cw-keyindex"},String(S+1))),z.append(w),s.append(z)}));const u=g=>{const f=R("ol",{class:"learn-cw-clues"});for(const x of i.words.filter(b=>b.across===g).sort((b,y)=>b.number-y.number)){const b=vn("li",{value:String(x.number)},`${x.clue} (${x.word.length})`);b.addEventListener("click",()=>{var y;r=x.across,(y=a.get(`${x.row} ${x.col}`))==null||y.focus()}),f.append(b)}return R("div",{},R("strong",{},p(g?"web_learn_rescue_across":"web_learn_rescue_down")),f)},m=i.solution.map(()=>R("span",{class:"learn-cw-keybox"})),c=()=>i.solution.forEach((g,f)=>m[f].textContent=a.get(`${g.row} ${g.col}`).value||" "),d=R("div",{class:"learn-cw"},R("div",{class:"learn-cw-board"},s,R("p",{class:"learn-cw-keyword"},`${p("web_learn_rescue_keyword")} `,R("span",{class:"mono",dir:"ltr"},...m))),R("div",{class:"learn-cw-cluebox"},u(!0),u(!1))),h=new Set;return{element:d,give(g,f,x){const b=a.get(`${g} ${f}`);b.value=x,b.parentElement.classList.add("given","arrived"),h.add(`${g} ${f}`),c()},unlock(){for(const[g,f]of a)f.disabled=h.has(g)},lock(){for(const g of a.values())g.disabled=!0},focusFirst(){var g;(g=[...a].find(([f])=>!h.has(f)))==null||g[1].focus({preventScroll:!0})},check(){let g=!0;for(const[f,x]of a){const[b,y]=f.split(" ").map(Number),w=x.value!==e[b][y];x.classList.toggle("wrong",w),w&&(g=!1)}return g},reset(){h.clear();for(const g of a.values())g.value="",g.disabled=!0,g.classList.remove("wrong"),g.parentElement.classList.remove("given","arrived");c()}}}function zt(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function Yu(i,e,t){const n=zt(i,e);return n.innerHTML=Re(t),n}function wD(i){const e=zt("section",{class:"learn-cloze"});e.append(zt("strong",{class:"learn-cloze-title"},i.title)),i.task&&e.append(Yu("p",{},i.task)),e.append(zt("p",{class:"learn-cloze-hint"},p("web_learn_cloze_hint")));const t=[];for(const m of i.blocks){const c=zt("pre",{class:"learn-cloze-code mono",dir:"ltr"});for(const d of m){const h=zt("div",{class:"ln"});for(const g of d){if(typeof g=="string"){h.append(g);continue}const f=zt("input",{type:"text",class:"learn-cloze-gap mono",autocomplete:"off",autocapitalize:"off",autocorrect:"off",spellcheck:"false",enterkeyhint:"done","aria-label":`${t.length+1}`});f.style.width=`${Math.max(3,...g.answers.map(x=>x.length))+1}ch`,t.push({input:f,answers:g.answers}),h.append(f)}d.length||h.append(` -`),c.append(h)}e.append(c)}const n=zt("p",{class:"learn-cloze-status",role:"status"}),a=i.explanation?Yu("p",{class:"learn-explanation"},i.explanation):void 0;a&&(a.hidden=!0);const s=zt("button",{class:"learn-cloze-check"},p("web_learn_check")),r=zt("button",{},p("web_learn_cloze_solution")),o=zt("button",{},p("web_learn_cloze_again"));r.hidden=!0,o.hidden=!0;const l=zt("div",{class:"learn-cloze-actions"},s,r,o);e.append(l,n),a&&e.append(a);const u=()=>{var d;let m=0;for(const h of t){const g=LB(h.answers,h.input.value);h.input.classList.toggle("right",g),h.input.classList.toggle("wrong",!g),g&&m++}const c=m===t.length;n.textContent=c?p("web_learn_cloze_all_right"):p("web_learn_cloze_score_fmt",m,t.length),n.className=`learn-cloze-status ${c?"right":"wrong"}`,a&&(a.hidden=!c),c?(t.forEach(h=>h.input.disabled=!0),s.hidden=!0,o.hidden=!1):(r.hidden=!1,(d=t.find(h=>h.input.classList.contains("wrong")))==null||d.input.focus())};return s.addEventListener("click",u),r.addEventListener("click",()=>{for(const m of t)m.input.value=m.answers[0],m.input.classList.remove("right","wrong"),m.input.classList.add("shown"),m.input.disabled=!0;n.textContent="",n.className="learn-cloze-status",a&&(a.hidden=!1),s.hidden=!0,r.hidden=!0,o.hidden=!1}),o.addEventListener("click",()=>{var m;for(const c of t)c.input.value="",c.input.classList.remove("right","wrong","shown"),c.input.disabled=!1;n.textContent="",n.className="learn-cloze-status",a&&(a.hidden=!0),s.hidden=!1,r.hidden=!0,o.hidden=!0,(m=t[0])==null||m.input.focus()}),t.forEach((m,c)=>{m.input.addEventListener("input",()=>m.input.classList.remove("right","wrong")),m.input.addEventListener("keydown",d=>{d.key==="Enter"&&(d.preventDefault(),c[...o.querySelectorAll("strong")])){const o=ju(e),l=o==null?void 0:o.exec(r.textContent??""),u=l?Cu(e,l[0]):void 0;u&&n.add(u)}let a=e.filter(r=>!n.has(r));for(const r of t){const o=document.createTreeWalker(r,NodeFilter.SHOW_TEXT),l=[];for(;o.nextNode();){const u=o.currentNode;(s=u.parentElement)!=null&&s.closest(zD)||l.push(u)}for(let u of l)for(;;){const m=ju(a),c=m==null?void 0:m.exec(u.data),d=c?Cu(a,c[0]):void 0;if(!c||!d)break;const h=u.splitText(c.index);u=h.splitText(c[0].length);const g=document.createElement("span");g.className="term",g.tabIndex=0,g.setAttribute("role","button"),g.setAttribute("aria-describedby","term-tip"),g.dataset.term=d.term,g.dataset.text=d.text,h.replaceWith(g),g.append(h),a=a.filter(f=>f!==d)}}}function ID(i){const e=document.createElement("div");e.id="term-tip",e.className="term-tip",e.setAttribute("role","tooltip"),e.hidden=!0,document.body.append(e);let t,n=!1;const a=o=>{t=o,e.replaceChildren();const l=document.createElement("strong");l.textContent=o.dataset.term??"",e.append(l,document.createTextNode(" "+(o.dataset.text??""))),e.hidden=!1;const u=o.getBoundingClientRect(),m=e.offsetWidth,c=e.offsetHeight,d=Math.max(8,Math.min(u.left,window.innerWidth-m-8)),h=u.bottom+6;e.style.left=`${d}px`,e.style.top=`${h+c>window.innerHeight-8?Math.max(8,u.top-c-6):h}px`,o.setAttribute("aria-expanded","true")},s=()=>{t==null||t.setAttribute("aria-expanded","false"),t=void 0,n=!1,e.hidden=!0},r=o=>{var l,u;return((u=(l=o.target)==null?void 0:l.closest)==null?void 0:u.call(l,".term"))??void 0};return i.addEventListener("pointerover",o=>{const l=r(o);l&&o.pointerType==="mouse"&&!n&&a(l)}),i.addEventListener("pointerout",o=>{r(o)&&o.pointerType==="mouse"&&!n&&s()}),i.addEventListener("click",o=>{const l=r(o);if(l){if(n&&t===l)return s();a(l),n=!0}}),i.addEventListener("focusin",o=>{const l=r(o);l&&!n&&a(l)}),i.addEventListener("focusout",o=>{r(o)&&!n&&s()}),i.addEventListener("keydown",o=>{const l=r(o);o.key==="Escape"&&t?s():l&&(o.key==="Enter"||o.key===" ")&&(o.preventDefault(),l.click())}),i.addEventListener("scroll",s,!0),document.addEventListener("pointerdown",o=>{t&&!r(o)&&!e.contains(o.target)&&s()}),{hide:s}}const Yh={leiste:".topbar > .toolbar",werkzeuge:".diagram-tools",dateien:".files-rail, .files",codelive:".live-rail, .livecode",ausfuehren:"[data-run=play]",konsole:".livecode .console",einzelschritt:"[data-run=step]",elemente:".palette",struktogramm:".canvas",objektinspektor:".inspector",reiter:".tabs",titel:".caption",neu:"[data-action=new]",oeffnen:"[data-action=open]",speichern:"[data-action=save]",exportieren:"[data-action=export]",rueckgaengig:"[data-action=undo]",textgroesse:"[data-action=settings]",einstellungen:"[data-action=settings]",lernen:".learn .learn-hide",code:"[data-action=code]",simulation:"[data-action=simulate]"},kD=new Set(["werkzeuge","elemente","struktogramm","objektinspektor","reiter","titel","rueckgaengig","exportieren","code","simulation"]),SD=new Set(["ausfuehren","konsole","einzelschritt"]);function n0(i,e){return[...i.querySelectorAll(".ui-pointer")].some(t=>e.has(t.dataset.target??""))}function _D(i){return n0(i,new Set(["dateien"]))}function TD(i){return n0(i,kD)}function OD(i){return n0(i,SD)}function Ku(i){for(const e of i.querySelectorAll('a[href^="#zeige-"]')){const t=e.getAttribute("href").slice(7);if(!(t in Yh))continue;const n=document.createElement("span");n.className="ui-pointer",n.tabIndex=0,n.setAttribute("role","button"),n.dataset.target=t,n.append(...e.childNodes),e.replaceWith(n)}}function AD(i){let e,t;const n=()=>{e==null||e.classList.remove("ui-spot"),e=void 0,window.clearTimeout(t)},a=(r,o)=>{n();const l=[...document.querySelectorAll(Yh[r.dataset.target??""]??":not(*)")].find(u=>u.getClientRects().length>0);l&&(e=l,l.classList.add("ui-spot"),o&&(t=window.setTimeout(n,2500)))},s=r=>{var o,l;return((l=(o=r.target)==null?void 0:o.closest)==null?void 0:l.call(o,".ui-pointer"))??void 0};return i.addEventListener("pointerover",r=>{const o=s(r);o&&r.pointerType==="mouse"&&a(o,!1)}),i.addEventListener("pointerout",r=>{s(r)&&r.pointerType==="mouse"&&n()}),i.addEventListener("click",r=>{const o=s(r);o&&a(o,!0)}),i.addEventListener("focusin",r=>{const o=s(r);o&&a(o,!1)}),i.addEventListener("focusout",r=>{s(r)&&n()}),i.addEventListener("keydown",r=>{const o=s(r);o&&(r.key==="Enter"||r.key===" ")&&(r.preventDefault(),a(o,!0))}),{off:n}}const kt='',PD=()=>{const i=[];for(const e of Ot){const t=i.at(-1);t&&t.name===e.section?t.lessons.push(e):i.push({name:e.section,lessons:[e]})}return i};function A(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function gt(i,e,t){const n=A(i,e);return n.innerHTML=t,n}const jD=i=>p(`element_${I[i]}`);function CD(i){return{caption:i,elements:[ze(I.anweisung,{textLines:["ø"]})]}}function em(i){const e=i.start?X1(i.start):void 0;return e?{...e,caption:e.caption||i.title}:CD(i.title)}class BD{constructor(e){v(this,"element");v(this,"tab","lessons");v(this,"returnTo");v(this,"lessonId");v(this,"taskId");v(this,"body");v(this,"tips");v(this,"pointers");this.host=e,this.element=A("aside",{class:"learn","aria-label":p("web_learn_title")}),this.tips=ID(this.element),this.pointers=AD(this.element),hs(Mu(i1())),this.restore()}restore(){const e=ge.view();e&&(this.tab=["lessons","tasks","reference"].find(t=>t===e.tab)??"lessons",this.lessonId=Ot.some(t=>t.id===e.lesson)?e.lesson:void 0,this.taskId=Tn.some(t=>t.id===e.task)?e.task:void 0),this.render()}render(){this.tips.hide(),this.pointers.off(),hs(Mu(i1()));const e=A("div",{class:"segmented learn-tabs",role:"tablist"});for(const[a,s]of[["lessons",p("web_learn_lessons")],["tasks",p("web_learn_tasks")],["reference",p("web_learn_reference")]]){const r=A("button",{role:"tab","aria-pressed":String(this.tab===a),"data-learn-tab":a},s);r.addEventListener("click",()=>{this.tab===a&&(a==="lessons"&&(this.lessonId=void 0),a==="tasks"&&(this.taskId=void 0)),this.tab=a,this.persist(),this.render()}),e.append(r)}const t=gt("button",{class:"learn-hide",title:p("web_learn_hide"),"aria-label":p("web_learn_hide")},kt);t.addEventListener("click",()=>this.host.collapse());const n=A("div",{class:"learn-head"},e,t);if(this.body=A("div",{class:"learn-body"}),this.element.replaceChildren(n,this.body),this.tab==="lessons"){const a=Ot.find(s=>s.id===this.lessonId);a?this.renderLesson(a):this.renderLessonList()}else if(this.tab==="tasks"){const a=Tn.find(s=>s.id===this.taskId);a?this.renderTask(a):this.renderTaskList()}else{const a=La.map(r=>`- **${r.term}:** ${r.text}`).join(` + `;const e=a=>this.element.querySelector(a);this.buttons={play:e("[data-sim=play]"),pause:e("[data-sim=pause]"),step:e("[data-sim=step]"),stop:e("[data-sim=stop]")},this.buttons.play.addEventListener("click",()=>this.play()),this.buttons.pause.addEventListener("click",()=>this.pause()),this.buttons.step.addEventListener("click",()=>this.step()),this.buttons.stop.addEventListener("click",()=>this.reset()),this.editButton=e(".sim-edit"),this.editButton.addEventListener("click",()=>this.onEdit());const t=e("[data-sim=highlight]");t.value=this.highlightMode,t.addEventListener("change",()=>{this.highlightMode=t.value,Vu(Hu,this.highlightMode)});const n=e("[data-sim=delay]");n.value=this.delay,n.addEventListener("change",()=>{this.delay=n.value,Vu(fr,this.delay)}),this.inputSection=e(".sim-input > div"),this.trace=e(".sim-trace"),this.variables=e(".sim-vars"),this.output=e(".sim-output"),this.notice=e(".sim-notice")}collectOutput(){const e=this.engine.state.outputLines;for(;this.printedr.localeCompare(o));if(n.length===0)this.variables.innerHTML=`

${Ae(p("simulation_variables_placeholder"))}

`;else{const r=document.createElement("table");for(const o of n){const l=r.insertRow();l.insertCell().textContent=o;const u=e.variables.get(o),m=l.insertCell();u.kind==="grid"?m.append(Uh(u)):m.textContent=we(u)}this.variables.replaceChildren(r)}e.outputLines.length===0&&e.files.size===0?this.output.innerHTML=`

${Ae(p("simulation_output_placeholder"))}

`:(this.output.replaceChildren(...e.outputLines.map(r=>{const o=document.createElement("div");return o.textContent=r,o}),...qh(e.files)),this.output.scrollTop=this.output.scrollHeight)}updateInput(){const e=this.engine.state.inputRequest,t=this.inputSection;if(t.parentElement.classList.toggle("active",!!e),!e){t.innerHTML=`

${Ae(p("simulation_input_placeholder"))}

`;return}let n=t.querySelector("form");if(!n){n=document.createElement("form"),n.innerHTML=`

`;const l=n.querySelector("input");n.addEventListener("submit",u=>{u.preventDefault(),this.submitInput(l)}),t.replaceChildren(n),requestAnimationFrame(()=>l.focus())}const a=this.engine.state.outputLines;n.querySelector(".sim-prompt").textContent=e.prompt||(a[a.length-1]??"");const s=n.querySelector("input");s.inputMode=e.valueType==="string"||e.valueType==="boolean"?"text":"decimal";const r=this.engine.state.inputErrorNotice,o=n.querySelector(".sim-input-error");o.textContent=r?Kn(r):"",o.hidden=!r}}function Uh(i){const e=document.createElement("table");e.className="sim-grid";for(const t of i.value){const n=e.insertRow();for(const a of t){const s=n.insertCell();s.textContent=String(a),a===!0&&(s.className="sim-grid-true")}}return e}const f1=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZ"),Jn=360/f1.length,lD="http://www.w3.org/2000/svg";function Me(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function ft(i,e={},t){const n=document.createElementNS(lD,i);for(const[a,s]of Object.entries(e))n.setAttribute(a,String(s));return t!==void 0&&(n.textContent=t),n}function uD(i,e){const t=(e%26+26)%26;return Array.from(i).map(n=>{const a=n.charCodeAt(0);return a>=65&&a<=90?String.fromCharCode((a-65+t)%26+65):a>=97&&a<=122?String.fromCharCode((a-97+t)%26+97):n}).join("")}function Qu(i,e){const t=ft("g",{class:e}),n=f1.map((a,s)=>{const r=ft("g",{transform:`rotate(${s*Jn})`});return r.append(ft("text",{x:0,y:-i,"text-anchor":"middle","dominant-baseline":"central"},a)),t.append(r),r});return{group:t,cells:n}}function mD(i,e){let t=i,n=!1,a=-t*Jn;const s=Me("section",{class:"learn-game learn-caesar"});s.append(Me("div",{class:"learn-game-head"},Me("strong",{},p("web_learn_caesar_title")))),s.append(Me("p",{class:"learn-game-status"},p("web_learn_caesar_hint")));const r=ft("svg",{viewBox:"-200 -200 400 400",class:"learn-caesar-disc",role:"img"});r.append(ft("circle",{r:196,class:"outer-disc"})),r.append(ft("path",{d:cD(196,92,Jn/2),class:"window"}));const o=Qu(168,"outer-letters");r.append(o.group);for(let O=0;O{o.cells.forEach((L,E)=>L.classList.toggle("marked",E===O)),u.cells.forEach((L,E)=>L.classList.toggle("marked",O!==void 0&&E===(O+t)%26))},_=()=>{m.textContent=String(t),l.setAttribute("transform",`rotate(${a})`),r.setAttribute("aria-label",p("web_learn_caesar_key_fmt",t)),b.textContent=p(n?"web_learn_caesar_secret":"web_learn_caesar_plain"),w.textContent=p(n?"web_learn_caesar_plain":"web_learn_caesar_secret"),f.classList.toggle("active",!n),x.classList.toggle("active",n),S.textContent=uD(y.value,n?-t:t)||" ";const O=Array.from(y.value.toUpperCase()).reverse().find(E=>f1.includes(E));if(O===void 0)return k();const L=f1.indexOf(O);k(n?(L-t+26)%26:L)},T=O=>{t=(O%26+26)%26,a=-t*Jn,_()};c.addEventListener("click",()=>T(t-1)),d.addEventListener("click",()=>T(t+1)),f.addEventListener("click",()=>{var O;n&&(y.value=((O=S.textContent)==null?void 0:O.trim())??""),n=!1,_()}),x.addEventListener("click",()=>{var O;n||(y.value=((O=S.textContent)==null?void 0:O.trim())??""),n=!0,_()}),y.addEventListener("input",_),o.cells.forEach((O,L)=>O.addEventListener("click",()=>k(L)));let j;const C=O=>{const L=r.getBoundingClientRect();return Math.atan2(O.clientY-(L.top+L.height/2),O.clientX-(L.left+L.width/2))*180/Math.PI};l.addEventListener("pointerdown",O=>{const L=O;j=C(L)-a,l.classList.add("dragging"),r.setPointerCapture(L.pointerId),L.preventDefault()}),r.addEventListener("pointermove",O=>{if(j===void 0)return;a=C(O)-j,l.setAttribute("transform",`rotate(${a})`);const L=Math.round(-a/Jn);if((L%26+26)%26!==t){t=(L%26+26)%26;const E=a;_(),a=E,l.setAttribute("transform",`rotate(${a})`)}});const P=()=>{j!==void 0&&(j=void 0,l.classList.remove("dragging"),T(t))};return r.addEventListener("pointerup",P),r.addEventListener("pointercancel",P),_(),s}function cD(i,e,t){const n=(a,s)=>{const r=(s-90)*Math.PI/180;return`${(a*Math.cos(r)).toFixed(2)} ${(a*Math.sin(r)).toFixed(2)}`};return`M ${n(i,-t)} A ${i} ${i} 0 0 1 ${n(i,t)} L ${n(e,t)} A ${e} ${e} 0 0 0 ${n(e,-t)} Z`}const t0=i=>p(`web_visubot_part_${i}`),$h=new WeakMap;function Yh(i,e,t,n){const a=document.createElement("div");a.className="visubot-model";const s=document.createElement("div");s.className="visubot-stage";const r=document.createElement("div");r.className="visubot-part-label",r.hidden=!0,s.append(r);const o=(c,d,h)=>{r.hidden=!1,r.textContent=t0(c),r.style.left=`${Math.min(d+12,s.clientWidth-140)}px`,r.style.top=`${h+12}px`},l=document.createElement("p");l.className="visubot-model-hint hint",l.textContent=p("web_visubot_tap_part"),l.hidden=!!n,a.append(s,l);const u=q(async()=>{const{Robot3D:c}=await import("./robot3d-io7_npI9.js");return{Robot3D:c}},[],import.meta.url).then(({Robot3D:c})=>{const d=new c(s);d.showcase(),d.highlight(i),i.includes("leds")&&d.setLed([40,90,255]),d.focusOn([],e==="unten"||e==="bottom"?"":e,!1,1),d.focusOn(i,e,t);let h;return s.addEventListener("pointerdown",g=>h={x:g.clientX,y:g.clientY}),s.addEventListener("pointerup",g=>{if(!h||Math.hypot(g.clientX-h.x,g.clientY-h.y)>5)return;const f=d.partAt(g.clientX,g.clientY);if(!f)return;if(n)return n(f);d.highlight(f);const x=s.getBoundingClientRect();o(f,g.clientX-x.left,g.clientY-x.top)}),s.addEventListener("pointermove",g=>{if(g.pointerType!=="mouse"||n)return;const f=d.partAt(g.clientX,g.clientY);if(r.hidden=!f,!f)return;const x=s.getBoundingClientRect();o(f,g.clientX-x.left,g.clientY-x.top)}),s.addEventListener("pointerleave",()=>r.hidden=!0),d}).catch(c=>{console.error(c),s.textContent=p("web_visubot_no_3d")}),m={box:a,ready:u,focus:i,view:e};return $h.set(a,m),m}function dD(i,e,t=!1){return Yh(i,e,t).box}function hD(i){const e=i.querySelector(".visubot-model"),t=e&&$h.get(e);for(const n of i.querySelectorAll("[data-robot-part]")){const a=(n.dataset.robotPart??"").split(",").filter(Boolean);if(n.title=a.map(t0).join(", "),!t)continue;const s=()=>void t.ready.then(o=>o==null?void 0:o.highlight(a)),r=()=>void t.ready.then(o=>o==null?void 0:o.highlight(t.focus));n.addEventListener("mouseenter",s),n.addEventListener("focus",s),n.addEventListener("mouseleave",r),n.addEventListener("blur",r),n.addEventListener("click",()=>{t.ready.then(o=>{o==null||o.highlight(a),o==null||o.focusOn(a,t.view)}),t.box.scrollIntoView({block:"nearest",behavior:"smooth"})})}}function gD(i,e){let t=0;const n=document.createElement("div");n.className="visubot-quiz-question";const a=document.createElement("p");a.className="visubot-quiz-feedback",a.setAttribute("aria-live","polite");const s=()=>{n.innerHTML=kn(`**${t+1}/${i.length}** ${i[t].question}`)},r=Yh([],void 0,!1,l=>{if(!(t>=i.length)){if(r.ready.then(u=>u==null?void 0:u.highlight(l)),l!==i[t].part){a.className="visubot-quiz-feedback wrong",a.textContent=p("web_visubot_quiz_wrong_fmt",t0(l));return}t++,a.className="visubot-quiz-feedback right",t{u.forEach(y=>{window.clearTimeout(y),window.clearInterval(y)}),u=[]},c=()=>{a.textContent=`${p("web_game_round_fmt",o+1,r)} · ${p("web_game_score_fmt",l)}`},d=()=>{const y=V("button",{class:"primary"},o+1{o++,o{const y=i.rounds[o],w=i.seconds,S=V("div",{class:"learn-bomb-fuse"},V("span",{})),z=V("span",{class:"learn-bomb-time"}),k=V("div",{class:"learn-bomb","aria-live":"polite"},V("span",{class:"learn-bomb-icon","aria-hidden":"true"},"💣"),z,S),_=V("div",{class:"learn-game-feedback",role:"status"}),T=y.code.split(` +`).map((E,Q)=>{const $=V("button",{class:"ln",type:"button"},E||" ");return $.disabled=!E.trim(),$.addEventListener("click",()=>O(Q+1===y.wrongLine?"right":"wrong",$)),$}),j=V("div",{class:"learn-game-code learn-bomb-code mono",dir:"ltr"},...T),C=Date.now(),P=()=>{if(!t.isConnected&&Date.now()-C>1e3)return m();const E=Math.max(0,w-(Date.now()-C)/1e3);z.textContent=p("web_game_time_fmt",Math.ceil(E)),S.firstChild.style.width=`${E/w*100}%`,k.classList.toggle("hurry",E<=5),E<=0&&O("time")},O=(E,Q)=>{m(),T.forEach((Te,xe)=>{Te.disabled=!0,xe+1===y.wrongLine&&Te.classList.add("right")}),Q&&E==="wrong"&&Q.classList.add("wrong");const $=E==="right";$&&l++,c(),k.classList.add($?"defused":"boom"),k.firstChild.textContent=$?"✂️":"💥",_.className=`learn-game-feedback ${$?"right":"wrong"}`;const he=d();_.replaceChildren(V("p",{},p($?"web_game_defused":E==="time"?"web_game_boom_time":"web_game_boom_wrong")),Nn("div",{class:"learn-game-explain"},y.explanation),V("p",{class:"learn-bomb-fix"},`${p("web_game_fix")} `,V("code",{},y.fix.trim())),he),he.focus({preventScroll:!0})};s.replaceChildren(k,Nn("p",{class:"learn-game-question"},y.question),j,_),P();const L=window.setInterval(P,200);u.push(L)},g=()=>{const y=i.rounds[o],w=[];y.code.trim()&&w.push(Uu(y.code).element),w.push(Nn("p",{class:"learn-game-question"},y.question),V("p",{class:"learn-order-hint"},p("web_game_order_hint")));const S=V("div",{class:"learn-game-options learn-order"}),z=V("div",{class:"learn-game-feedback",role:"status"});let k=0;const _=fD(y.options.length).map(j=>{const C=V("span",{class:"learn-order-badge","aria-hidden":"true"}),P=V("span",{});P.innerHTML=Re(y.options[j].text);const O=V("button",{},C,P);return O.addEventListener("click",()=>{if(j!==k)return O.classList.add("wrong"),T(!1);O.classList.add("right"),C.textContent=String(++k),O.disabled=!0,k===y.options.length&&T(!0)}),S.append(O),{k:j,b:O,badge:C}}),T=j=>{for(const{k:P,b:O,badge:L}of[..._].sort((E,Q)=>E.k-Q.k))O.disabled=!0,L.textContent=String(P+1),S.append(O);j&&l++,c(),z.className=`learn-game-feedback ${j?"right":"wrong"}`;const C=d();z.replaceChildren(V("p",{},p(j?"web_game_right":"web_game_wrong_short")),Nn("div",{class:"learn-game-explain"},y.explanation),C),C.focus({preventScroll:!0})};s.replaceChildren(...w,S,z)},f=()=>{if(m(),i.kind==="bombe"||i.kind==="reihenfolge"){c(),i.kind==="bombe"?h():g();return}const y=i.rounds[o];c();const w=Uu(y.code),S=[];let z;i.kind==="zuhoerer"?(z=xD(Zh(y.code),w),S.push(V("div",{class:"learn-swing-row"},w.element,z.element)),y.clicks.length&&S.push(V("p",{class:"learn-swing-clicks"},`${p("web_game_clicks")} `,...y.clicks.flatMap((C,P)=>[...P?[" → "]:[],V("code",{},C)])))):y.code.trim()&&S.push(w.element),S.push(Nn("p",{class:"learn-game-question"},y.question));const k=V("div",{class:`learn-game-options ${i.kind==="layout"?"pictures":""}`}),_=V("div",{class:"learn-game-feedback",role:"status"}),T=y.options.map(C=>{const P=V("button",{});return i.kind==="layout"?P.append(yD(C.text)):C.text.includes(` +`)?P.append(bD(C.text)):P.innerHTML=Re(C.text),P.addEventListener("click",()=>j(C.right,P)),k.append(P),P}),j=(C,P)=>{T.forEach((L,E)=>{L.disabled=!0,y.options[E].right&&L.classList.add("right")}),C||P.classList.add("wrong"),C&&l++,c(),_.className=`learn-game-feedback ${C?"right":"wrong"}`;const O=d();_.replaceChildren(V("p",{},p(C?"web_game_right":"web_game_wrong_short")),Nn("div",{class:"learn-game-explain"},y.explanation)),_.append(O),z&&(u=z.replay(y.clicks,()=>O.before(V("p",{class:"learn-swing-try"},p("web_game_try"))))),O.focus({preventScroll:!0})};s.replaceChildren(...S,k,_)},x=()=>{m(),a.textContent="";const y=V("button",{class:"primary"},p("web_game_again"));y.addEventListener("click",()=>{o=l=0,f()}),s.replaceChildren(V("p",{class:"learn-game-result"},p("web_game_done_fmt",l,r)),V("p",{},p(l===r?"web_game_perfect":l>=r*.7?"web_game_good":"web_game_practice_short")),y)},b=V("button",{class:"primary"},p("web_game_start"));return b.addEventListener("click",f),s.append(Nn("p",{},i.intro),b),t}function fD(i){const e=[...Array(i).keys()];for(;e.every((t,n)=>t===n);)for(let t=i-1;t>0;t--){const n=Math.floor(Math.random()*(t+1));[e[t],e[n]]=[e[n],e[t]]}return e}function Uu(i){const e=i.split(` +`).map(n=>V("div",{class:"ln"},n||" "));return{element:V("pre",{class:"learn-game-code mono",dir:"ltr"},...e),highlight(n,a){e.forEach((s,r)=>s.classList.toggle("hit",n!==void 0&&r>=n&&r<=(a??n)))}}}function xD(i,e){const t=Mh(i),n=V("div",{class:"learn-swing-window",dir:"ltr"});n.append(V("div",{class:"learn-swing-title"},i.title||" "));const a=V("div",{class:"learn-swing-body"}),s=new Map;for(const c of i.labels){const d=V("div",{class:"learn-swing-label"},t.texts[c.name]);s.set(c.name,d),a.append(d)}const r=i.buttons.map(c=>{const d=V("button",{class:"learn-swing-button",disabled:""},t.texts[c.name]);return s.set(c.name,d),a.append(d),d}),o=V("p",{class:"learn-swing-event",role:"status"}),l=V("pre",{class:"learn-swing-console mono",hidden:""});n.append(a,o,l);const u=c=>{var h,g;const d=s.get(c.button);d.classList.add("pressed"),window.setTimeout(()=>d.classList.remove("pressed"),350),e.highlight((h=c.listener)==null?void 0:h.from,(g=c.listener)==null?void 0:g.to),o.textContent=c.listener?p("web_game_event_fmt",d.textContent??""):p("web_game_nobody"),o.className=`learn-swing-event ${c.listener?"heard":"nobody"}`;for(const[f,x]of Object.entries(c.texts)){const b=s.get(f);b&&b.textContent!==x&&(b.textContent=x,b.classList.remove("changed"),b.offsetWidth,b.classList.add("changed"))}c.console.length&&(l.hidden=!1,l.textContent+=c.console.map(f=>`${f} +`).join(""))},m=c=>u(Lh(i,t,c));return{element:n,replay(c,d){const h=c.map((g,f)=>window.setTimeout(()=>m(g),(f+.3)*qu));return h.push(window.setTimeout(()=>{i.buttons.forEach((g,f)=>{r[f].disabled=!1,r[f].addEventListener("click",()=>u(Wh(i,t,g.name)))}),d()},(c.length+.3)*qu)),h}}}function bD(i){return V("pre",{class:"learn-game-file mono",dir:"ltr"},i)}function yD(i){const e=Dh(i),t=V("div",{class:"learn-layout-window",dir:"ltr"},V("div",{class:"learn-layout-title"})),n=V("div",{class:`learn-layout-body ${e.kind}`}),a=(s,r)=>V("span",{class:"learn-layout-cell",...r?{style:`grid-area:${r}`}:{}},s);if(e.kind==="border")for(const[s,r]of Object.entries(e.areas))n.append(a(r,s));else if(e.kind==="grid"){const s=Math.max(...e.rows.map(r=>r.length));n.style.gridTemplateColumns=`repeat(${s}, 1fr)`;for(const r of e.rows)for(let o=0;oa(r))));return t.append(n),t}function R(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function vn(i,e,t){const n=R(i,e);return n.innerHTML=Re(t),n}function $u(i){return R("pre",{class:"learn-game-code mono",dir:"ltr"},...i.split(` +`).map(e=>R("div",{class:"ln"},e||" ")))}function vD(i,e){const t=R("section",{class:"learn-game learn-rescue"}),n=R("div",{class:"learn-game-head"});n.append(R("img",{src:e,alt:"",width:"40",height:"40"}),R("strong",{},i.title));const a=i.stations.length,s=i.stations.map(()=>R("span",{class:"learn-rescue-dot"})),r=R("img",{class:"learn-rescue-ludwig",src:e,alt:"",width:"32",height:"32"}),o=R("span",{class:"learn-rescue-tower","aria-hidden":"true"},"🏰",R("span",{class:"learn-rescue-zora"},"🐐"),R("span",{class:"learn-rescue-fox"},"🦊")),l=R("span",{class:"learn-rescue-free"},"🐐"),u=R("div",{class:"learn-rescue-path","aria-hidden":"true"},r,...s,o),m=R("p",{class:"learn-game-status"}),c=R("div",{class:"learn-game-stage"}),d=wD(i);t.append(n,u,m,c);let h=0;const g=()=>{s.forEach((z,k)=>z.classList.toggle("done",k{const z=[...i.alphabet].map((k,_)=>R("span",{class:"learn-rescue-letter"},R("b",{},k),R("small",{},String(_))));return{element:R("div",{class:"learn-rescue-alphabet mono",dir:"ltr"},...z),cells:z}},x=z=>{const k=i.stations[z];m.textContent=p("web_learn_rescue_station_fmt",z+1,a,k.name);const _=f(),T=R("input",{type:"text",inputmode:"numeric",autocomplete:"off",class:"learn-rescue-number mono","aria-label":p("web_learn_rescue_number")}),j=R("button",{class:"primary"},p("web_learn_check")),C=R("div",{class:"learn-game-feedback",role:"status"}),P=()=>{const O=T.value.trim();if(!/^-?\d+$/.test(O)){C.className="learn-game-feedback wrong",C.replaceChildren(R("p",{},p("web_learn_rescue_not_number")));return}if(Number(O)!==k.answer){C.className="learn-game-feedback wrong",C.replaceChildren(R("p",{},p("web_learn_rescue_wrong")),...k.hint?[vn("div",{class:"learn-game-explain"},`**${p("web_learn_hint")}:** ${k.hint}`)]:[]),T.select();return}T.disabled=j.disabled=!0;const L=i.alphabet.charAt(k.answer);_.cells[k.answer].classList.add("hit"),d.give(k.row,k.col,L),h++,g();const E=z+1===a,Q=R("button",{class:"primary"},p(E?"web_learn_rescue_to_crossword":"web_game_next"));Q.addEventListener("click",()=>E?b():x(z+1)),C.className="learn-game-feedback right",C.replaceChildren(R("p",{},p("web_game_right")),R("p",{class:"learn-rescue-charat mono",dir:"ltr"},`alphabet.charAt(${k.answer})`,R("span",{"aria-hidden":"true"}," → "),R("code",{},`'${L}'`)),vn("div",{class:"learn-game-explain"},k.explanation),R("p",{class:"learn-rescue-moved"},p("web_learn_rescue_letter_moved")),Q),Q.focus({preventScroll:!0})};j.addEventListener("click",P),T.addEventListener("keydown",O=>{O.key==="Enter"&&P()}),c.replaceChildren($u(k.code),vn("p",{class:"learn-game-question"},k.question),R("div",{class:"learn-rescue-answer"},T,j),C,R("p",{class:"learn-rescue-label"},p("web_learn_rescue_alphabet")),$u(`String alphabet = "${i.alphabet}";`),_.element,d.element),T.focus({preventScroll:!0})},b=()=>{m.textContent=p("web_learn_rescue_crossword");const z=R("div",{class:"learn-game-feedback",role:"status"}),k=R("button",{class:"primary"},p("web_learn_check"));k.addEventListener("click",()=>{if(!d.check()){z.className="learn-game-feedback wrong",z.replaceChildren(R("p",{},p("web_learn_rescue_cw_wrong")));return}k.disabled=!0,d.lock();const _=R("button",{class:"primary"},p("web_learn_rescue_to_gate"));_.addEventListener("click",y),z.className="learn-game-feedback right",z.replaceChildren(R("p",{},p("web_learn_rescue_cw_done")),_),_.focus({preventScroll:!0})}),d.unlock(),c.replaceChildren(vn("p",{},i.crosswordText),d.element,k,z),d.focusFirst()},y=()=>{m.textContent=p("web_learn_rescue_gate");const z=R("input",{type:"text",autocomplete:"off",autocapitalize:"off",spellcheck:"false",class:"learn-rescue-word mono",size:String(i.keyword.length+2),"aria-label":p("web_learn_rescue_word")}),k=i.gateCode.split(` +`).map(C=>{const P=C.indexOf(cs);return P<0?R("div",{class:"ln"},C||" "):R("div",{class:"ln"},C.slice(0,P),z,C.slice(P+cs.length))}),_=R("button",{class:"primary"},p("web_learn_rescue_open")),T=R("div",{class:"learn-game-feedback",role:"status"}),j=()=>{const C=z.value.trim();if(C!==i.keyword){const O=C.toUpperCase()===i.keyword.toUpperCase();T.className="learn-game-feedback wrong",T.replaceChildren(R("p",{},p(O?"web_learn_rescue_gate_case":"web_learn_rescue_gate_wrong"))),z.select();return}z.disabled=_.disabled=!0,t.classList.add("freed"),r.after(l),m.textContent="";const P=R("button",{},p("web_game_again"));P.addEventListener("click",w),T.className="learn-game-feedback right",T.replaceChildren(R("p",{},p("web_learn_rescue_freed")),vn("div",{class:"learn-game-explain"},i.end),P)};_.addEventListener("click",j),z.addEventListener("keydown",C=>{C.key==="Enter"&&j()}),c.replaceChildren(vn("p",{},i.gateText),R("div",{class:"learn-game-code mono learn-rescue-gate",dir:"ltr"},...k),_,T),z.focus({preventScroll:!0})},w=()=>{h=0,t.classList.remove("freed"),l.remove(),d.reset(),g(),x(0)},S=R("button",{class:"primary"},p("web_game_start"));return S.addEventListener("click",w),c.append(vn("p",{},i.intro),S),t}function wD(i){const e=CB(i),t=new Map(i.solution.map((g,f)=>[`${g.row} ${g.col}`,f])),n=new Map;for(const g of i.words)n.set(`${g.row} ${g.col}`,g.number);const a=new Map,s=R("div",{class:"learn-cw-grid",dir:"ltr"});s.style.gridTemplateColumns=`repeat(${i.cols}, var(--cw-cell))`;let r=!0;const o=(g,f)=>i.words.filter(x=>x.across?x.row===g&&f>=x.col&&f=x.row&&g{var y;const b=r?`${g} ${f+x}`:`${g+x} ${f}`;(y=a.get(b))==null||y.focus()};e.forEach((g,f)=>g.forEach((x,b)=>{if(!x)return s.append(R("span",{class:"learn-cw-empty"}));const y=`${f} ${b}`,w=R("input",{type:"text",maxlength:"1",autocomplete:"off",autocapitalize:"characters",spellcheck:"false","aria-label":p("web_learn_rescue_cell_fmt",f+1,b+1)});w.disabled=!0,w.addEventListener("focus",()=>{const _=o(f,b);_.some(T=>T.across===r)||(r=_[0].across),w.select()}),w.addEventListener("input",()=>{w.value=w.value.slice(-1).toUpperCase(),w.classList.remove("wrong"),c(),w.value&&l(f,b,1)}),w.addEventListener("keydown",_=>{if(_.key==="Backspace"&&!w.value)l(f,b,-1);else if(_.key==="ArrowRight"||_.key==="ArrowLeft")r=!0,l(f,b,_.key==="ArrowRight"?1:-1);else if(_.key==="ArrowDown"||_.key==="ArrowUp")r=!1,l(f,b,_.key==="ArrowDown"?1:-1);else return;_.preventDefault()}),a.set(y,w);const S=t.get(y),z=R("span",{class:`learn-cw-cell${S!==void 0?" key":""}`}),k=n.get(y);k&&z.append(R("small",{class:"learn-cw-number"},String(k))),S!==void 0&&z.append(R("small",{class:"learn-cw-keyindex"},String(S+1))),z.append(w),s.append(z)}));const u=g=>{const f=R("ol",{class:"learn-cw-clues"});for(const x of i.words.filter(b=>b.across===g).sort((b,y)=>b.number-y.number)){const b=vn("li",{value:String(x.number)},`${x.clue} (${x.word.length})`);b.addEventListener("click",()=>{var y;r=x.across,(y=a.get(`${x.row} ${x.col}`))==null||y.focus()}),f.append(b)}return R("div",{},R("strong",{},p(g?"web_learn_rescue_across":"web_learn_rescue_down")),f)},m=i.solution.map(()=>R("span",{class:"learn-cw-keybox"})),c=()=>i.solution.forEach((g,f)=>m[f].textContent=a.get(`${g.row} ${g.col}`).value||" "),d=R("div",{class:"learn-cw"},R("div",{class:"learn-cw-board"},s,R("p",{class:"learn-cw-keyword"},`${p("web_learn_rescue_keyword")} `,R("span",{class:"mono",dir:"ltr"},...m))),R("div",{class:"learn-cw-cluebox"},u(!0),u(!1))),h=new Set;return{element:d,give(g,f,x){const b=a.get(`${g} ${f}`);b.value=x,b.parentElement.classList.add("given","arrived"),h.add(`${g} ${f}`),c()},unlock(){for(const[g,f]of a)f.disabled=h.has(g)},lock(){for(const g of a.values())g.disabled=!0},focusFirst(){var g;(g=[...a].find(([f])=>!h.has(f)))==null||g[1].focus({preventScroll:!0})},check(){let g=!0;for(const[f,x]of a){const[b,y]=f.split(" ").map(Number),w=x.value!==e[b][y];x.classList.toggle("wrong",w),w&&(g=!1)}return g},reset(){h.clear();for(const g of a.values())g.value="",g.disabled=!0,g.classList.remove("wrong"),g.parentElement.classList.remove("given","arrived");c()}}}function zt(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function Yu(i,e,t){const n=zt(i,e);return n.innerHTML=Re(t),n}function zD(i){const e=zt("section",{class:"learn-cloze"});e.append(zt("strong",{class:"learn-cloze-title"},i.title)),i.task&&e.append(Yu("p",{},i.task)),e.append(zt("p",{class:"learn-cloze-hint"},p("web_learn_cloze_hint")));const t=[];for(const m of i.blocks){const c=zt("pre",{class:"learn-cloze-code mono",dir:"ltr"});for(const d of m){const h=zt("div",{class:"ln"});for(const g of d){if(typeof g=="string"){h.append(g);continue}const f=zt("input",{type:"text",class:"learn-cloze-gap mono",autocomplete:"off",autocapitalize:"off",autocorrect:"off",spellcheck:"false",enterkeyhint:"done","aria-label":`${t.length+1}`});f.style.width=`${Math.max(3,...g.answers.map(x=>x.length))+1}ch`,t.push({input:f,answers:g.answers}),h.append(f)}d.length||h.append(` +`),c.append(h)}e.append(c)}const n=zt("p",{class:"learn-cloze-status",role:"status"}),a=i.explanation?Yu("p",{class:"learn-explanation"},i.explanation):void 0;a&&(a.hidden=!0);const s=zt("button",{class:"learn-cloze-check"},p("web_learn_check")),r=zt("button",{},p("web_learn_cloze_solution")),o=zt("button",{},p("web_learn_cloze_again"));r.hidden=!0,o.hidden=!0;const l=zt("div",{class:"learn-cloze-actions"},s,r,o);e.append(l,n),a&&e.append(a);const u=()=>{var d;let m=0;for(const h of t){const g=WB(h.answers,h.input.value);h.input.classList.toggle("right",g),h.input.classList.toggle("wrong",!g),g&&m++}const c=m===t.length;n.textContent=c?p("web_learn_cloze_all_right"):p("web_learn_cloze_score_fmt",m,t.length),n.className=`learn-cloze-status ${c?"right":"wrong"}`,a&&(a.hidden=!c),c?(t.forEach(h=>h.input.disabled=!0),s.hidden=!0,o.hidden=!1):(r.hidden=!1,(d=t.find(h=>h.input.classList.contains("wrong")))==null||d.input.focus())};return s.addEventListener("click",u),r.addEventListener("click",()=>{for(const m of t)m.input.value=m.answers[0],m.input.classList.remove("right","wrong"),m.input.classList.add("shown"),m.input.disabled=!0;n.textContent="",n.className="learn-cloze-status",a&&(a.hidden=!1),s.hidden=!0,r.hidden=!0,o.hidden=!1}),o.addEventListener("click",()=>{var m;for(const c of t)c.input.value="",c.input.classList.remove("right","wrong","shown"),c.input.disabled=!1;n.textContent="",n.className="learn-cloze-status",a&&(a.hidden=!0),s.hidden=!1,r.hidden=!0,o.hidden=!0,(m=t[0])==null||m.input.focus()}),t.forEach((m,c)=>{m.input.addEventListener("input",()=>m.input.classList.remove("right","wrong")),m.input.addEventListener("keydown",d=>{d.key==="Enter"&&(d.preventDefault(),c[...o.querySelectorAll("strong")])){const o=ju(e),l=o==null?void 0:o.exec(r.textContent??""),u=l?Cu(e,l[0]):void 0;u&&n.add(u)}let a=e.filter(r=>!n.has(r));for(const r of t){const o=document.createTreeWalker(r,NodeFilter.SHOW_TEXT),l=[];for(;o.nextNode();){const u=o.currentNode;(s=u.parentElement)!=null&&s.closest(ID)||l.push(u)}for(let u of l)for(;;){const m=ju(a),c=m==null?void 0:m.exec(u.data),d=c?Cu(a,c[0]):void 0;if(!c||!d)break;const h=u.splitText(c.index);u=h.splitText(c[0].length);const g=document.createElement("span");g.className="term",g.tabIndex=0,g.setAttribute("role","button"),g.setAttribute("aria-describedby","term-tip"),g.dataset.term=d.term,g.dataset.text=d.text,h.replaceWith(g),g.append(h),a=a.filter(f=>f!==d)}}}function kD(i){const e=document.createElement("div");e.id="term-tip",e.className="term-tip",e.setAttribute("role","tooltip"),e.hidden=!0,document.body.append(e);let t,n=!1;const a=o=>{t=o,e.replaceChildren();const l=document.createElement("strong");l.textContent=o.dataset.term??"",e.append(l,document.createTextNode(" "+(o.dataset.text??""))),e.hidden=!1;const u=o.getBoundingClientRect(),m=e.offsetWidth,c=e.offsetHeight,d=Math.max(8,Math.min(u.left,window.innerWidth-m-8)),h=u.bottom+6;e.style.left=`${d}px`,e.style.top=`${h+c>window.innerHeight-8?Math.max(8,u.top-c-6):h}px`,o.setAttribute("aria-expanded","true")},s=()=>{t==null||t.setAttribute("aria-expanded","false"),t=void 0,n=!1,e.hidden=!0},r=o=>{var l,u;return((u=(l=o.target)==null?void 0:l.closest)==null?void 0:u.call(l,".term"))??void 0};return i.addEventListener("pointerover",o=>{const l=r(o);l&&o.pointerType==="mouse"&&!n&&a(l)}),i.addEventListener("pointerout",o=>{r(o)&&o.pointerType==="mouse"&&!n&&s()}),i.addEventListener("click",o=>{const l=r(o);if(l){if(n&&t===l)return s();a(l),n=!0}}),i.addEventListener("focusin",o=>{const l=r(o);l&&!n&&a(l)}),i.addEventListener("focusout",o=>{r(o)&&!n&&s()}),i.addEventListener("keydown",o=>{const l=r(o);o.key==="Escape"&&t?s():l&&(o.key==="Enter"||o.key===" ")&&(o.preventDefault(),l.click())}),i.addEventListener("scroll",s,!0),document.addEventListener("pointerdown",o=>{t&&!r(o)&&!e.contains(o.target)&&s()}),{hide:s}}const Xh={leiste:".topbar > .toolbar",werkzeuge:".diagram-tools",dateien:".files-rail, .files",codelive:".live-rail, .livecode",ausfuehren:"[data-run=play]",konsole:".livecode .console",einzelschritt:"[data-run=step]",elemente:".palette",struktogramm:".canvas",objektinspektor:".inspector",reiter:".tabs",titel:".caption",neu:"[data-action=new]",oeffnen:"[data-action=open]",speichern:"[data-action=save]",exportieren:"[data-action=export]",rueckgaengig:"[data-action=undo]",textgroesse:"[data-action=settings]",einstellungen:"[data-action=settings]",lernen:".learn .learn-hide",code:"[data-action=code]",simulation:"[data-action=simulate]"},SD=new Set(["werkzeuge","elemente","struktogramm","objektinspektor","reiter","titel","rueckgaengig","exportieren","code","simulation"]),_D=new Set(["ausfuehren","konsole","einzelschritt"]);function n0(i,e){return[...i.querySelectorAll(".ui-pointer")].some(t=>e.has(t.dataset.target??""))}function TD(i){return n0(i,new Set(["dateien"]))}function OD(i){return n0(i,SD)}function AD(i){return n0(i,_D)}function Ku(i){for(const e of i.querySelectorAll('a[href^="#zeige-"]')){const t=e.getAttribute("href").slice(7);if(!(t in Xh))continue;const n=document.createElement("span");n.className="ui-pointer",n.tabIndex=0,n.setAttribute("role","button"),n.dataset.target=t,n.append(...e.childNodes),e.replaceWith(n)}}function PD(i){let e,t;const n=()=>{e==null||e.classList.remove("ui-spot"),e=void 0,window.clearTimeout(t)},a=(r,o)=>{n();const l=[...document.querySelectorAll(Xh[r.dataset.target??""]??":not(*)")].find(u=>u.getClientRects().length>0);l&&(e=l,l.classList.add("ui-spot"),o&&(t=window.setTimeout(n,2500)))},s=r=>{var o,l;return((l=(o=r.target)==null?void 0:o.closest)==null?void 0:l.call(o,".ui-pointer"))??void 0};return i.addEventListener("pointerover",r=>{const o=s(r);o&&r.pointerType==="mouse"&&a(o,!1)}),i.addEventListener("pointerout",r=>{s(r)&&r.pointerType==="mouse"&&n()}),i.addEventListener("click",r=>{const o=s(r);o&&a(o,!0)}),i.addEventListener("focusin",r=>{const o=s(r);o&&a(o,!1)}),i.addEventListener("focusout",r=>{s(r)&&n()}),i.addEventListener("keydown",r=>{const o=s(r);o&&(r.key==="Enter"||r.key===" ")&&(r.preventDefault(),a(o,!0))}),{off:n}}const kt='',jD=()=>{const i=[];for(const e of Ot){const t=i.at(-1);t&&t.name===e.section?t.lessons.push(e):i.push({name:e.section,lessons:[e]})}return i};function A(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function gt(i,e,t){const n=A(i,e);return n.innerHTML=t,n}const CD=i=>p(`element_${I[i]}`);function BD(i){return{caption:i,elements:[ze(I.anweisung,{textLines:["ø"]})]}}function em(i){const e=i.start?X1(i.start):void 0;return e?{...e,caption:e.caption||i.title}:BD(i.title)}class DD{constructor(e){v(this,"element");v(this,"tab","lessons");v(this,"returnTo");v(this,"lessonId");v(this,"taskId");v(this,"body");v(this,"tips");v(this,"pointers");this.host=e,this.element=A("aside",{class:"learn","aria-label":p("web_learn_title")}),this.tips=kD(this.element),this.pointers=PD(this.element),hs(Mu(i1())),this.restore()}restore(){const e=ge.view();e&&(this.tab=["lessons","tasks","reference"].find(t=>t===e.tab)??"lessons",this.lessonId=Ot.some(t=>t.id===e.lesson)?e.lesson:void 0,this.taskId=Tn.some(t=>t.id===e.task)?e.task:void 0),this.render()}render(){this.tips.hide(),this.pointers.off(),hs(Mu(i1()));const e=A("div",{class:"segmented learn-tabs",role:"tablist"});for(const[a,s]of[["lessons",p("web_learn_lessons")],["tasks",p("web_learn_tasks")],["reference",p("web_learn_reference")]]){const r=A("button",{role:"tab","aria-pressed":String(this.tab===a),"data-learn-tab":a},s);r.addEventListener("click",()=>{this.tab===a&&(a==="lessons"&&(this.lessonId=void 0),a==="tasks"&&(this.taskId=void 0)),this.tab=a,this.persist(),this.render()}),e.append(r)}const t=gt("button",{class:"learn-hide",title:p("web_learn_hide"),"aria-label":p("web_learn_hide")},kt);t.addEventListener("click",()=>this.host.collapse());const n=A("div",{class:"learn-head"},e,t);if(this.body=A("div",{class:"learn-body"}),this.element.replaceChildren(n,this.body),this.tab==="lessons"){const a=Ot.find(s=>s.id===this.lessonId);a?this.renderLesson(a):this.renderLessonList()}else if(this.tab==="tasks"){const a=Tn.find(s=>s.id===this.taskId);a?this.renderTask(a):this.renderTaskList()}else{const a=La.map(r=>`- **${r.term}:** ${r.text}`).join(` `),s=gt("div",{class:"learn-text learn-reference"},kn(`${Ma} ## ${p("web_learn_terms")} -${a}`));this.body.append(s),this.foldReference(s)}}foldReference(e){const t="visustruct.reference.open";let n=[];try{n=JSON.parse(localStorage.getItem(t)??"[]")}catch{}for(const a of[...e.querySelectorAll("h2")]){const s=a.textContent??"",r=A("details",{class:"reference-group"});r.open=n.includes(s);const o=A("summary",{},s);for(a.replaceWith(r),r.append(o);r.nextSibling&&r.nextSibling.nodeName!=="H2";)r.append(r.nextSibling);r.addEventListener("toggle",()=>{n=r.open?[...new Set([...n,s])]:n.filter(l=>l!==s);try{localStorage.setItem(t,JSON.stringify(n))}catch{}})}}showReference(){this.tab="reference",this.persist(),this.render()}persist(){ge.setView({tab:this.tab,lesson:this.lessonId,task:this.taskId})}openLesson(e){this.tab="lessons",this.lessonId=e,this.returnTo=void 0,this.persist(),this.render(),this.body.scrollTop=0}renderLessonList(){this.body.append(A("p",{class:"hint"},p("web_learn_intro")));for(const e of PD()){this.body.append(A("h3",{class:"learn-section"},e.name));const t=A("ol",{class:"learn-list"});for(const n of e.lessons){const a=ge.lesson(n.id),s=a.done?"✓":a.step>0?p("web_learn_step_of_fmt",a.step+1,n.steps.length):"",r=A("button",{class:"learn-item"+(a.done?" done":""),"data-lesson":n.id},A("span",{class:"learn-num"},String(n.number)),A("span",{class:"learn-item-text"},A("strong",{},n.robot?`🤖 ${n.title}`:n.title),A("small",{},n.summary)),A("span",{class:"learn-status"},s));r.addEventListener("click",()=>this.openLesson(n.id)),t.append(A("li",{},r))}this.body.append(t)}this.body.append(this.renderTeacherBox())}renderLesson(e){var c;const t=ge.lesson(e.id),n=Math.min(t.step,e.steps.length-1),a=e.steps[n],s=A("button",{class:"learn-back"},`← ${p("web_learn_all_lessons")}`);s.addEventListener("click",()=>this.openLesson(void 0));const r=A("nav",{class:"learn-progress","aria-label":p("web_learn_step_of_fmt",n+1,e.steps.length)});r.append(...e.steps.map((d,h)=>{const g=p("web_learn_step_fmt",h+1,d.title),f=hthis.goToStep(e,h)),x})),this.body.append(s,A("p",{class:"learn-kicker"},`${p("web_learn_lesson_fmt",e.number)} · ${e.section}${e.robot?" · 🤖 VisuBot":""}`),A("h2",{class:"learn-title"},A("span",{class:"learn-num","aria-hidden":"true"},String(e.number)),e.title),r,A("h3",{class:"learn-step-title"},`${n+1}. ${a.title}`));const o=((c=this.returnTo)==null?void 0:c.lesson)===e.id&&this.returnTo.step!==n?this.returnTo:void 0,l=()=>{const d=A("button",{class:"learn-return"},`↩ ${p("web_learn_back_to_checklist")}`);return d.addEventListener("click",()=>{this.returnTo=void 0,this.goToStep(e,o.step),this.body.scrollTop=o.scroll}),d};o&&this.body.append(l()),a.blocks.forEach((d,h)=>this.body.append(this.renderBlock(d,`${n}-${h}`,e))),Ku(this.body),dD(this.body),this.openNeededColumns(a.blocks),Xu(this.body,La);const u=A("div",{class:"learn-nav"}),m=A("button",{},`← ${p("web_learn_back")}`);if(m.disabled=n===0,m.addEventListener("click",()=>this.goToStep(e,n-1)),u.append(m),nthis.goToStep(e,n+1)),u.append(d)}else{const d=A("button",{class:"primary"},t.done?`✓ ${p("web_learn_done")}`:p("web_learn_finish"));d.addEventListener("click",()=>{ge.updateLesson(e.id,{done:!0});const h=Ot.find(g=>g.number===e.number+1);this.openLesson(h==null?void 0:h.id)}),u.append(d)}this.body.append(u),o&&this.body.append(l())}goToStep(e,t){ge.updateLesson(e.id,{step:t}),this.render(),this.body.scrollTop=0}openNeededColumns(e){const t=e.flatMap(n=>n.kind==="exercise"?[n.exercise]:[]);TD(this.body)?this.host.showEditor():_D(this.body)?this.host.showFiles():t.some(n=>n.code!=="java")?this.host.showEditor():(t.length>0||this.body.querySelector(".lesson-code[data-lang=java]"))&&this.host.showJava(),OD(this.body)&&this.host.showLiveCode()}renderTaskList(){this.body.append(A("p",{class:"hint"},p("web_learn_tasks_intro")));const e=A("ul",{class:"learn-list"});for(const t of Tn){const n=this.taskExercises(t),a=n.length>0&&n.every(o=>ge.exercise(o.id).done),s=Ot.find(o=>o.number===t.after),r=A("button",{class:"learn-item"+(a?" done":""),"data-task":t.id},A("span",{class:"learn-num","aria-label":p("web_learn_level_fmt",t.level)},"★".repeat(t.level)),A("span",{class:"learn-item-text"},A("strong",{},t.title),A("small",{},s?p("web_learn_after_fmt",s.number,s.title):"")),A("span",{class:"learn-status"},a?"✓":""));r.addEventListener("click",()=>{this.taskId=t.id,this.persist(),this.render(),this.body.scrollTop=0}),e.append(A("li",{},r))}this.body.append(e,this.renderTeacherBox())}renderTeacherBox(){const e=A("details",{class:"learn-teacher"},A("summary",{},p("web_learn_teacher")));if(Ru()){e.setAttribute("open","");const s=A("button",{},p("web_learn_teacher_off"));return s.addEventListener("click",()=>{aD(),this.render()}),e.append(A("p",{},p("web_learn_teacher_on")),s),e}const t=A("input",{type:"password",autocomplete:"off","aria-label":p("web_learn_teacher_code"),placeholder:p("web_learn_teacher_code")}),n=A("p",{class:"learn-result",role:"status"}),a=A("form",{class:"group"},t,A("button",{type:"submit"},p("web_learn_teacher_unlock")));return a.addEventListener("submit",async s=>{s.preventDefault(),await iD(t.value)?this.render():(n.className="learn-result info",n.textContent=p("web_learn_teacher_wrong"))}),e.append(A("p",{class:"hint"},p("web_learn_teacher_intro")),a,n),e}taskExercises(e){return e.blocks.flatMap(t=>t.kind==="exercise"?[t.exercise]:[])}renderTask(e){const t=A("button",{class:"learn-back"},`← ${p("web_learn_all_tasks")}`);t.addEventListener("click",()=>{this.taskId=void 0,this.persist(),this.render()});const n=Ot.find(a=>a.number===e.after);if(this.body.append(t,A("h2",{class:"learn-title"},e.title)),n){const a=A("button",{class:"link-button"},p("web_learn_after_fmt",n.number,n.title));a.addEventListener("click",()=>this.openLesson(n.id)),this.body.append(A("p",{class:"learn-kicker"},a))}e.blocks.forEach((a,s)=>this.body.append(this.renderBlock(a,`task-${s}`))),Ku(this.body),this.openNeededColumns(e.blocks),Xu(this.body,La)}renderBlock(e,t,n){switch(e.kind){case"markdown":return gt("div",{class:"learn-text"},kn(e.text));case"diagram":return this.renderDiagram(e.file,e.caption);case"exercise":return this.renderExercise(e.exercise);case"checklist":return this.renderChecklist(e.items,t,n);case"quiz":return this.renderQuiz(e.questions,t,n);case"brag":return this.renderBrag(e.text,e.tip);case"images":return this.renderImages(e.files,e.caption);case"graphic":return this.renderGraphic(e.file,e.caption);case"game":return this.renderGame(e.game);case"roundGame":return gD(e.game,aa);case"rescueGame":return yD(e.game,aa);case"caesar":return uD(e.key,e.text);case"cloze":return wD(e.cloze);case"textFile":return Vh(e.name,e.content);case"robotModel":return cD(e.focus,e.view,e.spin);case"robotQuiz":return hD(e.tasks,e.done)}}renderBrag(e,t=!1){const n=A("aside",{class:"learn-brag"});n.append(A("img",{src:aa,alt:"",width:"48",height:"48"}));const a=A("div",{},A("p",{class:"learn-brag-title"},p(t?"web_learn_ludwig_tip":"web_learn_brag")));return a.append(gt("div",{class:"learn-text"},kn(e))),n.append(a),n}renderGame(e){const n=A("section",{class:"learn-game"}),a=A("div",{class:"learn-game-head"});a.append(A("img",{src:aa,alt:"",width:"40",height:"40"}),A("strong",{},p("web_game_title")));const s=A("p",{class:"learn-game-status"}),r=A("div",{class:"learn-game-stage"});n.append(a,s,r);let o=0,l=0;const u=()=>{const d=Ux(e,o,10);s.textContent=`${p("web_game_round_fmt",o+1,10)} · ${p("web_game_score_fmt",l)}`;const h=A("div",{class:"learn-game-values mono"});for(const[w,S]of $x(d))h.append(A("code",{},`${w} = ${S}`));const g=A("div",{class:"group learn-game-answers"}),f=A("button",{class:"learn-game-true"},`✓ ${p("web_game_true")}`),x=A("button",{class:"learn-game-false"},`✗ ${p("web_game_false")}`);g.append(f,x);const b=A("div",{class:"learn-game-feedback",role:"status"}),y=w=>{f.disabled=x.disabled=!0;const S=w===d.answer;S&&l++,s.textContent=`${p("web_game_round_fmt",o+1,10)} · ${p("web_game_score_fmt",l)}`,b.className=`learn-game-feedback ${S?"right":"wrong"}`;const z=A("div",{class:"learn-game-steps mono"});Qx(d.condition,d.values).forEach((_,T)=>z.append(A("div",{},`${T?"→ ":""}${_}`)));const k=A("button",{class:"primary"},o+1<10?p("web_game_next"):p("web_game_finish"));k.addEventListener("click",()=>{o++,o<10?u():m()}),b.replaceChildren(A("p",{},p(S?"web_game_right":"web_game_wrong")),z,k),k.focus()};f.addEventListener("click",()=>y(!0)),x.addEventListener("click",()=>y(!1)),r.replaceChildren(h,A("div",{class:"learn-game-condition mono"},d.condition),g,b)},m=()=>{s.textContent="";const d=A("button",{class:"primary"},p("web_game_again"));d.addEventListener("click",()=>{o=l=0,u()}),r.replaceChildren(A("p",{class:"learn-game-result"},p("web_game_done_fmt",l,10)),A("p",{},p(l===10?"web_game_perfect":l>=10*.7?"web_game_good":"web_game_practice")),d)},c=A("button",{class:"primary"},p("web_game_start"));return c.addEventListener("click",u),r.append(A("p",{},p("web_game_intro")),c),n}renderImages(e,t){const n=A("figure",{class:"learn-figure"}),a=A("div",{class:"learn-images"});for(const s of e){const r=Fu(s);r&&a.append(A("img",{src:r,alt:"",loading:"lazy"}))}return n.append(a),t&&n.append(gt("figcaption",{},Re(t))),n}renderGraphic(e,t){const n=A("figure",{class:"learn-figure"}),a=Fu(e);return a&&n.append(A("img",{class:"learn-graphic",src:a,alt:"",loading:"lazy"})),t&&n.append(gt("figcaption",{},Re(t))),n}renderDiagram(e,t){const n=X1(e),a=A("figure",{class:"learn-figure"});if(!n)return a;const s=this.host.preview(n);s&&a.append(A("div",{class:"learn-preview",dir:"ltr"},s)),t&&a.append(gt("figcaption",{},Re(t)));const r=A("button",{},p("web_learn_open_in_editor"));return r.addEventListener("click",()=>this.host.openDiagram(n,e)),a.append(r),a}renderExercise(e){const t=A("section",{class:"learn-exercise","data-exercise":e.id}),n=()=>ge.exercise(e.id),a=A("span",{class:"learn-badge"},`✓ ${p("web_learn_solved")}`);a.hidden=!n().done,t.append(A("h4",{},`${p("web_learn_exercise")}: ${e.title}`,a),gt("div",{class:"learn-text"},kn(e.task)));const s=A("div",{class:"learn-result",role:"status"}),r=A("div",{class:"learn-hints"}),o=A("div",{class:"group"}),l=A("button",{class:"primary"},p("web_learn_open_exercise"));l.addEventListener("click",()=>{const c=n().xml;let d=em(e);if(c)try{d=Bl(c)}catch{}this.host.openExercise(e,d)});const u=A("button",{},p("web_learn_check"));if(u.addEventListener("click",()=>{const c=this.host.exerciseDocument(e.id);if(!c){s.className="learn-result info",s.textContent=p("web_learn_open_first");return}if(c.elements.every(Al)){s.className="learn-result info",s.textContent=p("web_learn_empty");return}this.host.stopSimulation();const d=Jx(c,e.tests,this.host.subprogramsFor(e.id),Wa),h=Rx(c),g=e.requires.map(b=>b==="forZaehlSchleife"?"forSchleife":b).filter(b=>b in I&&!h.has(I[b])),f=e.loopDepth!==void 0&&_o(c.elements)b.passed)&&g.length===0&&!f;this.showResult(s,d,g,x,f),x&&(ge.updateExercise(e.id,{done:!0}),a.hidden=!1)}),o.append(l,u),e.hints.length>0){const c=A("button",{},p("web_learn_hint"));c.addEventListener("click",()=>{const d=r.children.length;if(d>=e.hints.length)return;const h=e.hints.length>1?`**${p("web_learn_hint_fmt",d+1,e.hints.length)}:** `:"";r.append(gt("aside",{class:"lesson-note"},kn(h+e.hints[d]))),c.textContent=p("web_learn_hint_more"),c.toggleAttribute("disabled",d+1>=e.hints.length)}),o.append(c)}const m=A("button",{class:"danger-text"},p("web_learn_reset"));if(m.addEventListener("click",()=>{if(m.dataset.confirm!=="1"){m.dataset.confirm="1",m.textContent=p("web_learn_reset_confirm"),setTimeout(()=>{m.dataset.confirm="",m.textContent=p("web_learn_reset")},4e3);return}ge.resetExercise(e.id),this.host.resetExercise(e.id,em(e)),a.hidden=!0,s.replaceChildren(),s.className="learn-result",m.dataset.confirm="",m.textContent=p("web_learn_reset")}),o.append(m),t.append(o,r,s),Ru()&&e.solution){const c=X1(e.solution);if(c){const d=A("details",{class:"learn-solution"},A("summary",{},p("web_learn_solution")));d.addEventListener("toggle",()=>{if(!d.open||d.querySelector(".learn-preview"))return;const h=this.host.preview(c);h&&d.append(A("div",{class:"learn-preview",dir:"ltr"},h));const g=A("button",{},p("web_learn_open_in_editor"));g.addEventListener("click",()=>{this.host.openDiagram(c,e.solution);for(const f of e.subprograms){const x=X1(f);x&&this.host.openDiagram(x,f)}});for(const f of e.subprograms){const x=X1(f),b=x&&this.host.preview(x);b&&d.append(A("div",{class:"learn-preview",dir:"ltr"},b))}d.append(g)}),t.append(d)}}return t}showResult(e,t,n,a,s){var o,l,u,m,c;e.className="learn-result "+(a?"ok":"fail"),e.replaceChildren(A("p",{class:"learn-result-head"},a?`🎉 ${p("web_learn_passed")}`:p("web_learn_failed")));for(const d of n)e.append(A("p",{},`✗ ${p("web_learn_missing_fmt",jD(I[d]))}`));s&&e.append(A("p",{},`✗ ${p("web_visubot_depth_fmt",s)}`));const r=A("ul",{class:"learn-tests",dir:"auto"});for(const d of t){const h=d.test.world?t.filter(b=>b.test.world).indexOf(d)+1:0,g=d.test.world?`🗺 ${p("web_visubot_world_fmt",h)}`:d.test.actions?`🤖 ${p("web_visubot_actions")}`:d.test.sensors?`🎛 ${Object.entries(d.test.sensors).map(([b,y])=>`mbot.${b}() = ${y.join(" → ")}`).join(", ")}`:d.test.drive?`🤖 ${p("web_visubot_drive")}`:d.test.inputs.length?p("web_learn_input_fmt",d.test.inputs.join(", ")):p("web_learn_no_input"),f=[`${d.passed?"✓":"✗"} ${g}`],x=A("div",{class:"learn-test-detail"});if(d.test.drive&&x.append(A("span",{},`${p("web_learn_expected")}: `,A("code",{},U1(d.test.drive)||"–")),A("span",{},`${p("web_learn_actual")}: `,A("code",{},U1(d.result.drive??[])||"–"))),d.test.actions&&x.append(A("span",{},`${p("web_learn_expected")}: `,A("code",{},U1(d.test.actions)||"–")),A("span",{},`${p("web_learn_actual")}: `,A("code",{},U1(d.result.actions??[])||"–"))),d.test.led!==void 0){const b=y=>p(y?"web_visubot_led_on":"web_visubot_led_off");x.append(A("span",{},`💡 ${p("web_learn_expected")}: ${b(d.test.led)} · ${p("web_learn_actual")}: ${b(d.result.led)}`))}if(d.test.tone!==void 0){const b=y=>p(y?"web_visubot_tone_yes":"web_visubot_tone_no");x.append(A("span",{},`🔊 ${p("web_learn_expected")}: ${b(d.test.tone)} · ${p("web_learn_actual")}: ${b(d.result.tone)}`))}d.test.screen!==void 0&&x.append(A("span",{},`📺 ${p("web_learn_expected")}: `,A("code",{},d.test.screen),` · ${p("web_learn_actual")}: `,A("code",{},d.result.screen??"–"))),d.test.world&&(((l=(o=Wa(d.test.world))==null?void 0:o.goals)!=null&&l.length||(m=(u=Wa(d.test.world))==null?void 0:u.targets)!=null&&m.length)&&x.append(A("span",{},d.result.atGoal?`✓ ${p("web_visubot_goal_reached")}`:`✗ ${p("web_visubot_goal_missed")}`)),d.result.bumps&&x.append(A("span",{class:"learn-error"},`⚠︎ ${p("web_visubot_bumps")}: ${d.result.bumps}`))),(!d.test.drive&&!d.test.world&&!d.test.sensors&&!d.test.actions||d.result.outputs.length)&&x.append(A("span",{},`${p("web_learn_expected")}: `,A("code",{},d.test.expected.join(" | ")||"–")),A("span",{},`${p("web_learn_actual")}: `,A("code",{},d.result.outputs.join(" | ")||"–")));for(const b of d.test.files??[])x.append(A("span",{},`📄 ${b.name}, ${p("web_learn_expected")}: `,A("code",{},b.lines.join(" | ")||"–")),A("span",{},`📄 ${b.name}, ${p("web_learn_actual")}: `,A("code",{},Ch((c=d.result.files)==null?void 0:c.get(b.name)).join(" | ")||"–")));d.result.error&&x.append(A("span",{class:"learn-error"},Kn(d.result.error))),d.result.missingInput&&x.append(A("span",{class:"learn-error"},p("web_learn_missing_input"))),d.result.tooManySteps&&x.append(A("span",{class:"learn-error"},p("web_learn_too_many_steps"))),!d.passed&&d.result.unusedInputs&&x.append(A("span",{class:"learn-error"},p("web_learn_unused_input"))),r.append(A("li",{class:d.passed?"ok":"fail"},...f,x))}e.append(r)}renderChecklist(e,t,n){const a=A("ul",{class:"learn-checklist"});return e.forEach((s,r)=>{var c;const o=`${t}-${r}`,l=A("input",{type:"checkbox"});l.checked=!!(n&&((c=ge.lesson(n.id).checks)!=null&&c[o])),l.addEventListener("change",()=>{if(!n)return;const d={...ge.lesson(n.id).checks??{},[o]:l.checked};ge.updateLesson(n.id,{checks:d})});const u=A("label",{},l);u.insertAdjacentHTML("beforeend"," "+Re(s.text));const m=A("li",{},u);if(n&&s.step!==void 0){const d=s.step,h=p("web_learn_step_fmt",d+1,n.steps[d].title),g=A("button",{class:"link-button learn-check-link",title:h,"aria-label":`${p("web_learn_review")}: ${h}`},p("web_learn_review"));g.addEventListener("click",()=>{this.returnTo={lesson:n.id,step:ge.lesson(n.id).step,scroll:this.body.scrollTop},this.goToStep(n,d)}),m.append(g)}a.append(m)}),a}renderQuiz(e,t,n){const a=A("div",{class:"learn-quiz"}),s=A("p",{class:"learn-score",role:"status"}),r=()=>n?ge.lesson(n.id).quiz??{}:{},o=()=>{const l=r(),u=(h,g)=>h.pairs?h.pairs.every((f,x)=>l[`${t}-${g}-${x}`]!==void 0):l[`${t}-${g}`]!==void 0,m=(h,g)=>{var f;return h.pairs?h.pairs.every((x,b)=>tm(h)[l[`${t}-${g}-${b}`]]===h.pairs[b].right):(f=h.options[l[`${t}-${g}`]])==null?void 0:f.correct},c=e.filter(u).length,d=e.filter(m).length;s.textContent=c===e.length?p("web_learn_score_fmt",d,e.length):""};return e.forEach((l,u)=>{const m=`${t}-${u}`,c=A("fieldset",{},gt("legend",{},Re(l.question))),d=gt("p",{class:"learn-explanation"},Re(l.explanation??""));if(l.pairs){c.append(this.renderMatch(l,m,r,n,d,o),d),a.append(c);return}const h=g=>{c.querySelectorAll("button").forEach((f,x)=>{f.classList.toggle("right",g!==void 0&&l.options[x].correct),f.classList.toggle("wrong",g===x&&!l.options[x].correct),f.setAttribute("aria-pressed",String(g===x))}),d.hidden=g===void 0||!l.explanation};l.options.forEach((g,f)=>{const x=gt("button",{class:"learn-option"},Re(g.text));x.addEventListener("click",()=>{n&&ge.updateLesson(n.id,{quiz:{...r(),[m]:f}}),h(f),o()}),c.append(x)}),c.append(d),h(r()[m]),a.append(c)}),a.append(s),o(),a}renderMatch(e,t,n,a,s,r){const o=e.pairs,l=tm(e),u=A("div",{class:"learn-match"});let m={};const c=()=>a?n():m,d=x=>a?ge.updateLesson(a.id,{quiz:x}):m=x,h=x=>c()[`${t}-${x}`],g=o.map(x=>{const b=A("select",{class:"learn-match-select"});b.append(A("option",{value:""},"–")),l.forEach((w,S)=>b.append(A("option",{value:String(S)},w)));const y=gt("label",{class:"learn-match-left"},Re(x.left));return y.append(b),u.append(y),b}),f=()=>{const x=o.every((b,y)=>h(y)!==void 0);g.forEach((b,y)=>{const w=h(y);b.value=w===void 0?"":String(w),b.classList.toggle("right",x&&l[w]===o[y].right),b.classList.toggle("wrong",x&&l[w]!==o[y].right)}),s.hidden=!x||!e.explanation};return g.forEach((x,b)=>x.addEventListener("change",()=>{const y={...c()};x.value===""?delete y[`${t}-${b}`]:y[`${t}-${b}`]=Number(x.value),d(y),f(),r()})),f(),u}}function tm(i){return(i.pairs??[]).map(e=>e.right).sort((e,t)=>e.localeCompare(t,"de"))}const DD=""+new URL("visubot-CyGFOI9V.webp",import.meta.url).href,i0="visustruct.visubot";function a0(){try{return localStorage.getItem(i0)}catch{return null}}function ri(){const i=a0();return i==="1"||i==="kurs"?"on":"off"}const Xh=()=>a0()==="2";function Kh(){try{localStorage.setItem(i0,"2")}catch{}}const ZD=()=>a0()!==null;function br(i){try{localStorage.setItem(i0,i==="on"?"1":"0")}catch{}}const MD=`VisuBot`,Rn=()=>ri()!=="off",nm=i=>i.replace(/[&<>"]/g,e=>({"&":"&","<":"<",">":">",'"':"""})[e]);function Po(){const i=Xh()?"object":ri(),e=(n,a)=>``,t={off:"web_visubot_world_visustruct_hint",on:"web_visubot_world_visubot_hint",object:"web_visuobject_world_hint"}[i];return`
+${a}`));this.body.append(s),this.foldReference(s)}}foldReference(e){const t="visustruct.reference.open";let n=[];try{n=JSON.parse(localStorage.getItem(t)??"[]")}catch{}for(const a of[...e.querySelectorAll("h2")]){const s=a.textContent??"",r=A("details",{class:"reference-group"});r.open=n.includes(s);const o=A("summary",{},s);for(a.replaceWith(r),r.append(o);r.nextSibling&&r.nextSibling.nodeName!=="H2";)r.append(r.nextSibling);r.addEventListener("toggle",()=>{n=r.open?[...new Set([...n,s])]:n.filter(l=>l!==s);try{localStorage.setItem(t,JSON.stringify(n))}catch{}})}}showReference(){this.tab="reference",this.persist(),this.render()}persist(){ge.setView({tab:this.tab,lesson:this.lessonId,task:this.taskId})}openLesson(e){this.tab="lessons",this.lessonId=e,this.returnTo=void 0,this.persist(),this.render(),this.body.scrollTop=0}renderLessonList(){this.body.append(A("p",{class:"hint"},p("web_learn_intro")));for(const e of jD()){this.body.append(A("h3",{class:"learn-section"},e.name));const t=A("ol",{class:"learn-list"});for(const n of e.lessons){const a=ge.lesson(n.id),s=a.done?"✓":a.step>0?p("web_learn_step_of_fmt",a.step+1,n.steps.length):"",r=A("button",{class:"learn-item"+(a.done?" done":""),"data-lesson":n.id},A("span",{class:"learn-num"},String(n.number)),A("span",{class:"learn-item-text"},A("strong",{},n.robot?`🤖 ${n.title}`:n.title),A("small",{},n.summary)),A("span",{class:"learn-status"},s));r.addEventListener("click",()=>this.openLesson(n.id)),t.append(A("li",{},r))}this.body.append(t)}this.body.append(this.renderTeacherBox())}renderLesson(e){var c;const t=ge.lesson(e.id),n=Math.min(t.step,e.steps.length-1),a=e.steps[n],s=A("button",{class:"learn-back"},`← ${p("web_learn_all_lessons")}`);s.addEventListener("click",()=>this.openLesson(void 0));const r=A("nav",{class:"learn-progress","aria-label":p("web_learn_step_of_fmt",n+1,e.steps.length)});r.append(...e.steps.map((d,h)=>{const g=p("web_learn_step_fmt",h+1,d.title),f=hthis.goToStep(e,h)),x})),this.body.append(s,A("p",{class:"learn-kicker"},`${p("web_learn_lesson_fmt",e.number)} · ${e.section}${e.robot?" · 🤖 VisuBot":""}`),A("h2",{class:"learn-title"},A("span",{class:"learn-num","aria-hidden":"true"},String(e.number)),e.title),r,A("h3",{class:"learn-step-title"},`${n+1}. ${a.title}`));const o=((c=this.returnTo)==null?void 0:c.lesson)===e.id&&this.returnTo.step!==n?this.returnTo:void 0,l=()=>{const d=A("button",{class:"learn-return"},`↩ ${p("web_learn_back_to_checklist")}`);return d.addEventListener("click",()=>{this.returnTo=void 0,this.goToStep(e,o.step),this.body.scrollTop=o.scroll}),d};o&&this.body.append(l()),a.blocks.forEach((d,h)=>this.body.append(this.renderBlock(d,`${n}-${h}`,e))),Ku(this.body),hD(this.body),this.openNeededColumns(a.blocks),Xu(this.body,La);const u=A("div",{class:"learn-nav"}),m=A("button",{},`← ${p("web_learn_back")}`);if(m.disabled=n===0,m.addEventListener("click",()=>this.goToStep(e,n-1)),u.append(m),nthis.goToStep(e,n+1)),u.append(d)}else{const d=A("button",{class:"primary"},t.done?`✓ ${p("web_learn_done")}`:p("web_learn_finish"));d.addEventListener("click",()=>{ge.updateLesson(e.id,{done:!0});const h=Ot.find(g=>g.number===e.number+1);this.openLesson(h==null?void 0:h.id)}),u.append(d)}this.body.append(u),o&&this.body.append(l())}goToStep(e,t){ge.updateLesson(e.id,{step:t}),this.render(),this.body.scrollTop=0}openNeededColumns(e){const t=e.flatMap(n=>n.kind==="exercise"?[n.exercise]:[]);OD(this.body)?this.host.showEditor():TD(this.body)?this.host.showFiles():t.some(n=>n.code!=="java")?this.host.showEditor():(t.length>0||this.body.querySelector(".lesson-code[data-lang=java]"))&&this.host.showJava(),AD(this.body)&&this.host.showLiveCode()}renderTaskList(){this.body.append(A("p",{class:"hint"},p("web_learn_tasks_intro")));const e=A("ul",{class:"learn-list"});for(const t of Tn){const n=this.taskExercises(t),a=n.length>0&&n.every(o=>ge.exercise(o.id).done),s=Ot.find(o=>o.number===t.after),r=A("button",{class:"learn-item"+(a?" done":""),"data-task":t.id},A("span",{class:"learn-num","aria-label":p("web_learn_level_fmt",t.level)},"★".repeat(t.level)),A("span",{class:"learn-item-text"},A("strong",{},t.title),A("small",{},s?p("web_learn_after_fmt",s.number,s.title):"")),A("span",{class:"learn-status"},a?"✓":""));r.addEventListener("click",()=>{this.taskId=t.id,this.persist(),this.render(),this.body.scrollTop=0}),e.append(A("li",{},r))}this.body.append(e,this.renderTeacherBox())}renderTeacherBox(){const e=A("details",{class:"learn-teacher"},A("summary",{},p("web_learn_teacher")));if(Ru()){e.setAttribute("open","");const s=A("button",{},p("web_learn_teacher_off"));return s.addEventListener("click",()=>{sD(),this.render()}),e.append(A("p",{},p("web_learn_teacher_on")),s),e}const t=A("input",{type:"password",autocomplete:"off","aria-label":p("web_learn_teacher_code"),placeholder:p("web_learn_teacher_code")}),n=A("p",{class:"learn-result",role:"status"}),a=A("form",{class:"group"},t,A("button",{type:"submit"},p("web_learn_teacher_unlock")));return a.addEventListener("submit",async s=>{s.preventDefault(),await aD(t.value)?this.render():(n.className="learn-result info",n.textContent=p("web_learn_teacher_wrong"))}),e.append(A("p",{class:"hint"},p("web_learn_teacher_intro")),a,n),e}taskExercises(e){return e.blocks.flatMap(t=>t.kind==="exercise"?[t.exercise]:[])}renderTask(e){const t=A("button",{class:"learn-back"},`← ${p("web_learn_all_tasks")}`);t.addEventListener("click",()=>{this.taskId=void 0,this.persist(),this.render()});const n=Ot.find(a=>a.number===e.after);if(this.body.append(t,A("h2",{class:"learn-title"},e.title)),n){const a=A("button",{class:"link-button"},p("web_learn_after_fmt",n.number,n.title));a.addEventListener("click",()=>this.openLesson(n.id)),this.body.append(A("p",{class:"learn-kicker"},a))}e.blocks.forEach((a,s)=>this.body.append(this.renderBlock(a,`task-${s}`))),Ku(this.body),this.openNeededColumns(e.blocks),Xu(this.body,La)}renderBlock(e,t,n){switch(e.kind){case"markdown":return gt("div",{class:"learn-text"},kn(e.text));case"diagram":return this.renderDiagram(e.file,e.caption);case"exercise":return this.renderExercise(e.exercise);case"checklist":return this.renderChecklist(e.items,t,n);case"quiz":return this.renderQuiz(e.questions,t,n);case"brag":return this.renderBrag(e.text,e.tip);case"images":return this.renderImages(e.files,e.caption);case"graphic":return this.renderGraphic(e.file,e.caption);case"game":return this.renderGame(e.game);case"roundGame":return pD(e.game,aa);case"rescueGame":return vD(e.game,aa);case"caesar":return mD(e.key,e.text);case"cloze":return zD(e.cloze);case"textFile":return Qh(e.name,e.content);case"robotModel":return dD(e.focus,e.view,e.spin);case"robotQuiz":return gD(e.tasks,e.done)}}renderBrag(e,t=!1){const n=A("aside",{class:"learn-brag"});n.append(A("img",{src:aa,alt:"",width:"48",height:"48"}));const a=A("div",{},A("p",{class:"learn-brag-title"},p(t?"web_learn_ludwig_tip":"web_learn_brag")));return a.append(gt("div",{class:"learn-text"},kn(e))),n.append(a),n}renderGame(e){const n=A("section",{class:"learn-game"}),a=A("div",{class:"learn-game-head"});a.append(A("img",{src:aa,alt:"",width:"40",height:"40"}),A("strong",{},p("web_game_title")));const s=A("p",{class:"learn-game-status"}),r=A("div",{class:"learn-game-stage"});n.append(a,s,r);let o=0,l=0;const u=()=>{const d=$x(e,o,10);s.textContent=`${p("web_game_round_fmt",o+1,10)} · ${p("web_game_score_fmt",l)}`;const h=A("div",{class:"learn-game-values mono"});for(const[w,S]of Yx(d))h.append(A("code",{},`${w} = ${S}`));const g=A("div",{class:"group learn-game-answers"}),f=A("button",{class:"learn-game-true"},`✓ ${p("web_game_true")}`),x=A("button",{class:"learn-game-false"},`✗ ${p("web_game_false")}`);g.append(f,x);const b=A("div",{class:"learn-game-feedback",role:"status"}),y=w=>{f.disabled=x.disabled=!0;const S=w===d.answer;S&&l++,s.textContent=`${p("web_game_round_fmt",o+1,10)} · ${p("web_game_score_fmt",l)}`,b.className=`learn-game-feedback ${S?"right":"wrong"}`;const z=A("div",{class:"learn-game-steps mono"});qx(d.condition,d.values).forEach((_,T)=>z.append(A("div",{},`${T?"→ ":""}${_}`)));const k=A("button",{class:"primary"},o+1<10?p("web_game_next"):p("web_game_finish"));k.addEventListener("click",()=>{o++,o<10?u():m()}),b.replaceChildren(A("p",{},p(S?"web_game_right":"web_game_wrong")),z,k),k.focus()};f.addEventListener("click",()=>y(!0)),x.addEventListener("click",()=>y(!1)),r.replaceChildren(h,A("div",{class:"learn-game-condition mono"},d.condition),g,b)},m=()=>{s.textContent="";const d=A("button",{class:"primary"},p("web_game_again"));d.addEventListener("click",()=>{o=l=0,u()}),r.replaceChildren(A("p",{class:"learn-game-result"},p("web_game_done_fmt",l,10)),A("p",{},p(l===10?"web_game_perfect":l>=10*.7?"web_game_good":"web_game_practice")),d)},c=A("button",{class:"primary"},p("web_game_start"));return c.addEventListener("click",u),r.append(A("p",{},p("web_game_intro")),c),n}renderImages(e,t){const n=A("figure",{class:"learn-figure"}),a=A("div",{class:"learn-images"});for(const s of e){const r=Fu(s);r&&a.append(A("img",{src:r,alt:"",loading:"lazy"}))}return n.append(a),t&&n.append(gt("figcaption",{},Re(t))),n}renderGraphic(e,t){const n=A("figure",{class:"learn-figure"}),a=Fu(e);return a&&n.append(A("img",{class:"learn-graphic",src:a,alt:"",loading:"lazy"})),t&&n.append(gt("figcaption",{},Re(t))),n}renderDiagram(e,t){const n=X1(e),a=A("figure",{class:"learn-figure"});if(!n)return a;const s=this.host.preview(n);s&&a.append(A("div",{class:"learn-preview",dir:"ltr"},s)),t&&a.append(gt("figcaption",{},Re(t)));const r=A("button",{},p("web_learn_open_in_editor"));return r.addEventListener("click",()=>this.host.openDiagram(n,e)),a.append(r),a}renderExercise(e){const t=A("section",{class:"learn-exercise","data-exercise":e.id}),n=()=>ge.exercise(e.id),a=A("span",{class:"learn-badge"},`✓ ${p("web_learn_solved")}`);a.hidden=!n().done,t.append(A("h4",{},`${p("web_learn_exercise")}: ${e.title}`,a),gt("div",{class:"learn-text"},kn(e.task)));const s=A("div",{class:"learn-result",role:"status"}),r=A("div",{class:"learn-hints"}),o=A("div",{class:"group"}),l=A("button",{class:"primary"},p("web_learn_open_exercise"));l.addEventListener("click",()=>{const c=n().xml;let d=em(e);if(c)try{d=Bl(c)}catch{}this.host.openExercise(e,d)});const u=A("button",{},p("web_learn_check"));if(u.addEventListener("click",()=>{const c=this.host.exerciseDocument(e.id);if(!c){s.className="learn-result info",s.textContent=p("web_learn_open_first");return}if(c.elements.every(Al)){s.className="learn-result info",s.textContent=p("web_learn_empty");return}this.host.stopSimulation();const d=Rx(c,e.tests,this.host.subprogramsFor(e.id),Wa),h=Gx(c),g=e.requires.map(b=>b==="forZaehlSchleife"?"forSchleife":b).filter(b=>b in I&&!h.has(I[b])),f=e.loopDepth!==void 0&&_o(c.elements)b.passed)&&g.length===0&&!f;this.showResult(s,d,g,x,f),x&&(ge.updateExercise(e.id,{done:!0}),a.hidden=!1)}),o.append(l,u),e.hints.length>0){const c=A("button",{},p("web_learn_hint"));c.addEventListener("click",()=>{const d=r.children.length;if(d>=e.hints.length)return;const h=e.hints.length>1?`**${p("web_learn_hint_fmt",d+1,e.hints.length)}:** `:"";r.append(gt("aside",{class:"lesson-note"},kn(h+e.hints[d]))),c.textContent=p("web_learn_hint_more"),c.toggleAttribute("disabled",d+1>=e.hints.length)}),o.append(c)}const m=A("button",{class:"danger-text"},p("web_learn_reset"));if(m.addEventListener("click",()=>{if(m.dataset.confirm!=="1"){m.dataset.confirm="1",m.textContent=p("web_learn_reset_confirm"),setTimeout(()=>{m.dataset.confirm="",m.textContent=p("web_learn_reset")},4e3);return}ge.resetExercise(e.id),this.host.resetExercise(e.id,em(e)),a.hidden=!0,s.replaceChildren(),s.className="learn-result",m.dataset.confirm="",m.textContent=p("web_learn_reset")}),o.append(m),t.append(o,r,s),Ru()&&e.solution){const c=X1(e.solution);if(c){const d=A("details",{class:"learn-solution"},A("summary",{},p("web_learn_solution")));d.addEventListener("toggle",()=>{if(!d.open||d.querySelector(".learn-preview"))return;const h=this.host.preview(c);h&&d.append(A("div",{class:"learn-preview",dir:"ltr"},h));const g=A("button",{},p("web_learn_open_in_editor"));g.addEventListener("click",()=>{this.host.openDiagram(c,e.solution);for(const f of e.subprograms){const x=X1(f);x&&this.host.openDiagram(x,f)}});for(const f of e.subprograms){const x=X1(f),b=x&&this.host.preview(x);b&&d.append(A("div",{class:"learn-preview",dir:"ltr"},b))}d.append(g)}),t.append(d)}}return t}showResult(e,t,n,a,s){var o,l,u,m,c;e.className="learn-result "+(a?"ok":"fail"),e.replaceChildren(A("p",{class:"learn-result-head"},a?`🎉 ${p("web_learn_passed")}`:p("web_learn_failed")));for(const d of n)e.append(A("p",{},`✗ ${p("web_learn_missing_fmt",CD(I[d]))}`));s&&e.append(A("p",{},`✗ ${p("web_visubot_depth_fmt",s)}`));const r=A("ul",{class:"learn-tests",dir:"auto"});for(const d of t){const h=d.test.world?t.filter(b=>b.test.world).indexOf(d)+1:0,g=d.test.world?`🗺 ${p("web_visubot_world_fmt",h)}`:d.test.actions?`🤖 ${p("web_visubot_actions")}`:d.test.sensors?`🎛 ${Object.entries(d.test.sensors).map(([b,y])=>`mbot.${b}() = ${y.join(" → ")}`).join(", ")}`:d.test.drive?`🤖 ${p("web_visubot_drive")}`:d.test.inputs.length?p("web_learn_input_fmt",d.test.inputs.join(", ")):p("web_learn_no_input"),f=[`${d.passed?"✓":"✗"} ${g}`],x=A("div",{class:"learn-test-detail"});if(d.test.drive&&x.append(A("span",{},`${p("web_learn_expected")}: `,A("code",{},U1(d.test.drive)||"–")),A("span",{},`${p("web_learn_actual")}: `,A("code",{},U1(d.result.drive??[])||"–"))),d.test.actions&&x.append(A("span",{},`${p("web_learn_expected")}: `,A("code",{},U1(d.test.actions)||"–")),A("span",{},`${p("web_learn_actual")}: `,A("code",{},U1(d.result.actions??[])||"–"))),d.test.led!==void 0){const b=y=>p(y?"web_visubot_led_on":"web_visubot_led_off");x.append(A("span",{},`💡 ${p("web_learn_expected")}: ${b(d.test.led)} · ${p("web_learn_actual")}: ${b(d.result.led)}`))}if(d.test.tone!==void 0){const b=y=>p(y?"web_visubot_tone_yes":"web_visubot_tone_no");x.append(A("span",{},`🔊 ${p("web_learn_expected")}: ${b(d.test.tone)} · ${p("web_learn_actual")}: ${b(d.result.tone)}`))}d.test.screen!==void 0&&x.append(A("span",{},`📺 ${p("web_learn_expected")}: `,A("code",{},d.test.screen),` · ${p("web_learn_actual")}: `,A("code",{},d.result.screen??"–"))),d.test.world&&(((l=(o=Wa(d.test.world))==null?void 0:o.goals)!=null&&l.length||(m=(u=Wa(d.test.world))==null?void 0:u.targets)!=null&&m.length)&&x.append(A("span",{},d.result.atGoal?`✓ ${p("web_visubot_goal_reached")}`:`✗ ${p("web_visubot_goal_missed")}`)),d.result.bumps&&x.append(A("span",{class:"learn-error"},`⚠︎ ${p("web_visubot_bumps")}: ${d.result.bumps}`))),(!d.test.drive&&!d.test.world&&!d.test.sensors&&!d.test.actions||d.result.outputs.length)&&x.append(A("span",{},`${p("web_learn_expected")}: `,A("code",{},d.test.expected.join(" | ")||"–")),A("span",{},`${p("web_learn_actual")}: `,A("code",{},d.result.outputs.join(" | ")||"–")));for(const b of d.test.files??[])x.append(A("span",{},`📄 ${b.name}, ${p("web_learn_expected")}: `,A("code",{},b.lines.join(" | ")||"–")),A("span",{},`📄 ${b.name}, ${p("web_learn_actual")}: `,A("code",{},Bh((c=d.result.files)==null?void 0:c.get(b.name)).join(" | ")||"–")));d.result.error&&x.append(A("span",{class:"learn-error"},Kn(d.result.error))),d.result.missingInput&&x.append(A("span",{class:"learn-error"},p("web_learn_missing_input"))),d.result.tooManySteps&&x.append(A("span",{class:"learn-error"},p("web_learn_too_many_steps"))),!d.passed&&d.result.unusedInputs&&x.append(A("span",{class:"learn-error"},p("web_learn_unused_input"))),r.append(A("li",{class:d.passed?"ok":"fail"},...f,x))}e.append(r)}renderChecklist(e,t,n){const a=A("ul",{class:"learn-checklist"});return e.forEach((s,r)=>{var c;const o=`${t}-${r}`,l=A("input",{type:"checkbox"});l.checked=!!(n&&((c=ge.lesson(n.id).checks)!=null&&c[o])),l.addEventListener("change",()=>{if(!n)return;const d={...ge.lesson(n.id).checks??{},[o]:l.checked};ge.updateLesson(n.id,{checks:d})});const u=A("label",{},l);u.insertAdjacentHTML("beforeend"," "+Re(s.text));const m=A("li",{},u);if(n&&s.step!==void 0){const d=s.step,h=p("web_learn_step_fmt",d+1,n.steps[d].title),g=A("button",{class:"link-button learn-check-link",title:h,"aria-label":`${p("web_learn_review")}: ${h}`},p("web_learn_review"));g.addEventListener("click",()=>{this.returnTo={lesson:n.id,step:ge.lesson(n.id).step,scroll:this.body.scrollTop},this.goToStep(n,d)}),m.append(g)}a.append(m)}),a}renderQuiz(e,t,n){const a=A("div",{class:"learn-quiz"}),s=A("p",{class:"learn-score",role:"status"}),r=()=>n?ge.lesson(n.id).quiz??{}:{},o=()=>{const l=r(),u=(h,g)=>h.pairs?h.pairs.every((f,x)=>l[`${t}-${g}-${x}`]!==void 0):l[`${t}-${g}`]!==void 0,m=(h,g)=>{var f;return h.pairs?h.pairs.every((x,b)=>tm(h)[l[`${t}-${g}-${b}`]]===h.pairs[b].right):(f=h.options[l[`${t}-${g}`]])==null?void 0:f.correct},c=e.filter(u).length,d=e.filter(m).length;s.textContent=c===e.length?p("web_learn_score_fmt",d,e.length):""};return e.forEach((l,u)=>{const m=`${t}-${u}`,c=A("fieldset",{},gt("legend",{},Re(l.question))),d=gt("p",{class:"learn-explanation"},Re(l.explanation??""));if(l.pairs){c.append(this.renderMatch(l,m,r,n,d,o),d),a.append(c);return}const h=g=>{c.querySelectorAll("button").forEach((f,x)=>{f.classList.toggle("right",g!==void 0&&l.options[x].correct),f.classList.toggle("wrong",g===x&&!l.options[x].correct),f.setAttribute("aria-pressed",String(g===x))}),d.hidden=g===void 0||!l.explanation};l.options.forEach((g,f)=>{const x=gt("button",{class:"learn-option"},Re(g.text));x.addEventListener("click",()=>{n&&ge.updateLesson(n.id,{quiz:{...r(),[m]:f}}),h(f),o()}),c.append(x)}),c.append(d),h(r()[m]),a.append(c)}),a.append(s),o(),a}renderMatch(e,t,n,a,s,r){const o=e.pairs,l=tm(e),u=A("div",{class:"learn-match"});let m={};const c=()=>a?n():m,d=x=>a?ge.updateLesson(a.id,{quiz:x}):m=x,h=x=>c()[`${t}-${x}`],g=o.map(x=>{const b=A("select",{class:"learn-match-select"});b.append(A("option",{value:""},"–")),l.forEach((w,S)=>b.append(A("option",{value:String(S)},w)));const y=gt("label",{class:"learn-match-left"},Re(x.left));return y.append(b),u.append(y),b}),f=()=>{const x=o.every((b,y)=>h(y)!==void 0);g.forEach((b,y)=>{const w=h(y);b.value=w===void 0?"":String(w),b.classList.toggle("right",x&&l[w]===o[y].right),b.classList.toggle("wrong",x&&l[w]!==o[y].right)}),s.hidden=!x||!e.explanation};return g.forEach((x,b)=>x.addEventListener("change",()=>{const y={...c()};x.value===""?delete y[`${t}-${b}`]:y[`${t}-${b}`]=Number(x.value),d(y),f(),r()})),f(),u}}function tm(i){return(i.pairs??[]).map(e=>e.right).sort((e,t)=>e.localeCompare(t,"de"))}const ZD=""+new URL("visubot-CyGFOI9V.webp",import.meta.url).href,i0="visustruct.visubot";function a0(){try{return localStorage.getItem(i0)}catch{return null}}function ri(){const i=a0();return i==="1"||i==="kurs"?"on":"off"}const Kh=()=>a0()==="2";function eg(){try{localStorage.setItem(i0,"2")}catch{}}const MD=()=>a0()!==null;function br(i){try{localStorage.setItem(i0,i==="on"?"1":"0")}catch{}}const LD=`VisuBot`,Rn=()=>ri()!=="off",nm=i=>i.replace(/[&<>"]/g,e=>({"&":"&","<":"<",">":">",'"':"""})[e]);function Po(){const i=Kh()?"object":ri(),e=(n,a)=>``,t={off:"web_visubot_world_visustruct_hint",on:"web_visubot_world_visubot_hint",object:"web_visuobject_world_hint"}[i];return`
${e("off","VisuStruct")}${e("on","🤖 VisuBot")}${e("object","VisuObject")}
- ${nm(p(t))}`}class LD{constructor(e=vi){v(this,"element");v(this,"world");v(this,"view");v(this,"loading");v(this,"status");v(this,"stage");v(this,"picker");v(this,"applied",0);v(this,"sent",0);v(this,"liveStatus");v(this,"viewport");v(this,"stopListening");v(this,"realSensors");v(this,"controls",{getBrightness:50,getLoudness:0,getPitch:0,getRoll:0});v(this,"pressTimers",new Map);v(this,"check");v(this,"checking",!1);v(this,"onWorldChange");this.world=new us(e),this.element=document.createElement("section"),this.element.className="visubot",this.element.innerHTML=`

${p("web_visubot_world")}

${p("web_visubot_world_in_preview")}

${WD()}${ED()}`,this.stage=this.element.querySelector(".visubot-stage"),this.picker=this.element.querySelector(".visubot-worlds"),this.status=this.element.querySelector(".visubot-status"),this.liveStatus=this.element.querySelector(".visubot-live"),this.viewport=this.element.querySelector(".visubot-viewport"),this.stopListening=le.listen(()=>this.updateLive()),this.setupControls(),this.check=this.element.querySelector(".visubot-check"),this.setupCheck(),this.updateLive(),this.updateStatus()}show(){this.loading??(this.loading=q(async()=>{const{Robot3D:e}=await import("./robot3d-s_ti3AsW.js");return{Robot3D:e}},[],import.meta.url).then(({Robot3D:e})=>{this.view=new e(this.stage),this.view.setWorld(this.world.setup),this.view.place(this.world.pose,this.world.trail),this.view.setLeds(this.world.leds)}).catch(()=>{this.stage.textContent=p("web_visubot_no_3d")}))}restoreViewport(){this.viewport.parentElement!==this.element&&this.liveStatus.after(this.viewport)}setWorlds(e){this.picker.replaceChildren(),this.picker.hidden=e.length<2,e.forEach((t,n)=>{const a=document.createElement("button");a.textContent=p("web_visubot_world_fmt",n+1),a.addEventListener("click",()=>this.useWorld(t,a)),this.picker.append(a)}),this.useWorld(e[0]??vi,this.picker.firstElementChild)}useWorld(e,t){var n,a,s,r,o;for(const l of this.picker.children)l.classList.toggle("active",l===t);e!==this.world.setup&&(this.world=new us(e),this.applied=0,this.sent=0,(n=this.view)==null||n.setWorld(e),(a=this.view)==null||a.place(this.world.pose,this.world.trail),(s=this.view)==null||s.setLed(void 0),(r=this.view)==null||r.setScreen(void 0),this.updateStatus(),(o=this.onWorldChange)==null||o.call(this))}reset(){var e,t,n;this.world.reset(),this.applied=0,this.sent=0,this.realSensors=void 0,(e=this.view)==null||e.place(this.world.pose,this.world.trail),(t=this.view)==null||t.setLed(void 0),(n=this.view)==null||n.setScreen(void 0),this.updateStatus()}prepare(e){e.robotSensors={...this.controls,...this.world.sensors()}}setupControls(){for(const e of this.element.querySelectorAll(".visubot-controls input[type=range]")){const t=e.parentElement.querySelector("output"),n=()=>{this.controls[e.name]=Number(e.value),t.textContent=e.value};e.addEventListener("input",n),n()}for(const e of this.element.querySelectorAll(".visubot-controls button[name]"))e.addEventListener("click",()=>{const t=e.name;this.controls[t]=!0,e.classList.add("pressed"),window.clearTimeout(this.pressTimers.get(t)),this.pressTimers.set(t,window.setTimeout(()=>{this.controls[t]=!1,e.classList.remove("pressed")},1e3))})}setupCheck(){for(const e of this.check.querySelectorAll("button[data-py]"))e.addEventListener("click",()=>{const{after:t,wait:n}=e.dataset;le.run(e.dataset.py).then(()=>t?new Promise(a=>setTimeout(a,Number(n))).then(()=>le.run(t)):void 0).catch(a=>this.liveFailed(a))});this.check.addEventListener("toggle",()=>void this.readCheck())}async readCheck(){if(!this.checking){this.checking=!0;try{for(;this.check.open&&le.connected;){for(const e of this.check.querySelectorAll("[data-sensor]")){if(!this.check.open||!le.connected)break;const t=e.dataset.sensor,n=await le.ask(St[t].python).catch(()=>{});n!==void 0&&(e.textContent=typeof St[t].simulated=="boolean"?n===!0||typeof n=="number"&&n!==0?"✓":"–":String(typeof n=="number"?Math.round(n*10)/10:n))}await new Promise(e=>setTimeout(e,200))}}finally{this.checking=!1}}}get live(){return le.connected}async prepareLive(e,t=[]){const n={};for(const a of new Set(["getDistance","getLine",...t])){const s=await le.ask(St[a].python);typeof St[a].simulated=="boolean"?n[a]=s===!0||typeof s=="number"&&s!==0:typeof St[a].simulated=="string"?n[a]=typeof s=="string"?s:String(St[a].simulated):n[a]=typeof s=="number"?a==="getDistance"?Math.round(s):s:0}this.realSensors=n,e.robotSensors={...this.controls,...this.world.sensors(),...n}}async drive(e){for(;this.sentsetTimeout(n,t.args[0]))}}liveFailed(e){le.disconnect(e instanceof Error?e.message:String(e))}updateLive(){this.liveStatus.textContent=tg(),this.liveStatus.classList.toggle("connected",le.connected),this.check.hidden=!le.connected,le.connected||(this.check.open=!1),this.updateStatus()}follow(e,t){var a,s,r,o;for(;this.appliedl!==0);this.world.tick(Xl),n&&((o=this.view)==null||o.moveTo(this.world.pose,this.world.trail,t)),this.updateStatus()}dispose(){var e;this.stopListening();for(const t of this.pressTimers.values())window.clearTimeout(t);(e=this.view)==null||e.dispose(),this.view=void 0,this.loading=void 0}updateStatus(){const e=this.world.lineState().toString(2).padStart(4,"0"),t=[`${p("web_visubot_distance")}: ${this.world.distance()} cm`,`${p("web_visubot_line")}: ${e}`];this.world.bumps>0&&t.push(`⚠︎ ${p("web_visubot_bumps")}: ${this.world.bumps}`),this.world.screen!==void 0&&t.push(`📺 ${this.world.screen}`),this.realSensors&&le.connected&&t.push(`🤖 ${p("web_visubot_distance")}: ${this.realSensors.getDistance} cm · ${p("web_visubot_line")}: ${Number(this.realSensors.getLine).toString(2).padStart(4,"0")}`),this.status.textContent=t.join(" · ")}}let J1;function eg(i,e){try{J1??(J1=new AudioContext);const t=J1.createOscillator(),n=J1.createGain();t.type="square",t.frequency.value=Math.max(20,Math.min(2e4,i)),n.gain.value=.05,t.connect(n).connect(J1.destination);const a=J1.currentTime+Math.min(Math.max(e,0),5e3)/1e3;t.start(),t.stop(a)}catch{}}function WD(){const i=(t,n,a,s,r)=>``,e=(t,n,a)=>``;return`
🎛 ${p("web_visubot_controls")} + ${nm(p(t))}`}class WD{constructor(e=vi){v(this,"element");v(this,"world");v(this,"view");v(this,"loading");v(this,"status");v(this,"stage");v(this,"picker");v(this,"applied",0);v(this,"sent",0);v(this,"liveStatus");v(this,"viewport");v(this,"stopListening");v(this,"realSensors");v(this,"controls",{getBrightness:50,getLoudness:0,getPitch:0,getRoll:0});v(this,"pressTimers",new Map);v(this,"check");v(this,"checking",!1);v(this,"onWorldChange");this.world=new us(e),this.element=document.createElement("section"),this.element.className="visubot",this.element.innerHTML=`

${p("web_visubot_world")}

${p("web_visubot_world_in_preview")}

${ED()}${ND()}`,this.stage=this.element.querySelector(".visubot-stage"),this.picker=this.element.querySelector(".visubot-worlds"),this.status=this.element.querySelector(".visubot-status"),this.liveStatus=this.element.querySelector(".visubot-live"),this.viewport=this.element.querySelector(".visubot-viewport"),this.stopListening=le.listen(()=>this.updateLive()),this.setupControls(),this.check=this.element.querySelector(".visubot-check"),this.setupCheck(),this.updateLive(),this.updateStatus()}show(){this.loading??(this.loading=q(async()=>{const{Robot3D:e}=await import("./robot3d-io7_npI9.js");return{Robot3D:e}},[],import.meta.url).then(({Robot3D:e})=>{this.view=new e(this.stage),this.view.setWorld(this.world.setup),this.view.place(this.world.pose,this.world.trail),this.view.setLeds(this.world.leds)}).catch(()=>{this.stage.textContent=p("web_visubot_no_3d")}))}restoreViewport(){this.viewport.parentElement!==this.element&&this.liveStatus.after(this.viewport)}setWorlds(e){this.picker.replaceChildren(),this.picker.hidden=e.length<2,e.forEach((t,n)=>{const a=document.createElement("button");a.textContent=p("web_visubot_world_fmt",n+1),a.addEventListener("click",()=>this.useWorld(t,a)),this.picker.append(a)}),this.useWorld(e[0]??vi,this.picker.firstElementChild)}useWorld(e,t){var n,a,s,r,o;for(const l of this.picker.children)l.classList.toggle("active",l===t);e!==this.world.setup&&(this.world=new us(e),this.applied=0,this.sent=0,(n=this.view)==null||n.setWorld(e),(a=this.view)==null||a.place(this.world.pose,this.world.trail),(s=this.view)==null||s.setLed(void 0),(r=this.view)==null||r.setScreen(void 0),this.updateStatus(),(o=this.onWorldChange)==null||o.call(this))}reset(){var e,t,n;this.world.reset(),this.applied=0,this.sent=0,this.realSensors=void 0,(e=this.view)==null||e.place(this.world.pose,this.world.trail),(t=this.view)==null||t.setLed(void 0),(n=this.view)==null||n.setScreen(void 0),this.updateStatus()}prepare(e){e.robotSensors={...this.controls,...this.world.sensors()}}setupControls(){for(const e of this.element.querySelectorAll(".visubot-controls input[type=range]")){const t=e.parentElement.querySelector("output"),n=()=>{this.controls[e.name]=Number(e.value),t.textContent=e.value};e.addEventListener("input",n),n()}for(const e of this.element.querySelectorAll(".visubot-controls button[name]"))e.addEventListener("click",()=>{const t=e.name;this.controls[t]=!0,e.classList.add("pressed"),window.clearTimeout(this.pressTimers.get(t)),this.pressTimers.set(t,window.setTimeout(()=>{this.controls[t]=!1,e.classList.remove("pressed")},1e3))})}setupCheck(){for(const e of this.check.querySelectorAll("button[data-py]"))e.addEventListener("click",()=>{const{after:t,wait:n}=e.dataset;le.run(e.dataset.py).then(()=>t?new Promise(a=>setTimeout(a,Number(n))).then(()=>le.run(t)):void 0).catch(a=>this.liveFailed(a))});this.check.addEventListener("toggle",()=>void this.readCheck())}async readCheck(){if(!this.checking){this.checking=!0;try{for(;this.check.open&&le.connected;){for(const e of this.check.querySelectorAll("[data-sensor]")){if(!this.check.open||!le.connected)break;const t=e.dataset.sensor,n=await le.ask(St[t].python).catch(()=>{});n!==void 0&&(e.textContent=typeof St[t].simulated=="boolean"?n===!0||typeof n=="number"&&n!==0?"✓":"–":String(typeof n=="number"?Math.round(n*10)/10:n))}await new Promise(e=>setTimeout(e,200))}}finally{this.checking=!1}}}get live(){return le.connected}async prepareLive(e,t=[]){const n={};for(const a of new Set(["getDistance","getLine",...t])){const s=await le.ask(St[a].python);typeof St[a].simulated=="boolean"?n[a]=s===!0||typeof s=="number"&&s!==0:typeof St[a].simulated=="string"?n[a]=typeof s=="string"?s:String(St[a].simulated):n[a]=typeof s=="number"?a==="getDistance"?Math.round(s):s:0}this.realSensors=n,e.robotSensors={...this.controls,...this.world.sensors(),...n}}async drive(e){for(;this.sentsetTimeout(n,t.args[0]))}}liveFailed(e){le.disconnect(e instanceof Error?e.message:String(e))}updateLive(){this.liveStatus.textContent=ng(),this.liveStatus.classList.toggle("connected",le.connected),this.check.hidden=!le.connected,le.connected||(this.check.open=!1),this.updateStatus()}follow(e,t){var a,s,r,o;for(;this.appliedl!==0);this.world.tick(Xl),n&&((o=this.view)==null||o.moveTo(this.world.pose,this.world.trail,t)),this.updateStatus()}dispose(){var e;this.stopListening();for(const t of this.pressTimers.values())window.clearTimeout(t);(e=this.view)==null||e.dispose(),this.view=void 0,this.loading=void 0}updateStatus(){const e=this.world.lineState().toString(2).padStart(4,"0"),t=[`${p("web_visubot_distance")}: ${this.world.distance()} cm`,`${p("web_visubot_line")}: ${e}`];this.world.bumps>0&&t.push(`⚠︎ ${p("web_visubot_bumps")}: ${this.world.bumps}`),this.world.screen!==void 0&&t.push(`📺 ${this.world.screen}`),this.realSensors&&le.connected&&t.push(`🤖 ${p("web_visubot_distance")}: ${this.realSensors.getDistance} cm · ${p("web_visubot_line")}: ${Number(this.realSensors.getLine).toString(2).padStart(4,"0")}`),this.status.textContent=t.join(" · ")}}let J1;function tg(i,e){try{J1??(J1=new AudioContext);const t=J1.createOscillator(),n=J1.createGain();t.type="square",t.frequency.value=Math.max(20,Math.min(2e4,i)),n.gain.value=.05,t.connect(n).connect(J1.destination);const a=J1.currentTime+Math.min(Math.max(e,0),5e3)/1e3;t.start(),t.stop(a)}catch{}}function ED(){const i=(t,n,a,s,r)=>``,e=(t,n,a)=>``;return`
🎛 ${p("web_visubot_controls")}

${p("web_visubot_controls_hint")}

${i("getBrightness","web_visubot_sensor_brightness",0,100,50)} ${i("getLoudness","web_visubot_sensor_loudness",0,100,0)} @@ -60338,23 +60338,23 @@ ${a}`));this.body.append(s),this.foldReference(s)}}foldReference(e){const t="vis ${e("isJoystickLeft","←","web_visubot_sensor_joy_left")}${e("isJoystickRight","→","web_visubot_sensor_joy_right")} ${e("isShaken",`〰 ${p("web_visubot_shake")}`,"web_visubot_sensor_shake")}
- `}function ED(){const i=a=>a.replace(/"/g,"""),e=(a,s,r,o=1e3)=>``,t="mbot2.EM_stop('ALL')",n=ng.map(a=>`${p(a.key)}…`).join("");return``}function ND(){const i=a=>a.replace(/"/g,"""),e=(a,s,r,o=1e3)=>``,t="mbot2.EM_stop('ALL')",n=ig.map(a=>`${p(a.key)}…`).join("");return``}function tg(){return le.connecting?p("web_visubot_connecting"):le.connected?`✓ ${p("web_visubot_connected")}`:le.error?`⚠︎ ${p("web_visubot_link_error")}: ${le.error}`:""}async function ND(){if(le.connected||le.connecting)return le.disconnect();try{await le.connect()}catch(i){await le.disconnect(i.name==="NotFoundError"?void 0:i.message)}}const ut=i=>()=>ze(I.anweisung,{textLines:[i]}),FD=[{key:"web_visubot_el_forward",group:"drive",type:I.anweisung,make:ut("mbot.forward()")},{key:"web_visubot_el_backward",group:"drive",type:I.anweisung,make:ut("mbot.backward()")},{key:"web_visubot_el_right",group:"drive",type:I.anweisung,make:ut("mbot.turnRight()")},{key:"web_visubot_el_left",group:"drive",type:I.anweisung,make:ut("mbot.turnLeft()")},{key:"web_visubot_el_drive",group:"wheels",type:I.anweisung,make:ut("mbot.drive(30, 30)")},{key:"web_visubot_el_stop",group:"wheels",type:I.anweisung,make:ut("mbot.stop()")},{key:"web_visubot_el_led",group:"output",type:I.anweisung,make:ut("mbot.setLed(255, 0, 0)")},{key:"web_visubot_el_led_off",group:"output",type:I.anweisung,make:ut("mbot.ledOff()")},{key:"web_visubot_el_led_color",group:"output",type:I.anweisung,make:ut('mbot.led(0).setColor("grün")')},{key:"web_visubot_el_tone",group:"output",type:I.anweisung,make:ut("mbot.playTone(440, 300)")},{key:"web_visubot_el_text",group:"output",type:I.anweisung,make:ut('mbot.showText("Hallo")')},{key:"web_visubot_el_wait",group:"wait",type:I.anweisung,make:ut("mbot.pause(100)")},{key:"web_visubot_el_emotion",group:"emotion",type:I.anweisung,make:ut('mbot.emotion("smile")')},{key:"web_visubot_el_timer",group:"wait",type:I.anweisung,make:ut("mbot.resetTimer()")}],ng=[{key:"web_visubot_sensor_distance",group:"distance",text:"mbot.getDistance()"},{key:"web_visubot_sensor_line",group:"line",text:"mbot.getLine()"},{key:"web_visubot_sensor_line_left",group:"line",text:"mbot.isLineLeft()"},{key:"web_visubot_sensor_line_right",group:"line",text:"mbot.isLineRight()"},{key:"web_visubot_sensor_color",group:"color",get text(){return`mbot.getColor().equals("${eh("red")}")`}},{key:"web_visubot_sensor_button_a",group:"buttons",text:"mbot.isButtonA()"},{key:"web_visubot_sensor_button_b",group:"buttons",text:"mbot.isButtonB()"},{key:"web_visubot_sensor_joy_up",group:"buttons",text:"mbot.isJoystickUp()"},{key:"web_visubot_sensor_joy_down",group:"buttons",text:"mbot.isJoystickDown()"},{key:"web_visubot_sensor_joy_left",group:"buttons",text:"mbot.isJoystickLeft()"},{key:"web_visubot_sensor_joy_right",group:"buttons",text:"mbot.isJoystickRight()"},{key:"web_visubot_sensor_brightness",group:"light",text:"mbot.getBrightness()"},{key:"web_visubot_sensor_loudness",group:"light",text:"mbot.getLoudness()"},{key:"web_visubot_sensor_pitch",group:"tilt",text:"mbot.getPitch()"},{key:"web_visubot_sensor_roll",group:"tilt",text:"mbot.getRoll()"},{key:"web_visubot_sensor_shake",group:"tilt",text:"mbot.isShaken()"},{key:"web_visubot_sensor_timer",group:"timer",text:"mbot.getTimer()"},{key:"web_visubot_sensor_battery",group:"timer",text:"mbot.getBattery()"}],sa=()=>typeof window.showDirectoryPicker=="function";class Hs{constructor(e){this.handle=e}get name(){return this.handle.name}async list(){const e=[];for await(const t of this.handle.values())t.name.startsWith(".")||e.push({kind:t.kind,name:t.name});return e}async dir(e,t=!1){return new Hs(await this.handle.getDirectoryHandle(e,{create:t}))}async read(e){return(await(await this.handle.getFileHandle(e)).getFile()).text()}async write(e,t){const a=await(await this.handle.getFileHandle(e,{create:!0})).createWritable();await a.write(t),await a.close()}async has(e){try{return await this.handle.getFileHandle(e),!0}catch{try{return await this.handle.getDirectoryHandle(e),!0}catch{return!1}}}async remove(e){await this.handle.removeEntry(e,{recursive:!0})}}const JD="visustruct-workspace";function RD(){return new Promise((i,e)=>{const t=indexedDB.open(JD,1);t.onupgradeneeded=()=>{t.result.createObjectStore("files"),t.result.createObjectStore("meta")},t.onsuccess=()=>i(t.result),t.onerror=()=>e(t.error)})}async function It(i,e,t){const n=await RD();return new Promise((a,s)=>{const r=t(n.transaction(i,e).objectStore(i));r.onsuccess=()=>a(r.result),r.onerror=()=>s(r.error)})}class s0{constructor(e,t){this.name=e,this.path=t}key(e){return this.path+e}async list(){const e=await It("files","readonly",n=>n.getAllKeys()),t=new Map;for(const n of e){if(!n.startsWith(this.path)||n===this.path)continue;const a=n.slice(this.path.length),s=a.indexOf("/"),r=s<0?a:a.slice(0,s);t.has(r)||t.set(r,{kind:s<0?"file":"directory",name:r})}return[...t.values()]}async dir(e,t=!1){const n=this.key(e)+"/";if(!(await It("files","readonly",s=>s.count(n))>0)){if(!t)throw new DOMException(e,"NotFoundError");await It("files","readwrite",s=>s.put("",n))}return new s0(e,n)}async read(e){const t=await It("files","readonly",n=>n.get(this.key(e)));if(typeof t!="string")throw new DOMException(e,"NotFoundError");return t}async write(e,t){await It("files","readwrite",n=>n.put(t,this.key(e)))}async has(e){const t=await It("files","readonly",a=>a.count(this.key(e))),n=await It("files","readonly",a=>a.count(this.key(e)+"/"));return t+n>0}async remove(e){const t=this.key(e);await It("files","readwrite",n=>n.delete(t)),await It("files","readwrite",n=>n.delete(IDBKeyRange.bound(t+"/",t+"/￿")))}}async function GD(i,e="folder"){const t=await window.showDirectoryPicker({id:e==="folder"?"visustruct-workspace":e,mode:"readwrite"}),n=i&&t.name!==i?await t.getDirectoryHandle(i,{create:!0}):t;return await It("meta","readwrite",a=>a.put(n,e)),{kind:"folder",root:new Hs(n)}}function im(){return{kind:"browser",root:new s0("VisuStruct","")}}async function HD(i="folder"){var e;try{const t=await It("meta","readonly",a=>a.get(i));if(!t)return;const n=await((e=t.queryPermission)==null?void 0:e.call(t,{mode:"readwrite"}))??"granted";return{handle:t,ready:n==="granted"}}catch{return}}async function am(i){var t;return(await((t=i.requestPermission)==null?void 0:t.call(i,{mode:"readwrite"}))??"granted")==="granted"?{kind:"folder",root:new Hs(i)}:void 0}async function VD(i="folder"){try{await It("meta","readwrite",e=>e.delete(i))}catch{}}const ra="learnProgress.json",oa="lernstand.json",la="visustruct.files.mode",sm="visustruct.files.expanded";function QD(i){try{const e=JSON.parse(ig(i)??"[]");return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}catch{return[]}}function ig(i){try{return localStorage.getItem(i)}catch{return null}}function ua(i,e){try{e===null?localStorage.removeItem(i):localStorage.setItem(i,e)}catch{}}const U=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function rm(i){return new Promise(e=>{const t=document.createElement("div");t.className="confirm";const n=(i.choices??[]).map(o=>``).join("");t.innerHTML=``;const a=t.querySelector("form"),s=a.querySelector("input"),r=o=>{t.remove(),e(o)};a.addEventListener("submit",o=>{if(o.preventDefault(),!s)return r("");s.value.trim()?r(s.value):s.focus()}),t.addEventListener("click",o=>{var m;const l=o.target,u=(m=l.closest("[data-choice]"))==null?void 0:m.dataset.choice;u!==void 0?r(u):(l===t||l.closest("[data-cancel]"))&&r(void 0)}),t.addEventListener("keydown",o=>o.key==="Escape"&&r(void 0)),document.body.append(t),(s??a.querySelector("[data-cancel]")).focus()})}class qD{constructor(e){v(this,"element");v(this,"body");v(this,"workspace");v(this,"pending");v(this,"expanded",new Set(QD(sm)));v(this,"rendering",0);v(this,"progressWorkspace");v(this,"hadWorkspace",!1);v(this,"progressTimer");this.host=e,this.element=document.createElement("aside"),this.element.className="files",this.build(),ge.onChange(()=>this.progressChanged()),this.restore()}rememberExpanded(){ua(sm,JSON.stringify([...this.expanded]))}get ready(){return!!this.workspace}build(){this.element.innerHTML=` + `;const a=t.querySelector("form"),s=a.querySelector("input"),r=o=>{t.remove(),e(o)};a.addEventListener("submit",o=>{if(o.preventDefault(),!s)return r("");s.value.trim()?r(s.value):s.focus()}),t.addEventListener("click",o=>{var m;const l=o.target,u=(m=l.closest("[data-choice]"))==null?void 0:m.dataset.choice;u!==void 0?r(u):(l===t||l.closest("[data-cancel]"))&&r(void 0)}),t.addEventListener("keydown",o=>o.key==="Escape"&&r(void 0)),document.body.append(t),(s??a.querySelector("[data-cancel]")).focus()})}class UD{constructor(e){v(this,"element");v(this,"body");v(this,"workspace");v(this,"pending");v(this,"expanded",new Set(qD(sm)));v(this,"rendering",0);v(this,"progressWorkspace");v(this,"hadWorkspace",!1);v(this,"progressTimer");this.host=e,this.element=document.createElement("aside"),this.element.className="files",this.build(),ge.onChange(()=>this.progressChanged()),this.restore()}rememberExpanded(){ua(sm,JSON.stringify([...this.expanded]))}get ready(){return!!this.workspace}build(){this.element.innerHTML=`

${U(p("web_files_title"))}

@@ -60362,7 +60362,7 @@ ${a}`));this.body.append(s),this.foldReference(s)}}foldReference(e){const t="vis
- `,this.body=this.element.querySelector(".files-body");const e=(t,n)=>this.element.querySelector(`[data-files=${t}]`).addEventListener("click",n);e("hide",()=>this.host.hide()),e("new-folder",()=>void this.newFolder()),e("switch",()=>void this.switchWorkspace()),this.body.addEventListener("click",t=>void this.onTreeClick(t)),this.render()}async restore(){if(ig(la)==="browser")this.workspace=im();else if(sa()){const e=await HD();e!=null&&e.ready?this.workspace=await am(e.handle):this.pending=e==null?void 0:e.handle}await this.render(),this.workspace||this.startDialog()}async startDialog(){var r;const e=p("web_learn_start_folder"),t=(o,l,u=!1,m)=>`${m?`

${U(m)}

`:""}`,n=sa()?[this.pending?t("reconnect",`${ne.open} ${U(p("web_learn_start_continue_fmt",this.pending.name))}`,!0):"",t("pick",`${ne.open} ${U(p("web_learn_start_open"))}`,!this.pending),t("create",`${ne.newFolder} ${U(p("web_learn_start_create_fmt",e))}`,!1,p("web_learn_start_create_hint"))]:[t("browser",U(p("web_files_browser")),!0,p("web_files_browser_hint"))],a=document.createElement("div");a.className="confirm",a.innerHTML=``,t.querySelector("[data-action=about-done]").addEventListener("click",()=>t.close()),t.addEventListener("click",n=>n.target===t&&t.close()),t.addEventListener("close",()=>t.remove()),document.body.append(t),t.showModal()}setupSettingsMenu(e,t){const n=a=>{t.hidden=!a,e.setAttribute("aria-expanded",String(a))};e.addEventListener("click",()=>n(t.hidden)),this.closeSettings&&document.removeEventListener("pointerdown",this.closeSettings),this.escapeSettings&&document.removeEventListener("keydown",this.escapeSettings),this.closeSettings=a=>{!t.hidden&&!e.parentElement.contains(a.target)&&n(!1)},document.addEventListener("pointerdown",this.closeSettings),this.escapeSettings=a=>{a.key!=="Escape"||t.hidden||(n(!1),e.focus())},document.addEventListener("keydown",this.escapeSettings)}learnRail(){return this.railButton=se("button",{class:"learn-rail"}),this.labelLearnRail(),this.railButton.addEventListener("click",()=>this.setLearning(!0)),this.railButton}liveRail(){return this.liveRailButton=se("button",{class:"learn-rail live-rail"}),this.labelLiveRail(),this.liveRailButton.addEventListener("click",()=>this.setLiveCoding(!0)),this.liveRailButton}labelLiveRail(){this.liveRailButton&&(this.liveRailButton.title=p("web_live_show"),this.liveRailButton.innerHTML=`${kt}</> ${W(p("web_live_title"))}`)}labelLearnRail(){this.railButton&&(this.railButton.title=p("web_learn_show"),this.railButton.innerHTML=`${kt}🎓 ${W(p("web_learn_title"))}`)}learnHost(){return{collapse:()=>this.setLearning(!1),showEditor:()=>{this.editorHidden&&this.setEditorHidden(!1)},showLiveCode:()=>{this.liveCoding||this.setLiveCoding(!0)},showJava:()=>this.openJavaColumn(),showFiles:()=>{this.shell.classList.contains("files-open")||this.setFilesOpen(!0)},openExercise:(e,t)=>{e.code==="java"?this.openJavaColumn():this.setEditorHidden(!1);const n=this.tabs.findIndex(s=>s.exerciseId===e.id);if(n>=0){this.switchTab(n),this.setSimulating(!1);return}const a=this.makeTab();a.doc=t,a.exerciseId=e.id,a.selected=t.elements.length>0?[0]:void 0,this.isPristine(this.tab)?this.tabs[this.tabIndex]=a:this.tabs.push(a),this.tabIndex=this.tabs.indexOf(a),this.setSimulating(!1),this.render()},openDiagram:(e,t)=>{this.setEditorHidden(!1),this.loadXML(o1(e),e.caption.trim()?`${e.caption.trim()}.visustruct`:t)},exerciseDocument:e=>{const t=this.tabs.find(a=>a.exerciseId===e);if(t)return t.doc;const n=this.tab;if(!(n.exerciseId||this.isPristine(n)))return n.exerciseId=e,ge.updateExercise(e,{xml:o1(n.doc)}),n.doc},subprogramsFor:e=>{const t=this.tabs.find(n=>n.exerciseId===e);return n=>this.findSubprogram(n,t)},stopSimulation:()=>this.setSimulating(!1),resetExercise:(e,t)=>{const n=this.tabs.find(a=>a.exerciseId===e);n&&(n.undoStack.push(n.doc),n.doc=t,n.redoStack=[],n.selected=[0],n===this.tab&&this.render())},preview:e=>{const t=ed(e,this.metrics,this.measure,0);if(!t)return;const n=t.svg.getAttribute("width");return n&&(t.svg.style.maxWidth=`${n}px`),t.svg.removeAttribute("width"),t.svg.removeAttribute("height"),t.svg}}}isPristine(e){return!e.dirty&&!e.fileName&&!e.exerciseId&&e.undoStack.length===0}rememberExercise(){const e=this.tab;e.exerciseId&&(clearTimeout(this.exerciseSaveTimer),this.exerciseSaveTimer=window.setTimeout(()=>{e.exerciseId&&ge.updateExercise(e.exerciseId,{xml:o1(e.doc)})},300))}paletteIcon(e){const t=ye("svg",{viewBox:"0 0 28 20",width:28,height:20,class:"icon"}),n={fill:"none",stroke:"currentColor","stroke-width":1.5};t.append(ye("rect",{x:1,y:1,width:26,height:18,...n}));const a=s=>t.append(ye("path",{d:s,...n}));switch(e){case"verzweigung":a("M1 1 L14 10 L27 1 M14 10 V19");break;case"fallauswahl":a("M1 1 L20 10 L27 1 M1 10 H27 M10 10 V19 M20 10 V19");break;case"forZaehlSchleife":case"whileSchleife":a("M7 7 H27 M7 7 V19");break;case"doUntilSchleife":a("M7 1 V13 H27");break;case"endlosschleife":a("M7 6 H27 M7 6 V14 H27");break;case"aufruf":a("M5 1 V19 M23 1 V19");break;case"aussprung":a("M6 1 L1 10 L6 19");break}return t}render(){const e={...this.doc,elements:this.doc.elements.map(Ua)};this.layout=this.engine.layout(e),this.flat=A2(this.layout.elements),this.selected&&!Nt(this.doc,this.selected)&&(this.selected=void 0);const t=this.zoom,n=this.canvasHost;this.renderedHostSize={width:n.clientWidth,height:n.clientHeight};const a={width:Math.max(320,this.layout.canvasSize.width,Math.floor(n.clientWidth/t)),height:Math.max(240,this.layout.canvasSize.height+60,Math.floor(n.clientHeight/t))};this.renderer.usesSimulationHighlight=this.simulating,this.renderer.fillsSelection=this.liveCoding,this.svg=this.renderer.render(this.layout,a,this.simulating?this.simPath:this.selected),this.svg.setAttribute("width",String(Math.floor(a.width*t))),this.svg.setAttribute("height",String(Math.floor(a.height*t))),this.overlay=ye("g",{class:"drop-overlay"}),this.svg.append(this.overlay),this.canvasHost.replaceChildren(this.svg),document.activeElement!==this.captionInput&&(this.captionInput.value=this.doc.caption),this.undoButton.disabled=this.simulating||this.undoStack.length===0,this.redoButton.disabled=this.simulating||this.redoStack.length===0,this.deleteButton.disabled=this.simulating||!this.selected||!rr(this.doc,this.selected),this.captionInput.readOnly=this.simulating,this.codeButton.disabled=this.simulating,this.exportButton.disabled=this.simulating,this.coding&&this.code.refresh(),this.refreshLive(),this.refreshPreview(),this.renderTabs(),this.renderInspector(),this.updateStatus()}refreshLive(){this.liveCoding&&this.live.refresh(this.doc,this.simulating?this.simPath:this.selected,{owner:this.tab,subprograms:new Set(this.tabs.filter(e=>e!==this.tab).flatMap(e=>{var t;return((t=yt(e.doc.caption))==null?void 0:t.name)??[]})),editable:!this.simulating,resolve:e=>this.findSubprogram(e)})}updateStatus(){this.rememberExercise(),document.title=`${this.dirty?"• ":""}${this.fileName} – VisuStruct Web`,this.statusLine.textContent=`${this.fileName}${this.dirty?` (${p("web_status_modified")})`:""}`}renderInspector(){const e=this.selected,t=e?Nt(this.doc,e):void 0,n=this.inspector;if(!e||!t){n.replaceChildren(se("h2",{},p("web_inspector_title")),se("p",{class:"hint"},p("inspector_no_selection")),se("p",{class:"hint"},p("web_inspector_help_drop")),se("p",{class:"hint"},p("web_inspector_help_files")));return}if(n.replaceChildren(se("h2",{},`${p("web_inspector_title")} · ${Xr(t.type)}`)),t.type===I.anweisung){const a=Qa(t.textLines.join(` `)),s=se("div",{class:"segmented",role:"group","aria-label":p("inspector_io_mode_title")});for(const[r,o]of[["statement",p("inspector_io_mode_statement")],["input",p("inspector_io_mode_input")],["output",p("inspector_io_mode_output")]]){const l=se("button",{"aria-pressed":String(r===a)},o);l.addEventListener("click",()=>{var c,d;const u=((c=Nt(this.doc,e))==null?void 0:c.textLines.join(` -`))??"";if(r===Qa(u))return;const m=g2(r,u);this.commit(Qi(this.doc,e,m.split(` -`))),(d=this.inspector.querySelector("textarea"))==null||d.focus()}),s.append(l)}n.append(s,se("p",{class:"hint mono-hint"},vJ[a]))}if(t.type===I.forSchleife){const a=se("div",{class:"for-fields"}),s=Q0(t.textLines);[[p("inspector_for_init"),p("inspector_for_placeholder_init")],[p("inspector_for_condition"),p("inspector_for_placeholder_condition")],[p("inspector_for_step"),p("inspector_for_placeholder_step")]].forEach(([o,l],u)=>{const m=se("input",{placeholder:l,spellcheck:"false",autocomplete:"off"});m.value=s[u],this.liveEdit(m,c=>{const d=Nt(this.doc,e);if(!d)return;const h=Q0(d.textLines);return h[u]=x2(c),Qi(this.doc,e,h)}),a.append(se("label",{},o,m))}),n.append(a)}else if(t.type!==I.leerElement){const a=yJ[t.type];a&&n.append(se("p",{class:"hint mono-hint"},a));const s=rd(t),r=se("textarea",{rows:"3",spellcheck:"false"}),o=t.textLines.join(` -`);r.value=s?V0(s,o):o,r.placeholder=wJ(t),r.addEventListener("focus",()=>{r.value.trim()==="ø"&&r.select()}),this.liveEdit(r,u=>{const m=rd(Nt(this.doc,e)??t),c=m?f2(m,V0(m,u)):u;return Qi(this.doc,e,c.split(` -`))});const l=se("div",{class:"editor-row"});s&&l.append(se("span",{class:"fixed-prefix"},s)),l.append(r),n.append(l)}this.renderCaseControls(e)}renderCaseControls(e){var l;const t=c2(e,this.doc);if(!t)return;const n=((l=Nt(this.doc,t))==null?void 0:l.cases)??[],a=d2(e,t),s=se("div",{class:"case-controls"});if(a!==void 0&&n[a]){const u=se("input",{placeholder:p("web_case_name_placeholder"),spellcheck:"false",autocomplete:"off"});u.value=n[a].name,this.liveEdit(u,m=>m.trim()===""?void 0:m2(this.doc,t,a,m)),s.append(se("label",{},p("web_case_name"),u))}const r=se("button",{},`+ ${p("inspector_add_case")}`);r.addEventListener("click",()=>{const u=l2(this.doc,t);this.commit(u.doc,u.path)});const o=se("button",{class:"danger-text"},`- ${p("inspector_remove_case")}`);o.disabled=n.length<=2||a===void 0,o.addEventListener("click",()=>{if(a===void 0)return;const u=u2(this.doc,t,a);this.commit(u.doc,u.path)}),s.append(se("div",{class:"group"},r,o)),this.inspector.append(s)}liveEdit(e,t){let n;e.addEventListener("focus",()=>n=this.doc),e.addEventListener("input",()=>{const a=jd(e.value);if(a!==e.value){const r=e.selectionStart;e.value=a,e.setSelectionRange(r,r)}const s=t(a);s&&(this.doc=s,this.dirty=!0,this.renderDiagramOnly())}),e.addEventListener("blur",()=>{n&&n!==this.doc&&this.pushUndo(n),n=void 0,this.renderDiagramOnly()})}renderDiagramOnly(){const e=this.selected,t=this.inspector,n=document.createElement("aside");this.inspector=n,this.render(),this.inspector=t,this.selected=e}setSimulating(e){var t;e!==this.simulating&&(document.activeElement instanceof HTMLElement&&document.activeElement.blur(),this.endDrag(),this.simulating=e,this.root.classList.toggle("simulating",e),this.simButton.setAttribute("aria-pressed",String(e)),this.simButton.innerHTML=`${e?ne.stop:ne.play}${W(p(e?"web_simulation_end":"web_simulation_start"))}`,this.simButton.dataset.tip=p(e?"web_simulation_end_title":"web_simulation_start_title"),this.simButton.setAttribute("aria-label",p(e?"web_simulation_end":"web_simulation_start")),e?(this.setCoding(!1),this.setEditorHidden(!1),(t=this.visuBot)==null||t.setWorlds(Sd(this.tab.exerciseId)),this.visuBot&&!this.previewOpen&&(this.setPreviewOpen(!0),this.previewOpenedForSim=!0),this.placeSimulationRobot(),this.sim.begin()):(this.sim.end(),this.placeSimulationRobot(),this.previewOpenedForSim&&this.setPreviewOpen(!1),this.simPath=void 0,!this.selected&&this.doc.elements.length>0&&(this.selected=[0])),this.render())}runRobot(e){return!this.visuBot||!/\bmbot\s*\./u.test(JSON.stringify(this.tabs.map(t=>t.doc)))?!1:(this.simulating?this.sim.reset():this.setSimulating(!0),e?this.sim.step():this.sim.play(),!0)}setCoding(e){e!==this.coding&&(e&&(this.setLiveCoding(!1),this.setEditorHidden(!1)),this.coding=e,this.root.classList.toggle("coding",e),this.codeButton.setAttribute("aria-pressed",String(e)),e?this.code.refresh():this.code.close(),this.renderDiagramOnly())}openJavaColumn(){if(this.live.language!=="java"){const e="[data-action=live-language]",t=this.topbar.querySelector(e)??this.root.querySelector(e);t?(t.value="java",t.dispatchEvent(new Event("change"))):this.live.setTarget("java")}this.liveCoding||this.setLiveCoding(!0)}setCodeMain(e){this.codeMain=e,Fe(xd,e?"1":"0"),e&&!this.liveCoding&&this.setLiveCoding(!0),e&&this.editorHidden&&this.setEditorHidden(!1),this.shell.classList.toggle("code-main",e),this.labelSwap(),this.canvasHost&&this.render()}labelSwap(){const e=p(this.codeMain?"web_swap_to_editor":"web_swap_to_code");for(const t of this.shell.querySelectorAll("[data-action=swap-main]"))t.dataset.tip=e,t.setAttribute("aria-label",e),t.setAttribute("aria-pressed",String(this.codeMain))}setupPreview(){const e=o=>{this.previewOpenedForSim=!1,this.setPreviewOpen(o)};this.preview.onHide=()=>e(!1),this.preview.rail.addEventListener("click",()=>e(!0)),this.preview.onToggleStacked=()=>{this.previewStacked=!this.previewStacked,Fe(vd,this.previewStacked?"1":"0"),this.previewStacked&&!this.liveCoding&&this.setLiveCoding(!0),this.placePreview()},this.previewStacked=Ue(vd)==="1";const t=Ue(fd);this.previewOpen=t===null||t==="1";const n=this.preview.heightBar,a=this.preview.element,s=(o,l)=>{var c;const u=Math.max(160,(((c=a.parentElement)==null?void 0:c.getBoundingClientRect().height)??600)-120),m=o===void 0?void 0:Math.round(Math.max(160,Math.min(o,u)));a.style.height=m===void 0?"":`${m}px`,l&&Fe(zd,m===void 0?"":String(m))},r=Number(Ue(zd));r>0&&(a.style.height=`${r}px`),n.addEventListener("pointerdown",o=>{if(o.button!==0)return;o.preventDefault(),n.setPointerCapture(o.pointerId);const l=o.clientY,u=a.getBoundingClientRect().height;this.shell.classList.add("resizing");const m=d=>s(u-(d.clientY-l),!1),c=d=>{n.removeEventListener("pointermove",m),n.removeEventListener("pointerup",c),n.removeEventListener("pointercancel",c),this.shell.classList.remove("resizing"),s(u-(d.clientY-l),!0)};n.addEventListener("pointermove",m),n.addEventListener("pointerup",c),n.addEventListener("pointercancel",c)}),n.addEventListener("dblclick",()=>s(void 0,!0)),n.addEventListener("keydown",o=>{const l=o.key==="ArrowUp"?20:o.key==="ArrowDown"?-20:0;l&&(o.preventDefault(),s(a.getBoundingClientRect().height+l,!0))}),this.placePreview()}setPreviewOpen(e){this.previewOpen=e,Fe(fd,e?"1":"0"),e||this.preview.pause(),this.placePreview(),this.placeSimulationRobot(),this.canvasHost&&this.render()}placeSimulationRobot(){const e=this.visuBot,t=!!e&&this.simulating&&this.previewOpen;this.preview.hostSimulation(t?e.viewport:void 0),t||e==null||e.restoreViewport()}placePreview(){const e=this.previewStacked&&this.liveCoding;this.preview.setStacked(this.previewStacked),this.shell.classList.toggle("preview",this.previewOpen),this.shell.classList.toggle("preview-stacked",e),e?this.preview.element.parentElement!==this.live.element&&this.live.element.append(this.preview.element):this.preview.element.previousElementSibling!==this.previewResizer&&this.previewResizer.after(this.preview.element)}refreshPreview(){!this.previewOpen||!Rn()||this.preview.update(this.doc,e=>this.findSubprogram(e),Sd(this.tab.exerciseId),this.tab.exerciseId??"",this.tabs.map(e=>e.doc))}setLiveCoding(e){e&&this.coding&&this.setCoding(!1),this.liveCoding=e,this.shell.classList.toggle("live",e),this.placePreview(),e||this.live.hideConsole(),Fe(pd,e?"1":"0"),this.keepAColumnOpen(),this.canvasHost&&this.render()}learnResizer(){return this.panelResizer(this.learn.element,"learn-resizer",gd,p("web_learn_resize"),1)}liveResizer(){return this.panelResizer(this.live.element,"live-resizer",kJ,p("web_live_resize"),-1,()=>this.root)}yieldingPanels(){return[{panel:this.preview.element,key:wd},{panel:this.learn.element,key:gd},{panel:this.files.element,key:hd}].filter(({panel:e})=>e.offsetParent!==null&&e.parentElement===this.live.element.parentElement)}panelResizer(e,t,n,a,s,r){const o=se("div",{class:t,role:"separator","aria-orientation":"vertical",tabindex:"0",title:a}),l=d=>{var x;const h=((x=e.parentElement)==null?void 0:x.getBoundingClientRect().width)??0;if(h===0)return AJ(d);const g=[this.files.element,this.learn.element,this.live.element,this.preview.element].filter(b=>b!==e&&b.offsetParent!==null&&getComputedStyle(b).flexGrow==="0").reduce((b,y)=>b+y.getBoundingClientRect().width,0),f=parseFloat(getComputedStyle(e).minWidth)||200;return Math.round(Math.max(f,Math.min(d,h-g-240)))},u=(d,h)=>{e.style.width=d===void 0?"":`${l(d)}px`,h&&Fe(n,d===void 0?"":String(l(d)))},m=Number(Ue(n));m>0&&u(m,!1);const c=()=>{const d=typeof s=="function"?s():s;return getComputedStyle(this.shell).direction==="rtl"?-d:d};return o.addEventListener("pointerdown",d=>{if(d.button!==0)return;d.preventDefault(),o.setPointerCapture(d.pointerId);const h=d.clientX,g=e.getBoundingClientRect().width,f=c();this.shell.classList.add("resizing");const x=r?this.pushResize(e,n,r(),g):void 0,b=(S,z)=>(x??u)(g+f*(S.clientX-h),z),y=S=>b(S,!1),w=S=>{o.removeEventListener("pointermove",y),o.removeEventListener("pointerup",w),o.removeEventListener("pointercancel",w),this.shell.classList.remove("resizing"),b(S,!0)};o.addEventListener("pointermove",y),o.addEventListener("pointerup",w),o.addEventListener("pointercancel",w)}),o.addEventListener("dblclick",()=>u(void 0,!0)),o.addEventListener("keydown",d=>{const h=d.key==="ArrowRight"?20:d.key==="ArrowLeft"?-20:0;h&&(d.preventDefault(),u(e.getBoundingClientRect().width+c()*h,!0))}),o}pushResize(e,t,n,a){const s=(m,c)=>Math.max(parseFloat(getComputedStyle(m).minWidth)||0,c),r=s(e,200),o=Math.max(0,n.getBoundingClientRect().width-s(n,240)),l=this.yieldingPanels().map(m=>({...m,start:m.panel.getBoundingClientRect().width,min:s(m.panel,200),changed:!1})),u=l.reduce((m,c)=>m+Math.max(0,c.start-c.min),0);return(m,c)=>{const d=Math.round(Math.max(r,Math.min(m,a+o+u)));let h=Math.max(0,d-a-o,r-m);for(const g of l){const f=Math.min(h,Math.max(0,g.start-g.min));h-=f,g.changed||(g.changed=f>0),g.changed&&(g.panel.style.width=`${Math.round(g.start-f)}px`,c&&Fe(g.key,String(Math.round(g.start-f))))}e.style.width=`${d}px`,c&&Fe(t,String(d))}}findSubprogram(e,t=this.tab){const n=to(e);if(n==="")return;const a=this.tabs.find(s=>s!==t&&(to(s.doc.caption)===n||to(on(s))===n));return a==null?void 0:a.doc}scrollToSimPath(){const e=this.simPath;if(!this.simulating||!e)return;const t=this.flat.find(o=>lo(o.idPath,e));if(!t)return;const n=this.canvasHost,a=this.zoom,s={x:t.frame.x*a,y:t.frame.y*a,width:t.frame.width*a,height:t.frame.height*a},r=24;s.yn.scrollTop+n.clientHeight&&(n.scrollTop=s.y-r),(s.xn.scrollLeft+n.clientWidth-r)&&(n.scrollLeft=Math.max(0,s.x-r))}commit(e,t){this.codeTyping=void 0,this.pushUndo(this.doc),this.doc=e,this.dirty=!0,t&&(this.selected=t),this.render()}commitFromCode(e,t){const n=Date.now(),a=this.codeTyping;!a||a.tab!==this.tab||n-a.last>1e3||n-a.start>5e3?(this.pushUndo(this.doc),this.codeTyping={tab:this.tab,start:n,last:n}):a.last=n,this.doc=e,this.dirty=!0,this.selected=or(t??this.selected,e),this.render()}pushUndo(e){for(this.undoStack.push(e);this.undoStack.length>TJ;)this.undoStack.shift();this.tab.redoStack=[]}undo(){const e=this.undoStack.pop();e&&(this.codeTyping=void 0,this.redoStack.push(this.doc),this.doc=e,this.dirty=!0,this.selected=or(this.selected,this.doc),this.render())}redo(){const e=this.redoStack.pop();e&&(this.codeTyping=void 0,this.undoStack.push(this.doc),this.doc=e,this.dirty=!0,this.selected=or(this.selected,this.doc),this.render())}resetHistory(){this.setSimulating(!1),this.tab.undoStack=[],this.tab.redoStack=[],this.selected=void 0,this.dirty=!1,this.render()}makeTab(){return{doc:a2(),serial:this.nextTabSerial++,dirty:!1,undoStack:[],redoStack:[],selected:[0]}}addTab(e=this.makeTab()){this.setSimulating(!1),this.tabs.push(e),this.tabIndex=this.tabs.length-1,this.render()}switchTab(e){e===this.tabIndex||!this.tabs[e]||(document.activeElement instanceof HTMLElement&&document.activeElement.blur(),this.setSimulating(!1),this.tabIndex=e,this.render())}async closeTab(e){if(this.tabs.length<=1)return;const t=this.tabs[e];t.dirty&&!t.exerciseId&&(this.switchTab(e),!await this.confirmDiscard())||(this.setSimulating(!1),this.tabs.splice(e,1),(this.tabIndex>e||this.tabIndex>=this.tabs.length)&&(this.tabIndex=Math.max(0,this.tabIndex-1)),this.render())}renderTabs(){const e=this.tabStrip;e.replaceChildren(),this.tabs.forEach((n,a)=>{const s=document.createElement("div");s.className="tab"+(a===this.tabIndex?" active":""),s.setAttribute("role","tab"),s.setAttribute("aria-selected",String(a===this.tabIndex));const r=document.createElement("button");r.className="tab-label",r.textContent=on(n),r.title=n.fileName??on(n),r.addEventListener("click",()=>this.switchTab(a)),s.append(r);const o=n.dirty&&!n.exerciseId;if(this.tabs.length>1){const l=document.createElement("button");l.className="tab-close"+(o?" unsaved":""),l.innerHTML='✕',l.title=p("a11y_close_tab"),l.setAttribute("aria-label",`${p("a11y_close_tab")}: ${on(n)}`),l.addEventListener("click",()=>this.closeTab(a)),s.append(l)}else o&&s.append(Object.assign(document.createElement("span"),{className:"tab-close unsaved",innerHTML:'●'}));o&&r.setAttribute("aria-label",`${on(n)} (${p("web_status_modified")})`),e.append(s)});const t=document.createElement("button");t.className="tab-add",t.textContent="+",t.title=p("a11y_new_diagram_tab"),t.setAttribute("aria-label",p("a11y_new_diagram_tab")),t.addEventListener("click",()=>this.addTab()),e.append(t)}copySelection(){const e=this.selected&&Nt(this.doc,this.selected);return e?(this.clipboard=structuredClone(e),this.showMessage(p("web_copied")),!0):!1}cutSelection(){this.selected&&rr(this.doc,this.selected)&&this.copySelection()&&this.deleteSelection()}paste(){this.clipboard&&this.insertNearSelection(structuredClone(this.clipboard))}deleteSelection(){!this.selected||!rr(this.doc,this.selected)||(this.commit(fi(this.doc,this.selected)),this.selected=void 0,this.render())}insertSensor(e,t=this.selected){if(!t||wn(this.doc,t))return;const n=At(this.doc,t);if(!ad.includes(n.type))return;const a=(n.textLines??[]).join(" ").trim();this.commit(Qi(this.doc,t,[a?`${a} ${e}`:e]),t);const s=this.inspector.querySelector("textarea");s&&(s.focus(),s.setSelectionRange(s.value.length,s.value.length))}insertNearSelection(e){const t=this.selected;if(t&&wn(this.doc,t))return this.commit(Pn(this.doc,t,e),t);if(t){const n=[...t.slice(0,-1),t[t.length-1]+1];return this.commit(io(this.doc,e,t),n)}if(this.doc.elements.length===1&&wn(this.doc,[0]))return this.commit(Pn(this.doc,[0],e),[0]);this.commit(ti(this.doc,[],this.doc.elements.length,e),[this.doc.elements.length])}confirmDiscard(){return this.dirty?new Promise(e=>{const t=document.createElement("div");t.className="confirm",t.innerHTML=`
+`))??"";if(r===Qa(u))return;const m=p2(r,u);this.commit(Qi(this.doc,e,m.split(` +`))),(d=this.inspector.querySelector("textarea"))==null||d.focus()}),s.append(l)}n.append(s,se("p",{class:"hint mono-hint"},wJ[a]))}if(t.type===I.forSchleife){const a=se("div",{class:"for-fields"}),s=Q0(t.textLines);[[p("inspector_for_init"),p("inspector_for_placeholder_init")],[p("inspector_for_condition"),p("inspector_for_placeholder_condition")],[p("inspector_for_step"),p("inspector_for_placeholder_step")]].forEach(([o,l],u)=>{const m=se("input",{placeholder:l,spellcheck:"false",autocomplete:"off"});m.value=s[u],this.liveEdit(m,c=>{const d=Nt(this.doc,e);if(!d)return;const h=Q0(d.textLines);return h[u]=b2(c),Qi(this.doc,e,h)}),a.append(se("label",{},o,m))}),n.append(a)}else if(t.type!==I.leerElement){const a=vJ[t.type];a&&n.append(se("p",{class:"hint mono-hint"},a));const s=od(t),r=se("textarea",{rows:"3",spellcheck:"false"}),o=t.textLines.join(` +`);r.value=s?V0(s,o):o,r.placeholder=zJ(t),r.addEventListener("focus",()=>{r.value.trim()==="ø"&&r.select()}),this.liveEdit(r,u=>{const m=od(Nt(this.doc,e)??t),c=m?x2(m,V0(m,u)):u;return Qi(this.doc,e,c.split(` +`))});const l=se("div",{class:"editor-row"});s&&l.append(se("span",{class:"fixed-prefix"},s)),l.append(r),n.append(l)}this.renderCaseControls(e)}renderCaseControls(e){var l;const t=d2(e,this.doc);if(!t)return;const n=((l=Nt(this.doc,t))==null?void 0:l.cases)??[],a=h2(e,t),s=se("div",{class:"case-controls"});if(a!==void 0&&n[a]){const u=se("input",{placeholder:p("web_case_name_placeholder"),spellcheck:"false",autocomplete:"off"});u.value=n[a].name,this.liveEdit(u,m=>m.trim()===""?void 0:c2(this.doc,t,a,m)),s.append(se("label",{},p("web_case_name"),u))}const r=se("button",{},`+ ${p("inspector_add_case")}`);r.addEventListener("click",()=>{const u=u2(this.doc,t);this.commit(u.doc,u.path)});const o=se("button",{class:"danger-text"},`- ${p("inspector_remove_case")}`);o.disabled=n.length<=2||a===void 0,o.addEventListener("click",()=>{if(a===void 0)return;const u=m2(this.doc,t,a);this.commit(u.doc,u.path)}),s.append(se("div",{class:"group"},r,o)),this.inspector.append(s)}liveEdit(e,t){let n;e.addEventListener("focus",()=>n=this.doc),e.addEventListener("input",()=>{const a=Cd(e.value);if(a!==e.value){const r=e.selectionStart;e.value=a,e.setSelectionRange(r,r)}const s=t(a);s&&(this.doc=s,this.dirty=!0,this.renderDiagramOnly())}),e.addEventListener("blur",()=>{n&&n!==this.doc&&this.pushUndo(n),n=void 0,this.renderDiagramOnly()})}renderDiagramOnly(){const e=this.selected,t=this.inspector,n=document.createElement("aside");this.inspector=n,this.render(),this.inspector=t,this.selected=e}setSimulating(e){var t;e!==this.simulating&&(document.activeElement instanceof HTMLElement&&document.activeElement.blur(),this.endDrag(),this.simulating=e,this.root.classList.toggle("simulating",e),this.simButton.setAttribute("aria-pressed",String(e)),this.simButton.innerHTML=`${e?ne.stop:ne.play}${W(p(e?"web_simulation_end":"web_simulation_start"))}`,this.simButton.dataset.tip=p(e?"web_simulation_end_title":"web_simulation_start_title"),this.simButton.setAttribute("aria-label",p(e?"web_simulation_end":"web_simulation_start")),e?(this.setCoding(!1),this.setEditorHidden(!1),(t=this.visuBot)==null||t.setWorlds(_d(this.tab.exerciseId)),this.visuBot&&!this.previewOpen&&(this.setPreviewOpen(!0),this.previewOpenedForSim=!0),this.placeSimulationRobot(),this.sim.begin()):(this.sim.end(),this.placeSimulationRobot(),this.previewOpenedForSim&&this.setPreviewOpen(!1),this.simPath=void 0,!this.selected&&this.doc.elements.length>0&&(this.selected=[0])),this.render())}runRobot(e){return!this.visuBot||!/\bmbot\s*\./u.test(JSON.stringify(this.tabs.map(t=>t.doc)))?!1:(this.simulating?this.sim.reset():this.setSimulating(!0),e?this.sim.step():this.sim.play(),!0)}setCoding(e){e!==this.coding&&(e&&(this.setLiveCoding(!1),this.setEditorHidden(!1)),this.coding=e,this.root.classList.toggle("coding",e),this.codeButton.setAttribute("aria-pressed",String(e)),e?this.code.refresh():this.code.close(),this.renderDiagramOnly())}openJavaColumn(){if(this.live.language!=="java"){const e="[data-action=live-language]",t=this.topbar.querySelector(e)??this.root.querySelector(e);t?(t.value="java",t.dispatchEvent(new Event("change"))):this.live.setTarget("java")}this.liveCoding||this.setLiveCoding(!0)}setCodeMain(e){this.codeMain=e,Fe(bd,e?"1":"0"),e&&!this.liveCoding&&this.setLiveCoding(!0),e&&this.editorHidden&&this.setEditorHidden(!1),this.shell.classList.toggle("code-main",e),this.labelSwap(),this.canvasHost&&this.render()}labelSwap(){const e=p(this.codeMain?"web_swap_to_editor":"web_swap_to_code");for(const t of this.shell.querySelectorAll("[data-action=swap-main]"))t.dataset.tip=e,t.setAttribute("aria-label",e),t.setAttribute("aria-pressed",String(this.codeMain))}setupPreview(){const e=o=>{this.previewOpenedForSim=!1,this.setPreviewOpen(o)};this.preview.onHide=()=>e(!1),this.preview.rail.addEventListener("click",()=>e(!0)),this.preview.onToggleStacked=()=>{this.previewStacked=!this.previewStacked,Fe(wd,this.previewStacked?"1":"0"),this.previewStacked&&!this.liveCoding&&this.setLiveCoding(!0),this.placePreview()},this.previewStacked=$e(wd)==="1";const t=$e(xd);this.previewOpen=t===null||t==="1";const n=this.preview.heightBar,a=this.preview.element,s=(o,l)=>{var c;const u=Math.max(160,(((c=a.parentElement)==null?void 0:c.getBoundingClientRect().height)??600)-120),m=o===void 0?void 0:Math.round(Math.max(160,Math.min(o,u)));a.style.height=m===void 0?"":`${m}px`,l&&Fe(Id,m===void 0?"":String(m))},r=Number($e(Id));r>0&&(a.style.height=`${r}px`),n.addEventListener("pointerdown",o=>{if(o.button!==0)return;o.preventDefault(),n.setPointerCapture(o.pointerId);const l=o.clientY,u=a.getBoundingClientRect().height;this.shell.classList.add("resizing");const m=d=>s(u-(d.clientY-l),!1),c=d=>{n.removeEventListener("pointermove",m),n.removeEventListener("pointerup",c),n.removeEventListener("pointercancel",c),this.shell.classList.remove("resizing"),s(u-(d.clientY-l),!0)};n.addEventListener("pointermove",m),n.addEventListener("pointerup",c),n.addEventListener("pointercancel",c)}),n.addEventListener("dblclick",()=>s(void 0,!0)),n.addEventListener("keydown",o=>{const l=o.key==="ArrowUp"?20:o.key==="ArrowDown"?-20:0;l&&(o.preventDefault(),s(a.getBoundingClientRect().height+l,!0))}),this.placePreview()}setPreviewOpen(e){this.previewOpen=e,Fe(xd,e?"1":"0"),e||this.preview.pause(),this.placePreview(),this.placeSimulationRobot(),this.canvasHost&&this.render()}placeSimulationRobot(){const e=this.visuBot,t=!!e&&this.simulating&&this.previewOpen;this.preview.hostSimulation(t?e.viewport:void 0),t||e==null||e.restoreViewport()}placePreview(){const e=this.previewStacked&&this.liveCoding;this.preview.setStacked(this.previewStacked),this.shell.classList.toggle("preview",this.previewOpen),this.shell.classList.toggle("preview-stacked",e),e?this.preview.element.parentElement!==this.live.element&&this.live.element.append(this.preview.element):this.preview.element.previousElementSibling!==this.previewResizer&&this.previewResizer.after(this.preview.element)}refreshPreview(){!this.previewOpen||!Rn()||this.preview.update(this.doc,e=>this.findSubprogram(e),_d(this.tab.exerciseId),this.tab.exerciseId??"",this.tabs.map(e=>e.doc))}setLiveCoding(e){e&&this.coding&&this.setCoding(!1),this.liveCoding=e,this.shell.classList.toggle("live",e),this.placePreview(),e||this.live.hideConsole(),Fe(fd,e?"1":"0"),this.keepAColumnOpen(),this.canvasHost&&this.render()}learnResizer(){return this.panelResizer(this.learn.element,"learn-resizer",pd,p("web_learn_resize"),1)}liveResizer(){return this.panelResizer(this.live.element,"live-resizer",SJ,p("web_live_resize"),-1,()=>this.root)}yieldingPanels(){return[{panel:this.preview.element,key:zd},{panel:this.learn.element,key:pd},{panel:this.files.element,key:gd}].filter(({panel:e})=>e.offsetParent!==null&&e.parentElement===this.live.element.parentElement)}panelResizer(e,t,n,a,s,r){const o=se("div",{class:t,role:"separator","aria-orientation":"vertical",tabindex:"0",title:a}),l=d=>{var x;const h=((x=e.parentElement)==null?void 0:x.getBoundingClientRect().width)??0;if(h===0)return PJ(d);const g=[this.files.element,this.learn.element,this.live.element,this.preview.element].filter(b=>b!==e&&b.offsetParent!==null&&getComputedStyle(b).flexGrow==="0").reduce((b,y)=>b+y.getBoundingClientRect().width,0),f=parseFloat(getComputedStyle(e).minWidth)||200;return Math.round(Math.max(f,Math.min(d,h-g-240)))},u=(d,h)=>{e.style.width=d===void 0?"":`${l(d)}px`,h&&Fe(n,d===void 0?"":String(l(d)))},m=Number($e(n));m>0&&u(m,!1);const c=()=>{const d=typeof s=="function"?s():s;return getComputedStyle(this.shell).direction==="rtl"?-d:d};return o.addEventListener("pointerdown",d=>{if(d.button!==0)return;d.preventDefault(),o.setPointerCapture(d.pointerId);const h=d.clientX,g=e.getBoundingClientRect().width,f=c();this.shell.classList.add("resizing");const x=r?this.pushResize(e,n,r(),g):void 0,b=(S,z)=>(x??u)(g+f*(S.clientX-h),z),y=S=>b(S,!1),w=S=>{o.removeEventListener("pointermove",y),o.removeEventListener("pointerup",w),o.removeEventListener("pointercancel",w),this.shell.classList.remove("resizing"),b(S,!0)};o.addEventListener("pointermove",y),o.addEventListener("pointerup",w),o.addEventListener("pointercancel",w)}),o.addEventListener("dblclick",()=>u(void 0,!0)),o.addEventListener("keydown",d=>{const h=d.key==="ArrowRight"?20:d.key==="ArrowLeft"?-20:0;h&&(d.preventDefault(),u(e.getBoundingClientRect().width+c()*h,!0))}),o}pushResize(e,t,n,a){const s=(m,c)=>Math.max(parseFloat(getComputedStyle(m).minWidth)||0,c),r=s(e,200),o=Math.max(0,n.getBoundingClientRect().width-s(n,240)),l=this.yieldingPanels().map(m=>({...m,start:m.panel.getBoundingClientRect().width,min:s(m.panel,200),changed:!1})),u=l.reduce((m,c)=>m+Math.max(0,c.start-c.min),0);return(m,c)=>{const d=Math.round(Math.max(r,Math.min(m,a+o+u)));let h=Math.max(0,d-a-o,r-m);for(const g of l){const f=Math.min(h,Math.max(0,g.start-g.min));h-=f,g.changed||(g.changed=f>0),g.changed&&(g.panel.style.width=`${Math.round(g.start-f)}px`,c&&Fe(g.key,String(Math.round(g.start-f))))}e.style.width=`${d}px`,c&&Fe(t,String(d))}}findSubprogram(e,t=this.tab){const n=to(e);if(n==="")return;const a=this.tabs.find(s=>s!==t&&(to(s.doc.caption)===n||to(on(s))===n));return a==null?void 0:a.doc}scrollToSimPath(){const e=this.simPath;if(!this.simulating||!e)return;const t=this.flat.find(o=>lo(o.idPath,e));if(!t)return;const n=this.canvasHost,a=this.zoom,s={x:t.frame.x*a,y:t.frame.y*a,width:t.frame.width*a,height:t.frame.height*a},r=24;s.yn.scrollTop+n.clientHeight&&(n.scrollTop=s.y-r),(s.xn.scrollLeft+n.clientWidth-r)&&(n.scrollLeft=Math.max(0,s.x-r))}commit(e,t){this.codeTyping=void 0,this.pushUndo(this.doc),this.doc=e,this.dirty=!0,t&&(this.selected=t),this.render()}commitFromCode(e,t){const n=Date.now(),a=this.codeTyping;!a||a.tab!==this.tab||n-a.last>1e3||n-a.start>5e3?(this.pushUndo(this.doc),this.codeTyping={tab:this.tab,start:n,last:n}):a.last=n,this.doc=e,this.dirty=!0,this.selected=or(t??this.selected,e),this.render()}pushUndo(e){for(this.undoStack.push(e);this.undoStack.length>OJ;)this.undoStack.shift();this.tab.redoStack=[]}undo(){const e=this.undoStack.pop();e&&(this.codeTyping=void 0,this.redoStack.push(this.doc),this.doc=e,this.dirty=!0,this.selected=or(this.selected,this.doc),this.render())}redo(){const e=this.redoStack.pop();e&&(this.codeTyping=void 0,this.undoStack.push(this.doc),this.doc=e,this.dirty=!0,this.selected=or(this.selected,this.doc),this.render())}resetHistory(){this.setSimulating(!1),this.tab.undoStack=[],this.tab.redoStack=[],this.selected=void 0,this.dirty=!1,this.render()}makeTab(){return{doc:s2(),serial:this.nextTabSerial++,dirty:!1,undoStack:[],redoStack:[],selected:[0]}}addTab(e=this.makeTab()){this.setSimulating(!1),this.tabs.push(e),this.tabIndex=this.tabs.length-1,this.render()}switchTab(e){e===this.tabIndex||!this.tabs[e]||(document.activeElement instanceof HTMLElement&&document.activeElement.blur(),this.setSimulating(!1),this.tabIndex=e,this.render())}async closeTab(e){if(this.tabs.length<=1)return;const t=this.tabs[e];t.dirty&&!t.exerciseId&&(this.switchTab(e),!await this.confirmDiscard())||(this.setSimulating(!1),this.tabs.splice(e,1),(this.tabIndex>e||this.tabIndex>=this.tabs.length)&&(this.tabIndex=Math.max(0,this.tabIndex-1)),this.render())}renderTabs(){const e=this.tabStrip;e.replaceChildren(),this.tabs.forEach((n,a)=>{const s=document.createElement("div");s.className="tab"+(a===this.tabIndex?" active":""),s.setAttribute("role","tab"),s.setAttribute("aria-selected",String(a===this.tabIndex));const r=document.createElement("button");r.className="tab-label",r.textContent=on(n),r.title=n.fileName??on(n),r.addEventListener("click",()=>this.switchTab(a)),s.append(r);const o=n.dirty&&!n.exerciseId;if(this.tabs.length>1){const l=document.createElement("button");l.className="tab-close"+(o?" unsaved":""),l.innerHTML='✕',l.title=p("a11y_close_tab"),l.setAttribute("aria-label",`${p("a11y_close_tab")}: ${on(n)}`),l.addEventListener("click",()=>this.closeTab(a)),s.append(l)}else o&&s.append(Object.assign(document.createElement("span"),{className:"tab-close unsaved",innerHTML:'●'}));o&&r.setAttribute("aria-label",`${on(n)} (${p("web_status_modified")})`),e.append(s)});const t=document.createElement("button");t.className="tab-add",t.textContent="+",t.title=p("a11y_new_diagram_tab"),t.setAttribute("aria-label",p("a11y_new_diagram_tab")),t.addEventListener("click",()=>this.addTab()),e.append(t)}copySelection(){const e=this.selected&&Nt(this.doc,this.selected);return e?(this.clipboard=structuredClone(e),this.showMessage(p("web_copied")),!0):!1}cutSelection(){this.selected&&rr(this.doc,this.selected)&&this.copySelection()&&this.deleteSelection()}paste(){this.clipboard&&this.insertNearSelection(structuredClone(this.clipboard))}deleteSelection(){!this.selected||!rr(this.doc,this.selected)||(this.commit(fi(this.doc,this.selected)),this.selected=void 0,this.render())}insertSensor(e,t=this.selected){if(!t||wn(this.doc,t))return;const n=At(this.doc,t);if(!sd.includes(n.type))return;const a=(n.textLines??[]).join(" ").trim();this.commit(Qi(this.doc,t,[a?`${a} ${e}`:e]),t);const s=this.inspector.querySelector("textarea");s&&(s.focus(),s.setSelectionRange(s.value.length,s.value.length))}insertNearSelection(e){const t=this.selected;if(t&&wn(this.doc,t))return this.commit(Pn(this.doc,t,e),t);if(t){const n=[...t.slice(0,-1),t[t.length-1]+1];return this.commit(io(this.doc,e,t),n)}if(this.doc.elements.length===1&&wn(this.doc,[0]))return this.commit(Pn(this.doc,[0],e),[0]);this.commit(ti(this.doc,[],this.doc.elements.length,e),[this.doc.elements.length])}confirmDiscard(){return this.dirty?new Promise(e=>{const t=document.createElement("div");t.className="confirm",t.innerHTML=`

${W(p("close_unsaved_title"))}

${W(p("web_discard_message_fmt",this.fileName))}

-
`,t.addEventListener("click",n=>{const a=n.target.dataset.r;a===void 0&&n.target!==t||(t.remove(),e(a==="1"))}),document.body.append(t),t.querySelector('[data-r="0"]').focus()}):Promise.resolve(!0)}showMessage(e){this.statusLine.textContent=e,this.statusLine.classList.add("message"),setTimeout(()=>{this.statusLine.classList.remove("message"),this.updateStatus()},6e3)}loadXML(e,t,n){let a;try{a=Bl(e)}catch(s){this.showMessage(p("web_err_unreadable_fmt",t,s.message));return}(this.dirty||this.tab.fileName||this.tab.exerciseId)&&this.addTab(),this.doc=a,this.tab.fileName=t.replace(/\.(strk|xml)$/i,".visustruct"),this.fileHandle=n&&/\.visustruct$/i.test(t)?n:void 0,this.resetHistory()}async open(e){const t=window;if(!t.showOpenFilePicker||this.inViewer)return e.click();try{const[n]=await t.showOpenFilePicker({types:sd()}),a=await n.getFile();this.loadXML(await a.text(),a.name,n)}catch{}}async save(){var n,a;if(!this.downloads&&await this.saveToWorkspace())return;const e=new Blob([o1(this.doc)],{type:"application/xml"}),t=window;try{if(this.downloads){const s=this.fileName+".txt";await this.downloads.save({filename:s,data:e}),(n=this.tab).fileName??(n.fileName=this.fileName),this.dirty=!1,this.render(),this.showMessage(p("web_saved_txt_fmt",s));return}if(!this.fileHandle&&t.showSaveFilePicker&&!this.inViewer&&(this.fileHandle=await t.showSaveFilePicker({suggestedName:this.fileName,types:sd()}),this.tab.fileName=this.fileHandle.name),this.fileHandle){const s=await this.fileHandle.createWritable();await s.write(e),await s.close()}else{const s=document.createElement("a");s.href=URL.createObjectURL(e),s.download=this.fileName,s.click(),setTimeout(()=>URL.revokeObjectURL(s.href),1e3)}(a=this.tab).fileName??(a.fileName=this.fileName),this.dirty=!1,this.render()}catch{}}async exportDiagram(e){if(e==="visustruct"){const s=Xc(this.doc,on(this.tab));return this.offerDownload(`${s}.visustruct`,new Blob([o1(this.doc)],{type:"application/xml"}))}const t=Kc(this.doc,this.metrics,this.measure);if(!t){this.showMessage(p(e==="print"?"err_diagram_too_small_print":"err_diagram_too_small_export"));return}const n=Xc(this.doc,on(this.tab)),a=Math.max(2,window.devicePixelRatio||1)*this.zoom;try{switch(e){case"svg":{t.svg.setAttribute("width",String(t.width*this.zoom)),t.svg.setAttribute("height",String(t.height*this.zoom)),await this.offerDownload(`${n}.svg`,new Blob([Rf(t)],{type:"image/svg+xml"}));break}case"png":{const s=await ed(t,a);await this.offerDownload(`${n}.png`,await rJ(s));break}case"pdf":{const s=await ed(t,Math.max(a,3)),r=await uJ(mJ(s),s.width,s.height,t,Jf(this.doc));await this.offerDownload(`${n}.pdf`,r);break}case"print":this.printDiagram(t);break}}catch(s){this.showMessage(p("web_export_failed_fmt",s instanceof Error?s.message:String(s)))}}printDiagram(e){const t=document.createElement("div");t.className="print-sheet",e.svg.removeAttribute("width"),e.svg.removeAttribute("height"),t.append(e.svg),document.body.append(t);const n=()=>t.remove();window.addEventListener("afterprint",n,{once:!0});try{window.print()}catch{n(),this.showMessage(`${p("err_print_unavailable")} ${p("web_print_hint")}`);return}setTimeout(n,6e4)}async offerDownload(e,t){try{if(this.downloads){try{await this.downloads.save({filename:e,data:t}),this.showMessage(p("web_saved_fmt",e))}catch{await this.downloads.save({filename:e+".txt",data:t}),this.showMessage(p("web_saved_txt_fmt",e+".txt"))}return}const n=document.createElement("a");n.href=URL.createObjectURL(t),n.download=e,n.click(),setTimeout(()=>URL.revokeObjectURL(n.href),1e3)}catch{this.showMessage(p("err_save_failed_fmt",e))}}setupFileDrop(){window.addEventListener("dragover",e=>{var t;(t=e.dataTransfer)!=null&&t.types.includes("Files")&&(e.preventDefault(),this.root.classList.add("file-drag"))}),window.addEventListener("dragleave",e=>{e.relatedTarget===null&&this.root.classList.remove("file-drag")}),window.addEventListener("drop",async e=>{var n;this.root.classList.remove("file-drag");const t=(n=e.dataTransfer)==null?void 0:n.files[0];t&&(e.preventDefault(),this.loadXML(await t.text(),t.name))})}onKeyDown(e){var a,s;const t=e.metaKey||e.ctrlKey,n=e.target instanceof HTMLTextAreaElement||e.target instanceof HTMLInputElement||((a=e.target)==null?void 0:a.isContentEditable)===!0;if(t&&e.key.toLowerCase()==="s")e.preventDefault(),this.save();else if(t&&e.key.toLowerCase()==="p")e.preventDefault(),this.simulating||this.exportDiagram("print");else if(t&&e.key.toLowerCase()==="o")e.preventDefault(),this.open(this.root.querySelector("input[type=file]"));else{if(n||this.simulating)return;t&&e.key.toLowerCase()==="z"?(e.preventDefault(),e.shiftKey?this.redo():this.undo()):t&&e.key.toLowerCase()==="c"&&!((s=getSelection())!=null&&s.toString())?this.copySelection()&&e.preventDefault():t&&e.key.toLowerCase()==="x"?(e.preventDefault(),this.cutSelection()):t&&e.key.toLowerCase()==="v"?(e.preventDefault(),this.paste()):t&&e.key.toLowerCase()==="y"?(e.preventDefault(),this.redo()):e.key==="Delete"||e.key==="Backspace"?(e.preventDefault(),this.deleteSelection()):e.key==="Escape"&&(this.drag?this.endDrag():(this.selected=void 0,this.render()))}}svgPoint(e,t){if(!this.svg)return;const n=this.svg.getBoundingClientRect(),a=e-n.left,s=t-n.top;if(!(a<0||s<0||a>n.width||s>n.height))return{x:a/this.zoom,y:s/this.zoom}}nodeAt(e,t){for(let n=this.flat.length-1;n>=0;n--){const a=this.flat[n].frame;if(e>=a.x&&e<=a.x+a.width&&t>=a.y&&t<=a.y+a.height)return this.flat[n]}}onCanvasPointerDown(e){if(this.simulating)return;const t=this.svgPoint(e.clientX,e.clientY);if(!t)return;document.activeElement instanceof HTMLElement&&document.activeElement.blur();const n=this.nodeAt(t.x,t.y),a=n&&this.selected&&lo(n.idPath,this.selected);this.selected=n==null?void 0:n.idPath,this.render(),n&&e.pointerType!=="touch"&&!(wn(this.doc,n.idPath)&&!a)&&this.beginDrag(e,{kind:"move",path:n.idPath})}beginDrag(e,t){e.button!==0||this.simulating||(e.preventDefault(),this.drag={source:t,pointerId:e.pointerId,startX:e.clientX,startY:e.clientY,active:!1})}onPointerMove(e){const t=this.drag;if(!t||e.pointerId!==t.pointerId)return;if(!t.active){if(Math.hypot(e.clientX-t.startX,e.clientY-t.startY)<5)return;t.active=!0,t.ghost=this.makeGhost(t.source),document.body.append(t.ghost),this.root.classList.add("dragging")}t.ghost.style.transform=`translate(${e.clientX+12}px, ${e.clientY+12}px)`,this.autoScroll(e.clientX,e.clientY);const n=this.svgPoint(e.clientX,e.clientY);t.target=n?this.dropTargetAt(n.x,n.y,t.source):void 0,this.showDropTarget(t.target)}onPointerUp(e){const t=this.drag;!t||e.pointerId!==t.pointerId||(t.active&&t.target?this.applyDrop(t.source,t.target):!t.active&&t.source.kind==="palette"?this.insertNearSelection(t.source.make()):!t.active&&t.source.kind==="sensor"&&this.insertSensor(t.source.text),this.endDrag())}endDrag(){var e,t;(t=(e=this.drag)==null?void 0:e.ghost)==null||t.remove(),this.drag=void 0,this.root.classList.remove("dragging"),this.showDropTarget(void 0)}makeGhost(e){const t=document.createElement("div");if(t.className="drag-ghost",e.kind==="palette"||e.kind==="sensor")t.textContent=e.label;else{const n=At(this.doc,e.path);t.textContent=`${Xr(n.type)}: ${Ol(n)[0]}`}return t}autoScroll(e,t){const n=this.canvasHost.getBoundingClientRect(),a=40,s=12;t>n.bottom-a&&tn.top-a&&(this.canvasHost.scrollTop-=s),e>n.right-a&&en.left-a&&(this.canvasHost.scrollLeft-=s)}dropTargetAt(e,t,n){var l;const a=((l=this.layout)==null?void 0:l.elements)??[],s=this.nodeAt(e,t);if(n.kind==="sensor")return!s||wn(this.doc,s.idPath)?void 0:ad.includes(At(this.doc,s.idPath).type)?{kind:"condition",path:s.idPath,frame:s.frame}:void 0;if(!s){const u=a[a.length-1];if(!u)return;const m=u.frame.y+u.frame.height;return t>m?n.kind==="move"&&n.path.length===1&&n.path[0]===a.length-1?void 0:{kind:"rootAppend",frame:{x:u.frame.x,y:m,width:u.frame.width,height:0}}:t=n.path.length&&n.path.every((u,m)=>r[m]===u)?void 0:wn(this.doc,r)?{kind:"replace",path:r,frame:s.frame}:{kind:t"]/g,e=>({"&":"&","<":"<",">":">",'"':"""})[e])}function Sd(i){if(!i)return[];for(const e of[...Ot.flatMap(t=>t.steps.flatMap(n=>n.blocks)),...Tn.flatMap(t=>t.blocks)])if(!(e.kind!=="exercise"||e.exercise.id!==i))return e.exercise.tests.flatMap(t=>{const n=t.world?Wa(t.world):void 0;return n?[n]:[]});return[]}let Et,Sl,_l;function _d(i){const e=i.dataset.tip;if(!e)return;Et??(Et=Object.assign(document.createElement("div"),{className:"tooltip",role:"tooltip"})),Et.isConnected||document.body.append(Et),Et.textContent=e,Et.hidden=!1;const t=i.getBoundingClientRect(),n=Et.offsetWidth,a=Et.offsetHeight,s=Math.min(Math.max(8,t.left+t.width/2-n/2),window.innerWidth-n-8),r=t.bottom+6+a{if(i.pointerType==="touch")return;const e=i.target.closest("[data-tip]");e!==_l&&(no(),e&&(_l=e,Sl=window.setTimeout(()=>_d(e),350)))}),document.addEventListener("focusin",i=>{const e=i.target.closest("[data-tip]");no(),e!=null&&e.matches(":focus-visible")&&_d(e)});for(const i of["pointerdown","focusout","scroll","keydown"])document.addEventListener(i,no,!0)}const Tl="visustruct.reloadedAfterError";function Qf(){try{const i=Number(sessionStorage.getItem(Tl));if(i&&Date.now()-i<3e4)return!1;sessionStorage.setItem(Tl,String(Date.now()))}catch{return!1}return location.reload(),!0}function CJ(i){console.error(i);const e=(navigator.language||"").toLowerCase().startsWith("de"),t=document.createElement("div");t.className="startup-error";const n=document.createElement("h1");n.textContent=e?"VisuStruct konnte nicht starten":"VisuStruct could not start";const a=document.createElement("p");a.textContent=e?"Wahrscheinlich gibt es gerade eine neue Version. Lade die Seite neu. Hilft das nicht, drücke Strg+Umschalt+R (Mac: ⌘⇧R).":"There is probably a new version. Reload the page. If that does not help, press Ctrl+Shift+R (Mac: ⌘⇧R).";const s=document.createElement("button");s.textContent=e?"Neu laden":"Reload",s.addEventListener("click",()=>location.reload());const r=document.createElement("pre");r.textContent=String(i instanceof Error?i.message:i),t.append(n,a,s,r),(document.getElementById("app")??document.body).replaceWith(t)}window.addEventListener("vite:preloadError",i=>{Qf()&&i.preventDefault()});const BJ=M2();Promise.all([qd(BJ,!1),Qd(D2(),!1)]).then(()=>{Vf(),jJ();const i=new URLSearchParams(location.search);i.has("visuobject")&&Kh();const e=document.getElementById("app");if(Xh()&&!i.has("visustruct")&&!i.has("visubot"))return q(async()=>{const{ObjectApp:t}=await import("./objectApp-C6ZS5O9z.js").then(n=>n.g);return{ObjectApp:t}},[],import.meta.url).then(({ObjectApp:t})=>new t(e));new OJ(e)}).then(()=>{try{sessionStorage.removeItem(Tl)}catch{}}).catch(i=>{/dynamically imported module|Importing a module script failed|error loading dynamically/i.test(String(i))&&Qf()||CJ(i)});export{Vn as C,DF as J,jx as L,q as _,vF as a,RF as b,Zf as c,EJ as d,br as e,sa as f,_J as g,HD as h,ne as i,GD as j,i1 as k,WJ as m,WF as p,am as r,$D as s,p as t,Po as w}; +
`,t.addEventListener("click",n=>{const a=n.target.dataset.r;a===void 0&&n.target!==t||(t.remove(),e(a==="1"))}),document.body.append(t),t.querySelector('[data-r="0"]').focus()}):Promise.resolve(!0)}showMessage(e){this.statusLine.textContent=e,this.statusLine.classList.add("message"),setTimeout(()=>{this.statusLine.classList.remove("message"),this.updateStatus()},6e3)}loadXML(e,t,n){let a;try{a=Bl(e)}catch(s){this.showMessage(p("web_err_unreadable_fmt",t,s.message));return}(this.dirty||this.tab.fileName||this.tab.exerciseId)&&this.addTab(),this.doc=a,this.tab.fileName=t.replace(/\.(strk|xml)$/i,".visustruct"),this.fileHandle=n&&/\.visustruct$/i.test(t)?n:void 0,this.resetHistory()}async open(e){const t=window;if(!t.showOpenFilePicker||this.inViewer)return e.click();try{const[n]=await t.showOpenFilePicker({types:rd()}),a=await n.getFile();this.loadXML(await a.text(),a.name,n)}catch{}}async save(){var n,a;if(!this.downloads&&await this.saveToWorkspace())return;const e=new Blob([o1(this.doc)],{type:"application/xml"}),t=window;try{if(this.downloads){const s=this.fileName+".txt";await this.downloads.save({filename:s,data:e}),(n=this.tab).fileName??(n.fileName=this.fileName),this.dirty=!1,this.render(),this.showMessage(p("web_saved_txt_fmt",s));return}if(!this.fileHandle&&t.showSaveFilePicker&&!this.inViewer&&(this.fileHandle=await t.showSaveFilePicker({suggestedName:this.fileName,types:rd()}),this.tab.fileName=this.fileHandle.name),this.fileHandle){const s=await this.fileHandle.createWritable();await s.write(e),await s.close()}else{const s=document.createElement("a");s.href=URL.createObjectURL(e),s.download=this.fileName,s.click(),setTimeout(()=>URL.revokeObjectURL(s.href),1e3)}(a=this.tab).fileName??(a.fileName=this.fileName),this.dirty=!1,this.render()}catch{}}async exportDiagram(e){if(e==="visustruct"){const s=Kc(this.doc,on(this.tab));return this.offerDownload(`${s}.visustruct`,new Blob([o1(this.doc)],{type:"application/xml"}))}const t=ed(this.doc,this.metrics,this.measure);if(!t){this.showMessage(p(e==="print"?"err_diagram_too_small_print":"err_diagram_too_small_export"));return}const n=Kc(this.doc,on(this.tab)),a=Math.max(2,window.devicePixelRatio||1)*this.zoom;try{switch(e){case"svg":{t.svg.setAttribute("width",String(t.width*this.zoom)),t.svg.setAttribute("height",String(t.height*this.zoom)),await this.offerDownload(`${n}.svg`,new Blob([Gf(t)],{type:"image/svg+xml"}));break}case"png":{const s=await td(t,a);await this.offerDownload(`${n}.png`,await oJ(s));break}case"pdf":{const s=await td(t,Math.max(a,3)),r=await mJ(cJ(s),s.width,s.height,t,Rf(this.doc));await this.offerDownload(`${n}.pdf`,r);break}case"print":this.printDiagram(t);break}}catch(s){this.showMessage(p("web_export_failed_fmt",s instanceof Error?s.message:String(s)))}}printDiagram(e){const t=document.createElement("div");t.className="print-sheet",e.svg.removeAttribute("width"),e.svg.removeAttribute("height"),t.append(e.svg),document.body.append(t);const n=()=>t.remove();window.addEventListener("afterprint",n,{once:!0});try{window.print()}catch{n(),this.showMessage(`${p("err_print_unavailable")} ${p("web_print_hint")}`);return}setTimeout(n,6e4)}async offerDownload(e,t){try{if(this.downloads){try{await this.downloads.save({filename:e,data:t}),this.showMessage(p("web_saved_fmt",e))}catch{await this.downloads.save({filename:e+".txt",data:t}),this.showMessage(p("web_saved_txt_fmt",e+".txt"))}return}const n=document.createElement("a");n.href=URL.createObjectURL(t),n.download=e,n.click(),setTimeout(()=>URL.revokeObjectURL(n.href),1e3)}catch{this.showMessage(p("err_save_failed_fmt",e))}}setupFileDrop(){window.addEventListener("dragover",e=>{var t;(t=e.dataTransfer)!=null&&t.types.includes("Files")&&(e.preventDefault(),this.root.classList.add("file-drag"))}),window.addEventListener("dragleave",e=>{e.relatedTarget===null&&this.root.classList.remove("file-drag")}),window.addEventListener("drop",async e=>{var n;this.root.classList.remove("file-drag");const t=(n=e.dataTransfer)==null?void 0:n.files[0];t&&(e.preventDefault(),this.loadXML(await t.text(),t.name))})}onKeyDown(e){var a,s;const t=e.metaKey||e.ctrlKey,n=e.target instanceof HTMLTextAreaElement||e.target instanceof HTMLInputElement||((a=e.target)==null?void 0:a.isContentEditable)===!0;if(t&&e.key.toLowerCase()==="s")e.preventDefault(),this.save();else if(t&&e.key.toLowerCase()==="p")e.preventDefault(),this.simulating||this.exportDiagram("print");else if(t&&e.key.toLowerCase()==="o")e.preventDefault(),this.open(this.root.querySelector("input[type=file]"));else{if(n||this.simulating)return;t&&e.key.toLowerCase()==="z"?(e.preventDefault(),e.shiftKey?this.redo():this.undo()):t&&e.key.toLowerCase()==="c"&&!((s=getSelection())!=null&&s.toString())?this.copySelection()&&e.preventDefault():t&&e.key.toLowerCase()==="x"?(e.preventDefault(),this.cutSelection()):t&&e.key.toLowerCase()==="v"?(e.preventDefault(),this.paste()):t&&e.key.toLowerCase()==="y"?(e.preventDefault(),this.redo()):e.key==="Delete"||e.key==="Backspace"?(e.preventDefault(),this.deleteSelection()):e.key==="Escape"&&(this.drag?this.endDrag():(this.selected=void 0,this.render()))}}svgPoint(e,t){if(!this.svg)return;const n=this.svg.getBoundingClientRect(),a=e-n.left,s=t-n.top;if(!(a<0||s<0||a>n.width||s>n.height))return{x:a/this.zoom,y:s/this.zoom}}nodeAt(e,t){for(let n=this.flat.length-1;n>=0;n--){const a=this.flat[n].frame;if(e>=a.x&&e<=a.x+a.width&&t>=a.y&&t<=a.y+a.height)return this.flat[n]}}onCanvasPointerDown(e){if(this.simulating)return;const t=this.svgPoint(e.clientX,e.clientY);if(!t)return;document.activeElement instanceof HTMLElement&&document.activeElement.blur();const n=this.nodeAt(t.x,t.y),a=n&&this.selected&&lo(n.idPath,this.selected);this.selected=n==null?void 0:n.idPath,this.render(),n&&e.pointerType!=="touch"&&!(wn(this.doc,n.idPath)&&!a)&&this.beginDrag(e,{kind:"move",path:n.idPath})}beginDrag(e,t){e.button!==0||this.simulating||(e.preventDefault(),this.drag={source:t,pointerId:e.pointerId,startX:e.clientX,startY:e.clientY,active:!1})}onPointerMove(e){const t=this.drag;if(!t||e.pointerId!==t.pointerId)return;if(!t.active){if(Math.hypot(e.clientX-t.startX,e.clientY-t.startY)<5)return;t.active=!0,t.ghost=this.makeGhost(t.source),document.body.append(t.ghost),this.root.classList.add("dragging")}t.ghost.style.transform=`translate(${e.clientX+12}px, ${e.clientY+12}px)`,this.autoScroll(e.clientX,e.clientY);const n=this.svgPoint(e.clientX,e.clientY);t.target=n?this.dropTargetAt(n.x,n.y,t.source):void 0,this.showDropTarget(t.target)}onPointerUp(e){const t=this.drag;!t||e.pointerId!==t.pointerId||(t.active&&t.target?this.applyDrop(t.source,t.target):!t.active&&t.source.kind==="palette"?this.insertNearSelection(t.source.make()):!t.active&&t.source.kind==="sensor"&&this.insertSensor(t.source.text),this.endDrag())}endDrag(){var e,t;(t=(e=this.drag)==null?void 0:e.ghost)==null||t.remove(),this.drag=void 0,this.root.classList.remove("dragging"),this.showDropTarget(void 0)}makeGhost(e){const t=document.createElement("div");if(t.className="drag-ghost",e.kind==="palette"||e.kind==="sensor")t.textContent=e.label;else{const n=At(this.doc,e.path);t.textContent=`${Xr(n.type)}: ${Ol(n)[0]}`}return t}autoScroll(e,t){const n=this.canvasHost.getBoundingClientRect(),a=40,s=12;t>n.bottom-a&&tn.top-a&&(this.canvasHost.scrollTop-=s),e>n.right-a&&en.left-a&&(this.canvasHost.scrollLeft-=s)}dropTargetAt(e,t,n){var l;const a=((l=this.layout)==null?void 0:l.elements)??[],s=this.nodeAt(e,t);if(n.kind==="sensor")return!s||wn(this.doc,s.idPath)?void 0:sd.includes(At(this.doc,s.idPath).type)?{kind:"condition",path:s.idPath,frame:s.frame}:void 0;if(!s){const u=a[a.length-1];if(!u)return;const m=u.frame.y+u.frame.height;return t>m?n.kind==="move"&&n.path.length===1&&n.path[0]===a.length-1?void 0:{kind:"rootAppend",frame:{x:u.frame.x,y:m,width:u.frame.width,height:0}}:t=n.path.length&&n.path.every((u,m)=>r[m]===u)?void 0:wn(this.doc,r)?{kind:"replace",path:r,frame:s.frame}:{kind:t"]/g,e=>({"&":"&","<":"<",">":">",'"':"""})[e])}function _d(i){if(!i)return[];for(const e of[...Ot.flatMap(t=>t.steps.flatMap(n=>n.blocks)),...Tn.flatMap(t=>t.blocks)])if(!(e.kind!=="exercise"||e.exercise.id!==i))return e.exercise.tests.flatMap(t=>{const n=t.world?Wa(t.world):void 0;return n?[n]:[]});return[]}let Et,Sl,_l;function Td(i){const e=i.dataset.tip;if(!e)return;Et??(Et=Object.assign(document.createElement("div"),{className:"tooltip",role:"tooltip"})),Et.isConnected||document.body.append(Et),Et.textContent=e,Et.hidden=!1;const t=i.getBoundingClientRect(),n=Et.offsetWidth,a=Et.offsetHeight,s=Math.min(Math.max(8,t.left+t.width/2-n/2),window.innerWidth-n-8),r=t.bottom+6+a{if(i.pointerType==="touch")return;const e=i.target.closest("[data-tip]");e!==_l&&(no(),e&&(_l=e,Sl=window.setTimeout(()=>Td(e),350)))}),document.addEventListener("focusin",i=>{const e=i.target.closest("[data-tip]");no(),e!=null&&e.matches(":focus-visible")&&Td(e)});for(const i of["pointerdown","focusout","scroll","keydown"])document.addEventListener(i,no,!0)}const Tl="visustruct.reloadedAfterError";function qf(){try{const i=Number(sessionStorage.getItem(Tl));if(i&&Date.now()-i<3e4)return!1;sessionStorage.setItem(Tl,String(Date.now()))}catch{return!1}return location.reload(),!0}function BJ(i){console.error(i);const e=(navigator.language||"").toLowerCase().startsWith("de"),t=document.createElement("div");t.className="startup-error";const n=document.createElement("h1");n.textContent=e?"VisuStruct konnte nicht starten":"VisuStruct could not start";const a=document.createElement("p");a.textContent=e?"Wahrscheinlich gibt es gerade eine neue Version. Lade die Seite neu. Hilft das nicht, drücke Strg+Umschalt+R (Mac: ⌘⇧R).":"There is probably a new version. Reload the page. If that does not help, press Ctrl+Shift+R (Mac: ⌘⇧R).";const s=document.createElement("button");s.textContent=e?"Neu laden":"Reload",s.addEventListener("click",()=>location.reload());const r=document.createElement("pre");r.textContent=String(i instanceof Error?i.message:i),t.append(n,a,s,r),(document.getElementById("app")??document.body).replaceWith(t)}window.addEventListener("vite:preloadError",i=>{qf()&&i.preventDefault()});const DJ=L2();Promise.all([Ud(DJ,!1),qd(Z2(),!1)]).then(()=>{Qf(),CJ();const i=new URLSearchParams(location.search);i.has("visuobject")&&eg();const e=document.getElementById("app");if(Kh()&&!i.has("visustruct")&&!i.has("visubot"))return q(async()=>{const{ObjectApp:t}=await import("./objectApp-CAsum0qy.js").then(n=>n.g);return{ObjectApp:t}},[],import.meta.url).then(({ObjectApp:t})=>new t(e));new AJ(e)}).then(()=>{try{sessionStorage.removeItem(Tl)}catch{}}).catch(i=>{/dynamically imported module|Importing a module script failed|error loading dynamically/i.test(String(i))&&qf()||BJ(i)});export{Vn as C,ZF as J,Cx as L,q as _,wF as a,GF as b,Mf as c,NJ as d,br as e,sa as f,TJ as g,VD as h,ne as i,HD as j,i1 as k,EJ as m,EF as p,am as r,YD as s,p as t,Po as w}; diff --git a/website/app/assets/objectApp-C6ZS5O9z.js b/website/app/assets/objectApp-CAsum0qy.js similarity index 99% rename from website/app/assets/objectApp-C6ZS5O9z.js rename to website/app/assets/objectApp-CAsum0qy.js index 108f612a..eb419c3d 100644 --- a/website/app/assets/objectApp-C6ZS5O9z.js +++ b/website/app/assets/objectApp-CAsum0qy.js @@ -1,5 +1,5 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./projectZip-vbJDEaKJ.js","./index-DpeMIv3e.js","./index-Bv5oUBU1.css"])))=>i.map(i=>d[i]); -var Ns=Object.defineProperty;var Os=(a,e,t)=>e in a?Ns(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var E=(a,e,t)=>Os(a,typeof e!="symbol"?e+"":e,t);import{t as d,i as ie,s as Ps,m as Is,g as Ds,w as Rs,J as Hs,c as Bs,a as Ws,b as Ye,p as zs,d as Vs,e as Us,_ as wt,f as $t,h as Js,r as _t,j as Ks,k as ct}from"./index-DpeMIv3e.js";function Xs(a){const e=[];let t=0;for(;ti.map(i=>d[i]); +var Ns=Object.defineProperty;var Os=(a,e,t)=>e in a?Ns(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var E=(a,e,t)=>Os(a,typeof e!="symbol"?e+"":e,t);import{t as d,i as ie,s as Ps,m as Is,g as Ds,w as Rs,J as Hs,c as Bs,a as Ws,b as Ye,p as zs,d as Vs,e as Us,_ as wt,f as $t,h as Js,r as _t,j as Ks,k as ct}from"./index-B50bSr2K.js";function Xs(a){const e=[];let t=0;for(;te.text===","?", ":e.text).join("")}function ms(a){const e=[[]];let t=0;for(const s of a)s.text==="<"||s.text==="("||s.text==="["||s.text==="{"?t++:(s.text===">"||s.text===")"||s.text==="]"||s.text==="}")&&t--,s.text===","&&t===0?e.push([]):e[e.length-1].push(s);return e.filter(s=>s.length>0)}function ft(a){var t,s;const e=[];for(let i=0;i{const t=ft(e).filter(i=>i.text!=="final"),s=t[t.length-1];return{name:s!=null&&s.word?s.text:"",type:lt(t.slice(0,-1))}})}function kt(a,e,t,s){var x,L;const i=ft(a),n=new Set;let o=0;for(;o"));const r=i.slice(o);if(r.length===0||a.length===0)return[];const c=a[0].from,l=r.findIndex(S=>S.text==="("),h=r.findIndex(S=>S.text==="="),u=l>0&&(h<0||lS.text==="="),y=_<0?g:g.slice(0,_);let w=y.length-1;for(;w>0&&!y[w].word;)w--;if(w<1)return[];const $=lt(y.slice(0,w)),p=m.length>1,v=[];return m.forEach((S,k)=>{var C;const j=S.findIndex(F=>F.text==="="),M=j<0?S:S.slice(0,j),A=k===0?y[w]:M.find(F=>F.word);if(!A)return;const R=M.filter(F=>F.from>A.from&&F.text==="[").length;v.push({kind:"field",name:A.text,type:$+"[]".repeat(R),params:[],visibility:xt(n,f),isStatic:n.has("static"),isAbstract:!1,from:c,to:s,headerFrom:c,headerTo:k===0?((C=M[M.length-1])==null?void 0:C.to)??A.to:A.to,shared:p,nameFrom:A.from,nameTo:A.to})}),v}function Gs(a,e,t){var n;let s=[],i=e;for(;ih.text==="="),c=ye(a,i,"{","}");if(r){s.push(...a.slice(i,c)),i=c;continue}const l=s.map(h=>h.text);l.includes("class")||l.includes("interface")||l.includes("enum")||s.length>0&&t.members.push(...kt(s,t.name,t.kind==="interface",((n=a[c-1])==null?void 0:n.to)??o.to)),s=[],i=c;continue}s.push(o),i++}return t.bodyEnd=a.length>0?a[a.length-1].to:0,i}function oe(a){var n,o,r,c;const e=Xs(a),t=[];let s=[],i=0;for(;iw.text==="class"||w.text==="interface"),f=u>=0?h[u+1]:void 0;if(!(f!=null&&f.word)){i=ye(e,i,"{","}"),s=[];continue}let m=u;for(;m>0&&(fs.has(h[m-1].text)||h[m-1].text==="@");)m--;const g={name:f.text,kind:h[u].text==="interface"?"interface":"class",isAbstract:h.slice(m,u).some(w=>w.text==="abstract"),interfaces:[],members:[],from:((n=s[s.indexOf(h[m])])==null?void 0:n.from)??h[m].from,to:0,headerFrom:((o=s[s.indexOf(h[m])])==null?void 0:o.from)??h[m].from,headerTo:h[h.length-1].to,nameFrom:f.from,nameTo:f.to,bodyEnd:0};let _=u+2;((r=h[_])==null?void 0:r.text)==="<"&&(_=ye(h,_,"<",">"));let y="";for(;_")-1:w.word&&y==="extends"&&g.kind==="class"?g.superclass??(g.superclass=w.text):w.word&&y&&g.interfaces.push(w.text)}i=Gs(e,i+1,g),g.to=((c=e[i-1])==null?void 0:c.to)??a.length,t.push(g),s=[]}return t}function Fe(a){const e=/^([\p{L}_$][\p{L}\p{N}_$]*)(\[\])+$/u.exec(a);if(e)return{name:e[1],many:!0};const t=/^(?:ArrayList|LinkedList|List|Set|HashSet|TreeSet|Collection|Queue|Deque|ArrayDeque|Stack|Vector)<([\p{L}_$][\p{L}\p{N}_$]*)>$/u.exec(a);return t?{name:t[1],many:!0}:{name:a,many:!1}}function Zs(a){const e=new Set(a.map(s=>s.name)),t=[];for(const s of a){s.superclass&&e.has(s.superclass)&&t.push({kind:"extends",from:s.name,to:s.superclass});for(const i of s.interfaces)e.has(i)&&t.push({kind:s.kind==="interface"?"extends":"implements",from:s.name,to:i});for(const i of s.members){if(i.kind!=="field")continue;const n=Fe(i.type);e.has(n.name)&&t.push({kind:"association",from:s.name,to:n.name,role:i.name,multiplicity:n.many?"0..*":"1"})}}return t}function Ge(a){const e=a.params.map(t=>`${t.name}: ${t.type}`).join(", ");return a.kind==="field"?`${a.visibility} ${a.name}: ${a.type}`:a.kind==="constructor"?`${a.visibility} ${a.name}(${e})`:`${a.visibility} ${a.name}(${e}): ${a.type}`}const Qs=/^[\p{L}_$][\p{L}\p{N}_$]*$/u;function Ve(a){var c;let e=a.trim().replace(/;$/,"").trim();if(!e)return;let t;/^[+\-#~]/.test(e)&&(t=e[0],e=e.slice(1).trim());let s=!1;const i=e.split(/\s+/);for(;["static","public","private","protected"].includes(i[0]);){const l=i.shift();l==="static"?s=!0:t??(t=l==="public"?"+":l==="private"?"-":"#")}e=i.join(" ");const n=e.indexOf("(");if(n>=0){const l=e.lastIndexOf(")");if(lg.trim()).filter(Boolean).map(g=>{const _=/^([\p{L}_$][\p{L}\p{N}_$]*)\s*:\s*(.+)$/u.exec(g);if(_)return{name:_[1],type:_[2].replace(/\s+/g,"")};const y=/^(.+)\s+([\p{L}_$][\p{L}\p{N}_$]*)$/u.exec(g);return y?{name:y[2],type:y[1].replace(/\s+/g,"")}:{name:g,type:"int"}});return{kind:"method",visibility:t,name:h,type:u==null?void 0:u.replace(/\s+/g,""),params:m,isStatic:s}}const o=/^([\p{L}_$][\p{L}\p{N}_$]*)\s*(?::\s*(.+))?$/u.exec(e);if(o)return{kind:"field",visibility:t,name:o[1],type:(c=o[2])==null?void 0:c.replace(/\s+/g,""),params:[],isStatic:s};const r=/^(.+?)\s+([\p{L}_$][\p{L}\p{N}_$]*)$/u.exec(e);if(r)return{kind:"field",visibility:t,name:r[2],type:r[1].replace(/\s+/g,""),params:[],isStatic:s}}const ei={"+":"public ","-":"private ","#":"protected ","~":""};function ti(a){return/^(int|long|short|byte)$/.test(a)?"0":/^(double|float)$/.test(a)?"0.0":a==="boolean"?"false":a==="char"?"' '":"null"}function bs(a,e,t){const s=e.kind==="interface",i=s?"":ei[a.visibility??(a.kind==="field"?"-":"+")],n=a.isStatic?"static ":"";if(a.kind==="field")return`${i}${n}${a.type??"int"} ${a.name}`;const o=a.params.map(r=>`${r.type} ${r.name}`).join(", ");return a.name===e.name?`${i}${a.name}(${o})`:`${i}${n}${t&&!s?"abstract ":""}${a.type??"void"} ${a.name}(${o})`}const Ue=(a,e)=>a.lastIndexOf(` `,e-1)+1;function mt(a,e,t){const s=Ue(a,e),i=a.slice(s,e);let n=t;for(;n
- ${b(d("web_about_version_fmt").replace("%@","0.13.3"))} + ${b(d("web_about_version_fmt").replace("%@","0.13.5"))}
@@ -315,7 +315,7 @@ public String toString() { `,"in"),this.consolePane().input.hidden=!0,t.vm.input(e),this.debugRun())}debugError(e){var o;const t=e.pos?String(e.pos.line+1):"",s=((o=e.pos)==null?void 0:o.file.split("/").pop())??"",i=e.detail.replace(/^expected:/,""),n={syntax:"web_visuobject_dbg_err_syntax",symbol:"web_visuobject_dbg_err_symbol",unsupported:"web_visuobject_dbg_err_unsupported",nomain:"web_visuobject_no_main",type:"web_visuobject_dbg_err_type",import:"web_visuobject_dbg_err_import",typename:"web_visuobject_dbg_err_typename"}[e.code];e.pos&&this.showLine(e.pos.file,e.pos.line),this.stopDebug(),this.debugStatus(d(n,s,t,i),!0)}showDebugButtons(){const e=this.dbg,t=(e==null?void 0:e.state)==="paused";for(const s of this.shell.querySelectorAll("[data-dbg]"))s.disabled=!e||(s.dataset.dbg==="pause"?e.state!=="running":!t)}showLine(e,t){this.project.files.some(s=>s.path===e)&&e!==this.active&&this.openFile(e),this.editor.setMarks({placeholders:[],problems:[],current:t},!0)}showDebugState(){const e=this.dbg;if(!e)return;e.frames=e.vm.stack();const t=e.vm.heap(),s=e.frames[e.frame];s&&this.showLine(s.pos.file,s.pos.line);const i=e.values.size===0&&e.vars.size===0,n=new Set,o=new Map;for(const h of t)for(const u of h.fields){const f=`dbg${h.id}.${u.name}`;o.set(f,u.value),!i&&e.values.get(f)!==u.value&&n.add(f)}e.values=o;const r=new Set,c=new Map;e.frames.forEach((h,u)=>{for(const f of h.vars){const m=`${e.frames.length-u}|${h.title}|${f.name}`;c.set(m,f.value),!i&&e.vars.get(m)!==f.value&&r.add(`${h.title}|${f.name}`)}}),e.vars=c;const l={objects:this.liveObjects(t),changed:n,frames:e.frames,frame:e.frame,changedVars:r,onFrame:h=>{e.frame=h,l.frame=h;const u=e.frames[h];u&&this.showLine(u.pos.file,u.pos.line),this.objectDiagram.renderInspector()},move:(h,u)=>e.places.set(h,u)};this.objectDiagram.live=l,this.sequence=e.vm.sequence(),this.diagramMode==="object"&&this.objectDiagram.render(),this.diagramMode==="sequence"&&this.renderSequence()}renderSequence(){var n,o,r;const e=this.shell.querySelector(".vo-seqcanvas"),t=e.querySelector(".vo-seq"),s=e.querySelector(".vo-empty"),i=this.sequence;if(s.hidden=!!i&&i.events.length>0,s.textContent=d(i?"web_visuobject_seq_no_calls":"web_visuobject_seq_empty"),!i||!i.events.length)t.innerHTML="",t.setAttribute("width","0");else{const c=((n=this.dbg)==null?void 0:n.state)==="paused"||((o=this.dbg)==null?void 0:o.state)==="input",{svg:l,width:h,height:u}=Ci(i,c?i.events.length-1:void 0);t.innerHTML=l+(i.truncated?`${b(d("web_visuobject_seq_truncated"))}`:""),t.setAttribute("width",String(h)),t.setAttribute("height",String(u)),c&&((r=t.querySelector(".vo-seq-msg.current"))==null||r.scrollIntoView({block:"nearest",inline:"nearest"}))}this.renderSequenceInspector()}renderSequenceInspector(){if(this.objectDiagram.live)return this.objectDiagram.renderInspector();this.inspector.innerHTML=`

${b(d("web_visuobject_seq_hint"))}

`}liveObjects(e){const t=this.dbg,s=this.project.objects??[],i=c=>40+c.fields.length*20,n=[],o=[],r=[];for(const c of e){const l=`dbg${c.id}`,h=t.places.get(l)??s.find(u=>u.name===c.name&&u.cls===c.cls);if(!h){r.push(c);continue}t.places.set(l,{x:h.x,y:h.y}),n.push({x:h.x,y:h.y,w:260,h:i(c)})}for(const c of r){const l=i(c);let h={x:24,y:24};e:for(let u=24;u<6e3;u+=30)for(let f=24;f<=24+3*320;f+=320)if(n.every(m=>f+260+30<=m.x||m.x+m.w+30<=f||u+l+30<=m.y||m.y+m.h+30<=u)){h={x:f,y:u};break e}t.places.set(`dbg${c.id}`,h),n.push({...h,w:260,h:l})}for(const c of e){const l=`dbg${c.id}`;o.push({id:l,name:c.name,cls:c.cls,...t.places.get(l),values:Object.fromEntries(c.fields.map(h=>[h.name,h.value]))})}return o}stopDebug(e,t=!1){const s=this.dbg;s&&clearTimeout(s.timer),this.dbg=void 0,s&&(this.sequence=s.vm.sequence()),this.objectDiagram.live=void 0,this.consolePane().input.hidden=!0,this.shell.querySelector(".vo-dbg-controls").hidden=!0,this.shell.querySelector("[data-action=stop]").disabled=!0,this.shell.querySelector("[data-action=run]").disabled=!1,t||this.editor.setMarks({placeholders:[],problems:[]},!1),e&&this.debugStatus(d(e),t),this.diagramMode==="object"&&this.objectDiagram.render(),this.diagramMode==="sequence"&&this.renderSequence()}chooseWorld(e){e!=="object"&&(Us(e),location.href=`${location.pathname}?${e==="on"?"visubot":"visustruct"}${location.hash}`)}get activeFile(){return this.project.files.find(e=>e.path===this.active)}showActive(){const e=this.activeFile;this.editor.setText((e==null?void 0:e.text)??""),this.editor.setBreakpoints(e?this.breakpoints.get(e.path)??[]:[]),this.editor.setReadOnly(!e),e&&!this.openTabs.includes(e.path)&&this.openTabs.push(e.path),this.renderTabs(),J(ot,this.active??"")}renderTabs(){if(this.openTabs=this.openTabs.filter(e=>this.project.files.some(t=>t.path===e)),J(cs,JSON.stringify(this.openTabs)),this.openTabs.length===0){this.tabs.innerHTML=`${b(d("web_visuobject_no_file"))}`;return}this.tabs.innerHTML=this.openTabs.map(e=>{const t=e===this.active,s=this.isDirty(e);return`
-
`}).join("")}onTabClick(e){var i;const t=e.target,s=(i=t.closest("[data-tab]"))==null?void 0:i.dataset.tab;if(s){if(t.closest("[data-close]"))return this.closeTab(s);this.treeSelection=`file:${s}`,this.openFile(s)}}closeTab(e){const t=this.openTabs.indexOf(e);t<0||(this.openTabs.splice(t,1),e===this.active?(this.active=this.openTabs[Math.min(t,this.openTabs.length-1)],this.lastTyping=0,this.showActive(),this.refresh()):this.renderTabs())}snapshot(){return JSON.stringify({project:this.project,active:this.active})}remember(){this.history.push(this.snapshot()),this.history.length>xn&&this.history.shift(),this.future=[]}setProject(e,t=this.active){var s;this.remember(),this.lastTyping=0,this.project=e,this.active=e.files.some(i=>i.path===t)?t:(s=e.files[0])==null?void 0:s.path,this.showActive(),this.refresh()}openFile(e){if(e===this.active)return;this.active=e,this.lastTyping=0,this.showActive();const t=D(e);this.currentPackage=t,this.open.set(`pkg:${t}`,!0),this.refresh()}typed(){const e=this.activeFile;if(!e)return;const t=Date.now();t-this.lastTyping>1500&&this.remember(),this.lastTyping=t,this.project=$e(this.project,e.path,this.editor.text),this.saveBreakpoints(),this.dbg&&this.stopDebug("web_visuobject_dbg_code_changed"),this.refresh(),clearTimeout(this.renameTimer),this.renameTimer=window.setTimeout(()=>this.syncFileName(),700)}syncFileName(){var c;const e=this.activeFile;if(!e||this.editing)return;const t=Q(e.path).replace(/\.java$/i,""),s=this.classes.filter(l=>l.path===e.path);if(s.length===0||s.some(l=>l.name===t))return;const i=((c=/\bpublic\s+(?:abstract\s+|final\s+)*(?:class|interface|enum)\s+(\w+)/.exec(e.text))==null?void 0:c[1])??s[0].name;if(!pe.test(i)||s.filter(l=>l.name===i).length!==1)return;const n=le(D(e.path),`${i}.java`);if(this.project.files.some(l=>l.path===n))return;let o=Oe(this.project,e.path,n);const r=this.positions.get(t);r&&!this.positions.has(i)&&this.positions.set(i,r);for(const l of Object.keys(o.uml??{}))l.startsWith(`${t}.`)&&(o={...o,uml:ke(o.uml,l,i+l.slice(t.length))});this.openTabs=this.openTabs.map(l=>l===e.path?n:l),this.treeSelection===`file:${e.path}`&&(this.treeSelection=`file:${n}`),this.isOpen(`file:${e.path}`)&&this.open.set(`file:${n}`,!0),this.project=o,this.active=n,J(ot,n),this.savePositions(),this.refresh()}undo(e){const t=e?this.future:this.history,s=e?this.history:this.future,i=t.pop();if(i===void 0)return;s.push(this.snapshot());const n=JSON.parse(i);this.project=n.project,this.active=n.active,this.lastTyping=0,this.showActive(),this.refresh()}refresh(){J(os,Pe(this.project)),this.renderTabs(),this.classes=Ct(this.project),this.selection&&!this.findClass(this.selection.cls)&&(this.selection=void 0),this.relSelection&&!this.findRelation(this.relSelection)&&!this.findDependency(this.relSelection)&&(this.relSelection=void 0),this.editing||(this.render(),this.renderTree())}ownTypesAt(e){const t=this.activeFile;if(!t)return;const s=this.editor.view.state.doc.toString(),i=X(D(t.path)),n=oe(s).map(l=>({...l,pkg:i})),o=new Set(n.map(l=>l.name)),r=n.find(l=>l.headerFrom<=e&&e<=l.bodyEnd),c=ct()==="de"?"de":ct()==="pt-PT"?"pt":"en";return Ui([...n,...this.classes.filter(l=>l.path!==t.path&&!o.has(l.name))],{cls:r==null?void 0:r.name,pkg:i},c)}findClass(e){return this.classes.find(t=>t.name===e)}caretMoved(){var n,o;const e=this.editor.caret,t=this.classes.find(r=>r.path===this.active&&e>=r.from&&e<=r.to),s=t==null?void 0:t.members.findIndex(r=>e>=r.from&&e<=r.to),i=t?{cls:t.name,member:s!==void 0&&s>=0?s:void 0}:void 0;(i==null?void 0:i.cls)===((n=this.selection)==null?void 0:n.cls)&&(i==null?void 0:i.member)===((o=this.selection)==null?void 0:o.member)||(this.selection=i,this.editing||(this.render(),this.renderTree()))}showInCode(e,t){e.path!==this.active&&(this.active=e.path,this.lastTyping=0,this.showActive());const s=this.editor.view,[i,n]=t?[t.headerFrom,t.headerTo]:[e.nameFrom,e.nameTo],o=Math.min(n,s.state.doc.length);s.dispatch({selection:{anchor:Math.min(i,o),head:o},scrollIntoView:!0})}message(e,t=!1){this.status.textContent=e,this.status.classList.toggle("hint",t)}openFiles(){const e=document.createElement("input");e.type="file",e.multiple=!0,e.accept=".zip,.java,.visuobject,application/zip,text/plain",e.addEventListener("change",()=>void this.readFiles([...e.files??[]])),e.click()}async readFiles(e){var t;if(e.length!==0)try{const s=e.find(r=>/\.zip$/i.test(r.name));if(s){const{projectFromZip:r}=await wt(async()=>{const{projectFromZip:l}=await import("./projectZip-vbJDEaKJ.js");return{projectFromZip:l}},__vite__mapDeps([0,1,2]),import.meta.url),c=r(new Uint8Array(await s.arrayBuffer()),s.name.replace(/\.zip$/i,""));await this.newProject(c);return}const i=e.find(r=>/\.visuobject$/i.test(r.name));if(i){const r=qt(await i.text());if(!r)throw new Error("format");await this.newProject(r);return}const n=At(this.project.name,await Promise.all(e.map(async r=>({name:r.name,text:await r.text()}))));let o=this.project;for(const r of n.files)o=et(o,r.path,r.text);this.setProject(o,(t=n.files[0])==null?void 0:t.path)}catch{this.message(d("web_visuobject_open_failed"))}}async save(){this.workspace?await this.writeCurrent():await this.downloadZip()}async downloadZip(){const{projectToZip:e}=await wt(async()=>{const{projectToZip:s}=await import("./projectZip-vbJDEaKJ.js");return{projectToZip:s}},__vite__mapDeps([0,1,2]),import.meta.url),t=e(this.project);jn(`${this.project.name||"Projekt"}.zip`,t.slice().buffer,"application/zip")}isDirty(e){var t;return!this.workspace||this.saved===void 0?!1:e===void 0?this.saved!==Pe(this.project):this.savedFiles.get(e)!==((t=this.project.files.find(s=>s.path===e))==null?void 0:t.text)}markSaved(){this.saved=Pe(this.project),this.savedFiles=new Map(this.project.files.map(e=>[e.path,e.text]))}async restoreWorkspace(){if(!$t())return;const e=await Js(us);if(e!=null&&e.ready){const t=await _t(e.handle);if(t)return this.useWorkspace(t.root,!0)}this.pendingFolder=e==null?void 0:e.handle,this.renderWorkspace()}async useWorkspace(e,t=!1){var s;this.workspace=e,this.pendingFolder=void 0,J(rt,"0");try{this.projects=await is(e);const i=se(We),n=this.project;if(t&&i&&this.projects.includes(i)){const o={active:this.active,tabs:[...this.openTabs],positions:new Map(this.positions)};await this.loadProject(i),this.positions=o.positions,this.savePositions(),Pe(n)!==this.saved&&(this.project=n),this.openTabs=o.tabs.filter(r=>this.project.files.some(c=>c.path===r)),this.active=this.project.files.some(r=>r.path===o.active)?o.active:(s=this.project.files[0])==null?void 0:s.path,this.showActive(),this.refresh()}else!this.projects.some(o=>o.toLowerCase()===ge(n.name).toLowerCase())&&n.files.length?(this.folder=ge(n.name),await this.writeCurrent(!1)):this.projects.length?await this.loadProject(this.projects.includes(i??"")?i:this.projects[0]):(this.folder=ge(n.name),await this.writeCurrent(!1))}catch(i){this.message(d("web_visuobject_ws_failed",String((i==null?void 0:i.message)??i)))}this.renderWorkspace(),this.refresh()}async loadProject(e){var i;const{project:t,positions:s}=await gn(this.workspace,e);this.folder=e,this.project=t,this.markSaved(),this.message(""),this.history=[],this.future=[],this.lastTyping=0,this.selection=void 0,this.relSelection=void 0,this.treeSelection=void 0,this.currentPackage=void 0,this.positions=new Map(Object.entries(s)),this.savePositions(),this.openTabs=[],this.active=(i=t.files[0])==null?void 0:i.path,J(We,e),this.showActive(),this.refresh()}async writeCurrent(e=!0){const t=this.workspace;if(!t)return!1;const s=ge(this.project.name),i=this.folder,n=new Set(this.classes.map(r=>r.name)),o=Object.fromEntries([...this.positions].filter(([r])=>n.has(r)));if(s!==i&&this.projects.some(r=>r!==i&&r.toLowerCase()===s.toLowerCase()))return this.message(d("web_visuobject_ws_taken",this.project.name)),!1;try{return await $n(t,s,this.project,o),i&&i!==s&&this.projects.includes(i)&&await t.remove(i),this.folder=s,this.projects=await is(t),J(We,s),this.markSaved(),e&&this.message(d("web_visuobject_ws_saved",t.name,s),!0),this.refresh(),!0}catch(r){return this.message(d("web_visuobject_ws_failed",String((r==null?void 0:r.message)??r))),!1}}async switchProject(e){if(!(!this.workspace||e===this.folder)&&!(this.isDirty()&&!await this.writeCurrent(!1)))try{await this.loadProject(e)}catch(t){this.message(d("web_visuobject_ws_failed",String((t==null?void 0:t.message)??t)))}}async newProject(e,t,s=!1){var n,o;if(!this.workspace){this.setProject(e,t??((n=e.files[0])==null?void 0:n.path)),e.files.length===0&&!s&&this.editProjectName();return}if(this.isDirty()&&!await this.writeCurrent(!1))return;const i=ns(ge(e.name),this.projects);this.project={...e,name:i},this.folder=i,this.history=[],this.future=[],this.openTabs=[],this.positions.clear(),this.savePositions(),this.active=e.files.some(r=>r.path===t)?t:(o=e.files[0])==null?void 0:o.path,this.showActive(),this.refresh(),await this.writeCurrent(!1)&&(this.message(d("web_visuobject_ws_created",i),!0),e.files.length===0&&!s&&this.editProjectName())}get currentPlace(){const e=this.currentPackage??(this.active?D(this.active):ce(this.project)[0]??"");return{root:U(e),pkg:X(e)}}async newFromWizard(e){var u;const t=this.currentPlace,s=(f,m)=>{let g=f;for(let _=2;m(g);_++)g=f+_;return g},i=await nn(e,{roots:ue(this.project),packagesIn:f=>ce(this.project,f).map(X),classes:this.classes,root:t.root,pkg:t.pkg,suggest:f=>f==="project"?ns(d("web_visuobject_project_name"),this.workspace?[...this.projects,this.folder??""]:[]):f==="folder"?s("test",m=>ue(this.project).includes(m)):f==="package"?s(d("web_visuobject_new_package_name"),m=>ce(this.project).includes(re(t.root,m))):this.uniqueClassName(d(f==="class"?"web_visuobject_new_class_name":"web_visuobject_new_interface_name")),check:(f,m,g,_)=>{if(!m)return d("web_visuobject_new_name_missing");if(f==="project")return this.workspace&&this.projects.some(y=>y!==this.folder&&y.toLowerCase()===ge(m).toLowerCase())?d("web_visuobject_ws_taken",m):void 0;if(f==="folder")return!Je(m)||ue(this.project).includes(m)?d("web_visuobject_bad_folder",m):void 0;if(f==="package")return!Mt(m)||ce(this.project).includes(re(g,m))?d("web_visuobject_bad_package",m):void 0;if(!pe.test(m))return d("web_visuobject_bad_name",m);if(this.findClass(m)||this.project.files.some(y=>y.path===le(re(g,_),`${m}.java`)))return d("web_visuobject_new_exists",m);if(m.charAt(0)!==m.charAt(0).toUpperCase())return d("web_visuobject_new_upper")}});if(!i)return;const{name:n,root:o,pkg:r}=i;if(e==="project")return this.newProject({name:n,files:[],packages:[]},void 0,!0);if(this.message(""),e==="folder")return this.currentPackage=re(n,""),this.treeSelection=`root:${n}`,this.open.set(`root:${n}`,!0),this.setProject(mi(this.project,n));if(e==="package"){const f=re(o,n);return this.currentPackage=f,this.treeSelection=`pkg:${f}`,this.open.set(`root:${o}`,!0),this.setProject(pi(this.project,f))}const c=re(o,r),l=le(c,`${n}.java`);this.currentPackage=c,this.selection={cls:n},this.open.set(`root:${o}`,!0),this.open.set(`pkg:${c}`,!0),this.setProject(et(this.project,l,this.sectioned(tn(i.options),n)),l);const h=this.findClass(n);h&&this.showInCode(h),(u=this.canvas.querySelector(`.uml-class[data-class="${CSS.escape(n)}"]`))==null||u.scrollIntoView({block:"nearest",inline:"nearest"})}editProjectName(){this.treeSelection="project",this.renderTree(),this.startEditing(this.tree.querySelector('[data-node="project"] > .vo-row .vo-label'))}renderWorkspace(){const e=this.wsBox;e.hidden=!$t();const t=this.shell.querySelector("[data-action=save]");if(t.dataset.tip=d(this.workspace?"web_visuobject_save_ws_tip":"web_visuobject_save_tip"),e.hidden)return;const s=(i,n,o="text-button",r)=>``;this.workspace?(e.className="vo-ws",e.innerHTML=`${b(this.workspace.name)} + `}).join("")}onTabClick(e){var i;const t=e.target,s=(i=t.closest("[data-tab]"))==null?void 0:i.dataset.tab;if(s){if(t.closest("[data-close]"))return this.closeTab(s);this.treeSelection=`file:${s}`,this.openFile(s)}}closeTab(e){const t=this.openTabs.indexOf(e);t<0||(this.openTabs.splice(t,1),e===this.active?(this.active=this.openTabs[Math.min(t,this.openTabs.length-1)],this.lastTyping=0,this.showActive(),this.refresh()):this.renderTabs())}snapshot(){return JSON.stringify({project:this.project,active:this.active})}remember(){this.history.push(this.snapshot()),this.history.length>xn&&this.history.shift(),this.future=[]}setProject(e,t=this.active){var s;this.remember(),this.lastTyping=0,this.project=e,this.active=e.files.some(i=>i.path===t)?t:(s=e.files[0])==null?void 0:s.path,this.showActive(),this.refresh()}openFile(e){if(e===this.active)return;this.active=e,this.lastTyping=0,this.showActive();const t=D(e);this.currentPackage=t,this.open.set(`pkg:${t}`,!0),this.refresh()}typed(){const e=this.activeFile;if(!e)return;const t=Date.now();t-this.lastTyping>1500&&this.remember(),this.lastTyping=t,this.project=$e(this.project,e.path,this.editor.text),this.saveBreakpoints(),this.dbg&&this.stopDebug("web_visuobject_dbg_code_changed"),this.refresh(),clearTimeout(this.renameTimer),this.renameTimer=window.setTimeout(()=>this.syncFileName(),700)}syncFileName(){var c;const e=this.activeFile;if(!e||this.editing)return;const t=Q(e.path).replace(/\.java$/i,""),s=this.classes.filter(l=>l.path===e.path);if(s.length===0||s.some(l=>l.name===t))return;const i=((c=/\bpublic\s+(?:abstract\s+|final\s+)*(?:class|interface|enum)\s+(\w+)/.exec(e.text))==null?void 0:c[1])??s[0].name;if(!pe.test(i)||s.filter(l=>l.name===i).length!==1)return;const n=le(D(e.path),`${i}.java`);if(this.project.files.some(l=>l.path===n))return;let o=Oe(this.project,e.path,n);const r=this.positions.get(t);r&&!this.positions.has(i)&&this.positions.set(i,r);for(const l of Object.keys(o.uml??{}))l.startsWith(`${t}.`)&&(o={...o,uml:ke(o.uml,l,i+l.slice(t.length))});this.openTabs=this.openTabs.map(l=>l===e.path?n:l),this.treeSelection===`file:${e.path}`&&(this.treeSelection=`file:${n}`),this.isOpen(`file:${e.path}`)&&this.open.set(`file:${n}`,!0),this.project=o,this.active=n,J(ot,n),this.savePositions(),this.refresh()}undo(e){const t=e?this.future:this.history,s=e?this.history:this.future,i=t.pop();if(i===void 0)return;s.push(this.snapshot());const n=JSON.parse(i);this.project=n.project,this.active=n.active,this.lastTyping=0,this.showActive(),this.refresh()}refresh(){J(os,Pe(this.project)),this.renderTabs(),this.classes=Ct(this.project),this.selection&&!this.findClass(this.selection.cls)&&(this.selection=void 0),this.relSelection&&!this.findRelation(this.relSelection)&&!this.findDependency(this.relSelection)&&(this.relSelection=void 0),this.editing||(this.render(),this.renderTree())}ownTypesAt(e){const t=this.activeFile;if(!t)return;const s=this.editor.view.state.doc.toString(),i=X(D(t.path)),n=oe(s).map(l=>({...l,pkg:i})),o=new Set(n.map(l=>l.name)),r=n.find(l=>l.headerFrom<=e&&e<=l.bodyEnd),c=ct()==="de"?"de":ct()==="pt-PT"?"pt":"en";return Ui([...n,...this.classes.filter(l=>l.path!==t.path&&!o.has(l.name))],{cls:r==null?void 0:r.name,pkg:i},c)}findClass(e){return this.classes.find(t=>t.name===e)}caretMoved(){var n,o;const e=this.editor.caret,t=this.classes.find(r=>r.path===this.active&&e>=r.from&&e<=r.to),s=t==null?void 0:t.members.findIndex(r=>e>=r.from&&e<=r.to),i=t?{cls:t.name,member:s!==void 0&&s>=0?s:void 0}:void 0;(i==null?void 0:i.cls)===((n=this.selection)==null?void 0:n.cls)&&(i==null?void 0:i.member)===((o=this.selection)==null?void 0:o.member)||(this.selection=i,this.editing||(this.render(),this.renderTree()))}showInCode(e,t){e.path!==this.active&&(this.active=e.path,this.lastTyping=0,this.showActive());const s=this.editor.view,[i,n]=t?[t.headerFrom,t.headerTo]:[e.nameFrom,e.nameTo],o=Math.min(n,s.state.doc.length);s.dispatch({selection:{anchor:Math.min(i,o),head:o},scrollIntoView:!0})}message(e,t=!1){this.status.textContent=e,this.status.classList.toggle("hint",t)}openFiles(){const e=document.createElement("input");e.type="file",e.multiple=!0,e.accept=".zip,.java,.visuobject,application/zip,text/plain",e.addEventListener("change",()=>void this.readFiles([...e.files??[]])),e.click()}async readFiles(e){var t;if(e.length!==0)try{const s=e.find(r=>/\.zip$/i.test(r.name));if(s){const{projectFromZip:r}=await wt(async()=>{const{projectFromZip:l}=await import("./projectZip-CGO1ec3D.js");return{projectFromZip:l}},__vite__mapDeps([0,1,2]),import.meta.url),c=r(new Uint8Array(await s.arrayBuffer()),s.name.replace(/\.zip$/i,""));await this.newProject(c);return}const i=e.find(r=>/\.visuobject$/i.test(r.name));if(i){const r=qt(await i.text());if(!r)throw new Error("format");await this.newProject(r);return}const n=At(this.project.name,await Promise.all(e.map(async r=>({name:r.name,text:await r.text()}))));let o=this.project;for(const r of n.files)o=et(o,r.path,r.text);this.setProject(o,(t=n.files[0])==null?void 0:t.path)}catch{this.message(d("web_visuobject_open_failed"))}}async save(){this.workspace?await this.writeCurrent():await this.downloadZip()}async downloadZip(){const{projectToZip:e}=await wt(async()=>{const{projectToZip:s}=await import("./projectZip-CGO1ec3D.js");return{projectToZip:s}},__vite__mapDeps([0,1,2]),import.meta.url),t=e(this.project);jn(`${this.project.name||"Projekt"}.zip`,t.slice().buffer,"application/zip")}isDirty(e){var t;return!this.workspace||this.saved===void 0?!1:e===void 0?this.saved!==Pe(this.project):this.savedFiles.get(e)!==((t=this.project.files.find(s=>s.path===e))==null?void 0:t.text)}markSaved(){this.saved=Pe(this.project),this.savedFiles=new Map(this.project.files.map(e=>[e.path,e.text]))}async restoreWorkspace(){if(!$t())return;const e=await Js(us);if(e!=null&&e.ready){const t=await _t(e.handle);if(t)return this.useWorkspace(t.root,!0)}this.pendingFolder=e==null?void 0:e.handle,this.renderWorkspace()}async useWorkspace(e,t=!1){var s;this.workspace=e,this.pendingFolder=void 0,J(rt,"0");try{this.projects=await is(e);const i=se(We),n=this.project;if(t&&i&&this.projects.includes(i)){const o={active:this.active,tabs:[...this.openTabs],positions:new Map(this.positions)};await this.loadProject(i),this.positions=o.positions,this.savePositions(),Pe(n)!==this.saved&&(this.project=n),this.openTabs=o.tabs.filter(r=>this.project.files.some(c=>c.path===r)),this.active=this.project.files.some(r=>r.path===o.active)?o.active:(s=this.project.files[0])==null?void 0:s.path,this.showActive(),this.refresh()}else!this.projects.some(o=>o.toLowerCase()===ge(n.name).toLowerCase())&&n.files.length?(this.folder=ge(n.name),await this.writeCurrent(!1)):this.projects.length?await this.loadProject(this.projects.includes(i??"")?i:this.projects[0]):(this.folder=ge(n.name),await this.writeCurrent(!1))}catch(i){this.message(d("web_visuobject_ws_failed",String((i==null?void 0:i.message)??i)))}this.renderWorkspace(),this.refresh()}async loadProject(e){var i;const{project:t,positions:s}=await gn(this.workspace,e);this.folder=e,this.project=t,this.markSaved(),this.message(""),this.history=[],this.future=[],this.lastTyping=0,this.selection=void 0,this.relSelection=void 0,this.treeSelection=void 0,this.currentPackage=void 0,this.positions=new Map(Object.entries(s)),this.savePositions(),this.openTabs=[],this.active=(i=t.files[0])==null?void 0:i.path,J(We,e),this.showActive(),this.refresh()}async writeCurrent(e=!0){const t=this.workspace;if(!t)return!1;const s=ge(this.project.name),i=this.folder,n=new Set(this.classes.map(r=>r.name)),o=Object.fromEntries([...this.positions].filter(([r])=>n.has(r)));if(s!==i&&this.projects.some(r=>r!==i&&r.toLowerCase()===s.toLowerCase()))return this.message(d("web_visuobject_ws_taken",this.project.name)),!1;try{return await $n(t,s,this.project,o),i&&i!==s&&this.projects.includes(i)&&await t.remove(i),this.folder=s,this.projects=await is(t),J(We,s),this.markSaved(),e&&this.message(d("web_visuobject_ws_saved",t.name,s),!0),this.refresh(),!0}catch(r){return this.message(d("web_visuobject_ws_failed",String((r==null?void 0:r.message)??r))),!1}}async switchProject(e){if(!(!this.workspace||e===this.folder)&&!(this.isDirty()&&!await this.writeCurrent(!1)))try{await this.loadProject(e)}catch(t){this.message(d("web_visuobject_ws_failed",String((t==null?void 0:t.message)??t)))}}async newProject(e,t,s=!1){var n,o;if(!this.workspace){this.setProject(e,t??((n=e.files[0])==null?void 0:n.path)),e.files.length===0&&!s&&this.editProjectName();return}if(this.isDirty()&&!await this.writeCurrent(!1))return;const i=ns(ge(e.name),this.projects);this.project={...e,name:i},this.folder=i,this.history=[],this.future=[],this.openTabs=[],this.positions.clear(),this.savePositions(),this.active=e.files.some(r=>r.path===t)?t:(o=e.files[0])==null?void 0:o.path,this.showActive(),this.refresh(),await this.writeCurrent(!1)&&(this.message(d("web_visuobject_ws_created",i),!0),e.files.length===0&&!s&&this.editProjectName())}get currentPlace(){const e=this.currentPackage??(this.active?D(this.active):ce(this.project)[0]??"");return{root:U(e),pkg:X(e)}}async newFromWizard(e){var u;const t=this.currentPlace,s=(f,m)=>{let g=f;for(let _=2;m(g);_++)g=f+_;return g},i=await nn(e,{roots:ue(this.project),packagesIn:f=>ce(this.project,f).map(X),classes:this.classes,root:t.root,pkg:t.pkg,suggest:f=>f==="project"?ns(d("web_visuobject_project_name"),this.workspace?[...this.projects,this.folder??""]:[]):f==="folder"?s("test",m=>ue(this.project).includes(m)):f==="package"?s(d("web_visuobject_new_package_name"),m=>ce(this.project).includes(re(t.root,m))):this.uniqueClassName(d(f==="class"?"web_visuobject_new_class_name":"web_visuobject_new_interface_name")),check:(f,m,g,_)=>{if(!m)return d("web_visuobject_new_name_missing");if(f==="project")return this.workspace&&this.projects.some(y=>y!==this.folder&&y.toLowerCase()===ge(m).toLowerCase())?d("web_visuobject_ws_taken",m):void 0;if(f==="folder")return!Je(m)||ue(this.project).includes(m)?d("web_visuobject_bad_folder",m):void 0;if(f==="package")return!Mt(m)||ce(this.project).includes(re(g,m))?d("web_visuobject_bad_package",m):void 0;if(!pe.test(m))return d("web_visuobject_bad_name",m);if(this.findClass(m)||this.project.files.some(y=>y.path===le(re(g,_),`${m}.java`)))return d("web_visuobject_new_exists",m);if(m.charAt(0)!==m.charAt(0).toUpperCase())return d("web_visuobject_new_upper")}});if(!i)return;const{name:n,root:o,pkg:r}=i;if(e==="project")return this.newProject({name:n,files:[],packages:[]},void 0,!0);if(this.message(""),e==="folder")return this.currentPackage=re(n,""),this.treeSelection=`root:${n}`,this.open.set(`root:${n}`,!0),this.setProject(mi(this.project,n));if(e==="package"){const f=re(o,n);return this.currentPackage=f,this.treeSelection=`pkg:${f}`,this.open.set(`root:${o}`,!0),this.setProject(pi(this.project,f))}const c=re(o,r),l=le(c,`${n}.java`);this.currentPackage=c,this.selection={cls:n},this.open.set(`root:${o}`,!0),this.open.set(`pkg:${c}`,!0),this.setProject(et(this.project,l,this.sectioned(tn(i.options),n)),l);const h=this.findClass(n);h&&this.showInCode(h),(u=this.canvas.querySelector(`.uml-class[data-class="${CSS.escape(n)}"]`))==null||u.scrollIntoView({block:"nearest",inline:"nearest"})}editProjectName(){this.treeSelection="project",this.renderTree(),this.startEditing(this.tree.querySelector('[data-node="project"] > .vo-row .vo-label'))}renderWorkspace(){const e=this.wsBox;e.hidden=!$t();const t=this.shell.querySelector("[data-action=save]");if(t.dataset.tip=d(this.workspace?"web_visuobject_save_ws_tip":"web_visuobject_save_tip"),e.hidden)return;const s=(i,n,o="text-button",r)=>``;this.workspace?(e.className="vo-ws",e.innerHTML=`${b(this.workspace.name)} ${s("zip",d("web_visuobject_ws_zip"),"text-button",d("web_visuobject_ws_zip_tip"))} ${s("switch",d("web_visuobject_ws_switch"),"text-button")}`):this.pendingFolder?(e.className="vo-ws",e.innerHTML=`${s("reopen",d("web_visuobject_ws_reopen",this.pendingFolder.name),"text-button primary")}${s("switch",d("web_visuobject_ws_switch"),"text-button")}`):se(rt)==="1"?(e.className="vo-ws",e.innerHTML=s("open",d("web_visuobject_ws_choose"),"text-button",d("web_visuobject_ws_hint"))):(e.className="vo-ws ask",e.innerHTML=`

${b(d("web_visuobject_ws_question"))}

${b(d("web_visuobject_ws_hint"))}

diff --git a/website/app/assets/projectZip-vbJDEaKJ.js b/website/app/assets/projectZip-CGO1ec3D.js similarity index 99% rename from website/app/assets/projectZip-vbJDEaKJ.js rename to website/app/assets/projectZip-CGO1ec3D.js index 95044980..825720fb 100644 --- a/website/app/assets/projectZip-vbJDEaKJ.js +++ b/website/app/assets/projectZip-CGO1ec3D.js @@ -1 +1 @@ -import{p as Br,d as Er,a as mr,i as Gr,b as Qr,c as Vr,u as Lr,n as _r,o as pr,e as br,r as dr,f as re,s as ee}from"./objectApp-C6ZS5O9z.js";import"./index-DpeMIv3e.js";var M=Uint8Array,K=Uint16Array,Tr=Int32Array,hr=new M([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),gr=new M([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Sr=new M([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Wr=function(r,e){for(var n=new K(31),a=0;a<31;++a)n[a]=e+=1<>1|(F&21845)<<1;b=(b&52428)>>2|(b&13107)<<2,b=(b&61680)>>4|(b&3855)<<4,Cr[F]=((b&65280)>>8|(b&255)<<8)>>1}var V=(function(r,e,n){for(var a=r.length,f=0,v=new K(e);f>l]=c}else for(s=new K(a),f=0;f>15-r[f]);return s}),d=new M(288);for(var F=0;F<144;++F)d[F]=8;for(var F=144;F<256;++F)d[F]=9;for(var F=256;F<280;++F)d[F]=7;for(var F=280;F<288;++F)d[F]=8;var ir=new M(32);for(var F=0;F<32;++F)ir[F]=5;var ae=V(d,9,0),fe=V(d,9,1),ve=V(ir,5,0),te=V(ir,5,1),xr=function(r){for(var e=r[0],n=1;ne&&(e=r[n]);return e},X=function(r,e,n){var a=e/8|0;return(r[a]|r[a+1]<<8)>>(e&7)&n},yr=function(r,e){var n=e/8|0;return(r[n]|r[n+1]<<8|r[n+2]<<16)>>(e&7)},Ur=function(r){return(r+7)/8|0},lr=function(r,e,n){return(e==null||e<0)&&(e=0),(n==null||n>r.length)&&(n=r.length),new M(r.subarray(e,n))},oe=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],I=function(r,e,n){var a=new Error(e||oe[r]);if(a.code=r,Error.captureStackTrace&&Error.captureStackTrace(a,I),!n)throw a;return a},ie=function(r,e,n,a){var f=r.length,v=a?a.length:0;if(!f||e.f&&!e.l)return n||new M(0);var i=!n,s=i||e.i!=2,l=e.i;i&&(n=new M(f*3));var c=function(fr){var vr=n.length;if(fr>vr){var nr=new M(Math.max(vr*2,fr));nr.set(n),n=nr}},t=e.f||0,o=e.p||0,u=e.b||0,h=e.l,y=e.d,w=e.m,x=e.n,T=f*8;do{if(!h){t=X(r,o,1);var z=X(r,o+1,3);if(o+=3,z)if(z==1)h=fe,y=te,w=9,x=5;else if(z==2){var U=X(r,o,31)+257,A=X(r,o+10,15)+4,m=U+X(r,o+5,31)+1;o+=14;for(var g=new M(m),B=new M(19),j=0;j>4;if(C<16)g[j++]=C;else{var E=0,k=0;for(C==16?(k=3+X(r,o,3),o+=2,E=g[j-1]):C==17?(k=3+X(r,o,7),o+=3):C==18&&(k=11+X(r,o,127),o+=7);k--;)g[j++]=E}}var W=g.subarray(0,U),J=g.subarray(U);w=xr(W),x=xr(J),h=V(W,w,1),y=V(J,x,1)}else I(1);else{var C=Ur(o)+4,O=r[C-4]|r[C-3]<<8,$=C+O;if($>f){l&&I(0);break}s&&c(u+O),n.set(r.subarray(C,$),u),e.b=u+=O,e.p=o=$*8,e.f=t;continue}if(o>T){l&&I(0);break}}s&&c(u+131072);for(var ar=(1<>4;if(o+=E&15,o>T){l&&I(0);break}if(E||I(2),q<256)n[u++]=q;else if(q==256){L=o,h=null;break}else{var H=q-254;if(q>264){var j=q-257,S=hr[j];H=X(r,o,(1<>4;G||I(3),o+=G&15;var J=ne[rr];if(rr>3){var S=gr[rr];J+=yr(r,o)&(1<T){l&&I(0);break}s&&c(u+131072);var er=u+H;if(u>8},tr=function(r,e,n){n<<=e&7;var a=e/8|0;r[a]|=n,r[a+1]|=n>>8,r[a+2]|=n>>16},Fr=function(r,e){for(var n=[],a=0;au&&(u=v[a].s);var h=new K(u+1),y=Or(n[t-1],h,0);if(y>e){var a=0,w=0,x=y-e,T=1<e)w+=T-(1<>=x;w>0;){var C=v[a].s;h[C]=0&&w;--a){var O=v[a].s;h[O]==e&&(--h[O],++w)}y=e}return{t:new M(h),l:y}},Or=function(r,e,n){return r.s==-1?Math.max(Or(r.l,e,n+1),Or(r.r,e,n+1)):e[r.s]=n},Nr=function(r){for(var e=r.length;e&&!r[--e];);for(var n=new K(++e),a=0,f=r[0],v=1,i=function(l){n[a++]=l},s=1;s<=e;++s)if(r[s]==f&&s!=e)++v;else{if(!f&&v>2){for(;v>138;v-=138)i(32754);v>2&&(i(v>10?v-11<<5|28690:v-3<<5|12305),v=0)}else if(v>3){for(i(f),--v;v>6;v-=6)i(8304);v>2&&(i(v-3<<5|8208),v=0)}for(;v--;)i(f);v=1,f=r[s]}return{c:n.subarray(0,a),n:e}},or=function(r,e){for(var n=0,a=0;a>8,r[f+2]=r[f]^255,r[f+3]=r[f+1]^255;for(var v=0;v4&&!B[Sr[D-1]];--D);var p=c+5<<3,Z=or(f,d)+or(v,ir)+i,P=or(f,u)+or(v,w)+i+14+3*D+or(A,B)+2*A[16]+3*A[17]+7*A[18];if(l>=0&&p<=Z&&p<=P)return Kr(e,t,r.subarray(l,l+c));var E,k,W,J;if(_(e,t,1+(P15&&(_(e,t,q[m]>>5&127),t+=q[m]>>12)}}else E=ae,k=d,W=ve,J=ir;for(var m=0;m255){var H=S>>18&31;tr(e,t,E[H+257]),t+=k[H+257],H>7&&(_(e,t,S>>23&31),t+=hr[H]);var G=S&31;tr(e,t,W[G]),t+=J[G],G>3&&(tr(e,t,S>>5&8191),t+=gr[G])}else tr(e,t,E[S]),t+=k[S]}return tr(e,t,E[256]),t+k[256]},le=new Tr([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Rr=new M(0),se=function(r,e,n,a,f,v){var i=v.z||r.length,s=new M(a+i+5*(1+Math.ceil(i/7e3))+f),l=s.subarray(a,s.length-f),c=v.l,t=(v.r||0)&7;if(e){t&&(l[0]=v.r>>3);for(var o=le[e-1],u=o>>13,h=o&8191,y=(1<7e3||B>24576)&&(E>423||!c)){t=Dr(r,l,0,O,$,U,m,B,D,g-D,t),B=A=m=0,D=g;for(var k=0;k<286;++k)$[k]=0;for(var k=0;k<30;++k)U[k]=0}var W=2,J=0,ar=h,R=Z-P&32767;if(E>2&&p==C(g-R))for(var L=Math.min(u,E)-1,q=Math.min(32767,g),H=Math.min(258,E);R<=q&&--ar&&Z!=P;){if(r[g+W]==r[g+W-R]){for(var S=0;SW){if(W=S,J=R,S>L)break;for(var G=Math.min(R,S-2),rr=0,k=0;krr&&(rr=ur,P=er)}}}Z=P,P=w[Z],R+=Z-P&32767}if(J){O[B++]=268435456|Mr[W]<<18|Jr[J];var fr=Mr[W]&31,vr=Jr[J]&31;m+=hr[fr]+gr[vr],++$[257+fr],++U[vr],j=g+W,++A}else O[B++]=r[g],++$[r[g]]}}for(g=Math.max(g,j);g=i&&(l[t/8|0]=c,nr=i),t=Kr(l,t+1,r.subarray(g,nr))}v.i=i}return lr(s,0,a+Ur(t)+f)},ue=(function(){for(var r=new Int32Array(256),e=0;e<256;++e){for(var n=e,a=9;--a;)n=(n&1&&-306674912)^n>>>1;r[e]=n}return r})(),ce=function(){var r=-1;return{p:function(e){for(var n=r,a=0;a>>8;r=n},d:function(){return~r}}},he=function(r,e,n,a,f){if(!f&&(f={l:1},e.dictionary)){var v=e.dictionary.subarray(-32768),i=new M(v.length+r.length);i.set(v),i.set(r,v.length),r=i,f.w=v.length}return se(r,e.level==null?6:e.level,e.mem==null?f.l?Math.ceil(Math.max(8,Math.min(13,Math.log(r.length)))*1.5):20:12+e.mem,n,a,f)},Xr=function(r,e){var n={};for(var a in r)n[a]=r[a];for(var a in e)n[a]=e[a];return n},Q=function(r,e){return r[e]|r[e+1]<<8},Y=function(r,e){return(r[e]|r[e+1]<<8|r[e+2]<<16|r[e+3]<<24)>>>0},kr=function(r,e){return Y(r,e)+Y(r,e+4)*4294967296},N=function(r,e,n){for(;n;++e)r[e]=n,n>>>=8};function ge(r,e){return he(r,e||{},0,0)}function we(r,e){return ie(r,{i:2},e&&e.out,e&&e.dictionary)}var Yr=function(r,e,n,a){for(var f in r){var v=r[f],i=e+f,s=a;Array.isArray(v)&&(s=Xr(a,v[1]),v=v[0]),v instanceof M?n[i]=[v,s]:(n[i+="/"]=[new M(0),s],Yr(v,i,n,a))}},Ir=typeof TextEncoder<"u"&&new TextEncoder,Ar=typeof TextDecoder<"u"&&new TextDecoder,me=0;try{Ar.decode(Rr,{stream:!0}),me=1}catch{}var xe=function(r){for(var e="",n=0;;){var a=r[n++],f=(a>127)+(a>223)+(a>239);if(n+f>r.length)return{s:e,r:lr(r,n-1)};f?f==3?(a=((a&15)<<18|(r[n++]&63)<<12|(r[n++]&63)<<6|r[n++]&63)-65536,e+=String.fromCharCode(55296|a>>10,56320|a&1023)):f&1?e+=String.fromCharCode((a&31)<<6|r[n++]&63):e+=String.fromCharCode((a&15)<<12|(r[n++]&63)<<6|r[n++]&63):e+=String.fromCharCode(a)}};function cr(r,e){var n;if(Ir)return Ir.encode(r);for(var a=r.length,f=new M(r.length+(r.length>>1)),v=0,i=function(c){f[v++]=c},n=0;nf.length){var s=new M(v+8+(a-n<<1));s.set(f),f=s}var l=r.charCodeAt(n);l<128||e?i(l):l<2048?(i(192|l>>6),i(128|l&63)):l>55295&&l<57344?(l=65536+(l&1047552)|r.charCodeAt(++n)&1023,i(240|l>>18),i(128|l>>12&63),i(128|l>>6&63),i(128|l&63)):(i(224|l>>12),i(128|l>>6&63),i(128|l&63))}return lr(f,0,v)}function jr(r,e){if(e){for(var n="",a=0;a65535&&I(9),e+=a+4}return e},Pr=function(r,e,n,a,f,v,i,s){var l=a.length,c=n.extra,t=s&&s.length,o=zr(c);N(r,e,i!=null?33639248:67324752),e+=4,i!=null&&(r[e++]=20,r[e++]=n.os),r[e]=20,e+=2,r[e++]=n.flag<<1|(v<0&&8),r[e++]=f&&8,r[e++]=n.compression&255,r[e++]=n.compression>>8;var u=new Date(n.mtime==null?Date.now():n.mtime),h=u.getFullYear()-1980;if((h<0||h>119)&&I(10),N(r,e,h<<25|u.getMonth()+1<<21|u.getDate()<<16|u.getHours()<<11|u.getMinutes()<<5|u.getSeconds()>>1),e+=4,v!=-1&&(N(r,e,n.crc),N(r,e+4,v<0?-v-2:v),N(r,e+8,n.size)),N(r,e+12,l),N(r,e+14,o),e+=16,i!=null&&(N(r,e,t),N(r,e+6,n.attrs),N(r,e+10,i),e+=14),r.set(a,e),e+=l,o)for(var y in c){var w=c[y],x=w.length;N(r,e,+y),N(r,e+2,x),r.set(w,e+4),e+=4+x}return t&&(r.set(s,e),e+=t),e},Se=function(r,e,n,a,f){N(r,e,101010256),N(r,e+8,n),N(r,e+10,n),N(r,e+12,a),N(r,e+16,f)};function Me(r,e){e||(e={});var n={},a=[];Yr(r,"",n,e);var f=0,v=0;for(var i in n){var s=n[i],l=s[0],c=s[1],t=c.level==0?0:8,o=cr(i),u=o.length,h=c.comment,y=h&&cr(h),w=y&&y.length,x=zr(c.extra);u>65535&&I(11);var T=t?ge(l,c):l,z=T.length,C=ce();C.p(l),a.push(Xr(c,{size:l.length,crc:C.d(),c:T,f:o,m:y,u:u!=i.length||y&&h.length!=w,o:f,compression:t})),f+=30+u+x+z,v+=76+2*(u+x)+(w||0)+z}for(var O=new M(v+22),$=f,U=v-f,A=0;A65558)&&I(13);var f=Q(r,a+8);if(!f)return{};var v=Y(r,a+16),i=v==4294967295||f==65535;if(i){var s=Y(r,a-12);i=Y(r,s)==101075792,i&&(f=Y(r,s+32),v=Y(r,s+48))}for(var l=0;l|]/g,"_")||"Projekt",n={};for(const l of r.files)n[`${e}/${br(l.path)}`]=new Uint8Array(cr(l.text));const a=[...r.packages.map(l=>`${e}/${dr(l)}/${re(l).replace(/\./g,"/")}/`),...ee(r).map(l=>`${e}/${l}/`)];for(const l of a)Object.keys(n).some(c=>c.startsWith(l))||(n[l.replace(/\/\/$/,"/")]=new Uint8Array);return(r.uml&&Object.keys(r.uml).length||(f=r.notes)!=null&&f.length||(v=r.objects)!=null&&v.length)&&(n[`${e}/${$r}`]=new Uint8Array(cr(JSON.stringify({format:"visuobject",version:1,uml:r.uml??{},...(i=r.notes)!=null&&i.length?{notes:r.notes}:{},...(s=r.objects)!=null&&s.length?{objects:r.objects}:{}},null,2)))),Me(n,{level:6})}function ze(r,e){var c;const n=Ce(r),a=Object.entries(n).filter(([t])=>/\.java$/i.test(t)&&!t.startsWith("__MACOSX/")).map(([t,o])=>({name:t,text:jr(o)})),f=new Set(Object.keys(n).map(t=>t.split("/")[0])),v=f.size===1&&Object.keys(n).some(t=>t.includes("/"))?[...f][0]:e,i=v!==e,s=Br(v,[]);for(const t of a){const o=Br(v,[{name:t.name.slice(t.name.lastIndexOf("/")+1),text:t.text}]).files[0],u=t.name.split("/").slice(i?1:0,-1),h=Er(o.text).split(".").filter(Boolean),w=u.slice(u.length-h.length).join("/")===h.join("/")?u.slice(0,u.length-h.length).join("/"):"",x=w&&w!==mr&&w.split("/").every(Gr)&&!w.includes(":")?w:mr,T=Qr(Vr(x,Er(o.text)),o.path.slice(o.path.lastIndexOf("/")+1));s.files=[...s.files.filter(z=>z.path!==T),{...o,path:T}],x!==mr&&!((c=s.sourceFolders)!=null&&c.includes(x))&&(s.sourceFolders=[...s.sourceFolders??[],x])}const l=Object.entries(n).find(([t])=>t===$r||t.endsWith(`/${$r}`));if(l)try{const t=JSON.parse(jr(l[1])),o=Lr(t.uml);o&&(s.uml=o);const u=_r(t.notes);u&&(s.notes=u);const h=pr(t.objects);h&&(s.objects=h)}catch{}return s}export{ze as projectFromZip,je as projectToZip}; +import{p as Br,d as Er,a as mr,i as Gr,b as Qr,c as Vr,u as Lr,n as _r,o as pr,e as br,r as dr,f as re,s as ee}from"./objectApp-CAsum0qy.js";import"./index-B50bSr2K.js";var M=Uint8Array,K=Uint16Array,Tr=Int32Array,hr=new M([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),gr=new M([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Sr=new M([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Wr=function(r,e){for(var n=new K(31),a=0;a<31;++a)n[a]=e+=1<>1|(F&21845)<<1;b=(b&52428)>>2|(b&13107)<<2,b=(b&61680)>>4|(b&3855)<<4,Cr[F]=((b&65280)>>8|(b&255)<<8)>>1}var V=(function(r,e,n){for(var a=r.length,f=0,v=new K(e);f>l]=c}else for(s=new K(a),f=0;f>15-r[f]);return s}),d=new M(288);for(var F=0;F<144;++F)d[F]=8;for(var F=144;F<256;++F)d[F]=9;for(var F=256;F<280;++F)d[F]=7;for(var F=280;F<288;++F)d[F]=8;var ir=new M(32);for(var F=0;F<32;++F)ir[F]=5;var ae=V(d,9,0),fe=V(d,9,1),ve=V(ir,5,0),te=V(ir,5,1),xr=function(r){for(var e=r[0],n=1;ne&&(e=r[n]);return e},X=function(r,e,n){var a=e/8|0;return(r[a]|r[a+1]<<8)>>(e&7)&n},yr=function(r,e){var n=e/8|0;return(r[n]|r[n+1]<<8|r[n+2]<<16)>>(e&7)},Ur=function(r){return(r+7)/8|0},lr=function(r,e,n){return(e==null||e<0)&&(e=0),(n==null||n>r.length)&&(n=r.length),new M(r.subarray(e,n))},oe=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],I=function(r,e,n){var a=new Error(e||oe[r]);if(a.code=r,Error.captureStackTrace&&Error.captureStackTrace(a,I),!n)throw a;return a},ie=function(r,e,n,a){var f=r.length,v=a?a.length:0;if(!f||e.f&&!e.l)return n||new M(0);var i=!n,s=i||e.i!=2,l=e.i;i&&(n=new M(f*3));var c=function(fr){var vr=n.length;if(fr>vr){var nr=new M(Math.max(vr*2,fr));nr.set(n),n=nr}},t=e.f||0,o=e.p||0,u=e.b||0,h=e.l,y=e.d,w=e.m,x=e.n,T=f*8;do{if(!h){t=X(r,o,1);var z=X(r,o+1,3);if(o+=3,z)if(z==1)h=fe,y=te,w=9,x=5;else if(z==2){var U=X(r,o,31)+257,A=X(r,o+10,15)+4,m=U+X(r,o+5,31)+1;o+=14;for(var g=new M(m),B=new M(19),j=0;j>4;if(C<16)g[j++]=C;else{var E=0,k=0;for(C==16?(k=3+X(r,o,3),o+=2,E=g[j-1]):C==17?(k=3+X(r,o,7),o+=3):C==18&&(k=11+X(r,o,127),o+=7);k--;)g[j++]=E}}var W=g.subarray(0,U),J=g.subarray(U);w=xr(W),x=xr(J),h=V(W,w,1),y=V(J,x,1)}else I(1);else{var C=Ur(o)+4,O=r[C-4]|r[C-3]<<8,$=C+O;if($>f){l&&I(0);break}s&&c(u+O),n.set(r.subarray(C,$),u),e.b=u+=O,e.p=o=$*8,e.f=t;continue}if(o>T){l&&I(0);break}}s&&c(u+131072);for(var ar=(1<>4;if(o+=E&15,o>T){l&&I(0);break}if(E||I(2),q<256)n[u++]=q;else if(q==256){L=o,h=null;break}else{var H=q-254;if(q>264){var j=q-257,S=hr[j];H=X(r,o,(1<>4;G||I(3),o+=G&15;var J=ne[rr];if(rr>3){var S=gr[rr];J+=yr(r,o)&(1<T){l&&I(0);break}s&&c(u+131072);var er=u+H;if(u>8},tr=function(r,e,n){n<<=e&7;var a=e/8|0;r[a]|=n,r[a+1]|=n>>8,r[a+2]|=n>>16},Fr=function(r,e){for(var n=[],a=0;au&&(u=v[a].s);var h=new K(u+1),y=Or(n[t-1],h,0);if(y>e){var a=0,w=0,x=y-e,T=1<e)w+=T-(1<>=x;w>0;){var C=v[a].s;h[C]=0&&w;--a){var O=v[a].s;h[O]==e&&(--h[O],++w)}y=e}return{t:new M(h),l:y}},Or=function(r,e,n){return r.s==-1?Math.max(Or(r.l,e,n+1),Or(r.r,e,n+1)):e[r.s]=n},Nr=function(r){for(var e=r.length;e&&!r[--e];);for(var n=new K(++e),a=0,f=r[0],v=1,i=function(l){n[a++]=l},s=1;s<=e;++s)if(r[s]==f&&s!=e)++v;else{if(!f&&v>2){for(;v>138;v-=138)i(32754);v>2&&(i(v>10?v-11<<5|28690:v-3<<5|12305),v=0)}else if(v>3){for(i(f),--v;v>6;v-=6)i(8304);v>2&&(i(v-3<<5|8208),v=0)}for(;v--;)i(f);v=1,f=r[s]}return{c:n.subarray(0,a),n:e}},or=function(r,e){for(var n=0,a=0;a>8,r[f+2]=r[f]^255,r[f+3]=r[f+1]^255;for(var v=0;v4&&!B[Sr[D-1]];--D);var p=c+5<<3,Z=or(f,d)+or(v,ir)+i,P=or(f,u)+or(v,w)+i+14+3*D+or(A,B)+2*A[16]+3*A[17]+7*A[18];if(l>=0&&p<=Z&&p<=P)return Kr(e,t,r.subarray(l,l+c));var E,k,W,J;if(_(e,t,1+(P15&&(_(e,t,q[m]>>5&127),t+=q[m]>>12)}}else E=ae,k=d,W=ve,J=ir;for(var m=0;m255){var H=S>>18&31;tr(e,t,E[H+257]),t+=k[H+257],H>7&&(_(e,t,S>>23&31),t+=hr[H]);var G=S&31;tr(e,t,W[G]),t+=J[G],G>3&&(tr(e,t,S>>5&8191),t+=gr[G])}else tr(e,t,E[S]),t+=k[S]}return tr(e,t,E[256]),t+k[256]},le=new Tr([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Rr=new M(0),se=function(r,e,n,a,f,v){var i=v.z||r.length,s=new M(a+i+5*(1+Math.ceil(i/7e3))+f),l=s.subarray(a,s.length-f),c=v.l,t=(v.r||0)&7;if(e){t&&(l[0]=v.r>>3);for(var o=le[e-1],u=o>>13,h=o&8191,y=(1<7e3||B>24576)&&(E>423||!c)){t=Dr(r,l,0,O,$,U,m,B,D,g-D,t),B=A=m=0,D=g;for(var k=0;k<286;++k)$[k]=0;for(var k=0;k<30;++k)U[k]=0}var W=2,J=0,ar=h,R=Z-P&32767;if(E>2&&p==C(g-R))for(var L=Math.min(u,E)-1,q=Math.min(32767,g),H=Math.min(258,E);R<=q&&--ar&&Z!=P;){if(r[g+W]==r[g+W-R]){for(var S=0;SW){if(W=S,J=R,S>L)break;for(var G=Math.min(R,S-2),rr=0,k=0;krr&&(rr=ur,P=er)}}}Z=P,P=w[Z],R+=Z-P&32767}if(J){O[B++]=268435456|Mr[W]<<18|Jr[J];var fr=Mr[W]&31,vr=Jr[J]&31;m+=hr[fr]+gr[vr],++$[257+fr],++U[vr],j=g+W,++A}else O[B++]=r[g],++$[r[g]]}}for(g=Math.max(g,j);g=i&&(l[t/8|0]=c,nr=i),t=Kr(l,t+1,r.subarray(g,nr))}v.i=i}return lr(s,0,a+Ur(t)+f)},ue=(function(){for(var r=new Int32Array(256),e=0;e<256;++e){for(var n=e,a=9;--a;)n=(n&1&&-306674912)^n>>>1;r[e]=n}return r})(),ce=function(){var r=-1;return{p:function(e){for(var n=r,a=0;a>>8;r=n},d:function(){return~r}}},he=function(r,e,n,a,f){if(!f&&(f={l:1},e.dictionary)){var v=e.dictionary.subarray(-32768),i=new M(v.length+r.length);i.set(v),i.set(r,v.length),r=i,f.w=v.length}return se(r,e.level==null?6:e.level,e.mem==null?f.l?Math.ceil(Math.max(8,Math.min(13,Math.log(r.length)))*1.5):20:12+e.mem,n,a,f)},Xr=function(r,e){var n={};for(var a in r)n[a]=r[a];for(var a in e)n[a]=e[a];return n},Q=function(r,e){return r[e]|r[e+1]<<8},Y=function(r,e){return(r[e]|r[e+1]<<8|r[e+2]<<16|r[e+3]<<24)>>>0},kr=function(r,e){return Y(r,e)+Y(r,e+4)*4294967296},N=function(r,e,n){for(;n;++e)r[e]=n,n>>>=8};function ge(r,e){return he(r,e||{},0,0)}function we(r,e){return ie(r,{i:2},e&&e.out,e&&e.dictionary)}var Yr=function(r,e,n,a){for(var f in r){var v=r[f],i=e+f,s=a;Array.isArray(v)&&(s=Xr(a,v[1]),v=v[0]),v instanceof M?n[i]=[v,s]:(n[i+="/"]=[new M(0),s],Yr(v,i,n,a))}},Ir=typeof TextEncoder<"u"&&new TextEncoder,Ar=typeof TextDecoder<"u"&&new TextDecoder,me=0;try{Ar.decode(Rr,{stream:!0}),me=1}catch{}var xe=function(r){for(var e="",n=0;;){var a=r[n++],f=(a>127)+(a>223)+(a>239);if(n+f>r.length)return{s:e,r:lr(r,n-1)};f?f==3?(a=((a&15)<<18|(r[n++]&63)<<12|(r[n++]&63)<<6|r[n++]&63)-65536,e+=String.fromCharCode(55296|a>>10,56320|a&1023)):f&1?e+=String.fromCharCode((a&31)<<6|r[n++]&63):e+=String.fromCharCode((a&15)<<12|(r[n++]&63)<<6|r[n++]&63):e+=String.fromCharCode(a)}};function cr(r,e){var n;if(Ir)return Ir.encode(r);for(var a=r.length,f=new M(r.length+(r.length>>1)),v=0,i=function(c){f[v++]=c},n=0;nf.length){var s=new M(v+8+(a-n<<1));s.set(f),f=s}var l=r.charCodeAt(n);l<128||e?i(l):l<2048?(i(192|l>>6),i(128|l&63)):l>55295&&l<57344?(l=65536+(l&1047552)|r.charCodeAt(++n)&1023,i(240|l>>18),i(128|l>>12&63),i(128|l>>6&63),i(128|l&63)):(i(224|l>>12),i(128|l>>6&63),i(128|l&63))}return lr(f,0,v)}function jr(r,e){if(e){for(var n="",a=0;a65535&&I(9),e+=a+4}return e},Pr=function(r,e,n,a,f,v,i,s){var l=a.length,c=n.extra,t=s&&s.length,o=zr(c);N(r,e,i!=null?33639248:67324752),e+=4,i!=null&&(r[e++]=20,r[e++]=n.os),r[e]=20,e+=2,r[e++]=n.flag<<1|(v<0&&8),r[e++]=f&&8,r[e++]=n.compression&255,r[e++]=n.compression>>8;var u=new Date(n.mtime==null?Date.now():n.mtime),h=u.getFullYear()-1980;if((h<0||h>119)&&I(10),N(r,e,h<<25|u.getMonth()+1<<21|u.getDate()<<16|u.getHours()<<11|u.getMinutes()<<5|u.getSeconds()>>1),e+=4,v!=-1&&(N(r,e,n.crc),N(r,e+4,v<0?-v-2:v),N(r,e+8,n.size)),N(r,e+12,l),N(r,e+14,o),e+=16,i!=null&&(N(r,e,t),N(r,e+6,n.attrs),N(r,e+10,i),e+=14),r.set(a,e),e+=l,o)for(var y in c){var w=c[y],x=w.length;N(r,e,+y),N(r,e+2,x),r.set(w,e+4),e+=4+x}return t&&(r.set(s,e),e+=t),e},Se=function(r,e,n,a,f){N(r,e,101010256),N(r,e+8,n),N(r,e+10,n),N(r,e+12,a),N(r,e+16,f)};function Me(r,e){e||(e={});var n={},a=[];Yr(r,"",n,e);var f=0,v=0;for(var i in n){var s=n[i],l=s[0],c=s[1],t=c.level==0?0:8,o=cr(i),u=o.length,h=c.comment,y=h&&cr(h),w=y&&y.length,x=zr(c.extra);u>65535&&I(11);var T=t?ge(l,c):l,z=T.length,C=ce();C.p(l),a.push(Xr(c,{size:l.length,crc:C.d(),c:T,f:o,m:y,u:u!=i.length||y&&h.length!=w,o:f,compression:t})),f+=30+u+x+z,v+=76+2*(u+x)+(w||0)+z}for(var O=new M(v+22),$=f,U=v-f,A=0;A65558)&&I(13);var f=Q(r,a+8);if(!f)return{};var v=Y(r,a+16),i=v==4294967295||f==65535;if(i){var s=Y(r,a-12);i=Y(r,s)==101075792,i&&(f=Y(r,s+32),v=Y(r,s+48))}for(var l=0;l|]/g,"_")||"Projekt",n={};for(const l of r.files)n[`${e}/${br(l.path)}`]=new Uint8Array(cr(l.text));const a=[...r.packages.map(l=>`${e}/${dr(l)}/${re(l).replace(/\./g,"/")}/`),...ee(r).map(l=>`${e}/${l}/`)];for(const l of a)Object.keys(n).some(c=>c.startsWith(l))||(n[l.replace(/\/\/$/,"/")]=new Uint8Array);return(r.uml&&Object.keys(r.uml).length||(f=r.notes)!=null&&f.length||(v=r.objects)!=null&&v.length)&&(n[`${e}/${$r}`]=new Uint8Array(cr(JSON.stringify({format:"visuobject",version:1,uml:r.uml??{},...(i=r.notes)!=null&&i.length?{notes:r.notes}:{},...(s=r.objects)!=null&&s.length?{objects:r.objects}:{}},null,2)))),Me(n,{level:6})}function ze(r,e){var c;const n=Ce(r),a=Object.entries(n).filter(([t])=>/\.java$/i.test(t)&&!t.startsWith("__MACOSX/")).map(([t,o])=>({name:t,text:jr(o)})),f=new Set(Object.keys(n).map(t=>t.split("/")[0])),v=f.size===1&&Object.keys(n).some(t=>t.includes("/"))?[...f][0]:e,i=v!==e,s=Br(v,[]);for(const t of a){const o=Br(v,[{name:t.name.slice(t.name.lastIndexOf("/")+1),text:t.text}]).files[0],u=t.name.split("/").slice(i?1:0,-1),h=Er(o.text).split(".").filter(Boolean),w=u.slice(u.length-h.length).join("/")===h.join("/")?u.slice(0,u.length-h.length).join("/"):"",x=w&&w!==mr&&w.split("/").every(Gr)&&!w.includes(":")?w:mr,T=Qr(Vr(x,Er(o.text)),o.path.slice(o.path.lastIndexOf("/")+1));s.files=[...s.files.filter(z=>z.path!==T),{...o,path:T}],x!==mr&&!((c=s.sourceFolders)!=null&&c.includes(x))&&(s.sourceFolders=[...s.sourceFolders??[],x])}const l=Object.entries(n).find(([t])=>t===$r||t.endsWith(`/${$r}`));if(l)try{const t=JSON.parse(jr(l[1])),o=Lr(t.uml);o&&(s.uml=o);const u=_r(t.notes);u&&(s.notes=u);const h=pr(t.objects);h&&(s.objects=h)}catch{}return s}export{ze as projectFromZip,je as projectToZip}; diff --git a/website/app/assets/robot3d-s_ti3AsW.js b/website/app/assets/robot3d-io7_npI9.js similarity index 99% rename from website/app/assets/robot3d-s_ti3AsW.js rename to website/app/assets/robot3d-io7_npI9.js index 622da925..a00f7a99 100644 --- a/website/app/assets/robot3d-s_ti3AsW.js +++ b/website/app/assets/robot3d-io7_npI9.js @@ -1,4 +1,4 @@ -var gl=Object.defineProperty;var _l=(i,t,e)=>t in i?gl(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var le=(i,t,e)=>_l(i,typeof t!="symbol"?t+"":t,e);import{C as rn,L as oo}from"./index-DpeMIv3e.js";/** +var gl=Object.defineProperty;var _l=(i,t,e)=>t in i?gl(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var le=(i,t,e)=>_l(i,typeof t!="symbol"?t+"":t,e);import{C as rn,L as oo}from"./index-B50bSr2K.js";/** * @license * Copyright 2010-2025 Three.js Authors * SPDX-License-Identifier: MIT diff --git a/website/app/index.html b/website/app/index.html index 0a256476..de80792a 100644 --- a/website/app/index.html +++ b/website/app/index.html @@ -6,7 +6,7 @@ VisuStruct Web - + From 45eb0978d4ee4a2ec69b26213ef9de495d2ed99c Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 30 Oct 2026 16:57:50 +0000 Subject: [PATCH 2/2] Anweisungen in Schleifen und Verzweigungen immer gelb Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Ugz28U8wYCXi1s1XAhMW6n --- CHANGELOG.md | 2 +- web/lessons/de/01-was-ist-ein-struktogramm.md | 2 +- .../diagramme/en/l1-grundbausteine.visustruct | 4 +- .../diagramme/en/l1-verzweigung.visustruct | 4 +- .../diagramme/en/l1-wiederholung.visustruct | 2 +- .../diagramme/l1-grundbausteine.visustruct | 4 +- .../diagramme/l1-verzweigung.visustruct | 4 +- .../diagramme/l1-wiederholung.visustruct | 2 +- .../diagramme/pt/l1-grundbausteine.visustruct | 4 +- .../diagramme/pt/l1-verzweigung.visustruct | 4 +- .../diagramme/pt/l1-wiederholung.visustruct | 2 +- web/lessons/en/01-was-ist-ein-struktogramm.md | 2 +- web/lessons/pt/01-was-ist-ein-struktogramm.md | 2 +- web/src/ui/javaEditor.ts | 14 +- web/src/ui/renderer.ts | 5 +- .../{index-B50bSr2K.js => index-B1gEcNJE.js} | 124 +++++++++--------- ...tApp-CAsum0qy.js => objectApp-DWdB06xH.js} | 6 +- ...Zip-CGO1ec3D.js => projectZip-D5fFrWPi.js} | 2 +- ...obot3d-io7_npI9.js => robot3d-ZgnmvG6e.js} | 2 +- website/app/index.html | 2 +- 20 files changed, 103 insertions(+), 90 deletions(-) rename website/app/assets/{index-B50bSr2K.js => index-B1gEcNJE.js} (98%) rename website/app/assets/{objectApp-CAsum0qy.js => objectApp-DWdB06xH.js} (99%) rename website/app/assets/{projectZip-CGO1ec3D.js => projectZip-D5fFrWPi.js} (99%) rename website/app/assets/{robot3d-io7_npI9.js => robot3d-ZgnmvG6e.js} (99%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a452490..28c0e947 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ The format is loosely inspired by Keep a Changelog. ### Added -- **Web 0.13.5, statements without class are coloured too:** when Programmieren shows the code without `class` and `main` (e.g. „Aufstehen;“, „Zähne putzen;“ in lesson 1), the statements now sit in a yellow block like a method, matching the yellow statements in the Struktogramm; loops and branches inside keep their own colours, and a loop with pseudocode condition (`while (Tee noch zu heiß) {`) is coloured up to its closing brace. +- **Web 0.13.5, statements without class are coloured too:** when Programmieren shows the code without `class` and `main` (e.g. „Aufstehen;“, „Zähne putzen;“ in lesson 1), the statements now sit in a yellow block like a method, matching the yellow statements in the Struktogramm; loops and branches inside keep their own colours. Statements are now always yellow, also inside a loop or branch (own yellow stripe in the code, yellow box in the Struktogramm and in lesson 1); only the empty ø takes the colour of its block. A loop with pseudocode condition (`while (Tee noch zu heiß) {`) is coloured up to its closing brace. - **Web 0.13.3, Struktogramm and Elemente in the code block colours:** the Struktogramm uses the same soft colours as the blocks in Programmieren: statements yellow like the method, loops (for, while, do-until, endless) pink, Verzweigung and Fallauswahl blue; elements inside a loop or branch take its colour, so code and diagram side by side show the matching blocks at a glance. The boxes in „Elemente“ get the same colours. The setting is now called „Blöcke farbig“ and switches code, diagram and Elemente together; a colour stored in the file still wins, and exports stay white. Lesson 1 uses the same colours (statements yellow, branch blue, loop pink; the sequence itself has no colour, it is the row of statements). - **Web 0.13.1, divider between Struktogramm and Programmieren always draggable:** with four open columns (lessons, Struktogramm, Programmieren, „mBot2 live“) the diagram sat at its minimum width and the divider barely moved. Dragging it now first uses the space of the two columns next to it, then takes width from „mBot2 live“, then from the lessons and files columns (down to their minimum widths). Works in both orders after ⇄; all widths are remembered. - **Web 0.13.0, VisuBot simulation in the „mBot2 live“ window:** in the VisuBot world „Simulation starten“ no longer shows a second 3D world in the simulation column; the mBot2 of the simulation drives in the „mBot2 live“ window instead (title „🤖 Simulation“, world buttons and distance/line values there, its own ▶ rests until the simulation ends). The window opens by itself for the simulation and closes again afterwards if it was closed before; if it is closed during the simulation, the 3D world goes back to the simulation column. Controls, variables, console, sensor sliders and the real mBot2 stay in the simulation column. diff --git a/web/lessons/de/01-was-ist-ein-struktogramm.md b/web/lessons/de/01-was-ist-ein-struktogramm.md index ea2da15a..b93363ec 100644 --- a/web/lessons/de/01-was-ist-ein-struktogramm.md +++ b/web/lessons/de/01-was-ist-ein-struktogramm.md @@ -90,7 +90,7 @@ Solange der Teller nicht leer ist, wird ein Bissen gegessen. Danach wird der Tel ## Alle drei zusammen -Richtig nützlich werden die Bausteine, wenn man sie kombiniert. Das Diagramm enthält alle drei: eine Sequenz von oben nach unten, eine [Verzweigung]{.blau} und eine [Schleife]{.rosa}. Gelb sind die einfachen [Anweisungen]{.gelb}. Was in einer Verzweigung oder Schleife steht, bekommt deren Farbe. Genau genommen ist das ganze Diagramm eine Sequenz, denn auch Verzweigung und Schleife stehen in der Reihe von oben nach unten. +Richtig nützlich werden die Bausteine, wenn man sie kombiniert. Das Diagramm enthält alle drei: eine Sequenz von oben nach unten, eine [Verzweigung]{.blau} und eine [Schleife]{.rosa}. Gelb sind die einfachen [Anweisungen]{.gelb}. Auch die Anweisungen in einer Verzweigung oder Schleife sind gelb. Genau genommen ist das ganze Diagramm eine Sequenz, denn auch Verzweigung und Schleife stehen in der Reihe von oben nach unten. ::: diagramm l1-grundbausteine.visustruct Die Verzweigung erkennst du am Dreieck, die Schleife an der Klammer links. Alles zusammen steht in einer Sequenz. diff --git a/web/lessons/diagramme/en/l1-grundbausteine.visustruct b/web/lessons/diagramme/en/l1-grundbausteine.visustruct index 1fa51809..c53c4f4a 100644 --- a/web/lessons/diagramme/en/l1-grundbausteine.visustruct +++ b/web/lessons/diagramme/en/l1-grundbausteine.visustruct @@ -6,7 +6,7 @@ 83;117;103;97;114;32;119;97;110;116;101;100;63; - + 65;100;100;32;115;117;103;97;114; @@ -19,7 +19,7 @@ 84;101;97;32;115;116;105;108;108;32;116;111;111;32;104;111;116; - + 87;97;105;116;32;49;32;109;105;110;117;116;101; diff --git a/web/lessons/diagramme/en/l1-verzweigung.visustruct b/web/lessons/diagramme/en/l1-verzweigung.visustruct index 78e94d6e..fa580c28 100644 --- a/web/lessons/diagramme/en/l1-verzweigung.visustruct +++ b/web/lessons/diagramme/en/l1-verzweigung.visustruct @@ -3,12 +3,12 @@ 73;115;32;105;116;32;114;97;105;110;105;110;103;63; - + 80;97;99;107;32;97;110;32;117;109;98;114;101;108;108;97; - + 80;97;99;107;32;115;117;110;103;108;97;115;115;101;115; diff --git a/web/lessons/diagramme/en/l1-wiederholung.visustruct b/web/lessons/diagramme/en/l1-wiederholung.visustruct index 079c4a98..1ab21c7a 100644 --- a/web/lessons/diagramme/en/l1-wiederholung.visustruct +++ b/web/lessons/diagramme/en/l1-wiederholung.visustruct @@ -3,7 +3,7 @@ 80;108;97;116;101;32;110;111;116;32;101;109;112;116;121; - + 84;97;107;101;32;97;32;98;105;116;101; diff --git a/web/lessons/diagramme/l1-grundbausteine.visustruct b/web/lessons/diagramme/l1-grundbausteine.visustruct index a601c4d8..15b1d94b 100644 --- a/web/lessons/diagramme/l1-grundbausteine.visustruct +++ b/web/lessons/diagramme/l1-grundbausteine.visustruct @@ -6,7 +6,7 @@ 90;117;99;107;101;114;32;103;101;119;252;110;115;99;104;116;63; - + 90;117;99;107;101;114;32;104;105;110;101;105;110;103;101;98;101;110; @@ -19,7 +19,7 @@ 84;101;101;32;110;111;99;104;32;122;117;32;104;101;105;223; - + 49;32;77;105;110;117;116;101;32;119;97;114;116;101;110; diff --git a/web/lessons/diagramme/l1-verzweigung.visustruct b/web/lessons/diagramme/l1-verzweigung.visustruct index 673cb6a6..0cbc066c 100644 --- a/web/lessons/diagramme/l1-verzweigung.visustruct +++ b/web/lessons/diagramme/l1-verzweigung.visustruct @@ -3,12 +3,12 @@ 82;101;103;110;101;116;32;101;115;63; - + 82;101;103;101;110;115;99;104;105;114;109;32;101;105;110;112;97;99;107;101;110; - + 83;111;110;110;101;110;98;114;105;108;108;101;32;101;105;110;112;97;99;107;101;110; diff --git a/web/lessons/diagramme/l1-wiederholung.visustruct b/web/lessons/diagramme/l1-wiederholung.visustruct index 8b31a819..95569e48 100644 --- a/web/lessons/diagramme/l1-wiederholung.visustruct +++ b/web/lessons/diagramme/l1-wiederholung.visustruct @@ -3,7 +3,7 @@ 84;101;108;108;101;114;32;110;105;99;104;116;32;108;101;101;114; - + 69;105;110;101;110;32;66;105;115;115;101;110;32;101;115;115;101;110; diff --git a/web/lessons/diagramme/pt/l1-grundbausteine.visustruct b/web/lessons/diagramme/pt/l1-grundbausteine.visustruct index c16a085e..23018719 100644 --- a/web/lessons/diagramme/pt/l1-grundbausteine.visustruct +++ b/web/lessons/diagramme/pt/l1-grundbausteine.visustruct @@ -6,7 +6,7 @@ 81;117;101;114;32;97;231;250;99;97;114;63; - + 74;117;110;116;97;114;32;97;231;250;99;97;114; @@ -19,7 +19,7 @@ 67;104;225;32;97;105;110;100;97;32;100;101;109;97;115;105;97;100;111;32;113;117;101;110;116;101; - + 69;115;112;101;114;97;114;32;49;32;109;105;110;117;116;111; diff --git a/web/lessons/diagramme/pt/l1-verzweigung.visustruct b/web/lessons/diagramme/pt/l1-verzweigung.visustruct index 576887bc..eb6d5fcc 100644 --- a/web/lessons/diagramme/pt/l1-verzweigung.visustruct +++ b/web/lessons/diagramme/pt/l1-verzweigung.visustruct @@ -3,12 +3,12 @@ 69;115;116;225;32;97;32;99;104;111;118;101;114;63; - + 76;101;118;97;114;32;103;117;97;114;100;97;45;99;104;117;118;97; - + 76;101;118;97;114;32;243;99;117;108;111;115;32;100;101;32;115;111;108; diff --git a/web/lessons/diagramme/pt/l1-wiederholung.visustruct b/web/lessons/diagramme/pt/l1-wiederholung.visustruct index 16ef1eb1..0bca7c36 100644 --- a/web/lessons/diagramme/pt/l1-wiederholung.visustruct +++ b/web/lessons/diagramme/pt/l1-wiederholung.visustruct @@ -3,7 +3,7 @@ 80;114;97;116;111;32;110;227;111;32;118;97;122;105;111; - + 68;97;114;32;117;109;97;32;103;97;114;102;97;100;97; diff --git a/web/lessons/en/01-was-ist-ein-struktogramm.md b/web/lessons/en/01-was-ist-ein-struktogramm.md index a6b17361..79831b20 100644 --- a/web/lessons/en/01-was-ist-ein-struktogramm.md +++ b/web/lessons/en/01-was-ist-ein-struktogramm.md @@ -90,7 +90,7 @@ As long as the plate is not empty, you take a bite. After that, the plate is cle ## All three together -The building blocks become really useful when you combine them. This diagram contains all three: a sequence from top to bottom, a [branch]{.blau} and a [loop]{.rosa}. The yellow boxes are simple [statements]{.gelb}. Whatever stands inside a branch or a loop takes its colour. Strictly speaking, the whole diagram is a sequence, because the branch and the loop also stand in the row from top to bottom. +The building blocks become really useful when you combine them. This diagram contains all three: a sequence from top to bottom, a [branch]{.blau} and a [loop]{.rosa}. The yellow boxes are simple [statements]{.gelb}. The statements inside a branch or a loop are yellow too. Strictly speaking, the whole diagram is a sequence, because the branch and the loop also stand in the row from top to bottom. ::: diagramm l1-grundbausteine.visustruct You recognise the branch by its triangle and the loop by the bracket on the left. Everything together sits in a sequence. diff --git a/web/lessons/pt/01-was-ist-ein-struktogramm.md b/web/lessons/pt/01-was-ist-ein-struktogramm.md index 02f8420f..ec4952c8 100644 --- a/web/lessons/pt/01-was-ist-ein-struktogramm.md +++ b/web/lessons/pt/01-was-ist-ein-struktogramm.md @@ -90,7 +90,7 @@ Enquanto o prato não estiver vazio, dás uma garfada. Depois, o prato é levant ## Os três juntos -Os blocos básicos tornam-se realmente úteis quando os combinas. Este diagrama contém os três: uma sequência de cima para baixo, uma [decisão]{.blau} e um [ciclo]{.rosa}. As caixas amarelas são [instruções]{.gelb} simples. O que está dentro de uma decisão ou de um ciclo fica com a cor dela. Em rigor, o diagrama todo é uma sequência, porque a decisão e o ciclo também estão na fila de cima para baixo. +Os blocos básicos tornam-se realmente úteis quando os combinas. Este diagrama contém os três: uma sequência de cima para baixo, uma [decisão]{.blau} e um [ciclo]{.rosa}. As caixas amarelas são [instruções]{.gelb} simples. As instruções dentro de uma decisão ou de um ciclo também são amarelas. Em rigor, o diagrama todo é uma sequência, porque a decisão e o ciclo também estão na fila de cima para baixo. ::: diagramm l1-grundbausteine.visustruct Reconheces a decisão pelo triângulo e o ciclo pelo parêntese à esquerda. Tudo junto forma uma sequência. diff --git a/web/src/ui/javaEditor.ts b/web/src/ui/javaEditor.ts index 97d55ce0..cf3a7dcb 100644 --- a/web/src/ui/javaEditor.ts +++ b/web/src/ui/javaEditor.ts @@ -182,6 +182,7 @@ function scopeMarkers(view: EditorView): RectangleMarker[] { } if (loose.length) markers.push(box('cm-scope cm-scope-method', doc.lineAt(loose[0].from).number, doc.lineAt(loose[loose.length - 1].to).number, 1)) // Äußere Blöcke zuerst: Die inneren liegen darüber. + const blocks: { kind: string; from: number; to: number }[] = [] syntaxTree(state).iterate({ from: view.viewport.from, to: view.viewport.to, @@ -191,9 +192,20 @@ function scopeMarkers(view: EditorView): RectangleMarker[] { // `else if` gehört zum Kasten des ersten `if`. if (node.name === 'IfStatement' && node.node.parent?.name === 'IfStatement') return const from = doc.lineAt(node.from).number - markers.push(box(`cm-scope cm-scope-${kind}`, from, Math.max(doc.lineAt(node.to).number, closingLine(doc, node.from)), 1)) + const to = Math.max(doc.lineAt(node.to).number, closingLine(doc, node.from)) + blocks.push({ kind, from, to }) + markers.push(box(`cm-scope cm-scope-${kind}`, from, to, 1)) }, }) + // Anweisungen in Schleifen und Verzweigungen bekommen wie im Struktogramm einen eigenen gelben Streifen. + for (let n = 1; n <= doc.lines; n++) { + let inner: { kind: string; from: number; to: number } | undefined + for (const b of blocks) if (b.from <= n && n <= b.to && (!inner || b.from >= inner.from)) inner = b + if (!inner || (inner.kind !== 'loop' && inner.kind !== 'if') || n === inner.from) continue + const text = doc.line(n).text.trim() + if (!text || text.startsWith('}') || text.endsWith('{') || text.startsWith('//') || text.startsWith('case ') || text.startsWith('default')) continue + markers.push(box('cm-scope cm-scope-method cm-scope-stmt', n, n, 2)) + } const sel = state.field(marksField).marks.lines if (sel && sel.from < doc.lines) markers.push(box('cm-scope cm-scope-sel', sel.from + 1, Math.min(sel.to + 1, doc.lines), 0)) return markers diff --git a/web/src/ui/renderer.ts b/web/src/ui/renderer.ts index b714f34f..2fa84b3c 100644 --- a/web/src/ui/renderer.ts +++ b/web/src/ui/renderer.ts @@ -25,7 +25,7 @@ const Ink = { type Omission = { top?: boolean; left?: boolean; bottom?: boolean; right?: boolean } -/** Farbe wie bei den Codeblöcken (`cm-scope-…`): Schleife rosa, Verzweigung blau, alles andere erbt die Farbe des Blocks, in dem es steht; ganz außen gelb wie die Methode `main` im Code. */ +/** Farbe wie bei den Codeblöcken (`cm-scope-…`): Schleife rosa, Verzweigung blau, Anweisungen gelb wie die Methode im Code. */ export function scopeKind(type: ElementType): string | undefined { switch (type) { case ElementType.forSchleife: @@ -213,7 +213,8 @@ export class DiagramRenderer { const bg = e.backgroundColor const own = bg && bg.a > 0 ? `rgba(${bg.r}, ${bg.g}, ${bg.b}, ${bg.a / 255})` : 'white' const fill = isSelected && (sim || this.fillsSelection) ? 'rgba(199, 230, 255, 0.55)' : own - const scope = scopeKind(e.type) ?? parentScope + // Anweisung, Aufruf, Aussprung immer gelb; nur der leere Platzhalter ø nimmt die Farbe des Blocks. + const scope = scopeKind(e.type) ?? (e.type === ElementType.leerElement ? parentScope : 'method') // Fläche in der Farbe des Blocks per CSS (Einstellung „Blöcke farbig“); im Export bleibt sie weiß. const area = el('rect', { x: r.x, y: r.y, width: r.width, height: r.height, fill }) if (fill === 'white' && scope) area.setAttribute('class', `ns-scope ns-scope-${scope}`) diff --git a/website/app/assets/index-B50bSr2K.js b/website/app/assets/index-B1gEcNJE.js similarity index 98% rename from website/app/assets/index-B50bSr2K.js rename to website/app/assets/index-B1gEcNJE.js index eeb17208..2d3b9416 100644 --- a/website/app/assets/index-B50bSr2K.js +++ b/website/app/assets/index-B1gEcNJE.js @@ -1,4 +1,4 @@ -var Uf=Object.defineProperty;var $f=(i,e,t)=>e in i?Uf(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var v=(i,e,t)=>$f(i,typeof e!="symbol"?e+"":e,t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))n(a);new MutationObserver(a=>{for(const s of a)if(s.type==="childList")for(const r of s.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&n(r)}).observe(document,{childList:!0,subtree:!0});function t(a){const s={};return a.integrity&&(s.integrity=a.integrity),a.referrerPolicy&&(s.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?s.credentials="include":a.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function n(a){if(a.ep)return;a.ep=!0;const s=t(a);fetch(a.href,s)}})();const Yf="modulepreload",Xf=function(i,e){return new URL(i,e).href},J0={},q=function(e,t,n){let a=Promise.resolve();if(t&&t.length>0){let r=function(m){return Promise.all(m.map(c=>Promise.resolve(c).then(d=>({status:"fulfilled",value:d}),d=>({status:"rejected",reason:d}))))};const o=document.getElementsByTagName("link"),l=document.querySelector("meta[property=csp-nonce]"),u=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));a=r(t.map(m=>{if(m=Xf(m,n),m in J0)return;J0[m]=!0;const c=m.endsWith(".css"),d=c?'[rel="stylesheet"]':"";if(!!n)for(let f=o.length-1;f>=0;f--){const x=o[f];if(x.href===m&&(!c||x.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${m}"]${d}`))return;const g=document.createElement("link");if(g.rel=c?"stylesheet":Yf,c||(g.as="script"),g.crossOrigin="",g.href=m,u&&g.setAttribute("nonce",u),document.head.appendChild(g),c)return new Promise((f,x)=>{g.addEventListener("load",f),g.addEventListener("error",()=>x(new Error(`Unable to preload CSS for ${m}`)))})}))}function s(r){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=r,window.dispatchEvent(o),!o.defaultPrevented)throw r}return a.then(r=>{for(const o of r||[])o.status==="rejected"&&s(o.reason);return e().catch(s)})};var I=(i=>(i[i.anweisung=0]="anweisung",i[i.verzweigung=1]="verzweigung",i[i.fallauswahl=2]="fallauswahl",i[i.forSchleife=3]="forSchleife",i[i.whileSchleife=4]="whileSchleife",i[i.doUntilSchleife=5]="doUntilSchleife",i[i.endlosschleife=6]="endlosschleife",i[i.aussprung=7]="aussprung",i[i.aufruf=8]="aufruf",i[i.leerElement=9]="leerElement",i))(I||{});function Kf(i){return i===3||i===4||i===5||i===6}function e2(i){return i===1||i===2}function ze(i,e={}){return{type:i,zoomX:0,zoomY:0,textLines:[""],...e}}function t2(i){const e=i.textLines;if(!e.every(t=>t.trim()===""))switch(i.type){case I.forSchleife:return e.length<=1?e:[i2(e)];case I.verzweigung:return Vi("if",e);case I.whileSchleife:return Vi("while",e);case I.doUntilSchleife:return Vi("while",n2(e));case I.fallauswahl:return Vi("switch",e);default:return e}}function n2(i){if(i.length===0)return i;const e=i[0].trim(),t=e.toLowerCase(),n=[...i];if(t==="until")n[0]="";else if(t.startsWith("until "))n[0]=e.slice(6).trim();else if(t.startsWith("until("))n[0]=e.slice(5);else return i;return n}function R0(i){const e=new Set(["if","for","while","until","switch"]),t=["input:","output:","print:"],n=i.trim(),a=n.toLowerCase();for(const o of t){if(a===o)return{keyword:n,rest:""};if(a.startsWith(o+" "))return{keyword:n.slice(0,o.length),rest:n.slice(o.length).trim()}}const s=n.indexOf(" ");if(s<0)return;const r=n.slice(0,s);if(e.has(r.toLowerCase()))return{keyword:r,rest:n.slice(s+1).trim()}}function Vi(i,e){if(e.length===0)return e;const t=e[0].trim(),n=t.toLowerCase();if(n===i||n.startsWith(i+" "))return e;const a=[...e];return a[0]=i+" "+t,a}function i2(i){let e=[...i];for(;e.length<3;)e.push("");e=e.slice(0,3);const t=a=>{let s=a.trim();for(;s.endsWith(";");)s=s.slice(0,-1).trim();return s},n=e.map(t).join("; ").trim();return n===""?"for":"for "+n}const Od={[I.anweisung]:"Anweisung",[I.verzweigung]:"Bedingung",[I.fallauswahl]:"Fallauswahl",[I.forSchleife]:"for 0 < i < anzahl",[I.whileSchleife]:"while …",[I.doUntilSchleife]:"while …",[I.endlosschleife]:"endless",[I.aussprung]:"break",[I.aufruf]:"Aufruf()",[I.leerElement]:"ø"};function a2(i){Object.assign(Od,i)}function Ol(i){return t2(i)??[Od[i.type]]}class Ce extends Error{}const hn=i=>structuredClone(i);function en(){return ze(I.anweisung,{textLines:["ø"]})}function s2(){return{caption:"",elements:[en()]}}function Al(i){if(i.type===I.leerElement)return!0;if(i.type===I.anweisung){const e=i.textLines;return e.length===0||e.length===1&&e[0]==="ø"}return!1}function wn(i,e){const t=Nt(i,e);return t!==void 0&&Al(t)}function Zi(i,e){if(e.length===0)throw new Ce("Invalid element path.");const[t,...n]=e;if(t<0||t>=i.length)throw new Ce("Invalid element path.");if(n.length===0)return{list:i,index:t};const[a,...s]=n;if(s.length===0)throw new Ce("Invalid element path.");return Zi(Ad(i[t],a),s)}function Ad(i,e){if(Kf(i.type)){if(e!==0||!i.loopBody)throw new Ce("Invalid element path.");return i.loopBody}if(e2(i.type)){if(!i.cases||e<0||e>=i.cases.length)throw new Ce("Invalid element path.");return i.cases[e].elements}throw new Ce("Invalid element path.")}function At(i,e){const{list:t,index:n}=Zi(i.elements,e);return t[n]}function Nt(i,e){try{return At(i,e)}catch{return}}function Pn(i,e,t){const n=hn(i),{list:a,index:s}=Zi(n.elements,e);return a[s]=hn(t),n}function Qi(i,e,t){const n=hn(At(i,e));return n.textLines=t.length===0?[""]:t,Pn(i,e,n)}function rr(i,e){return e.length===0?!1:e.length===1&&i.elements.length===1?!wn(i,e):Nt(i,e)!==void 0}function fi(i,e){const t=hn(i),{list:n,index:a}=Zi(t.elements,e);if(e.length===1&&n.length===1){if(Al(n[0]))throw new Ce("The last root element cannot be deleted.");return n[0]=en(),t}return n.splice(a,1),e.length>1&&n.length===0&&n.push(en()),t}function ti(i,e,t,n){const a=hn(i);let s;if(e.length===0)s=a.elements;else{const r=e.slice(0,-1),o=e[e.length-1],{list:l,index:u}=Zi(a.elements,r);s=Ad(l[u],o)}return s.splice(Math.min(Math.max(0,t),s.length),0,hn(n)),a}function Pd(i,e,t){if(t.length===0)throw new Ce("Invalid element path.");return ti(i,t.slice(0,-1),t[t.length-1],e)}function io(i,e,t){if(t.length===0)throw new Ce("Invalid element path.");return ti(i,t.slice(0,-1),t[t.length-1]+1,e)}function Pl(i,e){return i.lengthe[n]===t)}function jl(i,e){if(e.length===0)return i;const t=e[e.length-1],n=e.slice(0,-1);if(i.length<=n.length||!n.every((r,o)=>i[o]===r))return i;const a=n.length;if(i[a]<=t)return i;const s=[...i];return s[a]-=1,s}const Cl=(i,e)=>i.length===e.length&&i.every((t,n)=>t===e[n]);function r2(i,e,t){if(Cl(e,t))return i;if(Pl(e,t))throw new Ce("Invalid element path.");const n=At(i,e),a=fi(i,e);return Pd(a,n,jl(t,e))}function o2(i,e,t){if(Cl(e,t))return i;if(Pl(e,t))throw new Ce("Invalid element path.");const n=At(i,e),a=fi(i,e);return io(a,n,jl(t,e))}function l2(i,e,t){if(!wn(i,t))throw new Ce("Invalid element path.");if(Cl(e,t))return i;if(Pl(e,t))throw new Ce("Invalid element path.");const n=At(i,e),a=fi(i,e);return Pn(a,jl(t,e),n)}function u2(i,e){const t=hn(At(i,e)),n=t.cases;if(t.type!==I.fallauswahl||!n||n.length===0)throw new Ce("Invalid element path.");const a=n[n.length-1].name.toLowerCase()==="default",s=a?n.length-1:n.length,r=String(a?n.length:n.length+1);return n.splice(s,0,{name:r,elements:[en()]}),{doc:Pn(i,e,t),path:[...e,s,0]}}function m2(i,e,t){const n=hn(At(i,e)),a=n.cases;if(n.type!==I.fallauswahl||!a)throw new Ce("Invalid element path.");if(a.length<=2)throw new Ce("A switch needs at least two cases.");if(t<0||t>=a.length)throw new Ce("Invalid element path.");a.splice(t,1);const s=Math.min(t,a.length-1);return{doc:Pn(i,e,n),path:[...e,s,0]}}function c2(i,e,t,n){const a=hn(At(i,e)),s=a.cases;if(a.type!==I.fallauswahl||!s)throw new Ce("Invalid element path.");if(t<0||t>=s.length)throw new Ce("Invalid element path.");const r=n.trim();if(r==="")throw new Ce("Invalid element path.");return s[t].name=r,Pn(i,e,a)}function d2(i,e){var t;if(!(!i||i.length===0))for(let n=i.length;n>=1;n--){const a=i.slice(0,n);if(((t=Nt(e,a))==null?void 0:t.type)===I.fallauswahl)return a}}function h2(i,e){if(!(!i||i.length<=e.length))return i[e.length]}function or(i,e){if(e.elements.length!==0)return!i||!Nt(e,i)?[0]:i}const jd=i=>i!==void 0&&/\s/.test(i);function Qa(i){const e=i.trim().toLowerCase();return e.startsWith("input:")?"input":e.startsWith("output:")||e.startsWith("print:")?"output":"statement"}function g2(i){const e=i.trim(),t=e.toLowerCase();return t.startsWith("input:")?e.slice(6).trim():t.startsWith("output:")?e.slice(7).trim():t.startsWith("print:")?e.slice(6).trim():i}function G0(i,e){const t=e.trim();return t===""?`${i} `:`${i} ${t}`}function p2(i,e){const t=g2(e);switch(i){case"statement":return t;case"input":return G0("input:",t);case"output":return G0("output:",t)}}const ja=i=>jd(i[0])?i.slice(1):i;function f2(i){const e=i.replace(/^\s+/,""),t=e.toLowerCase();return t.startsWith("input:")?ja(e.slice(6)):t.startsWith("output:")?ja(e.slice(7)):t.startsWith("print:")?ja(e.slice(6)):i}function H0(i,e){const t=e.replace(/^\s+/,"");if(!t.toLowerCase().startsWith(i.toLowerCase()))return e;const n=t.slice(i.length);if(!(n===""||jd(n[0])||n[0]==="("))return e;const a=ja(n);return a.startsWith("(")&&a.endsWith(")")&&a.length>=2?a.slice(1,-1):a}function V0(i,e){if(i==="input:"||i==="output:")return f2(e);const t=H0(i,e);if(i==="while"&&t===e){const n=H0("until",e);if(n!==e)return n}return t}function x2(i,e){return e===""?`${i} `:`${i} ${e}`}function Cd(i){return i.replace(/[“”„«»]/g,'"').replace(/[’‘‚´]/g,"'")}function Q0(i){const e=i.length===0?[""]:i.slice(0,3);for(;e.length<3;)e.push("");return e}function b2(i){let e=Cd(i);for(;;){const t=e.trim();if(!t.endsWith(";"))return e;e=t.slice(0,-1).trim()}}const Ls='system-ui, -apple-system, "Segoe UI", Roboto, sans-serif';function y2(i,e){return`${e==="bold"?700:500} ${i}px ${Ls}`}const Bd=(i,e,t)=>[...i].length*e*(t==="bold"?.68:.62);function v2(){if(typeof document>"u"||!document.body)return;const i="http://www.w3.org/2000/svg",e=document.createElementNS(i,"svg");e.setAttribute("aria-hidden","true"),e.setAttribute("width","0"),e.setAttribute("height","0"),e.style.cssText="position:absolute;left:-9999px;top:0;visibility:hidden;overflow:hidden";const t=document.createElementNS(i,"text");if(t.setAttribute("font-family",Ls),t.style.whiteSpace="pre",e.append(t),document.body.append(e),typeof t.getComputedTextLength!="function"||typeof t.getBBox!="function"){e.remove();return}if(t.textContent="Mg",t.setAttribute("font-size","20"),!(t.getComputedTextLength()>0)){e.remove();return}return t}let lr;function Dd(){return lr===void 0&&(lr=v2()??null),lr??void 0}function Zd(i,e,t){i.setAttribute("font-size",String(e)),i.setAttribute("font-weight",t==="bold"?"700":"500")}function q0(i,e){const t=`${i}|${e}`;let n=U0.get(t);if(!n){const a=Dd();if(n={ascent:i*.95,descent:i*.24},a){Zd(a,i,e),a.setAttribute("y","0"),a.textContent="Mg";const s=a.getBBox();s.height>0&&(n={ascent:-s.y,descent:s.height+s.y})}U0.set(t,n)}return n}const U0=new Map;function w2(){const i=Dd();if(i){const n=new Map;return(a,s,r)=>{const o=`${s}|${r}|${a}`;let l=n.get(o);return l===void 0&&(Zd(i,s,r),i.textContent=a,l=a===""?0:i.getComputedTextLength(),n.size>2e3&&n.clear(),n.set(o,l)),l}}const e=typeof document<"u"?document.createElement("canvas").getContext("2d"):null;if(!e)return Bd;const t=new Map;return(n,a,s)=>{const r=`${a}|${s}|${n}`;let o=t.get(r);return o===void 0&&(e.font=y2(a,s),o=e.measureText(n).width,t.size>2e3&&t.clear(),t.set(r,o)),o}}const Md={fontSize:15,lineHeight:20,charWidth:7,baseHeaderExtra:20,minSidePadding:42,cellTextInsetY:15,doUntilDoLabelTopInset:2,doUntilFooterTopInset:6,doUntilFooterBottomInset:8};function z2(i){return{...Md,fontSize:14,lineHeight:21,charWidth:5.5*(14/12),baseHeaderExtra:21,minSidePadding:40}}const qi=i=>i===I.forSchleife||i===I.whileSchleife||i===I.doUntilSchleife||i===I.endlosschleife,Ui=i=>i===I.fallauswahl||i===I.verzweigung;function $i(i,e,t,n=0){return{idPath:i,element:e,frame:t,headerBandHeight:n,topBandHeight:0,loopBodyLeadingInset:0,caseColumnFrames:[],children:[]}}function Ye(i){return{...i,frame:{...i.frame}}}class Ld{constructor(e=Md,t=Bd){this.metrics=e,this.measure=t}layout(e,t={left:28,top:28}){const a=this.layoutList(e.elements,t.left,t.top,[]).map(l=>this.stretchLoopBodiesVertically(l));let s=0,r=0;const o=l=>{s=Math.max(s,l.frame.x+l.frame.width),r=Math.max(r,l.frame.y+l.frame.height),l.children.forEach(o)};return a.forEach(o),{canvasSize:{width:s+t.left,height:r+t.top},elements:a}}lineWidth(e){return Math.ceil(this.measure(e,this.metrics.fontSize,"medium"))}lineWidthBold(e){return Math.ceil(this.measure(e,this.metrics.fontSize,"bold"))}layoutList(e,t,n,a){let s=[],r=n;e.forEach((l,u)=>{const m=this.layoutElement(l,t,r,[...a,u]);s.push(m),r+=m.frame.height});const o=Math.max(0,...s.map(l=>l.frame.width));return o>0&&(s=s.map(l=>this.stretchNodeTreeToWidth(l,o))),s}stretchMultiwayNodeToWidth(e,t){const n=Ye(e),a=n.frame.width;if(!(a>0)||n.caseColumnFrames.length===0)return n;const s=t/a;n.frame.width=t;let r=n.frame.x;const o=n.caseColumnFrames.map(l=>{const u=l.width*s,m={x:r,y:l.y,width:u,height:l.height};return r+=u,m});return n.caseColumnFrames=o,n.dividerX=o.length>0?o[o.length-1].x:n.frame.x+t,n.columns&&n.columns.length===o.length&&(n.columns=n.columns.map((l,u)=>{const m=o[u];return l.map(c=>{const d=Ye(c);return d.frame.x=m.x,d.frame.width=m.width,this.stretchDescendantsWidths(d,m.width)})}),n.children=n.columns.flat()),n}stretchLoopChildren(e,t){const n=this.effectiveLoopBodyLeading(e),a=Math.max(0,t-n);e.children=e.children.map(s=>{const r=Ye(s);return r.frame.x=e.frame.x+n,r.frame.width=a,this.stretchDescendantsWidths(r,a)})}stretchNodeTreeToWidth(e,t){const n=Ye(e);return n.frame.width>0?Ui(n.element.type)&&n.caseColumnFrames.length>0?this.stretchMultiwayNodeToWidth(n,t):(n.frame.width=t,qi(n.element.type)?this.stretchLoopChildren(n,t):n.children=n.children.map(s=>this.stretchDescendantsWidths(s,t)),n):n}stretchDescendantsWidths(e,t){let n=Ye(e);return Ui(n.element.type)?n=this.stretchNodeTreeToWidth(n,t):qi(n.element.type)?(n.frame.width=t,this.stretchLoopChildren(n,t)):(n.frame.width=t,n.children=n.children.map(a=>this.stretchDescendantsWidths(a,t))),n}stretchLoopBodiesVertically(e){const t=Ye(e);if(t.columns&&t.columns.length>0)return t.columns=t.columns.map(s=>s.map(r=>this.stretchLoopBodiesVertically(r))),t.children=t.columns.flat(),t;t.children=t.children.map(s=>this.stretchLoopBodiesVertically(s));const n=s=>s===I.anweisung||s===I.leerElement||s===I.aufruf||s===I.aussprung||qi(s);let a;switch(t.element.type){case I.forSchleife:case I.whileSchleife:case I.endlosschleife:{const s=t.element.type===I.endlosschleife?40:0;a=t.frame.y+t.frame.height-s;break}case I.doUntilSchleife:a=t.frame.y+t.frame.height-t.headerBandHeight;break}if(a!==void 0&&t.children.length>0){const s=t.children.length-1;let r=Ye(t.children[s]);const o=a-(r.frame.y+r.frame.height);o>.5&&n(r.element.type)&&(r.frame.height+=o,r=this.stretchLoopBodiesVertically(r),t.children=[...t.children.slice(0,s),r])}return t}headerHeight(e){const t=this.metrics,n=Math.max(1,e.textLines.length);if(e.type===I.doUntilSchleife)return t.doUntilFooterTopInset+n*t.lineHeight+t.doUntilFooterBottomInset+e.zoomY;let a;switch(e.type){case I.fallauswahl:a=40;break;case I.verzweigung:a=20;break;case I.forSchleife:case I.whileSchleife:case I.endlosschleife:a=t.baseHeaderExtra+4;break;default:a=14}return a+n*t.lineHeight+e.zoomY}doUntilBodyLeadingInset(){return Math.max(20,this.lineWidthBold("do")+12)}effectiveLoopBodyLeading(e){return e.element.type===I.doUntilSchleife?e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:this.doUntilBodyLeadingInset():20}horizontalPaddingInsideCell(e){return Ui(e)?Math.max(100,this.metrics.minSidePadding*2.45):this.metrics.minSidePadding}minWidth(e){const t=e.textLines.length===0?0:Math.max(...e.textLines.map(s=>this.lineWidth(s)));let n=t+e.zoomX+this.horizontalPaddingInsideCell(e.type);if(e.type===I.aufruf){const s=Math.max(68,this.metrics.minSidePadding*1.7),r=Math.max(8,this.metrics.minSidePadding*.2);n=Math.max(n,t+e.zoomX+s+r)}const a=e.type===I.leerElement?76:e.type===I.aufruf?104:72;return Math.max(a,n)}layoutElement(e,t,n,a){if(Ui(e.type))return this.layoutMultiway(e,t,n,a);if(qi(e.type))return this.layoutLoop(e,t,n,a);const s=this.headerHeight(e);return $i(a,e,{x:t,y:n,width:this.minWidth(e),height:s},s)}layoutLoop(e,t,n,a){const s=x=>x.reduce((b,y)=>b+y.frame.height,0),r=x=>Math.max(0,...x.map(b=>b.frame.width)),o=e.loopBody??[];if(e.type===I.doUntilSchleife){const x=this.doUntilBodyLeadingInset(),b=e.zoomY,y=this.headerHeight(e),w=this.layoutList(o,t+x,n+b,[...a,0]),S=Math.max(this.minWidth(e),r(w)+x),z=s(w)+y+b,k=Math.max(0,S-x),_=$i(a,e,{x:t,y:n,width:S,height:z},y);return _.topBandHeight=b,_.loopBodyLeadingInset=x,_.children=w.map(T=>{const j=Ye(T);return j.frame.x=t+x,j.frame.width=k,this.stretchDescendantsWidths(j,k)}),_}const l=20,u=this.headerHeight(e),m=e.type===I.endlosschleife?40:0,c=this.layoutList(o,t+l,n+u,[...a,0]),d=Math.max(this.minWidth(e),r(c)+l),h=u+m+s(c),g=Math.max(0,d-l),f=$i(a,e,{x:t,y:n,width:d,height:h},u);return f.children=c.map(x=>{const b=Ye(x);return b.frame.x=t+l,b.frame.width=g,this.stretchDescendantsWidths(b,g)}),f}layoutMultiway(e,t,n,a){const s=this.headerHeight(e),r=e.cases??[],o=Math.max(1,r.length),l=Math.max(this.minWidth(e)/o,132);let u=[],m=[],c=0,d=0;if(r.forEach((x,b)=>{const y=t+c,w=this.layoutList(x.elements,y,n+s,[...a,b]),S=Math.max(0,...w.map(_=>_.frame.width));let z;e.type===I.verzweigung&&o===2?z=Math.max(S,(b===0?"true":"false").length*this.metrics.charWidth+24):z=Math.max(l,S);const k=w.reduce((_,T)=>_+T.frame.height,0);d=Math.max(d,k),u.push({x:y,y:n+s,width:z,height:k}),m.push(w.map(_=>{const T=Ye(_);return T.frame.x=y,T.frame.width=z,this.stretchDescendantsWidths(T,z)})),c+=z}),e.type===I.verzweigung&&o===2&&u.length===2){const x=Math.max(u[0].width,u[1].width),b=t,y=t+x,w=y-u[1].x;u[0]={...u[0],x:b,width:x},u[1]={...u[1],x:y,width:x},c=x*2,m[0]=m[0].map(S=>{const z=Ye(S);return z.frame.x=b,z.frame.width=x,this.stretchDescendantsWidths(z,x)}),m[1]=m[1].map(S=>{const z=ao(S,w);return z.frame.width=x,this.stretchDescendantsWidths(z,x)})}if(m.length>0){const x=I2(m,n+s);m=x.columns.map(b=>b.map(y=>this.stretchLoopBodiesVertically(y)));for(let b=0;b0?Math.max(...x.columnHeights):d}let h=Math.max(c,this.minWidth(e));if(c>.5&&h>c+.5){const x=h/c;let b=t;const y=[],w=[];u.forEach((S,z)=>{const k=S.width*x;w.push(m[z].map(_=>{const T=Ye(_);return T.frame.x=b,T.frame.width=k,this.stretchDescendantsWidths(T,k)})),y.push({x:b,y:S.y,width:k,height:S.height}),b+=k}),u=y,m=w,c=b-t,h=c}const g=u.length>0?u[u.length-1].width:c/o,f=$i(a,e,{x:t,y:n,width:h,height:s+d},s);return f.caseColumnFrames=u,f.dividerX=u.length>0?u[u.length-1].x:t+c-g,f.dividerYInset=e.type===I.fallauswahl?-20:0,f.columns=m,f.children=m.flat(),f}}function Wd(i,e){if(Math.abs(e)<=1e-4)return i;const t=Ye(i),n=a=>{const s=Ye(a);return s.frame.y+=e,Wd(s,e)};return t.columns?(t.columns=t.columns.map(a=>a.map(n)),t.children=t.columns.flat()):t.children=t.children.map(n),t}function ao(i,e){if(Math.abs(e)<=1e-4)return i;const t=Ye(i);return t.frame.x+=e,t.columns?(t.columns=t.columns.map(n=>n.map(a=>ao(a,e))),t.children=t.columns.flat()):t.children=t.children.map(n=>ao(n,e)),t}function I2(i,e){if(i.length<2)return{columns:i,columnHeights:i.map(u=>u.reduce((m,c)=>m+c.frame.height,0))};const t=.5,n=[e];for(const u of i)for(const m of u)n.push(m.frame.y+m.frame.height);const a=Math.max(...n);n.push(a),n.sort((u,m)=>u-m);let s=[];for(const u of n)s.length>0&&Math.abs(u-s[s.length-1])<=t||s.push(u);(s.length===0||Math.abs(s[0]-e)>t)&&s.unshift(e),s.length===0?s=[e,a]:s[s.length-1]{let c=Math.max(0,m);for(;c{let g=Ye(d);const f=s[c],x=d.frame.y+d.frame.height,b=h===u.length-1?s.length-1:r(x,c+1),y=s[b],w=f-g.frame.y;g.frame.y=f,g.frame.height=Math.max(0,y-f),g=Wd(g,w),m.push(g),c=b}),o.push(m),l.push(s[s.length-1]-e)}return{columns:o,columnHeights:l}}const k2=[{item:"anweisung",label:"Anweisung"},{item:"verzweigung",label:"Verzweigung"},{item:"fallauswahl",label:"Fallauswahl"},{item:"forZaehlSchleife",label:"For-Schleife"},{item:"whileSchleife",label:"While-Schleife"},{item:"doUntilSchleife",label:"Do-while-Schleife"},{item:"endlosschleife",label:"Endlosschleife"},{item:"aufruf",label:"Aufruf"},{item:"aussprung",label:"Aussprung"}];function $0(i){const e=en;switch(i){case"anweisung":return ze(I.anweisung);case"verzweigung":return ze(I.verzweigung,{cases:[{name:"true",elements:[e()]},{name:"false",elements:[e()]}]});case"fallauswahl":return ze(I.fallauswahl,{cases:[{name:"1",elements:[e()]},{name:"2",elements:[e()]},{name:"default",elements:[e()]}]});case"forZaehlSchleife":return ze(I.forSchleife,{textLines:["","",""],loopBody:[e()]});case"whileSchleife":return ze(I.whileSchleife,{loopBody:[e()]});case"doUntilSchleife":return ze(I.doUntilSchleife,{loopBody:[e()]});case"endlosschleife":return ze(I.endlosschleife,{loopBody:[e()]});case"aussprung":return ze(I.aussprung);case"aufruf":return ze(I.aufruf)}}function qa(i){if(i==="")return"-1;";let e="";for(const t of i)e+=t.codePointAt(0)+";";return e}function so(i){const e=i.split(";").filter(n=>n!=="");if(e.length===1&&e[0]==="-1")return"";let t="";for(const n of e){if(!/^[+-]?\d+$/.test(n))continue;const a=Number(n);a!==-1&&(a<0||a>1114111||a>=55296&&a<=57343||(t+=String.fromCodePoint(a)))}return t}class Y0 extends Error{}function Bl(i){const e=new DOMParser().parseFromString(i,"application/xml");if(e.getElementsByTagName("parsererror").length>0)throw new Y0("Could not read XML.");const t=e.documentElement;if(!t||t.tagName!=="struktogramm")throw new Y0("Invalid XML: root element is not .");const n={caption:K0(t,"caption")??"",elements:oo(t)},a=K0(t,"fontfamily");a!==void 0&&(n.fontFamily=a);const s=ni(t,"fontsize");s!==void 0&&(n.fontSize=s);const r=ni(t,"fontstyle");return r!==void 0&&(n.fontStyle=r),t.getAttribute("pseudocode")==="true"&&(n.pseudocode=!0),n}function o1(i){const e=(n,a)=>a===void 0?"":` ${n}="${Ed(a)}"`;let t=` +var Uf=Object.defineProperty;var $f=(i,e,t)=>e in i?Uf(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var v=(i,e,t)=>$f(i,typeof e!="symbol"?e+"":e,t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))n(a);new MutationObserver(a=>{for(const s of a)if(s.type==="childList")for(const r of s.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&n(r)}).observe(document,{childList:!0,subtree:!0});function t(a){const s={};return a.integrity&&(s.integrity=a.integrity),a.referrerPolicy&&(s.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?s.credentials="include":a.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function n(a){if(a.ep)return;a.ep=!0;const s=t(a);fetch(a.href,s)}})();const Yf="modulepreload",Xf=function(i,e){return new URL(i,e).href},J0={},q=function(e,t,n){let a=Promise.resolve();if(t&&t.length>0){let r=function(m){return Promise.all(m.map(c=>Promise.resolve(c).then(d=>({status:"fulfilled",value:d}),d=>({status:"rejected",reason:d}))))};const o=document.getElementsByTagName("link"),l=document.querySelector("meta[property=csp-nonce]"),u=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));a=r(t.map(m=>{if(m=Xf(m,n),m in J0)return;J0[m]=!0;const c=m.endsWith(".css"),d=c?'[rel="stylesheet"]':"";if(!!n)for(let f=o.length-1;f>=0;f--){const x=o[f];if(x.href===m&&(!c||x.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${m}"]${d}`))return;const g=document.createElement("link");if(g.rel=c?"stylesheet":Yf,c||(g.as="script"),g.crossOrigin="",g.href=m,u&&g.setAttribute("nonce",u),document.head.appendChild(g),c)return new Promise((f,x)=>{g.addEventListener("load",f),g.addEventListener("error",()=>x(new Error(`Unable to preload CSS for ${m}`)))})}))}function s(r){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=r,window.dispatchEvent(o),!o.defaultPrevented)throw r}return a.then(r=>{for(const o of r||[])o.status==="rejected"&&s(o.reason);return e().catch(s)})};var k=(i=>(i[i.anweisung=0]="anweisung",i[i.verzweigung=1]="verzweigung",i[i.fallauswahl=2]="fallauswahl",i[i.forSchleife=3]="forSchleife",i[i.whileSchleife=4]="whileSchleife",i[i.doUntilSchleife=5]="doUntilSchleife",i[i.endlosschleife=6]="endlosschleife",i[i.aussprung=7]="aussprung",i[i.aufruf=8]="aufruf",i[i.leerElement=9]="leerElement",i))(k||{});function Kf(i){return i===3||i===4||i===5||i===6}function e2(i){return i===1||i===2}function ze(i,e={}){return{type:i,zoomX:0,zoomY:0,textLines:[""],...e}}function t2(i){const e=i.textLines;if(!e.every(t=>t.trim()===""))switch(i.type){case k.forSchleife:return e.length<=1?e:[i2(e)];case k.verzweigung:return Vi("if",e);case k.whileSchleife:return Vi("while",e);case k.doUntilSchleife:return Vi("while",n2(e));case k.fallauswahl:return Vi("switch",e);default:return e}}function n2(i){if(i.length===0)return i;const e=i[0].trim(),t=e.toLowerCase(),n=[...i];if(t==="until")n[0]="";else if(t.startsWith("until "))n[0]=e.slice(6).trim();else if(t.startsWith("until("))n[0]=e.slice(5);else return i;return n}function R0(i){const e=new Set(["if","for","while","until","switch"]),t=["input:","output:","print:"],n=i.trim(),a=n.toLowerCase();for(const o of t){if(a===o)return{keyword:n,rest:""};if(a.startsWith(o+" "))return{keyword:n.slice(0,o.length),rest:n.slice(o.length).trim()}}const s=n.indexOf(" ");if(s<0)return;const r=n.slice(0,s);if(e.has(r.toLowerCase()))return{keyword:r,rest:n.slice(s+1).trim()}}function Vi(i,e){if(e.length===0)return e;const t=e[0].trim(),n=t.toLowerCase();if(n===i||n.startsWith(i+" "))return e;const a=[...e];return a[0]=i+" "+t,a}function i2(i){let e=[...i];for(;e.length<3;)e.push("");e=e.slice(0,3);const t=a=>{let s=a.trim();for(;s.endsWith(";");)s=s.slice(0,-1).trim();return s},n=e.map(t).join("; ").trim();return n===""?"for":"for "+n}const Od={[k.anweisung]:"Anweisung",[k.verzweigung]:"Bedingung",[k.fallauswahl]:"Fallauswahl",[k.forSchleife]:"for 0 < i < anzahl",[k.whileSchleife]:"while …",[k.doUntilSchleife]:"while …",[k.endlosschleife]:"endless",[k.aussprung]:"break",[k.aufruf]:"Aufruf()",[k.leerElement]:"ø"};function a2(i){Object.assign(Od,i)}function Ol(i){return t2(i)??[Od[i.type]]}class Ce extends Error{}const hn=i=>structuredClone(i);function en(){return ze(k.anweisung,{textLines:["ø"]})}function s2(){return{caption:"",elements:[en()]}}function Al(i){if(i.type===k.leerElement)return!0;if(i.type===k.anweisung){const e=i.textLines;return e.length===0||e.length===1&&e[0]==="ø"}return!1}function wn(i,e){const t=Nt(i,e);return t!==void 0&&Al(t)}function Zi(i,e){if(e.length===0)throw new Ce("Invalid element path.");const[t,...n]=e;if(t<0||t>=i.length)throw new Ce("Invalid element path.");if(n.length===0)return{list:i,index:t};const[a,...s]=n;if(s.length===0)throw new Ce("Invalid element path.");return Zi(Ad(i[t],a),s)}function Ad(i,e){if(Kf(i.type)){if(e!==0||!i.loopBody)throw new Ce("Invalid element path.");return i.loopBody}if(e2(i.type)){if(!i.cases||e<0||e>=i.cases.length)throw new Ce("Invalid element path.");return i.cases[e].elements}throw new Ce("Invalid element path.")}function At(i,e){const{list:t,index:n}=Zi(i.elements,e);return t[n]}function Nt(i,e){try{return At(i,e)}catch{return}}function Pn(i,e,t){const n=hn(i),{list:a,index:s}=Zi(n.elements,e);return a[s]=hn(t),n}function Qi(i,e,t){const n=hn(At(i,e));return n.textLines=t.length===0?[""]:t,Pn(i,e,n)}function rr(i,e){return e.length===0?!1:e.length===1&&i.elements.length===1?!wn(i,e):Nt(i,e)!==void 0}function fi(i,e){const t=hn(i),{list:n,index:a}=Zi(t.elements,e);if(e.length===1&&n.length===1){if(Al(n[0]))throw new Ce("The last root element cannot be deleted.");return n[0]=en(),t}return n.splice(a,1),e.length>1&&n.length===0&&n.push(en()),t}function ti(i,e,t,n){const a=hn(i);let s;if(e.length===0)s=a.elements;else{const r=e.slice(0,-1),o=e[e.length-1],{list:l,index:u}=Zi(a.elements,r);s=Ad(l[u],o)}return s.splice(Math.min(Math.max(0,t),s.length),0,hn(n)),a}function Pd(i,e,t){if(t.length===0)throw new Ce("Invalid element path.");return ti(i,t.slice(0,-1),t[t.length-1],e)}function io(i,e,t){if(t.length===0)throw new Ce("Invalid element path.");return ti(i,t.slice(0,-1),t[t.length-1]+1,e)}function Pl(i,e){return i.lengthe[n]===t)}function jl(i,e){if(e.length===0)return i;const t=e[e.length-1],n=e.slice(0,-1);if(i.length<=n.length||!n.every((r,o)=>i[o]===r))return i;const a=n.length;if(i[a]<=t)return i;const s=[...i];return s[a]-=1,s}const Cl=(i,e)=>i.length===e.length&&i.every((t,n)=>t===e[n]);function r2(i,e,t){if(Cl(e,t))return i;if(Pl(e,t))throw new Ce("Invalid element path.");const n=At(i,e),a=fi(i,e);return Pd(a,n,jl(t,e))}function o2(i,e,t){if(Cl(e,t))return i;if(Pl(e,t))throw new Ce("Invalid element path.");const n=At(i,e),a=fi(i,e);return io(a,n,jl(t,e))}function l2(i,e,t){if(!wn(i,t))throw new Ce("Invalid element path.");if(Cl(e,t))return i;if(Pl(e,t))throw new Ce("Invalid element path.");const n=At(i,e),a=fi(i,e);return Pn(a,jl(t,e),n)}function u2(i,e){const t=hn(At(i,e)),n=t.cases;if(t.type!==k.fallauswahl||!n||n.length===0)throw new Ce("Invalid element path.");const a=n[n.length-1].name.toLowerCase()==="default",s=a?n.length-1:n.length,r=String(a?n.length:n.length+1);return n.splice(s,0,{name:r,elements:[en()]}),{doc:Pn(i,e,t),path:[...e,s,0]}}function m2(i,e,t){const n=hn(At(i,e)),a=n.cases;if(n.type!==k.fallauswahl||!a)throw new Ce("Invalid element path.");if(a.length<=2)throw new Ce("A switch needs at least two cases.");if(t<0||t>=a.length)throw new Ce("Invalid element path.");a.splice(t,1);const s=Math.min(t,a.length-1);return{doc:Pn(i,e,n),path:[...e,s,0]}}function c2(i,e,t,n){const a=hn(At(i,e)),s=a.cases;if(a.type!==k.fallauswahl||!s)throw new Ce("Invalid element path.");if(t<0||t>=s.length)throw new Ce("Invalid element path.");const r=n.trim();if(r==="")throw new Ce("Invalid element path.");return s[t].name=r,Pn(i,e,a)}function d2(i,e){var t;if(!(!i||i.length===0))for(let n=i.length;n>=1;n--){const a=i.slice(0,n);if(((t=Nt(e,a))==null?void 0:t.type)===k.fallauswahl)return a}}function h2(i,e){if(!(!i||i.length<=e.length))return i[e.length]}function or(i,e){if(e.elements.length!==0)return!i||!Nt(e,i)?[0]:i}const jd=i=>i!==void 0&&/\s/.test(i);function Qa(i){const e=i.trim().toLowerCase();return e.startsWith("input:")?"input":e.startsWith("output:")||e.startsWith("print:")?"output":"statement"}function g2(i){const e=i.trim(),t=e.toLowerCase();return t.startsWith("input:")?e.slice(6).trim():t.startsWith("output:")?e.slice(7).trim():t.startsWith("print:")?e.slice(6).trim():i}function G0(i,e){const t=e.trim();return t===""?`${i} `:`${i} ${t}`}function p2(i,e){const t=g2(e);switch(i){case"statement":return t;case"input":return G0("input:",t);case"output":return G0("output:",t)}}const ja=i=>jd(i[0])?i.slice(1):i;function f2(i){const e=i.replace(/^\s+/,""),t=e.toLowerCase();return t.startsWith("input:")?ja(e.slice(6)):t.startsWith("output:")?ja(e.slice(7)):t.startsWith("print:")?ja(e.slice(6)):i}function H0(i,e){const t=e.replace(/^\s+/,"");if(!t.toLowerCase().startsWith(i.toLowerCase()))return e;const n=t.slice(i.length);if(!(n===""||jd(n[0])||n[0]==="("))return e;const a=ja(n);return a.startsWith("(")&&a.endsWith(")")&&a.length>=2?a.slice(1,-1):a}function V0(i,e){if(i==="input:"||i==="output:")return f2(e);const t=H0(i,e);if(i==="while"&&t===e){const n=H0("until",e);if(n!==e)return n}return t}function x2(i,e){return e===""?`${i} `:`${i} ${e}`}function Cd(i){return i.replace(/[“”„«»]/g,'"').replace(/[’‘‚´]/g,"'")}function Q0(i){const e=i.length===0?[""]:i.slice(0,3);for(;e.length<3;)e.push("");return e}function b2(i){let e=Cd(i);for(;;){const t=e.trim();if(!t.endsWith(";"))return e;e=t.slice(0,-1).trim()}}const Ls='system-ui, -apple-system, "Segoe UI", Roboto, sans-serif';function y2(i,e){return`${e==="bold"?700:500} ${i}px ${Ls}`}const Bd=(i,e,t)=>[...i].length*e*(t==="bold"?.68:.62);function v2(){if(typeof document>"u"||!document.body)return;const i="http://www.w3.org/2000/svg",e=document.createElementNS(i,"svg");e.setAttribute("aria-hidden","true"),e.setAttribute("width","0"),e.setAttribute("height","0"),e.style.cssText="position:absolute;left:-9999px;top:0;visibility:hidden;overflow:hidden";const t=document.createElementNS(i,"text");if(t.setAttribute("font-family",Ls),t.style.whiteSpace="pre",e.append(t),document.body.append(e),typeof t.getComputedTextLength!="function"||typeof t.getBBox!="function"){e.remove();return}if(t.textContent="Mg",t.setAttribute("font-size","20"),!(t.getComputedTextLength()>0)){e.remove();return}return t}let lr;function Dd(){return lr===void 0&&(lr=v2()??null),lr??void 0}function Zd(i,e,t){i.setAttribute("font-size",String(e)),i.setAttribute("font-weight",t==="bold"?"700":"500")}function q0(i,e){const t=`${i}|${e}`;let n=U0.get(t);if(!n){const a=Dd();if(n={ascent:i*.95,descent:i*.24},a){Zd(a,i,e),a.setAttribute("y","0"),a.textContent="Mg";const s=a.getBBox();s.height>0&&(n={ascent:-s.y,descent:s.height+s.y})}U0.set(t,n)}return n}const U0=new Map;function w2(){const i=Dd();if(i){const n=new Map;return(a,s,r)=>{const o=`${s}|${r}|${a}`;let l=n.get(o);return l===void 0&&(Zd(i,s,r),i.textContent=a,l=a===""?0:i.getComputedTextLength(),n.size>2e3&&n.clear(),n.set(o,l)),l}}const e=typeof document<"u"?document.createElement("canvas").getContext("2d"):null;if(!e)return Bd;const t=new Map;return(n,a,s)=>{const r=`${a}|${s}|${n}`;let o=t.get(r);return o===void 0&&(e.font=y2(a,s),o=e.measureText(n).width,t.size>2e3&&t.clear(),t.set(r,o)),o}}const Md={fontSize:15,lineHeight:20,charWidth:7,baseHeaderExtra:20,minSidePadding:42,cellTextInsetY:15,doUntilDoLabelTopInset:2,doUntilFooterTopInset:6,doUntilFooterBottomInset:8};function z2(i){return{...Md,fontSize:14,lineHeight:21,charWidth:5.5*(14/12),baseHeaderExtra:21,minSidePadding:40}}const qi=i=>i===k.forSchleife||i===k.whileSchleife||i===k.doUntilSchleife||i===k.endlosschleife,Ui=i=>i===k.fallauswahl||i===k.verzweigung;function $i(i,e,t,n=0){return{idPath:i,element:e,frame:t,headerBandHeight:n,topBandHeight:0,loopBodyLeadingInset:0,caseColumnFrames:[],children:[]}}function Ye(i){return{...i,frame:{...i.frame}}}class Ld{constructor(e=Md,t=Bd){this.metrics=e,this.measure=t}layout(e,t={left:28,top:28}){const a=this.layoutList(e.elements,t.left,t.top,[]).map(l=>this.stretchLoopBodiesVertically(l));let s=0,r=0;const o=l=>{s=Math.max(s,l.frame.x+l.frame.width),r=Math.max(r,l.frame.y+l.frame.height),l.children.forEach(o)};return a.forEach(o),{canvasSize:{width:s+t.left,height:r+t.top},elements:a}}lineWidth(e){return Math.ceil(this.measure(e,this.metrics.fontSize,"medium"))}lineWidthBold(e){return Math.ceil(this.measure(e,this.metrics.fontSize,"bold"))}layoutList(e,t,n,a){let s=[],r=n;e.forEach((l,u)=>{const m=this.layoutElement(l,t,r,[...a,u]);s.push(m),r+=m.frame.height});const o=Math.max(0,...s.map(l=>l.frame.width));return o>0&&(s=s.map(l=>this.stretchNodeTreeToWidth(l,o))),s}stretchMultiwayNodeToWidth(e,t){const n=Ye(e),a=n.frame.width;if(!(a>0)||n.caseColumnFrames.length===0)return n;const s=t/a;n.frame.width=t;let r=n.frame.x;const o=n.caseColumnFrames.map(l=>{const u=l.width*s,m={x:r,y:l.y,width:u,height:l.height};return r+=u,m});return n.caseColumnFrames=o,n.dividerX=o.length>0?o[o.length-1].x:n.frame.x+t,n.columns&&n.columns.length===o.length&&(n.columns=n.columns.map((l,u)=>{const m=o[u];return l.map(c=>{const d=Ye(c);return d.frame.x=m.x,d.frame.width=m.width,this.stretchDescendantsWidths(d,m.width)})}),n.children=n.columns.flat()),n}stretchLoopChildren(e,t){const n=this.effectiveLoopBodyLeading(e),a=Math.max(0,t-n);e.children=e.children.map(s=>{const r=Ye(s);return r.frame.x=e.frame.x+n,r.frame.width=a,this.stretchDescendantsWidths(r,a)})}stretchNodeTreeToWidth(e,t){const n=Ye(e);return n.frame.width>0?Ui(n.element.type)&&n.caseColumnFrames.length>0?this.stretchMultiwayNodeToWidth(n,t):(n.frame.width=t,qi(n.element.type)?this.stretchLoopChildren(n,t):n.children=n.children.map(s=>this.stretchDescendantsWidths(s,t)),n):n}stretchDescendantsWidths(e,t){let n=Ye(e);return Ui(n.element.type)?n=this.stretchNodeTreeToWidth(n,t):qi(n.element.type)?(n.frame.width=t,this.stretchLoopChildren(n,t)):(n.frame.width=t,n.children=n.children.map(a=>this.stretchDescendantsWidths(a,t))),n}stretchLoopBodiesVertically(e){const t=Ye(e);if(t.columns&&t.columns.length>0)return t.columns=t.columns.map(s=>s.map(r=>this.stretchLoopBodiesVertically(r))),t.children=t.columns.flat(),t;t.children=t.children.map(s=>this.stretchLoopBodiesVertically(s));const n=s=>s===k.anweisung||s===k.leerElement||s===k.aufruf||s===k.aussprung||qi(s);let a;switch(t.element.type){case k.forSchleife:case k.whileSchleife:case k.endlosschleife:{const s=t.element.type===k.endlosschleife?40:0;a=t.frame.y+t.frame.height-s;break}case k.doUntilSchleife:a=t.frame.y+t.frame.height-t.headerBandHeight;break}if(a!==void 0&&t.children.length>0){const s=t.children.length-1;let r=Ye(t.children[s]);const o=a-(r.frame.y+r.frame.height);o>.5&&n(r.element.type)&&(r.frame.height+=o,r=this.stretchLoopBodiesVertically(r),t.children=[...t.children.slice(0,s),r])}return t}headerHeight(e){const t=this.metrics,n=Math.max(1,e.textLines.length);if(e.type===k.doUntilSchleife)return t.doUntilFooterTopInset+n*t.lineHeight+t.doUntilFooterBottomInset+e.zoomY;let a;switch(e.type){case k.fallauswahl:a=40;break;case k.verzweigung:a=20;break;case k.forSchleife:case k.whileSchleife:case k.endlosschleife:a=t.baseHeaderExtra+4;break;default:a=14}return a+n*t.lineHeight+e.zoomY}doUntilBodyLeadingInset(){return Math.max(20,this.lineWidthBold("do")+12)}effectiveLoopBodyLeading(e){return e.element.type===k.doUntilSchleife?e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:this.doUntilBodyLeadingInset():20}horizontalPaddingInsideCell(e){return Ui(e)?Math.max(100,this.metrics.minSidePadding*2.45):this.metrics.minSidePadding}minWidth(e){const t=e.textLines.length===0?0:Math.max(...e.textLines.map(s=>this.lineWidth(s)));let n=t+e.zoomX+this.horizontalPaddingInsideCell(e.type);if(e.type===k.aufruf){const s=Math.max(68,this.metrics.minSidePadding*1.7),r=Math.max(8,this.metrics.minSidePadding*.2);n=Math.max(n,t+e.zoomX+s+r)}const a=e.type===k.leerElement?76:e.type===k.aufruf?104:72;return Math.max(a,n)}layoutElement(e,t,n,a){if(Ui(e.type))return this.layoutMultiway(e,t,n,a);if(qi(e.type))return this.layoutLoop(e,t,n,a);const s=this.headerHeight(e);return $i(a,e,{x:t,y:n,width:this.minWidth(e),height:s},s)}layoutLoop(e,t,n,a){const s=x=>x.reduce((b,y)=>b+y.frame.height,0),r=x=>Math.max(0,...x.map(b=>b.frame.width)),o=e.loopBody??[];if(e.type===k.doUntilSchleife){const x=this.doUntilBodyLeadingInset(),b=e.zoomY,y=this.headerHeight(e),w=this.layoutList(o,t+x,n+b,[...a,0]),I=Math.max(this.minWidth(e),r(w)+x),z=s(w)+y+b,S=Math.max(0,I-x),_=$i(a,e,{x:t,y:n,width:I,height:z},y);return _.topBandHeight=b,_.loopBodyLeadingInset=x,_.children=w.map(T=>{const j=Ye(T);return j.frame.x=t+x,j.frame.width=S,this.stretchDescendantsWidths(j,S)}),_}const l=20,u=this.headerHeight(e),m=e.type===k.endlosschleife?40:0,c=this.layoutList(o,t+l,n+u,[...a,0]),d=Math.max(this.minWidth(e),r(c)+l),h=u+m+s(c),g=Math.max(0,d-l),f=$i(a,e,{x:t,y:n,width:d,height:h},u);return f.children=c.map(x=>{const b=Ye(x);return b.frame.x=t+l,b.frame.width=g,this.stretchDescendantsWidths(b,g)}),f}layoutMultiway(e,t,n,a){const s=this.headerHeight(e),r=e.cases??[],o=Math.max(1,r.length),l=Math.max(this.minWidth(e)/o,132);let u=[],m=[],c=0,d=0;if(r.forEach((x,b)=>{const y=t+c,w=this.layoutList(x.elements,y,n+s,[...a,b]),I=Math.max(0,...w.map(_=>_.frame.width));let z;e.type===k.verzweigung&&o===2?z=Math.max(I,(b===0?"true":"false").length*this.metrics.charWidth+24):z=Math.max(l,I);const S=w.reduce((_,T)=>_+T.frame.height,0);d=Math.max(d,S),u.push({x:y,y:n+s,width:z,height:S}),m.push(w.map(_=>{const T=Ye(_);return T.frame.x=y,T.frame.width=z,this.stretchDescendantsWidths(T,z)})),c+=z}),e.type===k.verzweigung&&o===2&&u.length===2){const x=Math.max(u[0].width,u[1].width),b=t,y=t+x,w=y-u[1].x;u[0]={...u[0],x:b,width:x},u[1]={...u[1],x:y,width:x},c=x*2,m[0]=m[0].map(I=>{const z=Ye(I);return z.frame.x=b,z.frame.width=x,this.stretchDescendantsWidths(z,x)}),m[1]=m[1].map(I=>{const z=ao(I,w);return z.frame.width=x,this.stretchDescendantsWidths(z,x)})}if(m.length>0){const x=I2(m,n+s);m=x.columns.map(b=>b.map(y=>this.stretchLoopBodiesVertically(y)));for(let b=0;b0?Math.max(...x.columnHeights):d}let h=Math.max(c,this.minWidth(e));if(c>.5&&h>c+.5){const x=h/c;let b=t;const y=[],w=[];u.forEach((I,z)=>{const S=I.width*x;w.push(m[z].map(_=>{const T=Ye(_);return T.frame.x=b,T.frame.width=S,this.stretchDescendantsWidths(T,S)})),y.push({x:b,y:I.y,width:S,height:I.height}),b+=S}),u=y,m=w,c=b-t,h=c}const g=u.length>0?u[u.length-1].width:c/o,f=$i(a,e,{x:t,y:n,width:h,height:s+d},s);return f.caseColumnFrames=u,f.dividerX=u.length>0?u[u.length-1].x:t+c-g,f.dividerYInset=e.type===k.fallauswahl?-20:0,f.columns=m,f.children=m.flat(),f}}function Wd(i,e){if(Math.abs(e)<=1e-4)return i;const t=Ye(i),n=a=>{const s=Ye(a);return s.frame.y+=e,Wd(s,e)};return t.columns?(t.columns=t.columns.map(a=>a.map(n)),t.children=t.columns.flat()):t.children=t.children.map(n),t}function ao(i,e){if(Math.abs(e)<=1e-4)return i;const t=Ye(i);return t.frame.x+=e,t.columns?(t.columns=t.columns.map(n=>n.map(a=>ao(a,e))),t.children=t.columns.flat()):t.children=t.children.map(n=>ao(n,e)),t}function I2(i,e){if(i.length<2)return{columns:i,columnHeights:i.map(u=>u.reduce((m,c)=>m+c.frame.height,0))};const t=.5,n=[e];for(const u of i)for(const m of u)n.push(m.frame.y+m.frame.height);const a=Math.max(...n);n.push(a),n.sort((u,m)=>u-m);let s=[];for(const u of n)s.length>0&&Math.abs(u-s[s.length-1])<=t||s.push(u);(s.length===0||Math.abs(s[0]-e)>t)&&s.unshift(e),s.length===0?s=[e,a]:s[s.length-1]{let c=Math.max(0,m);for(;c{let g=Ye(d);const f=s[c],x=d.frame.y+d.frame.height,b=h===u.length-1?s.length-1:r(x,c+1),y=s[b],w=f-g.frame.y;g.frame.y=f,g.frame.height=Math.max(0,y-f),g=Wd(g,w),m.push(g),c=b}),o.push(m),l.push(s[s.length-1]-e)}return{columns:o,columnHeights:l}}const k2=[{item:"anweisung",label:"Anweisung"},{item:"verzweigung",label:"Verzweigung"},{item:"fallauswahl",label:"Fallauswahl"},{item:"forZaehlSchleife",label:"For-Schleife"},{item:"whileSchleife",label:"While-Schleife"},{item:"doUntilSchleife",label:"Do-while-Schleife"},{item:"endlosschleife",label:"Endlosschleife"},{item:"aufruf",label:"Aufruf"},{item:"aussprung",label:"Aussprung"}];function $0(i){const e=en;switch(i){case"anweisung":return ze(k.anweisung);case"verzweigung":return ze(k.verzweigung,{cases:[{name:"true",elements:[e()]},{name:"false",elements:[e()]}]});case"fallauswahl":return ze(k.fallauswahl,{cases:[{name:"1",elements:[e()]},{name:"2",elements:[e()]},{name:"default",elements:[e()]}]});case"forZaehlSchleife":return ze(k.forSchleife,{textLines:["","",""],loopBody:[e()]});case"whileSchleife":return ze(k.whileSchleife,{loopBody:[e()]});case"doUntilSchleife":return ze(k.doUntilSchleife,{loopBody:[e()]});case"endlosschleife":return ze(k.endlosschleife,{loopBody:[e()]});case"aussprung":return ze(k.aussprung);case"aufruf":return ze(k.aufruf)}}function qa(i){if(i==="")return"-1;";let e="";for(const t of i)e+=t.codePointAt(0)+";";return e}function so(i){const e=i.split(";").filter(n=>n!=="");if(e.length===1&&e[0]==="-1")return"";let t="";for(const n of e){if(!/^[+-]?\d+$/.test(n))continue;const a=Number(n);a!==-1&&(a<0||a>1114111||a>=55296&&a<=57343||(t+=String.fromCodePoint(a)))}return t}class Y0 extends Error{}function Bl(i){const e=new DOMParser().parseFromString(i,"application/xml");if(e.getElementsByTagName("parsererror").length>0)throw new Y0("Could not read XML.");const t=e.documentElement;if(!t||t.tagName!=="struktogramm")throw new Y0("Invalid XML: root element is not .");const n={caption:K0(t,"caption")??"",elements:oo(t)},a=K0(t,"fontfamily");a!==void 0&&(n.fontFamily=a);const s=ni(t,"fontsize");s!==void 0&&(n.fontSize=s);const r=ni(t,"fontstyle");return r!==void 0&&(n.fontStyle=r),t.getAttribute("pseudocode")==="true"&&(n.pseudocode=!0),n}function o1(i){const e=(n,a)=>a===void 0?"":` ${n}="${Ed(a)}"`;let t=` `;t+=" `;for(const n of i.elements)t+=ro(n," ");return t+=` `,t}function ro(i,e){let t=`${e} @@ -8,7 +8,7 @@ var Uf=Object.defineProperty;var $f=(i,e,t)=>e in i?Uf(i,e,{enumerable:!0,config `}if(i.cases)for(const n of i.cases){t+=`${e} `;for(const a of n.elements)t+=ro(a,e+" ");t+=`${e} `}return t+=`${e} -`,t}function Ed(i){return i.replace(/&/g,"&").replace(/"/g,""").replace(//g,">")}function S2(i){return i.replace(/&/g,"&").replace(//g,">")}function X0(i){return String(i.a<<24|i.r<<16|i.g<<8|i.b|0)}function Ca(i,e){return Array.from(i.children).filter(t=>t.tagName===e)}function oo(i){const e=[];for(const t of Ca(i,"strelem")){const n=_2(t);n&&e.push(n)}return e}function _2(i){const e=ni(i,"typ");if(e===void 0||I[e]===void 0)return;const t={type:e,zoomX:ni(i,"zx")??0,zoomY:ni(i,"zy")??0,textLines:Ca(i,"text").map(o=>so((o.textContent??"").trim()))},n=eu(i.getAttribute("textcolor"));n&&(t.textColor=n);const a=eu(i.getAttribute("bgcolor"));a&&(t.backgroundColor=a),t.textLines.length===0&&(t.textLines=[""]);const s=Ca(i,"schleifeninhalt")[0];if(s){const o=oo(s);o.length>0&&(t.loopBody=o)}const r=Ca(i,"fall").map(o=>({name:so(o.getAttribute("fallname")??""),elements:oo(o)}));return r.length>0&&(t.cases=r),t}function K0(i,e){const t=i.getAttribute(e);return t===null?void 0:so(t)}function ni(i,e){const t=i.getAttribute(e);if(!(t===null||!/^[+-]?\d+$/.test(t)))return Number(t)}function eu(i){if(i===null||!/^[+-]?\d+$/.test(i))return;const e=Number(i);if(e<-2147483648||e>2147483647)return;const t=e>>>0;return{a:t>>>24&255,r:t>>>16&255,g:t>>>8&255,b:t&255}}const T2="http://www.w3.org/2000/svg",Be={diagramLineWidth:2,outerFrameLineWidth:2,selectionLineWidth:3.5,canvasOuterMargin:16,cellTextInsetX:18,cellTextInsetY:15,multiHeaderFirstLineY:14,branchLabelInsetX:10,fallauswahlCaseLabelBand:26,callSideBarInset:14,callTextInsetFromSideBar:20,loopBodyLeadingInset:20};function Nd(i){switch(i){case I.forSchleife:case I.whileSchleife:case I.doUntilSchleife:case I.endlosschleife:return"loop";case I.verzweigung:case I.fallauswahl:return"if";default:return}}function ye(i,e={}){const t=document.createElementNS(T2,i);for(const[n,a]of Object.entries(e))t.setAttribute(n,String(a));return t}class Fd{constructor(e,t){v(this,"usesSimulationHighlight",!1);v(this,"fillsSelection",!1);this.metrics=e,this.measure=t}get lineHeight(){return this.metrics.lineHeight}get fontSize(){return this.metrics.fontSize}render(e,t,n,a=Be.canvasOuterMargin){const s=ye("svg",{width:t.width,height:t.height,viewBox:`0 0 ${t.width} ${t.height}`,"font-family":Ls,"font-size":this.fontSize,class:"diagram"});s.append(ye("rect",{x:0,y:0,width:t.width,height:t.height,fill:"#fafafa"}));const r=a;s.append(ye("rect",{x:r,y:r,width:e.canvasSize.width-2*r-1,height:e.canvasSize.height-2*r-1,fill:"none",stroke:"black","stroke-width":Be.outerFrameLineWidth}));const o=ye("g");for(const l of e.elements)this.drawNode(l,o,n,{},void 0,"method");return s.append(o),s}line(e,t){e.append(ye("polyline",{points:t.map(n=>n.join(",")).join(" "),fill:"none",stroke:"black","stroke-width":Be.diagramLineWidth,"stroke-linejoin":"miter"}))}strokeCellBorder(e,t,n){const a=t.x,s=t.y,r=t.x+t.width,o=t.y+t.height;if(!n.top&&!n.left&&!n.bottom&&!n.right){e.append(ye("rect",{x:a,y:s,width:t.width,height:t.height,fill:"none",stroke:"black","stroke-width":Be.diagramLineWidth}));return}n.top||this.line(e,[[a,s],[r,s]]),n.right||this.line(e,[[r,s],[r,o]]),n.bottom||this.line(e,[[r,o],[a,o]]),n.left||this.line(e,[[a,o],[a,s]])}textWidth(e){const t=R0(e);return t?this.measure(t.keyword,this.fontSize,"bold")+(t.rest===""?0:this.measure(" "+t.rest,this.fontSize,"medium")):this.measure(e,this.fontSize,"medium")}drawKeywordLine(e,t,n,a){const s=ye("text",{x:n,y:a+q0(this.fontSize,"medium").ascent,"font-weight":500});s.style.whiteSpace="pre";const r=R0(t);if(r){const o=ye("tspan",{"font-weight":700});if(o.textContent=r.keyword,s.append(o),r.rest!==""){const l=ye("tspan",{});l.textContent=" "+r.rest,s.append(l)}}else s.textContent=t;e.append(s)}drawLabel(e,t,n,a,s,r){const o=q0(this.fontSize,s?"bold":"medium"),l=ye("text",{x:n,y:r==="top"?a+o.ascent:a-o.descent,"font-weight":s?700:500});l.style.whiteSpace="pre",l.textContent=t,e.append(l)}roofMetrics(e,t,n,a){const s=t.y+n,r=e.dividerYInset??0,o=12,l=Math.max(e.element.textLines.length,1)*this.lineHeight,u=t.y+Be.multiHeaderFirstLineY;if(e.element.type===I.fallauswahl){const c=Math.max(Be.fallauswahlCaseLabelBand,this.lineHeight+10),d=s-c,h=Math.min(s+r,d-8),g=Math.max(h,u+l+6);return{apex:{x:a,y:g},maxTextBottom:d-o,roofBottom:s}}const m={x:a,y:s+r};return{apex:m,maxTextBottom:m.y-o,roofBottom:s}}drawNode(e,t,n,a,s,r){var T;const o=e.frame,l=e.element,u=o.x+o.width,m=o.y+o.height,c=l.type===I.verzweigung||l.type===I.fallauswahl,d=c?e.headerBandHeight:0,h=n!==void 0&&lo(e.idPath,n),g=Ol(l),f=ye("g",{"data-path":e.idPath.join(",")});t.append(f);const x=this.usesSimulationHighlight,b=l.backgroundColor,y=b&&b.a>0?`rgba(${b.r}, ${b.g}, ${b.b}, ${b.a/255})`:"white",w=h&&(x||this.fillsSelection)?"rgba(199, 230, 255, 0.55)":y,S=Nd(l.type)??r,z=ye("rect",{x:o.x,y:o.y,width:o.width,height:o.height,fill:w});w==="white"&&S&&z.setAttribute("class",`ns-scope ns-scope-${S}`),f.append(z),this.strokeCellBorder(f,o,a);const k=Be.callSideBarInset;if(l.type===I.aufruf?(this.line(f,[[o.x+k,o.y],[o.x+k,m]]),this.line(f,[[u-k,o.y],[u-k,m]])):l.type===I.aussprung&&this.line(f,[[o.x+k,o.y],[o.x,o.y+o.height/2],[o.x+k,m]]),c&&e.dividerX!==void 0){const j=e.dividerX,C=this.roofMetrics(e,o,d,j),P=Math.max(g.length,1)*this.lineHeight,O=o.y+Be.multiHeaderFirstLineY;this.line(f,[[o.x,o.y],[C.apex.x,C.apex.y],[u,o.y]]),l.type===I.fallauswahl&&this.line(f,[[o.x,C.roofBottom],[u,C.roofBottom]]);let L;O+P<=C.maxTextBottom?L=O:L=Math.max(o.y+2,C.maxTextBottom-(Math.max(g.length,1)-1)*this.lineHeight-this.lineHeight),g.forEach((E,Q)=>{const $=this.textWidth(E);let he;if(l.type===I.verzweigung){const Te=o.x+Be.cellTextInsetX,xe=u-$-Be.cellTextInsetX;he=Math.min(Math.max(j-$/2,Te),xe)}else he=o.x+o.width/2-$/2;this.drawKeywordLine(f,E,he,L+Q*this.lineHeight)})}else if(l.type!==I.doUntilSchleife)if(l.type===I.anweisung||l.type===I.aufruf||l.type===I.aussprung){const j=Be.cellTextInsetX;let C=o.x+j,P=u-j;l.type===I.aufruf?(C=o.x+k+Be.callTextInsetFromSideBar,P=u-k-Be.callTextInsetFromSideBar):l.type===I.aussprung&&(C=o.x+k+j);const O=Math.max(0,P-C);let L=o.y+o.height/2-Math.max(1,g.length)*this.lineHeight/2;for(const E of g)this.drawKeywordLine(f,E,C+(O-this.textWidth(E))/2,L),L+=this.lineHeight}else{const j=Math.max(1,g.length)*this.lineHeight;let C=s===I.doUntilSchleife?o.y+o.height/2-j/2:o.y+Be.cellTextInsetY;for(const P of g)this.drawKeywordLine(f,P,o.x+Be.cellTextInsetX,C),C+=this.lineHeight}e.children.forEach((j,C)=>{const P=l.type===I.doUntilSchleife&&C===0?{top:!0,left:!0}:{};this.drawNode(j,t,n,P,l.type,S)});const _=ye("g");if(t.append(_),l.type===I.doUntilSchleife){const j=((T=e.children[0])==null?void 0:T.frame.x)??o.x+(e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:Be.loopBodyLeadingInset);this.drawLabel(_,"do",o.x+4,o.y+this.metrics.doUntilDoLabelTopInset,!0,"top");const C=m-e.headerBandHeight;this.line(_,[[j,C],[u,C]]),this.line(_,[[j,o.y],[j,C]]);let P=C+this.metrics.doUntilFooterTopInset;for(const O of g)this.drawKeywordLine(_,O,o.x+Be.cellTextInsetX,P),P+=this.lineHeight}if(c&&e.dividerX!==void 0&&e.caseColumnFrames.length>1){const j=this.roofMetrics(e,o,d,e.dividerX),C=j.apex;e.caseColumnFrames.forEach((O,L)=>{if(L>=e.caseColumnFrames.length-1)return;const E=O.x+O.width,Q=O2(E,o,C),$=Number.isFinite(Q)?Math.min(Math.max(Q,o.y),m):o.y;this.line(_,[[E,m],[E,$]])});const P=l.cases;if(P&&P.length===e.caseColumnFrames.length){const O=l.type===I.fallauswahl?j.roofBottom-6:o.y+d-8,L=Be.branchLabelInsetX;if(l.type===I.verzweigung&&P.length===2){this.drawLabel(_,"true",o.x+L,O,!0,"bottom");const E=e.caseColumnFrames[1],Q=this.measure("false",this.fontSize,"bold");this.drawLabel(_,"false",E.x+E.width-L-Q,O,!0,"bottom")}else P.forEach((E,Q)=>{const $=e.caseColumnFrames[Q],he=["default","true","false"].includes(E.name.toLowerCase()),Te=this.measure(E.name,this.fontSize,he?"bold":"medium");this.drawLabel(_,E.name,$.x+$.width/2-Te/2,O,he,"bottom")})}}h&&_.append(ye("rect",{x:o.x,y:o.y,width:o.width,height:o.height,class:"selection-frame",fill:"none",stroke:x?"rgba(66, 140, 242, 0.78)":"rgba(0, 122, 255, 0.9)","stroke-width":Be.selectionLineWidth}))}}function O2(i,e,t){const n=e.y;if(i<=t.x){const s=t.x-e.x;return Math.abs(s)<.5?t.y:n+(t.y-n)/s*(i-e.x)}const a=e.x+e.width-t.x;return Math.abs(a)<.5?t.y:t.y+(n-t.y)/a*(i-t.x)}function lo(i,e){return i.length===e.length&&i.every((t,n)=>t===e[n])}function A2(i){const e=[],t=n=>{e.push(n),n.children.forEach(t)};return i.forEach(t),e}function Ua(i){var e,t;return{...i,textLines:Ol(i),loopBody:(e=i.loopBody)==null?void 0:e.map(Ua),cases:(t=i.cases)==null?void 0:t.map(n=>({name:n.name,elements:n.elements.map(Ua)}))}}const P2=[{code:"de",name:"Deutsch"},{code:"en",name:"English"},{code:"es",name:"Español"},{code:"fr",name:"Français"},{code:"it",name:"Italiano"},{code:"pl",name:"Polski"},{code:"tr",name:"Türkçe"},{code:"ko",name:"한국어"},{code:"ja",name:"日本語"},{code:"el",name:"Ελληνικά"},{code:"uk",name:"Українська"},{code:"ar",name:"العربية"},{code:"ru",name:"Русский"},{code:"he",name:"עברית"},{code:"nl",name:"Nederlands"},{code:"sv",name:"Svenska"},{code:"da",name:"Dansk"},{code:"nb",name:"Norsk bokmål"},{code:"zh-Hans",name:"中文(简体)"},{code:"zh-Hant",name:"中文(繁體)"},{code:"pt-PT",name:"Português"},{code:"java",name:"Java (Keywords)"}],Jd=["de","en","pt-PT"],Rd=P2.filter(i=>Jd.includes(i.code)),tu=i=>Jd.includes(i),j2=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ar.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CxCno28C.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/da.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BAutdlBb.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/de.lproj/Localizable.strings":()=>q(()=>import("./Localizable-Dk8F86qS.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/el.lproj/Localizable.strings":()=>q(()=>import("./Localizable-rqA-20hM.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/en.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DBLIUcBd.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/es.lproj/Localizable.strings":()=>q(()=>import("./Localizable-LSTVB2Q5.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/fr.lproj/Localizable.strings":()=>q(()=>import("./Localizable-ByPZS4RL.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/he.lproj/Localizable.strings":()=>q(()=>import("./Localizable-R-16GCrk.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/it.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DXAPah1g.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ja.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CkJEmEEP.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ko.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BudCXCER.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nb.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DSvkBkp-.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nl.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BJ55WGVD.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pl.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BYJK0mdR.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pt-PT.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CHv0OL9S.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ru.lproj/Localizable.strings":()=>q(()=>import("./Localizable-1QZ0wfvJ.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/sv.lproj/Localizable.strings":()=>q(()=>import("./Localizable-M33nNbEe.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/tr.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BM86Igqt.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/uk.lproj/Localizable.strings":()=>q(()=>import("./Localizable-UGog_aku.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hans.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CaVEL1es.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hant.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DqIDp_hh.js"),[],import.meta.url).then(i=>i.default)}),Gd=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/Java.strings":()=>q(()=>import("./Java-Bpx1Vwvg.js"),[],import.meta.url).then(i=>i.default)}),C2=Object.assign({"../i18n/ar.strings":()=>q(()=>import("./ar-Ce_JBvN0.js"),[],import.meta.url).then(i=>i.default),"../i18n/da.strings":()=>q(()=>import("./da-DECOxrcR.js"),[],import.meta.url).then(i=>i.default),"../i18n/de.strings":()=>q(()=>import("./de-aPa6h38I.js"),[],import.meta.url).then(i=>i.default),"../i18n/el.strings":()=>q(()=>import("./el-yeMMlSVC.js"),[],import.meta.url).then(i=>i.default),"../i18n/en.strings":()=>q(()=>import("./en-CZyy4vg0.js"),[],import.meta.url).then(i=>i.default),"../i18n/es.strings":()=>q(()=>import("./es-ha3UN8DQ.js"),[],import.meta.url).then(i=>i.default),"../i18n/fr.strings":()=>q(()=>import("./fr-UiUxTyGK.js"),[],import.meta.url).then(i=>i.default),"../i18n/he.strings":()=>q(()=>import("./he-D_LHtXfc.js"),[],import.meta.url).then(i=>i.default),"../i18n/it.strings":()=>q(()=>import("./it-Bxp07svi.js"),[],import.meta.url).then(i=>i.default),"../i18n/ja.strings":()=>q(()=>import("./ja-9S_323Dj.js"),[],import.meta.url).then(i=>i.default),"../i18n/ko.strings":()=>q(()=>import("./ko-DHMRauQa.js"),[],import.meta.url).then(i=>i.default),"../i18n/nb.strings":()=>q(()=>import("./nb-Cr772wdv.js"),[],import.meta.url).then(i=>i.default),"../i18n/nl.strings":()=>q(()=>import("./nl-CiVlWKIy.js"),[],import.meta.url).then(i=>i.default),"../i18n/pl.strings":()=>q(()=>import("./pl-B4o_YjNG.js"),[],import.meta.url).then(i=>i.default),"../i18n/pt-PT.strings":()=>q(()=>import("./pt-PT-BcL3wukx.js"),[],import.meta.url).then(i=>i.default),"../i18n/ru.strings":()=>q(()=>import("./ru-DLZRltoa.js"),[],import.meta.url).then(i=>i.default),"../i18n/sv.strings":()=>q(()=>import("./sv-IXV83uxu.js"),[],import.meta.url).then(i=>i.default),"../i18n/tr.strings":()=>q(()=>import("./tr-DZP25RUK.js"),[],import.meta.url).then(i=>i.default),"../i18n/uk.strings":()=>q(()=>import("./uk-F1BqsLKX.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hans.strings":()=>q(()=>import("./zh-Hans-p7zVv8W8.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hant.strings":()=>q(()=>import("./zh-Hant-Dxf58hMr.js"),[],import.meta.url).then(i=>i.default)});function Ba(i,e){var t;return(t=Object.entries(i).find(([n])=>n.endsWith(e)))==null?void 0:t[1]}function Hd(i){const e=new Map,t=i.replace(/\/\*[\s\S]*?\*\//g,"").replace(/^\s*\/\/.*$/gm,""),n=/"((?:[^"\\]|\\.)*)"\s*=\s*"((?:[^"\\]|\\.)*)"\s*;/g,a=s=>s.replace(/\\(u[0-9a-fA-F]{4}|.)/g,(r,o)=>o==="n"?` +`,t}function Ed(i){return i.replace(/&/g,"&").replace(/"/g,""").replace(//g,">")}function S2(i){return i.replace(/&/g,"&").replace(//g,">")}function X0(i){return String(i.a<<24|i.r<<16|i.g<<8|i.b|0)}function Ca(i,e){return Array.from(i.children).filter(t=>t.tagName===e)}function oo(i){const e=[];for(const t of Ca(i,"strelem")){const n=_2(t);n&&e.push(n)}return e}function _2(i){const e=ni(i,"typ");if(e===void 0||k[e]===void 0)return;const t={type:e,zoomX:ni(i,"zx")??0,zoomY:ni(i,"zy")??0,textLines:Ca(i,"text").map(o=>so((o.textContent??"").trim()))},n=eu(i.getAttribute("textcolor"));n&&(t.textColor=n);const a=eu(i.getAttribute("bgcolor"));a&&(t.backgroundColor=a),t.textLines.length===0&&(t.textLines=[""]);const s=Ca(i,"schleifeninhalt")[0];if(s){const o=oo(s);o.length>0&&(t.loopBody=o)}const r=Ca(i,"fall").map(o=>({name:so(o.getAttribute("fallname")??""),elements:oo(o)}));return r.length>0&&(t.cases=r),t}function K0(i,e){const t=i.getAttribute(e);return t===null?void 0:so(t)}function ni(i,e){const t=i.getAttribute(e);if(!(t===null||!/^[+-]?\d+$/.test(t)))return Number(t)}function eu(i){if(i===null||!/^[+-]?\d+$/.test(i))return;const e=Number(i);if(e<-2147483648||e>2147483647)return;const t=e>>>0;return{a:t>>>24&255,r:t>>>16&255,g:t>>>8&255,b:t&255}}const T2="http://www.w3.org/2000/svg",Be={diagramLineWidth:2,outerFrameLineWidth:2,selectionLineWidth:3.5,canvasOuterMargin:16,cellTextInsetX:18,cellTextInsetY:15,multiHeaderFirstLineY:14,branchLabelInsetX:10,fallauswahlCaseLabelBand:26,callSideBarInset:14,callTextInsetFromSideBar:20,loopBodyLeadingInset:20};function Nd(i){switch(i){case k.forSchleife:case k.whileSchleife:case k.doUntilSchleife:case k.endlosschleife:return"loop";case k.verzweigung:case k.fallauswahl:return"if";default:return}}function ye(i,e={}){const t=document.createElementNS(T2,i);for(const[n,a]of Object.entries(e))t.setAttribute(n,String(a));return t}class Fd{constructor(e,t){v(this,"usesSimulationHighlight",!1);v(this,"fillsSelection",!1);this.metrics=e,this.measure=t}get lineHeight(){return this.metrics.lineHeight}get fontSize(){return this.metrics.fontSize}render(e,t,n,a=Be.canvasOuterMargin){const s=ye("svg",{width:t.width,height:t.height,viewBox:`0 0 ${t.width} ${t.height}`,"font-family":Ls,"font-size":this.fontSize,class:"diagram"});s.append(ye("rect",{x:0,y:0,width:t.width,height:t.height,fill:"#fafafa"}));const r=a;s.append(ye("rect",{x:r,y:r,width:e.canvasSize.width-2*r-1,height:e.canvasSize.height-2*r-1,fill:"none",stroke:"black","stroke-width":Be.outerFrameLineWidth}));const o=ye("g");for(const l of e.elements)this.drawNode(l,o,n,{},void 0,"method");return s.append(o),s}line(e,t){e.append(ye("polyline",{points:t.map(n=>n.join(",")).join(" "),fill:"none",stroke:"black","stroke-width":Be.diagramLineWidth,"stroke-linejoin":"miter"}))}strokeCellBorder(e,t,n){const a=t.x,s=t.y,r=t.x+t.width,o=t.y+t.height;if(!n.top&&!n.left&&!n.bottom&&!n.right){e.append(ye("rect",{x:a,y:s,width:t.width,height:t.height,fill:"none",stroke:"black","stroke-width":Be.diagramLineWidth}));return}n.top||this.line(e,[[a,s],[r,s]]),n.right||this.line(e,[[r,s],[r,o]]),n.bottom||this.line(e,[[r,o],[a,o]]),n.left||this.line(e,[[a,o],[a,s]])}textWidth(e){const t=R0(e);return t?this.measure(t.keyword,this.fontSize,"bold")+(t.rest===""?0:this.measure(" "+t.rest,this.fontSize,"medium")):this.measure(e,this.fontSize,"medium")}drawKeywordLine(e,t,n,a){const s=ye("text",{x:n,y:a+q0(this.fontSize,"medium").ascent,"font-weight":500});s.style.whiteSpace="pre";const r=R0(t);if(r){const o=ye("tspan",{"font-weight":700});if(o.textContent=r.keyword,s.append(o),r.rest!==""){const l=ye("tspan",{});l.textContent=" "+r.rest,s.append(l)}}else s.textContent=t;e.append(s)}drawLabel(e,t,n,a,s,r){const o=q0(this.fontSize,s?"bold":"medium"),l=ye("text",{x:n,y:r==="top"?a+o.ascent:a-o.descent,"font-weight":s?700:500});l.style.whiteSpace="pre",l.textContent=t,e.append(l)}roofMetrics(e,t,n,a){const s=t.y+n,r=e.dividerYInset??0,o=12,l=Math.max(e.element.textLines.length,1)*this.lineHeight,u=t.y+Be.multiHeaderFirstLineY;if(e.element.type===k.fallauswahl){const c=Math.max(Be.fallauswahlCaseLabelBand,this.lineHeight+10),d=s-c,h=Math.min(s+r,d-8),g=Math.max(h,u+l+6);return{apex:{x:a,y:g},maxTextBottom:d-o,roofBottom:s}}const m={x:a,y:s+r};return{apex:m,maxTextBottom:m.y-o,roofBottom:s}}drawNode(e,t,n,a,s,r){var T;const o=e.frame,l=e.element,u=o.x+o.width,m=o.y+o.height,c=l.type===k.verzweigung||l.type===k.fallauswahl,d=c?e.headerBandHeight:0,h=n!==void 0&&lo(e.idPath,n),g=Ol(l),f=ye("g",{"data-path":e.idPath.join(",")});t.append(f);const x=this.usesSimulationHighlight,b=l.backgroundColor,y=b&&b.a>0?`rgba(${b.r}, ${b.g}, ${b.b}, ${b.a/255})`:"white",w=h&&(x||this.fillsSelection)?"rgba(199, 230, 255, 0.55)":y,I=Nd(l.type)??(l.type===k.leerElement?r:"method"),z=ye("rect",{x:o.x,y:o.y,width:o.width,height:o.height,fill:w});w==="white"&&I&&z.setAttribute("class",`ns-scope ns-scope-${I}`),f.append(z),this.strokeCellBorder(f,o,a);const S=Be.callSideBarInset;if(l.type===k.aufruf?(this.line(f,[[o.x+S,o.y],[o.x+S,m]]),this.line(f,[[u-S,o.y],[u-S,m]])):l.type===k.aussprung&&this.line(f,[[o.x+S,o.y],[o.x,o.y+o.height/2],[o.x+S,m]]),c&&e.dividerX!==void 0){const j=e.dividerX,C=this.roofMetrics(e,o,d,j),P=Math.max(g.length,1)*this.lineHeight,O=o.y+Be.multiHeaderFirstLineY;this.line(f,[[o.x,o.y],[C.apex.x,C.apex.y],[u,o.y]]),l.type===k.fallauswahl&&this.line(f,[[o.x,C.roofBottom],[u,C.roofBottom]]);let L;O+P<=C.maxTextBottom?L=O:L=Math.max(o.y+2,C.maxTextBottom-(Math.max(g.length,1)-1)*this.lineHeight-this.lineHeight),g.forEach((E,Q)=>{const $=this.textWidth(E);let he;if(l.type===k.verzweigung){const Te=o.x+Be.cellTextInsetX,xe=u-$-Be.cellTextInsetX;he=Math.min(Math.max(j-$/2,Te),xe)}else he=o.x+o.width/2-$/2;this.drawKeywordLine(f,E,he,L+Q*this.lineHeight)})}else if(l.type!==k.doUntilSchleife)if(l.type===k.anweisung||l.type===k.aufruf||l.type===k.aussprung){const j=Be.cellTextInsetX;let C=o.x+j,P=u-j;l.type===k.aufruf?(C=o.x+S+Be.callTextInsetFromSideBar,P=u-S-Be.callTextInsetFromSideBar):l.type===k.aussprung&&(C=o.x+S+j);const O=Math.max(0,P-C);let L=o.y+o.height/2-Math.max(1,g.length)*this.lineHeight/2;for(const E of g)this.drawKeywordLine(f,E,C+(O-this.textWidth(E))/2,L),L+=this.lineHeight}else{const j=Math.max(1,g.length)*this.lineHeight;let C=s===k.doUntilSchleife?o.y+o.height/2-j/2:o.y+Be.cellTextInsetY;for(const P of g)this.drawKeywordLine(f,P,o.x+Be.cellTextInsetX,C),C+=this.lineHeight}e.children.forEach((j,C)=>{const P=l.type===k.doUntilSchleife&&C===0?{top:!0,left:!0}:{};this.drawNode(j,t,n,P,l.type,I)});const _=ye("g");if(t.append(_),l.type===k.doUntilSchleife){const j=((T=e.children[0])==null?void 0:T.frame.x)??o.x+(e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:Be.loopBodyLeadingInset);this.drawLabel(_,"do",o.x+4,o.y+this.metrics.doUntilDoLabelTopInset,!0,"top");const C=m-e.headerBandHeight;this.line(_,[[j,C],[u,C]]),this.line(_,[[j,o.y],[j,C]]);let P=C+this.metrics.doUntilFooterTopInset;for(const O of g)this.drawKeywordLine(_,O,o.x+Be.cellTextInsetX,P),P+=this.lineHeight}if(c&&e.dividerX!==void 0&&e.caseColumnFrames.length>1){const j=this.roofMetrics(e,o,d,e.dividerX),C=j.apex;e.caseColumnFrames.forEach((O,L)=>{if(L>=e.caseColumnFrames.length-1)return;const E=O.x+O.width,Q=O2(E,o,C),$=Number.isFinite(Q)?Math.min(Math.max(Q,o.y),m):o.y;this.line(_,[[E,m],[E,$]])});const P=l.cases;if(P&&P.length===e.caseColumnFrames.length){const O=l.type===k.fallauswahl?j.roofBottom-6:o.y+d-8,L=Be.branchLabelInsetX;if(l.type===k.verzweigung&&P.length===2){this.drawLabel(_,"true",o.x+L,O,!0,"bottom");const E=e.caseColumnFrames[1],Q=this.measure("false",this.fontSize,"bold");this.drawLabel(_,"false",E.x+E.width-L-Q,O,!0,"bottom")}else P.forEach((E,Q)=>{const $=e.caseColumnFrames[Q],he=["default","true","false"].includes(E.name.toLowerCase()),Te=this.measure(E.name,this.fontSize,he?"bold":"medium");this.drawLabel(_,E.name,$.x+$.width/2-Te/2,O,he,"bottom")})}}h&&_.append(ye("rect",{x:o.x,y:o.y,width:o.width,height:o.height,class:"selection-frame",fill:"none",stroke:x?"rgba(66, 140, 242, 0.78)":"rgba(0, 122, 255, 0.9)","stroke-width":Be.selectionLineWidth}))}}function O2(i,e,t){const n=e.y;if(i<=t.x){const s=t.x-e.x;return Math.abs(s)<.5?t.y:n+(t.y-n)/s*(i-e.x)}const a=e.x+e.width-t.x;return Math.abs(a)<.5?t.y:t.y+(n-t.y)/a*(i-t.x)}function lo(i,e){return i.length===e.length&&i.every((t,n)=>t===e[n])}function A2(i){const e=[],t=n=>{e.push(n),n.children.forEach(t)};return i.forEach(t),e}function Ua(i){var e,t;return{...i,textLines:Ol(i),loopBody:(e=i.loopBody)==null?void 0:e.map(Ua),cases:(t=i.cases)==null?void 0:t.map(n=>({name:n.name,elements:n.elements.map(Ua)}))}}const P2=[{code:"de",name:"Deutsch"},{code:"en",name:"English"},{code:"es",name:"Español"},{code:"fr",name:"Français"},{code:"it",name:"Italiano"},{code:"pl",name:"Polski"},{code:"tr",name:"Türkçe"},{code:"ko",name:"한국어"},{code:"ja",name:"日本語"},{code:"el",name:"Ελληνικά"},{code:"uk",name:"Українська"},{code:"ar",name:"العربية"},{code:"ru",name:"Русский"},{code:"he",name:"עברית"},{code:"nl",name:"Nederlands"},{code:"sv",name:"Svenska"},{code:"da",name:"Dansk"},{code:"nb",name:"Norsk bokmål"},{code:"zh-Hans",name:"中文(简体)"},{code:"zh-Hant",name:"中文(繁體)"},{code:"pt-PT",name:"Português"},{code:"java",name:"Java (Keywords)"}],Jd=["de","en","pt-PT"],Rd=P2.filter(i=>Jd.includes(i.code)),tu=i=>Jd.includes(i),j2=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ar.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CxCno28C.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/da.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BAutdlBb.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/de.lproj/Localizable.strings":()=>q(()=>import("./Localizable-Dk8F86qS.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/el.lproj/Localizable.strings":()=>q(()=>import("./Localizable-rqA-20hM.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/en.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DBLIUcBd.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/es.lproj/Localizable.strings":()=>q(()=>import("./Localizable-LSTVB2Q5.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/fr.lproj/Localizable.strings":()=>q(()=>import("./Localizable-ByPZS4RL.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/he.lproj/Localizable.strings":()=>q(()=>import("./Localizable-R-16GCrk.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/it.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DXAPah1g.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ja.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CkJEmEEP.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ko.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BudCXCER.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nb.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DSvkBkp-.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nl.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BJ55WGVD.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pl.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BYJK0mdR.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pt-PT.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CHv0OL9S.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ru.lproj/Localizable.strings":()=>q(()=>import("./Localizable-1QZ0wfvJ.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/sv.lproj/Localizable.strings":()=>q(()=>import("./Localizable-M33nNbEe.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/tr.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BM86Igqt.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/uk.lproj/Localizable.strings":()=>q(()=>import("./Localizable-UGog_aku.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hans.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CaVEL1es.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hant.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DqIDp_hh.js"),[],import.meta.url).then(i=>i.default)}),Gd=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/Java.strings":()=>q(()=>import("./Java-Bpx1Vwvg.js"),[],import.meta.url).then(i=>i.default)}),C2=Object.assign({"../i18n/ar.strings":()=>q(()=>import("./ar-Ce_JBvN0.js"),[],import.meta.url).then(i=>i.default),"../i18n/da.strings":()=>q(()=>import("./da-DECOxrcR.js"),[],import.meta.url).then(i=>i.default),"../i18n/de.strings":()=>q(()=>import("./de-aPa6h38I.js"),[],import.meta.url).then(i=>i.default),"../i18n/el.strings":()=>q(()=>import("./el-yeMMlSVC.js"),[],import.meta.url).then(i=>i.default),"../i18n/en.strings":()=>q(()=>import("./en-CZyy4vg0.js"),[],import.meta.url).then(i=>i.default),"../i18n/es.strings":()=>q(()=>import("./es-ha3UN8DQ.js"),[],import.meta.url).then(i=>i.default),"../i18n/fr.strings":()=>q(()=>import("./fr-UiUxTyGK.js"),[],import.meta.url).then(i=>i.default),"../i18n/he.strings":()=>q(()=>import("./he-D_LHtXfc.js"),[],import.meta.url).then(i=>i.default),"../i18n/it.strings":()=>q(()=>import("./it-Bxp07svi.js"),[],import.meta.url).then(i=>i.default),"../i18n/ja.strings":()=>q(()=>import("./ja-9S_323Dj.js"),[],import.meta.url).then(i=>i.default),"../i18n/ko.strings":()=>q(()=>import("./ko-DHMRauQa.js"),[],import.meta.url).then(i=>i.default),"../i18n/nb.strings":()=>q(()=>import("./nb-Cr772wdv.js"),[],import.meta.url).then(i=>i.default),"../i18n/nl.strings":()=>q(()=>import("./nl-CiVlWKIy.js"),[],import.meta.url).then(i=>i.default),"../i18n/pl.strings":()=>q(()=>import("./pl-B4o_YjNG.js"),[],import.meta.url).then(i=>i.default),"../i18n/pt-PT.strings":()=>q(()=>import("./pt-PT-BcL3wukx.js"),[],import.meta.url).then(i=>i.default),"../i18n/ru.strings":()=>q(()=>import("./ru-DLZRltoa.js"),[],import.meta.url).then(i=>i.default),"../i18n/sv.strings":()=>q(()=>import("./sv-IXV83uxu.js"),[],import.meta.url).then(i=>i.default),"../i18n/tr.strings":()=>q(()=>import("./tr-DZP25RUK.js"),[],import.meta.url).then(i=>i.default),"../i18n/uk.strings":()=>q(()=>import("./uk-F1BqsLKX.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hans.strings":()=>q(()=>import("./zh-Hans-p7zVv8W8.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hant.strings":()=>q(()=>import("./zh-Hant-Dxf58hMr.js"),[],import.meta.url).then(i=>i.default)});function Ba(i,e){var t;return(t=Object.entries(i).find(([n])=>n.endsWith(e)))==null?void 0:t[1]}function Hd(i){const e=new Map,t=i.replace(/\/\*[\s\S]*?\*\//g,"").replace(/^\s*\/\/.*$/gm,""),n=/"((?:[^"\\]|\\.)*)"\s*=\s*"((?:[^"\\]|\\.)*)"\s*;/g,a=s=>s.replace(/\\(u[0-9a-fA-F]{4}|.)/g,(r,o)=>o==="n"?` `:o==="t"?" ":o.startsWith("u")&&o.length===5?String.fromCharCode(parseInt(o.slice(1),16)):o);for(const s of t.matchAll(n))e.set(a(s[1]),a(s[2]));return e}async function uo(i){const e=i==="java"?Ba(Gd,"/Java.strings"):Ba(j2,`/${i}.lproj/Localizable.strings`),t=Ba(C2,`/${i}.strings`),n=new Map;for(const a of[e,t])if(a)for(const[s,r]of Hd(await a()))n.set(s,r);return n}let Vd="en",Qd=new Map,$n=new Map;const $a="appLanguageCode",Dl="visustruct.keywords";let mo=new Map,Zl=!1;const B2=i=>i.startsWith("element_")||i.startsWith("canvas_stub_");function D2(){try{const i=new URLSearchParams(location.search).get("lang")==="java"||localStorage.getItem($a)==="java";return i&&(localStorage.setItem($a,"en"),localStorage.setItem(Dl,"1")),i}catch{return!1}}function Z2(){try{return localStorage.getItem(Dl)==="1"}catch{return!1}}async function qd(i,e=!0){if(i&&mo.size===0){$n.size===0&&($n=await uo("en"));const t=Ba(Gd,"/Java.strings");if(t)for(const[n,a]of Hd(await t()))B2(n)&&a!==$n.get(n)&&mo.set(n,a)}if(Zl=i,e)try{localStorage.setItem(Dl,i?"1":"0")}catch{}}function M2(){return Zl}function L2(){if(D2())return"en";const i=new URLSearchParams(location.search).get("lang");if(i&&tu(i))return i;try{const e=localStorage.getItem($a);if(e&&tu(e))return e}catch{}for(const e of navigator.languages??[navigator.language]){const t=e.toLowerCase();if(t.startsWith("pt"))return"pt-PT";const n=Rd.find(a=>a.code===t.split("-")[0]);if(n)return n.code}return"en"}async function Ud(i,e=!0){if($n.size===0&&($n=await uo("en")),Qd=i==="en"?$n:await uo(i),Vd=i,e)try{localStorage.setItem($a,i)}catch{}const t=document.documentElement;t.lang=i==="java"?"en":i,t.dir=i==="ar"||i==="he"?"rtl":"ltr"}function i1(){return Vd}function p(i,...e){const t=(Zl?mo.get(i):void 0)??Qd.get(i)??$n.get(i)??i;if(e.length===0)return t;let n=0;return t.replace(/%(?:(\d+)\$)?[@d]/g,(a,s)=>String(e[s?Number(s)-1:n++]??""))}const Ya=243,W2=244,$d=40,ur=4,E2=1;function Ml(i){const e=i.length,t=Ya+(e&255)+(e>>8)&255,n=i.reduce((a,s)=>a+s,0)&255;return Uint8Array.from([Ya,t,e&255,e>>8,...i,n,W2])}function N2(i,e,t){const n=Array.from(new TextEncoder().encode(i));return Ml([$d,e,t&255,t>>8&255,n.length&255,n.length>>8,...n])}function F2(i){if(i[0]!==$d||i.length<6)return;const e=new TextDecoder().decode(Uint8Array.from(i.slice(6))),t=/"ret"\s*:\s*([^}]*)\}/.exec(e);return t?{idx:i[2]|i[3]<<8,value:R2(t[1].trim())}:void 0}function J2(i){const e=[];for(;;){const t=i.indexOf(Ya);if(t<0){i.length=0;break}if(i.splice(0,t),i.length<4)break;const n=i[2]|i[3]<<8;if(i[1]!==(Ya+i[2]+i[3]&255)||n>4096){i.splice(0,1);continue}if(i.lengthArray.from({length:e},(t,n)=>i>>>8*n&255);function Q2(i){let e=0;for(let t=0;t>>0;return ii(e,4)}const mr=(i,e)=>Ml([1,0,Yd,i,...ii(e.length,2),...e]);function q2(i,e=G2){const t=new TextEncoder().encode(i),n=(4-t.length%W1+W1)%W1,a=new Uint8Array(t.length+n).fill(10);a.set(t);const s=[mr(1,[0,...ii(a.length,4),...Q2(a),...Array.from(new TextEncoder().encode(e))])],r=a.length-4;for(let o=0;oi.length===3&&i[0]===13,$2=i=>i.length===7||i.some((e,t)=>e===Yd&&i[t+1]===240),Xd=()=>typeof navigator>"u"?void 0:navigator.serial,cr=()=>Xd()!==void 0,Y2=(...i)=>`exec(${JSON.stringify(i.join("; "))})`,Ws=(i,e=24)=>Y2("cyberpi.display.clear()",`cyberpi.display.show_label(${JSON.stringify(i)}, ${e}, 'center')`),Kd=Ws("VisuBot",32);class X2{constructor(){v(this,"port");v(this,"writer");v(this,"reader");v(this,"loop");v(this,"rx",[]);v(this,"idx",1);v(this,"frameWaiters",[]);v(this,"waiting",new Map);v(this,"queue",Promise.resolve());v(this,"listeners",new Set);v(this,"error");v(this,"connecting",!1)}listen(e){return this.listeners.add(e),()=>this.listeners.delete(e)}changed(){for(const e of this.listeners)e()}get connected(){return this.writer!==void 0&&!this.connecting}async connect(){const e=Xd();if(!e)throw new Error("Web Serial");const t=await e.requestPort();await t.open({baudRate:115200}),this.port=t,this.writer=t.writable.getWriter(),this.error=void 0,this.connecting=!0,this.changed(),this.loop=this.readLoop(),window.addEventListener("pagehide",()=>void this.disconnect(),{once:!0}),await new Promise(n=>setTimeout(n,3e3)),this.writer&&(this.rx.length=0,this.connecting=!1,this.changed(),await this.run(Kd))}async disconnect(e){if(!this.port)return this.error=e,this.changed();if(!e&&this.writer&&!this.connecting)for(const r of["mbot2.EM_stop('ALL')","cyberpi.led.off()",Ws("Bis bald!")])await this.send(r,ur,2e3).catch(()=>{});const t=this.port,n=this.writer,a=this.reader,s=this.loop;this.port=this.writer=this.reader=this.loop=void 0,this.error=e,this.connecting=!1;for(const r of this.waiting.values())r.reject(new Error(e??"getrennt"));this.waiting.clear();try{await(a==null?void 0:a.cancel()),await s,await(n==null?void 0:n.close())}catch{}try{n==null||n.releaseLock(),await t.close()}catch(r){console.warn("[mBot2] Schließen",r.message)}this.changed()}run(e){return this.send(e,ur,3e4).then(()=>{})}ask(e){return this.send(e,E2,3e3)}async upload(e,t=()=>{}){if(this.port||await this.connect(),!this.writer)throw new Error(this.error??"nicht verbunden");const n=q2(e),a=6+n.length+3;let s=0;const r=()=>t(++s,a),o=async()=>{await this.sendFrame(Ml(H2),U2),r();for(const l of V2)await this.send(l,ur,3e3),r()};await o(),await o();for(const l of n)await this.sendFrame(l,$2),r();s=a-3,await o(),await this.restart()}sendFrame(e,t){const n=this.queue.then(async()=>{for(let a=0;a<3;a++){if(!this.writer)throw new Error("nicht verbunden");let s=()=>{};const r=new Promise(u=>s=u),o={match:t,resolve:s};this.frameWaiters.push(o),await this.writer.write(e);const l=await Promise.race([r.then(()=>!0),new Promise(u=>setTimeout(()=>u(!1),3e3))]);if(this.frameWaiters=this.frameWaiters.filter(u=>u!==o),l)return}throw new Error("keine Antwort")});return this.queue=n.catch(()=>{}),n}async restart(){const e=this.port;await this.disconnect("restart"),this.error=void 0,await new Promise(t=>setTimeout(t,300)),await e.open({baudRate:115200}),await new Promise(t=>setTimeout(t,500)),await e.close(),this.changed()}send(e,t,n){const a=this.queue.then(()=>new Promise((s,r)=>{if(!this.writer)return r(new Error("nicht verbunden"));const o=this.idx;this.idx=this.idx%65535+1;const l=setTimeout(()=>{this.waiting.delete(o),r(new Error("keine Antwort"))},n);this.waiting.set(o,{resolve:u=>(clearTimeout(l),s(u)),reject:u=>(clearTimeout(l),r(u))}),this.writer.write(N2(e,t,o)).catch(u=>{this.waiting.delete(o),r(u)})}));return this.queue=a.catch(()=>{}),a}async readLoop(){var e;for(;(e=this.port)!=null&&e.readable;){const t=this.port.readable.getReader();this.reader=t;try{for(;;){const{value:n,done:a}=await t.read();if(a)break;this.rx.push(...n);for(const s of J2(this.rx)){const r=this.frameWaiters.findIndex(u=>u.match(s));r>=0&&this.frameWaiters.splice(r,1)[0].resolve();const o=F2(s);if(!o)continue;const l=this.waiting.get(o.idx);this.waiting.delete(o.idx),l==null||l.resolve(o.value)}}}catch(n){const a=["BufferOverrunError","FramingError","BreakError","ParityError"].includes(n.name);console.warn("[mBot2] Lesefehler",n.name,n.message),!a&&this.port&&this.disconnect(n.message)}finally{t.releaseLock()}if(!this.writer)break}}}const le=new X2,eh=5,K2=i=>Number.isInteger(i)&&i>=0&&iString(Math.round(i*100)/100),xi={forward:{args:1,defaults:[nu],python:([i])=>`mbot2.straight(${be(i)})`,label:([i])=>`${be(i)} cm vorwärts`},backward:{args:1,defaults:[nu],python:([i])=>`mbot2.straight(${be(-i)})`,label:([i])=>`${be(i)} cm rückwärts`},turnLeft:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${be(-i)})`,label:([i])=>`${be(i)}° nach links drehen`},turnRight:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${be(i)})`,label:([i])=>`${be(i)}° nach rechts drehen`},stop:{args:0,python:()=>'mbot2.EM_stop("ALL")',label:()=>"anhalten"},drive:{args:2,python:([i,e])=>`mbot2.drive_power(${be(i)}, ${be(-e)})`,label:([i,e])=>`Räder links ${be(i)} %, rechts ${be(e)} %`},setLed:{args:3,python:([i,e,t])=>`cyberpi.led.on(${be(i)}, ${be(e)}, ${be(t)})`,label:([i,e,t])=>`LEDs (${be(i)}, ${be(e)}, ${be(t)})`},ledOff:{args:0,python:()=>"cyberpi.led.off()",label:()=>"LEDs aus"},ledColor:{args:1,text:!0,choices:Object.keys(Xa),valid:([i])=>K2(i),python:([i],e)=>`cyberpi.led.on(${Xa[e].join(", ")}, id=${i+1})`,label:([i],e)=>`LED ${i}: ${e}`},playTone:{args:2,python:([i,e])=>`cyberpi.audio.play_tone(${be(i)}, ${be(e/1e3)})`,label:([i,e])=>`Ton ${be(i)} Hz, ${be(e)} ms`},pause:{args:1,label:([i])=>`${be(i)} ms warten`},resetTimer:{args:0,python:()=>"cyberpi.timer.reset()",label:()=>"Stoppuhr auf 0"},emotion:{args:0,text:!0,choices:e3,python:(i,e)=>`cyberpi.emotion.${e}()`,label:(i,e)=>`Gefühl: ${e}`},showText:{args:0,text:!0,python:(i,e)=>Ws(e),label:(i,e)=>`Bildschirm: ${e}`}},iu={red:{de:"rot",en:"red"},green:{de:"grün",en:"green"},blue:{de:"blau",en:"blue"},yellow:{de:"gelb",en:"yellow"},cyan:{de:"türkis",en:"cyan"},purple:{de:"lila",en:"purple"},white:{de:"weiß",en:"white"},black:{de:"schwarz",en:"black"}};let Ll="en";function t3(i){Ll=i==="de"?"de":"en"}const n3=()=>Ll;function th(i){const e=i.trim().toLowerCase(),t=iu[e]??Object.values(iu).find(n=>n.de===e);return t?t[Ll]:e}const l1=i=>({python:`cyberpi.controller.is_press('${i}')`,simulated:!1}),St={getDistance:{python:"mbuild.ultrasonic2.get(1)",simulated:100},getLine:{python:"mbuild.quad_rgb_sensor.get_line_sta('all', 1)",simulated:0},isLineLeft:{python:"mbuild.quad_rgb_sensor.is_line('L1', 1)",simulated:!1},isLineRight:{python:"mbuild.quad_rgb_sensor.is_line('R1', 1)",simulated:!1},getColor:{python:"mbuild.quad_rgb_sensor.get_color_sta('L1', 1)",simulated:"white"},isButtonA:l1("a"),isButtonB:l1("b"),isJoystickUp:l1("up"),isJoystickDown:l1("down"),isJoystickLeft:l1("left"),isJoystickRight:l1("right"),getBrightness:{python:"cyberpi.get_bri()",simulated:50},getLoudness:{python:"cyberpi.get_loudness('maximum')",simulated:0},getPitch:{python:"cyberpi.get_pitch()",simulated:0},getRoll:{python:"cyberpi.get_roll()",simulated:0},isShaken:{python:"cyberpi.is_shake()",simulated:!1},getBattery:{python:"cyberpi.get_battery()",simulated:100},getTimer:{python:"cyberpi.timer.get()",simulated:0}};function i3(i){const e=new Set;for(const t of i.matchAll(/\bmbot\s*\.\s*([A-Za-z_]\w*)\s*\(\s*\)/gu))t[1]in St&&e.add(t[1]);return[...e]}function a3(i){const e=/^mbot\s*\.\s*led\s*\(([^()]*(?:\([^()]*\)[^()]*)*)\)\s*\.\s*setColor\s*\(([\s\S]*)\)\s*;?$/u.exec(i.trim());if(e)return{method:"ledColor",args:[e[1].trim(),e[2].trim()]};const t=/^mbot\s*\.\s*([A-Za-z_]\w*)\s*\(([\s\S]*)\)\s*;?$/u.exec(i.trim());if(!t)return;const n=t[2].trim();return{method:t[1],args:n===""?[]:o3(n)}}function Ka(i,e){const t=xi[i];if(!t)return;const n=e.length===0&&t.defaults?t.defaults:e;if(n.length===t.args)return!t.valid||t.valid(n)?n:void 0}function au(i,e,t=""){var a;const n=xi[i];return{method:i,args:e,python:(a=n.python)==null?void 0:a.call(n,e,t),waitMs:i==="pause"?Math.max(0,e[0]):void 0,label:n.label(e,t),...n.text?{text:t}:{}}}function nh(i){return i.map(e=>[e.method,...e.args.map(be),...e.text!==void 0?[JSON.stringify(e.text)]:[]].join(" "))}function s3(i){let e=0;const t=i.trim(),n=()=>{const s=[];for(;;){for(;t[e]===" "||t[e]===",";)e++;if(e>=t.length||t[e]===")")return s;const r=/^(\d+)\s*[x×]\s*\(/u.exec(t.slice(e));if(r){e+=r[0].length;const c=n();if(t[e]!==")")throw new Error(`„)“ fehlt in „${i}“`);e++;for(let d=0;d{if(!(n in St))return t;const a=e(n);return typeof a=="string"?JSON.stringify(n==="getColor"?th(a):a):String(a)}):i}function o3(i){const e=[];let t=0,n=!1,a=0;for(let s=0;s{const a=t==="turn"?((n+180)%360+360)%360-180:n;if(Math.abs(a)<1e-6)return[];const s=Math.round(Math.abs(a)*100)/100;return t==="drive"?[`${a>0?"forward":"backward"} ${s}`]:[a===-180?"turnRight 180":`${a>0?"turnRight":"turnLeft"} ${s}`]})}function ih(i){let e=0;const t=i.trim(),n=()=>{const s=[];for(;;){for(;t[e]===" "||t[e]===",";)e++;if(e>=t.length||t[e]===")")return s;const r=/^(\d+)\s*[x×]\s*\(/u.exec(t.slice(e));if(r){e+=r[0].length;const u=n();if(t[e]!==")")throw new Error(`„)“ fehlt in „${i}“`);e++;for(let m=0;ma===i[s%t])){const a=U1(i.slice(0,t));return`${n} x ${t===1?a:`(${a})`}`}}return i.join(", ")}const ah=["cyberpi","screen","joystick","buttons","leds","lightSensor","microphone","shield","powerSwitch","motors","wheels","ultrasonic","lineSensor","caster","chassis"],l3=i=>ah.includes(i),u3=100;function sh(i){switch(i.kind){case"finished":return"Simulation finished.";case"infiniteLoopWithoutBody":return"Infinite loop has no body.";case"unsupportedStatement":return`Unsupported statement: ${i.text}`;case"invalidExpression":return`Invalid expression: ${i.text}`;case"unknownVariable":return`Unknown variable: ${i.text}`;case"divisionByZero":return"Division by zero.";case"wholeNumberExpected":return"Please enter a whole number.";case"numberExpected":return"Please enter a number.";case"booleanExpected":return"Please enter true or false.";case"subprogramNotFound":return`No open diagram is called ${i.text}. The call was skipped.`;case"callTooDeep":return"Too many nested calls. Does a subprogram call itself?";case"callArguments":return`The call does not match the header of ${i.text}. Check the values in the parentheses.`;case"missingReturn":return`${i.text} ended without returning a value with return.`;case"fileNotFound":return`There is no file called ${i.text}.`;case"endOfFile":return`The file ${i.text} has no more lines.`;case"nullValue":return`${i.text} is null.`;case"other":return i.text}}class Ze extends Error{constructor(e){super(sh(e)),this.notice=e}}const qe=i=>new Ze({kind:"unsupportedStatement",text:i}),F=i=>new Ze({kind:"invalidExpression",text:i}),$1=i=>new Ze({kind:"unknownVariable",text:i}),m3=()=>new Ze({kind:"divisionByZero"}),ts=new Map;function c3(i,e){ts.set(i,e)}const rh=()=>[...ts];function su(i){return i instanceof Ze?i.notice:{kind:"other",text:i instanceof Error?i.message:String(i)}}function d3(i){if(i===0)return"0";if(!Number.isFinite(i))return Number.isNaN(i)?"nan":i>0?"inf":"-inf";const e=Math.floor(Math.log10(Math.abs(Number(i.toPrecision(12)))));if(e<-4||e>=12){const[n,a]=i.toExponential(11).split("e"),s=n.includes(".")?n.replace(/0+$/,"").replace(/\.$/,""):n,r=Number(a);return`${s}e${r<0?"-":"+"}${String(Math.abs(r)).padStart(2,"0")}`}const t=i.toFixed(Math.max(0,11-e));return t.includes(".")?t.replace(/0+$/,"").replace(/\.$/,""):t}function ru(i){return Number.isFinite(i)&&Math.round(i)===i?i.toFixed(1):d3(i)}function we(i){switch(i.kind){case"int":return String(i.value);case"double":return ru(i.value);case"string":return i.value;case"boolean":return String(i.value);case"intArray":return"["+i.value.map(String).join(", ")+"]";case"doubleArray":return"["+i.value.map(ru).join(", ")+"]";case"stringArray":return"["+i.value.join(", ")+"]";case"booleanArray":return"["+i.value.map(String).join(", ")+"]";case"grid":return"["+h3(i).join(", ")+"]";case"reader":return`${i.className}(${i.file})`;case"writer":return`PrintWriter(${i.file})`;case"null":return"null"}}function h3(i){return i.value.map(e=>"["+e.map(t=>we(co(i.elementType,t))).join(", ")+"]")}function co(i,e){switch(i){case"int":return{kind:"int",value:e};case"double":return{kind:"double",value:e};case"string":return{kind:"string",value:e};case"boolean":return{kind:"boolean",value:e}}}function ou(i){return i==="string"?"":i==="boolean"?!1:0}function ho(i){return i.kind==="intArray"||i.kind==="doubleArray"||i.kind==="stringArray"||i.kind==="booleanArray"||i.kind==="grid"}function g3(i){return i.kind==="int"||i.kind==="double"?i.value:NaN}const vt=i=>({kind:"int",value:i}),wt=i=>({kind:"double",value:i}),Wl=i=>i!==void 0&&/\s/u.test(i),ns=i=>new RegExp("\\p{L}","u").test(i),Y1=i=>new RegExp("\\p{N}","u").test(i);function ai(i){const e=Array.from(i);return e.length===0||!(ns(e[0])||e[0]==="_")?!1:e.every(t=>ns(t)||Y1(t)||t==="_")}function Kt(i){switch(i.toLowerCase()){case"int":return"int";case"double":return"double";case"string":return"string";case"char":return"string";case"boolean":case"bool":return"boolean";default:return}}function lu(i){return i.kind==="int"?"int":i.kind==="double"?"double":i.kind==="boolean"?"boolean":"string"}function at(i){const e=Array.from(i);if(e.length===3&&e[0]==="'"&&e[2]==="'")return e[1];if(e.length<2||e[0]!=='"'||e[e.length-1]!=='"')return;const t=e.slice(1,-1).join("");if(/^(?:[^"\\]|\\.)*$/u.test(t))return t.replaceAll('\\"','"').replaceAll("\\n",` -`)}function uu(i){return i.replaceAll("(int)","").replaceAll("(double)","").trim()}function El(i){const e=new Array(i.length).fill(!1);let t=0,n=!1,a=!1;return i.forEach((s,r)=>{if(n){a?a=!1:s==="\\"?a=!0:s==='"'&&(n=!1);return}switch(s){case'"':n=!0;break;case"(":case"[":t+=1;break;case")":case"]":t-=1;break;default:e[r]=t===0}}),e}function is(i,e){const t=Array.from(i),n=Array.from(e),a=El(t),s=[];let r=[],o=0;for(;ot[o+m]===u)&&a.slice(o,l).every(Boolean)){s.push(r.join("").trim()),r=[],o=l;continue}r.push(t[o]),o+=1}return s.push(r.join("").trim()),s}function p3(i){const e=Array.from(i),t=El(e);for(let n=0;n=","<=","==","!="].includes(o)&&(a=o)}if(a===void 0&&(e[n]==="<"||e[n]===">")&&(a=e[n]),a===void 0)continue;const s=e.slice(0,n).join("").trim(),r=e.slice(n+a.length).join("").trim();return{lhs:s,op:a,rhs:r}}}function Es(i,e){let t=0,n=!1,a=!1;for(let s=e;se.length||!t.every((r,o)=>e[a+o]===r))continue;const s=a+t.length-1;if(Es(e,s)===e.length-1)return{lhs:e.slice(0,a).join("").trim(),rhs:e.slice(s+1,-1).join("").trim()}}}function Yi(i){const e=i.trim();for(const t of["if","while","until","switch"]){if(!e.startsWith(t))continue;const n=e.slice(t.length);if(!(n===""||Wl(n[0])||n[0]==="("))continue;let a=n.trim();const s=oh(a);return s!==void 0&&(a=s),a===""?"true":a}return e===""?"true":e}function d1(i){const e=i.trim(),t=e.indexOf("[");if(!e.endsWith("]")||t<0)return;const n=e.slice(0,t).trim();if(!ai(n))return;const a=[];let s=t;for(;s2))return{arrayName:n,indexExpressions:a}}function x3(i){const e=i.trim();if(!e.endsWith(")"))return;const t=/^([A-Za-z_]\w*(?:\s*\[[^\[\]]*\])*|"(?:[^"\\]|\\.)*")\s*\.\s*([A-Za-z_]\w*)\s*\(/u.exec(e);if(!t)return;const n=Array.from(e),a=Array.from(t[0]).length-1;if(Es(n,a)!==n.length-1)return;const s=n.slice(a+1,-1).join("").trim();return{target:t[1],method:t[2],args:s===""?[]:is(s,",")}}function mu(i){return ai(i)||d1(i)!==void 0}function dr(i){const e=[];let t="",n=!1,a=!1,s=0;for(const r of i){if(a){t+=r,a=!1;continue}if(r==="\\"){t+=r,a=!0;continue}if(r==='"'){n=!n,t+=r;continue}if(!n&&r==="("&&(s+=1),!n&&r===")"&&(s-=1),r==="+"&&!n&&s===0){e.push(t),t="";continue}t+=r}if(n)throw F(i);return e.push(t),e}function b3(i){const e=[];let t=0,n="";for(const a of i){if(a==="{"&&(t+=1),a==="}"&&(t-=1),a===","&&t===0){e.push(n),n="";continue}n+=a}return n.trim()!==""&&e.push(n),e}function cu(i){const e=Array.from(i),t=[];let n=0;for(;n1)throw F(i)}else if(!Y1(e[n]))break;n+=1}const o=e.slice(s,n).join("");if(o==="."||!/^[0-9]*\.?[0-9]*$/.test(o))throw F(i);t.push({t:"number",literal:o,value:Number(o)});continue}if(ns(a)||a==="_"){const s=n;for(;n=0&&s=0&&o=0&&s|&&|\|\||^\s*!/u.test(e)}function Yn(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function hu(i){const e=i.slice(0,3);for(;e.length<3;)e.push("");return e}function po(i){const e=i.map(t=>Yn(t).trim());return e.length===1&&e[0].includes(";")?hu(e[0].split(";").map(t=>t.trim())):hu(e)}const lt=i=>i.frame?{frame:i.frame,callPath:i.callPath}:{};function qt(i,e=[],t={}){const n=[],a=s=>n.push(t.frame?{...s,...t}:s);return i.forEach((s,r)=>{const o=[...e,r],l=s.textLines.join(" ").trim();switch(s.type){case I.anweisung:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"statement"});break;case I.verzweigung:a({path:o,text:l||"true",kind:"branch",cases:s.cases});break;case I.fallauswahl:a({path:o,text:l||"0",kind:"switchSelection",cases:s.cases});break;case I.forSchleife:a({path:o,text:l,kind:"forLoopStart",loopBody:s.loopBody,forParts:po(s.textLines)});break;case I.whileSchleife:a({path:o,text:l||"true",kind:"whileLoop",loopBody:s.loopBody});break;case I.doUntilSchleife:a({path:o,text:l||"true",kind:"doUntilLoop",loopBody:s.loopBody});break;case I.endlosschleife:a({path:o,text:l||"true",kind:"infiniteLoop",loopBody:s.loopBody});break;case I.aussprung:a({path:o,text:l,kind:"jump"});break;case I.aufruf:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"call"});break}}),n}function v3(i,e){const t=i.trim().replaceAll(",",".");switch(e){case"int":if(!/^[+-]?[0-9]+$/.test(t))throw new Ze({kind:"wholeNumberExpected"});return vt(Number(t));case"double":if(!/^[+-]?([0-9]+\.?[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?$/.test(t))throw new Ze({kind:"numberExpected"});return wt(Number(t));case"string":return{kind:"string",value:i};case"boolean":switch(t.toLowerCase()){case"true":case"wahr":return{kind:"boolean",value:!0};case"false":case"falsch":return{kind:"boolean",value:!1};default:throw new Ze({kind:"booleanExpected"})}}}function gu(){return{stepIndex:0,variables:new Map,outputLines:[],isHalted:!1,files:new Map,robotActions:[]}}function w3(i,e){for(let t=0;tt===e.path[n])}function yt(i){const e=/^(void|int|double|String|boolean)\s+([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(Yn(i));if(!e)return;const t=[];if(e[3].trim()!=="")for(const n of e[3].split(",")){const a=/^(int|double|String|boolean|char)\s*((?:\[\s*\]){0,2})\s+([A-Za-z_]\w*)$/u.exec(n.trim());if(!a)return;const s=(a[2].match(/\[/gu)??[]).length;t.push({type:Kt(a[1]),name:a[3],...s>0?{dims:s}:{}})}return{returnType:Kt(e[1]),name:e[2],params:t}}function lh(i){const e=/^(?:(?:(int|double|String|boolean)\s+)?([A-Za-z_]\w*)\s*=\s*)?([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(Yn(i));if(e)return{targetType:e[1]?Kt(e[1]):void 0,target:e[2],name:e[3],args:e[4].trim()===""?[]:is(e[4],",")}}function as(i){var t,n;const e=Yn(i);return((t=yt(e))==null?void 0:t.name)??((n=lh(e))==null?void 0:n.name)??e.replace(/\(\s*\)$/u,"").trim()}class bi{constructor(e,t=()=>{}){v(this,"steps");v(this,"state",gu());v(this,"nextFrame",1);v(this,"callDepth",0);v(this,"frames",new Map);v(this,"peeking",!1);v(this,"robotSensors",{});v(this,"afterOutput",!1);this.resolveSubprogram=t,this.steps=qt(e.elements)}get currentStepPath(){const e=this.steps[this.state.stepIndex];return(e==null?void 0:e.callPath)??(e==null?void 0:e.path)}get canStep(){return!this.state.isHalted&&!this.state.inputRequest&&this.state.stepIndex ${we(n)}`}catch(n){this.state.inputErrorNotice=su(n);return}this.state.inputRequest=void 0,this.state.inputErrorNotice=void 0,this.state.stepIndex+=1,this.state.notice=this.finishedIfAtEnd()}}finishedIfAtEnd(){return this.state.stepIndex>=this.steps.length?{kind:"finished"}:void 0}splice(e){this.steps.splice(this.state.stepIndex,1,...e)}noticeAfterEntering(e){return e.length>0?void 0:this.finishedIfAtEnd()}executeBranch(e){const t=e.cases;if(!t||t.length<2)throw qe(e.text);const n=Yi(e.text),a=this.evaluateBool(n),s=a?0:1,r=qt(t[s].elements,[...e.path,s],lt(e));this.splice(r),this.state.lastTrace=`${n} -> ${a}`,this.state.notice=this.noticeAfterEntering(r)}executeSwitchSelection(e){const t=e.cases;if(!t||t.length===0)throw qe(e.text);const n=Yi(e.text),a=this.evaluateSwitchSelector(n),s=w3(a,t)??t.length-1,r=qt(t[s].elements,[...e.path,s],lt(e));this.splice(r),this.state.lastTrace=`${n} -> ${t[s].name}`,this.state.notice=this.noticeAfterEntering(r)}executeForLoopStart(e){const t=po(e.forParts??[e.text]);t[0]!==""&&this.executeStatement(t[0]),this.splice([{...lt(e),path:e.path,text:t[1],kind:"forLoopCondition",loopBody:e.loopBody,forParts:t}])}executeForLoopCondition(e){const t=po(e.forParts??[e.text]),n=t[1]===""?"true":t[1],a=this.evaluateBool(n);if(this.state.lastTrace=`${n} -> ${a}`,a){const s=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...s,{...lt(e),path:e.path,text:t[2],kind:"forLoopIncrement",loopBody:e.loopBody,forParts:t},{...lt(e),path:e.path,text:t[1],kind:"forLoopCondition",loopBody:e.loopBody,forParts:t}])}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}executeForLoopIncrement(e){const t=e.text.trim();t!==""&&this.executeIncrement(t),this.splice([])}executeWhileLoop(e){const t=Yi(e.text),n=this.evaluateBool(t);if(this.state.lastTrace=`${t} -> ${n}`,n){const a=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...a,{...lt(e),path:e.path,text:e.text,kind:"whileLoop",loopBody:e.loopBody}]),this.state.notice=this.noticeAfterEntering(a)}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}enterDoUntilLoop(e){const t=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...t,{...lt(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}]),this.state.notice=this.noticeAfterEntering(t)}executeDoUntilCondition(e){const t=Yi(e.text),n=this.evaluateBool(t);if(this.state.lastTrace=`${t} -> ${n}`,n){const a=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...a,{...lt(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}])}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}enterInfiniteLoop(e){const t=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...t,{...lt(e),path:e.path,text:e.text,kind:"infiniteLoop",loopBody:e.loopBody}]),this.state.lastTrace="true -> true",this.state.notice=t.length>0?void 0:{kind:"infiniteLoopWithoutBody"}}executeJump(e){const t=e.frame??0,n=o=>o.lengthl===e.path[u]);let a=this.steps.length,s="end";for(let o=this.state.stepIndex+1;o ${s}`,s==="return"&&this.finishFrame(r),this.state.notice=this.finishedIfAtEnd()}executeCall(e){const t=e.text,n=this.resolveSubprogram(as(t));if(!n){this.splice([]),this.state.lastTrace=`${t} -> ?`,this.state.notice={kind:"subprogramNotFound",text:t},this.state.stepIndex>=this.steps.length&&(this.state.notice={kind:"finished"});return}const a=lh(t),s=yt(n.caption);if(s?((a==null?void 0:a.args.length)??0)!==s.params.length||(a==null?void 0:a.target)!==void 0&&!s.returnType:a!==void 0&&(a.args.length>0||a.target!==void 0))throw new Ze({kind:"callArguments",text:(s==null?void 0:s.name)??as(t)});if(this.callDepth>=u3)throw new Ze({kind:"callTooDeep"});const o=new Map,l=[];s==null||s.params.forEach((d,h)=>{const g=a.args[h].trim();if(!d.dims){o.set(d.name,this.evaluateExpression(g,d.type));return}const f=this.state.variables.get(g);if(!f)throw/^[A-Za-z_]\w*$/u.test(g)?new Ze({kind:"unknownVariable",text:g}):F(g);if(!(d.dims===1?f.kind===`${d.type}Array`:f.kind==="grid"&&f.elementType===d.type))throw F(g);o.set(d.name,f),l.push({param:d.name,callerName:g})}),this.callDepth+=1;const u={frame:this.nextFrame++,callPath:e.callPath??e.path};s&&(this.frames.set(u.frame,{saved:this.state.variables,header:s,call:a,references:l}),this.state.variables=o);const m=qt(n.elements,[],u);this.splice([...m,{...u,path:e.path,text:t,kind:"callEnd"}]);const c=s==null?void 0:s.params.map((d,h)=>`${d.name} = ${d.dims?a.args[h].trim():we(o.get(d.name))}`).join(", ");this.state.lastTrace=c?`${t} -> ${c}`:`${t} -> call`}executeCallEnd(e){this.callDepth-=1,this.splice([]),this.state.lastTrace=`${e.text} -> return`,this.finishFrame(e),this.state.notice=this.finishedIfAtEnd()}executeReturn(e){const t=e.frame??0,n=Yn(e.text).slice(6).trim(),a=this.frames.get(t);if(a&&n!==""){if(!a.header.returnType)throw F(e.text);a.returnValue=this.evaluateExpression(n,a.header.returnType)}const s=a!=null&&a.returnValue?`${e.text} -> ${we(a.returnValue)}`:`${e.text} -> return`;if(t===0){this.steps.splice(this.state.stepIndex),this.state.lastTrace=s,this.state.notice={kind:"finished"};return}let r=this.state.stepIndex+1;for(;r0?new Map(t.saved):t.saved;for(const m of t.references){const c=this.state.variables.get(m.param);c&&n.set(m.callerName,c)}this.state.variables=n;const a=t.returnValue;if(t.header.returnType&&!a)throw new Ze({kind:"missingReturn",text:t.header.name});const s=(l=t.call)==null?void 0:l.target;if(!s||!a)return;let r=(u=t.call)==null?void 0:u.targetType;if(!r)try{r=this.inferTargetValueType(s)}catch{r=t.header.returnType}const o=r==="double"&&a.kind==="int"?wt(a.value):r==="string"?{kind:"string",value:we(a)}:a;if(lu(o)!==r)throw F(e.text);this.assignValue(o,s),this.state.lastTrace=`${s} = ${e.text.slice(e.text.indexOf("=")+1).trim()} -> ${we(o)}`}executeStatement(e){const t=this.state,n=e.trim(),a=n.toLowerCase(),s=this.afterOutput;if(this.afterOutput=!1,a.startsWith("input:")){t.inputRequest=this.parseInputRequest(n,s),t.outputLineOpen=!1,t.inputErrorNotice=void 0;return}const r=/^System\s*\.\s*out\s*\.\s*(println|print)\s*\(([\s\S]*)\)\s*;?$/u.exec(n);if(a.startsWith("output:")||a.startsWith("print:")||r){const y=r?r[2]:n.slice(a.startsWith("output:")?7:6),w=this.peek(()=>this.renderOutputExpression(y)),S=y.trim()===""?"":this.evaluateOutputExpression(y);t.outputLineOpen&&t.outputLines.length?t.outputLines[t.outputLines.length-1]+=S:t.outputLines.push(S),t.outputLineOpen=(r==null?void 0:r[1])==="print",this.afterOutput=!0,t.lastTrace=`${w} -> ${S}`;return}const o=a3(n);if(o){this.executeMBotCommand(o.method,o.args,n);return}if(this.executeFileStatement(n))return;if(n.endsWith("++")||n.endsWith("--")||n.includes("+=")||n.includes("-=")){this.executeIncrement(n);return}const l=/^(?:final\s+)?([A-Za-z]+)\s+([A-Za-z_]\w*(?:\s*,\s*[A-Za-z_]\w*)*)$/u.exec(Yn(n).trim()),u=l?Kt(l[1]):void 0;if(l&&u){const y=l[2].split(",").map(w=>w.trim());for(const w of y)t.variables.set(w,co(u,ou(u)));t.lastTrace=y.map(w=>`${w} = ${we(t.variables.get(w))}`).join(", ");return}const m=n.indexOf("=");if(m<0)throw qe(n);const c=n.slice(0,m).trim(),d=n.slice(m+1),h=this.parseArrayDeclaration(c,d);if(h){t.variables.set(h.name,h.value),t.lastTrace=`${h.name} = new ${h.typeName}[${h.count}]`;return}const g=this.parseAssignmentTarget(c);let f;try{f=this.peek(()=>this.renderNumericExpression(d))}catch{f=d.trim()}let x=g.valueType;if(!x)try{x=this.inferTargetValueType(g.variableName)}catch{x="int"}const b=this.evaluateExpression(d,x);this.assignValue(b,g.variableName),t.lastTrace=`${g.variableName} = ${f} -> ${we(b)}`}executeMBotCommand(e,t,n){var r;if((r=xi[e])!=null&&r.text){const o=xi[e];if(t.length!==o.args+1)throw F(n);const l=Ka(e,t.slice(0,-1).map(c=>this.evaluateDouble(c)));if(!l)throw F(n);const u=au(e,l,this.evaluateOutputExpression(t[t.length-1])),m=o.choices;if(m&&!m.includes(u.text??""))throw F(`${n} (${m.join(", ")})`);this.state.robotActions.push(u),this.state.lastTrace=`${n} -> ${u.label}`;return}const a=Ka(e,t.map(o=>this.evaluateDouble(o)));if(!a)throw F(n);const s=au(e,a);this.state.robotActions.push(s),this.state.lastTrace=`${n} -> ${s.label}`}executeFileStatement(e){const t=this.state,n=Yn(e).trim(),a=/^(?:(Scanner|BufferedReader|PrintWriter)\s+)?([A-Za-z_]\w*)\s*=\s*new\s+(Scanner|BufferedReader|PrintWriter)\s*\(([\s\S]*)\)$/u.exec(n);if(a){const[,m,c,d,h]=a;if(m&&m!==d)throw F(n);const g=d==="Scanner"?/^new\s+File\s*\(([\s\S]+)\)$/u.exec(h.trim()):d==="BufferedReader"?/^new\s+FileReader\s*\(([\s\S]+)\)$/u.exec(h.trim()):/^(?:new\s+(?:File|FileWriter)\s*\(([\s\S]+)\)|([\s\S]+))$/u.exec(h.trim());if(!g)throw qe(n);const f=this.fileNameValue(g[1]??g[2]);if(d==="PrintWriter")t.variables.set(c,{kind:"writer",file:f,text:""});else{const b=this.fileContent(f).split(/\r?\n/u);b[b.length-1]===""&&b.pop(),t.variables.set(c,{kind:"reader",className:d,file:f,lines:b,next:0})}return t.lastTrace=`${c} = new ${d}(${f})`,!0}const s=/^Files\s*\.\s*writeString\s*\(\s*(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(([^()]+)\)\s*,([\s\S]+)\)$/u.exec(n);if(s){const m=this.fileNameValue(s[1]),c=this.evaluateOutputExpression(s[2]);return t.files.set(m,c),t.lastTrace=`${m} ← ${JSON.stringify(c)}`,!0}const r=/^([A-Za-z_]\w*)\s*\.\s*(println|print|close)\s*\(([\s\S]*)\)$/u.exec(n),o=r&&t.variables.get(r[1]);if(!r||!o)return!1;if(o.kind==="null")throw new Ze({kind:"nullValue",text:r[1]});if(o.kind==="reader"&&r[2]==="close")return t.lastTrace=`${r[1]}.close()`,!0;if(o.kind!=="writer")return!1;if(r[2]==="close")return t.files.set(o.file,o.text),t.lastTrace=`${o.file} ← ${JSON.stringify(o.text)}`,!0;const l=r[3].trim()===""?"":this.evaluateOutputExpression(r[3]),u=r[2]==="println"?l+` +`)}function uu(i){return i.replaceAll("(int)","").replaceAll("(double)","").trim()}function El(i){const e=new Array(i.length).fill(!1);let t=0,n=!1,a=!1;return i.forEach((s,r)=>{if(n){a?a=!1:s==="\\"?a=!0:s==='"'&&(n=!1);return}switch(s){case'"':n=!0;break;case"(":case"[":t+=1;break;case")":case"]":t-=1;break;default:e[r]=t===0}}),e}function is(i,e){const t=Array.from(i),n=Array.from(e),a=El(t),s=[];let r=[],o=0;for(;ot[o+m]===u)&&a.slice(o,l).every(Boolean)){s.push(r.join("").trim()),r=[],o=l;continue}r.push(t[o]),o+=1}return s.push(r.join("").trim()),s}function p3(i){const e=Array.from(i),t=El(e);for(let n=0;n=","<=","==","!="].includes(o)&&(a=o)}if(a===void 0&&(e[n]==="<"||e[n]===">")&&(a=e[n]),a===void 0)continue;const s=e.slice(0,n).join("").trim(),r=e.slice(n+a.length).join("").trim();return{lhs:s,op:a,rhs:r}}}function Es(i,e){let t=0,n=!1,a=!1;for(let s=e;se.length||!t.every((r,o)=>e[a+o]===r))continue;const s=a+t.length-1;if(Es(e,s)===e.length-1)return{lhs:e.slice(0,a).join("").trim(),rhs:e.slice(s+1,-1).join("").trim()}}}function Yi(i){const e=i.trim();for(const t of["if","while","until","switch"]){if(!e.startsWith(t))continue;const n=e.slice(t.length);if(!(n===""||Wl(n[0])||n[0]==="("))continue;let a=n.trim();const s=oh(a);return s!==void 0&&(a=s),a===""?"true":a}return e===""?"true":e}function d1(i){const e=i.trim(),t=e.indexOf("[");if(!e.endsWith("]")||t<0)return;const n=e.slice(0,t).trim();if(!ai(n))return;const a=[];let s=t;for(;s2))return{arrayName:n,indexExpressions:a}}function x3(i){const e=i.trim();if(!e.endsWith(")"))return;const t=/^([A-Za-z_]\w*(?:\s*\[[^\[\]]*\])*|"(?:[^"\\]|\\.)*")\s*\.\s*([A-Za-z_]\w*)\s*\(/u.exec(e);if(!t)return;const n=Array.from(e),a=Array.from(t[0]).length-1;if(Es(n,a)!==n.length-1)return;const s=n.slice(a+1,-1).join("").trim();return{target:t[1],method:t[2],args:s===""?[]:is(s,",")}}function mu(i){return ai(i)||d1(i)!==void 0}function dr(i){const e=[];let t="",n=!1,a=!1,s=0;for(const r of i){if(a){t+=r,a=!1;continue}if(r==="\\"){t+=r,a=!0;continue}if(r==='"'){n=!n,t+=r;continue}if(!n&&r==="("&&(s+=1),!n&&r===")"&&(s-=1),r==="+"&&!n&&s===0){e.push(t),t="";continue}t+=r}if(n)throw F(i);return e.push(t),e}function b3(i){const e=[];let t=0,n="";for(const a of i){if(a==="{"&&(t+=1),a==="}"&&(t-=1),a===","&&t===0){e.push(n),n="";continue}n+=a}return n.trim()!==""&&e.push(n),e}function cu(i){const e=Array.from(i),t=[];let n=0;for(;n1)throw F(i)}else if(!Y1(e[n]))break;n+=1}const o=e.slice(s,n).join("");if(o==="."||!/^[0-9]*\.?[0-9]*$/.test(o))throw F(i);t.push({t:"number",literal:o,value:Number(o)});continue}if(ns(a)||a==="_"){const s=n;for(;n=0&&s=0&&o=0&&s|&&|\|\||^\s*!/u.test(e)}function Yn(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function hu(i){const e=i.slice(0,3);for(;e.length<3;)e.push("");return e}function po(i){const e=i.map(t=>Yn(t).trim());return e.length===1&&e[0].includes(";")?hu(e[0].split(";").map(t=>t.trim())):hu(e)}const lt=i=>i.frame?{frame:i.frame,callPath:i.callPath}:{};function qt(i,e=[],t={}){const n=[],a=s=>n.push(t.frame?{...s,...t}:s);return i.forEach((s,r)=>{const o=[...e,r],l=s.textLines.join(" ").trim();switch(s.type){case k.anweisung:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"statement"});break;case k.verzweigung:a({path:o,text:l||"true",kind:"branch",cases:s.cases});break;case k.fallauswahl:a({path:o,text:l||"0",kind:"switchSelection",cases:s.cases});break;case k.forSchleife:a({path:o,text:l,kind:"forLoopStart",loopBody:s.loopBody,forParts:po(s.textLines)});break;case k.whileSchleife:a({path:o,text:l||"true",kind:"whileLoop",loopBody:s.loopBody});break;case k.doUntilSchleife:a({path:o,text:l||"true",kind:"doUntilLoop",loopBody:s.loopBody});break;case k.endlosschleife:a({path:o,text:l||"true",kind:"infiniteLoop",loopBody:s.loopBody});break;case k.aussprung:a({path:o,text:l,kind:"jump"});break;case k.aufruf:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"call"});break}}),n}function v3(i,e){const t=i.trim().replaceAll(",",".");switch(e){case"int":if(!/^[+-]?[0-9]+$/.test(t))throw new Ze({kind:"wholeNumberExpected"});return vt(Number(t));case"double":if(!/^[+-]?([0-9]+\.?[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?$/.test(t))throw new Ze({kind:"numberExpected"});return wt(Number(t));case"string":return{kind:"string",value:i};case"boolean":switch(t.toLowerCase()){case"true":case"wahr":return{kind:"boolean",value:!0};case"false":case"falsch":return{kind:"boolean",value:!1};default:throw new Ze({kind:"booleanExpected"})}}}function gu(){return{stepIndex:0,variables:new Map,outputLines:[],isHalted:!1,files:new Map,robotActions:[]}}function w3(i,e){for(let t=0;tt===e.path[n])}function yt(i){const e=/^(void|int|double|String|boolean)\s+([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(Yn(i));if(!e)return;const t=[];if(e[3].trim()!=="")for(const n of e[3].split(",")){const a=/^(int|double|String|boolean|char)\s*((?:\[\s*\]){0,2})\s+([A-Za-z_]\w*)$/u.exec(n.trim());if(!a)return;const s=(a[2].match(/\[/gu)??[]).length;t.push({type:Kt(a[1]),name:a[3],...s>0?{dims:s}:{}})}return{returnType:Kt(e[1]),name:e[2],params:t}}function lh(i){const e=/^(?:(?:(int|double|String|boolean)\s+)?([A-Za-z_]\w*)\s*=\s*)?([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(Yn(i));if(e)return{targetType:e[1]?Kt(e[1]):void 0,target:e[2],name:e[3],args:e[4].trim()===""?[]:is(e[4],",")}}function as(i){var t,n;const e=Yn(i);return((t=yt(e))==null?void 0:t.name)??((n=lh(e))==null?void 0:n.name)??e.replace(/\(\s*\)$/u,"").trim()}class bi{constructor(e,t=()=>{}){v(this,"steps");v(this,"state",gu());v(this,"nextFrame",1);v(this,"callDepth",0);v(this,"frames",new Map);v(this,"peeking",!1);v(this,"robotSensors",{});v(this,"afterOutput",!1);this.resolveSubprogram=t,this.steps=qt(e.elements)}get currentStepPath(){const e=this.steps[this.state.stepIndex];return(e==null?void 0:e.callPath)??(e==null?void 0:e.path)}get canStep(){return!this.state.isHalted&&!this.state.inputRequest&&this.state.stepIndex ${we(n)}`}catch(n){this.state.inputErrorNotice=su(n);return}this.state.inputRequest=void 0,this.state.inputErrorNotice=void 0,this.state.stepIndex+=1,this.state.notice=this.finishedIfAtEnd()}}finishedIfAtEnd(){return this.state.stepIndex>=this.steps.length?{kind:"finished"}:void 0}splice(e){this.steps.splice(this.state.stepIndex,1,...e)}noticeAfterEntering(e){return e.length>0?void 0:this.finishedIfAtEnd()}executeBranch(e){const t=e.cases;if(!t||t.length<2)throw qe(e.text);const n=Yi(e.text),a=this.evaluateBool(n),s=a?0:1,r=qt(t[s].elements,[...e.path,s],lt(e));this.splice(r),this.state.lastTrace=`${n} -> ${a}`,this.state.notice=this.noticeAfterEntering(r)}executeSwitchSelection(e){const t=e.cases;if(!t||t.length===0)throw qe(e.text);const n=Yi(e.text),a=this.evaluateSwitchSelector(n),s=w3(a,t)??t.length-1,r=qt(t[s].elements,[...e.path,s],lt(e));this.splice(r),this.state.lastTrace=`${n} -> ${t[s].name}`,this.state.notice=this.noticeAfterEntering(r)}executeForLoopStart(e){const t=po(e.forParts??[e.text]);t[0]!==""&&this.executeStatement(t[0]),this.splice([{...lt(e),path:e.path,text:t[1],kind:"forLoopCondition",loopBody:e.loopBody,forParts:t}])}executeForLoopCondition(e){const t=po(e.forParts??[e.text]),n=t[1]===""?"true":t[1],a=this.evaluateBool(n);if(this.state.lastTrace=`${n} -> ${a}`,a){const s=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...s,{...lt(e),path:e.path,text:t[2],kind:"forLoopIncrement",loopBody:e.loopBody,forParts:t},{...lt(e),path:e.path,text:t[1],kind:"forLoopCondition",loopBody:e.loopBody,forParts:t}])}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}executeForLoopIncrement(e){const t=e.text.trim();t!==""&&this.executeIncrement(t),this.splice([])}executeWhileLoop(e){const t=Yi(e.text),n=this.evaluateBool(t);if(this.state.lastTrace=`${t} -> ${n}`,n){const a=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...a,{...lt(e),path:e.path,text:e.text,kind:"whileLoop",loopBody:e.loopBody}]),this.state.notice=this.noticeAfterEntering(a)}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}enterDoUntilLoop(e){const t=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...t,{...lt(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}]),this.state.notice=this.noticeAfterEntering(t)}executeDoUntilCondition(e){const t=Yi(e.text),n=this.evaluateBool(t);if(this.state.lastTrace=`${t} -> ${n}`,n){const a=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...a,{...lt(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}])}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}enterInfiniteLoop(e){const t=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...t,{...lt(e),path:e.path,text:e.text,kind:"infiniteLoop",loopBody:e.loopBody}]),this.state.lastTrace="true -> true",this.state.notice=t.length>0?void 0:{kind:"infiniteLoopWithoutBody"}}executeJump(e){const t=e.frame??0,n=o=>o.lengthl===e.path[u]);let a=this.steps.length,s="end";for(let o=this.state.stepIndex+1;o ${s}`,s==="return"&&this.finishFrame(r),this.state.notice=this.finishedIfAtEnd()}executeCall(e){const t=e.text,n=this.resolveSubprogram(as(t));if(!n){this.splice([]),this.state.lastTrace=`${t} -> ?`,this.state.notice={kind:"subprogramNotFound",text:t},this.state.stepIndex>=this.steps.length&&(this.state.notice={kind:"finished"});return}const a=lh(t),s=yt(n.caption);if(s?((a==null?void 0:a.args.length)??0)!==s.params.length||(a==null?void 0:a.target)!==void 0&&!s.returnType:a!==void 0&&(a.args.length>0||a.target!==void 0))throw new Ze({kind:"callArguments",text:(s==null?void 0:s.name)??as(t)});if(this.callDepth>=u3)throw new Ze({kind:"callTooDeep"});const o=new Map,l=[];s==null||s.params.forEach((d,h)=>{const g=a.args[h].trim();if(!d.dims){o.set(d.name,this.evaluateExpression(g,d.type));return}const f=this.state.variables.get(g);if(!f)throw/^[A-Za-z_]\w*$/u.test(g)?new Ze({kind:"unknownVariable",text:g}):F(g);if(!(d.dims===1?f.kind===`${d.type}Array`:f.kind==="grid"&&f.elementType===d.type))throw F(g);o.set(d.name,f),l.push({param:d.name,callerName:g})}),this.callDepth+=1;const u={frame:this.nextFrame++,callPath:e.callPath??e.path};s&&(this.frames.set(u.frame,{saved:this.state.variables,header:s,call:a,references:l}),this.state.variables=o);const m=qt(n.elements,[],u);this.splice([...m,{...u,path:e.path,text:t,kind:"callEnd"}]);const c=s==null?void 0:s.params.map((d,h)=>`${d.name} = ${d.dims?a.args[h].trim():we(o.get(d.name))}`).join(", ");this.state.lastTrace=c?`${t} -> ${c}`:`${t} -> call`}executeCallEnd(e){this.callDepth-=1,this.splice([]),this.state.lastTrace=`${e.text} -> return`,this.finishFrame(e),this.state.notice=this.finishedIfAtEnd()}executeReturn(e){const t=e.frame??0,n=Yn(e.text).slice(6).trim(),a=this.frames.get(t);if(a&&n!==""){if(!a.header.returnType)throw F(e.text);a.returnValue=this.evaluateExpression(n,a.header.returnType)}const s=a!=null&&a.returnValue?`${e.text} -> ${we(a.returnValue)}`:`${e.text} -> return`;if(t===0){this.steps.splice(this.state.stepIndex),this.state.lastTrace=s,this.state.notice={kind:"finished"};return}let r=this.state.stepIndex+1;for(;r0?new Map(t.saved):t.saved;for(const m of t.references){const c=this.state.variables.get(m.param);c&&n.set(m.callerName,c)}this.state.variables=n;const a=t.returnValue;if(t.header.returnType&&!a)throw new Ze({kind:"missingReturn",text:t.header.name});const s=(l=t.call)==null?void 0:l.target;if(!s||!a)return;let r=(u=t.call)==null?void 0:u.targetType;if(!r)try{r=this.inferTargetValueType(s)}catch{r=t.header.returnType}const o=r==="double"&&a.kind==="int"?wt(a.value):r==="string"?{kind:"string",value:we(a)}:a;if(lu(o)!==r)throw F(e.text);this.assignValue(o,s),this.state.lastTrace=`${s} = ${e.text.slice(e.text.indexOf("=")+1).trim()} -> ${we(o)}`}executeStatement(e){const t=this.state,n=e.trim(),a=n.toLowerCase(),s=this.afterOutput;if(this.afterOutput=!1,a.startsWith("input:")){t.inputRequest=this.parseInputRequest(n,s),t.outputLineOpen=!1,t.inputErrorNotice=void 0;return}const r=/^System\s*\.\s*out\s*\.\s*(println|print)\s*\(([\s\S]*)\)\s*;?$/u.exec(n);if(a.startsWith("output:")||a.startsWith("print:")||r){const y=r?r[2]:n.slice(a.startsWith("output:")?7:6),w=this.peek(()=>this.renderOutputExpression(y)),I=y.trim()===""?"":this.evaluateOutputExpression(y);t.outputLineOpen&&t.outputLines.length?t.outputLines[t.outputLines.length-1]+=I:t.outputLines.push(I),t.outputLineOpen=(r==null?void 0:r[1])==="print",this.afterOutput=!0,t.lastTrace=`${w} -> ${I}`;return}const o=a3(n);if(o){this.executeMBotCommand(o.method,o.args,n);return}if(this.executeFileStatement(n))return;if(n.endsWith("++")||n.endsWith("--")||n.includes("+=")||n.includes("-=")){this.executeIncrement(n);return}const l=/^(?:final\s+)?([A-Za-z]+)\s+([A-Za-z_]\w*(?:\s*,\s*[A-Za-z_]\w*)*)$/u.exec(Yn(n).trim()),u=l?Kt(l[1]):void 0;if(l&&u){const y=l[2].split(",").map(w=>w.trim());for(const w of y)t.variables.set(w,co(u,ou(u)));t.lastTrace=y.map(w=>`${w} = ${we(t.variables.get(w))}`).join(", ");return}const m=n.indexOf("=");if(m<0)throw qe(n);const c=n.slice(0,m).trim(),d=n.slice(m+1),h=this.parseArrayDeclaration(c,d);if(h){t.variables.set(h.name,h.value),t.lastTrace=`${h.name} = new ${h.typeName}[${h.count}]`;return}const g=this.parseAssignmentTarget(c);let f;try{f=this.peek(()=>this.renderNumericExpression(d))}catch{f=d.trim()}let x=g.valueType;if(!x)try{x=this.inferTargetValueType(g.variableName)}catch{x="int"}const b=this.evaluateExpression(d,x);this.assignValue(b,g.variableName),t.lastTrace=`${g.variableName} = ${f} -> ${we(b)}`}executeMBotCommand(e,t,n){var r;if((r=xi[e])!=null&&r.text){const o=xi[e];if(t.length!==o.args+1)throw F(n);const l=Ka(e,t.slice(0,-1).map(c=>this.evaluateDouble(c)));if(!l)throw F(n);const u=au(e,l,this.evaluateOutputExpression(t[t.length-1])),m=o.choices;if(m&&!m.includes(u.text??""))throw F(`${n} (${m.join(", ")})`);this.state.robotActions.push(u),this.state.lastTrace=`${n} -> ${u.label}`;return}const a=Ka(e,t.map(o=>this.evaluateDouble(o)));if(!a)throw F(n);const s=au(e,a);this.state.robotActions.push(s),this.state.lastTrace=`${n} -> ${s.label}`}executeFileStatement(e){const t=this.state,n=Yn(e).trim(),a=/^(?:(Scanner|BufferedReader|PrintWriter)\s+)?([A-Za-z_]\w*)\s*=\s*new\s+(Scanner|BufferedReader|PrintWriter)\s*\(([\s\S]*)\)$/u.exec(n);if(a){const[,m,c,d,h]=a;if(m&&m!==d)throw F(n);const g=d==="Scanner"?/^new\s+File\s*\(([\s\S]+)\)$/u.exec(h.trim()):d==="BufferedReader"?/^new\s+FileReader\s*\(([\s\S]+)\)$/u.exec(h.trim()):/^(?:new\s+(?:File|FileWriter)\s*\(([\s\S]+)\)|([\s\S]+))$/u.exec(h.trim());if(!g)throw qe(n);const f=this.fileNameValue(g[1]??g[2]);if(d==="PrintWriter")t.variables.set(c,{kind:"writer",file:f,text:""});else{const b=this.fileContent(f).split(/\r?\n/u);b[b.length-1]===""&&b.pop(),t.variables.set(c,{kind:"reader",className:d,file:f,lines:b,next:0})}return t.lastTrace=`${c} = new ${d}(${f})`,!0}const s=/^Files\s*\.\s*writeString\s*\(\s*(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(([^()]+)\)\s*,([\s\S]+)\)$/u.exec(n);if(s){const m=this.fileNameValue(s[1]),c=this.evaluateOutputExpression(s[2]);return t.files.set(m,c),t.lastTrace=`${m} ← ${JSON.stringify(c)}`,!0}const r=/^([A-Za-z_]\w*)\s*\.\s*(println|print|close)\s*\(([\s\S]*)\)$/u.exec(n),o=r&&t.variables.get(r[1]);if(!r||!o)return!1;if(o.kind==="null")throw new Ze({kind:"nullValue",text:r[1]});if(o.kind==="reader"&&r[2]==="close")return t.lastTrace=`${r[1]}.close()`,!0;if(o.kind!=="writer")return!1;if(r[2]==="close")return t.files.set(o.file,o.text),t.lastTrace=`${o.file} ← ${JSON.stringify(o.text)}`,!0;const l=r[3].trim()===""?"":this.evaluateOutputExpression(r[3]),u=r[2]==="println"?l+` `:l;return t.variables.set(r[1],{...o,text:o.text+u}),t.lastTrace=`${r[1]}.${r[2]}(${JSON.stringify(l)})`,!0}fileNameValue(e){const t=e.trim(),n=at(t);if(n!==void 0)return n;const a=this.evaluateReference(t);if((a==null?void 0:a.kind)==="string")return a.value;throw F(t)}fileContent(e){const t=this.state.files.get(e)??ts.get(e);if(t===void 0)throw new Ze({kind:"fileNotFound",text:e});return t}readerMethod(e,t,n,a){if(n.args.length)throw F(a);const s=t.next0?"+":"-";if(r.kind==="int"){t.set(s,vt(r.value+a)),this.state.lastTrace=`${s} = ${r.value} ${o} 1 -> ${r.value+a}`;return}if(r.kind==="double"){const l=r.value+a;t.set(s,wt(l)),this.state.lastTrace=`${s} = ${we(r)} ${o} 1 -> ${we(wt(l))}`;return}throw qe(e)}for(const[n,a]of[["+=",1],["-=",-1]]){const s=e.indexOf(n);if(s<0)continue;const r=e.slice(0,s).trim(),o=e.slice(s+2),l=t.get(r);if(!ai(r)||!l)throw qe(e);const u=a>0?"+":"-";if(l.kind==="int"){const m=this.evaluateInt(o),c=l.value+a*m;t.set(r,vt(c)),this.state.lastTrace=`${r} = ${l.value} ${u} ${m} -> ${c}`;return}if(l.kind==="double"){const m=this.evaluateDouble(o),c=l.value+a*m;t.set(r,wt(c)),this.state.lastTrace=`${r} = ${we(l)} ${u} ${we(wt(m))} -> ${we(wt(c))}`;return}throw qe(e)}this.executeStatement(e)}parseAssignmentTarget(e){if(d1(e))return{variableName:e.trim()};const t=e.split(/\s+/u).filter(Boolean);let n,a;if(t.length===1)n=t[0];else if(t.length===2&&Kt(t[0]))n=t[1],a=Kt(t[0]);else if(t.length===3&&t[0]==="const"&&Kt(t[1]))n=t[2],a=Kt(t[1]);else throw qe(e);if(!mu(n))throw qe(e);return{variableName:n,valueType:a}}parseInputRequest(e,t=!1){const n=e.slice(6).trim(),a=/^(\S+)(?:\s+(\S+))?(?:\s+([\s\S]*))?$/u.exec(n);if(!a)throw qe(e);const s=[a[1],a[2],a[3]].filter(c=>c!==void 0);let r,o,l;const u=Kt(s[0]);if(s.length>=2&&u?(r=s[1],o=u,l=(s[2]??"").trim()):(r=s[0],o=this.inferTargetValueType(r),l=(s[1]??"").trim()),!mu(r))throw qe(e);const m=at(l)??l;return m===""&&t?this.state.outputLineOpen?{variableName:r,valueType:o,prompt:"",continuesLine:!0}:{variableName:r,valueType:o,prompt:""}:{variableName:r,valueType:o,prompt:m===""?`${r}:`:m}}parseArrayDeclaration(e,t){const n=e.split(/\s+/u).filter(Boolean);if(n.length!==2||!n[0].endsWith("[]"))return;const a=n[0].endsWith("[][]"),s=n[0].slice(0,a?-4:-2),r=Kt(s),o=n[1];if(!r||!ai(o))throw qe(e);if(a)return this.parseGridDeclaration(o,s,r,t);const l=t.trim();if(l.startsWith("{")&&l.endsWith("}")){const h=l.slice(1,-1).split(",").map(f=>f.trim());let g;switch(r){case"int":g={kind:"intArray",value:h.map(f=>this.evaluateInt(f))};break;case"double":g={kind:"doubleArray",value:h.map(f=>this.evaluateDouble(f))};break;case"string":g={kind:"stringArray",value:h.map(f=>at(f)??this.evaluateOutputExpression(f))};break;case"boolean":g={kind:"booleanArray",value:h.map(f=>this.evaluateBool(f))};break}return{name:o,typeName:s,count:h.length,value:g}}const u=`new ${s}[`;if(!l.startsWith(u)){const h=this.evaluateStringMethod(l);if((h==null?void 0:h.kind)==="stringArray"&&r==="string")return{name:o,typeName:s,count:h.value.length,value:h}}if(!l.startsWith(u)||!l.endsWith("]"))throw qe(t);const m=l.slice(u.length,-1),c=this.evaluateInt(m);if(c<0)throw F(m);const d=r==="int"?{kind:"intArray",value:new Array(c).fill(0)}:r==="double"?{kind:"doubleArray",value:new Array(c).fill(0)}:r==="boolean"?{kind:"booleanArray",value:new Array(c).fill(!1)}:{kind:"stringArray",value:new Array(c).fill("")};return{name:o,typeName:s,count:c,value:d}}parseGridDeclaration(e,t,n,a){var c;const s=a.trim(),r=d=>{switch(n){case"int":return this.evaluateInt(d);case"double":return this.evaluateDouble(d);case"boolean":return this.evaluateBool(d);case"string":return at(d.trim())??this.evaluateOutputExpression(d)}};if(s.startsWith("{")&&s.endsWith("}")){const d=b3(s.slice(1,-1)).map(h=>{const g=h.trim();if(!g.startsWith("{")||!g.endsWith("}"))throw F(g);return g.slice(1,-1).trim()===""?[]:g.slice(1,-1).split(",").map(f=>r(f.trim()))});return{name:e,typeName:t,count:`${d.length}][${((c=d[0])==null?void 0:c.length)??0}`,value:{kind:"grid",elementType:n,value:d}}}const o=new RegExp(String.raw`^new\s+${t}\s*\[(.+)\]\s*\[(.+)\]$`,"u").exec(s);if(!o)throw qe(a);const l=this.evaluateInt(o[1]),u=this.evaluateInt(o[2]);if(l<0)throw F(o[1]);if(u<0)throw F(o[2]);const m={kind:"grid",elementType:n,value:Array.from({length:l},()=>new Array(u).fill(ou(n)))};return{name:e,typeName:t,count:`${l}][${u}`,value:m}}arrayIndex(e){const t=this.evaluateInt(e);if(t<0)throw F(e);return t}evaluateReference(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return n;const a=this.evaluateStringMethod(t);if(a)return a;const s=/^\(\s*char\s*\)\s*(.+)$/su.exec(t);if(s){const o=this.evaluateInt(s[1]);if(!(o>=0&&o<=1114111))throw F(t);return{kind:"string",value:String.fromCodePoint(o)}}const r=d1(t);if(r)return this.valueInArray(r.arrayName,r.indexExpressions.map(o=>this.arrayIndex(o)))}evaluateStringMethod(e){const t=x3(e);if(!t)return;const n=this.evaluateStaticCall(e,t);if(n)return n;const a=this.state.variables.get(t.target.trim());if((a==null?void 0:a.kind)==="reader")return this.readerMethod(t.target.trim(),a,t,e);if((a==null?void 0:a.kind)==="null")throw new Ze({kind:"nullValue",text:t.target.trim()});const s=at(t.target)??this.stringValueOf(t.target);if(s===void 0)return;const r=t.args,o=d=>{const h=r[d];if(h===void 0)throw F(e);const g=at(h.trim());if(g!==void 0)return g;const f=this.evaluateReference(h);if((f==null?void 0:f.kind)==="string")return f.value;throw F(h)},l=d=>{if(r[d]===void 0)throw F(e);return this.evaluateInt(r[d])},u=d=>{if(r.length!==d)throw F(e)},m=Array.from(s),c=(d,h)=>{if(d<0||d>h)throw F(e);return d};switch(t.method){case"length":return u(0),vt(m.length);case"charAt":return u(1),{kind:"string",value:m[c(l(0),m.length-1)]};case"substring":{if(r.length!==1&&r.length!==2)throw F(e);const d=c(l(0),m.length),h=r.length===2?c(l(1),m.length):m.length;if(h0&&h[h.length-1]==="";)h.pop();return{kind:"stringArray",value:h}}default:return}}evaluateStaticCall(e,t){const n=()=>{if(t.args.length!==1)throw F(e);return t.args[0]},a=s=>{const r=at(s.trim());if(r!==void 0)return r;const o=this.evaluateReference(s);if((o==null?void 0:o.kind)==="string")return o.value;throw F(s)};switch(`${t.target}.${t.method}`){case"Integer.parseInt":{const s=a(n()).trim();if(!/^[+-]?\d+$/u.test(s))throw new Ze({kind:"wholeNumberExpected"});return vt(Number(s))}case"Double.parseDouble":{const s=Number(a(n()).trim());if(!Number.isFinite(s))throw new Ze({kind:"numberExpected"});return wt(s)}case"String.valueOf":return{kind:"string",value:this.evaluateOutputExpression(n())};case"Files.readString":{const s=/^(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)$/u.exec(n().trim());if(!s)throw F(e);const r=at(s[1]),o=ts.get(r);if(o===void 0)throw new Ze({kind:"fileNotFound",text:r});return{kind:"string",value:o}}default:return}}stringValueOf(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return n.kind==="string"?n.value:void 0;const a=d1(t);if(!a)return;const s=this.valueInArray(a.arrayName,a.indexExpressions.map(r=>this.arrayIndex(r)));return s.kind==="string"?s.value:void 0}substituteStringCalls(e){if(!e.includes("("))return e;let t="",n=e;const a=/([A-Za-z_]\w*(?:\[[^\[\]]*\])*|"(?:[^"\\]|\\.)*")\s*\.\s*(length|indexOf|lastIndexOf|compareTo|charAt|parseInt|parseDouble)\s*\(/u;for(let s=a.exec(n);s;s=a.exec(n)){const r=s.index+s[0].length-1,o=Es(Array.from(n),Array.from(n.slice(0,r)).length);if(o===void 0)break;const l=Array.from(n),u=l.slice(Array.from(n.slice(0,s.index)).length,o+1).join(""),m=this.evaluateStringMethod(u),c=l.slice(0,Array.from(n.slice(0,s.index)).length).join(""),d=(m==null?void 0:m.kind)==="string"?go(m.value):void 0;(m==null?void 0:m.kind)==="int"?t+=c+String(m.value):(m==null?void 0:m.kind)==="double"?t+=c+(Number.isInteger(m.value)?m.value.toFixed(1):String(m.value)):d!==void 0?t+=c+String(d):t+=c+u,n=l.slice(o+1).join("")}return t+n}valueInArray(e,t){const n=this.state.variables.get(e);if(!n)throw $1(e);const a=`${e}[${t.join("][")}]`;if(n.kind==="grid"){if(t.length!==2)throw F(a);const r=n.value[t[0]];if(!r||t[1]>=r.length)throw F(a);return co(n.elementType,r[t[1]])}if(t.length!==1)throw F(a);const s=t[0];if(!ho(n))throw F(e);if(s>=n.value.length)throw F(a);switch(n.kind){case"intArray":return vt(n.value[s]);case"doubleArray":return wt(n.value[s]);case"stringArray":return{kind:"string",value:n.value[s]};case"booleanArray":return{kind:"boolean",value:n.value[s]};default:throw F(e)}}inferTargetValueType(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return lu(n);const a=d1(t);if(a){const s=this.state.variables.get(a.arrayName);if(!s)throw $1(a.arrayName);if(s.kind==="intArray")return"int";if(s.kind==="doubleArray")return"double";if(s.kind==="stringArray")return"string";if(s.kind==="booleanArray")return"boolean";if(s.kind==="grid")return s.elementType;throw F(a.arrayName)}throw qe(e)}assignValue(e,t){const n=t.trim(),a=d1(n);if(!a){this.state.variables.set(n,e);return}const s=a.indexExpressions.map(u=>this.arrayIndex(u)),r=this.state.variables.get(a.arrayName);if(!r)throw $1(a.arrayName);if(r.kind==="grid"){if(s.length!==2||s[0]>=r.value.length||s[1]>=r.value[s[0]].length)throw F(n);const u=r.elementType==="double"&&e.kind==="int"||e.kind===r.elementType?e.value:void 0;if(u===void 0||ho(e))throw F(n);const m=r.value.map(c=>[...c]);m[s[0]][s[1]]=u,this.state.variables.set(a.arrayName,{...r,value:m});return}if(s.length!==1)throw F(n);const o=s[0];let l;if(r.kind==="intArray"&&e.kind==="int")l={kind:"intArray",value:[...r.value]};else if(r.kind==="doubleArray"&&(e.kind==="double"||e.kind==="int"))l={kind:"doubleArray",value:[...r.value]};else if(r.kind==="stringArray"&&e.kind==="string")l={kind:"stringArray",value:[...r.value]};else if(r.kind==="booleanArray"&&e.kind==="boolean")l={kind:"booleanArray",value:[...r.value]};else throw F(n);if(o>=l.value.length)throw F(n);l.value[o]=e.value,this.state.variables.set(a.arrayName,l)}evaluateOutputExpression(e){const t=this.withSensors(e).trim();if(du(t)&&dr(t).every(s=>at(s.trim())===void 0)&&!this.evaluateReference(t))return String(this.evaluateBool(t));let n,a;for(const s of dr(this.withSensors(e))){const r=s.trim(),o=at(r),l=o!==void 0?{kind:"string",value:o}:this.evaluateReference(r)??(du(r)?{kind:"boolean",value:this.evaluateBool(r)}:this.evaluateNumeric(r)),u=l.kind==="int"||l.kind==="double";if(a===void 0&&u){n?n=n.kind==="int"&&l.kind==="int"?vt(n.value+l.value):wt(n.value+l.value):n=l;continue}a=(a??(n?we(n):""))+we(l),n=void 0}return a??(n?we(n):"")}renderOutputExpression(e){return dr(e).map(t=>{const n=t.trim();if(at(n)!==void 0)return n;const a=this.evaluateReference(n);if(a)return we(a);try{return this.renderNumericExpression(n)}catch{return n}}).join(" + ")}evaluateExpression(e,t){switch(t){case"int":return vt(this.evaluateInt(e));case"double":return wt(this.evaluateDouble(e));case"string":{const n=e.trim(),a=at(n);if(a!==void 0)return{kind:"string",value:a};if(n==="null")return{kind:"null"};const s=this.evaluateReference(n);return(s==null?void 0:s.kind)==="null"?s:s?{kind:"string",value:we(s)}:{kind:"string",value:this.evaluateOutputExpression(e)}}case"boolean":return{kind:"boolean",value:this.evaluateBool(e)}}}evaluateNumeric(e){const{v:t,int:n}=this.parser(e).parseNumber();return n||Number.isFinite(t)&&Math.round(t)===t?vt(t):wt(t)}parser(e){const t=this.withSensors(e);return new y3(cu(uu(this.substituteStringCalls(t))),this.state.variables)}withSensors(e){return r3(e,t=>this.robotSensors[t]??St[t].simulated)}evaluateInt(e){return this.parser(e).parseInt()}evaluateDouble(e){return this.parser(e).parseDouble()}evaluateBool(e){const t=this.withSensors(e).trim();if(t==="true")return!0;if(t==="false")return!1;const n=this.evaluateReference(t);if((n==null?void 0:n.kind)==="boolean")return n.value;const a=is(t,"||");if(a.length>1)return a.some(u=>this.evaluateBool(u));const s=is(t,"&&");if(s.length>1)return s.every(u=>this.evaluateBool(u));if(t.startsWith("!")&&!t.startsWith("!="))return!this.evaluateBool(t.slice(1));const r=oh(t);if(r!==void 0)return this.evaluateBool(r);const o=f3(t);if(o)return this.evaluateComparison(o.lhs,"==",o.rhs);const l=p3(t);if(l)return this.evaluateComparison(l.lhs,l.op,l.rhs);if(this.stringOperand(t)!==void 0)throw F(t);return this.evaluateDouble(t)!==0}evaluateComparison(e,t,n){if((e.trim()==="null"||n.trim()==="null")&&(t==="=="||t==="!=")){const m=d=>{var h;return d.trim()==="null"||((h=this.evaluateReference(d))==null?void 0:h.kind)==="null"},c=m(e)===m(n);return t==="=="?c:!c}const a=this.booleanOperand(e),s=this.booleanOperand(n);if((a!==void 0||s!==void 0)&&(t==="=="||t==="!=")){const m=a??this.evaluateBool(e),c=s??this.evaluateBool(n);return t==="=="?m===c:m!==c}const r=this.stringOperand(e),o=this.stringOperand(n);let l,u;if(r!==void 0||o!==void 0){if(r===void 0||o===void 0)throw F(`${e} ${t} ${n}`);l=r,u=o}else l=this.evaluateDouble(e),u=this.evaluateDouble(n);switch(t){case"==":return l===u;case"!=":return l!==u;case"<":return l":return l>u;case">=":return l>=u;default:throw F(`${e} ${t} ${n}`)}}booleanOperand(e){const t=e.trim();if(t==="true")return!0;if(t==="false")return!1;const n=this.evaluateReference(t);return(n==null?void 0:n.kind)==="boolean"?n.value:void 0}stringOperand(e){const t=e.trim(),n=at(t);if(n!==void 0)return n;const a=this.evaluateReference(t);return(a==null?void 0:a.kind)==="string"?a.value:void 0}evaluateSwitchSelector(e){const t=this.withSensors(e).trim(),n=at(t);if(n!==void 0)return{kind:"text",value:n};const a=this.state.variables.get(t);if(a)switch(a.kind){case"int":return{kind:"int",value:a.value};case"double":return{kind:"int",value:Math.trunc(a.value)};case"string":return{kind:"text",value:a.value};default:throw F(t)}return/^[+-]?[0-9]+$/.test(t)?{kind:"int",value:Number(t)}:{kind:"int",value:this.evaluateInt(t)}}renderNumericExpression(e){return cu(uu(e)).map(t=>{if(t.t==="number")return t.literal;if(t.t==="identifier"){const n=this.state.variables.get(t.name);if(!n)throw $1(t.name);return we(n)}return t.t}).join(" ").replaceAll("( ","(").replaceAll(" )",")").replaceAll(" . ",".").replaceAll("[ ","[").replaceAll(" ]","]")}}const uh={baseIndent:0,indentPerLevel:4,includeDiagramTextAsComments:!1,includeEmptyElseBranch:!0,pseudocodeNote:"Pseudocode – not a runnable program"};function ss(i,e,t={},n=[]){const a=Nl(i,e,t);let s="";e==="javascript"&&(s+=`"use strict"; `);const r=[i,...e==="java"?[]:n];if(e==="python"&&r.some(kh)&&(s+=`import random @@ -38,7 +38,7 @@ ${o.out}`;case"javascript":return`${Z(a)}function ${e.name}(${r}) { ${o.out}${Z(a)}} `}}const Z=i=>i>0?" ".repeat(i):"";function ce(i,e){const t=i.exec(e);return t?Array.from(t,n=>n??""):void 0}function k3(i,e){return i==="python"?"# empty element":"// empty element"}const xo=i=>i.trim()==="ø";function ch(i,e){return Z(i)+(e==="python"?`# empty element `:`// empty element -`)}function S3(i){switch(i.type){case I.leerElement:return!0;case I.anweisung:case I.aufruf:return i.textLines.map(e=>e.trim()).every(e=>e===""||xo(e));default:return!1}}function _3(i){return i.every(S3)}function Fl(i,e,t){const n=i.map(a=>a.replace(/^[ \t]+|[ \t]+$/g,"")).filter(a=>a!=="");return n.length===0?"":e==="python"?Z(t)+`""" +`)}function S3(i){switch(i.type){case k.leerElement:return!0;case k.anweisung:case k.aufruf:return i.textLines.map(e=>e.trim()).every(e=>e===""||xo(e));default:return!1}}function _3(i){return i.every(S3)}function Fl(i,e,t){const n=i.map(a=>a.replace(/^[ \t]+|[ \t]+$/g,"")).filter(a=>a!=="");return n.length===0?"":e==="python"?Z(t)+`""" `+n.map(a=>Z(t)+a+` `).join("")+Z(t)+`""" `:n.length===1?Z(t)+"/* "+n[0]+` */ @@ -129,20 +129,20 @@ ${o.out}${Z(a)}} `:Z(t)+`${s.name} = ${u} `}const r=Q3(i);if(!r)return;if(e==="javascript")return Z(t)+rs(`let ${r.name} = ${Ih(r.rhs,r.isArray)}`)+` `;const l=!r.isArray&&Fs(r.rhs)===void 0&&r.rhs.trim()!=="null"?jn(r.rhs,n,a):X3(r.rhs,r.isArray,n);return Z(t)+`${r.name} = ${l} -`}function gn(i,e){for(const t of i){e(t),t.loopBody&&gn(t.loopBody,e);for(const n of t.cases??[])gn(n.elements,e)}}function ex(i){const e=n=>["int","integer","long","short","byte"].includes(n.trim().toLowerCase()),t=new Set;return gn(i.elements,n=>{for(const a of n.textLines){const s=a.trim();if(s==="")continue;if(s.toLowerCase().startsWith("input:")){const l=Jl(s.slice(6).trim());l&&e(l.type)&&!l.name.includes("[")&&t.add(l.name);continue}const r=fh(s);if(r&&e(r.rawType)){t.add(r.name);continue}const o=ce(/^\s*(integer|int|long|short|byte)\s+([a-zA-Z_]\w*)\s*=/i,s);o&&t.add(o[2].trim())}}),t}function zo(i,e){const t=r=>/^\d+$/.test(r)||e.has(r),n=String.raw`(?:[a-zA-Z_]\w*|\d+(?:\.\d+)?)`,a=new RegExp(String.raw`(?{const o=r.split(/\s*([*/%])\s*/);if(!o.some(m=>m==="/"))return r;let l=o[0],u=t(o[0]);for(let m=1;mr.replace(a,s).replace(new RegExp("(?t(l)&&t(u)?`${l} = Math.trunc(${l} / ${u})`:o))}function ls(i){let e=!1;return gn(i.elements,t=>{t.type===I.anweisung&&t.textLines.some(n=>n.trim().toLowerCase().startsWith("input:"))&&(e=!0)}),e}function Ql(i){let e=!1,t=!1,n=!1;return gn(i.elements,a=>{for(const s of a.textLines)/\bFiles\s*\./.test(s)&&(e=!0),/\bnew\s+(?:File|PrintWriter|FileReader|FileWriter|BufferedReader)\s*\(/.test(s)&&(t=!0),/\bnew\s+Scanner\s*\(\s*new\s+File\b/.test(s)&&(n=!0)}),[...t?["import java.io.*;"]:[],...e?["import java.nio.file.*;"]:[],...n?["import java.util.Scanner;"]:[]]}function tx(i){return Ql(i).length>0}function kh(i){let e=!1;return gn(i.elements,t=>{t.textLines.some(n=>/\bMath\.random\s*\(/i.test(n))&&(e=!0)}),e}function Xi(i,e){const t=i.trim();return t===""?e==="python"?'""':"0":e==="java"||new RegExp("^\\p{N}+$","u").test(t)||Vl(t)?t:'"'+t.replaceAll('"','\\"')+'"'}function E1(i,e){const t=i.trim();if(t==="")return"";switch(e){case"java":return"/* "+t+" */";case"python":return" # "+t;case"javascript":return" /* "+t+" */"}}function nx(i,e,t,n,a){const s=i.map(r=>r.trim());if(s.every(r=>r==="")){t.live&&(a.out+=Z(n)+(e==="python"?"pass":";")+` +`}function gn(i,e){for(const t of i){e(t),t.loopBody&&gn(t.loopBody,e);for(const n of t.cases??[])gn(n.elements,e)}}function ex(i){const e=n=>["int","integer","long","short","byte"].includes(n.trim().toLowerCase()),t=new Set;return gn(i.elements,n=>{for(const a of n.textLines){const s=a.trim();if(s==="")continue;if(s.toLowerCase().startsWith("input:")){const l=Jl(s.slice(6).trim());l&&e(l.type)&&!l.name.includes("[")&&t.add(l.name);continue}const r=fh(s);if(r&&e(r.rawType)){t.add(r.name);continue}const o=ce(/^\s*(integer|int|long|short|byte)\s+([a-zA-Z_]\w*)\s*=/i,s);o&&t.add(o[2].trim())}}),t}function zo(i,e){const t=r=>/^\d+$/.test(r)||e.has(r),n=String.raw`(?:[a-zA-Z_]\w*|\d+(?:\.\d+)?)`,a=new RegExp(String.raw`(?{const o=r.split(/\s*([*/%])\s*/);if(!o.some(m=>m==="/"))return r;let l=o[0],u=t(o[0]);for(let m=1;mr.replace(a,s).replace(new RegExp("(?t(l)&&t(u)?`${l} = Math.trunc(${l} / ${u})`:o))}function ls(i){let e=!1;return gn(i.elements,t=>{t.type===k.anweisung&&t.textLines.some(n=>n.trim().toLowerCase().startsWith("input:"))&&(e=!0)}),e}function Ql(i){let e=!1,t=!1,n=!1;return gn(i.elements,a=>{for(const s of a.textLines)/\bFiles\s*\./.test(s)&&(e=!0),/\bnew\s+(?:File|PrintWriter|FileReader|FileWriter|BufferedReader)\s*\(/.test(s)&&(t=!0),/\bnew\s+Scanner\s*\(\s*new\s+File\b/.test(s)&&(n=!0)}),[...t?["import java.io.*;"]:[],...e?["import java.nio.file.*;"]:[],...n?["import java.util.Scanner;"]:[]]}function tx(i){return Ql(i).length>0}function kh(i){let e=!1;return gn(i.elements,t=>{t.textLines.some(n=>/\bMath\.random\s*\(/i.test(n))&&(e=!0)}),e}function Xi(i,e){const t=i.trim();return t===""?e==="python"?'""':"0":e==="java"||new RegExp("^\\p{N}+$","u").test(t)||Vl(t)?t:'"'+t.replaceAll('"','\\"')+'"'}function E1(i,e){const t=i.trim();if(t==="")return"";switch(e){case"java":return"/* "+t+" */";case"python":return" # "+t;case"javascript":return" /* "+t+" */"}}function nx(i,e,t,n,a){const s=i.map(r=>r.trim());if(s.every(r=>r==="")){t.live&&(a.out+=Z(n)+(e==="python"?"pass":";")+` `);return}if(t.includeDiagramTextAsComments){const r=s.filter(o=>o!==""&&!xo(o));r.length>0&&(a.out+=Fl(r,e,n))}for(const r of s){if(r==="")continue;if(xo(r)){a.out+=t.live?Ul(n,t.live):ch(n,e);continue}const o=t.jsIntVariables??new Set,l=t.arrayElementTypes??new Map,u=t.stringVariables??new Set,m=(e==="java"?D3(r,n,l):void 0)??(e==="javascript"?Z3(r,n,l):void 0)??(e==="python"?M3(r,n,l):void 0)??W3(r,e,n,o,u)??J3(r,e,n,o,u)??V3(r,e,n,o)??K3(r,e,n,o,u)??j3(r,e,n,o,u);if(m!==void 0){a.out+=e==="javascript"?zo(m,o):m;continue}let c=r;T3(e)?c=rs(e==="javascript"?zo(r,o):r):e==="python"&&(c=yh(r,o,u)),c!==""&&(a.out+=Z(n)+c+` `)}}function si(i,e,t,n,a,s,r,o=(l=>(l=a.live)==null?void 0:l.labels.condition)()){if(a.includeDiagramTextAsComments&&(r.out+=Fl(t,n,s)),o!==void 0&&$l(t)){r.out+=Z(s)+i+Xn(o)+e;return}const u=Da(t),m=a.jsIntVariables??new Set,c=n==="python"?Pe(u,m):n==="javascript"?zo(u,m):u;r.out+=Z(s)+i+c+e}function p1(i,e,t,n,a){const s=a.out.length;for(const o of i)Rs(o,e,t,n,a);if(t.live&&a.out.length===s&&(a.out+=Ul(n,t.live)),e!=="python")return;a.out.slice(s).split(` `).map(o=>o.trim()).every(o=>o===""||o.startsWith("#"))&&(a.out+=Z(n)+`pass -`)}function ix(i,e){var n;if(e.includeDiagramTextAsComments||i.length!==1)return;const t=i[0];return t.type===I.verzweigung&&(((n=t.cases)==null?void 0:n.length)??0)>=2?t:void 0}function Io(i,e,t,n,a,s){const r=i.cases;if(!r||r.length<2)return;const o=e==="python",l=n+t.indentPerLevel,u=!t.includeEmptyElseBranch&&_3(r[1].elements),m=u?void 0:ix(r[1].elements,t);if(o){si(s?"elif ":"if ",`: +`)}function ix(i,e){var n;if(e.includeDiagramTextAsComments||i.length!==1)return;const t=i[0];return t.type===k.verzweigung&&(((n=t.cases)==null?void 0:n.length)??0)>=2?t:void 0}function Io(i,e,t,n,a,s){const r=i.cases;if(!r||r.length<2)return;const o=e==="python",l=n+t.indentPerLevel,u=!t.includeEmptyElseBranch&&_3(r[1].elements),m=u?void 0:ix(r[1].elements,t);if(o){si(s?"elif ":"if ",`: `,i.textLines,e,t,n,a),p1(r[0].elements,e,t,l,a),m?Io(m,e,t,n,a,!0):u||(a.out+=Z(n)+`else: `,p1(r[1].elements,e,t,l,a));return}if(si(s?"} else if (":"if (",`) { `,i.textLines,e,t,n,a),p1(r[0].elements,e,t,l,a),m){const c=a.out.length;Io(m,e,t,n,a,!0),_h(t,m,a,c)}else u||(a.out+=Z(n)+`} else { `,p1(r[1].elements,e,t,l,a)),a.out+=Z(n)+`} -`}function Rs(i,e,t,n,a){const s=a.out.length;ax(i,e,t,n,a),_h(t,i,a,s)}function ax(i,e,t,n,a){var m;const s=t.indentPerLevel,r=e==="python",o=(c,d)=>p1(c,e,t,d,a),l=(c,d)=>si(c,d,i.textLines,e,t,n,a),u=(c=n)=>{t.includeDiagramTextAsComments&&(a.out+=Fl(i.textLines,e,c))};switch(i.type){case I.leerElement:a.out+=t.live?Ul(n,t.live):ch(n,e);return;case I.anweisung:case I.aufruf:nx(i.textLines,e,t,n,a);return;case I.aussprung:{const c=Da(i.textLines);i.textLines.some(d=>d.trim()!=="")&&u(),r?a.out+=Z(n)+(c===""?`break +`}function Rs(i,e,t,n,a){const s=a.out.length;ax(i,e,t,n,a),_h(t,i,a,s)}function ax(i,e,t,n,a){var m;const s=t.indentPerLevel,r=e==="python",o=(c,d)=>p1(c,e,t,d,a),l=(c,d)=>si(c,d,i.textLines,e,t,n,a),u=(c=n)=>{t.includeDiagramTextAsComments&&(a.out+=Fl(i.textLines,e,c))};switch(i.type){case k.leerElement:a.out+=t.live?Ul(n,t.live):ch(n,e);return;case k.anweisung:case k.aufruf:nx(i.textLines,e,t,n,a);return;case k.aussprung:{const c=Da(i.textLines);i.textLines.some(d=>d.trim()!=="")&&u(),r?a.out+=Z(n)+(c===""?`break `:`break # ${c} `):a.out+=Z(n)+(c===""?`break; `:`break; // ${c} -`);return}case I.verzweigung:Io(i,e,t,n,a,!1);return;case I.fallauswahl:{const c=i.cases;if(!c||c.length===0)return;if(r&&t.pythonWithoutMatch){const d=`wahl${n/s+1}`;si(d+" = ",` +`);return}case k.verzweigung:Io(i,e,t,n,a,!1);return;case k.fallauswahl:{const c=i.cases;if(!c||c.length===0)return;if(r&&t.pythonWithoutMatch){const d=`wahl${n/s+1}`;si(d+" = ",` `,i.textLines,e,t,n,a),c.forEach((h,g)=>{const f=g===c.length-1;f&&g===0?a.out+=Z(n)+"if True:"+E1(h.name,e)+` `:f?a.out+=Z(n)+"else:"+E1(h.name,e)+` `:a.out+=Z(n)+(g===0?"if ":"elif ")+d+" == "+Xi(h.name,e)+`: @@ -155,7 +155,7 @@ ${o.out}${Z(a)}} `,o(d.elements,n+s*2)}else{const f=g?"default:"+E1(d.name,e):"case "+Xi(d.name,e)+":";a.out+=Z(n+s)+f+` `,o(d.elements,n+s*2),a.out+=Z(n+s*2)+`break; `}}),r||(a.out+=Z(n)+`} -`);return}case I.forSchleife:if(e==="java"){u();const c=t.live?Sh(i.textLines,t.live.labels):Gl(i.textLines);a.out+=Z(n)+"for ("+c+`) { +`);return}case k.forSchleife:if(e==="java"){u();const c=t.live?Sh(i.textLines,t.live.labels):Gl(i.textLines);a.out+=Z(n)+"for ("+c+`) { `}else if(r){const c=t.jsIntVariables??new Set,d=H3(i.textLines,c);if((d==null?void 0:d.rangeLine)!==void 0)u(),a.out+=Z(n)+d.rangeLine+` `;else if(d){u(),a.out+=Z(n)+d.init+` `,a.out+=Z(n)+"while "+Pe(d.condition,c)+`: @@ -164,15 +164,15 @@ ${o.out}${Z(a)}} `:l("for ",`: `)}else{u();const c=t.live?sx(i.textLines,t.live.labels):R3(i.textLines);a.out+=Z(n)+"for ("+c+`) { `}o(i.loopBody??[],n+s),r||(a.out+=Z(n)+`} -`);return;case I.whileSchleife:l(r?"while ":"while (",r?`: +`);return;case k.whileSchleife:l(r?"while ":"while (",r?`: `:`) { `),o(i.loopBody??[],n+s),r||(a.out+=Z(n)+`} -`);return;case I.doUntilSchleife:{const c=t.live&&$l(i.textLines)?Xn(t.live.labels.condition):Da(i.textLines);if(r){a.out+=Z(n)+`while True: +`);return;case k.doUntilSchleife:{const c=t.live&&$l(i.textLines)?Xn(t.live.labels.condition):Da(i.textLines);if(r){a.out+=Z(n)+`while True: `;const d=n+s;o(i.loopBody??[],d),u(d);const h=c.includes(Mi)?c:Pe(c,t.jsIntVariables??new Set);a.out+=Z(d)+"if not ("+h+`): `,a.out+=Z(d+s)+`break `}else a.out+=Z(n)+`do { `,o(i.loopBody??[],n+s),u(),a.out+=Z(n)+"} while ("+c+`); -`;return}case I.endlosschleife:{const c=Da(i.textLines),d=c===""||c==="true";d||u(),r?a.out+=Z(n)+(d?`while True: +`;return}case k.endlosschleife:{const c=Da(i.textLines),d=c===""||c==="true";d||u(),r?a.out+=Z(n)+(d?`while True: `:`while True: # ${c} `):a.out+=Z(n)+(d?`while (true) { `:`while (true) /* ${c} */ { @@ -193,9 +193,9 @@ ${o.out}${Z(a)}} `),r+=bo([i],"python"),s&&(r+=`def ${s.name}(${u}): `))}const o={out:""};p1(i.elements,e,a,s?a.indentPerLevel:0,o),s&&e!=="python"&&(o.out+=`} `);const l=r.split(` -`).length-1;return{text:Oh((r+o.out).replace(/\n+$/,""),e),spans:n.spans.map(u=>({...u,from:u.from+l,to:u.to+l}))}}function Oh(i,e){switch(e){case"javascript":return ux(wo(i,"javascript")).replace(/\.length\(\)/g,".length").replace(/\.contains\(/g,".includes(");case"python":return ox(wo(i,"python")).replace(/\b([a-zA-Z_]\w*(?:\[[^[\]]*\])?)\.length(?:\(\)|\b)/g,"len($1)");case"java":return dx(i)}}function ox(i){for(let e=0;e<5;e++){const t=Ah(lx(i),"python");if(t===i)break;i=t}return i}const bu={indexOf:"find",lastIndexOf:"rfind",toUpperCase:"upper",toLowerCase:"lower",trim:"strip",startsWith:"startswith",endsWith:"endswith"};function lx(i){return Yl(i,["charAt","substring","contains","isEmpty","equalsIgnoreCase","compareTo","repeat","concat",...Object.keys(bu)],(e,t,n)=>{switch(t){case"charAt":return`${e}[${n}]`;case"substring":{const a=mx(n);return a.length===2?`${e}[${a[0].trim()}:${a[1].trim()}]`:`${e}[${n.trim()}:]`}case"contains":return`(${n.trim()} in ${e})`;case"isEmpty":return`(len(${e}) == 0)`;case"equalsIgnoreCase":return`(${e}.lower() == ${n.trim()}.lower())`;case"compareTo":return`((${e} > ${n.trim()}) - (${e} < ${n.trim()}))`;case"repeat":return`(${e} * ${n.trim()})`;case"concat":return`(${e} + ${n.trim()})`;default:return`${e}.${bu[t]}(${n})`}})}function ux(i){for(let e=0;e<5;e++){const t=Ah(Yl(i,["isEmpty","equalsIgnoreCase","compareTo","replace"],(n,a,s)=>{switch(a){case"isEmpty":return`(${n}.length === 0)`;case"equalsIgnoreCase":return`(${n}.toLowerCase() === ${s.trim()}.toLowerCase())`;case"compareTo":return`${n}.localeCompare(${s.trim()})`;default:return`${n}.replaceAll(${s})`}}),"javascript");if(t===i)break;i=t}return i}function Ah(i,e){const t=/\bFiles\.readString\(\s*(?:Path\.of|Paths\.get)\(\s*("(?:[^"\\]|\\.)*")\s*\)\s*\)/g;return e==="python"?i.replace(t,'open($1, encoding="utf-8").read()').replace(/\bInteger\.parseInt\(/g,"int(").replace(/\bDouble\.parseDouble\(/g,"float(").replace(/\bString\.valueOf\(/g,"str("):i.replace(t,'require("fs").readFileSync($1, "utf8")').replace(/\bInteger\.parseInt\(/g,"parseInt(").replace(/\bDouble\.parseDouble\(/g,"parseFloat(").replace(/\bString\.valueOf\(/g,"String(")}function mx(i){let e=0;const t=[...i].findIndex(n=>n==="("?(e+=1,!1):n===")"?(e-=1,!1):n===","&&e===0);return t<0?[i]:[i.slice(0,t),i.slice(t+1)]}function Yl(i,e,t){const n=new RegExp(`([A-Za-z_]\\w*(?:\\[[^[\\]]*\\]|\\.\\w+\\(\\))*|"(?:[^"\\\\]|\\\\.)*")\\.(${e.join("|")})\\(`,"g");let a="",s=0;for(let r=n.exec(i);r;r=n.exec(i)){const o=r.index+r[0].length-1;let l=0,u=-1;for(let c=o;ce.has(n.toLowerCase())?t:`${n}.length()`)}const hx=new Set("abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while true false null var record sealed permits yield module open opens requires exports to uses provides with transitive".split(" "));function Gs(i){const e=i.trim();if(e==="")return"Main";let t="";return Array.from(e).forEach((n,a)=>{a===0?new RegExp("\\p{L}","u").test(n)||n==="_"||n==="$"?t+=n:new RegExp("\\p{Nd}","u").test(n)?t+="_"+n:t+="_":/[\p{L}\p{M}\p{N}]/u.test(n)||n==="_"||n==="$"?t+=n:t+="_"}),t=t.replace(/_{2,}/g,"_").replace(/^_+|_+$/g,""),t===""?"Main":(new RegExp("^\\p{Nd}","u").test(t)&&(t="_"+t),hx.has(t.toLowerCase())&&(t="_"+t),t)}function yu(i,e,t={},n=[]){const a={...uh,...t},s=Gs(e),r=[i,...n].filter((S,z,k)=>k.indexOf(S)===z).map(S=>({d:S,header:yt(S.caption)})).filter(S=>S.header!==void 0),o=r.map(S=>fo(S.d,S.header,"java",t,a.indentPerLevel)),l=yt(i.caption),u=r.some(S=>ls(S.d)),m=ss(i,"java",a),c=a.indentPerLevel*2,d=ls(i),h=d?gx(m):m,g=Z(c),f=h.trim()===""?"":h.split(` -`).map(S=>S.trim()===""?g:g+S).join(` -`);let x="";const b=o.length>0&&(d||u),y=[...new Set([i,...r.map(S=>S.d)].flatMap(Ql))],w=y.length>0;(d||u)&&!y.includes("import java.util.Scanner;")&&y.push("import java.util.Scanner;");for(const S of y)x+=S+` +`).length-1;return{text:Oh((r+o.out).replace(/\n+$/,""),e),spans:n.spans.map(u=>({...u,from:u.from+l,to:u.to+l}))}}function Oh(i,e){switch(e){case"javascript":return ux(wo(i,"javascript")).replace(/\.length\(\)/g,".length").replace(/\.contains\(/g,".includes(");case"python":return ox(wo(i,"python")).replace(/\b([a-zA-Z_]\w*(?:\[[^[\]]*\])?)\.length(?:\(\)|\b)/g,"len($1)");case"java":return dx(i)}}function ox(i){for(let e=0;e<5;e++){const t=Ah(lx(i),"python");if(t===i)break;i=t}return i}const bu={indexOf:"find",lastIndexOf:"rfind",toUpperCase:"upper",toLowerCase:"lower",trim:"strip",startsWith:"startswith",endsWith:"endswith"};function lx(i){return Yl(i,["charAt","substring","contains","isEmpty","equalsIgnoreCase","compareTo","repeat","concat",...Object.keys(bu)],(e,t,n)=>{switch(t){case"charAt":return`${e}[${n}]`;case"substring":{const a=mx(n);return a.length===2?`${e}[${a[0].trim()}:${a[1].trim()}]`:`${e}[${n.trim()}:]`}case"contains":return`(${n.trim()} in ${e})`;case"isEmpty":return`(len(${e}) == 0)`;case"equalsIgnoreCase":return`(${e}.lower() == ${n.trim()}.lower())`;case"compareTo":return`((${e} > ${n.trim()}) - (${e} < ${n.trim()}))`;case"repeat":return`(${e} * ${n.trim()})`;case"concat":return`(${e} + ${n.trim()})`;default:return`${e}.${bu[t]}(${n})`}})}function ux(i){for(let e=0;e<5;e++){const t=Ah(Yl(i,["isEmpty","equalsIgnoreCase","compareTo","replace"],(n,a,s)=>{switch(a){case"isEmpty":return`(${n}.length === 0)`;case"equalsIgnoreCase":return`(${n}.toLowerCase() === ${s.trim()}.toLowerCase())`;case"compareTo":return`${n}.localeCompare(${s.trim()})`;default:return`${n}.replaceAll(${s})`}}),"javascript");if(t===i)break;i=t}return i}function Ah(i,e){const t=/\bFiles\.readString\(\s*(?:Path\.of|Paths\.get)\(\s*("(?:[^"\\]|\\.)*")\s*\)\s*\)/g;return e==="python"?i.replace(t,'open($1, encoding="utf-8").read()').replace(/\bInteger\.parseInt\(/g,"int(").replace(/\bDouble\.parseDouble\(/g,"float(").replace(/\bString\.valueOf\(/g,"str("):i.replace(t,'require("fs").readFileSync($1, "utf8")').replace(/\bInteger\.parseInt\(/g,"parseInt(").replace(/\bDouble\.parseDouble\(/g,"parseFloat(").replace(/\bString\.valueOf\(/g,"String(")}function mx(i){let e=0;const t=[...i].findIndex(n=>n==="("?(e+=1,!1):n===")"?(e-=1,!1):n===","&&e===0);return t<0?[i]:[i.slice(0,t),i.slice(t+1)]}function Yl(i,e,t){const n=new RegExp(`([A-Za-z_]\\w*(?:\\[[^[\\]]*\\]|\\.\\w+\\(\\))*|"(?:[^"\\\\]|\\\\.)*")\\.(${e.join("|")})\\(`,"g");let a="",s=0;for(let r=n.exec(i);r;r=n.exec(i)){const o=r.index+r[0].length-1;let l=0,u=-1;for(let c=o;ce.has(n.toLowerCase())?t:`${n}.length()`)}const hx=new Set("abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while true false null var record sealed permits yield module open opens requires exports to uses provides with transitive".split(" "));function Gs(i){const e=i.trim();if(e==="")return"Main";let t="";return Array.from(e).forEach((n,a)=>{a===0?new RegExp("\\p{L}","u").test(n)||n==="_"||n==="$"?t+=n:new RegExp("\\p{Nd}","u").test(n)?t+="_"+n:t+="_":/[\p{L}\p{M}\p{N}]/u.test(n)||n==="_"||n==="$"?t+=n:t+="_"}),t=t.replace(/_{2,}/g,"_").replace(/^_+|_+$/g,""),t===""?"Main":(new RegExp("^\\p{Nd}","u").test(t)&&(t="_"+t),hx.has(t.toLowerCase())&&(t="_"+t),t)}function yu(i,e,t={},n=[]){const a={...uh,...t},s=Gs(e),r=[i,...n].filter((I,z,S)=>S.indexOf(I)===z).map(I=>({d:I,header:yt(I.caption)})).filter(I=>I.header!==void 0),o=r.map(I=>fo(I.d,I.header,"java",t,a.indentPerLevel)),l=yt(i.caption),u=r.some(I=>ls(I.d)),m=ss(i,"java",a),c=a.indentPerLevel*2,d=ls(i),h=d?gx(m):m,g=Z(c),f=h.trim()===""?"":h.split(` +`).map(I=>I.trim()===""?g:g+I).join(` +`);let x="";const b=o.length>0&&(d||u),y=[...new Set([i,...r.map(I=>I.d)].flatMap(Ql))],w=y.length>0;(d||u)&&!y.includes("import java.util.Scanner;")&&y.push("import java.util.Scanner;");for(const I of y)x+=I+` `;y.length&&(x+=` `),x+=`public class ${s} { `,b&&(x+=Z(a.indentPerLevel)+`static Scanner scanner = new Scanner(System.in); @@ -206,7 +206,7 @@ ${o.out}${Z(a)}} `)),x+=f,f!==""&&!f.endsWith(` `)&&(x+=` `),x+=Z(a.indentPerLevel)+`} -`);for(const[S,z]of o.entries())x+=(S>0||!l?` +`);for(const[I,z]of o.entries())x+=(I>0||!l?` `:"")+z;return x+=`} `,x}function gx(i){const e=i.split(` `);let t=0;for(e[t]==="// import java.util.Scanner;"&&t++;t=e.length?"":e.slice(t).join(` @@ -290,7 +290,7 @@ onmessage = async (e) => { `)+(this.outputLines.length?` `:""),this.runOutput.scrollTop=this.runOutput.scrollHeight}))}answer(e){var t;this.runInput.hidden=!0,this.worker?this.worker.postMessage({type:"answer",value:e}):(t=this.pendingAnswer)==null||t.call(this,e),this.pendingAnswer=void 0}stopRun(e){var t;(t=this.worker)==null||t.terminate(),this.worker=void 0,this.pendingAnswer=void 0,this.runInput&&(this.runInput.hidden=!0),e&&this.runner&&(this.runner.hidden=!0),this.setRunning(!1)}setRunning(e){const t=this.element.querySelector("[data-act=stop]");t&&(t.disabled=!e)}}const Oe=(i,e=!1)=>``,ne={newFile:Oe(''),open:Oe(''),save:Oe(''),undo:Oe(''),redo:Oe(''),cut:Oe(''),copy:Oe(''),paste:Oe(''),trash:Oe(''),share:Oe(''),book:Oe(''),code:Oe(''),play:Oe('',!0),step:Oe(''),indent:Oe(''),stop:Oe('',!0),folder:Oe(''),newFolder:Oe(''),diagram:Oe(''),fileText:Oe('')},vx="visustruct.learn.progress",pr={"04-sequenz":"05-sequenz","05-variablen-und-datentypen":"04-variablen-und-datentypen","07-verzweigung":"08-verzweigung","08-bedingungen-verknuepfen":"09-bedingungen-verknuepfen","09-fallauswahl":"10-fallauswahl","10-while-schleife":"11-while-schleife","11-do-while-schleife":"12-do-while-schleife","12-for-schleife":"13-for-schleife","13-verschachteln":"14-verschachteln","14-arrays":"15-arrays","15-aufruf-und-aussprung":"18-aufruf-und-aussprung","16-aufruf-und-aussprung":"18-aufruf-und-aussprung","17-aufruf-und-aussprung":"18-aufruf-und-aussprung","17-suchen-und-sortieren":"19-suchen-und-sortieren","18-suchen-und-sortieren":"19-suchen-und-sortieren","16-simulation-und-schreibtischtest":"07-simulation-und-schreibtischtest","17-java":"20-java","18-java":"20-java","19-java":"20-java","18-python-und-javascript":"21-python-und-javascript","19-python-und-javascript":"21-python-und-javascript","20-python-und-javascript":"21-python-und-javascript","22-erstes-fenster":"28-erstes-fenster","23-knopf-im-fenster":"29-knopf-im-fenster","24-der-knopf-reagiert":"30-der-knopf-reagiert","23-erstes-fenster":"28-erstes-fenster","24-knopf-im-fenster":"29-knopf-im-fenster","25-der-knopf-reagiert":"30-der-knopf-reagiert","26-zahl-verdoppeln":"31-zahl-verdoppeln","27-klickzaehler":"32-klickzaehler","28-ampel":"33-ampel","29-notenrechner":"34-notenrechner","30-taschenrechner":"35-taschenrechner","31-zahlenraten":"36-zahlenraten","13-lautsprecher":"16-lautsprecher","14-bildschirm":"18-bildschirm","15-motoren":"20-motoren","16-stoppuhr-akku":"21-stoppuhr-akku","03-sensoren":"04-sensoren","04-bis-zur-wand":"05-bis-zur-wand","05-abstand":"06-abstand","06-linie":"07-linie","07-farben":"08-farben","08-tasten-joystick":"10-tasten-joystick","09-licht":"11-licht","10-lautstaerke":"12-lautstaerke","11-neigung":"13-neigung","12-leds":"14-leds","13-einzelne-leds":"15-einzelne-leds","14-lautsprecher":"16-lautsprecher","15-bildschirm":"18-bildschirm","16-motoren":"20-motoren","17-stoppuhr-akku":"21-stoppuhr-akku"};function wx(i){var n;const e={...i.lessons};for(const[a,s]of Object.entries(pr))i.lessons[a]&&!i.lessons[s]&&(e[s]=i.lessons[a]),i.lessons[a]&&delete e[a];const t=(n=i.view)!=null&&n.lesson&&pr[i.view.lesson]?{...i.view,lesson:pr[i.view.lesson]}:i.view;return{...i,lessons:e,view:t}}function zx(){try{localStorage.removeItem(vx)}catch{}}const jh=()=>({lessons:{},exercises:{}});zx();let Ue=jh();const So=new Set;function ta(){for(const i of So)i()}const vu="visustruct-lernstand";function Ch(i,e){return i||e||void 0}function Ix(i,e){if(!i)return e;const t={...e.checks};for(const[n,a]of Object.entries(i.checks??{}))t[n]=a||!!t[n];return{step:Math.max(i.step??0,e.step??0),done:Ch(i.done,e.done),checks:Object.keys(t).length?t:void 0,quiz:i.quiz||e.quiz?{...e.quiz,...i.quiz}:void 0}}function kx(i,e){const t={...i.lessons};for(const[a,s]of Object.entries(e.lessons))t[a]=Ix(i.lessons[a],s);const n={...i.exercises};for(const[a,s]of Object.entries(e.exercises)){const r=i.exercises[a];n[a]=r?{done:Ch(r.done,s.done),xml:r.xml??s.xml}:s}return{lessons:t,exercises:n}}const ge={lesson(i){return Ue.lessons[i]??{step:0}},updateLesson(i,e){Ue.lessons[i]={...ge.lesson(i),...e},ta()},exercise(i){return Ue.exercises[i]??{}},updateExercise(i,e){Ue.exercises[i]={...ge.exercise(i),...e},ta()},resetExercise(i){delete Ue.exercises[i],ta()},view(){return Ue.view},hasContent(){return Object.values(Ue.lessons).some(i=>i.step>0||i.done||i.checks||i.quiz)||Object.keys(Ue.exercises).length>0},setView(i){Ue.view=i,ta()},onChange(i){return So.add(i),()=>So.delete(i)},toFile(){return JSON.stringify({format:vu,version:1,saved:new Date().toISOString(),lessons:Ue.lessons,exercises:Ue.exercises,view:Ue.view},null,2)},loadFile(i,e=!1){let t;try{t=JSON.parse(i)}catch{return!1}if((t==null?void 0:t.format)!==vu)return!1;const n=wx({lessons:t.lessons??{},exercises:t.exercises??{},view:t.view});return Ue=e?{...kx(Ue,n),view:n.view??Ue.view}:n,!0},clear(){Ue=jh()}};function wu(i=new Date){const e=t=>String(t).padStart(2,"0");return`${i.getFullYear()}-${e(i.getMonth()+1)}-${e(i.getDate())}`}const zu=i=>/^\d{4}-\d{2}-\d{2}$/.test(i);function Sx(i,e){return i.kind!==e.kind?i.kind==="directory"?-1:1:zu(i.name)&&zu(e.name)?e.name.localeCompare(i.name):i.name.localeCompare(e.name,void 0,{numeric:!0,sensitivity:"base"})}function _x(i,e){return i.replace(/\.(visustruct|strk|java)$/i,"").replace(/[\\/:*?"<>|\u0000-\u001f]/g,"-").replace(/\s+/g," ").trim().replace(/^\.+/,"")||e}function Tx(i,e){const t=new Set([...e].map(a=>a.toLowerCase())),n=a=>!t.has(`${a}.visustruct`.toLowerCase())&&!t.has(`${a}.java`.toLowerCase());if(n(i))return i;for(let a=2;;a++)if(n(`${i} ${a}`))return`${i} ${a}`}function Ox(i){const e=i.replace(/[\\/:*?"<>|\u0000-\u001f]/g,"").trim();return e&&e!=="."&&e!==".."?e:void 0}const Vn=10;function Ax(i){let e=i.replace(/\r/g,"").split(` `).filter(m=>!m.startsWith("//"));const t=e.filter(m=>/^linie:/.test(m)).map(m=>m.slice(6).trim());e=e.filter(m=>!/^linie:/.test(m));const n=e.findIndex(m=>/^raster:\s*\d+\s*$/.test(m));if(n>=0){const m=Number(e[n].split(":")[1]);e.splice(n,1),e=e.flatMap(c=>Array.from({length:m},(d,h)=>Array.from(c).map(g=>Array.from({length:m},(f,x)=>"^>v<".includes(g)?h===m>>1&&x===m>>1?g:".":g).join("")).join("")))}for(;e.length&&e[e.length-1].trim()==="";)e.pop();for(;e.length&&e[0].trim()==="";)e.shift();const s=Math.max(...e.map(m=>m.length))*Vn,r=e.length*Vn,o=(m,c)=>({x:-s/2+(m+.5)*Vn,y:r/2-(c+.5)*Vn}),l={width:s,depth:r,start:{x:0,y:0,heading:0},walls:[],lines:[],blocks:[],marks:[],goals:[],targets:[],colors:[]};let u=0;e.forEach((m,c)=>{Array.from(m).forEach((d,h)=>{const g=o(h,c);d==="#"?l.blocks.push(g):d==="="?l.marks.push(g):d==="Z"?l.goals.push(g):d==="o"?l.targets.push(g):d in Iu?l.colors.push({at:g,color:Iu[d]}):"^>v<".includes(d)&&(u++,l.start={...g,heading:{"^":0,">":90,v:180,"<":270}[d]})})});for(const m of t)l.lines.push(m.split(/\s+/).map(c=>{const[d,h]=c.split(",").map(Number);if(!Number.isFinite(d)||!Number.isFinite(h))throw new Error(`Linie: „${c}“ ist kein Feld (Spalte,Zeile).`);return o(d,h)}));if(u!==1)throw new Error(`Die Weltkarte braucht genau einen Start (^ > v <), gefunden: ${u}`);return l}const Iu={r:"red",g:"green",b:"blue",y:"yellow"},N1=(i,e)=>Math.abs(i.x-e.x)<=Vn/2&&Math.abs(i.y-e.y)<=Vn/2,ku=10,Su=9,Px=300,u1=8,jx=[-3.6,-1.2,1.2,3.6],Cx=2.5,Bx=20,Dx=12,Xl=100,vi={width:200,depth:200,start:{x:0,y:0,heading:0},walls:[],lines:[]},_u=i=>i*Math.PI/180,m1=i=>({x:Math.sin(_u(i)),y:Math.cos(_u(i))}),na=()=>Array.from({length:eh},()=>{}),Tu=([i,e,t])=>i>0||e>0||t>0?[i,e,t]:void 0;class us{constructor(e=vi){v(this,"pose");v(this,"trail");v(this,"bumps",0);v(this,"leds",na());v(this,"screen");v(this,"wheels",[0,0]);v(this,"time",0);v(this,"timerStart",0);v(this,"blocked",!1);v(this,"blockWallCache");this.setup=e,this.pose={...e.start},this.trail=[{x:e.start.x,y:e.start.y}]}reset(){this.pose={...this.setup.start},this.trail=[{x:this.pose.x,y:this.pose.y}],this.bumps=0,this.leds=na(),this.screen=void 0,this.wheels=[0,0],this.time=0,this.timerStart=0,this.blocked=!1}get allWalls(){const e=this.setup.width/2,t=this.setup.depth/2,n=[{x:-e,y:-t},{x:e,y:-t},{x:e,y:t},{x:-e,y:t}];return[...this.setup.walls,...n.map((a,s)=>({from:a,to:n[(s+1)%4]})),...this.blockWalls]}get blockWalls(){return this.blockWallCache??(this.blockWallCache=(this.setup.blocks??[]).flatMap(e=>{const t=Vn/2,n=[{x:e.x-t,y:e.y-t},{x:e.x+t,y:e.y-t},{x:e.x+t,y:e.y+t},{x:e.x-t,y:e.y+t}];return n.map((a,s)=>({from:a,to:n[(s+1)%4]}))})),this.blockWallCache}atGoal(){const e=m1(this.pose.heading),t={x:this.pose.x+e.x*u1,y:this.pose.y+e.y*u1};return(this.setup.goals??[]).some(n=>N1(this.pose,n)||N1(t,n))||(this.setup.targets??[]).some(n=>N1(this.pose,n))}apply(e){switch(e.method){case"forward":return this.wheels=[0,0],this.drive(e.args[0]);case"backward":return this.wheels=[0,0],this.drive(-e.args[0]);case"turnRight":return this.wheels=[0,0],this.turn(e.args[0]);case"turnLeft":return this.wheels=[0,0],this.turn(-e.args[0]);case"stop":this.wheels=[0,0];return;case"drive":this.wheels=[Ou(e.args[0]),Ou(e.args[1])];return;case"pause":return this.tick(e.args[0]);case"resetTimer":this.timerStart=this.time;return;case"setLed":this.leds=na().map(()=>Tu(e.args));return;case"ledOff":this.leds=na();return;case"ledColor":this.leds[e.args[0]]=Tu(Xa[e.text??""]??[0,0,0]);return;case"showText":this.screen=e.text;return}}tick(e){if(e<=0)return;this.time+=e;const[t,n]=this.wheels.map(o=>o/100*Bx);if(t===0&&n===0)return;const a=Math.ceil(e/10),s=e/1e3/a;let r=!1;for(let o=0;o{const r={x:this.pose.x+e.x*u1+t.x*a,y:this.pose.y+e.y*u1+t.y*a};([...this.setup.marks??[],...this.setup.goals??[]].some(l=>N1(r,l))||this.setup.lines.some(l=>Mx(r,l)<=Cx/2))&&(n|=1<<3-s)}),n}colorUnder(){var n;const e=m1(this.pose.heading),t={x:this.pose.x+e.x*u1,y:this.pose.y+e.y*u1};return(n=(this.setup.colors??[]).find(a=>N1(t,a.at)))==null?void 0:n.color}sensors(){const e=this.lineState();return{getDistance:this.distance(),getLine:e,getColor:this.colorUnder()??(e&6?"black":"white"),isLineLeft:(e&4)!==0,isLineRight:(e&2)!==0,getTimer:this.timer}}freeDistance(e,t){let n=1/0;for(const a of this.allWalls){const s=Zx(e,t,a.from,a.to);s!==void 0&&sMath.max(-100,Math.min(100,i));function Au(i){const e=(i%360+360)%360;return Math.abs(e-360)<1e-9?0:e}function Zx(i,e,t,n){const a={x:n.x-t.x,y:n.y-t.y},s=e.x*a.y-e.y*a.x;if(Math.abs(s)<1e-12)return;const r={x:t.x-i.x,y:t.y-i.y},o=(r.x*a.y-r.y*a.x)/s,l=(r.x*e.y-r.y*e.x)/s;return o>=0&&l>=0&&l<=1?o:void 0}function Mx(i,e){let t=1/0;for(let n=0;n+10&&o.tick(Xl),s.robotSensors={...o.sensors(),...Jx(a,u)};const c=()=>({outputs:[...m.outputLines],files:new Map(m.files),drive:m.robotActions.length?es(m.robotActions):void 0,...n?{atGoal:o.atGoal(),bumps:o.bumps}:{},led:o.leds.some(d=>d!==void 0),tone:m.robotActions.some(d=>d.method==="playTone"),screen:o.screen,actions:nh(m.robotActions.filter(d=>!Nx.has(d.method)))});if(m.inputRequest){const d=r.shift();if(d===void 0)return{...c(),missingInput:!0};if(s.provideInput(d),m.inputErrorNotice)return{...c(),error:m.inputErrorNotice};continue}if(m.isHalted)return{...c(),error:m.notice};if(!s.canStep)return{...c(),unusedInputs:r.length||void 0};s.step()}return{outputs:[...s.state.outputLines],files:new Map(s.state.files),drive:es(s.state.robotActions),tooManySteps:!0}}function Jx(i,e){const t=Math.floor(e/Wx);return Object.fromEntries(Object.entries(i??{}).map(([n,a])=>[n,a[Math.min(t,a.length-1)]]))}function Bh(i){return i===void 0||i===""?[]:i.replace(/\n$/,"").split(` -`)}function ia(i,e){return i.length!==e.length?!1:i.every((t,n)=>Pu(t)===Pu(e[n]))}function Pu(i){const e=i.trim().replace(/\s+/g," ");return/^-?\d+\.0+$/.test(e)?e.replace(/\.0+$/,""):e}function Rx(i,e,t,n){return e.map(a=>{var d,h,g;const s=a.world?n==null?void 0:n(a.world):void 0;if(a.world&&!s)throw new Error(`Weltkarte „${a.world}“ fehlt.`);const r=Fx(i,a.inputs,t,s,a.sensors),o=(a.files??[]).every(f=>{var x;return ia(Bh((x=r.files)==null?void 0:x.get(f.name)),f.lines)}),l=!a.drive||ia(r.drive??[],a.drive),u=!a.world||r.bumps===0&&(!((d=s==null?void 0:s.goals)!=null&&d.length||(h=s==null?void 0:s.targets)!=null&&h.length)||r.atGoal===!0),m=(a.led===void 0||r.led===a.led)&&(a.tone===void 0||r.tone===a.tone)&&(a.screen===void 0||r.screen===a.screen)&&(a.drives===void 0||(((g=r.drive)==null?void 0:g.length)??0)>0===a.drives)&&(!a.actions||ia(r.actions??[],a.actions)),c=!r.error&&!r.missingInput&&!r.tooManySteps&&ia(r.outputs,a.expected)&&o&&l&&u&&m;return{test:a,result:r,passed:c}})}function Gx(i){const e=new Set,t=n=>{for(const a of n){e.add(a.type),a.loopBody&&t(a.loopBody);for(const s of a.cases??[])t(s.elements)}};return t(i.elements),e}function _o(i){const e=[I.forSchleife,I.whileSchleife,I.doUntilSchleife,I.endlosschleife];let t=0;for(const n of i){const a=Math.max(_o(n.loopBody??[]),...(n.cases??[]).map(s=>_o(s.elements)));t=Math.max(t,a+(e.includes(n.type)?1:0))}return t}class wi extends Error{}function Hx(i,e){const t=[],n=[];for(const a of i){const s=a.trim();if(!s)continue;if(s.startsWith("?")){const o=s.slice(1).trim();ms(o,Vx(t)),n.push(o);continue}const r=/^([A-Za-z_]\w*)\s*:\s*(?:(-?\d+)\s*\.\.\s*(-?\d+)|(boolean))$/.exec(s);if(!r)throw new wi(`${e}: Unbekannte Zeile im Spiel: „${s}“`);t.push(r[4]?{name:r[1],kind:"boolean"}:{name:r[1],kind:"int",min:Number(r[2]),max:Number(r[3])})}if(!n.length)throw new wi(`${e}: Das Spiel braucht mindestens eine Zeile „? bedingung“.`);return{vars:t,conditions:n}}function Vx(i){return Object.fromEntries(i.map(e=>[e.name,e.kind==="boolean"?!0:e.min]))}function Qx(i){const e=[],t=/\s*(?:(\d+)|(true|false)\b|([A-Za-z_]\w*)|(&&|\|\||==|!=|<=|>=|<|>|!|\(|\)))/y;let n=0;for(;nt[n],s=d=>{var h;return((h=a())==null?void 0:h.kind)==="op"&&a().value===d},r=()=>{throw new wi(`Bedingung nicht lesbar: „${i}“`)},o=()=>{const d=t[n++]??r();if(d.kind==="num"||d.kind==="bool")return d.value;if(d.kind==="name"){if(!(d.value in e))throw new wi(`Unbekannte Variable „${d.value}“ in „${i}“`);return e[d.value]}if(d.value==="("){const h=m();return s(")")||r(),n++,h}if(d.value==="!"){const h=o();return typeof h!="boolean"&&r(),!h}return r()},l=()=>{const d=o(),h=a();if((h==null?void 0:h.kind)==="op"&&["==","!=","<","<=",">",">="].includes(h.value)){n++;const g=o();switch(h.value){case"==":return d===g;case"!=":return d!==g}(typeof d!="number"||typeof g!="number")&&r();const[f,x]=[d,g];return h.value==="<"?f"?f>x:f>=x}return d},u=()=>{let d=l();for(;s("&&");){n++;const h=l();d=d&&h}return d},m=()=>{let d=u();for(;s("||");){n++;const h=u();d=d||h}return d},c=m();return n!==t.length||typeof c!="boolean"?r():c}function qx(i,e){const t=[i],n=i.replace(/\b[A-Za-z_]\w*\b/g,r=>r in e?String(e[r]):r);n!==i&&t.push(n);const a=n.replace(/(-?\d+|true|false)\s*(==|!=|<=|>=|<|>)\s*(-?\d+|true|false)/g,r=>String(ms(r,{})));a!==t[t.length-1]&&t.push(a);const s=String(ms(i,e));return s!==t[t.length-1]&&t.push(s),t}function Ux(i,e){const t=[],n=new RegExp(`\\b${e}\\s*(?:==|!=|<=|>=|<|>)\\s*(-?\\d+)|(-?\\d+)\\s*(?:==|!=|<=|>=|<|>)\\s*${e}\\b`,"g");for(const a of i.matchAll(n)){const s=Number(a[1]??a[2]);t.push(s-1,s,s+1)}return t}function $x(i,e,t,n=Math.random){const a=i.conditions.length,s=Math.floor(e*a/t),r=Math.min(a-1,s+(n()<.5?0:1)),o=i.conditions[r],l={};for(const u of i.vars){if(u.kind==="boolean"){l[u.name]=n()<.5;continue}const m=Ux(o,u.name).filter(c=>c>=u.min&&c<=u.max);l[u.name]=m.length&&n()<.6?m[Math.floor(n()*m.length)]:u.min+Math.floor(n()*(u.max-u.min+1))}return{condition:o,values:l,answer:ms(o,l)}}function Yx(i){return Object.entries(i.values).filter(([e])=>new RegExp(`\\b${e}\\b`).test(i.condition))}const Xx=`--- +`)}function ia(i,e){return i.length!==e.length?!1:i.every((t,n)=>Pu(t)===Pu(e[n]))}function Pu(i){const e=i.trim().replace(/\s+/g," ");return/^-?\d+\.0+$/.test(e)?e.replace(/\.0+$/,""):e}function Rx(i,e,t,n){return e.map(a=>{var d,h,g;const s=a.world?n==null?void 0:n(a.world):void 0;if(a.world&&!s)throw new Error(`Weltkarte „${a.world}“ fehlt.`);const r=Fx(i,a.inputs,t,s,a.sensors),o=(a.files??[]).every(f=>{var x;return ia(Bh((x=r.files)==null?void 0:x.get(f.name)),f.lines)}),l=!a.drive||ia(r.drive??[],a.drive),u=!a.world||r.bumps===0&&(!((d=s==null?void 0:s.goals)!=null&&d.length||(h=s==null?void 0:s.targets)!=null&&h.length)||r.atGoal===!0),m=(a.led===void 0||r.led===a.led)&&(a.tone===void 0||r.tone===a.tone)&&(a.screen===void 0||r.screen===a.screen)&&(a.drives===void 0||(((g=r.drive)==null?void 0:g.length)??0)>0===a.drives)&&(!a.actions||ia(r.actions??[],a.actions)),c=!r.error&&!r.missingInput&&!r.tooManySteps&&ia(r.outputs,a.expected)&&o&&l&&u&&m;return{test:a,result:r,passed:c}})}function Gx(i){const e=new Set,t=n=>{for(const a of n){e.add(a.type),a.loopBody&&t(a.loopBody);for(const s of a.cases??[])t(s.elements)}};return t(i.elements),e}function _o(i){const e=[k.forSchleife,k.whileSchleife,k.doUntilSchleife,k.endlosschleife];let t=0;for(const n of i){const a=Math.max(_o(n.loopBody??[]),...(n.cases??[]).map(s=>_o(s.elements)));t=Math.max(t,a+(e.includes(n.type)?1:0))}return t}class wi extends Error{}function Hx(i,e){const t=[],n=[];for(const a of i){const s=a.trim();if(!s)continue;if(s.startsWith("?")){const o=s.slice(1).trim();ms(o,Vx(t)),n.push(o);continue}const r=/^([A-Za-z_]\w*)\s*:\s*(?:(-?\d+)\s*\.\.\s*(-?\d+)|(boolean))$/.exec(s);if(!r)throw new wi(`${e}: Unbekannte Zeile im Spiel: „${s}“`);t.push(r[4]?{name:r[1],kind:"boolean"}:{name:r[1],kind:"int",min:Number(r[2]),max:Number(r[3])})}if(!n.length)throw new wi(`${e}: Das Spiel braucht mindestens eine Zeile „? bedingung“.`);return{vars:t,conditions:n}}function Vx(i){return Object.fromEntries(i.map(e=>[e.name,e.kind==="boolean"?!0:e.min]))}function Qx(i){const e=[],t=/\s*(?:(\d+)|(true|false)\b|([A-Za-z_]\w*)|(&&|\|\||==|!=|<=|>=|<|>|!|\(|\)))/y;let n=0;for(;nt[n],s=d=>{var h;return((h=a())==null?void 0:h.kind)==="op"&&a().value===d},r=()=>{throw new wi(`Bedingung nicht lesbar: „${i}“`)},o=()=>{const d=t[n++]??r();if(d.kind==="num"||d.kind==="bool")return d.value;if(d.kind==="name"){if(!(d.value in e))throw new wi(`Unbekannte Variable „${d.value}“ in „${i}“`);return e[d.value]}if(d.value==="("){const h=m();return s(")")||r(),n++,h}if(d.value==="!"){const h=o();return typeof h!="boolean"&&r(),!h}return r()},l=()=>{const d=o(),h=a();if((h==null?void 0:h.kind)==="op"&&["==","!=","<","<=",">",">="].includes(h.value)){n++;const g=o();switch(h.value){case"==":return d===g;case"!=":return d!==g}(typeof d!="number"||typeof g!="number")&&r();const[f,x]=[d,g];return h.value==="<"?f"?f>x:f>=x}return d},u=()=>{let d=l();for(;s("&&");){n++;const h=l();d=d&&h}return d},m=()=>{let d=u();for(;s("||");){n++;const h=u();d=d||h}return d},c=m();return n!==t.length||typeof c!="boolean"?r():c}function qx(i,e){const t=[i],n=i.replace(/\b[A-Za-z_]\w*\b/g,r=>r in e?String(e[r]):r);n!==i&&t.push(n);const a=n.replace(/(-?\d+|true|false)\s*(==|!=|<=|>=|<|>)\s*(-?\d+|true|false)/g,r=>String(ms(r,{})));a!==t[t.length-1]&&t.push(a);const s=String(ms(i,e));return s!==t[t.length-1]&&t.push(s),t}function Ux(i,e){const t=[],n=new RegExp(`\\b${e}\\s*(?:==|!=|<=|>=|<|>)\\s*(-?\\d+)|(-?\\d+)\\s*(?:==|!=|<=|>=|<|>)\\s*${e}\\b`,"g");for(const a of i.matchAll(n)){const s=Number(a[1]??a[2]);t.push(s-1,s,s+1)}return t}function $x(i,e,t,n=Math.random){const a=i.conditions.length,s=Math.floor(e*a/t),r=Math.min(a-1,s+(n()<.5?0:1)),o=i.conditions[r],l={};for(const u of i.vars){if(u.kind==="boolean"){l[u.name]=n()<.5;continue}const m=Ux(o,u.name).filter(c=>c>=u.min&&c<=u.max);l[u.name]=m.length&&n()<.6?m[Math.floor(n()*m.length)]:u.min+Math.floor(n()*(u.max-u.min+1))}return{condition:o,values:l,answer:ms(o,l)}}function Yx(i){return Object.entries(i.values).filter(([e])=>new RegExp(`\\b${e}\\b`).test(i.condition))}const Xx=`--- titel: Was ist ein Struktogramm? bereich: Erste Schritte kurz: Algorithmen als Folge klarer Schritte darstellen und lesen. @@ -382,7 +382,7 @@ Solange der Teller nicht leer ist, wird ein Bissen gegessen. Danach wird der Tel ## Alle drei zusammen -Richtig nützlich werden die Bausteine, wenn man sie kombiniert. Das Diagramm enthält alle drei: eine Sequenz von oben nach unten, eine [Verzweigung]{.blau} und eine [Schleife]{.rosa}. Gelb sind die einfachen [Anweisungen]{.gelb}. Was in einer Verzweigung oder Schleife steht, bekommt deren Farbe. Genau genommen ist das ganze Diagramm eine Sequenz, denn auch Verzweigung und Schleife stehen in der Reihe von oben nach unten. +Richtig nützlich werden die Bausteine, wenn man sie kombiniert. Das Diagramm enthält alle drei: eine Sequenz von oben nach unten, eine [Verzweigung]{.blau} und eine [Schleife]{.rosa}. Gelb sind die einfachen [Anweisungen]{.gelb}. Auch die Anweisungen in einer Verzweigung oder Schleife sind gelb. Genau genommen ist das ganze Diagramm eine Sequenz, denn auch Verzweigung und Schleife stehen in der Reihe von oben nach unten. ::: diagramm l1-grundbausteine.visustruct Die Verzweigung erkennst du am Dreieck, die Schleife an der Klammer links. Alles zusammen steht in einer Sequenz. @@ -11464,7 +11464,7 @@ As long as the plate is not empty, you take a bite. After that, the plate is cle ## All three together -The building blocks become really useful when you combine them. This diagram contains all three: a sequence from top to bottom, a [branch]{.blau} and a [loop]{.rosa}. The yellow boxes are simple [statements]{.gelb}. Whatever stands inside a branch or a loop takes its colour. Strictly speaking, the whole diagram is a sequence, because the branch and the loop also stand in the row from top to bottom. +The building blocks become really useful when you combine them. This diagram contains all three: a sequence from top to bottom, a [branch]{.blau} and a [loop]{.rosa}. The yellow boxes are simple [statements]{.gelb}. The statements inside a branch or a loop are yellow too. Strictly speaking, the whole diagram is a sequence, because the branch and the loop also stand in the row from top to bottom. ::: diagramm l1-grundbausteine.visustruct You recognise the branch by its triangle and the loop by the bracket on the left. Everything together sits in a sequence. @@ -22542,7 +22542,7 @@ Enquanto o prato não estiver vazio, dás uma garfada. Depois, o prato é levant ## Os três juntos -Os blocos básicos tornam-se realmente úteis quando os combinas. Este diagrama contém os três: uma sequência de cima para baixo, uma [decisão]{.blau} e um [ciclo]{.rosa}. As caixas amarelas são [instruções]{.gelb} simples. O que está dentro de uma decisão ou de um ciclo fica com a cor dela. Em rigor, o diagrama todo é uma sequência, porque a decisão e o ciclo também estão na fila de cima para baixo. +Os blocos básicos tornam-se realmente úteis quando os combinas. Este diagrama contém os três: uma sequência de cima para baixo, uma [decisão]{.blau} e um [ciclo]{.rosa}. As caixas amarelas são [instruções]{.gelb} simples. As instruções dentro de uma decisão ou de um ciclo também são amarelas. Em rigor, o diagrama todo é uma sequência, porque a decisão e o ciclo também estão na fila de cima para baixo. ::: diagramm l1-grundbausteine.visustruct Reconheces a decisão pelo triângulo e o ciclo pelo parêntese à esquerda. Tudo junto forma uma sequência. @@ -43991,7 +43991,7 @@ lösung: vb-wald-loesung.visustruct 83;117;103;97;114;32;119;97;110;116;101;100;63; - + 65;100;100;32;115;117;103;97;114; @@ -44004,7 +44004,7 @@ lösung: vb-wald-loesung.visustruct 84;101;97;32;115;116;105;108;108;32;116;111;111;32;104;111;116; - + 87;97;105;116;32;49;32;109;105;110;117;116;101; @@ -44054,12 +44054,12 @@ lösung: vb-wald-loesung.visustruct 73;115;32;105;116;32;114;97;105;110;105;110;103;63; - + 80;97;99;107;32;97;110;32;117;109;98;114;101;108;108;97; - + 80;97;99;107;32;115;117;110;103;108;97;115;115;101;115; @@ -44073,7 +44073,7 @@ lösung: vb-wald-loesung.visustruct 80;108;97;116;101;32;110;111;116;32;101;109;112;116;121; - + 84;97;107;101;32;97;32;98;105;116;101; @@ -49898,7 +49898,7 @@ lösung: vb-wald-loesung.visustruct 90;117;99;107;101;114;32;103;101;119;252;110;115;99;104;116;63; - + 90;117;99;107;101;114;32;104;105;110;101;105;110;103;101;98;101;110; @@ -49911,7 +49911,7 @@ lösung: vb-wald-loesung.visustruct 84;101;101;32;110;111;99;104;32;122;117;32;104;101;105;223; - + 49;32;77;105;110;117;116;101;32;119;97;114;116;101;110; @@ -49961,12 +49961,12 @@ lösung: vb-wald-loesung.visustruct 82;101;103;110;101;116;32;101;115;63; - + 82;101;103;101;110;115;99;104;105;114;109;32;101;105;110;112;97;99;107;101;110; - + 83;111;110;110;101;110;98;114;105;108;108;101;32;101;105;110;112;97;99;107;101;110; @@ -49980,7 +49980,7 @@ lösung: vb-wald-loesung.visustruct 84;101;108;108;101;114;32;110;105;99;104;116;32;108;101;101;114; - + 69;105;110;101;110;32;66;105;115;115;101;110;32;101;115;115;101;110; @@ -54534,7 +54534,7 @@ lösung: vb-wald-loesung.visustruct 81;117;101;114;32;97;231;250;99;97;114;63; - + 74;117;110;116;97;114;32;97;231;250;99;97;114; @@ -54547,7 +54547,7 @@ lösung: vb-wald-loesung.visustruct 67;104;225;32;97;105;110;100;97;32;100;101;109;97;115;105;97;100;111;32;113;117;101;110;116;101; - + 69;115;112;101;114;97;114;32;49;32;109;105;110;117;116;111; @@ -54597,12 +54597,12 @@ lösung: vb-wald-loesung.visustruct 69;115;116;225;32;97;32;99;104;111;118;101;114;63; - + 76;101;118;97;114;32;103;117;97;114;100;97;45;99;104;117;118;97; - + 76;101;118;97;114;32;243;99;117;108;111;115;32;100;101;32;115;111;108; @@ -54616,7 +54616,7 @@ lösung: vb-wald-loesung.visustruct 80;114;97;116;111;32;110;227;111;32;118;97;122;105;111; - + 68;97;114;32;117;109;97;32;103;97;114;102;97;100;97; @@ -60259,12 +60259,12 @@ raster: 3 `,cC=""+new URL("aufgabe-mehrwertsteuer-C-TFTrWz.svg",import.meta.url).href,dC=""+new URL("ben-shneiderman-Cev5hrqS.jpg",import.meta.url).href,hC=""+new URL("caesar-ascii-Bix93F5i.svg",import.meta.url).href,gC=""+new URL("caesar-scheibe-CMRPZI6Y.svg",import.meta.url).href,pC=""+new URL("caesar-verschiebung-DIR-lDbs.svg",import.meta.url).href,fC=""+new URL("aufgabe-mehrwertsteuer-CnrZ00ny.svg",import.meta.url).href,xC=""+new URL("kino-saal-C8zaJk4X.svg",import.meta.url).href,bC=""+new URL("kino-schleifen-D7sfo9iK.svg",import.meta.url).href,yC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5TdGFydDwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iNzYiPlB1dCBhIGN1cCBvbiB0aGUgdGFibGU8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjEzMyI+U3VnYXIgd2FudGVkPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTk0Ij5BZGQgc3VnYXI8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI4NSI+VGVhIHN0aWxsIHRvbyBob3Q/PC90ZXh0PgogICAgPHRleHQgeD0iMzI3LjUiIHk9IjI4NSI+V2FpdCAxIG1pbnV0ZTwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5EcmluayB0aGUgdGVhPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSIzOTUiPkVuZDwvdGV4dD4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZm9udC13ZWlnaHQ9IjYwMCI+CiAgICA8dGV4dCB4PSIxNTYiIHk9IjE2OCIgZmlsbD0iIzI0OGEzZCI+eWVzPC90ZXh0PgogICAgPHRleHQgeD0iMjQyIiB5PSIxMjIiIGZpbGw9IiNkNzAwMTUiPm5vPC90ZXh0PgogICAgPHRleHQgeD0iMjQwIiB5PSIyNzQiIGZpbGw9IiMyNDhhM2QiPnllczwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMzIwIiBmaWxsPSIjZDcwMDE1Ij5ubzwvdGV4dD4KICA8L2c+CiAgPCEtLSBMZWdlbmRlIC0tPgogIDxsaW5lIHgxPSIxMCIgeTE9IjQxOCIgeDI9IjM5MCIgeTI9IjQxOCIgc3Ryb2tlPSIjZDFkMWQ2Ii8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cmVjdCB4PSI0MCIgeT0iNDMwIiB3aWR0aD0iMzYiIGhlaWdodD0iMTgiIHJ4PSI5IiBmaWxsPSIjZDFmMmQ5Ii8+CiAgICA8cmVjdCB4PSIyMjAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8cGF0aCBkPSJNNTggNDU4IEw3NiA0NjkgTDU4IDQ4MCBMNDAgNDY5IFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxwYXRoIGQ9Ik0yMjYgNDYwIEwyNTYgNDYwIEwyNTAgNDc4IEwyMjAgNDc4IFoiIGZpbGw9IiNmMmU2ZmYiLz4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZmlsbD0iIzNhM2EzYyI+CiAgICA8dGV4dCB4PSI4NiIgeT0iNDQzIj5TdGFydCBvciBlbmQ8L3RleHQ+CiAgICA8dGV4dCB4PSIyNjYiIHk9IjQ0MyI+U3RhdGVtZW50PC90ZXh0PgogICAgPHRleHQgeD0iODYiIHk9IjQ3MyI+RGVjaXNpb248L3RleHQ+CiAgICA8dGV4dCB4PSIyNjYiIHk9IjQ3MyI+SW5wdXQgb3Igb3V0cHV0PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",vC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V2hlcmUgZG9lcyB0aGUgZWxlbWVudCBsYW5kPzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij50b3AgaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIxMTUiIHk9Ijk3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj5ib3R0b20gaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+aW4gZnJvbnQ8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YWZ0ZXI8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iMTMyIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjQwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iMTU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2Ij7DuDwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjE1NyI+4oaSIDx0c3BhbiBmb250LXdlaWdodD0iNjAwIj5yZXBsYWNlczwvdHNwYW4+IGl0PC90ZXh0Pgo8L3N2Zz4K",wC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWdlID0gMTQ8L3RleHQ+CiAgPHBhdGggZD0iTTEzMCA3MCBMMTcwIDUwIEwzMDAgNTAgTDI2MCA3MCBaIiBmaWxsPSIjYzk4YTNjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE4MCIgeT0iMzQiIHdpZHRoPSI0NCIgaGVpZ2h0PSI1MCIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMDIiIHk9IjYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iNzAwIj4xNDwvdGV4dD4KICA8cmVjdCB4PSIxMzAiIHk9IjcwIiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5Yjg3MiIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cGF0aCBkPSJNMjYwIDcwIEwzMDAgNTAgTDMwMCAxNTAgTDI2MCAxNzAgWiIgZmlsbD0iI2Q0OWE0YyIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cmVjdCB4PSIxNTAiIHk9IjEwMCIgd2lkdGg9IjkwIiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjOGE1YTFmIi8+CiAgPHRleHQgeD0iMTk1IiB5PSIxMjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmFnZTwvdGV4dD4KICA8cmVjdCB4PSIxMzgiIHk9IjE0MiIgd2lkdGg9IjM0IiBoZWlnaHQ9IjIwIiByeD0iMTAiIGZpbGw9IiMwMDdhZmYiLz4KICA8dGV4dCB4PSIxNTUiIHk9IjE1NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMiIgZmlsbD0iI2ZmZmZmZiIgZm9udC13ZWlnaHQ9IjYwMCI+aW50PC90ZXh0PgogIDxnIHN0cm9rZT0iIzZlNmU3MyI+CiAgICA8bGluZSB4MT0iMzEwIiB5MT0iNDgiIHgyPSIyMjYiIHkyPSI1MiIvPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjExNSIgeDI9IjI0MiIgeTI9IjExNSIvPgogICAgPGxpbmUgeDE9IjgwIiB5MT0iMTUyIiB4Mj0iMTM0IiB5Mj0iMTUyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjMxNiIgeT0iNTIiPlZhbHVlPC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0YSB0eXBlPC90ZXh0PgogIDx0ZXh0IHg9IjIwMCIgeT0iMTk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgbmFtZSBnZXRzIHlvdSB0byB0aGUgdmFsdWUuPC90ZXh0Pgo8L3N2Zz4K",zC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9pbnRzPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCB3b3JrIG91dCB0aGUgcmlnaHQ6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIHN0b3JlIHRoZSByZXN1bHQgb24gdGhlIGxlZnQ8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzIGJlZm9yZTogPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiPjEwPC90c3Bhbj4gICDihpIgICBwb2ludHMgYWZ0ZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",IC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjYwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjYwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+bGVmdDwvdGV4dD4KICA8dGV4dCB4PSI3NSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5qdWljZTwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+dGVtcDwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+ZW1wdHk8L3RleHQ+CiAgPHRleHQgeD0iMzI1IiB5PSIyMDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnJpZ2h0PC90ZXh0PgogIDx0ZXh0IHg9IjMyNSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53YXRlcjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxwYXRoIGQ9Ik04OCAxMDQgQzExMCA3MCwgMTYwIDcwLCAxODYgMTA0Ii8+CiAgICA8cGF0aCBkPSJNMzE4IDEwNCBDMjcwIDE1LCAxMzAgMTUsIDgyIDEwNCIvPgogICAgPHBhdGggZD0iTTIxNCAxMDQgQzI0MCA3MCwgMjkwIDcwLCAzMTIgMTA0Ii8+CiAgPC9nPgogIDxnIGZvbnQtd2VpZ2h0PSI3MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPGNpcmNsZSBjeD0iMTM3IiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIxMzciIHk9Ijg1Ij4xPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjAwIiBjeT0iMzgiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyMDAiIHk9IjQzIj4yPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjYzIiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyNjMiIHk9Ijg1Ij4zPC90ZXh0PgogIDwvZz4KICA8ZyB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMiI+CiAgICA8dGV4dCB4PSI3MCIgeT0iMjQ3Ij4xOiB0ZW1wID0gbGVmdDwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMjQ3Ij4yOiBsZWZ0ID0gcmlnaHQ8L3RleHQ+CiAgICA8dGV4dCB4PSIzMzAiIHk9IjI0NyI+MzogcmlnaHQgPSB0ZW1wPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",kC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dmFsaWQ8L3RleHQ+CiAgPHRleHQgeD0iNDAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnZhbGlkPC90ZXh0Pjx0ZXh0IHg9IjM2MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludmFsaWQ8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPmdyYWRlICZndDs9IDEgJmFtcDsmYW1wOyBncmFkZSAmbHQ7PSA2PC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIxNDIiIGZpbGw9IiNiOTFjMWMiPmdyYWRlICZsdDsgMSB8fCBncmFkZSAmZ3Q7IDY8L3RleHQ+CiAgPC9nPgo8L3N2Zz4K",SC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Ib3cgdGhlIHdoaWxlIGxvb3AgcnVuczwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjQ0IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iMjAiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI2OSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGNoZWNrIHRoZSBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgcnVuIHRoZSBpbnNpZGU8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5iYWNrPC90ZXh0PgogIDx0ZXh0IHg9IjM4IiB5PSIxMjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPnRvIHRoZSB0b3A8L3RleHQ+CiAgPHRleHQgeD0iMzQ4IiB5PSIxMzQiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmZhbHNlPC90ZXh0PgogIDx0ZXh0IHg9IjI3NiIgeT0iMjA1IiB0ZXh0LWFuY2hvcj0iZW5kIj5jb250aW51ZSBiZWxvdyB0aGUgbG9vcDwvdGV4dD4KPC9zdmc+Cg==",_C="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHJlLXRlc3QgKHdoaWxlKTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5wb3N0LXRlc3QgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBpbnNpZGU8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGluc2lkZTwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgY29uZGl0aW9uPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5JZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlIGF0IG9uY2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj50aGUgaW5zaWRlIHJ1bnMgPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm5ldmVyPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgaW5zaWRlIGFsd2F5cyBydW5zPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj48dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+YXQgbGVhc3Qgb25jZTwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",TC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIFN0YXJ0IDx0c3BhbiBmaWxsPSIjNmU2ZTczIj4ob25seSBvbmNlKTwvdHNwYW4+PC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iNzYiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzQiIHJ4PSIxNyIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgY2hlY2sgdGhlIGNvbmRpdGlvbjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjEzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIxNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoiBydW4gdGhlIGluc2lkZTwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjIwMCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIyMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoyBzdGVwLCBlLmcuIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+YmFjazwvdGV4dD4KICA8dGV4dCB4PSI0OCIgeT0iMTc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj50byDikaE8L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSI4NCIgZmlsbD0iI2I5MWMxYyIgZm9udC13ZWlnaHQ9IjYwMCI+ZmFsc2U8L3RleHQ+CiAgPHRleHQgeD0iMzM2IiB5PSI5OCI+ZG9uZTwvdGV4dD4KPC9zdmc+Cg==",OC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gbnVtYmVycyA9IHsyLCA0LCA2LCA4LCAxMH08L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjU0IiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5JbmRleDwvdGV4dD4KICA8dGV4dCB4PSI5MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjA8L3RleHQ+PHJlY3QgeD0iNjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iOTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj4yPC90ZXh0PgogIDx0ZXh0IHg9IjE1MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjE8L3RleHQ+PHJlY3QgeD0iMTIwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjE1MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjQ8L3RleHQ+CiAgPHRleHQgeD0iMjEwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MjwvdGV4dD48cmVjdCB4PSIxODAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjEwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NjwvdGV4dD4KICA8dGV4dCB4PSIyNzAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4zPC90ZXh0PjxyZWN0IHg9IjI0MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyNzAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj44PC90ZXh0PgogIDx0ZXh0IHg9IjMzMCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjQ8L3RleHQ+PHJlY3QgeD0iMzAwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjMzMCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjEwPC90ZXh0PgogIDx0ZXh0IHg9IjIwIiB5PSI5MCIgZmlsbD0iIzZlNmU3MyIgZm9udC1zaXplPSIxMiI+VmFsdWU8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+PGxpbmUgeDE9IjkwIiB5MT0iMTQwIiB4Mj0iOTAiIHkyPSIxMTIiLz48bGluZSB4MT0iMzMwIiB5MT0iMTQwIiB4Mj0iMzMwIiB5Mj0iMTEyIi8+PC9nPgogIDxnIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjEzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dGV4dCB4PSI5MCIgeT0iMTU2Ij5udW1iZXJzWzBdIGlzIDI8L3RleHQ+PHRleHQgeD0iMzMwIiB5PSIxNTYiPm51bWJlcnNbNF0gaXMgMTA8L3RleHQ+PC9nPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTgyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj41IHNsb3RzLCBjb3VudGluZyBzdGFydHMgYXQgMDogdGhlIGxhc3QgaW5kZXggaXMgNC48L3RleHQ+Cjwvc3ZnPgo=",AC=""+new URL("mvc-klick-BIA_bYzu.svg",import.meta.url).href,PC=""+new URL("ss-binaere-suche-D02W1TH_.svg",import.meta.url).href,jC=""+new URL("ss-bubblesort-CmKEoNfO.svg",import.meta.url).href,CC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5Mb29raW5nIGZvciB0aGUgOS4gVGhlIGNhcmRzIGFyZSBtaXhlZCB1cC48L3RleHQ+CjxnPjxyZWN0IHg9IjE0IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIzNC4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjZGMyNjI2Ij43PC90ZXh0Pjx0ZXh0IHg9IjM0LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjZGMyNjI2Ij7imaU8L3RleHQ+PC9nPgo8dGV4dCB4PSIzNC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMzQuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4xLjwvdGV4dD4KPGc+PHJlY3QgeD0iNjIiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjgyLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjM8L3RleHQ+PHRleHQgeD0iODIuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZoDwvdGV4dD48L2c+Cjx0ZXh0IHg9IjgyLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSI4Mi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjIuPC90ZXh0Pgo8Zz48cmVjdCB4PSIxMTAiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjEzMC4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjZGMyNjI2Ij4xMDwvdGV4dD48dGV4dCB4PSIxMzAuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpjwvdGV4dD48L2c+Cjx0ZXh0IHg9IjEzMC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTMwLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+My48L3RleHQ+CjxnPjxyZWN0IHg9IjE1OCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTc4LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjU8L3RleHQ+PHRleHQgeD0iMTc4LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaM8L3RleHQ+PC9nPgo8dGV4dCB4PSIxNzguMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjQuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyMDYiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMyIvPjx0ZXh0IHg9IjIyNi4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjMWMxYzFlIj45PC90ZXh0Pjx0ZXh0IHg9IjIyNi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iMjI2LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iIzE1ODAzZCI+4pyTPC90ZXh0Pgo8dGV4dCB4PSIyMjYuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj41LjwvdGV4dD4KPGc+PHJlY3QgeD0iMjU0IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIyNTgiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjMwMiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzA2IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8Zz48cmVjdCB4PSIzNTAiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjM1NCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPHRleHQgeD0iMTQiIHk9IjE2OCIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzZlNmU3MyI+VHVybiB0aGVtIG92ZXIgZnJvbSBsZWZ0IHRvIHJpZ2h0OjwvdGV4dD48dGV4dCB4PSIxNCIgeT0iMTg4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5BZnRlciA1IGNvbXBhcmlzb25zIHRoZSA5IGlzIGZvdW5kLjwvdGV4dD4KPC9zdmc+Cg==",BC=""+new URL("ss-vergleiche-UczNldcC.svg",import.meta.url).href,DC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPkNhbGwgYnkgdmFsdWU6IGEgY29weTwvdGV4dD4KPHJlY3QgeD0iMTAiIHk9IjM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9Ijg2IiByeD0iOCIgZmlsbD0iI2VmZjZmZiIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyMCIgeT0iNTgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPk1haW4gcHJvZ3JhbTwvdGV4dD4KPHRleHQgeD0iMTYiIHk9Ijk4IiBmb250LXNpemU9IjEyIj5udW1iZXI8L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+ZG91YmxlSXQ8L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iOTgiPng8L3RleHQ+CjxyZWN0IHg9IjI4MCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMCIgcng9IjQiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8dGV4dCB4PSIzMjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dHNwYW4gZmlsbD0iIzZlNmU3MyIgdGV4dC1kZWNvcmF0aW9uPSJsaW5lLXRocm91Z2giPjU8L3RzcGFuPiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPjwvdGV4dD4KPGxpbmUgeDE9IjEyOCIgeTE9IjkzIiB4Mj0iMjQ4IiB5Mj0iOTMiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIgbWFya2VyLWVuZD0idXJsKCNrKSIvPgo8dGV4dCB4PSIyMTAiIHk9Ijg0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jb3B5PC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iMTUwIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj54IGJlY29tZXMgMTAsIGJ1dCBudW1iZXIgc3RheXMgNS48L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNjgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPkxpa2UgYSBwaG90b2NvcHk6IHdyaXRpbmcgb24gdGhlIGNvcHk8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxODYiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPmRvZXMgbm90IGNoYW5nZSB0aGUgb3JpZ2luYWwuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5DYWxsIGJ5IHJlZmVyZW5jZTogdGhlIHNhbWUgYXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPk1haW4gcHJvZ3JhbTwvdGV4dD4KPHRleHQgeD0iMjAiIHk9IjMwMCI+cm93PC90ZXh0Pgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiMxZDRlZDgiLz4KPHJlY3QgeD0iMjUwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZmZmN2VkIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI2MCIgeT0iMjcyIiBmb250LXNpemU9IjEzIiBmaWxsPSIjYjQ1MzA5Ij5jbGVhcjwvdGV4dD4KPHRleHQgeD0iMjYwIiB5PSIzMDAiPnNlYXRzPC90ZXh0Pgo8Y2lyY2xlIGN4PSIzOTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiNiNDUzMDkiLz4KPHBhdGggZD0iTTE1MCAzMDAgTDE1MCAzNDAgTDE0MCAzNTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjYikiLz4KPHBhdGggZD0iTTM5MCAzMDAgTDM5MCAzNDAgTDMyMiAzNTQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjbykiLz4KPHJlY3QgeD0iOTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMTUwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjIxMCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyNzAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMTIwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxODAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjI0MCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMzAwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDE2IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5UaGVyZSBpcyBvbmx5IG9uZSBhcnJheS4gV2hhdCBjbGVhciBjaGFuZ2VzIHRocm91Z2ggc2VhdHMsPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDM0IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj50aGUgbWFpbiBwcm9ncmFtIHNlZXMgdW5kZXIgcm93LjwvdGV4dD4KPC9zdmc+Cg==",ZC=""+new URL("zk-zeichen-CgUEhNoK.svg",import.meta.url).href,MC=""+new URL("ike-nassi-D2w47gvX.jpg",import.meta.url).href,LC=""+new URL("kino-saal-CYMOok4_.svg",import.meta.url).href,WC=""+new URL("kino-schleifen-DrTQV7dq.svg",import.meta.url).href,EC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5TdGFydDwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iNzYiPlRhc3NlIGF1ZiBkZW4gVGlzY2ggc3RlbGxlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTMzIj5adWNrZXIgZ2V3w7xuc2NodD88L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjE5NCI+WnVja2VyIGhpbmVpbmdlYmVuPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSIyODUiPlRlZSBub2NoIHp1IGhlacOfPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjMyNy41IiB5PSIyODUiPjEgTWludXRlIHdhcnRlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5UZWUgdHJpbmtlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzk1Ij5FbmRlPC90ZXh0PgogIDwvZz4KICA8ZyBmb250LXNpemU9IjEyIiBmb250LXdlaWdodD0iNjAwIj4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMTY4IiBmaWxsPSIjMjQ4YTNkIj5qYTwvdGV4dD4KICAgIDx0ZXh0IHg9IjI0MiIgeT0iMTIyIiBmaWxsPSIjZDcwMDE1Ij5uZWluPC90ZXh0PgogICAgPHRleHQgeD0iMjQwIiB5PSIyNzQiIGZpbGw9IiMyNDhhM2QiPmphPC90ZXh0PgogICAgPHRleHQgeD0iMTU2IiB5PSIzMjAiIGZpbGw9IiNkNzAwMTUiPm5laW48L3RleHQ+CiAgPC9nPgogIDwhLS0gTGVnZW5kZSAtLT4KICA8bGluZSB4MT0iMTAiIHkxPSI0MTgiIHgyPSIzOTAiIHkyPSI0MTgiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxnIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiPgogICAgPHJlY3QgeD0iNDAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiByeD0iOSIgZmlsbD0iI2QxZjJkOSIvPgogICAgPHJlY3QgeD0iMjIwIiB5PSI0MzAiIHdpZHRoPSIzNiIgaGVpZ2h0PSIxOCIgZmlsbD0iI2U1ZjBmZiIvPgogICAgPHBhdGggZD0iTTU4IDQ1OCBMNzYgNDY5IEw1OCA0ODAgTDQwIDQ2OSBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8cGF0aCBkPSJNMjI2IDQ2MCBMMjU2IDQ2MCBMMjUwIDQ3OCBMMjIwIDQ3OCBaIiBmaWxsPSIjZjJlNmZmIi8+CiAgPC9nPgogIDxnIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiMzYTNhM2MiPgogICAgPHRleHQgeD0iODYiIHk9IjQ0MyI+U3RhcnQgb2RlciBFbmRlPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NDMiPkFud2Vpc3VuZzwvdGV4dD4KICAgIDx0ZXh0IHg9Ijg2IiB5PSI0NzMiPlZlcnp3ZWlndW5nPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NzMiPkVpbi0gb2RlciBBdXNnYWJlPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",NC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V29oaW4gbGFuZGV0IGRhcyBFbGVtZW50PzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij5vYmVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnVudGVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjIyNCIgeT0iNjIiPuKGkiBrb21tdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGF2b3I8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIga29tbXQgPHRzcGFuIGZvbnQtd2VpZ2h0PSI2MDAiPmRhaGludGVyPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZXJzZXR6dDwvdHNwYW4+IGRlbiBQbGF0emhhbHRlcjwvdGV4dD4KPC9zdmc+Cg==",FC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWx0ZXIgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+YWx0ZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5XZXJ0PC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0ZW50eXA8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPsOcYmVyIGRlbiBOYW1lbiBrb21tc3QgZHUgYW4gZGVuIFdlcnQuPC90ZXh0Pgo8L3N2Zz4K",JC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cHVua3RlPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cHVua3RlICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCByZWNodHMgYXVzcmVjaG5lbjogMTAgKyA1ID0gMTU8L3RleHQ+CiAgPHBhdGggZD0iTTI1MCA4MiBDMjMwIDMwLCA5MCAzMCwgNjQgODQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIyLjUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICA8dGV4dCB4PSIxNjAiIHk9IjM2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIj7ikaEgRXJnZWJuaXMgbGlua3Mgc3BlaWNoZXJuPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSIxNjQiIHdpZHRoPSIzNjAiIGhlaWdodD0iMjYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3Ii8+CiAgPHRleHQgeD0iMjAwIiB5PSIxODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPnB1bmt0ZSB2b3JoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xMDwvdHNwYW4+ICAg4oaSICAgcHVua3RlIG5hY2hoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",RC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjYwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjYwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+bGlua3M8L3RleHQ+CiAgPHRleHQgeD0iNzUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+U2FmdDwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+aGlsZjwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+bGVlcjwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cmVjaHRzPC90ZXh0PgogIDx0ZXh0IHg9IjMyNSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5XYXNzZXI8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8cGF0aCBkPSJNODggMTA0IEMxMTAgNzAsIDE2MCA3MCwgMTg2IDEwNCIvPgogICAgPHBhdGggZD0iTTMxOCAxMDQgQzI3MCAxNSwgMTMwIDE1LCA4MiAxMDQiLz4KICAgIDxwYXRoIGQ9Ik0yMTQgMTA0IEMyNDAgNzAsIDI5MCA3MCwgMzEyIDEwNCIvPgogIDwvZz4KICA8ZyBmb250LXdlaWdodD0iNzAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4KICAgIDxjaXJjbGUgY3g9IjEzNyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMTM3IiB5PSI4NSI+MTwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjIwMCIgY3k9IjM4IiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjAwIiB5PSI0MyI+MjwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjI2MyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjYzIiB5PSI4NSI+MzwvdGV4dD4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTIiPgogICAgPHRleHQgeD0iNzAiIHk9IjI0NyI+MTogaGlsZiA9IGxpbmtzPC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIyNDciPjI6IGxpbmtzID0gcmVjaHRzPC90ZXh0PgogICAgPHRleHQgeD0iMzMwIiB5PSIyNDciPjM6IHJlY2h0cyA9IGhpbGY8L3RleHQ+CiAgPC9nPgo8L3N2Zz4K",GC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+Z8O8bHRpZzwvdGV4dD4KICA8dGV4dCB4PSI0MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPnVuZ8O8bHRpZzwvdGV4dD48dGV4dCB4PSIzNjAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj51bmfDvGx0aWc8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGUgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGUgJmx0Oz0gNjwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RlICZsdDsgMSB8fCBub3RlICZndDsgNjwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",HC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMTkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+CiAgPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIxOTAiIGZpbGw9IiNmZmZmZmYiLz4KICA8cmVjdCB4PSIyMCIgeT0iMTQiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iNjAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmE8L3RleHQ+CiAgPHJlY3QgeD0iMTAwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIxNDAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmI8L3RleHQ+CiAgPHJlY3QgeD0iMTgwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIyMjAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmEgJmFtcDsmYW1wOyBiPC90ZXh0PgogIDxyZWN0IHg9IjI2MCIgeT0iMTQiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzAwLjAiIHk9IjM1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNzAwIj5hIHx8IGI8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzODAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPiFhPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSI0NiIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSI2MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIxMDAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjE0MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIxODAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIyNjAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjMwMC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIzNDAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjM4MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjYwLjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj50cnVlPC90ZXh0PgogIDxyZWN0IHg9IjEwMCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMTQwLjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIj5mYWxzZTwvdGV4dD4KICA8cmVjdCB4PSIxODAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjYwIiB5PSI3OCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzMDAuMCIgeT0iOTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnRydWU8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSI3OCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzODAuMCIgeT0iOTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiPmZhbHNlPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSIxMTAiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iNjAuMCIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIj5mYWxzZTwvdGV4dD4KICA8cmVjdCB4PSIxMDAiIHk9IjExMCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIxNDAuMCIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj50cnVlPC90ZXh0PgogIDxyZWN0IHg9IjE4MCIgeT0iMTEwIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiPmZhbHNlPC90ZXh0PgogIDxyZWN0IHg9IjI2MCIgeT0iMTEwIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjMwMC4wIiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnRydWU8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxMTAiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzgwLjAiIHk9IjEzMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iMTQyIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjYwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMTAwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMTQwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMTgwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMjIwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjYwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzAwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzgwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8bGluZSB4MT0iMTgwIiB5MT0iMTQiIHgyPSIxODAiIHkyPSIxNzQiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIzIi8+Cjwvc3ZnPgo=",VC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5BYmxhdWYgZGVyIFdoaWxlLVNjaGxlaWZlPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iNDQiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSIyMCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjY5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaAgQmVkaW5ndW5nIHByw7xmZW48L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgSW5oYWx0IGF1c2bDvGhyZW48L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53aWVkZXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+bmFjaCBvYmVuPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+d2VpdGVyIHVudGVyIGRlciBTY2hsZWlmZTwvdGV4dD4KPC9zdmc+Cg==",QC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+a29wZmdlc3RldWVydCAoV2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmZ1w59nZXN0ZXVlcnQgKERvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBCZWRpbmd1bmc8L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBJbmhhbHQ8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluaGFsdDwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgQmVkaW5ndW5nPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5Jc3QgZGllIEJlZGluZ3VuZyBnbGVpY2ggZmFsc2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5sw6R1ZnQgZGVyIEluaGFsdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+bmllPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5EZXIgSW5oYWx0IGzDpHVmdCBpbW1lcjwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm1pbmRlc3RlbnMgZWlubWFsPC90c3Bhbj4uPC90ZXh0Pgo8L3N2Zz4K",qC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIFN0YXJ0IDx0c3BhbiBmaWxsPSIjNmU2ZTczIj4obnVyIGVpbm1hbCk8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9Ijc2IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iMTciIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIEJlZGluZ3VuZyBwcsO8ZmVuPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMTM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iNiIgZmlsbD0iI2RiZWFmZSIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGiIEluaGFsdCBhdXNmw7xocmVuPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMjAwIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iNiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjMTU4MDNkIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGjIFNjaHJpdHQsIHouIEIuIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+enVyw7xjazwvdGV4dD4KICA8dGV4dCB4PSI0OCIgeT0iMTc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj56dSDikaE8L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSI4NCIgZmlsbD0iI2I5MWMxYyIgZm9udC13ZWlnaHQ9IjYwMCI+ZmFsc2U8L3RleHQ+CiAgPHRleHQgeD0iMzM2IiB5PSI5OCI+ZmVydGlnPC90ZXh0Pgo8L3N2Zz4K",UC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gemFobGVuID0gezIsIDQsIDYsIDgsIDEwfTwvdGV4dD4KICA8dGV4dCB4PSIyMCIgeT0iNTQiIGZpbGw9IiM2ZTZlNzMiIGZvbnQtc2l6ZT0iMTIiPkluZGV4PC90ZXh0PgogIDx0ZXh0IHg9IjkwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MDwvdGV4dD48cmVjdCB4PSI2MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjI8L3RleHQ+CiAgPHRleHQgeD0iMTUwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MTwvdGV4dD48cmVjdCB4PSIxMjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTUwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NDwvdGV4dD4KICA8dGV4dCB4PSIyMTAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4yPC90ZXh0PjxyZWN0IHg9IjE4MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyMTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj42PC90ZXh0PgogIDx0ZXh0IHg9IjI3MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjM8L3RleHQ+PHJlY3QgeD0iMjQwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjI3MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjg8L3RleHQ+CiAgPHRleHQgeD0iMzMwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+NDwvdGV4dD48cmVjdCB4PSIzMDAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzMwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+MTA8L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjkwIiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5XZXJ0PC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjYSkiPjxsaW5lIHgxPSI5MCIgeTE9IjE0MCIgeDI9IjkwIiB5Mj0iMTEyIi8+PGxpbmUgeDE9IjMzMCIgeTE9IjE0MCIgeDI9IjMzMCIgeTI9IjExMiIvPjwvZz4KICA8ZyBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+PHRleHQgeD0iOTAiIHk9IjE1NiI+emFobGVuWzBdIGlzdCAyPC90ZXh0Pjx0ZXh0IHg9IjMzMCIgeT0iMTU2Ij56YWhsZW5bNF0gaXN0IDEwPC90ZXh0PjwvZz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+NSBGw6RjaGVyLCBnZXrDpGhsdCB3aXJkIGFiIDA6IGRlciBsZXR6dGUgSW5kZXggaXN0IDQuPC90ZXh0Pgo8L3N2Zz4K",$C=""+new URL("mvc-klick-KmFKqxH-.svg",import.meta.url).href,YC=""+new URL("aufgabe-mehrwertsteuer-KUkerRBd.svg",import.meta.url).href,XC=""+new URL("kino-saal-BOvcmdzb.svg",import.meta.url).href,KC=""+new URL("kino-schleifen-Ci9yPnbo.svg",import.meta.url).href,eB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5JbsOtY2lvPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSI3NiI+UMO0ciB1bWEgY2jDoXZlbmEgbmEgbWVzYTwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTMzIj5RdWVyIGHDp8O6Y2FyPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTk0Ij5KdW50YXIgYcOnw7pjYXI8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI4NSI+Q2jDoSBtdWl0byBxdWVudGU/PC90ZXh0PgogICAgPHRleHQgeD0iMzI3LjUiIHk9IjI4NSI+RXNwZXJhciAxIG1pbnV0bzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5CZWJlciBvIGNow6E8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjM5NSI+RmltPC90ZXh0PgogIDwvZz4KICA8ZyBmb250LXNpemU9IjEyIiBmb250LXdlaWdodD0iNjAwIj4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMTY4IiBmaWxsPSIjMjQ4YTNkIj5zaW08L3RleHQ+CiAgICA8dGV4dCB4PSIyNDIiIHk9IjEyMiIgZmlsbD0iI2Q3MDAxNSI+bsOjbzwvdGV4dD4KICAgIDx0ZXh0IHg9IjI0MCIgeT0iMjc0IiBmaWxsPSIjMjQ4YTNkIj5zaW08L3RleHQ+CiAgICA8dGV4dCB4PSIxNTYiIHk9IjMyMCIgZmlsbD0iI2Q3MDAxNSI+bsOjbzwvdGV4dD4KICA8L2c+CiAgPCEtLSBMZWdlbmRlIC0tPgogIDxsaW5lIHgxPSIxMCIgeTE9IjQxOCIgeDI9IjM5MCIgeTI9IjQxOCIgc3Ryb2tlPSIjZDFkMWQ2Ii8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cmVjdCB4PSI0MCIgeT0iNDMwIiB3aWR0aD0iMzYiIGhlaWdodD0iMTgiIHJ4PSI5IiBmaWxsPSIjZDFmMmQ5Ii8+CiAgICA8cmVjdCB4PSIyMjAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8cGF0aCBkPSJNNTggNDU4IEw3NiA0NjkgTDU4IDQ4MCBMNDAgNDY5IFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxwYXRoIGQ9Ik0yMjYgNDYwIEwyNTYgNDYwIEwyNTAgNDc4IEwyMjAgNDc4IFoiIGZpbGw9IiNmMmU2ZmYiLz4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZmlsbD0iIzNhM2EzYyI+CiAgICA8dGV4dCB4PSI4NiIgeT0iNDQzIj5JbsOtY2lvIG91IGZpbTwvdGV4dD4KICAgIDx0ZXh0IHg9IjI2NiIgeT0iNDQzIj5JbnN0cnXDp8OjbzwvdGV4dD4KICAgIDx0ZXh0IHg9Ijg2IiB5PSI0NzMiPkRlY2lzw6NvPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NzMiPkVudHJhZGEgb3Ugc2HDrWRhPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",tB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+T25kZSBmaWNhIG8gZWxlbWVudG8/PC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RiZWFmZSIvPgogIDxyZWN0IHg9IjIwIiB5PSI3NSIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc1IiB4Mj0iMjEwIiB5Mj0iNzUiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLWRhc2hhcnJheT0iNCAzIi8+CiAgPHJlY3QgeD0iMjAiIHk9IjQwIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjcwIiBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iNjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxZDRlZDgiPm1ldGFkZSBkZSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPm1ldGFkZSBkZSBiYWl4bzwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YW50ZXM8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGVwb2lzPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+c3Vic3RpdHVpLW88L3RzcGFuPjwvdGV4dD4KPC9zdmc+Cg==",nB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgaWRhZGUgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+aWRhZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5WYWxvcjwvdGV4dD4KICA8dGV4dCB4PSIzMTYiIHk9IjExOSI+Tm9tZTwvdGV4dD4KICA8dGV4dCB4PSI4IiB5PSIxNTYiPlRpcG8gZGUgZGFkb3M8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPlBlbG8gbm9tZSBjaGVnYXMgYW8gdmFsb3IuPC90ZXh0Pgo8L3N2Zz4K",iB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9udG9zPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCBjYWxjdWxhciBhIGRpcmVpdGE6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIGd1YXJkYXIgbyByZXN1bHRhZG8gw6AgZXNxdWVyZGE8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zIGFudGVzOiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPiAgIOKGkiAgIHBvbnRvcyBkZXBvaXM6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",aB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMzAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMzAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+ZXNxdWVyZGE8L3RleHQ+CiAgPHRleHQgeD0iNzUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+c3VtbzwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+YXV4PC90ZXh0PgogIDx0ZXh0IHg9IjIwMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj52YXppbzwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+ZGlyZWl0YTwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+w6FndWE8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8cGF0aCBkPSJNODggMTA0IEMxMTAgNzAsIDE2MCA3MCwgMTg2IDEwNCIvPgogICAgPHBhdGggZD0iTTMxOCAxMDQgQzI3MCAxNSwgMTMwIDE1LCA4MiAxMDQiLz4KICAgIDxwYXRoIGQ9Ik0yMTQgMTA0IEMyNDAgNzAsIDI5MCA3MCwgMzEyIDEwNCIvPgogIDwvZz4KICA8ZyBmb250LXdlaWdodD0iNzAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4KICAgIDxjaXJjbGUgY3g9IjEzNyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMTM3IiB5PSI4NSI+MTwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjIwMCIgY3k9IjM4IiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjAwIiB5PSI0MyI+MjwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjI2MyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjYzIiB5PSI4NSI+MzwvdGV4dD4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTIiPgogICAgPHRleHQgeD0iMjAwIiB5PSIyNTAiPjE6IGF1eCA9IGVzcXVlcmRhPC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIyNjgiPjI6IGVzcXVlcmRhID0gZGlyZWl0YTwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMjg2Ij4zOiBkaXJlaXRhID0gYXV4PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",sB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzAwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iMTAwIiB5PSI1MCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyNCIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc0IiB4Mj0iMzgwIiB5Mj0iNzQiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPGxpbmUgeDE9IjUwIiB5MT0iNjgiIHgyPSI1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MDwvdGV4dD4KICA8bGluZSB4MT0iMTAwIiB5MT0iNjgiIHgyPSIxMDAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxMDAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4xPC90ZXh0PgogIDxsaW5lIHgxPSIxNTAiIHkxPSI2OCIgeDI9IjE1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjE1MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjI8L3RleHQ+CiAgPGxpbmUgeDE9IjIwMCIgeTE9IjY4IiB4Mj0iMjAwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MzwvdGV4dD4KICA8bGluZSB4MT0iMjUwIiB5MT0iNjgiIHgyPSIyNTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyNTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj40PC90ZXh0PgogIDxsaW5lIHgxPSIzMDAiIHkxPSI2OCIgeDI9IjMwMCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjMwMCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjU8L3RleHQ+CiAgPGxpbmUgeDE9IjM1MCIgeTE9IjY4IiB4Mj0iMzUwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NjwvdGV4dD4KICA8Y2lyY2xlIGN4PSIxMDAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMwMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dsOhbGlkYTwvdGV4dD4KICA8dGV4dCB4PSI1MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludsOhbGlkYTwvdGV4dD48dGV4dCB4PSIzNTAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnbDoWxpZGE8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGEgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGEgJmx0Oz0gNTwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RhICZsdDsgMSB8fCBub3RhICZndDsgNTwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",rB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Db21vIGZ1bmNpb25hIG8gY2ljbG8gd2hpbGU8L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSI0NCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI0MCIgcng9IjIwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iNjkiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCB2ZXJpZmljYXIgYSBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMTI4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iNiIgZmlsbD0iI2RiZWFmZSIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE1MyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIGV4ZWN1dGFyIG8gaW50ZXJpb3I8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj52b2x0YXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+cGFyYSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+Y29udGludWFyIHBvciBiYWl4byBkbyBjaWNsbzwvdGV4dD4KPC9zdmc+Cg==",oB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHLDqS10ZXN0ZSAod2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnDDs3MtdGVzdGUgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjM1IiB5PSIxMjQiIHdpZHRoPSIxMzAiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgaW50ZXJpb3I8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGludGVyaW9yPC90ZXh0PgogIDxyZWN0IHg9IjIzNSIgeT0iMTI0IiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjM2IiByeD0iMTgiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBjb25kacOnw6NvPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5TZSBhIGNvbmRpw6fDo28gZm9yIGxvZ28gZmFsc2EsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5vIGludGVyaW9yIDx0c3BhbiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjMWMxYzFlIj5udW5jYTwvdHNwYW4+IMOpIGV4ZWN1dGFkby48L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSIxOTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPk8gaW50ZXJpb3Igw6kgc2VtcHJlIGV4ZWN1dGFkbzwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPnBlbG8gbWVub3MgdW1hIHZlejwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",lB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluw61jaW8gPHRzcGFuIGZpbGw9IiM2ZTZlNzMiPihzw7MgdW1hIHZleik8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9Ijc2IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iMTciIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIHZlcmlmaWNhciBhIGNvbmRpw6fDo288L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMzgiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzQiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaIgZXhlY3V0YXIgbyBpbnRlcmlvcjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjIwMCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIyMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoyBwYXNzbywgcC4gZXguIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+dm9sdGFyPC90ZXh0PgogIDx0ZXh0IHg9IjQ4IiB5PSIxNzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPmFvIOKRoTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9Ijg0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIzMzYiIHk9Ijk4Ij5maW08L3RleHQ+Cjwvc3ZnPgo=",uB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gbnVtZXJvcyA9IHsyLCA0LCA2LCA4LCAxMH08L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjU0IiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj7DjW5kaWNlPC90ZXh0PgogIDx0ZXh0IHg9IjkwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MDwvdGV4dD48cmVjdCB4PSI2MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjI8L3RleHQ+CiAgPHRleHQgeD0iMTUwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MTwvdGV4dD48cmVjdCB4PSIxMjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTUwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NDwvdGV4dD4KICA8dGV4dCB4PSIyMTAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4yPC90ZXh0PjxyZWN0IHg9IjE4MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyMTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj42PC90ZXh0PgogIDx0ZXh0IHg9IjI3MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjM8L3RleHQ+PHJlY3QgeD0iMjQwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjI3MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjg8L3RleHQ+CiAgPHRleHQgeD0iMzMwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+NDwvdGV4dD48cmVjdCB4PSIzMDAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzMwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+MTA8L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjkwIiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5WYWxvcjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj48bGluZSB4MT0iOTAiIHkxPSIxNDAiIHgyPSI5MCIgeTI9IjExMiIvPjxsaW5lIHgxPSIzMzAiIHkxPSIxNDAiIHgyPSIzMzAiIHkyPSIxMTIiLz48L2c+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjx0ZXh0IHg9IjkwIiB5PSIxNTYiPm51bWVyb3NbMF0gw6kgMjwvdGV4dD48dGV4dCB4PSIzMzAiIHk9IjE1NiI+bnVtZXJvc1s0XSDDqSAxMDwvdGV4dD48L2c+CiAgPHRleHQgeD0iMjAwIiB5PSIxODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPjUgcG9zacOnw7VlcywgY29udGEtc2UgYSBwYXJ0aXIgZGUgMDogbyDDumx0aW1vIMOtbmRpY2Ugw6kgNC48L3RleHQ+Cjwvc3ZnPgo=",mB=""+new URL("mvc-klick-DKonBpbs.svg",import.meta.url).href,cB=""+new URL("schiffe-versenken-iEBDHIxD.svg",import.meta.url).href,dB=""+new URL("ss-binaere-suche-DVVS2SNc.svg",import.meta.url).href,hB=""+new URL("ss-bubblesort-AFDcFDah.svg",import.meta.url).href,gB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5Qcm9jdXJhLXNlIG8gOS4gQXMgY2FydGFzIGVzdMOjbyBiYXJhbGhhZGFzLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjM0LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjc8L3RleHQ+PHRleHQgeD0iMzQuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpTwvdGV4dD48L2c+Cjx0ZXh0IHg9IjM0LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIzNC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjEuPC90ZXh0Pgo8Zz48cmVjdCB4PSI2MiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iODIuMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+MzwvdGV4dD48dGV4dCB4PSI4Mi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iODIuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjgyLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+Mi48L3RleHQ+CjxnPjxyZWN0IHg9IjExMCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTMwLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjEwPC90ZXh0Pjx0ZXh0IHg9IjEzMC4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iI2RjMjYyNiI+4pmmPC90ZXh0PjwvZz4KPHRleHQgeD0iMTMwLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIxMzAuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4zLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTU4IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIxNzguMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+NTwvdGV4dD48dGV4dCB4PSIxNzguMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZozwvdGV4dD48L2c+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTc4LjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+NC48L3RleHQ+CjxnPjxyZWN0IHg9IjIwNiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIzIi8+PHRleHQgeD0iMjI2LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjk8L3RleHQ+PHRleHQgeD0iMjI2LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaA8L3RleHQ+PC9nPgo8dGV4dCB4PSIyMjYuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjMTU4MDNkIj7inJM8L3RleHQ+Cjx0ZXh0IHg9IjIyNi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjUuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyNTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjI1OCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPGc+PHJlY3QgeD0iMzAyIiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIzMDYiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjM1MCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzU0IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8dGV4dCB4PSIxNCIgeT0iMTY4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5WaXJhciBkYSBlc3F1ZXJkYSBwYXJhIGEgZGlyZWl0YTo8L3RleHQ+PHRleHQgeD0iMTQiIHk9IjE4OCIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzZlNmU3MyI+QXDDs3MgNSBjb21wYXJhw6fDtWVzLCBvIDkgw6kgZW5jb250cmFkby48L3RleHQ+Cjwvc3ZnPgo=",pB=""+new URL("ss-vergleiche-DWgkIvLr.svg",import.meta.url).href,fB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPlBhc3NhZ2VtIHBvciB2YWxvcjogdW1hIGPDs3BpYTwvdGV4dD4KPHJlY3QgeD0iMTAiIHk9IjM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9Ijg2IiByeD0iOCIgZmlsbD0iI2VmZjZmZiIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyMCIgeT0iNTgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPlByb2dyYW1hIHByaW5jaXBhbDwvdGV4dD4KPHRleHQgeD0iMTYiIHk9Ijk4IiBmb250LXNpemU9IjEyIj5udW1lcm88L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+ZHVwbGljYXI8L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iOTgiPng8L3RleHQ+CjxyZWN0IHg9IjI4MCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMCIgcng9IjQiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8dGV4dCB4PSIzMjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dHNwYW4gZmlsbD0iIzZlNmU3MyIgdGV4dC1kZWNvcmF0aW9uPSJsaW5lLXRocm91Z2giPjU8L3RzcGFuPiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPjwvdGV4dD4KPGxpbmUgeDE9IjEyOCIgeTE9IjkzIiB4Mj0iMjQ4IiB5Mj0iOTMiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIgbWFya2VyLWVuZD0idXJsKCNrKSIvPgo8dGV4dCB4PSIyMTAiIHk9Ijg0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jw7NwaWE8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNTAiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPnggcGFzc2EgYSAxMCwgbWFzIG51bWVybyBmaWNhIDUuPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iMTY4IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5Db21vIHVtYSBmb3RvY8OzcGlhOiBlc2NyZXZlciBuYSBjw7NwaWE8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxODYiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPm7Do28gYWx0ZXJhIG8gb3JpZ2luYWwuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5QYXNzYWdlbSBwb3IgcmVmZXLDqm5jaWE6IG8gbWVzbW8gYXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPlByb2dyYW1hIHByaW5jaXBhbDwvdGV4dD4KPHRleHQgeD0iMjAiIHk9IjMwMCI+ZmlsYTwvdGV4dD4KPGNpcmNsZSBjeD0iMTUwIiBjeT0iMjk1IiByPSI1IiBmaWxsPSIjMWQ0ZWQ4Ii8+CjxyZWN0IHg9IjI1MCIgeT0iMjUyIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjYyIiByeD0iOCIgZmlsbD0iI2ZmZjdlZCIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyNjAiIHk9IjI3MiIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+bGltcGFyPC90ZXh0Pgo8dGV4dCB4PSIyNjAiIHk9IjMwMCI+bHVnYXJlczwvdGV4dD4KPGNpcmNsZSBjeD0iMzkwIiBjeT0iMjk1IiByPSI1IiBmaWxsPSIjYjQ1MzA5Ii8+CjxwYXRoIGQ9Ik0xNTAgMzAwIEwxNTAgMzQwIEwxNDAgMzUyIiBmaWxsPSJub25lIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41IiBtYXJrZXItZW5kPSJ1cmwoI2IpIi8+CjxwYXRoIGQ9Ik0zOTAgMzAwIEwzOTAgMzQwIEwzMjIgMzU0IiBmaWxsPSJub25lIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41IiBtYXJrZXItZW5kPSJ1cmwoI28pIi8+CjxyZWN0IHg9IjkwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjE1MCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyMTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMjcwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9IjEyMCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMTgwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIyNDAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjMwMCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQxNiIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+U8OzIGjDoSB1bSBhcnJheS4gTyBxdWUgbGltcGFyIGFsdGVyYSBhdHJhdsOpcyBkZSBsdWdhcmVzLDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQzNCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+byBwcm9ncmFtYSBwcmluY2lwYWwgdsOqIGVtIGZpbGEuPC90ZXh0Pgo8L3N2Zz4K",xB=""+new URL("zk-zeichen-8efNmpGx.svg",import.meta.url).href,bB=""+new URL("schiffe-versenken-CXt1SF0S.svg",import.meta.url).href,yB=""+new URL("ss-binaere-suche-CPsLGldq.svg",import.meta.url).href,vB=""+new URL("ss-bubblesort-Dic2ZfaT.svg",import.meta.url).href,wB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5HZXN1Y2h0OiBkaWUgOS4gRGllIEthcnRlbiBzaW5kIGdlbWlzY2h0LjwvdGV4dD4KPGc+PHJlY3QgeD0iMTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjM0LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjc8L3RleHQ+PHRleHQgeD0iMzQuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpTwvdGV4dD48L2c+Cjx0ZXh0IHg9IjM0LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIzNC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjEuPC90ZXh0Pgo8Zz48cmVjdCB4PSI2MiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iODIuMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+MzwvdGV4dD48dGV4dCB4PSI4Mi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iODIuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjgyLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+Mi48L3RleHQ+CjxnPjxyZWN0IHg9IjExMCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTMwLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjEwPC90ZXh0Pjx0ZXh0IHg9IjEzMC4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iI2RjMjYyNiI+4pmmPC90ZXh0PjwvZz4KPHRleHQgeD0iMTMwLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIxMzAuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4zLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTU4IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIxNzguMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+NTwvdGV4dD48dGV4dCB4PSIxNzguMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZozwvdGV4dD48L2c+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTc4LjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+NC48L3RleHQ+CjxnPjxyZWN0IHg9IjIwNiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIzIi8+PHRleHQgeD0iMjI2LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjk8L3RleHQ+PHRleHQgeD0iMjI2LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaA8L3RleHQ+PC9nPgo8dGV4dCB4PSIyMjYuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjMTU4MDNkIj7inJM8L3RleHQ+Cjx0ZXh0IHg9IjIyNi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjUuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyNTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjI1OCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPGc+PHJlY3QgeD0iMzAyIiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIzMDYiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjM1MCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzU0IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8dGV4dCB4PSIxNCIgeT0iMTY4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5Wb24gbGlua3MgbmFjaCByZWNodHMgdW1kcmVoZW46PC90ZXh0Pjx0ZXh0IHg9IjE0IiB5PSIxODgiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiM2ZTZlNzMiPk5hY2ggNSBWZXJnbGVpY2hlbiBpc3QgZGllIDkgZ2VmdW5kZW4uPC90ZXh0Pgo8L3N2Zz4K",zB=""+new URL("ss-vergleiche-DRqzU2TZ.svg",import.meta.url).href,IB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPldlcnTDvGJlcmdhYmU6IGVpbmUgS29waWU8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNlZmY2ZmYiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjAiIHk9IjU4IiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWQ0ZWQ4Ij5IYXVwdHByb2dyYW1tPC90ZXh0Pgo8dGV4dCB4PSIyMCIgeT0iOTgiPnphaGw8L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+dmVyZG9wcGxlPC90ZXh0Pgo8dGV4dCB4PSIyNjAiIHk9Ijk4Ij54PC90ZXh0Pgo8cmVjdCB4PSIyODAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMzIwIiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+PHRzcGFuIGZpbGw9IiM2ZTZlNzMiIHRleHQtZGVjb3JhdGlvbj0ibGluZS10aHJvdWdoIj41PC90c3Bhbj4gPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiPjEwPC90c3Bhbj48L3RleHQ+CjxsaW5lIHgxPSIxMjgiIHkxPSI5MyIgeDI9IjI0OCIgeTI9IjkzIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtZGFzaGFycmF5PSI1IDQiIG1hcmtlci1lbmQ9InVybCgjaykiLz4KPHRleHQgeD0iMjEwIiB5PSI4NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+S29waWU8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNTAiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPnggd2lyZCAxMCwgYWJlciB6YWhsIGJsZWlidCA1LjwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjE2OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+V2llIGJlaSBlaW5lciBGb3Rva29waWU6IFdlciBhdWYgZGVyIEtvcGllIHNjaHJlaWJ0LDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjE4NiIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+w6RuZGVydCBkYXMgT3JpZ2luYWwgbmljaHQuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5SZWZlcmVuesO8YmVyZ2FiZTogZGFzc2VsYmUgQXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPkhhdXB0cHJvZ3JhbW08L3RleHQ+Cjx0ZXh0IHg9IjIwIiB5PSIzMDAiPnJlaWhlPC90ZXh0Pgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiMxZDRlZDgiLz4KPHJlY3QgeD0iMjUwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZmZmN2VkIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI2MCIgeT0iMjcyIiBmb250LXNpemU9IjEzIiBmaWxsPSIjYjQ1MzA5Ij5sZWVyZW48L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iMzAwIj5wbGFldHplPC90ZXh0Pgo8Y2lyY2xlIGN4PSIzOTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiNiNDUzMDkiLz4KPHBhdGggZD0iTTE1MCAzMDAgTDE1MCAzNDAgTDE0MCAzNTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjYikiLz4KPHBhdGggZD0iTTM5MCAzMDAgTDM5MCAzNDAgTDMyMiAzNTQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjbykiLz4KPHJlY3QgeD0iOTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMTUwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjIxMCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyNzAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMTIwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxODAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjI0MCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMzAwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDE2IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5FcyBnaWJ0IG51ciBlaW4gQXJyYXkuIFdhcyBsZWVyZW4gw7xiZXIgcGxhZXR6ZSDDpG5kZXJ0LDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQzNCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+c2llaHQgZGFzIEhhdXB0cHJvZ3JhbW0gdW50ZXIgcmVpaGUuPC90ZXh0Pgo8L3N2Zz4K",kB=""+new URL("zk-zeichen-vYvc3iJg.svg",import.meta.url).href;function SB(i){const e=[];for(const t of i.replace(/\r\n/g,` `).split(` `)){const n=/^###\s+(.+)$/.exec(t),a=e.at(-1);if(n){const s=n[1].trim();e.push({term:s,forms:[s],text:""})}else a&&/^(auch|also):/i.test(t)?a.forms.push(...t.replace(/^(auch|also):/i,"").split(",").map(s=>s.trim()).filter(Boolean)):a&&t.trim()!==""&&(a.text=(a.text+" "+t.trim()).trim())}return e.filter(t=>t.text!=="")}const _B=i=>i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");function ju(i){const e=i.flatMap(t=>t.forms).sort((t,n)=>n.length-t.length);if(e.length!==0)return new RegExp(`(?t.forms.includes(e))}class To extends Error{}function TB(i){return i==="zuhoerer"||i==="vertrag"||i==="layout"||i==="bombe"||i==="frage"||i==="reihenfolge"}function OB(i,e,t){const n=h=>{throw new To(`${t}: ${h}`)};let a="",s="",r="",o=[],l,u;const m=[];let c,d=!1;for(const h of e){const g=h.trim();if(c&&d&&(/^ {4}|^\t/.test(h)||g==="")){c.code+=(c.code?` -`:"")+h.replace(/^( {4}|\t)/,"");continue}if(d=!1,!g)continue;const f=/^(titel|intro|antworten|frage|runde|klicks|richtig|zeit|fehler|besser|daten):\s*(.*)$/.exec(g);if(f){const[,y,w]=f;y==="runde"?(c={code:"",question:r,options:[],explanation:"",clicks:[]},m.push(c),d=!0):c?y==="frage"?c.question=w:y==="fehler"?c.wrongLine=Number(w):y==="besser"?c.fix=w:y==="klicks"?c.clicks=w.split(",").map(S=>S.trim()).filter(Boolean):y==="richtig"?c.rightText=w:n(`„${y}:“ gehört vor die erste Runde.`):y==="titel"?a=w:y==="intro"?s=w:y==="antworten"?o=w.split("|").map(S=>S.trim()):y==="frage"?r=w:y==="zeit"?l=Number(w):y==="daten"?u=w==="csv"?w:n("„daten:“ kennt nur „csv“."):n(`„${y}:“ gehört in eine Runde.`);continue}c||n(`Unbekannte Zeile vor der ersten Runde: „${g}“`);const x=c,b=/^-\s+(\[x\]\s+)?(.+)$/.exec(g);b?x.options.push({text:b[2].trim().replaceAll("\\n",` +`:"")+h.replace(/^( {4}|\t)/,"");continue}if(d=!1,!g)continue;const f=/^(titel|intro|antworten|frage|runde|klicks|richtig|zeit|fehler|besser|daten):\s*(.*)$/.exec(g);if(f){const[,y,w]=f;y==="runde"?(c={code:"",question:r,options:[],explanation:"",clicks:[]},m.push(c),d=!0):c?y==="frage"?c.question=w:y==="fehler"?c.wrongLine=Number(w):y==="besser"?c.fix=w:y==="klicks"?c.clicks=w.split(",").map(I=>I.trim()).filter(Boolean):y==="richtig"?c.rightText=w:n(`„${y}:“ gehört vor die erste Runde.`):y==="titel"?a=w:y==="intro"?s=w:y==="antworten"?o=w.split("|").map(I=>I.trim()):y==="frage"?r=w:y==="zeit"?l=Number(w):y==="daten"?u=w==="csv"?w:n("„daten:“ kennt nur „csv“."):n(`„${y}:“ gehört in eine Runde.`);continue}c||n(`Unbekannte Zeile vor der ersten Runde: „${g}“`);const x=c,b=/^-\s+(\[x\]\s+)?(.+)$/.exec(g);b?x.options.push({text:b[2].trim().replaceAll("\\n",` `),right:!!b[1]}):g.startsWith(">")?x.explanation+=(x.explanation?" ":"")+g.slice(1).trim():n(`Unbekannte Zeile im Spiel: „${g}“`)}return a||n("Das Spiel braucht eine Zeile „titel:“."),m.length||n("Das Spiel braucht mindestens eine „runde:“."),m.forEach((h,g)=>{if(h.code=h.code.replace(/\n+$/,""),i==="bombe"){const f=h.code.split(` `),x=h.wrongLine;(!x||!Number.isInteger(x)||x<1||x>f.length||!f[x-1].trim())&&n(`Runde ${g+1}: „fehler:“ muss eine Zeile des Codes sein.`),h.fix||n(`Runde ${g+1}: „besser:“ fehlt.`),h.options.length&&n(`Runde ${g+1}: Bei „bombe“ gibt es keine Antworten, man tippt auf die Zeile.`),h.question||n(`Runde ${g+1}: keine Frage.`);return}if(i==="reihenfolge"){h.options.length<3&&n(`Runde ${g+1}: „reihenfolge“ braucht mindestens drei Schritte.`),h.options.some(f=>f.right)&&n(`Runde ${g+1}: Bei „reihenfolge“ gibt es kein [x], die Schritte stehen der Reihe nach da.`),new Set(h.options.map(f=>f.text)).size!==h.options.length&&n(`Runde ${g+1}: zwei Schritte sind gleich.`),h.question||n(`Runde ${g+1}: keine Frage.`);return}if(h.options.length||(o.length||n(`Runde ${g+1}: keine Antworten.`),(!h.rightText||!o.includes(h.rightText))&&n(`Runde ${g+1}: „richtig:“ muss eine der Antworten sein.`),h.options=o.map(f=>({text:f,right:f===h.rightText}))),h.options.filter(f=>f.right).length!==1&&n(`Runde ${g+1}: genau eine Antwort muss richtig sein.`),h.question||n(`Runde ${g+1}: keine Frage.`),i==="layout"&&h.options.forEach(f=>Dh(f.text,`Runde ${g+1}`,n)),i==="zuhoerer")try{const f=Zh(h.code);for(const x of h.clicks)f.buttons.some(b=>b.caption===x)||n(`Runde ${g+1}: Knopf „${x}“ gibt es nicht.`);AB(f,h.clicks)}catch(f){if(f instanceof To)throw f;n(`Runde ${g+1}: ${f.message}`)}delete h.rightText}),i==="bombe"&&!(l&&l>0)&&n("„bombe“ braucht „zeit:“ mit den Sekunden je Runde."),{kind:i,title:a,intro:s,...i==="bombe"?{seconds:l,...u?{data:u}:{}}:{},rounds:m}}function Dh(i,e="",t=n=>{throw new To(n)}){const n=/^(grid|flow|border):\s*(.+)$/.exec(i);if(!n)return t(`${e}: Antwort „${i}“ ist kein Fensterbild (grid:, flow: oder border:).`);if(n[1]==="border"){const s={};for(const r of n[2].split(/\s+/)){const o=/^([NSWEC])=(.+)$/.exec(r);o||t(`${e}: „${r}“ im BorderLayout-Bild verstehe ich nicht (z. B. N=A).`),s[o[1]]=o[2]}return{kind:"border",areas:s}}const a=n[2].split("/").map(s=>s.trim().split(/\s+/).filter(Boolean));return{kind:n[1],rows:a}}const Za='"((?:[^"\\\\]|\\\\.)*)"';function Zh(i){const e=i.split(` `),t={title:"",buttons:[],labels:[],ints:{},listeners:[]},n=new Map,a=(r,o,l)=>{if(o.startsWith("{")){let m=r+1;const c=[];for(;m=e.length)throw new Error(`Dem Zuhörer fehlt „${l}“.`);return{from:r,to:m,statements:Oo(c.join(" "))}}const u=l==="});"?o.replace(/\)\s*;\s*$/,""):o.replace(/;\s*$/,"");return{from:r,to:r,statements:Oo(u)}},s=r=>{if(!t.buttons.some(o=>o.name===r))throw new Error(`Knopf ${r} ist nicht angelegt.`);return r};for(let r=0;r\s*(.*)$/.exec(o)){const u=a(r,l[2],"};");n.set(l[1],u),r=u.to}else if(l=/^(\w+)\.addActionListener\(\s*(\w+)\s*\)\s*;$/.exec(o)){const u=n.get(l[2]);if(!u)throw new Error(`Zuhörer ${l[2]} ist nicht angelegt.`);t.listeners.push({button:s(l[1]),...u})}else if(l=/^(\w+)\.addActionListener\(\s*\w+\s*->\s*(.*)$/.exec(o)){const u=a(r,l[2],"});");t.listeners.push({button:s(l[1]),...u}),r=u.to}}return t}function Oo(i){const e=[];let t=0;const n=()=>{for(;t{let u=0,m=!1;const c=t+1;for(;t{let o=0,l=!1;const u=t;for(;t{if(n(),i[t]==="{")return Oo(a("{","}"));if(/^if\s*\(/.test(i.slice(t))){t=i.indexOf("(",t);const l=a("(",")").trim(),u=r();n();let m=[];return/^else\b/.test(i.slice(t))&&(t+=4,m=r()),[{condition:l,then:u,otherwise:m}]}const o=s();return o?[o]:[]};for(n();ta.caption===t)??i.buttons.find(a=>e.texts[a.name]===t);if(!n)throw new Error(`Knopf „${t}“ gibt es nicht.`);return Wh(i,e,n.name)}function Wh(i,e,t){const n=i.listeners.find(r=>r.button===t),a=[],s={source:t,command:e.texts[t]};for(const r of(n==null?void 0:n.statements)??[])Eh(r,e,a,s);return{button:t,listener:n,texts:{...e.texts},console:a}}function AB(i,e){const t=Mh(i);return e.map(n=>Lh(i,t,n))}function Eh(i,e,t,n){if(typeof i!="string"){for(const s of PB(i.condition,e,n)?i.then:i.otherwise)Eh(s,e,t,n);return}let a;if(a=/^(\w+)\.setText\((.*)\)$/.exec(i)){if(!(a[1]in e.texts))throw new Error(`${a[1]} ist keine Beschriftung und kein Knopf.`);e.texts[a[1]]=String(Qn(a[2],e,n))}else if(a=/^System\.out\.println\((.*)\)$/.exec(i))t.push(String(Qn(a[1],e,n)));else if(a=/^(\w+)\s*(\+\+|--)$/.exec(i))e.ints[Bu(a[1],e)]+=a[2]==="++"?1:-1;else if(a=/^(\w+)\s*([+-]?=)\s*(.+)$/.exec(i)){const s=Bu(a[1],e),r=Number(Qn(a[3],e,n));e.ints[s]=a[2]==="="?r:a[2]==="+="?e.ints[s]+r:e.ints[s]-r}else throw new Error(`Diese Anweisung kann das Spiel nicht nachspielen: „${i}“`)}function PB(i,e,t){let n;if(n=/^e\.getSource\(\)\s*(==|!=)\s*(\w+)$/.exec(i)){if(!(n[2]in e.texts))throw new Error(`${n[2]} ist kein Knopf.`);return t.source===n[2]==(n[1]==="==")}if(n=/^(!?)(.+)\.equals\((.+)\)$/.exec(i))return String(Qn(n[2],e,t))===String(Qn(n[3],e,t))!=(n[1]==="!");if(n=/^(.+?)\s*(==|!=|<=|>=|<|>)\s*(.+)$/.exec(i)){const a=Number(Qn(n[1],e,t)),s=Number(Qn(n[3],e,t));return{"==":a===s,"!=":a!==s,"<=":a<=s,">=":a>=s,"<":a":a>s}[n[2]]}throw new Error(`Diese Bedingung kann das Spiel nicht nachspielen: „${i}“`)}function Bu(i,e){if(!(i in e.ints))throw new Error(`Variable ${i} ist nicht angelegt.`);return i}function Qn(i,e,t){const n=i.match(new RegExp(`${Za}|\\d+|e\\.getActionCommand\\(\\)|\\w+(?:\\.getText\\(\\))?|[-+*/()]`,"g"))??[];let a=0;const s=()=>{const l=n[a++];if(l===void 0)throw new Error(`Unvollständiger Ausdruck „${i}“`);if(l==="("){const u=o();return a++,u}if(l.startsWith('"'))return JSON.parse(l);if(/^\d+$/.test(l))return Number(l);if(l==="e.getActionCommand()"){if(!t)throw new Error("e.getActionCommand() gibt es nur im Zuhörer.");return t.command}if(l.endsWith(".getText()"))return e.texts[l.slice(0,-10)]??"";if(l in e.ints)return e.ints[l];throw new Error(`Unbekannt: „${l}“`)},r=()=>{let l=s();for(;n[a]==="*"||n[a]==="/";){const u=n[a++],m=Number(s());l=u==="*"?Number(l)*m:Math.trunc(Number(l)/m)}return l},o=()=>{let l=r();for(;n[a]==="+"||n[a]==="-";){const u=n[a++],m=r();u==="+"?l=typeof l=="string"||typeof m=="string"?`${l}${m}`:l+m:l=Number(l)-Number(m)}return l};return o()}class jB extends Error{}const cs="___";function CB(i){const e=Array.from({length:i.rows},()=>Array(i.cols).fill(""));for(const t of i.words)[...t.word].forEach((n,a)=>e[t.row+(t.across?0:a)][t.col+(t.across?a:0)]=n);return e}function BB(i,e){const t=T=>{throw new jB(`${e}: ${T}`)},n=(T,j)=>{const C=/^(\d+)\s+(\d+)$/.exec(T.trim());return!C||Number(C[1])<1||Number(C[2])<1?t(`${j}: „${T}“ ist kein Feld (Zeile Spalte, ab 1).`):{row:Number(C[1])-1,col:Number(C[2])-1}};let a="",s="",r="ABCDEFGHIJKLMNOPQRSTUVWXYZ",o="",l="",u="",m="";const c=[],d=[];let h=[],g,f="start";for(const T of i){const j=T.trim();if(g&&(/^( {4}|\t)/.test(T)||j==="")){const P=T.replace(/^( {4}|\t)/,"");if(g==="station"){const O=c[c.length-1];O.code+=(O.code?` `:"")+P}else u+=(u?` -`:"")+P;continue}if(g=void 0,!j)continue;const C=/^(titel|intro|alphabet|station|frage|zahl|feld|tipp|kreuzwort|lösung|loesung|tor|ende):\s*(.*)$/.exec(j);if(C){const[,P,O]=C;if(P==="station")c.push({name:O,code:"",question:"",hint:"",explanation:""}),f="station",g="station";else if(P==="kreuzwort")o=O,f="crossword";else if(P==="tor")l=O,f="gate",g="gate";else if(P==="titel")a=O;else if(P==="intro")s=O;else if(P==="alphabet")r=O;else if(P==="ende")m=O;else if(P==="lösung"||P==="loesung")f!=="crossword"&&t("„lösung:“ gehört zum Kreuzworträtsel."),h=O.split(",").map(L=>n(L,"lösung"));else{f!=="station"&&t(`„${P}:“ gehört in eine Station.`);const L=c[c.length-1];P==="frage"?L.question=O:P==="tipp"?L.hint=O:P==="zahl"?L.answer=/^-?\d+$/.test(O)?Number(O):t(`Station „${L.name}“: „zahl:“ muss eine ganze Zahl sein.`):Object.assign(L,n(O,`Station „${L.name}“`))}continue}if(f==="crossword"){const P=/^-\s+([→↓])\s+(\d+)\s+(\d+)\s+([A-ZÄÖÜ]+):\s*(.+)$/u.exec(j);P||t(`Kreuzworträtsel: „${j}“ verstehe ich nicht (z. B. „- → 1 3 STRING: Hinweis“).`),d.push({across:P[1]==="→",row:Number(P[2])-1,col:Number(P[3])-1,word:P[4],clue:P[5]});continue}if(f==="station"&&j.startsWith(">")){const P=c[c.length-1];P.explanation+=(P.explanation?" ":"")+j.slice(1).trim();continue}t(`Unbekannte Zeile im Spiel: „${j}“`)}a||t("Das Spiel braucht eine Zeile „titel:“."),c.length||t("Das Spiel braucht mindestens eine „station:“."),d.length||t("Das Spiel braucht ein „kreuzwort:“ mit Wörtern."),h.length||t("Das Kreuzworträtsel braucht eine Zeile „lösung:“."),u.includes(cs)||t(`Der Code bei „tor:“ braucht ${cs} für das Eingabefeld.`),new Set(r).size!==r.length&&t("Im Alphabet kommt ein Zeichen doppelt vor.");const x=Math.max(...d.map(T=>T.row+(T.across?1:T.word.length))),b=Math.max(...d.map(T=>T.col+(T.across?T.word.length:1))),y=Array.from({length:x},()=>Array(b).fill(""));for(const T of d)[...T.word].forEach((j,C)=>{const P=T.row+(T.across?0:C),O=T.col+(T.across?C:0);y[P][O]&&y[P][O]!==j&&t(`Kreuzworträtsel: ${T.word} passt in Zeile ${P+1}, Spalte ${O+1} nicht (dort steht ${y[P][O]}).`),y[P][O]=j});const w=[...new Set(d.map(T=>T.row*b+T.col))].sort((T,j)=>T-j),S=d.map(T=>({...T,number:w.indexOf(T.row*b+T.col)+1})),z=(T,j)=>{var C;return((C=y[T])==null?void 0:C[j])??""},k=h.map(({row:T,col:j})=>z(T,j)||t(`lösung: In Zeile ${T+1}, Spalte ${j+1} ist kein Feld.`)).join(""),_=c.map(T=>{T.code||t(`Station „${T.name}“: Code fehlt.`),T.question||t(`Station „${T.name}“: „frage:“ fehlt.`),T.answer===void 0&&t(`Station „${T.name}“: „zahl:“ fehlt.`),T.row===void 0&&t(`Station „${T.name}“: „feld:“ fehlt.`);const j=r.charAt(T.answer);j||t(`Station „${T.name}“: alphabet.charAt(${T.answer}) gibt es nicht.`);const C=z(T.row,T.col);return C!==j&&t(`Station „${T.name}“: alphabet.charAt(${T.answer}) ist ${j}, im Feld ${T.row+1} ${T.col+1} steht aber „${C}“.`),T.code=T.code.replace(/\n+$/,""),T});return{title:a,intro:s,alphabet:r,stations:_,crosswordText:o,rows:x,cols:b,words:S,solution:h,keyword:k,gateText:l,gateCode:u.replace(/\n+$/,""),end:m}}const DB=/\[\[(.+?)\]\]/g;function ZB(i,e){const t={title:"",task:"",blocks:[]},n=[];let a=!1;for(const s of i){if(/^\s*```/.test(s)){a||n.push([]),a=!a;continue}if(a){n[n.length-1].push(s.replace(/\s+$/,""));continue}const r=s.trim();if(!r)continue;const o=/^([a-zäöü]+):\s*(.*)$/i.exec(r);if(!o)throw new Error(`${e}: Unbekannte Zeile im Lückentext: „${r}“.`);const l=o[2].trim();switch(o[1].toLowerCase()){case"titel":t.title=l;break;case"auftrag":t.task=l;break;case"erklärung":case"erklaerung":t.explanation=l;break;default:throw new Error(`${e}: Unbekannter Schlüssel „${o[1]}“ im Lückentext.`)}}if(a)throw new Error(`${e}: Der Codeblock im Lückentext wird nicht mit \`\`\` geschlossen.`);if(!t.title)throw new Error(`${e}: Ein Lückentext braucht einen Titel.`);if(!n.some(s=>s.some(r=>r.trim())))throw new Error(`${e}: Lückentext „${t.title}“ braucht einen Codeblock.`);if(t.blocks=n.map(s=>{const r=Math.min(...s.filter(o=>o.trim()).map(o=>/^ */.exec(o)[0].length));return s.map(o=>MB(o.slice(r),e,t.title))}),!LB(t).length)throw new Error(`${e}: Lückentext „${t.title}“ braucht mindestens eine Lücke [[…]].`);return t}function MB(i,e,t){const n=[];let a=0;for(const s of i.matchAll(DB)){s.index>a&&n.push(i.slice(a,s.index));const r=s[1].split(/\s+\|\s+/).map(o=>o.trim()).filter(Boolean);if(!r.length)throw new Error(`${e}: Leere Lücke im Lückentext „${t}“.`);n.push({answers:r}),a=s.index+s[0].length}if(atypeof s=="string"&&(s.includes("[[")||s.includes("]]"))))throw new Error(`${e}: Unvollständige Lücke im Lückentext „${t}“: „${i}“.`);return n}function LB(i){return i.blocks.flat().flatMap(e=>e.flatMap(t=>typeof t=="string"?[]:[t.answers]))}function WB(i,e){const t=n=>n.replace(/\s+/g,"");return t(e)!==""&&i.some(n=>t(n)===t(e))}class te extends Error{}function Nh(i,e){const t=/^---\n([\s\S]*?)\n---\n?/.exec(i.replace(/\r\n/g,` +`:"")+P;continue}if(g=void 0,!j)continue;const C=/^(titel|intro|alphabet|station|frage|zahl|feld|tipp|kreuzwort|lösung|loesung|tor|ende):\s*(.*)$/.exec(j);if(C){const[,P,O]=C;if(P==="station")c.push({name:O,code:"",question:"",hint:"",explanation:""}),f="station",g="station";else if(P==="kreuzwort")o=O,f="crossword";else if(P==="tor")l=O,f="gate",g="gate";else if(P==="titel")a=O;else if(P==="intro")s=O;else if(P==="alphabet")r=O;else if(P==="ende")m=O;else if(P==="lösung"||P==="loesung")f!=="crossword"&&t("„lösung:“ gehört zum Kreuzworträtsel."),h=O.split(",").map(L=>n(L,"lösung"));else{f!=="station"&&t(`„${P}:“ gehört in eine Station.`);const L=c[c.length-1];P==="frage"?L.question=O:P==="tipp"?L.hint=O:P==="zahl"?L.answer=/^-?\d+$/.test(O)?Number(O):t(`Station „${L.name}“: „zahl:“ muss eine ganze Zahl sein.`):Object.assign(L,n(O,`Station „${L.name}“`))}continue}if(f==="crossword"){const P=/^-\s+([→↓])\s+(\d+)\s+(\d+)\s+([A-ZÄÖÜ]+):\s*(.+)$/u.exec(j);P||t(`Kreuzworträtsel: „${j}“ verstehe ich nicht (z. B. „- → 1 3 STRING: Hinweis“).`),d.push({across:P[1]==="→",row:Number(P[2])-1,col:Number(P[3])-1,word:P[4],clue:P[5]});continue}if(f==="station"&&j.startsWith(">")){const P=c[c.length-1];P.explanation+=(P.explanation?" ":"")+j.slice(1).trim();continue}t(`Unbekannte Zeile im Spiel: „${j}“`)}a||t("Das Spiel braucht eine Zeile „titel:“."),c.length||t("Das Spiel braucht mindestens eine „station:“."),d.length||t("Das Spiel braucht ein „kreuzwort:“ mit Wörtern."),h.length||t("Das Kreuzworträtsel braucht eine Zeile „lösung:“."),u.includes(cs)||t(`Der Code bei „tor:“ braucht ${cs} für das Eingabefeld.`),new Set(r).size!==r.length&&t("Im Alphabet kommt ein Zeichen doppelt vor.");const x=Math.max(...d.map(T=>T.row+(T.across?1:T.word.length))),b=Math.max(...d.map(T=>T.col+(T.across?T.word.length:1))),y=Array.from({length:x},()=>Array(b).fill(""));for(const T of d)[...T.word].forEach((j,C)=>{const P=T.row+(T.across?0:C),O=T.col+(T.across?C:0);y[P][O]&&y[P][O]!==j&&t(`Kreuzworträtsel: ${T.word} passt in Zeile ${P+1}, Spalte ${O+1} nicht (dort steht ${y[P][O]}).`),y[P][O]=j});const w=[...new Set(d.map(T=>T.row*b+T.col))].sort((T,j)=>T-j),I=d.map(T=>({...T,number:w.indexOf(T.row*b+T.col)+1})),z=(T,j)=>{var C;return((C=y[T])==null?void 0:C[j])??""},S=h.map(({row:T,col:j})=>z(T,j)||t(`lösung: In Zeile ${T+1}, Spalte ${j+1} ist kein Feld.`)).join(""),_=c.map(T=>{T.code||t(`Station „${T.name}“: Code fehlt.`),T.question||t(`Station „${T.name}“: „frage:“ fehlt.`),T.answer===void 0&&t(`Station „${T.name}“: „zahl:“ fehlt.`),T.row===void 0&&t(`Station „${T.name}“: „feld:“ fehlt.`);const j=r.charAt(T.answer);j||t(`Station „${T.name}“: alphabet.charAt(${T.answer}) gibt es nicht.`);const C=z(T.row,T.col);return C!==j&&t(`Station „${T.name}“: alphabet.charAt(${T.answer}) ist ${j}, im Feld ${T.row+1} ${T.col+1} steht aber „${C}“.`),T.code=T.code.replace(/\n+$/,""),T});return{title:a,intro:s,alphabet:r,stations:_,crosswordText:o,rows:x,cols:b,words:I,solution:h,keyword:S,gateText:l,gateCode:u.replace(/\n+$/,""),end:m}}const DB=/\[\[(.+?)\]\]/g;function ZB(i,e){const t={title:"",task:"",blocks:[]},n=[];let a=!1;for(const s of i){if(/^\s*```/.test(s)){a||n.push([]),a=!a;continue}if(a){n[n.length-1].push(s.replace(/\s+$/,""));continue}const r=s.trim();if(!r)continue;const o=/^([a-zäöü]+):\s*(.*)$/i.exec(r);if(!o)throw new Error(`${e}: Unbekannte Zeile im Lückentext: „${r}“.`);const l=o[2].trim();switch(o[1].toLowerCase()){case"titel":t.title=l;break;case"auftrag":t.task=l;break;case"erklärung":case"erklaerung":t.explanation=l;break;default:throw new Error(`${e}: Unbekannter Schlüssel „${o[1]}“ im Lückentext.`)}}if(a)throw new Error(`${e}: Der Codeblock im Lückentext wird nicht mit \`\`\` geschlossen.`);if(!t.title)throw new Error(`${e}: Ein Lückentext braucht einen Titel.`);if(!n.some(s=>s.some(r=>r.trim())))throw new Error(`${e}: Lückentext „${t.title}“ braucht einen Codeblock.`);if(t.blocks=n.map(s=>{const r=Math.min(...s.filter(o=>o.trim()).map(o=>/^ */.exec(o)[0].length));return s.map(o=>MB(o.slice(r),e,t.title))}),!LB(t).length)throw new Error(`${e}: Lückentext „${t.title}“ braucht mindestens eine Lücke [[…]].`);return t}function MB(i,e,t){const n=[];let a=0;for(const s of i.matchAll(DB)){s.index>a&&n.push(i.slice(a,s.index));const r=s[1].split(/\s+\|\s+/).map(o=>o.trim()).filter(Boolean);if(!r.length)throw new Error(`${e}: Leere Lücke im Lückentext „${t}“.`);n.push({answers:r}),a=s.index+s[0].length}if(atypeof s=="string"&&(s.includes("[[")||s.includes("]]"))))throw new Error(`${e}: Unvollständige Lücke im Lückentext „${t}“: „${i}“.`);return n}function LB(i){return i.blocks.flat().flatMap(e=>e.flatMap(t=>typeof t=="string"?[]:[t.answers]))}function WB(i,e){const t=n=>n.replace(/\s+/g,"");return t(e)!==""&&i.some(n=>t(n)===t(e))}class te extends Error{}function Nh(i,e){const t=/^---\n([\s\S]*?)\n---\n?/.exec(i.replace(/\r\n/g,` `));if(!t)throw new te(`${e}: Kopfzeilen (--- … ---) fehlen.`);const n=new Map;for(const a of t[1].split(` `)){const s=/^([a-zäöüß]+):\s*(.*)$/i.exec(a.trim());s&&n.set(s[1].toLowerCase(),s[2].trim())}return{meta:n,body:i.replace(/\r\n/g,` `).slice(t[0].length)}}function EB(i,e){const t=i.split(/\s*(?:->|→)\s*/);if(t.length!==2)throw new te(`${e}: Test „${i}“ braucht genau ein „->“.`);const n=(a,s)=>a.trim()===""||a.trim()==="-"?[]:a.split(s).map(r=>r.trim());return{inputs:n(t[0],/\s*,\s*/),expected:n(t[1],/\s*\|\s*/)}}function NB(i){const e=/^(.*?)\s*(?:->|→)\s*(.*)$/.exec(i.trim());if(!e)throw new Error(`„messwerte: ${i}“ braucht ein „->“.`);const t={};for(const n of e[1].split(/\s*,\s*/).filter(Boolean)){const a=/^(\w+)\s*=\s*(.+)$/.exec(n);if(!a||!(a[1]in St))throw new Error(`Unbekannter Sensor in „${n}“.`);t[a[1]]=a[2].split("/").map(s=>{const r=s.trim();if(r==="true"||r==="false")return r==="true";if(/^-?\d+(\.\d+)?$/.test(r))return Number(r);if(typeof St[a[1]].simulated=="string")return r;throw new Error(`Messwert „${r}“ ist keine Zahl und nicht true/false.`)})}return Fh({inputs:[],expected:[],sensors:t},e[2])}function Fh(i,e){const t=[];e=e.replace(/\bscreen\s+("(?:[^"\\]|\\.)*")/u,(n,a)=>(i.screen=JSON.parse(a),""));for(const n of e.split(/\s*,\s*/).filter(Boolean))n==="ledOn"||n==="ledOff"?i.led=n==="ledOn":n==="tone"||n==="noTone"?i.tone=n==="tone":n==="none"?i.drive=[]:n==="drives"?i.drives=!0:t.push(n);return t.length&&(i.drive=es(ih(t.join(", ")))),i}function FB(i,e,t){const n={id:i,title:"",task:"",tests:[],requires:[],hints:[],subprograms:[]};let a;for(const s of e){const r=/^(titel|auftrag|start|test|datei|fahrt|befehle|welt|messwerte|schleifentiefe|braucht|tipp|lösung|loesung|unterprogramm|code):\s*(.*)$/i.exec(s.trim());if(r){const[,o,l]=r;switch(a=void 0,o.toLowerCase()){case"titel":n.title=l;break;case"auftrag":n.task=l,a="task";break;case"start":n.start=l;break;case"test":n.tests.push(EB(l,t));break;case"datei":{const u=/^([\w.-]+)\s*(?:->|→)\s*(.*)$/.exec(l.trim());if(!u||!n.tests.length)throw new te(`${t}: Übung „${i}“: „datei:“ braucht vorher einen Test und die Form „name.txt -> Zeile | Zeile“.`);const m=n.tests[n.tests.length-1];m.files=[...m.files??[],{name:u[1],lines:u[2].trim()===""?[]:u[2].split(/\s*\|\s*/).map(c=>c.trim())}];break}case"fahrt":try{n.tests.push({inputs:[],expected:[],drive:es(ih(l))})}catch(u){throw new te(`${t}: Übung „${i}“: ${u.message}`)}break;case"welt":{const u=/^([\w-]+)\s*(?:->|→)\s*(.+)$/.exec(l.trim());if(u){try{n.tests.push(Fh({inputs:[],expected:[],world:u[1]},u[2]))}catch(m){throw new te(`${t}: Übung „${i}“: ${m.message}`)}break}for(const m of l.split(/\s*,\s*/).filter(Boolean)){if(!/^[\w-]+$/.test(m))throw new te(`${t}: Übung „${i}“: Weltname „${m}“ (nur Buchstaben, Ziffern, -).`);n.tests.push({inputs:[],expected:[],world:m})}break}case"befehle":try{n.tests.push({inputs:[],expected:[],actions:s3(l)})}catch(u){throw new te(`${t}: Übung „${i}“: ${u.message}`)}break;case"messwerte":try{n.tests.push(NB(l))}catch(u){throw new te(`${t}: Übung „${i}“: ${u.message}`)}break;case"schleifentiefe":if(n.loopDepth=Number(l),!Number.isInteger(n.loopDepth)||n.loopDepth<1)throw new te(`${t}: Übung „${i}“: „schleifentiefe:“ braucht eine Zahl ab 1.`);break;case"braucht":n.requires.push(...l.split(/\s*,\s*/).filter(Boolean));break;case"tipp":n.hints.push(l),a="hint";break;case"lösung":case"loesung":n.solution=l;break;case"unterprogramm":n.subprograms.push(...l.split(/\s*,\s*/).filter(Boolean));break;case"code":if(l.trim().toLowerCase()!=="java")throw new te(`${t}: Übung „${i}“: „code:“ kennt nur „java“.`);n.code="java";break}}else a&&s.trim()!==""?a==="task"?n.task+=` @@ -60311,22 +60311,22 @@ ${l}`)}La=SB(((o=e.find(([l])=>l==="begriffe.md"))==null?void 0:o[1])??"")}const

${Ae(p("simulation_trace"))}

${Ae(p("simulation_variables"))}

${Ae(p("simulation_output"))}

- `;const e=a=>this.element.querySelector(a);this.buttons={play:e("[data-sim=play]"),pause:e("[data-sim=pause]"),step:e("[data-sim=step]"),stop:e("[data-sim=stop]")},this.buttons.play.addEventListener("click",()=>this.play()),this.buttons.pause.addEventListener("click",()=>this.pause()),this.buttons.step.addEventListener("click",()=>this.step()),this.buttons.stop.addEventListener("click",()=>this.reset()),this.editButton=e(".sim-edit"),this.editButton.addEventListener("click",()=>this.onEdit());const t=e("[data-sim=highlight]");t.value=this.highlightMode,t.addEventListener("change",()=>{this.highlightMode=t.value,Vu(Hu,this.highlightMode)});const n=e("[data-sim=delay]");n.value=this.delay,n.addEventListener("change",()=>{this.delay=n.value,Vu(fr,this.delay)}),this.inputSection=e(".sim-input > div"),this.trace=e(".sim-trace"),this.variables=e(".sim-vars"),this.output=e(".sim-output"),this.notice=e(".sim-notice")}collectOutput(){const e=this.engine.state.outputLines;for(;this.printedr.localeCompare(o));if(n.length===0)this.variables.innerHTML=`

${Ae(p("simulation_variables_placeholder"))}

`;else{const r=document.createElement("table");for(const o of n){const l=r.insertRow();l.insertCell().textContent=o;const u=e.variables.get(o),m=l.insertCell();u.kind==="grid"?m.append(Uh(u)):m.textContent=we(u)}this.variables.replaceChildren(r)}e.outputLines.length===0&&e.files.size===0?this.output.innerHTML=`

${Ae(p("simulation_output_placeholder"))}

`:(this.output.replaceChildren(...e.outputLines.map(r=>{const o=document.createElement("div");return o.textContent=r,o}),...qh(e.files)),this.output.scrollTop=this.output.scrollHeight)}updateInput(){const e=this.engine.state.inputRequest,t=this.inputSection;if(t.parentElement.classList.toggle("active",!!e),!e){t.innerHTML=`

${Ae(p("simulation_input_placeholder"))}

`;return}let n=t.querySelector("form");if(!n){n=document.createElement("form"),n.innerHTML=`

`;const l=n.querySelector("input");n.addEventListener("submit",u=>{u.preventDefault(),this.submitInput(l)}),t.replaceChildren(n),requestAnimationFrame(()=>l.focus())}const a=this.engine.state.outputLines;n.querySelector(".sim-prompt").textContent=e.prompt||(a[a.length-1]??"");const s=n.querySelector("input");s.inputMode=e.valueType==="string"||e.valueType==="boolean"?"text":"decimal";const r=this.engine.state.inputErrorNotice,o=n.querySelector(".sim-input-error");o.textContent=r?Kn(r):"",o.hidden=!r}}function Uh(i){const e=document.createElement("table");e.className="sim-grid";for(const t of i.value){const n=e.insertRow();for(const a of t){const s=n.insertCell();s.textContent=String(a),a===!0&&(s.className="sim-grid-true")}}return e}const f1=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZ"),Jn=360/f1.length,lD="http://www.w3.org/2000/svg";function Me(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function ft(i,e={},t){const n=document.createElementNS(lD,i);for(const[a,s]of Object.entries(e))n.setAttribute(a,String(s));return t!==void 0&&(n.textContent=t),n}function uD(i,e){const t=(e%26+26)%26;return Array.from(i).map(n=>{const a=n.charCodeAt(0);return a>=65&&a<=90?String.fromCharCode((a-65+t)%26+65):a>=97&&a<=122?String.fromCharCode((a-97+t)%26+97):n}).join("")}function Qu(i,e){const t=ft("g",{class:e}),n=f1.map((a,s)=>{const r=ft("g",{transform:`rotate(${s*Jn})`});return r.append(ft("text",{x:0,y:-i,"text-anchor":"middle","dominant-baseline":"central"},a)),t.append(r),r});return{group:t,cells:n}}function mD(i,e){let t=i,n=!1,a=-t*Jn;const s=Me("section",{class:"learn-game learn-caesar"});s.append(Me("div",{class:"learn-game-head"},Me("strong",{},p("web_learn_caesar_title")))),s.append(Me("p",{class:"learn-game-status"},p("web_learn_caesar_hint")));const r=ft("svg",{viewBox:"-200 -200 400 400",class:"learn-caesar-disc",role:"img"});r.append(ft("circle",{r:196,class:"outer-disc"})),r.append(ft("path",{d:cD(196,92,Jn/2),class:"window"}));const o=Qu(168,"outer-letters");r.append(o.group);for(let O=0;O{o.cells.forEach((L,E)=>L.classList.toggle("marked",E===O)),u.cells.forEach((L,E)=>L.classList.toggle("marked",O!==void 0&&E===(O+t)%26))},_=()=>{m.textContent=String(t),l.setAttribute("transform",`rotate(${a})`),r.setAttribute("aria-label",p("web_learn_caesar_key_fmt",t)),b.textContent=p(n?"web_learn_caesar_secret":"web_learn_caesar_plain"),w.textContent=p(n?"web_learn_caesar_plain":"web_learn_caesar_secret"),f.classList.toggle("active",!n),x.classList.toggle("active",n),S.textContent=uD(y.value,n?-t:t)||" ";const O=Array.from(y.value.toUpperCase()).reverse().find(E=>f1.includes(E));if(O===void 0)return k();const L=f1.indexOf(O);k(n?(L-t+26)%26:L)},T=O=>{t=(O%26+26)%26,a=-t*Jn,_()};c.addEventListener("click",()=>T(t-1)),d.addEventListener("click",()=>T(t+1)),f.addEventListener("click",()=>{var O;n&&(y.value=((O=S.textContent)==null?void 0:O.trim())??""),n=!1,_()}),x.addEventListener("click",()=>{var O;n||(y.value=((O=S.textContent)==null?void 0:O.trim())??""),n=!0,_()}),y.addEventListener("input",_),o.cells.forEach((O,L)=>O.addEventListener("click",()=>k(L)));let j;const C=O=>{const L=r.getBoundingClientRect();return Math.atan2(O.clientY-(L.top+L.height/2),O.clientX-(L.left+L.width/2))*180/Math.PI};l.addEventListener("pointerdown",O=>{const L=O;j=C(L)-a,l.classList.add("dragging"),r.setPointerCapture(L.pointerId),L.preventDefault()}),r.addEventListener("pointermove",O=>{if(j===void 0)return;a=C(O)-j,l.setAttribute("transform",`rotate(${a})`);const L=Math.round(-a/Jn);if((L%26+26)%26!==t){t=(L%26+26)%26;const E=a;_(),a=E,l.setAttribute("transform",`rotate(${a})`)}});const P=()=>{j!==void 0&&(j=void 0,l.classList.remove("dragging"),T(t))};return r.addEventListener("pointerup",P),r.addEventListener("pointercancel",P),_(),s}function cD(i,e,t){const n=(a,s)=>{const r=(s-90)*Math.PI/180;return`${(a*Math.cos(r)).toFixed(2)} ${(a*Math.sin(r)).toFixed(2)}`};return`M ${n(i,-t)} A ${i} ${i} 0 0 1 ${n(i,t)} L ${n(e,t)} A ${e} ${e} 0 0 0 ${n(e,-t)} Z`}const t0=i=>p(`web_visubot_part_${i}`),$h=new WeakMap;function Yh(i,e,t,n){const a=document.createElement("div");a.className="visubot-model";const s=document.createElement("div");s.className="visubot-stage";const r=document.createElement("div");r.className="visubot-part-label",r.hidden=!0,s.append(r);const o=(c,d,h)=>{r.hidden=!1,r.textContent=t0(c),r.style.left=`${Math.min(d+12,s.clientWidth-140)}px`,r.style.top=`${h+12}px`},l=document.createElement("p");l.className="visubot-model-hint hint",l.textContent=p("web_visubot_tap_part"),l.hidden=!!n,a.append(s,l);const u=q(async()=>{const{Robot3D:c}=await import("./robot3d-io7_npI9.js");return{Robot3D:c}},[],import.meta.url).then(({Robot3D:c})=>{const d=new c(s);d.showcase(),d.highlight(i),i.includes("leds")&&d.setLed([40,90,255]),d.focusOn([],e==="unten"||e==="bottom"?"":e,!1,1),d.focusOn(i,e,t);let h;return s.addEventListener("pointerdown",g=>h={x:g.clientX,y:g.clientY}),s.addEventListener("pointerup",g=>{if(!h||Math.hypot(g.clientX-h.x,g.clientY-h.y)>5)return;const f=d.partAt(g.clientX,g.clientY);if(!f)return;if(n)return n(f);d.highlight(f);const x=s.getBoundingClientRect();o(f,g.clientX-x.left,g.clientY-x.top)}),s.addEventListener("pointermove",g=>{if(g.pointerType!=="mouse"||n)return;const f=d.partAt(g.clientX,g.clientY);if(r.hidden=!f,!f)return;const x=s.getBoundingClientRect();o(f,g.clientX-x.left,g.clientY-x.top)}),s.addEventListener("pointerleave",()=>r.hidden=!0),d}).catch(c=>{console.error(c),s.textContent=p("web_visubot_no_3d")}),m={box:a,ready:u,focus:i,view:e};return $h.set(a,m),m}function dD(i,e,t=!1){return Yh(i,e,t).box}function hD(i){const e=i.querySelector(".visubot-model"),t=e&&$h.get(e);for(const n of i.querySelectorAll("[data-robot-part]")){const a=(n.dataset.robotPart??"").split(",").filter(Boolean);if(n.title=a.map(t0).join(", "),!t)continue;const s=()=>void t.ready.then(o=>o==null?void 0:o.highlight(a)),r=()=>void t.ready.then(o=>o==null?void 0:o.highlight(t.focus));n.addEventListener("mouseenter",s),n.addEventListener("focus",s),n.addEventListener("mouseleave",r),n.addEventListener("blur",r),n.addEventListener("click",()=>{t.ready.then(o=>{o==null||o.highlight(a),o==null||o.focusOn(a,t.view)}),t.box.scrollIntoView({block:"nearest",behavior:"smooth"})})}}function gD(i,e){let t=0;const n=document.createElement("div");n.className="visubot-quiz-question";const a=document.createElement("p");a.className="visubot-quiz-feedback",a.setAttribute("aria-live","polite");const s=()=>{n.innerHTML=kn(`**${t+1}/${i.length}** ${i[t].question}`)},r=Yh([],void 0,!1,l=>{if(!(t>=i.length)){if(r.ready.then(u=>u==null?void 0:u.highlight(l)),l!==i[t].part){a.className="visubot-quiz-feedback wrong",a.textContent=p("web_visubot_quiz_wrong_fmt",t0(l));return}t++,a.className="visubot-quiz-feedback right",t{u.forEach(y=>{window.clearTimeout(y),window.clearInterval(y)}),u=[]},c=()=>{a.textContent=`${p("web_game_round_fmt",o+1,r)} · ${p("web_game_score_fmt",l)}`},d=()=>{const y=V("button",{class:"primary"},o+1{o++,o{const y=i.rounds[o],w=i.seconds,S=V("div",{class:"learn-bomb-fuse"},V("span",{})),z=V("span",{class:"learn-bomb-time"}),k=V("div",{class:"learn-bomb","aria-live":"polite"},V("span",{class:"learn-bomb-icon","aria-hidden":"true"},"💣"),z,S),_=V("div",{class:"learn-game-feedback",role:"status"}),T=y.code.split(` -`).map((E,Q)=>{const $=V("button",{class:"ln",type:"button"},E||" ");return $.disabled=!E.trim(),$.addEventListener("click",()=>O(Q+1===y.wrongLine?"right":"wrong",$)),$}),j=V("div",{class:"learn-game-code learn-bomb-code mono",dir:"ltr"},...T),C=Date.now(),P=()=>{if(!t.isConnected&&Date.now()-C>1e3)return m();const E=Math.max(0,w-(Date.now()-C)/1e3);z.textContent=p("web_game_time_fmt",Math.ceil(E)),S.firstChild.style.width=`${E/w*100}%`,k.classList.toggle("hurry",E<=5),E<=0&&O("time")},O=(E,Q)=>{m(),T.forEach((Te,xe)=>{Te.disabled=!0,xe+1===y.wrongLine&&Te.classList.add("right")}),Q&&E==="wrong"&&Q.classList.add("wrong");const $=E==="right";$&&l++,c(),k.classList.add($?"defused":"boom"),k.firstChild.textContent=$?"✂️":"💥",_.className=`learn-game-feedback ${$?"right":"wrong"}`;const he=d();_.replaceChildren(V("p",{},p($?"web_game_defused":E==="time"?"web_game_boom_time":"web_game_boom_wrong")),Nn("div",{class:"learn-game-explain"},y.explanation),V("p",{class:"learn-bomb-fix"},`${p("web_game_fix")} `,V("code",{},y.fix.trim())),he),he.focus({preventScroll:!0})};s.replaceChildren(k,Nn("p",{class:"learn-game-question"},y.question),j,_),P();const L=window.setInterval(P,200);u.push(L)},g=()=>{const y=i.rounds[o],w=[];y.code.trim()&&w.push(Uu(y.code).element),w.push(Nn("p",{class:"learn-game-question"},y.question),V("p",{class:"learn-order-hint"},p("web_game_order_hint")));const S=V("div",{class:"learn-game-options learn-order"}),z=V("div",{class:"learn-game-feedback",role:"status"});let k=0;const _=fD(y.options.length).map(j=>{const C=V("span",{class:"learn-order-badge","aria-hidden":"true"}),P=V("span",{});P.innerHTML=Re(y.options[j].text);const O=V("button",{},C,P);return O.addEventListener("click",()=>{if(j!==k)return O.classList.add("wrong"),T(!1);O.classList.add("right"),C.textContent=String(++k),O.disabled=!0,k===y.options.length&&T(!0)}),S.append(O),{k:j,b:O,badge:C}}),T=j=>{for(const{k:P,b:O,badge:L}of[..._].sort((E,Q)=>E.k-Q.k))O.disabled=!0,L.textContent=String(P+1),S.append(O);j&&l++,c(),z.className=`learn-game-feedback ${j?"right":"wrong"}`;const C=d();z.replaceChildren(V("p",{},p(j?"web_game_right":"web_game_wrong_short")),Nn("div",{class:"learn-game-explain"},y.explanation),C),C.focus({preventScroll:!0})};s.replaceChildren(...w,S,z)},f=()=>{if(m(),i.kind==="bombe"||i.kind==="reihenfolge"){c(),i.kind==="bombe"?h():g();return}const y=i.rounds[o];c();const w=Uu(y.code),S=[];let z;i.kind==="zuhoerer"?(z=xD(Zh(y.code),w),S.push(V("div",{class:"learn-swing-row"},w.element,z.element)),y.clicks.length&&S.push(V("p",{class:"learn-swing-clicks"},`${p("web_game_clicks")} `,...y.clicks.flatMap((C,P)=>[...P?[" → "]:[],V("code",{},C)])))):y.code.trim()&&S.push(w.element),S.push(Nn("p",{class:"learn-game-question"},y.question));const k=V("div",{class:`learn-game-options ${i.kind==="layout"?"pictures":""}`}),_=V("div",{class:"learn-game-feedback",role:"status"}),T=y.options.map(C=>{const P=V("button",{});return i.kind==="layout"?P.append(yD(C.text)):C.text.includes(` -`)?P.append(bD(C.text)):P.innerHTML=Re(C.text),P.addEventListener("click",()=>j(C.right,P)),k.append(P),P}),j=(C,P)=>{T.forEach((L,E)=>{L.disabled=!0,y.options[E].right&&L.classList.add("right")}),C||P.classList.add("wrong"),C&&l++,c(),_.className=`learn-game-feedback ${C?"right":"wrong"}`;const O=d();_.replaceChildren(V("p",{},p(C?"web_game_right":"web_game_wrong_short")),Nn("div",{class:"learn-game-explain"},y.explanation)),_.append(O),z&&(u=z.replay(y.clicks,()=>O.before(V("p",{class:"learn-swing-try"},p("web_game_try"))))),O.focus({preventScroll:!0})};s.replaceChildren(...S,k,_)},x=()=>{m(),a.textContent="";const y=V("button",{class:"primary"},p("web_game_again"));y.addEventListener("click",()=>{o=l=0,f()}),s.replaceChildren(V("p",{class:"learn-game-result"},p("web_game_done_fmt",l,r)),V("p",{},p(l===r?"web_game_perfect":l>=r*.7?"web_game_good":"web_game_practice_short")),y)},b=V("button",{class:"primary"},p("web_game_start"));return b.addEventListener("click",f),s.append(Nn("p",{},i.intro),b),t}function fD(i){const e=[...Array(i).keys()];for(;e.every((t,n)=>t===n);)for(let t=i-1;t>0;t--){const n=Math.floor(Math.random()*(t+1));[e[t],e[n]]=[e[n],e[t]]}return e}function Uu(i){const e=i.split(` + `;const e=a=>this.element.querySelector(a);this.buttons={play:e("[data-sim=play]"),pause:e("[data-sim=pause]"),step:e("[data-sim=step]"),stop:e("[data-sim=stop]")},this.buttons.play.addEventListener("click",()=>this.play()),this.buttons.pause.addEventListener("click",()=>this.pause()),this.buttons.step.addEventListener("click",()=>this.step()),this.buttons.stop.addEventListener("click",()=>this.reset()),this.editButton=e(".sim-edit"),this.editButton.addEventListener("click",()=>this.onEdit());const t=e("[data-sim=highlight]");t.value=this.highlightMode,t.addEventListener("change",()=>{this.highlightMode=t.value,Vu(Hu,this.highlightMode)});const n=e("[data-sim=delay]");n.value=this.delay,n.addEventListener("change",()=>{this.delay=n.value,Vu(fr,this.delay)}),this.inputSection=e(".sim-input > div"),this.trace=e(".sim-trace"),this.variables=e(".sim-vars"),this.output=e(".sim-output"),this.notice=e(".sim-notice")}collectOutput(){const e=this.engine.state.outputLines;for(;this.printedr.localeCompare(o));if(n.length===0)this.variables.innerHTML=`

${Ae(p("simulation_variables_placeholder"))}

`;else{const r=document.createElement("table");for(const o of n){const l=r.insertRow();l.insertCell().textContent=o;const u=e.variables.get(o),m=l.insertCell();u.kind==="grid"?m.append(Uh(u)):m.textContent=we(u)}this.variables.replaceChildren(r)}e.outputLines.length===0&&e.files.size===0?this.output.innerHTML=`

${Ae(p("simulation_output_placeholder"))}

`:(this.output.replaceChildren(...e.outputLines.map(r=>{const o=document.createElement("div");return o.textContent=r,o}),...qh(e.files)),this.output.scrollTop=this.output.scrollHeight)}updateInput(){const e=this.engine.state.inputRequest,t=this.inputSection;if(t.parentElement.classList.toggle("active",!!e),!e){t.innerHTML=`

${Ae(p("simulation_input_placeholder"))}

`;return}let n=t.querySelector("form");if(!n){n=document.createElement("form"),n.innerHTML=`

`;const l=n.querySelector("input");n.addEventListener("submit",u=>{u.preventDefault(),this.submitInput(l)}),t.replaceChildren(n),requestAnimationFrame(()=>l.focus())}const a=this.engine.state.outputLines;n.querySelector(".sim-prompt").textContent=e.prompt||(a[a.length-1]??"");const s=n.querySelector("input");s.inputMode=e.valueType==="string"||e.valueType==="boolean"?"text":"decimal";const r=this.engine.state.inputErrorNotice,o=n.querySelector(".sim-input-error");o.textContent=r?Kn(r):"",o.hidden=!r}}function Uh(i){const e=document.createElement("table");e.className="sim-grid";for(const t of i.value){const n=e.insertRow();for(const a of t){const s=n.insertCell();s.textContent=String(a),a===!0&&(s.className="sim-grid-true")}}return e}const f1=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZ"),Jn=360/f1.length,lD="http://www.w3.org/2000/svg";function Me(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function ft(i,e={},t){const n=document.createElementNS(lD,i);for(const[a,s]of Object.entries(e))n.setAttribute(a,String(s));return t!==void 0&&(n.textContent=t),n}function uD(i,e){const t=(e%26+26)%26;return Array.from(i).map(n=>{const a=n.charCodeAt(0);return a>=65&&a<=90?String.fromCharCode((a-65+t)%26+65):a>=97&&a<=122?String.fromCharCode((a-97+t)%26+97):n}).join("")}function Qu(i,e){const t=ft("g",{class:e}),n=f1.map((a,s)=>{const r=ft("g",{transform:`rotate(${s*Jn})`});return r.append(ft("text",{x:0,y:-i,"text-anchor":"middle","dominant-baseline":"central"},a)),t.append(r),r});return{group:t,cells:n}}function mD(i,e){let t=i,n=!1,a=-t*Jn;const s=Me("section",{class:"learn-game learn-caesar"});s.append(Me("div",{class:"learn-game-head"},Me("strong",{},p("web_learn_caesar_title")))),s.append(Me("p",{class:"learn-game-status"},p("web_learn_caesar_hint")));const r=ft("svg",{viewBox:"-200 -200 400 400",class:"learn-caesar-disc",role:"img"});r.append(ft("circle",{r:196,class:"outer-disc"})),r.append(ft("path",{d:cD(196,92,Jn/2),class:"window"}));const o=Qu(168,"outer-letters");r.append(o.group);for(let O=0;O{o.cells.forEach((L,E)=>L.classList.toggle("marked",E===O)),u.cells.forEach((L,E)=>L.classList.toggle("marked",O!==void 0&&E===(O+t)%26))},_=()=>{m.textContent=String(t),l.setAttribute("transform",`rotate(${a})`),r.setAttribute("aria-label",p("web_learn_caesar_key_fmt",t)),b.textContent=p(n?"web_learn_caesar_secret":"web_learn_caesar_plain"),w.textContent=p(n?"web_learn_caesar_plain":"web_learn_caesar_secret"),f.classList.toggle("active",!n),x.classList.toggle("active",n),I.textContent=uD(y.value,n?-t:t)||" ";const O=Array.from(y.value.toUpperCase()).reverse().find(E=>f1.includes(E));if(O===void 0)return S();const L=f1.indexOf(O);S(n?(L-t+26)%26:L)},T=O=>{t=(O%26+26)%26,a=-t*Jn,_()};c.addEventListener("click",()=>T(t-1)),d.addEventListener("click",()=>T(t+1)),f.addEventListener("click",()=>{var O;n&&(y.value=((O=I.textContent)==null?void 0:O.trim())??""),n=!1,_()}),x.addEventListener("click",()=>{var O;n||(y.value=((O=I.textContent)==null?void 0:O.trim())??""),n=!0,_()}),y.addEventListener("input",_),o.cells.forEach((O,L)=>O.addEventListener("click",()=>S(L)));let j;const C=O=>{const L=r.getBoundingClientRect();return Math.atan2(O.clientY-(L.top+L.height/2),O.clientX-(L.left+L.width/2))*180/Math.PI};l.addEventListener("pointerdown",O=>{const L=O;j=C(L)-a,l.classList.add("dragging"),r.setPointerCapture(L.pointerId),L.preventDefault()}),r.addEventListener("pointermove",O=>{if(j===void 0)return;a=C(O)-j,l.setAttribute("transform",`rotate(${a})`);const L=Math.round(-a/Jn);if((L%26+26)%26!==t){t=(L%26+26)%26;const E=a;_(),a=E,l.setAttribute("transform",`rotate(${a})`)}});const P=()=>{j!==void 0&&(j=void 0,l.classList.remove("dragging"),T(t))};return r.addEventListener("pointerup",P),r.addEventListener("pointercancel",P),_(),s}function cD(i,e,t){const n=(a,s)=>{const r=(s-90)*Math.PI/180;return`${(a*Math.cos(r)).toFixed(2)} ${(a*Math.sin(r)).toFixed(2)}`};return`M ${n(i,-t)} A ${i} ${i} 0 0 1 ${n(i,t)} L ${n(e,t)} A ${e} ${e} 0 0 0 ${n(e,-t)} Z`}const t0=i=>p(`web_visubot_part_${i}`),$h=new WeakMap;function Yh(i,e,t,n){const a=document.createElement("div");a.className="visubot-model";const s=document.createElement("div");s.className="visubot-stage";const r=document.createElement("div");r.className="visubot-part-label",r.hidden=!0,s.append(r);const o=(c,d,h)=>{r.hidden=!1,r.textContent=t0(c),r.style.left=`${Math.min(d+12,s.clientWidth-140)}px`,r.style.top=`${h+12}px`},l=document.createElement("p");l.className="visubot-model-hint hint",l.textContent=p("web_visubot_tap_part"),l.hidden=!!n,a.append(s,l);const u=q(async()=>{const{Robot3D:c}=await import("./robot3d-ZgnmvG6e.js");return{Robot3D:c}},[],import.meta.url).then(({Robot3D:c})=>{const d=new c(s);d.showcase(),d.highlight(i),i.includes("leds")&&d.setLed([40,90,255]),d.focusOn([],e==="unten"||e==="bottom"?"":e,!1,1),d.focusOn(i,e,t);let h;return s.addEventListener("pointerdown",g=>h={x:g.clientX,y:g.clientY}),s.addEventListener("pointerup",g=>{if(!h||Math.hypot(g.clientX-h.x,g.clientY-h.y)>5)return;const f=d.partAt(g.clientX,g.clientY);if(!f)return;if(n)return n(f);d.highlight(f);const x=s.getBoundingClientRect();o(f,g.clientX-x.left,g.clientY-x.top)}),s.addEventListener("pointermove",g=>{if(g.pointerType!=="mouse"||n)return;const f=d.partAt(g.clientX,g.clientY);if(r.hidden=!f,!f)return;const x=s.getBoundingClientRect();o(f,g.clientX-x.left,g.clientY-x.top)}),s.addEventListener("pointerleave",()=>r.hidden=!0),d}).catch(c=>{console.error(c),s.textContent=p("web_visubot_no_3d")}),m={box:a,ready:u,focus:i,view:e};return $h.set(a,m),m}function dD(i,e,t=!1){return Yh(i,e,t).box}function hD(i){const e=i.querySelector(".visubot-model"),t=e&&$h.get(e);for(const n of i.querySelectorAll("[data-robot-part]")){const a=(n.dataset.robotPart??"").split(",").filter(Boolean);if(n.title=a.map(t0).join(", "),!t)continue;const s=()=>void t.ready.then(o=>o==null?void 0:o.highlight(a)),r=()=>void t.ready.then(o=>o==null?void 0:o.highlight(t.focus));n.addEventListener("mouseenter",s),n.addEventListener("focus",s),n.addEventListener("mouseleave",r),n.addEventListener("blur",r),n.addEventListener("click",()=>{t.ready.then(o=>{o==null||o.highlight(a),o==null||o.focusOn(a,t.view)}),t.box.scrollIntoView({block:"nearest",behavior:"smooth"})})}}function gD(i,e){let t=0;const n=document.createElement("div");n.className="visubot-quiz-question";const a=document.createElement("p");a.className="visubot-quiz-feedback",a.setAttribute("aria-live","polite");const s=()=>{n.innerHTML=kn(`**${t+1}/${i.length}** ${i[t].question}`)},r=Yh([],void 0,!1,l=>{if(!(t>=i.length)){if(r.ready.then(u=>u==null?void 0:u.highlight(l)),l!==i[t].part){a.className="visubot-quiz-feedback wrong",a.textContent=p("web_visubot_quiz_wrong_fmt",t0(l));return}t++,a.className="visubot-quiz-feedback right",t{u.forEach(y=>{window.clearTimeout(y),window.clearInterval(y)}),u=[]},c=()=>{a.textContent=`${p("web_game_round_fmt",o+1,r)} · ${p("web_game_score_fmt",l)}`},d=()=>{const y=V("button",{class:"primary"},o+1{o++,o{const y=i.rounds[o],w=i.seconds,I=V("div",{class:"learn-bomb-fuse"},V("span",{})),z=V("span",{class:"learn-bomb-time"}),S=V("div",{class:"learn-bomb","aria-live":"polite"},V("span",{class:"learn-bomb-icon","aria-hidden":"true"},"💣"),z,I),_=V("div",{class:"learn-game-feedback",role:"status"}),T=y.code.split(` +`).map((E,Q)=>{const $=V("button",{class:"ln",type:"button"},E||" ");return $.disabled=!E.trim(),$.addEventListener("click",()=>O(Q+1===y.wrongLine?"right":"wrong",$)),$}),j=V("div",{class:"learn-game-code learn-bomb-code mono",dir:"ltr"},...T),C=Date.now(),P=()=>{if(!t.isConnected&&Date.now()-C>1e3)return m();const E=Math.max(0,w-(Date.now()-C)/1e3);z.textContent=p("web_game_time_fmt",Math.ceil(E)),I.firstChild.style.width=`${E/w*100}%`,S.classList.toggle("hurry",E<=5),E<=0&&O("time")},O=(E,Q)=>{m(),T.forEach((Te,xe)=>{Te.disabled=!0,xe+1===y.wrongLine&&Te.classList.add("right")}),Q&&E==="wrong"&&Q.classList.add("wrong");const $=E==="right";$&&l++,c(),S.classList.add($?"defused":"boom"),S.firstChild.textContent=$?"✂️":"💥",_.className=`learn-game-feedback ${$?"right":"wrong"}`;const he=d();_.replaceChildren(V("p",{},p($?"web_game_defused":E==="time"?"web_game_boom_time":"web_game_boom_wrong")),Nn("div",{class:"learn-game-explain"},y.explanation),V("p",{class:"learn-bomb-fix"},`${p("web_game_fix")} `,V("code",{},y.fix.trim())),he),he.focus({preventScroll:!0})};s.replaceChildren(S,Nn("p",{class:"learn-game-question"},y.question),j,_),P();const L=window.setInterval(P,200);u.push(L)},g=()=>{const y=i.rounds[o],w=[];y.code.trim()&&w.push(Uu(y.code).element),w.push(Nn("p",{class:"learn-game-question"},y.question),V("p",{class:"learn-order-hint"},p("web_game_order_hint")));const I=V("div",{class:"learn-game-options learn-order"}),z=V("div",{class:"learn-game-feedback",role:"status"});let S=0;const _=fD(y.options.length).map(j=>{const C=V("span",{class:"learn-order-badge","aria-hidden":"true"}),P=V("span",{});P.innerHTML=Re(y.options[j].text);const O=V("button",{},C,P);return O.addEventListener("click",()=>{if(j!==S)return O.classList.add("wrong"),T(!1);O.classList.add("right"),C.textContent=String(++S),O.disabled=!0,S===y.options.length&&T(!0)}),I.append(O),{k:j,b:O,badge:C}}),T=j=>{for(const{k:P,b:O,badge:L}of[..._].sort((E,Q)=>E.k-Q.k))O.disabled=!0,L.textContent=String(P+1),I.append(O);j&&l++,c(),z.className=`learn-game-feedback ${j?"right":"wrong"}`;const C=d();z.replaceChildren(V("p",{},p(j?"web_game_right":"web_game_wrong_short")),Nn("div",{class:"learn-game-explain"},y.explanation),C),C.focus({preventScroll:!0})};s.replaceChildren(...w,I,z)},f=()=>{if(m(),i.kind==="bombe"||i.kind==="reihenfolge"){c(),i.kind==="bombe"?h():g();return}const y=i.rounds[o];c();const w=Uu(y.code),I=[];let z;i.kind==="zuhoerer"?(z=xD(Zh(y.code),w),I.push(V("div",{class:"learn-swing-row"},w.element,z.element)),y.clicks.length&&I.push(V("p",{class:"learn-swing-clicks"},`${p("web_game_clicks")} `,...y.clicks.flatMap((C,P)=>[...P?[" → "]:[],V("code",{},C)])))):y.code.trim()&&I.push(w.element),I.push(Nn("p",{class:"learn-game-question"},y.question));const S=V("div",{class:`learn-game-options ${i.kind==="layout"?"pictures":""}`}),_=V("div",{class:"learn-game-feedback",role:"status"}),T=y.options.map(C=>{const P=V("button",{});return i.kind==="layout"?P.append(yD(C.text)):C.text.includes(` +`)?P.append(bD(C.text)):P.innerHTML=Re(C.text),P.addEventListener("click",()=>j(C.right,P)),S.append(P),P}),j=(C,P)=>{T.forEach((L,E)=>{L.disabled=!0,y.options[E].right&&L.classList.add("right")}),C||P.classList.add("wrong"),C&&l++,c(),_.className=`learn-game-feedback ${C?"right":"wrong"}`;const O=d();_.replaceChildren(V("p",{},p(C?"web_game_right":"web_game_wrong_short")),Nn("div",{class:"learn-game-explain"},y.explanation)),_.append(O),z&&(u=z.replay(y.clicks,()=>O.before(V("p",{class:"learn-swing-try"},p("web_game_try"))))),O.focus({preventScroll:!0})};s.replaceChildren(...I,S,_)},x=()=>{m(),a.textContent="";const y=V("button",{class:"primary"},p("web_game_again"));y.addEventListener("click",()=>{o=l=0,f()}),s.replaceChildren(V("p",{class:"learn-game-result"},p("web_game_done_fmt",l,r)),V("p",{},p(l===r?"web_game_perfect":l>=r*.7?"web_game_good":"web_game_practice_short")),y)},b=V("button",{class:"primary"},p("web_game_start"));return b.addEventListener("click",f),s.append(Nn("p",{},i.intro),b),t}function fD(i){const e=[...Array(i).keys()];for(;e.every((t,n)=>t===n);)for(let t=i-1;t>0;t--){const n=Math.floor(Math.random()*(t+1));[e[t],e[n]]=[e[n],e[t]]}return e}function Uu(i){const e=i.split(` `).map(n=>V("div",{class:"ln"},n||" "));return{element:V("pre",{class:"learn-game-code mono",dir:"ltr"},...e),highlight(n,a){e.forEach((s,r)=>s.classList.toggle("hit",n!==void 0&&r>=n&&r<=(a??n)))}}}function xD(i,e){const t=Mh(i),n=V("div",{class:"learn-swing-window",dir:"ltr"});n.append(V("div",{class:"learn-swing-title"},i.title||" "));const a=V("div",{class:"learn-swing-body"}),s=new Map;for(const c of i.labels){const d=V("div",{class:"learn-swing-label"},t.texts[c.name]);s.set(c.name,d),a.append(d)}const r=i.buttons.map(c=>{const d=V("button",{class:"learn-swing-button",disabled:""},t.texts[c.name]);return s.set(c.name,d),a.append(d),d}),o=V("p",{class:"learn-swing-event",role:"status"}),l=V("pre",{class:"learn-swing-console mono",hidden:""});n.append(a,o,l);const u=c=>{var h,g;const d=s.get(c.button);d.classList.add("pressed"),window.setTimeout(()=>d.classList.remove("pressed"),350),e.highlight((h=c.listener)==null?void 0:h.from,(g=c.listener)==null?void 0:g.to),o.textContent=c.listener?p("web_game_event_fmt",d.textContent??""):p("web_game_nobody"),o.className=`learn-swing-event ${c.listener?"heard":"nobody"}`;for(const[f,x]of Object.entries(c.texts)){const b=s.get(f);b&&b.textContent!==x&&(b.textContent=x,b.classList.remove("changed"),b.offsetWidth,b.classList.add("changed"))}c.console.length&&(l.hidden=!1,l.textContent+=c.console.map(f=>`${f} `).join(""))},m=c=>u(Lh(i,t,c));return{element:n,replay(c,d){const h=c.map((g,f)=>window.setTimeout(()=>m(g),(f+.3)*qu));return h.push(window.setTimeout(()=>{i.buttons.forEach((g,f)=>{r[f].disabled=!1,r[f].addEventListener("click",()=>u(Wh(i,t,g.name)))}),d()},(c.length+.3)*qu)),h}}}function bD(i){return V("pre",{class:"learn-game-file mono",dir:"ltr"},i)}function yD(i){const e=Dh(i),t=V("div",{class:"learn-layout-window",dir:"ltr"},V("div",{class:"learn-layout-title"})),n=V("div",{class:`learn-layout-body ${e.kind}`}),a=(s,r)=>V("span",{class:"learn-layout-cell",...r?{style:`grid-area:${r}`}:{}},s);if(e.kind==="border")for(const[s,r]of Object.entries(e.areas))n.append(a(r,s));else if(e.kind==="grid"){const s=Math.max(...e.rows.map(r=>r.length));n.style.gridTemplateColumns=`repeat(${s}, 1fr)`;for(const r of e.rows)for(let o=0;oa(r))));return t.append(n),t}function R(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function vn(i,e,t){const n=R(i,e);return n.innerHTML=Re(t),n}function $u(i){return R("pre",{class:"learn-game-code mono",dir:"ltr"},...i.split(` -`).map(e=>R("div",{class:"ln"},e||" ")))}function vD(i,e){const t=R("section",{class:"learn-game learn-rescue"}),n=R("div",{class:"learn-game-head"});n.append(R("img",{src:e,alt:"",width:"40",height:"40"}),R("strong",{},i.title));const a=i.stations.length,s=i.stations.map(()=>R("span",{class:"learn-rescue-dot"})),r=R("img",{class:"learn-rescue-ludwig",src:e,alt:"",width:"32",height:"32"}),o=R("span",{class:"learn-rescue-tower","aria-hidden":"true"},"🏰",R("span",{class:"learn-rescue-zora"},"🐐"),R("span",{class:"learn-rescue-fox"},"🦊")),l=R("span",{class:"learn-rescue-free"},"🐐"),u=R("div",{class:"learn-rescue-path","aria-hidden":"true"},r,...s,o),m=R("p",{class:"learn-game-status"}),c=R("div",{class:"learn-game-stage"}),d=wD(i);t.append(n,u,m,c);let h=0;const g=()=>{s.forEach((z,k)=>z.classList.toggle("done",k{const z=[...i.alphabet].map((k,_)=>R("span",{class:"learn-rescue-letter"},R("b",{},k),R("small",{},String(_))));return{element:R("div",{class:"learn-rescue-alphabet mono",dir:"ltr"},...z),cells:z}},x=z=>{const k=i.stations[z];m.textContent=p("web_learn_rescue_station_fmt",z+1,a,k.name);const _=f(),T=R("input",{type:"text",inputmode:"numeric",autocomplete:"off",class:"learn-rescue-number mono","aria-label":p("web_learn_rescue_number")}),j=R("button",{class:"primary"},p("web_learn_check")),C=R("div",{class:"learn-game-feedback",role:"status"}),P=()=>{const O=T.value.trim();if(!/^-?\d+$/.test(O)){C.className="learn-game-feedback wrong",C.replaceChildren(R("p",{},p("web_learn_rescue_not_number")));return}if(Number(O)!==k.answer){C.className="learn-game-feedback wrong",C.replaceChildren(R("p",{},p("web_learn_rescue_wrong")),...k.hint?[vn("div",{class:"learn-game-explain"},`**${p("web_learn_hint")}:** ${k.hint}`)]:[]),T.select();return}T.disabled=j.disabled=!0;const L=i.alphabet.charAt(k.answer);_.cells[k.answer].classList.add("hit"),d.give(k.row,k.col,L),h++,g();const E=z+1===a,Q=R("button",{class:"primary"},p(E?"web_learn_rescue_to_crossword":"web_game_next"));Q.addEventListener("click",()=>E?b():x(z+1)),C.className="learn-game-feedback right",C.replaceChildren(R("p",{},p("web_game_right")),R("p",{class:"learn-rescue-charat mono",dir:"ltr"},`alphabet.charAt(${k.answer})`,R("span",{"aria-hidden":"true"}," → "),R("code",{},`'${L}'`)),vn("div",{class:"learn-game-explain"},k.explanation),R("p",{class:"learn-rescue-moved"},p("web_learn_rescue_letter_moved")),Q),Q.focus({preventScroll:!0})};j.addEventListener("click",P),T.addEventListener("keydown",O=>{O.key==="Enter"&&P()}),c.replaceChildren($u(k.code),vn("p",{class:"learn-game-question"},k.question),R("div",{class:"learn-rescue-answer"},T,j),C,R("p",{class:"learn-rescue-label"},p("web_learn_rescue_alphabet")),$u(`String alphabet = "${i.alphabet}";`),_.element,d.element),T.focus({preventScroll:!0})},b=()=>{m.textContent=p("web_learn_rescue_crossword");const z=R("div",{class:"learn-game-feedback",role:"status"}),k=R("button",{class:"primary"},p("web_learn_check"));k.addEventListener("click",()=>{if(!d.check()){z.className="learn-game-feedback wrong",z.replaceChildren(R("p",{},p("web_learn_rescue_cw_wrong")));return}k.disabled=!0,d.lock();const _=R("button",{class:"primary"},p("web_learn_rescue_to_gate"));_.addEventListener("click",y),z.className="learn-game-feedback right",z.replaceChildren(R("p",{},p("web_learn_rescue_cw_done")),_),_.focus({preventScroll:!0})}),d.unlock(),c.replaceChildren(vn("p",{},i.crosswordText),d.element,k,z),d.focusFirst()},y=()=>{m.textContent=p("web_learn_rescue_gate");const z=R("input",{type:"text",autocomplete:"off",autocapitalize:"off",spellcheck:"false",class:"learn-rescue-word mono",size:String(i.keyword.length+2),"aria-label":p("web_learn_rescue_word")}),k=i.gateCode.split(` -`).map(C=>{const P=C.indexOf(cs);return P<0?R("div",{class:"ln"},C||" "):R("div",{class:"ln"},C.slice(0,P),z,C.slice(P+cs.length))}),_=R("button",{class:"primary"},p("web_learn_rescue_open")),T=R("div",{class:"learn-game-feedback",role:"status"}),j=()=>{const C=z.value.trim();if(C!==i.keyword){const O=C.toUpperCase()===i.keyword.toUpperCase();T.className="learn-game-feedback wrong",T.replaceChildren(R("p",{},p(O?"web_learn_rescue_gate_case":"web_learn_rescue_gate_wrong"))),z.select();return}z.disabled=_.disabled=!0,t.classList.add("freed"),r.after(l),m.textContent="";const P=R("button",{},p("web_game_again"));P.addEventListener("click",w),T.className="learn-game-feedback right",T.replaceChildren(R("p",{},p("web_learn_rescue_freed")),vn("div",{class:"learn-game-explain"},i.end),P)};_.addEventListener("click",j),z.addEventListener("keydown",C=>{C.key==="Enter"&&j()}),c.replaceChildren(vn("p",{},i.gateText),R("div",{class:"learn-game-code mono learn-rescue-gate",dir:"ltr"},...k),_,T),z.focus({preventScroll:!0})},w=()=>{h=0,t.classList.remove("freed"),l.remove(),d.reset(),g(),x(0)},S=R("button",{class:"primary"},p("web_game_start"));return S.addEventListener("click",w),c.append(vn("p",{},i.intro),S),t}function wD(i){const e=CB(i),t=new Map(i.solution.map((g,f)=>[`${g.row} ${g.col}`,f])),n=new Map;for(const g of i.words)n.set(`${g.row} ${g.col}`,g.number);const a=new Map,s=R("div",{class:"learn-cw-grid",dir:"ltr"});s.style.gridTemplateColumns=`repeat(${i.cols}, var(--cw-cell))`;let r=!0;const o=(g,f)=>i.words.filter(x=>x.across?x.row===g&&f>=x.col&&f=x.row&&g{var y;const b=r?`${g} ${f+x}`:`${g+x} ${f}`;(y=a.get(b))==null||y.focus()};e.forEach((g,f)=>g.forEach((x,b)=>{if(!x)return s.append(R("span",{class:"learn-cw-empty"}));const y=`${f} ${b}`,w=R("input",{type:"text",maxlength:"1",autocomplete:"off",autocapitalize:"characters",spellcheck:"false","aria-label":p("web_learn_rescue_cell_fmt",f+1,b+1)});w.disabled=!0,w.addEventListener("focus",()=>{const _=o(f,b);_.some(T=>T.across===r)||(r=_[0].across),w.select()}),w.addEventListener("input",()=>{w.value=w.value.slice(-1).toUpperCase(),w.classList.remove("wrong"),c(),w.value&&l(f,b,1)}),w.addEventListener("keydown",_=>{if(_.key==="Backspace"&&!w.value)l(f,b,-1);else if(_.key==="ArrowRight"||_.key==="ArrowLeft")r=!0,l(f,b,_.key==="ArrowRight"?1:-1);else if(_.key==="ArrowDown"||_.key==="ArrowUp")r=!1,l(f,b,_.key==="ArrowDown"?1:-1);else return;_.preventDefault()}),a.set(y,w);const S=t.get(y),z=R("span",{class:`learn-cw-cell${S!==void 0?" key":""}`}),k=n.get(y);k&&z.append(R("small",{class:"learn-cw-number"},String(k))),S!==void 0&&z.append(R("small",{class:"learn-cw-keyindex"},String(S+1))),z.append(w),s.append(z)}));const u=g=>{const f=R("ol",{class:"learn-cw-clues"});for(const x of i.words.filter(b=>b.across===g).sort((b,y)=>b.number-y.number)){const b=vn("li",{value:String(x.number)},`${x.clue} (${x.word.length})`);b.addEventListener("click",()=>{var y;r=x.across,(y=a.get(`${x.row} ${x.col}`))==null||y.focus()}),f.append(b)}return R("div",{},R("strong",{},p(g?"web_learn_rescue_across":"web_learn_rescue_down")),f)},m=i.solution.map(()=>R("span",{class:"learn-cw-keybox"})),c=()=>i.solution.forEach((g,f)=>m[f].textContent=a.get(`${g.row} ${g.col}`).value||" "),d=R("div",{class:"learn-cw"},R("div",{class:"learn-cw-board"},s,R("p",{class:"learn-cw-keyword"},`${p("web_learn_rescue_keyword")} `,R("span",{class:"mono",dir:"ltr"},...m))),R("div",{class:"learn-cw-cluebox"},u(!0),u(!1))),h=new Set;return{element:d,give(g,f,x){const b=a.get(`${g} ${f}`);b.value=x,b.parentElement.classList.add("given","arrived"),h.add(`${g} ${f}`),c()},unlock(){for(const[g,f]of a)f.disabled=h.has(g)},lock(){for(const g of a.values())g.disabled=!0},focusFirst(){var g;(g=[...a].find(([f])=>!h.has(f)))==null||g[1].focus({preventScroll:!0})},check(){let g=!0;for(const[f,x]of a){const[b,y]=f.split(" ").map(Number),w=x.value!==e[b][y];x.classList.toggle("wrong",w),w&&(g=!1)}return g},reset(){h.clear();for(const g of a.values())g.value="",g.disabled=!0,g.classList.remove("wrong"),g.parentElement.classList.remove("given","arrived");c()}}}function zt(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function Yu(i,e,t){const n=zt(i,e);return n.innerHTML=Re(t),n}function zD(i){const e=zt("section",{class:"learn-cloze"});e.append(zt("strong",{class:"learn-cloze-title"},i.title)),i.task&&e.append(Yu("p",{},i.task)),e.append(zt("p",{class:"learn-cloze-hint"},p("web_learn_cloze_hint")));const t=[];for(const m of i.blocks){const c=zt("pre",{class:"learn-cloze-code mono",dir:"ltr"});for(const d of m){const h=zt("div",{class:"ln"});for(const g of d){if(typeof g=="string"){h.append(g);continue}const f=zt("input",{type:"text",class:"learn-cloze-gap mono",autocomplete:"off",autocapitalize:"off",autocorrect:"off",spellcheck:"false",enterkeyhint:"done","aria-label":`${t.length+1}`});f.style.width=`${Math.max(3,...g.answers.map(x=>x.length))+1}ch`,t.push({input:f,answers:g.answers}),h.append(f)}d.length||h.append(` -`),c.append(h)}e.append(c)}const n=zt("p",{class:"learn-cloze-status",role:"status"}),a=i.explanation?Yu("p",{class:"learn-explanation"},i.explanation):void 0;a&&(a.hidden=!0);const s=zt("button",{class:"learn-cloze-check"},p("web_learn_check")),r=zt("button",{},p("web_learn_cloze_solution")),o=zt("button",{},p("web_learn_cloze_again"));r.hidden=!0,o.hidden=!0;const l=zt("div",{class:"learn-cloze-actions"},s,r,o);e.append(l,n),a&&e.append(a);const u=()=>{var d;let m=0;for(const h of t){const g=WB(h.answers,h.input.value);h.input.classList.toggle("right",g),h.input.classList.toggle("wrong",!g),g&&m++}const c=m===t.length;n.textContent=c?p("web_learn_cloze_all_right"):p("web_learn_cloze_score_fmt",m,t.length),n.className=`learn-cloze-status ${c?"right":"wrong"}`,a&&(a.hidden=!c),c?(t.forEach(h=>h.input.disabled=!0),s.hidden=!0,o.hidden=!1):(r.hidden=!1,(d=t.find(h=>h.input.classList.contains("wrong")))==null||d.input.focus())};return s.addEventListener("click",u),r.addEventListener("click",()=>{for(const m of t)m.input.value=m.answers[0],m.input.classList.remove("right","wrong"),m.input.classList.add("shown"),m.input.disabled=!0;n.textContent="",n.className="learn-cloze-status",a&&(a.hidden=!1),s.hidden=!0,r.hidden=!0,o.hidden=!1}),o.addEventListener("click",()=>{var m;for(const c of t)c.input.value="",c.input.classList.remove("right","wrong","shown"),c.input.disabled=!1;n.textContent="",n.className="learn-cloze-status",a&&(a.hidden=!0),s.hidden=!1,r.hidden=!0,o.hidden=!0,(m=t[0])==null||m.input.focus()}),t.forEach((m,c)=>{m.input.addEventListener("input",()=>m.input.classList.remove("right","wrong")),m.input.addEventListener("keydown",d=>{d.key==="Enter"&&(d.preventDefault(),c[...o.querySelectorAll("strong")])){const o=ju(e),l=o==null?void 0:o.exec(r.textContent??""),u=l?Cu(e,l[0]):void 0;u&&n.add(u)}let a=e.filter(r=>!n.has(r));for(const r of t){const o=document.createTreeWalker(r,NodeFilter.SHOW_TEXT),l=[];for(;o.nextNode();){const u=o.currentNode;(s=u.parentElement)!=null&&s.closest(ID)||l.push(u)}for(let u of l)for(;;){const m=ju(a),c=m==null?void 0:m.exec(u.data),d=c?Cu(a,c[0]):void 0;if(!c||!d)break;const h=u.splitText(c.index);u=h.splitText(c[0].length);const g=document.createElement("span");g.className="term",g.tabIndex=0,g.setAttribute("role","button"),g.setAttribute("aria-describedby","term-tip"),g.dataset.term=d.term,g.dataset.text=d.text,h.replaceWith(g),g.append(h),a=a.filter(f=>f!==d)}}}function kD(i){const e=document.createElement("div");e.id="term-tip",e.className="term-tip",e.setAttribute("role","tooltip"),e.hidden=!0,document.body.append(e);let t,n=!1;const a=o=>{t=o,e.replaceChildren();const l=document.createElement("strong");l.textContent=o.dataset.term??"",e.append(l,document.createTextNode(" "+(o.dataset.text??""))),e.hidden=!1;const u=o.getBoundingClientRect(),m=e.offsetWidth,c=e.offsetHeight,d=Math.max(8,Math.min(u.left,window.innerWidth-m-8)),h=u.bottom+6;e.style.left=`${d}px`,e.style.top=`${h+c>window.innerHeight-8?Math.max(8,u.top-c-6):h}px`,o.setAttribute("aria-expanded","true")},s=()=>{t==null||t.setAttribute("aria-expanded","false"),t=void 0,n=!1,e.hidden=!0},r=o=>{var l,u;return((u=(l=o.target)==null?void 0:l.closest)==null?void 0:u.call(l,".term"))??void 0};return i.addEventListener("pointerover",o=>{const l=r(o);l&&o.pointerType==="mouse"&&!n&&a(l)}),i.addEventListener("pointerout",o=>{r(o)&&o.pointerType==="mouse"&&!n&&s()}),i.addEventListener("click",o=>{const l=r(o);if(l){if(n&&t===l)return s();a(l),n=!0}}),i.addEventListener("focusin",o=>{const l=r(o);l&&!n&&a(l)}),i.addEventListener("focusout",o=>{r(o)&&!n&&s()}),i.addEventListener("keydown",o=>{const l=r(o);o.key==="Escape"&&t?s():l&&(o.key==="Enter"||o.key===" ")&&(o.preventDefault(),l.click())}),i.addEventListener("scroll",s,!0),document.addEventListener("pointerdown",o=>{t&&!r(o)&&!e.contains(o.target)&&s()}),{hide:s}}const Xh={leiste:".topbar > .toolbar",werkzeuge:".diagram-tools",dateien:".files-rail, .files",codelive:".live-rail, .livecode",ausfuehren:"[data-run=play]",konsole:".livecode .console",einzelschritt:"[data-run=step]",elemente:".palette",struktogramm:".canvas",objektinspektor:".inspector",reiter:".tabs",titel:".caption",neu:"[data-action=new]",oeffnen:"[data-action=open]",speichern:"[data-action=save]",exportieren:"[data-action=export]",rueckgaengig:"[data-action=undo]",textgroesse:"[data-action=settings]",einstellungen:"[data-action=settings]",lernen:".learn .learn-hide",code:"[data-action=code]",simulation:"[data-action=simulate]"},SD=new Set(["werkzeuge","elemente","struktogramm","objektinspektor","reiter","titel","rueckgaengig","exportieren","code","simulation"]),_D=new Set(["ausfuehren","konsole","einzelschritt"]);function n0(i,e){return[...i.querySelectorAll(".ui-pointer")].some(t=>e.has(t.dataset.target??""))}function TD(i){return n0(i,new Set(["dateien"]))}function OD(i){return n0(i,SD)}function AD(i){return n0(i,_D)}function Ku(i){for(const e of i.querySelectorAll('a[href^="#zeige-"]')){const t=e.getAttribute("href").slice(7);if(!(t in Xh))continue;const n=document.createElement("span");n.className="ui-pointer",n.tabIndex=0,n.setAttribute("role","button"),n.dataset.target=t,n.append(...e.childNodes),e.replaceWith(n)}}function PD(i){let e,t;const n=()=>{e==null||e.classList.remove("ui-spot"),e=void 0,window.clearTimeout(t)},a=(r,o)=>{n();const l=[...document.querySelectorAll(Xh[r.dataset.target??""]??":not(*)")].find(u=>u.getClientRects().length>0);l&&(e=l,l.classList.add("ui-spot"),o&&(t=window.setTimeout(n,2500)))},s=r=>{var o,l;return((l=(o=r.target)==null?void 0:o.closest)==null?void 0:l.call(o,".ui-pointer"))??void 0};return i.addEventListener("pointerover",r=>{const o=s(r);o&&r.pointerType==="mouse"&&a(o,!1)}),i.addEventListener("pointerout",r=>{s(r)&&r.pointerType==="mouse"&&n()}),i.addEventListener("click",r=>{const o=s(r);o&&a(o,!0)}),i.addEventListener("focusin",r=>{const o=s(r);o&&a(o,!1)}),i.addEventListener("focusout",r=>{s(r)&&n()}),i.addEventListener("keydown",r=>{const o=s(r);o&&(r.key==="Enter"||r.key===" ")&&(r.preventDefault(),a(o,!0))}),{off:n}}const kt='',jD=()=>{const i=[];for(const e of Ot){const t=i.at(-1);t&&t.name===e.section?t.lessons.push(e):i.push({name:e.section,lessons:[e]})}return i};function A(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function gt(i,e,t){const n=A(i,e);return n.innerHTML=t,n}const CD=i=>p(`element_${I[i]}`);function BD(i){return{caption:i,elements:[ze(I.anweisung,{textLines:["ø"]})]}}function em(i){const e=i.start?X1(i.start):void 0;return e?{...e,caption:e.caption||i.title}:BD(i.title)}class DD{constructor(e){v(this,"element");v(this,"tab","lessons");v(this,"returnTo");v(this,"lessonId");v(this,"taskId");v(this,"body");v(this,"tips");v(this,"pointers");this.host=e,this.element=A("aside",{class:"learn","aria-label":p("web_learn_title")}),this.tips=kD(this.element),this.pointers=PD(this.element),hs(Mu(i1())),this.restore()}restore(){const e=ge.view();e&&(this.tab=["lessons","tasks","reference"].find(t=>t===e.tab)??"lessons",this.lessonId=Ot.some(t=>t.id===e.lesson)?e.lesson:void 0,this.taskId=Tn.some(t=>t.id===e.task)?e.task:void 0),this.render()}render(){this.tips.hide(),this.pointers.off(),hs(Mu(i1()));const e=A("div",{class:"segmented learn-tabs",role:"tablist"});for(const[a,s]of[["lessons",p("web_learn_lessons")],["tasks",p("web_learn_tasks")],["reference",p("web_learn_reference")]]){const r=A("button",{role:"tab","aria-pressed":String(this.tab===a),"data-learn-tab":a},s);r.addEventListener("click",()=>{this.tab===a&&(a==="lessons"&&(this.lessonId=void 0),a==="tasks"&&(this.taskId=void 0)),this.tab=a,this.persist(),this.render()}),e.append(r)}const t=gt("button",{class:"learn-hide",title:p("web_learn_hide"),"aria-label":p("web_learn_hide")},kt);t.addEventListener("click",()=>this.host.collapse());const n=A("div",{class:"learn-head"},e,t);if(this.body=A("div",{class:"learn-body"}),this.element.replaceChildren(n,this.body),this.tab==="lessons"){const a=Ot.find(s=>s.id===this.lessonId);a?this.renderLesson(a):this.renderLessonList()}else if(this.tab==="tasks"){const a=Tn.find(s=>s.id===this.taskId);a?this.renderTask(a):this.renderTaskList()}else{const a=La.map(r=>`- **${r.term}:** ${r.text}`).join(` +`).map(e=>R("div",{class:"ln"},e||" ")))}function vD(i,e){const t=R("section",{class:"learn-game learn-rescue"}),n=R("div",{class:"learn-game-head"});n.append(R("img",{src:e,alt:"",width:"40",height:"40"}),R("strong",{},i.title));const a=i.stations.length,s=i.stations.map(()=>R("span",{class:"learn-rescue-dot"})),r=R("img",{class:"learn-rescue-ludwig",src:e,alt:"",width:"32",height:"32"}),o=R("span",{class:"learn-rescue-tower","aria-hidden":"true"},"🏰",R("span",{class:"learn-rescue-zora"},"🐐"),R("span",{class:"learn-rescue-fox"},"🦊")),l=R("span",{class:"learn-rescue-free"},"🐐"),u=R("div",{class:"learn-rescue-path","aria-hidden":"true"},r,...s,o),m=R("p",{class:"learn-game-status"}),c=R("div",{class:"learn-game-stage"}),d=wD(i);t.append(n,u,m,c);let h=0;const g=()=>{s.forEach((z,S)=>z.classList.toggle("done",S{const z=[...i.alphabet].map((S,_)=>R("span",{class:"learn-rescue-letter"},R("b",{},S),R("small",{},String(_))));return{element:R("div",{class:"learn-rescue-alphabet mono",dir:"ltr"},...z),cells:z}},x=z=>{const S=i.stations[z];m.textContent=p("web_learn_rescue_station_fmt",z+1,a,S.name);const _=f(),T=R("input",{type:"text",inputmode:"numeric",autocomplete:"off",class:"learn-rescue-number mono","aria-label":p("web_learn_rescue_number")}),j=R("button",{class:"primary"},p("web_learn_check")),C=R("div",{class:"learn-game-feedback",role:"status"}),P=()=>{const O=T.value.trim();if(!/^-?\d+$/.test(O)){C.className="learn-game-feedback wrong",C.replaceChildren(R("p",{},p("web_learn_rescue_not_number")));return}if(Number(O)!==S.answer){C.className="learn-game-feedback wrong",C.replaceChildren(R("p",{},p("web_learn_rescue_wrong")),...S.hint?[vn("div",{class:"learn-game-explain"},`**${p("web_learn_hint")}:** ${S.hint}`)]:[]),T.select();return}T.disabled=j.disabled=!0;const L=i.alphabet.charAt(S.answer);_.cells[S.answer].classList.add("hit"),d.give(S.row,S.col,L),h++,g();const E=z+1===a,Q=R("button",{class:"primary"},p(E?"web_learn_rescue_to_crossword":"web_game_next"));Q.addEventListener("click",()=>E?b():x(z+1)),C.className="learn-game-feedback right",C.replaceChildren(R("p",{},p("web_game_right")),R("p",{class:"learn-rescue-charat mono",dir:"ltr"},`alphabet.charAt(${S.answer})`,R("span",{"aria-hidden":"true"}," → "),R("code",{},`'${L}'`)),vn("div",{class:"learn-game-explain"},S.explanation),R("p",{class:"learn-rescue-moved"},p("web_learn_rescue_letter_moved")),Q),Q.focus({preventScroll:!0})};j.addEventListener("click",P),T.addEventListener("keydown",O=>{O.key==="Enter"&&P()}),c.replaceChildren($u(S.code),vn("p",{class:"learn-game-question"},S.question),R("div",{class:"learn-rescue-answer"},T,j),C,R("p",{class:"learn-rescue-label"},p("web_learn_rescue_alphabet")),$u(`String alphabet = "${i.alphabet}";`),_.element,d.element),T.focus({preventScroll:!0})},b=()=>{m.textContent=p("web_learn_rescue_crossword");const z=R("div",{class:"learn-game-feedback",role:"status"}),S=R("button",{class:"primary"},p("web_learn_check"));S.addEventListener("click",()=>{if(!d.check()){z.className="learn-game-feedback wrong",z.replaceChildren(R("p",{},p("web_learn_rescue_cw_wrong")));return}S.disabled=!0,d.lock();const _=R("button",{class:"primary"},p("web_learn_rescue_to_gate"));_.addEventListener("click",y),z.className="learn-game-feedback right",z.replaceChildren(R("p",{},p("web_learn_rescue_cw_done")),_),_.focus({preventScroll:!0})}),d.unlock(),c.replaceChildren(vn("p",{},i.crosswordText),d.element,S,z),d.focusFirst()},y=()=>{m.textContent=p("web_learn_rescue_gate");const z=R("input",{type:"text",autocomplete:"off",autocapitalize:"off",spellcheck:"false",class:"learn-rescue-word mono",size:String(i.keyword.length+2),"aria-label":p("web_learn_rescue_word")}),S=i.gateCode.split(` +`).map(C=>{const P=C.indexOf(cs);return P<0?R("div",{class:"ln"},C||" "):R("div",{class:"ln"},C.slice(0,P),z,C.slice(P+cs.length))}),_=R("button",{class:"primary"},p("web_learn_rescue_open")),T=R("div",{class:"learn-game-feedback",role:"status"}),j=()=>{const C=z.value.trim();if(C!==i.keyword){const O=C.toUpperCase()===i.keyword.toUpperCase();T.className="learn-game-feedback wrong",T.replaceChildren(R("p",{},p(O?"web_learn_rescue_gate_case":"web_learn_rescue_gate_wrong"))),z.select();return}z.disabled=_.disabled=!0,t.classList.add("freed"),r.after(l),m.textContent="";const P=R("button",{},p("web_game_again"));P.addEventListener("click",w),T.className="learn-game-feedback right",T.replaceChildren(R("p",{},p("web_learn_rescue_freed")),vn("div",{class:"learn-game-explain"},i.end),P)};_.addEventListener("click",j),z.addEventListener("keydown",C=>{C.key==="Enter"&&j()}),c.replaceChildren(vn("p",{},i.gateText),R("div",{class:"learn-game-code mono learn-rescue-gate",dir:"ltr"},...S),_,T),z.focus({preventScroll:!0})},w=()=>{h=0,t.classList.remove("freed"),l.remove(),d.reset(),g(),x(0)},I=R("button",{class:"primary"},p("web_game_start"));return I.addEventListener("click",w),c.append(vn("p",{},i.intro),I),t}function wD(i){const e=CB(i),t=new Map(i.solution.map((g,f)=>[`${g.row} ${g.col}`,f])),n=new Map;for(const g of i.words)n.set(`${g.row} ${g.col}`,g.number);const a=new Map,s=R("div",{class:"learn-cw-grid",dir:"ltr"});s.style.gridTemplateColumns=`repeat(${i.cols}, var(--cw-cell))`;let r=!0;const o=(g,f)=>i.words.filter(x=>x.across?x.row===g&&f>=x.col&&f=x.row&&g{var y;const b=r?`${g} ${f+x}`:`${g+x} ${f}`;(y=a.get(b))==null||y.focus()};e.forEach((g,f)=>g.forEach((x,b)=>{if(!x)return s.append(R("span",{class:"learn-cw-empty"}));const y=`${f} ${b}`,w=R("input",{type:"text",maxlength:"1",autocomplete:"off",autocapitalize:"characters",spellcheck:"false","aria-label":p("web_learn_rescue_cell_fmt",f+1,b+1)});w.disabled=!0,w.addEventListener("focus",()=>{const _=o(f,b);_.some(T=>T.across===r)||(r=_[0].across),w.select()}),w.addEventListener("input",()=>{w.value=w.value.slice(-1).toUpperCase(),w.classList.remove("wrong"),c(),w.value&&l(f,b,1)}),w.addEventListener("keydown",_=>{if(_.key==="Backspace"&&!w.value)l(f,b,-1);else if(_.key==="ArrowRight"||_.key==="ArrowLeft")r=!0,l(f,b,_.key==="ArrowRight"?1:-1);else if(_.key==="ArrowDown"||_.key==="ArrowUp")r=!1,l(f,b,_.key==="ArrowDown"?1:-1);else return;_.preventDefault()}),a.set(y,w);const I=t.get(y),z=R("span",{class:`learn-cw-cell${I!==void 0?" key":""}`}),S=n.get(y);S&&z.append(R("small",{class:"learn-cw-number"},String(S))),I!==void 0&&z.append(R("small",{class:"learn-cw-keyindex"},String(I+1))),z.append(w),s.append(z)}));const u=g=>{const f=R("ol",{class:"learn-cw-clues"});for(const x of i.words.filter(b=>b.across===g).sort((b,y)=>b.number-y.number)){const b=vn("li",{value:String(x.number)},`${x.clue} (${x.word.length})`);b.addEventListener("click",()=>{var y;r=x.across,(y=a.get(`${x.row} ${x.col}`))==null||y.focus()}),f.append(b)}return R("div",{},R("strong",{},p(g?"web_learn_rescue_across":"web_learn_rescue_down")),f)},m=i.solution.map(()=>R("span",{class:"learn-cw-keybox"})),c=()=>i.solution.forEach((g,f)=>m[f].textContent=a.get(`${g.row} ${g.col}`).value||" "),d=R("div",{class:"learn-cw"},R("div",{class:"learn-cw-board"},s,R("p",{class:"learn-cw-keyword"},`${p("web_learn_rescue_keyword")} `,R("span",{class:"mono",dir:"ltr"},...m))),R("div",{class:"learn-cw-cluebox"},u(!0),u(!1))),h=new Set;return{element:d,give(g,f,x){const b=a.get(`${g} ${f}`);b.value=x,b.parentElement.classList.add("given","arrived"),h.add(`${g} ${f}`),c()},unlock(){for(const[g,f]of a)f.disabled=h.has(g)},lock(){for(const g of a.values())g.disabled=!0},focusFirst(){var g;(g=[...a].find(([f])=>!h.has(f)))==null||g[1].focus({preventScroll:!0})},check(){let g=!0;for(const[f,x]of a){const[b,y]=f.split(" ").map(Number),w=x.value!==e[b][y];x.classList.toggle("wrong",w),w&&(g=!1)}return g},reset(){h.clear();for(const g of a.values())g.value="",g.disabled=!0,g.classList.remove("wrong"),g.parentElement.classList.remove("given","arrived");c()}}}function zt(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function Yu(i,e,t){const n=zt(i,e);return n.innerHTML=Re(t),n}function zD(i){const e=zt("section",{class:"learn-cloze"});e.append(zt("strong",{class:"learn-cloze-title"},i.title)),i.task&&e.append(Yu("p",{},i.task)),e.append(zt("p",{class:"learn-cloze-hint"},p("web_learn_cloze_hint")));const t=[];for(const m of i.blocks){const c=zt("pre",{class:"learn-cloze-code mono",dir:"ltr"});for(const d of m){const h=zt("div",{class:"ln"});for(const g of d){if(typeof g=="string"){h.append(g);continue}const f=zt("input",{type:"text",class:"learn-cloze-gap mono",autocomplete:"off",autocapitalize:"off",autocorrect:"off",spellcheck:"false",enterkeyhint:"done","aria-label":`${t.length+1}`});f.style.width=`${Math.max(3,...g.answers.map(x=>x.length))+1}ch`,t.push({input:f,answers:g.answers}),h.append(f)}d.length||h.append(` +`),c.append(h)}e.append(c)}const n=zt("p",{class:"learn-cloze-status",role:"status"}),a=i.explanation?Yu("p",{class:"learn-explanation"},i.explanation):void 0;a&&(a.hidden=!0);const s=zt("button",{class:"learn-cloze-check"},p("web_learn_check")),r=zt("button",{},p("web_learn_cloze_solution")),o=zt("button",{},p("web_learn_cloze_again"));r.hidden=!0,o.hidden=!0;const l=zt("div",{class:"learn-cloze-actions"},s,r,o);e.append(l,n),a&&e.append(a);const u=()=>{var d;let m=0;for(const h of t){const g=WB(h.answers,h.input.value);h.input.classList.toggle("right",g),h.input.classList.toggle("wrong",!g),g&&m++}const c=m===t.length;n.textContent=c?p("web_learn_cloze_all_right"):p("web_learn_cloze_score_fmt",m,t.length),n.className=`learn-cloze-status ${c?"right":"wrong"}`,a&&(a.hidden=!c),c?(t.forEach(h=>h.input.disabled=!0),s.hidden=!0,o.hidden=!1):(r.hidden=!1,(d=t.find(h=>h.input.classList.contains("wrong")))==null||d.input.focus())};return s.addEventListener("click",u),r.addEventListener("click",()=>{for(const m of t)m.input.value=m.answers[0],m.input.classList.remove("right","wrong"),m.input.classList.add("shown"),m.input.disabled=!0;n.textContent="",n.className="learn-cloze-status",a&&(a.hidden=!1),s.hidden=!0,r.hidden=!0,o.hidden=!1}),o.addEventListener("click",()=>{var m;for(const c of t)c.input.value="",c.input.classList.remove("right","wrong","shown"),c.input.disabled=!1;n.textContent="",n.className="learn-cloze-status",a&&(a.hidden=!0),s.hidden=!1,r.hidden=!0,o.hidden=!0,(m=t[0])==null||m.input.focus()}),t.forEach((m,c)=>{m.input.addEventListener("input",()=>m.input.classList.remove("right","wrong")),m.input.addEventListener("keydown",d=>{d.key==="Enter"&&(d.preventDefault(),c[...o.querySelectorAll("strong")])){const o=ju(e),l=o==null?void 0:o.exec(r.textContent??""),u=l?Cu(e,l[0]):void 0;u&&n.add(u)}let a=e.filter(r=>!n.has(r));for(const r of t){const o=document.createTreeWalker(r,NodeFilter.SHOW_TEXT),l=[];for(;o.nextNode();){const u=o.currentNode;(s=u.parentElement)!=null&&s.closest(ID)||l.push(u)}for(let u of l)for(;;){const m=ju(a),c=m==null?void 0:m.exec(u.data),d=c?Cu(a,c[0]):void 0;if(!c||!d)break;const h=u.splitText(c.index);u=h.splitText(c[0].length);const g=document.createElement("span");g.className="term",g.tabIndex=0,g.setAttribute("role","button"),g.setAttribute("aria-describedby","term-tip"),g.dataset.term=d.term,g.dataset.text=d.text,h.replaceWith(g),g.append(h),a=a.filter(f=>f!==d)}}}function kD(i){const e=document.createElement("div");e.id="term-tip",e.className="term-tip",e.setAttribute("role","tooltip"),e.hidden=!0,document.body.append(e);let t,n=!1;const a=o=>{t=o,e.replaceChildren();const l=document.createElement("strong");l.textContent=o.dataset.term??"",e.append(l,document.createTextNode(" "+(o.dataset.text??""))),e.hidden=!1;const u=o.getBoundingClientRect(),m=e.offsetWidth,c=e.offsetHeight,d=Math.max(8,Math.min(u.left,window.innerWidth-m-8)),h=u.bottom+6;e.style.left=`${d}px`,e.style.top=`${h+c>window.innerHeight-8?Math.max(8,u.top-c-6):h}px`,o.setAttribute("aria-expanded","true")},s=()=>{t==null||t.setAttribute("aria-expanded","false"),t=void 0,n=!1,e.hidden=!0},r=o=>{var l,u;return((u=(l=o.target)==null?void 0:l.closest)==null?void 0:u.call(l,".term"))??void 0};return i.addEventListener("pointerover",o=>{const l=r(o);l&&o.pointerType==="mouse"&&!n&&a(l)}),i.addEventListener("pointerout",o=>{r(o)&&o.pointerType==="mouse"&&!n&&s()}),i.addEventListener("click",o=>{const l=r(o);if(l){if(n&&t===l)return s();a(l),n=!0}}),i.addEventListener("focusin",o=>{const l=r(o);l&&!n&&a(l)}),i.addEventListener("focusout",o=>{r(o)&&!n&&s()}),i.addEventListener("keydown",o=>{const l=r(o);o.key==="Escape"&&t?s():l&&(o.key==="Enter"||o.key===" ")&&(o.preventDefault(),l.click())}),i.addEventListener("scroll",s,!0),document.addEventListener("pointerdown",o=>{t&&!r(o)&&!e.contains(o.target)&&s()}),{hide:s}}const Xh={leiste:".topbar > .toolbar",werkzeuge:".diagram-tools",dateien:".files-rail, .files",codelive:".live-rail, .livecode",ausfuehren:"[data-run=play]",konsole:".livecode .console",einzelschritt:"[data-run=step]",elemente:".palette",struktogramm:".canvas",objektinspektor:".inspector",reiter:".tabs",titel:".caption",neu:"[data-action=new]",oeffnen:"[data-action=open]",speichern:"[data-action=save]",exportieren:"[data-action=export]",rueckgaengig:"[data-action=undo]",textgroesse:"[data-action=settings]",einstellungen:"[data-action=settings]",lernen:".learn .learn-hide",code:"[data-action=code]",simulation:"[data-action=simulate]"},SD=new Set(["werkzeuge","elemente","struktogramm","objektinspektor","reiter","titel","rueckgaengig","exportieren","code","simulation"]),_D=new Set(["ausfuehren","konsole","einzelschritt"]);function n0(i,e){return[...i.querySelectorAll(".ui-pointer")].some(t=>e.has(t.dataset.target??""))}function TD(i){return n0(i,new Set(["dateien"]))}function OD(i){return n0(i,SD)}function AD(i){return n0(i,_D)}function Ku(i){for(const e of i.querySelectorAll('a[href^="#zeige-"]')){const t=e.getAttribute("href").slice(7);if(!(t in Xh))continue;const n=document.createElement("span");n.className="ui-pointer",n.tabIndex=0,n.setAttribute("role","button"),n.dataset.target=t,n.append(...e.childNodes),e.replaceWith(n)}}function PD(i){let e,t;const n=()=>{e==null||e.classList.remove("ui-spot"),e=void 0,window.clearTimeout(t)},a=(r,o)=>{n();const l=[...document.querySelectorAll(Xh[r.dataset.target??""]??":not(*)")].find(u=>u.getClientRects().length>0);l&&(e=l,l.classList.add("ui-spot"),o&&(t=window.setTimeout(n,2500)))},s=r=>{var o,l;return((l=(o=r.target)==null?void 0:o.closest)==null?void 0:l.call(o,".ui-pointer"))??void 0};return i.addEventListener("pointerover",r=>{const o=s(r);o&&r.pointerType==="mouse"&&a(o,!1)}),i.addEventListener("pointerout",r=>{s(r)&&r.pointerType==="mouse"&&n()}),i.addEventListener("click",r=>{const o=s(r);o&&a(o,!0)}),i.addEventListener("focusin",r=>{const o=s(r);o&&a(o,!1)}),i.addEventListener("focusout",r=>{s(r)&&n()}),i.addEventListener("keydown",r=>{const o=s(r);o&&(r.key==="Enter"||r.key===" ")&&(r.preventDefault(),a(o,!0))}),{off:n}}const kt='',jD=()=>{const i=[];for(const e of Ot){const t=i.at(-1);t&&t.name===e.section?t.lessons.push(e):i.push({name:e.section,lessons:[e]})}return i};function A(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function gt(i,e,t){const n=A(i,e);return n.innerHTML=t,n}const CD=i=>p(`element_${k[i]}`);function BD(i){return{caption:i,elements:[ze(k.anweisung,{textLines:["ø"]})]}}function em(i){const e=i.start?X1(i.start):void 0;return e?{...e,caption:e.caption||i.title}:BD(i.title)}class DD{constructor(e){v(this,"element");v(this,"tab","lessons");v(this,"returnTo");v(this,"lessonId");v(this,"taskId");v(this,"body");v(this,"tips");v(this,"pointers");this.host=e,this.element=A("aside",{class:"learn","aria-label":p("web_learn_title")}),this.tips=kD(this.element),this.pointers=PD(this.element),hs(Mu(i1())),this.restore()}restore(){const e=ge.view();e&&(this.tab=["lessons","tasks","reference"].find(t=>t===e.tab)??"lessons",this.lessonId=Ot.some(t=>t.id===e.lesson)?e.lesson:void 0,this.taskId=Tn.some(t=>t.id===e.task)?e.task:void 0),this.render()}render(){this.tips.hide(),this.pointers.off(),hs(Mu(i1()));const e=A("div",{class:"segmented learn-tabs",role:"tablist"});for(const[a,s]of[["lessons",p("web_learn_lessons")],["tasks",p("web_learn_tasks")],["reference",p("web_learn_reference")]]){const r=A("button",{role:"tab","aria-pressed":String(this.tab===a),"data-learn-tab":a},s);r.addEventListener("click",()=>{this.tab===a&&(a==="lessons"&&(this.lessonId=void 0),a==="tasks"&&(this.taskId=void 0)),this.tab=a,this.persist(),this.render()}),e.append(r)}const t=gt("button",{class:"learn-hide",title:p("web_learn_hide"),"aria-label":p("web_learn_hide")},kt);t.addEventListener("click",()=>this.host.collapse());const n=A("div",{class:"learn-head"},e,t);if(this.body=A("div",{class:"learn-body"}),this.element.replaceChildren(n,this.body),this.tab==="lessons"){const a=Ot.find(s=>s.id===this.lessonId);a?this.renderLesson(a):this.renderLessonList()}else if(this.tab==="tasks"){const a=Tn.find(s=>s.id===this.taskId);a?this.renderTask(a):this.renderTaskList()}else{const a=La.map(r=>`- **${r.term}:** ${r.text}`).join(` `),s=gt("div",{class:"learn-text learn-reference"},kn(`${Ma} ## ${p("web_learn_terms")} -${a}`));this.body.append(s),this.foldReference(s)}}foldReference(e){const t="visustruct.reference.open";let n=[];try{n=JSON.parse(localStorage.getItem(t)??"[]")}catch{}for(const a of[...e.querySelectorAll("h2")]){const s=a.textContent??"",r=A("details",{class:"reference-group"});r.open=n.includes(s);const o=A("summary",{},s);for(a.replaceWith(r),r.append(o);r.nextSibling&&r.nextSibling.nodeName!=="H2";)r.append(r.nextSibling);r.addEventListener("toggle",()=>{n=r.open?[...new Set([...n,s])]:n.filter(l=>l!==s);try{localStorage.setItem(t,JSON.stringify(n))}catch{}})}}showReference(){this.tab="reference",this.persist(),this.render()}persist(){ge.setView({tab:this.tab,lesson:this.lessonId,task:this.taskId})}openLesson(e){this.tab="lessons",this.lessonId=e,this.returnTo=void 0,this.persist(),this.render(),this.body.scrollTop=0}renderLessonList(){this.body.append(A("p",{class:"hint"},p("web_learn_intro")));for(const e of jD()){this.body.append(A("h3",{class:"learn-section"},e.name));const t=A("ol",{class:"learn-list"});for(const n of e.lessons){const a=ge.lesson(n.id),s=a.done?"✓":a.step>0?p("web_learn_step_of_fmt",a.step+1,n.steps.length):"",r=A("button",{class:"learn-item"+(a.done?" done":""),"data-lesson":n.id},A("span",{class:"learn-num"},String(n.number)),A("span",{class:"learn-item-text"},A("strong",{},n.robot?`🤖 ${n.title}`:n.title),A("small",{},n.summary)),A("span",{class:"learn-status"},s));r.addEventListener("click",()=>this.openLesson(n.id)),t.append(A("li",{},r))}this.body.append(t)}this.body.append(this.renderTeacherBox())}renderLesson(e){var c;const t=ge.lesson(e.id),n=Math.min(t.step,e.steps.length-1),a=e.steps[n],s=A("button",{class:"learn-back"},`← ${p("web_learn_all_lessons")}`);s.addEventListener("click",()=>this.openLesson(void 0));const r=A("nav",{class:"learn-progress","aria-label":p("web_learn_step_of_fmt",n+1,e.steps.length)});r.append(...e.steps.map((d,h)=>{const g=p("web_learn_step_fmt",h+1,d.title),f=hthis.goToStep(e,h)),x})),this.body.append(s,A("p",{class:"learn-kicker"},`${p("web_learn_lesson_fmt",e.number)} · ${e.section}${e.robot?" · 🤖 VisuBot":""}`),A("h2",{class:"learn-title"},A("span",{class:"learn-num","aria-hidden":"true"},String(e.number)),e.title),r,A("h3",{class:"learn-step-title"},`${n+1}. ${a.title}`));const o=((c=this.returnTo)==null?void 0:c.lesson)===e.id&&this.returnTo.step!==n?this.returnTo:void 0,l=()=>{const d=A("button",{class:"learn-return"},`↩ ${p("web_learn_back_to_checklist")}`);return d.addEventListener("click",()=>{this.returnTo=void 0,this.goToStep(e,o.step),this.body.scrollTop=o.scroll}),d};o&&this.body.append(l()),a.blocks.forEach((d,h)=>this.body.append(this.renderBlock(d,`${n}-${h}`,e))),Ku(this.body),hD(this.body),this.openNeededColumns(a.blocks),Xu(this.body,La);const u=A("div",{class:"learn-nav"}),m=A("button",{},`← ${p("web_learn_back")}`);if(m.disabled=n===0,m.addEventListener("click",()=>this.goToStep(e,n-1)),u.append(m),nthis.goToStep(e,n+1)),u.append(d)}else{const d=A("button",{class:"primary"},t.done?`✓ ${p("web_learn_done")}`:p("web_learn_finish"));d.addEventListener("click",()=>{ge.updateLesson(e.id,{done:!0});const h=Ot.find(g=>g.number===e.number+1);this.openLesson(h==null?void 0:h.id)}),u.append(d)}this.body.append(u),o&&this.body.append(l())}goToStep(e,t){ge.updateLesson(e.id,{step:t}),this.render(),this.body.scrollTop=0}openNeededColumns(e){const t=e.flatMap(n=>n.kind==="exercise"?[n.exercise]:[]);OD(this.body)?this.host.showEditor():TD(this.body)?this.host.showFiles():t.some(n=>n.code!=="java")?this.host.showEditor():(t.length>0||this.body.querySelector(".lesson-code[data-lang=java]"))&&this.host.showJava(),AD(this.body)&&this.host.showLiveCode()}renderTaskList(){this.body.append(A("p",{class:"hint"},p("web_learn_tasks_intro")));const e=A("ul",{class:"learn-list"});for(const t of Tn){const n=this.taskExercises(t),a=n.length>0&&n.every(o=>ge.exercise(o.id).done),s=Ot.find(o=>o.number===t.after),r=A("button",{class:"learn-item"+(a?" done":""),"data-task":t.id},A("span",{class:"learn-num","aria-label":p("web_learn_level_fmt",t.level)},"★".repeat(t.level)),A("span",{class:"learn-item-text"},A("strong",{},t.title),A("small",{},s?p("web_learn_after_fmt",s.number,s.title):"")),A("span",{class:"learn-status"},a?"✓":""));r.addEventListener("click",()=>{this.taskId=t.id,this.persist(),this.render(),this.body.scrollTop=0}),e.append(A("li",{},r))}this.body.append(e,this.renderTeacherBox())}renderTeacherBox(){const e=A("details",{class:"learn-teacher"},A("summary",{},p("web_learn_teacher")));if(Ru()){e.setAttribute("open","");const s=A("button",{},p("web_learn_teacher_off"));return s.addEventListener("click",()=>{sD(),this.render()}),e.append(A("p",{},p("web_learn_teacher_on")),s),e}const t=A("input",{type:"password",autocomplete:"off","aria-label":p("web_learn_teacher_code"),placeholder:p("web_learn_teacher_code")}),n=A("p",{class:"learn-result",role:"status"}),a=A("form",{class:"group"},t,A("button",{type:"submit"},p("web_learn_teacher_unlock")));return a.addEventListener("submit",async s=>{s.preventDefault(),await aD(t.value)?this.render():(n.className="learn-result info",n.textContent=p("web_learn_teacher_wrong"))}),e.append(A("p",{class:"hint"},p("web_learn_teacher_intro")),a,n),e}taskExercises(e){return e.blocks.flatMap(t=>t.kind==="exercise"?[t.exercise]:[])}renderTask(e){const t=A("button",{class:"learn-back"},`← ${p("web_learn_all_tasks")}`);t.addEventListener("click",()=>{this.taskId=void 0,this.persist(),this.render()});const n=Ot.find(a=>a.number===e.after);if(this.body.append(t,A("h2",{class:"learn-title"},e.title)),n){const a=A("button",{class:"link-button"},p("web_learn_after_fmt",n.number,n.title));a.addEventListener("click",()=>this.openLesson(n.id)),this.body.append(A("p",{class:"learn-kicker"},a))}e.blocks.forEach((a,s)=>this.body.append(this.renderBlock(a,`task-${s}`))),Ku(this.body),this.openNeededColumns(e.blocks),Xu(this.body,La)}renderBlock(e,t,n){switch(e.kind){case"markdown":return gt("div",{class:"learn-text"},kn(e.text));case"diagram":return this.renderDiagram(e.file,e.caption);case"exercise":return this.renderExercise(e.exercise);case"checklist":return this.renderChecklist(e.items,t,n);case"quiz":return this.renderQuiz(e.questions,t,n);case"brag":return this.renderBrag(e.text,e.tip);case"images":return this.renderImages(e.files,e.caption);case"graphic":return this.renderGraphic(e.file,e.caption);case"game":return this.renderGame(e.game);case"roundGame":return pD(e.game,aa);case"rescueGame":return vD(e.game,aa);case"caesar":return mD(e.key,e.text);case"cloze":return zD(e.cloze);case"textFile":return Qh(e.name,e.content);case"robotModel":return dD(e.focus,e.view,e.spin);case"robotQuiz":return gD(e.tasks,e.done)}}renderBrag(e,t=!1){const n=A("aside",{class:"learn-brag"});n.append(A("img",{src:aa,alt:"",width:"48",height:"48"}));const a=A("div",{},A("p",{class:"learn-brag-title"},p(t?"web_learn_ludwig_tip":"web_learn_brag")));return a.append(gt("div",{class:"learn-text"},kn(e))),n.append(a),n}renderGame(e){const n=A("section",{class:"learn-game"}),a=A("div",{class:"learn-game-head"});a.append(A("img",{src:aa,alt:"",width:"40",height:"40"}),A("strong",{},p("web_game_title")));const s=A("p",{class:"learn-game-status"}),r=A("div",{class:"learn-game-stage"});n.append(a,s,r);let o=0,l=0;const u=()=>{const d=$x(e,o,10);s.textContent=`${p("web_game_round_fmt",o+1,10)} · ${p("web_game_score_fmt",l)}`;const h=A("div",{class:"learn-game-values mono"});for(const[w,S]of Yx(d))h.append(A("code",{},`${w} = ${S}`));const g=A("div",{class:"group learn-game-answers"}),f=A("button",{class:"learn-game-true"},`✓ ${p("web_game_true")}`),x=A("button",{class:"learn-game-false"},`✗ ${p("web_game_false")}`);g.append(f,x);const b=A("div",{class:"learn-game-feedback",role:"status"}),y=w=>{f.disabled=x.disabled=!0;const S=w===d.answer;S&&l++,s.textContent=`${p("web_game_round_fmt",o+1,10)} · ${p("web_game_score_fmt",l)}`,b.className=`learn-game-feedback ${S?"right":"wrong"}`;const z=A("div",{class:"learn-game-steps mono"});qx(d.condition,d.values).forEach((_,T)=>z.append(A("div",{},`${T?"→ ":""}${_}`)));const k=A("button",{class:"primary"},o+1<10?p("web_game_next"):p("web_game_finish"));k.addEventListener("click",()=>{o++,o<10?u():m()}),b.replaceChildren(A("p",{},p(S?"web_game_right":"web_game_wrong")),z,k),k.focus()};f.addEventListener("click",()=>y(!0)),x.addEventListener("click",()=>y(!1)),r.replaceChildren(h,A("div",{class:"learn-game-condition mono"},d.condition),g,b)},m=()=>{s.textContent="";const d=A("button",{class:"primary"},p("web_game_again"));d.addEventListener("click",()=>{o=l=0,u()}),r.replaceChildren(A("p",{class:"learn-game-result"},p("web_game_done_fmt",l,10)),A("p",{},p(l===10?"web_game_perfect":l>=10*.7?"web_game_good":"web_game_practice")),d)},c=A("button",{class:"primary"},p("web_game_start"));return c.addEventListener("click",u),r.append(A("p",{},p("web_game_intro")),c),n}renderImages(e,t){const n=A("figure",{class:"learn-figure"}),a=A("div",{class:"learn-images"});for(const s of e){const r=Fu(s);r&&a.append(A("img",{src:r,alt:"",loading:"lazy"}))}return n.append(a),t&&n.append(gt("figcaption",{},Re(t))),n}renderGraphic(e,t){const n=A("figure",{class:"learn-figure"}),a=Fu(e);return a&&n.append(A("img",{class:"learn-graphic",src:a,alt:"",loading:"lazy"})),t&&n.append(gt("figcaption",{},Re(t))),n}renderDiagram(e,t){const n=X1(e),a=A("figure",{class:"learn-figure"});if(!n)return a;const s=this.host.preview(n);s&&a.append(A("div",{class:"learn-preview",dir:"ltr"},s)),t&&a.append(gt("figcaption",{},Re(t)));const r=A("button",{},p("web_learn_open_in_editor"));return r.addEventListener("click",()=>this.host.openDiagram(n,e)),a.append(r),a}renderExercise(e){const t=A("section",{class:"learn-exercise","data-exercise":e.id}),n=()=>ge.exercise(e.id),a=A("span",{class:"learn-badge"},`✓ ${p("web_learn_solved")}`);a.hidden=!n().done,t.append(A("h4",{},`${p("web_learn_exercise")}: ${e.title}`,a),gt("div",{class:"learn-text"},kn(e.task)));const s=A("div",{class:"learn-result",role:"status"}),r=A("div",{class:"learn-hints"}),o=A("div",{class:"group"}),l=A("button",{class:"primary"},p("web_learn_open_exercise"));l.addEventListener("click",()=>{const c=n().xml;let d=em(e);if(c)try{d=Bl(c)}catch{}this.host.openExercise(e,d)});const u=A("button",{},p("web_learn_check"));if(u.addEventListener("click",()=>{const c=this.host.exerciseDocument(e.id);if(!c){s.className="learn-result info",s.textContent=p("web_learn_open_first");return}if(c.elements.every(Al)){s.className="learn-result info",s.textContent=p("web_learn_empty");return}this.host.stopSimulation();const d=Rx(c,e.tests,this.host.subprogramsFor(e.id),Wa),h=Gx(c),g=e.requires.map(b=>b==="forZaehlSchleife"?"forSchleife":b).filter(b=>b in I&&!h.has(I[b])),f=e.loopDepth!==void 0&&_o(c.elements)b.passed)&&g.length===0&&!f;this.showResult(s,d,g,x,f),x&&(ge.updateExercise(e.id,{done:!0}),a.hidden=!1)}),o.append(l,u),e.hints.length>0){const c=A("button",{},p("web_learn_hint"));c.addEventListener("click",()=>{const d=r.children.length;if(d>=e.hints.length)return;const h=e.hints.length>1?`**${p("web_learn_hint_fmt",d+1,e.hints.length)}:** `:"";r.append(gt("aside",{class:"lesson-note"},kn(h+e.hints[d]))),c.textContent=p("web_learn_hint_more"),c.toggleAttribute("disabled",d+1>=e.hints.length)}),o.append(c)}const m=A("button",{class:"danger-text"},p("web_learn_reset"));if(m.addEventListener("click",()=>{if(m.dataset.confirm!=="1"){m.dataset.confirm="1",m.textContent=p("web_learn_reset_confirm"),setTimeout(()=>{m.dataset.confirm="",m.textContent=p("web_learn_reset")},4e3);return}ge.resetExercise(e.id),this.host.resetExercise(e.id,em(e)),a.hidden=!0,s.replaceChildren(),s.className="learn-result",m.dataset.confirm="",m.textContent=p("web_learn_reset")}),o.append(m),t.append(o,r,s),Ru()&&e.solution){const c=X1(e.solution);if(c){const d=A("details",{class:"learn-solution"},A("summary",{},p("web_learn_solution")));d.addEventListener("toggle",()=>{if(!d.open||d.querySelector(".learn-preview"))return;const h=this.host.preview(c);h&&d.append(A("div",{class:"learn-preview",dir:"ltr"},h));const g=A("button",{},p("web_learn_open_in_editor"));g.addEventListener("click",()=>{this.host.openDiagram(c,e.solution);for(const f of e.subprograms){const x=X1(f);x&&this.host.openDiagram(x,f)}});for(const f of e.subprograms){const x=X1(f),b=x&&this.host.preview(x);b&&d.append(A("div",{class:"learn-preview",dir:"ltr"},b))}d.append(g)}),t.append(d)}}return t}showResult(e,t,n,a,s){var o,l,u,m,c;e.className="learn-result "+(a?"ok":"fail"),e.replaceChildren(A("p",{class:"learn-result-head"},a?`🎉 ${p("web_learn_passed")}`:p("web_learn_failed")));for(const d of n)e.append(A("p",{},`✗ ${p("web_learn_missing_fmt",CD(I[d]))}`));s&&e.append(A("p",{},`✗ ${p("web_visubot_depth_fmt",s)}`));const r=A("ul",{class:"learn-tests",dir:"auto"});for(const d of t){const h=d.test.world?t.filter(b=>b.test.world).indexOf(d)+1:0,g=d.test.world?`🗺 ${p("web_visubot_world_fmt",h)}`:d.test.actions?`🤖 ${p("web_visubot_actions")}`:d.test.sensors?`🎛 ${Object.entries(d.test.sensors).map(([b,y])=>`mbot.${b}() = ${y.join(" → ")}`).join(", ")}`:d.test.drive?`🤖 ${p("web_visubot_drive")}`:d.test.inputs.length?p("web_learn_input_fmt",d.test.inputs.join(", ")):p("web_learn_no_input"),f=[`${d.passed?"✓":"✗"} ${g}`],x=A("div",{class:"learn-test-detail"});if(d.test.drive&&x.append(A("span",{},`${p("web_learn_expected")}: `,A("code",{},U1(d.test.drive)||"–")),A("span",{},`${p("web_learn_actual")}: `,A("code",{},U1(d.result.drive??[])||"–"))),d.test.actions&&x.append(A("span",{},`${p("web_learn_expected")}: `,A("code",{},U1(d.test.actions)||"–")),A("span",{},`${p("web_learn_actual")}: `,A("code",{},U1(d.result.actions??[])||"–"))),d.test.led!==void 0){const b=y=>p(y?"web_visubot_led_on":"web_visubot_led_off");x.append(A("span",{},`💡 ${p("web_learn_expected")}: ${b(d.test.led)} · ${p("web_learn_actual")}: ${b(d.result.led)}`))}if(d.test.tone!==void 0){const b=y=>p(y?"web_visubot_tone_yes":"web_visubot_tone_no");x.append(A("span",{},`🔊 ${p("web_learn_expected")}: ${b(d.test.tone)} · ${p("web_learn_actual")}: ${b(d.result.tone)}`))}d.test.screen!==void 0&&x.append(A("span",{},`📺 ${p("web_learn_expected")}: `,A("code",{},d.test.screen),` · ${p("web_learn_actual")}: `,A("code",{},d.result.screen??"–"))),d.test.world&&(((l=(o=Wa(d.test.world))==null?void 0:o.goals)!=null&&l.length||(m=(u=Wa(d.test.world))==null?void 0:u.targets)!=null&&m.length)&&x.append(A("span",{},d.result.atGoal?`✓ ${p("web_visubot_goal_reached")}`:`✗ ${p("web_visubot_goal_missed")}`)),d.result.bumps&&x.append(A("span",{class:"learn-error"},`⚠︎ ${p("web_visubot_bumps")}: ${d.result.bumps}`))),(!d.test.drive&&!d.test.world&&!d.test.sensors&&!d.test.actions||d.result.outputs.length)&&x.append(A("span",{},`${p("web_learn_expected")}: `,A("code",{},d.test.expected.join(" | ")||"–")),A("span",{},`${p("web_learn_actual")}: `,A("code",{},d.result.outputs.join(" | ")||"–")));for(const b of d.test.files??[])x.append(A("span",{},`📄 ${b.name}, ${p("web_learn_expected")}: `,A("code",{},b.lines.join(" | ")||"–")),A("span",{},`📄 ${b.name}, ${p("web_learn_actual")}: `,A("code",{},Bh((c=d.result.files)==null?void 0:c.get(b.name)).join(" | ")||"–")));d.result.error&&x.append(A("span",{class:"learn-error"},Kn(d.result.error))),d.result.missingInput&&x.append(A("span",{class:"learn-error"},p("web_learn_missing_input"))),d.result.tooManySteps&&x.append(A("span",{class:"learn-error"},p("web_learn_too_many_steps"))),!d.passed&&d.result.unusedInputs&&x.append(A("span",{class:"learn-error"},p("web_learn_unused_input"))),r.append(A("li",{class:d.passed?"ok":"fail"},...f,x))}e.append(r)}renderChecklist(e,t,n){const a=A("ul",{class:"learn-checklist"});return e.forEach((s,r)=>{var c;const o=`${t}-${r}`,l=A("input",{type:"checkbox"});l.checked=!!(n&&((c=ge.lesson(n.id).checks)!=null&&c[o])),l.addEventListener("change",()=>{if(!n)return;const d={...ge.lesson(n.id).checks??{},[o]:l.checked};ge.updateLesson(n.id,{checks:d})});const u=A("label",{},l);u.insertAdjacentHTML("beforeend"," "+Re(s.text));const m=A("li",{},u);if(n&&s.step!==void 0){const d=s.step,h=p("web_learn_step_fmt",d+1,n.steps[d].title),g=A("button",{class:"link-button learn-check-link",title:h,"aria-label":`${p("web_learn_review")}: ${h}`},p("web_learn_review"));g.addEventListener("click",()=>{this.returnTo={lesson:n.id,step:ge.lesson(n.id).step,scroll:this.body.scrollTop},this.goToStep(n,d)}),m.append(g)}a.append(m)}),a}renderQuiz(e,t,n){const a=A("div",{class:"learn-quiz"}),s=A("p",{class:"learn-score",role:"status"}),r=()=>n?ge.lesson(n.id).quiz??{}:{},o=()=>{const l=r(),u=(h,g)=>h.pairs?h.pairs.every((f,x)=>l[`${t}-${g}-${x}`]!==void 0):l[`${t}-${g}`]!==void 0,m=(h,g)=>{var f;return h.pairs?h.pairs.every((x,b)=>tm(h)[l[`${t}-${g}-${b}`]]===h.pairs[b].right):(f=h.options[l[`${t}-${g}`]])==null?void 0:f.correct},c=e.filter(u).length,d=e.filter(m).length;s.textContent=c===e.length?p("web_learn_score_fmt",d,e.length):""};return e.forEach((l,u)=>{const m=`${t}-${u}`,c=A("fieldset",{},gt("legend",{},Re(l.question))),d=gt("p",{class:"learn-explanation"},Re(l.explanation??""));if(l.pairs){c.append(this.renderMatch(l,m,r,n,d,o),d),a.append(c);return}const h=g=>{c.querySelectorAll("button").forEach((f,x)=>{f.classList.toggle("right",g!==void 0&&l.options[x].correct),f.classList.toggle("wrong",g===x&&!l.options[x].correct),f.setAttribute("aria-pressed",String(g===x))}),d.hidden=g===void 0||!l.explanation};l.options.forEach((g,f)=>{const x=gt("button",{class:"learn-option"},Re(g.text));x.addEventListener("click",()=>{n&&ge.updateLesson(n.id,{quiz:{...r(),[m]:f}}),h(f),o()}),c.append(x)}),c.append(d),h(r()[m]),a.append(c)}),a.append(s),o(),a}renderMatch(e,t,n,a,s,r){const o=e.pairs,l=tm(e),u=A("div",{class:"learn-match"});let m={};const c=()=>a?n():m,d=x=>a?ge.updateLesson(a.id,{quiz:x}):m=x,h=x=>c()[`${t}-${x}`],g=o.map(x=>{const b=A("select",{class:"learn-match-select"});b.append(A("option",{value:""},"–")),l.forEach((w,S)=>b.append(A("option",{value:String(S)},w)));const y=gt("label",{class:"learn-match-left"},Re(x.left));return y.append(b),u.append(y),b}),f=()=>{const x=o.every((b,y)=>h(y)!==void 0);g.forEach((b,y)=>{const w=h(y);b.value=w===void 0?"":String(w),b.classList.toggle("right",x&&l[w]===o[y].right),b.classList.toggle("wrong",x&&l[w]!==o[y].right)}),s.hidden=!x||!e.explanation};return g.forEach((x,b)=>x.addEventListener("change",()=>{const y={...c()};x.value===""?delete y[`${t}-${b}`]:y[`${t}-${b}`]=Number(x.value),d(y),f(),r()})),f(),u}}function tm(i){return(i.pairs??[]).map(e=>e.right).sort((e,t)=>e.localeCompare(t,"de"))}const ZD=""+new URL("visubot-CyGFOI9V.webp",import.meta.url).href,i0="visustruct.visubot";function a0(){try{return localStorage.getItem(i0)}catch{return null}}function ri(){const i=a0();return i==="1"||i==="kurs"?"on":"off"}const Kh=()=>a0()==="2";function eg(){try{localStorage.setItem(i0,"2")}catch{}}const MD=()=>a0()!==null;function br(i){try{localStorage.setItem(i0,i==="on"?"1":"0")}catch{}}const LD=`VisuBot`,Rn=()=>ri()!=="off",nm=i=>i.replace(/[&<>"]/g,e=>({"&":"&","<":"<",">":">",'"':"""})[e]);function Po(){const i=Kh()?"object":ri(),e=(n,a)=>``,t={off:"web_visubot_world_visustruct_hint",on:"web_visubot_world_visubot_hint",object:"web_visuobject_world_hint"}[i];return`
+${a}`));this.body.append(s),this.foldReference(s)}}foldReference(e){const t="visustruct.reference.open";let n=[];try{n=JSON.parse(localStorage.getItem(t)??"[]")}catch{}for(const a of[...e.querySelectorAll("h2")]){const s=a.textContent??"",r=A("details",{class:"reference-group"});r.open=n.includes(s);const o=A("summary",{},s);for(a.replaceWith(r),r.append(o);r.nextSibling&&r.nextSibling.nodeName!=="H2";)r.append(r.nextSibling);r.addEventListener("toggle",()=>{n=r.open?[...new Set([...n,s])]:n.filter(l=>l!==s);try{localStorage.setItem(t,JSON.stringify(n))}catch{}})}}showReference(){this.tab="reference",this.persist(),this.render()}persist(){ge.setView({tab:this.tab,lesson:this.lessonId,task:this.taskId})}openLesson(e){this.tab="lessons",this.lessonId=e,this.returnTo=void 0,this.persist(),this.render(),this.body.scrollTop=0}renderLessonList(){this.body.append(A("p",{class:"hint"},p("web_learn_intro")));for(const e of jD()){this.body.append(A("h3",{class:"learn-section"},e.name));const t=A("ol",{class:"learn-list"});for(const n of e.lessons){const a=ge.lesson(n.id),s=a.done?"✓":a.step>0?p("web_learn_step_of_fmt",a.step+1,n.steps.length):"",r=A("button",{class:"learn-item"+(a.done?" done":""),"data-lesson":n.id},A("span",{class:"learn-num"},String(n.number)),A("span",{class:"learn-item-text"},A("strong",{},n.robot?`🤖 ${n.title}`:n.title),A("small",{},n.summary)),A("span",{class:"learn-status"},s));r.addEventListener("click",()=>this.openLesson(n.id)),t.append(A("li",{},r))}this.body.append(t)}this.body.append(this.renderTeacherBox())}renderLesson(e){var c;const t=ge.lesson(e.id),n=Math.min(t.step,e.steps.length-1),a=e.steps[n],s=A("button",{class:"learn-back"},`← ${p("web_learn_all_lessons")}`);s.addEventListener("click",()=>this.openLesson(void 0));const r=A("nav",{class:"learn-progress","aria-label":p("web_learn_step_of_fmt",n+1,e.steps.length)});r.append(...e.steps.map((d,h)=>{const g=p("web_learn_step_fmt",h+1,d.title),f=hthis.goToStep(e,h)),x})),this.body.append(s,A("p",{class:"learn-kicker"},`${p("web_learn_lesson_fmt",e.number)} · ${e.section}${e.robot?" · 🤖 VisuBot":""}`),A("h2",{class:"learn-title"},A("span",{class:"learn-num","aria-hidden":"true"},String(e.number)),e.title),r,A("h3",{class:"learn-step-title"},`${n+1}. ${a.title}`));const o=((c=this.returnTo)==null?void 0:c.lesson)===e.id&&this.returnTo.step!==n?this.returnTo:void 0,l=()=>{const d=A("button",{class:"learn-return"},`↩ ${p("web_learn_back_to_checklist")}`);return d.addEventListener("click",()=>{this.returnTo=void 0,this.goToStep(e,o.step),this.body.scrollTop=o.scroll}),d};o&&this.body.append(l()),a.blocks.forEach((d,h)=>this.body.append(this.renderBlock(d,`${n}-${h}`,e))),Ku(this.body),hD(this.body),this.openNeededColumns(a.blocks),Xu(this.body,La);const u=A("div",{class:"learn-nav"}),m=A("button",{},`← ${p("web_learn_back")}`);if(m.disabled=n===0,m.addEventListener("click",()=>this.goToStep(e,n-1)),u.append(m),nthis.goToStep(e,n+1)),u.append(d)}else{const d=A("button",{class:"primary"},t.done?`✓ ${p("web_learn_done")}`:p("web_learn_finish"));d.addEventListener("click",()=>{ge.updateLesson(e.id,{done:!0});const h=Ot.find(g=>g.number===e.number+1);this.openLesson(h==null?void 0:h.id)}),u.append(d)}this.body.append(u),o&&this.body.append(l())}goToStep(e,t){ge.updateLesson(e.id,{step:t}),this.render(),this.body.scrollTop=0}openNeededColumns(e){const t=e.flatMap(n=>n.kind==="exercise"?[n.exercise]:[]);OD(this.body)?this.host.showEditor():TD(this.body)?this.host.showFiles():t.some(n=>n.code!=="java")?this.host.showEditor():(t.length>0||this.body.querySelector(".lesson-code[data-lang=java]"))&&this.host.showJava(),AD(this.body)&&this.host.showLiveCode()}renderTaskList(){this.body.append(A("p",{class:"hint"},p("web_learn_tasks_intro")));const e=A("ul",{class:"learn-list"});for(const t of Tn){const n=this.taskExercises(t),a=n.length>0&&n.every(o=>ge.exercise(o.id).done),s=Ot.find(o=>o.number===t.after),r=A("button",{class:"learn-item"+(a?" done":""),"data-task":t.id},A("span",{class:"learn-num","aria-label":p("web_learn_level_fmt",t.level)},"★".repeat(t.level)),A("span",{class:"learn-item-text"},A("strong",{},t.title),A("small",{},s?p("web_learn_after_fmt",s.number,s.title):"")),A("span",{class:"learn-status"},a?"✓":""));r.addEventListener("click",()=>{this.taskId=t.id,this.persist(),this.render(),this.body.scrollTop=0}),e.append(A("li",{},r))}this.body.append(e,this.renderTeacherBox())}renderTeacherBox(){const e=A("details",{class:"learn-teacher"},A("summary",{},p("web_learn_teacher")));if(Ru()){e.setAttribute("open","");const s=A("button",{},p("web_learn_teacher_off"));return s.addEventListener("click",()=>{sD(),this.render()}),e.append(A("p",{},p("web_learn_teacher_on")),s),e}const t=A("input",{type:"password",autocomplete:"off","aria-label":p("web_learn_teacher_code"),placeholder:p("web_learn_teacher_code")}),n=A("p",{class:"learn-result",role:"status"}),a=A("form",{class:"group"},t,A("button",{type:"submit"},p("web_learn_teacher_unlock")));return a.addEventListener("submit",async s=>{s.preventDefault(),await aD(t.value)?this.render():(n.className="learn-result info",n.textContent=p("web_learn_teacher_wrong"))}),e.append(A("p",{class:"hint"},p("web_learn_teacher_intro")),a,n),e}taskExercises(e){return e.blocks.flatMap(t=>t.kind==="exercise"?[t.exercise]:[])}renderTask(e){const t=A("button",{class:"learn-back"},`← ${p("web_learn_all_tasks")}`);t.addEventListener("click",()=>{this.taskId=void 0,this.persist(),this.render()});const n=Ot.find(a=>a.number===e.after);if(this.body.append(t,A("h2",{class:"learn-title"},e.title)),n){const a=A("button",{class:"link-button"},p("web_learn_after_fmt",n.number,n.title));a.addEventListener("click",()=>this.openLesson(n.id)),this.body.append(A("p",{class:"learn-kicker"},a))}e.blocks.forEach((a,s)=>this.body.append(this.renderBlock(a,`task-${s}`))),Ku(this.body),this.openNeededColumns(e.blocks),Xu(this.body,La)}renderBlock(e,t,n){switch(e.kind){case"markdown":return gt("div",{class:"learn-text"},kn(e.text));case"diagram":return this.renderDiagram(e.file,e.caption);case"exercise":return this.renderExercise(e.exercise);case"checklist":return this.renderChecklist(e.items,t,n);case"quiz":return this.renderQuiz(e.questions,t,n);case"brag":return this.renderBrag(e.text,e.tip);case"images":return this.renderImages(e.files,e.caption);case"graphic":return this.renderGraphic(e.file,e.caption);case"game":return this.renderGame(e.game);case"roundGame":return pD(e.game,aa);case"rescueGame":return vD(e.game,aa);case"caesar":return mD(e.key,e.text);case"cloze":return zD(e.cloze);case"textFile":return Qh(e.name,e.content);case"robotModel":return dD(e.focus,e.view,e.spin);case"robotQuiz":return gD(e.tasks,e.done)}}renderBrag(e,t=!1){const n=A("aside",{class:"learn-brag"});n.append(A("img",{src:aa,alt:"",width:"48",height:"48"}));const a=A("div",{},A("p",{class:"learn-brag-title"},p(t?"web_learn_ludwig_tip":"web_learn_brag")));return a.append(gt("div",{class:"learn-text"},kn(e))),n.append(a),n}renderGame(e){const n=A("section",{class:"learn-game"}),a=A("div",{class:"learn-game-head"});a.append(A("img",{src:aa,alt:"",width:"40",height:"40"}),A("strong",{},p("web_game_title")));const s=A("p",{class:"learn-game-status"}),r=A("div",{class:"learn-game-stage"});n.append(a,s,r);let o=0,l=0;const u=()=>{const d=$x(e,o,10);s.textContent=`${p("web_game_round_fmt",o+1,10)} · ${p("web_game_score_fmt",l)}`;const h=A("div",{class:"learn-game-values mono"});for(const[w,I]of Yx(d))h.append(A("code",{},`${w} = ${I}`));const g=A("div",{class:"group learn-game-answers"}),f=A("button",{class:"learn-game-true"},`✓ ${p("web_game_true")}`),x=A("button",{class:"learn-game-false"},`✗ ${p("web_game_false")}`);g.append(f,x);const b=A("div",{class:"learn-game-feedback",role:"status"}),y=w=>{f.disabled=x.disabled=!0;const I=w===d.answer;I&&l++,s.textContent=`${p("web_game_round_fmt",o+1,10)} · ${p("web_game_score_fmt",l)}`,b.className=`learn-game-feedback ${I?"right":"wrong"}`;const z=A("div",{class:"learn-game-steps mono"});qx(d.condition,d.values).forEach((_,T)=>z.append(A("div",{},`${T?"→ ":""}${_}`)));const S=A("button",{class:"primary"},o+1<10?p("web_game_next"):p("web_game_finish"));S.addEventListener("click",()=>{o++,o<10?u():m()}),b.replaceChildren(A("p",{},p(I?"web_game_right":"web_game_wrong")),z,S),S.focus()};f.addEventListener("click",()=>y(!0)),x.addEventListener("click",()=>y(!1)),r.replaceChildren(h,A("div",{class:"learn-game-condition mono"},d.condition),g,b)},m=()=>{s.textContent="";const d=A("button",{class:"primary"},p("web_game_again"));d.addEventListener("click",()=>{o=l=0,u()}),r.replaceChildren(A("p",{class:"learn-game-result"},p("web_game_done_fmt",l,10)),A("p",{},p(l===10?"web_game_perfect":l>=10*.7?"web_game_good":"web_game_practice")),d)},c=A("button",{class:"primary"},p("web_game_start"));return c.addEventListener("click",u),r.append(A("p",{},p("web_game_intro")),c),n}renderImages(e,t){const n=A("figure",{class:"learn-figure"}),a=A("div",{class:"learn-images"});for(const s of e){const r=Fu(s);r&&a.append(A("img",{src:r,alt:"",loading:"lazy"}))}return n.append(a),t&&n.append(gt("figcaption",{},Re(t))),n}renderGraphic(e,t){const n=A("figure",{class:"learn-figure"}),a=Fu(e);return a&&n.append(A("img",{class:"learn-graphic",src:a,alt:"",loading:"lazy"})),t&&n.append(gt("figcaption",{},Re(t))),n}renderDiagram(e,t){const n=X1(e),a=A("figure",{class:"learn-figure"});if(!n)return a;const s=this.host.preview(n);s&&a.append(A("div",{class:"learn-preview",dir:"ltr"},s)),t&&a.append(gt("figcaption",{},Re(t)));const r=A("button",{},p("web_learn_open_in_editor"));return r.addEventListener("click",()=>this.host.openDiagram(n,e)),a.append(r),a}renderExercise(e){const t=A("section",{class:"learn-exercise","data-exercise":e.id}),n=()=>ge.exercise(e.id),a=A("span",{class:"learn-badge"},`✓ ${p("web_learn_solved")}`);a.hidden=!n().done,t.append(A("h4",{},`${p("web_learn_exercise")}: ${e.title}`,a),gt("div",{class:"learn-text"},kn(e.task)));const s=A("div",{class:"learn-result",role:"status"}),r=A("div",{class:"learn-hints"}),o=A("div",{class:"group"}),l=A("button",{class:"primary"},p("web_learn_open_exercise"));l.addEventListener("click",()=>{const c=n().xml;let d=em(e);if(c)try{d=Bl(c)}catch{}this.host.openExercise(e,d)});const u=A("button",{},p("web_learn_check"));if(u.addEventListener("click",()=>{const c=this.host.exerciseDocument(e.id);if(!c){s.className="learn-result info",s.textContent=p("web_learn_open_first");return}if(c.elements.every(Al)){s.className="learn-result info",s.textContent=p("web_learn_empty");return}this.host.stopSimulation();const d=Rx(c,e.tests,this.host.subprogramsFor(e.id),Wa),h=Gx(c),g=e.requires.map(b=>b==="forZaehlSchleife"?"forSchleife":b).filter(b=>b in k&&!h.has(k[b])),f=e.loopDepth!==void 0&&_o(c.elements)b.passed)&&g.length===0&&!f;this.showResult(s,d,g,x,f),x&&(ge.updateExercise(e.id,{done:!0}),a.hidden=!1)}),o.append(l,u),e.hints.length>0){const c=A("button",{},p("web_learn_hint"));c.addEventListener("click",()=>{const d=r.children.length;if(d>=e.hints.length)return;const h=e.hints.length>1?`**${p("web_learn_hint_fmt",d+1,e.hints.length)}:** `:"";r.append(gt("aside",{class:"lesson-note"},kn(h+e.hints[d]))),c.textContent=p("web_learn_hint_more"),c.toggleAttribute("disabled",d+1>=e.hints.length)}),o.append(c)}const m=A("button",{class:"danger-text"},p("web_learn_reset"));if(m.addEventListener("click",()=>{if(m.dataset.confirm!=="1"){m.dataset.confirm="1",m.textContent=p("web_learn_reset_confirm"),setTimeout(()=>{m.dataset.confirm="",m.textContent=p("web_learn_reset")},4e3);return}ge.resetExercise(e.id),this.host.resetExercise(e.id,em(e)),a.hidden=!0,s.replaceChildren(),s.className="learn-result",m.dataset.confirm="",m.textContent=p("web_learn_reset")}),o.append(m),t.append(o,r,s),Ru()&&e.solution){const c=X1(e.solution);if(c){const d=A("details",{class:"learn-solution"},A("summary",{},p("web_learn_solution")));d.addEventListener("toggle",()=>{if(!d.open||d.querySelector(".learn-preview"))return;const h=this.host.preview(c);h&&d.append(A("div",{class:"learn-preview",dir:"ltr"},h));const g=A("button",{},p("web_learn_open_in_editor"));g.addEventListener("click",()=>{this.host.openDiagram(c,e.solution);for(const f of e.subprograms){const x=X1(f);x&&this.host.openDiagram(x,f)}});for(const f of e.subprograms){const x=X1(f),b=x&&this.host.preview(x);b&&d.append(A("div",{class:"learn-preview",dir:"ltr"},b))}d.append(g)}),t.append(d)}}return t}showResult(e,t,n,a,s){var o,l,u,m,c;e.className="learn-result "+(a?"ok":"fail"),e.replaceChildren(A("p",{class:"learn-result-head"},a?`🎉 ${p("web_learn_passed")}`:p("web_learn_failed")));for(const d of n)e.append(A("p",{},`✗ ${p("web_learn_missing_fmt",CD(k[d]))}`));s&&e.append(A("p",{},`✗ ${p("web_visubot_depth_fmt",s)}`));const r=A("ul",{class:"learn-tests",dir:"auto"});for(const d of t){const h=d.test.world?t.filter(b=>b.test.world).indexOf(d)+1:0,g=d.test.world?`🗺 ${p("web_visubot_world_fmt",h)}`:d.test.actions?`🤖 ${p("web_visubot_actions")}`:d.test.sensors?`🎛 ${Object.entries(d.test.sensors).map(([b,y])=>`mbot.${b}() = ${y.join(" → ")}`).join(", ")}`:d.test.drive?`🤖 ${p("web_visubot_drive")}`:d.test.inputs.length?p("web_learn_input_fmt",d.test.inputs.join(", ")):p("web_learn_no_input"),f=[`${d.passed?"✓":"✗"} ${g}`],x=A("div",{class:"learn-test-detail"});if(d.test.drive&&x.append(A("span",{},`${p("web_learn_expected")}: `,A("code",{},U1(d.test.drive)||"–")),A("span",{},`${p("web_learn_actual")}: `,A("code",{},U1(d.result.drive??[])||"–"))),d.test.actions&&x.append(A("span",{},`${p("web_learn_expected")}: `,A("code",{},U1(d.test.actions)||"–")),A("span",{},`${p("web_learn_actual")}: `,A("code",{},U1(d.result.actions??[])||"–"))),d.test.led!==void 0){const b=y=>p(y?"web_visubot_led_on":"web_visubot_led_off");x.append(A("span",{},`💡 ${p("web_learn_expected")}: ${b(d.test.led)} · ${p("web_learn_actual")}: ${b(d.result.led)}`))}if(d.test.tone!==void 0){const b=y=>p(y?"web_visubot_tone_yes":"web_visubot_tone_no");x.append(A("span",{},`🔊 ${p("web_learn_expected")}: ${b(d.test.tone)} · ${p("web_learn_actual")}: ${b(d.result.tone)}`))}d.test.screen!==void 0&&x.append(A("span",{},`📺 ${p("web_learn_expected")}: `,A("code",{},d.test.screen),` · ${p("web_learn_actual")}: `,A("code",{},d.result.screen??"–"))),d.test.world&&(((l=(o=Wa(d.test.world))==null?void 0:o.goals)!=null&&l.length||(m=(u=Wa(d.test.world))==null?void 0:u.targets)!=null&&m.length)&&x.append(A("span",{},d.result.atGoal?`✓ ${p("web_visubot_goal_reached")}`:`✗ ${p("web_visubot_goal_missed")}`)),d.result.bumps&&x.append(A("span",{class:"learn-error"},`⚠︎ ${p("web_visubot_bumps")}: ${d.result.bumps}`))),(!d.test.drive&&!d.test.world&&!d.test.sensors&&!d.test.actions||d.result.outputs.length)&&x.append(A("span",{},`${p("web_learn_expected")}: `,A("code",{},d.test.expected.join(" | ")||"–")),A("span",{},`${p("web_learn_actual")}: `,A("code",{},d.result.outputs.join(" | ")||"–")));for(const b of d.test.files??[])x.append(A("span",{},`📄 ${b.name}, ${p("web_learn_expected")}: `,A("code",{},b.lines.join(" | ")||"–")),A("span",{},`📄 ${b.name}, ${p("web_learn_actual")}: `,A("code",{},Bh((c=d.result.files)==null?void 0:c.get(b.name)).join(" | ")||"–")));d.result.error&&x.append(A("span",{class:"learn-error"},Kn(d.result.error))),d.result.missingInput&&x.append(A("span",{class:"learn-error"},p("web_learn_missing_input"))),d.result.tooManySteps&&x.append(A("span",{class:"learn-error"},p("web_learn_too_many_steps"))),!d.passed&&d.result.unusedInputs&&x.append(A("span",{class:"learn-error"},p("web_learn_unused_input"))),r.append(A("li",{class:d.passed?"ok":"fail"},...f,x))}e.append(r)}renderChecklist(e,t,n){const a=A("ul",{class:"learn-checklist"});return e.forEach((s,r)=>{var c;const o=`${t}-${r}`,l=A("input",{type:"checkbox"});l.checked=!!(n&&((c=ge.lesson(n.id).checks)!=null&&c[o])),l.addEventListener("change",()=>{if(!n)return;const d={...ge.lesson(n.id).checks??{},[o]:l.checked};ge.updateLesson(n.id,{checks:d})});const u=A("label",{},l);u.insertAdjacentHTML("beforeend"," "+Re(s.text));const m=A("li",{},u);if(n&&s.step!==void 0){const d=s.step,h=p("web_learn_step_fmt",d+1,n.steps[d].title),g=A("button",{class:"link-button learn-check-link",title:h,"aria-label":`${p("web_learn_review")}: ${h}`},p("web_learn_review"));g.addEventListener("click",()=>{this.returnTo={lesson:n.id,step:ge.lesson(n.id).step,scroll:this.body.scrollTop},this.goToStep(n,d)}),m.append(g)}a.append(m)}),a}renderQuiz(e,t,n){const a=A("div",{class:"learn-quiz"}),s=A("p",{class:"learn-score",role:"status"}),r=()=>n?ge.lesson(n.id).quiz??{}:{},o=()=>{const l=r(),u=(h,g)=>h.pairs?h.pairs.every((f,x)=>l[`${t}-${g}-${x}`]!==void 0):l[`${t}-${g}`]!==void 0,m=(h,g)=>{var f;return h.pairs?h.pairs.every((x,b)=>tm(h)[l[`${t}-${g}-${b}`]]===h.pairs[b].right):(f=h.options[l[`${t}-${g}`]])==null?void 0:f.correct},c=e.filter(u).length,d=e.filter(m).length;s.textContent=c===e.length?p("web_learn_score_fmt",d,e.length):""};return e.forEach((l,u)=>{const m=`${t}-${u}`,c=A("fieldset",{},gt("legend",{},Re(l.question))),d=gt("p",{class:"learn-explanation"},Re(l.explanation??""));if(l.pairs){c.append(this.renderMatch(l,m,r,n,d,o),d),a.append(c);return}const h=g=>{c.querySelectorAll("button").forEach((f,x)=>{f.classList.toggle("right",g!==void 0&&l.options[x].correct),f.classList.toggle("wrong",g===x&&!l.options[x].correct),f.setAttribute("aria-pressed",String(g===x))}),d.hidden=g===void 0||!l.explanation};l.options.forEach((g,f)=>{const x=gt("button",{class:"learn-option"},Re(g.text));x.addEventListener("click",()=>{n&&ge.updateLesson(n.id,{quiz:{...r(),[m]:f}}),h(f),o()}),c.append(x)}),c.append(d),h(r()[m]),a.append(c)}),a.append(s),o(),a}renderMatch(e,t,n,a,s,r){const o=e.pairs,l=tm(e),u=A("div",{class:"learn-match"});let m={};const c=()=>a?n():m,d=x=>a?ge.updateLesson(a.id,{quiz:x}):m=x,h=x=>c()[`${t}-${x}`],g=o.map(x=>{const b=A("select",{class:"learn-match-select"});b.append(A("option",{value:""},"–")),l.forEach((w,I)=>b.append(A("option",{value:String(I)},w)));const y=gt("label",{class:"learn-match-left"},Re(x.left));return y.append(b),u.append(y),b}),f=()=>{const x=o.every((b,y)=>h(y)!==void 0);g.forEach((b,y)=>{const w=h(y);b.value=w===void 0?"":String(w),b.classList.toggle("right",x&&l[w]===o[y].right),b.classList.toggle("wrong",x&&l[w]!==o[y].right)}),s.hidden=!x||!e.explanation};return g.forEach((x,b)=>x.addEventListener("change",()=>{const y={...c()};x.value===""?delete y[`${t}-${b}`]:y[`${t}-${b}`]=Number(x.value),d(y),f(),r()})),f(),u}}function tm(i){return(i.pairs??[]).map(e=>e.right).sort((e,t)=>e.localeCompare(t,"de"))}const ZD=""+new URL("visubot-CyGFOI9V.webp",import.meta.url).href,i0="visustruct.visubot";function a0(){try{return localStorage.getItem(i0)}catch{return null}}function ri(){const i=a0();return i==="1"||i==="kurs"?"on":"off"}const Kh=()=>a0()==="2";function eg(){try{localStorage.setItem(i0,"2")}catch{}}const MD=()=>a0()!==null;function br(i){try{localStorage.setItem(i0,i==="on"?"1":"0")}catch{}}const LD=`VisuBot`,Rn=()=>ri()!=="off",nm=i=>i.replace(/[&<>"]/g,e=>({"&":"&","<":"<",">":">",'"':"""})[e]);function Po(){const i=Kh()?"object":ri(),e=(n,a)=>``,t={off:"web_visubot_world_visustruct_hint",on:"web_visubot_world_visubot_hint",object:"web_visuobject_world_hint"}[i];return`
${e("off","VisuStruct")}${e("on","🤖 VisuBot")}${e("object","VisuObject")}
- ${nm(p(t))}`}class WD{constructor(e=vi){v(this,"element");v(this,"world");v(this,"view");v(this,"loading");v(this,"status");v(this,"stage");v(this,"picker");v(this,"applied",0);v(this,"sent",0);v(this,"liveStatus");v(this,"viewport");v(this,"stopListening");v(this,"realSensors");v(this,"controls",{getBrightness:50,getLoudness:0,getPitch:0,getRoll:0});v(this,"pressTimers",new Map);v(this,"check");v(this,"checking",!1);v(this,"onWorldChange");this.world=new us(e),this.element=document.createElement("section"),this.element.className="visubot",this.element.innerHTML=`

${p("web_visubot_world")}

${p("web_visubot_world_in_preview")}

${ED()}${ND()}`,this.stage=this.element.querySelector(".visubot-stage"),this.picker=this.element.querySelector(".visubot-worlds"),this.status=this.element.querySelector(".visubot-status"),this.liveStatus=this.element.querySelector(".visubot-live"),this.viewport=this.element.querySelector(".visubot-viewport"),this.stopListening=le.listen(()=>this.updateLive()),this.setupControls(),this.check=this.element.querySelector(".visubot-check"),this.setupCheck(),this.updateLive(),this.updateStatus()}show(){this.loading??(this.loading=q(async()=>{const{Robot3D:e}=await import("./robot3d-io7_npI9.js");return{Robot3D:e}},[],import.meta.url).then(({Robot3D:e})=>{this.view=new e(this.stage),this.view.setWorld(this.world.setup),this.view.place(this.world.pose,this.world.trail),this.view.setLeds(this.world.leds)}).catch(()=>{this.stage.textContent=p("web_visubot_no_3d")}))}restoreViewport(){this.viewport.parentElement!==this.element&&this.liveStatus.after(this.viewport)}setWorlds(e){this.picker.replaceChildren(),this.picker.hidden=e.length<2,e.forEach((t,n)=>{const a=document.createElement("button");a.textContent=p("web_visubot_world_fmt",n+1),a.addEventListener("click",()=>this.useWorld(t,a)),this.picker.append(a)}),this.useWorld(e[0]??vi,this.picker.firstElementChild)}useWorld(e,t){var n,a,s,r,o;for(const l of this.picker.children)l.classList.toggle("active",l===t);e!==this.world.setup&&(this.world=new us(e),this.applied=0,this.sent=0,(n=this.view)==null||n.setWorld(e),(a=this.view)==null||a.place(this.world.pose,this.world.trail),(s=this.view)==null||s.setLed(void 0),(r=this.view)==null||r.setScreen(void 0),this.updateStatus(),(o=this.onWorldChange)==null||o.call(this))}reset(){var e,t,n;this.world.reset(),this.applied=0,this.sent=0,this.realSensors=void 0,(e=this.view)==null||e.place(this.world.pose,this.world.trail),(t=this.view)==null||t.setLed(void 0),(n=this.view)==null||n.setScreen(void 0),this.updateStatus()}prepare(e){e.robotSensors={...this.controls,...this.world.sensors()}}setupControls(){for(const e of this.element.querySelectorAll(".visubot-controls input[type=range]")){const t=e.parentElement.querySelector("output"),n=()=>{this.controls[e.name]=Number(e.value),t.textContent=e.value};e.addEventListener("input",n),n()}for(const e of this.element.querySelectorAll(".visubot-controls button[name]"))e.addEventListener("click",()=>{const t=e.name;this.controls[t]=!0,e.classList.add("pressed"),window.clearTimeout(this.pressTimers.get(t)),this.pressTimers.set(t,window.setTimeout(()=>{this.controls[t]=!1,e.classList.remove("pressed")},1e3))})}setupCheck(){for(const e of this.check.querySelectorAll("button[data-py]"))e.addEventListener("click",()=>{const{after:t,wait:n}=e.dataset;le.run(e.dataset.py).then(()=>t?new Promise(a=>setTimeout(a,Number(n))).then(()=>le.run(t)):void 0).catch(a=>this.liveFailed(a))});this.check.addEventListener("toggle",()=>void this.readCheck())}async readCheck(){if(!this.checking){this.checking=!0;try{for(;this.check.open&&le.connected;){for(const e of this.check.querySelectorAll("[data-sensor]")){if(!this.check.open||!le.connected)break;const t=e.dataset.sensor,n=await le.ask(St[t].python).catch(()=>{});n!==void 0&&(e.textContent=typeof St[t].simulated=="boolean"?n===!0||typeof n=="number"&&n!==0?"✓":"–":String(typeof n=="number"?Math.round(n*10)/10:n))}await new Promise(e=>setTimeout(e,200))}}finally{this.checking=!1}}}get live(){return le.connected}async prepareLive(e,t=[]){const n={};for(const a of new Set(["getDistance","getLine",...t])){const s=await le.ask(St[a].python);typeof St[a].simulated=="boolean"?n[a]=s===!0||typeof s=="number"&&s!==0:typeof St[a].simulated=="string"?n[a]=typeof s=="string"?s:String(St[a].simulated):n[a]=typeof s=="number"?a==="getDistance"?Math.round(s):s:0}this.realSensors=n,e.robotSensors={...this.controls,...this.world.sensors(),...n}}async drive(e){for(;this.sentsetTimeout(n,t.args[0]))}}liveFailed(e){le.disconnect(e instanceof Error?e.message:String(e))}updateLive(){this.liveStatus.textContent=ng(),this.liveStatus.classList.toggle("connected",le.connected),this.check.hidden=!le.connected,le.connected||(this.check.open=!1),this.updateStatus()}follow(e,t){var a,s,r,o;for(;this.appliedl!==0);this.world.tick(Xl),n&&((o=this.view)==null||o.moveTo(this.world.pose,this.world.trail,t)),this.updateStatus()}dispose(){var e;this.stopListening();for(const t of this.pressTimers.values())window.clearTimeout(t);(e=this.view)==null||e.dispose(),this.view=void 0,this.loading=void 0}updateStatus(){const e=this.world.lineState().toString(2).padStart(4,"0"),t=[`${p("web_visubot_distance")}: ${this.world.distance()} cm`,`${p("web_visubot_line")}: ${e}`];this.world.bumps>0&&t.push(`⚠︎ ${p("web_visubot_bumps")}: ${this.world.bumps}`),this.world.screen!==void 0&&t.push(`📺 ${this.world.screen}`),this.realSensors&&le.connected&&t.push(`🤖 ${p("web_visubot_distance")}: ${this.realSensors.getDistance} cm · ${p("web_visubot_line")}: ${Number(this.realSensors.getLine).toString(2).padStart(4,"0")}`),this.status.textContent=t.join(" · ")}}let J1;function tg(i,e){try{J1??(J1=new AudioContext);const t=J1.createOscillator(),n=J1.createGain();t.type="square",t.frequency.value=Math.max(20,Math.min(2e4,i)),n.gain.value=.05,t.connect(n).connect(J1.destination);const a=J1.currentTime+Math.min(Math.max(e,0),5e3)/1e3;t.start(),t.stop(a)}catch{}}function ED(){const i=(t,n,a,s,r)=>``,e=(t,n,a)=>``;return`
🎛 ${p("web_visubot_controls")} + ${nm(p(t))}`}class WD{constructor(e=vi){v(this,"element");v(this,"world");v(this,"view");v(this,"loading");v(this,"status");v(this,"stage");v(this,"picker");v(this,"applied",0);v(this,"sent",0);v(this,"liveStatus");v(this,"viewport");v(this,"stopListening");v(this,"realSensors");v(this,"controls",{getBrightness:50,getLoudness:0,getPitch:0,getRoll:0});v(this,"pressTimers",new Map);v(this,"check");v(this,"checking",!1);v(this,"onWorldChange");this.world=new us(e),this.element=document.createElement("section"),this.element.className="visubot",this.element.innerHTML=`

${p("web_visubot_world")}

${p("web_visubot_world_in_preview")}

${ED()}${ND()}`,this.stage=this.element.querySelector(".visubot-stage"),this.picker=this.element.querySelector(".visubot-worlds"),this.status=this.element.querySelector(".visubot-status"),this.liveStatus=this.element.querySelector(".visubot-live"),this.viewport=this.element.querySelector(".visubot-viewport"),this.stopListening=le.listen(()=>this.updateLive()),this.setupControls(),this.check=this.element.querySelector(".visubot-check"),this.setupCheck(),this.updateLive(),this.updateStatus()}show(){this.loading??(this.loading=q(async()=>{const{Robot3D:e}=await import("./robot3d-ZgnmvG6e.js");return{Robot3D:e}},[],import.meta.url).then(({Robot3D:e})=>{this.view=new e(this.stage),this.view.setWorld(this.world.setup),this.view.place(this.world.pose,this.world.trail),this.view.setLeds(this.world.leds)}).catch(()=>{this.stage.textContent=p("web_visubot_no_3d")}))}restoreViewport(){this.viewport.parentElement!==this.element&&this.liveStatus.after(this.viewport)}setWorlds(e){this.picker.replaceChildren(),this.picker.hidden=e.length<2,e.forEach((t,n)=>{const a=document.createElement("button");a.textContent=p("web_visubot_world_fmt",n+1),a.addEventListener("click",()=>this.useWorld(t,a)),this.picker.append(a)}),this.useWorld(e[0]??vi,this.picker.firstElementChild)}useWorld(e,t){var n,a,s,r,o;for(const l of this.picker.children)l.classList.toggle("active",l===t);e!==this.world.setup&&(this.world=new us(e),this.applied=0,this.sent=0,(n=this.view)==null||n.setWorld(e),(a=this.view)==null||a.place(this.world.pose,this.world.trail),(s=this.view)==null||s.setLed(void 0),(r=this.view)==null||r.setScreen(void 0),this.updateStatus(),(o=this.onWorldChange)==null||o.call(this))}reset(){var e,t,n;this.world.reset(),this.applied=0,this.sent=0,this.realSensors=void 0,(e=this.view)==null||e.place(this.world.pose,this.world.trail),(t=this.view)==null||t.setLed(void 0),(n=this.view)==null||n.setScreen(void 0),this.updateStatus()}prepare(e){e.robotSensors={...this.controls,...this.world.sensors()}}setupControls(){for(const e of this.element.querySelectorAll(".visubot-controls input[type=range]")){const t=e.parentElement.querySelector("output"),n=()=>{this.controls[e.name]=Number(e.value),t.textContent=e.value};e.addEventListener("input",n),n()}for(const e of this.element.querySelectorAll(".visubot-controls button[name]"))e.addEventListener("click",()=>{const t=e.name;this.controls[t]=!0,e.classList.add("pressed"),window.clearTimeout(this.pressTimers.get(t)),this.pressTimers.set(t,window.setTimeout(()=>{this.controls[t]=!1,e.classList.remove("pressed")},1e3))})}setupCheck(){for(const e of this.check.querySelectorAll("button[data-py]"))e.addEventListener("click",()=>{const{after:t,wait:n}=e.dataset;le.run(e.dataset.py).then(()=>t?new Promise(a=>setTimeout(a,Number(n))).then(()=>le.run(t)):void 0).catch(a=>this.liveFailed(a))});this.check.addEventListener("toggle",()=>void this.readCheck())}async readCheck(){if(!this.checking){this.checking=!0;try{for(;this.check.open&&le.connected;){for(const e of this.check.querySelectorAll("[data-sensor]")){if(!this.check.open||!le.connected)break;const t=e.dataset.sensor,n=await le.ask(St[t].python).catch(()=>{});n!==void 0&&(e.textContent=typeof St[t].simulated=="boolean"?n===!0||typeof n=="number"&&n!==0?"✓":"–":String(typeof n=="number"?Math.round(n*10)/10:n))}await new Promise(e=>setTimeout(e,200))}}finally{this.checking=!1}}}get live(){return le.connected}async prepareLive(e,t=[]){const n={};for(const a of new Set(["getDistance","getLine",...t])){const s=await le.ask(St[a].python);typeof St[a].simulated=="boolean"?n[a]=s===!0||typeof s=="number"&&s!==0:typeof St[a].simulated=="string"?n[a]=typeof s=="string"?s:String(St[a].simulated):n[a]=typeof s=="number"?a==="getDistance"?Math.round(s):s:0}this.realSensors=n,e.robotSensors={...this.controls,...this.world.sensors(),...n}}async drive(e){for(;this.sentsetTimeout(n,t.args[0]))}}liveFailed(e){le.disconnect(e instanceof Error?e.message:String(e))}updateLive(){this.liveStatus.textContent=ng(),this.liveStatus.classList.toggle("connected",le.connected),this.check.hidden=!le.connected,le.connected||(this.check.open=!1),this.updateStatus()}follow(e,t){var a,s,r,o;for(;this.appliedl!==0);this.world.tick(Xl),n&&((o=this.view)==null||o.moveTo(this.world.pose,this.world.trail,t)),this.updateStatus()}dispose(){var e;this.stopListening();for(const t of this.pressTimers.values())window.clearTimeout(t);(e=this.view)==null||e.dispose(),this.view=void 0,this.loading=void 0}updateStatus(){const e=this.world.lineState().toString(2).padStart(4,"0"),t=[`${p("web_visubot_distance")}: ${this.world.distance()} cm`,`${p("web_visubot_line")}: ${e}`];this.world.bumps>0&&t.push(`⚠︎ ${p("web_visubot_bumps")}: ${this.world.bumps}`),this.world.screen!==void 0&&t.push(`📺 ${this.world.screen}`),this.realSensors&&le.connected&&t.push(`🤖 ${p("web_visubot_distance")}: ${this.realSensors.getDistance} cm · ${p("web_visubot_line")}: ${Number(this.realSensors.getLine).toString(2).padStart(4,"0")}`),this.status.textContent=t.join(" · ")}}let J1;function tg(i,e){try{J1??(J1=new AudioContext);const t=J1.createOscillator(),n=J1.createGain();t.type="square",t.frequency.value=Math.max(20,Math.min(2e4,i)),n.gain.value=.05,t.connect(n).connect(J1.destination);const a=J1.currentTime+Math.min(Math.max(e,0),5e3)/1e3;t.start(),t.stop(a)}catch{}}function ED(){const i=(t,n,a,s,r)=>``,e=(t,n,a)=>``;return`
🎛 ${p("web_visubot_controls")}

${p("web_visubot_controls_hint")}

${i("getBrightness","web_visubot_sensor_brightness",0,100,50)} ${i("getLoudness","web_visubot_sensor_loudness",0,100,0)} @@ -60348,7 +60348,7 @@ ${a}`));this.body.append(s),this.foldReference(s)}}foldReference(e){const t="vis ${e("mbot2.drive_power(30, -30)","web_visubot_check_forward",t)}${e("mbot2.drive_power(30, 30)","web_visubot_check_spin",t)}
${n}
- `}function ng(){return le.connecting?p("web_visubot_connecting"):le.connected?`✓ ${p("web_visubot_connected")}`:le.error?`⚠︎ ${p("web_visubot_link_error")}: ${le.error}`:""}async function FD(){if(le.connected||le.connecting)return le.disconnect();try{await le.connect()}catch(i){await le.disconnect(i.name==="NotFoundError"?void 0:i.message)}}const ut=i=>()=>ze(I.anweisung,{textLines:[i]}),JD=[{key:"web_visubot_el_forward",group:"drive",type:I.anweisung,make:ut("mbot.forward()")},{key:"web_visubot_el_backward",group:"drive",type:I.anweisung,make:ut("mbot.backward()")},{key:"web_visubot_el_right",group:"drive",type:I.anweisung,make:ut("mbot.turnRight()")},{key:"web_visubot_el_left",group:"drive",type:I.anweisung,make:ut("mbot.turnLeft()")},{key:"web_visubot_el_drive",group:"wheels",type:I.anweisung,make:ut("mbot.drive(30, 30)")},{key:"web_visubot_el_stop",group:"wheels",type:I.anweisung,make:ut("mbot.stop()")},{key:"web_visubot_el_led",group:"output",type:I.anweisung,make:ut("mbot.setLed(255, 0, 0)")},{key:"web_visubot_el_led_off",group:"output",type:I.anweisung,make:ut("mbot.ledOff()")},{key:"web_visubot_el_led_color",group:"output",type:I.anweisung,make:ut('mbot.led(0).setColor("grün")')},{key:"web_visubot_el_tone",group:"output",type:I.anweisung,make:ut("mbot.playTone(440, 300)")},{key:"web_visubot_el_text",group:"output",type:I.anweisung,make:ut('mbot.showText("Hallo")')},{key:"web_visubot_el_wait",group:"wait",type:I.anweisung,make:ut("mbot.pause(100)")},{key:"web_visubot_el_emotion",group:"emotion",type:I.anweisung,make:ut('mbot.emotion("smile")')},{key:"web_visubot_el_timer",group:"wait",type:I.anweisung,make:ut("mbot.resetTimer()")}],ig=[{key:"web_visubot_sensor_distance",group:"distance",text:"mbot.getDistance()"},{key:"web_visubot_sensor_line",group:"line",text:"mbot.getLine()"},{key:"web_visubot_sensor_line_left",group:"line",text:"mbot.isLineLeft()"},{key:"web_visubot_sensor_line_right",group:"line",text:"mbot.isLineRight()"},{key:"web_visubot_sensor_color",group:"color",get text(){return`mbot.getColor().equals("${th("red")}")`}},{key:"web_visubot_sensor_button_a",group:"buttons",text:"mbot.isButtonA()"},{key:"web_visubot_sensor_button_b",group:"buttons",text:"mbot.isButtonB()"},{key:"web_visubot_sensor_joy_up",group:"buttons",text:"mbot.isJoystickUp()"},{key:"web_visubot_sensor_joy_down",group:"buttons",text:"mbot.isJoystickDown()"},{key:"web_visubot_sensor_joy_left",group:"buttons",text:"mbot.isJoystickLeft()"},{key:"web_visubot_sensor_joy_right",group:"buttons",text:"mbot.isJoystickRight()"},{key:"web_visubot_sensor_brightness",group:"light",text:"mbot.getBrightness()"},{key:"web_visubot_sensor_loudness",group:"light",text:"mbot.getLoudness()"},{key:"web_visubot_sensor_pitch",group:"tilt",text:"mbot.getPitch()"},{key:"web_visubot_sensor_roll",group:"tilt",text:"mbot.getRoll()"},{key:"web_visubot_sensor_shake",group:"tilt",text:"mbot.isShaken()"},{key:"web_visubot_sensor_timer",group:"timer",text:"mbot.getTimer()"},{key:"web_visubot_sensor_battery",group:"timer",text:"mbot.getBattery()"}],sa=()=>typeof window.showDirectoryPicker=="function";class Hs{constructor(e){this.handle=e}get name(){return this.handle.name}async list(){const e=[];for await(const t of this.handle.values())t.name.startsWith(".")||e.push({kind:t.kind,name:t.name});return e}async dir(e,t=!1){return new Hs(await this.handle.getDirectoryHandle(e,{create:t}))}async read(e){return(await(await this.handle.getFileHandle(e)).getFile()).text()}async write(e,t){const a=await(await this.handle.getFileHandle(e,{create:!0})).createWritable();await a.write(t),await a.close()}async has(e){try{return await this.handle.getFileHandle(e),!0}catch{try{return await this.handle.getDirectoryHandle(e),!0}catch{return!1}}}async remove(e){await this.handle.removeEntry(e,{recursive:!0})}}const RD="visustruct-workspace";function GD(){return new Promise((i,e)=>{const t=indexedDB.open(RD,1);t.onupgradeneeded=()=>{t.result.createObjectStore("files"),t.result.createObjectStore("meta")},t.onsuccess=()=>i(t.result),t.onerror=()=>e(t.error)})}async function It(i,e,t){const n=await GD();return new Promise((a,s)=>{const r=t(n.transaction(i,e).objectStore(i));r.onsuccess=()=>a(r.result),r.onerror=()=>s(r.error)})}class s0{constructor(e,t){this.name=e,this.path=t}key(e){return this.path+e}async list(){const e=await It("files","readonly",n=>n.getAllKeys()),t=new Map;for(const n of e){if(!n.startsWith(this.path)||n===this.path)continue;const a=n.slice(this.path.length),s=a.indexOf("/"),r=s<0?a:a.slice(0,s);t.has(r)||t.set(r,{kind:s<0?"file":"directory",name:r})}return[...t.values()]}async dir(e,t=!1){const n=this.key(e)+"/";if(!(await It("files","readonly",s=>s.count(n))>0)){if(!t)throw new DOMException(e,"NotFoundError");await It("files","readwrite",s=>s.put("",n))}return new s0(e,n)}async read(e){const t=await It("files","readonly",n=>n.get(this.key(e)));if(typeof t!="string")throw new DOMException(e,"NotFoundError");return t}async write(e,t){await It("files","readwrite",n=>n.put(t,this.key(e)))}async has(e){const t=await It("files","readonly",a=>a.count(this.key(e))),n=await It("files","readonly",a=>a.count(this.key(e)+"/"));return t+n>0}async remove(e){const t=this.key(e);await It("files","readwrite",n=>n.delete(t)),await It("files","readwrite",n=>n.delete(IDBKeyRange.bound(t+"/",t+"/￿")))}}async function HD(i,e="folder"){const t=await window.showDirectoryPicker({id:e==="folder"?"visustruct-workspace":e,mode:"readwrite"}),n=i&&t.name!==i?await t.getDirectoryHandle(i,{create:!0}):t;return await It("meta","readwrite",a=>a.put(n,e)),{kind:"folder",root:new Hs(n)}}function im(){return{kind:"browser",root:new s0("VisuStruct","")}}async function VD(i="folder"){var e;try{const t=await It("meta","readonly",a=>a.get(i));if(!t)return;const n=await((e=t.queryPermission)==null?void 0:e.call(t,{mode:"readwrite"}))??"granted";return{handle:t,ready:n==="granted"}}catch{return}}async function am(i){var t;return(await((t=i.requestPermission)==null?void 0:t.call(i,{mode:"readwrite"}))??"granted")==="granted"?{kind:"folder",root:new Hs(i)}:void 0}async function QD(i="folder"){try{await It("meta","readwrite",e=>e.delete(i))}catch{}}const ra="learnProgress.json",oa="lernstand.json",la="visustruct.files.mode",sm="visustruct.files.expanded";function qD(i){try{const e=JSON.parse(ag(i)??"[]");return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}catch{return[]}}function ag(i){try{return localStorage.getItem(i)}catch{return null}}function ua(i,e){try{e===null?localStorage.removeItem(i):localStorage.setItem(i,e)}catch{}}const U=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function rm(i){return new Promise(e=>{const t=document.createElement("div");t.className="confirm";const n=(i.choices??[]).map(o=>``).join("");t.innerHTML=`