<snapdata remixID="8377936"><project name='lag graph i think (run in editor)' app='Snap! 5.0, http://snap.berkeley.edu' version='1'>
  <notes>i think i made a graph of lag. Run in editor.</notes>
  <thumbnail>data:image/png;base64,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</thumbnail>
  <stage inheritance='true' id='1' volume='100' height='360' tempo='60' lines='flat' width='480' name='Stage' sublistIDs='false' threadsafe='false' codify='false' color='255,255,255,1' scheduled='false' pan='0' ternary='false' costume='0'>
    <pentrails>data:image/png;base64,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IKDqBAgQIEAgIyCAM2rqECBAgACBQQEBPAioOgECBAgQyAgI4IyaOgQIECBAYFBAAA8Cqk6AAAECBDICAjijpg4BAgQIEBgUEMCDgKoTIECAAIGMgADOqKlDgAABAgQGBQTwIKDqBAgQIEAgIyCAM2rqECBAgACBQQEBPAioOgECBAgQyBxQkrwAAATpSURBVAgI4IyaOgQIECBAYFBAAA8Cqk6AAAECBDICAjijpg4BAgQIEBgUEMCDgKoTIECAAIGMgADOqKlDgAABAgQGBQTwIKDqBAgQIEAgIyCAM2rqECBAgACBQQEBPAioOgECBAgQyAgI4IyaOgQIECBAYFBAAA8Cqk6AAAECBDICAjijpg4BAgQIEBgUEMCDgKoTIECAAIGMgADOqKlDgAABAgQGBQTwIKDqBAgQIEAgIyCAM2rqECBAgACBQQEBPAioOgECBAgQyAgI4IyaOgQIECBAYFBAAA8Cqk6AAAECBDICAjijpg4BAgQIEBgUEMCDgKoTIECAAIGMgADOqKlDgAABAgQGBQTwIKDqBAgQIEAgIyCAM2rqECBAgACBQQEBPAioOgECBAgQyAgI4IyaOgQIECBAYFBAAA8Cqk6AAAECBDICAjijpg4BAgQIEBgUEMCDgKoTIECAAIGMgADOqKlDgAABAgQGBQTwIKDqBAgQIEAgIyCAM2rqECBAgACBQQEBPAioOgECBAgQyAgI4IyaOgQIECBAYFBAAA8Cqk6AAAECBDICAjijpg4BAgQIEBgUEMCDgKoTIECAAIGMgADOqKlDgAABAgQGBQTwIKDqBAgQIEAgIyCAM2rqECBAgACBQQEBPAioOgECBAgQyAgI4IyaOgQIECBAYFBAAA8Cqk6AAAECBDICAjijpg4BAgQIEBgUEMCDgKoTIECAAIGMgADOqKlDgAABAgQGBQTwIKDqBAgQIEAgIyCAM2rqECBAgACBQQEBPAioOgECBAgQyAgI4IyaOgQIECBAYFBAAA8Cqk6AAAECBDICAjijpg4BAgQIEBgUEMCDgKoTIECAAIGMgADOqKlDgAABAgQGBQTwIKDqBAgQIEAgIyCAM2rqECBAgACBQQEBPAioOgECBAgQyAgI4IyaOgQIECBAYFBAAA8Cqk6AAAECBDICAjijpg4BAgQIEBgUEMCDgKoTIECAAIGMgADOqKlDgAABAgQGBQTwIKDqBAgQIEAgIyCAM2rqECBAgACBQQEBPAioOgECBAgQyAgI4IyaOgQIECBAYFBAAA8Cqk6AAAECBDICAjijpg4BAgQIEBgUEMCDgKoTIECAAIGMgADOqKlDgAABAgQGBQTwIKDqBAgQIEAgIyCAM2rqECBAgACBQQEBPAioOgECBAgQyAgI4IyaOgQIECBAYFBAAA8Cqk6AAAECBDICAjijpg4BAgQIEBgUEMCDgKoTIECAAIGMgADOqKlDgAABAgQGBQTwIKDqBAgQIEAgIyCAM2rqECBAgACBQQEBPAioOgECBAgQyAgI4IyaOgQIECBAYFBAAA8Cqk6AAAECBDICAjijpg4BAgQIEBgUEMCDgKoTIECAAIGMgADOqKlDgAABAgQGBQTwIKDqBAgQIEAgIyCAM2rqECBAgACBQQEBPAioOgECBAgQyAgI4IyaOgQIECBAYFBAAA8Cqk6AAAECBDICAjijpg4BAgQIEBgUEMCDgKoTIECAAIGMgADOqKlDgAABAgQGBQTwIKDqBAgQIEAgIyCAM2rqECBAgACBQQEBPAioOgECBAgQyAgI4IyaOgQIECBAYFBAAA8Cqk6AAAECBDICAjijpg4BAgQIEBgUEMCDgKoTIECAAIGMgADOqKlDgAABAgQGBf4PcVW4d7eZZJoAAAAASUVORK5CYII=</pentrails>
    <costumes>
      <list id='2' struct='atomic'/>
    </costumes>
    <sounds>
      <list id='3' struct='atomic'/>
    </sounds>
    <variables/>
    <blocks/>
    <scripts/>
    <sprites>
      <sprite x='0' pen='tip' id='8' y='0' name='Sprite' idx='1' volume='100' rotation='1' scale='1' heading='90' costume='0' color='80,80,80,1' pan='0' draggable='false'>
        <costumes>
          <list id='9' struct='atomic'/>
        </costumes>
        <sounds>
          <list id='10' struct='atomic'/>
        </sounds>
        <blocks/>
        <variables/>
        <scripts>
          <script x='203' y='41'>
            <block s='receiveGo'/>
            <block s='clear'/>
            <block s='hide'/>
            <block s='doForever'>
              <script>
                <block s='doSwitchToCostume'>
                  <block s='reportPenTrailsAsCostume'/>
                </block>
                <block s='clear'/>
                <block s='changeXPosition'>
                  <l>-1</l>
                </block>
                <block s='doStamp'/>
                <block s='gotoXY'>
                  <l>0</l>
                  <l>0</l>
                </block>
                <block s='show'/>
              </script>
            </block>
          </script>
          <script x='43' y='296'>
            <block s='receiveGo'/>
            <block s='doForever'>
              <script>
                <block s='doSetGlobalFlag'>
                  <l>
                    <option>turbo mode</option>
                  </l>
                  <l>
                    <bool>false</bool>
                  </l>
                </block>
              </script>
            </block>
          </script>
        </scripts>
      </sprite>
      <sprite draggable='false' x='240' pen='tip' id='38' y='47' name='Sprite(2)' idx='2' volume='100' rotation='1' scale='1' color='34.27200000000003,244.79999999999998,0,1' hidden='true' pan='0' heading='90' costume='0'>
        <costumes>
          <list id='39' struct='atomic'/>
        </costumes>
        <sounds>
          <list id='40' struct='atomic'/>
        </sounds>
        <blocks/>
        <variables/>
        <scripts>
          <script x='165' y='213'>
            <block s='receiveGo'/>
            <block s='gotoXY'>
              <l>240</l>
              <l>0</l>
            </block>
            <block s='doForever'>
              <script>
                <block s='setYPosition'>
                  <block s='reportDifference'>
                    <block s='reportDate'>
                      <l>
                        <option>time in milliseconds</option>
                      </l>
                    </block>
                    <block var='var'/>
                  </block>
                </block>
                <block s='down'/>
              </script>
            </block>
          </script>
          <script x='30' y='374'>
            <block s='receiveGo'/>
            <block s='doForever'>
              <script>
                <block s='doSetVar'>
                  <l>var</l>
                  <block s='reportDate'>
                    <l>
                      <option>time in milliseconds</option>
                    </l>
                  </block>
                </block>
              </script>
            </block>
          </script>
        </scripts>
      </sprite>
      <watcher x='10' color='243,118,29' style='normal' hidden='true' y='10' var='var'/>
      <sprite draggable='false' x='240' pen='tip' id='69' y='0' name='Sprite(3)' idx='3' volume='100' rotation='1' scale='1' color='7,0,20,1' hidden='true' pan='0' heading='90' costume='0'>
        <costumes>
          <list id='70' struct='atomic'/>
        </costumes>
        <sounds>
          <list id='71' struct='atomic'/>
        </sounds>
        <blocks/>
        <variables/>
        <scripts>
          <script x='124' y='82'>
            <block s='receiveGo'/>
            <block s='gotoXY'>
              <l>240</l>
              <l>0</l>
            </block>
            <block s='setColor'>
              <color>7,0,20,1</color>
            </block>
            <block s='doForever'>
              <script>
                <block s='down'/>
                <block s='changeXPosition'>
                  <l>-1</l>
                </block>
                <block s='changeXPosition'>
                  <l>1</l>
                </block>
              </script>
            </block>
          </script>
          <script x='222' y='235'>
            <block s='gotoXY'>
              <l>260</l>
              <l>0</l>
            </block>
          </script>
        </scripts>
      </sprite>
      <watcher hidden='true' x='10' s='xPosition' style='normal' color='74,108,212' y='31.000001999999995' scope='Sprite(3)'/>
      <watcher hidden='true' x='10' s='xPosition' style='normal' color='74,108,212' y='52.00000399999999' scope='Sprite(2)'/>
    </sprites>
  </stage>
  <hidden/>
  <headers/>
  <code/>
  <blocks>
    <block-definition s='turbo %&apos;action&apos;' category='other' type='command'>
      <header/>
      <code/>
      <translations/>
      <inputs>
        <input type='%cs'/>
      </inputs>
      <script>
        <block s='doDeclareVariables'>
          <list>
            <l>begin</l>
          </list>
        </block>
        <block s='doSetVar'>
          <l>begin</l>
          <block s='reportGlobalFlag'>
            <l>
              <option>turbo mode</option>
            </l>
          </block>
        </block>
        <block s='doSetGlobalFlag'>
          <l>
            <option>turbo mode</option>
          </l>
          <l>
            <bool>true</bool>
          </l>
        </block>
        <block s='doRun'>
          <block var='action'/>
          <list/>
        </block>
        <block s='doSetGlobalFlag'>
          <l>
            <option>turbo mode</option>
          </l>
          <block var='begin'/>
        </block>
      </script>
    </block-definition>
    <block-definition s='%&apos;frequency&apos; Hz for %&apos;duration&apos; secs at %&apos;sample rate&apos; Hz sample rate' category='sound' type='reporter'>
      <comment x='0' w='205' collapsed='false' y='0'>generate a list of samples representing a sine wave at the given frequency, duration and sample rate</comment>
      <header/>
      <code/>
      <translations/>
      <inputs>
        <input type='%n'>440<options>a 55=55a 110=110a 220=220a 440=440a 880=880a 1760=1760a 3520=3520</options>
        </input>
        <input type='%n'>1</input>
        <input type='%n'>44100<options>22.05 kHz=2205044.1 kHz=4410088.2 kHz=8820096 kHz=96000</options>
        </input>
      </inputs>
      <script>
        <block s='doDeclareVariables'>
          <list>
            <l>output</l>
            <l>sample period</l>
            <l>duration in samples</l>
            <l>time</l>
          </list>
        </block>
        <block s='doSetVar'>
          <l>sample period</l>
          <block s='reportQuotient'>
            <l>1</l>
            <block var='sample rate'/>
          </block>
        </block>
        <block s='doSetVar'>
          <l>duration in samples</l>
          <block s='reportMonadic'>
            <l>
              <option>ceiling</option>
            </l>
            <block s='reportProduct'>
              <block var='duration'/>
              <block var='sample rate'/>
            </block>
          </block>
        </block>
        <block s='doSetVar'>
          <l>time</l>
          <l>0</l>
        </block>
        <block s='doSetVar'>
          <l>output</l>
          <block s='reportNewList'>
            <list/>
          </block>
        </block>
        <block s='doWarp'>
          <script>
            <block s='doRepeat'>
              <block var='duration in samples'/>
              <script>
                <block s='doAddToList'>
                  <block s='reportMonadic'>
                    <l>
                      <option>sin</option>
                    </l>
                    <custom-block s='degrees %n'>
                      <block s='reportProduct'>
                        <l>2</l>
                        <block s='reportProduct'>
                          <custom-block s='PI'/>
                          <block s='reportProduct'>
                            <block var='frequency'/>
                            <block var='time'/>
                          </block>
                        </block>
                      </block>
                    </custom-block>
                  </block>
                  <block var='output'/>
                </block>
                <block s='doChangeVar'>
                  <l>time</l>
                  <block var='sample period'/>
                </block>
              </script>
            </block>
          </script>
        </block>
        <block s='doReport'>
          <block var='output'/>
        </block>
      </script>
    </block-definition>
    <block-definition s='for each %&apos;item&apos; of %&apos;data&apos; %&apos;action&apos;' category='lists' type='command'>
      <header/>
      <code/>
      <translations>de:für jedes _ von _ _ca:per cada _ de _ _es:para cada _ de _ _fr:pour chaque _ de _ _</translations>
      <inputs>
        <input type='%upvar'/>
        <input type='%l'/>
        <input type='%ca'/>
      </inputs>
      <script>
        <block s='doUntil'>
          <block s='reportEquals'>
            <block var='data'/>
            <block s='reportNewList'>
              <list/>
            </block>
          </block>
          <script>
            <block s='doSetVar'>
              <l>item</l>
              <block s='reportListItem'>
                <l>1</l>
                <block var='data'/>
              </block>
            </block>
            <block s='doRun'>
              <block var='action'/>
              <list>
                <block s='reportListItem'>
                  <l>1</l>
                  <block var='data'/>
                </block>
              </list>
            </block>
            <block s='doSetVar'>
              <l>data</l>
              <block s='reportCDR'>
                <block var='data'/>
              </block>
            </block>
          </script>
        </block>
      </script>
    </block-definition>
    <block-definition s='PI' category='operators' type='reporter'>
      <header/>
      <code/>
      <translations/>
      <inputs/>
      <script>
        <block s='doReport'>
          <l>3.141592653589793</l>
        </block>
      </script>
    </block-definition>
    <block-definition s='degrees %&apos;radians&apos;' category='operators' type='reporter'>
      <header/>
      <code/>
      <translations/>
      <inputs>
        <input type='%n'>0.5</input>
      </inputs>
      <script>
        <block s='doReport'>
          <block s='reportQuotient'>
            <block s='reportProduct'>
              <block var='radians'/>
              <l>180</l>
            </block>
            <custom-block s='PI'/>
          </block>
        </block>
      </script>
    </block-definition>
    <block-definition s='find first in %&apos;list&apos; such that %&apos;test&apos;' category='lists' type='reporter'>
      <header/>
      <code/>
      <translations/>
      <inputs>
        <input type='%l'/>
        <input type='%predRing'/>
      </inputs>
      <script>
        <block s='doIf'>
          <block s='reportEquals'>
            <block var='list'/>
            <block s='reportNewList'>
              <list/>
            </block>
          </block>
          <script>
            <custom-block s='error %s'>
              <l>item not found in list</l>
            </custom-block>
          </script>
        </block>
        <block s='doIf'>
          <block s='evaluate'>
            <block var='test'/>
            <list>
              <block s='reportListItem'>
                <l>1</l>
                <block var='list'/>
              </block>
            </list>
          </block>
          <script>
            <block s='doReport'>
              <block s='reportListItem'>
                <l>1</l>
                <block var='list'/>
              </block>
            </block>
          </script>
        </block>
        <block s='doReport'>
          <custom-block s='find first in %l such that %predRing'>
            <block s='reportCDR'>
              <block var='list'/>
            </block>
            <block var='test'/>
          </custom-block>
        </block>
      </script>
    </block-definition>
    <block-definition s='error %&apos;msg&apos;' category='control' type='command'>
      <header/>
      <code/>
      <translations/>
      <inputs>
        <input type='%s'/>
      </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='sound named %&apos;name&apos;' category='sensing' type='reporter'>
      <header/>
      <code/>
      <translations/>
      <inputs>
        <input type='%s'>
          <options>§_soundsMenu</options>
        </input>
      </inputs>
      <script>
        <block s='doReport'>
          <custom-block s='find first in %l such that %predRing'>
            <block s='reportGet'>
              <l>
                <option>sounds</option>
              </l>
            </block>
            <block s='reifyPredicate'>
              <autolambda>
                <block s='reportEquals'>
                  <block s='reportGetSoundAttribute'>
                    <l>
                      <option>name</option>
                    </l>
                    <block var='sound'/>
                  </block>
                  <block var='name'/>
                </block>
              </autolambda>
              <list>
                <l>sound</l>
              </list>
            </block>
          </custom-block>
        </block>
      </script>
    </block-definition>
    <block-definition s='plot sound %&apos;name&apos;' category='pen' type='command'>
      <comment x='0' w='164' collapsed='false' y='0'>quickly plot the samples of a sound, a list of samples (single channel), or a list of lists (multiple channels) to the stage at a lower resolution.</comment>
      <header/>
      <code/>
      <translations/>
      <inputs>
        <input readonly='true' type='%s'>
          <options>§_soundsMenu</options>
        </input>
      </inputs>
      <script>
        <block s='doDeclareVariables'>
          <list>
            <l>samples</l>
            <l>step</l>
            <l>offset</l>
            <l>i</l>
            <l>sound</l>
          </list>
        </block>
        <block s='doSetVar'>
          <l>sound</l>
          <custom-block s='sound named %s'>
            <block var='name'/>
          </custom-block>
        </block>
        <block s='doIfElse'>
          <block s='reportIsA'>
            <block var='sound'/>
            <l>
              <option>sound</option>
            </l>
          </block>
          <script>
            <block s='doSetVar'>
              <l>samples</l>
              <block s='reportGetSoundAttribute'>
                <l>
                  <option>samples</option>
                </l>
                <block var='sound'/>
              </block>
            </block>
            <block s='doSetVar'>
              <l>step</l>
              <block s='reportQuotient'>
                <block s='reportGetSoundAttribute'>
                  <l>
                    <option>length</option>
                  </l>
                  <block var='sound'/>
                </block>
                <block s='reportProduct'>
                  <block s='reportAttributeOf'>
                    <l>
                      <option>width</option>
                    </l>
                    <l>Stage</l>
                  </block>
                  <l>2</l>
                </block>
              </block>
            </block>
          </script>
          <script>
            <block s='doSetVar'>
              <l>samples</l>
              <block var='sound'/>
            </block>
          </script>
        </block>
        <block s='clear'/>
        <block s='up'/>
        <block s='doIfElse'>
          <block s='reportIsA'>
            <block s='reportListItem'>
              <l>1</l>
              <block var='samples'/>
            </block>
            <l>
              <option>list</option>
            </l>
          </block>
          <script>
            <block s='doSetVar'>
              <l>step</l>
              <block s='reportQuotient'>
                <block s='reportListLength'>
                  <block s='reportListItem'>
                    <l>1</l>
                    <block var='samples'/>
                  </block>
                </block>
                <block s='reportProduct'>
                  <block s='reportAttributeOf'>
                    <l>
                      <option>width</option>
                    </l>
                    <l>Stage</l>
                  </block>
                  <l>2</l>
                </block>
              </block>
            </block>
            <block s='doSetVar'>
              <l>offset</l>
              <block s='reportQuotient'>
                <block s='reportAttributeOf'>
                  <l>
                    <option>height</option>
                  </l>
                  <l>Stage</l>
                </block>
                <l>4</l>
              </block>
            </block>
            <custom-block s='for each %upvar of %l %ca'>
              <l>channel</l>
              <block var='samples'/>
              <script>
                <block s='doSetVar'>
                  <l>i</l>
                  <l>0</l>
                </block>
                <block s='gotoXY'>
                  <block s='reportQuotient'>
                    <block s='reportAttributeOf'>
                      <l>
                        <option>width</option>
                      </l>
                      <l>Stage</l>
                    </block>
                    <l>-2</l>
                  </block>
                  <block var='offset'/>
                </block>
                <block s='down'/>
                <block s='setSize'>
                  <l>1</l>
                </block>
                <custom-block s='turbo %cs'>
                  <script>
                    <block s='doRepeat'>
                      <block s='reportProduct'>
                        <block s='reportAttributeOf'>
                          <l>
                            <option>width</option>
                          </l>
                          <l>Stage</l>
                        </block>
                        <l>2</l>
                      </block>
                      <script>
                        <block s='doChangeVar'>
                          <l>i</l>
                          <block var='step'/>
                        </block>
                        <block s='gotoXY'>
                          <block s='reportSum'>
                            <block s='xPosition'/>
                            <l>0.5</l>
                          </block>
                          <block s='reportSum'>
                            <block s='reportProduct'>
                              <block s='reportListItem'>
                                <block s='reportMonadic'>
                                  <l>
                                    <option>floor</option>
                                  </l>
                                  <block var='i'/>
                                </block>
                                <block var='channel'/>
                              </block>
                              <block s='reportQuotient'>
                                <block s='reportAttributeOf'>
                                  <l>
                                    <option>height</option>
                                  </l>
                                  <l>Stage</l>
                                </block>
                                <l>6.4</l>
                              </block>
                            </block>
                            <block var='offset'/>
                          </block>
                        </block>
                      </script>
                    </block>
                  </script>
                </custom-block>
                <block s='up'/>
                <block s='doChangeVar'>
                  <l>offset</l>
                  <block s='reportQuotient'>
                    <block s='reportAttributeOf'>
                      <l>
                        <option>width</option>
                      </l>
                      <l>Stage</l>
                    </block>
                    <l>-2</l>
                  </block>
                </block>
              </script>
            </custom-block>
          </script>
          <script>
            <block s='doSetVar'>
              <l>step</l>
              <block s='reportQuotient'>
                <block s='reportListLength'>
                  <block var='samples'/>
                </block>
                <block s='reportProduct'>
                  <block s='reportAttributeOf'>
                    <l>
                      <option>width</option>
                    </l>
                    <l>Stage</l>
                  </block>
                  <l>2</l>
                </block>
              </block>
            </block>
            <block s='gotoXY'>
              <block s='reportQuotient'>
                <block s='reportAttributeOf'>
                  <l>
                    <option>width</option>
                  </l>
                  <l>Stage</l>
                </block>
                <l>-2</l>
              </block>
              <l>0</l>
            </block>
            <block s='down'/>
            <block s='setSize'>
              <l>1</l>
            </block>
            <custom-block s='turbo %cs'>
              <script>
                <block s='doRepeat'>
                  <block s='reportProduct'>
                    <block s='reportAttributeOf'>
                      <l>
                        <option>width</option>
                      </l>
                      <l>Stage</l>
                    </block>
                    <l>2</l>
                  </block>
                  <script>
                    <block s='doChangeVar'>
                      <l>i</l>
                      <block var='step'/>
                    </block>
                    <block s='gotoXY'>
                      <block s='reportSum'>
                        <block s='xPosition'/>
                        <l>0.5</l>
                      </block>
                      <block s='reportProduct'>
                        <block s='reportListItem'>
                          <block s='reportMonadic'>
                            <l>
                              <option>floor</option>
                            </l>
                            <block var='i'/>
                          </block>
                          <block var='samples'/>
                        </block>
                        <block s='reportQuotient'>
                          <block s='reportAttributeOf'>
                            <l>
                              <option>height</option>
                            </l>
                            <l>Stage</l>
                          </block>
                          <l>3.2</l>
                        </block>
                      </block>
                    </block>
                  </script>
                </block>
              </script>
            </custom-block>
            <block s='up'/>
          </script>
        </block>
      </script>
    </block-definition>
    <block-definition s='$circleSolid-1-255-0-0 record' category='sensing' type='reporter'>
      <comment x='0' w='192' collapsed='false' y='0'>records an audio snippet and reports it as a new sound, or zero if the user cancels</comment>
      <header/>
      <code/>
      <translations/>
      <inputs/>
      <script>
        <block s='doDeclareVariables'>
          <list>
            <l>test</l>
            <l>pic</l>
          </list>
        </block>
        <block s='doSetVar'>
          <l>test</l>
          <block s='evaluate'>
            <block s='reportJSFunction'>
              <list/>
              <l>var soundRecorder,    result = false;soundRecorder = new SoundRecorderDialogMorph(    function (audio) {        if (audio) {            result = new Sound(audio, &apos;recording&apos;);        } else {            result = null;            this.destroy();        }    });soundRecorder.cancel = function () {    result = null;    this.destroy();};soundRecorder.key = &apos;microphone&apos;;soundRecorder.popUp(this.world());return function () {return result; };</l>
            </block>
            <list/>
          </block>
        </block>
        <block s='doWaitUntil'>
          <block s='evaluate'>
            <block s='reifyScript'>
              <script>
                <block s='doSetVar'>
                  <l>pic</l>
                  <block s='evaluate'>
                    <block var='test'/>
                    <list/>
                  </block>
                </block>
                <block s='doReport'>
                  <block s='reportNot'>
                    <block s='reportEquals'>
                      <block var='pic'/>
                      <block s='reportBoolean'>
                        <l>
                          <bool>false</bool>
                        </l>
                      </block>
                    </block>
                  </block>
                </block>
              </script>
              <list/>
            </block>
            <list/>
          </block>
        </block>
        <block s='doReport'>
          <block var='pic'/>
        </block>
      </script>
    </block-definition>
    <block-definition s='note from %&apos;pitch&apos; hz' category='sound' type='reporter'>
      <header/>
      <code/>
      <translations/>
      <inputs>
        <input type='%n'>440</input>
      </inputs>
      <script>
        <block s='doReport'>
          <block s='reportRound'>
            <block s='reportSum'>
              <block s='reportProduct'>
                <l>12</l>
                <block s='reportQuotient'>
                  <block s='reportMonadic'>
                    <l>
                      <option>log</option>
                    </l>
                    <block s='reportQuotient'>
                      <block var='pitch'/>
                      <l>440</l>
                    </block>
                  </block>
                  <block s='reportMonadic'>
                    <l>
                      <option>log</option>
                    </l>
                    <l>2</l>
                  </block>
                </block>
              </block>
              <l>69</l>
            </block>
          </block>
        </block>
      </script>
    </block-definition>
    <block-definition s='hz from note %&apos;note&apos;' category='sound' type='reporter'>
      <header/>
      <code/>
      <translations/>
      <inputs>
        <input type='%n'>69</input>
      </inputs>
      <script>
        <block s='doReport'>
          <block s='reportProduct'>
            <l>440</l>
            <block s='reportPower'>
              <l>2</l>
              <block s='reportQuotient'>
                <block s='reportDifference'>
                  <block var='note'/>
                  <l>69</l>
                </block>
                <l>12</l>
              </block>
            </block>
          </block>
        </block>
      </script>
    </block-definition>
    <block-definition s='name of note %&apos;note&apos;' category='sound' type='reporter'>
      <header/>
      <code/>
      <translations/>
      <inputs>
        <input type='%n'>69</input>
      </inputs>
      <script>
        <block s='doReport'>
          <block s='reportListItem'>
            <block s='reportSum'>
              <block s='reportModulus'>
                <block s='reportDifference'>
                  <block var='note'/>
                  <l>69</l>
                </block>
                <l>12</l>
              </block>
              <l>1</l>
            </block>
            <block s='reportNewList'>
              <list>
                <l>A</l>
                <l>Bb</l>
                <l>B</l>
                <l>C</l>
                <l>C#</l>
                <l>D</l>
                <l>D#</l>
                <l>E</l>
                <l>F</l>
                <l>F#</l>
                <l>G</l>
                <l>G#</l>
              </list>
            </block>
          </block>
        </block>
      </script>
    </block-definition>
    <block-definition s='USE BIGNUMS %&apos;bool&apos;' category='operators' type='command'>
      <comment x='0' w='303.3333333333333' collapsed='false' y='0'>call with True to turn on the entire Scheme numeric tower, including infinite-precision integers, exact rationals, and complex numbers; call with False to restore native JavaScript arithmetic.</comment>
      <header/>
      <code/>
      <translations/>
      <inputs>
        <input type='%b'/>
      </inputs>
      <script>
        <block s='doDeclareVariables'>
          <list>
            <l>isDone</l>
          </list>
        </block>
        <block s='doSetVar'>
          <l>isDone</l>
          <block s='evaluate'>
            <block s='reportJSFunction'>
              <list>
                <l>useBigNums</l>
              </list>
              <l>var done = false;function initialize (callback) {    var bigScript = document.createElement(&apos;script&apos;);    bigScript.src = &apos;//snap.berkeley.edu/snapsource/libraries/biginteger.js&apos;;    bigScript.onload = loadScheme;    document.head.appendChild(bigScript);    function loadScheme () {        var schemeScript = document.createElement(&apos;script&apos;);        schemeScript.src = &apos;//snap.berkeley.edu/snapsource/libraries/schemeNumber.js&apos;;        schemeScript.onload = finish;        document.head.appendChild(schemeScript);    }    function finish () {        makeGlobalObject();        callback();    }}function makeGlobalObject () {    window.bigNumbers = {        originalEvaluate: InputSlotMorph.prototype.evaluate,        originalChangeVar: VariableFrame.prototype.changeVar,        originalPrims: {            reportSum: Process.prototype.reportSum,            reportDifference: Process.prototype.reportDifference,            reportProduct: Process.prototype.reportProduct,            reportQuotient: Process.prototype.reportQuotient,            reportModulus: Process.prototype.reportModulus,            reportRandom: Process.prototype.reportRandom,            reportLessThan: Process.prototype.reportLessThan,            reportGreaterThan: Process.prototype.reportGreaterThan,            reportEquals: Process.prototype.reportEquals,            reportIsIdentical: Process.prototype.reportIsIdentical,            reportMonadic: Process.prototype.reportMonadic        }    };}function loadBlocks () {    var fn = SchemeNumber.fn;    var originalPrims = window.bigNumbers.originalPrims;    if (useBigNums) {        InputSlotMorph.prototype.evaluate = function () {            var contents = this.contents();            if (this.constant) {                return this.constant;            }            if (this.isNumeric) {                return parseNumber(contents.text || &apos;0&apos;);            }            return contents.text;        };        VariableFrame.prototype.changeVar = function (name, delta, sender) {            var frame = this.find(name),                value,                newValue;            if (frame) {                value = parseNumber(frame.vars[name].value);                newValue = value !== value ? delta : value + parseNumber(delta);                if (sender instanceof SpriteMorph &amp;&amp;                        (frame.owner instanceof SpriteMorph) &amp;&amp;                        (sender !== frame.owner)) {                    sender.shadowVar(name, newValue);                } else {                    frame.vars[name].value = newValue;                }            }        };        Object.assign(Process.prototype, {            reportSum: function (a, b) {                a = parseNumber(a);                b = parseNumber(b);                if (a !== a || b !== b) return NaN;                return fn[&apos;+&apos;](a, b);            },            reportDifference: function (a, b) {                a = parseNumber(a);                b = parseNumber(b);                if (a !== a || b !== b) return NaN;                return fn[&apos;-&apos;](a, b);            },            reportProduct: function (a, b) {                a = parseNumber(a);                b = parseNumber(b);                if (a !== a || b !== b) return NaN;                return fn[&apos;*&apos;](a, b);            },            reportQuotient: function (a, b) {                a = parseNumber(a);                b = parseNumber(b);                if (fn[&apos;=&apos;](b, &apos;0&apos;) &amp;&amp; !fn[&apos;=&apos;](a, &apos;0&apos;)) {                      return (fn[&apos;&lt;&apos;](a, &apos;0&apos;) ? SchemeNumber(&apos;-inf.0&apos;) : SchemeNumber(&apos;+inf.0&apos;))                };                if (a !== a || b !== b || fn[&apos;=&apos;](b, &apos;0&apos;)) return SchemeNumber(&apos;+nan.0&apos;);                return fn[&apos;/&apos;](a, b);            },            reportModulus: function (a, b) {                a = parseNumber(a);                b = parseNumber(b);                if (a !== a || b !== b) return NaN;                var result = fn.mod(a, b);                if (fn[&apos;&lt;&apos;](b, &apos;0&apos;) &amp;&amp; fn[&apos;&gt;&apos;](result, &apos;0&apos;)) {                    result = fn[&apos;+&apos;](result, b);                }                return result;            },            reportRandom: function (min, max) {                var floor = parseNumber(min),                    ceil = parseNumber(max);                if (floor !== floor || ceil !== ceil) return NaN;                if (!fn[&apos;=&apos;](fn.mod(floor, &apos;1&apos;), &apos;0&apos;) || !fn[&apos;=&apos;](fn.mod(ceil, &apos;1&apos;), &apos;0&apos;)) {                    // One of the numbers isn&apos;t whole. Include the decimal.                    return fn[&apos;+&apos;](                        fn[&apos;*&apos;](                            Math.random(),                            fn[&apos;-&apos;](ceil, floor)                        ),                        floor                    );                }                return fn.floor(                    fn[&apos;+&apos;](                        fn[&apos;*&apos;](                            Math.random(),                            fn[&apos;+&apos;](                                fn[&apos;-&apos;](ceil, floor),                                &apos;1&apos;                            )                        ),                        floor                    )                );            },            reportLessThan: function (a, b) {                a = parseNumber(a);                b = parseNumber(b);                if (a !== a || b !== b) return NaN;                return fn[&apos;&lt;&apos;](a, b);            },            reportGreaterThan: function (a, b) {                a = parseNumber(a);                b = parseNumber(b);                if (a !== a || b !== b) return NaN;                return fn[&apos;&gt;&apos;](a, b);            },            reportGreaterThan: function (a, b) {                a = parseNumber(a);                b = parseNumber(b);                if (a !== a || b !== b) return NaN;                return fn[&apos;&gt;&apos;](a, b);            },            reportEqual: function (a, b) {                x = parseNumber(a);                y = parseNumber(b);                if (x !== x || y !== y) return snapEquals(a, b);                return fn[&apos;=&apos;](x, y);            },            reportIsIdentical: function (a, b) {                x = parseNumber(a);                y = parseNumber(b);                if (x !== x || y !== y) return originalPrims.reportIsIdentical(a, b);                return fn[&apos;=&apos;](x, y);            },            reportMonadic: function (fname, n) {                n = parseNumber(n);                if (n !== n) return NaN;                switch (Process.prototype.inputOption(fname)) {                case &apos;abs&apos;:                    return fn.abs(n);                case &apos;ceiling&apos;:                    return fn.ceiling(n);                case &apos;floor&apos;:                    return fn.floor(n);                case &apos;sqrt&apos;:                    return sqrt(n);                case &apos;sin&apos;:                    return fn.sin(radians(n));                case &apos;cos&apos;:                    return fn.cos(radians(n));                case &apos;tan&apos;:                    return fn.tan(radians(n));                case &apos;asin&apos;:                    return degrees(fn.asin(n));                case &apos;acos&apos;:                    return degrees(fn.acos(n));                case &apos;atan&apos;:                    return degrees(fn.atan(n));                case &apos;ln&apos;:                    return fn.log(n);                case &apos;log&apos;:                    return fn.log(n, &apos;10&apos;);                case &apos;e^&apos;:                    return fn.exp(n);                case &apos;10^&apos;:                    return fn.expt(&apos;10&apos;, n);                default:                    return SchemeNumber(&apos;0&apos;);                }            }        });    } else {        InputSlotMorph.prototype.evaluate = window.bigNumbers.originalEvaluate;        VariableFrame.prototype.changeVar = window.bigNumbers.originalChangeVar;        Object.assign(Process.prototype, originalPrims);    }    done = true;}function parseNumber (n) {    var fn = SchemeNumber.fn;    if (!fn[&apos;number?&apos;](n)) {        n = &apos;&apos; + n;        try {            return parseENotation(n) || SchemeNumber(n);        } catch (err) {            return NaN;        }    }    return n;}function parseENotation (n) {    var fn = SchemeNumber.fn;    var numbers = n.match(/^(-?\d+\.?\d*|-?\.\d+)e(-?\d+)$/i);    if (!numbers) return null;    var coefficient = numbers[1];    var exponent = numbers[2];    return fn[&apos;*&apos;](        coefficient,        fn.expt(&apos;10&apos;, exponent)    );}function sqrt (n) {    var fn = SchemeNumber.fn;    if (!fn[&apos;exact?&apos;](n) || !fn[&apos;rational?&apos;](n) || fn[&apos;&lt;&apos;](n,&apos;0&apos;)) return fn.sqrt(n);    var rootNumerator = fn[&apos;exact-integer-sqrt&apos;](fn.numerator(n));    if (!fn[&apos;=&apos;](rootNumerator[1], &apos;0&apos;)) return fn.sqrt(n);    var rootDenominator = fn[&apos;exact-integer-sqrt&apos;](fn.denominator(n));    if (!fn[&apos;=&apos;](rootDenominator[1], &apos;0&apos;)) return fn.sqrt(n);    return fn[&apos;/&apos;](rootNumerator[0], rootDenominator[0]);}function isDone () {    return done;}if (window.bigNumbers) {    loadBlocks();} else {    initialize(loadBlocks);}return isDone;</l>
            </block>
            <list>
              <block var='bool'/>
            </list>
          </block>
        </block>
        <block s='doWaitUntil'>
          <block s='evaluate'>
            <block var='isDone'/>
            <list/>
          </block>
        </block>
      </script>
    </block-definition>
    <block-definition s='if %&apos;test&apos; then %&apos;true&apos; else %&apos;false&apos;' category='control' type='reporter'>
      <header/>
      <code/>
      <translations/>
      <inputs>
        <input type='%b'/>
        <input type='%anyUE'/>
        <input type='%anyUE'/>
      </inputs>
      <script>
        <block s='doIfElse'>
          <block var='test'/>
          <script>
            <block s='doReport'>
              <block s='evaluate'>
                <block var='true'/>
                <list/>
              </block>
            </block>
          </script>
          <script>
            <block s='doReport'>
              <block s='evaluate'>
                <block var='false'/>
                <list/>
              </block>
            </block>
          </script>
        </block>
      </script>
    </block-definition>
    <block-definition s='%&apos;n&apos; !' category='operators' type='reporter'>
      <header/>
      <code/>
      <translations/>
      <inputs>
        <input type='%n'/>
      </inputs>
      <script>
        <block s='doReport'>
          <custom-block s='if %b then %anyUE else %anyUE'>
            <block s='reportEquals'>
              <block var='n'/>
              <l>0</l>
            </block>
            <l>1</l>
            <block s='reportProduct'>
              <block var='n'/>
              <custom-block s='%n !'>
                <block s='reportDifference'>
                  <block var='n'/>
                  <l>1</l>
                </block>
              </custom-block>
            </block>
          </custom-block>
        </block>
      </script>
    </block-definition>
    <block-definition s='%&apos;x&apos;' category='operators' type='reporter'>
      <header/>
      <code/>
      <translations/>
      <inputs>
        <input type='%s'/>
      </inputs>
      <script>
        <block s='doReport'>
          <block var='x'/>
        </block>
      </script>
    </block-definition>
    <block-definition s='Scheme number %&apos;function&apos; of %&apos;number&apos;' category='operators' type='reporter'>
      <comment x='0' w='300' collapsed='true' y='0'>Provides Scheme arithmetic functions not in JavaScript</comment>
      <header/>
      <code/>
      <translations/>
      <inputs>
        <input readonly='true' type='%s'>
          <options>number?complex?real?rational?integer?exact?inexact?exactinexactfinite?infinite?nan?numeratordenominatorreal-partimag-partmagnitudeangle</options>
        </input>
        <input type='%s'/>
      </inputs>
      <script>
        <block s='doReport'>
          <block s='evaluate'>
            <block s='reportJSFunction'>
              <list>
                <l>which</l>
                <l>num</l>
              </list>
              <l>function parseNumber (n) {    var fn = SchemeNumber.fn;    if (!fn[&apos;number?&apos;](n)) {        n = &apos;&apos; + n;        try {            return parseENotation(n) || SchemeNumber(n);        } catch (err) {            return NaN;        }    }    return n;}function parseENotation (n) {    var fn = SchemeNumber.fn;    var numbers = n.match(/^(-?\d+\.?\d*|-?\.\d+)e(-?\d+)$/i);    if (!numbers) return null;    var coefficient = numbers[1];    var exponent = numbers[2];    return fn[&apos;*&apos;](        coefficient,        fn.expt(&apos;10&apos;, exponent)    );}var fn=SchemeNumber.fn,      number=parseNumber(num);switch (which) {  case &apos;number?&apos;:  case &apos;complex?&apos;:    return (fn[&apos;number?&apos;](number));  case &apos;real?&apos;:    return (fn[&apos;real?&apos;](number) || fn[&apos;real-valued?&apos;](number));  case &apos;rational?&apos;:    return (fn[&apos;rational?&apos;](number) || (fn[&apos;=&apos;](number, fn.rationalize(number, parseNumber(&apos;1.0e-5&apos;)))));  case &apos;integer?&apos;:    return (fn[&apos;integer?&apos;](number) || fn[&apos;integer-valued?&apos;](number));  case &apos;exact?&apos;:  case &apos;inexact?&apos;:  case &apos;finite?&apos;:  case &apos;infinite?&apos;:  case &apos;nan?&apos;:  case &apos;real-part&apos;:  case &apos;imag-part&apos;:    return (fn[which](number));  case &apos;magnitude&apos;:    return (fn.magnitude(number));  case &apos;angle&apos;:    return (fn.angle(number));  case &apos;numerator&apos;:    return (fn.numerator(number));  case &apos;denominator&apos;:    return (fn.denominator(number));  case &apos;exact&apos;:    return (fn.exact(number));case &apos;inexact&apos;:    return (fn.inexact(number));}</l>
            </block>
            <list>
              <block var='function'/>
              <block var='number'/>
            </list>
          </block>
        </block>
      </script>
    </block-definition>
    <block-definition s='%&apos;method&apos; url: %&apos;url&apos; send: %&apos;payload&apos; headers: %&apos;headers&apos;' category='sensing' type='reporter'>
      <header/>
      <code/>
      <translations/>
      <inputs>
        <input readonly='true' type='%s'>GET<options>GETPOSTPUTDELETE</options>
        </input>
        <input type='%s'>http://snap.berkeley.edu</input>
        <input type='%s'/>
        <input readonly='true' type='%mult%l'/>
      </inputs>
      <script>
        <block s='doReport'>
          <block s='evaluate'>
            <block s='reportJSFunction'>
              <list>
                <l>method</l>
                <l>url</l>
                <l>data</l>
                <l>headers</l>
                <l>proc</l>
              </list>
              <l>var response, i, header;if (!proc.httpRequest) {  proc.httpRequest = new XMLHttpRequest();  proc.httpRequest.open(method, url, true);  proc.assertType(headers, &apos;list&apos;);  for (i = 1; i &lt;= headers.length(); i += 1) {    header = headers.at(i);    proc.assertType(header, &apos;list&apos;);    proc.httpRequest.setRequestHeader(      header.at(1),      header.at(2)    );  }  proc.httpRequest.send(data || null);} else if (proc.httpRequest.readyState === 4) {  response = proc.httpRequest.responseText;  proc.httpRequest = null;  return response;}proc.pushContext(&apos;doYield&apos;);proc.pushContext();</l>
            </block>
            <list>
              <block var='method'/>
              <block var='url'/>
              <block var='payload'/>
              <block var='headers'/>
            </list>
          </block>
        </block>
      </script>
    </block-definition>
    <block-definition s='key: %&apos;key&apos; value: %&apos;value&apos;' category='operators' type='reporter'>
      <header/>
      <code/>
      <translations/>
      <inputs>
        <input type='%s'/>
        <input type='%s'/>
      </inputs>
      <script>
        <block s='doReport'>
          <block s='reportNewList'>
            <list>
              <block var='key'/>
              <block var='value'/>
            </list>
          </block>
        </block>
      </script>
    </block-definition>
    <block-definition s='current location' category='sensing' type='reporter'>
      <comment collapsed='false' w='200'>Reports a three-item list containing the latitude and longitude of the user, and the precision of the measurements.  Works only if the user allows snap.berkeley.edu access to location data.  Some browsers also require an HTTPS connection to Snap!.</comment>
      <header/>
      <code/>
      <translations/>
      <inputs/>
      <script>
        <block s='doReport'>
          <block s='evaluate'>
            <block s='reportJSFunction'>
              <list>
                <l>proc</l>
              </list>
              <l>if (!proc.geostarted) {  var geo = navigator.geolocation;  var cords = [];  var options = {    enableHighAccuracy: false,  };  function success(pos) {    console.log(pos);    proc.geocords = [pos.coords.latitude,                     pos.coords.longitude,                     pos.coords.accuracy];  }  function error(err) {    alert("ERROR " + err.code + ": " + err.message);  }  proc.geostarted = true;  proc.geocords = null;  console.log("starting geolocation")  geo.getCurrentPosition(success, error, options);} else if (proc.geocords) {  var cords = proc.geocords;  proc.geostarted = null;  proc.geocords = null;  console.log("returning");  return new List(cords);} else {  console.log("yielding");  proc.pushContext(&apos;doYield&apos;);  proc.pushContext();}</l>
            </block>
            <list/>
          </block>
        </block>
      </script>
    </block-definition>
  </blocks>
  <variables>
    <variable name='var'>
      <l>1558820303294</l>
    </variable>
  </variables>
</project><media name="lag graph i think" app="Snap! 5.0, http://snap.berkeley.edu" version="1"></media></snapdata>