<snapdata remixID="9728497"><project name="meshes" app="Snap! 6, https://snap.berkeley.edu" version="1"><notes></notes><thumbnail>data:image/png;base64,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</thumbnail><stage name="Stage" width="480" height="360" costume="0" 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" scheduled="false" id="1"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAOhUlEQVR4Xu3VwQkAAAjEMN1/abewn7jAQRC64wgQIECAAIF3gX1fNEiAAAECBAiMAHsCAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+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+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQIHLFxAWmhEwHPAAAAAElFTkSuQmCC</pentrails><costumes><list struct="atomic" id="2"></list></costumes><sounds><list struct="atomic" id="3"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites><sprite name="Sprite" idx="1" x="0" y="0" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="80,80,80,1" pen="tip" id="8"><costumes><list struct="atomic" id="9"></list></costumes><sounds><list struct="atomic" id="10"></list></sounds><blocks></blocks><variables></variables><scripts><script x="30" y="30"><block s="receiveGo"></block><block s="doSetVar"><l>messages</l><block s="reportNewList"><list></list></block></block><custom-block s="init"><comment w="90" collapsed="false">Delete this and it will throw an error!</comment></custom-block><custom-block s="socket id %s"><l>demo</l><comment w="134" collapsed="false">Your app id.App ids can not conflict or the 2 conflicting apps(unless they use the same format)will receive gibberish.</comment></custom-block><custom-block s="when event occurs do %upvar %cs"><l>data</l><script><block s="doAddToList"><block var="data"/><block var="messages"/></block></script><comment w="90" collapsed="true">What is your event listener?</comment></custom-block><block s="doForever"><script><block s="doAsk"><l></l></block><custom-block s="emit event with data %s"><block s="getLastAnswer"></block><comment w="90" collapsed="true">Emit/Broadcast an event</comment></custom-block><block s="doWait"><l>1</l></block></script></block></script></scripts></sprite><watcher var="messages" style="normal" x="10" y="10" color="243,118,29" extX="80" extY="70"/></sprites></stage><hidden></hidden><headers></headers><code></code><blocks><block-definition s="install socket.io" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>if(typeof io !== "function") {&#xD;const ioScript = document.createElement(&apos;script&apos;);&#xD;ioScript.src = &apos;https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.3.1/socket.io.js&apos;;&#xD;document.head.appendChild(ioScript);&#xD;console.log(&apos;Socket.io was installed.&apos;);&#xD;}</l></block><list></list></block></script></block-definition><block-definition s="is socket.io installed" type="predicate" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return typeof io === "function"</l></block><list></list></block></block></script></block-definition><block-definition s="emit event with data %&apos;data&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doIf"><custom-block s="is socket.io installed"></custom-block><script><block s="doRun"><block s="reportJSFunction"><list><l>event</l></list><l>socket.emit("*", {type:sockid,content:event});</l></block><list><block var="data"/></list></block></script></block></script></block-definition><block-definition s="when event occurs do %&apos;data&apos; %&apos;callback&apos;" type="command" category="other"><comment x="0" y="0" w="90" collapsed="false">Executes a callback whenever a event is smitted by the server. Turns JSON/object data to a 2d list. Do not rename the upvar or you will not be able to use the event data.</comment><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%cs"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>event</l><l>callback</l><l>proc</l></list><l>socket.on(event, function(eventData) {&#xD;if(eventData.type!==sockid){return}&#xD;eventData=eventData.content&#xD;if(typeof eventData === "object") {&#xD;eventData = [];&#xD;Object.keys(eventData).forEach(item =&gt; {&#xD;eventData.push([item, eventData[item]])&#xD;});&#xD;}&#xD;proc.homeContext.variables.setVar(&apos;data&apos;,eventData);&#xD;proc.evaluate(callback, new List(), true);&#xD;});</l></block><list><l>*</l><block var="callback"/></list></block></script></block-definition><block-definition s="connect to socket" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doIf"><custom-block s="is socket.io installed"></custom-block><script><block s="doRun"><block s="reportJSFunction"><list><l>socketURL</l></list><l>window.socket = io(socketURL);</l></block><list><l>https://SnapMeshes.18001767679.repl.co</l></list></block></script></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", 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="error %&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;</translations><inputs><input type="%txt"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>msg</l></list><l>throw new Error(msg);</l></block><list><block var="msg"/></list></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="socket id %&apos;id&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>k</l></list><l>window.sockid=k</l></block><list><block var="id"/></list></block></script></block-definition><block-definition s="init" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><custom-block s="safely try %cs then if %upvar %cs"><script><custom-block s="install socket.io"><comment w="90" collapsed="true">Install it first!</comment></custom-block><custom-block s="connect to socket"><comment w="167" collapsed="true">Connect to the socket(required too)</comment></custom-block></script><l>error</l><script><block s="doSayFor"><block var="error"/><l>2</l></block><block s="bubble"><l>Please double click the green flag.Will reboot in 1 second.</l></block><block s="fork"><block s="reifyScript"><script><block s="doWait"><l>1</l></block><block s="doBroadcast"><l><option>__shout__go__</option></l></block></script><list></list></block><list></list></block><block s="doStopThis"><l><option>this block</option></l></block></script><comment w="90" collapsed="true">Delete this and it will throw an error!</comment></custom-block></script><scripts><script x="66" y="264.1666666666668"><block s="fork"><block s="reifyScript"><script><block s="doForever"><script><block s="doRun"><block s="reportJSFunction"><list><l>event</l></list><l>socket.emit("*", "tick");</l></block><list><l>tick</l></list></block></script></block></script><list></list></block><list></list></block></script></scripts></block-definition></blocks><variables><variable name="messages"><list struct="atomic" id="259">a,a</list></variable></variables></project><media name="meshes" app="Snap! 6, https://snap.berkeley.edu" version="1"></media></snapdata>