<snapdata remixID="14243411"><project name="unit 5 lab 6 tic tac toe" app="Snap! 10.4.6, https://snap.berkeley.edu" version="2"><notes></notes><thumbnail>data:image/png;base64,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</thumbnail><scenes select="1"><scene name="unit 5 lab 6 tic tac toe"><notes></notes><hidden></hidden><headers></headers><code></code><blocks><block-definition s="for %&apos;i&apos; = %&apos;start&apos; to %&apos;end&apos; %&apos;action&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%n">1</input><input type="%n">10</input><input type="%cs"></input></inputs><script><block s="doDeclareVariables"><list><l>step</l><l>tester</l></list></block><block s="doIfElse"><block s="reportVariadicGreaterThan"><list><block var="start"/><block var="end"/></list></block><script><block s="doSetVar"><l>step</l><l>-1</l></block><block s="doSetVar"><l>tester</l><block s="reifyReporter"><autolambda><block s="reportVariadicLessThan"><list><block var="i"/><block var="end"/></list></block></autolambda><list></list></block></block></script><script><block s="doSetVar"><l>step</l><l>1</l></block><block s="doSetVar"><l>tester</l><block s="reifyReporter"><autolambda><block s="reportVariadicGreaterThan"><list><block var="i"/><block var="end"/></list></block></autolambda><list></list></block></block></script></block><block s="doSetVar"><l>i</l><block var="start"/></block><block s="doUntil"><block s="evaluate"><block var="tester"/><list></list></block><script><block s="doRun"><block var="action"/><list></list></block><block s="doChangeVar"><l>i</l><block var="step"/></block></script></block></script></block-definition><block-definition s="join words %&apos;words&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%mult%txt"></input></inputs><script><block s="doWarp"><script><block s="doIf"><block s="errorObsolete"></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="words"/></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><l></l><block s="reportListItem"><l>1</l><block var="words"/></block></list></block><script><block s="doReport"><custom-block s="join words %mult%txt"><block s="reportCDR"><block var="words"/></block></custom-block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><l></l><block s="reportListItem"><l>2</l><block var="words"/></block></list></block><script><block s="doReport"><custom-block s="join words %mult%txt"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="words"/></block><block s="reportCDR"><block s="reportCDR"><block var="words"/></block></block></block></custom-block></block></script><list></list></block><block s="doReport"><block s="reportJoinWords"><list><block s="reportListItem"><l>1</l><block var="words"/></block><l> </l><custom-block s="join words %mult%txt"><block s="reportCDR"><block var="words"/></block></custom-block></list></block></block></script></block></script><scripts><script x="229.00000300000002" y="196.77778077777774"><block s="reportJoinWords"><list><l></l><l></l></list></block></script></scripts></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="makeBoard" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSwitchToCostume"><l>Empty</l></block><block s="show"></block><block s="setEffect"><l><option>ghost</option></l><l>30</l><comment w="78" collapsed="true">3.3.3 TIF B</comment></block><block s="setScale"><l>95</l><comment w="190" collapsed="true">Oops costumes are a bit too big.</comment></block><block s="doSetVar"><l>position number</l><l>1</l><comment w="53.333333333333336" collapsed="true">3.3.1.4</comment></block><custom-block s="for %upvar = %n to %n %cs"><l>i</l><l>1</l><l>3</l><script><custom-block s="for %upvar = %n to %n %cs"><l>j</l><l>1</l><l>3</l><script><block s="gotoXY"><block s="reportVariadicSum"><list><l>-100</l><block s="reportVariadicProduct"><list><l>50</l><block var="j"/></list></block></list></block><block s="reportDifference"><l>100</l><block s="reportVariadicProduct"><list><l>50</l><block var="i"/></list></block></block></block><block s="createClone"><l><option>myself</option></l></block><block s="doChangeVar"><l>position number</l><l>1</l><comment w="53.333333333333336" collapsed="true">3.3.1.4</comment></block></script></custom-block></script></custom-block><block s="hide"></block></script></block-definition><block-definition s="possible winning triples" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><block s="reportNewList"><list><l>1</l><l>2</l><l>3</l></list></block><block s="reportNewList"><list><l>4</l><l>5</l><l>6</l></list></block><block s="reportNewList"><list><l>7</l><l>8</l><l>9</l></list></block><block s="reportNewList"><list><l>1</l><l>4</l><l>7</l></list></block><block s="reportNewList"><list><l>2</l><l>5</l><l>8</l></list></block><block s="reportNewList"><list><l>3</l><l>6</l><l>9</l></list></block><block s="reportNewList"><list><l>1</l><l>5</l><l>9</l></list></block><block s="reportNewList"><list><l>3</l><l>5</l><l>7</l></list></block></list></block></block></script></block-definition><block-definition s="status of triple %&apos;triple&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="reportListItem"><l></l><block var="board"/></block></autolambda><list></list></block><block var="triple"/></block></block></script></block-definition><block-definition s="status of all winning triples" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="status of triple %l"><l/></custom-block></autolambda><list></list></block><custom-block s="possible winning triples"></custom-block></block></block></script></block-definition><block-definition s="won? %&apos;who&apos;" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="reportListContainsItem"><custom-block s="status of all winning triples"></custom-block><block s="reportNewList"><list><block var="who"/><block var="who"/><block var="who"/></list></block></block></block></script></block-definition><block-definition s="tied?" type="predicate" category="operators"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportVariadicEquals"><list><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportIsA"><l></l><l><option>number</option></l></block></autolambda><list></list></block><block var="board"/></block><l></l></list></block></block></script></block-definition><block-definition s="draw win line" type="command" category="lists"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doFor"><l>i</l><l>1</l><l>8</l><script><block s="doDeclareVariables"><list><l>line</l></list></block><block s="doIf"><block s="reportVariadicOr"><list><block s="reportVariadicEquals"><list><block s="reportListItem"><block var="i"/><custom-block s="status of all winning triples"></custom-block></block><block s="reportNewList"><list><l>X</l><l>X</l><l>X</l></list></block></list></block><block s="reportVariadicEquals"><list><block s="reportListItem"><block var="i"/><custom-block s="status of all winning triples"></custom-block></block><block s="reportNewList"><list><l>O</l><l>O</l><l>O</l></list></block></list></block></list></block><script><block s="doSetVar"><l>line</l><block s="reportListItem"><block var="i"/><block var="win lines"/></block></block><block s="up"></block><block s="doGotoObject"><block s="reportListItem"><l>1</l><block var="line"/><comment w="137.33333333333334" collapsed="false">This is why each line in WIN LINES is a list of points, each of which is a list of x,y coordinates:  It allows us to use the endpoints, as points, in the GO TO block.</comment></block></block><block s="down"></block><block s="doGotoObject"><block s="reportListItem"><l>2</l><block var="line"/></block></block><block s="up"></block></script><list></list></block></script></block></script><scripts><comment x="174" y="6.666666666666667" w="244" collapsed="false">I&apos;m kind of bummed that I didn&apos;t find a beautiful one-line solution using FIND FIRST, but it just gives the value it finds, not the position in the list, which is what we need to find the line endpoints in WIN LINES. So it&apos;s a plain old fashioned FOR loop.</comment></scripts></block-definition><block-definition s="Move in this square" type="command" category="motion"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doIfElse"><block var="X&apos;s turn?"/><script><block s="doSwitchToCostume"><l>X</l></block><block s="doReplaceInList"><block var="position number"/><block var="board"/><l>X</l></block><block s="doBroadcast"><l>1</l><list></list></block><block s="doIf"><custom-block s="won? %s"><l>X</l></custom-block><script><block s="bubble"><l>X won!</l></block><block s="goToLayer"><l><option>front</option></l></block><block s="doTellTo"><l>Sprite</l><block s="reifyScript"><script><custom-block s="draw win line"></custom-block></script><list></list></block><list></list></block><block s="doSetVar"><l>playing</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block></script><script><block s="doSwitchToCostume"><l>O</l></block><block s="doReplaceInList"><block var="position number"/><block var="board"/><l>O</l></block><block s="doIf"><custom-block s="won? %s"><l>O</l></custom-block><script><block s="bubble"><l>O won!</l></block><block s="goToLayer"><l><option>front</option></l></block><block s="doTellTo"><l>Sprite</l><block s="reifyScript"><script><custom-block s="draw win line"></custom-block></script><list></list></block><list></list></block><block s="doSetVar"><l>playing</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block></script></block><block s="doSetVar"><l>X&apos;s turn?</l><block s="reportNot"><block var="X&apos;s turn?"/></block></block><block s="doIf"><block s="reportVariadicAnd"><list><block var="playing"/><custom-block s="tied?"></custom-block></list></block><script><block s="bubble"><l>It&apos;s a tie.</l></block><block s="goToLayer"><l><option>front</option></l></block></script><list></list></block><block s="doDeclareVariables"><list><l>available squares</l></list></block><block s="doSetVar"><l>available squares</l><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportIsA"><l></l><l><option>number</option></l></block></autolambda><list></list></block><block var="board"/></block></block><block s="doIf"><block s="reportVariadicAnd"><list><block var="playing"/><block s="reportVariadicEquals"><list><block s="reportListAttribute"><l><option>length</option></l><block var="available squares"/></block><l>1</l></list></block></list></block><script><block s="doReplaceInList"><block s="reportListItem"><l>1</l><block var="available squares"/></block><block var="board"/><l>X</l></block><block s="doIf"><block s="reportNot"><custom-block s="won? %s"><l>X</l></custom-block></block><script><block s="bubble"><l>It&apos;s a tie.</l></block><block s="goToLayer"><l><option>front</option></l></block><block s="doSetVar"><l>playing</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block></script><list></list></block></script></block-definition><block-definition s="Best empty square" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doIf"><l/><script></script><list></list></block><block s="doReport"><l></l></block></script><scripts><script x="168.53030303030306" y="130.30303030303048"><block var="position number"/></script></scripts></block-definition><block-definition s="how many %&apos;letter&apos; in %&apos;triple&apos; ?" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportListAttribute"><l><option>length</option></l><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportVariadicEquals"><list><l></l><block var="letter"/></list></block></autolambda><list></list></block><block var="triple"/></block></block></block></script></block-definition><block-definition s="winning triple for player %&apos;who&apos;" type="reporter" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportVariadicAnd"><list><l/><l/></list></block></autolambda><list></list></block><custom-block s="status of all winning triples"></custom-block></block></block></script></block-definition></blocks><primitives></primitives><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="true" hyperops="true" codify="false" inheritance="false" sublistIDs="false" id="625"><pentrails>data:image/png;base64,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</pentrails><costumes><list struct="atomic" id="626"></list></costumes><sounds><list struct="atomic" id="627"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="1"><sprite name="Square" idx="1" x="50" y="-50" heading="90" scale="0.95" volume="100" pan="0" rotation="1" draggable="false" hidden="true" costume="1" color="80,80,80,1" pen="tip" id="632"><costumes><list id="633"><item><ref mediaID="Square_cst_Empty"></ref></item><item><ref mediaID="Square_cst_X"></ref></item><item><ref mediaID="Square_cst_O"></ref></item></list></costumes><sounds><list struct="atomic" id="634"></list></sounds><blocks></blocks><variables><variable name="position number"><l>10</l></variable></variables><scripts><script x="28.969695969696915" y="1647.4242424242525"><block s="doSetVar"><l>win lines</l><block s="reportNewList"><list><block s="reportNewList"><list><block s="reportNewList"><list><l>-100</l><l>50</l></list></block><block s="reportNewList"><list><l>100</l><l>50</l></list></block></list></block><block s="reportNewList"><list><block s="reportNewList"><list><l>-100</l><l>0</l></list></block><block s="reportNewList"><list><l>100</l><l>0</l></list></block></list></block><block s="reportNewList"><list><block s="reportNewList"><list><l>-100</l><l>-50</l></list></block><block s="reportNewList"><list><l>100</l><l>-50</l></list></block></list></block><block s="reportNewList"><list><block s="reportNewList"><list><l>-50</l><l>100</l></list></block><block s="reportNewList"><list><l>-50</l><l>-100</l></list></block></list></block><block s="reportNewList"><list><block s="reportNewList"><list><l>0</l><l>100</l></list></block><block s="reportNewList"><list><l>0</l><l>-100</l></list></block></list></block><block s="reportNewList"><list><block s="reportNewList"><list><l>50</l><l>100</l></list></block><block s="reportNewList"><list><l>50</l><l>-100</l></list></block></list></block><block s="reportNewList"><list><block s="reportNewList"><list><l>-100</l><l>100</l></list></block><block s="reportNewList"><list><l>100</l><l>-100</l></list></block></list></block><block s="reportNewList"><list><block s="reportNewList"><list><l>-100</l><l>-100</l></list></block><block s="reportNewList"><list><l>100</l><l>100</l></list></block></list></block></list></block></block></script><comment x="30.63636363636357" y="1845.4242424242498" w="363.3333333333333" collapsed="false">TIF B:  First of all, we don&apos;t want Square, the sprite with nine clones to show the board, to move around.  So I added another sprite, named Sprite.  It&apos;s hidden, but can draw lines with its thick red pen.  (Click on Sprite at the right to see its code.)  The actual work is done in procedure DRAW WIN LINE.  But instead of running DRAW WIN LINE in the Square sprite (this one), we TELL Sprite TO do it. </comment><script x="34.96969696969694" y="1944.757575757567"><custom-block s="draw win line"><comment w="90" collapsed="true">TIF B inside.</comment></custom-block></script><comment x="33.303030303030255" y="1969.7575757575696" w="358" collapsed="false">We modify makeBoard for TIF B because drawn lines are behind sprites on the stage, so the win line is hidden by the board.  To fix that, we apply a ghost effect (transparency) to the board sprites.  The value 30 for the ghost effect was found by experiment.  Any more and the board is too faint; any less and the line is.</comment><script x="34.30303030303031" y="2055.757575757565"><custom-block s="makeBoard"><comment w="90" collapsed="true">TIF B inside.</comment></custom-block></script><comment x="29.969696969696912" y="1183.7575757575896" w="358.6666666666667" collapsed="false">3.3.3 TIF A&#xD;This is quite complicated!&#xD;We are asked to make a check, never mind details yet, after the eighth move, because that&apos;s when the last move is forced.  But if the eighth move causes O to win (it has to be O because odd numbered moves are X and even numbered moves are O), then we shouldn&apos;t do this.  That&apos;s why the IF around this code has to include a check of PLAYING.&#xD;&#xD;If O didn&apos;t just win, then we are going to imagine filling the final square with X (because move 9, an odd-numbered move, is always X).  But we&apos;re not really going to change what&apos;s on the board, just what&apos;s in the BOARD list.  (Really we shouldn&apos;t even do that; we should copy the list and change the copy.  But if the eighth move has just happened and X can win on the next move, it&apos;s okay that we&apos;ve already marked that square as belonging to X; we&apos;ll do it again when player X actually clicks the square.)&#xD;&#xD;It&apos;s just after the eighth move if there&apos;s exactly one number left in BOARD.  We compute the list of numbers in BOARD, for two purposes:  First we see if there&apos;s exactly one number.  If so, we change that item of BOARD to X.  Then, if X didn&apos;t win, we can announce a tie. &#xD;&#xD;Note: The code from 3.3.3.1 that checks for a tie on the ninth move is now never going to succeed, because we&apos;re catching ties early.  But there&apos;s no need to remove it, just in case a player manages to click the ninth square before we locate it.  Maybe mark it as obsolete in a comment.  </comment><comment x="28.636363636363598" y="1568.4242424242536" w="356" collapsed="false">3.3.3.TIF B starts here.  The instruction below only needs to be run once.  It makes a list of the two endpoints of each of the lines to mark a win.  It must be in the same order as POSSIBLE WINNING TRIPLES. </comment><script x="792.6363626363636" y="171.09090909090912"><block s="receiveGo"></block><block s="clear"></block><custom-block s="makeBoard"></custom-block><block s="doSetVar"><l>X&apos;s turn?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="doSetVar"><l>board</l><block s="reportNumbers"><l>1</l><l>9</l></block></block><block s="doSetVar"><l>playing</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script x="41.09090809090907" y="131.42424242424102"><custom-block s="possible winning triples"></custom-block></script><script x="10" y="43"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l></l><block var="board"/></block></autolambda><list></list></block><block s="reportNewList"><list><l>1</l><l>2</l><l>3</l></list></block></block></script><script x="412.9090909090909" y="42.939393939393995"><block s="reportVariadicEquals"><list><l></l><block s="reportNewList"><list><l>X</l><l>X</l><custom-block s="status of triple %l"><block s="reportNewList"><list><l>1</l><l>2</l><l>3</l></list></block></custom-block></list></block></list></block></script><script x="14.823418744318019" y="164.6060606060595"><block s="reportVariadicEquals"><list><block var="X&apos;s turn?"/><block s="reportBoolean"><l><bool>false</bool></l></block></list></block></script><script x="222.63636363636363" y="117.69696969697009"><block s="reportListItem"><l><option>random</option></l><block var="board"/></block></script><script x="277.5757565757575" y="89.3636363636353"><custom-block s="status of triple %l"><l/></custom-block></script><script x="801.8787868787879" y="52.00000000000125"><custom-block s="status of all winning triples"></custom-block></script><script x="23.99999999999926" y="228.12121212121428"><block s="receiveMessage"><l><option>any message</option></l><list><l>data</l></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="data"/><block var="position number"/></list></block><script><custom-block s="Move in this square"></custom-block></script><list></list></block></script><script x="813.3030293030301" y="349.3030303030324"><block s="receiveInteraction"><l><option>clicked</option></l></block><block s="doIf"><block s="reportVariadicAnd"><list><block var="playing"/><block s="reportVariadicEquals"><list><block s="getCostumeIdx"></block><l>1</l></list></block></list></block><script><custom-block s="Move in this square"></custom-block></script><list></list></block></script><script x="576.3333323333333" y="215.78787878788057"><custom-block s="won? %s"><l>X</l></custom-block></script><script x="285.969695969697" y="197.6969696969718"><custom-block s="tied?"></custom-block></script></scripts></sprite><sprite name="Sprite" idx="2" x="100" y="100" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" hidden="true" costume="0" color="255,32,0,1" pen="tip" id="883"><costumes><list struct="atomic" id="884"></list></costumes><sounds><list struct="atomic" id="885"></list></sounds><blocks></blocks><variables></variables><scripts><script x="27" y="23.666666666666668"><block s="receiveGo"></block><block s="hide"></block><block s="setSize"><l>5</l></block><block s="setColor"><color>255,32,0,1</color></block></script></scripts></sprite><watcher scope="Square" var="position number" style="normal" x="10" y="298.500002" color="243,118,29" hidden="true"/><watcher var="playing" style="normal" x="10" y="325.499996" color="243,118,29" hidden="true"/><watcher var="win lines" style="normal" x="10" y="177.999998" color="243,118,29" hidden="true"/><watcher var="board" style="normal" x="0" y="0" color="243,118,29" extX="80" extY="70"/></sprites></stage><variables><variable name="X&apos;s turn?"><bool>true</bool></variable><variable name="board"><list struct="atomic" id="900">O,X,X,X,X,6,X,8,9</list></variable><variable name="playing"><bool>false</bool></variable><variable name="win lines"><list id="901"><item><list id="902"><item><list struct="atomic" id="903">-100,50</list></item><item><list struct="atomic" id="904">100,50</list></item></list></item><item><list id="905"><item><list struct="atomic" id="906">-100,0</list></item><item><list struct="atomic" id="907">100,0</list></item></list></item><item><list id="908"><item><list struct="atomic" id="909">-100,-50</list></item><item><list struct="atomic" id="910">100,-50</list></item></list></item><item><list id="911"><item><list struct="atomic" id="912">-50,100</list></item><item><list struct="atomic" id="913">-50,-100</list></item></list></item><item><list id="914"><item><list struct="atomic" id="915">0,100</list></item><item><list struct="atomic" id="916">0,-100</list></item></list></item><item><list id="917"><item><list struct="atomic" id="918">50,100</list></item><item><list struct="atomic" id="919">50,-100</list></item></list></item><item><list id="920"><item><list struct="atomic" id="921">-100,100</list></item><item><list struct="atomic" id="922">100,-100</list></item></list></item><item><list id="923"><item><list struct="atomic" id="924">-100,-100</list></item><item><list struct="atomic" id="925">100,100</list></item></list></item></list></variable></variables></scene></scenes></project><media name="unit 5 lab 6 tic tac toe" app="Snap! 10.4.6, https://snap.berkeley.edu" version="2"><costume name="Empty" center-x="29" center-y="28" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADkAAAA5CAYAAACMGIOFAAAAAXNSR0IArs4c6QAAAStJREFUaEPtmyEOg0AQRX9v0Bu0Bt0mCAxJK9bsLXoDLA5wWE6zZkUFBkFSj6E34AhlG9Kkpa2e3XwUct78/zIGNgBKAAcAx/k9xOe2WSBPAM4hEs5c10/IUWuNJEn2PgN3XTcaYxyC43iH1FqPTdMgiiKvIYdhGLMsgzFmDVmWJYqi8DnE1+xVVcHxrJIkpGf5Mkk66VFlWVfWlXWVtQE6SSdlNfLvNKwr68q6ytoAnaSTshrJE0In6SSdlLUBOkknZTWSd5JO0kk6KWsDdJJOymok7ySdpJN0UtYG6CSdlNVI3kk6SSdDcFIpNdV1jTiOtx7xrEbt+37K8xzWWsex+jx7UkohTVOvIdu2nay1Dv4rpM8B/pr9meRl+SB9FyIhgLuDDPVXiVdmD7kbqAKqUfW9AAAAAElFTkSuQmCC" mediaID="Square_cst_Empty"/><costume name="X" center-x="29" center-y="29" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADkAAAA6CAYAAAAKjPErAAAAAXNSR0IArs4c6QAAA8dJREFUaEPd271P20AYBvCHVkIMlsjQIRsM3RgS9kKCutAJ+AuAjYEhqEu2wMYIAwsMwMYGY5cKBsaqAgW2DrAxVBVIDAipUnlcznIO+2zfhx3nJCQUO9i/e997z71zhzCYrQLgXtCGXn5ZB1ADUB8Q7zsAVQDPAP4A+CmQDQDNAUHKjDMZ+ex5HlZXV4dHRkZKZX56esLBwQHu7u4Skf4J9Xodp6enqFSY2uVoCwsLODk5CW52YmLi9/X19YeXDH0TyeCkMkGXl5f9KIq2v7+P29tbrK+z3EjI+fn5nt4oA1QGdjodH7exsRGN5MGxsTHwi6L1M1QGLi4uBhFVItkTDH2/Q1VABigRyZOioMx1RrbolgRMjYyCstqy6hYJTQPMhPRL09kZWJAeHh78ABYJlbMrPAbl7EqVruEvXVxcoNlsFgrNAswcSYEtEioDG42Gn2GqljmSRUJlYK1W84FJT2PaSGLzjKguUDtd8x6jJkArSNcRNQVaQ7qCcjjMzMzg/v7/P+zTjkHjKURVxWyOUVtAq5G0WXVl4OjoqF/kxsfHtZ4ijapr3BVNIhoF5DRh8vjoBBk3RvlQz8dCVeeExyAjaAp0kq6q6YXHCF1aWnrjdBFBcRFnkRQXuLm58aN3eXkZwGQoz5mcnAyqqK0I5obkhTgF8KE+CspjTFFGks020Hm6hnMyCrqzs4O9vT2nwFyRcRENd8Tx8bGyMGnNH2mXP3T/eNT3GNGpqSlcXV31HI4rSDau7bzwyDdJ5PT0NLrd7mAi5SIjd4CraOYaSU4ToooSyMKzu7urnF5Kla5Ry/d8KFBNLzaAuVXXOKBAuIY6T9e0a6MuoU6RaYGqiHJPhtsVJs0ZMitQBeXYZeXVbU6QusAwtNVq4fDwMHCZQK0jxX6guDvV8n1SZAizAbWKzLp8n4TkcRtQa0gXQNEJplArSBtro0lRNYEaI/MAmkbUCJkn0ASqjSwCqAvVQnKZkOsyouku3yeNQ9XxLGM0M9Lm8r0JMsv0kgkpA/meDz9L2gQ1xZhGNDXS5eKvaSfIqct1Xj7ris5PhexnYFwxCr89logsA1BAt7a2sLa2FiSGgG5vb8e/Wzc3N9ezCepidds0VeXvR709Njs7i83NTZ7a+ypou93G0dERuE/BVgagAMvQarUqXvDtRXqe9/fx8fF92YBx0NfPz8Xr2Z8BfAqnwcrKCtgbZWusJ+E3mLn3JJBfAXhlA6W83x9EcneUW8FfAAwDOAfwK+Uf6OfTPr7e3HcixX+V4If8+dbPd65zb/8AvCU3cMSBHxoAAAAASUVORK5CYII=" mediaID="Square_cst_X"/><costume name="O" center-x="28" center-y="28" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADkAAAA5CAYAAACMGIOFAAAAAXNSR0IArs4c6QAABGBJREFUaEPtmos1c0EQx/dWgApIBagAFaACVIAKklSAClABKkhSASpABajg+n73fJMzWfcxu/eRCHNOjkf27u5//vPa2Zs45wbOuZ1/P5dVJsl/kP1lReicG/5KkMM0TX88q0mSDJ1zgmOWyTRNl8ZqkwQjzaQ7kK+vr+7t7S1bdX193W1sbLSq0NZBTiYTd39/78bjsXt6eioFs7W15XZ3d93BwYHb2WkuyLcCEqaGw2EG7uPjI4ql1dXVDGy/36/NdKMgAXR1deUGA9JtsWgT1aZb9ATznZ6eOoDHSGMgb25u3Pn5+TfmAAQjYoZlmxSz5qf4rIwH4MXFhTs+Pg7G2QhIwF1eXs4sjk/BAOBiBB/meXxay9nZWQY2RGqBxDxPTk4y3xOBOQDDXhPC3ADTzDL39fW12XyjQQJwb29vJmIeHR1lAGN9p0gprAXQ29vb6RAi8Wg0Mq0VDRIG8UMRomBVwKnLLPMTtUXwTxitkiiQ/mIsFBMQqjaX9z2KRcEhyg0GiY8cHh5OFyG0+0EnZvMhz2C6pCqRu7u70hgQDLLX6zlyG7K/vz8TdEI2Wncswefh4SGbhrLw5eWlcMogkDBGukBWVlYysE0HGSt4ghHgPj8/s0dIKzCcJ2aQTAqLUqaVTWrdaN1xWukoGzbzlG4GqSckF4rJ1t1o3edhU3JokeLNILe3t6c5sctoWqUEHW2psqiUfDGBxETX1tamz76/v8/NF30Alr2ZQFq0VaXxNr+n+nl+fs6WyLMyE0gSvZRUixBwfIXpeEFpqSsxxppAcpKQ0wD1YuzJoi028UPqaCTPL/9AiuYJOpIfFynoyP508CFPskctJibVILeorcqyPf6BFMp1iH58fHT8vUhCq5NiBdnc3PzW+jQxuUTRdTBz4aN9T4OsOrvNg2F9xo1OIboTkJds5wFMr6mLlbw2jDLXYia1zVcdUOcBWKe4vJhh8kk2Tv6RA+oiBR9NQNER0AxSm8QimaxlX2aQuj6EWU7hbV+5VZk+B3e6FSJFdbUZJBPpKMvvTDpPoSiXQ3LRgdl8ChEgvubmmU78/muZZQUxCVjtAwQj2Oy6AiLYwKIcGqpiRDBIJsZU5SSOXxJtu2pN+l1DyjhMtmz9YJCwiSYBKikl5PKljg/jLnTv5Vqe3i8AqywpCiQb9aNt26brmyh7sHYpokGyiO/8AJWr7zqM+c9y7+F3x0PaorVA5pku/8N8aHjV7QVhLVxL6LdGrCYa3BmoYgVf4QJGgpGMByTRmBxmLRyYi6YZVuI3igkynDisc8k+ajMpExH1aA3ykYCklQO7csXOJmWjgJIrBwDkvesDe5grn5go3hhIDda/+q6yhLLvm7iibxykro7klRW5R7SC5d5TXokJNc28NVoDqRfDlPVrZ9pEtenKa2cxJlmmwE5AWhlsa5ypM9DW4l3N+9uY/PZ69jhN07h3xrqiyLBOkiTcygqO3/kOukFPP25I1pL88eZZpfYvlc1Jo4IBAH0AAAAASUVORK5CYII=" mediaID="Square_cst_O"/></media></snapdata>