Skip to content

Instantly share code, notes, and snippets.

@stonehippo
Last active March 31, 2021 16:13
Show Gist options
  • Save stonehippo/0fedfb8101950e4e94789da1daf2e628 to your computer and use it in GitHub Desktop.
Save stonehippo/0fedfb8101950e4e94789da1daf2e628 to your computer and use it in GitHub Desktop.
Some code for an integrated hardware component with a ring encoder, 17 NeoPixels, and a button.
[
{
"id": "6f29b44f.4eada4",
"type": "tab",
"label": "Encoder Test",
"disabled": false,
"info": ""
},
{
"id": "4e8621a2.bb984",
"type": "i2c out",
"z": "6f29b44f.4eada4",
"name": "Set Brightness via i2c",
"busno": "1",
"address": "44",
"command": "7",
"payload": "payload",
"payloadType": "msg",
"count": "1",
"x": 1000,
"y": 280,
"wires": [
[]
]
},
{
"id": "d5b898c1.68806",
"type": "random",
"z": "6f29b44f.4eada4",
"name": "",
"low": "0",
"high": "100",
"inte": "true",
"property": "payload",
"x": 800,
"y": 280,
"wires": [
[
"4e8621a2.bb984"
]
]
},
{
"id": "90287e43.7f6e3",
"type": "inject",
"z": "6f29b44f.4eada4",
"name": "Start Encoder Light Test",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "START",
"payloadType": "str",
"x": 210,
"y": 280,
"wires": [
[
"94e96eb5.567c18"
]
]
},
{
"id": "94e96eb5.567c18",
"type": "controltimer",
"z": "6f29b44f.4eada4",
"name": "Get a random value every 5 seconds 5 times",
"timerType": "loop",
"timerDurationUnit": "second",
"timerDurationType": "num",
"timerDuration": 5,
"timerLoopTimeoutUnit": "second",
"timerLoopTimeoutType": "num",
"timerLoopTimeout": 0,
"loopTimeoutMessageType": "str",
"loopTimeoutMessage": "LOOP_TIMEOUT",
"timerMaxLoopIterationsType": "num",
"timerMaxLoopIterations": 5,
"loopMaxIterationsMessageType": "str",
"loopMaxIterationsMessage": "MAX_LOOP_ITERATIONS",
"isConsecutiveStartActionTimerResetAllowed": false,
"isRunningTimerProgressVisible": false,
"outputReceivedMessageOnTimerTrigger": true,
"outputReceivedMessageOnTimerHalt": true,
"startTimerOnReceivalOfUnknownMessage": false,
"resetTimerOnReceivalOfUnknownMessage": false,
"isDebugModeEnabled": false,
"timerTriggeredMessageType": "str",
"timerTriggeredMessage": "TIMER_TRIGGERED",
"timerHaltedMessageType": "str",
"timerHaltedMessage": "TIMER_HALTED",
"isStartActionEnabled": true,
"isStopActionEnabled": true,
"isResetActionEnabled": true,
"isPauseActionEnabled": true,
"isContinueActionEnabled": true,
"actionPropertyNameType": "str",
"actionPropertyName": "payload",
"startActionNameType": "str",
"startActionName": "START",
"stopActionNameType": "str",
"stopActionName": "STOP",
"resetActionNameType": "str",
"resetActionName": "RESET",
"pauseActionNameType": "str",
"pauseActionName": "PAUSE",
"continueActionNameType": "str",
"continueActionName": "CONTINUE",
"x": 530,
"y": 280,
"wires": [
[
"d5b898c1.68806"
],
[]
]
},
{
"id": "f790562e.856728",
"type": "i2c out",
"z": "6f29b44f.4eada4",
"name": "Set Pixel 0",
"busno": "1",
"address": "44",
"command": "8",
"payload": "payload",
"payloadType": "msg",
"count": "4",
"x": 1110,
"y": 660,
"wires": [
[]
]
},
{
"id": "de09c8c2.c337a8",
"type": "i2c out",
"z": "6f29b44f.4eada4",
"name": "Set Pixel 1",
"busno": "1",
"address": "44",
"command": "12",
"payload": "payload",
"payloadType": "msg",
"count": "4",
"x": 1110,
"y": 720,
"wires": [
[]
]
},
{
"id": "e3eb2ee5.37f838",
"type": "i2c out",
"z": "6f29b44f.4eada4",
"name": "Set Pixel 2",
"busno": "1",
"address": "44",
"command": "16",
"payload": "payload",
"payloadType": "msg",
"count": "4",
"x": 1110,
"y": 780,
"wires": [
[]
]
},
{
"id": "f3163479.82f198",
"type": "i2c out",
"z": "6f29b44f.4eada4",
"name": "Set Pixel 3",
"busno": "1",
"address": "44",
"command": "20",
"payload": "payload",
"payloadType": "msg",
"count": "4",
"x": 1110,
"y": 840,
"wires": [
[]
]
},
{
"id": "a7fef8ce.3389c",
"type": "inject",
"z": "6f29b44f.4eada4",
"name": "Set pixels to red",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "[255,0,0,0]",
"payloadType": "bin",
"x": 400,
"y": 660,
"wires": [
[
"bad67ab5.19632"
]
]
},
{
"id": "1cde15a2.8c2d62",
"type": "inject",
"z": "6f29b44f.4eada4",
"name": "Set pixels to green",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "[0,255,0,0]",
"payloadType": "bin",
"x": 390,
"y": 720,
"wires": [
[
"bad67ab5.19632"
]
]
},
{
"id": "8caf0622.697e08",
"type": "inject",
"z": "6f29b44f.4eada4",
"name": "Set pixels to blue",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "[0,0,255,0]",
"payloadType": "bin",
"x": 400,
"y": 780,
"wires": [
[
"bad67ab5.19632"
]
]
},
{
"id": "d1c5fa7a.1d374",
"type": "inject",
"z": "6f29b44f.4eada4",
"name": "Set pixels to white",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "[0,0,0,255]",
"payloadType": "bin",
"x": 390,
"y": 840,
"wires": [
[
"bad67ab5.19632"
]
]
},
{
"id": "bad67ab5.19632",
"type": "msg-router",
"z": "6f29b44f.4eada4",
"routerType": "broadcast",
"topicDependent": false,
"counterReset": false,
"msgKeyField": "payload",
"undefinedHash": false,
"outputsInfo": [
{
"active": true,
"clone": false,
"delay": "0",
"weight": "0"
}
],
"name": "",
"delaying": "unrelated",
"msgControl": false,
"outputs": 1,
"x": 670,
"y": 740,
"wires": [
[
"f790562e.856728",
"de09c8c2.c337a8",
"e3eb2ee5.37f838",
"f3163479.82f198",
"3b201bdf.eafdcc",
"9e4d6b8d.d793a",
"4212dffd.8130b",
"d8aaa616.33236",
"930d8b86.da7798",
"d21ec405.cbb38",
"fefe0dbe.4f97d",
"2e92bc37.55231c",
"50959d02.f8d4ec",
"28d793b7.032034",
"59ee3cab.fd304c",
"d93948bb.a0c9a8",
"cb5c66b0.777548"
]
]
},
{
"id": "3b201bdf.eafdcc",
"type": "i2c out",
"z": "6f29b44f.4eada4",
"name": "Set Pixel 4",
"busno": "1",
"address": "44",
"command": "24",
"payload": "payload",
"payloadType": "msg",
"count": "4",
"x": 1110,
"y": 900,
"wires": [
[]
]
},
{
"id": "25e76b4a.aae6fc",
"type": "inject",
"z": "6f29b44f.4eada4",
"name": "Full off",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "[0]",
"payloadType": "bin",
"x": 430,
"y": 380,
"wires": [
[
"4e8621a2.bb984"
]
]
},
{
"id": "e4fd631f.1ac1b8",
"type": "inject",
"z": "6f29b44f.4eada4",
"name": "~20% brightness",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "[50]",
"payloadType": "bin",
"x": 400,
"y": 420,
"wires": [
[
"4e8621a2.bb984"
]
]
},
{
"id": "2499fabc.b07976",
"type": "inject",
"z": "6f29b44f.4eada4",
"name": "Full on",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "[255]",
"payloadType": "bin",
"x": 430,
"y": 580,
"wires": [
[
"4e8621a2.bb984"
]
]
},
{
"id": "83adab89.8d55d",
"type": "inject",
"z": "6f29b44f.4eada4",
"name": "~40% brightness",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "[100]",
"payloadType": "bin",
"x": 400,
"y": 460,
"wires": [
[
"4e8621a2.bb984"
]
]
},
{
"id": "5bf91d98.f80b2c",
"type": "inject",
"z": "6f29b44f.4eada4",
"name": "~60% brightness",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "[150]",
"payloadType": "bin",
"x": 400,
"y": 500,
"wires": [
[
"4e8621a2.bb984"
]
]
},
{
"id": "915cec02.d996",
"type": "inject",
"z": "6f29b44f.4eada4",
"name": "~80% brightness",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "[200]",
"payloadType": "bin",
"x": 400,
"y": 540,
"wires": [
[
"4e8621a2.bb984"
]
]
},
{
"id": "992e4e01.995328",
"type": "mqtt in",
"z": "6f29b44f.4eada4",
"name": "",
"topic": "rig/splittest",
"qos": "2",
"datatype": "json",
"broker": "96c96b19.fe7b08",
"x": 320,
"y": 940,
"wires": [
[
"6481dab2.1c1a04"
]
]
},
{
"id": "6481dab2.1c1a04",
"type": "split",
"z": "6f29b44f.4eada4",
"name": "",
"splt": "\\n",
"spltType": "str",
"arraySplt": 1,
"arraySpltType": "len",
"stream": false,
"addname": "",
"x": 490,
"y": 940,
"wires": [
[
"265122d1.c970fe"
]
]
},
{
"id": "265122d1.c970fe",
"type": "msg-router",
"z": "6f29b44f.4eada4",
"routerType": "roundrobin",
"topicDependent": false,
"counterReset": false,
"msgKeyField": "payload",
"undefinedHash": false,
"outputsInfo": [
{
"active": true,
"clone": false,
"delay": "0",
"weight": "0"
},
{
"active": true,
"clone": false,
"delay": "0",
"weight": "0"
},
{
"active": true,
"clone": false,
"delay": "0",
"weight": "0"
},
{
"active": true,
"clone": false,
"delay": "0",
"weight": "0"
},
{
"active": true,
"clone": false,
"delay": "0",
"weight": "0"
},
{
"active": true,
"clone": false,
"delay": "0",
"weight": "0"
},
{
"active": true,
"clone": false,
"delay": "0",
"weight": "0"
},
{
"active": true,
"clone": false,
"delay": "0",
"weight": "0"
},
{
"active": true,
"clone": false,
"delay": "0",
"weight": "0"
},
{
"active": true,
"clone": false,
"delay": "0",
"weight": "0"
},
{
"active": true,
"clone": false,
"delay": "0",
"weight": "0"
},
{
"active": true,
"clone": false,
"delay": "0",
"weight": "0"
},
{
"active": true,
"clone": false,
"delay": "0",
"weight": "0"
},
{
"active": true,
"clone": false,
"delay": "0",
"weight": "0"
},
{
"active": true,
"clone": false,
"delay": "0",
"weight": "0"
},
{
"active": true,
"clone": false,
"delay": "0",
"weight": "0"
},
{
"active": true,
"clone": false,
"delay": "0",
"weight": "0"
}
],
"name": "Distribute colors to pixels",
"delaying": "unrelated",
"msgControl": false,
"outputs": 17,
"x": 690,
"y": 940,
"wires": [
[
"f790562e.856728"
],
[
"de09c8c2.c337a8"
],
[
"e3eb2ee5.37f838"
],
[
"f3163479.82f198"
],
[
"3b201bdf.eafdcc"
],
[
"9e4d6b8d.d793a"
],
[
"4212dffd.8130b"
],
[
"d8aaa616.33236"
],
[
"930d8b86.da7798"
],
[
"d21ec405.cbb38"
],
[
"fefe0dbe.4f97d"
],
[
"2e92bc37.55231c"
],
[
"50959d02.f8d4ec"
],
[
"28d793b7.032034"
],
[
"59ee3cab.fd304c"
],
[
"d93948bb.a0c9a8"
],
[
"cb5c66b0.777548"
]
]
},
{
"id": "9e4d6b8d.d793a",
"type": "i2c out",
"z": "6f29b44f.4eada4",
"name": "Set Pixel 5",
"busno": "1",
"address": "44",
"command": "28",
"payload": "payload",
"payloadType": "msg",
"count": "4",
"x": 1110,
"y": 960,
"wires": [
[]
]
},
{
"id": "4212dffd.8130b",
"type": "i2c out",
"z": "6f29b44f.4eada4",
"name": "Set Pixel 6",
"busno": "1",
"address": "44",
"command": "32",
"payload": "payload",
"payloadType": "msg",
"count": "4",
"x": 1110,
"y": 1020,
"wires": [
[]
]
},
{
"id": "d8aaa616.33236",
"type": "i2c out",
"z": "6f29b44f.4eada4",
"name": "Set Pixel 7",
"busno": "1",
"address": "44",
"command": "36",
"payload": "payload",
"payloadType": "msg",
"count": "4",
"x": 1110,
"y": 1080,
"wires": [
[]
]
},
{
"id": "930d8b86.da7798",
"type": "i2c out",
"z": "6f29b44f.4eada4",
"name": "Set Pixel 8",
"busno": "1",
"address": "44",
"command": "40",
"payload": "payload",
"payloadType": "msg",
"count": "4",
"x": 1110,
"y": 1140,
"wires": [
[]
]
},
{
"id": "d21ec405.cbb38",
"type": "i2c out",
"z": "6f29b44f.4eada4",
"name": "Set Pixel 9",
"busno": "1",
"address": "44",
"command": "44",
"payload": "payload",
"payloadType": "msg",
"count": "4",
"x": 1110,
"y": 1200,
"wires": [
[]
]
},
{
"id": "fefe0dbe.4f97d",
"type": "i2c out",
"z": "6f29b44f.4eada4",
"name": "Set Pixel 10",
"busno": "1",
"address": "44",
"command": "48",
"payload": "payload",
"payloadType": "msg",
"count": "4",
"x": 1110,
"y": 1260,
"wires": [
[]
]
},
{
"id": "2e92bc37.55231c",
"type": "i2c out",
"z": "6f29b44f.4eada4",
"name": "Set Pixel 11",
"busno": "1",
"address": "44",
"command": "52",
"payload": "payload",
"payloadType": "msg",
"count": "4",
"x": 1110,
"y": 1320,
"wires": [
[]
]
},
{
"id": "50959d02.f8d4ec",
"type": "i2c out",
"z": "6f29b44f.4eada4",
"name": "Set Pixel 12",
"busno": "1",
"address": "44",
"command": "56",
"payload": "payload",
"payloadType": "msg",
"count": "4",
"x": 1110,
"y": 1380,
"wires": [
[]
]
},
{
"id": "28d793b7.032034",
"type": "i2c out",
"z": "6f29b44f.4eada4",
"name": "Set Pixel 13",
"busno": "1",
"address": "44",
"command": "60",
"payload": "payload",
"payloadType": "msg",
"count": "4",
"x": 1110,
"y": 1440,
"wires": [
[]
]
},
{
"id": "59ee3cab.fd304c",
"type": "i2c out",
"z": "6f29b44f.4eada4",
"name": "Set Pixel 14",
"busno": "1",
"address": "44",
"command": "64",
"payload": "payload",
"payloadType": "msg",
"count": "4",
"x": 1110,
"y": 1500,
"wires": [
[]
]
},
{
"id": "d93948bb.a0c9a8",
"type": "i2c out",
"z": "6f29b44f.4eada4",
"name": "Set Pixel 15",
"busno": "1",
"address": "44",
"command": "68",
"payload": "payload",
"payloadType": "msg",
"count": "4",
"x": 1110,
"y": 1560,
"wires": [
[]
]
},
{
"id": "cb5c66b0.777548",
"type": "i2c out",
"z": "6f29b44f.4eada4",
"name": "Set Pixel 16",
"busno": "1",
"address": "44",
"command": "72",
"payload": "payload",
"payloadType": "msg",
"count": "4",
"x": 1110,
"y": 1620,
"wires": [
[]
]
},
{
"id": "4f27e5b1.767834",
"type": "i2c in",
"z": "6f29b44f.4eada4",
"name": "Read assemby status",
"busno": "1",
"address": "44",
"command": "0",
"count": "1",
"x": 720,
"y": 1720,
"wires": [
[
"39a7993d.ddea0e"
]
]
},
{
"id": "6530d5fa.e112c4",
"type": "inject",
"z": "6f29b44f.4eada4",
"name": "get status",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "true",
"payloadType": "bool",
"x": 460,
"y": 1720,
"wires": [
[
"4f27e5b1.767834"
]
]
},
{
"id": "39a7993d.ddea0e",
"type": "debug",
"z": "6f29b44f.4eada4",
"name": "Show status",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 980,
"y": 1720,
"wires": []
},
{
"id": "23fceeed.a5997a",
"type": "i2c in",
"z": "6f29b44f.4eada4",
"name": "Read encoder CW",
"busno": "1",
"address": "44",
"command": "3",
"count": "2",
"x": 710,
"y": 1820,
"wires": [
[
"39a7993d.ddea0e"
]
]
},
{
"id": "e46d571f.a29e3",
"type": "inject",
"z": "6f29b44f.4eada4",
"name": "get encoder CW",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "true",
"payloadType": "bool",
"x": 480,
"y": 1820,
"wires": [
[
"23fceeed.a5997a"
]
]
},
{
"id": "e6c39237.06df28",
"type": "inject",
"z": "6f29b44f.4eada4",
"name": "get encoder CCW",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "true",
"payloadType": "bool",
"x": 490,
"y": 1900,
"wires": [
[
"d0dc0e65.927ca8"
]
]
},
{
"id": "d0dc0e65.927ca8",
"type": "i2c in",
"z": "6f29b44f.4eada4",
"name": "Read encoder CCW",
"busno": "1",
"address": "44",
"command": "5",
"count": "2",
"x": 720,
"y": 1900,
"wires": [
[
"39a7993d.ddea0e"
]
]
},
{
"id": "e5f7b155.2652e",
"type": "inject",
"z": "6f29b44f.4eada4",
"name": "get encoder diff",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "true",
"payloadType": "bool",
"x": 460,
"y": 1980,
"wires": [
[
"a1190c9d.9944c8"
]
]
},
{
"id": "a1190c9d.9944c8",
"type": "i2c in",
"z": "6f29b44f.4eada4",
"name": "Read encoder CCW",
"busno": "1",
"address": "44",
"command": "1",
"count": "2",
"x": 700,
"y": 1980,
"wires": [
[
"39a7993d.ddea0e"
]
]
},
{
"id": "96c96b19.fe7b08",
"type": "mqtt-broker",
"name": "local broker",
"broker": "localhost",
"port": "1883",
"clientid": "",
"usetls": false,
"compatmode": false,
"keepalive": "60",
"cleansession": true,
"birthTopic": "",
"birthQos": "0",
"birthPayload": "",
"closeTopic": "",
"closeQos": "0",
"closePayload": "",
"willTopic": "",
"willQos": "0",
"willPayload": ""
}
]
#include <MyWire.h>
#include <RotaryEncoder.h>
#include <Adafruit_NeoPixel.h>
#define PIXEL_PIN 6
#define PIXEL_COUNT 17
#define PIN_A A1
#define PIN_B A2
#define PIN_BUTTON 5
#define I2C_ADDRESS 0x2c
Adafruit_NeoPixel strip(PIXEL_COUNT, PIXEL_PIN, NEO_GRBW + NEO_KHZ800);
RotaryEncoder encoder(PIN_A, PIN_B, RotaryEncoder::LatchMode::FOUR3);
volatile byte register_number = 0x00;
volatile bool should_update_pixels = true;
struct memory_map {
uint8_t status;
int16_t pos;
byte brightness;
uint8_t pix0[4];
uint8_t pix1[4];
uint8_t pix2[4];
uint8_t pix3[4];
uint8_t pix4[4];
uint8_t pix5[4];
uint8_t pix6[4];
uint8_t pix7[4];
uint8_t pix8[4];
uint8_t pix9[4];
uint8_t pix10[4];
uint8_t pix11[4];
uint8_t pix12[4];
uint8_t pix13[4];
uint8_t pix14[4];
uint8_t pix15[4];
uint8_t pix16[4];
};
volatile memory_map register_map {
.status = 0,
.pos = 0,
.brightness = 20,
.pix0 = {0,0,0,255},
.pix1 = {0,0,0,255},
.pix2 = {0,0,0,255},
.pix3 = {0,0,0,255},
.pix4 = {0,0,0,255},
.pix5 = {0,0,0,255},
.pix6 = {0,0,0,255},
.pix7 = {0,0,0,255},
.pix8 = {0,0,0,255},
.pix9 = {0,0,0,255},
.pix10 = {0,0,0,255},
.pix11 = {0,0,0,255},
.pix12 = {0,0,0,255},
.pix13 = {0,0,0,255},
.pix14 = {0,0,0,255},
.pix15 = {0,0,0,255},
.pix16 = {0,0,0,255},
};
void setup() {
Serial.begin(115200);
pinMode(PIN_A, INPUT_PULLUP);
pinMode(PIN_B, INPUT_PULLUP);
pinMode(PIN_BUTTON, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(PIN_A), encoder_isr, CHANGE);
attachInterrupt(digitalPinToInterrupt(PIN_B), encoder_isr, CHANGE);
attachInterrupt(digitalPinToInterrupt(PIN_BUTTON), button_isr, CHANGE);
strip.begin();
Wire.begin(I2C_ADDRESS);
Wire.onRequest(on_request);
Wire.onReceive(on_receive);
}
void loop() {
static int pos = 0;
encoder.tick();
int newPos = encoder.getPosition();
if (pos != newPos) {
pos = newPos;
register_map.pos = pos;
Serial.println(pos);
}
if (should_update_pixels) {
update_pixels();
}
}
void on_request() {
switch(register_number) {
case 0x00:
Wire.write(register_map.status);
break;
case 0x01:
Wire.write(highByte(register_map.pos));
Wire.write(lowByte(register_map.pos));
break;
case 0x02:
Wire.write(register_map.brightness);
break;
case 0x03:
Wire.write((byte*)register_map.pix0, 4);
break;
case 0x04:
Wire.write((byte*)register_map.pix1, 4);
break;
case 0x05:
Wire.write((byte*)register_map.pix2, 4);
break;
case 0x06:
Wire.write((byte*)register_map.pix3, 4);
break;
case 0x07:
Wire.write((byte*)register_map.pix4, 4);
break;
case 0x08:
Wire.write((byte*)register_map.pix5, 4);
break;
case 0x09:
Wire.write((byte*)register_map.pix6, 4);
break;
case 0x0A:
Wire.write((byte*)register_map.pix7, 4);
break;
case 0x0B:
Wire.write((byte*)register_map.pix8, 4);
break;
case 0x0C:
Wire.write((byte*)register_map.pix9, 4);
break;
case 0x0D:
Wire.write((byte*)register_map.pix10, 4);
break;
case 0x0E:
Wire.write((byte*)register_map.pix11, 4);
break;
case 0x0F:
Wire.write((byte*)register_map.pix12, 4);
break;
case 0x10:
Wire.write((byte*)register_map.pix13, 4);
break;
case 0x11:
Wire.write((byte*)register_map.pix14, 4);
break;
case 0x12:
Wire.write((byte*)register_map.pix15, 4);
break;
case 0x13:
Wire.write((byte*)register_map.pix16, 4);
break;
default:
Wire.write(0xff);
break;
}
}
void on_receive(int bytes) {
// read the first byte as the register number
register_number = Wire.read();
byte temp;
if ((bytes - 1) > 0) {
switch(register_number) {
case 0x00:
temp = Wire.read();
register_map.status = temp;
break;
/* case 0x01:
Wire.write(highByte(register_map.pos));
Wire.write(lowByte(register_map.pos));
break; */
case 0x02:
register_map.brightness = Wire.read();
should_update_pixels = true;
break;
case 0x03:
for (int i = 0; i < 4 ; i++) {
register_map.pix0[i] = Wire.read();
}
should_update_pixels = true;
break;
case 0x04:
for (int i = 0; i < 4 ; i++) {
register_map.pix1[i] = Wire.read();
}
should_update_pixels = true;
break;
case 0x05:
for (int i = 0; i < 4 ; i++) {
register_map.pix2[i] = Wire.read();
}
should_update_pixels = true;
break;
case 0x06:
for (int i = 0; i < 4 ; i++) {
register_map.pix3[i] = Wire.read();
}
should_update_pixels = true;
break;
case 0x07:
for (int i = 0; i < 4 ; i++) {
register_map.pix4[i] = Wire.read();
}
should_update_pixels = true;
break;
case 0x08:
for (int i = 0; i < 4 ; i++) {
register_map.pix5[i] = Wire.read();
}
should_update_pixels = true;
break;
case 0x09:
for (int i = 0; i < 4 ; i++) {
register_map.pix6[i] = Wire.read();
}
should_update_pixels = true;
break;
case 0x0A:
for (int i = 0; i < 4 ; i++) {
register_map.pix7[i] = Wire.read();
}
should_update_pixels = true;
break;
case 0x0B:
for (int i = 0; i < 4 ; i++) {
register_map.pix8[i] = Wire.read();
}
should_update_pixels = true;
break;
case 0x0C:
for (int i = 0; i < 4 ; i++) {
register_map.pix9[i] = Wire.read();
}
should_update_pixels = true;
break;
case 0x0D:
for (int i = 0; i < 4 ; i++) {
register_map.pix10[i] = Wire.read();
}
should_update_pixels = true;
break;
case 0x0E:
for (int i = 0; i < 4 ; i++) {
register_map.pix11[i] = Wire.read();
}
should_update_pixels = true;
break;
case 0x0F:
for (int i = 0; i < 4 ; i++) {
register_map.pix12[i] = Wire.read();
}
should_update_pixels = true;
break;
case 0x10:
for (int i = 0; i < 4 ; i++) {
register_map.pix13[i] = Wire.read();
}
should_update_pixels = true;
break;
case 0x11:
for (int i = 0; i < 4 ; i++) {
register_map.pix14[i] = Wire.read();
}
should_update_pixels = true;
break;
case 0x12:
for (int i = 0; i < 4 ; i++) {
register_map.pix15[i] = Wire.read();
}
should_update_pixels = true;
break;
case 0x13:
for (int i = 0; i < 4 ; i++) {
register_map.pix16[i] = Wire.read();
}
should_update_pixels = true;
break;
default:
break;
}
}
}
void encoder_isr() {
encoder.tick();
}
void button_isr() {
// do nothing
}
void update_pixels() {
strip.setPixelColor(0, strip.Color(register_map.pix0[0], register_map.pix0[1], register_map.pix0[2], register_map.pix0[3]));
strip.setPixelColor(1, strip.Color(register_map.pix1[0], register_map.pix1[1], register_map.pix1[2], register_map.pix1[3]));
strip.setPixelColor(2, strip.Color(register_map.pix2[0], register_map.pix2[1], register_map.pix2[2], register_map.pix2[3]));
strip.setPixelColor(3, strip.Color(register_map.pix3[0], register_map.pix3[1], register_map.pix3[2], register_map.pix3[3]));
strip.setPixelColor(4, strip.Color(register_map.pix4[0], register_map.pix4[1], register_map.pix4[2], register_map.pix4[3]));
strip.setPixelColor(5, strip.Color(register_map.pix5[0], register_map.pix5[1], register_map.pix5[2], register_map.pix5[3]));
strip.setPixelColor(6, strip.Color(register_map.pix6[0], register_map.pix6[1], register_map.pix6[2], register_map.pix6[3]));
strip.setPixelColor(7, strip.Color(register_map.pix7[0], register_map.pix7[1], register_map.pix7[2], register_map.pix7[3]));
strip.setPixelColor(8, strip.Color(register_map.pix8[0], register_map.pix8[1], register_map.pix8[2], register_map.pix8[3]));
strip.setPixelColor(9, strip.Color(register_map.pix9[0], register_map.pix9[1], register_map.pix9[2], register_map.pix9[3]));
strip.setPixelColor(10, strip.Color(register_map.pix10[0], register_map.pix10[1], register_map.pix10[2], register_map.pix10[3]));
strip.setPixelColor(11, strip.Color(register_map.pix11[0], register_map.pix11[1], register_map.pix11[2], register_map.pix11[3]));
strip.setPixelColor(12, strip.Color(register_map.pix12[0], register_map.pix12[1], register_map.pix12[2], register_map.pix12[3]));
strip.setPixelColor(13, strip.Color(register_map.pix13[0], register_map.pix13[1], register_map.pix13[2], register_map.pix13[3]));
strip.setPixelColor(14, strip.Color(register_map.pix14[0], register_map.pix14[1], register_map.pix14[2], register_map.pix14[3]));
strip.setPixelColor(15, strip.Color(register_map.pix15[0], register_map.pix15[1], register_map.pix15[2], register_map.pix15[3]));
strip.setPixelColor(16, strip.Color(register_map.pix16[0], register_map.pix16[1], register_map.pix16[2], register_map.pix16[3]));
strip.setBrightness(register_map.brightness);
strip.show();
should_update_pixels = false;
}
:1020000000800020C9300000B1300000B130000075
:1020100000000000000000000000000000000000C0
:10202000000000000000000000000000B1300000CF
:102030000000000000000000B13000001D31000071
:10204000B1300000B1300000B1300000B13000000C
:1020500075300000B1300000B1300000B530000034
:10206000B1300000B1300000B1300000A52A0000FE
:10207000B1300000B1300000B52E0000B1300000DA
:10208000B1300000B1300000B1300000B1300000CC
:1020900000000000B1300000B1300000B13000009D
:1020A000B1300000B1300000B1300000B1300000AC
:1020B0000000000010B5064C2378002B07D1054B1B
:1020C000002B02D0044800E000BF0123237010BDA4
:1020D0000001002000000000C45F0000044B10B5A8
:1020E000002B03D00349044800E000BF10BDC046E8
:1020F0000000000004010020C45F0000042370B54C
:10210000114C124D2278124E53403100280023709A
:1021100003F089F921780A22C9B2280003F0FBF9FB
:10212000052001F033FA01280DD102232278310075
:1021300013432800237003F076F921780A22C9B2EC
:10214000280003F0E8F970BD04000020E804002036
:10215000F85A000010B5102001F018FA0400112000
:1021600001F014FA0200104B64001878800010434C
:102170002043C0B218701A784B2A0AD10B4B5A6808
:1021800001325A609A6801329A600122084B1A7033
:1021900010BD1B78872BFBD1044B5A68013A5A605B
:1021A000DA680132DA60F0E71D0100200400002047
:1021B0001C01002010B5034B0348197CC9B200F084
:1021C00053FE10BD040000202001002070B5AB4C70
:1021D000AB4D617CA37CE07C227D090412060A439E
:1021E0001B0202431A432800002100F005FE617D16
:1021F000A37DE07D227E090412060A431B020243EE
:102200001A432800012100F0F7FD617EA37EE07EE5
:10221000227F090412060A431B0202431A432800C4
:10222000022100F0E9FD621C617FA37FE07FD27F85
:10223000090412060A431B0202431A432800032121
:1022400000F0DAFDA31CD97F221DE31CDB7FD07FC9
:10225000621DD27F090412060A431B0202431A437D
:102260002800042100F0C8FD2200A31DD97F0832F8
:10227000E31DDB7FD07F220028321278090412068A
:102280000A431B0202431A432800052100F0B4FD53
:10229000230029331978220023002B322A331B789C
:1022A000107822002C321278090412060A431B020D
:1022B00002431A432800062100F09EFD23002D331F
:1022C0001978220023002F322E331B781078220039
:1022D00030321278090412060A431B0202431A43E1
:1022E0002800072100F088FD2300313319782200EF
:1022F0002300333232331B781078220034321278C4
:10230000090412060A431B0202431A43280008214B
:1023100000F072FD23003533197822002300373294
:1023200036331B78107822003832127809041206EE
:102330000A431B0202431A432800092100F05CFDF6
:10234000230039331978220023003B323A331B78BB
:10235000107822003C321278090412060A431B024C
:1023600002431A4328000A2100F046FD23003D33B2
:102370001978220023003F323E331B781078220068
:1023800040321278090412060A431B0202431A4320
:1023900028000B2100F030FD230041331978220082
:1023A0002300433242331B781078220044321278E3
:1023B000090412060A431B0202431A4328000C2197
:1023C00000F01AFD2300453319782200230047321C
:1023D00046331B781078220048321278090412061E
:1023E0000A431B0202431A4328000D2100F004FD9A
:1023F000230049331978220023004B324A331B78DB
:10240000107822004C321278090412060A431B028B
:1024100002431A4328000E2100F0EEFC23004D3346
:102420001A78210023004F314E331B7808782100A1
:1024300050310978120409060A431B0202431A4369
:1024400028000F2100F0D8FC230051331A78210016
:1024500023005331543452331B7808782178120406
:1024600009060A431B0202431A432800102100F008
:10247000C3FC280000F08CFB70BDC04604000020A7
:102480002001002070B5FFF795FEFFF79FFE0D4D70
:102490002B78002B15D00C4C0C49200002F0C3FF08
:1024A0000B4E0A22B168200003F01BF809492000F6
:1024B00002F0B9FFF1680A22200003F016F80023A9
:1024C0002B7070BD1C010020E80400200A5B000096
:1024D00004000020075B000010B5064CD223062242
:1024E0001121200000F072FC034A0449200003F08F
:1024F00045F810BD2001002000000020CD2A00007A
:1025000010B5104904220B78DBB2072B0CD8012040
:1025100002009A402A2413000222234204D1573495
:102520009218234200D002000B7807490748096837
:10253000C91800F0B7F80022054B5A609A60DA60BB
:1025400010BDC0461E0100205C00002038010020A4
:1025500004000020F8B5174F0400380000F006FA18
:10256000154EC0B2307033780425DBB2072B0CD87F
:102570000122110099400B002A21023D0B4204D197
:10258000573102350B4200D01500012C10DD00241C
:10259000380000F0EBF93378E318572B04DC074BD5
:1025A00032781B689B1818550134E3B29D42EFD86E
:1025B000F8BDC046380100201E0100205C0000204C
:1025C00010B5074C002220002C2100F0FBF8200061
:1025D000044900F081F80449200000F079F810BDAA
:1025E00038010020012500005525000070B50221AA
:1025F000102000F053FF0221112000F04FFF0221B4
:10260000052000F04BFFE121134C4902200001F0AE
:102610009BFC1249200002F017FF114800F065FAF8
:10262000FFF7D4FDFFF7C6FD0E4D02222900102052
:1026300000F088FC29000222112000F083FC022215
:102640000949052000F07EFCFFF7BAFF074920008A
:1026500002F0FAFE70BDC046E80400200F5B0000E7
:102660002001002055210000FD200000215B00001A
:102670000020704710B503689C6B0123A04710BD74
:102680008C2300229B00C154103BC3185A609A60EF
:10269000DA6001238375704710B5036801211B6B55
:1026A000984710BDF8B505000E0017000024BC4285
:1026B00008D02B68315D1B6828009847002801D09E
:1026C0000134F4E72000F8BDFC30406A70477047E1
:1026D0008E239B00C15070478D239B00C1507047D3
:1026E0000300FC335A6A002A03D01B6AC018007E1C
:1026F000704701204042FBE770B5060018250C49E1
:10270000006901F031FA306901F099F82B000821D5
:10271000307D084C4343E318595600F04FFF082121
:10272000707D45436419615600F048FF70BDC04696
:10273000A0860100845B000070B504000D000069F4
:1027400001F092F82900206901F00EFA206901F0E9
:1027500076F870BD10B5006901F086F810BD000074
:10276000F7B50193FA238026002504009B008360BF
:10277000134B760008330F00456029000092036078
:102780003200183003F0D1F823002000FC3325304C
:10279000DD6132001D6229005D62FF3003F0C5F883
:1027A00088239B00E3185D609D60DD606B461B78AD
:1027B000276123756B461B79A57520006375FEBDE7
:1027C000345B000070B506001825006901F0A6F919
:1027D000306901F034F82B000821307D064C43436A
:1027E000E318595600F0EAFE0821707D454364194C
:1027F000615600F0E3FE70BD845B000010B500225E
:10280000FFF7E0FF10BD0300802210B5FC33DC6849
:102810005200944208D05A6881545A680132D2B2A8
:102820005A60DA680132DA6010BDF7B50400171E8D
:10283000019302D100252800FEBD03000022FC33D5
:10284000DA611A625A620069013201F03FF8061E2D
:10285000F0D0230020691833009301F0C4F8010080
:102860000098FFF7D0FF01252069BD4214D001F088
:1028700098F800280FD0206901F008F8022120699B
:1028800001F00EF8206901F0AEF801000098FFF7A2
:10289000BAFF0135E8E70600206900F0EFFF019B71
:1028A000002B06D0002E06D00321206900F0F8FF8F
:1028B000C1E7002EBFD1013DBDE7002310B5827DE9
:1028C0009A420CD0882292008218D468802252004A
:1028D000944204D02530FF30FFF795FF0123180004
:1028E00010BD0300FC33DA68002A09D09A68805CC6
:1028F0009A680132D2B29A60DA68013ADA607047B7
:1029000001204042FBE700228C2370B59B008275BA
:1029100004000E00C15C006900F0D8FF002806D159
:102920000321206900F0BCFF0225280070BD882328
:102930009B00E318DD68002D11D020002530FF300A
:102940002569FFF7CEFFC1B2280001F001F8002889
:10295000EDD10321206900F0A3FF0325E5E7002E58
:10296000E3D00321206900F09BFFDEE710B51830AB
:10297000FFF7B7FF10BDF8B50400006901F008F8D3
:10298000002800D187E0206901F023F8002800D159
:1029900081E0206901F022F800282FD0206900F0A2
:1029A00075FF0321206900F07BFF88239B00E51859
:1029B00000236B60AB60EB600133A3758D232600B1
:1029C0009B00E3582536FF36002B00D09847FF27A1
:1029D000206900F0F4FF00285DD1206900F0EAFFD3
:1029E0000028F5D0EB683900002B03D03000FFF74A
:1029F00078FFC1B2206900F0BDFFE9E7206900F06F
:102A0000EDFF002847D1206900F040FF8025032119
:102A1000206900F045FF6D00206900F0D0FF00281C
:102A200015D1206900F0D0FF002810D1206900F0F6
:102A3000C1FF0028F0D02300FC335B6A2069AB4261
:102A400015D100F01BFF0321206900F029FF206948
:102A500000F0B5FF002819D08E239B00E558002D0B
:102A60001AD10023FC34E3612362636213E000F0B7
:102A7000BAFF010020001830FFF7C5FE206900F002
:102A800005FF0321206900F00BFFC5E7206900F076
:102A90009BFF0028E0D1F8BD236820001B69984700
:102AA000A847DEE710B50248FFF765FF10BDC04636
:102AB0003801002010B50C230B2202490248FFF711
:102AC0004FFE10BD400400203801002010B5040066
:102AD000C06802F017FF0623E05E002803DBC0B2E7
:102AE000002100F0DBFC200010BD10B5040006231F
:102AF000C05E002807DBC0B2012100F0CFFCA07946
:102B0000002100F017FD0123637010BD70B50500B2
:102B1000C0680E0002F0F6FE2B7CEC7CE41A631E0B
:102B20009C4103347443A4B2AC80200002F0E0FE68
:102B3000E860002805D02200002102F0F6FE6E8039
:102B400070BDA8806880FBE70322F8B58B110D11DA
:102B50008E101640134015400A40467482740026B9
:102B6000FF228A427641C268C47C077CC374057424
:102B70000670002A0AD0E21B5B1B51424A415942AF
:102B80004B419A4202D04188FFF7C0FFF8BD0000D8
:102B9000F8B5C3680400002B00D1F3E0656900F0CC
:102BA000CBFA854202D900F0C7FA606100F0C4FA9E
:102BB0006369C01A2C23FF339842EFD972B60622FC
:102BC000A35E1822012053436F4FA688FA1852685B
:102BD000DB5D9040E268DB019619511C15786B4A69
:102BE0009F186B4A9B182278002A00D058E0803248
:102BF00094463860C046C046C046C046C046C0463F
:102C0000C046C046C046C046C0462A4200D192E0F7
:102C1000C046C046C046C046C046C046C046C04684
:102C2000C046C046C046C046C046C046C046C04674
:102C3000C046C046C046C046C046C046C046C04664
:102C4000C046C046C0461860C046C046C046C046E2
:102C5000C046C046C046C046C046C046C046C04644
:102C6000C046C046C046C046C046C046C046C04634
:102C7000C046C046C046C046C046C046C046C04624
:102C8000C046C046C046C046521000D170E0D2B225
:102C9000C046C046C046C046C046C046C046A8E77B
:102CA000802294463860C046C046C046C046C046F2
:102CB000C046C046C0462A4221D0C046C046C04693
:102CC000C046C046C046C046C046C046C046C046D4
:102CD000C046C046C046C046C046C046C046C046C4
:102CE000C0461860521020D0D2B2C046C046C0467E
:102CF000C046C046C046C046C046C046D2E718607F
:102D0000C046C046C046C046C046C046C046C04693
:102D1000C046C046C046C046C046C046C046C04683
:102D2000C046C046C046C046DCE7B14226D20D7858
:102D300062460131B6E71860C046C046C046C0468C
:102D4000C046C046C046C046C046C046C046C04653
:102D5000C046C046C046C046C046C046C046C04643
:102D6000C046C046C046C046C046C046C0466BE7E7
:102D7000B14203D20D78624601313AE762B600F003
:102D8000DBF96061F8BDC046845B00001844004177
:102D90001444004170B5437805000C00002B07D0A7
:102DA0000623C05E002803DBC0B2002100F076FBE2
:102DB0006B78EC80002B08D0E4B20121200000F0F9
:102DC0006DFB0021200000F0B5FB70BD70B5150053
:102DD000002204000E0042700272C26042611900BB
:102DE000FFF7B2FE31002000FFF790FE290020001F
:102DF000FFF7D0FF200070BD4388F7B58B421AD98A
:102E0000037A150C140A002B16D1E4B2EDB201942A
:102E1000D6B2B446047CC67CC768B44218D103233A
:102E200059437F186A46037C1279FD54437CFA5457
:102E30006246837CFA54F7BDFF26344035405C433C
:102E400016405D435E43240A2D0A0194360AE0E7EA
:102E500089007F18120E002B02D1D3B2BB55E1E7D7
:102E600053431B0AFAE7000070B54C1C037AE4B226
:102E700005000A00A3421AD0C6680020013BD9B25F
:102E8000814205D0FF2A0ED1094802F013FC80B21E
:102E90000023A9889AB2914208D9F25C42431212E7
:102EA000F2540133F5E720020138EEE72C7270BDD1
:102EB000FFFF000010B5024802F05AF910BDC046ED
:102EC0007403002013B51249124800F025FC124982
:102ED000124800F021FC1249124800F01DFC124972
:102EE000124800F019FC1249124800F015FC124C6F
:102EF0001249200000F010FC0123019302330093DB
:102F00000D220B3321000E4802F0BEF813BDC0465F
:102F10000008004238040020000C00423C0400205D
:102F2000001000424004002000140042440400202D
:102F300000180042480400204C040020001C0042FD
:102F400074030020F7B501921822162442433F4B28
:102F500007009B181C570091631C6ED0102C6CD07E
:102F60003B4B3C4E1D68002D27D1290044223A4896
:102F700002F0DBFC29004422384802F0D6FC102283
:102F8000374B38491D60CA67C021C120364B490004
:102F90005A5080001958FF35A94319501A60334B15
:102FA000334A5A8002233278134333707378DB0933
:102FB000012BFBD00122264B1A600125A540736925
:102FC00000212B437361380000F0F8FA009B002BBE
:102FD00031D00027224B20499C461B68BA00BB42D7
:102FE0001DD16046013303608D501C4B00999950F0
:102FF000072C19DD0123083CA4000721A140154A34
:103000009B009B189A698A439A61019A042A12D8F4
:103010001000996902F0BAFA0B12141618008858B9
:10302000A842E1D00137D9E7A4000023E5E7052253
:10303000A2400A439A61ADB2F560F7BD0422F7E7FA
:103040000322F5E70222F3E70122F1E7845B0000A7
:10305000D8040020001800409404002050040020F0
:10306000DC04002004E100E000E100E0000C00408E
:1030700005400000F8B50024094B1B68A34200D8A6
:10308000F8BD084E084FA5003369EA591A4204D02A
:10309000064BEB589847EB5933610134ECE7C046D7
:1030A000DC0400200018004094040020500400209C
:1030B000FEE70000034B10B51B68002B00D09847BB
:1030C00010BDC046E004002070B50F490F4CA1426E
:1030D00004D100F089F802F029FAFEE70C4D002334
:1030E0008D42F6D0CA18E818A24205D3094B824295
:1030F000EFD00949002204E0006804331060F1E7D2
:1031000004C38B42FCD3E4E7000000200001002050
:10311000C85F000000010020200B002010B500F067
:1031200060F8002801D100F051F810BD014B186083
:103130007047C046E0040020F7B5134801228446DA
:103140001249134C8E68636805689B0E1340019208
:1031500088686268019F920E3A4067463F689342D2
:103160000ED1BD420CD186420AD35B19FA254868BC
:10317000AD00861B07486B437043000DC018FEBDB1
:103180003D0013000600E3E7E404002010E000E047
:1031900000ED00E05555000070B5041E10D0FFF79B
:1031A000CBFF050000F01CF8FFF7C6FF054B401BE6
:1031B0009842F7D9FA23013C9B00ED18002CF3D17B
:1031C00070BDC046E70300007047000010B5034A19
:1031D00013680133136000F063FA10BDE4040020AB
:1031E00070470020704700001E2270B546484749CE
:1031F000436893431C3A1343436008238C69234379
:103200008B61434C434B9C829C8A14439C82DC68B8
:103210001442FCD00124404A14701578254203D092
:1032200055786DB2002DF8DB01249460547864B2B7
:10323000002CFBDB394C5460547864B2002CFBDB6F
:103240008224E4015480547864B2002CFBDB022415
:103250009C840E34DD682542FCD0314CDC621024A5
:10326000DD682542FCD09D8C2E4C2C439C84102480
:10327000DD682542FCD002249D8C80262C439C8452
:103280004024DD683542FCD0DD682542F9D01024A9
:10329000DD682542FCD000249460547864B2002C90
:1032A000FBDB214C5460547864B2002CFBDB1C6ABD
:1032B0001E4D2C4080251C621C6AAC431C620323FB
:1032C00093601B4B536053785BB2002BFBDB0023F6
:1032D000FF240B72174A4B728B72CB72164B1A601B
:1032E000164B174A1B6811689A065B01C90E2340EA
:1032F000520F12020B431343124A13858023426874
:103300001343436070BDC0460040004100040040CC
:103310000C06000000080040000C00400105010000
:10332000B905FF7D040A000000070300FFFCFFFF52
:1033300003060100006CDC026000002024608000B5
:103340002060800000400042FA21314B10B518681F
:10335000890002F025F92F4B0138984256D82E49A2
:103360002E4A4860C020136A00061B021B0A034352
:103370001362002407238C600B608021136A090606
:103380001B021B0A0B431362FC22254B196A0A43DA
:103390001A62FC22196A92010A431A62A022196A6F
:1033A000D2020A431A62E0B20021013400F076F83A
:1033B0000F2CF8D11B4B1C005A7852B2002AFBDBB1
:1033C000194A5A80194B1A00597EC9090129FBD0A4
:1033D000E421C90099803F21D970537EDB09012B7C
:1033E000FBD0C02300205B011361907000F024F833
:1033F00063785BB2002BFBDB0D4B0E4A6380D37905
:10340000DB09012BFBD04123537010BDFEE7C04602
:1034100060000020FFFFFF0010E000E000ED00E092
:1034200000040040000C00401E400000004000422C
:103430002140000000480042164A00B51300517EAA
:10344000C9090129FBD00138042816D81969124A84
:103450000A400F211A615A788A4302F097F803084C
:10346000060B0300110001220A435A7000BD11002F
:103470000322F9E711000222F6E7F02311691B0588
:103480000B430F21136153788B43190002230B4325
:103490005370EBE700400042FFFFFFF0182330B508
:1034A0001D00040045430820204A551928560130C4
:1034B00014D0032912D808006343D156D31802F060
:1034C00065F802280E1B5868CB010221184A9B1888
:1034D0001A1840321170012282405A6030BD58687B
:1034E000CB010621124A9B181A1840321170012292
:1034F00082405A609A61F1E75868CB0106210C4A74
:103500009B181A1840321170012282405A605A6189
:10351000E4E75868CB010221054A9B181A1840328B
:103520001170012282409A60D8E7C046845B000097
:10353000004400411823F0B508245843114A1318D9
:103540001C5701341BD0012635005F688356BD40EF
:103550000D4ADB019A18906805420BD10C00601EE1
:103560008441D2194032107834400336A400B0436D
:1035700020431070044A9B18002901D15D61F0BD01
:103580009D61FCE7845B000000440041182310B5F6
:103590000824434307490020CA181457013408D0AF
:1035A0005B560549DB015B18186A5368D840012354
:1035B000184010BD845B00000044004118224243C3
:1035C000F8B52C4E0300B218127A52B21400013230
:1035D0000ED0481C00240C280AD801F0D7FF072081
:1035E000202020202020200B0B0B0B000124644204
:1035F0002000F8BD092905D10021D8B2FFF74EFF00
:103600000024F5E70A2902D1D8B20839F6E70024E8
:103610000B29EDD1D8B20A39FFF740FFE8E71820AF
:103620004343F2185568F3562C00134ADB016E0829
:1036300017389B18C9B204409E19002C0DD00F24D6
:1036400030363278090122401143C9B25B1931701A
:1036500040331A7810431870D2E732000F27303207
:1036600016785B19BE433143117040331A7810430A
:103670001870BDE7845B00000044004110B50400F1
:10368000FFF7A2FD014B1C6010BDC0466400002086
:103690000122024B52421A607047C046640000206B
:1036A000164A10B51368591C26D0013B1360002B35
:1036B00022D172B6124B134A0433934213D9124AE1
:1036C00001211000147D0C42FCD02021148BFF310D
:1036D0009B085B0021431183D3610C4B13800123B2
:1036E000027D1A42FCD0BFF34F8F094B094ADA60C2
:1036F000BFF34F8FC046FDE710BDC04664000020F9
:1037000000200000030200000040004102A5FFFF6E
:1037100000ED00E00400FA05016070479446F0B542
:103720009E1E721E96416246056892072F683606F5
:103730003A4332432A60072505AC24780068A40187
:103740002940214342680024022B00D05C0311432E
:1037500021434160F0BD30B5C0250368AD031C684E
:1037600012052A402243C0240904A4022140114327
:10377000196003685A6814435C6030BD0123026815
:1037800011680B43136003681A68D207FCD4DA6926
:10379000D207F9D470470223026811680B43136003
:1037A0000268D3699B07FCD470470268137E9B07AD
:1037B000FCD57047002203685A8370470368187E5F
:1037C0004007C00F70470368187EC0097047802308
:1037D00002685B42117E0B43137670470368588B77
:1037E0008007C00F704702230268518B0B4353833D
:1037F00070470368187EC007C00F70470368188DB4
:10380000C0B2704703681A7ED207FCD589B2012086
:1038100019857047012203689A7570470122036871
:103820001A7570470123026811680B43136003681F
:103830001A68D207FCD4DA69D207F9D47047022398
:10384000026811680B4313600368DA699207FCD4BD
:1038500030215A8B8A43110010220A435A8302688E
:10386000D3695B07FCD470470221026813688B435D
:1038700013600268D3699B07FCD4704780230268F9
:10388000DB02116851680B435360704703680349BA
:103890001A685A680A405A607047C046FFFFFBFF2B
:1038A000032230B5036811401C68074D5A680904AB
:1038B0002A40E4061143640F5960052C03D10268C5
:1038C000D3695B07FCD430BDFFFFFCFF70B5056812
:1038D00004006B8B9B069B0F022B0DD06B8B002083
:1038E0009B069B0F032B32D06B8B9B0704D56B8BF6
:1038F0009B069B0F012B2AD16B6A49001143DB0AFF
:10390000C9B2DB020B436B622368002A13D11A7E13
:10391000D207FCD55B8B9B069B0F022B04D049087A
:1039200000222000FFF7D2FF2368588B4007C30F07
:10393000012058400BE0187E8007C00FF4D11A7E9A
:10394000D207F8D5C022596892020A435A6070BD66
:103950000368283319700368187EC007C00F03D1AD
:103960005A8BD207F8D57047588B4007C30F0120F8
:103970005840F8E7036828331970036800201A7E5E
:10398000520704D5588B01234007C00F5840704799
:1039900003681868C006400F043843425841C0B25B
:1039A00070470368588B8006800F023843425841A5
:1039B000C0B270470368187E4007C00F70470368A5
:1039C000187EC007C00F70470368588BC006C00F31
:1039D00070470368187E8007C00F70470368588BD4
:1039E0000007C00F704703681A68D206520F052AF5
:1039F00005D11A7E920702D41A7ED207F9D5283350
:103A00001878C0B2704700000368214A30B593426D
:103A10002FD0204A93422FD01F4A93422FD01F4AC3
:103A200093422FD01E4A93422FD01E4A93421FD159
:103A30000E2319220121032599401B48C02401604F
:103A400099082B40AB40FC359D4089000918A40023
:103A50000859A843C0259D402B0003430B518023E8
:103A6000DB011A43114B5A805A7852B2002AFBDB11
:103A700030BD09231422DDE70A231522DAE70B23E0
:103A80001622D7E70C231722D4E70D231822D1E7FB
:103A900000080042000C00420010004200140042E6
:103AA00000180042001C004200E100E0000C004051
:103AB000F8B504000F0016001D00FFF7A5FF200059
:103AC000FFF75CFE1C21BB000B4071072268090C4C
:103AD0000B431360842322689375012F1AD11021A0
:103AE000012E00D008390C4B69431868C00001F062
:103AF00057FD0722216802408B895203DB04DB0C4F
:103B000013438B81226803049089DB0C400B400334
:103B100018439081F8BDC0466000002070B50400D5
:103B20000D001600FFF770FF2000FFF77BFE1C2240
:103B300021686D000B6893431A0010231343FF2282
:103B40000B60236815405D62002E04D001232268BB
:103B5000516A0B4353620723226893752268D36925
:103B60005B07FCD470BD0000F8B504000F00FFF740
:103B70004BFF2000FFF756FE1422236879001A60DD
:103B80000C4B25681E68300001F00AFD0A4904004C
:103B9000300001F005FD7D23FA215843C90001F0F2
:103BA000FFFCFF23241AE868053C1C4098430443AB
:103BB000EC60F8BD6000002040420F00002070471C
:103BC00070B50F26CB1D013902003240D5B22C0052
:103BD00000093034092A00DD07341C70013B8B4298
:103BE000F2D170BD10B50C000B4B1868FFF7E8FF61
:103BF00021000A4B08311868FFF7E2FF2100084B4B
:103C000010311868FFF7DCFF2100064B18311868E7
:103C1000FFF7D6FF202010BD0CA0800040A0800040
:103C200044A0800048A0800008B4024B9C46103895
:103C300008BC6047E53B00003F20704713B56B466A
:103C40000268D9710733546819000122A04716BDD4
:103C500070B50A260B7892B06E44023305000B70E3
:103C60003C220021300001F060FE394801AC069092
:103C7000384824210790062020776846364AA174E8
:103C80002281364A364BA281FD3AFF3A8018C1772D
:103C9000684623390630C17768460730C17702A8E5
:103CA000C1770720F277032608316944C87703A952
:103CB000CE7710212B366E443170092621851F31B5
:103CC00069440E700CA9053E0E7033212380022337
:103CD00069440B7006360DA90E7022493536A1864F
:103CE0003B216E44307010A86274E27702703D325E
:103CF00069446A440B70137040210022E370237101
:103D00006371A37341336B44218719705A702B7D03
:103D1000C039A370A37263770133DBB2A3776A7DE6
:103D20000B200D0068441543C577312068440370AB
:103D30003A23501C6B441870412302320A436B44EF
:103D40001A7021004222084800F090FD12B070BDA8
:103D500010010424020605240904000001020000E9
:103D6000080B0000070500004405002008B4024BC2
:103D70009C46103808BC6047513C000070B5027D7D
:103D80000B790C0000259A420BD10B784E78A12BB1
:103D900009D1212E05D107221B491C4800F066FDE0
:103DA0000135280070BD212BFBD1202E22D1072206
:103DB0001549164800F09CFC9622134BD200196856
:103DC00091421DD1DB79DB071AD4FA20FFF756FCAC
:103DD00000210E4800F052FE0125232EE1D1E378A8
:103DE000A2781B0213430A4A00210848136000F01E
:103DF00045FED6E7222EEFD18A78034BDA71DBE756
:103E0000FFF746FCE4E7C0466C00002044050020B4
:103E10006800002008B4024B9C46103808BC60477C
:103E20007D3D000010B5417D006A013100F098FB36
:103E3000034B1B6801335A1E9341181810BDC0462E
:103E40007400002010B5417D006A023100F09EFB35
:103E500010BD10B5417D006A023100F065FB10BD58
:103E600070B50D00417D0400130002312A00006A84
:103E700000F052FC002801D10123636070BD0000F6
:103E800010B5054C23685A1C04D103685B69984738
:103E900003002060180010BD74000020074A0300D2
:103EA000106810B5411C03D001235B42136010BDA4
:103EB000597D186A013100F0DFFBF8E7740000203B
:103EC0000020704770470000FA239B0010B5836004
:103ED0000F4B0022C3820300283383610D4B040083
:103EE0004260C2611800403323610830631D2162C3
:103EF0002060DA778323A362813BE362803323630C
:103F000001F056FA2100103101F023FA200010BD13
:103F100003020000E45E0000022110B5094B1A689C
:103F2000437D5B01D318FF339C7A21439972437D13
:103F30000133DBB25B01D3180122FF33997A0A43C4
:103F40009A7210BDFC0900207047000010B50249AC
:103F50000248FFF7B9FF10BD44050020E804002027
:103F6000704710B5040001F005FB200010BD0000F3
:103F7000F0B5822919D1C3B2294D5A01AA18916905
:103F8000284C80010C40C0218905214391612649BC
:103F9000083340187021506128685B011A5C8A431D
:103FA000110030220A431A54F0BD0029FCD1C0266A
:103FB000C1B21B4C4B01E3189A681A4DB6052A4052
:103FC00032439A60194A800182185A600A00072712
:103FD000246808325201115DB9430F0001213943B1
:103FE00011559F6910493D4040182E439E6158610C
:103FF0007020115D8143080010210143115599681B
:104000000B48A21808408021490301439960996830
:10401000890B89039960402311790B431371C3E71E
:10402000FC090020FFFFFF8F7005002030070020F3
:10403000FF3F00F0EFF3108303600123436072B68B
:1040400070470368002B02D162B6BFF36F8F7047D1
:1040500073B5836D0400002B1BD10600A83635789C
:104060006846FFF7E7FF019BEDB2013B02D33578CD
:10407000EDB2FAE768460193FFF7E3FF002D01D1A7
:10408000002076BD2300A4331868A0342368C01A2A
:10409000F7E76846FFF7CEFF22000025019BF432C8
:1040A000013B02D31578EDB2FAE768460193FFF7BA
:1040B000C8FF002DE4D02300F0331868EC34E5E7A6
:1040C00010B5436D4468DBB25A01A21891680948E3
:1040D00008330840802149030143916091685B01E6
:1040E000890B890391602268D318402219790A4309
:1040F0001A7110BDFF3F00F0F7B5436D4268DBB2A7
:10410000190004000831106849014118C979C9072C
:1041100011D55B01D21893689B049B0C0CD1200035
:10412000FFF7CEFF63681A68636DDBB208335B018B
:10413000D3187F22DA71F7BDE16D002923D1210068
:10414000A4310B6023000125AC33E565684653605C
:10415000FFF770FF260020002100019BA836013BDD
:10416000F430F5315A1C33D0357002785F1ED2B26C
:104170000A700A78002A04D120000193FFF7A0FFFB
:10418000E8E73B00EEE72100F0310B600023E36538
:104190002300603353606846FFF74CFF012526007B
:1041A00020002100019BF436013BA830F5315A1C58
:1041B0000ED0357002785F1ED2B20A700A78002ADB
:1041C00004D120000193FFF77BFFE8E73B00EEE717
:1041D00068460193FFF735FFA4E737B56B46DC1D52
:1041E00000230D00237001F0E3F8210001F06EF8C8
:1041F0002B681818286020783EBD00002023F7B5F2
:10420000474A0500D1690F200B43D361012245497C
:104210000B7813430B70444B1978814319700621B6
:104220001C782143197041490C7822430A701A788E
:1042300002401A70602219780A431A703C4B3D4ABA
:104240005A805F78FF09FCD13B48FEF76FFF0123DE
:104250003A4C3B4E2268300011780B431370802299
:104260003900520001F061FB22689378DB07FCD42F
:1042700056621F26334B1B68590B980C9B0131402B
:1042800030405B0FB14200D105211F2800D1023818
:10429000072B00D1043B31408901178D01912A4938
:1042A00030400F40019939431185118D0700B1430A
:1042B000080038431085118D1803244B7F260B40CE
:1042C00003430C2013850823D17881430B4303213A
:1042D000D3702268D3788B4301390B43D3702268A3
:1042E0001378334013700423226816783343137015
:1042F0002268C1241389A4008343154813810359FC
:104300001B021B0A035180230360137811481943D1
:10431000012311702B700021FFF716FEF7BDC04678
:1043200000040040584400413C44004159440041CD
:10433000000C0040064000008D4C0000FC090020ED
:10434000000A0020246080003FF8FFFFFF8FFFFF7E
:1043500000E100E0E80400200078002810D00121EE
:10436000084B1B681A898A431A810822198B0A4351
:104370001A830422198B0A431A830022024B1A6003
:104380007047C046FC090020F409002010B50F4A10
:1043900093699B0B9B03936113680222FF331A728C
:1043A0009879823A02439A711A7A9207FCD57F244F
:1043B000074A2140937A0800A34319008023014350
:1043C0009172917A5B420B43937210BDFC090020FD
:1043D0000050004110B50C0000F0EAFF210000F091
:1043E000A8FF002804D1034A93699B0B9B039361A8
:1043F00010BDC046FC090020F8B50D00832A19D174
:10440000CBB23B4C5A01A21891693A48AD01084021
:10441000C021890501439161374920686D187021D9
:10442000083355615B011A5C8A43110040220A433C
:104430001A54F8BD022A55D1304A8B0098580028EA
:1044400002D003685B699847F82001F08FF80400F8
:10445000274E2B4B4660036040220021083001F0BC
:1044600064FA22000023A032A3646565E364236537
:10447000A365E3655360D3641372136013654C3214
:1044800013725372FF222B00134059017118886870
:10449000184F08330740C0208005384388603068D3
:1044A00007265B01195CAD00B1430E0003213143C7
:1044B00019542300616D606811404901411860334F
:1044C0004B60616D63680A401B6852019B180122B2
:1044D000FF33997A20000A439A72FFF7F1FD074BE8
:1044E0005C51A6E711002800FFF742FDA1E7C04696
:1044F000FC090020FFFFFF8F700500204805002009
:104500003C5F000070B505000124064BA200D258A4
:10451000002A06D0210028000134FFF76DFF0A2C85
:10452000F3D170BD1C0500200B4BCAB20B488901AA
:10453000C9185301C318596199690832890B890355
:104540009961036852019A180223D3715179823B11
:104550000B4353717047C04670050020FC090020D2
:10456000084B8A00D05810B5002803D003689B6818
:10457000984710BDC9B2044B490159188868800496
:10458000800CF6E748050020FC09002010B50C005F
:10459000FFF7E6FF00280CD0064BE4B21B68083496
:1045A00064011C19802362795B4213436371022307
:1045B000E37110BDFC090020F0B51C002A4B85B04A
:1045C0001B6807000D000292002B4AD0274B8A007F
:1045D000D058002808D0036822005B6802999847E9
:1045E0000400200005B0F0BD3800FFF7B9FF844299
:1045F00004D929003800FFF7B3FF04000121EBB212
:104600001B4E03935B010193F21893689B0B9B0372
:104610009360019A336802989B18FF335A7A0A43D1
:104620005A72144BA901C918220001F075F9002C27
:10463000D7D029003800FFF793FF0028D1D14021BF
:10464000039B326808335B01D31818790143197151
:104650000121D971019BD318FF339A7A0A439A72C8
:10466000BFE701246442BCE7F409002048050020AC
:10467000FC0900203007002013B56B46DC1D22002A
:104680000123FFF799FF012801D1207816BD0120F1
:104690004042FBE770B5CBB2124A13485C01890176
:1046A0008918021951609168104D08330D4080211E
:1046B00049032943402591609168890B89039160E2
:1046C00001685A018A1816793543157195796D0676
:1046D000FCD55B01C918CB79DB07FCD500198068D4
:1046E000C0B270BD30070020FC090020FF3F00F081
:1046F00070B50D0000211400FFF7CCFFA04200D9D7
:10470000200000230349A34203D0CA5CEA540133CA
:10471000F9E770BD30070020F0B51E003A4B85B0B8
:104720001B680F000192002B35D08023DB019E42D5
:1047300031D80025354B8A01D3180293002E2CD096
:10474000334B1B680393FF233B401C00009308344A
:10475000039B64011C19A379DB0921D02D4B2E4941
:10476000186800F01DFF2D4B1721584300F018FF6B
:104770002B4BE279920713D4DA5D002A01D101387C
:10478000F7D20122DA55009B5A01214B9B189A69F6
:10479000920B92039A6101256D42280005B0F0BD8D
:1047A00000221F4B3400DA553F2E09D9009B4024CC
:1047B0005A01174B9B188022996912060A439A6185
:1047C00022000199029801F0A7F8009BA1045A0168
:1047D0000F4B890C9B18029A2D195A619A69361B46
:1047E000920B92030A439A61009B039A08335B0180
:1047F000D3180222DA715979823A0A435A71019B1D
:104800001B1901939AE7C046F409002070050020A7
:10481000FC0900206000002040420F0070110100E0
:104820006505002070B50D001C000D4BAE01F6189B
:1048300011003000220001F06FF8EDB209496D015E
:104840004D196E61AB69084A20001340AB61AB693A
:10485000A2049B0B920C9B031343AB6170BDC0463B
:1048600070050020FC090020FF3F00F0F7B5104B59
:1048700001901B780F001500002B0CD10D4B16007A
:104880001C78002C09D00C4E0C4834882018641970
:1048900001F042F834802800FEBD002EFBD03A190A
:1048A000330000210198FFF7BDFF2418361AF4E702
:1048B000F0080020F1090020F2090020F108002092
:1048C000F8B50F0016000024012A26D9100001F0C7
:1048D0000FF80500380001F0EBF803230222013045
:1048E000400028706B7096420DD9397800290AD0A3
:1048F000531CDBB20137A9549E4203D00232EC5460
:10490000D2B2F0E7320029000548FFF7AFFF441E9E
:10491000A041C4B2280000F0F5FF2000F8BDC04659
:1049200044050020F0B50024012685B0184B0F0087
:1049300069461E7005000094FFF74FFC154B01A956
:104940000B806A3BFF3BCB715A330B72009B8C711F
:1049500009334B800E4B4E7108711C703A00092FC1
:104960000FD00D4F09223E700C4E28000094348069
:10497000FFF77CFF69462800FFF72FFC32880849C3
:104980003C702800FFF772FF012005B0F0BDC04663
:10499000F008002009020000F1090020F2090020BF
:1049A000F108002070B5CE7892B005000C00022E00
:1049B0000BD18B79C9792C4809021943FFF7B2FF53
:1049C000411E8841C0B212B070BD00F0F1FC210060
:1049D00000F090FC002803D0C117081AC00FF2E7BE
:1049E000012E0ED1E279A37912021A431F49112A2E
:1049F00013D8D2B2002A10D02800FFF737FF0120C9
:104A0000E1E7032EDFD1A378002B08D1E279A37967
:104A100012021A431649032AEBD90A78ECE7022B53
:104A200008D1E279A379120212491A432800FFF74C
:104A300047FFC8E7012B05D1E279A37912021A4397
:104A40000D49F3E7032BBED14122010001A800F07C
:104A50006CFF00F0ADFC01A900F05CFCE279A379E9
:104A600012021A4301A9E1E744050020785F000023
:104A7000685F0000585F00006C5F0000CBB2044923
:104A80005B01C9188B699B0B9B038B617047C04608
:104A9000FC09002037B5050048780C000B2810D819
:104AA00000F074FD061B0F2B0F404561494C5A5D09
:104AB000097801AA002906D1022311802800FFF7F6
:104AC000B1FE01203EBD00231380284B1B78012B33
:104AD00000D1137002230021F0E78A780023012A15
:104AE00003D101AA1380224BF0E7204A1370214A18
:104AF00093699B0B9B039361E3E78C78012C06D1B0
:104B000000211B4B01AA1C7011702300D6E7012065
:104B1000002CD7D1154B174A187093699B0B9B0338
:104B20009361CFE789782800FFF730FCC9E72800B8
:104B3000FFF738FFC6E701230F4ACCE70B780020C8
:104B4000DB06BFD12800FFF7DDFCA2780A4B0B483B
:104B50001A60FFF7E1F9CAE70123094ABBE78A783F
:104B6000074B1A60C3E70020ACE7C046640500208D
:104B70006C050020FC090020F4090020E804002056
:104B8000F80900203A4BF7B51E780500002E5FD1DA
:104B9000384C23689A8B12070DD5082231009A836E
:104BA0003000FFF7E5F910222368FF33997A0A43B2
:104BB0009A72314B1E6023689A8B520701D50422EA
:104BC0009A83FF331A7A920603D52022597A0A4330
:104BD0005A721A7AD20623D569460800274AC0CAF3
:104BE000C0C0A268920B9203A2604022587902438F
:104BF0005A7160230A7828001A422AD1FFF74AFF27
:104C00002368FF33002827D08022997952420A4333
:104C10009A711A7A520603D54022597A0A435A7277
:104C20007F2601252368FF331E722F002368083773
:104C30007F01DB19DB79002B07D0114BAA00D0587C
:104C400000280DD003681B6898470135082DECD16A
:104C5000F7BDFFF7BFFBD3E720210A4A9171D8E7E0
:104C600029000948FFF72EF92368DF19FE71ECE7E8
:104C7000F1090020FC090020F40900203007002081
:104C800048050020FF500041E804002010B502480C
:104C9000FFF778FF10BDC0464405002080235B006D
:104CA0000380002343600733037270478300014889
:104CB000C01870471C050020836C402B09D03F2290
:104CC000036CC154036C013313400364836C0133E0
:104CD00083647047F7B505006846FFF7ABF9002617
:104CE0004022019B013B02D32E6D961BFAE76846DA
:104CF0000193FFF7A6F9AB6D6846002B4FD1FFF784
:104D000099F92900019BA831013B5A1C0CD00C7861
:104D10005A1EE4B2002C05D168460193FFF791F9C1
:104D20002000FEBD1300F0E7684601930024FFF762
:104D300088F92A002900A0321368A431B4420ED0A9
:104D4000086898420BD92800591CEB181160603391
:104D500019780830C9B2FFF7AFFF0134E9E70968F5
:104D60009942DDD1002313600133AB656846FFF73C
:104D700061F92F002A000021019BA837013BF53281
:104D8000581CC9D0397010785E1E002805D01170EB
:104D900028000193FFF794F9EBE73300F0E7FFF702
:104DA00049F92900019BF431013B5A1C06D00C78CB
:104DB0005A1EE4B2002CAFD01300F6E76846019308
:104DC0000024FFF73EF92A002900EC321368F03185
:104DD000B44202D0086898421DD8096899429FD110
:104DE000002368461360AB65FFF724F92F002A0003
:104DF0000021019BF437013BF532581C00D18BE7B1
:104E0000397010785E1E002811D0117028000193AF
:104E1000FFF756F9EAE72800591CEB181160AC338C
:104E200019780830C9B2FFF747FF0134CBE73300E8
:104E3000E3E710B50400FFF74DFF206D10BD10B57E
:104E40000400FFF747FF236D002B03D0E36CE41849
:104E5000207A10BD01204042FBE7F7B517000E0095
:104E60000400FFF737FF6846FFF7E4F83F2200250C
:104E70009446019B013B5A1C19D0BD4215D2226DAC
:104E8000002A12D00121226D4942002A0AD0604630
:104E9000E26CA218117AE26C01320240E264226DE7
:104EA000013A226571550135E7E7013BE3E76846C2
:104EB0000193FFF7C6F82800FEBD0000014B024A2F
:104EC0001A607047FC090020005000410120704723
:104ED00010B50368014A1B6A984710BD130400000F
:104EE000C06D7047A83003684020C01A7047C36D7A
:104EF000002B03D0836DC018007D70470120404215
:104F0000FBE710B504000069FEF738FC002322001F
:104F10006365A032A365E365A83413605360236022
:104F200010BD020010B5A8321368002BFCD1006937
:104F3000FEF73BFC10BDF0200140303948424841AB
:104F40007047F0231B011940802306209B009942E3
:104F50000AD00133FF330130994205D08023023853
:104F60005B00994200D0002070470F2001400020D4
:104F7000012903D00239481E8141481C70470000B6
:104F80000300F0B5182685B00391AC3304001878FF
:104F9000330008214343334D1700EB185956FEF7F1
:104FA0000DFB2300AD331878330008214343EB1881
:104FB0005956FEF703FB2300AF331B78022B0AD1AF
:104FC0002300C0331878FF2805D008214643AE19C6
:104FD0007156FEF7F3FA2600B0363078FF2819D064
:104FE0000121FEF75BFA1822210033781E485A434C
:104FF000AB56B431DB01181808601C49AD185B18BA
:1050000021000122B8310B6069688A402100BC315F
:105010000A601A600122039B11002069FEF748FD17
:1050200039002000FFF78DFF390005002000FFF751
:105030009CFF390006002000FFF77DFF3300009041
:10504000290020690122FEF769FB2300AE331A789C
:1050500059782069FEF77FFB2069FEF79CFB05B0BD
:10506000F0BDC046845B0000184400411444004178
:1050700010B540220021040000F057FC002320005E
:1050800023646364A36410BDF7B51D0008AB1B78EF
:105090000400009309AB1B781600019300234360C2
:1050A000FA239B0083600E4B0F000833036014301B
:1050B000FFF7DEFF20006030FFF7DAFF6A462300CB
:1050C0001278AC3327619A706A4612791E70DA70D2
:1050D00022005D70FF23B032200013701374FEBDF8
:1050E0008C5F000037B5EFF3108300930123019329
:1050F00072B63F24019B013B5A1C0FD0826C5D1E8F
:10510000402A09D0026C8154026C013222400264B0
:10511000826C01328264EEE72B00EDE76846019372
:10512000FEF78FFF37BD13B5EFF310830093012314
:10513000019372B6019B5A1E0192002B14D0836C0E
:10514000002B0ED03F22436CC45C436C01331340F0
:105150004364836C013B83646846FEF772FF200062
:1051600016BD01246442F7E76846FEF76AFFF6E7DA
:1051700010B504000069FEF731FB002805D0206956
:10518000FEF73CFB2069FEF72EFB2069FEF716FBBD
:10519000002818D02069FEF731FB010020001430F0
:1051A000FFF7A0FF2300B0331B78FF2B0BD0402369
:1051B000E26D9B1A092B06DC23002200B433BC32BB
:1051C0001B6812681A602069FEF713FB00280CD0D8
:1051D0002300A8331B68002B13D020006030FFF79A
:1051E000A2FFC1B22069FEF70DFB2069FEF7EBFAC2
:1051F000002805D02069FEF7EAFA2069FEF7DAFAFE
:1052000010BD2069FEF70AFBEFE70000F8B50400C7
:1052100000690D002600FEF7ECFAA836002802D03F
:105220003368002B31D00F273368402B23D1EFF3A5
:105230001083012213420FD1164B5B68DB05DB0D97
:10524000F2D0103B5BB2002B0FDA3B40083B9B08CF
:10525000114A9B009B181B682069FEF7CAFA0028B8
:10526000E2D02000FFF784FFDEE79B08C0330B4A43
:105270009B009B58F0E7200029006030FFF732FFC9
:105280002069FEF7C7FA0120F8BD29002069FEF762
:10529000B9FAF8E700ED00E01CED00E000E100E005
:1052A00010B504001430FFF73EFF2300B0331B7825
:1052B000FF2B0AD04023E26D9B1A0A2B05DD230049
:1052C000BC34B8331B6822681A6010BD70B50E007C
:1052D00000254468002C0BD0236831005B68200057
:1052E0009847002802DB2D18E468F3E701256D429A
:1052F000280070BD70B50D004468002C08D02368EC
:1053000029009B6820009847002802D1E468F4E750
:10531000200070BD70B50D004468002C07D02368D4
:1053200029002000DB689847E4682D18F5E72C7009
:1053300070BD70B50D004468002C08D023682900AA
:105340001B6820009847002802D1E468F4E7200099
:1053500070BDF8B542788B790D00017A9B18040076
:1053600000208B4222DC6368834219D165600026ED
:1053700023786A71EA792B719B182370AB79B34259
:1053800013D9AB68B7006078DF19FFF78FFC3B6873
:10539000013603606378F6B201336370EEE70B0009
:1053A000D9680029FBD1DD60E1E70120F8BD0000EC
:1053B00070B50126054D064C2B68334203D1200001
:1053C000FFF76CFC2E60200070BDC046000B002073
:1053D000040B0020F7B506000D000C008B1801939C
:1053E000019B671B9C4207D0336821781B68300003
:1053F000984701340028F3D13800FEBD70B5040091
:1054000008000D0000F054FB2368020029005B68CF
:105410002000984770BD10B50B1E02D0FFF7EEFFBD
:105420000300180010BD10B5FFF7F5FF10BD10B553
:1054300003681B68984710BD10B50249FFF7DEFFEF
:1054400010BDC046C05F000070B50400FFF7E3FF69
:1054500005002000FFF7F0FF401970BDF0B58BB0DC
:105460006B461500002205330600DA770800012D8F
:1054700000D80A2509AC290000F018F9CAB21300B7
:1054800037330700DBB2092902D813003033DBB20F
:10549000013C2370002FEED121003000FFF7BBFF4D
:1054A0000BB0F0BDF8B506000C00151E04D1036862
:1054B000C9B21B689847F8BD0A2A0CD100290BDA3B
:1054C0002D21FFF7B4FF614207002A003000FFF7EB
:1054D000C5FF3818EFE7D2B221003000FFF7BEFF5A
:1054E000E9E710B5FFF7DEFF10BD70B50400FFF768
:1054F000D9FF05002000FFF79FFF401970BD10B5D0
:10550000002A04D10368C9B21B68984710BDD2B203
:10551000FFF7A4FFFAE770B50400FFF7F0FF0500FE
:105520002000FFF789FF401970BD704710B5FDF7E7
:105530000BFF00F0B9F9FFF7F8FF0120FDF72CFE93
:10554000084C2000FEF75AFE2000FEF705FFFDF78D
:105550004DF8FCF797FF044B002BFAD000E000BF9A
:10556000F7E7C046440500200000000010B500F039
:10557000BFF910BD10B500F0C5F910BD0B0010B596
:105580000100180000F082F910BD000002B471465D
:1055900049084900095C49008E4402BC7047C04676
:1055A000002243088B4274D303098B425FD3030A62
:1055B0008B4244D3030B8B4228D3030C8B420DD375
:1055C000FF22090212BA030C8B4202D31212090203
:1055D00065D0030B8B4219D300E0090AC30B8B4241
:1055E00001D3CB03C01A5241830B8B4201D38B03EF
:1055F000C01A5241430B8B4201D34B03C01A524194
:10560000030B8B4201D30B03C01A5241C30A8B42D6
:1056100001D3CB02C01A5241830A8B4201D38B02C1
:10562000C01A5241430A8B4201D34B02C01A524165
:10563000030A8B4201D30B02C01A5241CDD2C309D7
:105640008B4201D3CB01C01A524183098B4201D353
:105650008B01C01A524143098B4201D34B01C01A3E
:10566000524103098B4201D30B01C01A5241C308B6
:105670008B4201D3CB00C01A524183088B4201D325
:105680008B00C01A524143088B4201D34B00C01A11
:105690005241411A00D20146524110467047FFE77D
:1056A00001B5002000F0F0F802BDC0460029F7D097
:1056B00076E7704703460B437FD4002243088B42B2
:1056C00074D303098B425FD3030A8B4244D3030B89
:1056D0008B4228D3030C8B420DD3FF22090212BA4E
:1056E000030C8B4202D31212090265D0030B8B42CA
:1056F00019D300E0090AC30B8B4201D3CB03C01AB4
:105700005241830B8B4201D38B03C01A5241430B8E
:105710008B4201D34B03C01A5241030B8B4201D37E
:105720000B03C01A5241C30A8B4201D3CB02C01AE9
:105730005241830A8B4201D38B02C01A5241430A61
:105740008B4201D34B02C01A5241030A8B4201D350
:105750000B02C01A5241CDD2C3098B4201D3CB01F7
:10576000C01A524183098B4201D38B01C01A5241A6
:1057700043098B4201D34B01C01A524103098B42AA
:1057800001D30B01C01A5241C3088B4201D3CB0095
:10579000C01A524183088B4201D38B00C01A524178
:1057A00043088B4201D34B00C01A5241411A00D228
:1057B00001465241104670475DE0CA0F00D0494291
:1057C000031000D34042534000229C4603098B4201
:1057D0002DD3030A8B4212D3FC22890112BA030A89
:1057E0008B420CD3890192118B4208D3890192110B
:1057F0008B4204D389013AD0921100E08909C30990
:105800008B4201D3CB01C01A524183098B4201D391
:105810008B01C01A524143098B4201D34B01C01A7C
:10582000524103098B4201D30B01C01A5241C308F4
:105830008B4201D3CB00C01A524183088B4201D363
:105840008B00C01A5241D9D243088B4201D34B007E
:10585000C01A5241411A00D20146634652415B10C0
:10586000104601D34042002B00D5494270476346A1
:105870005B1000D3404201B5002000F005F802BDE6
:105880000029F8D016E770477047C04610B50400ED
:1058900004481300002804D00A000220210000E080
:1058A00000BF10BD0000000070B500260C4D0D4C6F
:1058B000641BA410A64209D1002600F011F90A4D7C
:1058C0000A4C641BA410A64205D170BDB300EB586E
:1058D00098470136EEE7B300EB5898470136F2E7F8
:1058E000DC000020DC000020DC000020F4000020B0
:1058F00010B5034B0100186800F06AF810BDC046EF
:105900007800002010B5034B0100186800F016F86D
:1059100010BDC04678000020002310B59A4200D187
:1059200010BDCC5CC4540133F8E703001218934255
:1059300000D1704719700133F9E7000070B5050018
:10594000002910D00C1F2368002B00DAE41828006F
:1059500000F0B5F81D4A1368002B05D16360146090
:10596000280000F0ADF870BDA34209D92168601885
:105970008342F3D118685B6841182160EEE7130099
:105980005A68002A01D0A242F9D919685818A042D1
:105990000BD120680918581819608242E0D11068AC
:1059A0005268411819605A60DAE7A04202D90C2304
:1059B0002B60D5E721686018824203D110685268D5
:1059C0004118216062605C60CAE7C046100B00208D
:1059D000032370B5CD1C9D43083506000C2D1ED247
:1059E0000C25A9421DD8300000F069F8254A14683A
:1059F0002100002919D1244C2368002B03D1300049
:105A000000F044F820602900300000F03FF8431C0B
:105A10002BD10C233000336000F052F803E0002D4E
:105A2000DFDA0C233360002070BD0B685B1B19D4D8
:105A30000B2B03D90B60CC18256003E04B688C421C
:105A40000DD11360300000F03BF8200007220B302E
:105A5000231D9043C31AE7D05A42E250E4E7636043
:105A60000C00EFE70C004968C3E70323C41C9C4308
:105A7000A042E1D0211A300000F008F8431CDBD12D
:105A8000C7E7C046100B0020140B0020002370B5A0
:105A9000064C05000800236000F014F8431C03D1F5
:105AA0002368002B00D02B6070BDC0461C0B00206B
:105AB0000023C25C0133002AFBD1581E7047704797
:105AC00070470000044A1368002B00D1034B1818DC
:105AD000106018007047C046180B0020200B0020F3
:105AE000F8B5C046F8BC08BC9E467047F8B5C0463D
:105AF000F8BC08BC9E46704753657420737461748B
:105B0000757320746F20002C206363773A20004760
:105B1000657474696E6720736574207570E280A681
:105B200000526561647920666F7220616374696FE9
:105B30006E0000000000000000000000BB28000014
:105B4000A526000071260000CF260000C92600000F
:105B50006D290000E1260000F9260000FD27000065
:105B60005527000039270000812600000729000082
:105B7000992600002B28000075260000D126000081
:105B8000D9260000000000001600000008000000F8
:105B90001C000000FF0000040004060000000000DC
:105BA00017000000080000001C000000FF000104B6
:105BB00001040700000000000A00000008000000C7
:105BC0001C000000120000010001FF0000000000A6
:105BD0000B000000080000001C0000001300010181
:105BE0000101FF00010000000A00000008000000A1
:105BF0001C000000FF00000500050A000100000075
:105C00000B000000080000001C000000FF00010560
:105C100001050B0000000000140000000800000057
:105C20002C000000FF000200020004000000000041
:105C300015000000080000002C000000FF00030019
:105C4000030005000000000010000000020000003A
:105C50001C000000FF000002000200000000000025
:105C6000110000000200000004000000FF00FFFF20
:105C7000FFFF010000000000130000000200000010
:105C80001C000000FF0001030103FF0000000000F2
:105C90000800000003000000040000001000FFFFE7
:105CA000FFFF1000000000000900000003000000DA
:105CB000040000001100FFFFFFFFFF0001000000D3
:105CC000170000000300000004000000FF00FFFFB9
:105CD000FFFFFF00010000001600000003000000AD
:105CE00004000000FF00FFFFFFFFFF0000000000B6
:105CF0000200000001000000060000000000FFFF9D
:105D0000FFFFFF0001000000020000000100000092
:105D1000040000000A00FFFFFFFF02000100000076
:105D20000300000001000000040000000B00FFFF62
:105D3000FFFF03000000000004000000010000005D
:105D40001C000000040000000000FF000000000034
:105D500005000000010000001C000000050001001B
:105D60000100FF000000000006000000010000002C
:105D7000040000000600FFFFFFFFFF00000000001E
:105D80000700000001000000040000000700FFFF02
:105D9000FFFFFF00000000001800000006000000E8
:105DA00000000000FF00FFFFFFFFFF0000000000F9
:105DB000190000000600000000000000FF00FFFFC7
:105DC000FFFFFF00000000001200000008000000BC
:105DD00004000000FF00FFFFFFFFFF0000000000C5
:105DE000030000000800000004000000FF00FFFFA7
:105DF000FFFFFF00000000000C0000000300000097
:105E000000000000FF00FFFFFFFFFF000000000098
:105E10000D0000000300000000000000FF00FFFF75
:105E2000FFFFFF00000000000E000000080000005F
:105E300000000000FF00FFFFFFFFFF000000000068
:105E40000F0000000300000000000000FF00FFFF43
:105E5000FFFFFF00000000001B0000000800000022
:105E600000000000FF00FFFFFFFFFF000000000038
:105E70001C0000000800000000000000FF00FFFF01
:105E8000FFFFFF0001000000080000000800000004
:105E900000000000FF00FFFFFFFFFF000100000007
:105EA00009000000010000001800000003000104C8
:105EB00001040900000000000000000008000000CC
:105EC00000000000FF00FFFFFFFFFF0000000000D8
:105ED000010000000800000000000000FF00FFFFBC
:105EE000FFFFFF0000000000000000003D3C00003C
:105EF000613E0000393C0000453E0000253E0000A8
:105F00009D3E0000813E0000533E0000513C0000D9
:105F1000BD3B00007D3D0000E53B0000F0FFFFFFC2
:105F200000000000153E00006D3D0000C13E000075
:105F3000293C00000000000000000000F9400000C3
:105F40005B4E0000334E00003F4E0000613F0000FA
:105F5000633F00005140000041726475696E6F201C
:105F60004D4B525A65726F00040309044172647507
:105F7000696E6F204C4C430012010002EF02014099
:105F800041234F80000101020301000000000000D6
:105F9000000000000D520000D5530000E54E000047
:105FA000234F0000E14E0000A1520000EF4E000020
:105FB000D14E0000814F0000034F0000CD4E000085
:085FC0000D0A000000000000C2
:105FC80000000000000000000000000000000000C9
:105FD8000000000032000000000000000000000087
:105FE80000000000000000000000000000000000A9
:105FF8000000000000000000000000000000000099
:106008000000000000000000000000000000000088
:106018000000000000000000000000000400002054
:1060280040420F00FFFFFFFFFFFFFFFF00C201001C
:1060380000000800FFFFFFFF7C00002000000000B8
:106048000000000000000000000000000000000048
:106058000000000000000000000000000000000038
:106068000000000000000000000000000000000028
:106078000000000000000000000000000000000018
:106088000000000000000000000000000000000008
:10609800000000000000000000000000DD200000FB
:1060A800D9240000B52A0000C52E00004D3F00008D
:1060B800BD4E0000B52000000000000000000000F8
:04000003000030C900
:00000001FF
#!/bin/sh
arduino-cli compile -b arduino:samd:mkrzero -e -v
cp ./build/arduino.samd.mkrzero/i2c-encoder-assembly.ino.hex .
cp ./build/arduino.samd.mkrzero/i2c-encoder-assembly.ino.bin .
#!/bin/sh
arduino-cli upload -b arduino:samd:mkrzero --input-dir . -p /dev/ttyACM0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment