<snapdata remixID="10356963"><project name="Hummingbird-Chrome100" 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="true" hyperops="true" codify="false" inheritance="false" 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="15.686274509803297" y="49.99999999999997" heading="195" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="1" color="80,80,80,1" pen="tip" id="8"><costumes><list id="9"><item><costume name="Untitled" center-x="240" center-y="180" image="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" id="10"/></item></list></costumes><sounds><list struct="atomic" id="11"></list></sounds><blocks></blocks><variables></variables><scripts><script x="12" y="10"><block s="receiveKey"><l><option>space</option></l></block><block s="doRepeat"><l>10</l><script><custom-block s="Hummingbird LED %n %n"><l>1</l><l>50</l></custom-block><block s="doWait"><l>.1</l></block><custom-block s="Hummingbird LED %n %n"><l>1</l><l>0</l></custom-block><block s="doWait"><l>.1</l></block></script></block></script><script x="203" y="18.999999999999744"><block s="receiveKey"><l><option>space</option></l></block><custom-block s="Hummingbird LED %n %n"><l>1</l><l>50</l></custom-block></script><script x="393" y="17.666666666666345"><block s="receiveKey"><l><option>-</option></l></block><custom-block s="Hummingbird TRI-LED %n R %n G %n B %n"><l>1</l><l>0</l><l>0</l><l>0</l></custom-block></script><script x="203" y="85.6666666666664"><block s="receiveKey"><l><option>x</option></l></block><custom-block s="Hummingbird LED %n %n"><l>1</l><l>0</l></custom-block></script><script x="10" y="173.9999999999998"><block s="receiveKey"><l><option>t</option></l></block><custom-block s="Hummingbird TRI-LED %n R %n G %n B %n"><l>1</l><l>100</l><l>0</l><l>0</l></custom-block><block s="doWait"><l>1</l></block><custom-block s="Hummingbird TRI-LED %n R %n G %n B %n"><l>1</l><l>0</l><l>0</l><l>100</l></custom-block><block s="doWait"><l>1</l></block><custom-block s="Hummingbird TRI-LED %n R %n G %n B %n"><l>1</l><l>100</l><l>0</l><l>100</l></custom-block><block s="doWait"><l>1</l></block><custom-block s="Hummingbird TRI-LED %n R %n G %n B %n"><l>1</l><l>0</l><l>0</l><l>0</l></custom-block></script><script x="158" y="157.9999999999998"><custom-block s="Hummingbird LED %n %n"><l>1</l><l>45</l></custom-block></script><script x="718" y="12.999999999999744"><block s="receiveKey"><l><option>p</option></l></block><custom-block s="Hummingbird TRI-LED %n R %n G %n B %n"><l>1</l><l>100</l><l>10</l><l>0</l></custom-block></script><script x="727" y="86.99999999999977"><block s="receiveKey"><l><option>l</option></l></block><custom-block s="Hummingbird TRI-LED %n R %n G %n B %n"><l>1</l><l>100</l><l>100</l><l>0</l></custom-block></script><script x="726" y="154.9999999999998"><block s="receiveKey"><l><option>c</option></l></block><custom-block s="Hummingbird TRI-LED %n R %n G %n B %n"><l>1</l><l>100</l><l>100</l><l>100</l></custom-block></script><script x="728" y="221.9999999999997"><block s="receiveKey"><l><option>b</option></l></block><custom-block s="Hummingbird TRI-LED %n R %n G %n B %n"><l>10</l><l>1</l><l>100</l><l>100</l></custom-block></script><script x="398" y="107.66666666666637"><block s="receiveKey"><l><option>e</option></l></block><block s="doRepeat"><l>10</l><script><custom-block s="Hummingbird TRI-LED %n R %n G %n B %n"><l>1</l><l>0</l><l>100</l><l>0</l></custom-block><block s="doWait"><l>.15</l></block><custom-block s="Hummingbird TRI-LED %n R %n G %n B %n"><l>1</l><l>0</l><l>0</l><l>0</l></custom-block><block s="doWait"><l>.15</l></block></script></block><custom-block s="Hummingbird TRI-LED %n R %n G %n B %n"><l>1</l><l>0</l><l>0</l><l>0</l></custom-block></script><script x="327" y="305.66666666666634"><block s="receiveKey"><l><option>space</option></l></block><block s="doRepeat"><l>5</l><script><custom-block s="Hummingbird Vibration %n %n"><l>1</l><l>50</l></custom-block><block s="doWait"><l>4</l></block><custom-block s="Hummingbird TRI-LED %n R %n G %n B %n"><l>1</l><l>0</l><l>100</l><l>0</l></custom-block><block s="doWait"><l>4</l></block></script></block><custom-block s="Hummingbird TRI-LED %n R %n G %n B %n"><l>1</l><l>0</l><l>0</l><l>0</l></custom-block><custom-block s="Hummingbird Vibration %n %n"><l>1</l><l>0</l></custom-block></script><script x="665" y="301.9999999999997"><block s="receiveKey"><l><option>space</option></l></block><block s="doRepeat"><l>10</l><script><custom-block s="Hummingbird Servo %n %n"><l>1</l><l>90</l></custom-block><block s="doWait"><l>1</l></block><custom-block s="Hummingbird Servo %n %n"><l>1</l><l>90</l></custom-block></script></block></script><script x="15" y="366.9999999999997"><block s="receiveKey"><l><option>space</option></l></block><custom-block s="Hummingbird Motor %n %n"><l>1</l><l>100</l></custom-block><block s="doWait"><l>1</l></block><custom-block s="Hummingbird Motor %n %n"><l>1</l><l>0</l></custom-block></script><script x="38" y="489.9999999999999"><block s="receiveKey"><l><option>space</option></l></block><custom-block s="Say This %txt"><l>Hello there!</l></custom-block><custom-block s="Hummingbird TRI-LED %n R %n G %n B %n"><l>1</l><l>0</l><l>100</l><l>0</l></custom-block><block s="doWait"><l>1</l></block><custom-block s="Hummingbird TRI-LED %n R %n G %n B %n"><l>1</l><l>0</l><l>0</l><l>0</l></custom-block></script><script x="398" y="535.3333333333333"><block s="receiveKey"><l><option>space</option></l></block><block s="doForever"><script><block s="doSetVar"><l>distance</l><custom-block s="HB Distance CM %n"><l>1</l></custom-block></block></script></block></script><script x="700" y="485.33333333333326"><block s="receiveKey"><l><option>space</option></l></block><block s="doForever"><script><block s="doIfElse"><block s="reportGreaterThan"><custom-block s="HB Distance CM %n"><l>1</l></custom-block><l>30</l></block><script><custom-block s="Hummingbird TRI-LED %n R %n G %n B %n"><l>1</l><l>0</l><l>100</l><l>0</l></custom-block></script><script><custom-block s="Hummingbird TRI-LED %n R %n G %n B %n"><l>1</l><l>0</l><l>100</l><l>0</l></custom-block></script></block></script></block></script><script x="33" y="631.3333333333333"><block s="receiveKey"><l><option>space</option></l></block><block s="doForever"><script><block s="doIfElse"><block s="reportLessThan"><custom-block s="HB Distance CM %n"><l>1</l></custom-block><l>20</l></block><script><custom-block s="Hummingbird Motor %n %n"><l>1</l><l>50</l></custom-block><block s="doWait"><l>5</l></block></script><script><custom-block s="Hummingbird Motor %n %n"><l>1</l><l>0</l></custom-block><block s="doWait"><l>5</l></block></script></block></script></block></script><script x="293.66666666666674" y="657.3333333333334"><block s="receiveKey"><l><option>space</option></l></block><block s="doForever"><script><custom-block s="Hummingbird LED %n %n"><l>1</l><custom-block s="Hummingbird Knob %n"><l>1</l></custom-block></custom-block></script></block></script><script x="649.6666666666667" y="685.3333333333334"><block s="receiveKey"><l><option>space</option></l></block><block s="doForever"><script><custom-block s="Hummingbird Servo %n %n"><l>1</l><block s="reportProduct"><l></l><custom-block s="Hummingbird Knob %n"><l>1</l></custom-block></block></custom-block></script></block></script></scripts></sprite><watcher scope="Stage" s="getTimer" style="normal" x="0.009765625" y="0.09179688281249909" color="4,148,220" hidden="true"/><watcher scope="Stage" s="getLastAnswer" style="normal" x="0.009765625" y="0.11230469726562475" color="4,148,220" hidden="true"/><watcher scope="Sprite" s="getScale" style="normal" x="0.009765625" y="0.13281251171875041" color="143,86,227" hidden="true"/><watcher var="distance" style="normal" x="10" y="10" color="243,118,29"/></sprites></stage><hidden></hidden><headers></headers><code></code><blocks><block-definition s="Hummingbird LED %&apos;port&apos; %&apos;intensity&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n">50</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>portnum,intensitynum</l></list><l>var hummingbirdAppID = "lfloofocohhfeeoohpokmljiinfmpenj";&#xD;var realPort = portnum-1;&#xD;////////////////////////////////////////////////////////////////////////////////&#xD;// In order to avoid sending more messages than the app can handle, whenever we&#xD;// send a message we also save it in a persistent global variable. When the&#xD;// message is processed in the app, the callback checks if the global variable&#xD;// still matches what it was changed to. If it was, it deletes the global&#xD;// variable. Otherwise the message is resent with new data.&#xD;//&#xD;// When this block is called it checks if the global value has been set. If it&#xD;// has, it sends a message. Otherwise it just updates the value and lets the&#xD;// callback handle it.&#xD;&#xD;&#xD;// We can&apos;t run code beforehand to define values so we must check each block&#xD;// call if they are set.&#xD;if (window.birdbrain === undefined || window.birdbrain.LEDs === undefined) {&#xD;    window.birdbrain = window.birdbrain || {};&#xD;    window.birdbrain.LEDs = {&#xD;        // By attaching this function to a global variable, it is only&#xD;        // defined once instead of every time this block is called, improving&#xD;        // performance significantly.&#xD;        setLEDIntensity: function(port, intensity) {&#xD;            function callback() {&#xD;                if (window.birdbrain.LEDs[port] === intensity) {&#xD;                    delete window.birdbrain.LEDs[port];&#xD;                }&#xD;                else {&#xD;                    window.birdbrain.LEDs.setLEDIntensity(port, window.birdbrain.LEDs[port]);&#xD;                }&#xD;            }&#xD;&#xD;            var report = {&#xD;                message:"L".charCodeAt(0),&#xD;                port: port.toString().charCodeAt(0),&#xD;                intensity: intensity&#xD;            };&#xD;            chrome.runtime.sendMessage(hummingbirdAppID, report, callback);&#xD;        }&#xD;    }&#xD;}&#xD;&#xD;var realIntensity = Math.floor(intensitynum*2.55);&#xD;&#xD;realIntensity = Math.max(Math.min(realIntensity,255.0),0.0);&#xD;&#xD;if (window.birdbrain.LEDs[realPort] === undefined) {&#xD;  window.birdbrain.LEDs.setLEDIntensity(realPort, realIntensity);&#xD;}&#xD;&#xD;window.birdbrain.LEDs[realPort] = realIntensity;&#xD;</l></block><list><block var="port"/><block var="intensity"/></list></block><block s="doWait"><l>0</l></block></script></block-definition><block-definition s="Hummingbird TRI-LED %&apos;port&apos; R %&apos;redLED&apos; G %&apos;greenLED&apos; B %&apos;blueLED&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n">0</input><input type="%n">100</input><input type="%n">0</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>portnum</l><l>rednum</l><l>greennum</l><l>bluenum</l></list><l>var hummingbirdAppID = "lfloofocohhfeeoohpokmljiinfmpenj";&#xD;var realPort = portnum-1;&#xD;////////////////////////////////////////////////////////////////////////////////&#xD;// In order to avoid sending more messages than the app can handle, whenever we&#xD;// send a message we also save it in a persistent global variable. When the&#xD;// message is processed in the app, the callback checks if the global variable&#xD;// still matches what it was changed to. If it was, it deletes the global&#xD;// variable. Otherwise the message is resent with new data.&#xD;//&#xD;// When this block is called it checks if the global value has been set. If it&#xD;// has, it sends a message. Otherwise it just updates the value and lets the&#xD;// callback handle it.&#xD;&#xD;&#xD;// We can&apos;t run code beforehand to define values so we must check each block&#xD;// call if they are set.&#xD;if (window.birdbrain === undefined || window.birdbrain.triLEDs === undefined) {&#xD;    window.birdbrain = window.birdbrain || {};&#xD;    window.birdbrain.triLEDs = {&#xD;        // By attaching this function to a global variable, it is only&#xD;        // defined once instead of every time this block is called, improving&#xD;        // performance significantly.&#xD;        setLEDIntensities: function(port, intensities) {&#xD;            function callback() {&#xD;                if (JSON.stringify(window.birdbrain.triLEDs[port]) === JSON.stringify(intensities)) {&#xD;                    delete window.birdbrain.triLEDs[port];&#xD;                }&#xD;                else {&#xD;                    window.birdbrain.triLEDs.setLEDIntensities(port, window.birdbrain.triLEDs[port]);&#xD;                }&#xD;            }&#xD;&#xD;            var report = {&#xD;                message:"O".charCodeAt(0),&#xD;                port: port.toString().charCodeAt(0),&#xD;                red: intensities[0],&#xD;                green: intensities[1],&#xD;                blue: intensities[2]&#xD;            };&#xD;            chrome.runtime.sendMessage(hummingbirdAppID, report, callback);&#xD;        }&#xD;    }&#xD;}&#xD;&#xD;var realIntensities = [rednum, greennum, bluenum].map(function(intensity) {&#xD;    return Math.floor(Math.max(Math.min(intensity*2.55, 255), 0));&#xD;});&#xD;&#xD;if (window.birdbrain.triLEDs[realPort] === undefined) {&#xD;    window.birdbrain.triLEDs.setLEDIntensities(realPort, realIntensities);&#xD;}&#xD;&#xD;window.birdbrain.triLEDs[realPort] = realIntensities;&#xD;</l></block><list><block var="port"/><block var="redLED"/><block var="greenLED"/><block var="blueLED"/></list></block><block s="doWait"><l>0</l></block></script></block-definition><block-definition s="Hummingbird Servo %&apos;port&apos; %&apos;position&apos;" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n">0</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>portnum</l><l>ang</l></list><l>var hummingbirdAppID = "lfloofocohhfeeoohpokmljiinfmpenj";&#xD;var realPort = portnum-1;&#xD;////////////////////////////////////////////////////////////////////////////////&#xD;// In order to avoid sending more messages than the app can handle, whenever we&#xD;// send a message we also save it in a persistent global variable. When the&#xD;// message is processed in the app, the callback checks if the global variable&#xD;// still matches what it was changed to. If it was, it deletes the global&#xD;// variable. Otherwise the message is resent with new data.&#xD;//&#xD;// When this block is called it checks if the global value has been set. If it&#xD;// has, it sends a message. Otherwise it just updates the value and lets the&#xD;// callback handle it.&#xD;&#xD;&#xD;// We can&apos;t run code beforehand to define values so we must check each block&#xD;// call if they are set.&#xD;if (window.birdbrain === undefined || window.birdbrain.servos === undefined) {&#xD;    window.birdbrain = window.birdbrain || {};&#xD;    window.birdbrain.servos = {&#xD;        // By attaching this function to a global variable, it is only&#xD;        // defined once instead of every time this block is called, improving&#xD;        // performance significantly.&#xD;        setServoAngle: function (port, angle) {&#xD;            function callback() {&#xD;                if (window.birdbrain.servos[port] === angle) {&#xD;                    delete window.birdbrain.servos[port];&#xD;                }&#xD;                else {&#xD;                    window.birdbrain.servos.setServoAngle(port, window.birdbrain.servos[port]);&#xD;                }&#xD;            }&#xD;            var report = {&#xD;                message: "S".charCodeAt(0),&#xD;                port: port.toString().charCodeAt(0),&#xD;                angle: angle&#xD;            };&#xD;            chrome.runtime.sendMessage(hummingbirdAppID, report, callback);&#xD;        }&#xD;    };&#xD;}&#xD;&#xD;var realAngle = Math.floor(ang*1.25);&#xD;&#xD;realAngle = Math.max(Math.min(realAngle,225.0),0.0);&#xD;&#xD;if (window.birdbrain.servos[realPort] === undefined) {&#xD;    window.birdbrain.servos.setServoAngle(realPort, realAngle);&#xD;}&#xD;&#xD;window.birdbrain.servos[realPort] = realAngle;</l></block><list><block var="port"/><block var="position"/></list></block><block s="doWait"><l>0</l></block></script></block-definition><block-definition s="Hummingbird Motor %&apos;port&apos; %&apos;speed&apos;" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n">0</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>portnum</l><l>velocity</l></list><l>var hummingbirdAppID = "lfloofocohhfeeoohpokmljiinfmpenj";&#xD;var realPort = portnum-1;&#xD;////////////////////////////////////////////////////////////////////////////////&#xD;// In order to avoid sending more messages than the app can handle, whenever we&#xD;// send a message we also save it in a persistent global variable. When the&#xD;// message is processed in the app, the callback checks if the global variable&#xD;// still matches what it was changed to. If it was, it deletes the global&#xD;// variable. Otherwise the message is resent with new data.&#xD;//&#xD;// When this block is called it checks if the global value has been set. If it&#xD;// has, it sends a message. Otherwise it just updates the value and lets the&#xD;// callback handle it.&#xD;&#xD;&#xD;// We can&apos;t run code beforehand to define values so we must check each block&#xD;// call if they are set.&#xD;if (window.birdbrain === undefined || window.birdbrain.motors === undefined) {&#xD;    window.birdbrain = window.birdbrain || {};&#xD;    window.birdbrain.motors = {&#xD;        // By attaching this function to a global variable, it is only&#xD;        // defined once instead of every time this block is called, improving&#xD;        // performance significantly.&#xD;        setMotorVelocity: function (port, velocity) {&#xD;            function callback() {&#xD;                if (window.birdbrain.motors[port] === velocity) {&#xD;                    delete window.birdbrain.motors[port];&#xD;                }&#xD;                else {&#xD;                    window.birdbrain.motors.setMotorVelocity(port, window.birdbrain.motors[port]);&#xD;                }&#xD;            }&#xD;            var report = {&#xD;                message: "M".charCodeAt(0),&#xD;                port: port.toString().charCodeAt(0),&#xD;                direction: (velocity &lt; 0 ? 1 : 0).toString().charCodeAt(0),&#xD;                velocity: Math.abs(velocity)&#xD;            };&#xD;            chrome.runtime.sendMessage(hummingbirdAppID, report, callback);&#xD;        }&#xD;    };&#xD;}&#xD;&#xD;var realVelocity = Math.floor(velocity*2.55);&#xD;&#xD;realVelocity = Math.max(Math.min(realVelocity,255), -255);&#xD;&#xD;if (window.birdbrain.motors[realPort] === undefined) {&#xD;  window.birdbrain.motors.setMotorVelocity(realPort, realVelocity);&#xD;}&#xD;&#xD;window.birdbrain.motors[realPort] = realVelocity;</l></block><list><block var="port"/><block var="speed"/></list></block><block s="doWait"><l>0</l></block></script></block-definition><block-definition s="Hummingbird Vibration %&apos;port&apos; %&apos;intensity&apos;" type="command" category="motion"><header></header><code></code><translations></translations><inputs><input type="%n">1</input><input type="%n">0</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>portnum</l><l>intensitynum</l></list><l>var hummingbirdAppID = "lfloofocohhfeeoohpokmljiinfmpenj";&#xD;var realPort = portnum-1;&#xD;////////////////////////////////////////////////////////////////////////////////&#xD;// In order to avoid sending more messages than the app can handle, whenever we&#xD;// send a message we also save it in a persistent global variable. When the&#xD;// message is processed in the app, the callback checks if the global variable&#xD;// still matches what it was changed to. If it was, it deletes the global&#xD;// variable. Otherwise the message is resent with new data.&#xD;//&#xD;// When this block is called it checks if the global value has been set. If it&#xD;// has, it sends a message. Otherwise it just updates the value and lets the&#xD;// callback handle it.&#xD;&#xD;&#xD;// We can&apos;t run code beforehand to define values so we must check each block&#xD;// call if they are set.&#xD;if (window.birdbrain === undefined || window.birdbrain.vibrations === undefined) {&#xD;    window.birdbrain = window.birdbrain || {};&#xD;    window.birdbrain.vibrations = {&#xD;        // By attaching this function to a global variable, it is only&#xD;        // defined once instead of every time this block is called, improving&#xD;        // performance significantly.&#xD;        setServoIntensity: function (port, intensity) {&#xD;            function callback() {&#xD;                if (window.birdbrain.vibrations[port] === intensity) {&#xD;                    delete window.birdbrain.vibrations[port];&#xD;                }&#xD;                else {&#xD;                    window.birdbrain.vibrations.setServoIntensity(port, window.birdbrain.vibrations[port]);&#xD;                }&#xD;            }&#xD;            var report = {&#xD;                message: "V".charCodeAt(0),&#xD;                port: port.toString().charCodeAt(0),&#xD;                intensity: intensity&#xD;            };&#xD;            chrome.runtime.sendMessage(hummingbirdAppID, report, callback);&#xD;        }&#xD;    };&#xD;}&#xD;&#xD;var realIntensity = Math.floor(intensitynum*2.55);&#xD;&#xD;realIntensity = Math.max(Math.min(realIntensity,255.0),0.0);&#xD;&#xD;if (window.birdbrain.vibrations[realPort] === undefined) {&#xD;  window.birdbrain.vibrations.setServoIntensity(realPort, realIntensity);&#xD;}&#xD;&#xD;window.birdbrain.vibrations[realPort] = realIntensity;</l></block><list><block var="port"/><block var="intensity"/></list></block><block s="doWait"><l>0</l></block></script></block-definition><block-definition s="Say This %&apos;speech&apos;" type="command" category="sound"><header></header><code></code><translations></translations><inputs><input type="%txt">I am known by many names, but you may call me...Tim.</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>phrase</l></list><l>var hummingbirdAppID = "lfloofocohhfeeoohpokmljiinfmpenj";&#xD;var report = { message: "SPEAK", val: phrase};&#xD;chrome.runtime.sendMessage(hummingbirdAppID, report, function(){});</l></block><list><block var="speech"/></list></block></script></block-definition><block-definition s="Hummingbird Light %&apos;port&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%n">1</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>port</l></list><l>var sensorvalue = Number.MAX_VALUE;&#xD;&#xD;&#xD;&#xD;var hummingbirdAppID = "lfloofocohhfeeoohpokmljiinfmpenj";&#xD;&#xD;&#xD;&#xD;var realport = port - 1;&#xD;&#xD;&#xD;&#xD;var myself = this;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;function getSensorData(callback) {&#xD;&#xD;&#xD;&#xD;    var getValue = function(response) {&#xD;&#xD;&#xD;&#xD;        if (realport === 0)&#xD;&#xD;&#xD;&#xD;            sensorvalue = response.port1;&#xD;&#xD;&#xD;&#xD;        else if (realport === 1)&#xD;&#xD;&#xD;&#xD;            sensorvalue = response.port2;&#xD;&#xD;&#xD;&#xD;        else if (realport === 2)&#xD;&#xD;&#xD;&#xD;            sensorvalue = response.port3;&#xD;&#xD;&#xD;&#xD;        else if (realport === 3)&#xD;&#xD;&#xD;&#xD;            sensorvalue = response.port4;&#xD;&#xD;&#xD;&#xD;        callback(sensorvalue);&#xD;&#xD;&#xD;&#xD;    };&#xD;&#xD;&#xD;&#xD;    console.log("sending message to chrome");&#xD;&#xD;&#xD;&#xD;    chrome.runtime.sendMessage(hummingbirdAppID, {&#xD;&#xD;&#xD;&#xD;        message: "POLL"&#xD;&#xD;&#xD;&#xD;    }, getValue);&#xD;&#xD;&#xD;&#xD;    console.log("sent message to chrome");&#xD;&#xD;&#xD;&#xD;};&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;function processValue(sensorvalue) {&#xD;&#xD;&#xD;&#xD;    sensorvalue = sensorvalue / 2.55;&#xD;    sensorvalue = parseInt(sensorvalue);&#xD;&#xD;&#xD;&#xD;    console.log("sensor value has been set: ", sensorvalue);&#xD;&#xD;&#xD;&#xD;    if (port === 1)&#xD;&#xD;&#xD;&#xD;      myself.hummingbirdDummy1 = sensorvalue&#xD;&#xD;&#xD;&#xD;    else if (port === 2)&#xD;&#xD;&#xD;&#xD;      myself.hummingbirdDummy2 = sensorvalue&#xD;&#xD;&#xD;&#xD;    else if (port === 3)&#xD;&#xD;&#xD;&#xD;      myself.hummingbirdDummy3 = sensorvalue&#xD;&#xD;&#xD;&#xD;    else if (port === 4)&#xD;&#xD;&#xD;&#xD;      myself.hummingbirdDummy4 = sensorvalue&#xD;};&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;getSensorData(processValue);&#xD;&#xD;&#xD;</l></block><list><block var="port"/></list></block><block s="doWait"><l>0.01</l></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>port</l></list><l>if (port === 1)&#xD;&#xD;&#xD;&#xD;  return this.hummingbirdDummy1&#xD;&#xD;&#xD;&#xD;else if (port === 2)&#xD;&#xD;&#xD;&#xD;  return this.hummingbirdDummy2&#xD;&#xD;&#xD;&#xD;else if (port === 3)&#xD;&#xD;&#xD;&#xD;  return this.hummingbirdDummy3&#xD;&#xD;&#xD;&#xD;else if (port === 4)&#xD;&#xD;&#xD;&#xD;  return this.hummingbirdDummy4</l></block><list><block var="port"/></list></block></block></script></block-definition><block-definition s="HB Temperature C %&apos;port&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%n">1</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>port</l></list><l>var sensorvalue = Number.MAX_VALUE;&#xD;&#xD;&#xD;&#xD;var hummingbirdAppID = "lfloofocohhfeeoohpokmljiinfmpenj";&#xD;&#xD;&#xD;&#xD;var realport = port - 1;&#xD;&#xD;&#xD;&#xD;var myself = this;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;function getSensorData(callback) {&#xD;&#xD;&#xD;&#xD;    var getValue = function(response) {&#xD;&#xD;&#xD;&#xD;        if (realport === 0)&#xD;&#xD;&#xD;&#xD;            sensorvalue = response.port1;&#xD;&#xD;&#xD;&#xD;        else if (realport === 1)&#xD;&#xD;&#xD;&#xD;            sensorvalue = response.port2;&#xD;&#xD;&#xD;&#xD;        else if (realport === 2)&#xD;&#xD;&#xD;&#xD;            sensorvalue = response.port3;&#xD;&#xD;&#xD;&#xD;        else if (realport === 3)&#xD;&#xD;&#xD;&#xD;            sensorvalue = response.port4;&#xD;&#xD;&#xD;&#xD;        callback(sensorvalue);&#xD;&#xD;&#xD;&#xD;    };&#xD;&#xD;&#xD;&#xD;    console.log("sending message to chrome");&#xD;&#xD;&#xD;&#xD;    chrome.runtime.sendMessage(hummingbirdAppID, {&#xD;&#xD;&#xD;&#xD;        message: "POLL"&#xD;&#xD;&#xD;&#xD;    }, getValue);&#xD;&#xD;&#xD;&#xD;    console.log("sent message to chrome");&#xD;&#xD;&#xD;&#xD;};&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;function processValue(sensorvalue) {&#xD;&#xD;&#xD;&#xD;    sensorvalue = Math.floor(((sensorvalue-127)/2.4+25)*100/100);;&#xD;&#xD;&#xD;&#xD;    console.log("sensor value has been set: ", sensorvalue);&#xD;&#xD;&#xD;&#xD;    if (port === 1)&#xD;&#xD;&#xD;&#xD;      myself.hummingbirdDummy1 = sensorvalue&#xD;&#xD;&#xD;&#xD;    else if (port === 2)&#xD;&#xD;&#xD;&#xD;      myself.hummingbirdDummy2 = sensorvalue&#xD;&#xD;&#xD;&#xD;    else if (port === 3)&#xD;&#xD;&#xD;&#xD;      myself.hummingbirdDummy3 = sensorvalue&#xD;&#xD;&#xD;&#xD;    else if (port === 4)&#xD;&#xD;&#xD;&#xD;      myself.hummingbirdDummy4 = sensorvalue&#xD;};&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;getSensorData(processValue);&#xD;&#xD;&#xD;</l></block><list><block var="port"/></list></block><block s="doWait"><l>0.01</l></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>port</l></list><l>if (port === 1)&#xD;&#xD;&#xD;&#xD;  return this.hummingbirdDummy1&#xD;&#xD;&#xD;&#xD;else if (port === 2)&#xD;&#xD;&#xD;&#xD;  return this.hummingbirdDummy2&#xD;&#xD;&#xD;&#xD;else if (port === 3)&#xD;&#xD;&#xD;&#xD;  return this.hummingbirdDummy3&#xD;&#xD;&#xD;&#xD;else if (port === 4)&#xD;&#xD;&#xD;&#xD;  return this.hummingbirdDummy4</l></block><list><block var="port"/></list></block></block></script></block-definition><block-definition s="HB Temperature F %&apos;port&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%n">1</input></inputs><script><block s="doReport"><block s="reportRound"><block s="reportSum"><l>32</l><block s="reportProduct"><l>1.80</l><custom-block s="HB Temperature C %n"><block var="port"/></custom-block></block></block></block></block></script></block-definition><block-definition s="HB Distance CM %&apos;port&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%n">1</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>port</l></list><l>var sensorvalue = Number.MAX_VALUE;&#xD;&#xD;&#xD;&#xD;var hummingbirdAppID = "lfloofocohhfeeoohpokmljiinfmpenj";&#xD;&#xD;&#xD;&#xD;var realport = port - 1;&#xD;&#xD;&#xD;&#xD;var myself = this;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;function getSensorData(callback) {&#xD;&#xD;&#xD;&#xD;    var getValue = function(response) {&#xD;&#xD;&#xD;&#xD;        if (realport === 0)&#xD;&#xD;&#xD;&#xD;            sensorvalue = response.port1;&#xD;&#xD;&#xD;&#xD;        else if (realport === 1)&#xD;&#xD;&#xD;&#xD;            sensorvalue = response.port2;&#xD;&#xD;&#xD;&#xD;        else if (realport === 2)&#xD;&#xD;&#xD;&#xD;            sensorvalue = response.port3;&#xD;&#xD;&#xD;&#xD;        else if (realport === 3)&#xD;&#xD;&#xD;&#xD;            sensorvalue = response.port4;&#xD;&#xD;&#xD;&#xD;        callback(sensorvalue);&#xD;&#xD;&#xD;&#xD;    };&#xD;&#xD;&#xD;&#xD;    console.log("sending message to chrome");&#xD;&#xD;&#xD;&#xD;    chrome.runtime.sendMessage(hummingbirdAppID, {&#xD;&#xD;&#xD;&#xD;        message: "POLL"&#xD;&#xD;&#xD;&#xD;    }, getValue);&#xD;&#xD;&#xD;&#xD;    console.log("sent message to chrome");&#xD;&#xD;&#xD;&#xD;};&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;function processValue(sensorvalue) {&#xD;&#xD;&#xD;&#xD;    var reading = sensorvalue*4;&#xD;&#xD;    if(reading &lt; 130){&#xD;        sensorvalue =  100;&#xD;    }&#xD;    else { //formula based on mathematical regression&#xD;            reading = reading - 120;&#xD;            var distance;&#xD;            if (reading &gt; 680)&#xD;                distance = 5.0;&#xD;            else{&#xD;                var sensor_val_square = reading*reading;&#xD;                distance = sensor_val_square*sensor_val_square*reading*-0.000000000004789&#xD;				               + sensor_val_square*sensor_val_square*0.000000010057143&#xD;				               - sensor_val_square*reading*0.000008279033021 &#xD;				               + sensor_val_square*0.003416264518201 &#xD;				               - reading*0.756893112198934 &#xD;				               + 90.707167605683000;&#xD;            }&#xD;            sensorvalue =  parseInt(distance);&#xD;        }&#xD;&#xD;&#xD;&#xD;&#xD;    console.log("sensor value has been set: ", sensorvalue);&#xD;&#xD;&#xD;&#xD;    if (port === 1)&#xD;&#xD;&#xD;&#xD;      myself.hummingbirdDummy1 = sensorvalue&#xD;&#xD;&#xD;&#xD;    else if (port === 2)&#xD;&#xD;&#xD;&#xD;      myself.hummingbirdDummy2 = sensorvalue&#xD;&#xD;&#xD;&#xD;    else if (port === 3)&#xD;&#xD;&#xD;&#xD;      myself.hummingbirdDummy3 = sensorvalue&#xD;&#xD;&#xD;&#xD;    else if (port === 4)&#xD;&#xD;&#xD;&#xD;      myself.hummingbirdDummy4 = sensorvalue&#xD;};&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;getSensorData(processValue);&#xD;&#xD;&#xD;</l></block><list><block var="port"/></list></block><block s="doWait"><l>0.01</l></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>port</l></list><l>if (port === 1)&#xD;&#xD;&#xD;&#xD;  return this.hummingbirdDummy1&#xD;&#xD;&#xD;&#xD;else if (port === 2)&#xD;&#xD;&#xD;&#xD;  return this.hummingbirdDummy2&#xD;&#xD;&#xD;&#xD;else if (port === 3)&#xD;&#xD;&#xD;&#xD;  return this.hummingbirdDummy3&#xD;&#xD;&#xD;&#xD;else if (port === 4)&#xD;&#xD;&#xD;&#xD;  return this.hummingbirdDummy4</l></block><list><block var="port"/></list></block></block></script></block-definition><block-definition s="HB Distance Inch %&apos;port&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%n">1</input></inputs><script><block s="doReport"><block s="reportQuotient"><block s="reportRound"><block s="reportQuotient"><custom-block s="HB Distance CM %n"><block var="port"/></custom-block><l>0.254</l></block></block><l>10</l></block></block></script></block-definition><block-definition s="Hummingbird Raw Sensor %&apos;port&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%n">1</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>port</l></list><l>var sensorvalue = Number.MAX_VALUE;&#xD;&#xD;&#xD;&#xD;var hummingbirdAppID = "lfloofocohhfeeoohpokmljiinfmpenj";&#xD;&#xD;&#xD;&#xD;var realport = port - 1;&#xD;&#xD;&#xD;&#xD;var myself = this;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;function getSensorData(callback) {&#xD;&#xD;&#xD;&#xD;    var getValue = function(response) {&#xD;&#xD;&#xD;&#xD;        if (realport === 0)&#xD;&#xD;&#xD;&#xD;            sensorvalue = response.port1;&#xD;&#xD;&#xD;&#xD;        else if (realport === 1)&#xD;&#xD;&#xD;&#xD;            sensorvalue = response.port2;&#xD;&#xD;&#xD;&#xD;        else if (realport === 2)&#xD;&#xD;&#xD;&#xD;            sensorvalue = response.port3;&#xD;&#xD;&#xD;&#xD;        else if (realport === 3)&#xD;&#xD;&#xD;&#xD;            sensorvalue = response.port4;&#xD;&#xD;&#xD;&#xD;        callback(sensorvalue);&#xD;&#xD;&#xD;&#xD;    };&#xD;&#xD;&#xD;&#xD;    console.log("sending message to chrome");&#xD;&#xD;&#xD;&#xD;    chrome.runtime.sendMessage(hummingbirdAppID, {&#xD;&#xD;&#xD;&#xD;        message: "POLL"&#xD;&#xD;&#xD;&#xD;    }, getValue);&#xD;&#xD;&#xD;&#xD;    console.log("sent message to chrome");&#xD;&#xD;&#xD;&#xD;};&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;function processValue(sensorvalue) {&#xD;&#xD;&#xD;&#xD;    sensorvalue = sensorvalue / 2.55;&#xD;    sensorvalue = parseInt(sensorvalue);&#xD;&#xD;&#xD;&#xD;    console.log("sensor value has been set: ", sensorvalue);&#xD;&#xD;&#xD;&#xD;    if (port === 1)&#xD;&#xD;&#xD;&#xD;      myself.hummingbirdDummy1 = sensorvalue&#xD;&#xD;&#xD;&#xD;    else if (port === 2)&#xD;&#xD;&#xD;&#xD;      myself.hummingbirdDummy2 = sensorvalue&#xD;&#xD;&#xD;&#xD;    else if (port === 3)&#xD;&#xD;&#xD;&#xD;      myself.hummingbirdDummy3 = sensorvalue&#xD;&#xD;&#xD;&#xD;    else if (port === 4)&#xD;&#xD;&#xD;&#xD;      myself.hummingbirdDummy4 = sensorvalue&#xD;};&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;getSensorData(processValue);&#xD;&#xD;&#xD;</l></block><list><block var="port"/></list></block><block s="doWait"><l>0.01</l></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>port</l></list><l>if (port === 1)&#xD;&#xD;&#xD;&#xD;  return this.hummingbirdDummy1&#xD;&#xD;&#xD;&#xD;else if (port === 2)&#xD;&#xD;&#xD;&#xD;  return this.hummingbirdDummy2&#xD;&#xD;&#xD;&#xD;else if (port === 3)&#xD;&#xD;&#xD;&#xD;  return this.hummingbirdDummy3&#xD;&#xD;&#xD;&#xD;else if (port === 4)&#xD;&#xD;&#xD;&#xD;  return this.hummingbirdDummy4&#xD;&#xD;&#xD;</l></block><list><block var="port"/></list></block></block></script></block-definition><block-definition s="Hummingbird Knob %&apos;port&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%n">1</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>port</l></list><l>var sensorvalue = Number.MAX_VALUE;&#xD;&#xD;&#xD;&#xD;var hummingbirdAppID = "lfloofocohhfeeoohpokmljiinfmpenj";&#xD;&#xD;&#xD;&#xD;var realport = port - 1;&#xD;&#xD;&#xD;&#xD;var myself = this;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;function getSensorData(callback) {&#xD;&#xD;&#xD;&#xD;    var getValue = function(response) {&#xD;&#xD;&#xD;&#xD;        if (realport === 0)&#xD;&#xD;&#xD;&#xD;            sensorvalue = response.port1;&#xD;&#xD;&#xD;&#xD;        else if (realport === 1)&#xD;&#xD;&#xD;&#xD;            sensorvalue = response.port2;&#xD;&#xD;&#xD;&#xD;        else if (realport === 2)&#xD;&#xD;&#xD;&#xD;            sensorvalue = response.port3;&#xD;&#xD;&#xD;&#xD;        else if (realport === 3)&#xD;&#xD;&#xD;&#xD;            sensorvalue = response.port4;&#xD;&#xD;&#xD;&#xD;        callback(sensorvalue);&#xD;&#xD;&#xD;&#xD;    };&#xD;&#xD;&#xD;&#xD;    console.log("sending message to chrome");&#xD;&#xD;&#xD;&#xD;    chrome.runtime.sendMessage(hummingbirdAppID, {&#xD;&#xD;&#xD;&#xD;        message: "POLL"&#xD;&#xD;&#xD;&#xD;    }, getValue);&#xD;&#xD;&#xD;&#xD;    console.log("sent message to chrome");&#xD;&#xD;&#xD;&#xD;};&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;function processValue(sensorvalue) {&#xD;&#xD;&#xD;&#xD;    sensorvalue = sensorvalue / 2.55;&#xD;    sensorvalue = parseInt(sensorvalue);&#xD;&#xD;&#xD;    console.log("sensor value has been set: ", sensorvalue);&#xD;&#xD;&#xD;&#xD;    if (port === 1)&#xD;&#xD;&#xD;&#xD;      myself.hummingbirdDummy1 = sensorvalue&#xD;&#xD;&#xD;&#xD;    else if (port === 2)&#xD;&#xD;&#xD;&#xD;      myself.hummingbirdDummy2 = sensorvalue&#xD;&#xD;&#xD;&#xD;    else if (port === 3)&#xD;&#xD;&#xD;&#xD;      myself.hummingbirdDummy3 = sensorvalue&#xD;&#xD;&#xD;&#xD;    else if (port === 4)&#xD;&#xD;&#xD;&#xD;      myself.hummingbirdDummy4 = sensorvalue&#xD;};&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;getSensorData(processValue);&#xD;&#xD;&#xD;</l></block><list><block var="port"/></list></block><block s="doWait"><l>0.01</l></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>port</l></list><l>if (port === 1)&#xD;&#xD;&#xD;&#xD;  return this.hummingbirdDummy1&#xD;&#xD;&#xD;&#xD;else if (port === 2)&#xD;&#xD;&#xD;&#xD;  return this.hummingbirdDummy2&#xD;&#xD;&#xD;&#xD;else if (port === 3)&#xD;&#xD;&#xD;&#xD;  return this.hummingbirdDummy3&#xD;&#xD;&#xD;&#xD;else if (port === 4)&#xD;&#xD;&#xD;&#xD;  return this.hummingbirdDummy4</l></block><list><block var="port"/></list></block></block></script></block-definition><block-definition s="Hummingbird Sound %&apos;port&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%n">1</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>port</l></list><l>var sensorvalue = Number.MAX_VALUE;&#xD;&#xD;&#xD;&#xD;var hummingbirdAppID = "lfloofocohhfeeoohpokmljiinfmpenj";&#xD;&#xD;&#xD;&#xD;var realport = port - 1;&#xD;&#xD;&#xD;&#xD;var myself = this;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;function getSensorData(callback) {&#xD;&#xD;&#xD;&#xD;    var getValue = function(response) {&#xD;&#xD;&#xD;&#xD;        if (realport === 0)&#xD;&#xD;&#xD;&#xD;            sensorvalue = response.port1;&#xD;&#xD;&#xD;&#xD;        else if (realport === 1)&#xD;&#xD;&#xD;&#xD;            sensorvalue = response.port2;&#xD;&#xD;&#xD;&#xD;        else if (realport === 2)&#xD;&#xD;&#xD;&#xD;            sensorvalue = response.port3;&#xD;&#xD;&#xD;&#xD;        else if (realport === 3)&#xD;&#xD;&#xD;&#xD;            sensorvalue = response.port4;&#xD;&#xD;&#xD;&#xD;        callback(sensorvalue);&#xD;&#xD;&#xD;&#xD;    };&#xD;&#xD;&#xD;&#xD;    console.log("sending message to chrome");&#xD;&#xD;&#xD;&#xD;    chrome.runtime.sendMessage(hummingbirdAppID, {&#xD;&#xD;&#xD;&#xD;        message: "POLL"&#xD;&#xD;&#xD;&#xD;    }, getValue);&#xD;&#xD;&#xD;&#xD;    console.log("sent message to chrome");&#xD;&#xD;&#xD;&#xD;};&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;function processValue(sensorvalue) {&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;    console.log("sensor value has been set: ", sensorvalue);&#xD;&#xD;&#xD;&#xD;    if (port === 1)&#xD;&#xD;&#xD;&#xD;      myself.hummingbirdDummy1 = sensorvalue&#xD;&#xD;&#xD;&#xD;    else if (port === 2)&#xD;&#xD;&#xD;&#xD;      myself.hummingbirdDummy2 = sensorvalue&#xD;&#xD;&#xD;&#xD;    else if (port === 3)&#xD;&#xD;&#xD;&#xD;      myself.hummingbirdDummy3 = sensorvalue&#xD;&#xD;&#xD;&#xD;    else if (port === 4)&#xD;&#xD;&#xD;&#xD;      myself.hummingbirdDummy4 = sensorvalue&#xD;};&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;&#xD;getSensorData(processValue);&#xD;&#xD;&#xD;</l></block><list><block var="port"/></list></block><block s="doWait"><l>0.01</l></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>port</l></list><l>if (port === 1)&#xD;&#xD;&#xD;&#xD;  return this.hummingbirdDummy1&#xD;&#xD;&#xD;&#xD;else if (port === 2)&#xD;&#xD;&#xD;&#xD;  return this.hummingbirdDummy2&#xD;&#xD;&#xD;&#xD;else if (port === 3)&#xD;&#xD;&#xD;&#xD;  return this.hummingbirdDummy3&#xD;&#xD;&#xD;&#xD;else if (port === 4)&#xD;&#xD;&#xD;&#xD;  return this.hummingbirdDummy4</l></block><list><block var="port"/></list></block></block></script></block-definition></blocks><variables><variable name="distance"><l>NaN</l></variable></variables></project><media name="Hummingbird-Chrome100" app="Snap! 6, https://snap.berkeley.edu" version="1"></media></snapdata>