diff --git a/.kiro/steering/tech.md b/.kiro/steering/tech.md index f7d1258f..91b1e274 100644 --- a/.kiro/steering/tech.md +++ b/.kiro/steering/tech.md @@ -40,7 +40,7 @@ ## Shared Packages - **@microflow/ui**: Radix UI + shadcn/ui component library -- **@microflow/hardware**: Hardware abstraction layer with Johnny-Five +- **@microflow/runtime**: Runtime abstraction layer with Johnny-Five - **@microflow/flasher**: Firmware flashing utilities (AVR, STK500) - **@microflow/mqtt-provider**: MQTT communication layer - **@microflow/socket**: WebSocket communication @@ -48,7 +48,7 @@ ## Key Dependencies -- **Hardware**: johnny-five, chip.avr.avr109, stk500, intel-hex +- **Runtime**: johnny-five, chip.avr.avr109, stk500, intel-hex - **AI/ML**: LangChain + Ollama integration - **UI Components**: Radix UI primitives, Recharts, Leva controls - **Development**: Concurrently for parallel processes diff --git a/README.md b/README.md index 294524c0..871c53c7 100644 --- a/README.md +++ b/README.md @@ -1,58 +1,73 @@ # Microflow -A set of tools to make it easier to start prototyping for interactivity. +**Create interactive prototypes that connect your designs to real hardware.** -Microflow consists of 2 applications so far: +Microflow helps designers and creators build interactive prototypes by connecting digital designs (like those in Figma) to physical microcontrollers (like Arduino boards). No coding required—just drag, drop, and connect. -1. Microflow studio -2. Microflow hardware bridge (Figma plugin) +## What is Microflow? -[See the documentation](https://microflow.vercel.app/docs) +Microflow is a visual tool that lets you create interactive experiences without writing code. Think of it like connecting building blocks: you drag components onto a canvas, connect them together, and your prototype comes to life. -## Microflow studio +### Who is it for? -A desktop application that allows you to create interactive prototypes using a visual, flow-based, interface. +- **Designers** who want to test interactions with real hardware +- **Prototypers** building interactive installations +- **Creators** exploring the intersection of digital and physical design +- **Anyone** who wants to make their designs interactive without learning to code -Download the latest release from the [releases page](https://github.com/xiduzo/microflow/releases) and get started. +## What's included? -## Microflow hardware bridge +Microflow consists of two main tools that work together: -Bridge the gap between your microcontrollers and design tools. +### 1. Microflow Studio -Microflow hardware bridge is a [Figma plugin](https://www.figma.com/community/plugin/1373258770799080545) that allows you to connect your Figma designs to the Microflow studio application or any other application that supports MQTT. +A desktop application where you create your interactive prototypes using a visual, flow-based interface. Simply drag and drop components, connect them together, and see your prototype come to life. -# Running the project locally +**Get started:** Download the latest version from the [releases page](https://github.com/xiduzo/microflow/releases) -This project is a mono-repo that contains the Microflow studio and the Microflow hardware bridge. +### 2. Microflow Hardware Bridge (Figma Plugin) -It uses [Yarn workspaces](https://classic.yarnpkg.com/en/docs/workspaces/) to manage dependencies. +A Figma plugin that connects your Figma designs to Microflow Studio. This lets you control your physical hardware directly from your Figma prototypes. -## Microflow studio +**Get started:** Install the [Figma plugin](https://www.figma.com/community/plugin/1373258770799080545) from the Figma Community -1. run `yarn install` -2. run `yarn dev` +## Getting Started -### Firmata versions +1. **Download Microflow Studio** from the [releases page](https://github.com/xiduzo/microflow/releases) +2. **Install the Figma plugin** from the [Figma Community](https://www.figma.com/community/plugin/1373258770799080545) +3. **Connect your microcontroller** (like an Arduino) to your computer +4. **Start creating!** Check out the [documentation](https://microflow.vercel.app/docs) for tutorials and guides -Microflow studio will flash firmata to your microcontroller automatically. +## Learn More -For the [supported boards](https://microflow.vercel.app/docs/microflow-studio#supported-microcontroller-boards) it will flash version `2.5.X` to be compatible with touchdesigner. +For detailed guides, tutorials, and examples, visit the [full documentation](https://microflow.vercel.app/docs). -All other boards will get flashed with version `2.4.X` from [avr-girl-arduino](https://github.com/noopkat/avrgirl-arduino/tree/master/junk/hex). +--- -## Microflow hardware bridge +## For Developers -1. run `yarn install` -2. run `yarn dev:plugin` +_The sections below are for developers who want to contribute to or modify Microflow._ -# Development and contributing +### Running the project locally -See the [wiki](https://github.com/xiduzo/microflow/wiki) to get started contributing to `microflow` +This project uses a monorepo structure (all code in one repository) and [Yarn workspaces](https://classic.yarnpkg.com/en/docs/workspaces/) to manage dependencies. -# Building the app for MacOS +#### Microflow Studio -In order to build the application for MacOS you will need to follow the [code signing](https://www.electronforge.io/guides/code-signing/code-signing-macos) steps. +1. Run `yarn install` to install all dependencies +2. Run `yarn dev` to start the development server -## Certificates +**Note about Firmata:** Microflow Studio automatically installs Firmata (communication software) on your microcontroller when you connect it. For [supported boards](https://microflow.vercel.app/docs/microflow-studio#supported-microcontroller-boards), it uses version 2.5.X for TouchDesigner compatibility. All other boards use version 2.4.X. -For this we use the [import-codesign-certs](https://github.com/Apple-Actions/import-codesign-certs) action +#### Microflow Hardware Bridge (Figma Plugin) + +1. Run `yarn install` to install all dependencies +2. Run `yarn dev:plugin` to start the development server + +### Contributing + +Want to help improve Microflow? Check out the [wiki](https://github.com/xiduzo/microflow/wiki) to get started contributing. + +### Building for macOS + +To build the application for macOS, you'll need to follow the [code signing](https://www.electronforge.io/guides/code-signing/code-signing-macos) steps. We use the [import-codesign-certs](https://github.com/Apple-Actions/import-codesign-certs) action for certificate management. diff --git a/apps/electron-app/hex/leonardo/StandardFirmata.cpp.hex b/apps/electron-app/hex/leonardo/StandardFirmata.cpp.hex deleted file mode 100644 index dae0e206..00000000 --- a/apps/electron-app/hex/leonardo/StandardFirmata.cpp.hex +++ /dev/null @@ -1,1066 +0,0 @@ -:100000000C94DB000C9403010C9403010C94030189 -:100010000C9403010C9403010C9403010C94030150 -:100020000C9403010C94A6160C94AD130C941C14A0 -:100030000C9403010C9403010C9403010C94030130 -:100040000C9403010C94CF170C9403010C9403013E -:100050000C9403010C9403010C9403010C9463139E -:100060000C9403010C9474160C944E160C9403011A -:100070000C9403010C9403010C9403010C940301F0 -:100080000C9403010C9403010C9403010C940301E0 -:100090000C94B0160C9403010C9403010C9403010E -:1000A0000C9403010C9403010C940301080B00024F -:1000B0000202000009040000010202000005240001 -:1000C0001001052401010104240206052406000193 -:1000D0000705810310004009040100020A00000026 -:1000E00007050202400000070583024000000403E8 -:1000F000090412010002EF02014041233680000191 -:100100000102030141726475696E6F204C4C43001B -:1001100041726475696E6F204C656F6E6172646FB9 -:1001200000070605040100080A0B0C0D0900000079 -:1001300000240027002A002D0030000000000025C8 -:100140000028002B002E00310000000000230026B4 -:100150000029002C002F00040404040403040502F9 -:100160000202020403020202020606060606060452 -:10017000040202020404040802011040804010201E -:10018000408040800802040180402010020110805D -:1001900010204040200000000200090F000003046E -:1001A00001000C0000000000000000000000000042 -:1001B00000000000BE1811241FBECFEFDAE0DEBF42 -:1001C000CDBF12E0A0E0B1E0E4E1F1E402C00590AF -:1001D0000D92AE36B107D9F726E0AEE6B2E001C027 -:1001E0001D92A832B207E1F710E0CBEDD0E004C0D9 -:1001F0002197FE010E944E1FCA3DD107C9F70E94F8 -:10020000EA190C9488200C940000862FE091610379 -:10021000F0916203309711F0BA0109940895862F86 -:10022000E0915F03F0916003309711F0BA010994F7 -:100230000895862FE0915D03F0915E03309711F0F1 -:10024000BA0109940895862FE0915B03F0915C0355 -:10025000309711F0BA0109940895862FE09159035F -:10026000F0915A03309711F0BA0109940895862F3E -:10027000E0915703F0915803309711F0BA010994B7 -:1002800008950895862F642FE0916303F09164032D -:10029000309711F0A90109940895E0916503F09158 -:1002A0006603309709F009940895CF93DF93FC011A -:1002B000A081B181109701F1EC01ED91FC911197B2 -:1002C0000190F081E02D69EFCD0109958881998138 -:1002D000DC01ED91FC910190F081E02D62E0099547 -:1002E00088819981DC01ED91FC910190F081E02DF4 -:1002F00065E0DF91CF910994DF91CF910895A091AE -:100300006F05B0917005ED91FC9111970190F0810E -:10031000E02D682FCD0109941F93CF93DF93182F01 -:10032000EB0180913605909137056817790760F4E5 -:100330008091340590913505C80FD91F188380E04E -:10034000DF91CF911F910895E0916305F0916405CD -:10035000309711F481E0F4CF81E0809333058091F0 -:100360004F0590915005099580913605909137057C -:10037000C817D90778F7DCCFCF93DF93EC01FB01E7 -:1003800030E020E0C901880F991F8C179D0778F491 -:100390004081DB014D93BD0111979181979599277C -:1003A0009795942B9C932F5F3F4F3296EBCFC901CB -:1003B000DF91CF910895FC018091B303882311F15F -:1003C0003FB7F89482E08093E9002091F200822FF9 -:1003D00090E01816190614F481E090E0882339F0B3 -:1003E000289844E64093B2034091F10040832223D1 -:1003F00039F02091F200211103C02BE62093E80090 -:100400003FBF08958FEF9FEF08952FB7F89483E0D3 -:100410008093E9009091E800892F807295FF04C0D5 -:100420009091F20080E4891B2FBF08958091AA0368 -:1004300081110DC082E08093A60384E08093A7031E -:100440001092A9031092A80381E08093AA0386EA80 -:1004500093E0089581508F3008F047C0E82FF0E016 -:10046000EC5CFD4F0C944E1F5102550243024902B1 -:100470004D0275027502750258025E026202660242 -:100480006C0275027002809180008F7780938000EB -:100490000895809180008F7DF9CF80918000877FC3 -:1004A000F5CF84B58F7784BD089584B58F7DFBCF5C -:1004B000809190008F7780939000089580919000B4 -:1004C0008F7DF9CF80919000877FF5CF8091C0001C -:1004D0008F778093C00008958091C0008F7DF9CF01 -:1004E0008091C200877F8093C2000895CF93DF93ED -:1004F000282F30E0F901EB56FE4F8491F901EA58BC -:10050000FE4FD491F901E95AFE4FC491CC23A1F0DA -:1005100081110E942A02EC2FF0E0EE0FFF1FE75B33 -:10052000FE4FA591B491EC91ED2381E090E009F4A8 -:1005300080E0DF91CF91089580E090E0FACF1F93A3 -:10054000CF93DF93282F30E0F901EB56FE4F8491D3 -:10055000F901EA58FE4FD491F901E95AFE4FC491CE -:10056000CC23A9F0162F81110E942A02EC2FF0E073 -:10057000EE0FFF1FE55CFE4FA591B4918FB7F89485 -:10058000EC91111108C0D095DE23DC938FBFDF9171 -:10059000CF911F910895DE2BF8CFCF93DF9390E09A -:1005A000FC01EA58FE4F2491895A9E4FFC01849128 -:1005B0008823C9F090E0880F991FFC01E35DFE4F8E -:1005C000A591B491FC01E55CFE4FC591D4916111F8 -:1005D0000DC09FB7F8948C91209582238C938881CD -:1005E000282328839FBFDF91CF910895623051F473 -:1005F0009FB7F8943C91822F809583238C93E88158 -:100600002E2BEFCF8FB7F894EC912E2B2C938FBF1E -:10061000EACF823108F08251E82FF0E0EF5DFE4F23 -:10062000E49190917B008E2F880F880F80729F7DC0 -:10063000892B80937B00E770E064E0937C008091DD -:100640007A00806480937A0080917A0086FDFCCFE6 -:10065000809178009091790008953FB7F894809147 -:10066000A2039091A303A091A403B091A50326B582 -:10067000A89B05C02F3F19F00196A11DB11D3FBFDA -:10068000BA2FA92F982F8827BC01CD01620F711DA9 -:10069000811D911D42E0660F771F881F991F4A95A3 -:1006A000D1F708958F929F92AF92BF92CF92DF922F -:1006B000EF92FF926B017C010E942D034B015C01C4 -:1006C000C114D104E104F104B9F00E942D036819AA -:1006D00079098A099B09683E73408105910580F379 -:1006E00021E0C21AD108E108F10888EE880E83E003 -:1006F000981EA11CB11CE4CFFF90EF90DF90CF902B -:10070000BF90AF909F908F900895009721F0805CEC -:100710009F4F0C94550108954091510350915203FD -:1007200020914F033091500342175307B4F4909136 -:10073000E8009570E1F39091E80092FD19C0809374 -:10074000F100809151039091520301968F73992784 -:10075000892B19F48EEF8093E800809151039091DA -:1007600052030196909352038093510381E00895C0 -:1007700080E00895DF92EF92FF920F931F93CF9343 -:10078000DF93D82E8A01EB017B01E40EF51ECE1516 -:10079000DF0559F0D7FE12C0FE0184910E948C0340 -:1007A00021968111F4CF0FEF1FEFC801DF91CF9198 -:1007B0001F910F91FF90EF90DF9008958881EECF09 -:1007C0000F931F93CF93DF931F92CDB7DEB782E0D5 -:1007D000898342E450E06CEA70E080E80E94BA034A -:1007E0000E941602DC0112960D911C910115110553 -:1007F00089F0D801ED91FC910280F381E02DBE01DA -:100800006F5F7F4FC801099597FD04C0F80100850F -:100810001185ECCF89810F90DF91CF911F910F91BE -:100820000895615030F02091F100FC012083019681 -:10083000F8CF289884E68093B2030895AF92BF92D0 -:10084000CF92DF92EF92FF920F931F93CF93DF939C -:100850006C017B018B01040F151FEB015E01AE18CB -:10086000BF08C017D10759F06991D601ED91FC91ED -:100870000190F081E02DC6010995892B79F7C5011A -:10088000DF91CF911F910F91FF90EF90DF90CF906C -:10089000BF90AF900895FC01538D448D252F30E01B -:1008A000842F90E0821B930B541710F0CF9608957D -:1008B00001970895FC01918D828D981761F0A28DAA -:1008C000AE0FBF2FB11D5D968C91928D9F5F9F7370 -:1008D000928F90E008958FEF9FEF0895FC01918D26 -:1008E000828D981731F0828DE80FF11D858D90E093 -:1008F00008958FEF9FEF0895FC01918D228D892F30 -:1009000090E0805C9F4F821B91098F739927089517 -:1009100084E094E00E947C0421E0892B09F420E02B -:10092000822F089580E090E0892B29F00E948804AE -:1009300081110C9400000895FC01A48DA80FB92F1B -:10094000B11DA35ABF4F2C91848D90E001968F73F7 -:100950009927848FA689B7892C93A089B1898C9116 -:1009600082748C93938D848D981306C00288F389CA -:10097000E02D80818F7D80830895EF92FF920F9309 -:100980001F93CF93DF93EC0181E0888F9B8D8C8D3B -:10099000981319C0E889F989808185FF14C09FB731 -:1009A000F894EE89FF896083E889F98980818274EF -:1009B00080839FBF81E090E0DF91CF911F910F91E5 -:1009C000FF90EF900895F62E0B8D10E00F5F1F4FF4 -:1009D0000F731127E02E8C8D8E110CC00FB607FC03 -:1009E000FACFE889F989808185FFF5CFCE010E9491 -:1009F0009C04F1CFEB8DEC0FFD2FF11DE35AFF4F5F -:100A0000F0829FB7F8940B8FEA89FB89808180621E -:100A1000CFCFCF93DF93EC01888D8823B9F0AA89DB -:100A2000BB89E889F9898C9185FD03C0808186FDA9 -:100A30000DC00FB607FCF7CF8C9185FFF2CF8081F8 -:100A400085FFEDCFCE010E949C04E9CFDF91CF91CD -:100A500008958F929F92AF92BF92CF92DF92EF92C2 -:100A6000FF920F931F93CF93DF936C017B018A0159 -:100A700080910B01882309F45CC08091B303882323 -:100A800009F457C08091550380FF05C08091E000B4 -:100A900082608093E000E801B12C8AEFA82E93E0F9 -:100AA000892E2AE3922E209711F4BB20D9F10E94BF -:100AB000050281110AC0AA94AA20D9F161E070E070 -:100AC00080E090E00E945203EECF8C171D0611F0DB -:100AD0000CF08C2F9FB7F8948092E9002091E800E9 -:100AE00025FD02C09FBFDFCF282F30E0C21BD30BF4 -:100AF000F701815020F041914093F100FACFE20ECE -:100B0000F31EBB2021F09092E800B12CEBCF809136 -:100B1000E80085FDE7CF9092E800BB24B3942097CE -:100B200009F3F3CF5D9884E6809354031016110601 -:100B30003CF081E090E0F6019383828310E000E0D6 -:100B4000C801DF91CF911F910F91FF90EF90DF903F -:100B5000CF90BF90AF909F908F900895CF93DF93E9 -:100B60001F92CDB7DEB76983DC01ED91FC91028065 -:100B7000F381E02D41E050E0BE016F5F7F4F0995AA -:100B80000F90DF91CF91089583E08093E9008091E9 -:100B9000F200882319F08AE38093E80008950E9408 -:100BA000050290E00895CF93DF931F92CDB7DEB793 -:100BB000FC018485958597FD08C02FEF3FEF3587B1 -:100BC00024870F90DF91CF910895CE0101960E9466 -:100BD000DB01019719F4898190E0F3CF8FEF9FEF4C -:100BE000F0CF0F931F93CF93DF931F92CDB7DEB754 -:100BF0008C01FC018485958597FF0BC0CE01019681 -:100C00000E94DB01019771F4898190E0F8019587DA -:100C10008487F801848595850F90DF91CF911F918E -:100C20000F9108958FEF9FEFF1CFFC01848595859B -:100C300097FD0BC09FB7F89482E08093E900809104 -:100C4000F2009FBF90E0019608959FB7F89482E06C -:100C50008093E9008091F2009FBF90E008955F9239 -:100C60006F927F928F929F92AF92BF92CF92DF92BC -:100C7000EF92FF920F931F93CF93DF935C01690173 -:100C8000DA015C90232B19F4CC24CA94DC2C8A0161 -:100C90003A01660E771ED0E0C0E0F12CE12C87E02F -:100CA000882E912CF50180819181D8016C910C2EB8 -:100CB00001C0660F0A94EAF765296F77DC01ED91B0 -:100CC000FC910190F081E02D0995BFEFEB1AFB0A32 -:100CD000F801608170E0C4018C1B9D0B02C075950A -:100CE00067958A95E2F7562E2196C730D10558F1BF -:100CF000CE14DF0441F1D5018D919C91652D6F7764 -:100D0000DC01ED91FC910190F081E02D0995BFEFA0 -:100D1000EB1AFB0A551C5524551C2797E6CFEC14FB -:100D2000FD0408F4BFCFDF91CF911F910F91FF9089 -:100D3000EF90DF90CF90BF90AF909F908F907F907B -:100D40006F905F9008950F5F1F4F6016710639F71F -:100D5000209749F3EC14FD0430F7F501808191816F -:100D600061E070E001C0660FCA95EAF76150652145 -:100D7000DC01ED91FC910190F081E02DDF91CF91AC -:100D80001F910F91FF90EF90DF90CF90BF90AF90A9 -:100D90009F908F907F906F905F9009941F93CF9357 -:100DA000DF9300D0CDB7DEB7182F7A8369838091A7 -:100DB0003105909132050097C9F0DC01ED91FC916D -:100DC0000190F081E02D1031B8F461157044A0F469 -:100DD000612F606E099522E030E0AE014F5F5F4FFA -:100DE00062E070E081E395E00E942F060F900F9083 -:100DF000DF91CF911F91089560EF099580913105A2 -:100E000090913205DC01ED91FC910190F081E02D93 -:100E10006FE609958091310590913205DC01ED91E5 -:100E2000FC910190F081E02D612F099522E030E0E6 -:100E3000AE014F5F5F4F62E070E081E395E00E949A -:100E40002F068091310590913205DC01ED91FC91E6 -:100E50000190F081E02D67EF0995C8CFEF92FF92E6 -:100E60000F931F93CF93DF93C82F809131059091FB -:100E700032050097C9F17A018B01DC01ED91FC91FB -:100E80000190F081E02D60EF0995809131059091FE -:100E90003205DC01ED91FC910190F081E02D6C2F89 -:100EA0000995E7010E0D1F1DC017D10759F030E05D -:100EB00020E0AE0161E070E081E395E00E942F0642 -:100EC0002196F2CF8091310590913205DC01ED91B0 -:100ED000FC910190F081E02D67EFDF91CF911F91A0 -:100EE0000F91FF90EF900994DF91CF911F910F9197 -:100EF000FF90EF900895CF92DF92EF92FF920F93C1 -:100F00001F93CF93DF93FC01E058FF4FE080EE206A -:100F100009F45CC0EC01C05CDF4FA881B981109777 -:100F200009F454C0FC01EF57FF4FC080D180F60197 -:100F300011810081ED91FC9111970190F081E02DDC -:100F400060EFCD01099588819981DC01ED91FC91DB -:100F50000190F081E02D69E7099588819981DC0194 -:100F6000ED91FC910190F081E02D602F0995888131 -:100F70009981DC01ED91FC910190F081E02D612FD0 -:100F80000995F12C01E010E00F5F1F4FE016F1060C -:100F900059F030E020E0A601400F511F61E070E001 -:100FA000CE010E942F06F0CF88819981DC01ED915E -:100FB000FC910190F081E02D67EFDF91CF911F91BF -:100FC0000F91FF90EF90DF90CF900994DF91CF9138 -:100FD0001F910F91FF90EF90DF90CF9008950097B1 -:100FE00011F00C947B07089520912803260F3327D6 -:100FF000331F21323105ECF42091DA03FC0190E03B -:1010000080E0243069F082E00895A09128032191C6 -:10101000AC014A5F5C4FA40FB52FB11D2C93019614 -:10102000861798F380912803680F6093280380E067 -:10103000089581E008951092DA0381E08093D90346 -:101040001092B40361E082E00E949F0261E083E0BD -:101050000E949F02E9EBF0E080818E7F8083808197 -:101060008D7F808388E48093B80085E48093BC0002 -:101070000895CF93DF9391E0909305038823B9F00F -:10108000C091B800D091BA008091BC008A7B809357 -:10109000BC0060E082E00E949F0260E083E00E946A -:1010A0009F020E941B08D093BA00C093B800DF9142 -:1010B000CF9108958F929F92AF92BF92CF92DF927D -:1010C000EF92FF920F931F93CF93DF93D09103047E -:1010D000D13208F0D7C0182FC09102040E942D030E -:1010E0006B017C018091DA0381116BC082E08093F7 -:1010F000DA031093D9038FEF8093D8031092D703AC -:10110000D093D603A2EEB3E0E6EBF3E080E0D81391 -:1011100091C01092B5038091B503CC0FC82BC0933A -:10112000B5038091B403813009F088C01092B403F4 -:101130000E942D036B017C018091B5038093BB005D -:101140008091DC039091DD03A091DE03B091DF0379 -:10115000892B8A2B8B2BA1F00E942D030091DC039D -:101160001091DD032091DE033091DF036C197D09BE -:101170008E099F09061717072807390708F442C088 -:101180008091BC0083FDD8CF85EC8093BC000E9489 -:101190002D036B017C018091DA03823009F450C089 -:1011A0008091D8038F3F09F46FC08091D8038032BB -:1011B00009F46CC08091D803803309F469C084E0DD -:1011C00026C08091DC039091DD03A091DE03B091F5 -:1011D000DF03892B8A2B8B2B09F484CF0E942D03EC -:1011E0008090DC039090DD03A090DE03B090DF03DD -:1011F0006C197D098E099F0986169706A806B906FF -:1012000008F070CF8091DB030E94390885E01092CE -:10121000E103109203041092E003DF91CF911F913C -:101220000F91FF90EF90DF90CF90BF90AF909F9085 -:101230008F9008959D9191938F5F69CF85EEA5CF93 -:101240008091DC039091DD03A091DE03B091DF0378 -:10125000892B8A2B8B2B09F49ECF0E942D030091A2 -:10126000DC031091DD032091DE033091DF036C1964 -:101270007D098E099F09061717072807390708F007 -:101280008ACFC0CF81E0C3CF80E0C1CF82E0BFCFA3 -:1012900083E0BDCF089508950895E09104038091FF -:1012A0000303E81730F4F0E0ED51FD4F808190E04A -:1012B00008958FEF9FEF08959091040380910303A9 -:1012C0002FEF3FEF981748F4E92FF0E0ED51FD4F75 -:1012D000208130E09F5F90930403C90108958091BD -:1012E000030390910403891B990B0895CF92DF9219 -:1012F000EF92FF920F931F93CF93DF937C01CB016B -:101300008A012091E003222389F0EB016B01C40ED6 -:10131000D51ECC15DD0569F06991D701ED91FC91E1 -:101320000190F081E02DC7010995F3CF642F0E9451 -:10133000F407C801DF91CF911F910F91FF90EF90BB -:10134000DF90CF900895CF93DF931F92CDB7DEB794 -:1013500069832091E0032223F9F0209103042032D5 -:1013600058F021E030E0FC013383228390E080E0FC -:101370000F90DF91CF9108958091E103E82FF0E085 -:10138000EE51FC4F998190838F5F8093E1038093AE -:10139000030481E090E0ECCF61E0CE0101960E9471 -:1013A000F407F7CF90E080E00895DF92EF92FF928C -:1013B0000F931F93CF93DF93EC01D62E7A0189010F -:1013C00088818C3008F067C061E08D2D0E94CD02CD -:1013D0008881282F30E0F901EE0FFF1FE20FF31F85 -:1013E000E552FA4F9D2D9F736081607C692B60836D -:1013F00020E232E02E193F0937FF02C02D5F3F4F38 -:101400003595279535952795298320E639E0201BCA -:10141000310B37FF02C02D5F3F4F3595279535952E -:1014200027952A832CE0622F0E94421F829FB001E1 -:10143000112430E020E0AB01420F531FFA01EE0F00 -:10144000FF1FE40FF51FE552FA4F908196FD16C07D -:101450002F5F3F4F2C30310571F781110FC0109273 -:10146000800082E0809381001092850010928400B9 -:10147000B19A80916F00826080936F00E8818E2F17 -:1014800090E0FC01EE0FFF1FE80FF91FE552FA4F45 -:101490008081806480838881DF91CF911F910F913B -:1014A000FF90EF90DF900895CF938C30B0F421E05F -:1014B00030E0082E02C0220F331F0A94E2F7409159 -:1014C000970350919803672B51F42095309524236E -:1014D00035233093980320939703CF910895242BBD -:1014E000352B30939803209397039091E10291114B -:1014F000F4CFC82F0E940903BC018C2FCF910C940C -:10150000CE064F925F926F927F928F929F92AF9290 -:10151000BF92CF92DF92EF92FF920F931F93CF93E0 -:10152000DF93843008F0A3C08F5FC82FCC0FCC0F9F -:10153000CC0F4C2ECF3110F05EE1452ED62F38EF78 -:10154000532E5C0E852C912CC401880F991F9C0191 -:101550002F503B4F5901052DD12CC12C10E0772481 -:1015600073940415A8F5F601E80DF91DEC58FA4F2F -:1015700090819230B8F48D2F872166246394811175 -:1015800001C0612C7601EE0CFF1C913089F4172903 -:1015900031EAE30EF11CF501EE0DFF1D862D90E002 -:1015A00091838083770C0F5F8FEFC81AD80AD9CF49 -:1015B000882371F3F701EF55FF4FEA0DFB1D808182 -:1015C0009181019729F362E0802F0E94CD02E0CF44 -:1015D00010FF05C06D2F6170852D0E949F0211FFC5 -:1015E00006C06D2F627089EF8C0F0E949F0212FF60 -:1015F00006C06D2F64708AEF8C0F0E949F0213FF4C -:1016000006C06D2F68708BEF8C0F0E949F0214FF35 -:1016100006C06D2F60718CEF8C0F0E949F0215FF2A -:1016200006C06D2F60728DEF8C0F0E949F0216FF17 -:1016300006C06D2F60748EEF8C0F0E949F0217FF03 -:1016400016C06D2F60788FEF8C0FDF91CF911F91B7 -:101650000F91FF90EF90DF90CF90BF90AF909F9051 -:101660008F907F906F905F904F900C949F02DF91CE -:10167000CF911F910F91FF90EF90DF90CF90BF908F -:10168000AF909F908F907F906F905F904F90089554 -:101690008F929F92AF92BF92CF92DF92EF92FF9282 -:1016A0000F931F93CF93DF93EB018E3108F094C01B -:1016B000082F10E0F801EC58FA4F9081933009F4AC -:1016C00098C0943009F088C0F801E254FD4FC08002 -:1016D000D12C7601EE0CFF1C4B01603282E07807C2 -:1016E0000CF03EC0F701EC0DFD1DE050FA4F81817A -:1016F000A8E88A2E912C881A910887FD9394880C6B -:10170000991C880C991C092C000CAA08BB08828122 -:1017100028E532E0281B310987FD3395220F331F5E -:10172000220F331F032E000C440B550B28193909C7 -:101730004A095B09DB01653B710514F0A4EBB0E0DD -:10174000B7FF02C0B0E0A0E00E94091F24EB30E028 -:1017500040E050E00E94DF1E820E931EA41EB51EC4 -:10176000F701EC0DFD1DE050FA4F20812C3068F59B -:10177000318188E890E0831B910937FD9395880FAC -:10178000991F880F991F881699067CF0328188E589 -:1017900092E0831B910937FD9395880F991F880F5D -:1017A000991F881699060CF4C4010297880F991F97 -:1017B0004FB7F89430E0F901EE0FFF1FE20FF31F6F -:1017C000E552FA4F928381834FBF000F111FF8013A -:1017D000EE56FA4FD183C083DF91CF911F910F91C5 -:1017E000FF90EF90DF90CF90BF90AF909F908F9041 -:1017F0000895F82E83E0081759F08BEF800F8230A0 -:1018000038F087EF800F833018F08DE00813DDCFBC -:1018100061E08F2D0E94CD02209729F460E08F2D8A -:101820000E949F02D2CFCF3FD10511F461E0F7CFE4 -:10183000F801EB56FE4FE491E150EF3008F07CC028 -:10184000F0E0EB5DF34F0C944E1F340C390C3E0C62 -:10185000480C520C9C0C9C0C9C0C5C0C660C700C88 -:101860007A0C870C9C0C8F0C84B5806884BDC7BD36 -:10187000ACCF84B5806284BDC8BDA7CF8091800005 -:10188000806880938000D0938900C09388009DCFAA -:1018900080918000806280938000D0938B00C09301 -:1018A0008A0093CF80918000886080938000D093DD -:1018B0008D00C0938C0089CF8091900080688093C8 -:1018C0009000D0939900C09398007FCF80919000B2 -:1018D000806280939000D0939B00C0939A0075CF54 -:1018E00080919000886080939000D0939D00C09379 -:1018F0009C006BCF8091C00080688093C000809175 -:10190000C0008F7B8093C000C093CF005ECF8091DA -:10191000C00080628093C000C093D00056CF8091F9 -:10192000C20088608093C2008091C2008B7F809348 -:10193000C200C093D20049CFC038D1050CF076CF99 -:101940006DCF8E3180F4E82FF0E0DF01AC58BA4F54 -:101950009C91913041F4EE0FFF1FEE56FA4F6083D9 -:1019600071830C949F020895FF920F931F93CF935E -:10197000DF9300D0CDB7DEB7082F10E0F801E959AA -:10198000FC4F9081F62EF92204521D4F411104C0E4 -:10199000F80190819F1511F12F2D30E03A832983B2 -:1019A000A0913105B09132051097B1F0682F6F709A -:1019B0006069ED91FC9111970190F081E02DCD01CE -:1019C000099522E030E0AE014F5F5F4F62E070E0CA -:1019D00081E395E00E942F06F801F0820F900F90AE -:1019E000DF91CF911F910F91FF9008950F931F9357 -:1019F000CF93DF93843008F069C0282F30E0F901DD -:101A0000E559FC4F6083672B09F460C0082F295902 -:101A10003C4FF9011081D82FDD0FDD0FDD0FC12FF5 -:101A2000C17010FF07C08D2F0E947602C1E0892B84 -:101A300009F4C0E011FF07C081E08D0F0E9476021B -:101A4000892B09F0C26012FF07C082E08D0F0E944F -:101A50007602892B09F0C46013FF07C083E08D0F65 -:101A60000E947602892B09F0C86014FF07C084E049 -:101A70008D0F0E947602892B09F0C06115FF07C007 -:101A800085E08D0F0E947602892B09F0C062D83163 -:101A9000A1F016FF07C086E08D0F0E947602892B09 -:101AA00009F0C064D73149F017FF07C087E08D0FF8 -:101AB0000E947602892B09F0C06841E06C2F802FCC -:101AC000DF91CF911F910F910C94B40CDF91CF91C6 -:101AD0001F910F910895A82FB0E0A254BD4F9C9183 -:101AE000292F30E0F901EE0FFF1FE20FF31FE05046 -:101AF000FA4FE0812E2F30E0F901EE0FFF1FE20FC9 -:101B0000F31FE552FA4F80818F7B80838091BC0266 -:101B1000981308C0992319F091509093BC028FEF4D -:101B20008C9308958823D9F3E091BD02EF5FE09391 -:101B3000BD02F0E0E359FD4F9083F1CFFC0101902D -:101B40000020E9F73197BF01681B790BAC0181E7F1 -:101B50000C942E07CF93DF93DB019091BC029C3055 -:101B600078F53091BD02682F70E0FB01E254FD4F23 -:101B70003323E1F0C32FD0E0C359DD4F8881808348 -:101B800031503093BD02808123E0829FC001112437 -:101B900080509A4F1A161B0674F4141615065CF43E -:101BA0009A01AD01DF91CF910C94D50990839F5F8D -:101BB0009093BC02E8CF20E639E040E252E0F2CF59 -:101BC00082E591E0DF91CF910C949E0D85ED80939D -:101BD000BC008091DC039091DD03A091DE03B09105 -:101BE000DF030796A11DB11D23E0B695A795979534 -:101BF00087952A95D1F72091BC0024FD03C010924F -:101C0000DA0308954091DC035091DD036091DE0317 -:101C10007091DF03452B462B472B69F30097A105F5 -:101C2000B10541F02AE22A95F1F700C00197A10918 -:101C3000B109E1CF8091DB030C943908AF92BF92D8 -:101C4000CF92DF92EF92FF920F931F93CF93DF9388 -:101C5000C82ED12CE601CF50DB4FFE01ED57FF4FD0 -:101C600090819F3709F49BC07B01182F963069F44F -:101C70008091E002882349F06630710509F437C18C -:101C80001092E0028FEF80930C011E3110F584E07A -:101C9000E816F104F1F0F601E254FD4F80818C303A -:101CA000C0F490E0FC01EE0FFF1FE80FF91FE050B9 -:101CB000FA4FE0818E2F90E0FC01EE0FFF1FE80F3E -:101CC000F91FE552FA4F808186FF03C0812F0E94E1 -:101CD0006B0D0EEE010F0C3028F561E070E032E084 -:101CE000E316F10411F070E060E0802F0E94540AC6 -:101CF000E12FE695E695E695F0E0E959FC4F208165 -:101D0000312F377081E090E001C0880F3A95EAF7F3 -:101D1000E114F10421F03BE0E316F10419F5822B04 -:101D2000808302C01E3120F35601AA0CBB1CF501B2 -:101D3000EE56FA4F118210828CE0E816F10408F09A -:101D4000C8C0F701EA55F14F0C944E1FC30EEF0EB9 -:101D5000B50E060F270F690F5D0F690F690F690F29 -:101D6000CF0EDA0E80958223DBCF0C30C0F460E01A -:101D7000812F0E94CD02CD57DF4F88818F3779F0B8 -:101D800082E088830CC01E3150F460E0812F0E94F5 -:101D9000CD02CD57DF4F88818F3709F01882DF9150 -:101DA000CF911F910F91FF90EF90DF90CF90BF9058 -:101DB000AF9008951E3198F762E0812F0E94CD0206 -:101DC000CD57DF4F88818F3711F08BE08883F50185 -:101DD000EE56FA4F81E090E091838083E0CF1E3190 -:101DE000F0F6FE01ED57FF4F8081833021F460E073 -:101DF000812F0E949F0261E0812F0E94CD02CD576A -:101E0000DF4F88818F3759F281E0BBCF133059F013 -:101E10008BEF810F823038F087EF810F833018F01D -:101E20001D3009F0BCCF61E0812F0E94CD0261E03E -:101E3000812F0E94CD0260E0812F0E949F02CD572A -:101E4000DF4F88818F3709F4AACF83E09ACF1E3104 -:101E500008F0A5CFCD57DF4F88818F3711F084E090 -:101E60008883F601E254FD4F80818F3FA9F090E016 -:101E7000FC01EE0FFF1FE80FF91FE050FA4FE08161 -:101E80008E2F90E0FC01EE0FFF1FE80FF91FE552C7 -:101E9000FA4F808186FD83CF4FEF5FEF6FEF7FEFCB -:101EA000812FDF91CF911F910F91FF90EF90DF90E5 -:101EB000CF90BF90AF900C94AA0D1250123008F042 -:101EC0006ECFCD57DF4F88818F3709F468CF86E01A -:101ED00058CF86E691E0DF91CF911F910F91FF904F -:101EE000EF90DF90CF90BF90AF900C949E0D1E317D -:101EF00008F4D1CEEECE0F931F93CF93DF9381E002 -:101F00008093E1028091E002882329F01092E002A0 -:101F10008FEF80930C01EBE6F3E0C7E6D3E0ACED86 -:101F2000B2E0119219921D9283E0EF36F807C9F7DB -:101F30000EEB12E0C0E0DFEF8EEE8C0F62E070E09F -:101F40008C3010F061E070E08C2F0E941E0EF801C2 -:101F5000D1938F01CF5FCE3179F710929803109211 -:101F600097031092BD021092BC021092E102DF9121 -:101F7000CF911F910F9108954F925F926F927F9230 -:101F80008F929F92AF92BF92FF920F931F93CF9326 -:101F9000DF93F82E8B01D42FC22F6F3F760709F401 -:101FA00090C081E08093E003F09202041092E1037C -:101FB000109203048FEC95E00E94A3098C2F0E94DD -:101FC0005A088091BA029091BB028230910538F094 -:101FD000880F991F880F991F05970197F1F70E94A5 -:101FE0002D034B015C018091DA0381116CC0CD2F70 -:101FF000D13208F0C0E281E08093DA038093D90304 -:102000009FEF9093D8031092D7039C0F9093D60321 -:102010008093B5039091B5038F2D880F892B809302 -:10202000B5038091B403813009F0A1C01092B403CC -:102030000E942D034B015C018091B5038093BB008E -:102040008091DC039091DD03A091DE03B091DF036A -:10205000892B8A2B8B2BA1F00E942D034090DC034F -:102060005090DD036090DE037090DF0368197909FA -:102070008A099B09461657066806790608F444C083 -:102080008091BC0083FDD8CF85EC8093BC000E947A -:102090002D034B015C018091DA03813009F469C0A2 -:1020A0008091D7038C1710F4C091D703E6EBF3E0CF -:1020B000A3EEB2E080E08C1761F191919D938F5F68 -:1020C000FACF00E08CCF8091DC039091DD03A091EA -:1020D000DE03B091DF03892B8A2B8B2B09F483CF8E -:1020E0000E942D034090DC035090DD036090DE03DE -:1020F0007090DF03681979098A099B09461657060B -:102100006806790608F06FCF8091DB030E943908DA -:10211000C0E010920403C09303032D2F30E08C2FF6 -:1021200090E0281739070CF046C087E791E00E943D -:102130009E0DF0927A0200937B020AE712E0AD2E28 -:10214000B12CC8018A5792408A159B050CF041C0FA -:102150000F5F1F4F90910303809104039817C9F1FB -:102160008FEC95E00E945C09F8018183EACF85EE4F -:102170008CCF8091DC039091DD03A091DE03B091C0 -:10218000DF03892B8A2B8B2B09F485CF0E942D032B -:102190004090DC035090DD036090DE037090DF031D -:1021A000681979098A099B0946165706680679064F -:1021B00008F071CFA9CF821793070CF0BACF84E94A -:1021C00091E00E949E0DD091030380910403D81BDF -:1021D000B0CFDE5F6D2F70E04AE752E087E7DF9116 -:1021E000CF911F910F91FF90BF90AF909F908F90D4 -:1021F0007F906F905F904F900C942E07EF92FF921C -:102200000F931F93CF93DF938956823108F033C029 -:10221000EA01162FE82FF0E0E05FFE4E0C944E1F0F -:1022200052133B11BB123B1111133B1199123F1278 -:102230003B113B113B113B113B1122113B1103128E -:102240003B118312998195FF0AC080EB91E0DF91E9 -:10225000CF911F910F91FF90EF900C949E0D88816C -:1022600031E096FB222720F9232798719830D1F18D -:1022700048F49923A9F0DF91CF911F910F91FF901E -:10228000EF900895903109F44CC09831A1F7209156 -:102290000C0112160CF472C08FEF80930C01EBCF7F -:1022A0003093E003809302041092E1031092030440 -:1022B00002E0011778F4FE01E00FF11D61816795DE -:1022C000662767958081680F8FEC95E00E94A309CF -:1022D0000E5FEFCF81E00E945A0883E191E0019701 -:1022E000F1F7C9CF9A814B816630A1F430E8439F62 -:1022F000B0011124690F711D4D8147954427479501 -:102300009C81490FDF91CF911F910F91FF90EF902A -:102310000C94BC0F479544274795490F6FEF7FEF0B -:10232000F1CFE0910C01E7301CF080ED91E08FCF10 -:102330003A819B816630D9F460E8969FA001112410 -:10234000430F511D9D819795992797953C81930F38 -:10235000EF5FE0930C0135E0E302F0011124E15955 -:10236000FC4F8083528341839383248384CF97954A -:1023700099279795930F4FEF5FEFEACF90E0622F89 -:10238000022E000C770B35E0492F50E064177507DB -:1023900064F0349FF001359FF00D1124E159FC4F9A -:1023A0004081481719F09F5FEFCF90E085E0492FFB -:1023B00050E0641775071CF19830F8F4FA01319673 -:1023C0008E9FD0018F9FB00D1124A159BC4F3C911D -:1023D000849FF001859FF00D1124E159FC4F30835B -:1023E00011964D915C9112975283418313963C91C3 -:1023F0001397338314963C9134839F5FD8CF215039 -:1024000020930C0138CF623078F0898160E8869F94 -:10241000900111248881820F932F911D009721F044 -:102420009093BB028093BA028091E002811123CF86 -:10243000C0E08EEF8C0F823028F466E070E08C2FC5 -:102440000E941E0ECF5FCE31A1F781E08093E002A3 -:1024500010920403109203031092E10310920304FC -:102460000E941B088AE499E0909327038093260337 -:102470008BE499E090932B0380932A03FCCE653084 -:1024800008F4F9CE18811E3108F0F5CE0981EA80F2 -:10249000FB80CC81E12FF0E0E254FD4F80818C3055 -:1024A000C0F490E0FC01EE0FFF1FE80FF91FE050B1 -:1024B000FA4FE0818E2F90E0FC01EE0FFF1FE80F36 -:1024C000F91FE552FA4F808186FF03C0812F0E94D9 -:1024D0006B0D80E8C89FA00111244F0D511D90E89D -:1024E000E99EB0011124600F711D812F0E94AA0D79 -:1024F00064E070E0812FDF91CF911F910F91FF90E9 -:10250000EF900C941E0E623008F4B5CE8981E0E89D -:102510008E9F900111248881820F932F911D009727 -:1025200029F090930E0180930D01A5CE81E090E0FB -:10253000F8CF623008F49FCE698170E0123091F0DC -:102540008A81F0E88F9FC0011124682B792B13300A -:1025500049F08B8190E090E4899F902D8827112489 -:10256000682B792B8881DF91CF911F910F91FF907C -:10257000EF900C94480B80EF0E947F018CE60E9444 -:102580007F01C0E080E00E947F0181E00E947F0126 -:102590008BE00E947F0181E00E947F0181E00E9428 -:1025A0007F0181E00E947F018EEE8C0F8C3088F4D9 -:1025B00082E00E947F018AE00E947F018BEF8C0FF6 -:1025C000823048F087EF8C0F833028F0CD3049F40B -:1025D00002C0C33099F783E00E947F0188E00E9427 -:1025E0007F0184E00E947F018EE00E947F018EEFD8 -:1025F0008C0F823030F486E00E947F0181E00E94DF -:102600007F018FE70E947F01CF5FCE3109F0BACF03 -:1026100087EFDF91CF911F910F91FF90EF900C9476 -:102620007F01662309F427CEC88180EF0E947F01D5 -:102630008EE60E947F018C2F0E947F01CE3140F7F1 -:10264000D0E0FE01EC58FA4F80810E947F01CC0F50 -:10265000DD1F8E010E561A4FF80180818F770E9480 -:102660007F01F801808191819C012078232B39F032 -:10267000880F892F881F990B8F770E947F01CE5674 -:10268000DA4F888199819C012227307C232B09F421 -:10269000BFCF990F880B990F982F881F8F770E94B3 -:1026A0007F01B6CF80EF0E947F018AE60E947F0102 -:1026B000CEEE8FE7CC3008F48C2F0E947F01CF5FE5 -:1026C000CC30B9F7A5CF1F920F920FB60F921124FD -:1026D0002F933F938F939F93AF93BF9380919E03CC -:1026E00090919F03A091A003B091A10330919D030D -:1026F00023E0230F2D3758F50196A11DB11D20931E -:102700009D0380939E0390939F03A093A003B09397 -:10271000A1038091A2039091A303A091A403B0917F -:10272000A5030196A11DB11D8093A2039093A3035D -:10273000A093A403B093A503BF91AF919F918F91F4 -:102740003F912F910F900FBE0F901F90189526E884 -:10275000230F0296A11DB11DD2CF1F920F920FB66B -:102760000F9211248F939F938091E1009091E1004B -:10277000937F9093E10083FF0FC01092E90091E0F6 -:102780009093EB001092EC0092E39093ED00109286 -:10279000B30398E09093F00082FF22C093E09093FF -:1027A000E9009091F200992319F09AE39093E800E0 -:1027B00090915403992341F0909154039150909338 -:1027C0005403911101C05D9A9091B203992341F095 -:1027D0009091B20391509093B203911101C0289A45 -:1027E00084FF18C08091E2008E7E81608093E200B9 -:1027F0008091E1008F7E8093E100809155038E7E71 -:102800008061809355039F918F910F900FBE0F9021 -:102810001F90189580FFF7CF8091E2008E7E806137 -:102820008093E2008091E1008E7E8093E1008091B0 -:1028300055038E7E8160E5CF1F920F920FB60F92E7 -:102840001124CF92DF92EF92FF920F931F932F9359 -:102850003F934F935F936F937F938F939F93AF9328 -:10286000BF93EF93FF93CF93DF93CDB7DEB76C9712 -:10287000DEBFCDBF1092E9008091E80083FF25C044 -:1028800068E0CE0145960E94110482EF8093E80033 -:102890008D8987FF39C09091E80090FFFCCF982F79 -:1028A000907609F034C19E894F89588D2F89F88C14 -:1028B000911131C0803861F5809156038093F10009 -:1028C0001092F1008EEF8093E8006C960FB6F894AA -:1028D000DEBF0FBECDBFDF91CF91FF91EF91BF91D2 -:1028E000AF919F918F917F916F915F914F913F91A8 -:1028F0002F911F910F91FF90EF90DF90CF900F904D -:102900000FBE0F901F9018959EEF9093E800C7CFD1 -:102910001092F100D5CF913059F48111D3CF4130CD -:10292000510581F6809156038D7F80935603CACF5F -:10293000933049F48111C6CF4130510519F6809189 -:1029400056038260F2CF953041F48091E80080FF19 -:10295000FCCF20682093E300B5CF963009F0A9C0E2 -:102960000B8D1C8D22E01092E90010925203109200 -:102970005103F2122EC01092500310924F030E9486 -:10298000E0031F8299E09983FA8291E09E8390EAA6 -:1029900098879AEF99872091510330915203275FCE -:1029A0003F4F3C832B838D831092E900109252039A -:1029B000109251031093500300934F0349E050E0ED -:1029C000BE016F5F7F4F80E00E94BA030E94E00368 -:1029D00079CF1093500300934F030E941602DC013D -:1029E00012960D911C910115110509F451C1D801E0 -:1029F000ED91FC910480F581E02DBE016B5E7F4F6F -:102A0000C8010995009709F03EC1F80100851185BC -:102A1000EACFF3E0FF120EC08F89882309F440C08B -:102A2000823061F440E860E180E191E00E948B181F -:102A3000811148CF81E28093EB0047CF813029F4A8 -:102A400040E86BE084E091E0F1CF833099F70E9499 -:102A50001602DC011296ED90FC908E010F5F1F4F65 -:102A60006801E114F10479F0D701ED91FC91068041 -:102A7000F781E02DB801C7010995080F111DF70175 -:102A8000E084F184EECFD8011C92F6010190002081 -:102A9000E9F73197BF016C197D0940E0C601C6CF47 -:102AA0006EEE70E0FB01449150E080E80E94BA03B2 -:102AB00009CF973009F4BECF983021F481E080939C -:102AC000F10000CF993009F0FDCE837009F0B2CF4C -:102AD000E6E1F1E081E031E096E32191222371F01B -:102AE0008093E9003093EB00DF0111972C91209344 -:102AF000EC009093ED008F5F873079F78EE780933D -:102B0000EA001092EA008F898093B303DBCE8B8DAD -:102B10009C8D1092E90010925203109251039093F1 -:102B2000500380934F03898D811192C08E899D89B6 -:102B3000913A49F4813209F07DCF47E050E064E0FA -:102B400071E080E0B3CF913209F074CF833269F441 -:102B50008F89988DB0E0A0E08093000190930101EF -:102B6000A0930201B0930301ADCE803269F480914D -:102B7000E80082FFFCCF67E084E091E00E9411044E -:102B80008BEF8093E8009ECE823209F09BCE8F8936 -:102B900080930B01EEEFFFE7859194918B3F9C4D65 -:102BA00051F1E0E0F8E08091040190910501A091DD -:102BB0000601B0910701803B9440A105B105F1F4F5 -:102BC00080910B0180FD1AC0EE3F8AE0F80789F57D -:102BD00087E797E791838083809160008093530318 -:102BE00088E19BE00FB6F894A895809360000FBE33 -:102BF0009093600067CEEEEFFAE0D5CF80819181AF -:102C00008737974709F05ECEA8958091600088616C -:102C1000809360008091530380936000EE3F2AE030 -:102C2000F20789F08091FE0A9091FF0A91838083D8 -:102C300049CE808191818737980751F29093FF0A9E -:102C40008093FE0AC5CF1092FF0A1092FE0A3ACE78 -:102C50000E941602DC0112960D911C9101151105BE -:102C600009F4E8CED801ED91FC910190F081E02DBE -:102C7000BE016B5E7F4FC8010995811123CEF8011B -:102C800000851185EBCF181619060CF41BCED2CE99 -:102C9000F1E0FF12BECE62EF70E004CF1F920F9200 -:102CA0000FB60F9211242F933F934F935F936F931F -:102CB0007F938F939F93AF93BF93EF93FF9384E0A2 -:102CC00094E00E949C04FF91EF91BF91AF919F917E -:102CD0008F917F916F915F914F913F912F910F90C5 -:102CE0000FBE0F901F9018951F920F920FB60F9264 -:102CF00011242F938F939F93EF93FF93E0911404EC -:102D0000F09115048081E0911A04F0911B0482FD7A -:102D10001BC0908180911D048F5F8F7320911E04D2 -:102D2000821741F0E0911D04F0E0EC5FFB4F958FBE -:102D300080931D04FF91EF919F918F912F910F90A0 -:102D40000FBE0F901F9018958081F4CF1F920F92A5 -:102D50000FB60F9211240F900FBE0F901F90189571 -:102D60001F920F920FB60F9211242F933F934F9300 -:102D70005F936F937F938F939F93AF93BF93EF93E3 -:102D8000FF938091B900887F803609F44AC0F0F53E -:102D9000883209F4A7C018F5803109F49BC0B8F453 -:102DA000882309F4F9C0883009F494C0FF91EF91A9 -:102DB000BF91AF919F918F917F916F915F914F9153 -:102DC0003F912F910F900FBE0F901F901895883153 -:102DD00009F488C0803251F78093D80314C080343E -:102DE00009F49DC040F48033B9F38833F9F6809339 -:102DF000D80385ECB0C0803509F485C0883509F466 -:102E000096C0883499F60E94E60DD0CF883909F42F -:102E10008CC038F5883729F050F4883611F08037A7 -:102E200029F683E08093DA0310924C0357C0883868 -:102E300009F47BC0803919F0803809F0B7CF809150 -:102E40004C03803208F071C0E0914C0381E08E0F9A -:102E500080934C038091BB00F0E0E45DFC4F8083E5 -:102E60003DC0803B39F0E0F4803A09F479C0883AFB -:102E700009F09CCF84E08093DA031092290310922A -:102E80002803E0912603F0912703099580912803F8 -:102E900081110FC081E0809328031092060309C0BE -:102EA000803C09F4A6CF883C09F4A3CF883B09F005 -:102EB0007DCFE091290381E08E0F80932903F0E01C -:102EC000EA5FFC4F80818093BB0090912903809141 -:102ED000280329C08091B5038093BB0085EC8093C3 -:102EE000BC0064CF9091D7038091D603981758F512 -:102EF000E091D70381E08E0F8093D703F0E0EA548E -:102F0000FC4F8081E9CFE091D70381E08E0F809361 -:102F1000D7038091BB00F0E0EA54FC4F808390918E -:102F2000D7038091D6039817C8F285E8D8CFE091EF -:102F3000D70381E08E0F8093D7038091BB00F0E030 -:102F4000EA54FC4F80838091D90381115CCF81E0EA -:102F50008093B40384EA8093BC001092DA0326CFF6 -:102F600085EC8093BC001092DA0380914C03803290 -:102F700030F4E0914C03F0E0E45DFC4F108260918E -:102F80004C0370E0E0912A03F0912B038CE293E074 -:102F9000099510924C030ACF1092D80334CF1F9298 -:102FA0000F920FB60F9211242F933F934F935F937D -:102FB0006F937F938F939F93AF93BF93CF93DF9341 -:102FC000EF93FF938091E202C091FF05D0E087FF6D -:102FD00024C010928500109284008091E2028F5FDD -:102FE0008093E2028091E202082E000C990B8C176C -:102FF0009D0724F48091E2028C30C4F1809184001A -:1030000090918500049680349C4908F47AC08091A0 -:10301000840090918500049676C08091E202082E8B -:10302000000C990B8C179D07C4F6E091E2028E2FDD -:10303000EE0F990BFC01EE0FFF1FE80FF91FE55291 -:10304000FA4F808186FFC9CFE091E2028E2FEE0F0A -:10305000990BFC01EE0FFF1FE80FF91FE552FA4F25 -:10306000808160E08F730E949F02B7CF209184001F -:1030700030918500E091E2028E2FEE0F990BFC015A -:10308000EE0FFF1FE80FF91FE552FA4F8181928181 -:10309000820F931F9093890080938800E091E20251 -:1030A0008E2FEE0F990BFC01EE0FFF1FE80FF91F9B -:1030B000E552FA4F808186FF11C0E091E2028E2F27 -:1030C000EE0F990BFC01EE0FFF1FE80FF91FE55201 -:1030D000FA4F808161E08F730E949F02FF91EF9110 -:1030E000DF91CF91BF91AF919F918F917F916F9120 -:1030F0005F914F913F912F910F900FBE0F901F90B6 -:10310000189580E49CE990938900809388008FEF64 -:103110008093E202E3CFEF92FF920F931F93CF933E -:10312000DF93F82E192FE62E042F81E0860F880FEB -:103130000E948C0383E00E948C03CF2DD12FEC0ED4 -:10314000FD2EF11CCE15DF05B9F007FF13C0FE01FF -:1031500084910E948C03182F80E00E948C038123AD -:1031600021968111EFCFDF91CF911F910F91FF90A9 -:10317000EF9008958881EDCF81E0F5CF109207049C -:103180001092060488EE93E0A0E0B0E0809308047B -:1031900090930904A0930A04B0930B0420E231E059 -:1031A00030930504209304042DEC30E03093110497 -:1031B000209310042CEC30E030931304209312047D -:1031C00028EC30E0309315042093140429EC30E00F -:1031D00030931704209316042AEC30E0309319043E -:1031E000209318042EEC30E030931B0420931A0433 -:1031F00010921D0410921E0410921F0410922004BD -:103200001092A4041092A3048093A5049093A604A2 -:10321000A093A704B093A80422E331E03093A20462 -:103220002093A1042FEF3FEF3093AE042093AD0421 -:1032300021EF34E0109232051092310530933505BC -:103240002093340540E450E0509337054093360511 -:10325000109238051092390510923B0510923A05EC -:1032600010923C0510923E0510923D0510924005CB -:1032700010923F05109242051092410510924405AC -:10328000109243051092460510924505109248058C -:103290001092470510924A05109249051092500568 -:1032A00010924F051092520510925105109254053C -:1032B0001092530510925605109255051092640510 -:1032C00010926305109233051092710510927305E8 -:1032D000109272051092CE0545E051E050935805CA -:1032E000409357054FE051E050935A0540935905DC -:1032F00049E151E050935C0540935B0543E251E0A6 -:1033000050935E0540935D054DE251E0509360059A -:1033100040935F0547E351E0509362054093610598 -:1033200041E451E0509366054093650542E451E065 -:1033300050936805409367054FEE57E050936A0538 -:103340004093690530934C0520934B0545E853E0C5 -:1033500050936C0540936B0530934E0520934D05BB -:103360002DE431E030936E0520936D051092D20567 -:103370001092D1058093D3059093D405A093D505E1 -:10338000B093D60584E491E09093D0058093CF0567 -:10339000E0E0F6E02FEF48EB5BE08091FF058C303A -:1033A000B8F491E0980F9093FF05808390E0DC01E2 -:1033B000AA0FBB1FA80FB91FA552BA4F12965C9354 -:1033C0004E931197339686E0E432F80731F708956B -:1033D0002083F8CF789484B5826084BD84B5816001 -:1033E00084BD85B5826085BD85B5816085BD8091D0 -:1033F0006E00816080936E00109281008091810048 -:10340000826080938100809181008160809381003F -:103410008091800081608093800080919100826023 -:1034200080939100809191008160809391008091C0 -:1034300090008160809390008091C10084608093AF -:10344000C1008091C10082608093C1008091C10061 -:1034500081608093C1008091C30081608093C3002C -:103460008091C00082608093C0008091C200816022 -:103470008093C20080917A00846080937A0080916A -:103480007A00826080937A0080917A0081608093D4 -:103490007A0080917A00806880937A001092B3035A -:1034A00010925603109255038091D700816080934B -:1034B000D70080EA8093D80089B5806189BD89B53D -:1034C000826089BD09B400FEFDCF61E070E080E05C -:1034D00090E00E9452038091D8008F7C806180939D -:1034E000D8008091E000807F8093E0008091E1002F -:1034F0008E7E8093E1008DE08093E200559A209AC1 -:1035000085E18093710580917205909173050E9409 -:10351000F01FC0917105D0E0CE0101960E94541FAA -:103520009093730580937205FC01EC0FFD1F1082D0 -:1035300022E0DC012C9325E011962C93AE01425041 -:1035400051096AE572E002960E94792088E49BE0C6 -:10355000909362038093610381E89AE09093600303 -:1035600080935F0384E59AE090935E0380935D030C -:1035700086EF9CE090935C0380935B038EE19EE07A -:1035800090935A038093590381EA9CE090935803E7 -:10359000809357038EEF90E19093640380936303CD -:1035A0008BE79FE090936603809365038FEF9FEF17 -:1035B0009093AE048093AD048091CE0581114FC0ED -:1035C00061E08DE00E94CD0262ED70E080E090E06D -:1035D0000E94520361E08DE00E949F0268E270E069 -:1035E00080E090E00E94520360E08DE00E949F0224 -:1035F00062ED70E080E090E00E94520361E08DE0B7 -:103600000E949F0268E270E080E090E00E94520316 -:1036100060E08DE00E949F026AEF70E080E090E041 -:103620000E945203C5E062ED70E080E090E00E94ED -:10363000520361E08DE00E949F0268E270E080E04A -:1036400090E00E94520360E08DE00E949F02C15012 -:1036500051F76DE770E080E090E00E94520381EA4C -:1036600094E09093700580936F059093320580935A -:10367000310581E395E00E94550181EF94E00E94BD -:103680007B07C0910B016AE070E080E090E00E944F -:103690005203CC23B1F30E947B0FD5E000E010E091 -:1036A000BB24B39492E0E92EF12CCC24C394D12C0A -:1036B00080916B03882309F44AC0A0906703CA2D48 -:1036C000C170A0FE07C080E00E947602C1E0892B95 -:1036D00009F4C0E0A1FE06C081E00E947602892BB9 -:1036E00009F0C260A2FE06C082E00E947602892B29 -:1036F00009F0C460A3FE06C083E00E947602892B15 -:1037000009F0C860A4FE06C084E00E947602892BFE -:1037100009F0C061A5FE06C085E00E947602892BF3 -:1037200009F0C062A6FE06C086E00E947602892BE0 -:1037300009F0C064A7FE06C087E00E947602892BCC -:1037400009F0C06840E06C2F80E00E94B40C8091CA -:103750006C03882309F44AC0A0906803CA2DC17085 -:10376000A0FE07C088E00E947602C1E0892B09F420 -:10377000C0E0A1FE06C089E00E947602892B09F014 -:10378000C260A2FE06C08AE00E947602892B09F080 -:10379000C460A3FE06C08BE00E947602892B09F06C -:1037A000C860A4FE06C08CE00E947602892B09F056 -:1037B000C061A5FE06C08DE00E947602892B09F04B -:1037C000C062A6FE06C08EE00E947602892B09F038 -:1037D000C064A7FE06C08FE00E947602892B09F024 -:1037E000C06840E06C2F81E00E94B40C80916D03B2 -:1037F000882309F44AC0A0906903CA2DC170A0FEB5 -:1038000007C080E10E947602C1E0892B09F4C0E084 -:10381000A1FE06C081E10E947602892B09F0C260F8 -:10382000A2FE06C082E10E947602892B09F0C460E4 -:10383000A3FE06C083E10E947602892B09F0C860CE -:10384000A4FE06C084E10E947602892B09F0C061C3 -:10385000A5FE06C085E10E947602892B09F0C062B0 -:10386000A6FE06C086E10E947602892B09F0C0649C -:10387000A7FE06C087E10E947602892B09F0C06886 -:1038800040E06C2F82E00E94B40C80916E0388238C -:10389000D1F1A0906A03CA2DC170A0FE07C088E1D3 -:1038A0000E947602C1E0892B09F4C0E0A1FE06C0A7 -:1038B00089E10E947602892B09F0C260A2FE06C04F -:1038C0008AE10E947602892B09F0C460A3FE06C03B -:1038D0008BE10E947602892B09F0C860A4FE06C025 -:1038E0008CE10E947602892B09F0C061A5FE06C01A -:1038F0008DE10E947602892B09F0C06240E06C2FB6 -:1039000083E00E94B40C80916F0590917005DC01FA -:10391000ED91FC910084F185E02D0995892B09F446 -:10392000CEC180916F0590917005DC01ED91FC9105 -:103930000284F385E02D09959C018F3F980719F3C8 -:10394000982F80913C05882309F492C0973F09F095 -:103950007EC010923C05A0913405B09135056C9164 -:103960006137C1F1693709F05CC0E0916905F091F8 -:103970006A05309741F280913D0590913E05833074 -:10398000910560F430E020E050E040E070E060E05D -:1039900080914B0590914C050995B5CFBD016D5FA8 -:1039A0007F4F03970E94BC01BC016D5F7F4F80E099 -:1039B0000E948C01E0913405F09135059F012D5F47 -:1039C0003F4F428150E0618170E0E0916905F091E4 -:1039D0006A05DECF8091650590916605892B09F413 -:1039E00092CFBD016F5F7F4F80913D0590913E0565 -:1039F00001970E94BC01BC016F5F7F4F80E00E9475 -:103A00008C0160913405709135056F5F7F4FE091B7 -:103A10006505F091660580915105909152050995D3 -:103A200072CFE0916705F0916805309709F46BCF8C -:103A30009D012F5F3F4F40913D0550913E05415004 -:103A40005109809153059091540509955CCF60917F -:103A50003D0570913E05822F0E948C0180913D05AD -:103A600090913E05019690933E0580933D054BCF86 -:103A700060913A0570913B056115710509F4B1C07B -:103A800027FDAFC06150710970933B0560933A0503 -:103A9000822F0E948C0180913A0590913B05892BE1 -:103AA00009F031CF80913805882309F42CCF803D6F -:103AB00009F483C040F4803949F1803C09F469C0BD -:103AC0001092380520CF843FE1F1853F09F44DC0C5 -:103AD000803EB1F7E0915705F0915805309781F39A -:103AE000A0913405B09135054C9120E8429FC0016A -:103AF000112411964C91480F592F511D6091390591 -:103B000080913F05909140050995DACFE0915905E4 -:103B1000F0915A053097A1F2A0913405B091350586 -:103B20004C9120E8429FC001112411964C91480FFE -:103B3000592F511D609139058091410590914205A1 -:103B4000E3CFE0915F05F0916005309709F4B8CFBD -:103B5000A0913405B09135054C9150E011966C91CF -:103B60008091470590914805CFCFE0916105F09194 -:103B70006205309709F4A4CFA0913405B0913505C2 -:103B80004C9150E011966C918091490590914A05B5 -:103B9000BBCFE0915B05F0915C05309709F490CFC5 -:103BA000A0913405B09135054C9150E060913905F4 -:103BB0008091430590914405A7CFE0915D05F09178 -:103BC0005E05309709F47CCFA0913405B09135059E -:103BD0004C9150E0609139058091450590914605E2 -:103BE00093CF903F30F4822F8F7080933905922FBE -:103BF000907F903FF1F190F4903CB1F150F4903906 -:103C000009F081CEF0923B05E0923A059093380599 -:103C10007ACE903D49F1903EA9F375CE993F09F4D3 -:103C200042C028F48CE0890F823060F36CCE9F3F55 -:103C300009F069CE10923B0510923A0510923805B2 -:103C40001092390590E080E02091360530913705DB -:103C500082179307A8F4E0913405F0913505E80F39 -:103C6000F91F10820196F0CFD0923B05C0923A0521 -:103C7000CDCFB0923C0510923E0510923D0543CE4B -:103C800010923C0510923E0510923D05E0916D05A5 -:103C9000F0916E058091550590915605309709F485 -:103CA00032CE099530CEE0916B05F0916C053097DE -:103CB00009F429CE80914D0590914E05F2CF8FB732 -:103CC000F89440909E0350909F036090A0037090E2 -:103CD000A1038FBF8091990390919A03A0919B03B8 -:103CE000B0919C0340910D0150910E0170E060E095 -:103CF000481A590A6A0A7B0A44155505660577056C -:103D000008F051C0840F951FA61FB71F8093990319 -:103D100090939A03A0939B03B0939C0381EF882E0A -:103D200084E0982ECEEECC30C8F4F401ED57FF4F6E -:103D30008081823099F480919703909198030C2EA2 -:103D400002C0959587950A94E2F780FF07C08C2FF3 -:103D50000E940903BC018C2F0E94CE06CF5F8FEF1B -:103D6000881A980ACC30F9F680910C0187FD1BC0A7 -:103D7000C0E02C2F30E080910C01082E000C990B34 -:103D80008217930784F0D29FF001D39FF00D112486 -:103D9000E159FC4F618172812481438180810E94BD -:103DA000BC0FCF5FE6CF0115110509F481CC0E944D -:103DB0008804882309F47CCC0E94000079CC052E6D -:103DC00097FB1EF400940E94F61E57FD07D00E9438 -:103DD000111F07FC03D04EF40C94F61E509540952D -:103DE000309521953F4F4F4F5F4F089590958095A7 -:103DF000709561957F4F8F4F9F4F08950E94331F9D -:103E0000A59F900DB49F900DA49F800D911D11242E -:103E10000895B7FF0C94FE1E0E94FE1E821B930B9A -:103E20000895A1E21A2EAA1BBB1BFD010DC0AA1FFB -:103E3000BB1FEE1FFF1FA217B307E407F50720F013 -:103E4000A21BB30BE40BF50B661F771F881F991F8E -:103E50001A9469F760957095809590959B01AC01D7 -:103E6000BD01CF010895A29FB001B39FC001A39FE0 -:103E7000700D811D1124911DB29F700D811D1124A3 -:103E8000911D0895991B79E004C0991F961708F0B9 -:103E9000961B881F7A95C9F780950895EE0FFF1F2E -:103EA0000590F491E02D09940F931F93CF93DF9326 -:103EB0008230910510F482E090E0E0912606F091C6 -:103EC000270630E020E0B0E0A0E0309799F421151B -:103ED000310509F44AC0281B390B24303105D8F5C7 -:103EE0008A819B816115710589F1FB01938382832E -:103EF000FE0111C040815181028113814817590789 -:103F0000E0F04817590799F4109761F012960C9356 -:103F1000129713961C933296CF01DF91CF911F9188 -:103F20000F9108950093260610932706F4CF2115CC -:103F3000310551F04217530738F0A901DB019A010E -:103F4000BD01DF01F801C1CFEF01F9CF9093270642 -:103F500080932606CDCFFE01E20FF31F819391934C -:103F60002250310939832883D7CF209124063091FC -:103F70002506232B41F42091110130911201309339 -:103F800025062093240620910F0130911001211560 -:103F9000310541F42DB73EB7409113015091140102 -:103FA000241B350BE0912406F0912506E217F30758 -:103FB000A0F42E1B3F0B2817390778F0AC014E5F99 -:103FC0005F4F2417350748F04E0F5F1F50932506AB -:103FD00040932406819391939FCFF0E0E0E09CCF43 -:103FE000CF93DF930097E9F0FC013297138212829E -:103FF000A0912606B0912706ED0130E020E0109751 -:10400000A1F420813181820F931F209124063091E9 -:1040100025062817390709F061C0F0932506E093BB -:104020002406DF91CF910895EA01CE17DF07E8F566 -:104030004A815B819E0141155105B1F7E901FB837E -:10404000EA8349915991C40FD51FEC17FD0761F41C -:10405000808191810296840F951FE901998388835D -:10406000828193819B838A83F0E0E0E012968D91B8 -:104070009C9113970097B9F52D913C911197CD0123 -:104080000296820F931F209124063091250628174F -:10409000390739F6309751F5109227061092260607 -:1040A000B0932506A0932406BCCFD383C28340815E -:1040B0005181840F951FC817D90761F44E5F5F4F78 -:1040C00088819981480F591F518340838A819B8140 -:1040D000938382832115310509F0B0CFF093270631 -:1040E000E09326069ECFFD01DC01C0CF1382128231 -:1040F000D7CFFB01DC014150504048F001900D92B8 -:104100000020C9F701C01D9241505040E0F70895CA -:04411000F894FFCF51 -:10411400FFFFFFFF00E1000000000000FF130000AC -:10412400002806800000C18081000000000000001B -:10413400BD041E044B0409057C045A046E040000EB -:104144000000AE052905CF05C4051506D305F10504 -:1041540000000000A3097609D2094C096F095C0923 -:104164004D094D617820736572766F7320617474A4 -:10417400616368656400556E6B6E6F776E2070695D -:104184006E206D6F6465004932433A20546F6F208E -:104194006D616E79206279746573207265636569F7 -:1041A400766564004932433A20546F6F2066657720 -:1041B400206279746573207265636569766564004D -:1041C40031302D6269742061646472657373696E41 -:1041D40067206E6F7420737570706F7274656400FD -:1041E400746F6F206D616E79207175657269657386 -:1041F400002F707269766174652F7661722F666F15 -:104204006C646572732F6C6A2F3766706C38335F19 -:1042140073377778336436646A6C675F77327967AB -:104224006D3030303067702F542F2E617264756991 -:104234006E6F4944452D756E736176656432303214 -:1042440034313131392D31353738332D316F376EC3 -:104254007834372E39636A686A2F5374616E6461E7 -:1042640072644669726D6174612F5374616E646126 -:0E42740072644669726D6174612E696E6F002E -:00000001FF diff --git a/apps/electron-app/hex/mega/StandardFirmata.cpp.hex b/apps/electron-app/hex/mega/StandardFirmata.cpp.hex deleted file mode 100644 index fc9bb13d..00000000 --- a/apps/electron-app/hex/mega/StandardFirmata.cpp.hex +++ /dev/null @@ -1,1088 +0,0 @@ -:100000000C94B3010C94E4010C94E4010C94E4010D -:100010000C94E4010C94E4010C94E4010C94E401CC -:100020000C94E4010C948D150C948D150C948D1585 -:100030000C94E4010C94E4010C94E4010C94E401AC -:100040000C94E4010C9445170C94E4010C94E40125 -:100050000C94E4010C94E4010C94E4010C94F3136B -:100060000C94E4010C9463150C9439150C94E40180 -:100070000C94E4010C94E4010C94E4010C94E4016C -:100080000C9417170C94E4010C94E4010C94E40113 -:100090000C940F150C94E5140C94E4010C94971532 -:1000A0000C94E4010C94E4010C94E9160C94E40122 -:1000B0000C94E4010C94E4010C94E4010C94BB1640 -:1000C0000C94E4010C94E4010C94E4010C94BB1432 -:1000D0000C9491140C94E4010C9467140C943D144A -:1000E0000C94E4010C94F0010C94BC0C0C94540F8F -:1000F0000C941B0D0C9435090C941B030C94D20822 -:100100000C94CA110C94AC0C0C94840C0C94040246 -:100110000C94E4020C94B1110C94AE080C946C0F86 -:100120000C94600F0C9487040C941F030C9404101F -:100130000C94DA020C94A80E0C94A20C0C94E90C0A -:100140000C94B40C0C94CE120C944C050C94FA0143 -:100150000C94070D0C94780D0C94890C0C944C1392 -:100160000C9414130C94E8020C9473170C940D0364 -:100170000C940E020C9403030C94B20F0C94230203 -:100180000C948E0C0C948B110C942E020C94E21394 -:100190000C94F30C0C94110D0C94E6010C94200DAE -:1001A0000C94E0020C94F9020C94E90F0C94F50FF6 -:1001B0000C94AD080C94D00C0C94A9040C94EF0290 -:1001C0000C94CA0A0C94B0080C9418020C94AF0852 -:1001D0000C9422020C94FF020C94DA0C0C9452073B -:1001E0000C94BF080C949D0A0C94FD0C0C94110304 -:1001F0000C94430F0C94EC020C942A130C943204CC -:100200000C94C60C0C949B040C94810F0C94150355 -:100210000C94FF040C94950B0C94A1130C9478048B -:100220000C94980F0C941A030C94980C0C94D90805 -:100230000C9407030C9406090C942B040C94F502FF -:100240000C94921200002100240027002A002D00A7 -:100250003000330001010000040107010A01000021 -:100260002200250028002B002E003100340002015E -:100270000000050108010B010000200023002600FA -:1002800029002C002F0032000001000003010601AC -:10029000090105050505070508080808020202020C -:1002A0000A0A080804040404010101010101010112 -:1002B0000303030303030303040707070C0C0C0CDD -:1002C0000C0C0C0C020202020606060606060606C6 -:1002D0000B0B0B0B0B0B0B0B010210202008081053 -:1002E00020401020408002010201080402010102A6 -:1002F000040810204080804020100804020180047F -:1003000002018040201008040201080402010102D9 -:1003100004081020408001020408102040800000E2 -:100320000A0B02090C0D0E0807030401000000006F -:1003300000000000000000000000000000000000BD -:10034000000000000000000000001211100000007A -:10035000000000000000000000000000000000009D -:1003600000000000731711241FBECFEFD1E2DEBFE3 -:10037000CDBF00E00CBF13E0A0E0B2E0EEE9F2E494 -:1003800000E00BBF02C007900D92AA34B107D9F765 -:100390002AE0AAE4B3E001C01D92A332B207E1F75C -:1003A00011E0C3EBD1E000E006C021970109802FE6 -:1003B000FE010E941120C23BD10780E00807A9F787 -:1003C0000E943B190C944D210C940000862FE09163 -:1003D0008904F0918A04309711F0BA0119940895B4 -:1003E000862FE0918704F0918804309711F0BA01CC -:1003F00019940895862FE0918504F0918604309732 -:1004000011F0BA0119940895862FE0918304F091B8 -:100410008404309711F0BA0119940895862FE09161 -:100420008104F0918204309711F0BA011994089573 -:10043000862FE0917F04F0918004309711F0BA018B -:10044000199408950895862F642FE0918B04F091FC -:100450008C04309711F0A90119940895E0918D044E -:10046000F0918E04309709F019940895CF93DF939B -:10047000FC01A081B181109701F1EC01ED91FC919B -:1004800011970190F081E02D69EFCD0119958881D8 -:100490009981DC01ED91FC910190F081E02D62E009 -:1004A000199588819981DC01ED91FC910190F08191 -:1004B000E02D65E0DF91CF911994DF91CF91089500 -:1004C000A0911A08B0911B08ED91FC911197019031 -:1004D000F081E02D682FCD0119941F93CF93DF9306 -:1004E000182FEB018091E1079091E20768177907D7 -:1004F00060F48091DF079091E007C80FD91F18833F -:1005000080E0DF91CF911F910895E0910E08F09166 -:100510000F08309711F481E0F4CF81E08093DE077B -:100520008091FA079091FB0719958091E1079091CE -:10053000E207C817D90778F7DCCFCF93DF93EC0138 -:10054000FB0130E020E0C901880F991F8C179D073F -:1005500078F44081DB014D93BD011197918197950E -:1005600099279795942B9C932F5F3F4F3296EBCF13 -:10057000C901DF91CF9108958150823108F05AC0AE -:10058000E82FF0E08827E853FD4F8F4F0C9411209F -:10059000E802EC02DA02E002E4021A03EF02F502DA -:1005A000F902FF02030307030D0311031A031503E6 -:1005B0001B031F03809180008F7780938000089534 -:1005C000809180008F7DF9CF80918000877FF5CF6B -:1005D00084B58F7784BD089584B58F7DFBCF8091DE -:1005E000B0008F778093B00008958091B0008F7D28 -:1005F000F9CF809190008F7780939000089580913B -:1006000090008F7DF9CF80919000877FF5CF80910A -:10061000A0008F778093A00008958091A0008F7D27 -:10062000F9CF8091A000877FF5CF809120018F774F -:10063000809320010895809120018F7DF9CF8091D2 -:100640002001877FF5CFCF93DF93282F30E0F9018A -:10065000E25EFC4F8491F901E852FD4FD491F9011B -:10066000EE56FD4FC491CC23A1F081110E94BC0233 -:10067000EC2FF0E0EE0FFF1FE858FD4FA591B4916D -:10068000EC91ED2381E090E009F480E0DF91CF91DF -:10069000089580E090E0FACF1F93CF93DF93282F47 -:1006A00030E0F901E25EFC4F8491F901E852FD4F20 -:1006B000D491F901EE56FD4FC491CC23A9F0162F29 -:1006C00081110E94BC02EC2FF0E0EE0FFF1FE25AF6 -:1006D000FD4FA591B4918FB7F894EC91111108C01A -:1006E000D095DE23DC938FBFDF91CF911F910895CA -:1006F000DE2BF8CFCF93DF9390E0FC01E852FD4F63 -:1007000024918E569D4FFC0184918823C9F090E07E -:10071000880F991FFC01EC5BFD4FA591B491FC0182 -:10072000E25AFD4FC591D49161110DC09FB7F89465 -:100730008C91209582238C938881282328839FBFC6 -:10074000DF91CF910895623051F49FB7F8943C91B6 -:10075000822F809583238C93E8812E2BEFCF8FB748 -:10076000F894EC912E2B2C938FBFEACF863308F0B0 -:10077000865320917B00982F9870277F922B90931F -:100780007B008770806480937C0080917A00806415 -:1007900080937A0080917A0086FDFCCF809178006A -:1007A0009091790008953FB7F8948091D404909186 -:1007B000D504A091D604B091D70426B5A89B05C056 -:1007C0002F3F19F00196A11DB11D3FBFBA2FA92FD0 -:1007D000982F8827BC01CD01620F711D811D911DCD -:1007E00042E0660F771F881F991F4A95D1F7089539 -:1007F0008F929F92AF92BF92CF92DF92EF92FF9231 -:100800006B017C010E94D3034B015C01C114D10434 -:10081000E104F104B9F00E94D303681979098A0947 -:100820009B09683E73408105910580F321E0C21A5F -:10083000D108E108F10888EE880E83E0981EA11C1B -:10084000B11CE4CFFF90EF90DF90CF90BF90AF90BE -:100850009F908F900895009721F0805C9F4F0C949B -:1008600036020895AF92BF92CF92DF92EF92FF923D -:100870000F931F93CF93DF936C017B018B01040FC8 -:10088000151FEB015E01AE18BF08C017D10759F064 -:100890006991D601ED91FC910190F081E02DC601A6 -:1008A0001995892B79F7C501DF91CF911F910F9190 -:1008B000FF90EF90DF90CF90BF90AF900895FC0134 -:1008C000A089B1898C91A689B78982FD0FC09C91BE -:1008D000818D8F5F8F73228D821749F0A18DAE0FAE -:1008E000BF2FB11D5D969C93818F08958C910895C3 -:1008F000FC01538D448D252F30E0842F90E0821B26 -:10090000930B541710F0CF96089501970895FC01AA -:10091000918D828D981761F0A28DAE0FBF2FB11D02 -:100920005D968C91928D9F5F9F73928F90E008955A -:100930008FEF9FEF0895FC01918D828D981731F014 -:10094000828DE80FF11D858D90E008958FEF9FEF68 -:100950000895FC01918D228D892F90E0805C9F4F3E -:10096000821B91098F739927089588E295E00E9470 -:10097000A90421E0892B09F420E0822F089585EC59 -:1009800095E00E94A90421E0892B09F420E0822F40 -:10099000089582E696E00E94A90421E0892B09F4DB -:1009A00020E0822F08958FEF96E00E94A90421E0B5 -:1009B000892B09F420E0822F0895FC01A48DA80F53 -:1009C000B92FB11DA35ABF4F2C91848D90E0019691 -:1009D0008F739927848FA689B7892C93A089B189B1 -:1009E0008C91837080648C93938D848D981306C052 -:1009F0000288F389E02D80818F7D80830895EF92B6 -:100A0000FF920F931F93CF93DF93EC0181E0888FC8 -:100A10009B8D8C8D98131AC0E889F989808185FF98 -:100A200015C09FB7F894EE89FF896083E889F9893A -:100A300080818370806480839FBF81E090E0DF913C -:100A4000CF911F910F91FF90EF900895F62E0B8D8F -:100A500010E00F5F1F4F0F731127E02E8C8D8E114A -:100A60000CC00FB607FCFACFE889F989808185FFB1 -:100A7000F5CFCE010E94DD04F1CFEB8DEC0FFD2F01 -:100A8000F11DE35AFF4FF0829FB7F8940B8FEA896C -:100A9000FB8980818062CFCFCF93DF93EC01888D7B -:100AA0008823B9F0AA89BB89E889F9898C9185FDE9 -:100AB00003C0808186FD0DC00FB607FCF7CF8C9177 -:100AC00085FFF2CF808185FFEDCFCE010E94DD044E -:100AD000E9CFDF91CF91089580E090E0892B29F054 -:100AE0000E94D30481110E94000080E090E0892BD5 -:100AF00029F00E94C90481110E94000080E090E06A -:100B0000892B29F00E94BF0481110E94000080E01F -:100B100090E0892B29F00E94B50481110C9400000B -:100B200008955F926F927F928F929F92AF92BF9241 -:100B3000CF92DF92EF92FF920F931F93CF93DF93A9 -:100B40005C016901DA015C90232B19F4CC24CA946E -:100B5000DC2C8A013A01660E771ED0E0C0E0F12C51 -:100B6000E12C87E0882E912CF50180819181D801BC -:100B70006C910C2E01C0660F0A94EAF765296F7715 -:100B8000DC01ED91FC910190F081E02D1995BFEF12 -:100B9000EB1AFB0AF801608170E0C4018C1B9D0B0D -:100BA00002C0759567958A95E2F7562E2196C73053 -:100BB000D10558F1CE14DF0441F1D5018D919C91FE -:100BC000652D6F77DC01ED91FC910190F081E02DB6 -:100BD0001995BFEFEB1AFB0A551C5524551C279796 -:100BE000E6CFEC14FD0408F4BFCFDF91CF911F9145 -:100BF0000F91FF90EF90DF90CF90BF90AF909F90BC -:100C00008F907F906F905F9008950F5F1F4F6016D9 -:100C1000710639F7209749F3EC14FD0430F7F5011C -:100C20008081918161E070E001C0660FCA95EAF7AA -:100C300061506521DC01ED91FC910190F081E02D86 -:100C4000DF91CF911F910F91FF90EF90DF90CF90A8 -:100C5000BF90AF909F908F907F906F905F9019940E -:100C60001F93CF93DF931F921F92CDB7DEB7182F3C -:100C70007A8369838091DC079091DD070097C9F042 -:100C8000DC01ED91FC910190F081E02D1031B8F480 -:100C900061157044A0F4612F606E199522E030E078 -:100CA000AE014F5F5F4F62E070E08CED97E00E9415 -:100CB00091050F900F90DF91CF911F91089560EFF4 -:100CC00019958091DC079091DD07DC01ED91FC9195 -:100CD0000190F081E02D6FE619958091DC079091ED -:100CE000DD07DC01ED91FC910190F081E02D612F99 -:100CF000199522E030E0AE014F5F5F4F62E070E097 -:100D00008CED97E00E9491058091DC079091DD07C2 -:100D1000DC01ED91FC910190F081E02D67EF1995D8 -:100D2000C8CFEF92FF920F931F93CF93DF93C82FFB -:100D30008091DC079091DD070097C9F17A018B0162 -:100D4000DC01ED91FC910190F081E02D60EF1995AF -:100D50008091DC079091DD07DC01ED91FC91019021 -:100D6000F081E02D6C2F1995E7010E0D1F1DC017A6 -:100D7000D10759F030E020E0AE0161E070E08CED89 -:100D800097E00E9491052196F2CF8091DC07909127 -:100D9000DD07DC01ED91FC910190F081E02D67EF22 -:100DA000DF91CF911F910F91FF90EF901994DF91F8 -:100DB000CF911F910F91FF90EF900895CF92DF9206 -:100DC000EF92FF920F931F93CF93DF93FC01E058B4 -:100DD000FF4FE080EE2009F45CC0EC01C05CDF4F07 -:100DE000A881B981109709F454C0FC01EF57FF4F57 -:100DF000C080D180F60111810081ED91FC911197A5 -:100E00000190F081E02D60EFCD01199588819981E5 -:100E1000DC01ED91FC910190F081E02D69E71995DD -:100E200088819981DC01ED91FC910190F081E02DA8 -:100E3000602F199588819981DC01ED91FC910190D9 -:100E4000F081E02D612F1995F12C01E010E00F5F8A -:100E50001F4FE016F10659F030E020E0A601400FE8 -:100E6000511F61E070E0CE010E949105F0CF8881B2 -:100E70009981DC01ED91FC910190F081E02D67EF0B -:100E8000DF91CF911F910F91FF90EF90DF90CF9066 -:100E90001994DF91CF911F910F91FF90EF90DF9008 -:100EA000CF900895009711F00C94DE0608952091DC -:100EB0005804260F3327331F21323105ECF42091DB -:100EC000FE04FC0190E080E0243069F082E00895A7 -:100ED000A09158042191AC014A5C5B4FA40FB52F3F -:100EE000B11D2C930196861798F380915804680FD2 -:100EF0006093580480E0089581E008951092FE0404 -:100F000081E08093FD041092D80461E084E10E94A6 -:100F10004C0361E085E10E944C03E9EBF0E0808145 -:100F20008E7F808380818D7F808388E48093B8006A -:100F300085E48093BC000895CF93DF9391E0909374 -:100F400035048823B9F0C091B800D091BA008091DF -:100F5000BC008A7B8093BC0060E084E10E944C036B -:100F600060E085E10E944C030E947E07D093BA00A6 -:100F7000C093B800DF91CF9108958F929F92AF9266 -:100F8000BF92CF92DF92EF92FF920F931F93CF9376 -:100F9000DF93D0912705D13208F0D7C0182FC09128 -:100FA00026050E94D3036B017C018091FE04811110 -:100FB0006BC082E08093FE041093FD048FEF80935A -:100FC000FC041092FB04D093FA04A6E0B5E0EAED2D -:100FD000F4E080E0D81391C01092D9048091D90434 -:100FE000CC0FC82BC093D9048091D804813009F06C -:100FF00088C01092D8040E94D3036B017C018091B9 -:10100000D9048093BB008091000590910105A091C7 -:101010000205B0910305892B8A2B8B2BA1F00E942E -:10102000D303009100051091010520910205309134 -:1010300003056C197D098E099F09061717072807F4 -:10104000390708F442C08091BC0083FDD8CF85ECFD -:101050008093BC000E94D3036B017C018091FE044D -:10106000823009F450C08091FC048F3F09F46FC0B6 -:101070008091FC04803209F46CC08091FC048033C0 -:1010800009F469C084E026C08091000590910105B3 -:10109000A0910205B0910305892B8A2B8B2B09F4B3 -:1010A00084CF0E94D3038090000590900105A0900A -:1010B0000205B09003056C197D098E099F098616FB -:1010C0009706A806B90608F070CF8091FF040E9429 -:1010D0009C0785E0109205051092270510920405E3 -:1010E000DF91CF911F910F91FF90EF90DF90CF9004 -:1010F000BF90AF909F908F9008959D9191938F5F37 -:1011000069CF85EEA5CF8091000590910105A09152 -:101110000205B0910305892B8A2B8B2B09F49ECFF6 -:101120000E94D30300910005109101052091020552 -:10113000309103056C197D098E099F090617170761 -:101140002807390708F08ACFC0CF81E0C3CF80E0FD -:10115000C1CF82E0BFCF83E0BDCF08950895089549 -:10116000E091340480913304E81730F4F0E0ED5E50 -:10117000FB4F808190E008958FEF9FEF089590914D -:101180003404809133042FEF3FEF981748F4E92F90 -:10119000F0E0ED5EFB4F208130E09F5F90933404E0 -:1011A000C90108958091330490913404891B990BEF -:1011B0000895CF92DF92EF92FF920F931F93CF93F8 -:1011C000DF937C01CB018A0120910405222389F061 -:1011D000EB016B01C40ED51ECC15DD0569F06991DC -:1011E000D701ED91FC910190F081E02DC701199597 -:1011F000F3CF642F0E945707C801DF91CF911F9151 -:101200000F91FF90EF90DF90CF900895CF93DF93F1 -:101210001F92CDB7DEB76983209104052223F9F030 -:1012200020912705203258F021E030E0FC01338383 -:10123000228390E080E00F90DF91CF91089580911C -:101240000505E82FF0E0EA5FFA4F998190838F5F00 -:10125000809305058093270581E090E0ECCF61E065 -:10126000CE0101960E945707F7CF90E080E00895E5 -:10127000DF92EF92FF920F931F93CF93DF93EC01D6 -:10128000D62E7A0189018881803308F067C061E039 -:101290008D2D0E947A038881282F30E0F901EE0F0E -:1012A000FF1FE20FF31FE250F74F9D2D9F736081E8 -:1012B000607C692B608320E232E02E193F0937FF02 -:1012C00002C02D5F3F4F359527953595279529838A -:1012D00020E639E0201B310B37FF02C02D5F3F4F66 -:1012E00035952795359527952A832CE0622F0E9406 -:1012F0000520829FB001112430E020E0AB01420FB5 -:10130000531FFA01EE0FFF1FE40FF51FE250F74FD6 -:10131000908196FD16C02F5F3F4F2C30310571F73D -:10132000813029F51092800082E080938100109234 -:10133000850010928400B19A80916F008260809342 -:101340006F00E8818E2F90E0FC01EE0FFF1FE80F89 -:10135000F91FE250F74F8081806480838881DF919C -:10136000CF911F910F91FF90EF90DF900895823001 -:1013700061F4109290008093910010929500109269 -:10138000940088BB80937100DCCF833069F41092A5 -:10139000A00082E08093A1001092A5001092A4000A -:1013A00089BB80937200CDCF8111CBCF10922001E9 -:1013B00082E08093210110922501109224018ABBC2 -:1013C00080937300BECFAF92BF92CF92DF92EF9225 -:1013D000FF920F931F93CF93DF936B017A01EC0180 -:1013E000C15FDB4F28813CE0389F8001399F100DA1 -:1013F0001124A0908E09B12C27FF1FC0FB01118280 -:10140000108288818F5F888388819801280F311D21 -:1014100087FD3A95F6012A153B051CF488818C302E -:10142000C4F180819181049680349C4908F473C092 -:10143000F60180819181049670C088819801280FFF -:10144000311D87FD3A952A153B05DCF68881A801F8 -:10145000480F511D87FD5A95FA01EE0FFF1FE40F4B -:10146000F51FE250F74F808186FFCBCF8881F801CE -:10147000E80FF11D87FDFA95CF01EE0FFF1FE80F72 -:10148000F91FE250F74F808160E08F730E944C0398 -:10149000B8CF808191812881A801420F511D27FD7D -:1014A0005A959A01FA01EE0FFF1FE20FF31FE25067 -:1014B000F74F21813281820F931FF701918380833F -:1014C00088819801280F311D87FD3A95F901EE0FAB -:1014D000FF1FE20FF31FE250F74F808186FF22C00B -:1014E0008881080F111D87FD1A95F801EE0FFF1F67 -:1014F000E00FF11FE250F74F808161E08F73DF91C1 -:10150000CF911F910F91FF90EF90DF90CF90BF9000 -:10151000AF900C944C0380E49CE9F70191838083A5 -:101520008FEF8883DF91CF911F910F91FF90EF9004 -:10153000DF90CF90BF90AF900895CF938031B0F4FB -:1015400021E030E0082E02C0220F331F0A94E2F798 -:101550004091C9045091CA04672B51F420953095ED -:10156000242335233093CA042093C904CF910895CE -:10157000242B352B3093CA042093C90490910E0478 -:101580009111F4CFC82F0E94B603BC018C2FCF91CC -:101590000C9430064F925F926F927F928F929F923F -:1015A000AF92BF92CF92DF92EF92FF920F931F9371 -:1015B000CF93DF93893008F0A7C08F5FC82FCC0F7F -:1015C000CC0FCC0F4C2EC73410F056E4452ED62F3E -:1015D00038EF532E5C0E852C912CC401880F991F77 -:1015E0009C012456384F5901052DD12CC12C10E0F7 -:1015F000772473940415C8F58EEF800F8434F8F4C3 -:10160000F601E80DF91DE15EF74F90819230B8F4D4 -:10161000872D8D2366246394811101C0612C76018E -:10162000EE0CFF1C913089F4172939ECE30EF11C04 -:10163000F501EE0DFF1D862D90E091838083770CE0 -:101640000F5F8FEFC81AD80AD5CF882371F3F7013F -:10165000E753FF4FEA0DFB1D80819181019729F32C -:1016600062E0802F0E947A03E0CF10FF05C06D2F4B -:101670006170852D0E944C0311FF06C06D2F6270B2 -:1016800089EF8C0F0E944C0312FF06C06D2F64700F -:101690008AEF8C0F0E944C0313FF06C06D2F6870F9 -:1016A0008BEF8C0F0E944C0314FF06C06D2F6071EE -:1016B0008CEF8C0F0E944C0315FF06C06D2F6072DB -:1016C0008DEF8C0F0E944C0316FF06C06D2F6074C7 -:1016D0008EEF8C0F0E944C0317FF16C06D2F6078A1 -:1016E0008FEF8C0FDF91CF911F910F91FF90EF90B3 -:1016F000DF90CF90BF90AF909F908F907F906F9032 -:101700005F904F900C944C03DF91CF911F910F91FC -:10171000FF90EF90DF90CF90BF90AF909F908F9011 -:101720007F906F905F904F9008958F929F92AF92AD -:10173000BF92CF92DF92EF92FF920F931F93CF93BE -:10174000DF93EB01863408F098C0082F10E0F80111 -:10175000E15EF74F9081933009F49CC0943009F01A -:101760008CC08250843408F081C0F801E254FC4FF0 -:10177000C080D12C7601EE0CFF1C4B01603282E060 -:1017800078070CF03EC0F701EC0DFD1DE157F64F58 -:101790008181A8E88A2E912C881A910887FD93945C -:1017A000880C991C880C991C092C000CAA08BB08F1 -:1017B000828128E532E0281B310987FD3395220F0D -:1017C000331F220F331F032E000C440B550B281917 -:1017D00039094A095B09DB01653B710514F0A4EB8B -:1017E000B0E0B7FF02C0B0E0A0E00E94CC1F24EB45 -:1017F00030E040E050E00E94A21F820E931EA41E23 -:10180000B51EF701EC0DFD1DE157F64F2081203389 -:1018100068F5318188E890E0831B910937FD939545 -:10182000880F991F880F991F881699067CF03281BE -:1018300088E592E0831B910937FD9395880F991FE6 -:10184000880F991F881699060CF4C4010297880F17 -:10185000991F4FB7F89430E0F901EE0FFF1FE20F28 -:10186000F31FE250F74F928381834FBF000F111F88 -:10187000F801EB59F74FD183C083DF91CF911F91CE -:101880000F91FF90EF90DF90CF90BF90AF909F901F -:101890008F900895F82E8EEF800F8C3020F084ED1D -:1018A000800F833018F761E08F2D0E947A03209714 -:1018B00029F460E08F2D0E944C03D8CFCF3FD10593 -:1018C00011F461E0F7CFF801E25EFC4FE491E150E2 -:1018D000E23108F0B0C0F0E08827EE58F34F8F4FA8 -:1018E0000C941120840C890C8E0C980CA20C1B0DEE -:1018F000AC0CB40CBC0CC60CD00CDA0CE90CF30C20 -:101900001B0DFD0C070D110D84B5806884BDC7BD8E -:10191000ADCF84B5806284BDC8BDA8CF8091800062 -:10192000806880938000D0938900C09388009ECF08 -:1019300080918000806280938000D0938B00C09360 -:101940008A0094CF80918000886080938000D0933B -:101950008D00C0938C008ACF8091B0008068809306 -:10196000B000C093B30082CF8091B00080628093BA -:10197000B000C093B4007ACF8091900080688093CB -:101980009000D0939900C093980070CF8091900000 -:10199000806280939000D0939B00C0939A0066CFA2 -:1019A00080919000886080939000D0939D00C093B8 -:1019B0009C005CCF8091A00080688093A000809103 -:1019C000A0008F7B8093A000D093A900C093A800B3 -:1019D0004DCF8091A00080628093A000D093AB0097 -:1019E000C093AA0043CF8091A00088608093A0009C -:1019F000D093AD00C093AC0039CF809120018068B6 -:101A000080932001D0932901C09328012FCF80918A -:101A10002001806280932001D0932B01C0932A0182 -:101A200025CF80912001886080932001D0932D01E3 -:101A3000C0932C011BCFC038D1050CF042CF39CF59 -:101A40009EEF980F943480F4E82FF0E0DF01A15E60 -:101A5000B74F9C91913041F4EE0FFF1FEB59F74FB8 -:101A6000608371830C944C030895FF920F931F932E -:101A7000CF93DF931F921F92CDB7DEB7082F10E0F0 -:101A8000F801E157FB4F9081F62EF9220C5F1B4FB6 -:101A9000411104C0F80190819F1511F12F2D30E004 -:101AA0003A832983A091DC07B091DD071097B1F04C -:101AB000682F6F706069ED91FC9111970190F08132 -:101AC000E02DCD01199522E030E0AE014F5F5F4F70 -:101AD00062E070E08CED97E00E949105F801F082E1 -:101AE0000F900F90DF91CF911F910F91FF9008956C -:101AF0000F931F93CF93DF93893008F071C0282F85 -:101B000030E0F901E856FB4F6083672B09F468C0A9 -:101B1000082F21573B4FF9011081D82FDD0FDD0F22 -:101B2000DD0F8EEF8D0F843450F4C12FC17010FF84 -:101B300007C08D2F0E942303C1E0892B09F4C0E068 -:101B40008FEF8D0F843448F411FF07C081E08D0FB3 -:101B50000E942303892B09F0C26012FF07C082E0B4 -:101B60008D0F0E942303892B09F0C46013FF07C067 -:101B700083E08D0F0E942303892B09F0C86014FFB6 -:101B800007C084E08D0F0E942303892B09F0C061F8 -:101B900015FF07C085E08D0F0E942303892B09F0F4 -:101BA000C062D034A1F016FF07C086E08D0F0E94FE -:101BB0002303892B09F0C064DF3349F017FF07C006 -:101BC00087E08D0F0E942303892B09F0C06841E054 -:101BD0006C2F802FDF91CF911F910F910C94350DB9 -:101BE000DF91CF911F910F910895A82FB0E0A254DB -:101BF000BC4F9C91292F30E0F901EE0FFF1FE20F3F -:101C0000F31FE157F64FE0812E2F30E0F901EE0F80 -:101C1000FF1FE20FF31FE250F74F80818F7B80831D -:101C20008091BC03981308C0992319F091509093A8 -:101C3000BC038FEF8C9308958823D9F3E091BD0303 -:101C4000EF5FE093BD03F0E0E75BFC4F9083F1CFE3 -:101C5000FC0101900020E9F73197BF01681B790B67 -:101C6000AC0181E70C949106CF93DF93DB01909157 -:101C7000BC03903378F53091BD03682F70E0FB0111 -:101C8000E254FC4F3323E1F0C32FD0E0C75BDC4FBD -:101C90008881808331503093BD03808123E0829F0F -:101CA000C00111248157964F1A161B0674F414169E -:101CB00015065CF49A01AD01DF91CF910C943809BF -:101CC00090839F5F9093BC03E8CF20E639E040E229 -:101CD00052E0F2CF8DE292E0DF91CF910C94280E8A -:101CE00085ED8093BC008091000590910105A09145 -:101CF0000205B09103050796A11DB11D23E0B6951D -:101D0000A795979587952A95D1F72091BC0024FD3A -:101D100003C01092FE040895409100055091010502 -:101D20006091020570910305452B462B472B69F303 -:101D30000097A105B10541F02AE22A95F1F700C00C -:101D40000197A109B109E1CF8091FF040C949C0790 -:101D50008F929F92BF92CF92DF92EF92FF920F935A -:101D60001F93CF93DF93C82ED12CE601C456D84FD2 -:101D7000FE01ED57FF4F90819F3709F4A1C09630C7 -:101D800061F490910D04992341F06630710529F0BA -:101D900010920D049FEF909300027B01182F0EEF1D -:101DA000080F043408F564307105F1F0F601E254CF -:101DB000FC4F80818033C0F490E0FC01EE0FFF1FE8 -:101DC000E80FF91FE157F64FE0818E2F90E0FC01FC -:101DD000EE0FFF1FE80FF91FE250F74F808186FFDB -:101DE00003C0812F0E94F50D5AECB52EB10E8FE085 -:101DF0008B1558F061E070E032E0E316F10411F069 -:101E000070E060E08B2D0E949D0A0434C8F4E12F3D -:101E1000E695E695E695F0E0E157FB4F2081312FFE -:101E2000377081E090E001C0880F3A95EAF7E1143D -:101E3000F10421F03BE0E316F10411F5822B8083DD -:101E40004601880C991CF401EB59F74F118210825E -:101E50008CE0E816F10408F0C8C0F7018827EC5CB4 -:101E6000F04F8F4F0C941120540F810F430F980F98 -:101E7000B20FF50FE90FF50FF50FF50F600F6C0FAF -:101E800080958223DCCF3FE03B15D0F0043420F472 -:101E900060E0812F0E947A03CD57DF4F88818F3712 -:101EA00079F082E088830CC0043450F460E0812F24 -:101EB0000E947A03CD57DF4F88818F3709F018824F -:101EC000DF91CF911F910F91FF90EF90DF90CF9016 -:101ED000BF909F908F900895043490F762E0812F17 -:101EE0000E947A03CD57DF4F88818F3711F08BE046 -:101EF0008883F401EB59F74F81E090E09183808370 -:101F0000DFCF0434E8F6FE01ED57FF4F80818330C8 -:101F100021F460E0812F0E944C0361E0812F0E9438 -:101F20007A03CD57DF4F88818F3751F281E0BACFE6 -:101F30000C3020F084ED810F833010F661E0812FAA -:101F40000E947A0361E0812F0E947A0360E0812F72 -:101F50000E944C03CD57DF4F88818F3709F4B0CFF3 -:101F600083E0A0CF043408F0ABCFCD57DF4F88819A -:101F70008F3711F084E08883F601E254FC4F8081B2 -:101F80008F3FA9F090E0FC01EE0FFF1FE80FF91F53 -:101F9000E157F64FE0818E2F90E0FC01EE0FFF1F1E -:101FA000E80FF91FE250F74F808186FD89CF4FEF90 -:101FB0005FEF6FEF7FEF812FDF91CF911F910F9137 -:101FC000FF90EF90DF90CF90BF909F908F900C94F8 -:101FD000340E1451123008F073CFCD57DF4F888183 -:101FE0008F3709F46DCF86E05DCF81E492E0DF9119 -:101FF000CF911F910F91FF90EF90DF90CF90BF9006 -:102000009F908F900C94280E0F931F93CF93DF9384 -:1020100081E080930E0480910D04882329F01092B2 -:102020000D048FEF80930002E8E9F4E0CFE8D4E0FC -:10203000A4E0B4E0119219921D9284E0E13AF8070D -:10204000C9F70EEB13E0C0E0DFEF8AEC8C0F62E023 -:1020500070E0803130F08EEF8C0F843428F461E032 -:1020600070E08C2F0E94A80EF801D1938F01CF5FF2 -:10207000C63459F71092CA041092C9041092BD03D5 -:102080001092BC0310920E04DF91CF911F910F911B -:1020900008954F925F926F927F928F929F92AF922C -:1020A000BF92FF920F931F93CF93DF93F82E8B0174 -:1020B000D42FC22F6F3F760709F490C081E0809340 -:1020C0000405F0922605109205051092270582EF6F -:1020D00098E00E9406098C2F0E94BD078091BA03E8 -:1020E0009091BB038230910538F0880F991F880FBB -:1020F000991F05970197F1F70E94D3034B015C01EB -:102100008091FE0481116CC0CD2FD13208F0C0E265 -:1021100081E08093FE048093FD049FEF9093FC0484 -:102120001092FB049C0F9093FA048093D904909131 -:10213000D9048F2D880F892B8093D9048091D804DE -:10214000813009F0A1C01092D8040E94D3034B0142 -:102150005C018091D9048093BB008091000590912F -:102160000105A0910205B0910305892B8A2B8B2BC9 -:10217000A1F00E94D30340900005509001056090AB -:10218000020570900305681979098A099B094616AA -:1021900057066806790608F444C08091BC0083FDA8 -:1021A000D8CF85EC8093BC000E94D3034B015C0127 -:1021B0008091FE04813009F469C08091FB048C1782 -:1021C00010F4C091FB04EAEDF4E0A3E1B4E080E098 -:1021D0008C1761F191919D938F5FFACF00E08CCFC6 -:1021E0008091000590910105A0910205B091030531 -:1021F000892B8A2B8B2B09F483CF0E94D303409029 -:102200000005509001056090020570900305681963 -:1022100079098A099B09461657066806790608F067 -:102220006FCF8091FF040E949C07C0E0109234049D -:10223000C09333042D2F30E08C2F90E028173907FE -:102240000CF046C082E592E00E94280EF0927A03DC -:1022500000937B030AE713E0AD2EB12CC8018A5727 -:1022600093408A159B050CF041C00F5F1F4F909162 -:102270003304809134049817C9F182EF98E00E94EA -:10228000BF08F8018183EACF85EE8CCF80910005ED -:1022900090910105A0910205B0910305892B8A2B2D -:1022A0008B2B09F485CF0E94D303409000055090FA -:1022B00001056090020570900305681979098A0983 -:1022C0009B09461657066806790608F071CFA9CF14 -:1022D000821793070CF0BACF8FE692E00E94280E87 -:1022E000D091330480913404D81BB0CFDE5F6D2FC2 -:1022F00070E04AE753E087E7DF91CF911F910F919C -:10230000FF90BF90AF909F908F907F906F905F9065 -:102310004F900C949106EF92FF920F931F93CF93DF -:10232000DF938956823108F035C0EA01162FE82F75 -:10233000F0E08827E156FE4E8F4F0C941120E213F7 -:10234000CA114C13CA11A113CA112A13CE12CA11F1 -:10235000CA11CA11CA11CA11B111CA119212CA11F5 -:102360001413998195FF0AC08BE892E0DF91CF9119 -:102370001F910F91FF90EF900C94280E888131E00F -:1023800096FB222720F9232798719830D1F148F441 -:102390009923A9F0DF91CF911F910F91FF90EF90BA -:1023A0000895903109F44CC09831A1F720910002B2 -:1023B00012160CF472C08FEF80930002EBCF3093B3 -:1023C000040580932605109205051092270502E06A -:1023D000011778F4FE01E00FF11D61816795662712 -:1023E00067958081680F82EF98E00E9406090E5F72 -:1023F000EFCF81E00E94BD0783E191E00197F1F703 -:10240000C9CF9A814B816630A1F430E8439FB00177 -:102410001124690F711D4D814795442747959C8173 -:10242000490FDF91CF911F910F91FF90EF900C9486 -:102430004910479544274795490F6FEF7FEFF1CF3C -:10244000E0910002E7301CF08BEA92E08FCF3A81F6 -:102450009B816630D9F460E8969FA0011124430F58 -:10246000511D9D819795992797953C81930FEF5F1B -:10247000E093000235E0E302F0011124EF55FB4F39 -:102480008083528341839383248384CF97959927B4 -:102490009795930F4FEF5FEFEACF90E0622F022EF8 -:1024A000000C770B35E0492F50E06417750764F096 -:1024B000349FF001359FF00D1124EF55FB4F408103 -:1024C000481719F09F5FEFCF90E085E0492F50E06B -:1024D000641775071CF19830F8F4FA0131968E9F55 -:1024E000D0018F9FB00D1124AF55BB4F3C91849FFD -:1024F000F001859FF00D1124EF55FB4F30831196AD -:102500004D915C9112975283418313963C9113979E -:10251000338314963C9134839F5FD8CF215020930E -:10252000000238CF623078F0898160E8869F9001A0 -:1025300011248881820F932F911D009721F0909391 -:10254000BB038093BA0380910D04811123CFC0E0B7 -:102550008CEE8C0F823028F466E070E08C2F0E94A5 -:10256000A80ECF5FC634A1F781E080930D041092CE -:1025700034041092330410920505109227050E942E -:102580007E078DEA98E090935704809356048EEA74 -:1025900098E090935B0480935A04FCCE653008F475 -:1025A000F9CE18818EEF810F843408F0F3CE0981C3 -:1025B000EA80FB80CC81E12FF0E0E254FC4F808187 -:1025C0008033C0F490E0FC01EE0FFF1FE80FF91F0D -:1025D000E157F64FE0818E2F90E0FC01EE0FFF1FD8 -:1025E000E80FF91FE250F74F808186FF03C0812F6B -:1025F0000E94F50D80E8C89FA00111244F0D511DC8 -:1026000090E8E99EB0011124600F711D812F0E9496 -:10261000340E64E070E0812FDF91CF911F910F9114 -:10262000FF90EF900C94A80E623008F4B3CE89812D -:10263000E0E88E9F900111248881820F932F911DD5 -:10264000009729F09093020280930102A3CE81E0CB -:1026500090E0F8CF623008F49DCE698170E01230CE -:1026600091F08A81F0E88F9FC0011124682B792BAB -:10267000133049F08B8190E090E4899F902D88275A -:102680001124682B792B8881DF91CF911F910F91B5 -:10269000FF90EF900C94950B80EF0E9460028CE607 -:1026A0000E946002CEEF8CEC8C0F803108F040C0AD -:1026B00082E00E9460028AE00E94600286ED8C0F38 -:1026C0008330C0F1C43430F484E00E9460028EE0B4 -:1026D0000E9460028EEE8C0F823030F486E00E9401 -:1026E000600281E00E9460028FE70E946002CF5F7B -:1026F000C43449F487EFDF91CF911F910F91FF9080 -:10270000EF900C946002C43470F680E00E94600286 -:1027100081E00E9460028BE00E94600281E00E94E2 -:10272000600281E00E94600281E00E946002BBCFF3 -:10273000CC3020F683E00E94600288E00E946002B4 -:10274000C1CF662309F426CEC88180EF0E946002C3 -:102750008EE60E9460028C2F0E946002C63450F602 -:10276000D0E0FE01E15EF74F80810E946002CC0F55 -:10277000DD1F8E010B59174FF80180818F770E9462 -:102780006002F801808191819C012078232B39F02F -:10279000880F892F881F990B8F770E946002CB5971 -:1027A000D74F888199819C012227307C232B09F403 -:1027B000A1CF990F880B990F982F881F8F770E94B0 -:1027C000600298CF80EF0E9460028AE60E94600259 -:1027D000CAEC8FE7C03108F48C2F0E946002CF5FF3 -:1027E000C031B9F787CF1F920F920FB60F92112405 -:1027F0002F933F938F939F93AF93BF938091D00478 -:102800009091D104A091D204B091D3043091CF041F -:1028100023E0230F2D3758F50196A11DB11D2093FC -:10282000CF048093D0049093D104A093D204B093AA -:10283000D3048091D4049091D504A091D604B09192 -:10284000D7040196A11DB11D8093D4049093D504A3 -:10285000A093D604B093D704BF91AF919F918F916D -:102860003F912F910F900FBE0F901F90189526E863 -:10287000230F0296A11DB11DD2CF1F920F920FB64A -:102880000F9211240BB60F922F933F934F935F93A8 -:102890006F937F938F939F93AF93BF93EF93FF9328 -:1028A00088E295E00E94DD04FF91EF91BF91AF9126 -:1028B0009F918F917F916F915F914F913F912F9158 -:1028C0000F900BBE0F900FBE0F901F9018951F9288 -:1028D0000F920FB60F9211240BB60F922F933F93C6 -:1028E0004F935F936F937F938F939F93AF93BF9318 -:1028F000EF93FF9388E295E00E945F04FF91EF91D0 -:10290000BF91AF919F918F917F916F915F914F9107 -:102910003F912F910F900BBE0F900FBE0F901F9005 -:1029200018951F920F920FB60F9211240BB60F92AB -:102930002F933F934F935F936F937F938F939F93C7 -:10294000AF93BF93EF93FF9385EC95E00E94DD0476 -:10295000FF91EF91BF91AF919F918F917F916F9177 -:102960005F914F913F912F910F900BBE0F900FBE33 -:102970000F901F9018951F920F920FB60F9211246F -:102980000BB60F922F933F934F935F936F937F9369 -:102990008F939F93AF93BF93EF93FF9385EC95E055 -:1029A0000E945F04FF91EF91BF91AF919F918F9132 -:1029B0007F916F915F914F913F912F910F900BBE3F -:1029C0000F900FBE0F901F9018951F920F920FB689 -:1029D0000F9211240BB60F922F933F934F935F9357 -:1029E0006F937F938F939F93AF93BF93EF93FF93D7 -:1029F00082E696E00E94DD04FF91EF91BF91AF91D6 -:102A00009F918F917F916F915F914F913F912F9106 -:102A10000F900BBE0F900FBE0F901F9018951F9236 -:102A20000F920FB60F9211240BB60F922F933F9374 -:102A30004F935F936F937F938F939F93AF93BF93C6 -:102A4000EF93FF9382E696E00E945F04FF91EF917F -:102A5000BF91AF919F918F917F916F915F914F91B6 -:102A60003F912F910F900BBE0F900FBE0F901F90B4 -:102A700018951F920F920FB60F9211240BB60F925A -:102A80002F933F934F935F936F937F938F939F9376 -:102A9000AF93BF93EF93FF938FEF96E00E94DD0417 -:102AA000FF91EF91BF91AF919F918F917F916F9126 -:102AB0005F914F913F912F910F900BBE0F900FBEE2 -:102AC0000F901F9018951F920F920FB60F9211241E -:102AD0000BB60F922F933F934F935F936F937F9318 -:102AE0008F939F93AF93BF93EF93FF938FEF96E0F6 -:102AF0000E945F04FF91EF91BF91AF919F918F91E1 -:102B00007F916F915F914F913F912F910F900BBEED -:102B10000F900FBE0F901F9018951F920F920FB637 -:102B20000F9211240F900FBE0F901F9018951F92B7 -:102B30000F920FB60F9211240BB60F922F933F9363 -:102B40004F935F936F937F938F939F93AF93BF93B5 -:102B5000EF93FF938091B900887F803609F44DC0D0 -:102B600008F040C0883209F4A9C028F5803109F482 -:102B70009DC0C8F4882309F4FBC0883009F496C0CE -:102B8000FF91EF91BF91AF919F918F917F916F9145 -:102B90005F914F913F912F910F900BBE0F900FBE01 -:102BA0000F901F901895883109F488C0803241F742 -:102BB0008093FC0414C0803409F49DC040F4803339 -:102BC000B9F38833E9F68093FC0485ECB0C0803516 -:102BD00009F485C0883509F496C0883489F60E94C6 -:102BE000700ECECF883909F48CC038F5883729F0BB -:102BF00050F4883611F0803719F683E08093FE0494 -:102C000010927C0457C0883809F47BC0803919F0D1 -:102C1000803809F0B5CF80917C04803208F071C013 -:102C2000E0917C0481E08E0F80937C048091BB0056 -:102C3000F0E0E45AFB4F80833DC0803B39F0E0F484 -:102C4000803A09F479C0883A09F09ACF84E08093F9 -:102C5000FE041092590410925804E0915604F09129 -:102C6000570419958091580481110FC081E0809319 -:102C700058041092360409C0803C09F4A6CF883C61 -:102C800009F4A3CF883B09F07BCFE091590481E0A0 -:102C90008E0F80935904F0E0EA5CFB4F80818093B3 -:102CA000BB00909159048091580429C08091D904A7 -:102CB0008093BB0085EC8093BC0062CF9091FB04B5 -:102CC0008091FA04981758F5E091FB0481E08E0F8B -:102CD0008093FB04F0E0E652FB4F8081E9CFE09166 -:102CE000FB0481E08E0F8093FB048091BB00F0E039 -:102CF000E652FB4F80839091FB048091FA04981771 -:102D0000C8F285E8D8CFE091FB0481E08E0F809374 -:102D1000FB048091BB00F0E0E652FB4F8083809182 -:102D2000FD0481115CCF81E08093D80484EA809314 -:102D3000BC001092FE0424CF85EC8093BC0010925E -:102D4000FE0480917C04803230F4E0917C04F0E059 -:102D5000E45AFB4F108260917C0470E0E0915A04C9 -:102D6000F0915B048CE594E0199510927C0408CFF7 -:102D70001092FC0434CF1F920F920FB60F921124C1 -:102D80000BB60F922F933F934F935F936F937F9365 -:102D90008F939F93AF93BF93EF93FF9348E251E0DC -:102DA00064E271E090E080E00E94E309FF91EF911E -:102DB000BF91AF919F918F917F916F915F914F9153 -:102DC0003F912F910F900BBE0F900FBE0F901F9051 -:102DD00018951F920F920FB60F9211240BB60F92F7 -:102DE0002F933F934F935F936F937F938F939F9313 -:102DF000AF93BF93EF93FF9348EA50E064EA70E02B -:102E000083E090E00E94E309FF91EF91BF91AF91C1 -:102E10009F918F917F916F915F914F913F912F91F2 -:102E20000F900BBE0F900FBE0F901F9018951F9222 -:102E30000F920FB60F9211240BB60F922F933F9360 -:102E40004F935F936F937F938F939F93AF93BF93B2 -:102E5000EF93FF9348E950E064E970E082E090E08E -:102E60000E94E309FF91EF91BF91AF919F918F91E4 -:102E70007F916F915F914F913F912F910F900BBE7A -:102E80000F900FBE0F901F9018951F920F920FB6C4 -:102E90000F9211240BB60F922F933F934F935F9392 -:102EA0006F937F938F939F93AF93BF93EF93FF9312 -:102EB00048E850E064E870E081E090E00E94E309B7 -:102EC000FF91EF91BF91AF919F918F917F916F9102 -:102ED0005F914F913F912F910F900BBE0F900FBEBE -:102EE0000F901F90189510922B0510922A0588EECE -:102EF00093E0A0E0B0E080932C0590932D05A09383 -:102F00002E05B0932F052DE032E030932905209354 -:102F1000280545E351E0509335054093340544E3DB -:102F200051E0509337054093360540E351E050930C -:102F300039054093380541E351E050933B054093F8 -:102F40003A0542E351E050933D0540933C0546E38A -:102F500051E050933F0540933E0510924105109279 -:102F6000420510924305109244051092C805109234 -:102F7000C7058093C9059093CA05A093CB05B0936C -:102F8000CC053093C6052093C50545ED50E0509320 -:102F9000D2054093D10544ED50E05093D4054093C1 -:102FA000D30540ED50E05093D6054093D50541ED53 -:102FB00050E05093D8054093D70542ED50E0509330 -:102FC000DA054093D90546ED50E05093DC05409377 -:102FD000DB051092DE051092DF051092E0051092DD -:102FE000E105109265061092640680936606909340 -:102FF0006706A0936806B093690630936306209332 -:1030000062064DEC50E050936F0640936E064CEC18 -:1030100050E0509371064093700648EC50E0509396 -:1030200073064093720649EC50E050937506409346 -:1030300074064AEC50E050937706409376064EECC7 -:1030400050E0509379064093780610927B061092D8 -:103050007C0610927D0610927E0610920207109256 -:1030600001078093030790930407A0930507B0938B -:103070000607309300072093FF0625EC30E03093DD -:103080000C0720930B0724EC30E030930E072093BD -:103090000D0720EC30E03093100720930F0721EC50 -:1030A00030E0309312072093110722EC30E0309388 -:1030B00014072093130726EC30E030931607209373 -:1030C0001507109218071092190710921A071092FC -:1030D0001B072CE937E01092DD071092DC073093D4 -:1030E000E0072093DF0740E450E05093E20740936D -:1030F000E1071092E3071092E4071092E60710929E -:10310000E5071092E7071092E9071092E80710927E -:10311000EB071092EA071092ED071092EC0710925D -:10312000EF071092EE071092F1071092F00710923D -:10313000F3071092F2071092F5071092F40710921D -:10314000FB071092FA071092FD071092FC071092ED -:10315000FF071092FE0710920108109200081092CB -:103160000F0810920E081092DE0710921C081092A1 -:103170001E0810921D081092F10846EE51E050937F -:1031800003084093020840EF51E050930508409334 -:1031900004084AEF51E0509307084093060844E0C2 -:1031A00052E050930908409308084EE052E05093D3 -:1031B0000B0840930A0848E152E050930D084093F1 -:1031C0000C0842E252E0509311084093100843E289 -:1031D00052E0509313084093120842E557E0509391 -:1031E0001508409314083093F7072093F6074BE235 -:1031F00054E050931708409316083093F907209332 -:10320000F8072EE232E03093190820931808109244 -:10321000F5081092F4088093F6089093F708A093AD -:10322000F808B093F9088FE192E09093F308809347 -:10323000F208EFE8F9E02FEF48EB5BE080918E09B0 -:103240008033B8F491E0980F90938E09808390E0DA -:10325000DC01AA0FBB1FA80FB91FA250B74F1296CF -:103260005C934E93119733968AE0EF31F80731F76C -:1032700008952083F8CF789484B5826084BD84B5A6 -:10328000816084BD85B5826085BD85B5816085BD61 -:1032900080916E00816080936E0010928100809119 -:1032A00081008260809381008091810081608093A1 -:1032B0008100809180008160809380008091B100C6 -:1032C00084608093B1008091B00081608093B000F1 -:1032D0008091910082608093910080919100816043 -:1032E0008093910080919000816080939000809104 -:1032F000A10082608093A1008091A10081608093F1 -:10330000A1008091A00081608093A00080912101A4 -:10331000826080932101809121018160809321014D -:103320008091200181608093200180917A008460E7 -:1033300080937A0080917A00826080937A008091F5 -:103340007A00816080937A0080917A00806880930F -:103350007A001092C10085E180931C0880911D08BD -:1033600090911E080E94B520C0911C08D0E0CE01AB -:1033700001960E94192090931E0880931D08FC015D -:10338000EC0FFD1F108212E0DC011C9325E011966A -:103390002C93AE014250510965E373E002960E94FE -:1033A0003E2185E99BE090938A04809389048AEC0E -:1033B0009AE090938804809387048DE99AE0909333 -:1033C00086048093850488E79DE09093840480932D -:1033D000830488EA9EE0909382048093810480E2D3 -:1033E0009DE09093800480937F048BE891E190931B -:1033F0008C0480938B0484E090E190938E048093FE -:103400008D04E0910F07F09110071083E0910F07F2 -:10341000F09110071082E0910B07F0910C071082D9 -:10342000E0910D07F0910E0780E18083109217075D -:10343000E0911307F091140786E08083E091110773 -:10344000F0911207808180618083E0911107F091F3 -:103450001207808188608083E0911107F091120744 -:10346000808180688083E0911107F091120780814C -:103470008F7D80838091F10881114FC061E08DE0E4 -:103480000E947A0362ED70E080E090E00E94F80311 -:1034900061E08DE00E944C0368E270E080E090E023 -:1034A0000E94F80360E08DE00E944C0362ED70E042 -:1034B00080E090E00E94F80361E08DE00E944C0300 -:1034C00068E270E080E090E00E94F80360E08DE048 -:1034D0000E944C036AEF70E080E090E00E94F803E5 -:1034E000C5E062ED70E080E090E00E94F80361E0EA -:1034F0008DE00E944C0368E270E080E090E00E9462 -:10350000F80360E08DE00E944C03C15051F76DE775 -:1035100070E080E090E00E94F8038FEF96E09093D7 -:103520001B0880931A089093DD078093DC078CEDCD -:1035300097E00E9436028CE997E00E94DE060E9426 -:103540000410D5E0DD24D39402E010E0EE24E394EF -:10355000F12C80919804882391F1C0908F04C2FCD3 -:10356000E1C2C0E0C3FE06C083E00E942303892BB2 -:1035700009F0C860C4FE06C084E00E942303892BC2 -:1035800009F0C061C5FE06C085E00E942303892BB7 -:1035900009F0C062C6FE06C086E00E942303892BA4 -:1035A00009F0C064C7FE06C087E00E942303892B90 -:1035B00009F0C06840E06C2F80E00E94350D8091DA -:1035C0009904882309F44AC0C0909004CC2DC1709E -:1035D000C0FE07C088E00E942303C1E0892B09F4E4 -:1035E000C0E0C1FE06C089E00E942303892B09F0D8 -:1035F000C260C2FE06C08AE00E942303892B09F044 -:10360000C460C3FE06C08BE00E942303892B09F02F -:10361000C860C4FE06C08CE00E942303892B09F019 -:10362000C061C5FE06C08DE00E942303892B09F00E -:10363000C062C6FE06C08EE00E942303892B09F0FB -:10364000C064C7FE06C08FE00E942303892B09F0E7 -:10365000C06840E06C2F81E00E94350D80919A0493 -:10366000882309F44AC0C0909104CC2DC170C0FEDB -:1036700007C080E10E942303C1E0892B09F4C0E068 -:10368000C1FE06C081E10E942303892B09F0C260BC -:10369000C2FE06C082E10E942303892B09F0C460A8 -:1036A000C3FE06C083E10E942303892B09F0C86092 -:1036B000C4FE06C084E10E942303892B09F0C06187 -:1036C000C5FE06C085E10E942303892B09F0C06274 -:1036D000C6FE06C086E10E942303892B09F0C06460 -:1036E000C7FE06C087E10E942303892B09F0C0684A -:1036F00040E06C2F82E00E94350D80919B0488236E -:1037000009F44AC0C0909204CC2DC170C0FE07C01D -:1037100088E10E942303C1E0892B09F4C0E0C1FEC7 -:1037200006C089E10E942303892B09F0C260C2FE12 -:1037300006C08AE10E942303892B09F0C460C3FEFE -:1037400006C08BE10E942303892B09F0C860C4FEE8 -:1037500006C08CE10E942303892B09F0C061C5FEDD -:1037600006C08DE10E942303892B09F0C062C6FECA -:1037700006C08EE10E942303892B09F0C064C7FEB6 -:1037800006C08FE10E942303892B09F0C06840E046 -:103790006C2F83E00E94350D80919C04882309F4EE -:1037A0004AC0C0909304CC2DC170C0FE07C080E217 -:1037B0000E942303C1E0892B09F4C0E0C1FE06C0CA -:1037C00081E20E942303892B09F0C260C2FE06C079 -:1037D00082E20E942303892B09F0C460C3FE06C065 -:1037E00083E20E942303892B09F0C860C4FE06C04F -:1037F00084E20E942303892B09F0C061C5FE06C044 -:1038000085E20E942303892B09F0C062C6FE06C030 -:1038100086E20E942303892B09F0C064C7FE06C01C -:1038200087E20E942303892B09F0C06840E06C2FD7 -:1038300084E00E94350D80919D04882309F44AC0DC -:10384000C0909404CC2DC170C0FE07C088E20E94D5 -:103850002303C1E0892B09F4C0E0C1FE06C089E260 -:103860000E942303892B09F0C260C2FE06C08AE2CF -:103870000E942303892B09F0C460C3FE06C08BE2BB -:103880000E942303892B09F0C860C4FE06C08CE2A5 -:103890000E942303892B09F0C061C5FE06C08DE29A -:1038A0000E942303892B09F0C062C6FE06C08EE287 -:1038B0000E942303892B09F0C064C7FE06C08FE273 -:1038C0000E942303892B09F0C06840E06C2F85E03B -:1038D0000E94350D80919E04882309F44AC0C0904F -:1038E0009504CC2DC170C0FE07C080E30E94230365 -:1038F000C1E0892B09F4C0E0C1FE06C081E30E944B -:103900002303892B09F0C260C2FE06C082E30E9435 -:103910002303892B09F0C460C3FE06C083E30E9421 -:103920002303892B09F0C860C4FE06C084E30E940B -:103930002303892B09F0C061C5FE06C085E30E9400 -:103940002303892B09F0C062C6FE06C086E30E94ED -:103950002303892B09F0C064C7FE06C087E30E94D9 -:103960002303892B09F0C06840E06C2F86E00E9499 -:10397000350D80919F04882309F44AC0C0909604B5 -:10398000CC2DC170C0FE07C088E30E942303C1E0B4 -:10399000892B09F4C0E0C1FE06C089E30E9423031D -:1039A000892B09F0C260C2FE06C08AE30E9423038D -:1039B000892B09F0C460C3FE06C08BE30E94230379 -:1039C000892B09F0C860C4FE06C08CE30E94230363 -:1039D000892B09F0C061C5FE06C08DE30E94230358 -:1039E000892B09F0C062C6FE06C08EE30E94230345 -:1039F000892B09F0C064C7FE06C08FE30E94230331 -:103A0000892B09F0C06840E06C2F87E00E94350DDB -:103A10008091A0048823D1F1C0909704CC2DC1706F -:103A2000C0FE07C080E40E942303C1E0892B09F493 -:103A3000C0E0C1FE06C081E40E942303892B09F087 -:103A4000C260C2FE06C082E40E942303892B09F0F3 -:103A5000C460C3FE06C083E40E942303892B09F0DF -:103A6000C860C4FE06C084E40E942303892B09F0C9 -:103A7000C061C5FE06C085E40E942303892B09F0BE -:103A8000C06240E06C2F88E00E94350D80911A08DA -:103A900090911B08DC01ED91FC910084F185E02DF3 -:103AA0001995892B09F4D7C180911A0890911B08A8 -:103AB000DC01ED91FC910284F385E02D19959C01C8 -:103AC0008F3F980719F3982F8091E707882309F40F -:103AD0009BC0973F09F087C01092E707A091DF07CE -:103AE000B091E0076C91613709F440C0693709F083 -:103AF00064C0E0911408F0911508309739F2809174 -:103B0000E8079091E90783309105A0F430E020E0C8 -:103B100050E040E070E060E08091F6079091F70798 -:103B20001995B4CF82E00E942303892B09F419CDA3 -:103B3000C4E018CDBD016D5F7F4F03970E949D02C9 -:103B4000BC016D5F7F4F80E00E946D02E091DF0756 -:103B5000F091E0079F012D5F3F4F428150E061816E -:103B600070E0E0911408F0911508D6CF809110080C -:103B700090911108892B09F489CFBD016F5F7F4FA8 -:103B80008091E8079091E90701970E949D02BC018E -:103B90006F5F7F4F80E00E946D026091DF07709140 -:103BA000E0076F5F7F4FE0911008F091110880915E -:103BB000FC079091FD07199569CFE0911208F091EB -:103BC0001308309709F462CF9D012F5F3F4F40915A -:103BD000E8075091E907415051098091FE07909103 -:103BE000FF07199553CF6091E8077091E907822F7D -:103BF0000E946D028091E8079091E90701969093E9 -:103C0000E9078093E80742CF6091E5077091E607E6 -:103C10006115710509F4B1C027FDAFC0615071098C -:103C20007093E6076093E507822F0E946D028091F2 -:103C3000E5079091E607892B09F028CF8091E307EB -:103C4000882309F423CF803D09F483C040F48039F0 -:103C500049F1803C09F469C01092E30717CF843F13 -:103C6000E1F1853F09F44DC0803EB1F7E0910208D3 -:103C7000F0910308309781F3A091DF07B091E0073E -:103C80004C9120E8429FC001112411964C91480F9D -:103C9000592F511D6091E4078091EA079091EB073D -:103CA0001995DACFE0910408F09105083097A1F258 -:103CB000A091DF07B091E0074C9120E8429FC0013E -:103CC000112411964C91480F592F511D6091E40712 -:103CD0008091EC079091ED07E3CFE0910A08F09115 -:103CE0000B08309709F4B8CFA091DF07B091E00737 -:103CF0004C9150E011966C918091F2079091F307EE -:103D0000CFCFE0910C08F0910D08309709F4A4CFC3 -:103D1000A091DF07B091E0074C9150E011966C91B3 -:103D20008091F4079091F507BBCFE0910608F091E0 -:103D30000708309709F490CFA091DF07B091E00712 -:103D40004C9150E06091E4078091EE079091EF076D -:103D5000A7CFE0910808F0910908309709F47CCFCB -:103D6000A091DF07B091E0074C9150E06091E4072B -:103D70008091F0079091F10793CF903F30F4822F1C -:103D80008F708093E407922F907F903FF1F190F431 -:103D9000903CB1F150F4903909F078CE1093E607D9 -:103DA0000093E5079093E30771CE903D49F1903E73 -:103DB000A9F36CCE993F09F442C028F48CE0890F36 -:103DC000823060F363CE9F3F09F060CE1092E60729 -:103DD0001092E5071092E3071092E40790E080E06C -:103DE0002091E1073091E20782179307A8F4E09150 -:103DF000DF07F091E007E80FF91F10820196F0CF7E -:103E0000F092E607E092E507CDCFD092E707109257 -:103E1000E9071092E8073ACE1092E7071092E907F7 -:103E20001092E807E0911808F091190880910008B5 -:103E300090910108309709F429CE199527CEE09189 -:103E40001608F0911708309709F420CE8091F807F2 -:103E50009091F907F2CF8FB7F8948090D0049090AA -:103E6000D104A090D204B090D3048FBF8091CB0432 -:103E70009091CC04A091CD04B091CE044091010268 -:103E80005091020270E060E0881A990AAA0ABB0AFF -:103E9000481559056A057B0508F051C0840F951F28 -:103EA000A61FB71F8093CB049093CC04A093CD049E -:103EB000B093CE048CE9A82E87E0B82ECAECC031AE -:103EC000C8F4F501ED57FF4F8081823099F480915D -:103ED000C9049091CA040C2E02C0959587950A9446 -:103EE000E2F780FF07C08C2F0E94B603BC018C2F25 -:103EF0000E943006CF5F8FEFA81AB80AC031F9F6DA -:103F00008091000287FD1BC0C0E02C2F30E0809123 -:103F10000002082E000C990B8217930784F0D29FA1 -:103F2000F001D39FF00D1124EF55FB4F6181728199 -:103F30002481438180810E944910CF5FE6CF0E9497 -:103F40006C0507CB052E97FB1EF400940E94B91F49 -:103F500057FD07D00E94D41F07FC03D04EF40C94E9 -:103F6000B91F50954095309521953F4F4F4F5F4F6A -:103F7000089590958095709561957F4F8F4F9F4FD5 -:103F800008950E94F61FA59F900DB49F900DA49FC9 -:103F9000800D911D11240895B7FF0C94C11F0E943C -:103FA000C11F821B930B0895A1E21A2EAA1BBB1BF3 -:103FB000FD010DC0AA1FBB1FEE1FFF1FA217B307F5 -:103FC000E407F50720F0A21BB30BE40BF50B661F0B -:103FD000771F881F991F1A9469F7609570958095CF -:103FE00090959B01AC01BD01CF010895A29FB00146 -:103FF000B39FC001A39F700D811D1124911DB29F1D -:10400000700D811D1124911D0895991B79E004C044 -:10401000991F961708F0961B881F7A95C9F7809507 -:104020000895EE0FFF1F881F8BBF0790F691E02DBC -:1040300019940F931F93CF93DF938230910510F45F -:1040400082E090E0E091210AF091220A30E020E045 -:10405000B0E0A0E0309799F42115310509F44AC089 -:10406000281B390B24303105D8F58A819B816115D5 -:10407000710589F1FB0193838283FE0111C04081A8 -:1040800051810281138148175907E0F048175907F9 -:1040900099F4109761F012960C93129713961C9353 -:1040A0003296CF01DF91CF911F910F910895009328 -:1040B000210A1093220AF4CF2115310551F042173D -:1040C000530738F0A901DB019A01BD01DF01F801B6 -:1040D000C1CFEF01F9CF9093220A8093210ACDCF6F -:1040E000FE01E20FF31F819391932250310939832E -:1040F0002883D7CF20911F0A3091200A232B41F427 -:1041000020910502309106023093200A20931F0A65 -:1041100020910302309104022115310541F42DB79D -:104120003EB74091070250910802241B350BE091E5 -:104130001F0AF091200AE217F307A0F42E1B3F0B91 -:104140002817390778F0AC014E5F5F4F2417350709 -:1041500048F04E0F5F1F5093200A40931F0A81932F -:1041600091939FCFF0E0E0E09CCFCF93DF93009757 -:10417000E9F0FC01329713821282A091210AB091DA -:10418000220AED0130E020E01097A1F42081318176 -:10419000820F931F20911F0A3091200A2817390798 -:1041A00009F061C0F093200AE0931F0ADF91CF91DC -:1041B0000895EA01CE17DF07E8F54A815B819E0189 -:1041C00041155105B1F7E901FB83EA834991599102 -:1041D000C40FD51FEC17FD0761F480819181029611 -:1041E000840F951FE90199838883828193819B8342 -:1041F0008A83F0E0E0E012968D919C9113970097EE -:10420000B9F52D913C911197CD010296820F931F24 -:1042100020911F0A3091200A2817390739F6309764 -:1042200051F51092220A1092210AB093200AA0930D -:104230001F0ABCCFD383C28340815181840F951F55 -:10424000C817D90761F44E5F5F4F88819981480F85 -:10425000591F518340838A819B81938382832115D7 -:10426000310509F0B0CFF093220AE093210A9ECFE6 -:10427000FD01DC01C0CF13821282D7CFFB01DC012C -:104280004150504048F001900D920020C9F701C004 -:0E4290001D9241505040E0F70895F894FFCF82 -:10429E00FF13000000230A800000000000FF04321C -:1042AE000478044C05A90487049B04000000000652 -:1042BE0009D9083509AF08D208BF08B0084D617892 -:1042CE0020736572766F73206174746163686564C0 -:1042DE0000556E6B6E6F776E2070696E206D6F6419 -:1042EE0065004932433A20546F6F206D616E79201C -:1042FE0062797465732072656365697665640049D9 -:10430E0032433A20546F6F20666577206279746568 -:10431E00732072656365697665640031302D62695C -:10432E00742061646472657373696E67206E6F7456 -:10433E0020737570706F7274656400746F6F206D8A -:10434E00616E792071756572696573002F7072697F -:10435E00766174652F7661722F666F6C6465727309 -:10436E002F6C6A2F3766706C38335F7337777833FC -:10437E006436646A6C675F773279676D30303030DF -:10438E0067702F542F2E61726475696E6F494445A4 -:10439E002D756E7361766564323032343131313958 -:1043AE002D31353738332D316F376E7834372E390E -:1043BE00636A686A2F5374616E64617264466972CF -:1043CE006D6174612F5374616E64617264466972BB -:0A43DE006D6174612E696E6F0000BE -:00000001FF diff --git a/apps/electron-app/hex/micro/StandardFirmata.cpp.hex b/apps/electron-app/hex/micro/StandardFirmata.cpp.hex deleted file mode 100644 index b19b76b3..00000000 --- a/apps/electron-app/hex/micro/StandardFirmata.cpp.hex +++ /dev/null @@ -1,1066 +0,0 @@ -:100000000C94DA000C9402010C9402010C9402018D -:100010000C9402010C9402010C9402010C94020154 -:100020000C9402010C94A5160C94AC130C941B14A4 -:100030000C9402010C9402010C9402010C94020134 -:100040000C9402010C94CE170C9402010C94020142 -:100050000C9402010C9402010C9402010C946213A2 -:100060000C9402010C9473160C944D160C9402011E -:100070000C9402010C9402010C9402010C940201F4 -:100080000C9402010C9402010C9402010C940201E4 -:100090000C94AF160C9402010C9402010C94020112 -:1000A0000C9402010C9402010C940201080B000252 -:1000B0000202000009040000010202000005240001 -:1000C0001001052401010104240206052406000193 -:1000D0000705810310004009040100020A00000026 -:1000E00007050202400000070583024000000403E8 -:1000F000090412010002EF02014041233780000190 -:100100000102030141726475696E6F204C4C43001B -:1001100041726475696E6F204D6963726F000706E6 -:1001200005040100080A0B0C0D0900000000240062 -:1001300027002A002D0030000000000025002800C4 -:100140002B002E00310000000000230026002900B3 -:100150002C002F000404040404030405020202021C -:100160000403020202020606060606060404020250 -:100170000204040408020110408040102040804026 -:1001800080080204018040201002011080102040ED -:1001900040200000000200090F0000030401000CD1 -:1001A000000000000000000000000000000000004F -:1001B0000000BD1811241FBECFEFDAE0DEBFCDBFB7 -:1001C00012E0A0E0B1E0E6E1F1E402C005900D929A -:1001D000AE36B107D9F726E0AEE6B2E001C01D9217 -:1001E000A832B207E1F710E0CAEDD0E004C02197D1 -:1001F000FE010E944F1FC93DD107C9F70E94E919AE -:100200000C9489200C940000862FE0916103F091FA -:100210006203309711F0BA0109940895862FE09196 -:100220005F03F0916003309711F0BA0109940895CB -:10023000862FE0915D03F0915E03309711F0BA01D3 -:1002400009940895862FE0915B03F0915C03309749 -:1002500011F0BA0109940895862FE0915903F091A5 -:100260005A03309711F0BA0109940895862FE0914E -:100270005703F0915803309711F0BA01099408958B -:100280000895862F642FE0916303F0916403309703 -:1002900011F0A90109940895E0916503F0916603B6 -:1002A000309709F009940895CF93DF93FC01A08162 -:1002B000B181109701F1EC01ED91FC911197019042 -:1002C000F081E02D69EFCD01099588819981DC01EC -:1002D000ED91FC910190F081E02D62E0099588811B -:1002E0009981DC01ED91FC910190F081E02D65E0B8 -:1002F000DF91CF910994DF91CF910895A0916F057F -:10030000B0917005ED91FC9111970190F081E02D75 -:10031000682FCD0109941F93CF93DF93182FEB0122 -:1003200080913605909137056817790760F48091C0 -:10033000340590913505C80FD91F188380E0DF91EF -:10034000CF911F910895E0916305F0916405309776 -:1003500011F481E0F4CF81E08093330580914F0563 -:100360009091500509958091360590913705C817F1 -:10037000D90778F7DCCFCF93DF93EC01FB0130E0B6 -:1003800020E0C901880F991F8C179D0778F44081E0 -:10039000DB014D93BD011197918197959927979511 -:1003A000942B9C932F5F3F4F3296EBCFC901DF9187 -:1003B000CF910895FC018091B303882311F13FB7D9 -:1003C000F89482E08093E9002091F200822F90E07F -:1003D0001816190614F481E090E0882339F0289A61 -:1003E00044E64093B2034091F1004083222339F068 -:1003F0002091F200211103C02BE62093E8003FBFBB -:1004000008958FEF9FEF08952FB7F89483E08093BE -:10041000E9009091E800892F807295FF04C09091C7 -:10042000F20080E4891B2FBF08958091AA038111F7 -:100430000DC082E08093A60384E08093A70310920E -:10044000A9031092A80381E08093AA0386EA93E0AF -:10045000089581508F3008F047C0E82FF0E0ED5C40 -:10046000FD4F0C944F1F50025402420248024C02AE -:1004700074027402740257025D02610265026B022B -:1004800074026F02809180008F77809380000895BE -:10049000809180008F7DF9CF80918000877FF5CF9C -:1004A00084B58F7784BD089584B58F7DFBCF80910F -:1004B00090008F77809390000895809190008F7DB9 -:1004C000F9CF80919000877FF5CF8091C0008F7722 -:1004D0008093C00008958091C0008F7DF9CF8091F6 -:1004E000C200877F8093C2000895CF93DF93282FA7 -:1004F00030E0F901EE56FE4F8491F901ED58FE4FC0 -:10050000D491F901EC5AFE4FC491CC23A1F0811192 -:100510000E942902EC2FF0E0EE0FFF1FEA5BFE4F76 -:10052000A591B491EC91ED2381E090E009F480E095 -:10053000DF91CF91089580E090E0FACF1F93CF93A1 -:10054000DF93282F30E0F901EE56FE4F8491F90138 -:10055000ED58FE4FD491F901EC5AFE4FC491CC23D3 -:10056000A9F0162F81110E942902EC2FF0E0EE0F66 -:10057000FF1FE85CFE4FA591B4918FB7F894EC9102 -:10058000111108C0D095DE23DC938FBFDF91CF918E -:100590001F910895DE2BF8CFCF93DF9390E0FC01FD -:1005A000ED58FE4F24918C5A9E4FFC018491882374 -:1005B000C9F090E0880F991FFC01E65DFE4FA59100 -:1005C000B491FC01E85CFE4FC591D49161110DC05E -:1005D0009FB7F8948C91209582238C93888128234F -:1005E00028839FBFDF91CF910895623051F49FB768 -:1005F000F8943C91822F809583238C93E8812E2B55 -:10060000EFCF8FB7F894EC912E2B2C938FBFEACFBE -:10061000823108F08251E82FF0E0E25EFE4FE49173 -:1006200090917B008E2F880F880F80729F7D892B81 -:1006300080937B00E770E064E0937C0080917A0017 -:10064000806480937A0080917A0086FDFCCF80914F -:1006500078009091790008953FB7F8948091A203B3 -:100660009091A303A091A403B091A50326B5A89BE4 -:1006700005C02F3F19F00196A11DB11D3FBFBA2F34 -:10068000A92F982F8827BC01CD01620F711D811DF4 -:10069000911D42E0660F771F881F991F4A95D1F779 -:1006A00008958F929F92AF92BF92CF92DF92EF9276 -:1006B000FF926B017C010E942C034B015C01C11471 -:1006C000D104E104F104B9F00E942C0368197909FE -:1006D0008A099B09683E73408105910580F321E0FA -:1006E000C21AD108E108F10888EE880E83E0981E4E -:1006F000A11CB11CE4CFFF90EF90DF90CF90BF9092 -:10070000AF909F908F900895009721F0805C9F4F4D -:100710000C9454010895409151035091520320913B -:100720004F033091500342175307B4F49091E800FF -:100730009570E1F39091E80092FD19C08093F1006B -:10074000809151039091520301968F739927892BC1 -:1007500019F48EEF8093E800809151039091520339 -:100760000196909352038093510381E0089580E0B5 -:100770000895DF92EF92FF920F931F93CF93DF9331 -:10078000D82E8A01EB017B01E40EF51ECE15DF05A4 -:1007900059F0D7FE12C0FE0184910E948B0321966E -:1007A0008111F4CF0FEF1FEFC801DF91CF911F919F -:1007B0000F91FF90EF90DF9008958881EECF0F9317 -:1007C0001F93CF93DF931F92CDB7DEB782E089836B -:1007D00042E450E06CEA70E080E80E94B9030E94B5 -:1007E0001502DC0112960D911C910115110589F07D -:1007F000D801ED91FC910280F381E02DBE016F5F85 -:100800007F4FC801099597FD04C0F8010085118547 -:10081000ECCF89810F90DF91CF911F910F910895B7 -:10082000615030F02091F100FC0120830196F8CF57 -:10083000289A84E68093B2030895AF92BF92CF9234 -:10084000DF92EF92FF920F931F93CF93DF936C0190 -:100850007B018B01040F151FEB015E01AE18BF0871 -:10086000C017D10759F06991D601ED91FC91019023 -:10087000F081E02DC6010995892B79F7C501DF913B -:10088000CF911F910F91FF90EF90DF90CF90BF908D -:10089000AF900895FC01538D448D252F30E0842FB7 -:1008A00090E0821B930B541710F0CF960895019798 -:1008B0000895FC01918D828D981761F0A28DAE0F85 -:1008C000BF2FB11D5D968C91928D9F5F9F73928F0C -:1008D00090E008958FEF9FEF0895FC01918D828D38 -:1008E000981731F0828DE80FF11D858D90E0089505 -:1008F0008FEF9FEF0895FC01918D228D892F90E05D -:10090000805C9F4F821B91098F739927089584E023 -:1009100094E00E947B0421E0892B09F420E0822FDF -:10092000089580E090E0892B29F00E9487048111CE -:100930000C9400000895FC01A48DA80FB92FB11DDF -:10094000A35ABF4F2C91848D90E001968F73992705 -:10095000848FA689B7892C93A089B1898C918274E0 -:100960008C93938D848D981306C00288F389E02DB3 -:1009700080818F7D80830895EF92FF920F931F9364 -:10098000CF93DF93EC0181E0888F9B8D8C8D981342 -:1009900019C0E889F989808185FF14C09FB7F89450 -:1009A000EE89FF896083E889F98980818274808378 -:1009B0009FBF81E090E0DF91CF911F910F91FF9059 -:1009C000EF900895F62E0B8D10E00F5F1F4F0F7301 -:1009D0001127E02E8C8D8E110CC00FB607FCFACFBC -:1009E000E889F989808185FFF5CFCE010E949B04BB -:1009F000F1CFEB8DEC0FFD2FF11DE35AFF4FF0828D -:100A00009FB7F8940B8FEA89FB8980818062CFCFF2 -:100A1000CF93DF93EC01888D8823B9F0AA89BB8935 -:100A2000E889F9898C9185FD03C0808186FD0DC020 -:100A30000FB607FCF7CF8C9185FFF2CF808185FF41 -:100A4000EDCFCE010E949B04E9CFDF91CF910895B5 -:100A50008F929F92AF92BF92CF92DF92EF92FF92CE -:100A60000F931F93CF93DF936C017B018A018091D9 -:100A70000B01882309F45CC08091B303882309F437 -:100A800057C08091550380FF05C08091E0008260CF -:100A90008093E000E801B12C8AEFA82E93E0892E24 -:100AA0002AE3922E209711F4BB20D9F10E94040270 -:100AB00081110AC0AA94AA20D9F161E070E080E017 -:100AC00090E00E945103EECF8C171D0611F00CF040 -:100AD0008C2F9FB7F8948092E9002091E80025FDC3 -:100AE00002C09FBFDFCF282F30E0C21BD30BF7011E -:100AF000815020F041914093F100FACFE20EF31EB5 -:100B0000BB2021F09092E800B12CEBCF8091E8005F -:100B100085FDE7CF9092E800BB24B394209709F3BA -:100B2000F3CF5D9A84E680935403101611063CF0CF -:100B300081E090E0F6019383828310E000E0C80139 -:100B4000DF91CF911F910F91FF90EF90DF90CF90A9 -:100B5000BF90AF909F908F900895CF93DF931F9297 -:100B6000CDB7DEB76983DC01ED91FC910280F381A2 -:100B7000E02D41E050E0BE016F5F7F4F09950F907F -:100B8000DF91CF91089583E08093E9008091F20096 -:100B9000882319F08AE38093E80008950E940402F4 -:100BA00090E00895CF93DF931F92CDB7DEB7FC019D -:100BB0008485958597FD08C02FEF3FEF3587248703 -:100BC0000F90DF91CF910895CE0101960E94DA0136 -:100BD000019719F4898190E0F3CF8FEF9FEFF0CF69 -:100BE0000F931F93CF93DF931F92CDB7DEB78C0186 -:100BF000FC018485958597FF0BC0CE0101960E946C -:100C0000DA01019771F4898190E0F8019587848772 -:100C1000F801848595850F90DF91CF911F910F91F9 -:100C200008958FEF9FEFF1CFFC018485958597FDA7 -:100C30000BC09FB7F89482E08093E9008091F200A6 -:100C40009FBF90E0019608959FB7F89482E080934B -:100C5000E9008091F2009FBF90E008955F926F924B -:100C60007F928F929F92AF92BF92CF92DF92EF923C -:100C7000FF920F931F93CF93DF935C016901DA0119 -:100C80005C90232B19F4CC24CA94DC2C8A013A0101 -:100C9000660E771ED0E0C0E0F12CE12C87E0882EB4 -:100CA000912CF50180819181D8016C910C2E01C0AD -:100CB000660F0A94EAF765296F77DC01ED91FC91E4 -:100CC0000190F081E02D0995BFEFEB1AFB0AF801C6 -:100CD000608170E0C4018C1B9D0B02C07595679507 -:100CE0008A95E2F7562E2196C730D10558F1CE14D9 -:100CF000DF0441F1D5018D919C91652D6F77DC0169 -:100D0000ED91FC910190F081E02D0995BFEFEB1A78 -:100D1000FB0A551C5524551C2797E6CFEC14FD04FF -:100D200008F4BFCFDF91CF911F910F91FF90EF900B -:100D3000DF90CF90BF90AF909F908F907F906F90FB -:100D40005F9008950F5F1F4F6016710639F7209767 -:100D500049F3EC14FD0430F7F5018081918161E0E5 -:100D600070E001C0660FCA95EAF761506521DC01A9 -:100D7000ED91FC910190F081E02DDF91CF911F91D9 -:100D80000F91FF90EF90DF90CF90BF90AF909F902A -:100D90008F907F906F905F9009941F93CF93DF9314 -:100DA00000D0CDB7DEB7182F7A83698380913105E3 -:100DB000909132050097C9F0DC01ED91FC91019012 -:100DC000F081E02D1031B8F461157044A0F4612F6A -:100DD000606E099522E030E0AE014F5F5F4F62E048 -:100DE00070E081E395E00E942E060F900F90DF9156 -:100DF000CF911F91089560EF0995809131059091F1 -:100E00003205DC01ED91FC910190F081E02D6FE65F -:100E100009958091310590913205DC01ED91FC91AD -:100E20000190F081E02D612F099522E030E0AE01C4 -:100E30004F5F5F4F62E070E081E395E00E942E0615 -:100E40008091310590913205DC01ED91FC9101908A -:100E5000F081E02D67EF0995C8CFEF92FF920F93D5 -:100E60001F93CF93DF93C82F809131059091320566 -:100E70000097C9F17A018B01DC01ED91FC910190A1 -:100E8000F081E02D60EF0995809131059091320558 -:100E9000DC01ED91FC910190F081E02D6C2F099522 -:100EA000E7010E0D1F1DC017D10759F030E020E0FB -:100EB000AE0161E070E081E395E00E942E0621968C -:100EC000F2CF8091310590913205DC01ED91FC91DA -:100ED0000190F081E02D67EFDF91CF911F910F918D -:100EE000FF90EF900994DF91CF911F910F91FF90A8 -:100EF000EF900895CF92DF92EF92FF920F931F939E -:100F0000CF93DF93FC01E058FF4FE080EE2009F41F -:100F10005CC0EC01C05CDF4FA881B981109709F477 -:100F200054C0FC01EF57FF4FC080D180F601118102 -:100F30000081ED91FC9111970190F081E02D60EF1F -:100F4000CD01099588819981DC01ED91FC91019099 -:100F5000F081E02D69E7099588819981DC01ED91A7 -:100F6000FC910190F081E02D602F09958881998195 -:100F7000DC01ED91FC910190F081E02D612F09954C -:100F8000F12C01E010E00F5F1F4FE016F10659F061 -:100F900030E020E0A601400F511F61E070E0CE017B -:100FA0000E942E06F0CF88819981DC01ED91FC91A1 -:100FB0000190F081E02D67EFDF91CF911F910F91AC -:100FC000FF90EF90DF90CF900994DF91CF911F9128 -:100FD0000F91FF90EF90DF90CF900895009711F060 -:100FE0000C947A07089520912803260F3327331F86 -:100FF00021323105ECF42091DA03FC0190E080E02D -:10100000243069F082E00895A09128032191AC0179 -:101010004A5F5C4FA40FB52FB11D2C930196861724 -:1010200098F380912803680F6093280380E0089567 -:1010300081E008951092DA0381E08093D903109241 -:10104000B40361E082E00E949E0261E083E00E94BE -:101050009E02E9EBF0E080818E7F808380818D7F2E -:10106000808388E48093B80085E48093BC00089571 -:10107000CF93DF9391E0909305038823B9F0C0915B -:10108000B800D091BA008091BC008A7B8093BC00EC -:1010900060E082E00E949E0260E083E00E949E0287 -:1010A0000E941A08D093BA00C093B800DF91CF9184 -:1010B00008958F929F92AF92BF92CF92DF92EF925C -:1010C000FF920F931F93CF93DF93D0910304D132FC -:1010D00008F0D7C0182FC09102040E942C036B01A6 -:1010E0007C018091DA0381116BC082E08093DA0386 -:1010F0001093D9038FEF8093D8031092D703D09326 -:10110000D603A2EEB3E0E6EBF3E080E0D81391C0A3 -:101110001092B5038091B503CC0FC82BC093B503D3 -:101120008091B403813009F088C01092B4030E940A -:101130002C036B017C018091B5038093BB008091EF -:10114000DC039091DD03A091DE03B091DF03892BD6 -:101150008A2B8B2BA1F00E942C030091DC031091B1 -:10116000DD032091DE033091DF036C197D098E09C8 -:101170009F09061717072807390708F442C080910E -:10118000BC0083FDD8CF85EC8093BC000E942C036B -:101190006B017C018091DA03823009F450C08091A8 -:1011A000D8038F3F09F46FC08091D803803209F4CF -:1011B0006CC08091D803803309F469C084E026C0F4 -:1011C0008091DC039091DD03A091DE03B091DF03F9 -:1011D000892B8A2B8B2B09F484CF0E942C038090BF -:1011E000DC039090DD03A090DE03B090DF036C1968 -:1011F0007D098E099F0986169706A806B90608F08C -:1012000070CF8091DB030E94380885E01092E103E3 -:10121000109203041092E003DF91CF911F910F9180 -:10122000FF90EF90DF90CF90BF90AF909F908F9006 -:1012300008959D9191938F5F69CF85EEA5CF8091A1 -:10124000DC039091DD03A091DE03B091DF03892BD5 -:101250008A2B8B2B09F49ECF0E942C030091DC0378 -:101260001091DD032091DE033091DF036C197D09BD -:101270008E099F09061717072807390708F08ACF34 -:10128000C0CF81E0C3CF80E0C1CF82E0BFCF83E099 -:10129000BDCF089508950895E0910403809103035C -:1012A000E81730F4F0E0ED51FD4F808190E00895B3 -:1012B0008FEF9FEF089590910403809103032FEF28 -:1012C0003FEF981748F4E92FF0E0ED51FD4F2081F2 -:1012D00030E09F5F90930403C90108958091030358 -:1012E00090910403891B990B0895CF92DF92EF929E -:1012F000FF920F931F93CF93DF937C01CB018A0161 -:101300002091E003222389F0EB016B01C40ED51E6E -:10131000CC15DD0569F06991D701ED91FC91019043 -:10132000F081E02DC7010995F3CF642F0E94F307E8 -:10133000C801DF91CF911F910F91FF90EF90DF9047 -:10134000CF900895CF93DF931F92CDB7DEB7698317 -:101350002091E0032223F9F020910304203258F079 -:1013600021E030E0FC013383228390E080E00F90A5 -:10137000DF91CF9108958091E103E82FF0E0EE51E5 -:10138000FC4F998190838F5F8093E10380930304E6 -:1013900081E090E0ECCF61E0CE0101960E94F3077E -:1013A000F7CF90E080E00895DF92EF92FF920F93E5 -:1013B0001F93CF93DF93EC01D62E7A0189018881A8 -:1013C0008C3008F067C061E08D2D0E94CC028881CE -:1013D000282F30E0F901EE0FFF1FE20FF31FE55257 -:1013E000FA4F9D2D9F736081607C692B608320E2A2 -:1013F00032E02E193F0937FF02C02D5F3F4F359570 -:10140000279535952795298320E639E0201B310B58 -:1014100037FF02C02D5F3F4F3595279535952795AE -:101420002A832CE0622F0E94431F829FB001112467 -:1014300030E020E0AB01420F531FFA01EE0FFF1F17 -:10144000E40FF51FE552FA4F908196FD16C02F5F0D -:101450003F4F2C30310571F781110FC01092800081 -:1014600082E0809381001092850010928400B19AEE -:1014700080916F00826080936F00E8818E2F90E0F2 -:10148000FC01EE0FFF1FE80FF91FE552FA4F8081B4 -:10149000806480838881DF91CF911F910F91FF90AD -:1014A000EF90DF900895CF938C30B0F421E030E0DE -:1014B000082E02C0220F331F0A94E2F740919703CF -:1014C00050919803672B51F42095309524233523B0 -:1014D0003093980320939703CF910895242B352BB5 -:1014E00030939803209397039091E1029111F4CFE8 -:1014F000C82F0E940803BC018C2FCF910C94CD06FD -:101500004F925F926F927F928F929F92AF92BF9213 -:10151000CF92DF92EF92FF920F931F93CF93DF93BF -:10152000843008F0A3C08F5FC82FCC0FCC0FCC0F36 -:101530004C2ECF3110F05EE1452ED62F38EF532ED2 -:101540005C0E852C912CC401880F991F9C012F5093 -:101550003B4F5901052DD12CC12C10E077247394F9 -:101560000415A8F5F601E80DF91DEC58FA4F908125 -:101570009230B8F48D2F872166246394811101C0C5 -:10158000612C7601EE0CFF1C913089F4172931EAA9 -:10159000E30EF11CF501EE0DFF1D862D90E0918309 -:1015A0008083770C0F5F8FEFC81AD80AD9CF8823B2 -:1015B00071F3F701EF55FF4FEA0DFB1D808191811B -:1015C000019729F362E0802F0E94CC02E0CF10FF48 -:1015D00005C06D2F6170852D0E949E0211FF06C00F -:1015E0006D2F627089EF8C0F0E949E0212FF06C061 -:1015F0006D2F64708AEF8C0F0E949E0213FF06C04D -:101600006D2F68708BEF8C0F0E949E0214FF06C036 -:101610006D2F60718CEF8C0F0E949E0215FF06C02B -:101620006D2F60728DEF8C0F0E949E0216FF06C018 -:101630006D2F60748EEF8C0F0E949E0217FF16C0F4 -:101640006D2F60788FEF8C0FDF91CF911F910F91ED -:10165000FF90EF90DF90CF90BF90AF909F908F90D2 -:101660007F906F905F904F900C949E02DF91CF918E -:101670001F910F91FF90EF90DF90CF90BF90AF90B0 -:101680009F908F907F906F905F904F9008958F9272 -:101690009F92AF92BF92CF92DF92EF92FF920F9301 -:1016A0001F93CF93DF93EB018E3108F094C0082F86 -:1016B00010E0F801EC58FA4F9081933009F498C08B -:1016C000943009F088C0F801E254FD4FC080D12C5D -:1016D0007601EE0CFF1C4B01603282E078070CF0C3 -:1016E0003EC0F701EC0DFD1DE050FA4F8181A8E8E6 -:1016F0008A2E912C881A910887FD9394880C991C46 -:10170000880C991C092C000CAA08BB08828128E5CA -:1017100032E0281B310987FD3395220F331F220F3A -:10172000331F032E000C440B550B281939094A09A5 -:101730005B09DB01653B710514F0A4EBB0E0B7FF7A -:1017400002C0B0E0A0E00E940A1F24EB30E040E0BD -:1017500050E00E94E01E820E931EA41EB51EF701EB -:10176000EC0DFD1DE050FA4F20812C3068F53181E1 -:1017700088E890E0831B910937FD9395880F991FA6 -:10178000880F991F881699067CF0328188E592E0CF -:10179000831B910937FD9395880F991F880F991F17 -:1017A000881699060CF4C4010297880F991F4FB749 -:1017B000F89430E0F901EE0FFF1FE20FF31FE5523E -:1017C000FA4F928381834FBF000F111FF801EE562D -:1017D000FA4FD183C083DF91CF911F910F91FF907A -:1017E000EF90DF90CF90BF90AF909F908F90089533 -:1017F000F82E83E0081759F08BEF800F823038F015 -:1018000087EF800F833018F08DE00813DDCF61E0A3 -:101810008F2D0E94CC02209729F460E08F2D0E942A -:101820009E02D2CFCF3FD10511F461E0F7CFF8018E -:10183000EE56FE4FE491E150EF3008F07CC0F0E04E -:10184000EC5DF34F0C944F1F330C380C3D0C470CE0 -:10185000510C9B0C9B0C9B0C5B0C650C6F0C790C5E -:10186000860C9B0C8E0C84B5806884BDC7BDACCF44 -:1018700084B5806284BDC8BDA7CF80918000806898 -:1018800080938000D0938900C09388009DCF809181 -:101890008000806280938000D0938B00C0938A0088 -:1018A00093CF80918000886080938000D0938D00DA -:1018B000C0938C0089CF80919000806880939000C5 -:1018C000D0939900C09398007FCF80919000806260 -:1018D00080939000D0939B00C0939A0075CF809125 -:1018E0009000886080939000D0939D00C0939C00EE -:1018F0006BCF8091C00080688093C0008091C00051 -:101900008F7B8093C000C093CF005ECF8091C000DA -:1019100080628093C000C093D00056CF8091C200F7 -:1019200088608093C2008091C2008B7F8093C20048 -:10193000C093D20049CFC038D1050CF076CF6DCF1F -:101940008E3180F4E82FF0E0DF01AC58BA4F9C9163 -:10195000913041F4EE0FFF1FEE56FA4F6083718312 -:101960000C949E020895FF920F931F93CF93DF93E1 -:1019700000D0CDB7DEB7082F10E0F801E959FC4FD1 -:101980009081F62EF92204521D4F411104C0F80136 -:1019900090819F1511F12F2D30E03A832983A0917A -:1019A0003105B09132051097B1F0682F6F70606902 -:1019B000ED91FC9111970190F081E02DCD010995F9 -:1019C00022E030E0AE014F5F5F4F62E070E081E304 -:1019D00095E00E942E06F801F0820F900F90DF91A3 -:1019E000CF911F910F91FF9008950F931F93CF9365 -:1019F000DF93843008F069C0282F30E0F901E55901 -:101A0000FC4F6083672B09F460C0082F29593C4FB5 -:101A1000F9011081D82FDD0FDD0FDD0FC12FC1704F -:101A200010FF07C08D2F0E947502C1E0892B09F4B9 -:101A3000C0E011FF07C081E08D0F0E947502892B65 -:101A400009F0C26012FF07C082E08D0F0E9475028C -:101A5000892B09F0C46013FF07C083E08D0F0E943B -:101A60007502892B09F0C86014FF07C084E08D0F50 -:101A70000E947502892B09F0C06115FF07C085E03F -:101A80008D0F0E947502892B09F0C062D831A1F038 -:101A900016FF07C086E08D0F0E947502892B09F0A2 -:101AA000C064D73149F017FF07C087E08D0F0E944F -:101AB0007502892B09F0C06841E06C2F802FDF91FF -:101AC000CF911F910F910C94B30CDF91CF911F9187 -:101AD0000F910895A82FB0E0A254BD4F9C91292FDB -:101AE00030E0F901EE0FFF1FE20FF31FE050FA4F55 -:101AF000E0812E2F30E0F901EE0FFF1FE20FF31F00 -:101B0000E552FA4F80818F7B80838091BC029813CD -:101B100008C0992319F091509093BC028FEF8C93D9 -:101B200008958823D9F3E091BD02EF5FE093BD02F1 -:101B3000F0E0E359FD4F9083F1CFFC0101900020CC -:101B4000E9F73197BF01681B790BAC0181E70C9471 -:101B50002D07CF93DF93DB019091BC029C3078F589 -:101B60003091BD02682F70E0FB01E254FD4F33233A -:101B7000E1F0C32FD0E0C359DD4F8881808331501D -:101B80003093BD02808123E0829FC00111248050E8 -:101B90009A4F1A161B0674F4141615065CF49A0173 -:101BA000AD01DF91CF910C94D40990839F5F909306 -:101BB000BC02E8CF20E639E040E252E0F2CF82E515 -:101BC00091E0DF91CF910C949D0D85ED8093BC0049 -:101BD0008091DC039091DD03A091DE03B091DF03DF -:101BE0000796A11DB11D23E0B695A79597958795FA -:101BF0002A95D1F72091BC0024FD03C01092DA038E -:101C000008954091DC035091DD036091DE037091F3 -:101C1000DF03452B462B472B69F30097A105B10540 -:101C200041F02AE22A95F1F700C00197A109B10914 -:101C3000E1CF8091DB030C943808AF92BF92CF9232 -:101C4000DF92EF92FF920F931F93CF93DF93C82EF3 -:101C5000D12CE601CF50DB4FFE01ED57FF4F9081B5 -:101C60009F3709F49BC07B01182F963069F480914F -:101C7000E002882349F06630710509F437C11092FB -:101C8000E0028FEF80930C011E3110F584E0E8161E -:101C9000F104F1F0F601E254FD4F80818C30C0F484 -:101CA00090E0FC01EE0FFF1FE80FF91FE050FA4F24 -:101CB000E0818E2F90E0FC01EE0FFF1FE80FF91F6F -:101CC000E552FA4F808186FF03C0812F0E946A0D82 -:101CD0000EEE010F0C3028F561E070E032E0E31603 -:101CE000F10411F070E060E0802F0E94530AE12FB0 -:101CF000E695E695E695F0E0E959FC4F2081312F15 -:101D0000377081E090E001C0880F3A95EAF7E1145E -:101D1000F10421F03BE0E316F10419F5822B8083F6 -:101D200002C01E3120F35601AA0CBB1CF501EE5671 -:101D3000FA4F118210828CE0E816F10408F0C8C056 -:101D4000F701EB55F14F0C944F1FC20EEE0EB40E7F -:101D5000050F260F680F5C0F680F680F680FCE0E17 -:101D6000D90E80958223DBCF0C30C0F460E0812F48 -:101D70000E94CC02CD57DF4F88818F3779F082E007 -:101D800088830CC01E3150F460E0812F0E94CC0289 -:101D9000CD57DF4F88818F3709F01882DF91CF91BF -:101DA0001F910F91FF90EF90DF90CF90BF90AF9079 -:101DB00008951E3198F762E0812F0E94CC02CD5722 -:101DC000DF4F88818F3711F08BE08883F501EE5665 -:101DD000FA4F81E090E091838083E0CF1E31F0F6EE -:101DE000FE01ED57FF4F8081833021F460E0812FA9 -:101DF0000E949E0261E0812F0E94CC02CD57DF4FEE -:101E000088818F3759F281E0BBCF133059F08BEFC7 -:101E1000810F823038F087EF810F833018F01D304A -:101E200009F0BCCF61E0812F0E94CC0261E0812FDC -:101E30000E94CC0260E0812F0E949E02CD57DF4FAE -:101E400088818F3709F4AACF83E09ACF1E3108F03A -:101E5000A5CFCD57DF4F88818F3711F084E088837D -:101E6000F601E254FD4F80818F3FA9F090E0FC0124 -:101E7000EE0FFF1FE80FF91FE050FA4FE0818E2FA1 -:101E800090E0FC01EE0FFF1FE80FF91FE552FA4F3B -:101E9000808186FD83CF4FEF5FEF6FEF7FEF812F64 -:101EA000DF91CF911F910F91FF90EF90DF90CF9036 -:101EB000BF90AF900C94A90D1250123008F06ECF65 -:101EC000CD57DF4F88818F3709F468CF86E058CF30 -:101ED00086E691E0DF91CF911F910F91FF90EF90F7 -:101EE000DF90CF90BF90AF900C949D0D1E3108F401 -:101EF000D1CEEECE0F931F93CF93DF9381E08093EB -:101F0000E1028091E002882329F01092E0028FEF35 -:101F100080930C01EBE6F3E0C7E6D3E0ACEDB2E072 -:101F2000119219921D9283E0EF36F807C9F70EEB74 -:101F300012E0C0E0DFEF8EEE8C0F62E070E08C30DC -:101F400010F061E070E08C2F0E941D0EF801D1931B -:101F50008F01CF5FCE3179F71092980310929703DB -:101F60001092BD021092BC021092E102DF91CF915B -:101F70001F910F9108954F925F926F927F928F926F -:101F80009F92AF92BF92FF920F931F93CF93DF93D5 -:101F9000F82E8B01D42FC22F6F3F760709F490C023 -:101FA00081E08093E003F09202041092E10310922A -:101FB00003048FEC95E00E94A2098C2F0E9459081F -:101FC0008091BA029091BB028230910538F0880F5F -:101FD000991F880F991F05970197F1F70E942C030D -:101FE0004B015C018091DA0381116CC0CD2FD1329D -:101FF00008F0C0E281E08093DA038093D9039FEF79 -:102000009093D8031092D7039C0F9093D60380939C -:10201000B5039091B5038F2D880F892B8093B5035D -:102020008091B403813009F0A1C01092B4030E94E2 -:102030002C034B015C018091B5038093BB00809120 -:10204000DC039091DD03A091DE03B091DF03892BC7 -:102050008A2B8B2BA1F00E942C034090DC03509024 -:10206000DD036090DE037090DF03681979098A0947 -:102070009B09461657066806790608F444C0809105 -:10208000BC0083FDD8CF85EC8093BC000E942C035C -:102090004B015C018091DA03813009F469C08091C1 -:1020A000D7038C1710F4C091D703E6EBF3E0A3EE4F -:1020B000B2E080E08C1761F191919D938F5FFACF30 -:1020C00000E08CCF8091DC039091DD03A091DE03D2 -:1020D000B091DF03892B8A2B8B2B09F483CF0E94CD -:1020E0002C034090DC035090DD036090DE03709081 -:1020F000DF03681979098A099B094616570668069D -:10210000790608F06FCF8091DB030E943808C0E0A9 -:1021100010920403C09303032D2F30E08C2F90E026 -:10212000281739070CF046C087E791E00E949D0D03 -:10213000F0927A0200937B020AE712E0AD2EB12CF6 -:10214000C8018A5792408A159B050CF041C00F5F69 -:102150001F4F90910303809104039817C9F18FECEE -:1021600095E00E945B09F8018183EACF85EE8CCF70 -:102170008091DC039091DD03A091DE03B091DF0339 -:10218000892B8A2B8B2B09F485CF0E942C0340903E -:10219000DC035090DD036090DE037090DF0368196C -:1021A00079098A099B09461657066806790608F0D8 -:1021B00071CFA9CF821793070CF0BACF84E991E0D1 -:1021C0000E949D0DD091030380910403D81BB0CFD2 -:1021D000DE5F6D2F70E04AE752E087E7DF91CF9135 -:1021E0001F910F91FF90BF90AF909F908F907F9025 -:1021F0006F905F904F900C942D07EF92FF920F938A -:102200001F93CF93DF938956823108F033C0EA01E0 -:10221000162FE82FF0E0E15FFE4E0C944F1F511394 -:102220003A11BA123A1110133A1198123E123A1199 -:102230003A113A113A113A1121113A1102123A1196 -:102240008212998195FF0AC080EB91E0DF91CF91D6 -:102250001F910F91FF90EF900C949D0D888131E0BC -:1022600096FB222720F9232798719830D1F148F462 -:102270009923A9F0DF91CF911F910F91FF90EF90DB -:102280000895903109F44CC09831A1F720910C01C8 -:1022900012160CF472C08FEF80930C01EBCF3093C9 -:1022A000E003809302041092E1031092030402E021 -:1022B000011778F4FE01E00FF11D61816795662733 -:1022C00067958081680F8FEC95E00E94A2090E5FF0 -:1022D000EFCF81E00E94590883E191E00197F1F787 -:1022E000C9CF9A814B816630A1F430E8439FB00199 -:1022F0001124690F711D4D814795442747959C8195 -:10230000490FDF91CF911F910F91FF90EF900C94A7 -:10231000BB0F479544274795490F6FEF7FEFF1CFEC -:10232000E0910C01E7301CF080ED91E08FCF3A8115 -:102330009B816630D9F460E8969FA0011124430F79 -:10234000511D9D819795992797953C81930FEF5F3C -:10235000E0930C0135E0E302F0011124E159FC4F58 -:102360008083528341839383248384CF97959927D5 -:102370009795930F4FEF5FEFEACF90E0622F022E19 -:10238000000C770B35E0492F50E06417750764F0B7 -:10239000349FF001359FF00D1124E159FC4F40812D -:1023A000481719F09F5FEFCF90E085E0492F50E08C -:1023B000641775071CF19830F8F4FA0131968E9F76 -:1023C000D0018F9FB00D1124A159BC4F3C91849F27 -:1023D000F001859FF00D1124E159FC4F30831196D7 -:1023E0004D915C9112975283418313963C911397C0 -:1023F000338314963C9134839F5FD8CF2150209330 -:102400000C0138CF623078F0898160E8869F9001B6 -:1024100011248881820F932F911D009721F09093B2 -:10242000BB028093BA028091E002811123CFC0E009 -:102430008EEF8C0F823028F466E070E08C2F0E94C3 -:102440001D0ECF5FCE31A1F781E08093E0021092A4 -:102450000403109203031092E103109203040E94FC -:102460001A0889E499E090932703809326038AE46D -:1024700099E090932B0380932A03FCCE653008F4F7 -:10248000F9CE18811E3108F0F5CE0981EA80FB8073 -:10249000CC81E12FF0E0E254FD4F80818C30C0F41C -:1024A00090E0FC01EE0FFF1FE80FF91FE050FA4F1C -:1024B000E0818E2F90E0FC01EE0FFF1FE80FF91F67 -:1024C000E552FA4F808186FF03C0812F0E946A0D7A -:1024D00080E8C89FA00111244F0D511D90E8E99E8E -:1024E000B0011124600F711D812F0E94A90D64E0BD -:1024F00070E0812FDF91CF911F910F91FF90EF90AE -:102500000C941D0E623008F4B5CE8981E0E88E9FF0 -:10251000900111248881820F932F911D009729F03B -:1025200090930E0180930D01A5CE81E090E0F8CF4D -:10253000623008F49FCE698170E0123091F08A8198 -:10254000F0E88F9FC0011124682B792B133049F0DC -:102550008B8190E090E4899F902D88271124682B2F -:10256000792B8881DF91CF911F910F91FF90EF9090 -:102570000C94470B80EF0E947E018CE60E947E0146 -:10258000C0E080E00E947E0181E00E947E018BE03D -:102590000E947E0181E00E947E0181E00E947E0116 -:1025A00081E00E947E018EEE8C0F8C3088F482E0F8 -:1025B0000E947E018AE00E947E018BEF8C0F8230A8 -:1025C00048F087EF8C0F833028F0CD3049F402C0FB -:1025D000C33099F783E00E947E0188E00E947E016B -:1025E00084E00E947E018EE00E947E018EEF8C0FBF -:1025F000823030F486E00E947E0181E00E947E01FC -:102600008FE70E947E01CF5FCE3109F0BACF87EF0E -:10261000DF91CF911F910F91FF90EF900C947E016D -:10262000662309F427CEC88180EF0E947E018EE6E2 -:102630000E947E018C2F0E947E01CE3140F7D0E0B7 -:10264000FE01EC58FA4F80810E947E01CC0FDD1F05 -:102650008E010E561A4FF80180818F770E947E01FD -:10266000F801808191819C012078232B39F0880F1B -:10267000892F881F990B8F770E947E01CE56DA4FE3 -:10268000888199819C012227307C232B09F4BFCFBC -:10269000990F880B990F982F881F8F770E947E01C2 -:1026A000B6CF80EF0E947E018AE60E947E01CEEEC8 -:1026B0008FE7CC3008F48C2F0E947E01CF5FCC30A6 -:1026C000B9F7A5CF1F920F920FB60F9211242F9337 -:1026D0003F938F939F93AF93BF9380919E0390916D -:1026E0009F03A091A003B091A10330919D0323E02B -:1026F000230F2D3758F50196A11DB11D20939D0381 -:1027000080939E0390939F03A093A003B093A10393 -:102710008091A2039091A303A091A403B091A5037B -:102720000196A11DB11D8093A2039093A303A093D2 -:10273000A403B093A503BF91AF919F918F913F9157 -:102740002F910F900FBE0F901F90189526E8230F22 -:102750000296A11DB11DD2CF1F920F920FB60F92FC -:1027600011248F939F938091E1009091E100937FDA -:102770009093E10083FF0FC01092E90091E09093E5 -:10278000EB001092EC0092E39093ED001092B303F3 -:1027900098E09093F00082FF22C093E09093E900CC -:1027A0009091F200992319F09AE39093E8009091A8 -:1027B0005403992341F09091540391509093540302 -:1027C000911101C05D989091B203992341F09091CD -:1027D000B20391509093B203911101C0289884FFE5 -:1027E00018C08091E2008E7E81608093E20080912B -:1027F000E1008F7E8093E100809155038E7E8061A1 -:10280000809355039F918F910F900FBE0F901F9053 -:10281000189580FFF7CF8091E2008E7E80618093D3 -:10282000E2008091E1008E7E8093E100809155036B -:102830008E7E8160E5CF1F920F920FB60F9211240A -:10284000CF92DF92EF92FF920F931F932F933F93BC -:102850004F935F936F937F938F939F93AF93BF93A8 -:10286000EF93FF93CF93DF93CDB7DEB76C97DEBFC7 -:10287000CDBF1092E9008091E80083FF25C068E099 -:10288000CE0145960E94100482EF8093E8008D8966 -:1028900087FF39C09091E80090FFFCCF982F907689 -:1028A00009F034C19E894F89588D2F89F88C911178 -:1028B00031C0803861F5809156038093F100109209 -:1028C000F1008EEF8093E8006C960FB6F894DEBFAF -:1028D0000FBECDBFDF91CF91FF91EF91BF91AF912F -:1028E0009F918F917F916F915F914F913F912F9128 -:1028F0001F910F91FF90EF90DF90CF900F900FBE40 -:102900000F901F9018959EEF9093E800C7CF1092FC -:10291000F100D5CF913059F48111D3CF4130510519 -:1029200081F6809156038D7F80935603CACF9330F2 -:1029300049F48111C6CF4130510519F680915603F3 -:102940008260F2CF953041F48091E80080FFFCCFA7 -:1029500020682093E300B5CF963009F0A9C00B8D15 -:102960001C8D22E01092E900109252031092510344 -:10297000F2122EC01092500310924F030E94DF03F8 -:102980001F8299E09983FA8291E09E8390EA98876A -:102990009AEF99872091510330915203275F3F4F5F -:1029A0003C832B838D831092E90010925203109286 -:1029B00051031093500300934F0349E050E0BE01D0 -:1029C0006F5F7F4F80E00E94B9030E94DF0379CFE1 -:1029D0001093500300934F030E941502DC011296DE -:1029E0000D911C910115110509F451C1D801ED910A -:1029F000FC910480F581E02DBE016B5E7F4FC80124 -:102A00000995009709F03EC1F80100851185EACFCC -:102A1000F3E0FF120EC08F89882309F440C0823092 -:102A200061F440E86DE080E191E00E948A18811134 -:102A300048CF81E28093EB0047CF813029F440E812 -:102A40006BE084E091E0F1CF833099F70E941502AA -:102A5000DC011296ED90FC908E010F5F1F4F680114 -:102A6000E114F10479F0D701ED91FC910680F78132 -:102A7000E02DB801C7010995080F111DF701E08489 -:102A8000F184EECFD8011C92F60101900020E9F705 -:102A90003197BF016C197D0940E0C601C6CF6EEECB -:102AA00070E0FB01449150E080E80E94B90309CF37 -:102AB000973009F4BECF983021F481E08093F10083 -:102AC00000CF993009F0FDCE837009F0B2CFE6E176 -:102AD000F1E081E031E096E32191222371F08093CF -:102AE000E9003093EB00DF0111972C912093EC006B -:102AF0009093ED008F5F873079F78EE78093EA003F -:102B00001092EA008F898093B303DBCE8B8D9C8D6E -:102B10001092E900109252031092510390935003C7 -:102B200080934F03898D811192C08E899D89913A3E -:102B300049F4813209F07DCF47E050E064E071E074 -:102B400080E0B3CF913209F074CF833269F48F897A -:102B5000988DB0E0A0E08093000190930101A093D4 -:102B60000201B0930301ADCE803269F48091E80098 -:102B700082FFFCCF67E084E091E00E9410048BEFBD -:102B80008093E8009ECE823209F09BCE8F8980939D -:102B90000B01EEEFFFE7859194918B3F9C4D51F136 -:102BA000E0E0F8E08091040190910501A091060118 -:102BB000B0910701803B9440A105B105F1F48091EB -:102BC0000B0180FD1AC0EE3F8AE0F80789F587E720 -:102BD00097E791838083809160008093530388E11D -:102BE0009BE00FB6F894A895809360000FBE909379 -:102BF000600067CEEEEFFAE0D5CF80819181873714 -:102C0000974709F05ECEA895809160008861809317 -:102C100060008091530380936000EE3F2AE0F2074A -:102C200089F08091FE0A9091FF0A9183808349CEBA -:102C3000808191818737980751F29093FF0A8093A2 -:102C4000FE0AC5CF1092FF0A1092FE0A3ACE0E94E9 -:102C50001502DC0112960D911C910115110509F464 -:102C6000E8CED801ED91FC910190F081E02DBE01FC -:102C70006B5E7F4FC8010995811123CEF801008555 -:102C80001185EBCF181619060CF41BCED2CEF1E04D -:102C9000FF12BECE62EF70E004CF1F920F920FB60C -:102CA0000F9211242F933F934F935F936F937F93D2 -:102CB0008F939F93AF93BF93EF93FF9384E094E040 -:102CC0000E949B04FF91EF91BF91AF919F918F91D3 -:102CD0007F916F915F914F913F912F910F900FBE18 -:102CE0000F901F9018951F920F920FB60F921124FC -:102CF0002F938F939F93EF93FF93E0911404F091A0 -:102D000015048081E0911A04F0911B0482FD1BC020 -:102D1000908180911D048F5F8F7320911E04821714 -:102D200041F0E0911D04F0E0EC5FFB4F958F809344 -:102D30001D04FF91EF919F918F912F910F900FBEE6 -:102D40000F901F9018958081F4CF1F920F920FB6AD -:102D50000F9211240F900FBE0F901F9018951F9285 -:102D60000F920FB60F9211242F933F934F935F93BF -:102D70006F937F938F939F93AF93BF93EF93FF9343 -:102D80008091B900887F803609F44AC0F0F5883216 -:102D900009F4A7C018F5803109F49BC0B8F4882362 -:102DA00009F4F9C0883009F494C0FF91EF91BF9104 -:102DB000AF919F918F917F916F915F914F913F91D3 -:102DC0002F910F900FBE0F901F901895883109F426 -:102DD00088C0803251F78093D80314C0803409F43E -:102DE0009DC040F48033B9F38833F9F68093D8035B -:102DF00085ECB0C0803509F485C0883509F496C0EB -:102E0000883499F60E94E50DD0CF883909F48CC03A -:102E100038F5883729F050F4883611F0803729F6D4 -:102E200083E08093DA0310924C0357C0883809F48A -:102E30007BC0803919F0803809F0B7CF80914C03FE -:102E4000803208F071C0E0914C0381E08E0F8093D6 -:102E50004C038091BB00F0E0E45DFC4F80833DC0FB -:102E6000803B39F0E0F4803A09F479C0883A09F0FF -:102E70009CCF84E08093DA031092290310922803F8 -:102E8000E0912603F0912703099580912803811191 -:102E90000FC081E0809328031092060309C0803C94 -:102EA00009F4A6CF883C09F4A3CF883B09F07DCF75 -:102EB000E091290381E08E0F80932903F0E0EA5F1F -:102EC000FC4F80818093BB0090912903809128035F -:102ED00029C08091B5038093BB0085EC8093BC0032 -:102EE00064CF9091D7038091D603981758F5E0915D -:102EF000D70381E08E0F8093D703F0E0EA54FC4FB4 -:102F00008081E9CFE091D70381E08E0F8093D703D2 -:102F10008091BB00F0E0EA54FC4F80839091D7038E -:102F20008091D6039817C8F285E8D8CFE091D703EF -:102F300081E08E0F8093D7038091BB00F0E0EA54CC -:102F4000FC4F80838091D90381115CCF81E0809315 -:102F5000B40384EA8093BC001092DA0326CF85EC98 -:102F60008093BC001092DA0380914C03803230F4DD -:102F7000E0914C03F0E0E45DFC4F108260914C0363 -:102F800070E0E0912A03F0912B038CE293E0099525 -:102F900010924C030ACF1092D80334CF1F920F9295 -:102FA0000FB60F9211242F933F934F935F936F931C -:102FB0007F938F939F93AF93BF93CF93DF93EF93C1 -:102FC000FF938091E202C091FF05D0E087FF24C00B -:102FD00010928500109284008091E2028F5F8093AE -:102FE000E2028091E202082E000C990B8C179D07DB -:102FF00024F48091E2028C30C4F18091840090919D -:103000008500049680349C4908F47AC0809184003D -:1030100090918500049676C08091E202082E000C03 -:10302000990B8C179D07C4F6E091E2028E2FEE0FEC -:10303000990BFC01EE0FFF1FE80FF91FE552FA4F45 -:10304000808186FFC9CFE091E2028E2FEE0F990BAF -:10305000FC01EE0FFF1FE80FF91FE552FA4F8081C8 -:1030600060E08F730E949E02B7CF20918400309160 -:103070008500E091E2028E2FEE0F990BFC01EE0F1E -:10308000FF1FE80FF91FE552FA4F81819281820FED -:10309000931F9093890080938800E091E2028E2F25 -:1030A000EE0F990BFC01EE0FFF1FE80FF91FE55221 -:1030B000FA4F808186FF11C0E091E2028E2FEE0F61 -:1030C000990BFC01EE0FFF1FE80FF91FE552FA4FB5 -:1030D000808161E08F730E949E02FF91EF91DF91EA -:1030E000CF91BF91AF919F918F917F916F915F91A0 -:1030F0004F913F912F910F900FBE0F901F901895F9 -:1031000080E49CE990938900809388008FEF8093FE -:10311000E202E3CFEF92FF920F931F93CF93DF93DF -:10312000F82E192FE62E042F81E0860F880F0E94BB -:103130008B0383E00E948B03CF2DD12FEC0EFD2E4D -:10314000F11CCE15DF05B9F007FF13C0FE01849115 -:103150000E948B03182F80E00E948B03812321960D -:103160008111EFCFDF91CF911F910F91FF90EF90E1 -:1031700008958881EDCF81E0F5CF10920704109279 -:10318000060488EE93E0A0E0B0E0809308049093FA -:103190000904A0930A04B0930B0420E231E03093B9 -:1031A0000504209304042DEC30E0309311042093A7 -:1031B00010042CEC30E0309313042093120428EC1C -:1031C00030E0309315042093140429EC30E0309360 -:1031D0001704209316042AEC30E03093190420934E -:1031E00018042EEC30E030931B0420931A04109244 -:1031F0001D0410921E0410921F04109220041092BD -:10320000A4041092A3048093A5049093A604A09311 -:10321000A704B093A80422E331E03093A2042093E2 -:10322000A1042FEF3FEF3093AE042093AD0421EFC4 -:1032300034E0109232051092310530933505209319 -:10324000340540E450E05093370540933605109222 -:1032500038051092390510923B0510923A051092EC -:103260003C0510923E0510923D05109240051092CB -:103270003F051092420510924105109244051092AC -:10328000430510924605109245051092480510928C -:10329000470510924A051092490510925005109268 -:1032A0004F0510925205109251051092540510923C -:1032B0005305109256051092550510926405109210 -:1032C00063051092330510927105109273051092E8 -:1032D00072051092CE0544E051E05093580540939A -:1032E00057054EE051E050935A054093590548E187 -:1032F00051E050935C0540935B0542E251E05093EE -:103300005E0540935D054CE251E0509360054093AB -:103310005F0546E351E0509362054093610540E448 -:1033200051E0509366054093650541E451E05093A8 -:103330006805409367054EEE57E050936A05409349 -:10334000690530934C0520934B0544E853E05093B6 -:103350006C0540936B0530934E0520934D052CE48E -:1033600031E030936E0520936D051092D2051092D6 -:10337000D1058093D3059093D405A093D505B09340 -:10338000D60584E491E09093D0058093CF05E0E0EA -:10339000F6E02FEF48EB5BE08091FF058C30B8F44E -:1033A00091E0980F9093FF05808390E0DC01AA0FD5 -:1033B000BB1FA80FB91FA552BA4F12965C934E932C -:1033C0001197339686E0E432F80731F708952083A9 -:1033D000F8CF789484B5826084BD84B5816084BD63 -:1033E00085B5826085BD85B5816085BD80916E00A3 -:1033F000816080936E0010928100809181008260D4 -:103400008093810080918100816080938100809110 -:103410008000816080938000809191008260809321 -:103420009100809191008160809391008091900043 -:103430008160809390008091C10084608093C1007E -:103440008091C10082608093C1008091C100816041 -:103450008093C1008091C30081608093C3008091FC -:10346000C00082608093C0008091C2008160809320 -:10347000C20080917A00846080937A0080917A0003 -:10348000826080937A0080917A00816080937A00D4 -:1034900080917A00806880937A001092B303109232 -:1034A0005603109255038091D70081608093D70016 -:1034B00080EA8093D80089B5806189BD89B5826032 -:1034C00089BD09B400FEFDCF61E070E080E090E0CE -:1034D0000E9451038091D8008F7C80618093D80036 -:1034E0008091E000807F8093E0008091E1008E7EFB -:1034F0008093E1008DE08093E200559A209A5D98D8 -:10350000289885E1809371058091720590917305EB -:103510000E94F11FC0917105D0E0CE0101960E947A -:10352000551F9093730580937205FC01EC0FFD1FEE -:10353000108222E0DC012C9325E011962C93AE0141 -:10354000425051096AE572E002960E947A2087E4AF -:103550009BE0909362038093610380E89AE09093EC -:10356000600380935F0383E59AE090935E0380930A -:103570005D0385EF9CE090935C0380935B038DE19A -:103580009EE090935A038093590380EA9CE09093C5 -:103590005803809357038DEF90E1909364038093D9 -:1035A00063038AE79FE090936603809365038FEF40 -:1035B0009FEF9093AE048093AD048091CE0581116E -:1035C0004FC061E08DE00E94CC0262ED70E080E0CF -:1035D00090E00E94510361E08DE00E949E0268E24B -:1035E00070E080E090E00E94510360E08DE00E9476 -:1035F0009E0262ED70E080E090E00E94510361E085 -:103600008DE00E949E0268E270E080E090E00E94FF -:10361000510360E08DE00E949E026AEF70E080E05E -:1036200090E00E945103C5E062ED70E080E090E020 -:103630000E94510361E08DE00E949E0268E270E00A -:1036400080E090E00E94510360E08DE00E949E02C5 -:10365000C15051F76DE770E080E090E00E945103A7 -:1036600081EA94E09093700580936F059093320502 -:103670008093310581E395E00E94540181EF94E04D -:103680000E947A07C0910B016AE070E080E090E050 -:103690000E945103CC23B1F30E947A0FD5E000E0E1 -:1036A00010E0BB24B39492E0E92EF12CCC24C39417 -:1036B000D12C80916B03882309F44AC0A090670342 -:1036C000CA2DC170A0FE07C080E00E947502C1E053 -:1036D000892B09F4C0E0A1FE06C081E00E947502BA -:1036E000892B09F0C260A2FE06C082E00E9475022A -:1036F000892B09F0C460A3FE06C083E00E94750216 -:10370000892B09F0C860A4FE06C084E00E947502FF -:10371000892B09F0C061A5FE06C085E00E947502F4 -:10372000892B09F0C062A6FE06C086E00E947502E1 -:10373000892B09F0C064A7FE06C087E00E947502CD -:10374000892B09F0C06840E06C2F80E00E94B30C28 -:1037500080916C03882309F44AC0A0906803CA2DA5 -:10376000C170A0FE07C088E00E947502C1E0892BED -:1037700009F4C0E0A1FE06C089E00E947502892B11 -:1037800009F0C260A2FE06C08AE00E947502892B81 -:1037900009F0C460A3FE06C08BE00E947502892B6D -:1037A00009F0C860A4FE06C08CE00E947502892B57 -:1037B00009F0C061A5FE06C08DE00E947502892B4C -:1037C00009F0C062A6FE06C08EE00E947502892B39 -:1037D00009F0C064A7FE06C08FE00E947502892B25 -:1037E00009F0C06840E06C2F81E00E94B30C80912A -:1037F0006D03882309F44AC0A0906903CA2DC170E3 -:10380000A0FE07C080E10E947502C1E0892B09F487 -:10381000C0E0A1FE06C081E10E947502892B09F07B -:10382000C260A2FE06C082E10E947502892B09F0E7 -:10383000C460A3FE06C083E10E947502892B09F0D3 -:10384000C860A4FE06C084E10E947502892B09F0BD -:10385000C061A5FE06C085E10E947502892B09F0B2 -:10386000C062A6FE06C086E10E947502892B09F09F -:10387000C064A7FE06C087E10E947502892B09F08B -:10388000C06840E06C2F82E00E94B30C80916E0310 -:103890008823D1F1A0906A03CA2DC170A0FE07C091 -:1038A00088E10E947502C1E0892B09F4C0E0A1FE05 -:1038B00006C089E10E947502892B09F0C260A2FE50 -:1038C00006C08AE10E947502892B09F0C460A3FE3C -:1038D00006C08BE10E947502892B09F0C860A4FE26 -:1038E00006C08CE10E947502892B09F0C061A5FE1B -:1038F00006C08DE10E947502892B09F0C06240E08C -:103900006C2F83E00E94B30C80916F05909170053D -:10391000DC01ED91FC910084F185E02D0995892B66 -:1039200009F4CEC180916F0590917005DC01ED9195 -:10393000FC910284F385E02D09959C018F3F980747 -:1039400019F3982F80913C05882309F492C0973F82 -:1039500009F07EC010923C05A0913405B091350568 -:103960006C916137C1F1693709F05CC0E09169057C -:10397000F0916A05309741F280913D0590913E05A6 -:103980008330910560F430E020E050E040E070E0EA -:1039900060E080914B0590914C050995B5CFBD0134 -:1039A0006D5F7F4F03970E94BB01BC016D5F7F4F2E -:1039B00080E00E948B01E0913405F09135059F0174 -:1039C0002D5F3F4F428150E0618170E0E0916905D9 -:1039D000F0916A05DECF8091650590916605892B8F -:1039E00009F492CFBD016F5F7F4F80913D059091AB -:1039F0003E0501970E94BB01BC016F5F7F4F80E0D5 -:103A00000E948B0160913405709135056F5F7F4F87 -:103A1000E0916505F0916605809151059091520500 -:103A2000099572CFE0916705F0916805309709F428 -:103A30006BCF9D012F5F3F4F40913D0550913E055B -:103A400041505109809153059091540509955CCFDF -:103A500060913D0570913E05822F0E948B018091FF -:103A60003D0590913E05019690933E0580933D055E -:103A70004BCF60913A0570913B056115710509F4D2 -:103A8000B1C027FDAFC06150710970933B056093D1 -:103A90003A05822F0E948B0180913A0590913B0557 -:103AA000892B09F031CF80913805882309F42CCF78 -:103AB000803D09F483C040F4803949F1803C09F429 -:103AC00069C01092380520CF843FE1F1853F09F4A9 -:103AD0004DC0803EB1F7E0915705F0915805309701 -:103AE00081F3A0913405B09135054C9120E8429FB7 -:103AF000C001112411964C91480F592F511D60910E -:103B0000390580913F05909140050995DACFE09104 -:103B10005905F0915A053097A1F2A0913405B09162 -:103B200035054C9120E8429FC001112411964C911B -:103B3000480F592F511D6091390580914105909191 -:103B40004205E3CFE0915F05F0916005309709F4FD -:103B5000B8CFA0913405B09135054C9150E0119645 -:103B60006C918091470590914805CFCFE091610518 -:103B7000F0916205309709F4A4CFA0913405B0917B -:103B800035054C9150E011966C91809149059091CA -:103B90004A05BBCFE0915B05F0915C05309709F4D5 -:103BA00090CFA0913405B09135054C9150E06091D3 -:103BB00039058091430590914405A7CFE0915D05BB -:103BC000F0915E05309709F47CCFA0913405B09157 -:103BD00035054C9150E060913905809145059091F3 -:103BE000460593CF903F30F4822F8F708093390534 -:103BF000922F907F903FF1F190F4903CB1F150F40E -:103C0000903909F081CEF0923B05E0923A0590930D -:103C100038057ACE903D49F1903EA9F375CE993F93 -:103C200009F442C028F48CE0890F823060F36CCE36 -:103C30009F3F09F069CE10923B0510923A05109211 -:103C400038051092390590E080E0209136053091DA -:103C5000370582179307A8F4E0913405F0913505F4 -:103C6000E80FF91F10820196F0CFD0923B05C09269 -:103C70003A05CDCFB0923C0510923E0510923D051D -:103C800043CE10923C0510923E0510923D05E09106 -:103C90006D05F0916E058091550590915605309710 -:103CA00009F432CE099530CEE0916B05F0916C05A8 -:103CB000309709F429CE80914D0590914E05F2CFB1 -:103CC0008FB7F89440909E0350909F036090A0039C -:103CD0007090A1038FBF8091990390919A03A09156 -:103CE0009B03B0919C0340910D0150910E0170E037 -:103CF00060E0481A590A6A0A7B0A441555056605A8 -:103D0000770508F051C0840F951FA61FB71F809339 -:103D1000990390939A03A0939B03B0939C0381EF24 -:103D2000882E84E0982ECEEECC30C8F4F401ED5706 -:103D3000FF4F8081823099F480919703909198038E -:103D40000C2E02C0959587950A94E2F780FF07C074 -:103D50008C2F0E940803BC018C2F0E94CD06CF5FE0 -:103D60008FEF881A980ACC30F9F680910C0187FD04 -:103D70001BC0C0E02C2F30E080910C01082E000CFD -:103D8000990B8217930784F0D29FF001D39FF00D17 -:103D90001124E159FC4F618172812481438180812A -:103DA0000E94BB0FCF5FE6CF0115110509F481CC4E -:103DB0000E948704882309F47CCC0E94000079CCFF -:103DC000052E97FB1EF400940E94F71E57FD07D0A6 -:103DD0000E94121F07FC03D04EF40C94F71E50955E -:103DE0004095309521953F4F4F4F5F4F08959095E7 -:103DF0008095709561957F4F8F4F9F4F08950E94DA -:103E0000341FA59F900DB49F900DA49F800D911D10 -:103E100011240895B7FF0C94FF1E0E94FF1E821B01 -:103E2000930B0895A1E21A2EAA1BBB1BFD010DC026 -:103E3000AA1FBB1FEE1FFF1FA217B307E407F5075A -:103E400020F0A21BB30BE40BF50B661F771F881F36 -:103E5000991F1A9469F760957095809590959B01CC -:103E6000AC01BD01CF010895A29FB001B39FC00175 -:103E7000A39F700D811D1124911DB29F700D811D96 -:103E80001124911D0895991B79E004C0991F96177C -:103E900008F0961B881F7A95C9F780950895EE0F54 -:103EA000FF1F0590F491E02D09940F931F93CF937A -:103EB000DF938230910510F482E090E0E0912606D5 -:103EC000F091270630E020E0B0E0A0E0309799F4D0 -:103ED0002115310509F44AC0281B390B243031055E -:103EE000D8F58A819B816115710589F1FB01938366 -:103EF0008283FE0111C040815181028113814817E4 -:103F00005907E0F04817590799F4109761F0129695 -:103F10000C93129713961C933296CF01DF91CF9199 -:103F20001F910F9108950093260610932706F4CF52 -:103F30002115310551F04217530738F0A901DB0173 -:103F40009A01BD01DF01F801C1CFEF01F9CF9093D4 -:103F5000270680932606CDCFFE01E20FF31F819343 -:103F600091932250310939832883D7CF2091240699 -:103F700030912506232B41F420911101309112013B -:103F8000309325062093240620910F0130911001D3 -:103F90002115310541F42DB73EB7409113015091E1 -:103FA0001401241B350BE0912406F0912506E2173D -:103FB000F307A0F42E1B3F0B2817390778F0AC014C -:103FC0004E5F5F4F2417350748F04E0F5F1F509329 -:103FD000250640932406819391939FCFF0E0E0E083 -:103FE0009CCFCF93DF930097E9F0FC0132971382C7 -:103FF0001282A0912606B0912706ED0130E020E064 -:104000001097A1F420813181820F931F2091240603 -:10401000309125062817390709F061C0F09325066D -:10402000E0932406DF91CF910895EA01CE17DF07D0 -:10403000E8F54A815B819E0141155105B1F7E9011F -:10404000FB83EA8349915991C40FD51FEC17FD07F3 -:1040500061F4808191810296840F951FE901998313 -:104060008883828193819B838A83F0E0E0E01296CB -:104070008D919C9113970097B9F52D913C911197D3 -:10408000CD010296820F931F2091240630912506C0 -:104090002817390739F6309751F5109227061092F4 -:1040A0002606B0932506A0932406BCCFD383C283F3 -:1040B00040815181840F951FC817D90761F44E5F65 -:1040C0005F4F88819981480F591F518340838A81AE -:1040D0009B81938382832115310509F0B0CFF09342 -:1040E0002706E09326069ECFFD01DC01C0CF138298 -:1040F0001282D7CFFB01DC014150504048F00190C3 -:104100000D920020C9F701C01D9241505040E0F7C8 -:064110000895F894FFCFB2 -:10411600FFFFFFFF00E1000000000000FF130000AA -:10412600002806800000C180810000000000000019 -:10413600BC041D044A0408057B0459046D040000F0 -:104146000000AD052805CE05C3051406D205F00509 -:1041560000000000A2097509D1094B096E095B0927 -:104166004C094D617820736572766F7320617474A3 -:10417600616368656400556E6B6E6F776E2070695B -:104186006E206D6F6465004932433A20546F6F208C -:104196006D616E79206279746573207265636569F5 -:1041A600766564004932433A20546F6F206665771E -:1041B600206279746573207265636569766564004B -:1041C60031302D6269742061646472657373696E3F -:1041D60067206E6F7420737570706F7274656400FB -:1041E600746F6F206D616E79207175657269657384 -:1041F600002F707269766174652F7661722F666F13 -:104206006C646572732F6C6A2F3766706C38335F17 -:1042160073377778336436646A6C675F77327967A9 -:104226006D3030303067702F542F2E61726475698F -:104236006E6F4944452D756E736176656432303212 -:1042460034313131392D31353738332D316F376EC1 -:104256007834372E39636A686A2F5374616E6461E5 -:1042660072644669726D6174612F5374616E646124 -:0E42760072644669726D6174612E696E6F002C -:00000001FF diff --git a/apps/electron-app/hex/nano/StandardFirmata.cpp.hex b/apps/electron-app/hex/nano/StandardFirmata.cpp.hex deleted file mode 100644 index b6270408..00000000 --- a/apps/electron-app/hex/nano/StandardFirmata.cpp.hex +++ /dev/null @@ -1,824 +0,0 @@ -:100000000C945D000C9485000C9485000C94AD104C -:100010000C94AD100C94AD100C9485000C948500DC -:100020000C9485000C9485000C9485000C94D611DA -:100030000C9485000C9485000C9485000C9485002C -:100040000C9463100C9485000C9431100C940B10DC -:100050000C9485000C9485000C9485000C9485000C -:100060000C94B7100C9485000000000024002700B9 -:100070002A0000000000250028002B0004040404CE -:100080000404040402020202020203030303030342 -:10009000010204081020408001020408102001021F -:1000A00004081020000000080002010000030407FB -:1000B0000000000000000000921211241FBECFEFCC -:1000C000D8E0DEBFCDBF12E0A0E0B1E0E4E4F2E3AF -:1000D00002C005900D92AC31B107D9F725E0ACE133 -:1000E000B2E001C01D92AD34B207E1F710E0CDE5FA -:1000F000D0E004C02197FE010E94E617CC35D1075D -:10010000C9F70E94A6130C9420190C940000862FA6 -:10011000E0910303F0910403309711F0BA010994C0 -:100120000895862FE0910103F0910203309711F0BA -:10013000BA0109940895862FE091FF02F09100031F -:10014000309711F0BA0109940895862FE091FD02CD -:10015000F091FE02309711F0BA0109940895862FAC -:10016000E091FB02F091FC02309711F0BA01099482 -:100170000895862FE091F902F091FA02309711F07C -:10018000BA01099408950895862F642FE09105031C -:10019000F0910603309711F0A90109940895E091B8 -:1001A0000703F0910803309709F009940895CF935D -:1001B000DF93FC01A081B181109701F1EC01ED9179 -:1001C000FC9111970190F081E02D69EFCD01099527 -:1001D00088819981DC01ED91FC910190F081E02D05 -:1001E00062E0099588819981DC01ED91FC91019093 -:1001F000F081E02D65E0DF91CF910994DF91CF91FF -:100200000895A091AC04B091AD04ED91FC911197CB -:100210000190F081E02D682FCD0109941F93CF93B9 -:10022000DF93182FEB018091730490917404681789 -:10023000790760F48091710490917204C80FD91FFE -:10024000188380E0DF91CF911F910895E091A00481 -:10025000F091A104309711F481E0F4CF81E0809314 -:10026000700480918C0490918D04099580917304A1 -:1002700090917404C817D90778F7DCCFCF93DF9338 -:10028000EC01FB0130E020E0C901880F991F8C17B9 -:100290009D0778F44081DB014D93BD011197918159 -:1002A000979599279795942B9C932F5F3F4F329664 -:1002B000EBCFC901DF91CF910895009721F0805CC9 -:1002C0009F4F0C94D7000895AF92BF92CF92DF92C8 -:1002D000EF92FF920F931F93CF93DF936C017B01FB -:1002E0008B01040F151FEB015E01AE18BF08C0178C -:1002F000D10759F06991D601ED91FC910190F081FF -:10030000E02DC6010995892B79F7C501DF91CF91C1 -:100310001F910F91FF90EF90DF90CF90BF90AF9023 -:100320000895FC01538D448D252F30E0842F90E0FB -:10033000821B930B541710F0CF96089501970895E0 -:10034000FC01918D828D981761F0A28DAE0FBF2FA9 -:10035000B11D5D968C91928D9F5F9F73928F90E0FF -:1003600008958FEF9FEF0895FC01918D828D98176E -:1003700031F0828DE80FF11D858D90E008958FEFAB -:100380009FEF0895FC01918D228D892F90E0805C74 -:100390009F4F821B91098F739927089581E993E0FC -:1003A0000E94C20121E0892B09F420E0822F0895E8 -:1003B00080E090E0892B29F00E94CE0181110C94FD -:1003C00000000895FC01A48DA80FB92FB11DA35AF8 -:1003D000BF4F2C91848D90E001968F739927848F65 -:1003E000A689B7892C93A089B1898C918370806488 -:1003F0008C93938D848D981306C00288F389E02D29 -:1004000080818F7D80830895EF92FF920F931F93D9 -:10041000CF93DF93EC0181E0888F9B8D8C8D9813B7 -:100420001AC0E889F989808185FF15C09FB7F894C3 -:10043000EE89FF896083E889F9898081837080640F -:1004400080839FBF81E090E0DF91CF911F910F915A -:10045000FF90EF900895F62E0B8D10E00F5F1F4F69 -:100460000F731127E02E8C8D8E110CC00FB607FC78 -:10047000FACFE889F989808185FFF5CFCE010E9406 -:10048000E201F1CFEB8DEC0FFD2FF11DE35AFF4F91 -:10049000F0829FB7F8940B8FEA89FB898081806294 -:1004A000CFCFCF93DF93EC01888D8823B9F0AA8951 -:1004B000BB89E889F9898C9185FD03C0808186FD1F -:1004C0000DC00FB607FCF7CF8C9185FFF2CF80816E -:1004D00085FFEDCFCE010E94E201E9CFDF91CF9100 -:1004E000089590E0FC01EC55FF4F2491FC01E0578A -:1004F000FF4F3491FC01E458FF4FE491EE23C9F023 -:10050000222339F0233001F1A8F4213019F12230EF -:1005100029F1F0E0EE0FFF1FEE58FF4FA591B491C7 -:100520008FB7F894EC91611126C030953E233C932F -:100530008FBF08952730A9F02830C9F0243049F73B -:10054000809180008F7D03C0809180008F778093A1 -:100550008000DFCF84B58F7784BDDBCF84B58F7DFE -:10056000FBCF8091B0008F778093B000D2CF809185 -:10057000B0008F7DF9CF3E2BDACFCF93DF9390E0A1 -:10058000FC01E057FF4F249184589F4FFC01849158 -:100590008823C9F090E0880F991FFC01E859FF4FAC -:1005A000A591B491FC01EE58FF4FC591D491611112 -:1005B0000DC09FB7F8948C91209582238C938881ED -:1005C000282328839FBFDF91CF910895623051F493 -:1005D0009FB7F8943C91822F809583238C93E88178 -:1005E0002E2BEFCF8FB7F894EC912E2B2C938FBF3F -:1005F000EACF8E3008F08E508770806480937C0044 -:1006000080917A00806480937A0080917A0086FDE0 -:10061000FCCF809178009091790008953FB7F894CD -:100620008091F5029091F602A091F702B091F80244 -:1006300026B5A89B05C02F3F19F00196A11DB11D3D -:100640003FBFBA2FA92F982F8827BC01CD01620F79 -:10065000711D811D911D42E0660F771F881F991F34 -:100660004A95D1F708958F929F92AF92BF92CF9201 -:10067000DF92EF92FF926B017C010E940E034B010F -:100680005C01C114D104E104F104B9F00E940E032D -:10069000681979098A099B09683E734081059105AB -:1006A00080F321E0C21AD108E108F10888EE880E33 -:1006B00083E0981EA11CB11CE4CFFF90EF90DF9067 -:1006C000CF90BF90AF909F908F9008955F926F9260 -:1006D0007F928F929F92AF92BF92CF92DF92EF92D2 -:1006E000FF920F931F93CF93DF935C016901DA01AF -:1006F0005C90232B19F4CC24CA94DC2C8A013A0197 -:10070000660E771ED0E0C0E0F12CE12C87E0882E49 -:10071000912CF50180819181D8016C910C2E01C042 -:10072000660F0A94EAF765296F77DC01ED91FC9179 -:100730000190F081E02D0995BFEFEB1AFB0AF8015B -:10074000608170E0C4018C1B9D0B02C0759567959C -:100750008A95E2F7562E2196C730D10558F1CE146E -:10076000DF0441F1D5018D919C91652D6F77DC01FE -:10077000ED91FC910190F081E02D0995BFEFEB1A0E -:10078000FB0A551C5524551C2797E6CFEC14FD0495 -:1007900008F4BFCFDF91CF911F910F91FF90EF90A1 -:1007A000DF90CF90BF90AF909F908F907F906F9091 -:1007B0005F9008950F5F1F4F6016710639F72097FD -:1007C00049F3EC14FD0430F7F5018081918161E07B -:1007D00070E001C0660FCA95EAF761506521DC013F -:1007E000ED91FC910190F081E02DDF91CF911F916F -:1007F0000F91FF90EF90DF90CF90BF90AF909F90C0 -:100800008F907F906F905F9009941F93CF93DF93A9 -:1008100000D0CDB7DEB7182F7A83698380916E043C -:1008200090916F040097C9F0DC01ED91FC9101906B -:10083000F081E02D1031B8F461157044A0F4612FFF -:10084000606E099522E030E0AE014F5F5F4F62E0DD -:1008500070E08EE694E00E9466030F900F90DF91A7 -:10086000CF911F91089560EF099580916E0490914A -:100870006F04DC01ED91FC910190F081E02D6FE6B9 -:10088000099580916E0490916F04DC01ED91FC91CB -:100890000190F081E02D612F099522E030E0AE015A -:1008A0004F5F5F4F62E070E08EE694E00E94660367 -:1008B00080916E0490916F04DC01ED91FC910190A8 -:1008C000F081E02D67EF0995C8CFEF92FF920F936B -:1008D0001F93CF93DF93C82F80916E0490916F0484 -:1008E0000097C9F17A018B01DC01ED91FC91019037 -:1008F000F081E02D60EF099580916E0490916F0476 -:10090000DC01ED91FC910190F081E02D6C2F0995B7 -:10091000E7010E0D1F1DC017D10759F030E020E090 -:10092000AE0161E070E08EE694E00E9466032196DD -:10093000F2CF80916E0490916F04DC01ED91FC91F7 -:100940000190F081E02D67EFDF91CF911F910F9122 -:10095000FF90EF900994DF91CF911F910F91FF903D -:10096000EF900895CF92DF92EF92FF920F931F9333 -:10097000CF93DF93FC01E058FF4FE080EE2009F4B5 -:100980005CC0EC01C05CDF4FA881B981109709F40D -:1009900054C0FC01EF57FF4FC080D180F601118198 -:1009A0000081ED91FC9111970190F081E02D60EFB5 -:1009B000CD01099588819981DC01ED91FC9101902F -:1009C000F081E02D69E7099588819981DC01ED913D -:1009D000FC910190F081E02D602F0995888199812B -:1009E000DC01ED91FC910190F081E02D612F0995E2 -:1009F000F12C01E010E00F5F1F4FE016F10659F0F7 -:100A000030E020E0A601400F511F61E070E0CE0110 -:100A10000E946603F0CF88819981DC01ED91FC9101 -:100A20000190F081E02D67EFDF91CF911F910F9141 -:100A3000FF90EF90DF90CF900994DF91CF911F91BD -:100A40000F91FF90EF90DF90CF900895009711F0F5 -:100A50000C94B20408952091CD02260F3327331F42 -:100A600021323105ECF420916703FC0190E080E035 -:100A7000243069F082E00895A091CD022191AC016B -:100A800045555D4FA40FB52FB11D2C9301968617C8 -:100A900098F38091CD02680F6093CD0280E00895B5 -:100AA00081E008951092670381E0809366031092BD -:100AB000410361E082E10E94710261E083E10E94F2 -:100AC0007102E9EBF0E080818E7F808380818D7FF1 -:100AD000808388E48093B80085E48093BC00089507 -:100AE000CF93DF9391E09093AA028823B9F0C0914D -:100AF000B800D091BA008091BC008A7B8093BC0082 -:100B000060E082E10E94710260E083E10E94710274 -:100B10000E945205D093BA00C093B800DF91CF91E4 -:100B200008958F929F92AF92BF92CF92DF92EF92F1 -:100B3000FF920F931F93CF93DF93D0919003D13205 -:100B400008F0D7C0182FC0918F030E940E036B01CD -:100B50007C018091670381116BC082E08093670301 -:100B6000109366038FEF8093650310926403D09314 -:100B70006303AFE6B3E0E3E4F3E080E0D81391C0B1 -:100B80001092420380914203CC0FC82BC0934203C2 -:100B900080914103813009F088C0109241030E9486 -:100BA0000E036B017C01809142038093BB00809116 -:100BB000690390916A03A0916B03B0916C03892B38 -:100BC0008A2B8B2BA1F00E940E03009169031091D8 -:100BD0006A0320916B0330916C036C197D098E09B7 -:100BE0009F09061717072807390708F442C08091A4 -:100BF000BC0083FDD8CF85EC8093BC000E940E031F -:100C00006B017C0180916703823009F450C08091B0 -:100C100065038F3F09F46FC080916503803209F44A -:100C20006CC080916503803309F469C084E026C0FC -:100C30008091690390916A03A0916B03B0916C035A -:100C4000892B8A2B8B2B09F484CF0E940E03809072 -:100C5000690390906A03A0906B03B0906C036C19C9 -:100C60007D098E099F0986169706A806B90608F021 -:100C700070CF809168030E94700585E010926E032A -:100C80001092900310926D03DF91CF911F910F91FD -:100C9000FF90EF90DF90CF90BF90AF909F908F909C -:100CA00008959D9191938F5F69CF85EEA5CF809137 -:100CB000690390916A03A0916B03B0916C03892B37 -:100CC0008A2B8B2B09F49ECF0E940E03009169039F -:100CD00010916A0320916B0330916C036C197D09AC -:100CE0008E099F09061717072807390708F08ACFCA -:100CF000C0CF81E0C3CF80E0C1CF82E0BFCF83E02F -:100D0000BDCF089508950895E091A9028091A802A9 -:100D1000E81730F4F0E0E857FD4F808190E0089547 -:100D20008FEF9FEF08959091A9028091A8022FEF75 -:100D30003FEF981748F4E92FF0E0E857FD4F208186 -:100D400030E09F5F9093A902C90108958091A802A5 -:100D50009091A902891B990B0895CF92DF92EF928F -:100D6000FF920F931F93CF93DF937C01CB018A01F6 -:100D700020916D03222389F0EB016B01C40ED51E77 -:100D8000CC15DD0569F06991D701ED91FC910190D9 -:100D9000F081E02DC7010995F3CF642F0E942B0548 -:100DA000C801DF91CF911F910F91FF90EF90DF90DD -:100DB000CF900895CF93DF931F92CDB7DEB76983AD -:100DC00020916D032223F9F020919003203258F0F6 -:100DD00021E030E0FC013383228390E080E00F903B -:100DE000DF91CF91089580916E03E82FF0E0E159F3 -:100DF000FC4F998190838F5F80936E038093900363 -:100E000081E090E0ECCF61E0CE0101960E942B05DD -:100E1000F7CF90E080E00895DF92EF92FF920F937A -:100E20001F93CF93DF93EC01D62E7A01890188813D -:100E30008C3008F067C061E08D2D0E94BD02888172 -:100E4000282F30E0F901EE0FFF1FE20FF31FE050F3 -:100E5000FB4F9D2D9F736081607C692B608320E236 -:100E600032E02E193F0937FF02C02D5F3F4F359505 -:100E7000279535952795298320E639E0201B310BEE -:100E800037FF02C02D5F3F4F359527953595279544 -:100E90002A832CE0622F0E94DA17829FB00111246E -:100EA00030E020E0AB01420F531FFA01EE0FFF1FAD -:100EB000E40FF51FE050FB4F908196FD16C02F5FA9 -:100EC0003F4F2C30310571F781110FC01092800017 -:100ED00082E0809381001092850010928400B19A84 -:100EE00080916F00826080936F00E8818E2F90E088 -:100EF000FC01EE0FFF1FE80FF91FE050FB4F808150 -:100F0000806480838881DF91CF911F910F91FF9042 -:100F1000EF90DF900895CF938830B0F421E030E077 -:100F2000082E02C0220F331F0A94E2F740913B03C0 -:100F300050913C03672B51F42095309524233523A1 -:100F400030933C0320933B03CF910895242B352B02 -:100F500030933C0320933B03909186029111F4CF90 -:100F6000C82F0E94F902BC018C2FCF910C9405046C -:100F70005F926F927F928F929F92AF92BF92CF9229 -:100F8000DF92EF92FF920F931F93CF93DF93833003 -:100F900008F061C0D1E0D80FDD0FDD0FDD0F5D2E51 -:100FA000D73110F046E1542EC62F082FD8508D2E81 -:100FB000912CC401880F991F9C01225D3B4F590160 -:100FC000D12CC12C10E077247394D515C8F58EEF81 -:100FD0008D0F8231F8F4F601E80DF91DEF54FB4F47 -:100FE00090819230B8F48C2F87216624639481110C -:100FF00001C0612C7601EE0CFF1C913089F4172999 -:1010000039E9E30EF11CF501EE0DFF1D862D90E090 -:1010100091838083770CDF5F8FEFC81AD80AD5CF12 -:10102000882371F3F701E756FF4FEA0DFB1D80811E -:101030009181019729F362E08D2F0E94BD02E0CFDC -:10104000011119C0F8948BB16C2F68276C7F612354 -:1010500068276BB97894DF91CF911F910F91FF9022 -:10106000EF90DF90CF90BF90AF909F908F907F9048 -:101070006F905F9008950130D1F4C123F89495B139 -:10108000812F8F73809589239C2F9F73892B85B91E -:1010900088B1612F62956695669563706095682347 -:1010A000C295C695C695C370C62BC8B9D3CF1F705D -:1010B000F89498B1812F880F880F80958923C123D8 -:1010C000CC0FCC0FC82BF1CF8F929F92AF92BF92D3 -:1010D000CF92DF92EF92FF920F931F93CF93DF9304 -:1010E000EB01863108F098C0082F10E0F801EF54AA -:1010F000FB4F9081933009F49CC0943009F08CC070 -:101100008250823108F081C0F801E459FD4FC0805F -:10111000D12C7601EE0CFF1C4B01603282E0780787 -:101120000CF03EC0F701EC0DFD1DEB5DFA4F818127 -:10113000A8E88A2E912C881A910887FD9394880C30 -:10114000991C880C991C092C000CAA08BB088281E8 -:1011500028E532E0281B310987FD3395220F331F24 -:10116000220F331F032E000C440B550B281939098D -:101170004A095B09DB01653B710514F0A4EBB0E0A3 -:10118000B7FF02C0B0E0A0E00E94A11724EB30E05E -:1011900040E050E00E947717820E931EA41EB51EF9 -:1011A000F701EC0DFD1DEB5DFA4F20812C3068F549 -:1011B000318188E890E0831B910937FD9395880F72 -:1011C000991F880F991F881699067CF0328188E54F -:1011D00092E0831B910937FD9395880F991F880F23 -:1011E000991F881699060CF4C4010297880F991F5D -:1011F0004FB7F89430E0F901EE0FFF1FE20FF31F35 -:10120000E050FB4F928381834FBF000F111FF80105 -:10121000E953FB4FD183C083DF91CF911F910F9191 -:10122000FF90EF90DF90CF90BF90AF909F908F9006 -:1012300008957B01D82F833041F08BEF800F8230EF -:1012400020F087EF800F833058F461E08D2F0E94EB -:10125000BD02E114F10461F460E08D2F0E9471027F -:10126000000F111FF801E953FB4FF182E082D4CF48 -:101270008FEFE816F10411F461E0EFCFF801EC55BF -:10128000FF4FE491E33021F148F4E130B9F0E2306E -:10129000D1F080E8E816F1047CF7DECFE73011F1F9 -:1012A000E83041F1E430A9F78091800080628093BA -:1012B0008000F0928B00E0928A00D2CF84B58068E3 -:1012C00084BDE7BCCDCF84B5806284BDE8BCC8CF07 -:1012D00080918000806880938000F0928900E09285 -:1012E0008800BECF8091B00080688093B000E0920B -:1012F000B300B6CF8091B00080628093B000E092DE -:10130000B400AECF9EEF980F923180F4E82FF0E05A -:10131000DF01AF54BB4F9C91913041F4EE0FFF1FA2 -:10132000E953FB4F608371830C9471020895FF921F -:101330000F931F93CF93DF9300D0CDB7DEB7082F65 -:1013400010E0F801E75FFC4F9081F62EF9220E576E -:101350001D4F411104C0F80190819F1511F12F2DEF -:1013600030E03A832983A0916E04B0916F04109706 -:10137000B1F0682F6F706069ED91FC911197019049 -:10138000F081E02DCD01099522E030E0AE014F5F04 -:101390005F4F62E070E08EE694E00E946603F80121 -:1013A000F0820F900F90DF91CF911F910F91FF90DE -:1013B0000895833040F5282F30E0F901E45FFC4FB9 -:1013C0006083672B01F1275F3C4FF9016081811138 -:1013D00006C099B19C7F692341E00C949709813044 -:1013E00049F493B126B19F73F0E42F9F900111242B -:1013F000922BF1CF26B130E035952795359527957D -:101400002F706223E9CF0895A82FB0E0A459BD4FF3 -:101410009C91292F30E0F901EE0FFF1FE20FF31F1F -:10142000EB5DFA4FE0812E2F30E0F901EE0FFF1F48 -:10143000E20FF31FE050FB4F80818F7B8083809110 -:101440006A02981308C0992319F0915090936A0288 -:101450008FEF8C9308958823D9F3E0916B02EF5FAF -:10146000E0936B02F0E0E55EFD4F9083F1CFFC016D -:1014700001900020E9F73197BF01681B790BAC019F -:1014800081E70C946504CF93DF93DB0190916A02AE -:101490009C3078F530916B02682F70E0FB01E459C5 -:1014A000FD4F3323E1F0C32FD0E0C55EDD4F8881CF -:1014B0008083315030936B02808123E0829FC00192 -:1014C00011248B5D9A4F1A161B0674F41416150618 -:1014D0005CF49A01AD01DF91CF910C940C079083DD -:1014E0009F5F90936A02E8CF20E639E040E252E045 -:1014F000F2CF8DE291E0DF91CF910C94370A85ED28 -:101500008093BC008091690390916A03A0916B0362 -:10151000B0916C030796A11DB11D23E0B695A79568 -:10152000979587952A95D1F72091BC0024FD03C09B -:101530001092670308954091690350916A03609186 -:101540006B0370916C03452B462B472B69F3009777 -:10155000A105B10541F02AE22A95F1F700C00197F3 -:10156000A109B109E1CF809168030C9470059F92A5 -:10157000AF92BF92CF92DF92EF92FF920F931F93A1 -:10158000CF93DF93C82ED12CE601C25DDB4FFE0165 -:10159000ED57FF4F90819F3709F49FC0963061F45B -:1015A00090918502992341F06630710529F01092DF -:1015B00085029FEF909300017B01182F0EEF080F1B -:1015C000023108F564307105F1F0F601E459FD4F80 -:1015D00080818C30C0F490E0FC01EE0FFF1FE80F1B -:1015E000F91FEB5DFA4FE0818E2F90E0FC01EE0FCA -:1015F000FF1FE80FF91FE050FB4F808186FF03C0FB -:10160000812F0E94040A52EF952E910E87E08915D2 -:1016100058F061E070E032E0E316F10411F070E0A0 -:1016200060E0892D0E948B070231C8F4E12FE69516 -:10163000E695E695F0E0E75FFC4F2081312F3770AB -:1016400081E090E001C0880F3A95EAF7E114F104D7 -:1016500021F03BE0E316F10401F5822B8083560173 -:10166000AA0CBB1CF501E953FB4F118210828CE0E0 -:10167000E816F10408F0CBC0F701EF5BF44F0C94CF -:10168000E617610B8E0B500BA50BC40B070CFB0B65 -:10169000070C070C070C6D0B790B80958223DECFAE -:1016A00037E03915D0F0023120F460E0812F0E943C -:1016B000BD02CD57DF4F88818F3779F082E0888374 -:1016C0000CC0023150F460E0812F0E94BD02CD5762 -:1016D000DF4F88818F3709F01882DF91CF911F91FA -:1016E0000F91FF90EF90DF90CF90BF90AF909F90C1 -:1016F0000895023190F762E0812F0E94BD02CD571C -:10170000DF4F88818F3711F08BE08883F501E95333 -:10171000FB4F81E090E091838083DFCF0231E8F6D8 -:10172000FE01ED57FF4F8081833021F460E0812F6F -:101730000E94710261E0812F0E94BD02CD57DF4FF0 -:1017400088818F3751F281E0BACF133049F08BEFA7 -:10175000810F823028F087EF810F833008F0BDCFF2 -:1017600061E0812F0E94BD0261E0812F0E94BD02D5 -:1017700060E0812F0E947102CD57DF4F88818F3743 -:1017800009F4ABCF83E09BCF023108F0A6CFCD5751 -:10179000DF4F88818F3711F084E08883F601E459A8 -:1017A000FD4F80818F3FA9F090E0FC01EE0FFF1FFD -:1017B000E80FF91FEB5DFA4FE0818E2F90E0FC01FE -:1017C000EE0FFF1FE80FF91FE050FB4F808186FDF1 -:1017D00084CF4FEF5FEF6FEF7FEF812FDF91CF91DE -:1017E0001F910F91FF90EF90DF90CF90BF90AF903F -:1017F0009F900C94430A1251123008F06ECFCD57CF -:10180000DF4F88818F3709F468CF86E058CF81E4B5 -:1018100091E0DF91CF911F910F91FF90EF90DF90BA -:10182000CF90BF90AF909F900C94370A0F931F9367 -:10183000CF93DF9381E08093860280918502882395 -:1018400029F0109285028FEF8093000110920C0313 -:10185000109209031092820210920D0310920A0353 -:101860001092830210920E0310920B0310928402C6 -:101870000CE612E0C0E0DFEF82EF8C0F62E070E078 -:10188000883030F08EEF8C0F823128F461E070E008 -:101890008C2F0E94B70AF801D1938F01CF5FC63118 -:1018A00059F710923C0310923B0310926B02109276 -:1018B0006A0210928602DF91CF911F910F910895D5 -:1018C0004F925F926F927F928F929F92AF92BF9250 -:1018D000FF920F931F93CF93DF93F82E8B01D42F9A -:1018E000C22F6F3F760709F490C081E080936D03AB -:1018F000F0928F0310926E031092900384EF94E0A5 -:101900000E94DA068C2F0E949105809168029091C6 -:1019100069028230910538F0880F991F880F991F4E -:1019200005970197F1F70E940E034B015C0180912E -:10193000670381116CC0CD2FD13208F0C0E281E085 -:1019400080936703809366039FEF909365031092E3 -:1019500064039C0F9093630380934203909142032E -:101960008F2D880F892B8093420380914103813012 -:1019700009F0A1C0109241030E940E034B015C01CB -:10198000809142038093BB008091690390916A0328 -:10199000A0916B03B0916C03892B8A2B8B2BA1F048 -:1019A0000E940E034090690350906A0360906B039D -:1019B00070906C03681979098A099B0946165706C5 -:1019C0006806790608F444C08091BC0083FDD8CF36 -:1019D00085EC8093BC000E940E034B015C0180915A -:1019E0006703813009F469C0809164038C1710F497 -:1019F000C0916403E3E4F3E0A8E8B2E080E08C1770 -:101A000061F191919D938F5FFACF00E08CCF80912F -:101A1000690390916A03A0916B03B0916C03892BC9 -:101A20008A2B8B2B09F483CF0E940E03409069030D -:101A300050906A0360906B0370906C036819790989 -:101A40008A099B09461657066806790608F06FCF83 -:101A5000809168030E947005C0E01092A902C093B3 -:101A6000A8022D2F30E08C2F90E0281739070CF0BA -:101A700046C082E591E00E94370AF0922802009366 -:101A8000290208E212E0AD2EB12CC8018852924022 -:101A90008A159B050CF041C00F5F1F4F9091A80263 -:101AA0008091A9029817C9F184EF94E00E949306EF -:101AB000F8018183EACF85EE8CCF80916903909104 -:101AC0006A03A0916B03B0916C03892B8A2B8B2B3B -:101AD00009F485CF0E940E034090690350906A0379 -:101AE00060906B0370906C03681979098A099B09EF -:101AF000461657066806790608F071CFA9CF8217F7 -:101B000093070CF0BACF8FE691E00E94370AD0918C -:101B1000A8028091A902D81BB0CFDE5F6D2F70E0C4 -:101B200048E252E087E7DF91CF911F910F91FF903C -:101B3000BF90AF909F908F907F906F905F904F90ED -:101B40000C946504EF92FF920F931F93CF93DF9352 -:101B50008956823108F033C0EA01162FE82FF0E0F1 -:101B6000EC54F24F0C94E617FA0FDF0D610FDF0D06 -:101B7000B90FDF0D3F0FE30EDF0DDF0DDF0DDF0DC2 -:101B8000DF0DC60DDF0DA70EDF0D290F998195FF23 -:101B90000AC08BE891E0DF91CF911F910F91FF90E8 -:101BA000EF900C94370A888131E096FB222720F9C8 -:101BB000232798719830D1F148F49923A9F0DF9147 -:101BC000CF911F910F91FF90EF900895903109F4FC -:101BD0004CC09831A1F72091000112160CF472C08C -:101BE0008FEF80930001EBCF30936D0380938F03D1 -:101BF00010926E031092900302E0011778F4FE0138 -:101C0000E00FF11D61816795662767958081680FF8 -:101C100084EF94E00E94DA060E5FEFCF81E00E942D -:101C2000910583E191E00197F1F7C9CF9A814B814A -:101C30006630A1F430E8439FB0011124690F711D93 -:101C40004D814795442747959C81490FDF91CF915E -:101C50001F910F91FF90EF900C94600C47954427D3 -:101C60004795490F6FEF7FEFF1CFE0910001E7302B -:101C70001CF08BEA91E08FCF3A819B816630D9F4DA -:101C800060E8969FA0011124430F511D9D819795F7 -:101C9000992797953C81930FEF5FE093000135E022 -:101CA000E302F0011124ED5EFC4F808352834183F7 -:101CB0009383248384CF979599279795930F4FEF1C -:101CC0005FEFEACF90E0622F022E000C770B35E039 -:101CD000492F50E06417750764F0349FF001359F79 -:101CE000F00D1124ED5EFC4F4081481719F09F5F05 -:101CF000EFCF90E085E0492F50E0641775071CF1A5 -:101D00009830F8F4FA0131968E9FD0018F9FB00D74 -:101D10001124AD5EBC4F3C91849FF001859FF00D76 -:101D20001124ED5EFC4F308311964D915C9112971A -:101D30005283418313963C911397338314963C91BD -:101D400034839F5FD8CF21502093000138CF623079 -:101D500078F0898160E8869F900111248881820F44 -:101D6000932F911D009721F0909369028093680250 -:101D700080918502811123CFC0E08EEE8C0F8230DE -:101D800028F466E070E08C2F0E94B70ACF5FC6315E -:101D9000A1F781E0809385021092A9021092A80217 -:101DA00010926E03109290030E94520581E896E013 -:101DB0009093CC028093CB0282E896E09093D0027D -:101DC0008093CF02FCCE653008F4F9CE18818EEFF7 -:101DD000810F823108F0F3CE0981EA80FB80CC814B -:101DE000E12FF0E0E459FD4F80818C30C0F490E0A9 -:101DF000FC01EE0FFF1FE80FF91FEB5DFA4FE081CA -:101E00008E2F90E0FC01EE0FFF1FE80FF91FE0504E -:101E1000FB4F808186FF03C0812F0E94040A80E867 -:101E2000C89FA00111244F0D511D90E8E99EB001FB -:101E30001124600F711D812F0E94430A64E070E03D -:101E4000812FDF91CF911F910F91FF90EF900C9414 -:101E5000B70A623008F4B3CE8981E0E88E9F900122 -:101E600011248881820F932F911D009729F0909360 -:101E7000020180930101A3CE81E090E0F8CF6230AF -:101E800008F49DCE698170E0123091F08A81F0E80B -:101E90008F9FC0011124682B792B133049F08B815F -:101EA00090E090E4899F902D88271124682B792B4E -:101EB0008881DF91CF911F910F91FF90EF900C944B -:101EC000640880EF0E9401018CE60E940101CEEFC0 -:101ED00084EF8C0F883020F582E00E9401018AE0B7 -:101EE0000E9401018DEF8C0F8230E0F089EF8C0FA2 -:101EF0008330F0F417C0C23158F780E00E9401012E -:101F000081E00E9401018BE00E94010181E00E94BA -:101F1000010181E00E94010181E00E940101D8CF0E -:101F2000C13001F783E00E94010188E00E940101B5 -:101F3000C23130F484E00E9401018EE00E94010170 -:101F400080EF8C0F823030F486E00E94010181E046 -:101F50000E9401018FE70E940101CF5FC43159F651 -:101F600087EFDF91CF911F910F91FF90EF900C942D -:101F70000101662309F423CEC88180EF0E9401018C -:101F80008EE60E9401018C2F0E940101C63140F7AC -:101F9000D0E0FE01EF54FB4F80810E940101CC0F85 -:101FA000DD1F8E0109531B4FF80180818F770E943E -:101FB0000101F801808191819C012078232B39F067 -:101FC000880F892F881F990B8F770E940101C953B1 -:101FD000DB4F888199819C012227307C232B09F4D7 -:101FE000BFCF990F880B990F982F881F8F770E946A -:101FF0000101B6CF80EF0E9401018AE60E94010133 -:10200000C2EF8FE7C83008F48C2F0E940101CF5F28 -:10201000C830B9F7A5CF1F920F920FB60F921124B7 -:102020002F933F934F935F936F937F938F939F93E0 -:10203000AF93BF93EF93FF9381E993E00E94E20196 -:10204000FF91EF91BF91AF919F918F917F916F9190 -:102050005F914F913F912F910F900FBE0F901F9066 -:1020600018951F920F920FB60F9211242F938F93F2 -:102070009F93EF93FF93E091A103F091A2038081DE -:10208000E091A703F091A80382FD1BC0908180918D -:10209000AA038F5F8F732091AB03821741F0E09109 -:1020A000AA03F0E0EF56FC4F958F8093AA03FF91AF -:1020B000EF919F918F912F910F900FBE0F901F90D6 -:1020C00018958081F4CF1F920F920FB60F921124B2 -:1020D0002F933F938F939F93AF93BF9380910F0361 -:1020E00090911003A0911103B09112033091F4026A -:1020F00023E0230F2D3758F50196A11DB11D209324 -:10210000F40280930F0390931003A0931103B093F4 -:1021100012038091F5029091F602A091F702B0911E -:10212000F8020196A11DB11D8093F5029093F6026D -:10213000A093F702B093F802BF91AF919F918F9156 -:102140003F912F910F900FBE0F901F90189526E88A -:10215000230F0296A11DB11DD2CF1F920F920FB671 -:102160000F9211240F900FBE0F901F9018951F9281 -:102170000F920FB60F9211242F933F934F935F93BB -:102180006F937F938F939F93AF93BF93EF93FF933F -:102190008091B900887F803609F44AC0F0F5883212 -:1021A00009F4A7C018F5803109F49BC0B8F488235E -:1021B00009F4F9C0883009F494C0FF91EF91BF9100 -:1021C000AF919F918F917F916F915F914F913F91CF -:1021D0002F910F900FBE0F901F901895883109F422 -:1021E00088C0803251F78093650314C0803409F4AD -:1021F0009DC040F48033B9F38833F9F680936503CA -:1022000085ECB0C0803509F485C0883509F496C0E6 -:10221000883499F60E947F0AD0CF883909F48CC09F -:1022200038F5883729F050F4883611F0803729F6D0 -:1022300083E0809367031092F10257C0883809F455 -:102240007BC0803919F0803809F0B7CF8091F10256 -:10225000803208F071C0E091F10281E08E0F80932E -:10226000F1028091BB00F0E0EF52FD4F80833DC052 -:10227000803B39F0E0F4803A09F479C0883A09F0FB -:102280009CCF84E0809367031092CE021092CD021F -:10229000E091CB02F091CC0209958091CD028111A1 -:1022A0000FC081E08093CD021092AB0209C0803C48 -:1022B00009F4A6CF883C09F4A3CF883B09F07DCF71 -:1022C000E091CE0281E08E0F8093CE02F0E0E555E2 -:1022D000FD4F80818093BB009091CE028091CD0212 -:1022E00029C0809142038093BB0085EC8093BC00A1 -:1022F00064CF9091640380916303981758F5E0913F -:10230000640381E08E0F80936403F0E0ED5BFC4F8B -:102310008081E9CFE091640381E08E0F80936403B4 -:102320008091BB00F0E0ED5BFC4F808390916403F3 -:10233000809163039817C8F285E8D8CFE0916403D1 -:1023400081E08E0F809364038091BB00F0E0ED5B31 -:10235000FC4F80838091660381115CCF81E0809384 -:10236000410384EA8093BC001092670326CF85EC7A -:102370008093BC00109267038091F102803230F4A8 -:10238000E091F102F0E0EF52FD4F10826091F10216 -:1023900070E0E091CF02F091D00281ED92E00995DA -:1023A0001092F1020ACF1092650334CF1F920F9260 -:1023B0000FB60F9211242F933F934F935F936F9318 -:1023C0007F938F939F93AF93BF93CF93DF93EF93BD -:1023D000FF9380918702C0912405D0E087FF24C03D -:1023E0001092850010928400809187028F5F809305 -:1023F000870280918702082E000C990B8C179D078D -:1024000024F4809187028C30C4F1809184009091F3 -:102410008500049680349C4908F47AC08091840039 -:1024200090918500049676C080918702082E000C5A -:10243000990B8C179D07C4F6E09187028E2FEE0F43 -:10244000990BFC01EE0FFF1FE80FF91FE050FB4F47 -:10245000808186FFC9CFE09187028E2FEE0F990B06 -:10246000FC01EE0FFF1FE80FF91FE050FB4F8081CA -:1024700060E08F730E947102B7CF20918400309189 -:102480008500E09187028E2FEE0F990BFC01EE0F75 -:10249000FF1FE80FF91FE050FB4F81819281820FEF -:1024A000931F9093890080938800E09187028E2F7C -:1024B000EE0F990BFC01EE0FFF1FE80FF91FE05024 -:1024C000FB4F808186FF11C0E09187028E2FEE0FB7 -:1024D000990BFC01EE0FFF1FE80FF91FE050FB4FB7 -:1024E000808161E08F730E947102FF91EF91DF9113 -:1024F000CF91BF91AF919F918F917F916F915F919C -:102500004F913F912F910F900FBE0F901F901895F4 -:1025100080E49CE990938900809388008FEF8093FA -:102520008702E3CF109294031092930348EE53E096 -:1025300060E070E040939503509396036093970397 -:10254000709398038DE091E09093920380939103B0 -:1025500085EC90E090939E0380939D0384EC90E043 -:102560009093A00380939F0380EC90E09093A2034C -:102570008093A10381EC90E09093A4038093A30344 -:1025800082EC90E09093A6038093A50386EC90E004 -:102590009093A8038093A7031092AA031092AB0311 -:1025A0001092AC031092AD038EE294E010926F048F -:1025B00010926E04909372048093710420E430E0D2 -:1025C000309374042093730410927504109276046F -:1025D00010927804109277041092790410927B0480 -:1025E00010927A0410927D0410927C0410927F0461 -:1025F00010927E0410928104109280041092830441 -:102600001092820410928504109284041092870420 -:102610001092860410928D0410928C0410928F04F4 -:1026200010928E04109291041092900410929304D0 -:10263000109292041092A1041092A00410927004BF -:102640001092AE041092B0041092AF041092F304F2 -:1026500027E830E0309395042093940421E930E09A -:1026600030939704209396042BE930E0309399043B -:102670002093980425EA30E030939B0420939A0439 -:102680002FEA30E030939D0420939C0429EB30E046 -:1026900030939F0420939E0423EC30E03093A304F6 -:1026A0002093A20424EC30E03093A5042093A404EA -:1026B00026E235E03093A7042093A6049093890482 -:1026C000809388042DE531E03093A9042093A80479 -:1026D00090938B0480938A048FEC90E09093AB04EA -:1026E0008093AA041092F7041092F6044093F80421 -:1026F0005093F9046093FA047093FB048FE191E026 -:102700009093F5048093F404E5E2F5E02FEF48EBB5 -:102710005BE0809124058C30B8F491E0980F9093A1 -:102720002405808390E0DC01AA0FBB1FA80FB91F0E -:10273000A050BB4F12965C934E931197339685E051 -:10274000E934F80731F708952083F8CF789484B5F9 -:10275000826084BD84B5816084BD85B5826085BD9D -:1027600085B5816085BD80916E00816080936E002B -:10277000109281008091810082608093810080911D -:1027800081008160809381008091800081608093CE -:1027900080008091B10084608093B1008091B0008E -:1027A00081608093B00080917A00846080937A0089 -:1027B00080917A00826080937A0080917A008160B3 -:1027C00080937A0080917A00806880937A001092DA -:1027D000C10085E18093AE048091AF049091B00474 -:1027E0000E948818C091AE04D0E0CE0101960E94EC -:1027F000EC179093B0048093AF04FC01EC0FFD1F25 -:10280000108212E0DC011C9325E011962C93AE019E -:102810004250510967E072E002960E94111984E665 -:1028200098E0909304038093030388EB97E09093E0 -:102830000203809301038BE897E090930003809359 -:10284000FF0289ED99E09093FE028093FD0287EBF1 -:102850009AE09093FC028093FB0282E899E09093C7 -:10286000FA028093F90282EA9DE090930603809336 -:10287000050386E19CE09093080380930703E091B1 -:10288000A103F091A2031083E091A103F091A203B0 -:102890001082E0919D03F0919E031082E0919F03CE -:1028A000F091A00380E180831092A903E091A50339 -:1028B000F091A60386E08083E091A303F091A40346 -:1028C000808180618083E091A303F091A4038081E3 -:1028D00088608083E091A303F091A40380818068E5 -:1028E0008083E091A303F091A40380818F7D808396 -:1028F0008091F30481114FC061E08DE00E94BD0220 -:1029000062ED70E080E090E00E94330361E08DE0D2 -:102910000E94710268E270E080E090E00E94330360 -:1029200060E08DE00E94710262ED70E080E090E076 -:102930000E94330361E08DE00E94710268E270E062 -:1029400080E090E00E94330360E08DE00E9471021D -:102950006AEF70E080E090E00E943303C5E062ED32 -:1029600070E080E090E00E94330361E08DE00E941F -:10297000710268E270E080E090E00E94330360E062 -:102980008DE00E947102C15051F76DE770E080E068 -:1029900090E00E94330381E993E09093AD0480932B -:1029A000AC0490936F0480936E048EE694E00E94D2 -:1029B000D7008EE294E00E94B2040E94160C25E03B -:1029C000D22EC0E0D0E0CC24C39402E010E0EE248C -:1029D000E394F12C80910C03882349F069B1809134 -:1029E000090368236C7F40E080E00E949709809192 -:1029F0000D03882379F063B186B16F73B0E48B9FC8 -:102A0000C0011124682B80910A03682340E081E013 -:102A10000E94970980910E03882359F066B1809136 -:102A20000B038F7066956695682340E082E00E94F4 -:102A300097098091AC049091AD04DC01ED91FC917B -:102A40000084F185E02D0995892B09F4CEC1809190 -:102A5000AC049091AD04DC01ED91FC910284F3850E -:102A6000E02D09959C018F3F980719F3982F8091CD -:102A70007904882309F492C0973F09F07EC0109230 -:102A80007904A0917104B09172046C916137C1F125 -:102A9000693709F05CC0E091A604F091A704309773 -:102AA00041F280917A0490917B048330910560F427 -:102AB00030E020E050E040E070E060E08091880489 -:102AC000909189040995B5CFBD016D5F7F4F039744 -:102AD0000E943E01BC016D5F7F4F80E00E940E01AD -:102AE000E0917104F09172049F012D5F3F4F42818C -:102AF00050E0618170E0E091A604F091A704DECF80 -:102B00008091A2049091A304892B09F492CFBD0176 -:102B10006F5F7F4F80917A0490917B0401970E94B0 -:102B20003E01BC016F5F7F4F80E00E940E0160910B -:102B30007104709172046F5F7F4FE091A204F09175 -:102B4000A30480918E0490918F04099572CFE09137 -:102B5000A404F091A504309709F46BCF9D012F5F79 -:102B60003F4F40917A0450917B044150510980912C -:102B700090049091910409955CCF60917A047091D2 -:102B80007B04822F0E940E0180917A0490917B0435 -:102B9000019690937B0480937A044BCF60917704E5 -:102BA000709178046115710509F4B1C027FDAFC0BB -:102BB000615071097093780460937704822F0E94AA -:102BC0000E018091770490917804892B09F031CF20 -:102BD00080917504882309F42CCF803D09F483C0CB -:102BE00040F4803949F1803C09F469C010927504C1 -:102BF00020CF843FE1F1853F09F44DC0803EB1F71D -:102C0000E0919404F0919504309781F3A0917104C0 -:102C1000B09172044C9120E8429FC001112411969A -:102C20004C91480F592F511D6091760480917C047E -:102C300090917D040995DACFE0919604F091970484 -:102C40003097A1F2A0917104B09172044C9120E8E8 -:102C5000429FC001112411964C91480F592F511DCC -:102C60006091760480917E0490917F04E3CFE0919F -:102C70009C04F0919D04309709F4B8CFA0917104A1 -:102C8000B09172044C9150E011966C918091840443 -:102C900090918504CFCFE0919E04F0919F043097EE -:102CA00009F4A4CFA0917104B09172044C9150E04A -:102CB00011966C918091860490918704BBCFE0912E -:102CC0009804F0919904309709F490CFA091710481 -:102CD000B09172044C9150E0609176048091800430 -:102CE00090918104A7CFE0919A04F0919B043097D2 -:102CF00009F47CCFA0917104B09172044C9150E022 -:102D000060917604809182049091830493CF903FE8 -:102D100030F4822F8F7080937604922F907F903FB3 -:102D2000F1F190F4903CB1F150F4903909F081CE7A -:102D30001093780400937704909375047ACE903DB5 -:102D400049F1903EA9F375CE993F09F442C028F4A9 -:102D50008CE0890F823060F36CCE9F3F09F069CE22 -:102D600010927804109277041092750410927604F1 -:102D700090E080E0209173043091740482179307EF -:102D8000A8F4E0917104F0917204E80FF91F108229 -:102D90000196F0CFF0927804E0927704CDCFC09204 -:102DA000790410927B0410927A0443CE1092790435 -:102DB00010927B0410927A04E091AA04F091AB0483 -:102DC0008091920490919304309709F432CE099542 -:102DD00030CEE091A804F091A904309709F429CEEF -:102DE00080918A0490918B04F2CF8FB7F8948090F1 -:102DF0000F0390901003A0901103B09012038FBFA7 -:102E000080913D0390913E03A0913F03B091400318 -:102E1000409101015091020170E060E0881A990A26 -:102E2000AA0ABB0A481559056A057B0508F054C073 -:102E3000840F951FA61FB71F80933D0390933E03F9 -:102E4000A0933F03B09340038EE2882E84E0982E37 -:102E500092EFB92E87E08B15C8F0F401ED57FF4FC4 -:102E60008081823099F480913B0390913C030B2C3C -:102E700002C0959587950A94E2F780FF07C08B2DD5 -:102E80000E94F902BC018B2D0E940504B394AFEFA0 -:102E90008A1A9A0AB8E0BB12DDCF8091000187FD43 -:102EA0001BC0B12C2B2D30E080910001082E000CAE -:102EB000990B8217930784F0D29EF001D39EF00DF8 -:102EC0001124ED5EFC4F61817281248143818081F8 -:102ED0000E94600CB394E6CF209709F47BCD0E944A -:102EE000CE01882309F476CD0E94000073CD052E13 -:102EF00097FB1EF400940E948E1757FD07D00E9486 -:102F0000A91707FC03D04EF40C948E1750954095EA -:102F1000309521953F4F4F4F5F4F08959095809585 -:102F2000709561957F4F8F4F9F4F08950E94CB17EB -:102F3000A59F900DB49F900DA49F800D911D11240D -:102F40000895B7FF0C9496170E949617821B930B57 -:102F50000895A1E21A2EAA1BBB1BFD010DC0AA1FDA -:102F6000BB1FEE1FFF1FA217B307E407F50720F0F2 -:102F7000A21BB30BE40BF50B661F771F881F991F6D -:102F80001A9469F760957095809590959B01AC01B6 -:102F9000BD01CF010895A29FB001B39FC001A39FBF -:102FA000700D811D1124911DB29F700D811D112482 -:102FB000911D0895991B79E004C0991F961708F098 -:102FC000961B881F7A95C9F780950895EE0FFF1F0D -:102FD0000590F491E02D09940F931F93CF93DF9305 -:102FE0008230910510F482E090E0E0914B05F09181 -:102FF0004C0530E020E0B0E0A0E0309799F42115D6 -:10300000310509F44AC0281B390B24303105D8F5A5 -:103010008A819B816115710589F1FB01938382830C -:10302000FE0111C040815181028113814817590767 -:10303000E0F04817590799F4109761F012960C9335 -:10304000129713961C933296CF01DF91CF911F9167 -:103050000F91089500934B0510934C05F4CF211563 -:10306000310551F04217530738F0A901DB019A01ED -:10307000BD01DF01F801C1CFEF01F9CF90934C05FD -:1030800080934B05CDCFFE01E20FF31F8193919307 -:103090002250310939832883D7CF209149053091B7 -:1030A0004A05232B41F4209105013091060130930C -:1030B0004A0520934905209103013091040121150F -:1030C000310541F42DB73EB74091070150910801F9 -:1030D000241B350BE0914905F0914A05E217F307EF -:1030E000A0F42E1B3F0B2817390778F0AC014E5F78 -:1030F0005F4F2417350748F04E0F5F1F50934A0566 -:1031000040934905819391939FCFF0E0E0E09CCFFD -:10311000CF93DF930097E9F0FC013297138212827C -:10312000A0914B05B0914C05ED0130E020E01097E7 -:10313000A1F420813181820F931F209149053091A4 -:103140004A052817390709F061C0F0934A05E09352 -:103150004905DF91CF910895EA01CE17DF07E8F521 -:103160004A815B819E0141155105B1F7E901FB835D -:10317000EA8349915991C40FD51FEC17FD0761F4FB -:10318000808191810296840F951FE901998388833C -:10319000828193819B838A83F0E0E0E012968D9197 -:1031A0009C9113970097B9F52D913C911197CD0102 -:1031B0000296820F931F2091490530914A052817E6 -:1031C000390739F6309751F510924C0510924B059E -:1031D000B0934A05A0934905BCCFD383C2834081F5 -:1031E0005181840F951FC817D90761F44E5F5F4F57 -:1031F00088819981480F591F518340838A819B811F -:10320000938382832115310509F0B0CFF0934C05EB -:10321000E0934B059ECFFD01DC01C0CF13821282EB -:10322000D7CFFB01DC014150504048F001900D9296 -:103230000020C9F701C01D9241505040E0F70895A9 -:04324000F894FFCF30 -:10324400FF130000004D058000000000000402642C -:103254000191015102C201A001B40100000000DA91 -:1032640006AD0609078306A606930684064D617813 -:1032740020736572766F732061747461636865642A -:1032840000556E6B6E6F776E2070696E206D6F6483 -:1032940065004932433A20546F6F206D616E792086 -:1032A4006279746573207265636569766564004943 -:1032B40032433A20546F6F206665772062797465D3 -:1032C400732072656365697665640031302D6269C7 -:1032D400742061646472657373696E67206E6F74C1 -:1032E40020737570706F7274656400746F6F206DF5 -:1032F400616E792071756572696573002F55736508 -:1033040072732F6D61726375732F446F63756D658E -:103314006E74732F41726475696E6F2F6C6962727B -:1033240061726965732F4669726D6174612F657886 -:10333400616D706C65732F5374616E646172644661 -:1033440069726D6174612F5374616E646172644655 -:0C33540069726D6174612E696E6F00007B -:00000001FF diff --git a/apps/electron-app/hex/uno/StandardFirmata.cpp.hex b/apps/electron-app/hex/uno/StandardFirmata.cpp.hex deleted file mode 100644 index b80ccef8..00000000 --- a/apps/electron-app/hex/uno/StandardFirmata.cpp.hex +++ /dev/null @@ -1,827 +0,0 @@ -:100000000C945D000C9485000C9485000C94AD104C -:100010000C94AD100C94AD100C9485000C948500DC -:100020000C9485000C9485000C9485000C94D611DA -:100030000C9485000C9485000C9485000C9485002C -:100040000C940B100C9485000C947B100C945510A0 -:100050000C9485000C9485000C9485000C9485000C -:100060000C94B7100C9485000000000024002700B9 -:100070002A0000000000250028002B0004040404CE -:100080000404040402020202020203030303030342 -:10009000010204081020408001020408102001021F -:1000A00004081020000000080002010000030407FB -:1000B0000000000000000000921211241FBECFEFCC -:1000C000D8E0DEBFCDBF12E0A0E0B1E0E4E4F2E3AF -:1000D00002C005900D92A834B107D9F725E0A8E435 -:1000E000B2E001C01D92A137B207E1F710E0CDE503 -:1000F000D0E004C02197FE010E94E617CC35D1075D -:10010000C9F70E94A6130C9420190C940000862FA6 -:10011000E0912803F0912903309711F0BA01099476 -:100120000895862FE0912603F0912703309711F070 -:10013000BA0109940895862FE0912403F0912503D4 -:10014000309711F0BA0109940895862FE0912203A7 -:10015000F0912303309711F0BA0109940895862F86 -:10016000E0912003F0912103309711F0BA01099436 -:100170000895862FE0911E03F0911F03309711F030 -:10018000BA01099408950895862F642FE0912A03F7 -:10019000F0912B03309711F0A90109940895E09193 -:1001A0002C03F0912D03309709F009940895CF9313 -:1001B000DF93FC01A081B181109701F1EC01ED9179 -:1001C000FC9111970190F081E02D69EFCD01099527 -:1001D00088819981DC01ED91FC910190F081E02D05 -:1001E00062E0099588819981DC01ED91FC91019093 -:1001F000F081E02D65E0DF91CF910994DF91CF91FF -:100200000895A091D604B091D704ED91FC91119777 -:100210000190F081E02D682FCD0109941F93CF93B9 -:10022000DF93182FEB0180919D0490919E04681735 -:10023000790760F480919B0490919C04C80FD91FAA -:10024000188380E0DF91CF911F910895E091CA0457 -:10025000F091CB04309711F481E0F4CF81E08093EA -:100260009A048091B6049091B704099580919D04F9 -:1002700090919E04C817D90778F7DCCFCF93DF930E -:10028000EC01FB0130E020E0C901880F991F8C17B9 -:100290009D0778F44081DB014D93BD011197918159 -:1002A000979599279795942B9C932F5F3F4F329664 -:1002B000EBCFC901DF91CF91089590E0FC01EC559F -:1002C000FF4F2491FC01E057FF4F3491FC01E458AB -:1002D000FF4FE491EE23C9F0222339F0233001F1DE -:1002E000A8F4213019F1223029F1F0E0EE0FFF1FC0 -:1002F000EE58FF4FA591B4918FB7F894EC9161112E -:1003000026C030953E233C938FBF08952730A9F037 -:100310002830C9F0243049F7809180008F7D03C0D8 -:10032000809180008F7780938000DFCF84B58F77B6 -:1003300084BDDBCF84B58F7DFBCF8091B0008F77FC -:100340008093B000D2CF8091B0008F7DF9CF3E2B4B -:10035000DACFCF93DF9390E0FC01E057FF4F249179 -:1003600084589F4FFC0184918823C9F090E0880F46 -:10037000991FFC01E859FF4FA591B491FC01EE587B -:10038000FF4FC591D49161110DC09FB7F8948C9126 -:10039000209582238C938881282328839FBFDF9117 -:1003A000CF910895623051F49FB7F8943C91822F19 -:1003B000809583238C93E8812E2BEFCF8FB7F89411 -:1003C000EC912E2B2C938FBFEACF8E3008F08E50FD -:1003D0008770806480937C0080917A008064809331 -:1003E0007A0080917A0086FDFCCF80917800909110 -:1003F000790008953FB7F89480916703909168035E -:10040000A0916903B0916A0326B5A89B05C02F3F50 -:1004100019F00196A11DB11D3FBFBA2FA92F982F2A -:100420008827BC01CD01620F711D811D911D42E025 -:10043000660F771F881F991F4A95D1F708958F92ED -:100440009F92AF92BF92CF92DF92EF92FF926B0199 -:100450007C010E94FA014B015C01C114D104E1044A -:10046000F104B9F00E94FA01681979098A099B0917 -:10047000683E73408105910580F321E0C21AD108DE -:10048000E108F10888EE880E83E0981EA11CB11CDB -:10049000E4CFFF90EF90DF90CF90BF90AF909F9010 -:1004A0008F900895009721F0805C9F4F0C94D700A7 -:1004B0000895AF92BF92CF92DF92EF92FF920F9387 -:1004C0001F93CF93DF936C017B018B01040F151FEA -:1004D000EB015E01AE18BF08C017D10759F0699152 -:1004E000D601ED91FC910190F081E02DC6010995B6 -:1004F000892B79F7C501DF91CF911F910F91FF9063 -:10050000EF90DF90CF90BF90AF900895FC01538D96 -:10051000448D252F30E0842F90E0821B930B5417DD -:1005200010F0CF96089501970895FC01918D828D6A -:10053000981761F0A28DAE0FBF2FB11D5D968C9103 -:10054000928D9F5F9F73928F90E008958FEF9FEF42 -:100550000895FC01918D828D981731F0828DE80FFE -:10056000F11D858D90E008958FEF9FEF0895FC01B8 -:10057000918D228D892F90E0805C9F4F821B910985 -:100580008F73992708958BEB93E00E94B70221E0C7 -:10059000892B09F420E0822F089580E090E0892BD8 -:1005A00029F00E94C30281110C9400000895FC01FF -:1005B000A48DA80FB92FB11DA35ABF4F2C91848DC4 -:1005C00090E001968F739927848FA689B7892C9321 -:1005D000A089B1898C91837080648C93938D848D74 -:1005E000981306C00288F389E02D80818F7D808377 -:1005F0000895EF92FF920F931F93CF93DF93EC0137 -:1006000081E0888F9B8D8C8D98131AC0E889F989B9 -:10061000808185FF15C09FB7F894EE89FF896083BC -:10062000E889F98980818370806480839FBF81E03D -:1006300090E0DF91CF911F910F91FF90EF9008957F -:10064000F62E0B8D10E00F5F1F4F0F731127E02E5A -:100650008C8D8E110CC00FB607FCFACFE889F98992 -:10066000808185FFF5CFCE010E94D702F1CFEB8DBF -:10067000EC0FFD2FF11DE35AFF4FF0829FB7F89466 -:100680000B8FEA89FB8980818062CFCFCF93DF9384 -:10069000EC01888D8823B9F0AA89BB89E889F9899A -:1006A0008C9185FD03C0808186FD0DC00FB607FCCF -:1006B000F7CF8C9185FFF2CF808185FFEDCFCE0102 -:1006C0000E94D702E9CFDF91CF9108955F926F9298 -:1006D0007F928F929F92AF92BF92CF92DF92EF92D2 -:1006E000FF920F931F93CF93DF935C016901DA01AF -:1006F0005C90232B19F4CC24CA94DC2C8A013A0197 -:10070000660E771ED0E0C0E0F12CE12C87E0882E49 -:10071000912CF50180819181D8016C910C2E01C042 -:10072000660F0A94EAF765296F77DC01ED91FC9179 -:100730000190F081E02D0995BFEFEB1AFB0AF8015B -:10074000608170E0C4018C1B9D0B02C0759567959C -:100750008A95E2F7562E2196C730D10558F1CE146E -:10076000DF0441F1D5018D919C91652D6F77DC01FE -:10077000ED91FC910190F081E02D0995BFEFEB1A0E -:10078000FB0A551C5524551C2797E6CFEC14FD0495 -:1007900008F4BFCFDF91CF911F910F91FF90EF90A1 -:1007A000DF90CF90BF90AF909F908F907F906F9091 -:1007B0005F9008950F5F1F4F6016710639F72097FD -:1007C00049F3EC14FD0430F7F5018081918161E07B -:1007D00070E001C0660FCA95EAF761506521DC013F -:1007E000ED91FC910190F081E02DDF91CF911F916F -:1007F0000F91FF90EF90DF90CF90BF90AF909F90C0 -:100800008F907F906F905F9009941F93CF93DF93A9 -:1008100000D0CDB7DEB7182F7A8369838091980412 -:10082000909199040097C9F0DC01ED91FC91019041 -:10083000F081E02D1031B8F461157044A0F4612FFF -:10084000606E099522E030E0AE014F5F5F4F62E0DD -:1008500070E088E994E00E9466030F900F90DF91AA -:10086000CF911F91089560EF099580919804909120 -:100870009904DC01ED91FC910190F081E02D6FE68F -:1008800009958091980490919904DC01ED91FC9177 -:100890000190F081E02D612F099522E030E0AE015A -:1008A0004F5F5F4F62E070E088E994E00E9466036A -:1008B0008091980490919904DC01ED91FC91019054 -:1008C000F081E02D67EF0995C8CFEF92FF920F936B -:1008D0001F93CF93DF93C82F809198049091990430 -:1008E0000097C9F17A018B01DC01ED91FC91019037 -:1008F000F081E02D60EF0995809198049091990422 -:10090000DC01ED91FC910190F081E02D6C2F0995B7 -:10091000E7010E0D1F1DC017D10759F030E020E090 -:10092000AE0161E070E088E994E00E9466032196E0 -:10093000F2CF8091980490919904DC01ED91FC91A3 -:100940000190F081E02D67EFDF91CF911F910F9122 -:10095000FF90EF900994DF91CF911F910F91FF903D -:10096000EF900895CF92DF92EF92FF920F931F9333 -:10097000CF93DF93FC01E058FF4FE080EE2009F4B5 -:100980005CC0EC01C05CDF4FA881B981109709F40D -:1009900054C0FC01EF57FF4FC080D180F601118198 -:1009A0000081ED91FC9111970190F081E02D60EFB5 -:1009B000CD01099588819981DC01ED91FC9101902F -:1009C000F081E02D69E7099588819981DC01ED913D -:1009D000FC910190F081E02D602F0995888199812B -:1009E000DC01ED91FC910190F081E02D612F0995E2 -:1009F000F12C01E010E00F5F1F4FE016F10659F0F7 -:100A000030E020E0A601400F511F61E070E0CE0110 -:100A10000E946603F0CF88819981DC01ED91FC9101 -:100A20000190F081E02D67EFDF91CF911F910F9141 -:100A3000FF90EF90DF90CF900994DF91CF911F91BD -:100A40000F91FF90EF90DF90CF900895009711F0F5 -:100A50000C94B20408952091F702260F3327331F18 -:100A600021323105ECF420919103FC0190E080E00B -:100A7000243069F082E00895A091F7022191AC0141 -:100A80004B525D4FA40FB52FB11D2C9301968617C5 -:100A900098F38091F702680F6093F70280E0089561 -:100AA00081E008951092910381E080939003109269 -:100AB0006B0361E082E10E945D0161E083E10E94DD -:100AC0005D01E9EBF0E080818E7F808380818D7F06 -:100AD000808388E48093B80085E48093BC00089507 -:100AE000CF93DF9391E09093D4028823B9F0C09123 -:100AF000B800D091BA008091BC008A7B8093BC0082 -:100B000060E082E10E945D0160E083E10E945D019E -:100B10000E945205D093BA00C093B800DF91CF91E4 -:100B200008958F929F92AF92BF92CF92DF92EF92F1 -:100B3000FF920F931F93CF93DF93D091BA03D132DB -:100B400008F0D7C0182FC091B9030E94FA016B01B9 -:100B50007C018091910381116BC082E080939103AD -:100B6000109390038FEF80938F0310928E03D09396 -:100B70008D03A9E9B3E0EDE6F3E080E0D81391C07E -:100B800010926C0380916C03CC0FC82BC0936C0344 -:100B900080916B03813009F088C010926B030E9432 -:100BA000FA016B017C0180916C038093BB00809102 -:100BB000930390919403A0919503B0919603892B90 -:100BC0008A2B8B2BA1F00E94FA01009193031091C4 -:100BD000940320919503309196036C197D098E0939 -:100BE0009F09061717072807390708F442C08091A4 -:100BF000BC0083FDD8CF85EC8093BC000E94FA0135 -:100C00006B017C0180919103823009F450C0809186 -:100C10008F038F3F09F46FC080918F03803209F4F6 -:100C20006CC080918F03803309F469C084E026C0D2 -:100C30008091930390919403A0919503B0919603B2 -:100C4000892B8A2B8B2B09F484CF0E94FA01809088 -:100C5000930390909403A0909503B09096036C1921 -:100C60007D098E099F0986169706A806B90608F021 -:100C700070CF809192030E94700585E010929803D6 -:100C80001092BA0310929703DF91CF911F910F91A9 -:100C9000FF90EF90DF90CF90BF90AF909F908F909C -:100CA00008959D9191938F5F69CF85EEA5CF809137 -:100CB000930390919403A0919503B0919603892B8F -:100CC0008A2B8B2B09F49ECF0E94FA01009193038B -:100CD0001091940320919503309196036C197D092E -:100CE0008E099F09061717072807390708F08ACFCA -:100CF000C0CF81E0C3CF80E0C1CF82E0BFCF83E02F -:100D0000BDCF089508950895E091D3028091D20255 -:100D1000E81730F4F0E0EE54FD4F808190E0089544 -:100D20008FEF9FEF08959091D3028091D2022FEF21 -:100D30003FEF981748F4E92FF0E0EE54FD4F208183 -:100D400030E09F5F9093D302C90108958091D20251 -:100D50009091D302891B990B0895CF92DF92EF9265 -:100D6000FF920F931F93CF93DF937C01CB018A01F6 -:100D700020919703222389F0EB016B01C40ED51E4D -:100D8000CC15DD0569F06991D701ED91FC910190D9 -:100D9000F081E02DC7010995F3CF642F0E942B0548 -:100DA000C801DF91CF911F910F91FF90EF90DF90DD -:100DB000CF900895CF93DF931F92CDB7DEB76983AD -:100DC000209197032223F9F02091BA03203258F0A2 -:100DD00021E030E0FC013383228390E080E00F903B -:100DE000DF91CF91089580919803E82FF0E0E756C6 -:100DF000FC4F998190838F5F809398038093BA030F -:100E000081E090E0ECCF61E0CE0101960E942B05DD -:100E1000F7CF90E080E00895DF92EF92FF920F937A -:100E20001F93CF93DF93EC01D62E7A01890188813D -:100E30008C3008F067C061E08D2D0E94A901888187 -:100E4000282F30E0F901EE0FFF1FE20FF31FEC5DDA -:100E5000FA4F9D2D9F736081607C692B608320E237 -:100E600032E02E193F0937FF02C02D5F3F4F359505 -:100E7000279535952795298320E639E0201B310BEE -:100E800037FF02C02D5F3F4F359527953595279544 -:100E90002A832CE0622F0E94DA17829FB00111246E -:100EA00030E020E0AB01420F531FFA01EE0FFF1FAD -:100EB000E40FF51FEC5DFA4F908196FD16C02F5F91 -:100EC0003F4F2C30310571F781110FC01092800017 -:100ED00082E0809381001092850010928400B19A84 -:100EE00080916F00826080936F00E8818E2F90E088 -:100EF000FC01EE0FFF1FE80FF91FEC5DFA4F808138 -:100F0000806480838881DF91CF911F910F91FF9042 -:100F1000EF90DF900895CF938630B0F421E030E079 -:100F2000082E02C0220F331F0A94E2F740915C039F -:100F300050915D03672B51F4209530952423352380 -:100F400030935D0320935C03CF910895242B352BC0 -:100F500030935D0320935C039091B0029111F4CF24 -:100F6000C82F0E94E501BC018C2FCF910C94050481 -:100F70005F926F927F928F929F92AF92BF92CF9229 -:100F8000DF92EF92FF920F931F93CF93DF93833003 -:100F900008F061C0D1E0D80FDD0FDD0FDD0F5D2E51 -:100FA000D53110F044E1542EC62F082FD8508D2E85 -:100FB000912CC401880F991F9C01285A3B4F59015D -:100FC000D12CC12C10E077247394D515C8F58EEF81 -:100FD0008D0F8231F8F4F601E80DF91DE552FB4F53 -:100FE00090819230B8F48C2F87216624639481110C -:100FF00001C0612C7601EE0CFF1C913089F4172999 -:1010000037E9E30EF11CF501EE0DFF1D862D90E092 -:1010100091838083770CDF5F8FEFC81AD80AD5CF12 -:10102000882371F3F701E956FF4FEA0DFB1D80811C -:101030009181019729F362E08D2F0E94A901E0CFF1 -:10104000011119C0F8948BB16C2F68276C7F612354 -:1010500068276BB97894DF91CF911F910F91FF9022 -:10106000EF90DF90CF90BF90AF909F908F907F9048 -:101070006F905F9008950130D1F4C123F89495B139 -:10108000812F8F73809589239C2F9F73892B85B91E -:1010900088B1612F62956695669563706095682347 -:1010A000C295C695C695C370C62BC8B9D3CF1F705D -:1010B000F89498B1812F880F880F80958923C123D8 -:1010C000CC0FCC0FC82BF1CF8F929F92AF92BF92D3 -:1010D000CF92DF92EF92FF920F931F93CF93DF9304 -:1010E000EB01843108F098C0082F10E0F801E552B8 -:1010F000FB4F9081933009F49CC0943009F08CC070 -:101100008250823108F081C0F801E856FD4FC0805E -:10111000D12C7601EE0CFF1C4B01603282E0780787 -:101120000CF03EC0F701EC0DFD1DE75BFA4F81812D -:10113000A8E88A2E912C881A910887FD9394880C30 -:10114000991C880C991C092C000CAA08BB088281E8 -:1011500028E532E0281B310987FD3395220F331F24 -:10116000220F331F032E000C440B550B281939098D -:101170004A095B09DB01653B710514F0A4EBB0E0A3 -:10118000B7FF02C0B0E0A0E00E94A11724EB30E05E -:1011900040E050E00E947717820E931EA41EB51EF9 -:1011A000F701EC0DFD1DE75BFA4F20812C3068F54F -:1011B000318188E890E0831B910937FD9395880F72 -:1011C000991F880F991F881699067CF0328188E54F -:1011D00092E0831B910937FD9395880F991F880F23 -:1011E000991F881699060CF4C4010297880F991F5D -:1011F0004FB7F89430E0F901EE0FFF1FE20FF31F35 -:10120000EC5DFA4F928381834FBF000F111FF801ED -:10121000E151FB4FD183C083DF91CF911F910F919B -:10122000FF90EF90DF90CF90BF90AF909F908F9006 -:1012300008957B01D82F833041F08BEF800F8230EF -:1012400020F087EF800F833058F461E08D2F0E94EB -:10125000A901E114F10461F460E08D2F0E945D01A9 -:10126000000F111FF801E151FB4FF182E082D4CF52 -:101270008FEFE816F10411F461E0EFCFF801EC55BF -:10128000FF4FE491E33021F148F4E130B9F0E2306E -:10129000D1F080E8E816F1047CF7DECFE73011F1F9 -:1012A000E83041F1E430A9F78091800080628093BA -:1012B0008000F0928B00E0928A00D2CF84B58068E3 -:1012C00084BDE7BCCDCF84B5806284BDE8BCC8CF07 -:1012D00080918000806880938000F0928900E09285 -:1012E0008800BECF8091B00080688093B000E0920B -:1012F000B300B6CF8091B00080628093B000E092DE -:10130000B400AECF9EEF980F923180F4E82FF0E05A -:10131000DF01A552BB4F9C91913041F4EE0FFF1FAE -:10132000E151FB4F608371830C945D010895FF923E -:101330000F931F93CF93DF9300D0CDB7DEB7082F65 -:1013400010E0F801E25DFC4F9081F62EF922045581 -:101350001D4F411104C0F80190819F1511F12F2DEF -:1013600030E03A832983A0919804B09199041097B2 -:10137000B1F0682F6F706069ED91FC911197019049 -:10138000F081E02DCD01099522E030E0AE014F5F04 -:101390005F4F62E070E088E994E00E946603F80124 -:1013A000F0820F900F90DF91CF911F910F91FF90DE -:1013B0000895833040F5282F30E0F901EF5CFC4FB1 -:1013C0006083672B01F1225D3C4FF901608181113F -:1013D00006C099B19C7F692341E00C949709813044 -:1013E00049F493B126B19F73F0E42F9F900111242B -:1013F000922BF1CF26B130E035952795359527957D -:101400002F706223E9CF0895A82FB0E0A856BD4FF2 -:101410009C91292F30E0F901EE0FFF1FE20FF31F1F -:10142000E75BFA4FE0812E2F30E0F901EE0FFF1F4E -:10143000E20FF31FEC5DFA4F80818F7B80838091F8 -:101440009602981308C0992319F091509093960230 -:101450008FEF8C9308958823D9F3E0919702EF5F83 -:10146000E0939702F0E0E95BFD4F9083F1CFFC0140 -:1014700001900020E9F73197BF01681B790BAC019F -:1014800081E70C946504CF93DF93DB019091960282 -:101490009C3078F530919702682F70E0FB01E85698 -:1014A000FD4F3323E1F0C32FD0E0C95BDD4F8881CE -:1014B0008083315030939702808123E0829FC00166 -:1014C0001124875B9A4F1A161B0674F4141615061E -:1014D0005CF49A01AD01DF91CF910C940C079083DD -:1014E0009F5F90939602E8CF20E639E040E252E019 -:1014F000F2CF8DE291E0DF91CF910C94370A85ED28 -:101500008093BC008091930390919403A0919503E4 -:10151000B09196030796A11DB11D23E0B695A7953E -:10152000979587952A95D1F72091BC0024FD03C09B -:101530001092910308954091930350919403609108 -:10154000950370919603452B462B472B69F3009723 -:10155000A105B10541F02AE22A95F1F700C00197F3 -:10156000A109B109E1CF809192030C9470059F927B -:10157000AF92BF92CF92DF92EF92FF920F931F93A1 -:10158000CF93DF93C82ED12CE601C85ADB4FFE0162 -:10159000ED57FF4F90819F3709F49FC0963061F45B -:1015A0009091AF02992341F06630710529F01092B5 -:1015B000AF029FEF909300017B01182F0EEF080FF1 -:1015C000023108F564307105F1F0F601E856FD4F7F -:1015D00080818C30C0F490E0FC01EE0FFF1FE80F1B -:1015E000F91FE75BFA4FE0818E2F90E0FC01EE0FD0 -:1015F000FF1FE80FF91FEC5DFA4F808186FF03C0E3 -:10160000812F0E94040A52EF952E910E85E08915D4 -:1016100058F061E070E032E0E316F10411F070E0A0 -:1016200060E0892D0E948B070231C8F4E12FE69516 -:10163000E695E695F0E0E25DFC4F2081312F3770B2 -:1016400081E090E001C0880F3A95EAF7E114F104D7 -:1016500021F03BE0E316F10401F5822B8083560173 -:10166000AA0CBB1CF501E151FB4F118210828CE0EA -:10167000E816F10408F0CBC0F701EF5BF44F0C94CF -:10168000E617610B8E0B500BA50BC40B070CFB0B65 -:10169000070C070C070C6D0B790B80958223DECFAE -:1016A00035E03915D0F0023120F460E0812F0E943E -:1016B000A901CD57DF4F88818F3779F082E0888389 -:1016C0000CC0023150F460E0812F0E94A901CD5777 -:1016D000DF4F88818F3709F01882DF91CF911F91FA -:1016E0000F91FF90EF90DF90CF90BF90AF909F90C1 -:1016F0000895023190F762E0812F0E94A901CD5731 -:10170000DF4F88818F3711F08BE08883F501E1513D -:10171000FB4F81E090E091838083DFCF0231E8F6D8 -:10172000FE01ED57FF4F8081833021F460E0812F6F -:101730000E945D0161E0812F0E94A901CD57DF4F1A -:1017400088818F3751F281E0BACF133049F08BEFA7 -:10175000810F823028F087EF810F833008F0BDCFF2 -:1017600061E0812F0E94A90161E0812F0E94A901FF -:1017700060E0812F0E945D01CD57DF4F88818F3758 -:1017800009F4ABCF83E09BCF023108F0A6CFCD5751 -:10179000DF4F88818F3711F084E08883F601E856A7 -:1017A000FD4F80818F3FA9F090E0FC01EE0FFF1FFD -:1017B000E80FF91FE75BFA4FE0818E2F90E0FC0104 -:1017C000EE0FFF1FE80FF91FEC5DFA4F808186FDD9 -:1017D00084CF4FEF5FEF6FEF7FEF812FDF91CF91DE -:1017E0001F910F91FF90EF90DF90CF90BF90AF903F -:1017F0009F900C94430A1251123008F06ECFCD57CF -:10180000DF4F88818F3709F468CF86E058CF81E4B5 -:1018100091E0DF91CF911F910F91FF90EF90DF90BA -:10182000CF90BF90AF909F900C94370A0F931F9367 -:10183000CF93DF9381E08093B0028091AF02882341 -:1018400029F01092AF028FEF8093000110923103C4 -:1018500010922E031092AC021092320310922F03BA -:101860001092AD0210923303109230031092AE0228 -:1018700008E912E0C0E0DFEF82EF8C0F62E070E079 -:10188000863030F08EEF8C0F823128F461E070E00A -:101890008C2F0E94B70AF801D1938F01CF5FC4311A -:1018A00059F710925D0310925C0310929702109208 -:1018B00096021092B002DF91CF911F910F9108957F -:1018C0004F925F926F927F928F929F92AF92BF9250 -:1018D000FF920F931F93CF93DF93F82E8B01D42F9A -:1018E000C22F6F3F760709F490C081E08093970381 -:1018F000F092B903109298031092BA0388E195E030 -:101900000E94DA068C2F0E9491058091940290919A -:1019100095028230910538F0880F991F880F991F22 -:1019200005970197F1F70E94FA014B015C01809144 -:10193000910381116CC0CD2FD13208F0C0E281E05B -:1019400080939103809390039FEF90938F03109265 -:101950008E039C0F90938D0380936C0390916C0386 -:101960008F2D880F892B80936C0380916B038130BE -:1019700009F0A1C010926B030E94FA014B015C01B7 -:1019800080916C038093BB008091930390919403AA -:10199000A0919503B0919603892B8A2B8B2BA1F0F4 -:1019A0000E94FA0140909303509094036090950335 -:1019B00070909603681979098A099B09461657069B -:1019C0006806790608F444C08091BC0083FDD8CF36 -:1019D00085EC8093BC000E94FA014B015C01809170 -:1019E0009103813009F469C080918E038C1710F443 -:1019F000C0918E03EDE6F3E0A2EBB2E080E08C173D -:101A000061F191919D938F5FFACF00E08CCF80912F -:101A1000930390919403A0919503B0919603892B21 -:101A20008A2B8B2B09F483CF0E94FA0140909303F9 -:101A3000509094036090950370909603681979090B -:101A40008A099B09461657066806790608F06FCF83 -:101A5000809192030E947005C0E01092D302C0935F -:101A6000D2022D2F30E08C2F90E0281739070CF090 -:101A700046C082E591E00E94370AF092540200933A -:101A8000550204E512E0AD2EB12CC80184559240F8 -:101A90008A159B050CF041C00F5F1F4F9091D20239 -:101AA0008091D3029817C9F188E195E00E949306CE -:101AB000F8018183EACF85EE8CCF809193039091DA -:101AC0009403A0919503B0919603892B8A2B8B2BBD -:101AD00009F485CF0E94FA0140909303509094033B -:101AE0006090950370909603681979098A099B099B -:101AF000461657066806790608F071CFA9CF8217F7 -:101B000093070CF0BACF8FE691E00E94370AD0918C -:101B1000D2028091D302D81BB0CFDE5F6D2F70E070 -:101B200044E552E087E7DF91CF911F910F91FF903D -:101B3000BF90AF909F908F907F906F905F904F90ED -:101B40000C946504EF92FF920F931F93CF93DF9352 -:101B50008956823108F033C0EA01162FE82FF0E0F1 -:101B6000EC54F24F0C94E617FA0FDF0D610FDF0D06 -:101B7000B90FDF0D3F0FE30EDF0DDF0DDF0DDF0DC2 -:101B8000DF0DC60DDF0DA70EDF0D290F998195FF23 -:101B90000AC08BE891E0DF91CF911F910F91FF90E8 -:101BA000EF900C94370A888131E096FB222720F9C8 -:101BB000232798719830D1F148F49923A9F0DF9147 -:101BC000CF911F910F91FF90EF900895903109F4FC -:101BD0004CC09831A1F72091000112160CF472C08C -:101BE0008FEF80930001EBCF309397038093B9037D -:101BF000109298031092BA0302E0011778F4FE01E4 -:101C0000E00FF11D61816795662767958081680FF8 -:101C100088E195E00E94DA060E5FEFCF81E00E9436 -:101C2000910583E191E00197F1F7C9CF9A814B814A -:101C30006630A1F430E8439FB0011124690F711D93 -:101C40004D814795442747959C81490FDF91CF915E -:101C50001F910F91FF90EF900C94600C47954427D3 -:101C60004795490F6FEF7FEFF1CFE0910001E7302B -:101C70001CF08BEA91E08FCF3A819B816630D9F4DA -:101C800060E8969FA0011124430F511D9D819795F7 -:101C9000992797953C81930FEF5FE093000135E022 -:101CA000E302F0011124EC5CFC4F808352834183FA -:101CB0009383248384CF979599279795930F4FEF1C -:101CC0005FEFEACF90E0622F022E000C770B35E039 -:101CD000492F50E06417750764F0349FF001359F79 -:101CE000F00D1124EC5CFC4F4081481719F09F5F08 -:101CF000EFCF90E085E0492F50E0641775071CF1A5 -:101D00009830F8F4FA0131968E9FD0018F9FB00D74 -:101D10001124AC5CBC4F3C91849FF001859FF00D79 -:101D20001124EC5CFC4F308311964D915C9112971D -:101D30005283418313963C911397338314963C91BD -:101D400034839F5FD8CF21502093000138CF623079 -:101D500078F0898160E8869F900111248881820F44 -:101D6000932F911D009721F09093950280939402F8 -:101D70008091AF02811123CFC0E08EEE8C0F8230B4 -:101D800028F466E070E08C2F0E94B70ACF5FC43160 -:101D9000A1F781E08093AF021092D3021092D20299 -:101DA000109298031092BA030E94520581E896E0BF -:101DB0009093F6028093F50282E896E09093FA02FF -:101DC0008093F902FCCE653008F4F9CE18818EEFCD -:101DD000810F823108F0F3CE0981EA80FB80CC814B -:101DE000E12FF0E0E856FD4F80818C30C0F490E0A8 -:101DF000FC01EE0FFF1FE80FF91FE75BFA4FE081D0 -:101E00008E2F90E0FC01EE0FFF1FE80FF91FEC5D35 -:101E1000FA4F808186FF03C0812F0E94040A80E868 -:101E2000C89FA00111244F0D511D90E8E99EB001FB -:101E30001124600F711D812F0E94430A64E070E03D -:101E4000812FDF91CF911F910F91FF90EF900C9414 -:101E5000B70A623008F4B3CE8981E0E88E9F900122 -:101E600011248881820F932F911D009729F0909360 -:101E7000020180930101A3CE81E090E0F8CF6230AF -:101E800008F49DCE698170E0123091F08A81F0E80B -:101E90008F9FC0011124682B792B133049F08B815F -:101EA00090E090E4899F902D88271124682B792B4E -:101EB0008881DF91CF911F910F91FF90EF900C944B -:101EC000640880EF0E9401018CE60E940101CEEFC0 -:101ED00084EF8C0F863020F582E00E9401018AE0B9 -:101EE0000E9401018DEF8C0F8230E0F089EF8C0FA2 -:101EF0008330F0F417C0C23158F780E00E9401012E -:101F000081E00E9401018BE00E94010181E00E94BA -:101F1000010181E00E94010181E00E940101D8CF0E -:101F2000C13001F783E00E94010188E00E940101B5 -:101F3000C23130F484E00E9401018EE00E94010170 -:101F400080EF8C0F823030F486E00E94010181E046 -:101F50000E9401018FE70E940101CF5FC23159F653 -:101F600087EFDF91CF911F910F91FF90EF900C942D -:101F70000101662309F423CEC88180EF0E9401018C -:101F80008EE60E9401018C2F0E940101C43140F7AE -:101F9000D0E0FE01E552FB4F80810E940101CC0F91 -:101FA000DD1F8E0101511B4FF80180818F770E9448 -:101FB0000101F801808191819C012078232B39F067 -:101FC000880F892F881F990B8F770E940101C151BB -:101FD000DB4F888199819C012227307C232B09F4D7 -:101FE000BFCF990F880B990F982F881F8F770E946A -:101FF0000101B6CF80EF0E9401018AE60E94010133 -:10200000C2EF8FE7C63008F48C2F0E940101CF5F2A -:10201000C630B9F7A5CF1F920F920FB60F921124B9 -:102020002F933F938F939F93AF93BF9380916303BD -:1020300090916403A0916503B091660330916203AF -:1020400023E0230F2D3758F50196A11DB11D2093D4 -:1020500062038093630390936403A0936503B0933A -:1020600066038091670390916803A0916903B09122 -:102070006A030196A11DB11D8093670390936803C5 -:10208000A0936903B0936A03BF91AF919F918F9121 -:102090003F912F910F900FBE0F901F90189526E83B -:1020A000230F0296A11DB11DD2CF1F920F920FB622 -:1020B0000F9211242F933F934F935F936F937F93CE -:1020C0008F939F93AF93BF93EF93FF938BEB93E02B -:1020D0000E94D702FF91EF91BF91AF919F918F9195 -:1020E0007F916F915F914F913F912F910F900FBE14 -:1020F0000F901F9018951F920F920FB60F921124F8 -:102100002F938F939F93EF93FF93E091CB03F091E5 -:10211000CC038081E091D103F091D20382FD1BC0FA -:1021200090818091D4038F5F8F732091D5038217A4 -:1021300041F0E091D403F0E0E554FC4F958F80939B -:10214000D403FF91EF919F918F912F910F900FBE2C -:102150000F901F9018958081F4CF1F920F920FB6A9 -:102160000F9211240F900FBE0F901F9018951F9281 -:102170000F920FB60F9211242F933F934F935F93BB -:102180006F937F938F939F93AF93BF93EF93FF933F -:102190008091B900887F803609F44AC0F0F5883212 -:1021A00009F4A7C018F5803109F49BC0B8F488235E -:1021B00009F4F9C0883009F494C0FF91EF91BF9100 -:1021C000AF919F918F917F916F915F914F913F91CF -:1021D0002F910F900FBE0F901F901895883109F422 -:1021E00088C0803251F780938F0314C0803409F483 -:1021F0009DC040F48033B9F38833F9F680938F03A0 -:1022000085ECB0C0803509F485C0883509F496C0E6 -:10221000883499F60E947F0AD0CF883909F48CC09F -:1022200038F5883729F050F4883611F0803729F6D0 -:1022300083E08093910310921B0357C0883809F400 -:102240007BC0803919F0803809F0B7CF80911B032B -:10225000803208F071C0E0911B0381E08E0F809303 -:102260001B038091BB00F0E0E550FD4F80833DC033 -:10227000803B39F0E0F4803A09F479C0883A09F0FB -:102280009CCF84E0809391031092F8021092F702A1 -:10229000E091F502F091F60209958091F702811123 -:1022A0000FC081E08093F7021092D50209C0803CF4 -:1022B00009F4A6CF883C09F4A3CF883B09F07DCF71 -:1022C000E091F80281E08E0F8093F802F0E0EB528B -:1022D000FD4F80818093BB009091F8028091F702BE -:1022E00029C080916C038093BB0085EC8093BC0077 -:1022F00064CF90918E0380918D03981758F5E091EB -:102300008E0381E08E0F80938E03F0E0E359FC4F43 -:102310008081E9CFE0918E0381E08E0F80938E0360 -:102320008091BB00F0E0E359FC4F808390918E03D5 -:1023300080918D039817C8F285E8D8CFE0918E037D -:1023400081E08E0F80938E038091BB00F0E0E35913 -:10235000FC4F80838091900381115CCF81E080935A -:102360006B0384EA8093BC001092910326CF85EC26 -:102370008093BC001092910380911B03803230F453 -:10238000E0911B03F0E0E550FD4F108260911B03CC -:1023900070E0E091F902F091FA028BEF92E009957A -:1023A00010921B030ACF10928F0334CF1F920F920B -:1023B0000FB60F9211242F933F934F935F936F9318 -:1023C0007F938F939F93AF93BF93CF93DF93EF93BD -:1023D000FF938091B102C0914805D0E087FF24C0EF -:1023E00010928500109284008091B1028F5F8093DB -:1023F000B1028091B102082E000C990B8C179D0739 -:1024000024F48091B1028C30C4F1809184009091C9 -:102410008500049680349C4908F47AC08091840039 -:1024200090918500049676C08091B102082E000C30 -:10243000990B8C179D07C4F6E091B1028E2FEE0F19 -:10244000990BFC01EE0FFF1FE80FF91FEC5DFA4F2F -:10245000808186FFC9CFE091B1028E2FEE0F990BDC -:10246000FC01EE0FFF1FE80FF91FEC5DFA4F8081B2 -:1024700060E08F730E945D01B7CF2091840030919E -:102480008500E091B1028E2FEE0F990BFC01EE0F4B -:10249000FF1FE80FF91FEC5DFA4F81819281820FD7 -:1024A000931F9093890080938800E091B1028E2F52 -:1024B000EE0F990BFC01EE0FFF1FE80FF91FEC5D0B -:1024C000FA4F808186FF11C0E091B1028E2FEE0F8E -:1024D000990BFC01EE0FFF1FE80FF91FEC5DFA4F9F -:1024E000808161E08F730E945D01FF91EF91DF9128 -:1024F000CF91BF91AF919F918F917F916F915F919C -:102500004F913F912F910F900FBE0F901F901895F4 -:1025100080E49CE990938900809388008FEF8093FA -:10252000B102E3CF1092BE031092BD0348EE53E018 -:1025300060E070E04093BF035093C0036093C10319 -:102540007093C2038DE091E09093BC038093BB0332 -:1025500085EC90E09093C8038093C70384EC90E0EF -:102560009093CA038093C90380EC90E09093CC03CE -:102570008093CB0381EC90E09093CE038093CD03C6 -:1025800082EC90E09093D0038093CF0386EC90E0B0 -:102590009093D2038093D1031092D4031092D50369 -:1025A0001092D6031092D70388E594E01092990414 -:1025B0001092980490939C0480939B0420E430E054 -:1025C00030939E0420939D0410929F041092A004C7 -:1025D0001092A2041092A1041092A3041092A504D8 -:1025E0001092A4041092A7041092A6041092A904B9 -:1025F0001092A8041092AB041092AA041092AD0499 -:102600001092AC041092AF041092AE041092B10478 -:102610001092B0041092B7041092B6041092B9044C -:102620001092B8041092BB041092BA041092BD0428 -:102630001092BC041092CB041092CA0410929A0417 -:102640001092D8041092DA041092D904109217054F -:1026500027E830E03093BF042093BE0421E930E046 -:102660003093C1042093C0042BE930E03093C304BD -:102670002093C20425EA30E03093C5042093C404BB -:102680002FEA30E03093C7042093C60429EB30E0F2 -:102690003093C9042093C80423EC30E03093CD0478 -:1026A0002093CC0424EC30E03093CF042093CE046C -:1026B00026E235E03093D1042093D0049093B30404 -:1026C0008093B20422E532E03093D3042093D20405 -:1026D0009093B5048093B4048FEC90E09093D5046C -:1026E0008093D40410921B0510921A0540931C0588 -:1026F00050931D0560931E0570931F058FE191E0B7 -:102700009093190580931805E9E4F5E02FEF48EB65 -:102710005BE0809148058C30B8F491E0980F90937D -:102720004805808390E0DC01AA0FBB1FA80FB91FEA -:10273000AC5DBA4F12965C934E931197339685E039 -:10274000ED36F80731F708952083F8CF789484B5F3 -:10275000826084BD84B5816084BD85B5826085BD9D -:1027600085B5816085BD80916E00816080936E002B -:10277000109281008091810082608093810080911D -:1027800081008160809381008091800081608093CE -:1027900080008091B10084608093B1008091B0008E -:1027A00081608093B00080917A00846080937A0089 -:1027B00080917A00826080937A0080917A008160B3 -:1027C00080937A0080917A00806880937A001092DA -:1027D000C10085E18093D8048091D9049091DA04F6 -:1027E0000E948818C091D804D0E0CE0101960E94C2 -:1027F000EC179093DA048093D904FC01EC0FFD1FD1 -:10280000108212E0DC011C9325E011962C93AE019E -:102810004250510964E372E002960E94111984E665 -:1028200098E0909329038093280388EB97E0909396 -:102830002703809326038BE897E0909325038093EA -:10284000240389ED99E0909323038093220387EB7F -:102850009AE0909321038093200382E899E090937B -:102860001F0380931E0382EA9DE090932B038093C5 -:102870002A0386E19CE090932D0380932C03E09142 -:10288000CB03F091CC031083E091CB03F091CC0308 -:102890001082E091C703F091C8031082E091C90350 -:1028A000F091CA0380E180831092D303E091CF03BB -:1028B000F091D00386E08083E091CD03F091CE03C8 -:1028C000808180618083E091CD03F091CE0380818F -:1028D00088608083E091CD03F091CE038081806891 -:1028E0008083E091CD03F091CE0380818F7D808342 -:1028F0008091170581114FC061E08DE00E94A90110 -:1029000062ED70E080E090E00E941F0261E08DE0E7 -:102910000E945D0168E270E080E090E00E941F028A -:1029200060E08DE00E945D0162ED70E080E090E08B -:102930000E941F0261E08DE00E945D0168E270E08C -:1029400080E090E00E941F0260E08DE00E945D0147 -:102950006AEF70E080E090E00E941F02C5E062ED47 -:1029600070E080E090E00E941F0261E08DE00E9434 -:102970005D0168E270E080E090E00E941F0260E08C -:102980008DE00E945D01C15051F76DE770E080E07D -:1029900090E00E941F028BEB93E09093D70480930A -:1029A000D604909399048093980488E994E00E9457 -:1029B000D70088E594E00E94B2040E94160C25E03E -:1029C000D22EC0E0D0E0CC24C39402E010E0EE248C -:1029D000E394F12C80913103882349F069B180910F -:1029E0002E0368236C7F40E080E00E94970980916D -:1029F0003203882379F063B186B16F73B0E48B9FA3 -:102A0000C0011124682B80912F03682340E081E0EE -:102A10000E94970980913303882359F066B1809111 -:102A200030038F7066956695682340E082E00E94CF -:102A300097098091D6049091D704DC01ED91FC9127 -:102A40000084F185E02D0995892B09F4CEC1809190 -:102A5000D6049091D704DC01ED91FC910284F385BA -:102A6000E02D09959C018F3F980719F3982F8091CD -:102A7000A304882309F492C0973F09F07EC0109206 -:102A8000A304A0919B04B0919C046C916137C1F1A7 -:102A9000693709F05CC0E091D004F091D10430971F -:102AA00041F28091A4049091A5048330910560F4D3 -:102AB00030E020E050E040E070E060E08091B2045F -:102AC0009091B3040995B5CFBD016D5F7F4F03971A -:102AD0000E943E01BC016D5F7F4F80E00E940E01AD -:102AE000E0919B04F0919C049F012D5F3F4F428138 -:102AF00050E0618170E0E091D004F091D104DECF2C -:102B00008091CC049091CD04892B09F492CFBD0122 -:102B10006F5F7F4F8091A4049091A50401970E945C -:102B20003E01BC016F5F7F4F80E00E940E0160910B -:102B30009B0470919C046F5F7F4FE091CC04F091F7 -:102B4000CD048091B8049091B904099572CFE091B9 -:102B5000CE04F091CF04309709F46BCF9D012F5F25 -:102B60003F4F4091A4045091A504415051098091D8 -:102B7000BA049091BB0409955CCF6091A404709154 -:102B8000A504822F0E940E018091A4049091A504B7 -:102B900001969093A5048093A4044BCF6091A10467 -:102BA0007091A2046115710509F4B1C027FDAFC091 -:102BB000615071097093A2046093A104822F0E9456 -:102BC0000E018091A1049091A204892B09F031CFCC -:102BD00080919F04882309F42CCF803D09F483C0A1 -:102BE00040F4803949F1803C09F469C010929F0497 -:102BF00020CF843FE1F1853F09F44DC0803EB1F71D -:102C0000E091BE04F091BF04309781F3A0919B0442 -:102C1000B0919C044C9120E8429FC0011124119670 -:102C20004C91480F592F511D6091A0048091A6042A -:102C30009091A7040995DACFE091C004F091C10406 -:102C40003097A1F2A0919B04B0919C044C9120E894 -:102C5000429FC001112411964C91480F592F511DCC -:102C60006091A0048091A8049091A904E3CFE09121 -:102C7000C604F091C704309709F4B8CFA0919B0423 -:102C8000B0919C044C9150E011966C918091AE04EF -:102C90009091AF04CFCFE091C804F091C904309770 -:102CA00009F4A4CFA0919B04B0919C044C9150E0F6 -:102CB00011966C918091B0049091B104BBCFE091DA -:102CC000C204F091C304309709F490CFA0919B0403 -:102CD000B0919C044C9150E06091A0048091AA04B2 -:102CE0009091AB04A7CFE091C404F091C504309754 -:102CF00009F47CCFA0919B04B0919C044C9150E0CE -:102D00006091A0048091AC049091AD0493CF903F6A -:102D100030F4822F8F708093A004922F907F903F89 -:102D2000F1F190F4903CB1F150F4903909F081CE7A -:102D30001093A2040093A10490939F047ACE903D37 -:102D400049F1903EA9F375CE993F09F442C028F4A9 -:102D50008CE0890F823060F36CCE9F3F09F069CE22 -:102D60001092A2041092A10410929F041092A00449 -:102D700090E080E020919D0430919E04821793079B -:102D8000A8F4E0919B04F0919C04E80FF91F1082D5 -:102D90000196F0CFF092A204E092A104CDCFC092B0 -:102DA000A3041092A5041092A40443CE1092A3048D -:102DB0001092A5041092A404E091D404F091D504DB -:102DC0008091BC049091BD04309709F432CE0995EE -:102DD00030CEE091D204F091D304309709F429CE9B -:102DE0008091B4049091B504F2CF8FB7F89480909D -:102DF000630390906403A0906503B09066038FBF57 -:102E000080915E0390915F03A0916003B091610394 -:102E1000409101015091020170E060E0881A990A26 -:102E2000AA0ABB0A481559056A057B0508F054C073 -:102E3000840F951FA61FB71F80935E0390935F03B7 -:102E4000A0936003B093610388E5882E84E0982EF8 -:102E500092EFB92E85E08B15C8F0F401ED57FF4FC6 -:102E60008081823099F480915C0390915D030B2CFA -:102E700002C0959587950A94E2F780FF07C08B2DD5 -:102E80000E94E501BC018B2D0E940504B394AFEFB5 -:102E90008A1A9A0AB6E0BB12DDCF8091000187FD45 -:102EA0001BC0B12C2B2D30E080910001082E000CAE -:102EB000990B8217930784F0D29EF001D39EF00DF8 -:102EC0001124EC5CFC4F61817281248143818081FB -:102ED0000E94600CB394E6CF209709F47BCD0E944A -:102EE000C302882309F476CD0E94000073CD052E1D -:102EF00097FB1EF400940E948E1757FD07D00E9486 -:102F0000A91707FC03D04EF40C948E1750954095EA -:102F1000309521953F4F4F4F5F4F08959095809585 -:102F2000709561957F4F8F4F9F4F08950E94CB17EB -:102F3000A59F900DB49F900DA49F800D911D11240D -:102F40000895B7FF0C9496170E949617821B930B57 -:102F50000895A1E21A2EAA1BBB1BFD010DC0AA1FDA -:102F6000BB1FEE1FFF1FA217B307E407F50720F0F2 -:102F7000A21BB30BE40BF50B661F771F881F991F6D -:102F80001A9469F760957095809590959B01AC01B6 -:102F9000BD01CF010895A29FB001B39FC001A39FBF -:102FA000700D811D1124911DB29F700D811D112482 -:102FB000911D0895991B79E004C0991F961708F098 -:102FC000961B881F7A95C9F780950895EE0FFF1F0D -:102FD0000590F491E02D09940F931F93CF93DF9305 -:102FE0008230910510F482E090E0E0916F05F0915D -:102FF000700530E020E0B0E0A0E0309799F42115B2 -:10300000310509F44AC0281B390B24303105D8F5A5 -:103010008A819B816115710589F1FB01938382830C -:10302000FE0111C040815181028113814817590767 -:10303000E0F04817590799F4109761F012960C9335 -:10304000129713961C933296CF01DF91CF911F9167 -:103050000F91089500936F0510937005F4CF21151B -:10306000310551F04217530738F0A901DB019A01ED -:10307000BD01DF01F801C1CFEF01F9CF90937005D9 -:1030800080936F05CDCFFE01E20FF31F81939193E3 -:103090002250310939832883D7CF20916D05309193 -:1030A0006E05232B41F420910501309106013093E8 -:1030B0006E0520936D0520910301309104012115C7 -:1030C000310541F42DB73EB74091070150910801F9 -:1030D000241B350BE0916D05F0916E05E217F307A7 -:1030E000A0F42E1B3F0B2817390778F0AC014E5F78 -:1030F0005F4F2417350748F04E0F5F1F50936E0542 -:1031000040936D05819391939FCFF0E0E0E09CCFD9 -:10311000CF93DF930097E9F0FC013297138212827C -:10312000A0916F05B0917005ED0130E020E010979F -:10313000A1F420813181820F931F20916D05309180 -:103140006E052817390709F061C0F0936E05E0930A -:103150006D05DF91CF910895EA01CE17DF07E8F5FD -:103160004A815B819E0141155105B1F7E901FB835D -:10317000EA8349915991C40FD51FEC17FD0761F4FB -:10318000808191810296840F951FE901998388833C -:10319000828193819B838A83F0E0E0E012968D9197 -:1031A0009C9113970097B9F52D913C911197CD0102 -:1031B0000296820F931F20916D0530916E0528179E -:1031C000390739F6309751F51092700510926F0556 -:1031D000B0936E05A0936D05BCCFD383C2834081AD -:1031E0005181840F951FC817D90761F44E5F5F4F57 -:1031F00088819981480F591F518340838A819B811F -:10320000938382832115310509F0B0CFF0937005C7 -:10321000E0936F059ECFFD01DC01C0CF13821282C7 -:10322000D7CFFB01DC014150504048F001900D9296 -:103230000020C9F701C01D9241505040E0F70895A9 -:04324000F894FFCF30 -:10324400FF130000007105800000000000F902591E -:103254000286024603B7029502A90200000000DAC2 -:1032640006AD0609078306A606930684064D617813 -:1032740020736572766F732061747461636865642A -:1032840000556E6B6E6F776E2070696E206D6F6483 -:1032940065004932433A20546F6F206D616E792086 -:1032A4006279746573207265636569766564004943 -:1032B40032433A20546F6F206665772062797465D3 -:1032C400732072656365697665640031302D6269C7 -:1032D400742061646472657373696E67206E6F74C1 -:1032E40020737570706F7274656400746F6F206DF5 -:1032F400616E792071756572696573002F707269EA -:10330400766174652F7661722F666F6C6465727373 -:103314002F735F2F5F627763796C6E6A355F675FC7 -:10332400796B31706B353336687A397730303030B9 -:10333400676E2F542F2E61726475696E6F49444510 -:103344002D756E73617665643230323431313139C2 -:103354002D35343339392D636D713133722E363452 -:103364006B77752F5374616E646172644669726D14 -:103374006174612F5374616E646172644669726D25 -:083384006174612E696E6F0097 -:00000001FF diff --git a/apps/electron-app/hex/yun/StandardFirmata.cpp.hex b/apps/electron-app/hex/yun/StandardFirmata.cpp.hex deleted file mode 100644 index 5cff9770..00000000 --- a/apps/electron-app/hex/yun/StandardFirmata.cpp.hex +++ /dev/null @@ -1,1065 +0,0 @@ -:100000000C94D9000C9401010C9401010C94010191 -:100010000C9401010C9401010C9401010C94010158 -:100020000C9401010C94A4160C94AB130C941A14A8 -:100030000C9401010C9401010C9401010C94010138 -:100040000C9401010C94CD170C9401010C94010146 -:100050000C9401010C9401010C9401010C946113A6 -:100060000C9401010C9472160C944C160C94010122 -:100070000C9401010C9401010C9401010C940101F8 -:100080000C9401010C9401010C9401010C940101E8 -:100090000C94AE160C9401010C9401010C94010116 -:1000A0000C9401010C9401010C940101080B000255 -:1000B0000202000009040000010202000005240001 -:1000C0001001052401010104240206052406000193 -:1000D0000705810310004009040100020A00000026 -:1000E00007050202400000070583024000000403E8 -:1000F000090412010002EF02014041234180000186 -:100100000102030141726475696E6F204C4C43001B -:1001100041726475696E6F2059756E00070605049B -:100120000100080A0B0C0D09000000002400270044 -:100130002A002D00300000000000250028002B00C0 -:100140002E003100000000002300260029002C00B2 -:100150002F00040404040403040502020202040341 -:100160000202020206060606060604040202020451 -:1001700004040802011040804010204080408008A4 -:100180000204018040201002011080102040402015 -:100190000000000200090F0000030401000C000031 -:1001A000000000000000000000000000000000004F -:1001B000BC1811241FBECFEFDAE0DEBFCDBF12E0C6 -:1001C000A0E0B1E0E0E1F1E402C005900D92AE36AE -:1001D000B107D9F726E0AEE6B2E001C01D92A83221 -:1001E000B207E1F710E0C9EDD0E004C02197FE01AD -:1001F0000E944C1FC83DD107C9F70E94E8190C9412 -:1002000086200C940000862FE0916103F091620338 -:10021000309711F0BA0109940895862FE0915F0399 -:10022000F0916003309711F0BA0109940895862F78 -:10023000E0915D03F0915E03309711F0BA010994EB -:100240000895862FE0915B03F0915C03309711F0E5 -:10025000BA0109940895862FE0915903F0915A0349 -:10026000309711F0BA0109940895862FE091570351 -:10027000F0915803309711F0BA0109940895089548 -:10028000862F642FE0916303F0916403309711F09F -:10029000A90109940895E0916503F09166033097F0 -:1002A00009F009940895CF93DF93FC01A081B181F7 -:1002B000109701F1EC01ED91FC9111970190F08103 -:1002C000E02D69EFCD01099588819981DC01ED91DF -:1002D000FC910190F081E02D62E00995888199817F -:1002E000DC01ED91FC910190F081E02D65E0DF9162 -:1002F000CF910994DF91CF910895A0916F05B091AE -:100300007005ED91FC9111970190F081E02D682F1F -:10031000CD0109941F93CF93DF93182FEB018091A8 -:100320003605909137056817790760F48091340598 -:1003300090913505C80FD91F188380E0DF91CF91C8 -:100340001F910895E0916305F0916405309711F4D1 -:1003500081E0F4CF81E08093330580914F05909147 -:10036000500509958091360590913705C817D90732 -:1003700078F7DCCFCF93DF93EC01FB0130E020E096 -:10038000C901880F991F8C179D0778F44081DB0104 -:100390004D93BD0111979181979599279795942B2E -:1003A0009C932F5F3F4F3296EBCFC901DF91CF91E6 -:1003B0000895FC018091B303882311F13FB7F894AD -:1003C00082E08093E9002091F200822F90E01816DD -:1003D000190614F481E090E0882339F0289844E667 -:1003E0004093B2034091F1004083222339F02091E1 -:1003F000F200211103C02BE62093E8003FBF0895CF -:100400008FEF9FEF08952FB7F89483E08093E90072 -:100410009091E800892F807295FF04C09091F200BE -:1004200080E4891B2FBF08958091AA0381110DC01C -:1004300082E08093A60384E08093A7031092A9032F -:100440001092A80381E08093AA0386EA93E00895BE -:1004500081508F3008F047C0E82FF0E0EE5CFD4F90 -:100460000C944C1F4F025302410247024B0273028D -:100470007302730256025C02600264026A02730233 -:100480006E02809180008F77809380000895809124 -:1004900080008F7DF9CF80918000877FF5CF84B574 -:1004A0008F7784BD089584B58F7DFBCF80919000B8 -:1004B0008F77809390000895809190008F7DF9CF81 -:1004C00080919000877FF5CF8091C0008F778093D7 -:1004D000C00008958091C0008F7DF9CF8091C20047 -:1004E000877F8093C2000895CF93DF93282F30E059 -:1004F000F901E057FE4F8491F901EF58FE4FD49176 -:10050000F901EE5AFE4FC491CC23A1F081110E9453 -:100510002802EC2FF0E0EE0FFF1FEC5BFE4FA591E1 -:10052000B491EC91ED2381E090E009F480E0DF915B -:10053000CF91089580E090E0FACF1F93CF93DF939F -:10054000282F30E0F901E057FE4F8491F901EF5870 -:10055000FE4FD491F901EE5AFE4FC491CC23A9F07D -:10056000162F81110E942802EC2FF0E0EE0FFF1FE2 -:10057000EA5CFE4FA591B4918FB7F894EC911111FC -:1005800008C0D095DE23DC938FBFDF91CF911F9100 -:100590000895DE2BF8CFCF93DF9390E0FC01EF5866 -:1005A000FE4F24918E5A9E4FFC0184918823C9F0FE -:1005B00090E0880F991FFC01E85DFE4FA591B49172 -:1005C000FC01EA5CFE4FC591D49161110DC09FB74B -:1005D000F8948C91209582238C93888128232883FA -:1005E0009FBFDF91CF910895623051F49FB7F89487 -:1005F0003C91822F809583238C93E8812E2BEFCF23 -:100600008FB7F894EC912E2B2C938FBFEACF8231C9 -:1006100008F08251E82FF0E0E45EFE4FE491909103 -:100620007B008E2F880F880F80729F7D892B80938F -:100630007B00E770E064E0937C0080917A00806446 -:1006400080937A0080917A0086FDFCCF80917800BB -:100650009091790008953FB7F8948091A20390910A -:10066000A303A091A403B091A50326B5A89B05C040 -:100670002F3F19F00196A11DB11D3FBFBA2FA92F21 -:10068000982F8827BC01CD01620F711D811D911D1E -:1006900042E0660F771F881F991F4A95D1F708958A -:1006A0008F929F92AF92BF92CF92DF92EF92FF9282 -:1006B0006B017C010E942B034B015C01C114D1042E -:1006C000E104F104B9F00E942B03681979098A0941 -:1006D0009B09683E73408105910580F321E0C21AB1 -:1006E000D108E108F10888EE880E83E0981EA11C6D -:1006F000B11CE4CFFF90EF90DF90CF90BF90AF9010 -:100700009F908F900895009721F0805C9F4F0C94EC -:1007100053010895409151035091520320914F038A -:100720003091500342175307B4F49091E80095704C -:10073000E1F39091E80092FD19C08093F10080915F -:1007400051039091520301968F739927892B19F4C5 -:100750008EEF8093E80080915103909152030196AF -:10076000909352038093510381E0089580E00895AF -:10077000DF92EF92FF920F931F93CF93DF93D82EC8 -:100780008A01EB017B01E40EF51ECE15DF0559F061 -:10079000D7FE12C0FE0184910E948A032196811126 -:1007A000F4CF0FEF1FEFC801DF91CF911F910F9191 -:1007B000FF90EF90DF9008958881EECF0F931F9305 -:1007C000CF93DF931F92CDB7DEB782E0898342E4F7 -:1007D00050E06CEA70E080E80E94B8030E941402C6 -:1007E000DC0112960D911C910115110589F0D801BB -:1007F000ED91FC910280F381E02DBE016F5F7F4F90 -:10080000C801099597FD04C0F80100851185ECCF5A -:1008100089810F90DF91CF911F910F9108956150C1 -:1008200030F02091F100FC0120830196F8CF289848 -:1008300084E68093B2030895AF92BF92CF92DF9285 -:10084000EF92FF920F931F93CF93DF936C017B0185 -:100850008B01040F151FEB015E01AE18BF08C01716 -:10086000D10759F06991D601ED91FC910190F08189 -:10087000E02DC6010995892B79F7C501DF91CF914C -:100880001F910F91FF90EF90DF90CF90BF90AF90AE -:100890000895FC01538D448D252F30E0842F90E086 -:1008A000821B930B541710F0CF960895019708956B -:1008B000FC01918D828D981761F0A28DAE0FBF2F34 -:1008C000B11D5D968C91928D9F5F9F73928F90E08A -:1008D00008958FEF9FEF0895FC01918D828D9817F9 -:1008E00031F0828DE80FF11D858D90E008958FEF36 -:1008F0009FEF0895FC01918D228D892F90E0805CFF -:100900009F4F821B91098F739927089584E094E08B -:100910000E947A0421E0892B09F420E0822F0895B7 -:1009200080E090E0892B29F00E94860481110C94CC -:1009300000000895FC01A48DA80FB92FB11DA35A82 -:10094000BF4F2C91848D90E001968F739927848FEF -:10095000A689B7892C93A089B1898C9182748C93D4 -:10096000938D848D981306C00288F389E02D8081D1 -:100970008F7D80830895EF92FF920F931F93CF9303 -:10098000DF93EC0181E0888F9B8D8C8D981319C0CB -:10099000E889F989808185FF14C09FB7F894EE89B2 -:1009A000FF896083E889F9898081827480839FBF91 -:1009B00081E090E0DF91CF911F910F91FF90EF9038 -:1009C0000895F62E0B8D10E00F5F1F4F0F73112748 -:1009D000E02E8C8D8E110CC00FB607FCFACFE88983 -:1009E000F989808185FFF5CFCE010E949A04F1CF6D -:1009F000EB8DEC0FFD2FF11DE35AFF4FF0829FB7F7 -:100A0000F8940B8FEA89FB8980818062CFCFCF93E6 -:100A1000DF93EC01888D8823B9F0AA89BB89E88926 -:100A2000F9898C9185FD03C0808186FD0DC00FB6CC -:100A300007FCF7CF8C9185FFF2CF808185FFEDCF4A -:100A4000CE010E949A04E9CFDF91CF9108958F9251 -:100A50009F92AF92BF92CF92DF92EF92FF920F934D -:100A60001F93CF93DF936C017B018A0180910B016F -:100A7000882309F45CC08091B303882309F457C02C -:100A80008091550380FF05C08091E00082608093D3 -:100A9000E000E801B12C8AEFA82E93E0892E2AE32A -:100AA000922E209711F4BB20D9F10E9403028111EC -:100AB0000AC0AA94AA20D9F161E070E080E090E039 -:100AC0000E945003EECF8C171D0611F00CF08C2FF6 -:100AD0009FB7F8948092E9002091E80025FD02C0BC -:100AE0009FBFDFCF282F30E0C21BD30BF70181500F -:100AF00020F041914093F100FACFE20EF31EBB20AB -:100B000021F09092E800B12CEBCF8091E80085FDB8 -:100B1000E7CF9092E800BB24B394209709F3F3CF7A -:100B20005D9884E680935403101611063CF081E032 -:100B300090E0F6019383828310E000E0C801DF912A -:100B4000CF911F910F91FF90EF90DF90CF90BF90CA -:100B5000AF909F908F900895CF93DF931F92CDB762 -:100B6000DEB76983DC01ED91FC910280F381E02D19 -:100B700041E050E0BE016F5F7F4F09950F90DF911C -:100B8000CF91089583E08093E9008091F20088235B -:100B900019F08AE38093E80008950E94030290E030 -:100BA0000895CF93DF931F92CDB7DEB7FC01848504 -:100BB000958597FD08C02FEF3FEF358724870F906D -:100BC000DF91CF910895CE0101960E94D90101973E -:100BD00019F4898190E0F3CF8FEF9FEFF0CF0F935F -:100BE0001F93CF93DF931F92CDB7DEB78C01FC012B -:100BF0008485958597FF0BC0CE0101960E94D9018F -:100C0000019771F4898190E0F80195878487F80154 -:100C1000848595850F90DF91CF911F910F91089555 -:100C20008FEF9FEFF1CFFC018485958597FD0BC079 -:100C30009FB7F89482E08093E9008091F2009FBF13 -:100C400090E0019608959FB7F89482E08093E900C0 -:100C50008091F2009FBF90E008955F926F927F9223 -:100C60008F929F92AF92BF92CF92DF92EF92FF92BC -:100C70000F931F93CF93DF935C016901DA015C90BE -:100C8000232B19F4CC24CA94DC2C8A013A01660E79 -:100C9000771ED0E0C0E0F12CE12C87E0882E912C6B -:100CA000F50180819181D8016C910C2E01C0660FF5 -:100CB0000A94EAF765296F77DC01ED91FC910190C8 -:100CC000F081E02D0995BFEFEB1AFB0AF801608176 -:100CD00070E0C4018C1B9D0B02C0759567958A95C9 -:100CE000E2F7562E2196C730D10558F1CE14DF0415 -:100CF00041F1D5018D919C91652D6F77DC01ED91CE -:100D0000FC910190F081E02D0995BFEFEB1AFB0AF1 -:100D1000551C5524551C2797E6CFEC14FD0408F408 -:100D2000BFCFDF91CF911F910F91FF90EF90DF9098 -:100D3000CF90BF90AF909F908F907F906F905F907B -:100D400008950F5F1F4F6016710639F7209749F31A -:100D5000EC14FD0430F7F5018081918161E070E0D1 -:100D600001C0660FCA95EAF761506521DC01ED917B -:100D7000FC910190F081E02DDF91CF911F910F91B7 -:100D8000FF90EF90DF90CF90BF90AF909F908F90AB -:100D90007F906F905F9009941F93CF93DF9300D063 -:100DA000CDB7DEB7182F7A83698380913105909192 -:100DB00032050097C9F0DC01ED91FC910190F081C2 -:100DC000E02D1031B8F461157044A0F4612F606E0D -:100DD000099522E030E0AE014F5F5F4F62E070E0C6 -:100DE00081E395E00E942D060F900F90DF91CF9147 -:100DF0001F91089560EF099580913105909132051A -:100E0000DC01ED91FC910190F081E02D6FE60995F8 -:100E10008091310590913205DC01ED91FC910190BA -:100E2000F081E02D612F099522E030E0AE014F5FA7 -:100E30005F4F62E070E081E395E00E942D068091B3 -:100E4000310590913205DC01ED91FC910190F0812A -:100E5000E02D67EF0995C8CFEF92FF920F931F9394 -:100E6000CF93DF93C82F8091310590913205009781 -:100E7000C9F17A018B01DC01ED91FC910190F081C7 -:100E8000E02D60EF09958091310590913205DC01EC -:100E9000ED91FC910190F081E02D6C2F0995E70117 -:100EA0000E0D1F1DC017D10759F030E020E0AE0134 -:100EB00061E070E081E395E00E942D062196F2CF7B -:100EC0008091310590913205DC01ED91FC9101900A -:100ED000F081E02D67EFDF91CF911F910F91FF908F -:100EE000EF900994DF91CF911F910F91FF90EF90B8 -:100EF0000895CF92DF92EF92FF920F931F93CF93BB -:100F0000DF93FC01E058FF4FE080EE2009F45CC065 -:100F1000EC01C05CDF4FA881B981109709F454C07F -:100F2000FC01EF57FF4FC080D180F6011181008195 -:100F3000ED91FC9111970190F081E02D60EFCD01D2 -:100F4000099588819981DC01ED91FC910190F081F6 -:100F5000E02D69E7099588819981DC01ED91FC918B -:100F60000190F081E02D602F099588819981DC0145 -:100F7000ED91FC910190F081E02D612F0995F12C0C -:100F800001E010E00F5F1F4FE016F10659F030E06E -:100F900020E0A601400F511F61E070E0CE010E94E9 -:100FA0002D06F0CF88819981DC01ED91FC910190B3 -:100FB000F081E02D67EFDF91CF911F910F91FF90AE -:100FC000EF90DF90CF900994DF91CF911F910F9117 -:100FD000FF90EF90DF90CF900895009711F00C9460 -:100FE0007907089520912803260F3327331F2132D4 -:100FF0003105ECF42091DA03FC0190E080E024302C -:1010000069F082E00895A09128032191AC014A5F24 -:101010005C4FA40FB52FB11D2C930196861798F342 -:1010200080912803680F6093280380E0089581E091 -:1010300008951092DA0381E08093D9031092B403EB -:1010400061E082E00E949D0261E083E00E949D02D7 -:10105000E9EBF0E080818E7F808380818D7F8083CB -:1010600088E48093B80085E48093BC000895CF9312 -:10107000DF9391E0909305038823B9F0C091B80005 -:10108000D091BA008091BC008A7B8093BC0060E064 -:1010900082E00E949D0260E083E00E949D020E9427 -:1010A0001908D093BA00C093B800DF91CF9108958A -:1010B0008F929F92AF92BF92CF92DF92EF92FF9268 -:1010C0000F931F93CF93DF93D0910304D13208F095 -:1010D000D7C0182FC09102040E942B036B017C0122 -:1010E0008091DA0381116BC082E08093DA03109360 -:1010F000D9038FEF8093D8031092D703D093D603F0 -:10110000A2EEB3E0E6EBF3E080E0D81391C01092DA -:10111000B5038091B503CC0FC82BC093B503809164 -:10112000B403813009F088C01092B4030E942B03ED -:101130006B017C018091B5038093BB008091DC033F -:101140009091DD03A091DE03B091DF03892B8A2B00 -:101150008B2BA1F00E942B030091DC031091DD0387 -:101160002091DE033091DF036C197D098E099F0900 -:10117000061717072807390708F442C08091BC00FA -:1011800083FDD8CF85EC8093BC000E942B036B01BC -:101190007C018091DA03823009F450C08091D80339 -:1011A0008F3F09F46FC08091D803803209F46CC07E -:1011B0008091D803803309F469C084E026C080910F -:1011C000DC039091DD03A091DE03B091DF03892B56 -:1011D0008A2B8B2B09F484CF0E942B038090DC0395 -:1011E0009090DD03A090DE03B090DF036C197D09C1 -:1011F0008E099F0986169706A806B90608F070CFD3 -:101200008091DB030E94370885E01092E103109281 -:1012100003041092E003DF91CF911F910F91FF9093 -:10122000EF90DF90CF90BF90AF909F908F900895F8 -:101230009D9191938F5F69CF85EEA5CF8091DC035F -:101240009091DD03A091DE03B091DF03892B8A2BFF -:101250008B2B09F49ECF0E942B030091DC0310918D -:10126000DD032091DE033091DF036C197D098E09C7 -:101270009F09061717072807390708F08ACFC0CF3C -:1012800081E0C3CF80E0C1CF82E0BFCF83E0BDCF9C -:10129000089508950895E091040380910303E817E9 -:1012A00030F4F0E0ED51FD4F808190E008958FEF34 -:1012B0009FEF089590910403809103032FEF3FEF78 -:1012C000981748F4E92FF0E0ED51FD4F208130E010 -:1012D0009F5F90930403C901089580910303909147 -:1012E0000403891B990B0895CF92DF92EF92FF922E -:1012F0000F931F93CF93DF937C01CB018A01209141 -:10130000E003222389F0EB016B01C40ED51ECC153E -:10131000DD0569F06991D701ED91FC910190F081B3 -:10132000E02DC7010995F3CF642F0E94F207C80191 -:10133000DF91CF911F910F91FF90EF90DF90CF90B1 -:101340000895CF93DF931F92CDB7DEB769832091C5 -:10135000E0032223F9F020910304203258F021E029 -:1013600030E0FC013383228390E080E00F90DF9136 -:10137000CF9108958091E103E82FF0E0EE51FC4F0A -:10138000998190838F5F8093E1038093030481E0D0 -:1013900090E0ECCF61E0CE0101960E94F207F7CF1A -:1013A00090E080E00895DF92EF92FF920F931F93F9 -:1013B000CF93DF93EC01D62E7A01890188818C309E -:1013C00008F067C061E08D2D0E94CB028881282F34 -:1013D00030E0F901EE0FFF1FE20FF31FE552FA4F65 -:1013E0009D2D9F736081607C692B608320E232E0D9 -:1013F0002E193F0937FF02C02D5F3F4F35952795C6 -:1014000035952795298320E639E0201B310B37FFDE -:1014100002C02D5F3F4F35952795359527952A8337 -:101420002CE0622F0E94401F829FB001112430E007 -:1014300020E0AB01420F531FFA01EE0FFF1FE40F34 -:10144000F51FE552FA4F908196FD16C02F5F3F4F72 -:101450002C30310571F781110FC01092800082E0AD -:10146000809381001092850010928400B19A80913F -:101470006F00826080936F00E8818E2F90E0FC0106 -:10148000EE0FFF1FE80FF91FE552FA4F80818064CD -:1014900080838881DF91CF911F910F91FF90EF9012 -:1014A000DF900895CF938C30B0F421E030E0082E27 -:1014B00002C0220F331F0A94E2F740919703509124 -:1014C0009803672B51F420953095242335233093CE -:1014D000980320939703CF910895242B352B3093B5 -:1014E0009803209397039091E1029111F4CFC82FB4 -:1014F0000E940703BC018C2FCF910C94CC064F9215 -:101500005F926F927F928F929F92AF92BF92CF9293 -:10151000DF92EF92FF920F931F93CF93DF9384306C -:1015200008F0A3C08F5FC82FCC0FCC0FCC0F4C2E70 -:10153000CF3110F05EE1452ED62F38EF532E5C0EE2 -:10154000852C912CC401880F991F9C012F503B4F73 -:101550005901052DD12CC12C10E07724739404156A -:10156000A8F5F601E80DF91DEC58FA4F908192307C -:10157000B8F48D2F872166246394811101C0612CFA -:101580007601EE0CFF1C913089F4172931EAE30E45 -:10159000F11CF501EE0DFF1D862D90E091838083F7 -:1015A000770C0F5F8FEFC81AD80AD9CF882371F351 -:1015B000F701EF55FF4FEA0DFB1D808191810197E7 -:1015C00029F362E0802F0E94CB02E0CF10FF05C01C -:1015D0006D2F6170852D0E949D0211FF06C06D2F39 -:1015E000627089EF8C0F0E949D0212FF06C06D2F62 -:1015F00064708AEF8C0F0E949D0213FF06C06D2F4E -:1016000068708BEF8C0F0E949D0214FF06C06D2F37 -:1016100060718CEF8C0F0E949D0215FF06C06D2F2C -:1016200060728DEF8C0F0E949D0216FF06C06D2F19 -:1016300060748EEF8C0F0E949D0217FF16C06D2FF5 -:1016400060788FEF8C0FDF91CF911F910F91FF90FA -:10165000EF90DF90CF90BF90AF909F908F907F9052 -:101660006F905F904F900C949D02DF91CF911F91EE -:101670000F91FF90EF90DF90CF90BF90AF909F9031 -:101680008F907F906F905F904F9008958F929F9270 -:10169000AF92BF92CF92DF92EF92FF920F931F9380 -:1016A000CF93DF93EB018E3108F094C0082F10E048 -:1016B000F801EC58FA4F9081933009F498C09430B7 -:1016C00009F088C0F801E254FD4FC080D12C7601AA -:1016D000EE0CFF1C4B01603282E078070CF03EC03C -:1016E000F701EC0DFD1DE050FA4F8181A8E88A2E2C -:1016F000912C881A910887FD9394880C991C880C6A -:10170000991C092C000CAA08BB08828128E532E04C -:10171000281B310987FD3395220F331F220F331FFA -:10172000032E000C440B550B281939094A095B0993 -:10173000DB01653B710514F0A4EBB0E0B7FF02C01C -:10174000B0E0A0E00E94071F24EB30E040E050E052 -:101750000E94DD1E820E931EA41EB51EF701EC0D25 -:10176000FD1DE050FA4F20812C3068F5318188E86A -:1017700090E0831B910937FD9395880F991F880F7F -:10178000991F881699067CF0328188E592E0831BC8 -:10179000910937FD9395880F991F880F991F881617 -:1017A00099060CF4C4010297880F991F4FB7F8945B -:1017B00030E0F901EE0FFF1FE20FF31FE552FA4F81 -:1017C000928381834FBF000F111FF801EE56FA4F2D -:1017D000D183C083DF91CF911F910F91FF90EF9044 -:1017E000DF90CF90BF90AF909F908F900895F82E8C -:1017F00083E0081759F08BEF800F823038F087EFC5 -:10180000800F833018F08DE00813DDCF61E08F2D5D -:101810000E94CB02209729F460E08F2D0E949D0248 -:10182000D2CFCF3FD10511F461E0F7CFF801E057F7 -:10183000FE4FE491E150EF3008F07CC0F0E0ED5D48 -:10184000F34F0C944C1F320C370C3C0C460C500CD4 -:101850009A0C9A0C9A0C5A0C640C6E0C780C850C31 -:101860009A0C8D0C84B5806884BDC7BDACCF84B59F -:10187000806284BDC8BDA7CF8091800080688093BE -:101880008000D0938900C09388009DCF8091800014 -:10189000806280938000D0938B00C0938A0093CFA6 -:1018A00080918000886080938000D0938D00C093E9 -:1018B0008C0089CF80919000806880939000D093B5 -:1018C0009900C09398007FCF8091900080628093B0 -:1018D0009000D0939B00C0939A0075CF80919000A8 -:1018E000886080939000D0939D00C0939C006BCF44 -:1018F0008091C00080688093C0008091C0008F7B81 -:101900008093C000C093CF005ECF8091C000806202 -:101910008093C000C093D00056CF8091C2008860F1 -:101920008093C2008091C2008B7F8093C200C093DD -:10193000D20049CFC038D1050CF076CF6DCF8E31B3 -:1019400080F4E82FF0E0DF01AC58BA4F9C91913061 -:1019500041F4EE0FFF1FEE56FA4F608371830C9433 -:101960009D020895FF920F931F93CF93DF9300D0B2 -:10197000CDB7DEB7082F10E0F801E959FC4F908190 -:10198000F62EF92204521D4F411104C0F801908136 -:101990009F1511F12F2D30E03A832983A091310555 -:1019A000B09132051097B1F0682F6F706069ED91BA -:1019B000FC9111970190F081E02DCD01099522E075 -:1019C00030E0AE014F5F5F4F62E070E081E395E091 -:1019D0000E942D06F801F0820F900F90DF91CF91B9 -:1019E0001F910F91FF9008950F931F93CF93DF9353 -:1019F000843008F069C0282F30E0F901E559FC4F28 -:101A00006083672B09F460C0082F29593C4FF90106 -:101A10001081D82FDD0FDD0FDD0FC12FC17010FF3A -:101A200007C08D2F0E947402C1E0892B09F4C0E029 -:101A300011FF07C081E08D0F0E947402892B09F00D -:101A4000C26012FF07C082E08D0F0E947402892BD2 -:101A500009F0C46013FF07C083E08D0F0E94740279 -:101A6000892B09F0C86014FF07C084E08D0F0E9425 -:101A70007402892B09F0C06115FF07C085E08D0F46 -:101A80000E947402892B09F0C062D831A1F016FFC0 -:101A900007C086E08D0F0E947402892B09F0C06494 -:101AA000D73149F017FF07C087E08D0F0E947402FD -:101AB000892B09F0C06841E06C2F802FDF91CF9116 -:101AC0001F910F910C94B20CDF91CF911F910F9148 -:101AD0000895A82FB0E0A254BD4F9C91292F30E06B -:101AE000F901EE0FFF1FE20FF31FE050FA4FE08104 -:101AF0002E2F30E0F901EE0FFF1FE20FF31FE5522A -:101B0000FA4F80818F7B80838091BC02981308C03C -:101B1000992319F091509093BC028FEF8C93089504 -:101B20008823D9F3E091BD02EF5FE093BD02F0E0BE -:101B3000E359FD4F9083F1CFFC0101900020E9F7BC -:101B40003197BF01681B790BAC0181E70C942C071E -:101B5000CF93DF93DB019091BC029C3078F53091FC -:101B6000BD02682F70E0FB01E254FD4F3323E1F02A -:101B7000C32FD0E0C359DD4F88818083315030932B -:101B8000BD02808123E0829FC001112480509A4FC2 -:101B90001A161B0674F4141615065CF49A01AD01AE -:101BA000DF91CF910C94D30990839F5F9093BC02F7 -:101BB000E8CF20E639E040E252E0F2CF82E591E062 -:101BC000DF91CF910C949C0D85ED8093BC008091AA -:101BD000DC039091DD03A091DE03B091DF03079653 -:101BE000A11DB11D23E0B695A795979587952A95D8 -:101BF000D1F72091BC0024FD03C01092DA030895B0 -:101C00004091DC035091DD036091DE037091DF03AE -:101C1000452B462B472B69F30097A105B10541F0F1 -:101C20002AE22A95F1F700C00197A109B109E1CF95 -:101C30008091DB030C943708AF92BF92CF92DF9272 -:101C4000EF92FF920F931F93CF93DF93C82ED12C67 -:101C5000E601CF50DB4FFE01ED57FF4F90819F37DC -:101C600009F49BC07B01182F963069F48091E00243 -:101C7000882349F06630710509F437C11092E002FB -:101C80008FEF80930C011E3110F584E0E816F1040B -:101C9000F1F0F601E254FD4F80818C30C0F490E009 -:101CA000FC01EE0FFF1FE80FF91FE050FA4FE08133 -:101CB0008E2F90E0FC01EE0FFF1FE80FF91FE55299 -:101CC000FA4F808186FF03C0812F0E94690D0EEEBE -:101CD000010F0C3028F561E070E032E0E316F1040A -:101CE00011F070E060E0802F0E94520AE12FE6952B -:101CF000E695E695F0E0E959FC4F2081312F3770E9 -:101D000081E090E001C0880F3A95EAF7E114F10410 -:101D100021F03BE0E316F10419F5822B808302C029 -:101D20001E3120F35601AA0CBB1CF501EE56FA4FEA -:101D3000118210828CE0E816F10408F0C8C0F701A7 -:101D4000EC55F14F0C944C1FC10EED0EB30E040F69 -:101D5000250F670F5B0F670F670F670FCD0ED80E4C -:101D600080958223DBCF0C30C0F460E0812F0E948D -:101D7000CB02CD57DF4F88818F3779F082E088839F -:101D80000CC01E3150F460E0812F0E94CB02CD5771 -:101D9000DF4F88818F3709F01882DF91CF911F9133 -:101DA0000F91FF90EF90DF90CF90BF90AF9008958C -:101DB0001E3198F762E0812F0E94CB02CD57DF4F92 -:101DC00088818F3711F08BE08883F501EE56FA4F4A -:101DD00081E090E091838083E0CF1E31F0F6FE0138 -:101DE000ED57FF4F8081833021F460E0812F0E9406 -:101DF0009D0261E0812F0E94CB02CD57DF4F888189 -:101E00008F3759F281E0BBCF133059F08BEF810F40 -:101E1000823038F087EF810F833018F01D3009F0E1 -:101E2000BCCF61E0812F0E94CB0261E0812F0E9434 -:101E3000CB0260E0812F0E949D02CD57DF4F888149 -:101E40008F3709F4AACF83E09ACF1E3108F0A5CFCF -:101E5000CD57DF4F88818F3711F084E08883F601FA -:101E6000E254FD4F80818F3FA9F090E0FC01EE0F1E -:101E7000FF1FE80FF91FE050FA4FE0818E2F90E02E -:101E8000FC01EE0FFF1FE80FF91FE552FA4F8081AA -:101E900086FD83CF4FEF5FEF6FEF7FEF812FDF91F5 -:101EA000CF911F910F91FF90EF90DF90CF90BF9057 -:101EB000AF900C94A80D1250123008F06ECFCD5791 -:101EC000DF4F88818F3709F468CF86E058CF86E6E8 -:101ED00091E0DF91CF911F910F91FF90EF90DF90F4 -:101EE000CF90BF90AF900C949C0D1E3108F4D1CED2 -:101EF000EECE0F931F93CF93DF9381E08093E102A7 -:101F00008091E002882329F01092E0028FEF809305 -:101F10000C01EBE6F3E0C7E6D3E0ACEDB2E01192E2 -:101F200019921D9283E0EF36F807C9F70EEB12E025 -:101F3000C0E0DFEF8EEE8C0F62E070E08C3010F0CE -:101F400061E070E08C2F0E941C0EF801D1938F018C -:101F5000CF5FCE3179F710929803109297031092C9 -:101F6000BD021092BC021092E102DF91CF911F914D -:101F70000F9108954F925F926F927F928F929F92EE -:101F8000AF92BF92FF920F931F93CF93DF93F82EE0 -:101F90008B01D42FC22F6F3F760709F490C081E0E8 -:101FA0008093E003F09202041092E1031092030484 -:101FB0008FEC95E00E94A1098C2F0E945808809117 -:101FC000BA029091BB028230910538F0880F991FB8 -:101FD000880F991F05970197F1F70E942B034B017A -:101FE0005C018091DA0381116CC0CD2FD13208F0F1 -:101FF000C0E281E08093DA038093D9039FEF90934E -:10200000D8031092D7039C0F9093D6038093B50307 -:102010009091B5038F2D880F892B8093B503809104 -:10202000B403813009F0A1C01092B4030E942B03C5 -:102030004B015C018091B5038093BB008091DC0370 -:102040009091DD03A091DE03B091DF03892B8A2BF1 -:102050008B2BA1F00E942B034090DC035090DD03FA -:102060006090DE037090DF03681979098A099B0983 -:10207000461657066806790608F444C08091BC00ED -:1020800083FDD8CF85EC8093BC000E942B034B01CD -:102090005C018091DA03813009F469C08091D70333 -:1020A0008C1710F4C091D703E6EBF3E0A3EEB2E097 -:1020B00080E08C1761F191919D938F5FFACF00E0E2 -:1020C0008CCF8091DC039091DD03A091DE03B09171 -:1020D000DF03892B8A2B8B2B09F483CF0E942B03E0 -:1020E0004090DC035090DD036090DE037090DF03CE -:1020F000681979098A099B09461657066806790600 -:1021000008F06FCF8091DB030E943708C0E0109287 -:102110000403C09303032D2F30E08C2F90E0281789 -:1021200039070CF046C087E791E00E949C0DF092C1 -:102130007A0200937B020AE712E0AD2EB12CC801AF -:102140008A5792408A159B050CF041C00F5F1F4FC4 -:1021500090910303809104039817C9F18FEC95E0E7 -:102160000E945A09F8018183EACF85EE8CCF8091D5 -:10217000DC039091DD03A091DE03B091DF03892B96 -:102180008A2B8B2B09F485CF0E942B034090DC0314 -:102190005090DD036090DE037090DF0368197909C9 -:1021A0008A099B09461657066806790608F071CF1A -:1021B000A9CF821793070CF0BACF84E991E00E946F -:1021C0009C0DD091030380910403D81BB0CFDE5F38 -:1021D0006D2F70E04AE752E087E7DF91CF911F91C2 -:1021E0000F91FF90BF90AF909F908F907F906F90D6 -:1021F0005F904F900C942C07EF92FF920F931F93D8 -:10220000CF93DF938956823108F033C0EA01162F4D -:10221000E82FF0E0E25FFE4E0C944C1F5013391192 -:10222000B91239110F13391197123D1239113911A1 -:102230003911391139112011391101123911811255 -:10224000998195FF0AC080EB91E0DF91CF911F91BA -:102250000F91FF90EF900C949C0D888131E096FBDC -:10226000222720F9232798719830D1F148F4992337 -:10227000A9F0DF91CF911F910F91FF90EF900895FA -:10228000903109F44CC09831A1F720910C0112163D -:102290000CF472C08FEF80930C01EBCF3093E0030E -:1022A000809302041092E1031092030402E00117EC -:1022B00078F4FE01E00FF11D61816795662767954F -:1022C0008081680F8FEC95E00E94A1090E5FEFCF2F -:1022D00081E00E94580883E191E00197F1F7C9CFAE -:1022E0009A814B816630A1F430E8439FB0011124FC -:1022F000690F711D4D814795442747959C81490F72 -:10230000DF91CF911F910F91FF90EF900C94BA0F36 -:10231000479544274795490F6FEF7FEFF1CFE09145 -:102320000C01E7301CF080ED91E08FCF3A819B816A -:102330006630D9F460E8969FA0011124430F511D27 -:102340009D819795992797953C81930FEF5FE09337 -:102350000C0135E0E302F0011124E159FC4F8083C8 -:10236000528341839383248384CF979599279795AC -:10237000930F4FEF5FEFEACF90E0622F022E000C39 -:10238000770B35E0492F50E06417750764F0349FF0 -:10239000F001359FF00D1124E159FC4F40814817A1 -:1023A00019F09F5FEFCF90E085E0492F50E0641770 -:1023B00075071CF19830F8F4FA0131968E9FD00120 -:1023C0008F9FB00D1124A159BC4F3C91849FF00107 -:1023D000859FF00D1124E159FC4F308311964D91EA -:1023E0005C9112975283418313963C9113973383E8 -:1023F00014963C9134839F5FD8CF215020930C01D9 -:1024000038CF623078F0898160E8869F900111248E -:102410008881820F932F911D009721F09093BB022A -:102420008093BA028091E002811123CFC0E08EEF49 -:102430008C0F823028F466E070E08C2F0E941C0E16 -:10244000CF5FCE31A1F781E08093E00210920403C8 -:10245000109203031092E103109203040E941908E2 -:1024600088E499E0909327038093260389E499E018 -:1024700090932B0380932A03FCCE653008F4F9CEA9 -:1024800018811E3108F0F5CE0981EA80FB80CC81ED -:10249000E12FF0E0E254FD4F80818C30C0F490E0F9 -:1024A000FC01EE0FFF1FE80FF91FE050FA4FE0812B -:1024B0008E2F90E0FC01EE0FFF1FE80FF91FE55291 -:1024C000FA4F808186FF03C0812F0E94690D80E84A -:1024D000C89FA00111244F0D511D90E8E99EB00145 -:1024E0001124600F711D812F0E94A80D64E070E01F -:1024F000812FDF91CF911F910F91FF90EF900C945E -:102500001C0E623008F4B5CE8981E0E88E9F900100 -:1025100011248881820F932F911D009729F09093A9 -:102520000E0180930D01A5CE81E090E0F8CF6230DE -:1025300008F49FCE698170E0123091F08A81F0E852 -:102540008F9FC0011124682B792B133049F08B81A8 -:1025500090E090E4899F902D88271124682B792B97 -:102560008881DF91CF911F910F91FF90EF900C9494 -:10257000460B80EF0E947D018CE60E947D01C0E049 -:1025800080E00E947D0181E00E947D018BE00E943D -:102590007D0181E00E947D0181E00E947D0181E05A -:1025A0000E947D018EEE8C0F8C3088F482E00E94B8 -:1025B0007D018AE00E947D018BEF8C0F823048F014 -:1025C00087EF8C0F833028F0CD3049F402C0C33040 -:1025D00099F783E00E947D0188E00E947D0184E0FC -:1025E0000E947D018EE00E947D018EEF8C0F823073 -:1025F00030F486E00E947D0181E00E947D018FE73A -:102600000E947D01CF5FCE3109F0BACF87EFDF9115 -:10261000CF911F910F91FF90EF900C947D01662355 -:1026200009F427CEC88180EF0E947D018EE60E94CA -:102630007D018C2F0E947D01CE3140F7D0E0FE015C -:10264000EC58FA4F80810E947D01CC0FDD1F8E0176 -:102650000E561A4FF80180818F770E947D01F80194 -:10266000808191819C012078232B39F0880F892F5C -:10267000881F990B8F770E947D01CE56DA4F888193 -:1026800099819C012227307C232B09F4BFCF990F1D -:10269000880B990F982F881F8F770E947D01B6CFE6 -:1026A00080EF0E947D018AE60E947D01CEEE8FE7D9 -:1026B000CC3008F48C2F0E947D01CF5FCC30B9F76D -:1026C000A5CF1F920F920FB60F9211242F933F9315 -:1026D0008F939F93AF93BF9380919E0390919F039D -:1026E000A091A003B091A10330919D0323E0230F9B -:1026F0002D3758F50196A11DB11D20939D038093A0 -:102700009E0390939F03A093A003B093A103809195 -:10271000A2039091A303A091A403B091A5030196F5 -:10272000A11DB11D8093A2039093A303A093A403C2 -:10273000B093A503BF91AF919F918F913F912F913E -:102740000F900FBE0F901F90189526E8230F02964A -:10275000A11DB11DD2CF1F920F920FB60F9211245F -:102760008F939F938091E1009091E100937F9093EC -:10277000E10083FF0FC01092E90091E09093EB001D -:102780001092EC0092E39093ED001092B30398E066 -:102790009093F00082FF22C093E09093E900909123 -:1027A000F200992319F09AE39093E8009091540372 -:1027B000992341F0909154039150909354039111B7 -:1027C00001C05D9A9091B203992341F09091B203B8 -:1027D00091509093B203911101C0289A84FF18C0C0 -:1027E0008091E2008E7E81608093E2008091E10022 -:1027F0008F7E8093E100809155038E7E806180936F -:1028000055039F918F910F900FBE0F901F901895B9 -:1028100080FFF7CF8091E2008E7E80618093E2009E -:102820008091E1008E7E8093E100809155038E7E41 -:102830008160E5CF1F920F920FB60F921124CF92B5 -:10284000DF92EF92FF920F931F932F933F934F933B -:102850005F936F937F938F939F93AF93BF93EF9308 -:10286000FF93CF93DF93CDB7DEB76C97DEBFCDBFBD -:102870001092E9008091E80083FF25C068E0CE0156 -:1028800045960E940F0482EF8093E8008D8987FFB0 -:1028900039C09091E80090FFFCCF982F907609F016 -:1028A00034C19E894F89588D2F89F88C911131C080 -:1028B000803861F5809156038093F1001092F10009 -:1028C0008EEF8093E8006C960FB6F894DEBF0FBED3 -:1028D000CDBFDF91CF91FF91EF91BF91AF919F91CC -:1028E0008F917F916F915F914F913F912F911F91A8 -:1028F0000F91FF90EF90DF90CF900F900FBE0F9051 -:102900001F9018959EEF9093E800C7CF1092F100AA -:10291000D5CF913059F48111D3CF4130510581F693 -:10292000809156038D7F80935603CACF933049F42C -:102930008111C6CF4130510519F68091560382604E -:10294000F2CF953041F48091E80080FFFCCF206801 -:102950002093E300B5CF963009F0A9C00B8D1C8DF4 -:1029600022E01092E9001092520310925103F212E9 -:102970002EC01092500310924F030E94DE031F825C -:1029800099E09983FA8291E09E8390EA98879AEF82 -:1029900099872091510330915203275F3F4F3C8329 -:1029A0002B838D831092E9001092520310925103F1 -:1029B0001093500300934F0349E050E0BE016F5F56 -:1029C0007F4F80E00E94B8030E94DE0379CF10930E -:1029D000500300934F030E941402DC0112960D91E4 -:1029E0001C910115110509F451C1D801ED91FC911B -:1029F0000480F581E02DBE016B5E7F4FC801099513 -:102A0000009709F03EC1F80100851185EACFF3E097 -:102A1000FF120EC08F89882309F440C0823061F410 -:102A200040E86BE080E191E00E948918811148CF75 -:102A300081E28093EB0047CF813029F440E86BE0DE -:102A400084E091E0F1CF833099F70E941402DC0119 -:102A50001296ED90FC908E010F5F1F4F6801E114FC -:102A6000F10479F0D701ED91FC910680F781E02D1A -:102A7000B801C7010995080F111DF701E084F18421 -:102A8000EECFD8011C92F60101900020E9F73197B2 -:102A9000BF016C197D0940E0C601C6CF6EEE70E043 -:102AA000FB01449150E080E80E94B80309CF9730C1 -:102AB00009F4BECF983021F481E08093F10000CF7B -:102AC000993009F0FDCE837009F0B2CFE6E1F1E074 -:102AD00081E031E096E32191222371F08093E900B7 -:102AE0003093EB00DF0111972C912093EC00909331 -:102AF000ED008F5F873079F78EE78093EA001092C0 -:102B0000EA008F898093B303DBCE8B8D9C8D10926E -:102B1000E900109252031092510390935003809356 -:102B20004F03898D811192C08E899D89913A49F414 -:102B3000813209F07DCF47E050E064E071E080E051 -:102B4000B3CF913209F074CF833269F48F89988DB5 -:102B5000B0E0A0E08093000190930101A0930201F6 -:102B6000B0930301ADCE803269F48091E80082FF1A -:102B7000FCCF67E084E091E00E940F048BEF80932C -:102B8000E8009ECE823209F09BCE8F8980930B01A4 -:102B9000EEEFFFE7859194918B3F9C4D51F1E0E082 -:102BA000F8E08091040190910501A0910601B09197 -:102BB0000701803B9440A105B105F1F480910B0120 -:102BC00080FD1AC0EE3F8AE0F80789F587E797E7AE -:102BD00091838083809160008093530388E19BE020 -:102BE0000FB6F894A895809360000FBE9093600094 -:102BF00067CEEEEFFAE0D5CF808191818737974796 -:102C000009F05ECEA8958091600088618093600095 -:102C10008091530380936000EE3F2AE0F20789F031 -:102C20008091FE0A9091FF0A9183808349CE808132 -:102C300091818737980751F29093FF0A8093FE0A9B -:102C4000C5CF1092FF0A1092FE0A3ACE0E941402DB -:102C5000DC0112960D911C910115110509F4E8CEC5 -:102C6000D801ED91FC910190F081E02DBE016B5EE9 -:102C70007F4FC8010995811123CEF8010085118588 -:102C8000EBCF181619060CF41BCED2CEF1E0FF12D2 -:102C9000BECE62EF70E004CF1F920F920FB60F927C -:102CA00011242F933F934F935F936F937F938F9351 -:102CB0009F93AF93BF93EF93FF9384E094E00E94C0 -:102CC0009A04FF91EF91BF91AF919F918F917F9166 -:102CD0006F915F914F913F912F910F900FBE0F9089 -:102CE0001F9018951F920F920FB60F9211242F93D9 -:102CF0008F939F93EF93FF93E0911404F091150449 -:102D00008081E0911A04F0911B0482FD1BC0908128 -:102D100080911D048F5F8F7320911E04821741F0F4 -:102D2000E0911D04F0E0EC5FFB4F958F80931D0454 -:102D3000FF91EF919F918F912F910F900FBE0F9068 -:102D40001F9018958081F4CF1F920F920FB60F92AB -:102D500011240F900FBE0F901F9018951F920F9285 -:102D60000FB60F9211242F933F934F935F936F935E -:102D70007F938F939F93AF93BF93EF93FF93809134 -:102D8000B900887F803609F44AC0F0F5883209F42A -:102D9000A7C018F5803109F49BC0B8F4882309F462 -:102DA000F9C0883009F494C0FF91EF91BF91AF91C1 -:102DB0009F918F917F916F915F914F913F912F9153 -:102DC0000F900FBE0F901F901895883109F488C09E -:102DD000803251F78093D80314C0803409F49DC029 -:102DE00040F48033B9F38833F9F68093D80385EC47 -:102DF000B0C0803509F485C0883509F496C08834A0 -:102E000099F60E94E40DD0CF883909F48CC038F5CA -:102E1000883729F050F4883611F0803729F683E09E -:102E20008093DA0310924C0357C0883809F47BC0B2 -:102E3000803919F0803809F0B7CF80914C03803287 -:102E400008F071C0E0914C0381E08E0F80934C0339 -:102E50008091BB00F0E0E45DFC4F80833DC0803B8F -:102E600039F0E0F4803A09F479C0883A09F09CCF4F -:102E700084E08093DA031092290310922803E091F2 -:102E80002603F091270309958091280381110FC033 -:102E900081E0809328031092060309C0803C09F466 -:102EA000A6CF883C09F4A3CF883B09F07DCFE09101 -:102EB000290381E08E0F80932903F0E0EA5FFC4F45 -:102EC00080818093BB00909129038091280329C0C1 -:102ED0008091B5038093BB0085EC8093BC0064CFE8 -:102EE0009091D7038091D603981758F5E091D703B6 -:102EF00081E08E0F8093D703F0E0EA54FC4F80818D -:102F0000E9CFE091D70381E08E0F8093D7038091C2 -:102F1000BB00F0E0EA54FC4F80839091D70380918E -:102F2000D6039817C8F285E8D8CFE091D70381E09F -:102F30008E0F8093D7038091BB00F0E0EA54FC4FE2 -:102F400080838091D90381115CCF81E08093B403A9 -:102F500084EA8093BC001092DA0326CF85EC80933C -:102F6000BC001092DA0380914C03803230F4E0917F -:102F70004C03F0E0E45DFC4F108260914C0370E084 -:102F8000E0912A03F0912B038CE293E009951092D3 -:102F90004C030ACF1092D80334CF1F920F920FB672 -:102FA0000F9211242F933F934F935F936F937F93CF -:102FB0008F939F93AF93BF93CF93DF93EF93FF9341 -:102FC0008091E202C091FF05D0E087FF24C01092FB -:102FD0008500109284008091E2028F5F8093E2026C -:102FE0008091E202082E000C990B8C179D0724F4A7 -:102FF0008091E2028C30C4F1809184009091850030 -:10300000049680349C4908F47AC0809184009091A1 -:103010008500049676C08091E202082E000C990B80 -:103020008C179D07C4F6E091E2028E2FEE0F990BEC -:10303000FC01EE0FFF1FE80FF91FE552FA4F8081E8 -:1030400086FFC9CFE091E2028E2FEE0F990BFC01B3 -:10305000EE0FFF1FE80FF91FE552FA4F808160E085 -:103060008F730E949D02B7CF20918400309185001C -:10307000E091E2028E2FEE0F990BFC01EE0FFF1F85 -:10308000E80FF91FE552FA4F81819281820F931F59 -:103090009093890080938800E091E2028E2FEE0FDA -:1030A000990BFC01EE0FFF1FE80FF91FE552FA4FD5 -:1030B000808186FF11C0E091E2028E2FEE0F990B06 -:1030C000FC01EE0FFF1FE80FF91FE552FA4F808158 -:1030D00061E08F730E949D02FF91EF91DF91CF918C -:1030E000BF91AF919F918F917F916F915F914F9120 -:1030F0003F912F910F900FBE0F901F90189580E475 -:103100009CE990938900809388008FEF8093E2027E -:10311000E3CFEF92FF920F931F93CF93DF93F82E9D -:10312000192FE62E042F81E0860F880F0E948A0354 -:1031300083E00E948A03CF2DD12FEC0EFD2EF11CCF -:10314000CE15DF05B9F007FF13C0FE0184910E9480 -:103150008A03182F80E00E948A038123219681111F -:10316000EFCFDF91CF911F910F91FF90EF900895D6 -:103170008881EDCF81E0F5CF10920704109206040C -:1031800088EE93E0A0E0B0E08093080490930904F7 -:10319000A0930A04B0930B0420E231E030930504BD -:1031A000209304042DEC30E030931104209310049C -:1031B0002CEC30E0309313042093120428EC30E020 -:1031C000309315042093140429EC30E03093170455 -:1031D000209316042AEC30E030931904209318044D -:1031E0002EEC30E030931B0420931A0410921D043F -:1031F00010921E0410921F04109220041092A40436 -:103200001092A3048093A5049093A604A093A7040E -:10321000B093A80422E331E03093A2042093A104E8 -:103220002FEF3FEF3093AE042093AD0421EF34E055 -:1032300010923205109231053093350520933405F4 -:1032400040E450E05093370540933605109238051E -:103250001092390510923B0510923A0510923C05E8 -:1032600010923E0510923D051092400510923F05C8 -:1032700010924205109241051092440510924305A8 -:103280001092460510924505109248051092470588 -:1032900010924A05109249051092500510924F0560 -:1032A0001092520510925105109254051092530538 -:1032B0001092560510925505109264051092630500 -:1032C00010923305109271051092730510927205D9 -:1032D0001092CE0543E051E05093580540935705B6 -:1032E0004DE051E050935A054093590547E151E0B4 -:1032F00050935C0540935B0541E251E050935E05BD -:1033000040935D054BE251E05093600540935F05AB -:1033100045E351E050936205409361054FE351E06E -:10332000509366054093650540E451E0509368056D -:10333000409367054DEE57E050936A054093690549 -:1033400030934C0520934B0543E853E050936C05B4 -:1033500040936B0530934E0520934D052BE431E0EF -:1033600030936E0520936D051092D2051092D10511 -:103370008093D3059093D405A093D505B093D6053B -:1033800084E491E09093D0058093CF05E0E0F6E0EF -:103390002FEF48EB5BE08091FF058C30B8F491E0B3 -:1033A000980F9093FF05808390E0DC01AA0FBB1F6C -:1033B000A80FB91FA552BA4F12965C934E9311975E -:1033C000339686E0E432F80731F708952083F8CF8A -:1033D000789484B5826084BD84B5816084BD85B5F0 -:1033E000826085BD85B5816085BD80916E008160FC -:1033F00080936E00109281008091810082608093A2 -:1034000081008091810081608093810080918000A3 -:103410008160809380008091910082608093910010 -:1034200080919100816080939100809190008160F3 -:10343000809390008091C10084608093C10080914E -:10344000C10082608093C1008091C100816080933F -:10345000C1008091C30081608093C3008091C0004F -:1034600082608093C0008091C20081608093C2001E -:1034700080917A00846080937A0080917A008260E3 -:1034800080937A0080917A00816080937A008091A5 -:103490007A00806880937A001092B30310925603EA -:1034A000109255038091D70081608093D70080EA05 -:1034B0008093D80089B5806189BD89B5826089BD56 -:1034C00009B400FEFDCF61E070E080E090E00E9472 -:1034D00050038091D8008F7C80618093D8008091C8 -:1034E000E000807F8093E0008091E1008E7E8093F9 -:1034F000E1008DE08093E200559A209A85E1809367 -:10350000710580917205909173050E94EE1FC09124 -:103510007105D0E0CE0101960E94521F9093730571 -:1035200080937205FC01EC0FFD1F108222E0DC018C -:103530002C9325E011962C93AE01425051096AE577 -:1035400072E002960E94772086E49BE090936203EB -:10355000809361038FE79AE09093600380935F0309 -:1035600082E59AE090935E0380935D0384EF9CE094 -:1035700090935C0380935B038CE19EE090935A03ED -:10358000809359038FE99CE09093580380935703ED -:103590008CEF90E1909364038093630389E79FE04D -:1035A00090936603809365038FEF9FEF9093AE0433 -:1035B0008093AD048091CE0581114FC061E08DE014 -:1035C0000E94CB0262ED70E080E090E00E94500328 -:1035D00061E08DE00E949D0268E270E080E090E092 -:1035E0000E94500360E08DE00E949D0262ED70E059 -:1035F00080E090E00E94500361E08DE00E949D0217 -:1036000068E270E080E090E00E94500360E08DE0AE -:103610000E949D026AEF70E080E090E00E945003FB -:10362000C5E062ED70E080E090E00E94500361E050 -:103630008DE00E949D0268E270E080E090E00E94D0 -:10364000500360E08DE00E949D02C15051F76DE78C -:1036500070E080E090E00E94500381EA94E0909353 -:10366000700580936F05909332058093310581E357 -:1036700095E00E94530181EF94E00E947907C09188 -:103680000B016AE070E080E090E00E945003CC23E0 -:10369000B1F30E94790FD5E000E010E0BB24B394B1 -:1036A00092E0E92EF12CCC24C394D12C80916B03B1 -:1036B000882309F44AC0A0906703CA2DC170A0FEF8 -:1036C00007C080E00E947402C1E0892B09F4C0E0C9 -:1036D000A1FE06C081E00E947402892B09F0C2603D -:1036E000A2FE06C082E00E947402892B09F0C46029 -:1036F000A3FE06C083E00E947402892B09F0C86013 -:10370000A4FE06C084E00E947402892B09F0C06107 -:10371000A5FE06C085E00E947402892B09F0C062F4 -:10372000A6FE06C086E00E947402892B09F0C064E0 -:10373000A7FE06C087E00E947402892B09F0C068CA -:1037400040E06C2F80E00E94B20C80916C038823D3 -:1037500009F44AC0A0906803CA2DC170A0FE07C03A -:1037600088E00E947402C1E0892B09F4C0E0A1FE48 -:1037700006C089E00E947402892B09F0C260A2FE93 -:1037800006C08AE00E947402892B09F0C460A3FE7F -:1037900006C08BE00E947402892B09F0C860A4FE69 -:1037A00006C08CE00E947402892B09F0C061A5FE5E -:1037B00006C08DE00E947402892B09F0C062A6FE4B -:1037C00006C08EE00E947402892B09F0C064A7FE37 -:1037D00006C08FE00E947402892B09F0C06840E0A7 -:1037E0006C2F81E00E94B20C80916D03882309F454 -:1037F0004AC0A0906903CA2DC170A0FE07C080E135 -:103800000E947402C1E0892B09F4C0E0A1FE06C049 -:1038100081E10E947402892B09F0C260A2FE06C0F9 -:1038200082E10E947402892B09F0C460A3FE06C0E5 -:1038300083E10E947402892B09F0C860A4FE06C0CF -:1038400084E10E947402892B09F0C061A5FE06C0C4 -:1038500085E10E947402892B09F0C062A6FE06C0B1 -:1038600086E10E947402892B09F0C064A7FE06C09D -:1038700087E10E947402892B09F0C06840E06C2F38 -:1038800082E00E94B20C80916E038823D1F1A09057 -:103890006A03CA2DC170A0FE07C088E10E947402AD -:1038A000C1E0892B09F4C0E0A1FE06C089E10E94B5 -:1038B0007402892B09F0C260A2FE06C08AE10E9450 -:1038C0007402892B09F0C460A3FE06C08BE10E943C -:1038D0007402892B09F0C860A4FE06C08CE10E9426 -:1038E0007402892B09F0C061A5FE06C08DE10E941B -:1038F0007402892B09F0C06240E06C2F83E00E94C3 -:10390000B20C80916F0590917005DC01ED91FC91F6 -:103910000084F185E02D0995892B09F4CEC18091B1 -:103920006F0590917005DC01ED91FC910284F385A7 -:10393000E02D09959C018F3F980719F3982F8091EE -:103940003C05882309F492C0973F09F07EC010928D -:103950003C05A0913405B09135056C916137C1F1FA -:10396000693709F05CC0E0916905F0916A0530970C -:1039700041F280913D0590913E058330910560F4C0 -:1039800030E020E050E040E070E060E080914B05E6 -:1039900090914C050995B5CFBD016D5F7F4F0397A1 -:1039A0000E94BA01BC016D5F7F4F80E00E948A01D6 -:1039B000E0913405F09135059F012D5F3F4F428125 -:1039C00050E0618170E0E0916905F0916A05DECF19 -:1039D0008091650590916605892B09F492CFBD0110 -:1039E0006F5F7F4F80913D0590913E0501970E944A -:1039F000BA01BC016F5F7F4F80E00E948A01609135 -:103A00003405709135056F5F7F4FE0916505F0914A -:103A100066058091510590915205099572CFE0910C -:103A20006705F0916805309709F46BCF9D012F5F12 -:103A30003F4F40913D0550913E05415051098091C5 -:103A400053059091540509955CCF60913D057091A7 -:103A50003E05822F0E948A0180913D0590913E058E -:103A6000019690933E0580933D054BCF60913A05BA -:103A700070913B056115710509F4B1C027FDAFC018 -:103A80006150710970933B0560933A05822F0E9443 -:103A90008A0180913A0590913B05892B09F031CF3D -:103AA00080913805882309F42CCF803D09F483C028 -:103AB00040F4803949F1803C09F469C0109238051E -:103AC00020CF843FE1F1853F09F44DC0803EB1F73E -:103AD000E0915705F0915805309781F3A091340596 -:103AE000B09135054C9120E8429FC00111241196F8 -:103AF0004C91480F592F511D6091390580913F0518 -:103B0000909140050995DACFE0915905F0915A0559 -:103B10003097A1F2A0913405B09135054C9120E881 -:103B2000429FC001112411964C91480F592F511DED -:103B3000609139058091410590914205E3CFE09174 -:103B40005F05F0916005309709F4B8CFA091340576 -:103B5000B09135054C9150E011966C9180914705DC -:103B600090914805CFCFE0916105F09162053097C3 -:103B700009F4A4CFA0913405B09135054C9150E0E3 -:103B800011966C918091490590914A05BBCFE091C7 -:103B90005B05F0915C05309709F490CFA091340556 -:103BA000B09135054C9150E0609139058091430505 -:103BB00090914405A7CFE0915D05F0915E053097A7 -:103BC00009F47CCFA0913405B09135054C9150E0BB -:103BD00060913905809145059091460593CF903FBE -:103BE00030F4822F8F7080933905922F907F903F11 -:103BF000F1F190F4903CB1F150F4903909F081CE9C -:103C0000F0923B05E0923A05909338057ACE903DCC -:103C100049F1903EA9F375CE993F09F442C028F4CA -:103C20008CE0890F823060F36CCE9F3F09F069CE43 -:103C300010923B0510923A05109238051092390502 -:103C400090E080E020913605309137058217930788 -:103C5000A8F4E0913405F0913505E80FF91F1082C2 -:103C60000196F0CFD0923B05C0923A05CDCFB092ED -:103C70003C0510923E0510923D0543CE10923C0546 -:103C800010923E0510923D05E0916D05F0916E0594 -:103C90008091550590915605309709F432CE0995DB -:103CA00030CEE0916B05F0916C05309709F429CE88 -:103CB00080914D0590914E05F2CF8FB7F8944090CA -:103CC0009E0350909F036090A0037090A1038FBF4C -:103CD0008091990390919A03A0919B03B0919C03CA -:103CE00040910D0150910E0170E060E0481A590AB0 -:103CF0006A0A7B0A441555056605770508F051C028 -:103D0000840F951FA61FB71F8093990390939A0362 -:103D1000A0939B03B0939C0381EF882E84E0982EA0 -:103D2000CEEECC30C8F4F401ED57FF4F80818230E5 -:103D300099F480919703909198030C2E02C0959569 -:103D400087950A94E2F780FF07C08C2F0E94070333 -:103D5000BC018C2F0E94CC06CF5F8FEF881A980A87 -:103D6000CC30F9F680910C0187FD1BC0C0E02C2FF0 -:103D700030E080910C01082E000C990B82179307FC -:103D800084F0D29FF001D39FF00D1124E159FC4F34 -:103D9000618172812481438180810E94BA0FCF5F4B -:103DA000E6CF0115110509F481CC0E948604882311 -:103DB00009F47CCC0E94000079CC052E97FB1EF400 -:103DC00000940E94F41E57FD07D00E940F1F07FCAD -:103DD00003D04EF40C94F41E5095409530952195E7 -:103DE0003F4F4F4F5F4F0895909580957095619527 -:103DF0007F4F8F4F9F4F08950E94311FA59F900DB9 -:103E0000B49F900DA49F800D911D11240895B7FFBC -:103E10000C94FC1E0E94FC1E821B930B0895A1E2D1 -:103E20001A2EAA1BBB1BFD010DC0AA1FBB1FEE1F34 -:103E3000FF1FA217B307E407F50720F0A21BB30B7F -:103E4000E40BF50B661F771F881F991F1A9469F7FB -:103E500060957095809590959B01AC01BD01CF0157 -:103E60000895A29FB001B39FC001A39F700D811D53 -:103E70001124911DB29F700D811D1124911D089573 -:103E8000991B79E004C0991F961708F0961B881FAC -:103E90007A95C9F780950895EE0FFF1F0590F4916C -:103EA000E02D09940F931F93CF93DF9382309105F8 -:103EB00010F482E090E0E0912606F091270630E0D1 -:103EC00020E0B0E0A0E0309799F42115310509F425 -:103ED0004AC0281B390B24303105D8F58A819B81D3 -:103EE0006115710589F1FB0193838283FE0111C085 -:103EF000408151810281138148175907E0F048172A -:103F0000590799F4109761F012960C931297139633 -:103F10001C933296CF01DF91CF911F910F9108959D -:103F20000093260610932706F4CF2115310551F092 -:103F30004217530738F0A901DB019A01BD01DF01E7 -:103F4000F801C1CFEF01F9CF9093270680932606A1 -:103F5000CDCFFE01E20FF31F8193919322503109DF -:103F600039832883D7CF2091240630912506232B2F -:103F700041F42091110130911201309325062093D4 -:103F8000240620910F01309110012115310541F4D3 -:103F90002DB73EB74091130150911401241B350BEE -:103FA000E0912406F0912506E217F307A0F42E1BFA -:103FB0003F0B2817390778F0AC014E5F5F4F24178D -:103FC000350748F04E0F5F1F509325064093240697 -:103FD000819391939FCFF0E0E0E09CCFCF93DF936C -:103FE0000097E9F0FC01329713821282A091260615 -:103FF000B0912706ED0130E020E01097A1F4208178 -:104000003181820F931F20912406309125062817B5 -:10401000390709F061C0F0932506E0932406DF918B -:10402000CF910895EA01CE17DF07E8F54A815B8159 -:104030009E0141155105B1F7E901FB83EA834991DE -:104040005991C40FD51FEC17FD0761F48081918150 -:104050000296840F951FE901998388838281938159 -:104060009B838A83F0E0E0E012968D919C911397F8 -:104070000097B9F52D913C911197CD010296820FD1 -:10408000931F20912406309125062817390739F609 -:10409000309751F51092270610922606B093250608 -:1040A000A0932406BCCFD383C28340815181840F67 -:1040B000951FC817D90761F44E5F5F4F88819981BA -:1040C000480F591F518340838A819B819383828348 -:1040D0002115310509F0B0CFF0932706E0932606AD -:1040E0009ECFFD01DC01C0CF13821282D7CFFB012E -:1040F000DC014150504048F001900D920020C9F77A -:1041000001C01D9241505040E0F70895F894FFCF50 -:10411000FFFFFFFF00E1000000000000FF130000B0 -:10412000002806800000C18081000000000000001F -:10413000BB041C04490407057A0458046C040000FD -:104140000000AC052705CD05C2051306D105EF0516 -:1041500000000000A1097409D0094A096D095A0933 -:104160004B094D617820736572766F7320617474AA -:10417000616368656400556E6B6E6F776E20706961 -:104180006E206D6F6465004932433A20546F6F2092 -:104190006D616E79206279746573207265636569FB -:1041A000766564004932433A20546F6F2066657724 -:1041B0002062797465732072656365697665640051 -:1041C00031302D6269742061646472657373696E45 -:1041D00067206E6F7420737570706F727465640001 -:1041E000746F6F206D616E7920717565726965738A -:1041F000002F707269766174652F7661722F666F19 -:104200006C646572732F6C6A2F3766706C38335F1D -:1042100073377778336436646A6C675F77327967AF -:104220006D3030303067702F542F2E617264756995 -:104230006E6F4944452D756E736176656432303218 -:1042400034313131392D31353738332D316F376EC7 -:104250007834372E39636A686A2F5374616E6461EB -:1042600072644669726D6174612F5374616E64612A -:0E42700072644669726D6174612E696E6F0032 -:00000001FF diff --git a/apps/electron-app/package.json b/apps/electron-app/package.json index 8638c22e..f79edb3e 100644 --- a/apps/electron-app/package.json +++ b/apps/electron-app/package.json @@ -6,7 +6,7 @@ "type": "git", "url": "https://github.com/xiduzo/microflow" }, - "version": "0.8.5", + "version": "0.9.0", "description": "An application which allows you to create flow-based logic for microcontrollers", "author": { "name": "Sander Boer", @@ -65,8 +65,8 @@ "dependencies": { "@leva-ui/plugin-plot": "^0.10.0", "@microflow/flasher": "workspaces:*", - "@microflow/hardware": "workspaces:*", "@microflow/mqtt-provider": "workspaces:*", + "@microflow/runtime": "workspaces:*", "@microflow/ui": "workspaces:*", "@microflow/utils": "workspaces:*", "@tsparticles/engine": "3.8.1", diff --git a/apps/electron-app/src/common/empty-module.ts b/apps/electron-app/src/common/empty-module.ts new file mode 100644 index 00000000..a33787f5 --- /dev/null +++ b/apps/electron-app/src/common/empty-module.ts @@ -0,0 +1,4 @@ +// Empty module stub for Node.js-only packages that shouldn't be bundled in the renderer +// These packages (johnny-five, node-pixel) are only used in the main process/workers +export default {}; + diff --git a/apps/electron-app/src/common/nodes.ts b/apps/electron-app/src/common/nodes.ts index 6a1a8d6d..b1866f1d 100644 --- a/apps/electron-app/src/common/nodes.ts +++ b/apps/electron-app/src/common/nodes.ts @@ -10,6 +10,7 @@ import { Motion } from '../render/components/react-flow/nodes/Motion'; import { Mqtt } from '../render/components/react-flow/nodes/Mqtt'; import { Note } from '../render/components/react-flow/nodes/Note'; import { Oscillator } from '../render/components/react-flow/nodes/Oscillator'; +import { Pixel } from '../render/components/react-flow/nodes/Pixel'; import { Piezo } from '../render/components/react-flow/nodes/piezo/Piezo'; import { RangeMap } from '../render/components/react-flow/nodes/RangeMap'; import { Rgb } from '../render/components/react-flow/nodes/RGB'; @@ -64,6 +65,7 @@ export const NODE_TYPES: Record JSX.Element> = { Mqtt: Mqtt, Note: Note, Oscillator: Oscillator, + Pixel: Pixel, Proximity: Proximity, Piezo: Piezo, Potentiometer: Potentiometer, diff --git a/apps/electron-app/src/common/types.ts b/apps/electron-app/src/common/types.ts index 696bc16e..39ea15fe 100644 --- a/apps/electron-app/src/common/types.ts +++ b/apps/electron-app/src/common/types.ts @@ -1,4 +1,4 @@ -import { type Message } from '@microflow/hardware/src/utils/postMessageToElectronMain'; +import type { Message } from '@microflow/runtime/src/base'; import type { Edge, Node } from '@xyflow/react'; // https://github.com/firmata/protocol/blob/master/protocol.md#supported-modes @@ -65,6 +65,6 @@ export type FlowState = { edges: Edge[]; }; -export type UploadedCodeMessage = Message & { type: 'message' }; +export type UploadedCodeMessage = Message; export type IpcResponse = { success: true; data: T } | { success: false; error: string }; diff --git a/apps/electron-app/src/index.css b/apps/electron-app/src/index.css index 34341cf3..a383958d 100644 --- a/apps/electron-app/src/index.css +++ b/apps/electron-app/src/index.css @@ -21,10 +21,6 @@ body { @apply fill-blue-500; } -.react-flow__minimap .react-flow__minimap-node.react-flow__minimap-node__User { - @apply hidden; -} - .react-flow__node.dragging { z-index: 999998 !important; } @@ -39,9 +35,20 @@ body { @apply stroke-blue-500; } -.react-flow__edges .react-flow__edge.animated .react-flow__edge-path { - /* @apply stroke-yellow-500; */ - stroke-dasharray: 10, 0; +.react-flow__edges .react-flow__edge .react-flow__edge-path.animated { + @apply stroke-yellow-500; + stroke-dasharray: 8, 32; + stroke-dashoffset: 0; + animation: dash-animation 1s linear infinite; +} + +@keyframes dash-animation { + 0% { + stroke-dashoffset: 100%; + } + 100% { + stroke-dashoffset: 0%; + } } .react-flow__connection .react-flow__connection-path { diff --git a/apps/electron-app/src/main/ipc.ts b/apps/electron-app/src/main/ipc.ts index 8e609d35..9e4b4da9 100644 --- a/apps/electron-app/src/main/ipc.ts +++ b/apps/electron-app/src/main/ipc.ts @@ -6,7 +6,7 @@ import { type PortInfo, } from '@microflow/flasher'; import type { Edge, Node } from '@xyflow/react'; -import { app, ipcMain, Menu } from 'electron'; +import { app, ipcMain, Menu, session } from 'electron'; import { fork, ChildProcess } from 'child_process'; import { mainWindowReady, sendMessageToRenderer } from './window'; @@ -47,11 +47,11 @@ let connectedPort: PortInfo | undefined; ipcMain.on('ipc-flow', async (event, data: { ip?: string; nodes: Node[]; edges: Edge[] }) => { const timer = new Timer(); - log.debug('[FLOW] requested to send flow', data, timer.duration); + log.debug('[FLOW] ', timer.duration); await ensureRunnerProcess(data.nodes, data.edges, data.ip); - log.debug('[FLOW] sending flow to runner', runnerProcess?.pid, timer.duration); + log.debug('[FLOW] ', runnerProcess?.pid, timer.duration); runnerProcess?.send({ type: 'flow', nodes: data.nodes, edges: data.edges }); }); @@ -87,7 +87,7 @@ async function startRunnerProcess(ip?: string) { checkBoard: for (const [board, ports] of boardsAndPorts) { for (const port of ports) { - log.debug(`[CHECK] checking board ${board} on path ${port.path}`, timer.duration); + log.debug('[CHECK] ', board, port.path, timer.duration); try { sendMessageToRenderer('ipc-board', { @@ -101,7 +101,7 @@ async function startRunnerProcess(ip?: string) { break checkBoard; } catch (error) { await killRunnerProcess(); - log.warn('[CHECK]', board, port, error); + log.warn('[CHECK] ', board, port.path, error); sendMessageToRenderer('ipc-board', { success: true, data: { type: 'info', message: (error as any).message ?? getRandomMessage('wait') }, @@ -158,18 +158,18 @@ async function checkBoardOnPort(port: Pick, board: BoardName) const filePath = join(__dirname, 'workers', 'runner.js'); return new Promise((resolve, reject) => { - log.debug(`[RUNNER] creating runner from ${filePath}`, timer.duration); + log.debug('[RUNNER] ', filePath, timer.duration); runnerProcess = fork(filePath, [port.path], { // serviceName: 'Microflow studio - microcontroller validator', stdio: 'pipe', }); runnerProcess.on('spawn', () => { - log.debug(`[RUNNER] [${runnerProcess?.pid}] `, timer.duration); + log.debug('[RUNNER] ', runnerProcess?.pid, timer.duration); }); runnerProcess.stderr?.on('data', async data => { - log.debug(`[RUNNER] [${runnerProcess?.pid}] ${data.toString()}`, timer.duration); + log.debug('[RUNNER] ', runnerProcess?.pid, timer.duration, data.toString()); sendMessageToRenderer('ipc-board', { success: false, error: data.toString(), @@ -177,11 +177,11 @@ async function checkBoardOnPort(port: Pick, board: BoardName) }); runnerProcess.stdout?.on('data', async data => { - log.debug(`[RUNNER] [${runnerProcess?.pid}] ${data.toString()}`, timer.duration); + log.debug('[RUNNER] ', runnerProcess?.pid, timer.duration, data.toString()); }); async function handleMessage(data: Board | UploadedCodeMessage) { - // log.debug(`[RUNNER] [${runnerProcess?.pid}] ${data.type}`, timer.duration); + // log.debug('[RUNNER] ', runnerProcess?.pid, data.type, timer.duration); try { switch (data.type) { case 'message': @@ -191,6 +191,7 @@ async function checkBoardOnPort(port: Pick, board: BoardName) }); break; case 'error': + log.warn(`[RUNNER] <${data.type}>`, runnerProcess?.pid, data.message, timer.duration); let notificationTimeout: NodeJS.Timeout | null = null; try { if (ipRegex.test(port.path)) { @@ -212,17 +213,19 @@ async function checkBoardOnPort(port: Pick, board: BoardName) await flashBoard(board, port); return checkBoardOnPort(port, board); } catch (error) { - if (notificationTimeout) clearTimeout(notificationTimeout); reject(error); + } finally { + if (notificationTimeout) clearTimeout(notificationTimeout); } break; case 'close': case 'exit': case 'fail': + log.warn(`[RUNNER] <${data.type}>`, runnerProcess?.pid, data.message, timer.duration); reject(new Error(data.message ?? 'Unknown error')); break; case 'ready': - log.debug(`[RUNNER] [${runnerProcess?.pid}] `, timer.duration); + log.debug(`[RUNNER] <${data.type}>`, runnerProcess?.pid, timer.duration); sendMessageToRenderer('ipc-board', { success: true, data: { type: 'ready', port: port.path, pins: data.pins }, @@ -242,70 +245,305 @@ async function checkBoardOnPort(port: Pick, board: BoardName) async function flashBoard(board: BoardName, port: Pick): Promise { const flashTimer = new Timer(); - log.debug(`[FLASH] flashing firmata to ${board} on ${port.path}`, flashTimer.duration); - // await cleanupProcesses(); - await killRunnerProcess(); - - const firmataPath = resolve(__dirname, 'hex', board, 'StandardFirmata.cpp.hex'); + const firmataPath = resolve(__dirname, 'hex', board, 'StandardFirmata.ino.hex'); // Check if file exists if (!existsSync(firmataPath)) { - log.error(`[FLASH] Firmata file not found at ${firmataPath}`); + log.error('[FLASH] ', 'Firmata file not found', firmataPath); throw new Error(`[FLASH] Firmata file not found at ${firmataPath}`); } + await killRunnerProcess(); + log.debug('[FLASH] ', firmataPath, board, port.path, flashTimer.duration); return new Promise(async (resolve, reject) => { try { - log.debug(`[FLASH] Flashing firmata from ${firmataPath}`, flashTimer.duration); + log.debug(`[FLASH] `, flashTimer.duration); await new Flasher(board, port.path).flash(firmataPath); - log.debug(`[FLASH] Flashing done`, flashTimer.duration); + log.debug('[FLASH] ', flashTimer.duration); resolve(); } catch (flashError) { - log.error( - `[FLASH] Unable to flash ${board} on ${port.path} using ${firmataPath}`, - { - flashError, - }, - flashTimer.duration - ); + log.error('[FLASH] ', flashError, flashTimer.duration); reject(new Error(getRandomMessage('wait'))); } }); } ipcMain.on('ipc-external-value', (_event, data: { nodeId: string; value: unknown }) => { - log.debug(`[EXTERNAL] setting value`, data); - + log.debug('[EXTERNAL] ', data); runnerProcess?.send({ type: 'setExternal', nodeId: data.nodeId, value: data.value }); }); -const PORT_SNIFFER_TIMEOUT_IN_MS = 250; +/** + * Converts a USB device product ID (number) to a lowercase hex string for matching + */ +function productIdToHex(productId: number): string { + return productId.toString(16).padStart(4, '0').toLowerCase(); +} + +/** + * Checks if a USB device matches any known board by product ID + */ +function isKnownBoard(productId: number): boolean { + const productIdHex = productIdToHex(productId); + return BOARDS.some(board => board.productIds.includes(productIdHex as never)); +} + +/** + * Checks if the currently connected port still exists + */ +async function checkConnectedPort() { + if (!connectedPort) return; -async function sniffPorts(portsConnected: PortInfo[] = []) { const ports = await getConnectedPorts(); + const portStillExists = ports.find(({ path }) => path === connectedPort?.path); - // Check if the connected port is disconnected - if (connectedPort && !ports.find(({ path }) => path === connectedPort?.path)) { - log.debug(`[PORTS] ${connectedPort?.path}`); + if (!portStillExists) { + log.debug('[PORTS] ', connectedPort?.path); sendMessageToRenderer('ipc-board', { success: true, data: { type: 'close', message: `${connectedPort?.path} is no longer connected` }, }); await killRunnerProcess(); } +} - // Check if a new port is connected - if (ports.length > portsConnected.length) { - log.debug(`[PORTS] ${ports.length}`); - sendMessageToRenderer('ipc-board', { - success: true, - data: { type: 'connect', message: 'New port connected' }, +/** + * Sets up device event listeners using Electron's native session API + * Uses serial port events for Arduino devices (which appear as serial ports) + */ +function setupUSBDeviceListeners() { + const defaultSession = session.defaultSession; + + // Set up device permission handler to automatically grant permissions + defaultSession.setDevicePermissionHandler(details => { + log.debug('[DEVICE] ', { + deviceType: details.deviceType, + origin: details.origin, + device: details.device, }); - } - setTimeout(() => { - sniffPorts(ports); - }, PORT_SNIFFER_TIMEOUT_IN_MS); + // Auto-grant permissions for serial ports (Arduino devices) + if (details.deviceType === 'serial') { + return true; + } + + // Auto-grant permissions for USB devices if they match known boards + if (details.deviceType === 'usb' && details.device) { + const productId = (details.device as any).productId; + if (productId && isKnownBoard(productId)) { + return true; + } + } + + return false; + }); + + // Handle select-serial-port event - this enables serial port monitoring + defaultSession.on('select-serial-port', (event, portList, webContents, callback) => { + log.debug('[SERIAL] ', { + portCount: portList.length, + ports: portList.map(p => ({ + portId: p.portId, + portName: p.portName, + displayName: p.displayName, + })), + }); + + // Cancel the selection - we handle port selection ourselves + // Note: serial-port-added/removed events only fire when handling this event + event.preventDefault(); + // Pass empty string to cancel the selection + callback(''); + }); + + // Handle serial port added (Arduino devices appear as serial ports) + defaultSession.on('serial-port-added', async (_event, port) => { + log.debug('[SERIAL] ', { + portId: port.portId, + portName: port.portName, + displayName: port.displayName, + vendorId: port.vendorId, + productId: port.productId, + }); + + // Check if this is a known board + // port.productId is a number (USB product ID) + const productId = typeof port.productId === 'number' ? port.productId : undefined; + if (productId !== undefined && isKnownBoard(productId)) { + log.debug('[SERIAL] ', productIdToHex(productId), port.portName); + + // Wait a bit for the port to be fully available + setTimeout(async () => { + const ports = await getConnectedPorts(); + const matchingPort = ports.find(p => { + // Try to match by port name/path or product ID + if (p.path === port.portName) return true; + const portProductId = p.productId || p.pnpId; + if (portProductId && productId !== undefined) { + return productIdToHex(productId) === portProductId.toLowerCase(); + } + return false; + }); + + if (matchingPort) { + log.debug('[PORTS] ', matchingPort.path); + sendMessageToRenderer('ipc-board', { + success: true, + data: { type: 'connect', message: 'New port connected' }, + }); + } + }, 500); + } + }); + + // Handle serial port removed + defaultSession.on('serial-port-removed', async (_event, port) => { + log.debug('[SERIAL] ', { + portId: port.portId, + portName: port.portName, + displayName: port.displayName, + }); + + // Check if this was the connected port + if ( + connectedPort && + (connectedPort.path === port.portName || connectedPort.path === port.displayName) + ) { + log.debug('[PORTS] ', connectedPort.path); + sendMessageToRenderer('ipc-board', { + success: true, + data: { type: 'close', message: `${connectedPort.path} is no longer connected` }, + }); + await killRunnerProcess(); + } + }); + + // Handle serial port revoked + defaultSession.on('serial-port-revoked', async (_event, details) => { + log.debug('[SERIAL] ', details); + + // When a port is revoked, check if our connected port is still accessible + if (connectedPort) { + const ports = await getConnectedPorts(); + const portStillExists = ports.find(({ path }) => path === connectedPort?.path); + + if (!portStillExists) { + log.debug('[SERIAL] ', connectedPort.path); + sendMessageToRenderer('ipc-board', { + success: true, + data: { type: 'close', message: `${connectedPort.path} access was revoked` }, + }); + await killRunnerProcess(); + } + } + }); + + // Also listen to USB device events as a fallback (though they may not fire for serial devices) + defaultSession.on('usb-device-added', async (_event, device) => { + log.debug('[USB] ', { + vendorId: device.vendorId, + productId: device.productId, + serialNumber: device.serialNumber, + }); + + // Check if this is a known board + if (isKnownBoard(device.productId)) { + log.debug('[USB] ', productIdToHex(device.productId)); + + // Wait a bit for the serial port to be created + setTimeout(async () => { + const ports = await getConnectedPorts(); + const newPorts = ports.filter(port => { + const portProductId = port.productId || port.pnpId; + if (!portProductId) return false; + return productIdToHex(device.productId) === portProductId.toLowerCase(); + }); + + if (newPorts.length > 0) { + log.debug('[PORTS] ', newPorts.map(p => p.path).join(', ')); + sendMessageToRenderer('ipc-board', { + success: true, + data: { type: 'connect', message: 'New port connected' }, + }); + } + }, 500); + } + }); + + defaultSession.on('usb-device-removed', async (_event, device) => { + log.debug('[USB] ', { + vendorId: device.vendorId, + productId: device.productId, + serialNumber: device.serialNumber, + }); + + // Check if this is a known board + if (isKnownBoard(device.productId)) { + log.debug('[USB] ', productIdToHex(device.productId)); + + // Check if this was the connected port + if (connectedPort) { + const ports = await getConnectedPorts(); + const portStillExists = ports.find(({ path }) => path === connectedPort?.path); + + if (!portStillExists) { + log.debug('[PORTS] ', connectedPort?.path); + sendMessageToRenderer('ipc-board', { + success: true, + data: { type: 'close', message: `${connectedPort?.path} is no longer connected` }, + }); + await killRunnerProcess(); + } + } + } + }); + + log.debug('[DEVICE] ', 'Device event listeners initialized (serial + USB)'); + + // Fallback: Lightweight polling since Electron events may not fire automatically + // These events are tied to Web Serial/USB API usage from renderer + // We'll poll less frequently as a fallback + startPortPolling(); +} + +const PORT_POLL_INTERVAL_MS = 1000; // Poll every second as fallback +let portPollingInterval: NodeJS.Timeout | null = null; +let lastKnownPorts: PortInfo[] = []; + +async function startPortPolling() { + // Initial port list + lastKnownPorts = await getConnectedPorts(); + + portPollingInterval = setInterval(async () => { + const currentPorts = await getConnectedPorts(); + + // Check for disconnected port + if (connectedPort && !currentPorts.find(p => p.path === connectedPort?.path)) { + log.debug('[POLL] ', connectedPort.path); + sendMessageToRenderer('ipc-board', { + success: true, + data: { type: 'close', message: `${connectedPort.path} is no longer connected` }, + }); + await killRunnerProcess(); + } + + // Check for new ports + if (currentPorts.length > lastKnownPorts.length) { + const newPorts = currentPorts.filter(p => !lastKnownPorts.find(lp => lp.path === p.path)); + + if (newPorts.length > 0) { + log.debug('[POLL] ', newPorts.map(p => p.path).join(', ')); + sendMessageToRenderer('ipc-board', { + success: true, + data: { type: 'connect', message: 'New port connected' }, + }); + } + } + + lastKnownPorts = currentPorts; + }, PORT_POLL_INTERVAL_MS); + + log.debug('[POLL] ', `Polling every ${PORT_POLL_INTERVAL_MS}ms as fallback`); } async function getKnownBoardsWithPorts() { @@ -329,38 +567,40 @@ async function getKnownBoardsWithPorts() { [] as [BoardName, PortInfo[]][] ); - log.debug(`Found ${boardsWithPorts.length} known boards with ports:`); + log.debug('[PORTS] ', boardsWithPorts.length); boardsWithPorts.forEach(([board, devices]) => { - log.debug(` - ${board} on ${devices.map(device => device.path).join(', ')}`); + log.debug('[PORTS] ', board, devices.map(device => device.path).join(', ')); }); return boardsWithPorts; } catch (error) { - log.warn('Could not get known boards with ports', { error }); + log.warn('[PORTS] ', error); return []; } } class Timer { - private start: number; - constructor(private readonly name?: string) { - this.start = Date.now(); - } + constructor(private readonly startTime = performance.now()) {} get duration() { - return `(${this.name ? this.name + ' took ' : ''}${Date.now() - this.start}ms)`; + return performance.now() - this.startTime + 'ms'; } } killRunnerProcess().catch(log.debug); app.on('before-quit', async event => { - log.debug(`[PROCESS] about to leave app`, event); + log.debug('[PROCESS] ', event); void killRunnerProcess(); }); function waitForMainWindow() { - if (mainWindowReady) return sniffPorts(); + if (mainWindowReady) { + setupUSBDeviceListeners(); + // Initial check for connected port + checkConnectedPort(); + return; + } setTimeout(waitForMainWindow, 50); } diff --git a/apps/electron-app/src/render/components/MusicSheet.tsx b/apps/electron-app/src/render/components/MusicSheet.tsx index 441db537..5897f1ac 100644 --- a/apps/electron-app/src/render/components/MusicSheet.tsx +++ b/apps/electron-app/src/render/components/MusicSheet.tsx @@ -1,4 +1,4 @@ -import { type Note } from '@microflow/hardware'; +import { type Note } from '@microflow/runtime/src/piezo/piezo.types'; import { renderAbc } from 'abcjs'; import { useEffect, useRef } from 'react'; diff --git a/apps/electron-app/src/render/components/forms/MqttSettingsForm.tsx b/apps/electron-app/src/render/components/forms/MqttSettingsForm.tsx index 16e5b566..17ad3c83 100644 --- a/apps/electron-app/src/render/components/forms/MqttSettingsForm.tsx +++ b/apps/electron-app/src/render/components/forms/MqttSettingsForm.tsx @@ -21,7 +21,7 @@ import { useAppStore } from '../../stores/app'; import { MqttConfig } from '@microflow/mqtt-provider/client'; const schema = Zod.object({ - host: Zod.url().or(Zod.ipv4()), + host: Zod.string().or(Zod.ipv4()), port: Zod.number().min(0), username: Zod.string().optional(), password: Zod.string().optional(), diff --git a/apps/electron-app/src/render/components/react-flow/Edge.tsx b/apps/electron-app/src/render/components/react-flow/Edge.tsx index a49f76ad..b6ea33c7 100644 --- a/apps/electron-app/src/render/components/react-flow/Edge.tsx +++ b/apps/electron-app/src/render/components/react-flow/Edge.tsx @@ -1,110 +1,129 @@ -import { BaseEdge, getSimpleBezierPath, type EdgeProps, Position } from '@xyflow/react'; -import { SIGNAL_DURATION, useEdgeSignals } from '../../stores/signal'; -import { useEffect, useMemo, useState } from 'react'; +import { BaseEdge, getSimpleBezierPath, type EdgeProps } from '@xyflow/react'; +import { Signal, SIGNAL_DURATION, useEdgeSignals } from '../../stores/signal'; +import { useEffect, useMemo, useRef, useState } from 'react'; +import { cn } from '@microflow/ui'; -// Helper function to calculate position along a Bezier curve at a given progress (0-1) -function getPointOnBezierCurve( - path: string, - sourceX: number, - sourceY: number, - targetX: number, - targetY: number, - progress: number -): { x: number; y: number } { - // Parse the SVG path to extract control points - // Format: M x,y C cx1,cy1 cx2,cy2 x,y - const pathMatch = path.match( - /M\s*([\d.-]+),([\d.-]+)\s*C\s*([\d.-]+),([\d.-]+)\s*([\d.-]+),([\d.-]+)\s*([\d.-]+),([\d.-]+)/ - ); +const SIGNAL_RATE_THRESHOLD = 10; +const RATE_WINDOW_MS = 500; - if (!pathMatch) { - // Fallback to linear interpolation - return { - x: sourceX + (targetX - sourceX) * progress, - y: sourceY + (targetY - sourceY) * progress, - }; - } +export function AnimatedSVGEdge({ id, sourceX, sourceY, targetX, targetY }: EdgeProps) { + const signals = useEdgeSignals(id); + const signalTimestampsRef = useRef>(new Set()); + const [useLightweightMode, setUseLightweightMode] = useState(false); + + const [edgePath] = useMemo(() => { + return getSimpleBezierPath({ + sourceX, + sourceY, + targetX, + targetY, + }); + }, [sourceX, sourceY, targetX, targetY]); - const [, startX, startY, cp1X, cp1Y, cp2X, cp2Y, endX, endY] = pathMatch.map(Number); + useEffect(() => { + const now = Date.now(); + const cutoffTime = now - RATE_WINDOW_MS; - // Calculate position along cubic Bezier curve using the formula: - // B(t) = (1-t)³P₀ + 3(1-t)²tP₁ + 3(1-t)t²P₂ + t³P₃ - const t = progress; - const oneMinusT = 1 - t; - const oneMinusTSquared = oneMinusT * oneMinusT; - const oneMinusTCubed = oneMinusTSquared * oneMinusT; - const tSquared = t * t; - const tCubed = tSquared * t; + signals.forEach(signal => { + signalTimestampsRef.current.add(signal.startTime); + }); - const x = - oneMinusTCubed * startX + - 3 * oneMinusTSquared * t * cp1X + - 3 * oneMinusT * tSquared * cp2X + - tCubed * endX; + const validTimestamps = new Set(); + signalTimestampsRef.current.forEach(timestamp => { + if (timestamp < cutoffTime) return; + validTimestamps.add(timestamp); + }); + signalTimestampsRef.current = validTimestamps; - const y = - oneMinusTCubed * startY + - 3 * oneMinusTSquared * t * cp1Y + - 3 * oneMinusT * tSquared * cp2Y + - tCubed * endY; + const signalsInWindow = signalTimestampsRef.current.size; + const rate = (signalsInWindow / RATE_WINDOW_MS) * 1000; - return { x, y }; + setUseLightweightMode(rate >= SIGNAL_RATE_THRESHOLD); + }, [signals]); + + // Switch to lightweight AnimatedEdge when signal rate is high + if (useLightweightMode) { + return 0} />; + } + + return ( + + ); } -export function AnimatedSVGEdge({ +function EdgeWithSignals({ id, sourceX, sourceY, targetX, targetY, - sourcePosition, - targetPosition, -}: EdgeProps) { - const [edgePath] = getSimpleBezierPath({ - sourceX, - sourceY, - targetX, - targetY, - sourcePosition, - targetPosition, - }); - - const positions = useMemo(() => { - return { sourceX, sourceY, targetX, targetY }; + signals, + edgePath, +}: Pick & { + signals: Signal[]; + edgePath: string; +}) { + // Parse the path once and cache the control points + const bezierPoints = useMemo(() => { + return parseBezierPath(edgePath, sourceX, sourceY, targetX, targetY); }, [edgePath, sourceX, sourceY, targetX, targetY]); - const signals = useEdgeSignals(id); const [signalPositions, setSignalPositions] = useState>( new Map() ); + const isMountedRef = useRef(true); + // Clean up signalPositions when signals are removed useEffect(() => { + const signalIds = new Set(signals.map(s => s.id)); + setSignalPositions(prev => { + const filtered = new Map(); + prev.forEach((position, signalId) => { + if (signalIds.has(signalId)) { + filtered.set(signalId, position); + } + }); + return filtered; + }); + }, [signals]); + + useEffect(() => { + isMountedRef.current = true; const interval = setInterval(() => { + if (!isMountedRef.current) return; + const now = Date.now(); const newPositions = new Map(); signals.forEach(signal => { const elapsed = now - signal.startTime; - const progress = Math.max(0, Math.min(1, elapsed / SIGNAL_DURATION)); // Fixed 500ms duration + const progress = Math.max(0, Math.min(1, elapsed / SIGNAL_DURATION)); // Calculate position along the Bezier curve path - const position = getPointOnBezierCurve( - edgePath, - positions.sourceX, - positions.sourceY, - positions.targetX, - positions.targetY, - progress - ); + const position = getPointOnBezierCurve(bezierPoints, progress); newPositions.set(signal.id, position); }); - setSignalPositions(newPositions); + // Only update if component is still mounted + if (isMountedRef.current) { + setSignalPositions(newPositions); + } }, 16); // ~60fps - return () => clearInterval(interval); - }, [signals, edgePath, positions]); + return () => { + isMountedRef.current = false; + clearInterval(interval); + }; + }, [signals, bezierPoints]); return ( <> @@ -118,3 +137,116 @@ export function AnimatedSVGEdge({ ); } + +function AnimatedEdge({ + id, + edgePath, + hasSignals, +}: Pick & { + edgePath: string; + hasSignals: boolean; +}) { + return ( + + ); +} + +type BezierPoints = { + startX: number; + startY: number; + cp1X: number; + cp1Y: number; + cp2X: number; + cp2Y: number; + endX: number; + endY: number; + isLinear: boolean; +}; + +/** + * Parse SVG path string once and extract control points. + * This is called only when the path changes, not on every animation frame. + */ +function parseBezierPath( + path: string, + sourceX: number, + sourceY: number, + targetX: number, + targetY: number +): BezierPoints { + // Parse the SVG path to extract control points + // Format: M x,y C cx1,cy1 cx2,cy2 x,y + const pathMatch = path.match( + /M\s*([\d.-]+),([\d.-]+)\s*C\s*([\d.-]+),([\d.-]+)\s*([\d.-]+),([\d.-]+)\s*([\d.-]+),([\d.-]+)/ + ); + + if (!pathMatch) { + // Fallback to linear interpolation - return a flag to indicate this + return { + startX: sourceX, + startY: sourceY, + cp1X: sourceX, + cp1Y: sourceY, + cp2X: targetX, + cp2Y: targetY, + endX: targetX, + endY: targetY, + isLinear: true, + }; + } + + const [, startX, startY, cp1X, cp1Y, cp2X, cp2Y, endX, endY] = pathMatch.map(Number); + + return { + startX, + startY, + cp1X, + cp1Y, + cp2X, + cp2Y, + endX, + endY, + isLinear: false, + }; +} + +/** + * Calculate position along cubic Bezier curve using the formula: + * B(t) = (1-t)³P₀ + 3(1-t)²tP₁ + 3(1-t)t²P₂ + t³P₃ + */ +function getPointOnBezierCurve(points: BezierPoints, progress: number): { x: number; y: number } { + if (points.isLinear) { + // Fast path for linear interpolation + return { + x: points.startX + (points.endX - points.startX) * progress, + y: points.startY + (points.endY - points.startY) * progress, + }; + } + + const t = progress; + const oneMinusT = 1 - t; + const oneMinusTSquared = oneMinusT * oneMinusT; + const oneMinusTCubed = oneMinusTSquared * oneMinusT; + const tSquared = t * t; + const tCubed = tSquared * t; + + const x = + oneMinusTCubed * points.startX + + 3 * oneMinusTSquared * t * points.cp1X + + 3 * oneMinusT * tSquared * points.cp2X + + tCubed * points.endX; + + const y = + oneMinusTCubed * points.startY + + 3 * oneMinusTSquared * t * points.cp1Y + + 3 * oneMinusT * tSquared * points.cp2Y + + tCubed * points.endY; + + return { x, y }; +} diff --git a/apps/electron-app/src/render/components/react-flow/nodes/Button.tsx b/apps/electron-app/src/render/components/react-flow/nodes/Button.tsx index 427bd965..cc84d38b 100644 --- a/apps/electron-app/src/render/components/react-flow/nodes/Button.tsx +++ b/apps/electron-app/src/render/components/react-flow/nodes/Button.tsx @@ -1,4 +1,4 @@ -import type { ButtonData, ButtonValueType } from '@microflow/hardware'; +import { dataSchema, type Data, type Value } from '@microflow/runtime/src/button/button.types'; import { Icons } from '@microflow/ui'; import { Position } from '@xyflow/react'; import { MODES } from '../../../../common/types'; @@ -23,7 +23,7 @@ export function Button(props: Props) { } function Value() { - const value = useNodeValue(false); + const value = useNodeValue(false); if (!value) return ; return ; @@ -34,7 +34,7 @@ const PULL_UP = 1; const PULL_DOWN = 2; function Settings() { - const data = useNodeData(); + const data = useNodeData(); const requiresPullup = data.isPullup || data.isPulldown; const pins = usePins(requiresPullup ? [MODES.PULLUP, MODES.INPUT] : [MODES.INPUT]); @@ -76,16 +76,12 @@ function Settings() { return <>{render()}; } -type Props = BaseNode; +type Props = BaseNode; Button.defaultProps = { data: { + ...dataSchema.parse({}), group: 'hardware', tags: ['input', 'digital'], - holdtime: 500, - isPulldown: false, - isPullup: false, - invert: false, - pin: 6, icon: 'PointerIcon', label: 'Button', description: 'Detect when a physical button is pressed or released', diff --git a/apps/electron-app/src/render/components/react-flow/nodes/Calculate.tsx b/apps/electron-app/src/render/components/react-flow/nodes/Calculate.tsx index 90704e84..4fbb6ac1 100644 --- a/apps/electron-app/src/render/components/react-flow/nodes/Calculate.tsx +++ b/apps/electron-app/src/render/components/react-flow/nodes/Calculate.tsx @@ -1,4 +1,8 @@ -import { CalculateData } from '@microflow/hardware'; +import { + type Data, + type Value, + dataSchema, +} from '@microflow/runtime/src/calculate/calculate.types'; import { BaseNode, NodeContainer, useNodeControls, useNodeData } from './Node'; import { Handle } from '../Handle'; import { Position } from '@xyflow/react'; @@ -17,7 +21,7 @@ export function Calculate(props: Props) { } function Value() { - const data = useNodeData(); + const data = useNodeData(); switch (data.function) { case 'add': @@ -46,7 +50,7 @@ function Value() { } function Settings() { - const data = useNodeData(); + const data = useNodeData(); const { render } = useNodeControls({ function: { value: data.function, @@ -68,10 +72,10 @@ function Settings() { return <>{render()}; } -type Props = BaseNode; +type Props = BaseNode; Calculate.defaultProps = { data: { - function: 'add', + ...dataSchema.parse({}), group: 'flow', icon: 'CalculatorIcon', tags: ['transformation'], diff --git a/apps/electron-app/src/render/components/react-flow/nodes/Compare.tsx b/apps/electron-app/src/render/components/react-flow/nodes/Compare.tsx index 78c1555a..d8537fca 100644 --- a/apps/electron-app/src/render/components/react-flow/nodes/Compare.tsx +++ b/apps/electron-app/src/render/components/react-flow/nodes/Compare.tsx @@ -1,9 +1,16 @@ -import type { CompareData, CompateValueType } from '@microflow/hardware'; +import { + type Data, + RangeNumberData, + SingleNumberData, + TextData, + type Value, + dataSchema, +} from '@microflow/runtime/src/compare/compare.types'; import { COMPARE_SUB_VALIDATORS, - COMPARE_VALIDATORS, CompareSubValidator, -} from '@microflow/hardware/contants'; + CompareValidator, +} from '@microflow/runtime/src/compare/compare.constants'; import { Position } from '@xyflow/react'; import { useEffect, useMemo, useRef, useState } from 'react'; import { Handle } from '../Handle'; @@ -27,28 +34,21 @@ export function Compare(props: Props) { const formatter = new Intl.NumberFormat('en-US'); function Value() { - const value = useNodeValue(false); - const data = useNodeData(); + const value = useNodeValue(false); + const data = useNodeData(); const textValue = useMemo(() => { switch (data.validator) { case 'boolean': return 'boolean'; case 'number': - switch (data.subValidator) { - case 'even': - case 'odd': - return `is ${data.subValidator}`; - case 'equal to': - case 'less than': - case 'greater than': - return `is ${data.subValidator} ${formatter.format(data.numberCompare)}`; - case 'between': - case 'outside': - return `is ${data.subValidator} ${formatter.format(data.rangeCompare?.min)} and ${formatter.format(data.rangeCompare?.max)}`; - } + return `is ${data.subValidator} ${formatter.format(data.number)}`; + case 'oddEven': + return `is ${data.subValidator}`; + case 'range': + return `is ${data.subValidator} ${formatter.format(data.range.min)} and ${formatter.format(data.range.max)}`; case 'text': - return `is ${data.subValidator} "${data.textCompare}"`; + return `is ${data.subValidator} "${data.text}"`; default: return ''; } @@ -64,82 +64,69 @@ function Value() { } function Settings() { - const [subValidatorOptions, setSubValidatorOptions] = useState( - [] - ); - const data = useNodeData(); - const prevValidatorRef = useRef(data.validator); + const data = useNodeData(); - const { render, set } = useNodeControls( + const { render, setNodeData } = useNodeControls( { validator: { value: data.validator, - options: [...COMPARE_VALIDATORS], + options: { + boolean: 'boolean', + number: 'number', + parity: 'oddEven', + range: 'range', + text: 'text', + }, label: 'validate that a', + onChange: (event: CompareValidator) => { + setNodeData({ + ...data, + validator: event, + subValidator: COMPARE_SUB_VALIDATORS[event].at(0), + }); + }, }, subValidator: { label: 'is', value: data.subValidator, - options: subValidatorOptions, + options: COMPARE_SUB_VALIDATORS[data.validator], render: get => get('validator') !== 'boolean', }, - rangeCompare: { - value: (data as { rangeCompare: { min: number; max: number } }).rangeCompare ?? { + range: { + value: (data as RangeNumberData).range ?? { min: 100, max: 500, }, label: '', joystick: false, - render: get => ['between', 'outside'].includes(get('subValidator')), + render: get => get('validator') === 'range', }, - numberCompare: { - value: (data as { numberCompare: number }).numberCompare ?? 0, + number: { + value: (data as SingleNumberData).number ?? 0, label: '', step: 1, - render: get => - get('validator') === 'number' && - !['between', 'outside', 'even', 'odd'].includes(get('subValidator')), + render: get => get('validator') === 'number', }, - textCompare: { - value: (data as { textCompare: string }).textCompare ?? '', + text: { + value: (data as TextData).text ?? '', label: '', render: get => get('validator') === 'text', }, }, - [subValidatorOptions] + [data.validator] ); - useEffect(() => { - const options = [...COMPARE_SUB_VALIDATORS[data.validator]]; - setSubValidatorOptions(options); - }, [data.validator]); // eslint-disable-line react-hooks/exhaustive-deps - - useEffect(() => { - const options = [...COMPARE_SUB_VALIDATORS[data.validator]]; - const isValidSubValidator = options.includes(data.subValidator); - - if (prevValidatorRef.current !== data.validator && !isValidSubValidator) { - const defaultSubValidator = options.at(0); - if (defaultSubValidator) { - set({ subValidator: defaultSubValidator }); - } - } - - prevValidatorRef.current = data.validator; - }, [data.validator]); // eslint-disable-line react-hooks/exhaustive-deps - return <>{render()}; } -type Props = BaseNode; +type Props = BaseNode; Compare.defaultProps = { data: { + ...dataSchema.parse({ validator: 'boolean' }), group: 'flow', tags: ['control'], label: 'Compare', icon: 'ShieldCheckIcon', - validator: 'boolean', - subValidator: 'true', description: 'Check if a value meets certain conditions and send different signals based on the result', } satisfies Props['data'], diff --git a/apps/electron-app/src/render/components/react-flow/nodes/Constant.tsx b/apps/electron-app/src/render/components/react-flow/nodes/Constant.tsx index 76e92355..fc22c91d 100644 --- a/apps/electron-app/src/render/components/react-flow/nodes/Constant.tsx +++ b/apps/electron-app/src/render/components/react-flow/nodes/Constant.tsx @@ -1,4 +1,4 @@ -import { ConstantData } from '@microflow/hardware'; +import { type Data, type Value, dataSchema } from '@microflow/runtime/src/constant/constant.types'; import { BaseNode, NodeContainer, useNodeControls, useNodeData } from './Node'; import { Handle } from '../Handle'; import { Position } from '@xyflow/react'; @@ -6,6 +6,8 @@ import { Position } from '@xyflow/react'; const numberFormat = new Intl.NumberFormat(); export function Constant(props: Props) { + console.log(dataSchema.parse({})); + return ( @@ -16,13 +18,13 @@ export function Constant(props: Props) { } function Value() { - const data = useNodeData(); + const data = useNodeData(); return
{numberFormat.format(data.value)}
; } function Settings() { - const data = useNodeData(); + const data = useNodeData(); const { render } = useNodeControls({ value: { value: data.value, step: 1 }, }); @@ -30,10 +32,10 @@ function Settings() { return <>{render()}; } -type Props = BaseNode; +type Props = BaseNode; Constant.defaultProps = { data: { - value: 4, + ...dataSchema.parse({ value: 1337 }), group: 'flow', tags: ['generator'], label: 'Constant', diff --git a/apps/electron-app/src/render/components/react-flow/nodes/Counter.tsx b/apps/electron-app/src/render/components/react-flow/nodes/Counter.tsx index ae5155e9..deee3d0b 100644 --- a/apps/electron-app/src/render/components/react-flow/nodes/Counter.tsx +++ b/apps/electron-app/src/render/components/react-flow/nodes/Counter.tsx @@ -1,4 +1,4 @@ -import type { CounterData, CounterValueType } from '@microflow/hardware'; +import { type Data, type Value, dataSchema } from '@microflow/runtime/src/counter/counter.types'; import { Position } from '@xyflow/react'; import { Handle } from '../Handle'; import { BaseNode, NodeContainer, useNodeControls } from './Node'; @@ -21,7 +21,7 @@ export function Counter(props: Props) { } function Value() { - const value = useNodeValue(0); + const value = useNodeValue(0); return
{numberFormat.format(value)}
; } @@ -32,9 +32,10 @@ function Settings() { return <>{render()}; } -type Props = BaseNode; +type Props = BaseNode; Counter.defaultProps = { data: { + ...dataSchema.parse({}), group: 'flow', tags: ['control', 'information'], label: 'Counter', diff --git a/apps/electron-app/src/render/components/react-flow/nodes/Delay.tsx b/apps/electron-app/src/render/components/react-flow/nodes/Delay.tsx index 8c000116..4e9aa96d 100644 --- a/apps/electron-app/src/render/components/react-flow/nodes/Delay.tsx +++ b/apps/electron-app/src/render/components/react-flow/nodes/Delay.tsx @@ -1,4 +1,4 @@ -import { DelayData } from '@microflow/hardware'; +import { type Data, type Value, dataSchema } from '@microflow/runtime/src/delay/delay.types'; import { BaseNode, NodeContainer, useNodeControls, useNodeData } from './Node'; import { Handle } from '../Handle'; import { Position } from '@xyflow/react'; @@ -16,7 +16,7 @@ export function Delay(props: Props) { } function Value() { - const data = useNodeData(); + const data = useNodeData(); return ( (); + const data = useNodeData(); const { render } = useNodeControls({ delay: { min: 100, @@ -45,15 +45,14 @@ function Settings() { return <>{render()}; } -type Props = BaseNode; +type Props = BaseNode; Delay.defaultProps = { data: { + ...dataSchema.parse({}), group: 'flow', tags: ['control', 'event'], label: 'Delay', icon: 'SnailIcon', - delay: 1000, - forgetPrevious: false, description: 'Wait for a specified amount of time before sending a signal forward', } satisfies Props['data'], }; diff --git a/apps/electron-app/src/render/components/react-flow/nodes/Figma.tsx b/apps/electron-app/src/render/components/react-flow/nodes/Figma.tsx index a50ea158..bed516d6 100644 --- a/apps/electron-app/src/render/components/react-flow/nodes/Figma.tsx +++ b/apps/electron-app/src/render/components/react-flow/nodes/Figma.tsx @@ -1,17 +1,14 @@ -import type { FigmaData, FigmaValueType, RGBA } from '@microflow/hardware'; -import { - FigmaVariable, - useFigmaVariable, - useFigmaVariables, -} from '@microflow/mqtt-provider/src/stores/figma'; +import { type Data, type Value, dataSchema } from '@microflow/runtime/src/figma/figma.types'; +import { useFigmaVariable, useFigmaVariables } from '@microflow/mqtt-provider/src/stores/figma'; import { useMqttStore } from '@microflow/mqtt-provider/src/stores/mqtt'; import { Icons, Switch, Tooltip, TooltipContent, TooltipTrigger } from '@microflow/ui'; import { Position, useUpdateNodeInternals } from '@xyflow/react'; -import { useEffect, useMemo, useRef } from 'react'; +import { useEffect, useRef } from 'react'; import { Handle } from '../Handle'; import { BaseNode, NodeContainer, useDeleteHandles, useNodeControls, useNodeData } from './Node'; import { RgbaColorPicker } from 'react-colorful'; import { useNodeValue } from '../../../stores/node-data'; +import { type RGBA } from '@microflow/runtime/src/types'; export function Figma(props: Props) { const { connectedClients } = useMqttStore(); @@ -33,7 +30,7 @@ export function Figma(props: Props) { function ValueSync(props: { variableId?: string; nodeId: string }) { const { value: figmaValue } = useFigmaVariable(props.variableId); - const nodeValue = useNodeValue(false); + const nodeValue = useNodeValue(false); const { publish, appName, uniqueId } = useMqttStore(); @@ -122,7 +119,7 @@ function FigmaHandles(props: { variableId?: string; id: string }) { } function Settings() { - const data = useNodeData(); + const data = useNodeData(); const variables = useFigmaVariables(); const deleteHandles = useDeleteHandles(); @@ -199,8 +196,8 @@ const numberFormat = new Intl.NumberFormat('en-US', { }); function Value() { - const data = useNodeData(); - const value = useNodeValue(data.initialValue!); + const data = useNodeData(); + const value = useNodeValue(data.initialValue!); const { variable } = useFigmaVariable(data.variableId); const variables = useFigmaVariables(); @@ -261,25 +258,15 @@ function Value() { } } -type Props = BaseNode; +type Props = BaseNode; Figma.defaultProps = { data: { + ...dataSchema.parse({}), group: 'external', tags: ['output', 'input'], label: 'Figma', - variableId: '', icon: 'FigmaIcon', - resolvedType: 'STRING', - initialValue: '', - debounceTime: 100, description: 'Connect your flow to Figma design files to control colors, numbers, and text from your device', } satisfies Props['data'], }; - -const DEFAULT_FIGMA_VALUE_PER_TYPE: Record = { - BOOLEAN: false, - FLOAT: 0, - STRING: '-', - COLOR: { r: 0, g: 0, b: 0, a: 1 }, -}; diff --git a/apps/electron-app/src/render/components/react-flow/nodes/Gate.tsx b/apps/electron-app/src/render/components/react-flow/nodes/Gate.tsx index d2387220..1295407f 100644 --- a/apps/electron-app/src/render/components/react-flow/nodes/Gate.tsx +++ b/apps/electron-app/src/render/components/react-flow/nodes/Gate.tsx @@ -1,9 +1,8 @@ import { Position } from '@xyflow/react'; import { Handle } from '../Handle'; import { BaseNode, NodeContainer, useNodeControls, useNodeData } from './Node'; -import { type GateData, type GateValueType } from '@microflow/hardware'; +import { type Data, type Value, dataSchema } from '@microflow/runtime/src/gate/gate.types'; import { useNodeValue } from '../../../stores/node-data'; -import { uid } from '../../../../common/uuid'; export function Gate(props: Props) { return ( @@ -19,8 +18,8 @@ export function Gate(props: Props) { } function Value() { - const data = useNodeData(); - const value = useNodeValue(false); + const data = useNodeData(); + const value = useNodeValue(false); return (
@@ -31,7 +30,7 @@ function Value() { } function Settings() { - const data = useNodeData(); + const data = useNodeData(); const { render } = useNodeControls({ gate: { value: data.gate, @@ -42,21 +41,20 @@ function Settings() { return <>{render()}; } -type Props = BaseNode; +type Props = BaseNode; Gate.defaultProps = { data: { + ...dataSchema.parse({}), group: 'flow', tags: ['control'], label: 'Gate', icon: 'CircuitBoardIcon', - gate: 'and', - description: - 'Combine multiple signals together using simple rules to make decisions', + description: 'Combine multiple signals together using simple rules to make decisions', } satisfies Props['data'], }; const DEFAULT_ICON_SIZE = 60; -function GateIcon(props: { gate: GateData['gate']; size?: number; className?: string }) { +function GateIcon(props: { gate: Data['gate']; size?: number; className?: string }) { switch (props.gate) { case 'and': return ( diff --git a/apps/electron-app/src/render/components/react-flow/nodes/Interval.tsx b/apps/electron-app/src/render/components/react-flow/nodes/Interval.tsx index dd098d82..515f1047 100644 --- a/apps/electron-app/src/render/components/react-flow/nodes/Interval.tsx +++ b/apps/electron-app/src/render/components/react-flow/nodes/Interval.tsx @@ -1,9 +1,9 @@ -import { type IntervalData, type IntervalValueType } from '@microflow/hardware'; +import { type Data, type Value, dataSchema } from '@microflow/runtime/src/interval/interval.types'; import { Position } from '@xyflow/react'; import { Handle } from '../Handle'; import { BaseNode, NodeContainer, useNodeControls, useNodeData } from './Node'; import { useNodeValue } from '../../../stores/node-data'; -import { MIN_INTERVAL_IN_MS } from '@microflow/hardware/contants'; +import { MIN_INTERVAL_IN_MS } from '@microflow/runtime/src/interval/interval.constants'; const numberFormat = new Intl.NumberFormat(); @@ -20,8 +20,8 @@ export function Interval(props: Props) { } function Value() { - const data = useNodeData(); - const value = useNodeValue(0); + const data = useNodeData(); + const value = useNodeValue(0); return (
@@ -32,7 +32,7 @@ function Value() { } function Settings() { - const data = useNodeData(); + const data = useNodeData(); const { render } = useNodeControls({ interval: { value: data.interval, min: MIN_INTERVAL_IN_MS, step: 100, label: 'interval (ms)' }, }); @@ -40,15 +40,14 @@ function Settings() { return <>{render()}; } -type Props = BaseNode; +type Props = BaseNode; Interval.defaultProps = { data: { + ...dataSchema.parse({}), group: 'flow', tags: ['event', 'generator'], label: 'Interval', icon: 'TimerIcon', - autoStart: true, - interval: 500, description: 'Automatically send a signal at regular time intervals, like a timer', } satisfies Props['data'], }; diff --git a/apps/electron-app/src/render/components/react-flow/nodes/Led.tsx b/apps/electron-app/src/render/components/react-flow/nodes/Led.tsx index ad0995b6..08b7cb6c 100644 --- a/apps/electron-app/src/render/components/react-flow/nodes/Led.tsx +++ b/apps/electron-app/src/render/components/react-flow/nodes/Led.tsx @@ -1,5 +1,5 @@ -import type { LedData, LedValueType } from '@microflow/hardware'; -import { Icon, Icons } from '@microflow/ui'; +import { type Data, type Value, dataSchema } from '@microflow/runtime/src/led/led.types'; +import { Icons } from '@microflow/ui'; import { Position } from '@xyflow/react'; import { MODES } from '../../../../common/types'; import { Handle } from '../Handle'; @@ -35,8 +35,8 @@ export function Led(props: Props) { } function Value() { - const data = useNodeData(); - const value = useNodeValue(0); + const data = useNodeData(); + const value = useNodeValue(0); switch (data.subType) { case 'vibration': @@ -68,7 +68,7 @@ function VibrationValue(props: { value: number }) { } function Settings() { - const data = useNodeData(); + const data = useNodeData(); const pins = usePins([MODES.INPUT]); const { render } = useNodeControls( @@ -81,14 +81,14 @@ function Settings() { return <>{render()}; } -type Props = BaseNode; +type Props = BaseNode; Led.defaultProps = { data: { + ...dataSchema.parse({}), group: 'hardware', tags: ['output', 'analog', 'digital'], label: 'LED', icon: 'LightbulbIcon', - pin: 13, description: 'Turn a light on or off, or control its brightness', } satisfies Props['data'], }; @@ -101,7 +101,6 @@ Vibration.defaultProps = { tags: ['output', 'analog', 'digital'], subType: 'vibration', icon: 'VibrateIcon', - baseType: 'Led', description: 'Make a device vibrate with different intensities', } satisfies Props['data'], }; diff --git a/apps/electron-app/src/render/components/react-flow/nodes/Llm.tsx b/apps/electron-app/src/render/components/react-flow/nodes/Llm.tsx index 87e762bf..71161872 100644 --- a/apps/electron-app/src/render/components/react-flow/nodes/Llm.tsx +++ b/apps/electron-app/src/render/components/react-flow/nodes/Llm.tsx @@ -10,7 +10,7 @@ import { } from './Node'; import { useNodeValue } from '../../../stores/node-data'; import { useEffect, useMemo, useRef, useState } from 'react'; -import { LlmData, LlmValueType } from '@microflow/hardware'; +import { type Data, type Value, dataSchema } from '@microflow/runtime/src/llm/llm.types'; import { IconWithValue } from '../IconWithValue'; import { folder } from 'leva'; import { toast } from '@ui/index'; @@ -28,7 +28,7 @@ export function Llm(props: Props) { } function DynamicHandles() { - const data = useNodeData(); + const data = useNodeData(); const id = useNodeId(); const previousHandles = useRef([]); const deleteHandles = useDeleteHandles(); @@ -65,8 +65,8 @@ function DynamicHandles() { } function Value() { - const data = useNodeData(); - const value = useNodeValue(false); + const data = useNodeData(); + const value = useNodeValue(false); return ( ([]); - const data = useNodeData(); + const data = useNodeData(); const { render } = useNodeControls( { @@ -145,29 +145,14 @@ function Settings() { return <>{render()}; } -type Props = BaseNode; +type Props = BaseNode; Llm.defaultProps = { data: { + ...dataSchema.parse({}), group: 'external', tags: ['output', 'transformation'], label: 'LLM', icon: 'BotMessageSquareIcon', - provider: 'ollama', - model: '', - prompt: '', - system: '', - baseUrl: 'http://localhost:11434', - frequencyPenalty: 0.5, - temperature: 1.0, - topK: 50, - topP: 0.9, - mirostat: 0, - mirostatTau: 5, - mirostatEta: 0.1, - repeatPenalty: 1.1, - typicalP: 0.9, - presencePenalty: 0.5, - repeatLastN: 64, description: 'Use AI to generate text responses based on what you ask it', } satisfies Props['data'], }; diff --git a/apps/electron-app/src/render/components/react-flow/nodes/Monitor.tsx b/apps/electron-app/src/render/components/react-flow/nodes/Monitor.tsx index 6c14c3bc..1758ca01 100644 --- a/apps/electron-app/src/render/components/react-flow/nodes/Monitor.tsx +++ b/apps/electron-app/src/render/components/react-flow/nodes/Monitor.tsx @@ -1,7 +1,7 @@ import { Position } from '@xyflow/react'; import { Handle } from '../Handle'; import { BaseNode, NodeContainer, useNodeControls, useNodeData } from './Node'; -import type { DebugValueType, MonitorData } from '@microflow/hardware'; +import { type Data, type Value, dataSchema } from '@microflow/runtime/src/monitor/monitor.types'; import { useNodeValue } from '../../../stores/node-data'; import { useEffect, useRef } from 'react'; import { LevaPanel, monitor, useControls, useCreateStore } from 'leva'; @@ -15,10 +15,16 @@ export function Monitor(props: Props) { ); } + +const numberFormat = new Intl.NumberFormat('en-US', { + minimumFractionDigits: 0, + maximumFractionDigits: 4, +}); + function Value() { - const data = useNodeData(); + const data = useNodeData(); const store = useCreateStore(); - const value = useNodeValue(data.type === 'graph' ? 0 : ''); + const value = useNodeValue(data.type === 'graph' ? 0 : ''); const ref = useRef(value); @@ -45,18 +51,41 @@ function Value() { ); } - return ( -
- {String(value)} -
- ); + if (typeof value === 'number') { + return ; + } + + return ; } - return ; + return ( + <> + +
+ {typeof value === 'number' ? : } +
+ + ); +} + +function NumberValue(props: { value: Value }) { + return ( +
+ {numberFormat.format(Number(props.value))} +
+ ); +} + +function StringValue(props: { value: Value }) { + return ( +
+ {String(props.value)} +
+ ); } function Settings() { - const data = useNodeData(); + const data = useNodeData(); const { render } = useNodeControls({ type: { value: data.type, options: ['graph', 'raw'] }, fps: { @@ -71,15 +100,14 @@ function Settings() { return <>{render()}; } -type Props = BaseNode; +type Props = BaseNode; Monitor.defaultProps = { data: { + ...dataSchema.parse({}), group: 'flow', tags: ['information', 'output'], label: 'Monitor', icon: 'MonitorIcon', - type: 'graph', - fps: 60, description: 'Watch and visualize the values flowing through your circuit in real-time', } satisfies Props['data'], }; diff --git a/apps/electron-app/src/render/components/react-flow/nodes/Motion.tsx b/apps/electron-app/src/render/components/react-flow/nodes/Motion.tsx index 27d8db3e..0ffffc23 100644 --- a/apps/electron-app/src/render/components/react-flow/nodes/Motion.tsx +++ b/apps/electron-app/src/render/components/react-flow/nodes/Motion.tsx @@ -1,5 +1,5 @@ -import type { MotionData, MotionValueType } from '@microflow/hardware'; -import { MOTION_CONTROLLERS } from '@microflow/hardware/contants'; +import { type Data, type Value, dataSchema } from '@microflow/runtime/src/motion/motion.types'; +import { MOTION_CONTROLLERS } from '@microflow/runtime/src/motion/motion.constants'; import { Icons } from '@microflow/ui'; import { Position } from '@xyflow/react'; import { MODES } from '../../../../common/types'; @@ -34,14 +34,14 @@ export function Motion(props: Props) { } function Value() { - const value = useNodeValue(false); + const value = useNodeValue(false); if (!value) return ; return ; } function Settings() { - const data = useNodeData(); + const data = useNodeData(); const pins = usePins( data.controller === 'HCSR501' ? [MODES.INPUT] : [MODES.INPUT, MODES.ANALOG], data.controller === 'HCSR501' ? [MODES.I2C, MODES.ANALOG] : [MODES.I2C] @@ -57,15 +57,14 @@ function Settings() { return <>{render()}; } -type Props = BaseNode; +type Props = BaseNode; Motion.defaultProps = { data: { + ...dataSchema.parse({}), group: 'hardware', tags: ['input', 'digital'], - pin: '8', icon: 'EyeIcon', label: 'Motion', - controller: 'HCSR501', description: 'Detect when something moves nearby, like a person walking past', } satisfies Props['data'], }; diff --git a/apps/electron-app/src/render/components/react-flow/nodes/Mqtt.tsx b/apps/electron-app/src/render/components/react-flow/nodes/Mqtt.tsx index aa9eedea..dffd53c8 100644 --- a/apps/electron-app/src/render/components/react-flow/nodes/Mqtt.tsx +++ b/apps/electron-app/src/render/components/react-flow/nodes/Mqtt.tsx @@ -1,4 +1,4 @@ -import type { MqttData, MqttValueType } from '@microflow/hardware'; +import { type Data, type Value, dataSchema } from '@microflow/runtime/src/mqtt/mqtt.types'; import { Position } from '@xyflow/react'; import { useEffect } from 'react'; import { Handle } from '../Handle'; @@ -36,7 +36,7 @@ export function Mqtt(props: Props) { function Subscriber() { const id = useNodeId(); - const data = useNodeData(); + const data = useNodeData(); const { subscribe } = useMqttStore(); useEffect(() => { @@ -67,8 +67,8 @@ function Subscriber() { function Value() { const { publish } = useMqttStore(); - const data = useNodeData(); - const value = useNodeValue(''); + const data = useNodeData(); + const value = useNodeValue(''); useEffect(() => { if (data.direction !== 'publish') return; @@ -89,7 +89,7 @@ function Settings() { const { setSettingsOpen } = useAppStore(); const deleteHandles = useDeleteHandles(); - const data = useNodeData(); + const data = useNodeData(); const { render } = useNodeControls({ direction: { value: data.direction, @@ -106,15 +106,14 @@ function Settings() { return <>{render()}; } -type Props = BaseNode; +type Props = BaseNode; Mqtt.defaultProps = { data: { + ...dataSchema.parse({}), group: 'external', tags: ['input', 'output'], label: 'MQTT', - direction: 'publish', icon: 'RadioTowerIcon', - topic: '', description: 'Send or receive messages over the internet to connect with other devices, apps, or online services', } satisfies Props['data'], diff --git a/apps/electron-app/src/render/components/react-flow/nodes/Node.tsx b/apps/electron-app/src/render/components/react-flow/nodes/Node.tsx index 21448a49..907d9044 100644 --- a/apps/electron-app/src/render/components/react-flow/nodes/Node.tsx +++ b/apps/electron-app/src/render/components/react-flow/nodes/Node.tsx @@ -297,7 +297,6 @@ export type BaseNode = {}> = Node< tags: NodeTag[]; icon: IconName; subType?: string; - baseType?: NodeType; label: string; description: string; } diff --git a/apps/electron-app/src/render/components/react-flow/nodes/Oscillator.tsx b/apps/electron-app/src/render/components/react-flow/nodes/Oscillator.tsx index 2502ac84..e4c0e154 100644 --- a/apps/electron-app/src/render/components/react-flow/nodes/Oscillator.tsx +++ b/apps/electron-app/src/render/components/react-flow/nodes/Oscillator.tsx @@ -1,4 +1,8 @@ -import type { OscillatorData } from '@microflow/hardware'; +import { + type Data, + type Value, + dataSchema, +} from '@microflow/runtime/src/oscillator/oscillator.types'; import { Position } from '@xyflow/react'; import { useMemo } from 'react'; import { Handle } from '../Handle'; @@ -20,7 +24,7 @@ export function Oscillator(props: Props) { } function Value() { - const data = useNodeData(); + const data = useNodeData(); const icon = useMemo((): IconName => { switch (data.waveform) { @@ -43,7 +47,7 @@ function Value() { } function Settings() { - const data = useNodeData(); + const data = useNodeData(); const { render } = useNodeControls({ waveform: { value: data.waveform, @@ -64,19 +68,14 @@ function Settings() { return <>{render()}; } -type Props = BaseNode; +type Props = BaseNode; Oscillator.defaultProps = { data: { + ...dataSchema.parse({}), group: 'flow', tags: ['generator', 'event'], label: 'Oscillator', icon: 'AudioWaveformIcon', - waveform: 'sinus', - period: 1000, - amplitude: 1, - phase: 0, - shift: 0, - autoStart: true, description: 'Create repeating patterns of numbers that go up and down, like waves', } satisfies Props['data'], }; diff --git a/apps/electron-app/src/render/components/react-flow/nodes/Pixel.tsx b/apps/electron-app/src/render/components/react-flow/nodes/Pixel.tsx new file mode 100644 index 00000000..edf3cb71 --- /dev/null +++ b/apps/electron-app/src/render/components/react-flow/nodes/Pixel.tsx @@ -0,0 +1,214 @@ +import { type Data, type Value, dataSchema } from '@microflow/runtime/src/pixel/pixel.types'; +import { COLORS } from '@microflow/runtime/src/pixel/pixel.constants'; +import { BaseNode, NodeContainer, useNodeControls, useNodeData } from './Node'; +import { Handle } from '../Handle'; +import { Position } from '@xyflow/react'; +import { usePins } from '../../../stores/board'; +import { MODES } from '../../../../common/types'; +import { reducePinsToOptions } from '../../../../common/pin'; +import { useNodeValue } from '../../../stores/node-data'; +import { folder } from 'leva'; +import { Tooltip, TooltipContent, TooltipTrigger } from '@ui/components/ui/tooltip'; +import { Icons } from '@microflow/ui'; +import { useMemo } from 'react'; + +export function Pixel(props: Props) { + return ( + + + + + + + + + + ); +} + +type GridItem = { index: number; row: number; col: number }; + +const LEDS_PER_ROW = 8; +const totalCols = LEDS_PER_ROW + 1; // +1 for the icon column + +function createSnakeLayout(length: number): GridItem[] { + const gridItems: GridItem[] = []; + + let ledIndex = 0; + let currentRow = 0; + + if (ledIndex < length) { + gridItems.push({ index: -1, row: currentRow, col: 0 }); // Icon + for (let i = 0; i < LEDS_PER_ROW - 1 && ledIndex < length; i++) { + gridItems.push({ index: ledIndex, row: currentRow, col: i + 1 }); + ledIndex++; + } + currentRow++; + + // Single LED on the right after first row + if (ledIndex < length) { + gridItems.push({ + index: ledIndex, + row: currentRow, + col: LEDS_PER_ROW - 1, + }); + ledIndex++; + currentRow++; + } + } + + // Continue with snake pattern: full row, then single LED, then full row, etc. + let goingRightToLeft = true; // After first row, next full row goes right-to-left + while (ledIndex < length) { + if (goingRightToLeft) { + // Full row: right to left (8 LEDs) + const rowLength = Math.min(LEDS_PER_ROW, length - ledIndex); + for (let i = 0; i < rowLength; i++) { + const col = LEDS_PER_ROW - 1 - i; + gridItems.push({ index: ledIndex, row: currentRow, col }); + ledIndex++; + } + currentRow++; + goingRightToLeft = false; + + // Single LED on the left after right-to-left row + if (ledIndex < length) { + gridItems.push({ index: ledIndex, row: currentRow, col: 0 }); + ledIndex++; + currentRow++; + } + } else { + // Full row: left to right (8 LEDs) + const rowLength = Math.min(LEDS_PER_ROW, length - ledIndex); + for (let i = 0; i < rowLength; i++) { + gridItems.push({ index: ledIndex, row: currentRow, col: i }); + ledIndex++; + } + currentRow++; + goingRightToLeft = true; + + // Single LED on the right after left-to-right row + if (ledIndex < length) { + gridItems.push({ + index: ledIndex, + row: currentRow, + col: LEDS_PER_ROW - 1, + }); + ledIndex++; + currentRow++; + } + } + } + + return gridItems; +} + +function Value() { + const data = useNodeData(); + const value = useNodeValue(Array(data.length).fill('#000000')); + + const gridItems = useMemo(() => createSnakeLayout(data.length), [data.length]); + + return ( +
+
+ {gridItems.map(item => { + if (item.index === -1) { + return ( +
+ +
+ ); + } + + const color = value[item.index] || '#000000'; + return ( + + +
+ + + LED {item.index + 1}: {color} + + + ); + })} +
+
{`${value.length} LEDs`}
+
+ ); +} + +function Settings() { + const data = useNodeData(); + const pins = usePins([MODES.OUTPUT], [MODES.ANALOG]); + + const { render } = useNodeControls({ + pin: { + value: data.pin, + options: pins.reduce(reducePinsToOptions, {}), + label: 'pin', + }, + length: { + value: data.length, + min: 1, + max: 144, + step: 1, + }, + advanced: folder( + { + gamma: { + value: data.gamma, + min: 0, + max: 10, + step: 0.1, + }, + color_order: { + value: data.color_order, + label: 'color order', + hint: 'The order of the colors in the pixel strip', + options: COLORS, + }, + }, + { collapsed: true } + ), + }); + + return <>{render()}; +} + +type Props = BaseNode; +Pixel.defaultProps = { + data: { + ...dataSchema.parse({}), + group: 'hardware', + tags: ['output', 'analog'], + label: 'LED Strip', + icon: 'RainbowIcon', + description: 'Control a strip of addressable RGB LEDs (WS2812, NeoPixel, etc.)', + } satisfies Props['data'], +}; diff --git a/apps/electron-app/src/render/components/react-flow/nodes/Proximity.tsx b/apps/electron-app/src/render/components/react-flow/nodes/Proximity.tsx index 49655977..1b5a623c 100644 --- a/apps/electron-app/src/render/components/react-flow/nodes/Proximity.tsx +++ b/apps/electron-app/src/render/components/react-flow/nodes/Proximity.tsx @@ -1,4 +1,8 @@ -import { ProximityData, ProximityValueType } from '@microflow/hardware'; +import { + type Data, + type Value, + dataSchema, +} from '@microflow/runtime/src/proximity/proximity.types'; import { BaseNode, NodeContainer, useNodeControls, useNodeData } from './Node'; import { Handle } from '../Handle'; import { Position } from '@xyflow/react'; @@ -6,6 +10,7 @@ import { useNodeValue } from '../../../stores/node-data'; import { usePins } from '../../../stores/board'; import { MODES } from '../../../../common/types'; import { reducePinsToOptions } from '../../../../common/pin'; +import { PROXIMITY_CONTROLLERS } from '@microflow/runtime/src/proximity/proximity.constants'; export function Proximity(props: Props) { return ( @@ -18,13 +23,13 @@ export function Proximity(props: Props) { } function Value() { - const value = useNodeValue(0); + const value = useNodeValue(0); return
{value}
; } function Settings() { - const data = useNodeData(); + const data = useNodeData(); const pins = usePins([MODES.INPUT, MODES.ANALOG]); const { render } = useNodeControls({ @@ -34,22 +39,20 @@ function Settings() { }, controller: { value: data.controller, - options: ['GP2Y0A21YK', 'GP2Y0A710K0F'], - }, // MB1000, MB1003, MB1020 + options: PROXIMITY_CONTROLLERS, + }, freq: { value: data.freq!, min: 10, label: 'frequency (ms)' }, }); return <>{render()}; } -type Props = BaseNode; +type Props = BaseNode; Proximity.defaultProps = { data: { + ...dataSchema.parse({}), group: 'hardware', tags: ['input', 'analog'], - freq: 25, - pin: 'A0', - controller: 'GP2Y0A21YK', label: 'Proximity', icon: 'TargetIcon', description: 'Measure how far away an object is from the sensor', diff --git a/apps/electron-app/src/render/components/react-flow/nodes/RGB.tsx b/apps/electron-app/src/render/components/react-flow/nodes/RGB.tsx index 4105d060..118abe07 100644 --- a/apps/electron-app/src/render/components/react-flow/nodes/RGB.tsx +++ b/apps/electron-app/src/render/components/react-flow/nodes/RGB.tsx @@ -1,4 +1,4 @@ -import { RgbData, RgbValueType } from '@microflow/hardware'; +import { type Data, type Value, dataSchema } from '@microflow/runtime/src/rgb/rgb.types'; import { BaseNode, NodeContainer, useNodeControls, useNodeData } from './Node'; import { Handle } from '../Handle'; import { Position } from '@xyflow/react'; @@ -23,7 +23,7 @@ export function Rgb(props: Props) { } function Value() { - const value = useNodeValue({ r: 0, g: 0, b: 0, a: 1 }); + const value = useNodeValue({ r: 0, g: 0, b: 0, a: 1 }); return (
@@ -34,7 +34,7 @@ function Value() { function Settings() { const pins = usePins([MODES.OUTPUT, MODES.PWM]); - const data = useNodeData(); + const data = useNodeData(); const { render } = useNodeControls({ red: { value: Array.isArray(data.pins) ? data.pins[0] : data.pins.red, @@ -54,19 +54,14 @@ function Settings() { return <>{render()}; } -type Props = BaseNode; +type Props = BaseNode; Rgb.defaultProps = { data: { + ...dataSchema.parse({}), group: 'hardware', tags: ['output', 'analog'], label: 'RGB', icon: 'PaletteIcon', - pins: { - red: 9, - green: 10, - blue: 11, - }, - isAnode: false, description: 'Control a colored light that can display any color by mixing red, green, and blue', } satisfies Props['data'], diff --git a/apps/electron-app/src/render/components/react-flow/nodes/RangeMap.tsx b/apps/electron-app/src/render/components/react-flow/nodes/RangeMap.tsx index 9f4c0b0b..a837164f 100644 --- a/apps/electron-app/src/render/components/react-flow/nodes/RangeMap.tsx +++ b/apps/electron-app/src/render/components/react-flow/nodes/RangeMap.tsx @@ -1,4 +1,4 @@ -import type { RangeMapData, RangeMapValueType } from '@microflow/hardware'; +import { type Data, type Value, dataSchema } from '@microflow/runtime/src/rangemap/rangemap.types'; import { Icons } from '@microflow/ui'; import { Position } from '@xyflow/react'; import { Handle } from '../Handle'; @@ -21,8 +21,8 @@ export function RangeMap(props: Props) { } function Value() { - const [from, to] = useNodeValue([0, 0]); - const data = useNodeData(); + const [from, to] = useNodeValue([0, 0]); + const data = useNodeData(); return (
@@ -50,7 +50,7 @@ function Value() { } function Settings() { - const data = useNodeData(); + const data = useNodeData(); const { render } = useNodeControls({ from: { value: data.from, step: 1, joystick: false }, to: { value: data.to, step: 1, joystick: false }, @@ -59,13 +59,12 @@ function Settings() { return <>{render()}; } -type Props = BaseNode; +type Props = BaseNode; RangeMap.defaultProps = { data: { + ...dataSchema.parse({}), group: 'flow', tags: ['transformation'], - from: { min: 0, max: 1023 }, - to: { min: 0, max: 1023 }, icon: 'SeparatorVerticalIcon', label: 'Map', description: diff --git a/apps/electron-app/src/render/components/react-flow/nodes/Relay.tsx b/apps/electron-app/src/render/components/react-flow/nodes/Relay.tsx index 69d9aa00..b0dbdb02 100644 --- a/apps/electron-app/src/render/components/react-flow/nodes/Relay.tsx +++ b/apps/electron-app/src/render/components/react-flow/nodes/Relay.tsx @@ -1,4 +1,4 @@ -import { RelayData, RelayValueType } from '@microflow/hardware'; +import { type Data, type Value, dataSchema } from '@microflow/runtime/src/relay/relay.types'; import { BaseNode, NodeContainer, useNodeControls, useNodeData } from './Node'; import { Handle } from '../Handle'; import { Position } from '@xyflow/react'; @@ -21,7 +21,7 @@ export function Relay(props: Props) { } function Value() { - const value = useNodeValue(false); + const value = useNodeValue(false); if (!value) return ; return ; @@ -29,7 +29,7 @@ function Value() { function Settings() { const pins = usePins([MODES.OUTPUT]); - const data = useNodeData(); + const data = useNodeData(); const { render } = useNodeControls( { pin: { value: data.pin, options: pins.reduce(reducePinsToOptions, {}) }, @@ -47,15 +47,14 @@ function Settings() { return <>{render()}; } -type Props = BaseNode; +type Props = BaseNode; Relay.defaultProps = { data: { + ...dataSchema.parse({}), group: 'hardware', label: 'Relay', - pin: 10, icon: 'ZapIcon', tags: ['output', 'analog', 'digital'], - type: 'NO', description: 'Safely turn on or off devices that need more power, like lights, motors, or appliances', } satisfies Props['data'], diff --git a/apps/electron-app/src/render/components/react-flow/nodes/Sensor.tsx b/apps/electron-app/src/render/components/react-flow/nodes/Sensor.tsx index 189d882d..1ebfcf07 100644 --- a/apps/electron-app/src/render/components/react-flow/nodes/Sensor.tsx +++ b/apps/electron-app/src/render/components/react-flow/nodes/Sensor.tsx @@ -1,4 +1,4 @@ -import type { SensorData, SensorValueType } from '@microflow/hardware'; +import { type Data, type Value, dataSchema } from '@microflow/runtime/src/sensor/sensor.types'; import { cva, Icons, Progress, Switch, VariantProps } from '@microflow/ui'; import { Position } from '@xyflow/react'; import { MODES } from '../../../../common/types'; @@ -20,8 +20,8 @@ export function Sensor(props: Props) { } function Value() { - const value = useNodeValue(0); - const data = useNodeData(); + const value = useNodeValue(0); + const data = useNodeData(); const progress = Math.round((value / 1023) * 100); @@ -104,7 +104,7 @@ const hallEffect = cva('transition-all', { }); function Settings() { - const data = useNodeData(); + const data = useNodeData(); const pins = usePins([MODES.INPUT, MODES.ANALOG]); const { render } = useNodeControls( { @@ -125,16 +125,14 @@ function Settings() { return <>{render()}; } -type Props = BaseNode; +type Props = BaseNode; Sensor.defaultProps = { data: { + ...dataSchema.parse({}), group: 'hardware', tags: ['input', 'analog'], - pin: 'A0', label: 'Analog Sensor', icon: 'GaugeIcon', - threshold: 1, - freq: 25, description: 'Measure values that change smoothly, like temperature, pressure, or how bright something is', } satisfies Props['data'], @@ -148,7 +146,6 @@ DigitalSensor.defaultProps = { tags: ['input', 'digital'], type: 'digital', icon: 'PowerIcon', - baseType: 'Sensor', description: 'Detect when something is on or off, like a switch or motion detector', } satisfies Props['data'], }; @@ -161,7 +158,6 @@ Tilt.defaultProps = { tags: ['input', 'analog', 'digital'], subType: 'tilt', icon: 'MoveUpIcon', - baseType: 'Sensor', threshold: 10, description: 'Detect when an object is tilted or rotated from its normal position', } satisfies Props['data'], @@ -175,7 +171,6 @@ Ldr.defaultProps = { tags: ['input', 'analog'], subType: 'ldr', icon: 'SunIcon', - baseType: 'Sensor', description: 'Measure how bright or dark the surrounding environment is', } satisfies Props['data'], }; @@ -187,7 +182,6 @@ Potentiometer.defaultProps = { label: 'Potentiometer', tags: ['input', 'analog'], subType: 'potentiometer', - baseType: 'Sensor', icon: 'CircleArrowOutUpLeftIcon', description: 'Read values from a knob or slider that you can turn or move to control something', } satisfies Props['data'], @@ -200,7 +194,6 @@ Force.defaultProps = { label: 'Force', tags: ['input', 'analog'], subType: 'force', - baseType: 'Sensor', icon: 'BicepsFlexedIcon', description: 'Measure how much pressure or force is being applied to a surface', } satisfies Props['data'], @@ -213,7 +206,6 @@ HallEffect.defaultProps = { label: 'Hall Effect', tags: ['input', 'analog'], subType: 'hall-effect', - baseType: 'Sensor', icon: 'MagnetIcon', description: 'Detect when a magnet or magnetic object is nearby and how strong it is', } satisfies Props['data'], diff --git a/apps/electron-app/src/render/components/react-flow/nodes/Servo.tsx b/apps/electron-app/src/render/components/react-flow/nodes/Servo.tsx index d2a96325..62b7ad95 100644 --- a/apps/electron-app/src/render/components/react-flow/nodes/Servo.tsx +++ b/apps/electron-app/src/render/components/react-flow/nodes/Servo.tsx @@ -1,4 +1,4 @@ -import type { ServoData, ServoValueType } from '@microflow/hardware'; +import { type Data, type Value, dataSchema } from '@microflow/runtime/src/servo/servo.types'; import { Icons } from '@microflow/ui'; import { Position } from '@xyflow/react'; import { MODES } from '../../../../common/types'; @@ -38,8 +38,8 @@ export function Servo(props: Props) { } function Value() { - const data = useNodeData(); - const value = useNodeValue(data.range.min); + const data = useNodeData(); + const value = useNodeValue(data.range.min); if (data.type === 'continuous') { if (!value) return ; @@ -70,7 +70,7 @@ function Value() { } function Settings() { - const data = useNodeData(); + const data = useNodeData(); const deleteHandles = useDeleteHandles(); const pins = usePins([MODES.OUTPUT, MODES.PWM]); @@ -99,16 +99,14 @@ function Settings() { return <>{render()}; } -type Props = BaseNode; +type Props = BaseNode; Servo.defaultProps = { data: { + ...dataSchema.parse({}), group: 'hardware', tags: ['output', 'analog'], - pin: 3, label: 'Servo', icon: 'RotateCwIcon', - type: 'standard', - range: { min: 0, max: 180 }, description: 'Control a motor that can move to specific positions or rotate continuously', } satisfies Props['data'], }; diff --git a/apps/electron-app/src/render/components/react-flow/nodes/Smooth.tsx b/apps/electron-app/src/render/components/react-flow/nodes/Smooth.tsx index 4ddc46ce..3b1a909a 100644 --- a/apps/electron-app/src/render/components/react-flow/nodes/Smooth.tsx +++ b/apps/electron-app/src/render/components/react-flow/nodes/Smooth.tsx @@ -1,4 +1,10 @@ -import type { MovingAverage, SmoothAverage, SmoothData } from '@microflow/hardware'; +import { + type Data, + MovingAverage, + SmoothAverage, + type Value, + dataSchema, +} from '@microflow/runtime/src/smooth/smooth.types'; import { Position } from '@xyflow/react'; import { Handle } from '../Handle'; import { BaseNode, NodeContainer, useNodeControls, useNodeData } from './Node'; @@ -16,7 +22,7 @@ export function Smooth(props: Props) { } function Value() { - const data = useNodeData(); + const data = useNodeData(); return ( (); + const data = useNodeData(); const { render } = useNodeControls({ type: { @@ -52,15 +58,14 @@ function Settings() { return <>{render()}; } -type Props = BaseNode; +type Props = BaseNode; Smooth.defaultProps = { data: { + ...dataSchema.parse({ type: 'smooth' }), group: 'flow', tags: ['transformation'], label: 'Smooth', - type: 'smooth', icon: 'EraserIcon', - attenuation: 0.995, description: 'Make jumpy or noisy sensor readings smoother and more stable', } satisfies Props['data'], }; diff --git a/apps/electron-app/src/render/components/react-flow/nodes/Switch.tsx b/apps/electron-app/src/render/components/react-flow/nodes/Switch.tsx index 0144013b..2f759a26 100644 --- a/apps/electron-app/src/render/components/react-flow/nodes/Switch.tsx +++ b/apps/electron-app/src/render/components/react-flow/nodes/Switch.tsx @@ -1,9 +1,9 @@ -import { SwitchData, SwitchValueType } from '@microflow/hardware'; +import { type Data, type Value, dataSchema } from '@microflow/runtime/src/switch/switch.types'; import { BaseNode, NodeContainer, useNodeControls, useNodeData } from './Node'; import { Handle } from '../Handle'; import { Position } from '@xyflow/react'; import { useNodeValue } from '../../../stores/node-data'; -import { Icons, Switch as UiSwitch } from '@microflow/ui'; +import { Icons } from '@microflow/ui'; import { usePins } from '../../../stores/board'; import { MODES } from '../../../../common/types'; import { reducePinsToOptions } from '../../../../common/pin'; @@ -21,24 +21,24 @@ export function Switch(props: Props) { } function Value() { - const value = useNodeValue(false); + const value = useNodeValue(false); if (!value) return ; return ; } function Settings() { - const data = useNodeData(); + const data = useNodeData(); const pins = usePins([MODES.INPUT]); const { render } = useNodeControls( { pin: { value: data.pin, options: pins.reduce(reducePinsToOptions, {}) }, type: { value: data.type, - options: [ - { value: 'NC', text: 'normally closed (NC)' }, - { value: 'NO', text: 'normally open (NO)' }, - ], + options: { + 'normally closed (NC)': 'NC', + 'normally open (NO)': 'NO', + }, }, }, [pins] @@ -47,15 +47,14 @@ function Settings() { return <>{render()}; } -type Props = BaseNode; +type Props = BaseNode; Switch.defaultProps = { data: { - pin: 2, + ...dataSchema.parse({}), group: 'hardware', icon: 'ToggleLeftIcon', label: 'Switch', tags: ['input', 'digital'], - type: 'NC', description: 'Detect when a physical switch is turned on or off', } satisfies Props['data'], }; diff --git a/apps/electron-app/src/render/components/react-flow/nodes/Trigger.tsx b/apps/electron-app/src/render/components/react-flow/nodes/Trigger.tsx index 70288b91..3c48ff82 100644 --- a/apps/electron-app/src/render/components/react-flow/nodes/Trigger.tsx +++ b/apps/electron-app/src/render/components/react-flow/nodes/Trigger.tsx @@ -1,4 +1,4 @@ -import type { TriggerData, TriggerValueType } from '@microflow/hardware'; +import { type Data, type Value, dataSchema } from '@microflow/runtime/src/trigger/trigger.types'; import { Position } from '@xyflow/react'; import { Handle } from '../Handle'; import { BaseNode, NodeContainer, useNodeControls, useNodeData } from './Node'; @@ -19,8 +19,8 @@ export function Trigger(props: Props) { const formatter = new Intl.NumberFormat('en-US'); function Value() { - const data = useNodeData(); - const value = useNodeValue(false); + const data = useNodeData(); + const value = useNodeValue(false); return ( (); + const data = useNodeData(); const { render } = useNodeControls({ behaviour: { value: data.behaviour, @@ -59,17 +59,14 @@ function Settings() { return <>{render()}; } -type Props = BaseNode; +type Props = BaseNode; Trigger.defaultProps = { data: { + ...dataSchema.parse({}), group: 'flow', tags: ['event', 'control'], label: 'Trigger', icon: 'TrendingUpIcon', - relative: false, - behaviour: 'decreasing', - threshold: 5, - within: 250, description: 'Send a signal when a value changes by a certain amount, like detecting a sudden change', } satisfies Props['data'], diff --git a/apps/electron-app/src/render/components/react-flow/nodes/matrix/Matrix.tsx b/apps/electron-app/src/render/components/react-flow/nodes/matrix/Matrix.tsx index c92f4767..55628efe 100644 --- a/apps/electron-app/src/render/components/react-flow/nodes/matrix/Matrix.tsx +++ b/apps/electron-app/src/render/components/react-flow/nodes/matrix/Matrix.tsx @@ -1,4 +1,4 @@ -import { type MatrixData, type MatrixValueType } from '@microflow/hardware'; +import { type Data, type Value, dataSchema } from '@microflow/runtime/src/matrix/matrix.types'; import { Position } from '@xyflow/react'; import { useState } from 'react'; import { Handle } from '../../Handle'; @@ -11,7 +11,7 @@ import { DEFAULT_MATRIX_SHAPE, DEFAULT_MATRIX_START_SHAPE, MatrixShape, -} from '@microflow/hardware/contants'; +} from '@microflow/runtime/src/matrix/matrix.constants'; import { Button, Carousel, @@ -56,8 +56,8 @@ function getShape(dimensions: string, devices: number): [number, number] { } function Value() { - const data = useNodeData(); - const value = useNodeValue(DEFAULT_MATRIX_START_SHAPE); + const data = useNodeData(); + const value = useNodeValue(DEFAULT_MATRIX_START_SHAPE); return (
@@ -67,7 +67,7 @@ function Value() { } function Settings() { - const data = useNodeData(); + const data = useNodeData(); const [editorOpened, setEditorOpened] = useState(false); const [shapes, setShapes] = useState(data.shapes ?? data.shapes ?? [DEFAULT_MATRIX_SHAPE]); @@ -223,22 +223,14 @@ function Settings() { ); } -type Props = BaseNode; +type Props = BaseNode; Matrix.defaultProps = { data: { + ...dataSchema.parse({}), group: 'hardware', tags: ['output', 'analog', 'digital'], label: 'LED Matrix', icon: 'GridIcon', - pins: { - data: 2, - clock: 3, - cs: 4, - }, - controller: undefined as unknown as string, - dims: '8x8', // [rows, columns] - shapes: [DEFAULT_MATRIX_SHAPE], - devices: 1, description: 'Display patterns, shapes, or images on a grid of LED lights', } satisfies Props['data'], }; diff --git a/apps/electron-app/src/render/components/react-flow/nodes/piezo/NoteEditor.tsx b/apps/electron-app/src/render/components/react-flow/nodes/piezo/NoteEditor.tsx index 463b8f1a..a203450f 100644 --- a/apps/electron-app/src/render/components/react-flow/nodes/piezo/NoteEditor.tsx +++ b/apps/electron-app/src/render/components/react-flow/nodes/piezo/NoteEditor.tsx @@ -1,4 +1,4 @@ -import { Note } from '@microflow/hardware'; +import { type Note } from '@microflow/runtime/src/piezo/piezo.types'; import { Button, ButtonProps, diff --git a/apps/electron-app/src/render/components/react-flow/nodes/piezo/Piezo.tsx b/apps/electron-app/src/render/components/react-flow/nodes/piezo/Piezo.tsx index 24d00b0b..11c18c0d 100644 --- a/apps/electron-app/src/render/components/react-flow/nodes/piezo/Piezo.tsx +++ b/apps/electron-app/src/render/components/react-flow/nodes/piezo/Piezo.tsx @@ -1,4 +1,10 @@ -import type { BuzzData, PiezoData, PiezoValueType, SongData } from '@microflow/hardware'; +import { + type BuzzData, + type Data, + type SongData, + type Value, + dataSchema, +} from '@microflow/runtime/src/piezo/piezo.types'; import { Icons } from '@microflow/ui'; import { Position } from '@xyflow/react'; import { Handle } from '../../Handle'; @@ -29,8 +35,8 @@ export function Piezo(props: Props) { } function Value() { - const data = useNodeData(); - const value = useNodeValue(false); + const data = useNodeData(); + const value = useNodeValue(false); if (!value) { if (data.type === 'song') return ; @@ -42,12 +48,12 @@ function Value() { } function Settings() { - const data = useNodeData(); + const data = useNodeData(); const pins = usePins([MODES.INPUT, MODES.PWM]); const [editorOpened, setEditorOpened] = useState(false); const deleteHandles = useDeleteHandles(); - const { render, setNodeData } = useNodeControls( + const { render, setNodeData } = useNodeControls( { pin: { options: pins.reduce(reducePinsToOptions, {}), value: data.pin }, type: { @@ -70,12 +76,12 @@ function Settings() { min: 100, max: 2500, step: 100, - value: (data as BuzzData).duration ?? 500, + value: (data as BuzzData).duration, render: get => get('type') === 'buzz', }, frequency: { options: Object.fromEntries(NOTES_AND_FREQUENCIES.entries()), - value: (data as BuzzData).frequency!, + value: data.frequency!, render: get => get('type') === 'buzz', }, }, @@ -124,17 +130,14 @@ function Settings() { export const DEFAULT_FREQUENCY = NOTES_AND_FREQUENCIES.get(DEFAULT_NOTE); -type Props = BaseNode; +type Props = BaseNode; Piezo.defaultProps = { data: { + ...dataSchema.parse({ type: 'buzz' }), group: 'hardware', tags: ['output', 'analog', 'digital'], label: 'Piezo', - duration: 500, icon: 'BellIcon', - frequency: DEFAULT_FREQUENCY!, - pin: 11, - type: 'buzz', description: 'Make sounds, play tones, or create melodies using a buzzer or speaker', } satisfies Props['data'], }; diff --git a/apps/electron-app/src/render/components/react-flow/panels/DockPanel.tsx b/apps/electron-app/src/render/components/react-flow/panels/DockPanel.tsx index fa8e631b..f09293d8 100644 --- a/apps/electron-app/src/render/components/react-flow/panels/DockPanel.tsx +++ b/apps/electron-app/src/render/components/react-flow/panels/DockPanel.tsx @@ -6,7 +6,6 @@ import { DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, - Icon, Icons, Kbd, KbdGroup, @@ -33,15 +32,15 @@ export function DockPanel() { const setOpen = useNewNodeStore(useShallow(state => state.setOpen)); return ( - - + + - + - +