<snapdata remixID="9420063"><project name="excite railroad crossing extended" app="Snap! 6, https://snap.berkeley.edu" version="1"><notes></notes><thumbnail>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAAV5ElEQVR4Xu2dB5QVRRaGa9BjjqAgYoJBUKIMAoJKGGaGYVRQUIYsiG8xruC66rpmcXdl3UWOSkaUKChIUPIQVMIQhpwHQVgQE4oJ98jRPX+Nt6jXW/3e7TcJ6HvP4Qzvverq7ttf36pb91ZV0m+//fab8sjhw4fVjh071Pnnn6/wc1JSkvxl6OHQoUOqatWq6vTTT/eqVD77aCDJBeD69evVueeeq8FbuXKl2rdvn2rbtm1MEA8ePKjKli2r6G9Ywf3mm29U3bp1BTimBpwAfvrpp/pwALhnzx61e/duVb9+ffXrr7/q7y+77DL15ZdfqiNHjqhq1aopWEx8rlixotq0aZNau3atuvLKK9Wll16qLScJWdIT/fPll1/OVL8UcwII4AjAK664Qo0ZM0ZlZGTo77766itVs2ZNtWvXLg3oqFGj1HPPPac/V6lSRX3++efq5JNP1tYQ9YQRQOhMhKeBmACiCmpKqTr5XNAnjqWPypUr87QvpZQTQFgzkp3vD1bbZo5UZY7qXNTm0UDPN1aqzw4fVZAAyEfEF0CydKcObKoOP7iIX2NISv7www/q559/Vvv371fpuX3UF39YaJw0dEVEeBpwAvjJJ5+Yprfs4Gbq63sEQK860c89cOCA6tatm8pr91/1eWSBATA5OZmnfSnlboJ37txpVFNuSHMD4OrVq9Xrr7+uBg0apE477TSW+nAMPOjCSlHVg+t47bXX1AMPPFCoS3IBSBUKgHzVOi1gfn6+qeGCoS00gC+99JJ67LHH+DVbDxpNFRdYvxMQgEVR17Rp0/S4Jix9os2lF8ADd+eYS8dgtAhPA74AUh+QAORVF55SXgA/6zXfNMEYAxXhacAJIMJwBOCFw1KlD+jQpRfA/XfNMwBicF6EpwEngNu3b9dHY7wrFoBh6OvY/WFbpQIgD7B4pXwBJAtYfnhLXwtIAG7btk1dddVV2mouWbJE5eTkqKefflqfu3Xr1uqVV14xv3sTG2JdIOpCFGbIkCEK56hevbp+KX766Sd1xhlnREVZvPUgPIgyH3/8sbr++uvNzwgTzpgxQz311FPxdKN/5wK4r+dcYwFxnSI8DTgBxMMmqTAiLS6AKDtgwADVt29ffdjzzz9vAMRngmfcuHEqMzNTlylXrhzrCu+5554oAHEQ4MK5AKafEIAIHeJcSKioVKmSvs4VK1aoGjVqaAdk3bp1OpSImDdi3EimQBYQ4A0KIF2LAMh6tAWtrCsbZuvWraaGi0amswDEA0caElktZNPAc4bF6t27txo6dKixXBwLhgu45pprNCCwrIB40qRJGuyxY8eqrl27siwglUW3An0zvBwEI6514MCB2jrjngEOgUsxbD8LeNJJJylkvmRnZ+txwP/0mGN0hvpEeBrwBZCaYC6AvNMdf6ViNcHIAOrcubMGcO+ds00TfPXVVx9/N1pKV+wEcMuWLcYLrvhGBssCltL1F/tpuX3APd1nGQDRvIvwNOAEcPPmzeboi0e1EgAduvR6wQCQRADkwefbB0RSKUmlNzOjQnHz5883ERF7GIb6gC+88IJCoB79Pwj6WYg8IIoChwD9LMqajneZcEBuvPFG7bjQsV9//bWaPXu2jmLE8mTh8Hz00UdOR4WuNdb5yaniWsBPu8001SFfUoSnAacF9APQG7qyAQRoNNxh/588YIIRcVj843rBdBu2J92lSxfd3JHj4LpVANS9e3c1evRo9fDDD+siSJXHEBE8XDhMgLRdu3ZqypQp6tprr9VOzllnnaWysrLUzJkztacdFED0nWvVqsXTvpRye8EbN240qrnkrdYJNcHDhw9XkUjkuFcxF8DdXT8w9yoA8h+70wICQPKCEwWQfwnHdkkugLu6vG+ckNq1ax/bN3UMXZ0TwA0bNhgALx2dlZAFPIbusVCXwgXwk84zDIB16tQp1DnDdLDvtExSwmVjbhIAHUR4vWAASCIA8l8hJ4CIPpBcPvbmKAAplw6/206IHYqDx0teMMrBM4bHSs4JRSI4l4ljEDlBmAxOAuqB8xDPC8b1lC9fXnvQ8JohiJ4gIrJ3717VsmVLE5lBtAROCI6Bc4M5Ma1atYrphMArh+BeMlb0VTs7TTe3I/OCOU+2oIwvgNQHtAFEUqjfMAyGR+DZ3nvvveqGG25Q8FQhFMvF73hoAAnCWT2AwEV5rxcc7xYJ9o4dO+pz9u/fXx9Cni95wQQoplIuWLBAe8ENGzbU/wfsfk0wfifptLOfyu84zTTBCCGK8DTgBBAZIwTgFeNukSbYoUsvgDuypxoA69Wrx9O+lHJbwDVr1hSYx6QkFQvAMOtPACyap++0gACQLGDl8W3EAjIs4PYO7xkLmJKSUjRPJwS1OAHMy8szt15lQtsoAO1oSGkmpMbrR6LPCKfClTNYFKE4rwUEgCQCIP/NcQIIZ4Mk+e1bDYAIoSHDmcDz84Jt58HrQMC7RNPODcXBqRk8eLBxQlAfAIKFpqRR1+3iGlJTU9UFF1ygRo4cqZ2LDh066Nw/ApASZOElwwtGYuoll1yiZ8wtXLhQPfnkk2wnZNsdU8xlFMU0VP4jPL5L+gJITbANIG7VZQEJCldCapkyZUxC6o8//qjOPPNMRX9ptS0/FaIzjyEhlKOE1GeeeUan6ZOX7Xes1yvHBHIIcvimT5+uevXqZa4D2T99+vTR3jtABZDwjvEd1wveevtk0wQDZhGeBpwArlq1yvQBq068TfqAjD7glvbvGgAbNGjA076UcnvBWJSS5MpJ7QRAJoBUTADkv1lOC4hJOyTV3mkvADIA3NzuHVMKA9kiPA34Akh9QBtA7/IcroTUfv36qe+//75IElIpquJKSIUzAwfDT1wJqXRPcEKwVIg9RRT12ItpYipprHxArxe86bZJpr5GjRrxtC+l3E1wbm6uUU31d2+PsoCYlYaZZRBXQioe4tKlS01yqjchFYsbvfrqq2wvmC7EFYqz6/Y+S29CKmBDjBahxKJISHUBSBBfd911ghZTA04LCADJWngBtOuNtTLCiBEj1N133828jGO3GNcL3njrRGMBBUD+83QCuHz5cgPgVZPvkD4gow+4oe3bBsDGjRvzn0DISzoBXLZsmVHL1VM6CIBMAKmYAMh/q5wAog9HUuO9bAOgd4Fyuwn2/kbHx9svJN6l+i2K7nc+uz5OmXjn5zbB69tMMFU1adIkXrXy++8a8AWQHp4NILZkaNq0adxQXEkkpCKyESuS4kpIxTFwXJCQmpaWZiIhiKwETUj1OiHrbhlvmmB7MSQhLbYGnAAimZMArDm1o7GAyIZGnNjlBXtDX1iyAp4nElIRy8Xv+IfNa/A9DYPEujzEcxGPRXnyeO11YbBaql9iqzchlTK0x48fr6di4vz4P4Zz5syZo7C5DOK/lJAaNBa89uZxBkCE9ER4GnACiCXNSGpN6yR9QEYfEACSCIA8+FDKCSBWFNA/JiWpWADyT3PilfQ2wWtuGmssIFZzEOFpICaAqKL29M5iARkWEACSCIA8+Hwt4IcffmhqqDOjiwEQi2+jeYEzArETUrEkGZwCvxVS6XekZ6Ec/Y11qa4VUnGcndbl1wcs6YTUvKwx5lbgqInwNOC0gACQnBAbQG+VpZmQCvDI8XHdakknpK5uPdo0wc2aNeNpX0q5+4CLFy82ANZ9v6uxgEjkbNOmjVGbKxnBu0JqcSWkxhuGKemE1FWZbxkAmzdvLmgxNeC0gIsWHd2a65oPukkfkNEHBIAkAiCTPj8vGGNgJPVmdhcAGQCubPWmKdWiRQv+Ewh5SacFBIDUBxQAj+6bZ7PiHYZZkTHKNMGYDCXC04ATQFu5KbPujIqEIIxFG/1JQmqBkrE0BwCE4MXFujMiPA34AkgW0AsgJizBw4RIQupRAHPT3zAWUADkwYdSTgCxjC0BWH92j4T6gGFJSMUc4GqTblPL00YaAJHoIMLTgBNApK2TXDunZ0IA8k5/7JeKlY4F+JBoMaDcXA0giQDIf65OAOfNm2dqaDD3LgHQoU9s50VpZ6f0r6eWtRxhSqWnp/OfQMhL+gJITbANoCSkFtBiwwcIYQGXpg43TXBGRkbIseLfvhPAuXPnmj5gw3m9jAXEshyIA7uckJJeITVeJKS4ElK98CHPEBZwSYthBkDkGIrwNOAEEIv00MyuxjkRVSaJV1lYS51cs5VaXOF2ffuYT/Pss8+GVRWB79sJIGq57777dPr9eeedZyqlidz0hXxOMpPZsXMm8igHDRoU+CGE+QBfAMOsFNw79g/G6lhYIB1JGKecckrYVVIs9y8AFotapVKuBgRArqakXLFoQAAsFrVKpVwNCIBcTUm5YtFAIADXr1+vvvvuOz2HNt6KB2H4HZlBZ599tpKtuRJnkw0g4LOHZBI/5Yl35LfffisQJvhY2QBijIu22Zo6daqiVVSxusDu3bsVtrrCagjt27fX/+g7bCqNVQgOHDigevbsqWbNmqXLYuLTF198oRB1GTZsmN58GqvYYz+4KlWq6GEP1HE8CIZsZCpmYk+KDSBgoIFnLM2BtHMscYFV7zHNEgOxO3bsUBdffLEqW7as2r9/v6pQoYL65Zdf9HIXWJ3+wgsv1KunnnrqqXr1ewCN7Roww+3gwYMKO1DiPIAP295j+iWOs1cyPVabdnRLRIJrgA0gdpA8HkAoLUBh1UWCayAQgFQ9LNveXflq/55dwc94Ahzx048/qBr1o5dgq1y58glwZyV/C2wAkQlD8lrneur+cUe38yr5yy6dM9IewVgcvVKlSrqbQYJ+q0hwDbABRGYwNcFzH2yoMl49upVD8NMef0dgohZ2bkK/FJteRyIRvWsUNfkCYGLPlA1gfn6+AXDeHxsZAKtWrarwWxDBRtCUUxjkOL+y2MOOZuoVtj4kIGCLBq8AQGxEDQDhbAFAvJRmS7Pk5MKeOpTHBwKQNGQDSDBhLIw7TghoJ06cqIpqU7+iABqLXWK4aMuWLQoLKfkBiOwYsoD2i4d7EgmuATaAeOtJ5j90XSibYK8FtHWClcNEgmuADSDeeuoD5vRpHEoAvX1AAEhNsAAYHD4cwQYQ6+0RgAv6NvEFEAOyGFAuCjly5MgxU9eMGTPURRddFNUHxEtptjSrVq0objl0dQQCkLQTZgDtPiBeSpLq1auHDp6iuGE2gIjVkix8+HpjAeF8YOV68kL9LCDtUk51YP2+0aNHq/Lly+vNp+EVP/LII2rKlClmM+p4FvDRRx/Vu5tjWwSsS0ji2iYBdcFrpbE87JyO8TwsyI5zY6X83r17qxdffFF/TxsX4jrxGZsfopm1vWBbJ6hPJLgG2ADCO6QmeNGfbohqgu1hEBtAPFh4qN6VTGkLBWzhcM455+gUryFDhuitGAAIAcQBsH///hognAdCdXtVQXWhLGLTWVlZiqwW4IJgrxCsfYMXgq6Z/nbt2lXPEbHHAQEgNcECYHD4AvUBsa09Abj4kRtD2QdEP/CJJ55QWDkC44B4KQlA19BNYo8kXEexLSAAJIkF4ImqPgxEYyd5G0BbJzVq1DhRb71Y74sN4KZNm8yFfPjnpqG0gF4v2NYJ0sdEgmuADeDGjRtNE/zRo82inBAsk4HmCWL3AdFkw0FBn8qexI5+FdbQw+bVyP/DXm0DBw5U2dnZau3ateYu/PqAVBecEPQB7e0cYvUBsVE2+p0Q29nBZzSrKSkpvhtp4/4qVqwY1QcEgGZLMwEwOH1BxgE3bNhgIPr4seZRFtCOn9oA2juae1dR6NSpk2rYsKHxglEWCaovv/yycSj8ACTICEDcOTk05BW7nBAkx6J+CLKv4YTQmjZwRJDThxfC64Rgh3X0+R566KEoLxgvJQFYq1athB5A2A9iW0AASGIDCO9zwoQJJiHB5QVrbycpSa8ygOxnwDJ06FA9BIIHDg8TQyDYKDueBQSo8Djx4GkY5v7779cZ1vgunhdMHi9ZZWR34xgMw2BVK0w3AHAEFrxyZG1j6gGGYexxQFsntWvXDjtLCd0/G0BMSiJZ8ngL6QNGIsrWicyMS4g/figOFoaa0aV/SQ0lgN4+IAA0O0rVqZPYEwj5UWwLiKaRAFz2RMtQAuj1gqnZh17q1q0bcpQSu/1AANIpbACxiTUEnX+vF4zPCMGR0MaCiEbACYADgEgIjkU9vXr1ihsJsaMqSI/Ci4E+JaZFol8Xqw+IHEREOyB2xAWf0TfMzMyM6QUDQLsPaPdXcS0iwTXABnDNmjWm9uV/TYuygHYyqu2E4KECCpfYsWBAAY8UsHJiwRR6s71gcnRgiWww6NzkUdMwDIaOsPMnwmnwbvEZACI+3bdvX7NDOwGPuc6PP/54lBds6wSpWiLBNcAGMC8vzzTBuU+mh7IJRuIEBH0/DMsAQLOjlAAYnL4g44CrV682AK54KiOUAJKGscoDAMRLaTb0SUlJ6AGE/SC2BQSAJAJgAYC2TopqfkvYgGQDiDQlkpVPtxILGIno1C0Scm7CBlBh75cNIDJBaBhm1TOZUQBiqwLslwEpzYRUREQQXy6uhNTJkyerHj166IWWYAEBIDXBAmBiKLIBxGpYBODqZ1uzACzphFR43RibQ4KCV4oiIRXRDuT9EYB4Kc2GPg0aJPYEQn5UIABJV14AbR2eyJOSvE4ILVGH75FYIRJcA2wAc3NzTe15z2WFclqmrV40wbZOGjVqFFz7cgQ/FoxMFWqC1zx/kzghvwNITbAAmNjbxLaA2IKKAFz7ws1RCanogNMyFaWZkEoqwAQnVx+wsAmp+/bt06tiUR8QLyUBSFubJfYYwntUoQFEDBe5cLQ6VGkmpAIOQOIHYGETUrEuYvPmzf8PQODTuHHj8FJUiDtnA7h06VJzmnX9bomygIidYhdN7zCMPV2yJBJSkdSKa3FNEicvuDAJqcimxkaOZAFtnTRpEr1gZSGeSagOZQOILBNqgte/2Eb6gJGIAoDUBAuAib03gQDEKaDwDX9rKwBGIjr1iwB0DX4n9kjCdRQbQMzfIAsoABZEQghAIIPULpHgGmADiH1CSDb+/VZjAWM5IShfkgmpuEaXA4LrQB+wsAmpXi/Y1onsExIcPhzBBhAby5AF3PSP2wyAWBcGs9poddTSTEjFDXmTVEktRZGQmp6eHjUMAwCpCRYASwBA6gNufqmd9AEjEb3bEwGI3eVFgmuAbQEXL15sLKAAWNAHJACh9mbNmgXXvhzBb4IXLVpk1LWlf3uxgJGIsnWCAWqR4BpgW8CFCxcaC7j1n7cLgL8DSE2wABgcvkBOCACkPuC2l++IAhBREOyECQlTQip0QgBi80aR4BpgW0Csj0desBdA+7SluUJqSSekEoC4/9TU1ODalyP4fcCcnByjru3/6iBNcCSibJ1guTmR4BpgW8D58+cbC7jj39mhS0jFDLhDhw5pDZcpU0av4gAAqQkWAIPDF6gPCACpD5g/oGPoLCDuHaE3bFCIxIPk5GQFnRCAaWlpiT2BkB/1P4Ik6dToIkhZAAAAAElFTkSuQmCC</thumbnail><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" scheduled="false" id="1"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAOhUlEQVR4Xu3VwQkAAAjEMN1/abewn7jAQRC64wgQIECAAIF3gX1fNEiAAAECBAiMAHsCAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQIHLFxAWmhEwHPAAAAAElFTkSuQmCC</pentrails><costumes><list struct="atomic" id="2"></list></costumes><sounds><list struct="atomic" id="3"></list></sounds><variables></variables><blocks></blocks><scripts><script x="10" y="13"><block s="receiveInteraction"><l><option>stopped</option></l></block><custom-block s="stop all"></custom-block></script></scripts><sprites><sprite name="Sprite" idx="1" x="0.7937224401930507" y="-0.9978820179854608" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="80,80,80,1" pen="tip" id="11"><costumes><list struct="atomic" id="12"></list></costumes><sounds><list struct="atomic" id="13"></list></sounds><blocks></blocks><variables></variables><scripts><script x="10" y="10"><block s="receiveGo"><comment w="263.000001" collapsed="false">Sript that will detectan approching object(train) and cause lights to blink and buzzer to sound. </comment></block><block s="doForever"><script><block s="doIfElse"><block s="reportOr"><block s="reportLessThan"><custom-block s="Hummingbird %txt %n"><l>Distance (cm)</l><l>2</l></custom-block><l>60</l></block><block s="reportLessThan"><custom-block s="Hummingbird %txt %n"><l>Distance (cm)</l><l>1</l></custom-block><l>60</l></block></block><script><block s="doRepeat"><l>3</l><script><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 LED %n %n %"><l>2</l><l>100</l></custom-block><custom-block s="Hummingbird Tri-LED %n R %n % G %n % B %n %"><l>2</l><l>0</l><l>0</l><l>0</l></custom-block><custom-block s="Hummingbird LED %n %n %"><l>1</l><l>100</l></custom-block><block s="doWait"><l>.5</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><custom-block s="Hummingbird Tri-LED %n R %n % G %n % B %n %"><l>2</l><l>100</l><l>0</l><l>0</l></custom-block><custom-block s="Hummingbird LED %n %n %"><l>1</l><l>0</l></custom-block><custom-block s="Hummingbird LED %n %n %"><l>2</l><l>0</l></custom-block><custom-block s="Hummingbird Play Note %n for %n beats"><l>30</l><l>0.5</l></custom-block></script></block></script><script><custom-block s="Hummingbird LED %n %n %"><l>1</l><l>0</l></custom-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 Tri-LED %n R %n % G %n % B %n %"><l>2</l><l>0</l><l>0</l><l>0</l></custom-block><custom-block s="Hummingbird LED %n %n %"><l>2</l><l>0</l></custom-block></script></block></script></block></script><script x="36.000001" y="522.000001"><block s="receiveGo"><comment w="385.000001" collapsed="false">Script to activate gates as object(train) gets closer. Also adds date, time, direction of travel to a list.</comment></block><block s="doSetVar"><l>westbound table</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>time table</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>gate</l><l>0</l></block><block s="doForever"><script><block s="doIfElse"><block s="reportOr"><block s="reportLessThan"><custom-block s="Hummingbird %txt %n"><l>Distance (cm)</l><l>2</l></custom-block><l>25</l></block><block s="reportLessThan"><custom-block s="Hummingbird %txt %n"><l>Distance (cm)</l><l>1</l></custom-block><l>25</l></block></block><script><block s="doIf"><block s="reportEquals"><block var="gate"/><l>0</l></block><script><block s="doSetVar"><l>gate</l><l>1</l></block><block s="doIfElse"><block s="reportLessThan"><custom-block s="Hummingbird %txt %n"><l>Distance (cm)</l><l>1</l></custom-block><l>25</l></block><script><block s="doAddToList"><block s="reportNewList"><list><custom-block s="Date"></custom-block><custom-block s="Time"></custom-block><l>Eastbound</l></list></block><block var="time table"/></block></script><script><block s="doAddToList"><block s="reportNewList"><list><custom-block s="Date"></custom-block><custom-block s="Time"></custom-block><l>Westbound</l></list></block><block var="time table"/></block><block s="doBroadcast"><l>check for westbound</l></block></script></block></script><comment w="90" collapsed="false">Detects directin of travel by looking once at which distance sesnor has made the conditional true.</comment></block><custom-block s="Hummingbird Position Servo %n %n °"><l>1</l><l>90</l></custom-block><custom-block s="Hummingbird Position Servo %n %n °"><l>2</l><l>90</l></custom-block><block s="doWait"><l>4</l></block></script><script><custom-block s="Hummingbird Position Servo %n %n °"><l>1</l><l>0</l></custom-block><custom-block s="Hummingbird Position Servo %n %n °"><l>2</l><l>180</l></custom-block><block s="doSetVar"><l>gate</l><l>0</l></block></script></block></script></block></script><script x="424" y="167.00000000000003"><custom-block s="Hummingbird %txt %n"><l>Distance (cm)</l><l>1</l></custom-block></script><script x="394" y="211.00000000000003"><custom-block s="Hummingbird %txt %n"><l>Distance (cm)</l><l>2</l></custom-block></script><script x="56" y="1072.0000009999999"><block s="receiveMessage"><l>check for westbound</l><comment w="90" collapsed="false">When a broadcast is received this code will determine if the servo should move the switch in the turnout.</comment></block><block s="doSetVar"><l>westbound table</l><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportListContainsItem"><l/><l>Westbound</l></block></autolambda><list></list></block><block var="time table"/></block></block><block s="doIf"><block s="reportEquals"><block s="reportModulus"><block s="reportListLength"><block var="westbound table"/></block><l>2</l></block><l>0</l></block><script><custom-block s="Hummingbird Position Servo %n %n °"><l>3</l><l>105</l></custom-block><block s="doWait"><l>5</l></block><custom-block s="Hummingbird Position Servo %n %n °"><l>3</l><l>45</l></custom-block></script></block></script><script x="430" y="856.0000009999998"><block s="receiveGo"></block><custom-block s="Hummingbird Position Servo %n %n °"><l>3</l><l>45</l><comment w="90" collapsed="false">Repositions servo that controls turnout.</comment></custom-block></script></scripts></sprite><watcher var="gate" style="normal" x="10" y="10" color="243,118,29" hidden="true"/><watcher var="westbound table" style="normal" x="30" y="201.000002" color="243,118,29" extX="191" extY="150"/><watcher var="time table" style="normal" x="14" y="-0.999998000000005" color="243,118,29" extX="217" extY="164"/></sprites></stage><hidden> receiveCondition</hidden><headers></headers><code></code><blocks><block-definition s="Hummingbird %&apos;sensor&apos; %&apos;port&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%txt" readonly="true">Light<options>Distance (cm)&#xD;Dial&#xD;Light&#xD;Sound&#xD;Other (V)</options></input><input type="%n" readonly="true">1<options>1&#xD;2&#xD;3</options></input></inputs><script><block s="doDeclareVariables"><list><l>value</l></list></block><block s="doIf"><block s="reportEquals"><block var="sensor"/><l>Other (V)</l></block><script><block s="doSetVar"><l>sensor</l><l>Other</l></block></script></block><block s="doIf"><block s="reportEquals"><block var="sensor"/><l>Distance (cm)</l></block><script><block s="doSetVar"><l>sensor</l><l>Distance</l></block></script></block><block s="doSetVar"><l>value</l><block s="reportURL"><block s="reportJoinWords"><list><l>http://127.0.0.1:30061/hummingbird/in/</l><block var="sensor"/><l>/</l><block var="port"/></list></block></block></block><block s="doIfElse"><block s="reportNot"><block s="reportEquals"><block var="value"/><l>Not Connected</l></block></block><script><block s="doIf"><block s="reportEquals"><block var="sensor"/><l>Distance</l></block><script><block s="doReport"><block s="reportRound"><block s="reportProduct"><l>1.17</l><block var="value"/></block></block><comment w="90" collapsed="false">117/100 Scaling factor</comment></block></script></block><block s="doIf"><block s="reportEquals"><block var="sensor"/><l>Other</l></block><script><block s="doReport"><block s="reportQuotient"><block s="reportRound"><block s="reportProduct"><block s="reportProduct"><l>0.01294</l><block var="value"/></block><l>100</l></block></block><l>100</l></block><comment w="102" collapsed="false">3.3/255 scale factor</comment></block></script></block><block s="doIf"><block s="reportEquals"><block var="sensor"/><l>Sound</l><comment w="155" collapsed="true">If connected, adjust sound level</comment></block><script><block s="doReport"><block s="reportRound"><block s="reportProduct"><l>0.784</l><block var="value"/><comment w="140" collapsed="false">200/255 Scaling factor</comment></block></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="sensor"/><l>Light</l></block><script><block s="doReport"><block s="reportRound"><block s="reportProduct"><l>0.392</l><block var="value"/><comment w="140" collapsed="false">100/255 Scaling factor</comment></block></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="sensor"/><l>Dial</l></block><script><block s="doReport"><block s="reportRound"><block s="reportProduct"><l>0.435</l><block var="value"/><comment w="140" collapsed="false">100/230 Scaling factor</comment></block></block></block></script></block></script><script><block s="doReport"><l>Not Connected</l></block></script></block></script></block-definition><block-definition s="Hummingbird Play Note %&apos;note&apos; for %&apos;beats&apos; beats" type="command" category="sound"><header></header><code></code><translations>ko:Hummingbird _ 번 음을 _ 박자로 연주하기&#xD;de:Hummingbird Spiele Note _ für _ Schläge&#xD;pt:Hummingbird Toque Notas _ por _ Batidas&#xD;fr:Hummingbird Jouer la note _ pour _ battement(s)&#xD;nl:Hummingbird Speel Noot _ voor _ Beats&#xD;zh_CN:Hummingbird 演奏 音阶 _ 于 _ 拍&#xD;zh_TW:Hummingbird 演奏 音階 _ 於 _ 拍&#xD;ar:Hummingbird تشغيل الموسيقى  _ _&#xD;dk:Hummingbird Spil tone _ i _ slag&#xD;he:Hummingbird נגן תו   _  במשך  _   פעימות&#xD;es:Hummingbird Emitir un sonido _ por _ pulsos&#xD;ca:Hummingbird Toca nota _ durant _ temps&#xD;fi:Hummingbird Soita sävel _  _ iskun ajan&#xD;sv:Hummingbird Spela not _ _&#xD;</translations><inputs><input type="%n">60</input><input type="%n">0.5</input></inputs><script><block s="doIf"><block s="reportGreaterThan"><block var="note"/><l>135</l></block><script><block s="doSetVar"><l>note</l><l>135</l></block></script></block><block s="doIf"><block s="reportGreaterThan"><l>32</l><block var="note"/></block><script><block s="doSetVar"><l>note</l><l>32</l></block></script></block><block s="doIf"><block s="reportGreaterThan"><block var="beats"/><l>16</l></block><script><block s="doSetVar"><l>beats</l><l>16</l></block></script></block><block s="doIf"><block s="reportGreaterThan"><l>0</l><block var="beats"/></block><script><block s="doSetVar"><l>beats</l><l>0</l></block></script></block><block s="doSetVar"><l>beats</l><block s="reportRound"><block s="reportProduct"><block s="reportQuotient"><l>60000</l><block s="getTempo"></block></block><block var="beats"/></block><comment w="242" collapsed="false">BPM = tempo&#xD;60 * 1000/BPM = BPMS  beats per millisecond&#xD;beats = Duration in ms  = BPMS * number of beats</comment></block></block><block s="doRun"><block s="reifyReporter"><autolambda><block s="reportURL"><block s="reportJoinWords"><list><l>http://127.0.0.1:30061/hummingbird/out/playnote/</l><block var="note"/><l>/</l><block var="beats"/></list></block></block></autolambda><list></list></block><list></list></block><block s="doWait"><block s="reportQuotient"><block var="beats"/><l>1000</l></block><comment w="205" collapsed="false">block for number of seconds</comment></block></script></block-definition><block-definition s="micro:bit %&apos;device&apos; %&apos;dim&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">Accelerometer (m/s²)<options>Accelerometer (m/s²)&#xD;Magnetometer (µT)</options></input><input type="%txt" readonly="true">X<options>X&#xD;Y&#xD;Z</options></input></inputs><script><block s="doIf"><block s="reportEquals"><block var="device"/><l>Accelerometer (m/s²)</l></block><script><block s="doSetVar"><l>device</l><l>Accelerometer</l></block></script></block><block s="doIf"><block s="reportEquals"><block var="device"/><l>Magnetometer (µT)</l></block><script><block s="doSetVar"><l>device</l><l>Magnetometer</l></block></script></block><block s="doReport"><block s="reportURL"><block s="reportJoinWords"><list><l>http://127.0.0.1:30061/hummingbird/in/</l><block var="device"/><l>/</l><block var="dim"/></list></block></block></block></script></block-definition><block-definition s="micro:bit Button %&apos;button&apos;" type="predicate" category="sensing"><header></header><code></code><translations>ko:micro:bit 버튼 _&#xD;de:micro:bit Knopf _&#xD;pt:micro:bit Tecla _&#xD;fr:micro:bit Bouton _&#xD;nl:micro:bit Knop _&#xD;zh_CN:micro:bit 按钮 _&#xD;zh_TW:micro:bit 按鈕 _&#xD;ar:micro:bit زر _&#xD;dk:micro:bit Knap _&#xD;he:micro:bit לחצן  _&#xD;es:micro:bit Pulsador _&#xD;ca:micro:bit Botó _&#xD;fi:micro:bit Painike _&#xD;sv:micro:bit Knapp _&#xD;</translations><inputs><input type="%txt" readonly="true">A<options>A&#xD;B</options></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block s="reportURL"><block s="reportJoinWords"><list><l>http://127.0.0.1:30061/hummingbird/in/button/</l><block var="button"/></list></block></block><l>true</l></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block-definition><block-definition s="micro:bit Compass" type="reporter" category="sensing"><header></header><code></code><translations>ko:micro:bit 나침반 센서&#xD;de:micro:bit Kompass&#xD;pt:micro:bit Bússola&#xD;fr:micro:bit Compas&#xD;nl:micro:bit Kompas&#xD;zh_CN:micro:bit 指南针&#xD;zh_TW:micro:bit 指南針&#xD;ar:micro:bit بوصلة&#xD;dk:micro:bit Kompas&#xD;he:micro:bit מצפן&#xD;es:micro:bit Brujula&#xD;ca:micro:bit Brúixola&#xD;fi:micro:bit Kompassi&#xD;sv:micro:bit Kompass&#xD;</translations><inputs></inputs><script><block s="doReport"><block s="reportURL"><block s="reportJoinWords"><list><l>http://127.0.0.1:30061/hummingbird/in/</l><l>Compass</l></list></block></block></block></script></block-definition><block-definition s="micro:bit %&apos;dim&apos;" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%txt" readonly="true">Screen Up<options>Screen Up&#xD;Screen Down&#xD;Tilt Left&#xD;Tilt Right&#xD;Logo Up&#xD;Logo Down&#xD;Shake</options></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block s="reportURL"><block s="reportJoinWords"><list><l>http://127.0.0.1:30061/hummingbird/in/orientation/</l><block var="dim"/></list></block></block><l>true</l></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block-definition><block-definition s="stop all" type="command" category="control"><header></header><code></code><translations>ko:모두 멈추기&#xD;de:stoppe alles&#xD;pt:pare todos&#xD;fr:stop tout&#xD;nl:stop alle&#xD;zh_CN:停止 全部&#xD;zh_TW:停止 全部&#xD;ar:توقف الكل&#xD;dk:stop alle&#xD;he:להפסיק הכל&#xD;es:detener todo&#xD;ca:atura tot&#xD;fi:pysäytä kaikki&#xD;sv:stop allt&#xD;</translations><inputs></inputs><script><block s="doReport"><block s="reportURL"><block s="reportJoinWords"><list><l>http://127.0.0.1:30061/hummingbird/out/stopall</l></list></block></block></block></script></block-definition><block-definition s="Hummingbird Position Servo %&apos;port&apos; %&apos;position&apos; °" type="command" category="motion"><header></header><code></code><translations>ko:Hummingbird 위치 제어 서보 _ _ °&#xD;de:Hummingbird Position Servo _ _ °&#xD;pt:Hummingbird Posição do Servo _ _ °&#xD;fr:Hummingbird Position Servo _ _ °&#xD;nl:Hummingbird Positie-Servo _ _ °&#xD;zh_CN:Hummingbird 位置伺服 _ _ °&#xD;zh_TW:Hummingbird 位置伺服 _ _ °&#xD;ar:Hummingbird موقف محرك سيرفو المؤازر  _ _&#xD;dk:Hummingbird Positionsservo _ _ °&#xD;he:Hummingbird סרוו כיוון     _ _&#xD;es:Hummingbird Servo de posicion _ _ °&#xD;ca:Hummingbird Servo posicional _ _ °&#xD;fi:Hummingbird Asentoservo _ _ °&#xD;sv:Hummingbird Positionsservo _ _ °&#xD;</translations><inputs><input type="%n" readonly="true">1<options>1&#xD;2&#xD;3&#xD;4</options></input><input type="%n">90</input></inputs><script><block s="doIf"><block s="reportLessThan"><block var="position"/><l>0</l></block><script><block s="doSetVar"><l>position</l><l>0</l></block></script></block><block s="doIf"><block s="reportGreaterThan"><block var="position"/><l>180</l></block><script><block s="doSetVar"><l>position</l><l>180</l></block></script></block><block s="doSetVar"><l>position</l><block s="reportRound"><block s="reportProduct"><block var="position"/><l>1.41</l></block></block><comment w="228" collapsed="false">254/180 Scaling Factor</comment></block><block s="doRun"><block s="reportJSFunction"><list><l>portnum</l><l>position</l></list><l>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;&#xD;            //Create a new XMLHttpRequest object&#xD;            var xhr = new XMLHttpRequest();&#xD;            var actualPort = port+1;         &#xD;            var thisURL = "http://127.0.0.1:30061/hummingbird/out/servo/" + actualPort + "/" + angle;&#xD;            //console.log("thisURL: " + thisURL);&#xD;            xhr.open("GET", thisURL, true);&#xD;            xhr.onload = function (e) {&#xD;              if (xhr.readyState === 4) {&#xD;                if (xhr.status === 200) {&#xD;                  callback();&#xD;                } else {&#xD;                  console.error(xhr.statusText);&#xD;                }&#xD;              }&#xD;            };&#xD;            xhr.onerror = function (e) {&#xD;              console.error(xhr.statusText);&#xD;            };&#xD;            xhr.send(null);          &#xD;            &#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, position);&#xD;}&#xD;&#xD;window.birdbrain.servos[realPort] = position;</l></block><list><block var="port"/><block var="position"/></list></block><block s="doWait"><l>0</l></block></script><scripts><script x="187.14285714285717" y="82.28571428571428"><block s="doReport"><block s="reportURL"><block s="reportJoinWords"><list><l>http://127.0.0.1:30061/hummingbird/out/servo/</l><l></l><l>/</l><l></l></list></block></block></block></script></scripts></block-definition><block-definition s="Hummingbird Rotation Servo %&apos;port&apos; %&apos;speed&apos; %" type="command" category="motion"><header></header><code></code><translations>ko:Hummingbird 회전속도 제어 서보 _ _ %&#xD;de:Hummingbird Drehung Servo _ _ %&#xD;pt:Hummingbird Rotação do Servo _ _ %&#xD;fr:Hummingbird Rotation Servo _ _ %&#xD;nl:Hummingbird Draai-Servo _ _ %&#xD;zh_CN:Hummingbird 旋转伺服 _ _ %&#xD;zh_TW:Hummingbird 旋轉伺服 _ _ %&#xD;ar:Hummingbird فتحة دوران المحرك المؤازر  _ _&#xD;dk:Hummingbird Rotationsservo _ _ %&#xD;he:Hummingbird סרוו סיבובים    _ _ %&#xD;es:Hummingbird Servo de rotacion _ _ %&#xD;ca:Hummingbird Servo rotacional _ _ %&#xD;fi:Hummingbird Kiertoservo _ _ %&#xD;sv:Hummingbird Rotationsservo _ _ %&#xD;</translations><inputs><input type="%n" readonly="true">1<options>1&#xD;2&#xD;3&#xD;4</options></input><input type="%n">0</input></inputs><script><block s="doIf"><block s="reportLessThan"><block var="speed"/><l>-100</l></block><script><block s="doSetVar"><l>speed</l><l>-100</l></block></script></block><block s="doIf"><block s="reportGreaterThan"><block var="speed"/><l>100</l></block><script><block s="doSetVar"><l>speed</l><l>100</l></block></script></block><block s="doIfElse"><block s="reportAnd"><block s="reportGreaterThan"><block var="speed"/><l>-10</l></block><block s="reportLessThan"><block var="speed"/><l>10</l></block></block><script><block s="doSetVar"><l>speed</l><l>255</l></block></script><script><block s="doSetVar"><l>speed</l><block s="reportRound"><block s="reportSum"><block s="reportQuotient"><block s="reportProduct"><block var="speed"/><l>23</l></block><l>100</l></block><l>122</l></block></block></block></script></block><block s="doRun"><block s="reportJSFunction"><list><l>portnum</l><l>speed</l></list><l>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.rotationServos === undefined) {&#xD;    window.birdbrain = window.birdbrain || {};&#xD;    window.birdbrain.rotationServos = {&#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;        setServoSpeed: function (port, speed) {&#xD;            function callback() {&#xD;                if (window.birdbrain.rotationServos[port] === speed) {&#xD;                    delete window.birdbrain.rotationServos[port];&#xD;                }&#xD;                else {&#xD;                    window.birdbrain.rotationServos.setServoSpeed(port, window.birdbrain.rotationServos[port]);&#xD;                }&#xD;            }&#xD;&#xD;            //Create a new XMLHttpRequest object&#xD;            var xhr = new XMLHttpRequest();&#xD;            var actualPort = port+1;         &#xD;            var thisURL = "http://127.0.0.1:30061/hummingbird/out/rotation/" + actualPort + "/" + speed;&#xD;            //console.log("thisURL: " + thisURL);&#xD;            xhr.open("GET", thisURL, true);&#xD;            xhr.onload = function (e) {&#xD;              if (xhr.readyState === 4) {&#xD;                if (xhr.status === 200) {&#xD;                  callback();&#xD;                } else {&#xD;                  console.error(xhr.statusText);&#xD;                }&#xD;              }&#xD;            };&#xD;            xhr.onerror = function (e) {&#xD;              console.error(xhr.statusText);&#xD;            };&#xD;            xhr.send(null);          &#xD;            &#xD;        }&#xD;    };&#xD;}&#xD;&#xD;if (window.birdbrain.rotationServos[realPort] === undefined) {&#xD;    window.birdbrain.rotationServos.setServoSpeed(realPort, speed);&#xD;}&#xD;&#xD;window.birdbrain.rotationServos[realPort] = speed;</l></block><list><block var="port"/><block var="speed"/></list></block></script></block-definition><block-definition s="Hummingbird LED %&apos;port&apos; %&apos;intensity&apos; %" type="command" category="looks"><header></header><code></code><translations>ko:Hummingbird LED _ _ %&#xD;de:Hummingbird LED _ _ %&#xD;pt:Hummingbird LED _ _ %&#xD;fr:Hummingbird LED _ _ %&#xD;nl:Hummingbird LED _ _ %&#xD;zh_CN:Hummingbird LED _ _ %&#xD;zh_TW:Hummingbird LED _ _ %&#xD;ar:Hummingbird ضوء _ _&#xD;dk:Hummingbird LED _ _ %&#xD;he:Hummingbird לד   % _ _&#xD;es:Hummingbird LED _ _ %&#xD;ca:Hummingbird LED _ _ %&#xD;fi:Hummingbird LED _ _ %&#xD;sv:Hummingbird LED _ _ %&#xD;</translations><inputs><input type="%n" readonly="true">1<options>1&#xD;2&#xD;3</options></input><input type="%n">0</input></inputs><script><block s="doIf"><block s="reportLessThan"><block var="intensity"/><l>0</l></block><script><block s="doSetVar"><l>intensity</l><l>0</l></block></script></block><block s="doIf"><block s="reportGreaterThan"><block var="intensity"/><l>100</l></block><script><block s="doSetVar"><l>intensity</l><l>100</l></block></script></block><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;            //Create a new XMLHttpRequest object&#xD;            var xhr = new XMLHttpRequest();&#xD;            var actualPort = port+1;&#xD;            var ledURL = "http://127.0.0.1:30061/hummingbird/out/led/" + actualPort + "/" + intensity;&#xD;            xhr.open("GET", ledURL, true);&#xD;            xhr.onload = function (e) {&#xD;              if (xhr.readyState === 4) {&#xD;                if (xhr.status === 200) {&#xD;                  callback();&#xD;                } else {&#xD;                  console.error(xhr.statusText);&#xD;                }&#xD;              }&#xD;            };&#xD;            xhr.onerror = function (e) {&#xD;              console.error(xhr.statusText);&#xD;            };&#xD;            xhr.send(null);&#xD;&#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;</l></block><list><block var="port"/><block var="intensity"/></list></block><block s="doWait"><l>0</l></block></script><scripts><script x="396.42857142857144" y="46.57142857142853"><block s="doReport"><block s="reportURL"><block s="reportJoinWords"><list><l>http://127.0.0.1:30061/hummingbird/out/led/</l><block var="port"/><l>/</l><block var="intensity"/></list></block></block></block></script><script x="396.42857142857144" y="100.28571428571436"><block s="doSetVar"><l>intensity</l><block s="reportRound"><block s="reportProduct"><block var="intensity"/><l>2.55</l><comment w="90" collapsed="false">Scale factor 255/100</comment></block></block></block></script></scripts></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>ko:Hummingbird 삼색 LED _ 빨강 _ % 초록 _ % 파랑 _ %&#xD;de:Hummingbird Dreifarben-LED _ R _ % G _ % B _ %&#xD;pt:Hummingbird LED Tricolor _ R _ % G _ % B _ %&#xD;fr:Hummingbird Tri-LED _ R _ % G _ % B _ %&#xD;nl:Hummingbird Tri-LED _ R _ % G _ % B _ %&#xD;zh_CN:Hummingbird 三色LED _ 红 _ % 绿 _ % 蓝 _ %&#xD;zh_TW:Hummingbird 三色LED _ 紅 _ % 綠 _ % 藍 _ %&#xD;ar:Hummingbird ضوء الصمام الثلاثي  _ _ _ _&#xD;dk:Hummingbird Tri-LED _ R _ % G _ % B _ %&#xD;he:Hummingbird לד שלושה צבעים       % _ R   _   %  G _  %   B  _&#xD;es:Hummingbird Led tricolor _ R _ % G _ % B _ %&#xD;ca:Hummingbird Tri-LED _ vermell _ % verd _ % blau _ %&#xD;fi:Hummingbird Tri-LED _ R _ % G _ % B _ %&#xD;sv:Hummingbird Tri-LED _ R _ % G _ % B _ %&#xD;</translations><inputs><input type="%n" readonly="true">1<options>1&#xD;2</options></input><input type="%n">0</input><input type="%n">0</input><input type="%n">0</input></inputs><script><block s="doIf"><block s="reportLessThan"><block var="redLED"/><l>0</l></block><script><block s="doSetVar"><l>redLED</l><l>0</l></block></script></block><block s="doIf"><block s="reportGreaterThan"><block var="redLED"/><l>100</l></block><script><block s="doSetVar"><l>redLED</l><l>100</l></block></script></block><block s="doIf"><block s="reportLessThan"><block var="greenLED"/><l>0</l></block><script><block s="doSetVar"><l>greenLED</l><l>0</l></block></script></block><block s="doIf"><block s="reportGreaterThan"><block var="greenLED"/><l>100</l></block><script><block s="doSetVar"><l>greenLED</l><l>100</l></block></script></block><block s="doIf"><block s="reportLessThan"><block var="blueLED"/><l>0</l></block><script><block s="doSetVar"><l>blueLED</l><l>0</l></block></script></block><block s="doIf"><block s="reportGreaterThan"><block var="blueLED"/><l>100</l></block><script><block s="doSetVar"><l>blueLED</l><l>100</l></block></script></block><block s="doRun"><block s="reportJSFunction"><list><l>portnum</l><l>rednum</l><l>greennum</l><l>bluenum</l></list><l>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;            //Create a new XMLHttpRequest object&#xD;            var xhr = new XMLHttpRequest();&#xD;            var actualPort = port+1;&#xD;            /*  Note RGB:&#xD;                red: intensities[0],&#xD;                green: intensities[1],&#xD;                blue: intensities[2]  &#xD;            */&#xD;            &#xD;            var thisURL = "http://127.0.0.1:30061/hummingbird/out/triled/" + actualPort + "/" + intensities[0] + "/" + intensities[1] + "/" + intensities[2];&#xD;            //console.log("thisURL: " + thisURL);&#xD;            xhr.open("GET", thisURL, true);&#xD;            xhr.onload = function (e) {&#xD;              if (xhr.readyState === 4) {&#xD;                if (xhr.status === 200) {&#xD;                  callback();&#xD;                } else {&#xD;                  console.error(xhr.statusText);&#xD;                }&#xD;              }&#xD;            };&#xD;            xhr.onerror = function (e) {&#xD;              console.error(xhr.statusText);&#xD;            };&#xD;            xhr.send(null);&#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><scripts><script x="251.42857142857144" y="108.85714285714293"><block s="doSetVar"><l>redLED</l><block s="reportRound"><block s="reportProduct"><block var="redLED"/><l>2.55</l><comment w="90" collapsed="false">Scale factor 255/100</comment></block></block></block><block s="doSetVar"><l>blueLED</l><block s="reportRound"><block s="reportProduct"><block var="blueLED"/><l>2.55</l><comment w="90" collapsed="false">Scale factor 255/100</comment></block></block></block><block s="doSetVar"><l>greenLED</l><block s="reportRound"><block s="reportProduct"><block var="greenLED"/><l>2.55</l><comment w="90" collapsed="false">Scale factor 255/100</comment></block></block></block><block s="doReport"><block s="reportURL"><block s="reportJoinWords"><list><l>http://127.0.0.1:30061/hummingbird/out/triled/</l><l></l><l>/</l><l></l><l>/</l><l></l><l>/</l><l></l></list></block></block></block></script></scripts></block-definition><block-definition s="micro:bit Print %&apos;string&apos;" type="command" category="looks"><header></header><code></code><translations>ko:micro:bit 출력 _&#xD;de:micro:bit Drucke _&#xD;pt:micro:bit Imprimir _&#xD;fr:micro:bit Imprimer _&#xD;nl:micro:bit Schrijf _&#xD;zh_CN:micro:bit 打印 _&#xD;zh_TW:micro:bit 打印 _&#xD;ar:micro:bit طباعة _&#xD;dk:micro:bit Vis _&#xD;he:micro:bit הדפס  _&#xD;es:micro:bit Imprimir _&#xD;ca:micro:bit Escriu _&#xD;fi:micro:bit Näytä teksti _&#xD;sv:micro:bit Visa text _&#xD;</translations><inputs><input type="%txt">Hello</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>string</l></list><l>////////////////////////////////////////////////////////////////////////////////&#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;// Encode any special characters in the URL&#xD;string = encodeURIComponent(string);&#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.printObj === undefined) {&#xD;    window.birdbrain = window.birdbrain || {};&#xD;    window.birdbrain.printObj = {&#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;        printString: function(string) {&#xD;            function callback() {&#xD;                if (window.birdbrain.printObj.stringToPrint === string) {&#xD;                    delete window.birdbrain.printObj.stringToPrint;&#xD;                }&#xD;                else {&#xD;                    window.birdbrain.printObj.printString(window.birdbrain.printObj.stringToPrint);&#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;            //Create a new XMLHttpRequest object&#xD;            var xhr = new XMLHttpRequest();&#xD;            var printURL = "http://127.0.0.1:30061/hummingbird/out/print/" + string;&#xD;            xhr.open("GET", printURL, true);&#xD;            xhr.onload = function (e) {&#xD;              if (xhr.readyState === 4) {&#xD;                if (xhr.status === 200) {&#xD;                  callback();&#xD;                } else {&#xD;                  console.error(xhr.statusText);&#xD;                }&#xD;              }&#xD;            };&#xD;            xhr.onerror = function (e) {&#xD;              console.error(xhr.statusText);&#xD;            };&#xD;            xhr.send(null);&#xD;&#xD;        }&#xD;    }&#xD;}&#xD;&#xD;//TODO Turn &apos;/&apos; chars into % &#xD;&#xD;if (window.birdbrain.printObj.stringToPrint === undefined) {&#xD;  window.birdbrain.printObj.printString(string);&#xD;}&#xD;&#xD;window.birdbrain.printObj.stringToPrint = string;</l></block><list><block var="string"/></list></block><block s="doWait"><l>0</l></block></script><scripts><script x="310.9999990000001" y="47"><block s="doReport"><block s="reportURL"><block s="reportJoinWords"><list><l>http://127.0.0.1:30061/hummingbird/out/print/</l><block var="string"/></list></block></block></block></script><script x="335" y="1024.8333343333334"><block var="intensity"/></script></scripts></block-definition><block-definition s="micro:bit Display $nl %&apos;r1c1&apos; %&apos;r1c2&apos; %&apos;r1c3&apos; %&apos;r1c4&apos; %&apos;r1c5&apos; $nl %&apos;r2c1&apos; %&apos;r2c2&apos; %&apos;r2c3&apos; %&apos;r2c4&apos; %&apos;r2c5&apos; $nl %&apos;r3c1&apos; %&apos;r3c2&apos; %&apos;r3c3&apos; %&apos;r3c4&apos; %&apos;r3c5&apos; $nl %&apos;r4c1&apos; %&apos;r4c2&apos; %&apos;r4c3&apos; %&apos;r4c4&apos; %&apos;r4c5&apos; $nl %&apos;r5c1&apos; %&apos;r5c2&apos; %&apos;r5c3&apos; %&apos;r5c4&apos; %&apos;r5c5&apos;" type="command" category="looks"><header></header><code></code><translations>ko:micro:bit 보이기 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&#xD;de:micro:bit LED Anzeige _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&#xD;pt:micro:bit Visor _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&#xD;fr:micro:bit Display _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&#xD;nl:micro:bit Scherm _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&#xD;zh_CN:micro:bit 显示 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&#xD;zh_TW:micro:bit 顯示 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&#xD;ar:micro:bit عرض _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&#xD;dk:micro:bit Display _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&#xD;he:micro:bit מסך _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&#xD;es:micro:bit Monitor _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&#xD;ca:micro:bit Pantalla _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&#xD;fi:micro:bit Näytä _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&#xD;sv:micro:bit Skärm _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&#xD;</translations><inputs><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>r1c1, r1c2, r1c3, r1c4, r1c5, r2c1, r2c2, r2c3, r2c4, r2c5, r3c1, r3c2, r3c3, r3c4, r3c5, r4c1, r4c2, r4c3, r4c4, r4c5, r5c1, r5c2, r5c3, r5c4, r5c5 </l></list><l>////////////////////////////////////////////////////////////////////////////////&#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;// Create url representation from inputs&#xD;var symbolString =  r1c1 + "\/"+ r1c2 + "\/"+ r1c3 + "\/"+ r1c4 + "\/"+ r1c5 + "\/" +&#xD;                    r2c1 + "\/"+ r2c2 + "\/"+ r2c3 + "\/"+ r2c4 + "\/"+ r2c5 + "\/" +&#xD;                    r3c1 + "\/"+ r3c2 + "\/"+ r3c3 + "\/"+ r3c4 + "\/"+ r3c5 + "\/" +&#xD;                    r4c1 + "\/"+ r4c2 + "\/"+ r4c3 + "\/"+ r4c4 + "\/"+ r4c5 + "\/" +&#xD;                    r5c1 + "\/"+ r5c2 + "\/"+ r5c3 + "\/"+ r5c4 + "\/"+ r5c5 ;&#xD;&#xD;//r1c1, r1c2, r1c3, r1c4, r1c5, r2c1, r2c2, r2c3, r2c4, r2c5, r3c1, r3c2, r3c3, r3c4, r3c5, r4c1, r4c2, r4c3, r4c4, r4c5, r5c1, r5c2, r5c3, r5c4, r5c5 &#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.symbolObj === undefined) {&#xD;    window.birdbrain = window.birdbrain || {};&#xD;    window.birdbrain.symbolObj = {&#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;        printSymbol: function(symbol) {&#xD;            function callback() {&#xD;                if (window.birdbrain.symbolObj.symbolToPrint === symbol) {  // Check if arrays are equal&#xD;                    delete window.birdbrain.symbolObj.symbolToPrint;&#xD;                }&#xD;                else {&#xD;                    window.birdbrain.symbolObj.printSymbol(window.birdbrain.symbolObj.symbolToPrint);&#xD;                }&#xD;            }&#xD;&#xD;            //Create a new XMLHttpRequest object&#xD;            var xhr = new XMLHttpRequest();&#xD;            var symbolURL = "http://127.0.0.1:30061/hummingbird/out/symbol/A/" + symbol;&#xD;            xhr.open("GET", symbolURL, true);&#xD;            xhr.onload = function (e) {&#xD;              if (xhr.readyState === 4) {&#xD;                if (xhr.status === 200) {&#xD;                  callback();&#xD;                } else {&#xD;                  console.error(xhr.statusText);&#xD;                }&#xD;              }&#xD;            };&#xD;            xhr.onerror = function (e) {&#xD;              console.error(xhr.statusText);&#xD;            };&#xD;            xhr.send(null);&#xD;&#xD;        }&#xD;    }&#xD;}&#xD;&#xD;if (window.birdbrain.symbolObj.symbolToPrint === undefined) {&#xD;  window.birdbrain.symbolObj.printSymbol(symbolString);&#xD;}&#xD;&#xD;window.birdbrain.symbolObj.symbolToPrint = symbolString;&#xD;&#xD;&#xD;</l></block><list><block var="r1c1"/><block var="r1c2"/><block var="r1c3"/><block var="r1c4"/><block var="r1c5"/><block var="r2c1"/><block var="r2c2"/><block var="r2c3"/><block var="r2c4"/><block var="r2c5"/><block var="r3c1"/><block var="r3c2"/><block var="r3c3"/><block var="r3c4"/><block var="r3c5"/><block var="r4c1"/><block var="r4c2"/><block var="r4c3"/><block var="r4c4"/><block var="r4c5"/><block var="r5c1"/><block var="r5c2"/><block var="r5c3"/><block var="r5c4"/><block var="r5c5"/></list></block><block s="doWait"><l></l></block></script><scripts><script x="731" y="16"><block s="doReport"><block s="reportURL"><block s="reportJoinWords"><list><l>http://127.0.0.1:30061/hummingbird/out/symbol/A/</l><block var="11"/><l>/</l><block var="12"/><l>/</l><block var="r1c3"/><l>/</l><block var="r1c4"/><l>/</l><block var="r1c5"/><l>/</l><block var="r2c1"/><l>/</l><block var="r2c2"/><l>/</l><block var="r2c3"/><l>/</l><block var="r2c4"/><l>/</l><block var="25"/><l>/</l><block var="31"/><l>/</l><block var="r3c2"/><l>/</l><block var="33"/><l>/</l><block var="34"/><l>/</l><block var="35"/><l>/</l><block var="41"/><l>/</l><block var="42"/><l>/</l><block var="43"/><l>/</l><block var="44"/><l>/</l><block var="45"/><l>/</l><block var="51"/><l>/</l><block var="52"/><l>/</l><block var="53"/><l>/</l><block var="54"/><l>/</l><block var="55"/></list></block></block></block></script></scripts></block-definition><block-definition s="Time" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportJoinWords"><list><block s="reportDate"><l><option>hour</option></l></block><l>:</l><block s="reportDate"><l><option>minute</option></l></block></list></block></block></script></block-definition><block-definition s="Date" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportJoinWords"><list><block s="reportDate"><l><option>month</option></l></block><l> </l><block s="reportDate"><l><option>date</option></l></block><l>, </l><block s="reportDate"><l><option>year</option></l></block></list></block></block></script></block-definition></blocks><variables><variable name="gate"><l>0</l></variable><variable name="time table"><list id="1007"><item><list struct="atomic" id="1008">&quot;7 3, 2020&quot;,21:23,Eastbound</list></item><item><list struct="atomic" id="1009">&quot;7 3, 2020&quot;,21:24,Westbound</list></item><item><list struct="atomic" id="1010">&quot;7 3, 2020&quot;,21:24,Westbound</list></item><item><list struct="atomic" id="1011">&quot;7 3, 2020&quot;,21:24,Westbound</list></item><item><list struct="atomic" id="1012">&quot;7 3, 2020&quot;,21:25,Westbound</list></item><item><list struct="atomic" id="1013">&quot;7 3, 2020&quot;,21:25,Westbound</list></item><item><list struct="atomic" id="1014">&quot;7 3, 2020&quot;,21:25,Westbound</list></item><item><list struct="atomic" id="1015">&quot;7 3, 2020&quot;,21:25,Westbound</list></item><item><list struct="atomic" id="1016">&quot;7 3, 2020&quot;,21:26,Westbound</list></item><item><list struct="atomic" id="1017">&quot;7 3, 2020&quot;,21:26,Westbound</list></item><item><list struct="atomic" id="1018">&quot;7 3, 2020&quot;,21:26,Westbound</list></item><item><list struct="atomic" id="1019">&quot;7 3, 2020&quot;,21:27,Westbound</list></item><item><list struct="atomic" id="1020">&quot;7 3, 2020&quot;,21:27,Westbound</list></item><item><list struct="atomic" id="1021">&quot;7 3, 2020&quot;,21:27,Westbound</list></item><item><list struct="atomic" id="1022">&quot;7 3, 2020&quot;,21:27,Westbound</list></item><item><list struct="atomic" id="1023">&quot;7 3, 2020&quot;,21:28,Westbound</list></item><item><list struct="atomic" id="1024">&quot;7 3, 2020&quot;,21:28,Eastbound</list></item><item><list struct="atomic" id="1025">&quot;7 3, 2020&quot;,21:28,Eastbound</list></item><item><list struct="atomic" id="1026">&quot;7 3, 2020&quot;,21:28,Eastbound</list></item><item><list struct="atomic" id="1027">&quot;7 3, 2020&quot;,21:29,Eastbound</list></item><item><list struct="atomic" id="1028">&quot;7 3, 2020&quot;,21:29,Eastbound</list></item></list></variable><variable name="westbound table"><list id="1029"><item><ref id="1009"></ref></item><item><ref id="1010"></ref></item><item><ref id="1011"></ref></item><item><ref id="1012"></ref></item><item><ref id="1013"></ref></item><item><ref id="1014"></ref></item><item><ref id="1015"></ref></item><item><ref id="1016"></ref></item><item><ref id="1017"></ref></item><item><ref id="1018"></ref></item><item><ref id="1019"></ref></item><item><ref id="1020"></ref></item><item><ref id="1021"></ref></item><item><ref id="1022"></ref></item><item><ref id="1023"></ref></item></list></variable></variables></project><media name="excite railroad crossing extended" app="Snap! 6, https://snap.berkeley.edu" version="1"></media></snapdata>