<snapdata remixID="12221220"><project name="List Search" app="Snap! 7, https://snap.berkeley.edu" version="2"><notes>A decorated list search engine.&#xD;&#xD; - - CONTROLS - -&#xD;1. [is] search filter&#xD;2. [contains] search filter&#xD;3. [starts with] search filter&#xD;4. [ends with] search filter&#xD;S. Enter search query&#xD;&#xD;NOTE: The [contains] search requires Javascript to be enabled.&#xD;&#xD;ANOTHER NOTE: The countries included and not included are not a reflection of my political views, they are just from a list I copied online.</notes><thumbnail>data:image/png;base64,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</thumbnail><scenes select="1"><scene name="List Search"><notes>A decorated list search engine.&#xD;&#xD; - - CONTROLS - -&#xD;1. [is] search filter&#xD;2. [contains] search filter&#xD;3. [starts with] search filter&#xD;4. [ends with] search filter&#xD;S. Enter search query&#xD;&#xD;NOTE: The [contains] search requires Javascript to be enabled.&#xD;&#xD;ANOTHER NOTE: The countries included and not included are not a reflection of my political views, they are just from a list I copied online.</notes><hidden></hidden><headers></headers><code></code><blocks><block-definition s="ask for files of types %&apos;types&apos; for %&apos;callback&apos;" type="command" category="sensing"><comment x="0" y="0" w="451.79785156250006" collapsed="false">Opens the file select dialog. When the user has submitted at least one file, it will run the ring with the file list as the input.&#xD;&#xD;To make it accept only a certain file extension, write the file extension, including the dot, or the MIME type (e.g. &quot;.txt&quot;, &quot;text/plain&quot;) in the text field. You can make it accept multiple file extension types by adding more text fields.&#xD;&#xD;Remove all input fields to make it accept all files. </comment><header></header><code></code><translations></translations><inputs><input type="%mult%txt"></input><input type="%cmdRing"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>typesList</l><l>callback</l></list><l>var receiver = this;&#xD;&#xD;var input = document.createElement("input");&#xD;input.type = "file";&#xD;input.id = "fileInput";&#xD;input.style = "position:absolute;display:none;"&#xD;input.multiple = true;&#xD;document.body.appendChild(input);&#xD;console.log(callback);&#xD;&#xD;input.onchange = function() {&#xD;  delete input.onchange;&#xD;&#xD;  //copied from Process.prototype.fork&#xD;  var proc = new Process();&#xD;  var stage = receiver.parentThatIsA(StageMorph);&#xD;  proc.instrument = receiver.instrument;&#xD;  proc.receiver = receiver;&#xD;  proc.initializeFor(callback, new List([new List(input.files)]) );&#xD;  stage.threads.processes.push(proc);&#xD;}&#xD;&#xD;var types = typesList.asArray();&#xD;&#xD;//compile types list to comma separated list&#xD;var accept = "";&#xD;&#xD;if (types.length &gt; 0) {&#xD;  for (let i in types) {&#xD;    let v = types[i];&#xD;    &#xD;    if (typeof v == "string") {&#xD;      accept += v&#xD;    }&#xD;    &#xD;    if (i + 1 &lt; types.length) { //last item doesn&apos;t have a comma at the end&#xD;      accept += ","&#xD;    }&#xD;  }&#xD;} else {&#xD;  accept = "*.*"; //i think that means all files&#xD;}&#xD;&#xD;input.accept = accept; &#xD;input.click();</l></block><list><block var="types"/><block var="callback"/></list></block></script></block-definition><block-definition s="%&apos;prop&apos; of file %&apos;file&apos;" type="reporter" category="sensing"><comment x="0" y="0" w="90" collapsed="false">Gets an attribute of a file.&#xD;&#xD;The last modified attribute reports the time the file was last modified in milliseconds since the Unix epoch (Jan 1, 1970, 12:00 AM)</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">name<options>name&#xD;size&#xD;type&#xD;last modified</options></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportEquals"><block var="prop"/><l>name</l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>file</l></list><l>return file.name;</l></block><list><block var="file"/></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="prop"/><l>size</l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>file</l></list><l>return file.size;</l></block><list><block var="file"/></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="prop"/><l>type</l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>file</l></list><l>return file.type;</l></block><list><block var="file"/></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="prop"/><l>last modified</l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>file</l></list><l>return file.lastModified;</l></block><list><block var="file"/></list></block></block></script></block></script></block-definition><block-definition s="read file %&apos;file&apos; as %&apos;type&apos;" type="reporter" category="sensing"><comment x="0" y="0" w="90" collapsed="false">Reads a file as a certain type.&#xD;&#xD;The binary string type is the file&apos;s actual contents in binary (I think). So can someone please make a MIDI player with my library.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%s" readonly="true">text<options>text&#xD;binary string&#xD;costume&#xD;vector costume&#xD;sound</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="evaluate"><block s="reportJSFunction"><list><l>file</l><l>type</l><l>process</l></list><l>if (!(file instanceof File)) throw new Error("Not a file");&#xD;&#xD;var reader = new FileReader();&#xD;var readerResult;&#xD;&#xD;var isMedia = type == "costume" || type == "vector costume" || type == "sound";&#xD;&#xD;reader.addEventListener("load", function() {&#xD;    var res = reader.result;&#xD;&#xD;    if (type == "costume" || type == "vector costume") {&#xD;        var img = document.createElement("img");&#xD;        &#xD;        img.onload = function() {&#xD;          //for bitmap costume&#xD;          if (type == "costume") {&#xD;            var canvas = document.createElement("canvas");&#xD;            canvas.width = img.width;&#xD;            canvas.height = img.height;&#xD;            canvas.getContext("2d").drawImage(img, 0, 0);&#xD;&#xD;            readerResult = new Costume(canvas, file.name);&#xD;          } else if (type == "vector costume") { //for vector costume&#xD;            readerResult = new SVG_Costume(img, file.name);&#xD;          }&#xD;&#xD;          process.resume()&#xD;        }&#xD;&#xD;        img.src = res;&#xD;    } else if (type == "sound") {&#xD;       var audioElem = document.createElement("audio");&#xD;&#xD;       audioElem.type = file.type;&#xD;       audioElem.src = res;&#xD;&#xD;       readerResult = new Sound(audioElem, file.name);&#xD;       process.resume(); &#xD;    } else {&#xD;        readerResult = res;&#xD;        process.resume();&#xD;    }&#xD;})&#xD;    &#xD;if (isMedia) {&#xD;  if (type == "costume" &amp;&amp; file.type.slice(0, 6) != "image/") throw new Error("Not an image file");&#xD;  if (type == "vector costume" &amp;&amp; file.type != "image/svg+xml") throw new Error("Not an SVG file");&#xD;  if (type == "sound" &amp;&amp; file.type.slice(0, 6) != "audio/") throw new Error("Not an audio file");&#xD;&#xD;  reader.readAsDataURL(file);&#xD;} else if (type == "text") {&#xD;  reader.readAsText(file);&#xD;} else if (type == "binary string") {&#xD;  reader.readAsBinaryString(file);&#xD;} else {&#xD;  throw new Error("Incorrect type");&#xD;}&#xD;&#xD;process.homeContext.variables.addVar("res")&#xD;process.pause();&#xD;&#xD;return function() {&#xD;  return readerResult;&#xD;}</l></block><list><block var="file"/><block var="type"/></list></block><list></list></block></block></script></block-definition><block-definition s="is %&apos;file&apos; a %&apos;type&apos; file?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%txt" readonly="true">text<options>image&#xD;audio&#xD;video&#xD;text&#xD;SVG&#xD;MIDI&#xD;any</options></input></inputs><script><block s="doIf"><block s="evaluate"><block s="reportJSFunction"><list><l>file</l></list><l>return !(file instanceof File);</l></block><list><block var="file"/></list></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="type"/><l>any</l></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="type"/><l>MIDI</l></block><script><block s="doReport"><block s="reportEquals"><l>mid</l><block s="reportListItem"><l>2</l><block s="reportTextSplit"><custom-block s="%s of file %l"><l>type</l><block var="file"/></custom-block><l>/</l></block></block></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="type"/><l>SVG</l></block><script><block s="doReport"><block s="reportEquals"><custom-block s="%s of file %l"><l>type</l><block var="file"/></custom-block><l>image/svg+xml</l></block></block></script></block><block s="doReport"><block s="reportEquals"><block var="type"/><block s="reportListItem"><l>1</l><block s="reportTextSplit"><custom-block s="%s of file %l"><l>type</l><block var="file"/></custom-block><l>/</l></block></block></block></block></script></block-definition><block-definition s="filled costume %&apos;width&apos; × %&apos;height&apos; colored %&apos;color&apos;" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs><input type="%n">80</input><input type="%n">100</input><input type="%clr"></input></inputs><script><block s="doReport"><block s="reportNewCostumeStretched"><block s="reportNewCostume"><block s="reportNewList"><list><block s="evaluate"><block s="reportJSFunction"><list><l>color</l></list><l>return new List([&#xD; color.r,&#xD; color.g,&#xD; color.b,&#xD;     255]);</l></block><list><block var="color"/></list></block></list></block><l>1</l><l>1</l></block><block s="reportVariadicProduct"><list><block var="width"/><l>100</l></list></block><block s="reportVariadicProduct"><list><block var="height"/><l>100</l></list></block></block></block></script></block-definition><block-definition s="alter speed of sound %&apos;sound&apos; by %&apos;percent&apos; %" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>§_soundsMenu</options></input><input type="%n">50</input></inputs><script><custom-block s="let %upvar be %s"><l>result</l><block s="reportNewSoundFromSamples"><block s="reportGetSoundAttribute"><l><option>samples</option></l><block var="sound"/></block><block s="reportVariadicProduct"><list><block s="reportGetSoundAttribute"><l><option>sample rate</option></l><block var="sound"/></block><block s="reportQuotient"><block s="reportRound"><block s="reportVariadicProduct"><list><block s="reportDifference"><block s="reportQuotient"><block s="reportVariadicSum"><list><block var="percent"/><l>100</l></list></block><l>100</l></block><l>1</l></block><block s="reportPower"><l>10</l><l>15</l></block></list></block></block><block s="reportPower"><l>10</l><l>15</l></block></block></list></block></block></custom-block><block s="doRun"><block s="reportJSFunction"><list><l>snd</l><l>name</l></list><l>snd.name = name;</l></block><list><block var="result"/><block s="reportGetSoundAttribute"><l><option>name</option></l><block var="sound"/></block></list></block><block s="doReport"><block var="result"/></block></script></block-definition><block-definition s="current os" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>var userAgent = navigator.userAgent,&#xD;      platform = navigator.platform,&#xD;      macosPlatforms = [&apos;Macintosh&apos;, &apos;MacIntel&apos;, &apos;MacPPC&apos;, &apos;Mac68K&apos;],&#xD;      windowsPlatforms = [&apos;Win32&apos;, &apos;Win64&apos;, &apos;Windows&apos;, &apos;WinCE&apos;],&#xD;      iosPlatforms = [&apos;iPhone&apos;, &apos;iPad&apos;, &apos;iPod&apos;],&#xD;      os = null;&#xD;&#xD;  if (macosPlatforms.indexOf(platform) !== -1) {&#xD;    os = &apos;Mac OS&apos;;&#xD;  } else if (iosPlatforms.indexOf(platform) !== -1) {&#xD;    os = &apos;iOS&apos;;&#xD;  } else if (windowsPlatforms.indexOf(platform) !== -1) {&#xD;    os = &apos;Windows&apos;;&#xD;  } else if (/Android/.test(userAgent)) {&#xD;    os = &apos;Android&apos;;&#xD;  } else if (!os &amp;&amp; /Linux/.test(platform)) {&#xD;    os = &apos;Linux&apos;;&#xD;  }&#xD;&#xD;  return os;</l></block><list></list></block></block></script></block-definition><block-definition s="right mouse down?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportEquals"><custom-block s="mouse button"></custom-block><l>2</l><comment w="90" collapsed="false">You can modify this script to 1, 3, or 4 to detect different buttons.</comment></block></block></script></block-definition><block-definition s="mouse button" type="reporter" category="sensing"><comment x="0" y="0" w="274" collapsed="false">Reports the currently pressed mouse button&apos;s ID (i.e. middle click is 1, right-click is 2). If no buttons are currently being pressed, it will report -1. If multiple are pressed at once, it will report the ID of the button most recently pressed. This doesn&apos;t work for left clicks, however. For that you need to use &apos;mouse down?&apos;.</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>if (!window.buttonClicked){&#xD;window.buttonClicked = -1;&#xD;window.onmousedown = e =&gt; buttonClicked = e.button;&#xD;window.onmouseup = e =&gt; buttonClicked = -1;&#xD;}&#xD;return buttonClicked || -1;</l></block><list></list></block></block></script></block-definition><block-definition s="export costume %&apos;costume&apos; named %&apos;name&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>§_costumesMenu</options></input><input type="%s">costume</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>costume</l></list><l>if (costume instanceof List) throw new Error(`Costume exporting does&#xD;not currently support lists`);&#xD;if (costume == &apos;&apos; || (!(costume instanceof Costume) &amp;&amp; !(this.costumes&#xD;.itemsArray().map(e =&gt; e.name).includes(costume)))) throw new Error("Not a Costume");</l></block><list><block var="costume"/></list></block><block s="doSetVar"><l>costume</l><block s="reportNewCostumeStretched"><block var="costume"/><l>100</l><l>100</l></block></block><block s="doRun"><block s="reportJSFunction"><list><l>costume, name</l></list><l>if (!(costume instanceof Costume)) throw new Error("Not a Costume");&#xD;&#xD;var data = costume.contents.toDataURL(),&#xD;    lnk = document.createElement("a");&#xD;lnk.download = name;&#xD;lnk.href = data;&#xD;lnk.click();</l></block><list><block var="costume"/><block var="name"/></list></block></script></block-definition><block-definition s="export sound %&apos;sound&apos; named %&apos;name&apos;" type="command" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>§_soundsMenu</options></input><input type="%s">sound</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>sound, name</l></list><l>var lnk = document.createElement("a");&#xD;lnk.href = sound.audio.src;&#xD;lnk.download = name;&#xD;lnk.click();</l></block><list><block s="reportIfElse"><block s="reportIsA"><block var="sound"/><l><option>sound</option></l></block><block var="sound"/><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportGetSoundAttribute"><l><option>name</option></l><l></l></block><block var="sound"/></block></autolambda><list></list></block><block s="reportGet"><l><option>sounds</option></l></block></block></block><block var="name"/></list></block></script></block-definition><block-definition s="set flag %&apos;which&apos; to %&apos;tf&apos;" type="command" category="sensing"><comment x="0" y="0" w="254.6666666666666" collapsed="false">Allows changing global settings programmatically.&#xD;This block is for Boolean settings; use &apos;set value&apos; for non-Boolean values.</comment><header></header><code></code><translations>pt:altera o valor da configuração _ para _&#xD;</translations><inputs><input type="%s" readonly="true"><options>presentation mode&#xD;retina display support&#xD;long form input dialog&#xD;plain prototype labels&#xD;input sliders&#xD;execute on slider change&#xD;clicking sound&#xD;turbo mode&#xD;flat design&#xD;keyboard editing&#xD;visible stepping&#xD;thread safe scripts&#xD;prefer smooth animations&#xD;flat line ends&#xD;codification support&#xD;inheritance support&#xD;hyper blocks support</options></input><input type="%b"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>which</l><l>tf</l></list><l>var   stage = this.parentThatIsA(StageMorph),&#xD;        ide = stage.parentThatIsA(IDE_Morph),&#xD;        world = stage.parentThatIsA(WorldMorph),&#xD;        thisObj = this;&#xD;&#xD;if (tf != !!tf) return;&#xD;&#xD;try{&#xD;ide.savingPreferences = false;&#xD;&#xD;switch (which) {&#xD;    case &apos;presentation mode&apos;:&#xD;        if (tf != ide.isAppMode) ide.toggleAppMode();&#xD;        break;&#xD;    case &apos;retina display support&apos;:&#xD;        if (tf != isRetinaEnabled()) ide.toggleRetina();&#xD;        break;&#xD;    case &apos;long form input dialog&apos;:&#xD;        if (tf != InputSlotDialogMorph.prototype.isLaunchingExpanded)&#xD;            ide.toggleLongFormInputDialog();&#xD;        break;&#xD;    case &apos;plain prototype labels&apos;:&#xD;        if (tf != BlockLabelPlaceHolderMorph.prototype.plainLabel)&#xD;            ide.togglePlainPrototypeLabels();&#xD;        break;&#xD;    case &apos;input sliders&apos;:&#xD;        MorphicPreferences.useSliderForInput = tf;&#xD;        break;&#xD;    case &apos;execute on slider change&apos;:&#xD;        ArgMorph.prototype.executeOnSliderEdit = tf;&#xD;        break;&#xD;    case &apos;clicking sound&apos;:&#xD;        if (tf != !!BlockMorph.prototype.snapSound)&#xD;            BlockMorph.prototype.toggleSnapSound();&#xD;        break;&#xD;    case &apos;turbo mode&apos;:&#xD;        if (tf != stage.isFastTracked)&#xD;            ide.toggleFastTracking();&#xD;        break;&#xD;    case &apos;flat design&apos;:&#xD;        if (tf == MorphicPreferences.isFlat) break;&#xD;        if (tf)&#xD;            ide.flatDesign();&#xD;        else&#xD;            ide.defaultDesign();&#xD;        break;&#xD;    case &apos;keyboard editing&apos;:&#xD;        if (thisObj.scripts.focus &amp;&amp; !tf) {&#xD;            thisObj.scripts.focus.stopEditing();&#xD;        } else if (tf &amp;&amp; !thisObj.scripts.focus) {&#xD;            thisObj.scripts.toggleKeyboardEntry();&#xD;        };&#xD;        break;&#xD;    case &apos;visible stepping&apos;:&#xD;        if (tf != Process.prototype.enableSingleStepping)&#xD;            ide.toggleSingleStepping();&#xD;        break;&#xD;    case &apos;thread safe scripts&apos;:&#xD;        stage.isThreadSafe = tf;&#xD;        break;&#xD;    case &apos;prefer smooth animations&apos;:&#xD;        if (tf != (StageMorph.prototype.frameRate &gt; 0))&#xD;            ide.toggleVariableFrameRate();&#xD;        break;&#xD;    case &apos;flat line ends&apos;:&#xD;        SpriteMorph.prototype.useFlatLineEnds = tf;&#xD;        break;&#xD;    case &apos;codification support&apos;:&#xD;        if (tf != StageMorph.prototype.enableCodeMapping) {&#xD;            StageMorph.prototype.enableCodeMapping = tf;&#xD;            ide.currentSprite.blocksCache.variables = null;&#xD;            ide.currentSprite.paletteCache.variables = null;&#xD;            ide.refreshPalette();&#xD;        }&#xD;        break;&#xD;    case &apos;inheritance support&apos;:&#xD;        if (tf != StageMorph.prototype.enableInheritance) {&#xD;            StageMorph.prototype.enableInheritance = tf;&#xD;            ide.currentSprite.blocksCache.variables = null;&#xD;            ide.currentSprite.paletteCache.variables = null;&#xD;            ide.refreshPalette();&#xD;        }&#xD;        break;&#xD;    case &apos;hyper blocks support&apos;:&#xD;        Process.prototype.enableHyperOps = tf;&#xD;        break;&#xD;};&#xD;}&#xD;finally {&#xD;ide.savingPreferences = false;&#xD;};&#xD;</l></block><list><block var="which"/><block var="tf"/></list></block></script></block-definition><block-definition s="set value %&apos;which&apos; to %&apos;value&apos;" type="command" category="sensing"><comment x="0" y="0" w="254.6666666666666" collapsed="false">Allows changing global settings programmatically.&#xD;This block is for numeric or text settings; use&#xD;&apos;set flag&apos; for Boolean values.</comment><header></header><code></code><translations>pt:altera o valor da configuração _ para _&#xD;</translations><inputs><input type="%s" readonly="true"><options>project notes&#xD;project name&#xD;language&#xD;zoom blocks&#xD;stage size&#xD;stage scale&#xD;visible palette</options></input><input type="%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>which</l><l>value</l></list><l>var   stage = this.parentThatIsA(StageMorph),&#xD;        ide = stage.parentThatIsA(IDE_Morph),&#xD;        world = stage.parentThatIsA(WorldMorph);&#xD;&#xD;try {&#xD;ide.savingPreferences = false;&#xD;&#xD;switch (which.split(&apos;&apos;)[0].toLocaleUpperCase()+which.slice(1)) {&#xD;    case &apos;Project notes&apos;:&#xD;        ide.projectNotes = value;&#xD;        break;&#xD;    case &apos;Project name&apos;:&#xD;        ide.setProjectName(value);&#xD;        break;&#xD;    case &apos;Language&apos;:&#xD;        ide.setLanguage(value);&#xD;        break;&#xD;    case &apos;Zoom blocks&apos;:&#xD;        if (!isNaN(value)) ide.setBlocksScale(Math.min(value, 12));&#xD;        break;&#xD;    case &apos;Stage size&apos;:&#xD;        if ((value instanceof List) &amp;&amp; value.length()==2&#xD;                       &amp;&amp; !isNaN(value.at(1)) &amp;&amp; !isNaN(value.at(2)))&#xD;            ide.setStageExtent(new Point(value.at(1), value.at(2)));&#xD;        break;&#xD;    case &apos;Stage scale&apos;:&#xD;        ide.toggleStageSize(value != 1, Math.max(0.1, value));&#xD;        break;&#xD;    case &apos;Visible palette&apos;:&#xD;        ide.currentCategory = value.toLowerCase();&#xD;        ide.categories.children.forEach(function (each) {&#xD;                each.refresh();&#xD;        });&#xD;        ide.refreshPalette(true);&#xD;        break;&#xD;};&#xD;}&#xD;finally {ide.savingPreferences = true;&#xD;};</l></block><list><block var="which"/><block var="value"/></list></block></script></block-definition><block-definition s="my scripts" type="reporter" category="sensing"><comment x="0" y="0" w="90" collapsed="false">Reports all the current sprite&apos;s scripts in a list.</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return new List(this.scripts.children.map(&#xD;function (e) {if (e instanceof RingMorph){&#xD;return new Context(null,[e]);&#xD;} else {&#xD;return new Context(null,e.fullCopy());}&#xD;}).filter(function (e) {&#xD;return !(e.expression instanceof CommentMorph);}));</l></block><list></list></block></block></script></block-definition><block-definition s="$flag-1.3-0-200-15 restart all" type="command" category="control"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doStopThis"><l><option>all but this script</option></l></block><block s="doBroadcast"><l><option>__shout__go__</option></l><list></list></block><block s="doStopThis"><l><option>this script</option></l></block></script></block-definition><block-definition s="alter costume %&apos;costume&apos; r: %&apos;r&apos; g: %&apos;g&apos; b: %&apos;b&apos;" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>§_costumesMenu</options></input><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doDeclareVariables"><list><l>c</l></list></block><block s="doSetVar"><l>c</l><block s="reportIfElse"><block s="reportIsA"><block var="costume"/><l><option>list</option></l></block><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportGetImageAttribute"><l><option>pixels</option></l><l></l></block><block var="costume"/></block></autolambda><list></list></block><block s="reportGet"><l><option>costumes</option></l></block></block><block var="costume"/></block></block><block s="doReport"><block s="reportNewCostume"><block s="evaluate"><block s="reifyReporter"><autolambda><block s="reportVariadicProduct"><list><l></l><block s="reportQuotient"><block s="reportNewList"><list><block var="r"/><block var="g"/><block var="b"/><l>100</l></list></block><l>100</l></block></list></block></autolambda><list></list></block><list><block s="reportIfElse"><block s="reportIsA"><block var="costume"/><l><option>list</option></l></block><block var="costume"/><block s="reportGetImageAttribute"><l><option>pixels</option></l><block var="costume"/></block></block></list></block><block s="reportGetImageAttribute"><l><option>width</option></l><block var="c"/></block><block s="reportGetImageAttribute"><l><option>height</option></l><block var="c"/></block></block></block></script></block-definition><block-definition s="file save prompt name: %&apos;filename&apos; $nl contents: %&apos;body&apos; extension: %&apos;extension&apos;" type="command" category="other"><comment x="0" y="0" w="260.350692471591" collapsed="false">Downloads a file onto the user&apos;s computer.&#xD;URLs are supported, and required for PNG images and possibly other extensions.&#xD;&#xD;Update: Now supports backslashing of URLs to instead get a file with the URL as its binary contents. Not sure why you&apos;d want that though.</comment><header></header><code></code><translations></translations><inputs><input type="%s">filename</input><input type="%mlt">body</input><input type="%s">.txt<options>.txt&#xD;.xml&#xD;.html</options></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>contents</l><l>filename</l><l>ext</l></list><l>var pattern = new RegExp(&apos;^(https?:\\/\\/)?&apos;+ // protocol&#xD;    &apos;((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|&apos;+ // domain name&#xD;    &apos;((\\d{1,3}\\.){3}\\d{1,3}))&apos;+ // OR ip (v4) address&#xD;    &apos;(\\:\\d+)?(\\/[-a-z\\d%_.&#126;+]*)*&apos;+ // port and path&#xD;    &apos;(\\?[;&amp;a-z\\d%_.&#126;+=-]*)?&apos;+ // query string&#xD;    &apos;(\\#[-a-z\\d_]*)?$&apos;,&apos;i&apos;); // fragment locator&#xD;if (ext[0] != &apos;.&apos;)&#xD;ext = &apos;.&apos;+ext;&#xD;var lnk = document.createElement(&apos;a&apos;),&#xD;    blob = new Blob([contents]);&#xD;if (pattern.test(contents) || (pattern.test(contents.slice(1)) &amp;&amp;&#xD;pattern[0] == &apos;\\&apos;)){&#xD;lnk.href = contents;&#xD;} else {&#xD;lnk.href = (window.URL||window.webkitURL).createObjectURL(blob);}&#xD;lnk.download = filename + ext;&#xD;lnk.click();</l></block><list><block var="body"/><block var="filename"/><block var="extension"/></list></block></script></block-definition><block-definition s="%&apos;w&apos; flip costume %&apos;cos&apos;" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">horizontal<options>horizontal&#xD;vertical</options></input><input type="%s" readonly="true">current<options>§_costumesMenu</options></input></inputs><script><block s="doDeclareVariables"><list><l>costume</l></list></block><block s="doSetVar"><l>costume</l><l></l></block><block s="doIf"><block s="reportEquals"><block var="w"/><l>horizontal</l></block><script><block s="doSetVar"><l>costume</l><block s="reportNewCostumeStretched"><block var="cos"/><l>-100</l><l>100</l></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="w"/><l>vertical</l></block><script><block s="doSetVar"><l>costume</l><block s="reportNewCostumeStretched"><block var="cos"/><l>100</l><l>-100</l></block></block></script></block><block s="doRun"><block s="reportJSFunction"><list><l>cst</l><l>n</l></list><l>cst.name = n;</l></block><list><block var="costume"/><block s="reportGetImageAttribute"><l><option>name</option></l><block var="cos"/></block></list></block><block s="doReport"><block var="costume"/></block></script></block-definition><block-definition s="speech bubble contents" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>if(this instanceof StageMorph){&#xD;throw new TypeError("Cannot read property \&#xD;&apos;apply&apos; of undefined");}&#xD;var contents = this.talkBubble();&#xD;if (!contents) return &apos;&apos;;&#xD;contents = contents.contentsMorph;&#xD;if (!(contents instanceof TextMorph))&#xD;return contents;&#xD;return contents.text;</l></block><list></list></block></block></script></block-definition><block-definition s="send notification $nl $- title: %&apos;title&apos; $nl $- text: %&apos;text&apos; $nl $- icon: %&apos;costume&apos; $nl $- image: %&apos;img&apos; $nl $- onclick: %&apos;code&apos;" type="command" category="sensing"><comment x="0" y="0" w="198" collapsed="false">Sends a notification to the user&apos;s device.&#xD;The icon/image parameters take a costume as input and the onclick parameter takes a JavaScript or Snap! function.</comment><header></header><code></code><translations></translations><inputs><input type="%s">Hi there!</input><input type="%txt">How are you today?</input><input type="%s" readonly="true">current<options>§_costumesMenu</options></input><input type="%s" readonly="true"><options>§_costumesMenu</options></input><input type="%cmdRing">this.close();</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>title</l><l>body</l><l>icon</l><l>img</l><l>onclick</l></list><l>if (!("Notification" in window)) console.error("\&#xD;Error", "The notification API is not supported on\n\&#xD;your browser!");&#xD;icon = icon.contents.toDataURL();&#xD;img = img.contents.toDataURL();&#xD;var noti = new Notification(title || "Hi there!",&#xD;{body: body || "How are you today?",&#xD;icon: icon || null,&#xD;image: img || null});&#xD;if (onclick instanceof Function){&#xD;noti.onclick = onclick;&#xD;} else {&#xD;noti.onclick = function () {&#xD;invoke(onclick, new List);&#xD;}}</l></block><list><block var="title"/><block var="text"/><block s="reportNewCostumeStretched"><block var="costume"/><l>100</l><l>100</l></block><block s="reportNewCostumeStretched"><block var="img"/><l>100</l><l>100</l></block><block var="code"/></list></block></script></block-definition><block-definition s="set cursor %&apos;which&apos;" type="command" category="other"><comment x="0" y="0" w="90" collapsed="false">Update: Now accepts URLs!</comment><header></header><code></code><translations></translations><inputs><input type="%s">pointer<options>auto&#xD;cell&#xD;copy&#xD;crosshair&#xD;default&#xD;grab&#xD;grabbing&#xD;help&#xD;move&#xD;not-allowed&#xD;pointer&#xD;progress&#xD;text&#xD;wait&#xD;n-resize&#xD;s-resize&#xD;e-resize&#xD;w-resize&#xD;ne-resize&#xD;se-resize&#xD;nw-resize&#xD;sw-resize</options></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>cur</l><l>proc</l></list><l>function setTo(val){&#xD;document.body.style.cursor = val;&#xD;top.window.document.body.style.cursor = val;&#xD;}&#xD;if (cur instanceof Costume || this.costumes.asArray().map(e=&gt;e.name).includes(cur) || cur===&apos;current&apos;){&#xD;alert("Sorry, costumes don&apos;t work very well for custom cursors at the moment.");&#xD;return;&#xD;let c = newCanvas(),ctx=c.getContext(&apos;2d&apos;);&#xD;cur=proc.reportNewCostumeStretched(cur, 100, 100);&#xD;c.width = cur.width();&#xD;c.height = cur.height();&#xD;ctx.drawImage(cur.contents, 0, 0);&#xD;setTo(&apos;url("&apos;+c.toDataURL()+&apos;"), auto&apos;);&#xD;} else if (`auto&#xD;cell&#xD;copy&#xD;crosshair&#xD;default&#xD;grab&#xD;grabbing&#xD;help&#xD;move&#xD;not-allowed&#xD;pointer&#xD;progress&#xD;text&#xD;wait&#xD;n-resize&#xD;s-resize&#xD;e-resize&#xD;w-resize&#xD;ne-resize&#xD;se-resize&#xD;nw-resize&#xD;sw-resize`.split(&apos;\n&apos;).includes(cur)){&#xD;setTo(cur);&#xD;}else{&#xD;setTo(&apos;url("&apos;+cur+&apos;"),auto&apos;);&#xD;}</l></block><list><block var="which"/></list></block></script></block-definition><block-definition s="# %&apos;comment&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%mlt">comment...</input></inputs></block-definition><block-definition s="notifications allowed?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return [&apos;granted&apos;,&apos;prompt&apos;]&#xD;.includes(Notification.permission);</l></block><list></list></block></block></script></block-definition><block-definition s="root object" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportNot"><custom-block s="am I a clone?"></custom-block></block><block s="reportObject"><l><option>myself</option></l></block><block s="reportAskFor"><block s="reportGet"><l><option>parent</option></l></block><block s="reifyReporter"><autolambda><custom-block s="root object"></custom-block></autolambda><list></list></block><list></list></block></block></block></script></block-definition><block-definition s="costume from url %&apos;url&apos;" type="reporter" category="looks"><comment x="0" y="0" w="96.36363636363625" collapsed="false">Credit to @programmer_user and @jens</comment><header></header><code></code><translations></translations><inputs><input type="%s">Costumes/alonzo.png<options>function () {&#xD;var obj = {};&#xD;world.children[0].getMediaList(&apos;Costumes&apos;).forEach(image =&gt; {&#xD;obj[image.name] = &apos;Costumes/&apos; + image.fileName;&#xD;})&#xD;return obj;&#xD;}</options></input></inputs><script><custom-block s="let %upvar be %s"><l>costume</l><block s="evaluate"><block s="reportJSFunction"><list><l>url</l></list><l>var img = new Image(),&#xD;    cst = null,&#xD;    canvas;&#xD;img.onload = function() {&#xD;    canvas = document.createElement(&apos;canvas&apos;);&#xD;    canvas.width = img.width;&#xD;    canvas.height = img.height;&#xD;    canvas.getContext(&apos;2d&apos;).drawImage(img, 0, 0);&#xD;    cst = new Costume(canvas);&#xD;}&#xD;img.crossOrigin = &apos;anonymous&apos;;&#xD;img.src = url;&#xD;return () =&gt; cst;</l></block><list><block var="url"/></list></block></custom-block><block s="doWaitUntil"><block s="evaluate"><block var="costume"/><list></list></block></block><block s="doReport"><block s="evaluate"><block var="costume"/><list></list></block></block></script></block-definition><block-definition s="window %&apos;which&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">title<options>url=href&#xD;hash&#xD;title&#xD;origin</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>which</l></list><l>if (which == &apos;title&apos;)&#xD;return document.title;&#xD;return location[which] || &apos;&apos;;</l></block><list><block var="which"/></list></block></block></script></block-definition><block-definition s="set window %&apos;which&apos; to %&apos;data&apos;" type="command" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">title<options>title&#xD;location</options></input><input type="%s">Snap!</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>which</l><l>data</l></list><l>switch (which) {&#xD;case &apos;title&apos;:&#xD;document.title = data;&#xD;break;&#xD;case &apos;location&apos;:&#xD;location.href = data;&#xD;break;&#xD;}</l></block><list><block var="which"/><block var="data"/></list></block></script></block-definition><block-definition s="safely try %&apos;action&apos; then if %&apos;error&apos; %&apos;handler&apos;" type="command" category="control"><comment x="0" y="0" w="276" collapsed="false">Catch errors.&#xD;&#xD;Runs the first script.  If it succeeds, nothing else happens.&#xD;But if it has an error (something that would otherwise result&#xD;in a red halo around the block), then the second script is run,&#xD;with the text of the error message that would have been shown in the variable ERROR.</comment><header></header><code></code><translations>pt:tenta executar _ e, em caso de erro _ , executa _&#xD;</translations><inputs><input type="%cs"></input><input type="%upvar"></input><input type="%cs"></input></inputs><script><custom-block s="let %upvar be %s"><l>reset</l><block s="evaluate"><block s="reportJSFunction"><list><l>proc</l></list><l>var oldHandleError = proc.handleError,&#xD;    oldCatchingErrors = proc.isCatchingErrors;&#xD;&#xD;return function(){&#xD; proc.handleError = oldHandleError;&#xD; proc.isCatchingErrors = oldCatchingErrors;&#xD;}</l></block><list></list></block></custom-block><block s="doCallCC"><block s="reifyScript"><script><block s="doRun"><block s="reportJSFunction"><list><l>reset</l><l>action</l><l>handler</l><l>proc</l></list><l>proc.isCatchingErrors = true;&#xD;proc.handleError = function(error, element){&#xD; reset();&#xD; proc.context = handler;&#xD; proc.context.variables.setVar("error", &#xD; String(error));&#xD;}&#xD;&#xD;try{&#xD; proc.evaluate(action, new List(), true);&#xD;}&#xD;catch(e){&#xD; proc.handleError(e, null);&#xD;} </l></block><list><block var="reset"/><block var="action"/><block s="reifyScript"><script><block s="doRun"><block s="reifyScript"><script><block s="doRun"><block var="handler"/><list></list></block><block s="doRun"><block var="return"/><list></list></block></script><list></list></block><list></list></block></script><list></list></block></list></block></script><list><l>return</l></list></block></block><block s="doRun"><block var="reset"/><list></list></block></script></block-definition><block-definition s="inform %&apos;body&apos; titled %&apos;title&apos;" type="command" category="sensing"><comment x="0" y="0" w="90" collapsed="false">These blocks are obsolete, use the CUSTOM DIALOG block instead.</comment><header></header><code></code><translations></translations><inputs><input type="%s">This is some content!</input><input type="%s">!</input></inputs><script><custom-block s="let %upvar be %s"><l>test</l><block s="evaluate"><block s="reportJSFunction"><list><l>body</l><l>title</l></list><l>var dialog = new DialogBoxMorph(),&#xD;    isDone = false;&#xD;dialog.destroy = function() {&#xD;    isDone = true;&#xD;    var world = this.world();&#xD;    world.keyboardFocus = null;&#xD;    world.hand.destroyTemporaries();&#xD;    DialogBoxMorph.uber.destroy.call(this);&#xD;}&#xD;dialog.inform(title, body, this.world());&#xD;return () =&gt; (isDone);</l></block><list><block var="body"/><block var="title"/></list></block></custom-block><block s="doWaitUntil"><block s="evaluate"><block var="test"/><list></list></block></block></script></block-definition><block-definition s="send %&apos;data&apos; to clipboard" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>textInput</l></list><l>navigator.clipboard.writeText(textInput);</l></block><list><block var="data"/></list></block></script></block-definition><block-definition s="confirm %&apos;body&apos; titled %&apos;title&apos;" type="predicate" category="sensing"><comment x="0" y="0" w="90" collapsed="false">These blocks are obsolete, use the CUSTOM DIALOG block instead.</comment><header></header><code></code><translations></translations><inputs><input type="%s">Are you sure?</input><input type="%s">?</input></inputs><script><custom-block s="let %upvar be %s"><l>accessors</l><block s="evaluate"><block s="reportJSFunction"><list><l>body</l><l>title</l></list><l>var dialog = new DialogBoxMorph(),&#xD;    isDone = false,&#xD;    result = false;&#xD;dialog.destroy = function() {&#xD;    isDone = true;&#xD;    result = this.buttons.children[0].userState &#xD;    != &apos;normal&apos;;&#xD;    var world = this.world();&#xD;    world.keyboardFocus = null;&#xD;    world.hand.destroyTemporaries();&#xD;    DialogBoxMorph.uber.destroy.call(this);&#xD;}&#xD;dialog.askYesNo(title, body, this.world());&#xD;return new List([() =&gt; isDone, () =&gt; result]);</l></block><list><block var="body"/><block var="title"/></list></block></custom-block><block s="doWaitUntil"><block s="evaluate"><block s="reportListItem"><l>1</l><block var="accessors"/></block><list></list></block></block><block s="doReport"><block s="evaluate"><block s="reportListItem"><l>2</l><block var="accessors"/></block><list></list></block></block></script></block-definition><block-definition s="prompt %&apos;title&apos; default %&apos;default&apos;" type="reporter" category="sensing"><comment x="0" y="0" w="90" collapsed="false">These blocks are obsolete, use the EDIT BOX block instead.</comment><header></header><code></code><translations></translations><inputs><input type="%s">What&apos;s your name?</input><input type="%s">John Doe</input></inputs><script><custom-block s="let %upvar be %s"><l>accessors</l><block s="evaluate"><block s="reportJSFunction"><list><l>origin</l><l>title</l></list><l>var dialog = new DialogBoxMorph(),&#xD;    isDone = false,&#xD;    result = false;&#xD;dialog.destroy = function () {&#xD;    isDone = true;&#xD;    result = this.buttons.children[1].userState&#xD;    == &apos;highlight&apos;? false:this.getInput();&#xD;    var world = this.world();&#xD;    world.keyboardFocus = null;&#xD;    world.hand.destroyTemporaries();&#xD;    DialogBoxMorph.uber.destroy.call(this);&#xD;}&#xD;dialog.prompt(title, origin, this.world());&#xD;return new List([() =&gt; isDone, () =&gt; result]);</l></block><list><block var="default"/><block var="title"/></list></block></custom-block><block s="doWaitUntil"><block s="evaluate"><block s="reportListItem"><l>1</l><block var="accessors"/></block><list></list></block></block><block s="doReport"><block s="evaluate"><block s="reportListItem"><l>2</l><block var="accessors"/></block><list></list></block></block></script></block-definition><block-definition s="multiline %&apos;s&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%mlt">Hello!&#xD;How are you?&#xD;Are you okay?</input></inputs><script><block s="doReport"><block var="s"/></block></script></block-definition><block-definition s="%&apos;which&apos; string %&apos;data&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">uppercase<options>uppercase&#xD;lowercase&#xD;capitalize&#xD;line capitalize&#xD;full capitalize</options></input><input type="%s">Pink girl</input></inputs><script><block s="doIf"><block s="reportIsA"><block var="data"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="%s string %s"><block var="which"/><l></l></custom-block></autolambda><list></list></block><block var="data"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="which"/><l>uppercase</l></block><script><custom-block s="let %upvar be %s"><l>upper</l><block s="reportUnicodeAsLetter"><block s="reportDifference"><block s="reportUnicode"><custom-block s="constant %s"><l>latin alphabet</l></custom-block></block><l>32</l></block></block></custom-block><block s="doReport"><block s="reportJoinWords"><list><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportNot"><block s="reportListContainsItem"><custom-block s="constant %s"><l>latin alphabet</l></custom-block><l></l></block></block><l></l><block s="reportListItem"><block s="reportListIndex"><l></l><block var="upper"/></block><block var="upper"/></block></block></autolambda><list></list></block><block s="reportTextSplit"><block var="data"/><l><option>letter</option></l></block></block></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="which"/><l>lowercase</l></block><script><block s="doReport"><block s="reportJoinWords"><list><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportNot"><block s="reportListContainsItem"><custom-block s="constant %s"><l>latin alphabet</l></custom-block><l></l></block></block><l></l><block s="reportListItem"><block s="reportListIndex"><l></l><custom-block s="constant %s"><l>latin alphabet</l></custom-block></block><custom-block s="constant %s"><l>latin alphabet</l></custom-block></block></block></autolambda><list></list></block><block s="reportTextSplit"><block var="data"/><l><option>letter</option></l></block></block></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="which"/><l>capitalize</l></block><script><block s="doReport"><block s="reportJoinWords"><list><custom-block s="%s string %s"><l>uppercase</l><block s="reportLetter"><l>1</l><block var="data"/></block></custom-block><custom-block s="all but %s %s of %s"><l>first</l><l>letter</l><block var="data"/></custom-block></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="which"/><l>line capitalize</l></block><script><block s="doReport"><custom-block s="combine %l with delimiter %mlt"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="%s string %s"><l>capitalize</l><l></l></custom-block></autolambda><list></list></block><block s="reportTextSplit"><block var="data"/><l><option>line</option></l></block></block><block s="reportUnicodeAsLetter"><l>10</l></block></custom-block></block></script></block><block s="doIf"><block s="reportEquals"><block var="which"/><l>full capitalize</l></block><script><block s="doReport"><custom-block s="%s string %s"><l>line capitalize</l><custom-block s="combine %l with delimiter %mlt"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="%s string %s"><l>capitalize</l><l></l></custom-block></autolambda><list></list></block><block s="reportTextSplit"><block var="data"/><l> </l></block></block><l> </l></custom-block></custom-block></block></script></block><block s="doReport"><block var="data"/></block></script></block-definition><block-definition s="all but %&apos;fl&apos; %&apos;which&apos; of %&apos;data&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">first<options>first&#xD;last</options></input><input type="%s" readonly="true">letter<options>letter&#xD;word</options></input><input type="%s">world</input></inputs><script><block s="doIf"><block s="reportEquals"><block var="fl"/><l>first</l></block><script><block s="doIf"><block s="reportEquals"><block var="which"/><l>word</l></block><script><block s="doReport"><custom-block s="combine %l with delimiter %mlt"><block s="reportCDR"><block s="reportTextSplit"><block var="data"/><block var="which"/></block></block><l> </l></custom-block></block></script></block><block s="doReport"><block s="reportJoinWords"><list><block s="reportCDR"><block s="reportTextSplit"><block var="data"/><block var="which"/></block></block></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="fl"/><l>last</l></block><script><block s="doDeclareVariables"><list><l>res</l></list></block><block s="doSetVar"><l>res</l><custom-block s="copy of %l"><block s="reportTextSplit"><block var="data"/><block var="which"/></block></custom-block></block><block s="doDeleteFromList"><l><option>last</option></l><block var="res"/></block><block s="doIf"><block s="reportEquals"><block var="which"/><l>word</l></block><script><block s="doReport"><custom-block s="combine %l with delimiter %mlt"><block var="res"/><l> </l></custom-block></block></script></block><block s="doReport"><block s="reportJoinWords"><list><block var="res"/></list></block></block></script></block><block s="doReport"><block var="data"/></block></script></block-definition><block-definition s="combine %&apos;data&apos; with delimiter %&apos;delim&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%mlt">,</input></inputs><script><block s="doReport"><block s="reportCombine"><block var="data"/><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><block var="delim"/><l></l></list></block></autolambda><list></list></block></block></block></script></block-definition><block-definition s="is %&apos;string&apos; %&apos;which&apos; ?" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s">PINK GIRL</input><input type="%s" readonly="true">uppercased<options>uppercased&#xD;lowercased&#xD;capitalized&#xD;line capitalized&#xD;full capitalized</options></input></inputs><script><block s="doReport"><block s="reportIsIdentical"><block var="string"/><custom-block s="%s string %s"><custom-block s="all but %s %s of %s"><l>last</l><l>letter</l><block var="which"/></custom-block><block var="string"/></custom-block></block></block></script></block-definition><block-definition s="copy of %&apos;data&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportIsA"><l></l><l><option>list</option></l></block><custom-block s="copy of %l"><l/></custom-block><l></l></block></autolambda><list></list></block><block var="data"/></block></block></script></block-definition><block-definition s="latin %&apos;latin&apos; as number" type="reporter" category="operators"><comment x="0" y="0" w="211" collapsed="false">Returns the roman number as actual number&#xD;e.g.&#xD;IV = 4&#xD;XL = 40&#xD;CD = 400&#xD;CLM = 1050&#xD;MMMM = 4000</comment><header></header><code></code><translations>el:λατίνα _ ως νούμερο&#xD;de:Latein _ als zahl&#xD;</translations><inputs><input type="%s">MDCLXVI</input></inputs><script><block s="doIf"><block s="reportAnd"><custom-block s="setting %s"><l>hyper blocks support</l></custom-block><block s="reportIsA"><block var="latin"/><l><option>list</option></l></block></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="latin %s as number"><l></l></custom-block></autolambda><list></list></block><block var="latin"/></block></block></script></block><block s="doIf"><block s="reportListContainsItem"><block s="reportMap"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportListContainsItem"><block s="reportNewList"><list><l>I</l><l>V</l><l>X</l><l>L</l><l>C</l><l>D</l><l>M</l></list></block><l></l></block></block></autolambda><list></list></block><block s="reportTextSplit"><block var="latin"/><l><option>letter</option></l></block></block><block s="reportBoolean"><l><bool>true</bool></l></block></block><script><custom-block s="throw %s %s"><l>Error</l><block s="reportJoinWords"><list><l>Invalid latin symbol </l><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportListContainsItem"><block s="reportNewList"><list><l>I</l><l>V</l><l>X</l><l>L</l><l>C</l><l>D</l><l>M</l></list></block><l></l></block></block></autolambda><list></list></block><block s="reportTextSplit"><block var="latin"/><l><option>letter</option></l></block></block></list></block></custom-block></script></block><block s="doReport"><block s="reportCombine"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>1</l><block s="reportCDR"><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListItem"><l>1</l><block var="each pair"/></block><block var="each letter"/></block></autolambda><list><l>each pair</l></list></block><block s="reportNewList"><list><block s="reportNewList"><list><l>I</l><l>1</l></list></block><block s="reportNewList"><list><l>V</l><l>5</l></list></block><block s="reportNewList"><list><l>X</l><l>10</l></list></block><block s="reportNewList"><list><l>L</l><l>50</l></list></block><block s="reportNewList"><list><l>C</l><l>100</l></list></block><block s="reportNewList"><list><l>D</l><l>500</l></list></block><block s="reportNewList"><list><l>M</l><l>1000</l></list></block></list></block></block></block></block></autolambda><list><l>each letter</l></list></block><block s="reportTextSplit"><block var="latin"/><l><option>letter</option></l></block></block><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportLessThan"><block var="#1"/><block s="reportListItem"><block s="reportVariadicSum"><list><block var="index"/><l>1</l></list></block><block var="list"/></block></block><block s="reportVariadicSum"><list><block s="reportDifference"><block s="reportListItem"><block s="reportVariadicSum"><list><block var="index"/><l>1</l></list></block><block var="list"/></block><block var="#1"/></block><block s="reportDifference"><block var="#2"/><block s="reportListItem"><block s="reportVariadicSum"><list><block var="index"/><l>1</l></list></block><block var="list"/></block></block></list></block><block s="reportVariadicSum"><list><block var="#1"/><block var="#2"/></list></block></block></autolambda><list><l>#1</l><l>#2</l><l>index</l><l>list</l></list></block></block></block></script></block-definition><block-definition s="number %&apos;number&apos; as latin" type="reporter" category="operators"><comment x="0" y="0" w="318" collapsed="false">Returns the actual number as roman number, Can be slow for large operations.&#xD;e.g.&#xD;4 = IV&#xD;40 = XL&#xD;400 = CD&#xD;1050 = CLM&#xD;4000 = MMMM</comment><header></header><code></code><translations>el:νούμερο _ ως λατίνα&#xD;de:Zahl _ als Latein&#xD;</translations><inputs><input type="%n">1666</input></inputs><script><block s="doWarp"><script><block s="doIf"><block s="reportAnd"><custom-block s="setting %s"><l>hyper blocks support</l></custom-block><block s="reportIsA"><block var="number"/><l><option>list</option></l></block></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="number %n as latin"><l></l></custom-block></autolambda><list></list></block><block var="number"/></block></block></script></block><block s="doIf"><block s="reportLessThan"><block var="number"/><l>0</l></block><script><custom-block s="throw %s %s"><l>Error</l><l>Cannot get latin for negative numbers</l></custom-block></script></block><block s="doDeclareVariables"><list><l>symbols</l><l>output</l></list></block><block s="doSetVar"><l>symbols</l><block s="reportNewList"><list><block s="reportNewList"><list><l>I</l><l>1</l></list></block><block s="reportNewList"><list><l>V</l><l>5</l></list></block><block s="reportNewList"><list><l>X</l><l>10</l></list></block><block s="reportNewList"><list><l>L</l><l>50</l></list></block><block s="reportNewList"><list><l>C</l><l>100</l></list></block><block s="reportNewList"><list><l>D</l><l>500</l></list></block><block s="reportNewList"><list><l>M</l><l>1000</l></list></block><block s="reportNewList"><list><l>M̅</l><l>1000000</l></list></block></list></block></block><block s="doSetVar"><l>output</l><l></l></block><block s="doUntil"><block s="reportEquals"><block var="number"/><l>0</l></block><script><block s="doDeclareVariables"><list><l>symbol</l><l>higher</l></list></block><block s="doSetVar"><l>symbol</l><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportListAttribute"><l><option>length</option></l><block var="symbols"/></block></block><block s="reportAnd"><block s="reportLessThanOrEquals"><block s="reportListItem"><l>2</l><block var="value"/></block><block var="number"/></block><block s="reportGreaterThan"><block s="reportListItem"><l>2</l><block s="reportListItem"><block s="reportVariadicSum"><list><block var="index"/><l>1</l></list></block><block var="symbols"/></block></block><block var="number"/></block></block></block></autolambda><list><l>value</l><l>index</l></list></block><block var="symbols"/></block></block><block s="doSetVar"><l>higher</l><block s="reportListItem"><block s="reportVariadicSum"><list><block s="reportListIndex"><block var="symbol"/><block var="symbols"/></block><l>1</l></list></block><block var="symbols"/></block></block><block s="doIf"><block var="higher"/><script><block s="doFor"><l>i</l><l>1</l><block s="reportListIndex"><block var="symbol"/><block var="symbols"/></block><script><block s="doIf"><block var="higher"/><script><block s="doDeclareVariables"><list><l>sn</l><l>hn</l></list></block><block s="doSetVar"><l>sn</l><block s="reportListItem"><l>2</l><block s="reportListItem"><block var="i"/><block var="symbols"/></block></block></block><block s="doSetVar"><l>hn</l><block s="reportListItem"><l>2</l><block var="higher"/></block></block><block s="doIf"><block s="reportAnd"><block s="reportNotEquals"><block s="reportDifference"><block var="hn"/><block var="sn"/></block><block var="sn"/></block><block s="reportEquals"><block s="reportDifference"><block var="hn"/><block var="sn"/></block><block s="reportVariadicProduct"><list><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block var="number"/><block var="sn"/></block></block><block var="sn"/></list></block></block></block><script><block s="doSetVar"><l>output</l><block s="reportJoinWords"><list><block var="output"/><block s="reportListItem"><l>1</l><block s="reportListItem"><block var="i"/><block var="symbols"/></block></block><block s="reportListItem"><l>1</l><block var="higher"/></block></list></block></block><block s="doChangeVar"><l>number</l><block s="reportDifference"><l></l><block s="reportVariadicProduct"><list><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block var="number"/><block var="sn"/></block></block><block var="sn"/></list></block></block></block><block s="doSetVar"><l>higher</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doSetVar"><l>i</l><block s="reportVariadicSum"><list><block s="reportListAttribute"><l><option>length</option></l><block var="symbols"/></block><l>1</l></list></block></block></script></block></script></block></script></block></script></block><block s="doIf"><block s="reportNotEquals"><block var="higher"/><block s="reportBoolean"><l><bool>false</bool></l></block></block><script><block s="doSetVar"><l>output</l><block s="reportJoinWords"><list><block var="output"/><block s="reportListItem"><l>1</l><block var="symbol"/></block></list></block></block><block s="doChangeVar"><l>number</l><block s="reportDifference"><l></l><block s="reportListItem"><l>2</l><block var="symbol"/></block></block></block></script></block></script></block><block s="doReport"><block var="output"/></block></script></block></script></block-definition><block-definition s="throw %&apos;err&apos; %&apos;msg&apos;" type="command" category="control"><comment x="0" y="0" w="268.6666666666667" collapsed="false">Throw an error.&#xD;&#xD;Makes a red halo appear around the script that runs it,&#xD;with the input text shown in a speech balloon next to&#xD;the script, just like any Snap! error.&#xD;&#xD;This is useful to put in the second script of SAFELY TRY&#xD;after some other instructions to undo the partial work of&#xD;the first script.</comment><header></header><code></code><translations>pt:lança o erro _&#xD;el:σφάλμα _&#xD;de:Error _&#xD;</translations><inputs><input type="%s">Error</input><input type="%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>msg</l><l>n</l></list><l>throw {name: n, message: msg};</l></block><list><block var="msg"/><block var="err"/></list></block></script></block-definition><block-definition s="%&apos;first&apos; $- %&apos;option&apos; $- %&apos;second&apos;" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s">raincoat</input><input type="%s" readonly="true">contains<options>contains&#xD;starts with&#xD;ends with</options></input><input type="%s">coat</input></inputs><script><block s="doIf"><block s="reportEquals"><block var="option"/><l>contains</l></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>a</l><l>b</l></list><l>return a.includes(b);</l></block><list><block var="first"/><block var="second"/></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="option"/><l>starts with</l></block><script><block s="doReport"><block s="reportEquals"><custom-block s="letters %n - %n of %txt"><l>1</l><block s="reportStringSize"><block var="second"/></block><block var="first"/></custom-block><block var="second"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="option"/><l>ends with</l></block><script><block s="doReport"><block s="reportEquals"><custom-block s="reverse string %s"><custom-block s="letters %n - %n of %txt"><block s="reportStringSize"><block var="first"/></block><block s="reportVariadicSum"><list><block s="reportDifference"><block s="reportStringSize"><block var="first"/></block><block s="reportStringSize"><block var="second"/></block></block><l>1</l></list></block><block var="first"/></custom-block></custom-block><block var="second"/></block></block></script></block><block s="doReport"><l></l></block></script><scripts><script x="85.46191406250003" y="72.66666666666666"><block var="which"/></script><script x="134.2822265625" y="166.16666666666669"><block var="which"/></script></scripts></block-definition><block-definition s="letters %&apos;a&apos; - %&apos;b&apos; of %&apos;text&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n">3</input><input type="%txt">world</input></inputs><script><block s="doIf"><block s="reportAnd"><block s="reportIsA"><block var="text"/><l><option>list</option></l></block><custom-block s="setting %s"><l>hyper blocks support</l></custom-block></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="letters %n - %n of %txt"><block var="a"/><block var="b"/><l></l></custom-block></autolambda><list></list></block><block var="text"/></block></block></script></block><block s="doReport"><block s="reportJoinWords"><list><block s="reportLetter"><block s="reportNumbers"><block var="a"/><block var="b"/></block><block var="text"/></block></list></block></block></script></block-definition><block-definition s="reverse string %&apos;string&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s">world</input></inputs><script><block s="doReport"><block s="reportJoinWords"><list><block s="reportListAttribute"><l><option>reverse</option></l><block s="reportTextSplit"><block var="string"/><l><option>letter</option></l></block></block></list></block></block></script></block-definition><block-definition s="scramble string %&apos;str&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s">world</input></inputs><script><block s="doReport"><block s="reportCombine"><block s="reportTextSplit"><block var="str"/><l><option>letter</option></l></block><block s="reifyReporter"><autolambda><block s="reportIfElse"><custom-block s="%n % chance true"><l>50</l></custom-block><block s="reportJoinWords"><list><block var="#2"/><block var="#1"/></list></block><block s="reportJoinWords"><list><block var="#1"/><block var="#2"/></list></block></block></autolambda><list><l>#1</l><l>#2</l></list></block></block></block></script></block-definition><block-definition s="%&apos;c&apos; % chance true" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">50</input></inputs><script><block s="doReport"><block s="reportLessThanOrEquals"><block s="reportRandom"><l>1</l><l>100</l></block><block var="c"/></block></block></script></block-definition><block-definition s="shuffle %&apos;data&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doSetVar"><l>data</l><custom-block s="copy of %l"><block var="data"/></custom-block></block><block s="doWarp"><script><custom-block s="for %upvar %upvar in %l %ca"><l>index</l><l>value</l><block var="data"/><script><block s="doIf"><block s="reportAnd"><custom-block s="%n % chance true"><l>50</l></custom-block><block s="reportNot"><block s="reportEquals"><block var="index"/><block s="reportListAttribute"><l><option>length</option></l><block var="data"/></block></block></block></block><script><block s="doRun"><block s="reifyScript"><script><block s="doReplaceInList"><block var="index"/><block var="data"/><block s="reportListItem"><block s="reportVariadicSum"><list><block var="index"/><l>1</l></list></block><block var="data"/></block></block><block s="doReplaceInList"><block s="reportVariadicSum"><list><block var="index"/><l>1</l></list></block><block var="data"/><block var="x"/></block></script><list><l>x</l></list></block><list><block var="value"/></list></block></script></block></script></custom-block></script></block><block s="doReport"><block var="data"/></block></script></block-definition><block-definition s="write %&apos;txt&apos; size %&apos;size&apos; with wrapping" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%mlt">Hello!&#xD;How are you?&#xD;Are you okay?</input><input type="%n">12</input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>origin</l><l>newline</l><l>sbl</l><l>offset</l><l>prev</l></list></block><block s="doSetVar"><l>origin</l><block s="reportNewList"><list><block s="reportNewList"><list><block s="xPosition"></block><block s="yPosition"></block></list></block><block s="direction"></block></list></block></block><block s="doSetVar"><l>newline</l><block s="reifyScript"><script><block s="doSetVar"><l>prev</l><block s="getPenDown"></block></block><block s="up"></block><block s="doGotoObject"><block s="reportListItem"><l>1</l><block var="origin"/></block></block><block s="turn"><l>90</l></block><block s="forward"><block s="reportVariadicProduct"><list><block var="x"/><block var="size"/></list></block></block><block s="turnLeft"><l>90</l></block><block s="doIfElse"><block var="prev"/><script><block s="down"></block></script><script><block s="up"></block></script></block></script><list><l>x</l></list></block></block><block s="doSetVar"><l>sbl</l><block s="reportTextSplit"><block var="txt"/><l><option>line</option></l></block></block><custom-block s="for %upvar %upvar in %l %ca"><l>index</l><l>line</l><block var="sbl"/><script><custom-block s="for %upvar %upvar in %l %ca"><l>idx</l><l>word</l><block s="reportTextSplit"><block var="line"/><l> </l></block><script><block s="doIf"><block s="reportGreaterThan"><block s="reportVariadicSum"><list><block s="xPosition"></block><block s="reportVariadicProduct"><list><block s="reportVariadicProduct"><list><block s="reportQuotient"><l>7</l><l>12</l></block><block var="size"/></list></block><block s="reportStringSize"><block var="word"/></block></list></block></list></block><block s="reportAttributeOf"><l><option>right</option></l><l>Stage</l></block></block><script><block s="doRun"><block var="newline"/><list><block s="reportVariadicSum"><list><block var="index"/><block var="offset"/></list></block></list></block><block s="doChangeVar"><l>offset</l><l>1</l></block></script></block><block s="write"><block var="word"/><block var="size"/></block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block var="idx"/><block s="reportListAttribute"><l><option>length</option></l><block s="reportTextSplit"><block var="line"/><l> </l></block></block></block></block><script><block s="write"><l> </l><block var="size"/></block></script></block></script></custom-block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block var="index"/><block s="reportListAttribute"><l><option>length</option></l><block var="sbl"/></block></block></block><script><block s="doRun"><block var="newline"/><list><block s="reportVariadicSum"><list><block var="index"/><block var="offset"/></list></block></list></block></script></block></script></custom-block><block s="setHeading"><block s="reportListItem"><l>2</l><block var="origin"/></block></block></script></block></script></block-definition><block-definition s="for %&apos;index&apos; %&apos;value&apos; in %&apos;data&apos; %&apos;function&apos;" type="command" category="lists"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%upvar"></input><input type="%l"></input><input type="%ca"></input></inputs><script><block s="doForEach"><l>item</l><block var="data"/><script><block s="doSetVar"><l>value</l><block var="item"/></block><block s="doChangeVar"><l>index</l><l>1</l></block><block s="doRun"><block var="function"/><list></list></block></script></block></script></block-definition><block-definition s="all %&apos;which&apos;" type="reporter" category="sensing"><comment x="0" y="0" w="227.9876302083336" collapsed="false">Sprites: All the sprites (not including the stage).&#xD;Clones: Every clone from every sprite.&#xD;Objects: Both sprites and clones.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">sprites<options>sprites&#xD;clones&#xD;objects</options></input></inputs><script><block s="doIf"><block s="reportEquals"><block var="which"/><l>sprites</l></block><script><block s="doIf"><block s="reportEquals"><block s="reportObject"><l><option>myself</option></l></block><block s="reportGet"><l><option>stage</option></l></block></block><script><block s="doReport"><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportAskFor"><l></l><block s="reifyReporter"><autolambda><custom-block s="am I a clone?"></custom-block></autolambda><list></list></block><list></list></block></block></autolambda><list></list></block><block s="reportGet"><l><option>other sprites</option></l></block></block></block></script></block><block s="doReport"><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportAskFor"><l></l><block s="reifyReporter"><autolambda><custom-block s="am I a clone?"></custom-block></autolambda><list></list></block><list></list></block></block></autolambda><list></list></block><block s="reportCONS"><block s="reportObject"><l><option>myself</option></l></block><block s="reportGet"><l><option>other sprites</option></l></block></block></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="which"/><l>clones</l></block><script><block s="doReport"><block s="reportConcatenatedLists"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportAskFor"><l></l><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>clones</option></l></block></autolambda><list></list></block><list></list></block></autolambda><list></list></block><custom-block s="all %s"><l>sprites</l></custom-block></block></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="which"/><l>objects</l></block><script><block s="doReport"><block s="reportConcatenatedLists"><list><custom-block s="all %s"><l>sprites</l></custom-block><custom-block s="all %s"><l>clones</l></custom-block></list></block></block></script></block><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block-definition><block-definition s="am I a clone?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportIsA"><block s="reportGet"><l><option>parent</option></l></block><l><option>sprite</option></l></block></block></script></block-definition><block-definition s="pos %&apos;n&apos; in %&apos;small&apos; - %&apos;large&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">11</input><input type="%n">1</input><input type="%n">10</input></inputs><script><block s="doReport"><custom-block s="%s %s %s"><block var="small"/><l>max</l><custom-block s="%s %s %s"><block var="n"/><l>min</l><block var="large"/></custom-block></custom-block></block></script></block-definition><block-definition s="%&apos;a&apos; %&apos;which&apos; %&apos;b&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s" readonly="true">min<options>min&#xD;max</options></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportEquals"><block var="which"/><l>max</l></block><block s="reportIfElse"><block s="reportGreaterThan"><block var="a"/><block var="b"/></block><block var="a"/><block var="b"/></block><block s="reportIfElse"><block s="reportLessThan"><block var="a"/><block var="b"/></block><block var="a"/><block var="b"/></block></block></block></script></block-definition><block-definition s="indices of %&apos;small&apos; in text %&apos;large&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s">o</input><input type="%txt">hello world</input></inputs><script><block s="doDeclareVariables"><list><l>total</l></list></block><block s="doReport"><custom-block s="all but %n of %l"><l>last</l><block s="reportMap"><block s="reifyScript"><script><block s="doChangeVar"><l>total</l><block s="reportVariadicSum"><list><block s="reportStringSize"><block var="x"/></block><l>1</l></list></block></block><block s="doReport"><block var="total"/></block></script><list><l>x</l></list></block><block s="reportTextSplit"><block var="large"/><block var="small"/></block></block></custom-block></block></script></block-definition><block-definition s="all but %&apos;n&apos; of %&apos;data&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%n">1<options>1&#xD;last&#xD;random</options></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportEquals"><block var="n"/><l>random</l></block><script><block s="doSetVar"><l>n</l><block s="reportRandom"><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block var="data"/></block></block></block></script></block><block s="doSetVar"><l>data</l><custom-block s="copy of %l"><block var="data"/></custom-block></block><block s="doDeleteFromList"><block var="n"/><block var="data"/></block><block s="doReport"><block var="data"/></block></script></block-definition><block-definition s="stage image" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return new Costume(world.children[0].stage.fullImage(), &apos;snapshot&apos;);</l></block><list></list></block></block></script></block-definition><block-definition s="pause %&apos;which&apos; $pause-1-255-220-0" type="command" category="control"><comment x="0" y="0" w="98" collapsed="false">Pause a selected range of processes.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">all<options>all&#xD;this script&#xD;all but this script</options></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block var="which"/><l>this script</l></block><script><block s="doRun"><block s="reportJSFunction"><list><l>proc</l></list><l>proc.isPaused = true;</l></block><list></list></block></script><script><block s="doIfElse"><block s="reportEquals"><block var="which"/><l>all but this script</l></block><script><block s="doRun"><block s="reportJSFunction"><list><l>x</l></list><l>var procs = world.children[0].stage.threads.processes;&#xD;if (procs.length &lt; 1) return;&#xD;x.pauseShieldFlag = null;&#xD;procs.forEach(&#xD;function (proc) {&#xD;if (!("pauseShieldFlag" in proc)){&#xD;proc.pause();&#xD;}})&#xD;delete x.pauseShieldFlag;</l></block><list></list></block></script><script><block s="doPauseAll"></block></script></block></script></block></script></block-definition><block-definition s="unpause all $pointRight-1.1-255-220-0" type="command" category="control"><comment x="0" y="0" w="90" collapsed="false">Unpause each paused process.</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>world.children[0].stage.threads.processes.forEach(&#xD;function (proc) {&#xD;proc.isPaused = false;&#xD;})</l></block><list></list></block></script></block-definition><block-definition s="$flash indices of %&apos;item&apos; in %&apos;data&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%s">thing</input><input type="%l"></input></inputs><script><block s="doReport"><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportEquals"><l></l><block s="reportMonadic"><l><option>sqrt</option></l><l>577</l></block></block></block></autolambda><list></list></block><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportEquals"><block var="x"/><block var="item"/></block><block var="y"/><block s="reportMonadic"><l><option>sqrt</option></l><l>577</l></block></block></autolambda><list><l>x</l><l>y</l></list></block><block var="data"/></block></block></block></script></block-definition><block-definition s="ignore %&apos;x&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs></block-definition><block-definition s="my resolution" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>function fix(n) {&#xD;return (Math.round((n * (10 ^ 15)))) / (10 ^ 15);&#xD;}&#xD;return new List([&#xD;      fix(this.bounds.width()),&#xD;           fix(this.bounds.height())&#xD;]);</l></block><list></list></block></block></script></block-definition><block-definition s="index of %&apos;small&apos; in text %&apos;large&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s">a</input><input type="%s">cat</input></inputs><script><block s="doReport"><block s="reportVariadicSum"><list><block s="reportStringSize"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="large"/><block var="small"/></block></block></block><l>1</l></list></block></block></script></block-definition><block-definition s="directory item %&apos;indices&apos; of %&apos;array&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="indices"/></block><l>1</l></block><script><block s="doReport"><block s="reportListItem"><block s="reportListItem"><l>1</l><block var="indices"/></block><block var="array"/></block></block></script><script><block s="doReport"><custom-block s="directory item %l of %l"><block s="reportCDR"><block var="indices"/></block><block s="reportListItem"><block s="reportListItem"><l>1</l><block var="indices"/></block><block var="array"/></block></custom-block></block></script></block></script></block-definition><block-definition s="constant %&apos;which&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">pi<options>e&#xD;pi&#xD;phi&#xD;weekdays&#xD;months&#xD;latin alphabet</options></input></inputs><script><block s="doReport"><block s="reportListItem"><block s="reportListIndex"><block var="which"/><block s="reportNewList"><list><l>pi</l><l>phi</l><l>e</l><l>weekdays</l><l>months</l><l>latin alphabet</l></list></block></block><block s="reportNewList"><list><l>3.14159265358</l><l>1.61803398875</l><l>2.71828182845</l><block s="reportNewList"><list><l>Sunday</l><l>Monday</l><l>Tuesday</l><l>Wednesday</l><l>Thursday</l><l>Friday</l><l>Saturday</l></list></block><block s="reportNewList"><list><l>January</l><l>February</l><l>March</l><l>April</l><l>May</l><l>June</l><l>July</l><l>August</l><l>September</l><l>October</l><l>November</l><l>December</l></list></block><block s="reportTextSplit"><l>abcdefghijklmnopqrstuvwxyz</l><l><option>letter</option></l></block></list></block></block></block></script></block-definition><block-definition s="$camera snap" type="reporter" category="sensing"><comment x="0" y="0" w="216" collapsed="false">takes a snapshot with the webcam and reports it as a new costume, or zero if the user cancels</comment><header></header><code></code><translations>pt:$camera a imagem actual do vídeo&#xD;</translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>accessors</l></list></block><block s="doSetVar"><l>accessors</l><block s="evaluate"><block s="reportJSFunction"><list></list><l>var camDialog,&#xD;    result = false;&#xD;&#xD;camDialog = new CamSnapshotDialogMorph(&#xD;    this.parentThatIsA(IDE_Morph),&#xD;    this,&#xD;    function () {result = null; },&#xD;    function (costume) {&#xD;        result = costume;&#xD;        this.close();&#xD;    }&#xD;);&#xD;&#xD;camDialog.key = &apos;camera&apos;;&#xD;camDialog.popUp(this.world());&#xD;return new List([() =&gt; (!(result == false)), () =&gt; (result||0)]);</l></block><list></list></block></block><block s="doWaitUntil"><block s="evaluate"><block s="reportListItem"><l>1</l><block var="accessors"/></block><list></list></block></block><block s="doReport"><block s="evaluate"><block s="reportListItem"><l>2</l><block var="accessors"/></block><list></list></block></block></script></block-definition><block-definition s="$circleSolid-1-255-0-0 record" type="reporter" category="sensing"><comment x="0" y="0" w="192" collapsed="false">records an audio snippet and reports it as a new sound, or zero if the user cancels</comment><header></header><code></code><translations>pt:$circleSolid-1-255-0-0 uma nova gravação&#xD;</translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>accessors</l></list></block><block s="doSetVar"><l>accessors</l><block s="evaluate"><block s="reportJSFunction"><list></list><l>var soundRecorder,&#xD;    result = false;&#xD;&#xD;soundRecorder = new SoundRecorderDialogMorph(&#xD;    function (audio) {&#xD;        if (audio) {&#xD;            result = new Sound(audio, &apos;recording&apos;);&#xD;        } else {&#xD;            result = null;&#xD;            this.destroy();&#xD;        }&#xD;    }&#xD;);&#xD;&#xD;soundRecorder.cancel = function () {&#xD;    result = null;&#xD;    this.destroy();&#xD;};&#xD;&#xD;soundRecorder.key = &apos;microphone&apos;;&#xD;soundRecorder.popUp(this.world());&#xD;return new List([() =&gt; (!(result == false)), () =&gt; (result||0)]);</l></block><list></list></block></block><block s="doWaitUntil"><block s="evaluate"><block s="reportListItem"><l>1</l><block var="accessors"/></block><list></list></block></block><block s="doReport"><block s="evaluate"><block s="reportListItem"><l>2</l><block var="accessors"/></block><list></list></block></block></script></block-definition><block-definition s="set pen to r: %&apos;r&apos; g: %&apos;g&apos; b: %&apos;b&apos; a: %&apos;a&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%n">255</input><input type="%n">220</input><input type="%n">0</input><input type="%n">255</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>r,g,b,a</l></list><l>this.color = new Color(&#xD;r, g, b, a);</l></block><list><block var="r"/><block var="g"/><block var="b"/><block var="a"/></list></block></script></block-definition><block-definition s="deep map %&apos;function&apos; over %&apos;data&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%l"></input></inputs><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportIsA"><l></l><l><option>list</option></l></block><custom-block s="deep map %repRing over %l"><block var="function"/><l/></custom-block><block s="evaluate"><block var="function"/><list><l></l></list></block></block></autolambda><list></list></block><block var="data"/></block></block></script></block-definition><block-definition s="glide %&apos;n&apos; secs to %&apos;object&apos;" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%s" readonly="true">mouse-pointer<options>function () {&#xD;var object = {&#xD;&quot;random position&quot; : &quot;random position&quot;,&#xD;&quot;mouse-pointer&quot; : &quot;mouse-pointer&quot;,&#xD;&quot;center&quot; : &quot;center&quot;,&#xD;&quot;&#126;&quot;: &quot;&#126;&quot;,&#xD;};&#xD;var spritesObj = {},&#xD;homeSprite = world.children[0].currentSprite || {name:null};&#xD;world.children[0].sprites.itemsArray().map(e=&gt;e.name).forEach(&#xD;function (spriteName){&#xD;if (spriteName != homeSprite.name){&#xD;spritesObj[spriteName] = spriteName;&#xD;}})&#xD;if (Object.keys(spritesObj).length &lt; 1){&#xD;delete object[&quot;&#126;&quot;];&#xD;}&#xD;return Object.assign(object, spritesObj);&#xD;}</options></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block var="object"/><l>mouse-pointer</l></block><script><block s="doSetVar"><l>object</l><block s="reportNewList"><list><block s="reportMouseX"></block><block s="reportMouseY"></block></list></block></block></script><script><block s="doIfElse"><block s="reportEquals"><block var="object"/><l>random position</l></block><script><block s="doSetVar"><l>object</l><block s="reportNewList"><list><block s="reportRandom"><block s="reportAttributeOf"><l><option>left</option></l><l>Stage</l></block><block s="reportAttributeOf"><l><option>right</option></l><l>Stage</l></block></block><block s="reportRandom"><block s="reportAttributeOf"><l><option>bottom</option></l><l>Stage</l></block><block s="reportAttributeOf"><l><option>top</option></l><l>Stage</l></block></block></list></block></block></script><script><block s="doIfElse"><block s="reportEquals"><block var="object"/><l>center</l></block><script><block s="doSetVar"><l>object</l><block s="reportNewList"><list><l>0</l><l>0</l></list></block></block></script><script><block s="doIfElse"><block s="reportNot"><block s="reportListContainsItem"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportAskFor"><l></l><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>name</option></l></block></autolambda><list></list></block><list></list></block></autolambda><list></list></block><block s="reportCONS"><block s="reportObject"><l><option>myself</option></l></block><block s="reportGet"><l><option>other sprites</option></l></block></block></block><block var="object"/></block></block><script><block s="doSetVar"><l>object</l><custom-block s="my coordinates"></custom-block></block></script><script><block s="doSetVar"><l>object</l><block s="evaluate"><block s="reportAttributeOf"><block s="reifyReporter"><autolambda><custom-block s="my coordinates"></custom-block></autolambda><list></list></block><block var="object"/></block><list></list></block></block></script></block></script></block></script></block></script></block><block s="doGlide"><block var="n"/><block s="reportListItem"><l>1</l><block var="object"/></block><block s="reportListItem"><l>2</l><block var="object"/></block></block></script></block-definition><block-definition s="my coordinates" type="reporter" category="motion"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><block s="xPosition"></block><block s="yPosition"></block></list></block></block></script></block-definition><block-definition s="replace %&apos;find&apos; in %&apos;text&apos; with %&apos;replace&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s">apples</input><input type="%txt">I like apples</input><input type="%s">bananas</input></inputs><script><block s="doReport"><custom-block s="combine %l with delimiter %mlt"><block s="reportTextSplit"><block var="text"/><block var="find"/></block><block var="replace"/></custom-block></block></script></block-definition><block-definition s="remove all %&apos;thing&apos; in %&apos;text&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s">a</input><input type="%s">steam</input></inputs><script><block s="doReport"><custom-block s="replace %s in %txt with %s"><block var="thing"/><block var="text"/><l></l></custom-block></block></script></block-definition><block-definition s="reverse sound %&apos;snd&apos;" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>§_soundsMenu</options></input></inputs><script><block s="doReport"><block s="reportNewSoundFromSamples"><block s="evaluate"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="s"/></block><l><option>list</option></l></block><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListAttribute"><l><option>reverse</option></l><l/></block></autolambda><list></list></block><block var="s"/></block><block s="reportListAttribute"><l><option>reverse</option></l><block var="s"/></block></block></autolambda><list><l>s</l></list></block><list><block s="reportGetSoundAttribute"><l><option>samples</option></l><block var="snd"/></block></list></block><block s="reportGetSoundAttribute"><l><option>sample rate</option></l><block var="snd"/></block></block></block></script></block-definition><block-definition s="gradient costume %&apos;width&apos; × %&apos;height&apos; $nl with colors %&apos;colors&apos; meeting %&apos;which&apos;" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs><input type="%n">256</input><input type="%n">256</input><input type="%mult%clr"></input><input type="%s" readonly="true">horizontally<options>horizontally&#xD;vertically</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>w</l><l>h</l><l>c</l><l>v</l></list><l>var canvas = document.createElement(&apos;canvas&apos;),&#xD;    ctx = canvas.getContext(&apos;2d&apos;),&#xD;    grd = ctx.createLinearGradient(0, 0, v?0:w, v?h:0);&#xD;canvas.width = w;&#xD;canvas.height = h;&#xD;c = c.itemsArray();&#xD;if (c.length &gt; 0){&#xD;grd.addColorStop(0, c[0]);&#xD;c.shift();&#xD;c.forEach(function (clr, idx) {&#xD; grd.addColorStop((1/c.length*(idx+1)), clr);&#xD;})}&#xD;ctx.fillStyle = grd;&#xD;ctx.fillRect(0, 0, w, h);&#xD;return new Costume(canvas);</l></block><list><block var="width"/><block var="height"/><block var="colors"/><block s="reportEquals"><block var="which"/><l>vertically</l></block></list></block></block></script><scripts><script x="300.0076171874998" y="559.2"><block var="which"/></script><script x="249.07207031249982" y="559.2"><block var="colors"/></script><script x="196.21757812499976" y="591.1999999999999"><block var="height"/></script><script x="147.33281249999982" y="559.2"><block var="width"/></script></scripts></block-definition><block-definition s="sound from url %&apos;url&apos;" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs><input type="%s">Sounds/Chord.wav<options>function () {&#xD;var obj = {};&#xD;world.children[0].getMediaList(&apos;Sounds&apos;).forEach(audio =&gt; {&#xD;obj[audio.name] = &apos;Sounds/&apos; + audio.fileName;&#xD;})&#xD;return obj;&#xD;}</options></input></inputs><script><custom-block s="let %upvar be %s"><l>sound</l><block s="evaluate"><block s="reportJSFunction"><list><l>src</l></list><l>var audio = new Audio(src),&#xD;    sound = null;&#xD;audio.addEventListener(&apos;loadeddata&apos;, () =&gt; {&#xD; sound = new Sound(audio);&#xD;})&#xD;return () =&gt; sound;</l></block><list><block var="url"/></list></block></custom-block><block s="doWaitUntil"><block s="evaluate"><block var="sound"/><list></list></block></block><block s="doReport"><block s="evaluate"><block var="sound"/><list></list></block></block></script></block-definition><block-definition s="let %&apos;var&apos; be %&apos;val&apos;" type="command" category="other"><comment x="0" y="0" w="183.33333333333334" collapsed="false">LET (FOO) BE (5)&#xD;is equivalent to&#xD;SCRIPT VARIABLES (FOO)&#xD;SET (FOO) TO (5)</comment><header></header><code></code><translations>pt:cria a variável de guião _ com valor _&#xD;</translations><inputs><input type="%upvar"></input><input type="%s"></input></inputs><script><block s="doSetVar"><l>var</l><block var="val"/></block></script></block-definition><block-definition s="point resize costume %&apos;costume&apos; by factor %&apos;factor&apos;" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">current<options>§_costumesMenu</options></input><input type="%n">2</input></inputs><script><block s="doIf"><block s="reportOr"><block s="reportNot"><block s="reportEquals"><block s="reportMonadic"><l><option>floor</option></l><block var="factor"/></block><block var="factor"/></block></block><block s="reportOr"><block s="reportNot"><block s="reportEquals"><block s="reportMonadic"><l><option>abs</option></l><block var="factor"/></block><block var="factor"/></block></block><block s="reportEquals"><block var="factor"/><block s="reportQuotient"><l>1</l><l></l></block></block></block></block><script><custom-block s="throw %s %s"><l>Error</l><l>Expecting a finite number but getting Infinity or NaN</l></custom-block></script></block><block s="doDeclareVariables"><list><l>height</l><l>width</l><l>old pixels</l></list></block><block s="doSetVar"><l>height</l><block s="reportGetImageAttribute"><l><option>height</option></l><block var="costume"/></block></block><block s="doSetVar"><l>width</l><block s="reportGetImageAttribute"><l><option>width</option></l><block var="costume"/></block></block><block s="doSetVar"><l>old pixels</l><block s="reportGetImageAttribute"><l><option>pixels</option></l><block var="costume"/></block></block><block s="doSetVar"><l>factor</l><block var="factor"/></block><block s="doReport"><block s="reportNewCostume"><block s="reportReshape"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportReshape"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportReshape"><block s="reportListItem"><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><block var="h"/><block var="width"/></list></block><block var="w"/></list></block><block var="old pixels"/></block><list><block var="factor"/><l>4</l></list></block></autolambda><list><l>w</l></list></block><block s="reportNumbers"><l>1</l><block var="width"/></block></block><list><block s="reportVariadicProduct"><list><block s="reportVariadicProduct"><list><block var="width"/><block var="factor"/></list></block><block var="factor"/></list></block><l>4</l></list></block></autolambda><list><l>h</l></list></block><block s="reportNumbers"><l>0</l><block s="reportDifference"><block var="height"/><l>1</l></block></block></block><list><block s="reportVariadicProduct"><list><block s="reportVariadicProduct"><list><block var="height"/><block var="width"/></list></block><block s="reportVariadicProduct"><list><block var="factor"/><block var="factor"/></list></block></list></block><l>4</l></list></block><block s="reportVariadicProduct"><list><block var="factor"/><block var="width"/></list></block><block s="reportVariadicProduct"><list><block var="factor"/><block var="height"/></list></block></block></block></script></block-definition><block-definition s="matrix %&apos;rows&apos; × %&apos;cols&apos; with: %&apos;fill&apos;" type="reporter" category="lists"><comment x="0" y="0" w="178.10225497159078" collapsed="false">Improved block from @wunder_wulfe using reshape and with italic dropdown option</comment><header></header><code></code><translations></translations><inputs><input type="%n">4</input><input type="%n">3</input><input type="%n">0<options>function() {&#xD;return {&#xD;&quot;identity&quot;: [&quot;identity&quot;]&#xD;};&#xD;}</options></input></inputs><script><block s="doIf"><block s="reportEquals"><block s="reportJoinWords"><block var="fill"/></block><l>identity</l></block><script><block s="doReport"><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportMap"><block s="reifyPredicate"><autolambda><block s="reportDifference"><block s="reportEquals"><block var="x"/><block var="y"/></block><l>0</l></block></autolambda><list><l>x</l></list></block><block s="reportNumbers"><l>1</l><block var="cols"/></block></block></autolambda><list><l>y</l></list></block><block s="reportNumbers"><l>1</l><block var="rows"/></block></block></block></script></block><block s="doReport"><block s="reportReshape"><block var="fill"/><list><block var="rows"/><block var="cols"/></list></block></block></script></block-definition><block-definition s="set font to %&apos;name&apos; $nl bold? %&apos;bold&apos; italic? %&apos;italic&apos;" type="command" category="pen"><header></header><code></code><translations></translations><inputs><input type="%s">monospace<options>arial&#xD;cursive&#xD;monospace</options></input><input type="%b">false</input><input type="%b">false</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>name</l><l>bold</l><l>italic</l></list><l>if (!this.loadedFontsAPI){&#xD; this.loadedFontsAPI = true;&#xD; this.font = &apos;monospace&apos;;&#xD; this.bold = "";&#xD; this.italic = "";&#xD; SpriteMorph.prototype.write = function (text, size) {&#xD;    // thanks to Michael Ball for contributing this code!&#xD;    if (typeof text !== &apos;string&apos; &amp;&amp; typeof text !== &apos;number&apos;) {&#xD;        throw new Error(&#xD;            &apos;LABEL can only draw text or numbers, not a &apos; +&#xD;            typeof text&#xD;        );&#xD;    }&#xD;&#xD;    var stage = this.parentThatIsA(StageMorph),&#xD;        context = stage.penTrails().getContext(&apos;2d&apos;),&#xD;        rotation = radians(this.direction() - 90),&#xD;        trans = new Point(&#xD;            this.rotationCenter().x - stage.left(),&#xD;            this.rotationCenter().y - stage.top()&#xD;        ),&#xD;        len,&#xD;        pos;&#xD;&#xD;    context.save();&#xD;    context.font = this.italic + "normal " + this.bold + size + &apos;px &apos; + this.font;&#xD;    context.textAlign = &apos;left&apos;;&#xD;    context.textBaseline = &apos;alphabetic&apos;;&#xD;    context.fillStyle = this.color.toString();&#xD;    len = context.measureText(text).width;&#xD;    trans = trans.multiplyBy(1 / stage.scale);&#xD;    context.translate(trans.x, trans.y);&#xD;    context.rotate(rotation);&#xD;    context.fillText(text, 0, 0);&#xD;    context.translate(-trans.x, -trans.y);&#xD;    context.restore();&#xD;    pos = new Point(&#xD;        len * Math.sin(radians(this.direction())),&#xD;        len * Math.cos(radians(this.direction()))&#xD;    );&#xD;    pos = pos.add(new Point(this.xPosition(), this.yPosition()));&#xD;    this.gotoXY(pos.x, pos.y, false);&#xD;    this.changed();&#xD;    stage.changed();&#xD;}}&#xD;this.font = name;&#xD;this.bold = bold? "bold ":"normal "&#xD;this.italic = italic? "italic ":"normal ";</l></block><list><block var="name"/><block var="bold"/><block var="italic"/></list></block></script></block-definition><block-definition s="font %&apos;which&apos;" type="reporter" category="pen"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">name<options>name&#xD;bold?&#xD;italic?</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>which</l></list><l>if (!this.loadedFontsAPI){&#xD; this.font = &apos;monospace&apos;;&#xD; this.loadedFontsAPI = true;&#xD; SpriteMorph.prototype.write = function (text, size) {&#xD;    // thanks to Michael Ball for contributing this code!&#xD;    if (typeof text !== &apos;string&apos; &amp;&amp; typeof text !== &apos;number&apos;) {&#xD;        throw new Error(&#xD;            &apos;LABEL can only draw text or numbers, not a &apos; +&#xD;            typeof text&#xD;        );&#xD;    }&#xD;&#xD;    var stage = this.parentThatIsA(StageMorph),&#xD;        context = stage.penTrails().getContext(&apos;2d&apos;),&#xD;        rotation = radians(this.direction() - 90),&#xD;        trans = new Point(&#xD;            this.rotationCenter().x - stage.left(),&#xD;            this.rotationCenter().y - stage.top()&#xD;        ),&#xD;        len,&#xD;        pos;&#xD;&#xD;    context.save();&#xD;    context.font = this.bold + this.italic + size + &apos;px &apos; + this.font;&#xD;    context.textAlign = &apos;left&apos;;&#xD;    context.textBaseline = &apos;alphabetic&apos;;&#xD;    context.fillStyle = this.color.toString();&#xD;    len = context.measureText(text).width;&#xD;    trans = trans.multiplyBy(1 / stage.scale);&#xD;    context.translate(trans.x, trans.y);&#xD;    context.rotate(rotation);&#xD;    context.fillText(text, 0, 0);&#xD;    context.translate(-trans.x, -trans.y);&#xD;    context.restore();&#xD;    pos = new Point(&#xD;        len * Math.sin(radians(this.direction())),&#xD;        len * Math.cos(radians(this.direction()))&#xD;    );&#xD;    pos = pos.add(new Point(this.xPosition(), this.yPosition()));&#xD;    this.gotoXY(pos.x, pos.y, false);&#xD;    this.changed();&#xD;    stage.changed();&#xD;}}&#xD;switch (which){&#xD; case "bold?":&#xD;  return this.bold === &apos;bold &apos;;&#xD; case "italic?":&#xD;  return this.italic === &apos;italic &apos;;&#xD; default:&#xD;  return this.font;&#xD;}</l></block><list><block var="which"/></list></block></block></script></block-definition><block-definition s="clipboard %&apos;which&apos;" type="reporter" category="control"><comment x="0" y="0" w="117.27272727272728" collapsed="false">Fetch clipboard contents as costume or plaintext.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">text<options>text&#xD;image</options></input></inputs><script><block s="doDeclareVariables"><list><l>clip</l></list></block><block s="doIfElse"><block s="reportEquals"><block var="which"/><l>image</l></block><script><block s="doSetVar"><l>clip</l><block s="evaluate"><block s="reportJSFunction"><list></list><l>var item = null,&#xD;    thing = null;&#xD;&#xD;function error(txt){done = true; console.error(txt);}&#xD;&#xD;function loadImage(url){&#xD;  return new Promise((resolve, reject) =&gt; {&#xD;    var img = new Image();&#xD;    img.onload = () =&gt; resolve( img);&#xD;    img.onerror = reject;&#xD;    img.src = url;&#xD;  })&#xD;}&#xD;&#xD;(async () =&gt; {&#xD;  if("clipboard" in navigator) {&#xD;	try{	&#xD;        var clipData = await navigator.clipboard.read();&#xD;        console.log(clipData);&#xD;	&#xD;&#xD;		const item = clipData.find(v =&gt; v.types.includes("image/png"));&#xD;		if(!item)&#xD;   thing = "";&#xD;			error("No image data");&#xD;&#xD;		blob = await item.getType("image/png");&#xD;		var url = (window.URL || window.webkitURL).createObjectURL(blob);&#xD;		var img = await loadImage(url);&#xD;		canvas = newCanvas(new Point(img.width, img.height), true);&#xD;		canvas.getContext(&apos;2d&apos;).drawImage(img, 0, 0);&#xD;		thing = new Costume(canvas, "clipboard");&#xD;    }&#xD;    catch(err){thing="";error("Can&apos;t get PNG data: "+err.message)};&#xD;  }&#xD; else {thing="";error("Cannot access clipboard")}&#xD;})();&#xD;return () =&gt; thing;</l></block><list></list></block></block></script><script><block s="doSetVar"><l>clip</l><block s="evaluate"><block s="reportJSFunction"><list></list><l>var result = null;&#xD;navigator.clipboard.readText().then(&#xD;e=&gt;result=e,e=&gt;result=&apos;&apos;);&#xD;return () =&gt; result;</l></block><list></list></block></block></script></block><block s="doWaitUntil"><block s="reportOr"><block s="evaluate"><block var="clip"/><list></list></block><block s="reportEquals"><block s="evaluate"><block var="clip"/><list></list></block><l></l></block></block></block><block s="doReport"><block s="evaluate"><block var="clip"/><list></list></block></block></script></block-definition><block-definition s="custom dialog, title %&apos;title&apos; costume %&apos;cst&apos; body %&apos;body&apos; $nl button names %&apos;variadic&apos; on button clicks %&apos;cvariadic&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s" readonly="true"><options>§_costumesMenu</options></input><input type="%mlt"></input><input type="%mult%txt"></input><input type="%mult%cmdRing"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>title,body,names,actions,cst,proc</l></list><l>let _txt;&#xD;&#xD; function autoscroll(textString) {&#xD;   _txt = new TextMorph(&#xD;           textString&#xD;           ,box.fontSize&#xD;           ,box.fontStyle&#xD;           ,true&#xD;           ,false&#xD;           ,&apos;center&apos;&#xD;           ,null&#xD;           ,null&#xD;           ,MorphicPreferences.isFlat ? null : new Point(1, 1)&#xD;           ,WHITE&#xD;     )&#xD;     let maxHeight, scroller;&#xD;      &#xD;     maxHeight = Math.min( world.height() - box.titleFontSize * 30, _txt.height());&#xD;     _txt.enableLinks = true;&#xD;       &#xD;     scroller = new ScrollFrameMorph();&#xD;     scroller.acceptsDrops = false;&#xD;     scroller.contents.acceptsDrops = false;&#xD;     scroller.bounds.setWidth(_txt.width());&#xD;     scroller.bounds.setHeight(maxHeight);&#xD;     scroller.addContents( _txt);&#xD;     scroller.color = new Color(0, 0, 0, 0);&#xD;     return scroller;&#xD;    }&#xD;&#xD;names = names.asArray();&#xD;let scs = actions.asArray();&#xD;actions = actions.asArray().map(_=&gt;function doAction(){if(doAction.e==&apos;close&apos;){this.destroy();}else{invoke(doAction.e,new List());this.destroy()}});&#xD;actions.forEach((e,f)=&gt;{e.e=scs[f];e.f=proc})&#xD;var box = new DialogBoxMorph();&#xD;box.labelString = title;&#xD;box.createLabel();&#xD;box.label.isBold = true;&#xD;if(cst !== ""){&#xD;  box.setPicture(proc.reportNewCostumeStretched(cst,100,100).contents);&#xD;};&#xD;box.addBody(autoscroll( body));&#xD;box.body.fixLayout();&#xD;names.forEach((e, f) =&gt; {&#xD;box.addButton(actions[f], e);&#xD;})&#xD;box.fixLayout();&#xD;box.popUp(this.world());</l></block><list><block var="title"/><block var="body"/><block var="variadic"/><block var="cvariadic"/><block var="cst"/></list></block></script></block-definition><block-definition s="edit box title %&apos;title&apos; pic %&apos;cst&apos; $nl body %&apos;body&apos; desc %&apos;desc&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s" readonly="true"><options>§_costumesMenu</options></input><input type="%mlt"></input><input type="%mlt"></input></inputs><script><block s="doDeclareVariables"><list><l>res</l><l>result</l></list></block><block s="doSetVar"><l>res</l><block s="evaluate"><block s="reportJSFunction"><list><l>title,cst,body,desc,proc</l></list><l>let res = false,&#xD;    cancel = false;&#xD;&#xD;var box = new DialogBoxMorph();&#xD;box.ok = body=&gt;{res = box.getInput(); box.destroy()};&#xD;box.cancel = body=&gt;{cancel = true; res = true; box.destroy()};&#xD;box.destroy = body=&gt;{if (!cancel) {res = box.getInput();}else{res=true;}&#xD;    (function() {&#xD;    var world = this.world();&#xD;    world.keyboardFocus = null;&#xD;    world.hand.destroyTemporaries();&#xD;    DialogBoxMorph.uber.destroy.call(this);&#xD;    }).call(box);}&#xD;box.promptCode(&#xD;    title,&#xD;    body,&#xD;    this.world(),&#xD;    (cst !== "")?&#xD;    proc.reportNewCostumeStretched(cst, 100, 100).contents&#xD;    :undefined,&#xD;    desc&#xD;);&#xD;&#xD;return () =&gt; res;</l></block><list><block var="title"/><block var="cst"/><block var="body"/><block var="desc"/></list></block></block><block s="doUntil"><block s="reportOr"><block var="result"/><block s="reportEquals"><block var="result"/><l></l></block></block><script><block s="doSetVar"><l>result</l><block s="evaluate"><block var="res"/><list></list></block></block></script></block><block s="doReport"><block s="reportIfElse"><block s="reportEquals"><block var="result"/><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="reportBoolean"><l><bool>false</bool></l></block><block var="result"/></block></block></script></block-definition><block-definition s="%&apos;prop&apos; of %&apos;list&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">length<options>length&#xD;rank&#xD;shape&#xD;size&#xD;&#126;1&#xD;flatten&#xD;transpose&#xD;reverse&#xD;shuffle&#xD;&#126;2&#xD;lines&#xD;csv&#xD;json</options></input><input type="%l"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>prop</l><l>list</l><l>proc</l></list><l>if (!(list instanceof List)){&#xD; throw new Error("expecting list but getting " +&#xD; ((list === 0)? "nothing":proc.reportTypeOf(list)));&#xD;}&#xD;switch (prop) {&#xD; case "reverse":&#xD;  return new List(list.itemsArray().reverse());&#xD; case "shuffle":&#xD;  return new List(list.itemsArray().sort((a, b) =&gt; (0.5 - Math.random())));&#xD; case "lines":&#xD;  if (list.rank() &lt; 2){&#xD;   return list.itemsArray().join(&apos;\n&apos;);&#xD;  } else {&#xD;   throw new Error("Unable to convert to lines");&#xD;  }&#xD; case "csv":&#xD;  if (list.canBeCSV()){&#xD;   return list.asCSV();&#xD;  } else {&#xD;   throw new Error("Unable to convert to CSV");&#xD;  }&#xD; case "json":&#xD;  if (list.canBeJSON()){&#xD;   return list.asJSON();&#xD;  } else {&#xD;   throw new Error("Unable to convert to JSON");&#xD;  }&#xD; default:&#xD;  return (list[prop] || (() =&gt; 0)).call(list);&#xD;}</l></block><list><block var="prop"/><block var="list"/></list></block></block></script></block-definition><block-definition s="is %&apos;list&apos; %&apos;which&apos; ?" type="predicate" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%s" readonly="true">empty<options>circular&#xD;scalar&#xD;empty&#xD;flat</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>prop</l><l>list</l><l>proc</l></list><l>if (!(list instanceof List)){&#xD; throw new Error("expecting list but getting " +&#xD; ((list === 0)? "nothing":proc.reportTypeOf(list)));&#xD;}&#xD;switch (prop) {&#xD; case "empty":&#xD;  return list.isEmpty();&#xD; case "flat":&#xD;  try {&#xD;   return list.rank() &lt; 2;&#xD;  } catch (e) {&#xD;   return false;&#xD;  }&#xD; case "circular":&#xD;  return list.itemsArray().some(i =&gt; list === i);&#xD; case "scalar":&#xD;  const isScalar = function(x) {&#xD;                    if (!(x instanceof List)){&#xD;                     return true;&#xD;                    } else {&#xD;                     return x.length() == 1&#xD;                     &amp;&amp; isScalar(x.at(1));&#xD;                    }}&#xD;  return isScalar(list);&#xD; default:&#xD;  return "";&#xD;}</l></block><list><block var="which"/><block var="list"/></list></block></block></script></block-definition><block-definition s="pen %&apos;which&apos;" type="reporter" category="pen"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">hue<options>size&#xD;&#126;1&#xD;hue&#xD;saturation&#xD;brightness&#xD;transparency&#xD;&#126;2&#xD;red&#xD;green&#xD;blue&#xD;&#126;3&#xD;rgb&#xD;hsv&#xD;&#126;4&#xD;down?</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>which</l></list><l>switch (which) {&#xD; case "size":&#xD;  return this.penSize();&#xD; case "hue":&#xD;  return this.color.hsv()[0];&#xD; case "saturation":&#xD;  return this.color.hsv()[1];&#xD; case "brightness":&#xD;  return this.color.hsv()[2];&#xD; case "red":&#xD;  return this.color.r;&#xD; case "green":&#xD;  return this.color.g;&#xD; case "blue":&#xD;  return this.color.b;&#xD; case "down?":&#xD;  return this.isDown;&#xD; case "hsv":&#xD;  return new List(this.color.hsv());&#xD; case "rgb":&#xD;  return new List([this.color.r, this.color.g, this.color.b]);&#xD; default:&#xD;  return "";&#xD;}</l></block><list><block var="which"/></list></block></block></script></block-definition><block-definition s="is %&apos;txt&apos; valid JSON?" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%mlt">{"foo":"bar"}</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>txt</l></list><l>try {&#xD; let tmp = JSON.parse(txt);&#xD; return true;&#xD;} catch (e) {&#xD; return false;&#xD;}</l></block><list><block var="txt"/></list></block></block></script></block-definition><block-definition s="costume %&apos;cst&apos; made %&apos;p&apos; % as opaque" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">current<options>§_costumesMenu</options></input><input type="%n">50</input></inputs><script><block s="doReport"><block s="reportNewCostume"><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportConcatenatedLists"><list><block s="reportListItem"><block s="reportNewList"><list><l>1</l><l>2</l><l>3</l></list></block><l/></block><block s="reportNewList"><list><block s="reportVariadicProduct"><list><block s="reportListItem"><l>4</l><l/></block><block s="reportQuotient"><block var="p"/><l>100</l></block></list></block></list></block></list></block></autolambda><list></list></block><block s="reportGetImageAttribute"><l><option>pixels</option></l><l><option>current</option></l></block></block><block s="reportGetImageAttribute"><l><option>width</option></l><l><option>current</option></l></block><block s="reportGetImageAttribute"><l><option>height</option></l><l><option>current</option></l></block></block></block></script></block-definition><block-definition s="symbol %&apos;type&apos; at size %&apos;size&apos; color %&apos;color&apos;" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">Notes<options>function() {&#xD;var obj = {};&#xD;Object.keys(SymbolMorph.prototype)&#xD;.filter(e =&gt; e.includes(&quot;renderSymbol&quot;))&#xD;.map(e =&gt; e.replace(&quot;renderSymbol&quot;, &quot;&quot;))&#xD;.filter(e =&gt; e !== &quot;ClosedBrushPath&quot; &amp;&amp; e !== &quot;Stop&quot;)&#xD;.sort()&#xD;.forEach(e =&gt; obj[e] = e);&#xD;return obj;&#xD;}</options></input><input type="%n">50</input><input type="%clr">rgba(0,0,0,255)</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>type</l><l>size</l><l>color</l></list><l>if ("renderSymbol" + type in SymbolMorph.prototype){&#xD; return new Costume((new SymbolMorph(type.charAt(0).toLowerCase() +&#xD;                                     type.slice(1), size, color)).fullImage(), type);&#xD;} else {return false;}</l></block><list><block var="type"/><block var="size"/><block var="color"/></list></block></block></script></block-definition><block-definition s="clamp %&apos;num&apos; between %&apos;low&apos; and %&apos;high&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">0</input><input type="%n">-1</input><input type="%n">1</input></inputs><script><block s="doIf"><block s="reportIsA"><block var="num"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="clamp %n between %n and %n"><l></l><block var="low"/><block var="high"/></custom-block></autolambda><list></list></block><block var="num"/></block></block></script></block><block s="doReport"><block s="reportVariadicMax"><list><block var="low"/><block s="reportVariadicMin"><list><block var="num"/><block var="high"/></list></block></list></block></block></script></block-definition><block-definition s="lerp from: %&apos;from&apos; to: %&apos;to&apos; by %&apos;percent&apos; %" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n">0</input><input type="%n">10</input><input type="%n">75</input></inputs><script><block s="doReport"><block s="evaluate"><custom-block s="hyperize function %repRing"><block s="reifyReporter"><autolambda><block s="reportVariadicSum"><list><block var="from"/><block s="reportVariadicProduct"><list><block s="reportDifference"><block var="to"/><block var="from"/></block><block s="reportQuotient"><block var="percent"/><l>100</l></block></list></block></list></block></autolambda><list><l>from</l><l>to</l></list></block></custom-block><list><block var="from"/><block var="to"/></list></block></block></script></block-definition><block-definition s="hyperize function %&apos;func&apos;" type="reporter" category="control"><comment x="0" y="0" w="218" collapsed="false">Takes a dyadic scalar function as input, and&#xD;hyperizes it, so that it can take lists as inputs.&#xD;&#xD;Don&apos;t use on slow functions (this has compiled map calls).  Meant for use on primitives.</comment><header></header><code></code><translations></translations><inputs><input type="%repRing"></input></inputs><script><block s="doDeclareVariables"><list><l>hyper func</l><l>scalarized</l><l>scalar?</l><l>scalar-value</l></list></block><block s="doSetVar"><l>scalar?</l><block s="reifyScript"><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="x"/><l><option>list</option></l></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block><block s="doReport"><block s="reportEquals"><block s="reportCombine"><block s="reportListAttribute"><l><option>dimensions</option></l><block var="x"/></block><block s="reifyReporter"><autolambda><block s="reportVariadicProduct"><list><l></l><l></l></list></block></autolambda><list></list></block></block><l>1</l></block></block></script><list><l>x</l></list></block></block><block s="doSetVar"><l>scalar-value</l><block s="reifyScript"><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="x"/><l><option>list</option></l></block></block><script><block s="doReport"><block var="x"/></block></script></block><block s="doReport"><block s="evaluate"><block var="scalar-value"/><list><block s="reportListItem"><l>1</l><block var="x"/></block></list></block></block></script><list><l>x</l></list></block></block><block s="doSetVar"><l>hyper func</l><block s="reifyScript"><script><block s="doWarp"><script><block s="doIfElse"><block s="evaluate"><block var="scalar?"/><list><block var="a"/></list></block><script><block s="doIfElse"><block s="evaluate"><block var="scalar?"/><list><block var="b"/></list></block><script><block s="doReport"><block s="evaluate"><block var="func"/><list><block s="evaluate"><block var="scalar-value"/><list><block var="a"/></list></block><block s="evaluate"><block var="scalar-value"/><list><block var="b"/></list></block></list></block></block></script><script><block s="doSetVar"><l>scalarized</l><block s="evaluate"><block var="scalar-value"/><list><block var="a"/></list></block></block><block s="doIf"><block s="reportEquals"><l></l><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportIsA"><l></l><l><option>list</option></l></block></autolambda><list></list></block><block var="b"/></block></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="func"/><list><block var="scalarized"/><l></l></list></block></autolambda><list></list></block><block var="b"/></block></block></script></block><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="hyper func"/><list><block var="scalarized"/><l></l></list></block></autolambda><list></list></block><block var="b"/></block></block></script></block></script><script><block s="doIfElse"><block s="evaluate"><block var="scalar?"/><list><block var="b"/></list></block><script><block s="doSetVar"><l>scalarized</l><block s="evaluate"><block var="scalar-value"/><list><block var="b"/></list></block></block><block s="doIf"><block s="reportEquals"><l></l><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportIsA"><l></l><l><option>list</option></l></block></autolambda><list></list></block><block var="a"/></block></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="func"/><list><l></l><block var="scalarized"/></list></block></autolambda><list></list></block><block var="a"/></block></block></script></block><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="hyper func"/><list><l></l><block var="scalarized"/></list></block></autolambda><list></list></block><block var="a"/></block></block></script><script><block s="doIf"><block s="reportAnd"><block s="reportEquals"><l></l><block s="reportAtomicFindFirst"><block s="reifyPredicate"><autolambda><block s="reportIsA"><l></l><l><option>list</option></l></block></autolambda><list></list></block><block var="a"/></block></block><block s="reportEquals"><l></l><block s="reportAtomicFindFirst"><block s="reifyPredicate"><autolambda><block s="reportIsA"><l></l><l><option>list</option></l></block></autolambda><list></list></block><block var="b"/></block></block></block><script><block s="doReport"><custom-block s="multimap %repRing over %mult%l"><block var="func"/><list><block var="a"/><block var="b"/></list></custom-block></block></script></block><block s="doReport"><custom-block s="multimap %repRing over %mult%l"><block var="hyper func"/><list><block var="a"/><block var="b"/></list></custom-block></block></script></block></script></block></script></block></script><list><l>a</l><l>b</l></list></block></block><block s="doReport"><block var="hyper func"/></block></script></block-definition><block-definition s="multimap %&apos;function&apos; over %&apos;lists&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%mult%l"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block s="reportListItem"><l>1</l><block var="lists"/></block></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doReport"><block s="reportCONS"><block s="evaluate"><block var="function"/><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>1</l><l/></block></autolambda><list></list></block><block var="lists"/></block></block><custom-block s="multimap %repRing over %mult%l"><block var="function"/><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportCDR"><l/></block></autolambda><list></list></block><block var="lists"/></block></custom-block></block></block></script></block-definition><block-definition s="sound %&apos;sound&apos; exists?" type="predicate" category="sound"><header></header><code></code><translations>el:υπάρχει ο ήχος _ ;&#xD;de:existiert Klang _ ?&#xD;</translations><inputs><input type="%s">pop<options>§_soundsMenu</options></input></inputs><script><block s="doIf"><block s="reportAnd"><custom-block s="setting %s"><l>Hyper blocks support</l></custom-block><block s="reportIsA"><block var="sound"/><l><option>list</option></l></block></block><script><block s="doReport"><block s="reportMap"><block s="reifyPredicate"><autolambda><custom-block s="sound %s exists?"><l></l></custom-block></autolambda><list></list></block><block var="sound"/></block></block></script></block><block s="doReport"><block s="reportListContainsItem"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportGetSoundAttribute"><l><option>name</option></l><l></l></block></autolambda><list></list></block><block s="reportGet"><l><option>sounds</option></l></block></block><block var="sound"/></block></block></script></block-definition><block-definition s="setting %&apos;which&apos;" type="reporter" category="sensing"><comment x="0" y="0" w="254.6666666666666" collapsed="false">Allows reading global settings programmatically.&#xD;&#xD;Eisenberg&apos;s Law:  Anything you can do from the user interface you should be able to do in your program, and vice versa.  This library is just a beginning; there are many UI controls outside of the Settings menu.</comment><header></header><code></code><translations>pt:o valor da configuração _&#xD;el:ρύθμιση _&#xD;de:Einstellung _&#xD;</translations><inputs><input type="%s" readonly="true"><options>Project notes&#xD;Project name&#xD;User&#xD;Presentation mode&#xD;Language&#xD;Zoom blocks&#xD;Stage size&#xD;Stage scale&#xD;Retina display support&#xD;Long form input dialog&#xD;Plain prototype labels&#xD;Input sliders&#xD;Execute on slider change&#xD;Clicking sound&#xD;Turbo mode&#xD;Flat design&#xD;Keyboard editing&#xD;Visible stepping&#xD;Thread safe scripts&#xD;Prefer smooth animations&#xD;Flat line ends&#xD;Codification support&#xD;Inheritance support&#xD;Hyper blocks support&#xD;Visible palette</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>which</l></list><l>var stage = this.parentThatIsA(StageMorph),&#xD;    ide = stage.parentThatIsA(IDE_Morph),&#xD;    world = stage.parentThatIsA(WorldMorph);&#xD;&#xD;switch (which) {&#xD;    case &apos;Project notes&apos;:&#xD;        return ide.projectNotes;&#xD;    case &apos;Project name&apos;:&#xD;        return ide.projectName;&#xD;    case &apos;User&apos;:&#xD;        return ide.cloud.username;&#xD;    case &apos;Presentation mode&apos;:&#xD;        return ide.isAppMode;&#xD;    case &apos;Language&apos;:&#xD;        return SnapTranslator.language;&#xD;    case &apos;Zoom blocks&apos;:&#xD;        return SyntaxElementMorph.prototype.scale;&#xD;    case &apos;Stage size&apos;:&#xD;        return new List([StageMorph.prototype.dimensions.x,&#xD;                                   StageMorph.prototype.dimensions.y]);&#xD;    case &apos;Stage scale&apos;:&#xD;       return stage.scale;&#xD;    case &apos;Retina display support&apos;:&#xD;        return isRetinaEnabled();&#xD;    case &apos;Long form input dialog&apos;:&#xD;        return InputSlotDialogMorph.prototype.isLaunchingExpanded;&#xD;    case &apos;Plain prototype labels&apos;:&#xD;        return BlockLabelPlaceHolderMorph.prototype.plainLabel;&#xD;    case &apos;Input sliders&apos;:&#xD;        return MorphicPreferences.useSliderForInput;&#xD;    case &apos;Execute on slider change&apos;:&#xD;        return ArgMorph.prototype.executeOnSliderEdit;&#xD;    case &apos;Clicking sound&apos;:&#xD;        return !!BlockMorph.prototype.snapSound;&#xD;    case &apos;Turbo mode&apos;:&#xD;        return stage.isFastTracked;&#xD;    case &apos;Flat design&apos;:&#xD;        return MorphicPreferences.isFlat;&#xD;    case &apos;Keyboard editing&apos;:&#xD;        return !!this.scripts.focus;&#xD;    case &apos;Visible stepping&apos;:&#xD;        return Process.prototype.enableSingleStepping;&#xD;    case &apos;Thread safe scripts&apos;:&#xD;        return stage.isThreadSafe;&#xD;    case &apos;Prefer smooth animations&apos;:&#xD;        return StageMorph.prototype.frameRate &gt; 0;&#xD;    case &apos;Flat line ends&apos;:&#xD;        return SpriteMorph.prototype.useFlatLineEnds;&#xD;    case &apos;Codification support&apos;:&#xD;        return StageMorph.prototype.enableCodeMapping;&#xD;    case &apos;Inheritance support&apos;:&#xD;        return StageMorph.prototype.enableInheritance;&#xD;    case &apos;Hyper blocks support&apos;:&#xD;        return Process.prototype.enableHyperOps;&#xD;    default: return which;&#xD;    case &apos;Visible palette&apos;:&#xD;        return ide.currentCategory;&#xD;}</l></block><list><block var="which"/></list></block></block></script></block-definition><block-definition s="ydyydg" type="command" category="control"><header></header><code></code><translations></translations><inputs></inputs><script><block s="hide"></block><block s="doSetVar"><l>option</l><l>starts</l></block><block s="doForever"><script><block s="doSetVar"><l>dictionaryraw</l><l>Afghanistan, Albania, Algeria, Andorra, Angola, Antigua and Barbuda, Argentina, Armenia, Australia, Austria, Azerbaijan, The Bahamas, Bahrain, Bangladesh, Barbados, Belarus, Belgium, Belize, Benin, Bhutan, Bolivia, Bosnia and Herzegovina, Botswana, Brazil, Brunei, Bulgaria, Burkina Faso, Burundi, Cambodia, Cameroon, Canada, Cape Verde, Central African Republic, Chad, Chile, China, Colombia, Comoros, Republic of the Congo, Democratic Republic of the Congo, Costa Rica, Cote d&apos;Ivoire, Croatia, Cuba, Cyprus, Czech Republic, Denmark, Djibouti, Dominica, Dominican Republic, Timor-Leste, Ecuador, Egypt, El Salvador, Equatorial Guinea, Eritrea, Estonia, Ethiopia, Fiji, Finland, France, Gabon, The Gambia, Georgia, Germany, Ghana, Greece, Grenada, Guatemala, Guinea, Guinea-Bissau, Guyana, Haiti, Honduras, Hungary, Iceland, India, Indonesia, Iran, Iraq, Ireland, Israel, Italy, Jamaica, Japan, Jordan, Kazakhstan, Kenya, Kiribati, North Korea, South Korea, Kosovo, Kuwait, Kyrgyzstan, Laos, Latvia, Lebanon, Lesotho, Liberia, Libya, Liechtenstein, Lithuania, Luxembourg, Macedonia, Madagascar, Malawi, Malaysia, Maldives, Mali, Malta, Marshall Islands, Mauritania, Mauritius, Mexico, Federated States of Micronesia, Moldova, Monaco, Mongolia, Montenegro, Morocco, Mozambique, Myanmar, Namibia, Nauru, Nepal, Netherlands, New Zealand, Nicaragua, Niger, Nigeria, Norway, Oman, Pakistan, Palau, Panama, Papua New Guinea, Paraguay, Peru, Philippines, Poland, Portugal, Qatar, Romania, Russia, Rwanda, Saint Kitts and Nevis, Saint Lucia, Saint Vincent and the Grenadines, Samoa, San Marino, Sao Tome and Principe, Saudi Arabia, Senegal, Serbia, Seychelles, Sierra Leone, Singapore, Slovakia, Slovenia, Solomon Islands, Somalia, South Africa, South Sudan, Spain, Sri Lanka, Sudan, Suriname, Swaziland, Sweden, Switzerland, Syria, Taiwan, Tajikistan, Tanzania, Thailand, Togo, Tonga, Trinidad and Tobago, Tunisia, Turkey, Turkmenistan, Tuvalu, Uganda, Ukraine, United Arab Emirates, United Kingdom, United States of America, Uruguay, Uzbekistan, Vanuatu, Vatican City, Venezuela, Vietnam, Yemen, Zambia, Zimbabwe</l><comment w="363.9999999999999" collapsed="false">She, Was,Beautiful,Like,A,McFlurry,Machine,Yet,Broken,Like,A,McFlurry,Machine&#xD;</comment></block><block s="doSetVar"><l>dictionarylist</l><block s="reportTextSplit"><block var="dictionaryraw"/><l>, </l></block></block></script></block></script></block-definition><block-definition s="dfdfdf" type="command" category="control"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doForever"><script><block s="doSetVar"><l>dictionarylist_searched</l><block var="dictionarylist"/></block><block s="doFor"><l>i</l><block s="reportListAttribute"><l><option>length</option></l><block var="dictionarylist"/></block><l>1</l><script><block s="doIf"><block s="reportEquals"><block var="option"/><l>is</l></block><script><block s="doIf"><block s="reportNot"><block s="reportIsIdentical"><custom-block s="%s string %s"><l>lowercase</l><block s="reportListItem"><block var="i"/><block var="dictionarylist"/></block></custom-block><custom-block s="%s string %s"><l>lowercase</l><block var="search"/></custom-block></block></block><script><block s="doDeleteFromList"><block var="i"/><block var="dictionarylist_searched"/></block></script></block></script></block><block s="doIf"><block s="reportEquals"><block var="option"/><l>contains</l></block><script><block s="doIf"><block s="reportNot"><custom-block s="%s $- %s $- %s"><custom-block s="%s string %s"><l>lowercase</l><block s="reportListItem"><block var="i"/><block var="dictionarylist"/></block></custom-block><l>contains</l><custom-block s="%s string %s"><l>lowercase</l><block var="search"/></custom-block></custom-block></block><script><block s="doDeleteFromList"><block var="i"/><block var="dictionarylist_searched"/></block></script></block></script></block><block s="doIf"><block s="reportEquals"><block var="option"/><l>starts</l></block><script><block s="doIf"><block s="reportNot"><custom-block s="%s $- %s $- %s"><custom-block s="%s string %s"><l>lowercase</l><block s="reportListItem"><block var="i"/><block var="dictionarylist"/></block></custom-block><l>starts with</l><custom-block s="%s string %s"><l>lowercase</l><block var="search"/></custom-block></custom-block></block><script><block s="doDeleteFromList"><block var="i"/><block var="dictionarylist_searched"/></block></script></block></script></block><block s="doIf"><block s="reportEquals"><block var="option"/><l>ends</l></block><script><block s="doIf"><block s="reportNot"><custom-block s="%s $- %s $- %s"><custom-block s="%s string %s"><l>lowercase</l><block s="reportListItem"><block var="i"/><block var="dictionarylist"/></block></custom-block><l>ends with</l><custom-block s="%s string %s"><l>lowercase</l><block var="search"/></custom-block></custom-block></block><script><block s="doDeleteFromList"><block var="i"/><block var="dictionarylist_searched"/></block></script></block></script></block></script></block><block s="doSetVar"><l>dictionaryspaced_searched</l><custom-block s="combine %l with delimiter %mlt"><block var="dictionarylist_searched"/><l>&#xD;</l></custom-block></block><block s="clear"></block><block s="gotoXY"><l>-225</l><l>148</l></block><block s="setColor"><color>255,255,255,1</color></block><block s="write"><block s="reportJoinWords"><list><block var="option"/><l>:</l></list></block><l>20</l></block><block s="gotoXY"><l>-90</l><l>148</l></block><block s="setColor"><color>5,3,0,1</color></block><block s="write"><block var="search"/><l>20</l></block><block s="gotoXY"><l>-225</l><l>115</l></block><block s="setColor"><color>5,3,0,1</color></block><custom-block s="write %mlt size %n with wrapping"><block var="dictionaryspaced_searched"/><l>20</l></custom-block></script></block></script></block-definition><block-definition s="hellow" type="command" category="control"><header></header><code></code><translations></translations><inputs></inputs></block-definition><block-definition s="first e word %&apos;search&apos;" type="command" category="lists"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doFor"><l>i</l><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block var="search"/></block><script><block s="doIf"><block s="reportEquals"><block s="reportLetter"><l>1</l><block s="reportListItem"><block var="i"/><block var="search"/></block></block><l>e</l></block><script><block s="doSayFor"><block s="reportListItem"><block var="i"/><block var="search"/></block><l>2</l></block><block s="doStopThis"><l><option>this block</option></l></block></script></block></script></block></script></block-definition><block-definition s="index of %&apos;list&apos; %&apos;values&apos;" type="command" category="lists"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doFor"><l>i</l><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><script><block s="doIf"><block s="reportEquals"><block var="values"/><block s="reportListItem"><block var="i"/><block var="list"/></block></block><script><block s="doSayFor"><block var="i"/><l>1</l></block><block s="doStopThis"><l><option>this block</option></l></block></script></block></script></block><block s="doSayFor"><l>-1</l><l>1</l></block></script></block-definition><block-definition s="contains %&apos;list&apos; %&apos;values&apos;" type="command" category="lists"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doFor"><l>i</l><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><script><block s="doIfElse"><block s="reportEquals"><block var="values"/><block s="reportListItem"><block var="i"/><block var="list"/></block></block><script><block s="doSayFor"><block s="reportBoolean"><l><bool>true</bool></l></block><l>2</l></block><block s="doStopThis"><l><option>this block</option></l></block></script><script><block s="doSayFor"><block s="reportBoolean"><l><bool>false</bool></l></block><l>2</l></block></script></block></script></block></script></block-definition></blocks><stage name="Stage" width="480" height="360" costume="1" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" id="4384"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAAAXNSR0IArs4c6QAADoVJREFUeF7t1cEJAAAIxDDdf2m3sJ+4wEEQuuMIECBAgACBd4F9XzRIgAABAgQIjAB7AgIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECByxcQFpoRMBzwAAAABJRU5ErkJggg==</pentrails><costumes><list id="4385"><item><ref mediaID="Stage_cst_Untitled"></ref></item></list></costumes><sounds><list struct="atomic" id="4386"></list></sounds><variables></variables><blocks></blocks><scripts><script x="10" y="13.000000000000028"><block s="receiveGo"></block></script></scripts><sprites select="1"><sprite name="Write" idx="1" x="104.8828125" y="55" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" hidden="true" costume="0" color="5,3,0,1" pen="tip" id="4392"><costumes><list struct="atomic" id="4393"></list></costumes><sounds><list struct="atomic" id="4394"></list></sounds><blocks></blocks><variables></variables><scripts><script x="35.99999999999997" y="30"><block s="receiveGo"></block><custom-block s="ydyydg"></custom-block></script><script x="40.59698016826937" y="90.49999999999986"><block s="receiveGo"></block><custom-block s="dfdfdf"></custom-block></script><script x="30" y="158.33333333333337"><block s="receiveGo"></block><block s="doForever"><script><block s="doIf"><block s="reportKeyPressed"><l><option>space</option></l></block><script><block s="doAsk"><l>Enter Search Query.</l></block><block s="doSetVar"><l>search</l><block s="getLastAnswer"></block></block></script></block><block s="doIf"><block s="reportKeyPressed"><l><option>3</option></l></block><script><block s="doSetVar"><l>option</l><l>starts</l></block></script></block><block s="doIf"><block s="reportKeyPressed"><l><option>4</option></l></block><script><block s="doSetVar"><l>option</l><l>ends</l></block></script></block><block s="doIf"><block s="reportKeyPressed"><l><option>1</option></l></block><script><block s="doSetVar"><l>option</l><l>is</l></block></script></block><block s="doIf"><block s="reportKeyPressed"><l><option>2</option></l></block><script><block s="doSetVar"><l>option</l><l>contains</l></block></script></block></script></block></script><script x="182.23858173076923" y="35.33333333333374"><custom-block s="%s $- %s $- %s"><block s="reportListItem"><l>1</l><block var="dictionarylist"/></block><l>contains</l><l>coat</l></custom-block></script><script x="176.8303786057695" y="93.666666666667"><block s="receiveGo"></block><block s="clear"></block></script><script x="312.8303786057695" y="91.50000000000117"><block s="doSetVar"><l>option</l><l>starts</l></block><block s="doSetVar"><l>search</l><l>united</l></block></script><script x="295" y="321.83333333333337"><block s="doSetVar"><l>sherad</l><block s="reportNewList"><list><l>2</l><l>3</l><l>5</l><l>7</l><l>11</l></list></block></block><custom-block s="index of %s %s"><block var="sherad"/><l>5</l></custom-block></script><script x="402.1259765625" y="475.66666666666674"><block s="reportListAttribute"><l><option>length</option></l><l/></block></script><script x="296" y="242"><block s="doSetVar"><l>words</l><block s="reportNewList"><list><l>Mad</l><l>Easy</l><l>Car</l></list></block></block><custom-block s="first e word %s"><block var="words"/></custom-block></script><script x="306" y="395.66666666666674"><block s="doSetVar"><l>sherad</l><block s="reportNewList"><list><l>2</l><l>3</l><l>4</l></list></block></block><custom-block s="contains %s %s"><block var="sherad"/><l>4</l></custom-block></script></scripts></sprite><watcher var="dictionaryraw" style="normal" x="1.296549479166515" y="10.000000000000007" color="243,118,29" hidden="true"/><watcher var="dictionarylist" style="normal" x="10" y="31.00000200000001" color="243,118,29" hidden="true"/><watcher var="option" style="normal" x="10" y="295.0000059999998" color="243,118,29" hidden="true"/><watcher var="search" style="normal" x="10" y="316.00000800000004" color="243,118,29" hidden="true"/><watcher var="dictionarylist_searched" style="normal" x="10" y="337.00001000000003" color="243,118,29" hidden="true"/><watcher var="dictionaryspaced_searched" style="normal" x="10" y="338.99999799999995" color="243,118,29" hidden="true"/><watcher var="sherad" style="normal" x="363" y="127.999998" color="243,118,29" extX="80" extY="70"/><watcher var="words" style="normal" x="364" y="230.999998" color="243,118,29" extX="80" extY="70"/></sprites></stage><variables><variable name="dictionaryraw"><l>Afghanistan, Albania, Algeria, Andorra, Angola, Antigua and Barbuda, Argentina, Armenia, Australia, Austria, Azerbaijan, The Bahamas, Bahrain, Bangladesh, Barbados, Belarus, Belgium, Belize, Benin, Bhutan, Bolivia, Bosnia and Herzegovina, Botswana, Brazil, Brunei, Bulgaria, Burkina Faso, Burundi, Cambodia, Cameroon, Canada, Cape Verde, Central African Republic, Chad, Chile, China, Colombia, Comoros, Republic of the Congo, Democratic Republic of the Congo, Costa Rica, Cote d&apos;Ivoire, Croatia, Cuba, Cyprus, Czech Republic, Denmark, Djibouti, Dominica, Dominican Republic, Timor-Leste, Ecuador, Egypt, El Salvador, Equatorial Guinea, Eritrea, Estonia, Ethiopia, Fiji, Finland, France, Gabon, The Gambia, Georgia, Germany, Ghana, Greece, Grenada, Guatemala, Guinea, Guinea-Bissau, Guyana, Haiti, Honduras, Hungary, Iceland, India, Indonesia, Iran, Iraq, Ireland, Israel, Italy, Jamaica, Japan, Jordan, Kazakhstan, Kenya, Kiribati, North Korea, South Korea, Kosovo, Kuwait, Kyrgyzstan, Laos, Latvia, Lebanon, Lesotho, Liberia, Libya, Liechtenstein, Lithuania, Luxembourg, Macedonia, Madagascar, Malawi, Malaysia, Maldives, Mali, Malta, Marshall Islands, Mauritania, Mauritius, Mexico, Federated States of Micronesia, Moldova, Monaco, Mongolia, Montenegro, Morocco, Mozambique, Myanmar, Namibia, Nauru, Nepal, Netherlands, New Zealand, Nicaragua, Niger, Nigeria, Norway, Oman, Pakistan, Palau, Panama, Papua New Guinea, Paraguay, Peru, Philippines, Poland, Portugal, Qatar, Romania, Russia, Rwanda, Saint Kitts and Nevis, Saint Lucia, Saint Vincent and the Grenadines, Samoa, San Marino, Sao Tome and Principe, Saudi Arabia, Senegal, Serbia, Seychelles, Sierra Leone, Singapore, Slovakia, Slovenia, Solomon Islands, Somalia, South Africa, South Sudan, Spain, Sri Lanka, Sudan, Suriname, Swaziland, Sweden, Switzerland, Syria, Taiwan, Tajikistan, Tanzania, Thailand, Togo, Tonga, Trinidad and Tobago, Tunisia, Turkey, Turkmenistan, Tuvalu, Uganda, Ukraine, United Arab Emirates, United Kingdom, United States of America, Uruguay, Uzbekistan, Vanuatu, Vatican City, Venezuela, Vietnam, Yemen, Zambia, Zimbabwe</l></variable><variable name="dictionarylist"><list struct="atomic" id="4518">Afghanistan,Albania,Algeria,Andorra,Angola,Antigua and Barbuda,Argentina,Armenia,Australia,Austria,Azerbaijan,The Bahamas,Bahrain,Bangladesh,Barbados,Belarus,Belgium,Belize,Benin,Bhutan,Bolivia,Bosnia and Herzegovina,Botswana,Brazil,Brunei,Bulgaria,Burkina Faso,Burundi,Cambodia,Cameroon,Canada,Cape Verde,Central African Republic,Chad,Chile,China,Colombia,Comoros,Republic of the Congo,Democratic Republic of the Congo,Costa Rica,Cote d&apos;Ivoire,Croatia,Cuba,Cyprus,Czech Republic,Denmark,Djibouti,Dominica,Dominican Republic,Timor-Leste,Ecuador,Egypt,El Salvador,Equatorial Guinea,Eritrea,Estonia,Ethiopia,Fiji,Finland,France,Gabon,The Gambia,Georgia,Germany,Ghana,Greece,Grenada,Guatemala,Guinea,Guinea-Bissau,Guyana,Haiti,Honduras,Hungary,Iceland,India,Indonesia,Iran,Iraq,Ireland,Israel,Italy,Jamaica,Japan,Jordan,Kazakhstan,Kenya,Kiribati,North Korea,South Korea,Kosovo,Kuwait,Kyrgyzstan,Laos,Latvia,Lebanon,Lesotho,Liberia,Libya,Liechtenstein,Lithuania,Luxembourg,Macedonia,Madagascar,Malawi,Malaysia,Maldives,Mali,Malta,Marshall Islands,Mauritania,Mauritius,Mexico,Federated States of Micronesia,Moldova,Monaco,Mongolia,Montenegro,Morocco,Mozambique,Myanmar,Namibia,Nauru,Nepal,Netherlands,New Zealand,Nicaragua,Niger,Nigeria,Norway,Oman,Pakistan,Palau,Panama,Papua New Guinea,Paraguay,Peru,Philippines,Poland,Portugal,Qatar,Romania,Russia,Rwanda,Saint Kitts and Nevis,Saint Lucia,Saint Vincent and the Grenadines,Samoa,San Marino,Sao Tome and Principe,Saudi Arabia,Senegal,Serbia,Seychelles,Sierra Leone,Singapore,Slovakia,Slovenia,Solomon Islands,Somalia,South Africa,South Sudan,Spain,Sri Lanka,Sudan,Suriname,Swaziland,Sweden,Switzerland,Syria,Taiwan,Tajikistan,Tanzania,Thailand,Togo,Tonga,Trinidad and Tobago,Tunisia,Turkey,Turkmenistan,Tuvalu,Uganda,Ukraine,United Arab Emirates,United Kingdom,United States of America,Uruguay,Uzbekistan,Vanuatu,Vatican City,Venezuela,Vietnam,Yemen,Zambia,Zimbabwe</list></variable><variable name="option"><l>starts</l></variable><variable name="search"><l>f</l></variable><variable name="dictionarylist_searched"><list struct="atomic" id="4519">Afghanistan,Albania,Algeria,Andorra,Angola,Antigua and Barbuda,Argentina,Armenia,Australia,Austria,Azerbaijan,The Bahamas,Bahrain,Bangladesh,Barbados,Belarus,Belgium,Belize,Benin,Bhutan,Bolivia,Bosnia and Herzegovina,Botswana,Brazil,Brunei,Bulgaria,Burkina Faso,Burundi,Cambodia,Cameroon,Canada,Cape Verde,Central African Republic,Chad,Chile,China,Colombia,Comoros,Republic of the Congo,Democratic Republic of the Congo,Costa Rica,Cote d&apos;Ivoire,Croatia,Cuba,Cyprus,Czech Republic,Denmark,Djibouti,Dominica,Dominican Republic,Timor-Leste,Ecuador,Egypt,El Salvador,Equatorial Guinea,Eritrea,Estonia,Ethiopia,Fiji,Finland,France,Gabon,The Gambia,Georgia,Germany,Ghana,Greece,Grenada,Guatemala,Guinea,Guinea-Bissau,Guyana,Haiti,Honduras,Hungary,Iceland,India,Indonesia,Iran,Iraq,Ireland,Israel,Italy,Jamaica,Japan,Jordan,Kazakhstan,Kenya,Kiribati,North Korea,South Korea,Kosovo,Kuwait,Kyrgyzstan,Laos,Latvia,Lebanon,Lesotho,Liberia,Libya,Liechtenstein,Lithuania,Luxembourg,Macedonia,Madagascar,Malawi,Malaysia,Maldives,Mali,Federated States of Micronesia</list></variable><variable name="dictionaryspaced_searched"><l>Fiji&#xD;Finland&#xD;France&#xD;Federated States of Micronesia</l></variable><variable name="words"><list struct="atomic" id="4520">Mad,Easy,Car</list></variable><variable name="sherad"><list struct="atomic" id="4521">2,3,5,7,11</list></variable></variables></scene></scenes></project><media name="List Search" app="Snap! 7, https://snap.berkeley.edu" version="2"><costume name="Untitled" center-x="240" center-y="180.5" image="data:image/png;base64,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" mediaID="Stage_cst_Untitled"/></media></snapdata>