From 3ec3b205b343e5f5236cda7df2c1d8c5122dc5c0 Mon Sep 17 00:00:00 2001 From: glopesdev Date: Wed, 25 Mar 2026 10:50:11 +0000 Subject: [PATCH 1/6] Pack App as tool Remove NSI scripts and move towards dotnet tool deployment. --- .../Harp.Behavior.App.csproj | 12 +- Interface/Harp.Behavior.App/app.manifest | 2 +- Interface/Harp.Behavior.nsi | 156 ------------------ Interface/Harp.Behavior.sln | 6 - 4 files changed, 7 insertions(+), 169 deletions(-) delete mode 100644 Interface/Harp.Behavior.nsi diff --git a/Interface/Harp.Behavior.App/Harp.Behavior.App.csproj b/Interface/Harp.Behavior.App/Harp.Behavior.App.csproj index 846b3f1..966f9c8 100644 --- a/Interface/Harp.Behavior.App/Harp.Behavior.App.csproj +++ b/Interface/Harp.Behavior.App/Harp.Behavior.App.csproj @@ -1,8 +1,8 @@  WinExe - + true + harp.behavior net8.0 enable true @@ -31,10 +31,10 @@ - - - - + + + + diff --git a/Interface/Harp.Behavior.nsi b/Interface/Harp.Behavior.nsi deleted file mode 100644 index 9202852..0000000 --- a/Interface/Harp.Behavior.nsi +++ /dev/null @@ -1,156 +0,0 @@ -!define MUI_VERBOSE 1 -!include "FileFunc.nsh" - -!define CompanyName "harp-tech" -!define DeviceName "Harp.Behavior" -!define AppName "${DeviceName}.App" -!define AppNameNoSpaces "${DeviceName}.App" - -; --- If a PRERELEASE is passed with -DPRERELEASE=..., include it in display/file names. -!ifdef PRERELEASE - !define APP_PRERELEASE_TEXT "-${PRERELEASE}" -!else - !define APP_PRERELEASE_TEXT "" -!endif - -!define AppVersion "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD}${APP_PRERELEASE_TEXT}" -!define APP_NUMERIC_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD}" -!define /date YEAR "%Y" -!define OUT_FILE_NAME "${AppNameNoSpaces}.v${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_BUILD}${APP_PRERELEASE_TEXT}-win-${ARCHITECTURE}" - -; NSIS input defaults to artifacts publish layout (CI/build_app.sh pass NSIS_INPUT_DIR explicitly) -!ifndef NSIS_INPUT_DIR - !define NSIS_INPUT_DIR ".\artifacts\publish\win-${ARCHITECTURE}" -!endif - -Unicode true -Name "${AppName} v${AppVersion}" -Icon "${DeviceName}.Design\Assets\logo.ico" - -;-------------------------------- -;Include Modern UI - !include "MUI2.nsh" -;-------------------------------- - -OutFile ".\artifacts\${OUT_FILE_NAME}.exe" -InstallDir "$LOCALAPPDATA\${CompanyName}\${AppName}" -RequestExecutionLevel user - -;-------------------------------- -;Version information - VIProductVersion "${APP_NUMERIC_VERSION}.0" - VIAddVersionKey "ProductName" "${AppName}" - VIAddVersionKey "CompanyName" "${CompanyName}" - VIAddVersionKey "FileDescription" "${AppName}" - VIAddVersionKey "FileVersion" "${APP_NUMERIC_VERSION}" - VIAddVersionKey "ProductVersion" "${APP_NUMERIC_VERSION}" - VIAddVersionKey "LegalCopyright" "© ${YEAR} ${CompanyName}" - VIAddVersionKey "LegalTrademarks" "${CompanyName}" - VIAddVersionKey "OriginalFilename" "${OUT_FILE_NAME}" - -;-------------------------------- -;Variables - Var StartMenuFolder -;-------------------------------- -;Interface Settings - !define MUI_ABORTWARNING - !define MUI_HEADERIMAGE - !define MUI_HEADERIMAGE_BITMAP "${DeviceName}.Design\Assets\logo.png" - !define MUI_HEADERIMAGE_RIGHT -;-------------------------------- -;Pages - - !insertmacro MUI_PAGE_WELCOME - ;!insertmacro MUI_PAGE_LICENSE "${NSISDIR}/Contrib/Modern UI 2/Pages/License.nsh" - !insertmacro MUI_PAGE_COMPONENTS - ;!insertmacro MUI_PAGE_DIRECTORY - - ;Start Menu Folder Page Configuration - !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU" - !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\${CompanyName}\${AppName}" - !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" - - !define MUI_STARTMENUPAGE_DEFAULTFOLDER "${CompanyName}\${AppName}" - - !insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder - - !insertmacro MUI_PAGE_INSTFILES - - !insertmacro MUI_UNPAGE_CONFIRM - !insertmacro MUI_UNPAGE_INSTFILES - -;-------------------------------- -;Languages - !insertmacro MUI_LANGUAGE "English" -;-------------------------------- - -;Installer Sections -Section "${AppName} v${AppVersion}" FirstSection - !define ARP "Software\Microsoft\Windows\CurrentVersion\Uninstall\${AppName}" - SetOutPath "$INSTDIR" - - ; Include everything from the output folder - File /r `${NSIS_INPUT_DIR}\*.*` - - ; Get estimated size installed - ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 - IntFmt $0 "0x%08X" $0 - WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CompanyName} ${AppName}" "EstimatedSize" "$0" - - # Registry information for add/remove programs - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CompanyName} ${AppName}" "DisplayName" "${CompanyName} - ${AppName}" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CompanyName} ${AppName}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CompanyName} ${AppName}" "InstallLocation" "$\"$INSTDIR$\"" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CompanyName} ${AppName}" "DisplayIcon" "$\"$INSTDIR\logo.ico$\"" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CompanyName} ${AppName}" "Publisher" "${CompanyName}" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CompanyName} ${AppName}" "DisplayVersion" "${AppVersion}" - WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CompanyName} ${AppName}" "VersionMajor" ${VERSION_MAJOR} - WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CompanyName} ${AppName}" "VersionMinor" ${VERSION_MINOR} - # There is no option for modifying or repairing the install - WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CompanyName} ${AppName}" "NoModify" 1 - WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CompanyName} ${AppName}" "NoRepair" 1 - - ;Store installation folder - WriteRegStr HKCU "Software\${CompanyName}\${AppName}" "" $INSTDIR - - ;Create uninstaller - WriteUninstaller "$INSTDIR\Uninstall.exe" - - !insertmacro MUI_STARTMENU_WRITE_BEGIN Application - - ;Create shortcuts - CreateDirectory "$SMPROGRAMS\$StartMenuFolder" - CreateShortcut "$SMPROGRAMS\$StartMenuFolder\${AppName}.lnk" "$INSTDIR\${AppName}.exe" "" "$INSTDIR\${AppName}.exe" 0 - CreateShortcut "$SMPROGRAMS\$StartMenuFolder\Uninstall.lnk" "$INSTDIR\Uninstall.exe" "" "$INSTDIR\Uninstall.exe" 0 - - !insertmacro MUI_STARTMENU_WRITE_END - -SectionEnd - -;-------------------------------- -;Uninstaller Section - -Section "Uninstall" - - Delete "$INSTDIR\Uninstall.exe" - - Delete "$INSTDIR\*.*" - - RMDir /r "$INSTDIR" - - !insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuFolder - - Delete "$SMPROGRAMS\$StartMenuFolder\Uninstall.lnk" - Delete "$SMPROGRAMS\$StartMenuFolder\${AppName}.lnk" - RMDir "$SMPROGRAMS\$StartMenuFolder" - - DeleteRegKey /ifempty HKCU "Software\${CompanyName}\${AppName}" - DeleteRegKey /ifempty HKCU "Software\${CompanyName}" - DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CompanyName} ${AppName}" - - -SectionEnd - -; !insertmacro SECTION_BEGIN -; File /r `./bin/Release/net10.0/win-${ARCHITECTURE}/publish/*.*` -; !insertmacro SECTION_END diff --git a/Interface/Harp.Behavior.sln b/Interface/Harp.Behavior.sln index 4ac5e07..5e12e6a 100644 --- a/Interface/Harp.Behavior.sln +++ b/Interface/Harp.Behavior.sln @@ -9,12 +9,6 @@ Project("{D6F1C6E5-7507-425D-A697-29DAB58ED458}") = "Harp.Behavior.App", "Harp.B EndProject Project("{D6F1C6E5-7507-425D-A697-29DAB58ED458}") = "Harp.Behavior.Design", "Harp.Behavior.Design\Harp.Behavior.Design.csproj", "{FCB73743-9ECF-4D3E-A235-F0493BC10629}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{10D72C30-D95E-452C-910F-F39FC6BAF129}" - ProjectSection(SolutionItems) = preProject - .editorconfig = .editorconfig - Harp.Behavior.nsi = Harp.Behavior.nsi - EndProjectSection -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU From 2b5664fa876bc1fe082e3cc4506f8b53ab8bc13e Mon Sep 17 00:00:00 2001 From: glopesdev Date: Wed, 25 Mar 2026 12:27:48 +0000 Subject: [PATCH 2/6] Rename top-level folders to new repository layout --- .github/workflows/Harp.Behavior.yml | 18 +++++++++--------- {Firmware => firmware}/.gitignore | 0 {Firmware => firmware}/Behavior.atsln | 0 .../Behavior/Behavior.cproj | 0 {Firmware => firmware}/Behavior/Makefile | 0 {Firmware => firmware}/Behavior/WS2812S.c | 0 {Firmware => firmware}/Behavior/WS2812S.h | 0 {Firmware => firmware}/Behavior/app.c | 0 {Firmware => firmware}/Behavior/app.h | 0 {Firmware => firmware}/Behavior/app_funcs.c | 0 {Firmware => firmware}/Behavior/app_funcs.h | 0 .../Behavior/app_ios_and_regs.c | 0 .../Behavior/app_ios_and_regs.h | 0 {Firmware => firmware}/Behavior/cpu.h | 0 {Firmware => firmware}/Behavior/hwbp_core.h | 0 .../Behavior/hwbp_core_com.h | 0 .../Behavior/hwbp_core_regs.h | 0 .../Behavior/hwbp_core_types.h | 0 {Firmware => firmware}/Behavior/hwbp_sync.h | 0 {Firmware => firmware}/Behavior/interrupts.c | 0 {Firmware => firmware}/Behavior/ios.yml | 0 .../Behavior/libATxmega128A1U-1.15.a | Bin {Firmware => firmware}/Behavior/main.c | 0 {Firmware => firmware}/Behavior/registers.xls | Bin {Firmware => firmware}/Behavior/structs.h | 0 {Firmware => firmware}/LICENSE | 0 {Hardware => hardware}/.gitignore | 0 {Hardware => hardware}/Mechanical/LICENSE | 0 {Hardware => hardware}/Mechanical/README.md | 0 .../case_v1.1_v1.2/Behavior_Box_LR.pdf | Bin .../case_v1.1_v1.2/Behavior_Box_LR.svg | 0 .../Behavior_Box_LR_Color_GB.pdf | Bin .../case_v2.0/Behavior_Box_V2_0_LR.pdf | Bin {Hardware => hardware}/PCB/CONTRIB | 0 {Hardware => hardware}/PCB/LICENSE | 0 {Hardware => hardware}/PCB/README | 0 {Hardware => hardware}/PCB/harp behavior.brd | 0 {Hardware => hardware}/PCB/harp behavior.pdf | Bin {Hardware => hardware}/PCB/harp behavior.sch | 0 .../PCB/harp behavior_BOM.xlsx | Bin .../PCB/harp behavior_centroid.csv | 0 .../PCB/harp behavior_gerbers.zip | Bin {Interface => software}/.editorconfig | 0 {Interface => software}/.gitignore | 0 {Interface => software}/Directory.Build.props | 0 .../Harp.Behavior.App.csproj | 0 .../Harp.Behavior.App/Program.cs | 0 .../Properties/launchSettings.json | 0 .../Harp.Behavior.App/README.md | 0 .../Harp.Behavior.App/app.manifest | 0 .../Adapters/RgbRegisterAdapter.cs | 0 .../Harp.Behavior.Design/App.axaml | 0 .../Harp.Behavior.Design/App.axaml.cs | 0 .../Harp.Behavior.Design/Assets/logo.icns | Bin .../Harp.Behavior.Design/Assets/logo.ico | Bin .../Harp.Behavior.Design/Assets/logo.png | Bin .../Harp.Behavior.Design/Assets/logo.svg | 0 .../Assets/logo_about.png | Bin .../Controls/ExtendedColorPicker.cs | 0 .../Controls/RgbRegisterControl.axaml | 0 .../Controls/RgbRegisterControl.axaml.cs | 0 .../Controls/VisualStatus.axaml | 0 .../Controls/VisualStatus.axaml.cs | 0 .../Controls/WriteMessagesControl.axaml | 0 .../Controls/WriteMessagesControl.axaml.cs | 0 .../Converters/BooleanConverter.cs | 0 .../Converters/EnableFlagConverter.cs | 0 .../Converters/EnumDisplayConverter.cs | 0 .../Converters/PayloadFieldConverter.cs | 0 .../Converters/TypeDescriptionConverter.cs | 0 .../Converters/VisualStatusColorConverter.cs | 0 .../Harp.Behavior.Design/FodyWeavers.xml | 0 .../Harp.Behavior.Design.csproj | 0 .../Styles/DefaultStyles.axaml | 0 .../ViewModels/AboutViewModel.cs | 0 .../ViewModels/BehaviorViewModel.cs | 0 .../ViewModels/ViewModelBase.cs | 0 .../Harp.Behavior.Design/Views/About.axaml | 0 .../Harp.Behavior.Design/Views/About.axaml.cs | 0 .../Views/BehaviorView.axaml | 0 .../Views/BehaviorView.axaml.cs | 0 .../Views/MainWindow.axaml | 0 .../Views/MainWindow.axaml.cs | 0 {Interface => software}/Harp.Behavior.sln | 0 .../Harp.Behavior/AsyncDevice.Generated.cs | 0 .../Harp.Behavior/Device.Generated.cs | 0 .../Harp.Behavior/Harp.Behavior.csproj | 0 .../Harp.Behavior/Properties/AssemblyInfo.cs | 0 .../Properties/launchSettings.json | 0 .../Harp.Behavior/README.md | 0 {Interface => software}/LICENSE | 0 {Interface => software}/icon.png | Bin 92 files changed, 9 insertions(+), 9 deletions(-) rename {Firmware => firmware}/.gitignore (100%) rename {Firmware => firmware}/Behavior.atsln (100%) rename {Firmware => firmware}/Behavior/Behavior.cproj (100%) rename {Firmware => firmware}/Behavior/Makefile (100%) rename {Firmware => firmware}/Behavior/WS2812S.c (100%) rename {Firmware => firmware}/Behavior/WS2812S.h (100%) rename {Firmware => firmware}/Behavior/app.c (100%) rename {Firmware => firmware}/Behavior/app.h (100%) rename {Firmware => firmware}/Behavior/app_funcs.c (100%) rename {Firmware => firmware}/Behavior/app_funcs.h (100%) rename {Firmware => firmware}/Behavior/app_ios_and_regs.c (100%) rename {Firmware => firmware}/Behavior/app_ios_and_regs.h (100%) rename {Firmware => firmware}/Behavior/cpu.h (100%) rename {Firmware => firmware}/Behavior/hwbp_core.h (100%) rename {Firmware => firmware}/Behavior/hwbp_core_com.h (100%) rename {Firmware => firmware}/Behavior/hwbp_core_regs.h (100%) rename {Firmware => firmware}/Behavior/hwbp_core_types.h (100%) rename {Firmware => firmware}/Behavior/hwbp_sync.h (100%) rename {Firmware => firmware}/Behavior/interrupts.c (100%) rename {Firmware => firmware}/Behavior/ios.yml (100%) rename {Firmware => firmware}/Behavior/libATxmega128A1U-1.15.a (100%) rename {Firmware => firmware}/Behavior/main.c (100%) rename {Firmware => firmware}/Behavior/registers.xls (100%) rename {Firmware => firmware}/Behavior/structs.h (100%) rename {Firmware => firmware}/LICENSE (100%) rename {Hardware => hardware}/.gitignore (100%) rename {Hardware => hardware}/Mechanical/LICENSE (100%) rename {Hardware => hardware}/Mechanical/README.md (100%) rename {Hardware => hardware}/Mechanical/case_v1.1_v1.2/Behavior_Box_LR.pdf (100%) rename {Hardware => hardware}/Mechanical/case_v1.1_v1.2/Behavior_Box_LR.svg (100%) rename {Hardware => hardware}/Mechanical/case_v1.1_v1.2/Behavior_Box_LR_Color_GB.pdf (100%) rename {Hardware => hardware}/Mechanical/case_v2.0/Behavior_Box_V2_0_LR.pdf (100%) rename {Hardware => hardware}/PCB/CONTRIB (100%) rename {Hardware => hardware}/PCB/LICENSE (100%) rename {Hardware => hardware}/PCB/README (100%) rename {Hardware => hardware}/PCB/harp behavior.brd (100%) rename {Hardware => hardware}/PCB/harp behavior.pdf (100%) rename {Hardware => hardware}/PCB/harp behavior.sch (100%) rename {Hardware => hardware}/PCB/harp behavior_BOM.xlsx (100%) rename {Hardware => hardware}/PCB/harp behavior_centroid.csv (100%) rename {Hardware => hardware}/PCB/harp behavior_gerbers.zip (100%) rename {Interface => software}/.editorconfig (100%) rename {Interface => software}/.gitignore (100%) rename {Interface => software}/Directory.Build.props (100%) rename {Interface => software}/Harp.Behavior.App/Harp.Behavior.App.csproj (100%) rename {Interface => software}/Harp.Behavior.App/Program.cs (100%) rename {Interface => software}/Harp.Behavior.App/Properties/launchSettings.json (100%) rename {Interface => software}/Harp.Behavior.App/README.md (100%) rename {Interface => software}/Harp.Behavior.App/app.manifest (100%) rename {Interface => software}/Harp.Behavior.Design/Adapters/RgbRegisterAdapter.cs (100%) rename {Interface => software}/Harp.Behavior.Design/App.axaml (100%) rename {Interface => software}/Harp.Behavior.Design/App.axaml.cs (100%) rename {Interface => software}/Harp.Behavior.Design/Assets/logo.icns (100%) rename {Interface => software}/Harp.Behavior.Design/Assets/logo.ico (100%) rename {Interface => software}/Harp.Behavior.Design/Assets/logo.png (100%) rename {Interface => software}/Harp.Behavior.Design/Assets/logo.svg (100%) rename {Interface => software}/Harp.Behavior.Design/Assets/logo_about.png (100%) rename {Interface => software}/Harp.Behavior.Design/Controls/ExtendedColorPicker.cs (100%) rename {Interface => software}/Harp.Behavior.Design/Controls/RgbRegisterControl.axaml (100%) rename {Interface => software}/Harp.Behavior.Design/Controls/RgbRegisterControl.axaml.cs (100%) rename {Interface => software}/Harp.Behavior.Design/Controls/VisualStatus.axaml (100%) rename {Interface => software}/Harp.Behavior.Design/Controls/VisualStatus.axaml.cs (100%) rename {Interface => software}/Harp.Behavior.Design/Controls/WriteMessagesControl.axaml (100%) rename {Interface => software}/Harp.Behavior.Design/Controls/WriteMessagesControl.axaml.cs (100%) rename {Interface => software}/Harp.Behavior.Design/Converters/BooleanConverter.cs (100%) rename {Interface => software}/Harp.Behavior.Design/Converters/EnableFlagConverter.cs (100%) rename {Interface => software}/Harp.Behavior.Design/Converters/EnumDisplayConverter.cs (100%) rename {Interface => software}/Harp.Behavior.Design/Converters/PayloadFieldConverter.cs (100%) rename {Interface => software}/Harp.Behavior.Design/Converters/TypeDescriptionConverter.cs (100%) rename {Interface => software}/Harp.Behavior.Design/Converters/VisualStatusColorConverter.cs (100%) rename {Interface => software}/Harp.Behavior.Design/FodyWeavers.xml (100%) rename {Interface => software}/Harp.Behavior.Design/Harp.Behavior.Design.csproj (100%) rename {Interface => software}/Harp.Behavior.Design/Styles/DefaultStyles.axaml (100%) rename {Interface => software}/Harp.Behavior.Design/ViewModels/AboutViewModel.cs (100%) rename {Interface => software}/Harp.Behavior.Design/ViewModels/BehaviorViewModel.cs (100%) rename {Interface => software}/Harp.Behavior.Design/ViewModels/ViewModelBase.cs (100%) rename {Interface => software}/Harp.Behavior.Design/Views/About.axaml (100%) rename {Interface => software}/Harp.Behavior.Design/Views/About.axaml.cs (100%) rename {Interface => software}/Harp.Behavior.Design/Views/BehaviorView.axaml (100%) rename {Interface => software}/Harp.Behavior.Design/Views/BehaviorView.axaml.cs (100%) rename {Interface => software}/Harp.Behavior.Design/Views/MainWindow.axaml (100%) rename {Interface => software}/Harp.Behavior.Design/Views/MainWindow.axaml.cs (100%) rename {Interface => software}/Harp.Behavior.sln (100%) rename {Interface => software}/Harp.Behavior/AsyncDevice.Generated.cs (100%) rename {Interface => software}/Harp.Behavior/Device.Generated.cs (100%) rename {Interface => software}/Harp.Behavior/Harp.Behavior.csproj (100%) rename {Interface => software}/Harp.Behavior/Properties/AssemblyInfo.cs (100%) rename {Interface => software}/Harp.Behavior/Properties/launchSettings.json (100%) rename {Interface => software}/Harp.Behavior/README.md (100%) rename {Interface => software}/LICENSE (100%) rename {Interface => software}/icon.png (100%) diff --git a/.github/workflows/Harp.Behavior.yml b/.github/workflows/Harp.Behavior.yml index 6ec6f5d..184873c 100644 --- a/.github/workflows/Harp.Behavior.yml +++ b/.github/workflows/Harp.Behavior.yml @@ -40,7 +40,7 @@ jobs: # ----------------------------------------------------------------------- Build firmware - name: Build firmware - working-directory: Firmware/Behavior + working-directory: firmware/Behavior id: build shell: bash run: make all FIRMWARE_VERSION=${{env.CiBuildVersion}} HARDWARE_VERSION=${{matrix.hardware-target}} PREVIEW_VERSION=${{env.CiFirmwarePreviewVersion}} @@ -52,12 +52,12 @@ jobs: with: name: Firmware-hw${{matrix.hardware-target}} if-no-files-found: error - path: Firmware/Behavior/bin/*.hex + path: firmware/Behavior/bin/*.hex # ----------------------------------------------------------------------- Upload release assets - name: Upload release assets if: github.event_name == 'release' - run: gh release upload --repo ${{github.repository}} ${{github.event.release.tag_name}} Firmware/Behavior/bin/*.hex --clobber + run: gh release upload --repo ${{github.repository}} ${{github.event.release.tag_name}} firmware/Behavior/bin/*.hex --clobber env: GH_TOKEN: ${{github.token}} @@ -92,7 +92,7 @@ jobs: # ----------------------------------------------------------------------- Regenerate - name: Run generators - run: dotnet harp.toolkit generate interface -o Interface/${{github.workflow}} + run: dotnet harp.toolkit generate interface -o software/${{github.workflow}} - name: Verify pre-generated code was up-to-date id: verify-dist @@ -102,14 +102,14 @@ jobs: # ----------------------------------------------------------------------- Build interface package - name: Restore interface - run: dotnet restore Interface + run: dotnet restore software - name: Build interface - run: dotnet build Interface --no-restore --configuration ${{matrix.configuration}} + run: dotnet build software --no-restore --configuration ${{matrix.configuration}} - name: Pack interface id: pack - run: dotnet pack Interface --no-restore --no-build --configuration ${{matrix.configuration}} + run: dotnet pack software --no-restore --no-build --configuration ${{matrix.configuration}} # ----------------------------------------------------------------------- Collect artifacts - name: Collect NuGet packages @@ -118,12 +118,12 @@ jobs: with: name: Packages if-no-files-found: error - path: Interface/bin/${{matrix.configuration}}/** + path: software/bin/${{matrix.configuration}}/** # ----------------------------------------------------------------------- Upload release assets - name: Upload release assets if: github.event_name == 'release' && matrix.configuration == 'Release' - run: gh release upload --repo ${{github.repository}} ${{github.event.release.tag_name}} Interface/bin/${{matrix.configuration}}/** --clobber + run: gh release upload --repo ${{github.repository}} ${{github.event.release.tag_name}} software/bin/${{matrix.configuration}}/** --clobber env: GH_TOKEN: ${{github.token}} diff --git a/Firmware/.gitignore b/firmware/.gitignore similarity index 100% rename from Firmware/.gitignore rename to firmware/.gitignore diff --git a/Firmware/Behavior.atsln b/firmware/Behavior.atsln similarity index 100% rename from Firmware/Behavior.atsln rename to firmware/Behavior.atsln diff --git a/Firmware/Behavior/Behavior.cproj b/firmware/Behavior/Behavior.cproj similarity index 100% rename from Firmware/Behavior/Behavior.cproj rename to firmware/Behavior/Behavior.cproj diff --git a/Firmware/Behavior/Makefile b/firmware/Behavior/Makefile similarity index 100% rename from Firmware/Behavior/Makefile rename to firmware/Behavior/Makefile diff --git a/Firmware/Behavior/WS2812S.c b/firmware/Behavior/WS2812S.c similarity index 100% rename from Firmware/Behavior/WS2812S.c rename to firmware/Behavior/WS2812S.c diff --git a/Firmware/Behavior/WS2812S.h b/firmware/Behavior/WS2812S.h similarity index 100% rename from Firmware/Behavior/WS2812S.h rename to firmware/Behavior/WS2812S.h diff --git a/Firmware/Behavior/app.c b/firmware/Behavior/app.c similarity index 100% rename from Firmware/Behavior/app.c rename to firmware/Behavior/app.c diff --git a/Firmware/Behavior/app.h b/firmware/Behavior/app.h similarity index 100% rename from Firmware/Behavior/app.h rename to firmware/Behavior/app.h diff --git a/Firmware/Behavior/app_funcs.c b/firmware/Behavior/app_funcs.c similarity index 100% rename from Firmware/Behavior/app_funcs.c rename to firmware/Behavior/app_funcs.c diff --git a/Firmware/Behavior/app_funcs.h b/firmware/Behavior/app_funcs.h similarity index 100% rename from Firmware/Behavior/app_funcs.h rename to firmware/Behavior/app_funcs.h diff --git a/Firmware/Behavior/app_ios_and_regs.c b/firmware/Behavior/app_ios_and_regs.c similarity index 100% rename from Firmware/Behavior/app_ios_and_regs.c rename to firmware/Behavior/app_ios_and_regs.c diff --git a/Firmware/Behavior/app_ios_and_regs.h b/firmware/Behavior/app_ios_and_regs.h similarity index 100% rename from Firmware/Behavior/app_ios_and_regs.h rename to firmware/Behavior/app_ios_and_regs.h diff --git a/Firmware/Behavior/cpu.h b/firmware/Behavior/cpu.h similarity index 100% rename from Firmware/Behavior/cpu.h rename to firmware/Behavior/cpu.h diff --git a/Firmware/Behavior/hwbp_core.h b/firmware/Behavior/hwbp_core.h similarity index 100% rename from Firmware/Behavior/hwbp_core.h rename to firmware/Behavior/hwbp_core.h diff --git a/Firmware/Behavior/hwbp_core_com.h b/firmware/Behavior/hwbp_core_com.h similarity index 100% rename from Firmware/Behavior/hwbp_core_com.h rename to firmware/Behavior/hwbp_core_com.h diff --git a/Firmware/Behavior/hwbp_core_regs.h b/firmware/Behavior/hwbp_core_regs.h similarity index 100% rename from Firmware/Behavior/hwbp_core_regs.h rename to firmware/Behavior/hwbp_core_regs.h diff --git a/Firmware/Behavior/hwbp_core_types.h b/firmware/Behavior/hwbp_core_types.h similarity index 100% rename from Firmware/Behavior/hwbp_core_types.h rename to firmware/Behavior/hwbp_core_types.h diff --git a/Firmware/Behavior/hwbp_sync.h b/firmware/Behavior/hwbp_sync.h similarity index 100% rename from Firmware/Behavior/hwbp_sync.h rename to firmware/Behavior/hwbp_sync.h diff --git a/Firmware/Behavior/interrupts.c b/firmware/Behavior/interrupts.c similarity index 100% rename from Firmware/Behavior/interrupts.c rename to firmware/Behavior/interrupts.c diff --git a/Firmware/Behavior/ios.yml b/firmware/Behavior/ios.yml similarity index 100% rename from Firmware/Behavior/ios.yml rename to firmware/Behavior/ios.yml diff --git a/Firmware/Behavior/libATxmega128A1U-1.15.a b/firmware/Behavior/libATxmega128A1U-1.15.a similarity index 100% rename from Firmware/Behavior/libATxmega128A1U-1.15.a rename to firmware/Behavior/libATxmega128A1U-1.15.a diff --git a/Firmware/Behavior/main.c b/firmware/Behavior/main.c similarity index 100% rename from Firmware/Behavior/main.c rename to firmware/Behavior/main.c diff --git a/Firmware/Behavior/registers.xls b/firmware/Behavior/registers.xls similarity index 100% rename from Firmware/Behavior/registers.xls rename to firmware/Behavior/registers.xls diff --git a/Firmware/Behavior/structs.h b/firmware/Behavior/structs.h similarity index 100% rename from Firmware/Behavior/structs.h rename to firmware/Behavior/structs.h diff --git a/Firmware/LICENSE b/firmware/LICENSE similarity index 100% rename from Firmware/LICENSE rename to firmware/LICENSE diff --git a/Hardware/.gitignore b/hardware/.gitignore similarity index 100% rename from Hardware/.gitignore rename to hardware/.gitignore diff --git a/Hardware/Mechanical/LICENSE b/hardware/Mechanical/LICENSE similarity index 100% rename from Hardware/Mechanical/LICENSE rename to hardware/Mechanical/LICENSE diff --git a/Hardware/Mechanical/README.md b/hardware/Mechanical/README.md similarity index 100% rename from Hardware/Mechanical/README.md rename to hardware/Mechanical/README.md diff --git a/Hardware/Mechanical/case_v1.1_v1.2/Behavior_Box_LR.pdf b/hardware/Mechanical/case_v1.1_v1.2/Behavior_Box_LR.pdf similarity index 100% rename from Hardware/Mechanical/case_v1.1_v1.2/Behavior_Box_LR.pdf rename to hardware/Mechanical/case_v1.1_v1.2/Behavior_Box_LR.pdf diff --git a/Hardware/Mechanical/case_v1.1_v1.2/Behavior_Box_LR.svg b/hardware/Mechanical/case_v1.1_v1.2/Behavior_Box_LR.svg similarity index 100% rename from Hardware/Mechanical/case_v1.1_v1.2/Behavior_Box_LR.svg rename to hardware/Mechanical/case_v1.1_v1.2/Behavior_Box_LR.svg diff --git a/Hardware/Mechanical/case_v1.1_v1.2/Behavior_Box_LR_Color_GB.pdf b/hardware/Mechanical/case_v1.1_v1.2/Behavior_Box_LR_Color_GB.pdf similarity index 100% rename from Hardware/Mechanical/case_v1.1_v1.2/Behavior_Box_LR_Color_GB.pdf rename to hardware/Mechanical/case_v1.1_v1.2/Behavior_Box_LR_Color_GB.pdf diff --git a/Hardware/Mechanical/case_v2.0/Behavior_Box_V2_0_LR.pdf b/hardware/Mechanical/case_v2.0/Behavior_Box_V2_0_LR.pdf similarity index 100% rename from Hardware/Mechanical/case_v2.0/Behavior_Box_V2_0_LR.pdf rename to hardware/Mechanical/case_v2.0/Behavior_Box_V2_0_LR.pdf diff --git a/Hardware/PCB/CONTRIB b/hardware/PCB/CONTRIB similarity index 100% rename from Hardware/PCB/CONTRIB rename to hardware/PCB/CONTRIB diff --git a/Hardware/PCB/LICENSE b/hardware/PCB/LICENSE similarity index 100% rename from Hardware/PCB/LICENSE rename to hardware/PCB/LICENSE diff --git a/Hardware/PCB/README b/hardware/PCB/README similarity index 100% rename from Hardware/PCB/README rename to hardware/PCB/README diff --git a/Hardware/PCB/harp behavior.brd b/hardware/PCB/harp behavior.brd similarity index 100% rename from Hardware/PCB/harp behavior.brd rename to hardware/PCB/harp behavior.brd diff --git a/Hardware/PCB/harp behavior.pdf b/hardware/PCB/harp behavior.pdf similarity index 100% rename from Hardware/PCB/harp behavior.pdf rename to hardware/PCB/harp behavior.pdf diff --git a/Hardware/PCB/harp behavior.sch b/hardware/PCB/harp behavior.sch similarity index 100% rename from Hardware/PCB/harp behavior.sch rename to hardware/PCB/harp behavior.sch diff --git a/Hardware/PCB/harp behavior_BOM.xlsx b/hardware/PCB/harp behavior_BOM.xlsx similarity index 100% rename from Hardware/PCB/harp behavior_BOM.xlsx rename to hardware/PCB/harp behavior_BOM.xlsx diff --git a/Hardware/PCB/harp behavior_centroid.csv b/hardware/PCB/harp behavior_centroid.csv similarity index 100% rename from Hardware/PCB/harp behavior_centroid.csv rename to hardware/PCB/harp behavior_centroid.csv diff --git a/Hardware/PCB/harp behavior_gerbers.zip b/hardware/PCB/harp behavior_gerbers.zip similarity index 100% rename from Hardware/PCB/harp behavior_gerbers.zip rename to hardware/PCB/harp behavior_gerbers.zip diff --git a/Interface/.editorconfig b/software/.editorconfig similarity index 100% rename from Interface/.editorconfig rename to software/.editorconfig diff --git a/Interface/.gitignore b/software/.gitignore similarity index 100% rename from Interface/.gitignore rename to software/.gitignore diff --git a/Interface/Directory.Build.props b/software/Directory.Build.props similarity index 100% rename from Interface/Directory.Build.props rename to software/Directory.Build.props diff --git a/Interface/Harp.Behavior.App/Harp.Behavior.App.csproj b/software/Harp.Behavior.App/Harp.Behavior.App.csproj similarity index 100% rename from Interface/Harp.Behavior.App/Harp.Behavior.App.csproj rename to software/Harp.Behavior.App/Harp.Behavior.App.csproj diff --git a/Interface/Harp.Behavior.App/Program.cs b/software/Harp.Behavior.App/Program.cs similarity index 100% rename from Interface/Harp.Behavior.App/Program.cs rename to software/Harp.Behavior.App/Program.cs diff --git a/Interface/Harp.Behavior.App/Properties/launchSettings.json b/software/Harp.Behavior.App/Properties/launchSettings.json similarity index 100% rename from Interface/Harp.Behavior.App/Properties/launchSettings.json rename to software/Harp.Behavior.App/Properties/launchSettings.json diff --git a/Interface/Harp.Behavior.App/README.md b/software/Harp.Behavior.App/README.md similarity index 100% rename from Interface/Harp.Behavior.App/README.md rename to software/Harp.Behavior.App/README.md diff --git a/Interface/Harp.Behavior.App/app.manifest b/software/Harp.Behavior.App/app.manifest similarity index 100% rename from Interface/Harp.Behavior.App/app.manifest rename to software/Harp.Behavior.App/app.manifest diff --git a/Interface/Harp.Behavior.Design/Adapters/RgbRegisterAdapter.cs b/software/Harp.Behavior.Design/Adapters/RgbRegisterAdapter.cs similarity index 100% rename from Interface/Harp.Behavior.Design/Adapters/RgbRegisterAdapter.cs rename to software/Harp.Behavior.Design/Adapters/RgbRegisterAdapter.cs diff --git a/Interface/Harp.Behavior.Design/App.axaml b/software/Harp.Behavior.Design/App.axaml similarity index 100% rename from Interface/Harp.Behavior.Design/App.axaml rename to software/Harp.Behavior.Design/App.axaml diff --git a/Interface/Harp.Behavior.Design/App.axaml.cs b/software/Harp.Behavior.Design/App.axaml.cs similarity index 100% rename from Interface/Harp.Behavior.Design/App.axaml.cs rename to software/Harp.Behavior.Design/App.axaml.cs diff --git a/Interface/Harp.Behavior.Design/Assets/logo.icns b/software/Harp.Behavior.Design/Assets/logo.icns similarity index 100% rename from Interface/Harp.Behavior.Design/Assets/logo.icns rename to software/Harp.Behavior.Design/Assets/logo.icns diff --git a/Interface/Harp.Behavior.Design/Assets/logo.ico b/software/Harp.Behavior.Design/Assets/logo.ico similarity index 100% rename from Interface/Harp.Behavior.Design/Assets/logo.ico rename to software/Harp.Behavior.Design/Assets/logo.ico diff --git a/Interface/Harp.Behavior.Design/Assets/logo.png b/software/Harp.Behavior.Design/Assets/logo.png similarity index 100% rename from Interface/Harp.Behavior.Design/Assets/logo.png rename to software/Harp.Behavior.Design/Assets/logo.png diff --git a/Interface/Harp.Behavior.Design/Assets/logo.svg b/software/Harp.Behavior.Design/Assets/logo.svg similarity index 100% rename from Interface/Harp.Behavior.Design/Assets/logo.svg rename to software/Harp.Behavior.Design/Assets/logo.svg diff --git a/Interface/Harp.Behavior.Design/Assets/logo_about.png b/software/Harp.Behavior.Design/Assets/logo_about.png similarity index 100% rename from Interface/Harp.Behavior.Design/Assets/logo_about.png rename to software/Harp.Behavior.Design/Assets/logo_about.png diff --git a/Interface/Harp.Behavior.Design/Controls/ExtendedColorPicker.cs b/software/Harp.Behavior.Design/Controls/ExtendedColorPicker.cs similarity index 100% rename from Interface/Harp.Behavior.Design/Controls/ExtendedColorPicker.cs rename to software/Harp.Behavior.Design/Controls/ExtendedColorPicker.cs diff --git a/Interface/Harp.Behavior.Design/Controls/RgbRegisterControl.axaml b/software/Harp.Behavior.Design/Controls/RgbRegisterControl.axaml similarity index 100% rename from Interface/Harp.Behavior.Design/Controls/RgbRegisterControl.axaml rename to software/Harp.Behavior.Design/Controls/RgbRegisterControl.axaml diff --git a/Interface/Harp.Behavior.Design/Controls/RgbRegisterControl.axaml.cs b/software/Harp.Behavior.Design/Controls/RgbRegisterControl.axaml.cs similarity index 100% rename from Interface/Harp.Behavior.Design/Controls/RgbRegisterControl.axaml.cs rename to software/Harp.Behavior.Design/Controls/RgbRegisterControl.axaml.cs diff --git a/Interface/Harp.Behavior.Design/Controls/VisualStatus.axaml b/software/Harp.Behavior.Design/Controls/VisualStatus.axaml similarity index 100% rename from Interface/Harp.Behavior.Design/Controls/VisualStatus.axaml rename to software/Harp.Behavior.Design/Controls/VisualStatus.axaml diff --git a/Interface/Harp.Behavior.Design/Controls/VisualStatus.axaml.cs b/software/Harp.Behavior.Design/Controls/VisualStatus.axaml.cs similarity index 100% rename from Interface/Harp.Behavior.Design/Controls/VisualStatus.axaml.cs rename to software/Harp.Behavior.Design/Controls/VisualStatus.axaml.cs diff --git a/Interface/Harp.Behavior.Design/Controls/WriteMessagesControl.axaml b/software/Harp.Behavior.Design/Controls/WriteMessagesControl.axaml similarity index 100% rename from Interface/Harp.Behavior.Design/Controls/WriteMessagesControl.axaml rename to software/Harp.Behavior.Design/Controls/WriteMessagesControl.axaml diff --git a/Interface/Harp.Behavior.Design/Controls/WriteMessagesControl.axaml.cs b/software/Harp.Behavior.Design/Controls/WriteMessagesControl.axaml.cs similarity index 100% rename from Interface/Harp.Behavior.Design/Controls/WriteMessagesControl.axaml.cs rename to software/Harp.Behavior.Design/Controls/WriteMessagesControl.axaml.cs diff --git a/Interface/Harp.Behavior.Design/Converters/BooleanConverter.cs b/software/Harp.Behavior.Design/Converters/BooleanConverter.cs similarity index 100% rename from Interface/Harp.Behavior.Design/Converters/BooleanConverter.cs rename to software/Harp.Behavior.Design/Converters/BooleanConverter.cs diff --git a/Interface/Harp.Behavior.Design/Converters/EnableFlagConverter.cs b/software/Harp.Behavior.Design/Converters/EnableFlagConverter.cs similarity index 100% rename from Interface/Harp.Behavior.Design/Converters/EnableFlagConverter.cs rename to software/Harp.Behavior.Design/Converters/EnableFlagConverter.cs diff --git a/Interface/Harp.Behavior.Design/Converters/EnumDisplayConverter.cs b/software/Harp.Behavior.Design/Converters/EnumDisplayConverter.cs similarity index 100% rename from Interface/Harp.Behavior.Design/Converters/EnumDisplayConverter.cs rename to software/Harp.Behavior.Design/Converters/EnumDisplayConverter.cs diff --git a/Interface/Harp.Behavior.Design/Converters/PayloadFieldConverter.cs b/software/Harp.Behavior.Design/Converters/PayloadFieldConverter.cs similarity index 100% rename from Interface/Harp.Behavior.Design/Converters/PayloadFieldConverter.cs rename to software/Harp.Behavior.Design/Converters/PayloadFieldConverter.cs diff --git a/Interface/Harp.Behavior.Design/Converters/TypeDescriptionConverter.cs b/software/Harp.Behavior.Design/Converters/TypeDescriptionConverter.cs similarity index 100% rename from Interface/Harp.Behavior.Design/Converters/TypeDescriptionConverter.cs rename to software/Harp.Behavior.Design/Converters/TypeDescriptionConverter.cs diff --git a/Interface/Harp.Behavior.Design/Converters/VisualStatusColorConverter.cs b/software/Harp.Behavior.Design/Converters/VisualStatusColorConverter.cs similarity index 100% rename from Interface/Harp.Behavior.Design/Converters/VisualStatusColorConverter.cs rename to software/Harp.Behavior.Design/Converters/VisualStatusColorConverter.cs diff --git a/Interface/Harp.Behavior.Design/FodyWeavers.xml b/software/Harp.Behavior.Design/FodyWeavers.xml similarity index 100% rename from Interface/Harp.Behavior.Design/FodyWeavers.xml rename to software/Harp.Behavior.Design/FodyWeavers.xml diff --git a/Interface/Harp.Behavior.Design/Harp.Behavior.Design.csproj b/software/Harp.Behavior.Design/Harp.Behavior.Design.csproj similarity index 100% rename from Interface/Harp.Behavior.Design/Harp.Behavior.Design.csproj rename to software/Harp.Behavior.Design/Harp.Behavior.Design.csproj diff --git a/Interface/Harp.Behavior.Design/Styles/DefaultStyles.axaml b/software/Harp.Behavior.Design/Styles/DefaultStyles.axaml similarity index 100% rename from Interface/Harp.Behavior.Design/Styles/DefaultStyles.axaml rename to software/Harp.Behavior.Design/Styles/DefaultStyles.axaml diff --git a/Interface/Harp.Behavior.Design/ViewModels/AboutViewModel.cs b/software/Harp.Behavior.Design/ViewModels/AboutViewModel.cs similarity index 100% rename from Interface/Harp.Behavior.Design/ViewModels/AboutViewModel.cs rename to software/Harp.Behavior.Design/ViewModels/AboutViewModel.cs diff --git a/Interface/Harp.Behavior.Design/ViewModels/BehaviorViewModel.cs b/software/Harp.Behavior.Design/ViewModels/BehaviorViewModel.cs similarity index 100% rename from Interface/Harp.Behavior.Design/ViewModels/BehaviorViewModel.cs rename to software/Harp.Behavior.Design/ViewModels/BehaviorViewModel.cs diff --git a/Interface/Harp.Behavior.Design/ViewModels/ViewModelBase.cs b/software/Harp.Behavior.Design/ViewModels/ViewModelBase.cs similarity index 100% rename from Interface/Harp.Behavior.Design/ViewModels/ViewModelBase.cs rename to software/Harp.Behavior.Design/ViewModels/ViewModelBase.cs diff --git a/Interface/Harp.Behavior.Design/Views/About.axaml b/software/Harp.Behavior.Design/Views/About.axaml similarity index 100% rename from Interface/Harp.Behavior.Design/Views/About.axaml rename to software/Harp.Behavior.Design/Views/About.axaml diff --git a/Interface/Harp.Behavior.Design/Views/About.axaml.cs b/software/Harp.Behavior.Design/Views/About.axaml.cs similarity index 100% rename from Interface/Harp.Behavior.Design/Views/About.axaml.cs rename to software/Harp.Behavior.Design/Views/About.axaml.cs diff --git a/Interface/Harp.Behavior.Design/Views/BehaviorView.axaml b/software/Harp.Behavior.Design/Views/BehaviorView.axaml similarity index 100% rename from Interface/Harp.Behavior.Design/Views/BehaviorView.axaml rename to software/Harp.Behavior.Design/Views/BehaviorView.axaml diff --git a/Interface/Harp.Behavior.Design/Views/BehaviorView.axaml.cs b/software/Harp.Behavior.Design/Views/BehaviorView.axaml.cs similarity index 100% rename from Interface/Harp.Behavior.Design/Views/BehaviorView.axaml.cs rename to software/Harp.Behavior.Design/Views/BehaviorView.axaml.cs diff --git a/Interface/Harp.Behavior.Design/Views/MainWindow.axaml b/software/Harp.Behavior.Design/Views/MainWindow.axaml similarity index 100% rename from Interface/Harp.Behavior.Design/Views/MainWindow.axaml rename to software/Harp.Behavior.Design/Views/MainWindow.axaml diff --git a/Interface/Harp.Behavior.Design/Views/MainWindow.axaml.cs b/software/Harp.Behavior.Design/Views/MainWindow.axaml.cs similarity index 100% rename from Interface/Harp.Behavior.Design/Views/MainWindow.axaml.cs rename to software/Harp.Behavior.Design/Views/MainWindow.axaml.cs diff --git a/Interface/Harp.Behavior.sln b/software/Harp.Behavior.sln similarity index 100% rename from Interface/Harp.Behavior.sln rename to software/Harp.Behavior.sln diff --git a/Interface/Harp.Behavior/AsyncDevice.Generated.cs b/software/Harp.Behavior/AsyncDevice.Generated.cs similarity index 100% rename from Interface/Harp.Behavior/AsyncDevice.Generated.cs rename to software/Harp.Behavior/AsyncDevice.Generated.cs diff --git a/Interface/Harp.Behavior/Device.Generated.cs b/software/Harp.Behavior/Device.Generated.cs similarity index 100% rename from Interface/Harp.Behavior/Device.Generated.cs rename to software/Harp.Behavior/Device.Generated.cs diff --git a/Interface/Harp.Behavior/Harp.Behavior.csproj b/software/Harp.Behavior/Harp.Behavior.csproj similarity index 100% rename from Interface/Harp.Behavior/Harp.Behavior.csproj rename to software/Harp.Behavior/Harp.Behavior.csproj diff --git a/Interface/Harp.Behavior/Properties/AssemblyInfo.cs b/software/Harp.Behavior/Properties/AssemblyInfo.cs similarity index 100% rename from Interface/Harp.Behavior/Properties/AssemblyInfo.cs rename to software/Harp.Behavior/Properties/AssemblyInfo.cs diff --git a/Interface/Harp.Behavior/Properties/launchSettings.json b/software/Harp.Behavior/Properties/launchSettings.json similarity index 100% rename from Interface/Harp.Behavior/Properties/launchSettings.json rename to software/Harp.Behavior/Properties/launchSettings.json diff --git a/Interface/Harp.Behavior/README.md b/software/Harp.Behavior/README.md similarity index 100% rename from Interface/Harp.Behavior/README.md rename to software/Harp.Behavior/README.md diff --git a/Interface/LICENSE b/software/LICENSE similarity index 100% rename from Interface/LICENSE rename to software/LICENSE diff --git a/Interface/icon.png b/software/icon.png similarity index 100% rename from Interface/icon.png rename to software/icon.png From 89bd25c1347fceef2eca6995b1bca0cba5976514 Mon Sep 17 00:00:00 2001 From: glopesdev Date: Wed, 25 Mar 2026 16:10:55 +0000 Subject: [PATCH 3/6] Add common docs and build infrastructure Brings the repository into compliance with the standardised build infrastructure. --- .bonsai/Bonsai.config | 63 ++++ .bonsai/NuGet.config | 5 + .config/dotnet-tools.json | 7 + .editorconfig | 53 ++-- .gitattributes | 43 ++- .github/workflows/Harp.Behavior.yml | 274 +++++++++++++++++- .gitignore | 18 +- .gitmodules | 3 + {Assets => docs}/LICENSE | 0 README.md => docs/README.md | 2 +- docs/articles/toc.yml | 2 + docs/build.ps1 | 19 ++ docs/docfx.json | 79 +++++ docs/export-images.ps1 | 44 +++ docs/filter.yml | 4 + docs/harp-docfx | 1 + {Assets => docs/images}/pcb.png | Bin docs/index.md | 1 + docs/template/public/main.css | 1 + docs/template/public/main.js | 13 + docs/toc.yml | 4 + docs/workflows/.gitignore | 2 + software/Directory.Build.props | 21 +- software/Directory.Build.targets | 3 + .../Harp.Behavior.App.csproj | 24 +- .../Harp.Behavior.Design.csproj | 5 +- software/Harp.Behavior/Harp.Behavior.csproj | 19 +- software/build/Common.Tests.csproj.props | 6 + software/build/Common.csproj.props | 69 +++++ software/build/Common.csproj.targets | 46 +++ software/build/Package.props | 9 + software/build/Project.csproj.props | 5 + software/{ => build}/icon.png | Bin 33 files changed, 750 insertions(+), 95 deletions(-) create mode 100644 .bonsai/Bonsai.config create mode 100644 .bonsai/NuGet.config create mode 100644 .gitmodules rename {Assets => docs}/LICENSE (100%) rename README.md => docs/README.md (97%) create mode 100644 docs/articles/toc.yml create mode 100644 docs/build.ps1 create mode 100644 docs/docfx.json create mode 100644 docs/export-images.ps1 create mode 100644 docs/filter.yml create mode 160000 docs/harp-docfx rename {Assets => docs/images}/pcb.png (100%) create mode 100644 docs/index.md create mode 100644 docs/template/public/main.css create mode 100644 docs/template/public/main.js create mode 100644 docs/toc.yml create mode 100644 docs/workflows/.gitignore create mode 100644 software/Directory.Build.targets create mode 100644 software/build/Common.Tests.csproj.props create mode 100644 software/build/Common.csproj.props create mode 100644 software/build/Common.csproj.targets create mode 100644 software/build/Package.props create mode 100644 software/build/Project.csproj.props rename software/{ => build}/icon.png (100%) diff --git a/.bonsai/Bonsai.config b/.bonsai/Bonsai.config new file mode 100644 index 0000000..a2b4cf3 --- /dev/null +++ b/.bonsai/Bonsai.config @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.bonsai/NuGet.config b/.bonsai/NuGet.config new file mode 100644 index 0000000..8f58394 --- /dev/null +++ b/.bonsai/NuGet.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index ac75f2c..b28d5b5 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -2,6 +2,13 @@ "version": 1, "isRoot": true, "tools": { + "docfx": { + "version": "2.78.5", + "commands": [ + "docfx" + ], + "rollForward": false + }, "harp.toolkit": { "version": "0.2.2", "commands": [ diff --git a/.editorconfig b/.editorconfig index 514c50b..c9a9d0d 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,27 +1,46 @@ -# To learn more about .editorconfig see https://aka.ms/editorconfigdocs -############################### -# Core EditorConfig Options # -############################### -# All files +root = true + [*] indent_style = space -# XML project files -[*.{csproj,vcxproj,vcxproj.filters,proj,projitems,shproj,bonsai}] +#-------------------------------------------------------------------------------------------------- +# XML, JSON, and web files +#-------------------------------------------------------------------------------------------------- +[*.{xml,csproj,vcxproj,vcxproj.filters,shproj,props,targets,config,nuspec,resx,vsixmanifest,wxs,vstemplate,slnx}] indent_size = 2 -# XML config files -[*.{props,targets,ruleset,config,nuspec,resx,vsixmanifest,vsct}] +[*.json] indent_size = 2 -# Code files -[*.{cs,csx}] +[*.{html,css}] +indent_size = 2 + +#-------------------------------------------------------------------------------------------------- +# C++ +#-------------------------------------------------------------------------------------------------- +[*.{c,cpp,h,hpp,ixx}] indent_size = 4 +charset = utf-8-bom +trim_trailing_whitespace = true insert_final_newline = true + +#-------------------------------------------------------------------------------------------------- +# C# +#-------------------------------------------------------------------------------------------------- +[*.{cs,csx}] +indent_size = 4 charset = utf-8-bom -############################### -# .NET Coding Conventions # -############################### -[*.{cs}] -# Organize usings -dotnet_sort_system_directives_first = true \ No newline at end of file +trim_trailing_whitespace = true +insert_final_newline = true + +# Language keyword vs full type name +# Predefined for members, etc does not create a message because the explicitly sized types are conveient in interop scenarios where the bit size matters. +dotnet_style_predefined_type_for_locals_parameters_members = true:none +dotnet_style_predefined_type_for_member_access = true:suggestion + +# Instantiate argument exceptions correctly +dotnet_diagnostic.CA2208.severity = warning + +# Don't complain about not using modern collection syntax +dotnet_style_prefer_collection_expression = never +csharp_style_prefer_range_operator = false diff --git a/.gitattributes b/.gitattributes index cc4d38c..dd82528 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,44 @@ +# Auto detect text files and normalize line endings * text=auto -*.cs text + +# Scripts +*.cmd text eol=crlf +*.sh text eol=lf +*.ps1 text + +# Config +*.gitignore text +*.gitattributes text +*.gitmodules text eol=lf +*.editorconfig text +*.git-blame-ignore-revs text +*.sln text +*.proj text +*.props text +*.targets text *.csproj text +*.wixproj text +*.config text +*.json text +*.xml text +*.yml text + +# Code +*.manifest text +*.vsixmanifest text +*.vstemplate text +*.resx text +*.cs text +*.bonsai text +*.wxs text + +# Documents +LICENSE text +*.md text diff=markdown +*.rtf diff=astextplain + +# Graphics +*.png binary +*.ico binary +*.gif binary +*.svg text diff --git a/.github/workflows/Harp.Behavior.yml b/.github/workflows/Harp.Behavior.yml index 184873c..783ff49 100644 --- a/.github/workflows/Harp.Behavior.yml +++ b/.github/workflows/Harp.Behavior.yml @@ -1,3 +1,17 @@ +# ======================================================================================================================================================================= +# Harp.Behavior CI/CD +# ======================================================================================================================================================================= +# Index: +# * Build firmware +# * Build interface +# * Build documentation +# * Render workflow images +# * Publish packages to GitHub +# * Publish packages to NuGet.org +# * Publish documentation +# ======================================================================================================================================================================= +# Note that this is a generic workflow meant for all Harp devices. Minor local modifications are fine, see https://github.com/bonsai-rx/prefect for more information. +# ======================================================================================================================================================================= name: Harp.Behavior on: push: @@ -7,6 +21,10 @@ on: release: types: [published] workflow_dispatch: + inputs: + publish-documentation: + description: "Publish documentation to GitHub Pages?" + default: "false" env: DOTNET_NOLOGO: true DOTNET_CLI_TELEMETRY_OPTOUT: true @@ -14,6 +32,13 @@ env: ContinuousIntegrationBuild: true AVR_TOOLCHAIN_URL: https://ww1.microchip.com/downloads/aemDocuments/documents/OTH/ProductDocuments/SoftwareTools/avr8-gnu-toolchain-3.6.2.1778-win32.any.x86.zip jobs: + # ===================================================================================================================================================================== + # Build firmware + # ___ _ _ _ __ _ + # | _ )_ _(_) |__| | / _(_)_ _ _ ____ __ ____ _ _ _ ___ + # | _ \ || | | / _` | | _| | '_| ' \ V V / _` | '_/ -_) + # |___/\_,_|_|_\__,_| |_| |_|_| |_|_|_\_/\_/\__,_|_| \___| + # ===================================================================================================================================================================== build-firmware: strategy: fail-fast: false @@ -61,16 +86,32 @@ jobs: env: GH_TOKEN: ${{github.token}} + # ===================================================================================================================================================================== + # Build interface + # ___ _ _ _ _ _ __ + # | _ )_ _(_) |__| | (_)_ _| |_ ___ _ _ / _|__ _ __ ___ + # | _ \ || | | / _` | | | ' \ _/ -_) '_| _/ _` / _/ -_) + # |___/\_,_|_|_\__,_| |_|_||_\__\___|_| |_| \__,_\__\___| + # ===================================================================================================================================================================== build-interface: strategy: fail-fast: false matrix: - configuration: ['Release'] + platform: + - name: Windows x64 + os: windows-latest + - name: Linux x64 + os: ubuntu-latest + - name: macOS x64 + os: macos-latest + configuration: ['debug', 'release'] include: - - configuration: Release + - platform: + os: windows-latest + configuration: release collect-packages: true - name: Build Interface - runs-on: windows-latest + name: Build Interface (${{ matrix.platform.name }} ${{ matrix.configuration }}) + runs-on: ${{ matrix.platform.os }} steps: # ----------------------------------------------------------------------- Checkout - name: Checkout @@ -118,21 +159,182 @@ jobs: with: name: Packages if-no-files-found: error - path: software/bin/${{matrix.configuration}}/** + path: artifacts/package/${{matrix.configuration}}/** # ----------------------------------------------------------------------- Upload release assets - name: Upload release assets - if: github.event_name == 'release' && matrix.configuration == 'Release' - run: gh release upload --repo ${{github.repository}} ${{github.event.release.tag_name}} software/bin/${{matrix.configuration}}/** --clobber + if: matrix.collect-packages && steps.pack.outcome == 'success' && github.event_name == 'release' + run: gh release upload --repo ${{github.repository}} ${{github.event.release.tag_name}} artifacts/package/${{matrix.configuration}}/** --clobber env: GH_TOKEN: ${{github.token}} - publish-packages-nuget-org: - name: Publish packages to NuGet.org + # ===================================================================================================================================================================== + # Build documentation + # ___ _ _ _ _ _ _ _ + # | _ )_ _(_) |__| | __| |___ __ _ _ _ __ ___ _ _| |_ __ _| |_(_)___ _ _ + # | _ \ || | | / _` | / _` / _ \/ _| || | ' \/ -_) ' \ _/ _` | _| / _ \ ' \ + # |___/\_,_|_|_\__,_| \__,_\___/\__|\_,_|_|_|_\___|_||_\__\__,_|\__|_\___/_||_| + # ===================================================================================================================================================================== + build-documentation: + name: Build documentation + runs-on: ubuntu-latest + steps: + # ----------------------------------------------------------------------- Checkout + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: recursive + + # ----------------------------------------------------------------------- Set up tools + - name: Set up .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.x + + - name: Set up .NET tools + run: dotnet tool restore + + # ----------------------------------------------------------------------- Configure build + - name: Configure build + id: configure-build + uses: bonsai-rx/configure-build@v1 + + # ----------------------------------------------------------------------- Restore + - name: Restore + run: dotnet restore software + + # ----------------------------------------------------------------------- Build metadata + - name: Build metadata + id: build-metadata + run: dotnet docfx metadata docs/docfx.json --noRestore + + # ----------------------------------------------------------------------- Build documentation + - name: Build documentation + id: build-documentation + run: dotnet docfx build docs/docfx.json + + # ----------------------------------------------------------------------- Collect artifacts + - name: Collect documentation metadata + uses: actions/upload-artifact@v4 + if: steps.build-metadata.outcome == 'success' && always() + with: + name: DocumentationMetadata + if-no-files-found: error + path: artifacts/docs/api/ + + - name: Collect documentation artifact + uses: actions/upload-artifact@v4 + if: steps.build-documentation.outcome == 'success' && always() + with: + name: DocumentationWebsite + if-no-files-found: error + path: artifacts/docs/site/ + + # ===================================================================================================================================================================== + # Render workflow images + # ___ _ _ __ _ _ + # | _ \___ _ _ __| |___ _ _ __ __ _____ _ _| |__/ _| |_____ __ __ (_)_ __ __ _ __ _ ___ ___ + # | / -_) ' \/ _` / -_) '_| \ V V / _ \ '_| / / _| / _ \ V V / | | ' \/ _` / _` / -_|_-< + # |_|_\___|_||_\__,_\___|_| \_/\_/\___/_| |_\_\_| |_\___/\_/\_/ |_|_|_|_\__,_\__, \___/__/ + # |___/ + # ===================================================================================================================================================================== + workflow-images: + name: Render workflow images + runs-on: windows-latest + needs: build-interface + if: needs.build.outputs.need-workflow-image-render == 'true' + steps: + # ----------------------------------------------------------------------- Checkout + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: recursive + + # ----------------------------------------------------------------------- Download built packages + - name: Download packages for rendering + uses: actions/download-artifact@v4 + with: + name: Packages + path: artifacts/packages/ + + # ----------------------------------------------------------------------- Set up Bonsai environments + - name: Set up Bonsai environments + uses: bonsai-rx/setup-bonsai@v1 + with: + environment-paths: '**/.bonsai/' + inject-packages: artifacts/packages/*.nupkg + + # ----------------------------------------------------------------------- Render + - name: Render images + id: render + run: pwsh ./docs/export-images.ps1 -OutputFolder artifacts/docs/site/ -Verbose + + # ----------------------------------------------------------------------- Collect artifacts + - name: Collect images + uses: actions/upload-artifact@v4 + if: steps.render.outcome == 'success' && always() + with: + name: DocumentationWorkflowImages + if-no-files-found: error + path: artifacts/docs/site/ + + # ===================================================================================================================================================================== + # Publish packages to GitHub + # ___ _ _ _ _ _ _ ___ _ _ _ _ _ + # | _ \_ _| |__| (_)__| |_ _ __ __ _ __| |____ _ __ _ ___ ___ | |_ ___ / __(_) |_| || |_ _| |__ + # | _/ || | '_ \ | (_-< ' \ | '_ \/ _` / _| / / _` / _` / -_|_-< | _/ _ \ | (_ | | _| __ | || | '_ \ + # |_| \_,_|_.__/_|_/__/_||_| | .__/\__,_\__|_\_\__,_\__, \___/__/ \__\___/ \___|_|\__|_||_|\_,_|_.__/ + # |_| |___/ + # ===================================================================================================================================================================== + publish-github: + name: Publish packages to GitHub runs-on: ubuntu-latest + needs: build-interface permissions: # Needed to attach files to releases contents: write + # Needed to upload to GitHub Packages + packages: write + if: github.event_name == 'push' || github.event_name == 'release' + steps: + # ----------------------------------------------------------------------- Set up .NET + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.x + + # ----------------------------------------------------------------------- Download built packages + - name: Download built packages + uses: actions/download-artifact@v4 + with: + name: Packages + path: artifacts/packages/ + + # ----------------------------------------------------------------------- Upload release assets + - name: Upload release assets + if: github.event_name == 'release' + run: gh release upload --repo ${{github.repository}} ${{github.event.release.tag_name}} artifacts/packages/* --clobber + env: + GH_TOKEN: ${{github.token}} + + # ----------------------------------------------------------------------- Push to GitHub Packages + - name: Push to GitHub Packages + run: dotnet nuget push "artifacts/packages/*.nupkg" --skip-duplicate --no-symbols --api-key ${{secrets.GITHUB_TOKEN}} --source https://nuget.pkg.github.com/${{github.repository_owner}} + env: + # This is a workaround for https://github.com/NuGet/Home/issues/9775 + DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER: 0 + + # ===================================================================================================================================================================== + # Publish packages to NuGet.org + # ___ _ _ _ _ _ _ _ _ ___ _ + # | _ \_ _| |__| (_)__| |_ _ __ __ _ __| |____ _ __ _ ___ ___ | |_ ___ | \| |_ _ / __|___| |_ ___ _ _ __ _ + # | _/ || | '_ \ | (_-< ' \ | '_ \/ _` / _| / / _` / _` / -_|_-< | _/ _ \ | .` | || | (_ / -_) _|_/ _ \ '_/ _` | + # |_| \_,_|_.__/_|_/__/_||_| | .__/\__,_\__|_\_\__,_\__, \___/__/ \__\___/ |_|\_|\_,_|\___\___|\__(_)___/_| \__, | + # |_| |___/ |___/ + # ===================================================================================================================================================================== + publish-packages-nuget-org: + name: Publish packages to NuGet.org + runs-on: ubuntu-latest environment: public-release needs: [build-firmware, build-interface] if: github.event_name == 'release' @@ -156,3 +358,57 @@ jobs: env: # This is a workaround for https://github.com/NuGet/Home/issues/9775 DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER: 0 + + + # ===================================================================================================================================================================== + # Publish documentation + # ___ _ _ _ _ _ _ _ _ + # | _ \_ _| |__| (_)__| |_ __| |___ __ _ _ _ __ ___ _ _| |_ __ _| |_(_)___ _ _ + # | _/ || | '_ \ | (_-< ' \ / _` / _ \/ _| || | ' \/ -_) ' \ _/ _` | _| / _ \ ' \ + # |_| \_,_|_.__/_|_/__/_||_| \__,_\___/\__|\_,_|_|_|_\___|_||_\__\__,_|\__|_\___/_||_| + # ===================================================================================================================================================================== + publish-documentation: + name: Publish documentation + runs-on: ubuntu-latest + # Publishing is not strictly necessary here, but if we're going to do a public release we want to wait to publish the docs until it goes out + needs: [build-documentation, workflow-images, publish-packages-nuget-org] + permissions: + # Both required by actions/deploy-pages + pages: write + id-token: write + environment: + # Intentionally not using the "default" github-pages environment as it's not compatible with this workflow + name: documentation-website + url: ${{steps.publish.outputs.page_url}} + # Only run if the workflow isn't dying and build-documentation was successful and either A) we're releasing or B) we have continuous deployment enabled + if: | + !cancelled() && !failure() && needs.build-documentation.result == 'success' + && (github.event_name == 'release' + || (github.event_name == 'workflow_dispatch' && github.event.inputs.publish-documentation == 'true') + || (vars.CONTINUOUS_DOCUMENTATION && github.event_name != 'pull_request') + ) + steps: + # ----------------------------------------------------------------------- Download documentation website components + # It is intentional that we use two independent download steps here as it ensures that workflow images are permitted + # to overwrite any conflicts in the docfx output but not the other way around. + - name: Download documentation website + uses: actions/download-artifact@v4 + with: + name: DocumentationWebsite + + - name: Download workflow images + if: ${{needs.workflow-images.result == 'success'}} + uses: actions/download-artifact@v4 + with: + name: DocumentationWorkflowImages + + # ----------------------------------------------------------------------- Collect artifacts + - name: Upload final documentation website artifact + uses: actions/upload-pages-artifact@v3 + with: + path: '.' + + # ----------------------------------------------------------------------- Publish to GitHub Pages + - name: Publish to GitHub Pages + id: publish + uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore index 00cb6ad..373ef07 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,5 @@ - -desktop.ini - -# Visual studio files -.vs -.suo -.nuget -bin -obj -Debug -Release -packages -*.componentinfo.xml \ No newline at end of file +.bonsai/Bonsai.exe* +.bonsai/Packages/ +.bonsai/Settings/ +.vs/ +/artifacts/ \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..61eb2dc --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "docs/harp-docfx"] + path = docs/harp-docfx + url = https://github.com/harp-tech/docfx-tools diff --git a/Assets/LICENSE b/docs/LICENSE similarity index 100% rename from Assets/LICENSE rename to docs/LICENSE diff --git a/README.md b/docs/README.md similarity index 97% rename from README.md rename to docs/README.md index 9125f63..9bb07b8 100644 --- a/README.md +++ b/docs/README.md @@ -1,7 +1,7 @@ ## Harp Behavior This is a multi-purpose device tailored to behavioral experiments. It allows control of pokes, RGB LEDs, LEDs, cameras, servo motors and a quadrature counter. -![HarpBehavior](./Assets/pcb.png) +![HarpBehavior](./images/pcb.png) ### Key Features ### diff --git a/docs/articles/toc.yml b/docs/articles/toc.yml new file mode 100644 index 0000000..ebe36f8 --- /dev/null +++ b/docs/articles/toc.yml @@ -0,0 +1,2 @@ +- name: Introduction + href: ../index.md \ No newline at end of file diff --git a/docs/build.ps1 b/docs/build.ps1 new file mode 100644 index 0000000..01ad8f5 --- /dev/null +++ b/docs/build.ps1 @@ -0,0 +1,19 @@ +[CmdletBinding()] param ( + [string[]]$docfxArgs +) +Set-StrictMode -Version 3.0 +$ErrorActionPreference = 'Stop' +$PSNativeCommandUseErrorActionPreference = $true + +Push-Location $PSScriptRoot +try { + $libPaths = @() + $libPaths += Get-ChildItem "..\artifacts\bin\*\release_net4*" -Directory | Select-Object -Expand FullName + $libPaths += "..\artifacts\package\release" + + ./export-images.ps1 $libPaths + dotnet docfx metadata + dotnet docfx build $docfxArgs +} finally { + Pop-Location +} diff --git a/docs/docfx.json b/docs/docfx.json new file mode 100644 index 0000000..ab4cfc8 --- /dev/null +++ b/docs/docfx.json @@ -0,0 +1,79 @@ +{ + "$schema": "https://raw.githubusercontent.com/dotnet/docfx/main/schemas/docfx.schema.json", + "metadata": [ + { + "src": [ + { + "src": "../software/", + "files": "**/*.csproj", + "exclude": "**/*.App.csproj" + } + ], + "output": "../artifacts/docs/api/", + "enumSortOrder": "declaringOrder", + "memberLayout": "separatePages", + "filter": "filter.yml" + } + ], + "build": { + "content": [ + { + "files": [ + "*.md", + "toc.yml", + "{articles,tutorials,examples}/**/*.md", + "{articles,tutorials,examples}/**/toc.yml" + ], + "exclude": "README.md" + }, + { + "src": "../artifacts/docs/api/", + "dest": "api", + "files": "**/*.yml" + } + ], + "resource": [ + { + "files": [ + "images/**", + "workflows/**/*.{bonsai,svg}", + "{articles,tutorials,examples}/**/*.{bonsai,svg}" + ] + } + ], + "overwrite": [ + "apidoc/**/*.md" + ], + "output": "../artifacts/docs/site/", + "template": [ + "default", + "modern", + "harp-docfx/template", + "template" + ], + "sitemap": { + "baseUrl": "https://harp-tech.org/device.behavior" + }, + "globalMetadata": { + "_appName": "Behavior", + "_appTitle": "Harp.Behavior", + "_appFooter": "© harp-tech and Contributors. Made with docfx", + "_enableNewTab": true, + "_enableSearch": true, + "_gitContribute": { + "apiSpecFolder": "docs/apidoc" + } + }, + "markdownEngineProperties": { + "markdigExtensions": [ + "attributes", + "customcontainers" + ] + }, + "xref": [ + "https://harp-tech.org/xrefmap.yml", + "https://bonsai-rx.org/docs/xrefmap.yml", + "https://horizongir.github.io/reactive/xrefmap.yml" + ] + } +} \ No newline at end of file diff --git a/docs/export-images.ps1 b/docs/export-images.ps1 new file mode 100644 index 0000000..862a179 --- /dev/null +++ b/docs/export-images.ps1 @@ -0,0 +1,44 @@ +[CmdletBinding()] param ( + [string[]]$LibrarySources, + [bool]$UseGalleryForWorkflowsDirectory=$false, + [bool]$UseGalleryForExamplesDirectory=$true, + [string]$OutputFolder=$null +) +Set-StrictMode -Version 3.0 +$ErrorActionPreference = 'Stop' +$PSNativeCommandUseErrorActionPreference = $true + +if ($OutputFolder) { + $OutputFolder = Join-Path (Get-Location) $OutputFolder +} + +function Process-Workflow-Collection([bool]$useGallery, [string]$workflowPath, [string]$environmentPath) { + $libPath = $LibrarySources + + if ($useGallery) { + $libPath = @() + $galleryPath = Join-Path $environmentPath 'Gallery' + $null = New-Item -ItemType Directory -Path $galleryPath -Force + foreach ($librarySource in $LibrarySources) { + Get-ChildItem -Path $librarySource -Filter *.nupkg | Copy-Item -Destination $galleryPath + } + } + + $bootstrapperPath = (Join-Path $environmentPath 'Bonsai.exe') + .\harp-docfx\modules\Export-Image.ps1 -libPath $libPath -workflowPath $workflowPath -bootstrapperPath $bootstrapperPath -outputFolder $OutputFolder -documentationRoot $PSScriptRoot +} + +Push-Location $PSScriptRoot +try { + if (Test-Path -Path 'workflows/') { + Process-Workflow-Collection $UseGalleryForWorkflowsDirectory './workflows' '../.bonsai/' + } + + if (Test-Path -Path 'examples/') { + foreach ($environment in (Get-ChildItem -Path 'examples/' -Filter '.bonsai' -Recurse -FollowSymlink -Directory)) { + Process-Workflow-Collection $UseGalleryForExamplesDirectory ($environment.Parent.FullName) ($environment.FullName) + } + } +} finally { + Pop-Location +} diff --git a/docs/filter.yml b/docs/filter.yml new file mode 100644 index 0000000..472eb43 --- /dev/null +++ b/docs/filter.yml @@ -0,0 +1,4 @@ +apiRules: +- exclude: + hasAttribute: + uid: System.ObsoleteAttribute diff --git a/docs/harp-docfx b/docs/harp-docfx new file mode 160000 index 0000000..035d4e6 --- /dev/null +++ b/docs/harp-docfx @@ -0,0 +1 @@ +Subproject commit 035d4e69d875d9bc02e87372c9549e4483164654 diff --git a/Assets/pcb.png b/docs/images/pcb.png similarity index 100% rename from Assets/pcb.png rename to docs/images/pcb.png diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..78c0d6e --- /dev/null +++ b/docs/index.md @@ -0,0 +1 @@ +[!INCLUDE [](README.md)] \ No newline at end of file diff --git a/docs/template/public/main.css b/docs/template/public/main.css new file mode 100644 index 0000000..fdb72e4 --- /dev/null +++ b/docs/template/public/main.css @@ -0,0 +1 @@ +@import "bonsai.css"; diff --git a/docs/template/public/main.js b/docs/template/public/main.js new file mode 100644 index 0000000..6ebede4 --- /dev/null +++ b/docs/template/public/main.js @@ -0,0 +1,13 @@ +import WorkflowContainer from "./workflow.js" + +export default { + defaultTheme: 'light', + iconLinks: [{ + icon: 'github', + href: 'https://github.com/harp-tech/device.behavior', + title: 'GitHub' + }], + start: () => { + WorkflowContainer.init(); + } +} diff --git a/docs/toc.yml b/docs/toc.yml new file mode 100644 index 0000000..3c4ae30 --- /dev/null +++ b/docs/toc.yml @@ -0,0 +1,4 @@ +- name: Documentation + href: articles/ +- name: API + href: ../artifacts/docs/api/ \ No newline at end of file diff --git a/docs/workflows/.gitignore b/docs/workflows/.gitignore new file mode 100644 index 0000000..e2beea4 --- /dev/null +++ b/docs/workflows/.gitignore @@ -0,0 +1,2 @@ +*.layout +*.svg diff --git a/software/Directory.Build.props b/software/Directory.Build.props index 7510aaf..c8f3a92 100644 --- a/software/Directory.Build.props +++ b/software/Directory.Build.props @@ -1,20 +1,3 @@ - - - enable - 11.2.6 - - - - $(WarningsAsErrors);CS7035 - $(NoWarn);CS1591 - - - 0 - 42.42.42-dev$(DevVersion) - $(CiBuildVersion) - - - - - + + \ No newline at end of file diff --git a/software/Directory.Build.targets b/software/Directory.Build.targets new file mode 100644 index 0000000..b7ac253 --- /dev/null +++ b/software/Directory.Build.targets @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/software/Harp.Behavior.App/Harp.Behavior.App.csproj b/software/Harp.Behavior.App/Harp.Behavior.App.csproj index 966f9c8..f300e27 100644 --- a/software/Harp.Behavior.App/Harp.Behavior.App.csproj +++ b/software/Harp.Behavior.App/Harp.Behavior.App.csproj @@ -1,38 +1,34 @@  + Visual tool for configuring Harp Behavior devices. + $(PackageTags) App + net8.0 WinExe true harp.behavior - net8.0 - enable true app.manifest - ..\bin\$(Configuration) ..\Harp.Behavior.Design\Assets\logo.ico - Harp.Behavior.App - Harp.Behavior.App - Harp.Behavior.App + $(MSBuildProjectName) + $(MSBuildProjectName) org.harp-tech - $(Version) - $(Version) + $(CiBuildVersion) + $(CiBuildVersion) AAPL . - Harp.Behavior.App + $(MSBuildProjectName) logo.icns NSApplication true - harp-tech ..\Harp.Behavior.Design\Assets\logo.ico - git - ..\bin\$(Configuration) - - + + diff --git a/software/Harp.Behavior.Design/Harp.Behavior.Design.csproj b/software/Harp.Behavior.Design/Harp.Behavior.Design.csproj index a7155e9..042aa35 100644 --- a/software/Harp.Behavior.Design/Harp.Behavior.Design.csproj +++ b/software/Harp.Behavior.Design/Harp.Behavior.Design.csproj @@ -1,9 +1,8 @@  - enable - latest + Design Library containing UI components for configuring Harp Behavior devices. true - ..\bin\$(Configuration) + $(PackageTags) Design Bonsai Rx net8.0 diff --git a/software/Harp.Behavior/Harp.Behavior.csproj b/software/Harp.Behavior/Harp.Behavior.csproj index 89a92cb..7be6d10 100644 --- a/software/Harp.Behavior/Harp.Behavior.csproj +++ b/software/Harp.Behavior/Harp.Behavior.csproj @@ -1,23 +1,9 @@ - harp-tech - Copyright © harp-tech and Contributors - true - snupkg Bonsai Library containing interfaces for data acquisition and control of Harp Behavior devices. - true - Dependency;BonsaiLibrary - Harp Behavior Bonsai Rx - https://harp-tech.org - true - icon.png - LICENSE - README.md - ..\bin\$(Configuration) + $(PackageTags) Bonsai Rx net472;net8.0 - true - 9.0 @@ -25,9 +11,6 @@ - - - diff --git a/software/build/Common.Tests.csproj.props b/software/build/Common.Tests.csproj.props new file mode 100644 index 0000000..c42b25f --- /dev/null +++ b/software/build/Common.Tests.csproj.props @@ -0,0 +1,6 @@ + + + false + false + + \ No newline at end of file diff --git a/software/build/Common.csproj.props b/software/build/Common.csproj.props new file mode 100644 index 0000000..f96fce7 --- /dev/null +++ b/software/build/Common.csproj.props @@ -0,0 +1,69 @@ + + + + + Debug + AnyCPU + + + + + 12.0 + true + strict + enable + true + true + $([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)../../artifacts')) + + + + + true + Dependency;BonsaiLibrary + + icon.png + $(MSBuildThisFileDirectory)icon.png + + LICENSE + $(MSBuildThisFileDirectory)../LICENSE + + README.md + $(MSBuildThisFileDirectory)../../docs/README.md + $(MSBuildThisFileDirectory)README.nuget.md + $(MSBuildProjectDirectory)\README.md + $(MSBuildProjectDirectory)\README.nuget.md + + + false + true + snupkg + + + false + true + + + + + $(WarningsAsErrors);NU1701;CS7035 + + + true + + + true + + + + + + \ No newline at end of file diff --git a/software/build/Common.csproj.targets b/software/build/Common.csproj.targets new file mode 100644 index 0000000..07f4916 --- /dev/null +++ b/software/build/Common.csproj.targets @@ -0,0 +1,46 @@ + + + + + + + + + + + $(TargetName.ToLowerInvariant()) + DotnetTool + + + 1591,1573 + + + + + + + + 0 + 42.42.42-dev$(DevVersion) + + $(CiBuildVersion) + + + + + + + + + + + + \ No newline at end of file diff --git a/software/build/Package.props b/software/build/Package.props new file mode 100644 index 0000000..cecc3ab --- /dev/null +++ b/software/build/Package.props @@ -0,0 +1,9 @@ + + + Harp Behavior + https://harp-tech.org/device.behavior + + harp-tech + Copyright © harp-tech and Contributors + + \ No newline at end of file diff --git a/software/build/Project.csproj.props b/software/build/Project.csproj.props new file mode 100644 index 0000000..276e93b --- /dev/null +++ b/software/build/Project.csproj.props @@ -0,0 +1,5 @@ + + + 11.2.6 + + \ No newline at end of file diff --git a/software/icon.png b/software/build/icon.png similarity index 100% rename from software/icon.png rename to software/build/icon.png From 84032f4a0a1e9c846f85368f49d2cb3ae4dde4ad Mon Sep 17 00:00:00 2001 From: glopesdev Date: Thu, 26 Mar 2026 17:04:07 +0000 Subject: [PATCH 4/6] Remove assets folder --- Assets/README.md | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 Assets/README.md diff --git a/Assets/README.md b/Assets/README.md deleted file mode 100644 index 71cd2cc..0000000 --- a/Assets/README.md +++ /dev/null @@ -1,12 +0,0 @@ -### Licensing -Copyright Filipe Carvalho 2020 - -Creative Commons License
This work is licensed under a Creative Commons Attribution 4.0 International License. - -#### You are free to: -*Share* — copy and redistribute the material in any medium or format. - -*Adapt* — remix, transform, and build upon the material for any purpose, even commercially. - -#### Under the following terms: -*Attribution* — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use. \ No newline at end of file From 6f2b9e0a8b7066bb9d2cb39fda1862a6301ff679 Mon Sep 17 00:00:00 2001 From: Shawn Tan Date: Thu, 20 Aug 2026 16:21:10 +0800 Subject: [PATCH 5/6] Initial draft of docs --- .bonsai/Bonsai.config | 3 + docs/apidoc/Harp_Behavior_AnalogData.md | 9 + docs/apidoc/Harp_Behavior_Camera0Frame.md | 9 + docs/apidoc/Harp_Behavior_Camera0Frequency.md | 9 + ..._Behavior_CreateCamera0FrequencyPayload.md | 9 + ...arp_Behavior_CreateDisableServosPayload.md | 9 + ...rp_Behavior_CreateEnableEncodersPayload.md | 9 + ...vior_CreateEnableSerialTimestampPayload.md | 9 + ...Harp_Behavior_CreateEnableServosPayload.md | 9 + .../Harp_Behavior_CreateEncoderModePayload.md | 9 + ...Harp_Behavior_CreateEncoderResetPayload.md | 9 + .../Harp_Behavior_CreateEventEnablePayload.md | 9 + .../Harp_Behavior_CreateLed0CurrentPayload.md | 9 + ...rp_Behavior_CreateLed0MaxCurrentPayload.md | 9 + ...Harp_Behavior_CreateMimicPort0IRPayload.md | 9 + ...p_Behavior_CreateMimicPort0ValvePayload.md | 9 + .../Harp_Behavior_CreateOutputClearPayload.md | 9 + ...Behavior_CreateOutputPulseEnablePayload.md | 15 + .../Harp_Behavior_CreateOutputSetPayload.md | 9 + ...Harp_Behavior_CreateOutputTogglePayload.md | 9 + ...p_Behavior_CreatePokeInputFilterPayload.md | 9 + .../Harp_Behavior_CreatePulseDO0Payload.md | 15 + ..._Behavior_CreatePulseSupplyPort0Payload.md | 9 + ...p_Behavior_CreatePwmDutyCycleDO0Payload.md | 9 + ...p_Behavior_CreatePwmFrequencyDO0Payload.md | 9 + .../Harp_Behavior_CreatePwmStartPayload.md | 9 + .../Harp_Behavior_CreatePwmStopPayload.md | 9 + .../Harp_Behavior_CreateRgbAllPayload.md | 9 + ...Behavior_CreateServoMotor2PeriodPayload.md | 9 + ..._Behavior_CreateServoMotor2PulsePayload.md | 15 + ...Harp_Behavior_CreateStartCamerasPayload.md | 9 + .../Harp_Behavior_CreateStopCamerasPayload.md | 9 + docs/apidoc/Harp_Behavior_Device.md | 22 + docs/apidoc/Harp_Behavior_DeviceDataWriter.md | 9 + .../apidoc/Harp_Behavior_DigitalInputState.md | 9 + docs/apidoc/Harp_Behavior_DisableServos.md | 9 + docs/apidoc/Harp_Behavior_EnableEncoders.md | 9 + .../Harp_Behavior_EnableSerialTimestamp.md | 9 + docs/apidoc/Harp_Behavior_EnableServos.md | 9 + docs/apidoc/Harp_Behavior_EncoderMode.md | 9 + docs/apidoc/Harp_Behavior_EncoderReset.md | 9 + docs/apidoc/Harp_Behavior_EventEnable.md | 9 + docs/apidoc/Harp_Behavior_Led0Current.md | 9 + docs/apidoc/Harp_Behavior_Led0MaxCurrent.md | 9 + docs/apidoc/Harp_Behavior_MimicPort0IR.md | 9 + docs/apidoc/Harp_Behavior_MimicPort0Valve.md | 9 + docs/apidoc/Harp_Behavior_OutputClear.md | 9 + .../apidoc/Harp_Behavior_OutputPulseEnable.md | 15 + docs/apidoc/Harp_Behavior_OutputSet.md | 9 + docs/apidoc/Harp_Behavior_OutputToggle.md | 9 + docs/apidoc/Harp_Behavior_PokeInputFilter.md | 9 + docs/apidoc/Harp_Behavior_PulseDO0.md | 15 + docs/apidoc/Harp_Behavior_PulseSupplyPort0.md | 9 + docs/apidoc/Harp_Behavior_PwmDutyCycleDO0.md | 9 + docs/apidoc/Harp_Behavior_PwmFrequencyDO0.md | 9 + docs/apidoc/Harp_Behavior_PwmStart.md | 9 + docs/apidoc/Harp_Behavior_PwmStop.md | 9 + docs/apidoc/Harp_Behavior_RgbAll.md | 9 + .../apidoc/Harp_Behavior_ServoMotor2Period.md | 9 + docs/apidoc/Harp_Behavior_ServoMotor2Pulse.md | 15 + docs/apidoc/Harp_Behavior_StartCameras.md | 9 + docs/apidoc/Harp_Behavior_StopCameras.md | 9 + docs/articles/acquire-analog-data.md | 66 +++ docs/articles/advanced-configuration.md | 36 ++ docs/articles/behavior-gui.md | 19 + docs/articles/behavior-overview.md | 51 +++ docs/articles/configure-leds.md | 114 +++++ docs/articles/connections.md | 47 +++ docs/articles/control-digital-outputs.md | 110 +++++ docs/articles/control-poke.md | 124 ++++++ docs/articles/drive-servos.md | 79 ++++ docs/articles/generate-pwm.md | 88 ++++ docs/articles/harp-bonsai.md | 48 +++ docs/articles/installation.md | 61 +++ docs/articles/logging-analysis.md | 53 +++ .../peripherals/peripherals-micepoke.md | 46 ++ .../peripherals/peripherals-portbreakout.md | 41 ++ docs/articles/peripherals/toc.yml | 4 + docs/articles/read-digital-inputs.md | 44 ++ docs/articles/route-signals.md | 78 ++++ docs/articles/toc.yml | 36 +- docs/articles/track-rotation.md | 76 ++++ docs/articles/trigger-cameras.md | 84 ++++ docs/articles/troubleshooting.md | 28 ++ docs/articles/version-footer.md | 8 + docs/images/OEPS-BehaviorBoard.jpg | Bin 0 -> 693741 bytes docs/images/OEPS-Breakout.png | Bin 0 -> 237114 bytes docs/images/OEPS-MicePokeWaterValve.jpg | Bin 0 -> 261646 bytes docs/images/behavior-GUI.png | Bin 0 -> 128650 bytes docs/images/behavior-devicepinout.svg | 392 ++++++++++++++++++ docs/images/behavior-peripherals.jpg | Bin 0 -> 160807 bytes docs/images/bonsai-packagemanager.png | Bin 0 -> 46552 bytes docs/index.md | 25 +- .../acquireanalogdata-toplevel.bonsai | 91 ++++ .../acquireanalogdata-visualizedata.bonsai | 53 +++ .../advancedconfiguration-eventenable.bonsai | 31 ++ .../advancedconfiguration-toplevel.bonsai | 69 +++ docs/workflows/behavior-firststeps.bonsai | 79 ++++ docs/workflows/configureleds-current.bonsai | 42 ++ docs/workflows/configureleds-ledonoff.bonsai | 48 +++ docs/workflows/configureleds-rgbcolors.bonsai | 36 ++ docs/workflows/configureleds-rgbonoff.bonsai | 48 +++ docs/workflows/configureleds-toplevel.bonsai | 182 ++++++++ .../controldigitaloutputs-pulse.bonsai | 42 ++ .../controldigitaloutputs-setclear.bonsai | 48 +++ .../controldigitaloutputs-timer.bonsai | 31 ++ .../controldigitaloutputs-toggle.bonsai | 31 ++ .../controldigitaloutputs-toplevel.bonsai | 160 +++++++ docs/workflows/controlpoke-driveled.bonsai | 48 +++ docs/workflows/controlpoke-inputfilter.bonsai | 31 ++ docs/workflows/controlpoke-toplevel.bonsai | 191 +++++++++ docs/workflows/controlpoke-valve.bonsai | 70 ++++ .../controlpoke-visualizeevents.bonsai | 34 ++ docs/workflows/driveservos-configure.bonsai | 42 ++ .../driveservos-enabledisable.bonsai | 48 +++ docs/workflows/driveservos-position.bonsai | 31 ++ docs/workflows/driveservos-toplevel.bonsai | 139 +++++++ docs/workflows/generatepwm-configure.bonsai | 42 ++ docs/workflows/generatepwm-pulseenable.bonsai | 42 ++ docs/workflows/generatepwm-startstop.bonsai | 48 +++ docs/workflows/generatepwm-toplevel.bonsai | 150 +++++++ docs/workflows/harp-devicepattern.bonsai | 43 ++ .../readdigitalinputs-toplevel.bonsai | 72 ++++ docs/workflows/routesignals-mimicir.bonsai | 48 +++ docs/workflows/routesignals-mimicvalve.bonsai | 31 ++ .../routesignals-serialtimestamp.bonsai | 31 ++ docs/workflows/routesignals-toplevel.bonsai | 128 ++++++ docs/workflows/trackrotation-enable.bonsai | 42 ++ docs/workflows/trackrotation-reset.bonsai | 31 ++ docs/workflows/trackrotation-toplevel.bonsai | 137 ++++++ docs/workflows/trackrotation-visualize.bonsai | 45 ++ .../workflows/triggercameras-frequency.bonsai | 31 ++ .../workflows/triggercameras-startstop.bonsai | 48 +++ docs/workflows/triggercameras-toplevel.bonsai | 139 +++++++ .../triggercameras-visualizeframes.bonsai | 41 ++ 135 files changed, 5131 insertions(+), 2 deletions(-) create mode 100644 docs/apidoc/Harp_Behavior_AnalogData.md create mode 100644 docs/apidoc/Harp_Behavior_Camera0Frame.md create mode 100644 docs/apidoc/Harp_Behavior_Camera0Frequency.md create mode 100644 docs/apidoc/Harp_Behavior_CreateCamera0FrequencyPayload.md create mode 100644 docs/apidoc/Harp_Behavior_CreateDisableServosPayload.md create mode 100644 docs/apidoc/Harp_Behavior_CreateEnableEncodersPayload.md create mode 100644 docs/apidoc/Harp_Behavior_CreateEnableSerialTimestampPayload.md create mode 100644 docs/apidoc/Harp_Behavior_CreateEnableServosPayload.md create mode 100644 docs/apidoc/Harp_Behavior_CreateEncoderModePayload.md create mode 100644 docs/apidoc/Harp_Behavior_CreateEncoderResetPayload.md create mode 100644 docs/apidoc/Harp_Behavior_CreateEventEnablePayload.md create mode 100644 docs/apidoc/Harp_Behavior_CreateLed0CurrentPayload.md create mode 100644 docs/apidoc/Harp_Behavior_CreateLed0MaxCurrentPayload.md create mode 100644 docs/apidoc/Harp_Behavior_CreateMimicPort0IRPayload.md create mode 100644 docs/apidoc/Harp_Behavior_CreateMimicPort0ValvePayload.md create mode 100644 docs/apidoc/Harp_Behavior_CreateOutputClearPayload.md create mode 100644 docs/apidoc/Harp_Behavior_CreateOutputPulseEnablePayload.md create mode 100644 docs/apidoc/Harp_Behavior_CreateOutputSetPayload.md create mode 100644 docs/apidoc/Harp_Behavior_CreateOutputTogglePayload.md create mode 100644 docs/apidoc/Harp_Behavior_CreatePokeInputFilterPayload.md create mode 100644 docs/apidoc/Harp_Behavior_CreatePulseDO0Payload.md create mode 100644 docs/apidoc/Harp_Behavior_CreatePulseSupplyPort0Payload.md create mode 100644 docs/apidoc/Harp_Behavior_CreatePwmDutyCycleDO0Payload.md create mode 100644 docs/apidoc/Harp_Behavior_CreatePwmFrequencyDO0Payload.md create mode 100644 docs/apidoc/Harp_Behavior_CreatePwmStartPayload.md create mode 100644 docs/apidoc/Harp_Behavior_CreatePwmStopPayload.md create mode 100644 docs/apidoc/Harp_Behavior_CreateRgbAllPayload.md create mode 100644 docs/apidoc/Harp_Behavior_CreateServoMotor2PeriodPayload.md create mode 100644 docs/apidoc/Harp_Behavior_CreateServoMotor2PulsePayload.md create mode 100644 docs/apidoc/Harp_Behavior_CreateStartCamerasPayload.md create mode 100644 docs/apidoc/Harp_Behavior_CreateStopCamerasPayload.md create mode 100644 docs/apidoc/Harp_Behavior_Device.md create mode 100644 docs/apidoc/Harp_Behavior_DeviceDataWriter.md create mode 100644 docs/apidoc/Harp_Behavior_DigitalInputState.md create mode 100644 docs/apidoc/Harp_Behavior_DisableServos.md create mode 100644 docs/apidoc/Harp_Behavior_EnableEncoders.md create mode 100644 docs/apidoc/Harp_Behavior_EnableSerialTimestamp.md create mode 100644 docs/apidoc/Harp_Behavior_EnableServos.md create mode 100644 docs/apidoc/Harp_Behavior_EncoderMode.md create mode 100644 docs/apidoc/Harp_Behavior_EncoderReset.md create mode 100644 docs/apidoc/Harp_Behavior_EventEnable.md create mode 100644 docs/apidoc/Harp_Behavior_Led0Current.md create mode 100644 docs/apidoc/Harp_Behavior_Led0MaxCurrent.md create mode 100644 docs/apidoc/Harp_Behavior_MimicPort0IR.md create mode 100644 docs/apidoc/Harp_Behavior_MimicPort0Valve.md create mode 100644 docs/apidoc/Harp_Behavior_OutputClear.md create mode 100644 docs/apidoc/Harp_Behavior_OutputPulseEnable.md create mode 100644 docs/apidoc/Harp_Behavior_OutputSet.md create mode 100644 docs/apidoc/Harp_Behavior_OutputToggle.md create mode 100644 docs/apidoc/Harp_Behavior_PokeInputFilter.md create mode 100644 docs/apidoc/Harp_Behavior_PulseDO0.md create mode 100644 docs/apidoc/Harp_Behavior_PulseSupplyPort0.md create mode 100644 docs/apidoc/Harp_Behavior_PwmDutyCycleDO0.md create mode 100644 docs/apidoc/Harp_Behavior_PwmFrequencyDO0.md create mode 100644 docs/apidoc/Harp_Behavior_PwmStart.md create mode 100644 docs/apidoc/Harp_Behavior_PwmStop.md create mode 100644 docs/apidoc/Harp_Behavior_RgbAll.md create mode 100644 docs/apidoc/Harp_Behavior_ServoMotor2Period.md create mode 100644 docs/apidoc/Harp_Behavior_ServoMotor2Pulse.md create mode 100644 docs/apidoc/Harp_Behavior_StartCameras.md create mode 100644 docs/apidoc/Harp_Behavior_StopCameras.md create mode 100644 docs/articles/acquire-analog-data.md create mode 100644 docs/articles/advanced-configuration.md create mode 100644 docs/articles/behavior-gui.md create mode 100644 docs/articles/behavior-overview.md create mode 100644 docs/articles/configure-leds.md create mode 100644 docs/articles/connections.md create mode 100644 docs/articles/control-digital-outputs.md create mode 100644 docs/articles/control-poke.md create mode 100644 docs/articles/drive-servos.md create mode 100644 docs/articles/generate-pwm.md create mode 100644 docs/articles/harp-bonsai.md create mode 100644 docs/articles/installation.md create mode 100644 docs/articles/logging-analysis.md create mode 100644 docs/articles/peripherals/peripherals-micepoke.md create mode 100644 docs/articles/peripherals/peripherals-portbreakout.md create mode 100644 docs/articles/peripherals/toc.yml create mode 100644 docs/articles/read-digital-inputs.md create mode 100644 docs/articles/route-signals.md create mode 100644 docs/articles/track-rotation.md create mode 100644 docs/articles/trigger-cameras.md create mode 100644 docs/articles/troubleshooting.md create mode 100644 docs/articles/version-footer.md create mode 100644 docs/images/OEPS-BehaviorBoard.jpg create mode 100644 docs/images/OEPS-Breakout.png create mode 100644 docs/images/OEPS-MicePokeWaterValve.jpg create mode 100644 docs/images/behavior-GUI.png create mode 100644 docs/images/behavior-devicepinout.svg create mode 100644 docs/images/behavior-peripherals.jpg create mode 100644 docs/images/bonsai-packagemanager.png create mode 100644 docs/workflows/acquireanalogdata-toplevel.bonsai create mode 100644 docs/workflows/acquireanalogdata-visualizedata.bonsai create mode 100644 docs/workflows/advancedconfiguration-eventenable.bonsai create mode 100644 docs/workflows/advancedconfiguration-toplevel.bonsai create mode 100644 docs/workflows/behavior-firststeps.bonsai create mode 100644 docs/workflows/configureleds-current.bonsai create mode 100644 docs/workflows/configureleds-ledonoff.bonsai create mode 100644 docs/workflows/configureleds-rgbcolors.bonsai create mode 100644 docs/workflows/configureleds-rgbonoff.bonsai create mode 100644 docs/workflows/configureleds-toplevel.bonsai create mode 100644 docs/workflows/controldigitaloutputs-pulse.bonsai create mode 100644 docs/workflows/controldigitaloutputs-setclear.bonsai create mode 100644 docs/workflows/controldigitaloutputs-timer.bonsai create mode 100644 docs/workflows/controldigitaloutputs-toggle.bonsai create mode 100644 docs/workflows/controldigitaloutputs-toplevel.bonsai create mode 100644 docs/workflows/controlpoke-driveled.bonsai create mode 100644 docs/workflows/controlpoke-inputfilter.bonsai create mode 100644 docs/workflows/controlpoke-toplevel.bonsai create mode 100644 docs/workflows/controlpoke-valve.bonsai create mode 100644 docs/workflows/controlpoke-visualizeevents.bonsai create mode 100644 docs/workflows/driveservos-configure.bonsai create mode 100644 docs/workflows/driveservos-enabledisable.bonsai create mode 100644 docs/workflows/driveservos-position.bonsai create mode 100644 docs/workflows/driveservos-toplevel.bonsai create mode 100644 docs/workflows/generatepwm-configure.bonsai create mode 100644 docs/workflows/generatepwm-pulseenable.bonsai create mode 100644 docs/workflows/generatepwm-startstop.bonsai create mode 100644 docs/workflows/generatepwm-toplevel.bonsai create mode 100644 docs/workflows/harp-devicepattern.bonsai create mode 100644 docs/workflows/readdigitalinputs-toplevel.bonsai create mode 100644 docs/workflows/routesignals-mimicir.bonsai create mode 100644 docs/workflows/routesignals-mimicvalve.bonsai create mode 100644 docs/workflows/routesignals-serialtimestamp.bonsai create mode 100644 docs/workflows/routesignals-toplevel.bonsai create mode 100644 docs/workflows/trackrotation-enable.bonsai create mode 100644 docs/workflows/trackrotation-reset.bonsai create mode 100644 docs/workflows/trackrotation-toplevel.bonsai create mode 100644 docs/workflows/trackrotation-visualize.bonsai create mode 100644 docs/workflows/triggercameras-frequency.bonsai create mode 100644 docs/workflows/triggercameras-startstop.bonsai create mode 100644 docs/workflows/triggercameras-toplevel.bonsai create mode 100644 docs/workflows/triggercameras-visualizeframes.bonsai diff --git a/.bonsai/Bonsai.config b/.bonsai/Bonsai.config index a2b4cf3..d9fd009 100644 --- a/.bonsai/Bonsai.config +++ b/.bonsai/Bonsai.config @@ -5,6 +5,7 @@ + @@ -27,12 +28,14 @@ + + diff --git a/docs/apidoc/Harp_Behavior_AnalogData.md b/docs/apidoc/Harp_Behavior_AnalogData.md new file mode 100644 index 0000000..f032bd0 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_AnalogData.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.AnalogData +--- + +### Visualize Analog Data + +:::workflow +![Visualize Analog Data](../workflows/acquireanalogdata-visualizedata.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_Camera0Frame.md b/docs/apidoc/Harp_Behavior_Camera0Frame.md new file mode 100644 index 0000000..c4c9d99 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_Camera0Frame.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.Camera0Frame +--- + +### Visualize Frame Events + +:::workflow +![Visualize Frame Events](../workflows/triggercameras-visualizeframes.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_Camera0Frequency.md b/docs/apidoc/Harp_Behavior_Camera0Frequency.md new file mode 100644 index 0000000..fbd1549 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_Camera0Frequency.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.Camera0Frequency +--- + +### Configure Trigger Frequency + +:::workflow +![Configure Trigger Frequency](../workflows/triggercameras-frequency.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_CreateCamera0FrequencyPayload.md b/docs/apidoc/Harp_Behavior_CreateCamera0FrequencyPayload.md new file mode 100644 index 0000000..0bf41e1 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_CreateCamera0FrequencyPayload.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.CreateCamera0FrequencyPayload +--- + +### Configure Trigger Frequency + +:::workflow +![Configure Trigger Frequency](../workflows/triggercameras-frequency.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_CreateDisableServosPayload.md b/docs/apidoc/Harp_Behavior_CreateDisableServosPayload.md new file mode 100644 index 0000000..71a18c7 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_CreateDisableServosPayload.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.CreateDisableServosPayload +--- + +### Enable and Disable Servos + +:::workflow +![Enable and Disable Servos](../workflows/driveservos-enabledisable.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_CreateEnableEncodersPayload.md b/docs/apidoc/Harp_Behavior_CreateEnableEncodersPayload.md new file mode 100644 index 0000000..fc04043 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_CreateEnableEncodersPayload.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.CreateEnableEncodersPayload +--- + +### Enable the Encoder + +:::workflow +![Enable the Encoder](../workflows/trackrotation-enable.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_CreateEnableSerialTimestampPayload.md b/docs/apidoc/Harp_Behavior_CreateEnableSerialTimestampPayload.md new file mode 100644 index 0000000..e70c245 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_CreateEnableSerialTimestampPayload.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.CreateEnableSerialTimestampPayload +--- + +### Stream Timestamps + +:::workflow +![Stream Timestamps](../workflows/routesignals-serialtimestamp.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_CreateEnableServosPayload.md b/docs/apidoc/Harp_Behavior_CreateEnableServosPayload.md new file mode 100644 index 0000000..2593876 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_CreateEnableServosPayload.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.CreateEnableServosPayload +--- + +### Enable and Disable Servos + +:::workflow +![Enable and Disable Servos](../workflows/driveservos-enabledisable.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_CreateEncoderModePayload.md b/docs/apidoc/Harp_Behavior_CreateEncoderModePayload.md new file mode 100644 index 0000000..133b0ec --- /dev/null +++ b/docs/apidoc/Harp_Behavior_CreateEncoderModePayload.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.CreateEncoderModePayload +--- + +### Enable the Encoder + +:::workflow +![Enable the Encoder](../workflows/trackrotation-enable.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_CreateEncoderResetPayload.md b/docs/apidoc/Harp_Behavior_CreateEncoderResetPayload.md new file mode 100644 index 0000000..9fe4cea --- /dev/null +++ b/docs/apidoc/Harp_Behavior_CreateEncoderResetPayload.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.CreateEncoderResetPayload +--- + +### Reset the Encoder + +:::workflow +![Reset the Encoder](../workflows/trackrotation-reset.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_CreateEventEnablePayload.md b/docs/apidoc/Harp_Behavior_CreateEventEnablePayload.md new file mode 100644 index 0000000..6892c4b --- /dev/null +++ b/docs/apidoc/Harp_Behavior_CreateEventEnablePayload.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.CreateEventEnablePayload +--- + +### Select Active Events + +:::workflow +![Select Active Events](../workflows/advancedconfiguration-eventenable.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_CreateLed0CurrentPayload.md b/docs/apidoc/Harp_Behavior_CreateLed0CurrentPayload.md new file mode 100644 index 0000000..67433b3 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_CreateLed0CurrentPayload.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.CreateLed0CurrentPayload +--- + +### Configure LED Current + +:::workflow +![Configure LED Current](../workflows/configureleds-current.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_CreateLed0MaxCurrentPayload.md b/docs/apidoc/Harp_Behavior_CreateLed0MaxCurrentPayload.md new file mode 100644 index 0000000..bc5b88c --- /dev/null +++ b/docs/apidoc/Harp_Behavior_CreateLed0MaxCurrentPayload.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.CreateLed0MaxCurrentPayload +--- + +### Configure LED Current + +:::workflow +![Configure LED Current](../workflows/configureleds-current.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_CreateMimicPort0IRPayload.md b/docs/apidoc/Harp_Behavior_CreateMimicPort0IRPayload.md new file mode 100644 index 0000000..593f56b --- /dev/null +++ b/docs/apidoc/Harp_Behavior_CreateMimicPort0IRPayload.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.CreateMimicPort0IRPayload +--- + +### Mimic Poke Inputs + +:::workflow +![Mimic Poke Inputs](../workflows/routesignals-mimicir.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_CreateMimicPort0ValvePayload.md b/docs/apidoc/Harp_Behavior_CreateMimicPort0ValvePayload.md new file mode 100644 index 0000000..2c966d0 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_CreateMimicPort0ValvePayload.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.CreateMimicPort0ValvePayload +--- + +### Mimic Valves + +:::workflow +![Mimic Valves](../workflows/routesignals-mimicvalve.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_CreateOutputClearPayload.md b/docs/apidoc/Harp_Behavior_CreateOutputClearPayload.md new file mode 100644 index 0000000..01a263d --- /dev/null +++ b/docs/apidoc/Harp_Behavior_CreateOutputClearPayload.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.CreateOutputClearPayload +--- + +### Set and Clear Outputs + +:::workflow +![Set and Clear Outputs](../workflows/controldigitaloutputs-setclear.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_CreateOutputPulseEnablePayload.md b/docs/apidoc/Harp_Behavior_CreateOutputPulseEnablePayload.md new file mode 100644 index 0000000..0f18918 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_CreateOutputPulseEnablePayload.md @@ -0,0 +1,15 @@ +--- +uid: Harp.Behavior.CreateOutputPulseEnablePayload +--- + +### Pulse Outputs + +:::workflow +![Pulse Outputs](../workflows/controldigitaloutputs-pulse.bonsai) +::: + +### Generate PWM Bursts + +:::workflow +![Generate PWM Bursts](../workflows/generatepwm-pulseenable.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_CreateOutputSetPayload.md b/docs/apidoc/Harp_Behavior_CreateOutputSetPayload.md new file mode 100644 index 0000000..f2c9461 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_CreateOutputSetPayload.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.CreateOutputSetPayload +--- + +### Set and Clear Outputs + +:::workflow +![Set and Clear Outputs](../workflows/controldigitaloutputs-setclear.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_CreateOutputTogglePayload.md b/docs/apidoc/Harp_Behavior_CreateOutputTogglePayload.md new file mode 100644 index 0000000..6817861 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_CreateOutputTogglePayload.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.CreateOutputTogglePayload +--- + +### Toggle Outputs + +:::workflow +![Toggle Outputs](../workflows/controldigitaloutputs-toggle.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_CreatePokeInputFilterPayload.md b/docs/apidoc/Harp_Behavior_CreatePokeInputFilterPayload.md new file mode 100644 index 0000000..0d16be9 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_CreatePokeInputFilterPayload.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.CreatePokeInputFilterPayload +--- + +### Configure Input Filter + +:::workflow +![Configure Input Filter](../workflows/controlpoke-inputfilter.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_CreatePulseDO0Payload.md b/docs/apidoc/Harp_Behavior_CreatePulseDO0Payload.md new file mode 100644 index 0000000..7dec333 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_CreatePulseDO0Payload.md @@ -0,0 +1,15 @@ +--- +uid: Harp.Behavior.CreatePulseDO0Payload +--- + +### Pulse Outputs + +:::workflow +![Pulse Outputs](../workflows/controldigitaloutputs-pulse.bonsai) +::: + +### Generate PWM Bursts + +:::workflow +![Generate PWM Bursts](../workflows/generatepwm-pulseenable.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_CreatePulseSupplyPort0Payload.md b/docs/apidoc/Harp_Behavior_CreatePulseSupplyPort0Payload.md new file mode 100644 index 0000000..01b1103 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_CreatePulseSupplyPort0Payload.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.CreatePulseSupplyPort0Payload +--- + +### Deliver Rewards + +:::workflow +![Deliver Rewards](../workflows/controlpoke-valve.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_CreatePwmDutyCycleDO0Payload.md b/docs/apidoc/Harp_Behavior_CreatePwmDutyCycleDO0Payload.md new file mode 100644 index 0000000..869d266 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_CreatePwmDutyCycleDO0Payload.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.CreatePwmDutyCycleDO0Payload +--- + +### Configure PWM + +:::workflow +![Configure PWM](../workflows/generatepwm-configure.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_CreatePwmFrequencyDO0Payload.md b/docs/apidoc/Harp_Behavior_CreatePwmFrequencyDO0Payload.md new file mode 100644 index 0000000..14645f1 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_CreatePwmFrequencyDO0Payload.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.CreatePwmFrequencyDO0Payload +--- + +### Configure PWM + +:::workflow +![Configure PWM](../workflows/generatepwm-configure.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_CreatePwmStartPayload.md b/docs/apidoc/Harp_Behavior_CreatePwmStartPayload.md new file mode 100644 index 0000000..3aa0cb3 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_CreatePwmStartPayload.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.CreatePwmStartPayload +--- + +### Start and Stop PWM + +:::workflow +![Start and Stop PWM](../workflows/generatepwm-startstop.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_CreatePwmStopPayload.md b/docs/apidoc/Harp_Behavior_CreatePwmStopPayload.md new file mode 100644 index 0000000..97413a3 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_CreatePwmStopPayload.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.CreatePwmStopPayload +--- + +### Start and Stop PWM + +:::workflow +![Start and Stop PWM](../workflows/generatepwm-startstop.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_CreateRgbAllPayload.md b/docs/apidoc/Harp_Behavior_CreateRgbAllPayload.md new file mode 100644 index 0000000..591b4df --- /dev/null +++ b/docs/apidoc/Harp_Behavior_CreateRgbAllPayload.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.CreateRgbAllPayload +--- + +### Set RGB Colors + +:::workflow +![Set RGB Colors](../workflows/configureleds-rgbcolors.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_CreateServoMotor2PeriodPayload.md b/docs/apidoc/Harp_Behavior_CreateServoMotor2PeriodPayload.md new file mode 100644 index 0000000..13a3221 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_CreateServoMotor2PeriodPayload.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.CreateServoMotor2PeriodPayload +--- + +### Configure the Servo + +:::workflow +![Configure the Servo](../workflows/driveservos-configure.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_CreateServoMotor2PulsePayload.md b/docs/apidoc/Harp_Behavior_CreateServoMotor2PulsePayload.md new file mode 100644 index 0000000..0e72f03 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_CreateServoMotor2PulsePayload.md @@ -0,0 +1,15 @@ +--- +uid: Harp.Behavior.CreateServoMotor2PulsePayload +--- + +### Configure the Servo + +:::workflow +![Configure the Servo](../workflows/driveservos-configure.bonsai) +::: + +### Adjust the Position + +:::workflow +![Adjust the Position](../workflows/driveservos-position.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_CreateStartCamerasPayload.md b/docs/apidoc/Harp_Behavior_CreateStartCamerasPayload.md new file mode 100644 index 0000000..8418f22 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_CreateStartCamerasPayload.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.CreateStartCamerasPayload +--- + +### Start and Stop Cameras + +:::workflow +![Start and Stop Cameras](../workflows/triggercameras-startstop.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_CreateStopCamerasPayload.md b/docs/apidoc/Harp_Behavior_CreateStopCamerasPayload.md new file mode 100644 index 0000000..d719d26 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_CreateStopCamerasPayload.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.CreateStopCamerasPayload +--- + +### Start and Stop Cameras + +:::workflow +![Start and Stop Cameras](../workflows/triggercameras-startstop.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_Device.md b/docs/apidoc/Harp_Behavior_Device.md new file mode 100644 index 0000000..995494b --- /dev/null +++ b/docs/apidoc/Harp_Behavior_Device.md @@ -0,0 +1,22 @@ +--- +uid: Harp.Behavior.Device +--- + +Use the [Harp device pattern](https://harp-tech.org/articles/operators.html#device-pattern) to initialize the device, log data, and send commands to and receive messages from the Behavior board. + +:::workflow +![Harp Device Pattern](../workflows/harp-devicepattern.bonsai) +::: + +Check out the following in-depth guides to learn how to access the device functionality with the `Harp.Behavior` package: + +- [Control Digital Outputs](../articles/control-digital-outputs.md) +- [Control Poke Peripheral](../articles/control-poke.md) +- [Acquire Analog Data](../articles/acquire-analog-data.md) +- [Generate PWM](../articles/generate-pwm.md) +- [Configure LEDs](../articles/configure-leds.md) +- [Track Rotation](../articles/track-rotation.md) +- [Trigger Cameras](../articles/trigger-cameras.md) +- [Drive Servos](../articles/drive-servos.md) +- [Route Signals](../articles/route-signals.md) +- [Advanced Configuration](../articles/advanced-configuration.md) diff --git a/docs/apidoc/Harp_Behavior_DeviceDataWriter.md b/docs/apidoc/Harp_Behavior_DeviceDataWriter.md new file mode 100644 index 0000000..54e7473 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_DeviceDataWriter.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.DeviceDataWriter +--- + +### Harp Device Pattern + +:::workflow +![Harp Device Pattern](../workflows/harp-devicepattern.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_DigitalInputState.md b/docs/apidoc/Harp_Behavior_DigitalInputState.md new file mode 100644 index 0000000..38f2bba --- /dev/null +++ b/docs/apidoc/Harp_Behavior_DigitalInputState.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.DigitalInputState +--- + +### Visualize Poke Events + +:::workflow +![Visualize Poke Events](../workflows/controlpoke-visualizeevents.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_DisableServos.md b/docs/apidoc/Harp_Behavior_DisableServos.md new file mode 100644 index 0000000..5f2c0c4 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_DisableServos.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.DisableServos +--- + +### Enable and Disable Servos + +:::workflow +![Enable and Disable Servos](../workflows/driveservos-enabledisable.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_EnableEncoders.md b/docs/apidoc/Harp_Behavior_EnableEncoders.md new file mode 100644 index 0000000..47c144c --- /dev/null +++ b/docs/apidoc/Harp_Behavior_EnableEncoders.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.EnableEncoders +--- + +### Enable the Encoder + +:::workflow +![Enable the Encoder](../workflows/trackrotation-enable.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_EnableSerialTimestamp.md b/docs/apidoc/Harp_Behavior_EnableSerialTimestamp.md new file mode 100644 index 0000000..2d4fd5e --- /dev/null +++ b/docs/apidoc/Harp_Behavior_EnableSerialTimestamp.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.EnableSerialTimestamp +--- + +### Stream Timestamps + +:::workflow +![Stream Timestamps](../workflows/routesignals-serialtimestamp.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_EnableServos.md b/docs/apidoc/Harp_Behavior_EnableServos.md new file mode 100644 index 0000000..017d431 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_EnableServos.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.EnableServos +--- + +### Enable and Disable Servos + +:::workflow +![Enable and Disable Servos](../workflows/driveservos-enabledisable.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_EncoderMode.md b/docs/apidoc/Harp_Behavior_EncoderMode.md new file mode 100644 index 0000000..ce1faf9 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_EncoderMode.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.EncoderMode +--- + +### Enable the Encoder + +:::workflow +![Enable the Encoder](../workflows/trackrotation-enable.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_EncoderReset.md b/docs/apidoc/Harp_Behavior_EncoderReset.md new file mode 100644 index 0000000..4218c46 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_EncoderReset.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.EncoderReset +--- + +### Reset the Encoder + +:::workflow +![Reset the Encoder](../workflows/trackrotation-reset.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_EventEnable.md b/docs/apidoc/Harp_Behavior_EventEnable.md new file mode 100644 index 0000000..865a2d0 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_EventEnable.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.EventEnable +--- + +### Select Active Events + +:::workflow +![Select Active Events](../workflows/advancedconfiguration-eventenable.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_Led0Current.md b/docs/apidoc/Harp_Behavior_Led0Current.md new file mode 100644 index 0000000..22fdd1b --- /dev/null +++ b/docs/apidoc/Harp_Behavior_Led0Current.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.Led0Current +--- + +### Configure LED Current + +:::workflow +![Configure LED Current](../workflows/configureleds-current.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_Led0MaxCurrent.md b/docs/apidoc/Harp_Behavior_Led0MaxCurrent.md new file mode 100644 index 0000000..efef19d --- /dev/null +++ b/docs/apidoc/Harp_Behavior_Led0MaxCurrent.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.Led0MaxCurrent +--- + +### Configure LED Current + +:::workflow +![Configure LED Current](../workflows/configureleds-current.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_MimicPort0IR.md b/docs/apidoc/Harp_Behavior_MimicPort0IR.md new file mode 100644 index 0000000..b84eb06 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_MimicPort0IR.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.MimicPort0IR +--- + +### Mimic Poke Inputs + +:::workflow +![Mimic Poke Inputs](../workflows/routesignals-mimicir.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_MimicPort0Valve.md b/docs/apidoc/Harp_Behavior_MimicPort0Valve.md new file mode 100644 index 0000000..d5bd2f1 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_MimicPort0Valve.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.MimicPort0Valve +--- + +### Mimic Valves + +:::workflow +![Mimic Valves](../workflows/routesignals-mimicvalve.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_OutputClear.md b/docs/apidoc/Harp_Behavior_OutputClear.md new file mode 100644 index 0000000..696cc23 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_OutputClear.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.OutputClear +--- + +### Set and Clear Outputs + +:::workflow +![Set and Clear Outputs](../workflows/controldigitaloutputs-setclear.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_OutputPulseEnable.md b/docs/apidoc/Harp_Behavior_OutputPulseEnable.md new file mode 100644 index 0000000..96861f3 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_OutputPulseEnable.md @@ -0,0 +1,15 @@ +--- +uid: Harp.Behavior.OutputPulseEnable +--- + +### Pulse Outputs + +:::workflow +![Pulse Outputs](../workflows/controldigitaloutputs-pulse.bonsai) +::: + +### Generate PWM Bursts + +:::workflow +![Generate PWM Bursts](../workflows/generatepwm-pulseenable.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_OutputSet.md b/docs/apidoc/Harp_Behavior_OutputSet.md new file mode 100644 index 0000000..028d2bf --- /dev/null +++ b/docs/apidoc/Harp_Behavior_OutputSet.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.OutputSet +--- + +### Set and Clear Outputs + +:::workflow +![Set and Clear Outputs](../workflows/controldigitaloutputs-setclear.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_OutputToggle.md b/docs/apidoc/Harp_Behavior_OutputToggle.md new file mode 100644 index 0000000..9b494ab --- /dev/null +++ b/docs/apidoc/Harp_Behavior_OutputToggle.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.OutputToggle +--- + +### Toggle Outputs + +:::workflow +![Toggle Outputs](../workflows/controldigitaloutputs-toggle.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_PokeInputFilter.md b/docs/apidoc/Harp_Behavior_PokeInputFilter.md new file mode 100644 index 0000000..f3a0241 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_PokeInputFilter.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.PokeInputFilter +--- + +### Configure Input Filter + +:::workflow +![Configure Input Filter](../workflows/controlpoke-inputfilter.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_PulseDO0.md b/docs/apidoc/Harp_Behavior_PulseDO0.md new file mode 100644 index 0000000..7710c63 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_PulseDO0.md @@ -0,0 +1,15 @@ +--- +uid: Harp.Behavior.PulseDO0 +--- + +### Pulse Outputs + +:::workflow +![Pulse Outputs](../workflows/controldigitaloutputs-pulse.bonsai) +::: + +### Generate PWM Bursts + +:::workflow +![Generate PWM Bursts](../workflows/generatepwm-pulseenable.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_PulseSupplyPort0.md b/docs/apidoc/Harp_Behavior_PulseSupplyPort0.md new file mode 100644 index 0000000..98d0554 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_PulseSupplyPort0.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.PulseSupplyPort0 +--- + +### Deliver Rewards + +:::workflow +![Deliver Rewards](../workflows/controlpoke-valve.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_PwmDutyCycleDO0.md b/docs/apidoc/Harp_Behavior_PwmDutyCycleDO0.md new file mode 100644 index 0000000..a84abf1 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_PwmDutyCycleDO0.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.PwmDutyCycleDO0 +--- + +### Configure PWM + +:::workflow +![Configure PWM](../workflows/generatepwm-configure.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_PwmFrequencyDO0.md b/docs/apidoc/Harp_Behavior_PwmFrequencyDO0.md new file mode 100644 index 0000000..7b89e46 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_PwmFrequencyDO0.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.PwmFrequencyDO0 +--- + +### Configure PWM + +:::workflow +![Configure PWM](../workflows/generatepwm-configure.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_PwmStart.md b/docs/apidoc/Harp_Behavior_PwmStart.md new file mode 100644 index 0000000..8098cf6 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_PwmStart.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.PwmStart +--- + +### Start and Stop PWM + +:::workflow +![Start and Stop PWM](../workflows/generatepwm-startstop.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_PwmStop.md b/docs/apidoc/Harp_Behavior_PwmStop.md new file mode 100644 index 0000000..50bf67e --- /dev/null +++ b/docs/apidoc/Harp_Behavior_PwmStop.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.PwmStop +--- + +### Start and Stop PWM + +:::workflow +![Start and Stop PWM](../workflows/generatepwm-startstop.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_RgbAll.md b/docs/apidoc/Harp_Behavior_RgbAll.md new file mode 100644 index 0000000..22ab8f5 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_RgbAll.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.RgbAll +--- + +### Set RGB Colors + +:::workflow +![Set RGB Colors](../workflows/configureleds-rgbcolors.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_ServoMotor2Period.md b/docs/apidoc/Harp_Behavior_ServoMotor2Period.md new file mode 100644 index 0000000..8b52717 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_ServoMotor2Period.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.ServoMotor2Period +--- + +### Configure the Servo + +:::workflow +![Configure the Servo](../workflows/driveservos-configure.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_ServoMotor2Pulse.md b/docs/apidoc/Harp_Behavior_ServoMotor2Pulse.md new file mode 100644 index 0000000..c19c925 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_ServoMotor2Pulse.md @@ -0,0 +1,15 @@ +--- +uid: Harp.Behavior.ServoMotor2Pulse +--- + +### Configure the Servo + +:::workflow +![Configure the Servo](../workflows/driveservos-configure.bonsai) +::: + +### Adjust the Position + +:::workflow +![Adjust the Position](../workflows/driveservos-position.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_StartCameras.md b/docs/apidoc/Harp_Behavior_StartCameras.md new file mode 100644 index 0000000..e4b3203 --- /dev/null +++ b/docs/apidoc/Harp_Behavior_StartCameras.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.StartCameras +--- + +### Start and Stop Cameras + +:::workflow +![Start and Stop Cameras](../workflows/triggercameras-startstop.bonsai) +::: diff --git a/docs/apidoc/Harp_Behavior_StopCameras.md b/docs/apidoc/Harp_Behavior_StopCameras.md new file mode 100644 index 0000000..0a070bb --- /dev/null +++ b/docs/apidoc/Harp_Behavior_StopCameras.md @@ -0,0 +1,9 @@ +--- +uid: Harp.Behavior.StopCameras +--- + +### Start and Stop Cameras + +:::workflow +![Start and Stop Cameras](../workflows/triggercameras-startstop.bonsai) +::: diff --git a/docs/articles/acquire-analog-data.md b/docs/articles/acquire-analog-data.md new file mode 100644 index 0000000..0777a89 --- /dev/null +++ b/docs/articles/acquire-analog-data.md @@ -0,0 +1,66 @@ +## Acquire Analog Data + +The Behavior board has two analog inputs: **ADC0** is located on the **ADC** terminal and **ADC1** is located on the **Input** terminal. Refer to the [connections](./connections.md) article to set up the hardware connection. + +This article covers how to visualize the analog input streams and extract a single channel in Bonsai. + +The complete workflow is shown below: + +:::workflow +![Acquire Analog Data](../workflows/acquireanalogdata-toplevel.bonsai) +::: + +> [!NOTE] +> Hardware version 1.0 only has one ADC. + +> [!WARNING] +> You can find and add these operators to the workflow from the Bonsai [Toolbox](https://bonsai-rx.org/docs/articles/editor.html?tabs=mouse-controls#toolbox). Make sure to use the device-specific versions, e.g. `Device (Harp.Behavior)` instead of `Device (Harp)`. If correctly selected, the names of these operators in the workflow panel will change to reflect either the name of the device or the selected register/payload. + +### Visualize Analog Data + +The analog stream is enabled by default and sampled at 1 kHz, so visualizing it only requires decoding the [`AnalogData`] events: + +:::workflow +![Analog Data Visualize](../workflows/acquireanalogdata-visualizedata.bonsai) +::: + +- Insert a [`SubscribeSubject`] operator named `Behavior Events`. This will listen to [`HarpMessages`] broadcast from the [`PublishSubject`] named `Behavior Events` in the Harp device pattern. +- Insert a [`Parse`] operator and configure the `Register` property to `AnalogData`. +- Insert a [`VisualizerWindow`] operator. This will automatically open a window displaying all the analog data payloads. + +To visualize only one of the input channels: + +- Right-click on the [`Parse`] operator, hold down the Alt key, and select the "Output (Harp.Behavior.AnalogDataPayload)" > "AnalogInput0" from the context menu. This will create a `AnalogInput0` node on a separate branch. +- Insert a [`VisualizerWindow`] operator. This will open a second window displaying only the selected channel. + +Run the workflow and vary the voltage at the analog inputs. The first visualizer displays the three payload values: + +```text +AnalogDataPayload { AnalogInput0 = 13, Encoder = 0, AnalogInput = 13 } +AnalogDataPayload { AnalogInput0 = 15, Encoder = 0, AnalogInput = 14 } +``` +and the second displays the `AnalogInput0` value on its own. + +```text +12 +13 +``` + +> [!NOTE] +> Both analog inputs accept voltages from 0 to 5 V, which are subsequently digitized by an onboard 12-bit analog-to-digital (ADC) converter. + +> [!NOTE] +> The `Encoder` value is not an analog voltage reading, it is a [quadrature encoder counter](track-rotation.md) that is sampled on the same 1 kHz tick so that position and analog data share the same timestamps. + +> [!NOTE] +> If nothing appears, the analog events may have been disabled by an earlier [`EventEnable`](advanced-configuration.md#select-active-events) write. Write a payload that includes `AnalogData` to re-enable them. + +[!INCLUDE [](version-footer.md)] + + +[`SubscribeSubject`]: xref:Bonsai.Expressions.SubscribeSubject +[`PublishSubject`]: xref:Bonsai.Reactive.PublishSubject +[`Parse`]: xref:Harp.Behavior.Parse +[`VisualizerWindow`]: xref:Bonsai.Design.VisualizerWindow +[`HarpMessages`]: xref:Bonsai.Harp.HarpMessage +[`AnalogData`]: xref:Harp.Behavior.AnalogData diff --git a/docs/articles/advanced-configuration.md b/docs/articles/advanced-configuration.md new file mode 100644 index 0000000..83411a3 --- /dev/null +++ b/docs/articles/advanced-configuration.md @@ -0,0 +1,36 @@ +## Advanced Configuration + +This article covers device-wide configuration that goes beyond a single peripheral or output — settings that affect which data the Behavior board broadcasts. + +The complete workflow is shown below: + +:::workflow +![Advanced Configuration](../workflows/advancedconfiguration-toplevel.bonsai) +::: + +### Select Active Events + +The [`EventEnable`] register selects which event streams the device broadcasts. All events are enabled by default; write a new selection to silence the streams you don't need. + +:::workflow +![Select Active Events](../workflows/advancedconfiguration-eventenable.bonsai) +::: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `A`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `EventEnablePayload`. + - `EventEnable` - Select `PortDI` and `PortDIO` to keep only the poke and DIO events. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +Run the workflow and press A — the device stops broadcasting [`AnalogData`](acquire-analog-data.md) and camera frame events, and keeps the [poke events](control-poke.md). + +> [!WARNING] +> [`EventEnable`] writes the whole selection at once: any event **not** selected in the payload is disabled, including the 1 kHz analog stream and the camera frame events. + +[!INCLUDE [](version-footer.md)] + + +[`KeyDown`]: xref:Bonsai.Windows.Input.KeyDown +[`CreateMessage`]: xref:Harp.Behavior.CreateMessage +[`MulticastSubject`]: xref:Bonsai.Expressions.MulticastSubject +[`EventEnable`]: xref:Harp.Behavior.EventEnable diff --git a/docs/articles/behavior-gui.md b/docs/articles/behavior-gui.md new file mode 100644 index 0000000..9c65f78 --- /dev/null +++ b/docs/articles/behavior-gui.md @@ -0,0 +1,19 @@ +## Behavior GUI + +The Behavior GUI is a standalone visual interface for configuring and testing the device without using Bonsai. + +Before beginning, [install the GUI](installation.md#software-packages), follow the hardware setup [guide](connections.md), and connect the USB cable to the computer. Launch "Harp.Behavior.App" from the Windows Start menu. + +![Behavior GUI](../images/behavior-gui.png) + +> [!NOTE] +> This is a pre-release version of the app, there have been changes since [then](https://github.com/harp-tech/device.behavior/pull/32), but binaries have not been generated. Remember to update the screenshots and add numbered labels for the new version. + +1) Select the port for the device, and press "Connect". The device details will display on the right side if it is successfully connected. +2) Select the tab for the register group that you want to control. +3) Change the values to test outputs, LEDs, cameras, and servos, and observe the output on the connected periperals. + +> [!WARNING] +> Only one program can access the device's COM port at a time. Close the GUI before starting a Bonsai workflow that uses the device. + +[!INCLUDE [](version-footer.md)] diff --git a/docs/articles/behavior-overview.md b/docs/articles/behavior-overview.md new file mode 100644 index 0000000..c0a9bf9 --- /dev/null +++ b/docs/articles/behavior-overview.md @@ -0,0 +1,51 @@ +## Behavior + +![Harp Behavior](../images/OEPS-BehaviorBoard.jpg){width=450} + +### Key Features + +- 3 poke ports, each combining an infrared beam input, an LED driver, a 12 V valve driver, and a general-purpose digital line. +- Timed pulses and PWM (up to 10 kHz with configurable duty cycle) on every digital output. +- Camera triggering, servo motor control, and quadrature encoder counting on the general-purpose outputs and ports. +- Configurable LED drive current (up to 100 mA) with a settable maximum limit. + +### Specs + +- Poke ports: 3 (IR input, LED, 12 V valve, digital IO per port) +- General-purpose digital outputs: 4 (5 V, with pulse and PWM support) +- PWM frequency: 1 Hz – 10 kHz, duty cycle 1 – 99% +- Analog inputs: 2 (12-bit, sampled at 1 kHz) +- Digital inputs: 1 (**DI3**, 5 V) +- LED outputs: 2 current-controlled (2 – 100 mA) + 2 RGB +- Camera triggers: 2 (on **DO0**/**DO1**, 2 – 600 Hz) +- Servo outputs: 2 (on **DO2**/**DO3**, period and pulse width in µs) +- Quadrature encoder inputs: 1 (on Port 2, read at 1 kHz) +- Output pulse duration: 1 – 65535 ms +- Timestamp resolution: 32 µs +- Synchronization frequency: 1 Hz +- Synchronization accuracy: 22 ± 16 µs (between clock generator and this device) + +### Hardware + +| Version | Notes | +| ------- | ----- | +| 2.0 |
  • Current version, documented in this guide
| +| 1.2 |
  • Earlier revision, uses case_v1.1_v1.2 enclosure
| +| 1.1 |
  • Earlier revision, uses case_v1.1_v1.2 enclosure
| + +> [!WARNING] +> **TODO**: Fill in what changed between hardware revisions 1.1, 1.2, and 2.0 (e.g. second analog input, connector changes). The repository records only the current 2.0 design files. + +### Firmware + +| Version | Notes | +| ------- | ----- | +| 3.4 |
  • Aligned firmware register naming with the interface and `device.yml`
| +| 3.3 |
  • Fixed the read function of the digital inputs register
| +| 3.2 |
  • Added the `EncoderMode` register
| +| 3.1 |
  • Added an event when the last trigger is sent to the camera after stopping
  • Cameras stop when the device goes to standby mode
  • Added serial timestamp registers
| + +> [!WARNING] +> **TODO**: The firmware notes above were derived from commit messages between release tags — verify them against the release notes on the [releases page](https://github.com/harp-tech/device.behavior/releases), and extend the table with older releases if needed. + +[!INCLUDE [](version-footer.md)] diff --git a/docs/articles/configure-leds.md b/docs/articles/configure-leds.md new file mode 100644 index 0000000..23905e9 --- /dev/null +++ b/docs/articles/configure-leds.md @@ -0,0 +1,114 @@ +## Configure LEDs + +The Behavior board drives two kinds of light output: two standard current-controlled LEDs on the **L0** and **L1** terminals and up to two WS2812-type addressable RGB LEDs on the **RGB** connector. Refer to the [connections](./connections.md) article to set up the LED on **L0** or the **RGB** connector, which we will use for the rest of these examples. + +This article covers configuring LED drive current, setting RGB colors, and turning on both kinds of LED output in Bonsai. + +The complete workflow is shown below: + +:::workflow +![Configure LEDs](../workflows/configureleds-toplevel.bonsai) +::: + +> [!WARNING] +> The RGB section has not been tested as I do not have the hardware yet. There is also supposedly a regression introduced in firmware 3.4 which prevents the [`RgbAll`], [`Rgb0`], and [`Rgb1`] registers from updating the LED colors — the LEDs stay at their default colors (RGB0 green, RGB1 blue). + +### Configure LED Current + +The **L0** and **L1** outputs drive standard single-color LEDs with a configurable constant current, so no series resistor is needed. Each output has a working current register ([`Led0Current`], 2 – 100 mA) and a protection limit ([`Led0MaxCurrent`], 5 – 100 mA); writes above the limit are rejected by the device. + +:::workflow +![Configure LED Current](../workflows/configureleds-current.bonsai) +::: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `A`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `Led0MaxCurrentPayload`. + - `Led0MaxCurrent` - Set the maximum allowed current according to the rating of the LED in mA (e.g. 20). +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `Led0CurrentPayload`. + - `Led0Current` - Set the working current in mA (e.g. 10). +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +Run the workflow and press A to configure the LED 0 drive current, then switch the output on as shown in the next section. + +### Turn LEDs On and Off + +Once the drive current is configured, the **L0** and **L1** outputs are switched like any other digital output, for instance through the [`OutputSet`](control-digital-outputs.md) and [`OutputClear`](control-digital-outputs.md) registers: + +:::workflow +![Turn LEDs On and Off](../workflows/configureleds-ledonoff.bonsai) +::: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `S`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `OutputSetPayload`. + - `OutputSet` - Select `Led0`. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +In a separate branch: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `D`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `OutputClearPayload`. + - `OutputClear` - Select `Led0`. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +Run the workflow, then press S to light the LED and D to turn it off. See [Control Digital Outputs](control-digital-outputs.md) for other methods to control the LED. + +### Set RGB Colors + +The **RGB** connector drives WS2812-type addressable LEDs — often sold as "NeoPixel" LEDs, rings, or strips. The two LEDs form a serial chain on a single data line: RGB0 is the first LED in the chain and RGB1 the second. Plain and analog RGB LEDs have no data input and do not work on this connector; drive those from the [L0/L1 outputs](#configure-led-current) instead. + +The [`RgbAll`] register writes the color of both RGB LEDs in one command. Each channel takes an intensity from 0 to 255. To write one LED at a time, use [`Rgb0`] or [`Rgb1`] instead. + +:::workflow +![Set RGB Colors](../workflows/configureleds-rgbcolors.bonsai) +::: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `F`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `RgbAllPayload`. + - `Red0` - Set to 255 to make RGB0 red. + - `Blue1` - Set to 255 to make RGB1 blue. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +Run the workflow and press F to load the colors. If the LEDs are currently on, the new colors take effect immediately. + +### Turn RGB LEDs On and Off + +The RGB LEDs are switched like any other digital output, for instance through the [`OutputSet`](control-digital-outputs.md) and [`OutputClear`](control-digital-outputs.md) registers: + +:::workflow +![Turn RGB LEDs On and Off](../workflows/configureleds-rgbonoff.bonsai) +::: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `G`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `OutputSetPayload`. + - `OutputSet` - Select `Rgb0` and `Rgb1`. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +In a separate branch: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `H`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `OutputClearPayload`. + - `OutputClear` - Select `Rgb0` and `Rgb1`. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +Run the workflow, then press G to light both RGB LEDs and H to turn them off. See [Control Digital Outputs](control-digital-outputs.md) for other methods to control the LED. + +[!INCLUDE [](version-footer.md)] + + +[`KeyDown`]: xref:Bonsai.Windows.Input.KeyDown +[`CreateMessage`]: xref:Harp.Behavior.CreateMessage +[`MulticastSubject`]: xref:Bonsai.Expressions.MulticastSubject +[`RgbAll`]: xref:Harp.Behavior.RgbAll +[`Rgb0`]: xref:Harp.Behavior.Rgb0 +[`Rgb1`]: xref:Harp.Behavior.Rgb1 +[`Led0Current`]: xref:Harp.Behavior.Led0Current +[`Led1Current`]: xref:Harp.Behavior.Led1Current +[`Led0MaxCurrent`]: xref:Harp.Behavior.Led0MaxCurrent diff --git a/docs/articles/connections.md b/docs/articles/connections.md new file mode 100644 index 0000000..12d840c --- /dev/null +++ b/docs/articles/connections.md @@ -0,0 +1,47 @@ +## Ports and Connections + +This article will cover the ports on the Behavior board, as well as how to connect the device to peripherals and external devices. + +### Ports + +![Harp Behavior Device Pinout](../images/behavior-devicepinout.svg){width=600} + +**12V PWR (Barrel Jack)** - This port powers the Behavior board and requires a 12 V power supply. + +**USB (Mini-B/USB-C)** - This port connects the device to the control computer running [Bonsai](harp-bonsai.md) or the [GUI](./behavior-gui.md). The connector type depends on the [hardware version](./behavior-overview.md) of the board. + +**CLKIN (Stereo Jack)** - This [Harp](https://harp-tech.org/articles/about.html) clock input accepts a clock output from any compatible Harp clock generator or synchronizer (e.g. [Harp Timestamp Generator](https://github.com/harp-tech/device.timestampgeneratorgen3)) for synchronization with other connected devices. + +**STATE** - This status LED cycles on and off with a period of: +- 2 seconds when it's communicating with Bonsai +- 4 seconds when in standby +- 100 milliseconds when a catastrophic error occurs + +**P0, P1, P2 (RJ45)** - These specialized poke ports interface directly with the [Mice Poke](./peripherals/peripherals-micepoke.md) peripheral for poke detection and reward delivery. Alternatively, use the [Breakout](./peripherals/peripherals-portbreakout.md) extension board to interface with other peripherals and accessories. + +**ADC (Screw Terminal)** - This connector carries the first analog input (**AD0**), a 5 V supply pin and two ground connections. + +**Output (Screw Terminal)** - These general-purpose 5 V digital outputs can be used to communicate with external devices. **DO0**/**DO1** can generate [camera triggers](trigger-cameras.md) and **DO2**/**DO3** can drive [servo motors](drive-servos.md); all four support [PWM](generate-pwm.md). + +**Input (Screw Terminal)** - This connector carries the second analog input (**AD1**), the digital input **DI3** and one ground connection. + +**RGB (3-pin Flick Lock)** - Connector for up to two WS2812-type (Neopixels) addressable RGB LEDs, driven as a serial chain on a single data line. Colors are set with the [RGB registers](configure-leds.md#set-rgb-colors). + +**L0, L1 (Screw Terminal)** - These connectors control two regular current-controlled LED outputs. Each terminal pair is marked **A** (anode — the LED's long leg) and **K** (cathode — the short leg). The drive current is [configurable](configure-leds.md) from 2 to 100 mA. + +> [!NOTE] +> Depending on the [hardware version](./behavior-overview.md) of your device, some of the ports above may be different. Always check the printed label on the PCB. + +### Connections + +> [!NOTE] +> Work in progress! + +#### Connect a Nose Poke + +[placeholder - connection-poke.svg] + +1. Connect the [Mice Poke](./peripherals/peripherals-micepoke.md) peripheral to port **P0**, **P1**, or **P2** with an RJ45 cable. +2. Refer to the [Control Poke Peripheral](control-poke.md) article to configure the Mice Poke peripheral in Bonsai. + +[!INCLUDE [](version-footer.md)] diff --git a/docs/articles/control-digital-outputs.md b/docs/articles/control-digital-outputs.md new file mode 100644 index 0000000..f684a8e --- /dev/null +++ b/docs/articles/control-digital-outputs.md @@ -0,0 +1,110 @@ +## Control Digital Outputs + +The Behavior board has four general-purpose digital outputs **DO0** – **DO3** on the **Output** screw terminal. Refer to the [connections](./connections.md) article to set up a digital output on **DO0**, which we will use for the rest of these examples. + +This article covers how to set, clear, toggle, and pulse any of these outputs in Bonsai. + +The complete workflow is shown below: + +:::workflow +![Control Digital Outputs](../workflows/controldigitaloutputs-toplevel.bonsai) +::: + +> [!NOTE] +> You can use the [Breakout](./peripherals/peripherals-portbreakout.md) extension board to adapt the poke ports as regular digital input/output pins if you need more digital outputs. Refer to the [Control Poke Peripheral](control-poke.md) article for more information on controlling those pins. + +### Set and Clear Outputs + +The [`OutputSet`] and [`OutputClear`] registers turn output lines on and off. Each bit in the payload selects one output line, so a single command can drive several outputs at once. + +:::workflow +![Set and Clear Outputs](../workflows/controldigitaloutputs-setclear.bonsai) +::: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `A`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `OutputSetPayload`. + - `OutputSet` - Select `DO0`. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +In a separate branch: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `S`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `OutputClearPayload`. + - `OutputClear` - Select `DO0`. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +Run the workflow, then press A to set the **DO0** line high and S to set it low. + +### Toggle Outputs + +The [`OutputToggle`] register inverts the current state of the selected output lines. + +:::workflow +![Toggle Outputs](../workflows/controldigitaloutputs-toggle.bonsai) +::: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `D`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `OutputTogglePayload`. + - `OutputToggle` - Select `DO0`. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +Run the workflow and press D repeatedly — the **DO0** line inverts its state on every press. + +> [!TIP] +> The [`OutputState`] register works like the other output registers but writes **all** output lines at once: selected lines are set and every other line is cleared. Use it to drive the whole output bank to a known state in one command. + +### Pulse Outputs + +Instead of pairing a set command with a delayed clear command, the device can time pulses itself. When an output is selected in the [`OutputPulseEnable`] register, every set command starts a pulse whose duration comes from that output's pulse-duration register (e.g. [`PulseDO0`] for **DO0**, in milliseconds). + +:::workflow +![Pulse Outputs](../workflows/controldigitaloutputs-pulse.bonsai) +::: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `F`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `OutputPulseEnablePayload`. + - `OutputPulseEnable` - Select `DO0` to enable pulse mode on **DO0**. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `PulseDO0Payload`. + - `PulseDO0` - Set the pulse duration to 500 ms. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +Run the workflow, press F once to configure the pulse, then send a set command with A from [Set and Clear Outputs](#set-and-clear-outputs) — the **DO0** line goes high for 500 ms and returns low on its own. + +> [!TIP] +> The poke valve outputs (`SupplyPort0`–`SupplyPort2`) boot with pulse mode already enabled and a default duration of 15 ms — see [Deliver Rewards on Poke](control-poke.md#deliver-rewards-on-poke). All other outputs boot with pulse mode disabled and stay on until cleared. + +### Alternative: Set Outputs with Timer + +You can replace [`KeyDown`] with other operators to set outputs with other triggers in Bonsai, for instance a [`Timer`]. + +:::workflow +![Set Outputs Timer](../workflows/controldigitaloutputs-timer.bonsai) +::: + +- Insert a [`Timer`] operator and set the `DueTime` property to the number of seconds to wait before setting the output (e.g. 2 seconds). +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `OutputSetPayload`. + - `OutputSet` - Select `DO0`. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +Run the workflow and the **DO0** line goes high after 2 seconds and turns off automatically if pulse mode is enabled. + +[!INCLUDE [](version-footer.md)] + + +[`KeyDown`]: xref:Bonsai.Windows.Input.KeyDown +[`Timer`]: xref:Bonsai.Reactive.Timer +[`CreateMessage`]: xref:Harp.Behavior.CreateMessage +[`MulticastSubject`]: xref:Bonsai.Expressions.MulticastSubject +[`OutputSet`]: xref:Harp.Behavior.OutputSet +[`OutputClear`]: xref:Harp.Behavior.OutputClear +[`OutputToggle`]: xref:Harp.Behavior.OutputToggle +[`OutputState`]: xref:Harp.Behavior.OutputState +[`OutputPulseEnable`]: xref:Harp.Behavior.OutputPulseEnable +[`PulseDO0`]: xref:Harp.Behavior.PulseDO0 diff --git a/docs/articles/control-poke.md b/docs/articles/control-poke.md new file mode 100644 index 0000000..ff6cbd1 --- /dev/null +++ b/docs/articles/control-poke.md @@ -0,0 +1,124 @@ +## Control Poke Peripheral + +The [Mice Poke](./peripherals/peripherals-micepoke.md) is a specialized nose poke peripheral for the Behavior board which combines an infrared beam sensor for poke detection, cue LEDs, and a solenoid valve for reward delivery. Refer to the [connections](./connections.md) article to set up the hardware connection on poke port **P0**, which we will use for the rest of these examples. + +This article covers how to visualize poke events, debounce noisy inputs, drive the cue LED, and deliver rewards with the Mice Poke peripheral in Bonsai. + +The complete workflow is shown below: + +:::workflow +![Detect Pokes](../workflows/controlpoke-toplevel.bonsai) +::: + +> [!NOTE] +> You can use the [Breakout](./peripherals/peripherals-portbreakout.md) extension board to adapt the poke ports as regular digital input/output pins to interface with other external devices or accessories. + +### Visualize Poke Events + +Beam breaks in the Mice Poke peripheral are reported as digital input events. The three poke ports **P0 - P2** are represented as `DIPort0` - `DIPort2` in the digital input [`DigitalInputState`] event register. + +:::workflow +![Detect Pokes Visualize Events](../workflows/controlpoke-visualizeevents.bonsai) +::: + +- Insert a [`SubscribeSubject`] operator named `Behavior Events`. This will listen to [`HarpMessages`] broadcast from the [`PublishSubject`] named `Behavior Events` in the Harp device pattern. +- Insert a [`Parse`] operator and configure the `Register` property to `Timestamped`. +- Insert a [`VisualizerWindow`] operator. This will automatically open a window displaying the parsed events when the workflow starts. + +Run the workflow and block the infrared beam on the Mice Poke peripheral. The visualizer will display: + +```text +DIPort0@3.213504 +None@3.513823 +``` + +The first value is the payload, listing the digital inputs that are currently active, and the second value is the timestamp on the device clock. Both beam breaks and beam restores generate an event, so `None` marks the moment the poke was exited. + +### Configure Input Filter + +A single poke can generate a burst of rapid transitions, for example, when the snout hovers at the edge of the infrared beam. The [`PokeInputFilter`] register sets a refractory period, in milliseconds. After each reported transition, further transitions on that port are ignored for the set time, so one poke reads as one entry and one exit. + +:::workflow +![Detect Pokes Input Filter](../workflows/controlpoke-inputfilter.bonsai) +::: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `A`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `PokeInputFilterPayload`. + - `PokeInputFilter` - Set the filter time to 5 ms. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +Run the workflow and press A — rapid repeated transitions within 5 ms of a poke event no longer generate events. Set the value to 0 to disable the filter. The default filter time is 1 ms. + +> [!TIP] +> The filter is blind to the cause of a transition, so values much longer than the animal's fastest re-entry will also ignore genuine consecutive pokes. + +### Drive the Poke LED + +Each poke port carries an LED drive line (`DOPort0` - `DOPort2`). The LED is controlled like any other digital output. For instance, you can turn it on and off with the [`OutputSet`] and [`OutputClear`] registers: + +:::workflow +![Detect Pokes Drive LED](../workflows/controlpoke-driveled.bonsai) +::: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `S`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `OutputSetPayload`. + - `OutputSet` - Select `DOPort0`. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +In a separate branch: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `D`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `OutputClearPayload`. + - `OutputClear` - Select `DOPort0`. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +Run the workflow, then press S to turn the **P0** poke LED on and D to turn it off. See [Control Digital Outputs](control-digital-outputs.md) for other methods to control the LED. + +### Deliver Rewards on Poke + +Each poke port carries a 12 V valve drive line for a solenoid valve that gates reward delivery. The valve outputs (`SupplyPort0`–`SupplyPort2`) boot with [pulse mode](control-digital-outputs.md#pulse-outputs) already enabled. The workflow below configures the pulse duration, then closes the loop in Bonsai where every poke at **P0** immediately triggers a reward at the same port. The reward volume is calibrated by adjusting the pulse duration. + +:::workflow +![Detect Pokes Deliver Rewards](../workflows/controlpoke-valve.bonsai) +::: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `F`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `PulseSupplyPort0Payload`. + - `PulseSupplyPort0` - Set the valve opening duration in ms (e.g. 15, the boot default). +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +In a separate branch: + +- Insert a [`SubscribeSubject`] operator named `Behavior Events`. +- Insert a [`Parse`] operator and configure the `Register` property to `DigitalInputState`. +- Insert a [`HasFlag`] operator and set the `Value` property to `DIPort0`. +- Insert a [`Condition`] operator, leaving its inner workflow at the default. Only beam-break events at **P0** pass through; beam restores and events from other ports are filtered out. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `OutputSetPayload`. + - `OutputSet` - Select `SupplyPort0`. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +Run the workflow, press F once to set the pulse duration, then block the infrared beam on the **P0** poke. The valve will opens for 15 ms and close on its own, delivering one reward per poke. + +[!INCLUDE [](version-footer.md)] + + +[`KeyDown`]: xref:Bonsai.Windows.Input.KeyDown +[`CreateMessage`]: xref:Harp.Behavior.CreateMessage +[`MulticastSubject`]: xref:Bonsai.Expressions.MulticastSubject +[`SubscribeSubject`]: xref:Bonsai.Expressions.SubscribeSubject +[`PublishSubject`]: xref:Bonsai.Reactive.PublishSubject +[`Parse`]: xref:Harp.Behavior.Parse +[`VisualizerWindow`]: xref:Bonsai.Design.VisualizerWindow +[`HarpMessages`]: xref:Bonsai.Harp.HarpMessage +[`DigitalInputState`]: xref:Harp.Behavior.DigitalInputState +[`PokeInputFilter`]: xref:Harp.Behavior.PokeInputFilter +[`OutputSet`]: xref:Harp.Behavior.OutputSet +[`OutputClear`]: xref:Harp.Behavior.OutputClear +[`PulseSupplyPort0`]: xref:Harp.Behavior.PulseSupplyPort0 +[`HasFlag`]: xref:Bonsai.Expressions.HasFlagBuilder +[`Condition`]: xref:Bonsai.Reactive.Condition diff --git a/docs/articles/drive-servos.md b/docs/articles/drive-servos.md new file mode 100644 index 0000000..f0a0017 --- /dev/null +++ b/docs/articles/drive-servos.md @@ -0,0 +1,79 @@ +## Drive Servos + +The outputs **DO2** and **DO3** can drive standard hobby servo motors — for instance to move a lick spout or a door in and out of reach. Each servo has a period register ([`ServoMotor2Period`]) and a pulse-width register ([`ServoMotor2Pulse`]), both in microseconds, and the [`EnableServos`] and [`DisableServos`] registers switch the pulse train. The examples below use the servo on **DO2**. + +The complete workflow is shown below: + +:::workflow +![Drive Servos](../workflows/driveservos-toplevel.bonsai) +::: + +### Configure the Servo + +:::workflow +![Configure the Servo](../workflows/driveservos-configure.bonsai) +::: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `A`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `ServoMotor2PeriodPayload`. + - `ServoMotor2Period` - Set the period of the servo pulse train in µs (e.g. 20000 for the standard 50 Hz servo frame). +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `ServoMotor2PulsePayload`. + - `ServoMotor2Pulse` - Set the pulse width in µs (e.g. 1500 for the center position of a standard servo). +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +Run the workflow and press A to load the servo configuration. Check your servo's datasheet for its period and pulse-width range. + +### Enable and Disable Servos + +:::workflow +![Enable and Disable Servos](../workflows/driveservos-enabledisable.bonsai) +::: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `S`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `EnableServosPayload`. + - `EnableServos` - Select `ServoOutput2`. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +In a separate branch: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `D`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `DisableServosPayload`. + - `DisableServos` - Select `ServoOutput2`. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +Run the workflow, press S to start driving the servo and D to stop. The servo moves to the position set by the pulse width and holds it while enabled. + +### Adjust the Position + +While the servo is enabled, writing a new pulse width moves it immediately: + +:::workflow +![Adjust the Position](../workflows/driveservos-position.bonsai) +::: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `F`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `ServoMotor2PulsePayload`. + - `ServoMotor2Pulse` - Set a new pulse width in µs (e.g. 2000). +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +Run the workflow, enable the servo with S, then press F — the servo moves to the new position. + +> [!WARNING] +> **DO2** and **DO3** share their hardware timers with the [PWM generator](generate-pwm.md). Don't run PWM and a servo on the same output at the same time. + +[!INCLUDE [](version-footer.md)] + + +[`KeyDown`]: xref:Bonsai.Windows.Input.KeyDown +[`CreateMessage`]: xref:Harp.Behavior.CreateMessage +[`MulticastSubject`]: xref:Bonsai.Expressions.MulticastSubject +[`ServoMotor2Period`]: xref:Harp.Behavior.ServoMotor2Period +[`ServoMotor2Pulse`]: xref:Harp.Behavior.ServoMotor2Pulse +[`EnableServos`]: xref:Harp.Behavior.EnableServos +[`DisableServos`]: xref:Harp.Behavior.DisableServos diff --git a/docs/articles/generate-pwm.md b/docs/articles/generate-pwm.md new file mode 100644 index 0000000..ce61cd9 --- /dev/null +++ b/docs/articles/generate-pwm.md @@ -0,0 +1,88 @@ +## Generate PWM + +The four general-purpose outputs **DO0** – **DO3** can generate hardware-timed pulse-width modulation (PWM) signals. The PWM signal can be tested with either a speaker (where the frequency controls the pitch) or a LED (where the duty cycles controls the brightness). Refer to the [connections](./connections.md) article to set up either accessory on **DO0**, which we will use for the rest of these examples. + +This article covers how to configure the frequency and duty cycle, as well as how to generate and stop the PWM in Bonsai. + +The complete workflow is shown below: + +:::workflow +![Generate PWM](../workflows/generatepwm-toplevel.bonsai) +::: + +### Configure PWM + +Each output has its own [`PwmFrequencyDO0`] and [`PwmDutyCycleDO0`] registers. + +:::workflow +![Configure PWM](../workflows/generatepwm-configure.bonsai) +::: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `A`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `PwmFrequencyDO0Payload`. + - `PwmFrequencyDO0` - Set the PWM frequency in Hz (e.g. 1000). Valid values are 1 to 10000. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `PwmDutyCycleDO0Payload`. + - `PwmDutyCycleDO0` - Set the duty cycle in percent (e.g. 50). Valid values are 1 to 99. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +Run the workflow and press A to configure a 1 kHz, 50% duty cycle waveform on **DO0**. Frequency and duty cycle can also be re-written while the PWM signal is running. + +### Start and Stop PWM + +The [`PwmStart`] and [`PwmStop`] registers start and stop the waveform on any combination of outputs. + +:::workflow +![Start and Stop PWM](../workflows/generatepwm-startstop.bonsai) +::: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `S`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `PwmStartPayload`. + - `PwmStart` - Select `PwmDO0`. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +In a separate branch: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `D`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `PwmStopPayload`. + - `PwmStop` - Select `PwmDO0`. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +Run the workflow, press A to configure, then press S to start and D to stop the waveform on **DO0**. + +### Generate PWM Bursts + +To generate a PWM train of fixed duration, enable the [pulse function](control-digital-outputs.md#pulse-outputs) on the output with the [`OutputPulseEnable`] register and configure the duration in the [`PulseDO0`] register. + +:::workflow +![Generate PWM Bursts](../workflows/generatepwm-pulseenable.bonsai) +::: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `F`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `OutputPulseEnablePayload`. + - `OutputPulseEnable` - Select `DO0`. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `PulseDO0Payload`. + - `PulseDO0` - Set the burst duration to 100 ms. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +Run the workflow, press F once to configure the pulse, then press S. The PWM runs for 100 ms and stops on its own, which translates to either a short beep With a speaker, or a brief flash with an LED. + +[!INCLUDE [](version-footer.md)] + + +[`KeyDown`]: xref:Bonsai.Windows.Input.KeyDown +[`CreateMessage`]: xref:Harp.Behavior.CreateMessage +[`MulticastSubject`]: xref:Bonsai.Expressions.MulticastSubject +[`PwmFrequencyDO0`]: xref:Harp.Behavior.PwmFrequencyDO0 +[`PwmDutyCycleDO0`]: xref:Harp.Behavior.PwmDutyCycleDO0 +[`PwmStart`]: xref:Harp.Behavior.PwmStart +[`PwmStop`]: xref:Harp.Behavior.PwmStop +[`OutputPulseEnable`]: xref:Harp.Behavior.OutputPulseEnable +[`PulseDO0`]: xref:Harp.Behavior.PulseDO0 diff --git a/docs/articles/harp-bonsai.md b/docs/articles/harp-bonsai.md new file mode 100644 index 0000000..010675a --- /dev/null +++ b/docs/articles/harp-bonsai.md @@ -0,0 +1,48 @@ +## Bonsai + +Bonsai is a visual reactive programming language for building interactive experiments and processing data streams in real time. It supports a growing ecosystem of hardware and software packages that are commonly used in neuroscience. This article will cover how to set up the Behavior board in Bonsai. + +>[!TIP] +> More information on Bonsai can be found in the official [documentation](https://bonsai-rx.org/docs/). + +### First Steps + +We will use a simple example to connect and test the device in Bonsai. This example visualizes the analog input stream that the Behavior board broadcasts at 1 kHz. We revisit this example in more detail in the "Bonsai Workflows" section. + +Before beginning: +- Connect the [USB](connections.md) cable to the computer. +- Launch "Bonsai" from the Windows Start menu. +- Hover over the workflow cell below, and click on the "Copy" icon on the top right. +- Paste the workflow into Bonsai. + +:::workflow +![Behavior First Steps](../workflows/behavior-firststeps.bonsai) +::: + +> [!TIP] +> The [Harp device pattern](https://harp-tech.org/articles/operators.html#device-pattern) will initialize the device, log data, and provide hooks to send commands as well as receive messages from the Behavior board using the [Harp communication protocol](https://harp-tech.org/protocol/BinaryProtocol-8bit.html). If your workflow does not look like the one above, make sure that the [Harp.Behavior](./installation.md#software-packages) package is installed. + +- Click on the [`Behavior (Device)`] operator and set the `PortName` property to the communications port for the device (e.g. COM8). +- Click on the [`BehaviorDataWriter (DeviceDataWriter)`] operator and set the `Path` property for the name and location of the save file (e.g. `Data\Behavior.harp`). +- Press the "Start" button in Bonsai to run the workflow. + +A [visualizer](xref:Bonsai.Design.VisualizerWindow) will automatically open when the workflow starts, displaying the parsed [`AnalogData`] events streaming from the device: + +```text +AnalogInput0: 12 +Encoder: 0 +AnalogInput1: 8 +``` + +The device is ready to use! If, instead, an error appears in Bonsai, check out the [troubleshooting](troubleshooting.md) section. + +Next, we suggest going through the "Bonsai Workflows" section if you are not familiar with using Harp devices in Bonsai. + +Alternatively, if you have experience with Harp devices, you can check the [register table](xref:Harp.Behavior) in the reference to access the device functionality directly. + +[!INCLUDE [](version-footer.md)] + + +[`Behavior (Device)`]: xref:Harp.Behavior.Device +[`BehaviorDataWriter (DeviceDataWriter)`]: xref:Harp.Behavior.DeviceDataWriter +[`AnalogData`]: xref:Harp.Behavior.AnalogData diff --git a/docs/articles/installation.md b/docs/articles/installation.md new file mode 100644 index 0000000..c4fd91b --- /dev/null +++ b/docs/articles/installation.md @@ -0,0 +1,61 @@ +## Installation + +This page covers the software you'll need to interact with the Behavior board, as well as how to update the firmware on the device. + +## Software Packages + +These steps are only required the first time you connect the device to a new computer, and you can install just the packages for the functionality you need. + +# [Bonsai](#tab/bonsai) + +[Bonsai](https://bonsai-rx.org/) is a visual reactive programming language that provides flexible and comprehensive control of the Behavior board. + +![Bonsai Package Manager](../images/bonsai-packagemanager.png){width=600} + +- Download and install [Bonsai](https://bonsai-rx.org/docs/articles/installation.html). +- Launch Bonsai and install the `Harp.Behavior` package by searching for it in the [Bonsai package manager](https://bonsai-rx.org/docs/articles/packages.html). +- (Optional) Install the `Bonsai.Windows.Input` package to follow along with the examples in this user guide. + +# [harp-python](#tab/harp-python) + +The [harp-python](https://pypi.org/project/harp-python/) library is a Python package for [loading and manipulating](logging-analysis.md) binary data collected from Harp devices. Install it in a Python environment with: + +```cmd +pip install harp-python +``` + +# [GUI](#tab/gui) + +The [Behavior GUI](behavior-gui.md) is a standalone graphical application for configuring and testing the device without using Bonsai. + +![Behavior GUI](../images/behavior-gui.png){width=600} + +- Download and install the [Behavior GUI](https://github.com/fchampalimaud/device.behavior/releases). + +*** + +## Firmware + +New features are added and bugs are fixed with firmware updates which are published on the [release page](https://github.com/harp-tech/device.behavior/releases) in the Behavior repository. Each firmware release is tagged with a `fw` version prefix (e.g. `fw3.3-harp1.15`), and the `.hex` files can be found in the "Assets" section. Download the file that matches the hardware (`hw`) version of your device. + +>[!TIP] +> The hardware version is printed on the PCB silkscreen (e.g. `harp behavior v2.0`). + +To update the firmware, use the device setup tool in Bonsai: + +[placeholder - installation-firmwareupdate.png] + +1. Add the [`Device`] operator in Bonsai. +2. Double-click on the [`Device`] node while the workflow is not running. +3. Select the COM port for the device. +4. Click "Bootloader". +5. Click "Open". +6. Select the downloaded `.hex` file. +7. Click "Update". + +After the update, the device will reboot with the new firmware and go through the [startup LED sequence](troubleshooting.md#indicator-lights). + +[!INCLUDE [](version-footer.md)] + + +[`Device`]: xref:Harp.Behavior.Device diff --git a/docs/articles/logging-analysis.md b/docs/articles/logging-analysis.md new file mode 100644 index 0000000..fc4cc0c --- /dev/null +++ b/docs/articles/logging-analysis.md @@ -0,0 +1,53 @@ +## Logging and Analysis + +This article covers how data from the device is logged to disk, and how to read and plot the logged data with `harp-python`. + +### Log Data + +Data from the device is logged by the [`DeviceDataWriter`] operator in the Harp device pattern, which saves raw data from all device registers in the Harp binary format to the folder set in its `Path` property: + +:::workflow +![Harp Device Pattern](../workflows/harp-devicepattern.bonsai) +::: + +While the workflow is running, registers are logged as the device produces messages (events and command echoes). Two properties of the [`Device`] operator are also important for logging: + +- `DumpRegisters` - Enabled by default, this property logs a read of every register when the device initializes, capturing the initial state of the device at the start of the experiment. +- `Heartbeat` - Disabled by default, enable it to regularly log the device's hardware timestamp. The Behavior board's own 1 kHz [`AnalogData`](acquire-analog-data.md) stream can perform the same function while it is enabled. + +> [!WARNING] +> The register dump can be used as an approximate start time for the workflow or experiment, but keep in mind that other devices in the workflow may initialize at a different time. + +### Analyze Data + +The `harp-python` library imports data stored in the Harp binary format as [pandas](https://pandas.pydata.org/) DataFrames, which can then be analyzed with any `pandas` compatible plotting or analysis library. + +The following example demonstrates how to read and plot data from the [`DigitalInputState`](control-poke.md) register. + +> [!NOTE] +> This example requires a Python environment with [harp-python](installation.md#software-packages) and [`matplotlib`](https://matplotlib.org/) installed. + +```python +# Import the dependencies +import harp +import matplotlib.pyplot as plt + +# Create a device object by loading the saved folder +device = harp.create_reader("./Data/Behavior.harp") + +# Read data from a specific register +digital_input_state_df = device.DigitalInputState.read() + +# Inspect DataFrame +print(digital_input_state_df.head()) + +# Plot the poke beam states over time +digital_input_state_df.plot() +plt.show() +``` + +[!INCLUDE [](version-footer.md)] + + +[`DeviceDataWriter`]: xref:Harp.Behavior.DeviceDataWriter +[`Device`]: xref:Harp.Behavior.Device diff --git a/docs/articles/peripherals/peripherals-micepoke.md b/docs/articles/peripherals/peripherals-micepoke.md new file mode 100644 index 0000000..5f6b35f --- /dev/null +++ b/docs/articles/peripherals/peripherals-micepoke.md @@ -0,0 +1,46 @@ +## Mice Poke + +The Harp Mice Poke is a nose-poke peripheral for the Behavior board. It detects pokes with an infrared beam, drives onboard cue LEDs, and controls a solenoid valve for reward delivery. + +!["Mice Poke With Water Valve"](../../images/OEPS-MicePokeWaterValve.jpg){width=450} + +### Key Features + +- Infrared beam poke detection. +- Control of 2 onboard LEDs, with the option of connecting an external LED. +- 12 V solenoid valve control for reward delivery. + +### Ports + +- RJ45 connector: Connects to a Behavior board [poke port](../connections.md) with a straight-through cable for direct control. +- Screw terminals: Alternative interface for operating the Mice Poke with other external devices. Contains the following pins: + - 1x 5V supply (+5V) + - 3x Ground (GND) + - 1x External LED drive (LED) + - 1x Infrared detector output (IR_PHT) + - 1x Infrared emitter (IR_LED) + - 1x Digital Input / Output (DIO1) + - 1x 12 V solenoid valve + - 1x solenoid valve return + +> [!NOTE] +> Depending on the [hardware version](../behavior-overview.md), some of the ports above may be different. Always check the printed label on the PCB. + +### Hardware + +| Version | Compatible Behavior | Notes | +| ------- | ------------------- | ----- | +| 1.4 | > 1.0 |
  • Update valve footprint
  • Increased LED resistor
| +| 1.3 | > 1.0 |
  • To document
| +| 1.2 | > 1.0 |
  • To document
| + +Assembled units are available from the [Open Ephys store](https://open-ephys.org/harp), or build your own using the hardware design files in the [Mice Poke](https://github.com/harp-tech/peripheral.micepoke) repository. + + +> [!NOTE] +> Three variants are available from the Open Ephys store, choose the right variant for your needs: +> - OEPS-3007 - PCB only +> - OEPS-3008 - Includes mice poke enclosure, no water valve +> - OEPS-3010 - Includes mice poke enclosure and water valve + +[!INCLUDE [](../version-footer.md)] diff --git a/docs/articles/peripherals/peripherals-portbreakout.md b/docs/articles/peripherals/peripherals-portbreakout.md new file mode 100644 index 0000000..c048ece --- /dev/null +++ b/docs/articles/peripherals/peripherals-portbreakout.md @@ -0,0 +1,41 @@ +## Breakout + +The Breakout is an interface peripheral for the Behavior board that makes the pins of the Behavior board [poke ports](../connections.md) available on screw terminals without building a custom cable. + +!["Breakout board"](../../images/OEPS-Breakout.png){width=450} + +### Key Features + +- Allows the control of a 12V valve (e.g. Lee LHD series) (v1.1 only). +- Allows the use of the Behavior board serial TX instead of the valve return pin, with the logic level selected by the onboard jumper (v2.x only). + +### Ports + +- 1x Digital Input (DI) +- 1x Digital Input / Output (DIO) +- 1x Digital Output (DO) +- 1x 5V supply (+5V) +- 1x Ground (GND) +- 1x 12V supply (+12V) (v1.1 only) +- 1x Supply return (compatible for +5V and +12V) (SUP_RTN) (v1.1 only) +- 1x Serial TX (v2.x only) + +For connection with a quadrature encoder: + +| Quadrature encoder pin | Breakout board pin | +|--------------------- |------------------ | +| A | DI | +| B | DIO | +| Supply | +5V | +| Ground | GND | + +### Hardware + +| Version | Compatible Behavior Board | Notes | +| ------- | ------------------- | ----- | +| 2.x | > 2.0 |
  • Serial TX terminal replaces the +12V and SUP_RTN terminals
  • TX logic level jumper-selectable between 3.3 V and 5 V
| +| 1.1 | > 1.2 |
  • Release version
| + +Assembled units are available from the [Open Ephys store](https://open-ephys.org/harp), or build your own using the hardware design files in the [Breakout](https://github.com/harp-tech/peripheral.portbreakout) repository. + +[!INCLUDE [](../version-footer.md)] diff --git a/docs/articles/peripherals/toc.yml b/docs/articles/peripherals/toc.yml new file mode 100644 index 0000000..59e79f3 --- /dev/null +++ b/docs/articles/peripherals/toc.yml @@ -0,0 +1,4 @@ +- name: Mice Poke + href: peripherals-micepoke.md +- name: Breakout + href: peripherals-portbreakout.md diff --git a/docs/articles/read-digital-inputs.md b/docs/articles/read-digital-inputs.md new file mode 100644 index 0000000..513329a --- /dev/null +++ b/docs/articles/read-digital-inputs.md @@ -0,0 +1,44 @@ +## Read Digital Inputs + +The Behavior board has one general-purpose 5 V digital input, **DI3**, located on the **Input** screw terminal. Refer to the [connections](./connections.md) article to set up the hardware connection. + +The complete workflow is shown below: + +:::workflow +![Read Digital Inputs](../workflows/readdigitalinputs-toplevel.bonsai) +::: + +> [!NOTE] +> You can use the [Breakout](./peripherals/peripherals-portbreakout.md) extension board to adapt the poke ports as regular digital input/output pins if you need more digital inputs. Refer to the [Control Poke Peripheral](control-poke.md) article for more information on controlling those pins. + +### Visualize Digital Input Events + +:::workflow +![Read Digital Inputs Visualize](../workflows/controlpoke-visualizeevents.bonsai) +::: + +- Insert a [`SubscribeSubject`] operator named `Behavior Events`. This will listen to [`HarpMessages`] broadcast from the [`PublishSubject`] named `Behavior Events` in the Harp device pattern. +- Insert a [`Parse`] operator and configure the `Register` property to `Timestamped`. +- Insert a [`VisualizerWindow`] operator. This will automatically open a window displaying the parsed events when the workflow starts. + +Run the workflow and drive the **DI3** line high. The visualizer will display: + +```text +DI3@12.001504 +None@12.301823 +``` + +The first value is the payload, listing the digital inputs that are currently active, and the second value is the timestamp on the device clock. Both rising and falling edges generate an event, so `None` marks the moment the line returned low. + +> [!NOTE] +> The [`PokeInputFilter`](control-poke.md#configure-input-filter) debounce applies only to the poke port inputs — **DI3** events are not filtered. + +[!INCLUDE [](version-footer.md)] + + +[`SubscribeSubject`]: xref:Bonsai.Expressions.SubscribeSubject +[`PublishSubject`]: xref:Bonsai.Reactive.PublishSubject +[`Parse`]: xref:Harp.Behavior.Parse +[`VisualizerWindow`]: xref:Bonsai.Design.VisualizerWindow +[`HarpMessages`]: xref:Bonsai.Harp.HarpMessage +[`DigitalInputState`]: xref:Harp.Behavior.DigitalInputState diff --git a/docs/articles/route-signals.md b/docs/articles/route-signals.md new file mode 100644 index 0000000..49f0299 --- /dev/null +++ b/docs/articles/route-signals.md @@ -0,0 +1,78 @@ +## Route Signals + +The Behavior can route some of its signals to other hardware without a round-trip through the computer. The mimic registers ([`MimicPort0IR`], [`MimicPort0Valve`], and their Port 1/2 counterparts) copy a poke's infrared or valve state onto a digital output, and the [`EnableSerialTimestamp`] register streams the device clock over the Port 2 serial line. The examples below use Port 0 and the **DO0**/**DO2** outputs. + +> [!WARNING] +> Only use `DO0` and `DO2` as mimic targets. In the current firmware, selecting `DIO0`–`DIO2` does not drive the DIO line, and selecting `DIO0`, `DIO2`, `DO1`, or `DO3` erroneously reconfigures the poke infrared inputs and stops poke detection on all ports until the device is reset. + +The complete workflow is shown below: + +:::workflow +![Route Signals](../workflows/routesignals-toplevel.bonsai) +::: + +### Mimic Poke Inputs + +When a mimic target is set for a poke's infrared beam, the target output follows the beam state in hardware — useful for triggering external equipment directly from a poke. + +:::workflow +![Mimic Poke Inputs](../workflows/routesignals-mimicir.bonsai) +::: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `A`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `MimicPort0IRPayload`. + - `MimicPort0IR` - Select `DO0`. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +In a separate branch: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `S`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `MimicPort0IRPayload`. + - `MimicPort0IR` - Select `None`. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +Run the workflow, press A, and block the Port 0 infrared beam — **DO0** follows the beam state. Press S to remove the routing. + +### Mimic Valves + +The valve state can be routed the same way, for instance to record reward delivery on an external acquisition system: + +:::workflow +![Mimic Valves](../workflows/routesignals-mimicvalve.bonsai) +::: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `D`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `MimicPort0ValvePayload`. + - `MimicPort0Valve` - Select `DO2`. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +Run the workflow, press D, then open the Port 0 valve with [`OutputSet`](control-digital-outputs.md) — **DO2** follows the valve state, including [timed pulses](control-digital-outputs.md#pulse-outputs). + +### Stream Timestamps + +The [`EnableSerialTimestamp`] register enables a serial transmission of the device clock on the Port 2 connector: at the start of every second, the current Harp timestamp is sent as 4 bytes (32-bit seconds, least significant byte first) at 1000 bps. External equipment can decode this stream to align its own data with the Harp clock. + +:::workflow +![Stream Timestamps](../workflows/routesignals-serialtimestamp.bonsai) +::: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `F`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `EnableSerialTimestampPayload`. + - `EnableSerialTimestamp` - Select `TimestampPort2`. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +Run the workflow and press F — the timestamp stream starts on the Port 2 serial line at the next second boundary. + +[!INCLUDE [](version-footer.md)] + + +[`KeyDown`]: xref:Bonsai.Windows.Input.KeyDown +[`CreateMessage`]: xref:Harp.Behavior.CreateMessage +[`MulticastSubject`]: xref:Bonsai.Expressions.MulticastSubject +[`MimicPort0IR`]: xref:Harp.Behavior.MimicPort0IR +[`MimicPort0Valve`]: xref:Harp.Behavior.MimicPort0Valve +[`EnableSerialTimestamp`]: xref:Harp.Behavior.EnableSerialTimestamp diff --git a/docs/articles/toc.yml b/docs/articles/toc.yml index ebe36f8..03c928c 100644 --- a/docs/articles/toc.yml +++ b/docs/articles/toc.yml @@ -1,2 +1,36 @@ - name: Introduction - href: ../index.md \ No newline at end of file +- name: Overview + href: ../index.md +- name: Specs +- name: Behavior + href: behavior-overview.md +- name: Peripherals + href: ./peripherals/toc.yml +- name: Getting Started +- name: Ports and Connections + href: connections.md +- name: Installation + href: installation.md +- name: Behavior GUI + href: behavior-gui.md +- name: Bonsai + href: harp-bonsai.md +- name: Bonsai Workflows +- name: Acquire Analog Data + href: acquire-analog-data.md +- name: Read Digital Inputs + href: read-digital-inputs.md +- name: Control Digital Outputs + href: control-digital-outputs.md +- name: Generate PWM + href: generate-pwm.md +- name: Configure LEDs + href: configure-leds.md +- name: Control Poke Peripheral + href: control-poke.md +- name: Data Management +- name: Logging and Analysis + href: logging-analysis.md +- name: Troubleshooting +- name: Errors + href: troubleshooting.md diff --git a/docs/articles/track-rotation.md b/docs/articles/track-rotation.md new file mode 100644 index 0000000..69a38ce --- /dev/null +++ b/docs/articles/track-rotation.md @@ -0,0 +1,76 @@ +## Track Rotation + +Port 2 of the Behavior board can read a quadrature encoder — for instance from a running wheel — instead of a nose poke. The counter is enabled with the [`EnableEncoders`] register, its reading mode is selected with [`EncoderMode`], and its value is streamed in the `Encoder` field of the 1 kHz [`AnalogData`](acquire-analog-data.md) events. This article covers enabling, visualizing, and resetting the encoder. + +The complete workflow is shown below: + +:::workflow +![Track Rotation](../workflows/trackrotation-toplevel.bonsai) +::: + +### Enable the Encoder + +:::workflow +![Enable the Encoder](../workflows/trackrotation-enable.bonsai) +::: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `A`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `EncoderModePayload`. + - `EncoderMode` - Select `Position` to stream the accumulated count, or `Displacement` to stream the change since the previous sample. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `EnableEncodersPayload`. + - `EnableEncoders` - Select `EncoderPort2`. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +Run the workflow and press A — the quadrature counter starts and its value is reported in every [`AnalogData`] event. + +> [!WARNING] +> While the encoder is enabled, Port 2 repurposes its infrared and DIO lines as the quadrature inputs: poke events from Port 2 are suspended until the encoder is disabled. + +### Visualize Encoder Data + +:::workflow +![Visualize Encoder Data](../workflows/trackrotation-visualize.bonsai) +::: + +- Insert a [`SubscribeSubject`] operator named `Behavior Events`. +- Insert a [`FilterMessageType`] operator and configure the `MessageType` property to `Event`. +- Insert a [`Parse`] operator and configure the `Register` property to `AnalogData`. +- Insert a [`MemberSelector`] operator and select the `Encoder` field. +- Insert a [`VisualizerWindow`] operator. This will automatically open a window displaying the encoder count when the workflow starts. + +Run the workflow, press A to enable the encoder, and turn the encoder shaft — the visualizer plots the count going up in one direction and down in the other. + +### Reset the Encoder + +The [`EncoderReset`] register sets the counter of the selected encoders back to zero: + +:::workflow +![Reset the Encoder](../workflows/trackrotation-reset.bonsai) +::: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `S`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `EncoderResetPayload`. + - `EncoderReset` - Select `EncoderPort2`. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +Run the workflow and press S — the `Encoder` value in the analog stream returns to zero. + +[!INCLUDE [](version-footer.md)] + + +[`KeyDown`]: xref:Bonsai.Windows.Input.KeyDown +[`CreateMessage`]: xref:Harp.Behavior.CreateMessage +[`MulticastSubject`]: xref:Bonsai.Expressions.MulticastSubject +[`SubscribeSubject`]: xref:Bonsai.Expressions.SubscribeSubject +[`FilterMessageType`]: xref:Bonsai.Harp.FilterMessageType +[`Parse`]: xref:Harp.Behavior.Parse +[`MemberSelector`]: xref:Bonsai.Expressions.MemberSelectorBuilder +[`VisualizerWindow`]: xref:Bonsai.Design.VisualizerWindow +[`EnableEncoders`]: xref:Harp.Behavior.EnableEncoders +[`EncoderMode`]: xref:Harp.Behavior.EncoderMode +[`EncoderReset`]: xref:Harp.Behavior.EncoderReset +[`AnalogData`]: xref:Harp.Behavior.AnalogData diff --git a/docs/articles/trigger-cameras.md b/docs/articles/trigger-cameras.md new file mode 100644 index 0000000..c3aff40 --- /dev/null +++ b/docs/articles/trigger-cameras.md @@ -0,0 +1,84 @@ +## Trigger Cameras + +The Behavior generates camera trigger pulses on **DO0** and **DO1**, so video frames are captured — and timestamped — on the device clock. Trigger frequency is set per camera with the [`Camera0Frequency`] register, triggering is switched with [`StartCameras`] and [`StopCameras`], and each emitted trigger broadcasts a [`Camera0Frame`] event. The examples below use camera 0 on **DO0**. + +The complete workflow is shown below: + +:::workflow +![Trigger Cameras](../workflows/triggercameras-toplevel.bonsai) +::: + +### Configure Trigger Frequency + +:::workflow +![Configure Trigger Frequency](../workflows/triggercameras-frequency.bonsai) +::: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `A`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `Camera0FrequencyPayload`. + - `Camera0Frequency` - Set the trigger frequency in Hz (e.g. 30). Valid values are 2 to 600. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +Run the workflow and press A to set the trigger frequency. Configure the frequency before starting the camera — the value is read when triggering starts. + +### Start and Stop Cameras + +:::workflow +![Start and Stop Cameras](../workflows/triggercameras-startstop.bonsai) +::: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `S`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `StartCamerasPayload`. + - `StartCameras` - Select `CameraOutput0`. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +In a separate branch: + +- Insert a [`KeyDown`] operator and set the `Filter` property to `D`. +- Insert a [`CreateMessage`] operator and configure the following properties: + - `Payload` - Select `StopCamerasPayload`. + - `StopCameras` - Select `CameraOutput0`. +- Insert a [`MulticastSubject`] operator named `Behavior Commands`. + +Run the workflow, press S to start the trigger train on **DO0** and D to stop it. The stop command lets the current trigger pulse finish cleanly — the device broadcasts a [`StopCameras`] event when the last pulse has actually been emitted, so no truncated frame reaches the camera. Triggering also stops automatically when the device leaves active mode. + +### Visualize Frame Events + +Each trigger pulse broadcasts a [`Camera0Frame`] event, giving the device timestamp of every captured frame: + +:::workflow +![Visualize Frame Events](../workflows/triggercameras-visualizeframes.bonsai) +::: + +- Insert a [`SubscribeSubject`] operator named `Behavior Events`. +- Insert a [`FilterMessageType`] operator and configure the `MessageType` property to `Event`. +- Insert a [`Parse`] operator and configure the `Register` property to `Timestamped`. +- Insert a [`VisualizerWindow`] operator. This will automatically open a window displaying the parsed events when the workflow starts. + +Run the workflow and press S. The visualizer displays: + +```text +FrameAcquired@10.351072 +``` + +The first value confirms the frame trigger and the second is the timestamp on the device clock. Match these timestamps against the frames saved by your video capture software to align video with the rest of the data. + +> [!WARNING] +> **DO0** and **DO1** share their hardware timers with the [PWM generator](generate-pwm.md). Don't run PWM and a camera trigger on the same output at the same time. + +[!INCLUDE [](version-footer.md)] + + +[`KeyDown`]: xref:Bonsai.Windows.Input.KeyDown +[`CreateMessage`]: xref:Harp.Behavior.CreateMessage +[`MulticastSubject`]: xref:Bonsai.Expressions.MulticastSubject +[`SubscribeSubject`]: xref:Bonsai.Expressions.SubscribeSubject +[`FilterMessageType`]: xref:Bonsai.Harp.FilterMessageType +[`Parse`]: xref:Harp.Behavior.Parse +[`VisualizerWindow`]: xref:Bonsai.Design.VisualizerWindow +[`Camera0Frequency`]: xref:Harp.Behavior.Camera0Frequency +[`StartCameras`]: xref:Harp.Behavior.StartCameras +[`StopCameras`]: xref:Harp.Behavior.StopCameras +[`Camera0Frame`]: xref:Harp.Behavior.Camera0Frame diff --git a/docs/articles/troubleshooting.md b/docs/articles/troubleshooting.md new file mode 100644 index 0000000..ea28257 --- /dev/null +++ b/docs/articles/troubleshooting.md @@ -0,0 +1,28 @@ +## Errors + +This article covers how to resolve common connection errors on the Behavior board. + +### COM Port Errors + +**Q: In Bonsai, running the workflow throws an error "The port `ComX` does not exist."** + +A: Either the wrong communications port in the `PortName` property in [`Device`] was selected, or the [USB](connections.md) cable is not properly connected. Try selecting a different communications port and checking the connection. + +**Q: In Bonsai, running the workflow throws an error "Access to the port `ComX` is denied"** + +A: Only one interface connection to the Behavior board can be opened at one time. Check that multiple instances of Bonsai are not running, and that the [Behavior GUI](behavior-gui.md) is closed. Sometimes, the port can also be locked by a program that did not terminate correctly; restarting the computer fixes it. + +### Device Errors + +**Q: Poke events stopped arriving from all ports.** + +A: If a mimic register was written with `DIO0`, `DIO2`, `DO1`, or `DO3` as the target, the current firmware erroneously reconfigures the poke infrared inputs (see [Route Signals](route-signals.md)). Power-cycle the device and use only `DO0` or `DO2` as mimic targets. + +**Q: Poke events stopped arriving from Port 2 only.** + +A: Port 2 repurposes its input lines while the [quadrature encoder](track-rotation.md) is enabled. Disable the encoder to restore poke detection. + +[!INCLUDE [](version-footer.md)] + + +[`Device`]: xref:Harp.Behavior.Device diff --git a/docs/articles/version-footer.md b/docs/articles/version-footer.md new file mode 100644 index 0000000..2c3fdbd --- /dev/null +++ b/docs/articles/version-footer.md @@ -0,0 +1,8 @@ +
+ +--- + +Last updated with:
+**Hardware** v2.1
+**Firmware** v3.3
+**Bonsai Package** v0.2 diff --git a/docs/images/OEPS-BehaviorBoard.jpg b/docs/images/OEPS-BehaviorBoard.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4235c45ee6dbb05734109e552d22afa791351f62 GIT binary patch literal 693741 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 z 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
rB0hg=xN**6LGB}iN^Nr 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
oaDBpB5@NILz(Z4JDV)rJCl{m&g+=3mj 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νA5G**w$Cui(4V6+9eT@x` z(FRByfUN?(Lqe>Ad!Hhe zsQ%C-OU`LGjHAq#;T-vu)G(2qZ)MvfhUu4HaL0K`EC1;s7Zkq`{=THAmKbHANwS0*H7|FW01J-N0a6J zSq@)V>xjM2p4*dl;;+m<$%no$?`Ht7+_rz>QIcMa#a{Id&ikun^`pXl{pEQ{3%U)7 zayybu8ig^He_)rm{^R@o=A%RIsiI;iWyv`C#Qj4xR7^jDMK6jT;DBFM^7)GBrn&yv zt>na0XrmCkV)X5&;|5LC0Oov&A$p#oXWbMg%Bvh~jahQTlOttEo&EdEHRprz-K|N` zKRauy_|4_PB?C)AOkbN3fkS!N8-1;}>E`9aqUO0jbC!Pp<#g<=38B7!nal!ZcdQ3? z>%>2`1?{C>CD*2PI{mS1Q{ zPe!f6kO}7ZE0$6Ewfz?6MV-We&}NTEs&stk3I^f9bcAWd%yhC$ZLl2T;n$*SMKA;OKL}Vtk(peN!q$0uEN2ZW&A+%2K*v zqbt{3iuS(?v@fhn*$=`xj{6eG&$x5lAkEp2yQW*V?3(Z;&THwR_*Pl6yH;wW2v*mn zJAuD!%Gz&+3wFG7-e@sbrHCSO(9jWSOKZGKu@z(-H)iN;m+Tz zjtM+Fg05@7>qR(kTg-a43hqm>n?rS45EaWNTy+7WCt~NL;MXZP&`ffe&q@KL^sYc-MzKu#8bg_RN}95WXib7zsk(hhd7)6N*GnJad(WU@}+D#!j

sNFfs6W$r+2!fE4L-&K3I7Ke=l$67rldOCJRXNqavgq`0+-qbX7aRCQonE= zz^{(?wlveO9ik%gW8ul8yFZY3f>Wa2=2SS8WZtLRK;p_C0Gs52x}Y>1X`U=0m&)Y1db4BEK!4 zq;f;LzwCt9R1NUPXMO~?w8Sys!UZ9Ey=-*b#Ra0+{?rfll@;0cAsvVpI5D2Rd>G!u zofTnNlZkY1ulDdN5$Im+)=lJWODHR-wQX>Rco0mD=qoSRcV89lcyx#7IFuhQUxV96 zlW2rj!-dXIOhm!sG_JoBg<52XIisJ+RHDhq;zzaZ(%THr;>;7=lGdqPp~gm#X>6MS zs`i9a0%rTDw4V&{f`!?CHgNSh52vJX!_go<@kQM%)rvnfkdevRY)&Tt3vw88N~tR2PG`6L}-D1Tk2rO2n_0r z-wwEFmj1yR8r?6?0gVd|>nU8#u`8{zUdm zt_+2h*gt(ltw>`*_>`fK(IaAxHSrOb6~)bIn|M}n{o)gy;c)o0*=nOM#9aFsL4c#B zI=koWj$i$xW32f*_}=+wNp$;Yg6K1WLgtq!B0lQoXfFNHK4qIv5tH*g=N||};-NEh zR`k@NTRgLbp5P*+{N0?c@916klN2Pwm=oN`jN7C`!6z&8notU>Izd<;mYp%p(7XWl z-B;N797$A0QWjsrOxRpx4oh1sW18+ag+^Qvf(MTwz%@V>Z?{;RG4V6Pr6dmvY|jNE z_vNK=j!g%+zYLcIG3p4AGs2!?MLuZI0Da)qc&u2PT(Yee=DNZ~(4f@f^2sO?U}U5N z&<4;&ajYZ6mC!?M5$GtNEc0aq?@k!3KVLhUTC*st7EWc`L?Sq zk%BrXqtC$h=B~_v#&iW+tvHE8a0-$Qufg)M$nYl5m|OOHGKLf**>3u{jSP!UvK&xD zH5@*nlt~LcCm%QE!Pb!`2p}`jmpge})?Jt&w zD#ZvgcTW7qEQDnl&)%^f8F!pezVhkT7Pu@-`ymtq1Cd4G9yNuIDe_mZE`IeOdzB3( z)35T34&nrk4~{obp3BuaT&ABEl-kIrJjUPEy4;W$m^P#Q2k_}h#x4iIE_*~_O;@P~ z_*5j(E8VUyDStPZsd4)Q2xmn&zo$Km{vuF=iyaK&_E*s`c!Y-PE)%2}d>@um+*{z> zoW?erOeKZmWy=$*h|=7jE%J-KQqc44SkS1v8HHu7nP&9}lqE;1X^}{0JF*gAuQVO+ zV(h-UP7&5=87t{^gr0Hy#u!n#Vl`(=^1un(0)i_1OcR!Bv(4^Os2mk`xXwjPy~VTA zmI~Q|EfS$*&C|^_ldshe{9HzSuqu-Hr{n$EV$(s`jXr5E6Y-Z(5KhLrfCYTg<8ld# zdTDLEC6sl_l|g+qjb<&M1LnR$QtEultnnK+^JemSIp`4R;>vfs!Cl-Usgee%Bq;yN z_Y4pu4V2dyr0Jf~To?SqNk%MZy8^_KT9H#*X zMFi&{=3GqbrH&$HYy)6J6(a$=2csicq>-m4uj^Dvl30!z2Xn%=yh`<`dPff627|!{ zp#F%B%g5bp;cS;)SNXZoeifeytMcW34-VlBl&gqW&9|1;A z!Q*GC%VYMH+sCg#n42Bpt}=eP{{iHOwIHO;ysGDZ{{iw}377pODkvgOJx{%px9zFH z>>5uxRbJ-X(!mA4e7m2s$Jf+aL|`x{8w)`#ks=+xoBX|L1%{%|F{=u3Kn2#>G>yoYho_j6_MIV2W z*LqjP396X3)A+u~m!p^=3fA#mJ)EIzUqtN6UU=ZQcf(UHtwYWHF@$u6jrrg5Ma&`X zd+e2R=Jx*q7+RWKgV;FZ1>fwZG7a$6 zQDor10yfq;g^{g7#Mj8?6dh%ZfM%*q|DXI+{QzUo|I#u~kE1zZiJ#8_jD zfXbAcmu&;B=l9}GnvZ5}CU5MsM6$7yf}?kMH-yIZ7j}tR^eoj5Dnqb1#L9r=`X`!@ zj|B${6@uM*6BRZzBCoxOeJ4iJagdWq)|%b7)kZ}pIB(P3KzY#8D{o+a#?mp55(qV7 z$|V8RZNW84g#H)H)#vIzz*3o8W+z$vb6j}ME_?G4v750h;&!PNUY?6y$5amOW*IFs zii|`SMrBdMP2eY&hg9F8#tErjD$#c3e32d`o{iBnIDxh;X)9a~d~8h|I9k80JWw=T zrZeI^_-FGfdVhlx-%bhZulnxPtzixsBU>~s)gTrjnn zGOMSZi=a)jZ*(P|<;{K21qyxx~UIHN`bU@xqL~8zC z(GQE~J5?NS0UbTINXM2r)~ePG!~h8w45NMG=`bgEmxkIEu0BJwjhQ%`_|H+q%Ettw zB@c$ZoI9e420)lrebR+4pT7Hqq=x`C`FqFedcp7GjSYNW%g%+3IT`S;OF}5GiQ-JA zbBQoSw5q=OZ;TD*g5PTIiH;$SITdHDdj*$kd(4l5!g4eT7O(p^=7LrjI$$lI+59{@ znitnzltio;{&BG+Tsvi4Hg+=p!?nwato|+Wh>n1IRi1vl4t91*ui#NafAcMDASh_0 z%p7^mQC=~6cVdK)i#z8*%IWA(o3>{4((<6RU{wcS%T&!vFr}g}(@g5Ea3?K9CE zW&*+o+iYR7xaT+8{rq5v)=>3P?M#o;R{!6?lQtHd1Q&jg1vQZPnmqC!E-yQtSDFe( zq{FUJ2w@a+wyTo5^laR%DD_b5J3+%wBaZe|OiE0ot6E&GE6WPEGC3R40ZCgB9WU&k zJ$sJ5bipbPhc8)bNXvY`@%F;FZ`)}VGPEfaT&jR;3UKJG4VLo1v}yn5I9a3&N-)qJ zb)od6jTH6SZK0kgWE>ft4uD;LmA45iJ7-OoY5z$09_7vIJ? zWyV$?5uL^!*D0jdrDwgUspGBIzX zQF4XZQ+Hv8vuX#krq(#A%C7~|NXn_`3q9VZDb2pn8vV}9-ycb&Nelg@H&yJ7aL~Av0KEdqYc#^f>6EVS${>+@`yTR}xV|XyCaeH~q9dhkn8fnQ7lRq}c1NF6m zRtu||)_(>!$s-1{4Ax|aBq>uP%$R$dSvd|n;wBpf0vWc?-U4gq z3%sm-P`ISaF(s~!g35O5RaIi8ogSCS|2)tqxlj2sLY)|VgSK$Mx*=^t{WYGW9C7jR zqd?C`4EIG9)!BMf)ArTc>>amLW3jXs$N3YOf{k*6$&+Y{p z=hY{-FmlPY`ZWpc&+wtykm%q{nN8!j?qiPX!HoS+oY`cdYi%X;tgFzL^-dNf+IRCr zU$aoU&j`>3j62n73Yrd6iI?8_#ngDo(Yqp3Z=5JZxI@m(WWh8Mi*1a9q9jzt2T|s@ zg<6l2B{E?6d(odebTPFP zw9KOQA`OEp8+UJZLCdfPZ0GLTTTb}^RrZsa<_{XO!55uBLh1+YDX|gOdB8gbL99{t zYl?Rw=f#bcfEn#&l$PC9h4SHjfl06Mx=XvE4iWn^Q)uC>ofU@LEo=^r@1B*GL+5Ck zygK^iH^iK0+>`oABMLYtvy!DUl!L3M6>r$DEDhY#4vY#Q_0j+Z7t2jHFT?xcAPPQ^ zp6tU`GuHiSo)iK2i`D^xo%2?5-&2z$js>c;vV0Qq+ULFg+`BD)XUXyhe@@DNo#5kd z^|^UdxVO3bGa>Sa*?XCYEgd!ZXsMfO9a386z?9i98y3tQgi>3j^!VUF6_M80niLLq z^Su1kRxz_3zf>z1%qfx<3yz2aHt##izoJX`OUht3OZoYb5$ogZRWl!RY?LBqGXEdI(h1MM5>v{{LGhE1%uF_UR`EPx* zR??I-CcZ5)OOiGCi~X+;NtLm1^B>y&17JTs&ntvW)slwG&;ys*ch7Y6TjEV=aHZ>p zHE}~9U5u@0!|Qk3C!0%}8WlQi1Slm%Z_YFr4ZenXsy#+s^`BWX;#KoyzeWJH>jwTs zuYn>>P3VZuNea&reu}FNIX$}F8#Z;dMMDM~yGLob*N1uuA7HZr=r8v=G(8!sQeBYU zr&u_`H#a>2d2`u=TXY@04h!6sk?KLea}MT~)>elipR~kh&#EH_pnVN9rm+$iL^}kW z$0{)#;G}=3qu?6BmKQ{n4!;>1h>=HOz3iybwwgOY4l6^y`~Yq$-UaPy>-V@r-@xoqX@|6!xHY-)ge zj{;gFQ~D~}xj?T_<8yaGN6r!3qRC&5zpi`4=c8#uS}YqxHh|9$AK!ART~rf!u*^UqaVK?zX(tZ$>O?QxMK6+Vtj10i&hLE(B8rF}x@-Q1p)Bj;4Ml|4mP#UlhiJAnmcQMG; zgWd=5WUxz{V)M?rh)v=X<;vmG2aR5QbaS4pmL!hb{~ZejniX6Pc)znQppB8D{vA1! z+h*pA8Ek17Jf6h?=MIpHr~3Y;m{S63B;AH*_nn#d?P1uCo@n0M`$uzUCvzzo))D(C z{Ta|L;?`>Of-n=Jf$FP&=tVgjNuCx~pFE7(G3YoGMF24DP~UMFcAbMPaHKV@vThIO zQ$k#1SaM4z_~K~FE79WmEa^Isi?DZ8KdR}80o(2Vc+)Wcg#zR449Pb!1Z(A|48h$o z(W_}l@>S(>u4xkv=6dv?v07(XUi>41WxJE5hyEed;zgDy&pO>vmt8T>M~bu$k|#gc z9qJbf2;Q2jB9uKwq3bN-nH^gyLx=pKHAi1UdB+9$KC zfT~;W;!G4@%NIl3ph*uuaEY9)qa8Tn%o{%xzCB(@7am@-nr5std1WD7y)|Hax{MYRE~?Yco)C{B^$6nA%bFHoSx zt+-oom*VavcyZU@?jGFT-QBvg_PJT-oIUo{e~~eg`js1g>O?Nk>d3j!$L!opgWt!ESM^w}Q%%_Ssb7H^Xkb8eD13$|LC=+WBtkG~j^ty~ zNWMQB@7=>OL&eC*>4983S_(VGuckm{Ug4y(OLhRDjXk=0x}U82g}jY;?a7;movpM*9nK-7##;~m+##ty+Y;d~GZ6F)4 z)~IXonbFYa#DkwSx5_?bTi}nnY^G^+$j{k8#Ji6fQ?mp4dATe@kH9_>f;n#y4yoeB zaXUCe0hXbSXj4*dm}UjIsj#Cbja5)XxMjJxVJkRdANRPHmTQ-U^DX=A0zQ?1vJjs? z-GiF;^TAMeQTF#9;-H$I4NpIemNcs)$U9zVy%;5k zrfGMM=9d;nAidgGmJwxy>14c;kpp-QWv{JmV-^g;x(rhJp5__TMoJ#M-3H$0pVW#G zD-k?!czh?*Ee7b`V)Nd@pJ^+#bqs-fL%@H4h00&Us(=Z;akgCwLN6Ci&a7?4ideTx zNM8k^I%~h5fVQsO0O9$;f^hQTd}GRnS#+Lz7RN}FAf^F%{_k^24EcK^^~%_7TM4Pe zvA})RcELiMh=XLD$^YO5%FJ~Hus@#4r2)77;tLvIY?D4<@8a5VT3W-ZVsLReK5q;nMK6GJ7!I6jK=tS&s_#(AJFM$`POK8N7x_1HpJ){ z1m(!g!`@jBm$3!P0i78MIdnTW{q8A673;@!qz!9A!)x(v2^_cO{{Wl-w=5yxdP6kY zzEbY`aVMdmLwl#dW+7Nuu0kPnffaBJ9gxI zsZa=S)o)?g)q>bQA>zf-kUw}= zF7PZWiVQR*ZAZ2UsE~$l$vfPy&`;ff)|QUK$z|z{Qno46gVDX!kP07SW5T>V{EQM( z$0oR|3U|Am__ns!_vBFz)uq+eLdXQFU-xr%2n%TAM=faL=LD`KFIVCLUN?Xnffs&r z;RrqA^-F;}C40<2=5Q}%c3?bt|CSa4NnD$nPztOIGLm)3fGQfasXXSMQz zJOr%BDM2m2oHeG2Y&WKi-u$>`wMS^-<9R1arLS1x4ea^vi&sM zWzMI%sDFSsI$M`dj5^Lv9_Gz=6(&g?Op=uiBGTT(S6)5qypr$ZbL3di`**A*B$Z|c zp=t|s>ZY-Gsy$mhyx+@{bTU#)gsIvl^Z*=HSgtWXY~G%R0f` z`Te6ML2Su`6waOjdZ)z&;^P@Ehii+}gO}F=65he1LGBwm*fZi=?cX*VVoekFjG$Yt zLD~_K&)llt5+Z0z{(r4t|4+y9f5aZN8y54PaUb_T#D_{##Oun0`Qk>KYv`2FaA?zZ zHPF~YqX^%oop-?2NOd87ywvW&8zFZeXF9uJH z!;)~k??2BTaBK9$ujB)E979xjxhAZ9Kh%TPe;JjTb3~m(fjJX4x-!}R?u_%u9Ua== zn8a7#7N6`i>4>gCXB958`}+Fqp1+hls>l`uvE1_POlJz(n;8;?d8CU@eloJyzjFOz z>U&uEM1cvvHo-Rt9V>#9dFK`(TS9BZ1_DZ!<*eww*5kJZVd1;Qtv7j;0jXW%uH4$E z8Z`{!!{BBVUFS+Ul_bq`&@7noLwo}b(dI$Huj8S=3l9Z*aQK>D^Sg~0K_Q7yzR8&s z>TPvOsLf_dpol7yXJwFgvOJd1;PnxoXQ=-5y(A!;t>fvH0q%vENiR&`a>b1oA5!4_ z{GNzfzrWA=z!T*d=YR@)PTtY!iQU7d*fTTos4OBeb*4O3Z?cUdko&mtbP%AG8n<#x zPm!=@c6I|ZbX%mqRxz_BhJ?;^bQW`af)Nun65W>Zc?TylQmQa*O!;zuscp%-UURKO z6@k3%rO%h3b(-46T`O-lR3#3f`AmO@aTK2sl6bWElY>$teKyC)eHg!=0ouw}TcUEG#oN&6c{walWv)H;b?#2;w@i6bYEIS^5Njq$=K zICNUf@^Z)FDh9HuSA$1J6Mkenf_CAOm)!sY+1gRV!vo4CIp(5VL$>EydEn@3C06-^ zyHbMt8pq02#sxB!SsOx8B6Zz_O`mNBQdEYuwm(=89bT{-z)una{gfP zI-cEyZ%@&A+Ly1Se)2;K%|BUV>tdRZg_CxQ>(D{sgO%u3IWk3uBslGt=Q;5@OWG%F zkU&aaqr47;J$no6hoVm9U^0q_m<|ruafg^0w0bwm1?-gsL|Ov z%%q@crF*WP;}(~@E@Z@n<9&_g;!>^5SUVAdf_>+HYM{spOM4TgdC7^!uUXYC9^CGu zh;;o+;oRJ?71iI%g8uBK8RtXgH~~Axja1Mslb#0YBVuwMQ6<=`g?5S>=^p`#` z<~F{X<=h?hLPAu3W{=MKx5=+sR0&rkrNOH4kqBqDY%Ul^If|ka)pd5C1~C$(5DMa0 zE^gS5ibEU=)A7<8A39XoqSPJ=ul%uN_38E&%Pm`ShGqeILw|0k9HH)fzLamh)G)<Nw(KqPzZQRL-p^UBD!&lWkc;Bkbq(Pc%C^cbdmPJvWhYNjCj;WxRA@=;g_PwH zei=dQbq=y_Z|nw{G6EJ!EI->M`g0tqwL~us9psG5jvVt4VK|8v47@h3-D5wEWY9;E zUbq$$(xU+r+#&cm>Qrzx-i-z-ssZ&FrJle5P&ti2h|)HH>_A0t3WeoL1_pwkRf_6Y z3|0VKb6v*ICT7YgTSGD8*4Ungdh}1nS(KeRw%k3|!;2`4m?^*R26xUb^apd^hlQy- zqD^P*7;oox*izZ${sCg3v_>Q-a<)EQP?{EZm+mL6Sod~2MYjQLoAS=r#1&0JTqg{v zxsCG~`-f0hQu$|!u8lg4kT&WoWoOc#Em7wm9pIthf9pHf$tc0Ve=_i001Ynr(NoX> zF$DM0@3c49Vw=w;J)FxUDUeKMuSbMg`9Qz5z{1lv*oNu$gqJag=roYkKU*yZ>}Ju= zg?qN#<*n2m^5Tv&{-ToZKR}m^NP&lWgos7)rdgy^JqoKM z*C4)7H9eWU+M^;BXQNQe^*J)H;Ar~q#wZsvhrFB0FS?H#TkQn6xYzBkrNX=NqOU7B zH;oa(U#+sJ+ER2z3k}bjB++nWW(t7pt9x~;*A9G@i@%IIsEv+0Ld&7G%~^Gof>X;Q zj7)fEm;)bWAMC(g`X}sb@(Qx2yM}e2<;peBcAc6x*^XsMldZZftD`pesu2%h8&y=) zr9Zo^mXmXYtRmX%T$bUscr{G$io{wqV>2vnW&yP^sPW)t&5zE$b^mSSceqZ%)jepm z$~62TahC*rQ1q35VN#p)_bminJlxWbr?@+9K=+-i0*YfpwG1%@;u~0k z7m|-m`IguDjR|s|CsPPR*>U@=D*^(x{5T=Y*nw1s#Z5STaL_CJcilA!OZ)^&RoX#y z*DjoiJvuw?dh}@tR7_LS|6;bDbHqYY45IjY;J+fC=ZUUS}e?@Z-}7VKMJlH0*9Eb zai@bYLGx`EB7;wN(c(Vh(kJa5--UxB0#}qqv;P!B*7hs4EdPF%H9{`}YJZ4QXf@M- zH*tBMU%-^!Q23$oBxY|%zsp)F?EzIgwkxBEe@nLUgr$>&Cr#758iiSp&$$gt@Wh%V zx-C;5LfV1H@N^>$)|wI&@+y_5s0V|Ns)aQtGj*%^p303ZG2&jk4{4|K1v(zk{`0xoy2B*-iZ% zYfg`B1QOg`<*4GU-Pv~?PH`PzP)(@(oaR?f?JGLR8iwL zs^_b3n-w?cJ;kd!QqH<#RrUhT@TQ8MWBg{BRy=ruIc#GdI04%VXCzo@+9+%*)pw9B zQ4)vw5R}BgPl7Q?Ytc=3*K6)VWo8V7Ug>FqjX!^LV}IPitFZ89W1z(>PITB4Cz?5O zm}{koS5GZMu$=gy6T=-Jn8QRtRv;G%F z@gJfB28Of#_q5$B9ny9Xh~uX{7lW-Zb;`c`*(6Fzynhwb)y5f&@zx^Zv@M}VD(?-< z3dXA^Xdb&rZA+3b-*ZN;M$QO8JiOfm!S;q84(^1~q2=fixR=OpZ13(>ICE`&m5)1$ zH)iZQW#+j4f85H_kw{8Wi%;&MX=q#T5QohfU zkk9cfS+Z4zq4G77obVGWraK(}G^bhX^KE+`Um0z<~9_d5(nULk(X-=#@7{3;US6 zChM~VWCpuYpCMJXEwESl$JAH*rv?@E5yzZ$+(7+ z4Ie;+q?u>e8^=W5{?pZrTts@q*E^q z(ab#sj|fXHQMSRJ=+Hea;OY@cA_?N{0`YWSlKzU(1srtzE*KP)K`L$~dhSc~Xf$I0 z+A1=&1T4qf?ebI#G0Z}FT$rUpm0|uZ6O{zE6pBd=NQ=vEN+KL~6;{A?GOtLcCr`*b zyH$(Q(7B2WE#Rd#HZ61>#D6rx;OvDWjLpeN7#Ge7Rh@cHaWzwkP22yenFqp`NcC_YW*a{KS-7|&3vPIeN( zVDj*~bc`H}3zkC3AZ$&1mr53JI;)3RezNQX2wwx<_-jP>9Oq)?8o@Ux>##~1$5w7^p2%bhiWZ~|Eg7J&KJog(>X zd5B7gg^rE=$L?5qsb$e;4Gxx&^IuneEq8U2BaCCH$V9ldO9uJ zfs}Z^Vni4pO0qkq@=b>#G3!>9uAkD4zk268p}L3mH-kxuA5(p*+bk2&;&Y*Rr)NW)vr+29b$TrD8-{Pt ze5~z%tmQsx@1Ly-PUYF!817~uxdnI!U-ow{tqL+FR2_4y7hN$&GB@U=^Ai6U>fIL# zHrc(f3p(_W2_;ln0P`k~HGWt`0PNCEaGWyCzVd7_wBz1e+SyCZ+He<&ts*oRJ@WL- zci=V{me=ZbqSN9H-IgtHgr7NUc4t1wE5Xw`^>zxc-$f>61x5YByO9IoUQ(6H0&j3B zK{uq>6OGTa=cEp5b-bH~e$g)c8xgsRG-J_FvV&zLg71F9I$@^Xx?O8!H2e?lfU>XW zexZT{L9Lo@4Lh}RqP;{G;$K3-$RpQ&n^U&#LG6p%jZjvpyCdi3U}$_1a9C*-$DcI%p%HZJ2r=|I|U({~_33MHV={i|`fR_1TOn*z;&PByM7bbg5%YF3F6&iuizwP>; z56-uR_H`1v*jk!|KPPJbv3a;k<(t1reAJBo zw*x`6WJ03X{CApmesNh|IEvJ79f=2LP{slS{^ z1yhK{Kmf#sD3HEK`_rcz)>8iM(!($DR_fx%Ur>Jk1K`+;AvMFrohx{2wA8gyvr}{OAESMMR;ufa{V+-fmDc^QV&z(kd9r8w!b+N11c`*M z{BOoP#C`IkpJfORnjkns>)v*=uRCd(GS%=%H!N6>=j-Gnl{sevlQLWXX*xRnJm|pi zK767%vaj79o2#}HQ(ulr1K8b-8gB!_P;mhBDu5-w<%-sMZ5^0*EwHE|tV!)D6*vpcacK zbJ;8FVe+Sf4AK@E?b~cLD|8n}j0P&xRqkLuE+kbYXd(Q$YfIzlLXNH+X9I_>reHRE zDe+Kez`Vzw%g5`rSl{}@9&RlE zJfROREshqIl8`W$SmYDW&*Ap0sjmg1!bGzTxLTKAhc>7|@xU?ig1;BOs$_LMRv{WMxM(;+`it*0}K)5I; z$9{|D$NBxKNyagR8m?pQ!P6x)6I-4iCaSZzV#Hq^a-*TH!XipXz?9N>;Adx*^~Q*xN!%%8feDC%27dtZ47)I@}gh%!8>uZMf( zuQ%bU_NMVM`2T)h81l3aqq*^47r*U>x*&bQoQ*2Q#{QcCRHXWp!={OYnH#M^J3!hj zisO?@DGz^(&K1d*1@dM+jsE+4?o066bnkWXvWIcN49<}9ww_;K)YOrB$T9|+9W}AE z`(Ot{UABZ;%bcJhv=_+5DeU*I$xf{NHdut%iU8c*IL){gurrak_v)y2qz?yVZJuK$ zxOQ^lxklL1Gr?tDF1|JvZ94p$yaE?B(*}5$iL9{NS6EVhtp#3JO==hvX=^W<+8W9N z4ly0odvNuIl*!Wq#c1$}>GI*zYn=eZHCeX-H3>>W0+X61Zi5A6W_$<$*Sn%(bo5q+ zz&7YKY7++kCEpi&awWSEeI~*|m*?x|G~LIsVpEauGVbzG^3B`3qo-LfF}wi;C_a;o z^=pOH9gWToS2*#Jr}V9^cYhgk>aQtxc|2;_|Q>Cp3b`X3`=l&N^Ut|RdKc`Kz6pM0MPg!*;>y3=W_nv$n*c$ z_xytVLt40fkw{ubZ%5B2)6tIt&8S&-3f(v5+W9E8h6wm1Z4pPpywa&843s4XYaiAw zbPYnzcKIt>(6F1{4vM&L-ObPQCbCYS(eG2_n&Qon5&GFC zqKr*X4aoSqZ65B@ z_hWaf8CCc4zE=G!7P!#?-O5;IH=y31BV)d@$doC0?EZ!(WvXFqz2h$FD(P38CN%9x zcgJC&7=^DS16O6NUY>4~8-(-qAXdJztVY;ohay(K#-6-S0}tMLCsCcEy1tQJ>gM)# z5U2N5vNcqh4fePqdQr%|@6-D{cNu}%z> z>oT5ifGnYmTl?Yf}4~d)vF(hdtlO7MSTY3qSm7S^&uwN<=m6^TNAS>AmHj zzQ#s?wxUtU3MtEop8o;Dswmj%RZ@*i$Z8RJ`#rEV&L@W3l|Nj`|GxTgsS>d7Ac8bp zu|Y6EekJsX*X^)~Py`pzQ%Td@vIu2?B>r#G7_{WNEh^M1?ZAFttATL^TOd{WFrzJa zb{A6v!IGM~vfS&I>?e$_6JV9EeB9$+#}LKt{emlf^8(w?dWHEC*W$9`&^Hha-hGkk z(7@XZAaXoqU|Y20fujv?1EOBcH61B8D}2%H@+ z7+Y)QuLk%@2U@{n#?}~1n^@x>sr>@+OmF3em|(5;<_ZRH>hF&+#3m+&Bd*oEn0f{w zZEnB<*|@d3Rc(?ceCG#}&P=BttaN;N?x(Lzhto8cvFtFsHtL0OK2#GVDa|)*q9HG zrqk-P>+ci`5$%jJ{l-T?k& zXcxBU0)=Ur0v?&>)dEhPajBRSE?)pm@UB~d(TsqAKn?pR3V{hRA^KAuCwn}~V7@LP zpR!nEN{r@u2RLq^I+M2yBh%hkRA>TW1@sA(E$2=9Rw$@;*|1L)tCH{!ph#@PoK7#3 zBUE;B5hBuH9`x!yrF|?=k1BQvXc`U=zqQ+tF!(d2|5hOxw$gqR^^W7Zezx`3FzMU`_Mo$$^V$38KY)bpL{v)kY~sRQCen?zc4$=k0EPuU=hwdt_`>{@bqX+%i_L~StH80I+CN^M1z4)6wqA3YU~YoJ{0=9Vk(%1oEqa5#E3=^HWk+*N1^so z8Uj^Ua-?^0`ObbIC~S__dFW*p+Y$7g?(5$cDv!-rLpPH2eY4|1qHb5AZu>;lCPAFwQ)@f5*h;3p7`b)ay z)p25g1H8)0)$?$#42?`xqI5#B8#{0Fm+#)xjhALM)}=+~XI6Setj!#(;;XESE|npN*dt zWO|fI5ss(6PQw-_pNy2mC@2jbAJuhRN_Ax2eE1KFtX?+yI%`FKgPl9L6@?-d@ihNx zP+^7wH=t{dKJ>-W0e+mQMgpsq6Se_4Hl3OqB)=9JkxXa$_>}N?YZ3&WD4OU$l8Yqy z3kBXhZ^eQJo0i71cN$GKst8NWA|Ci~lO!6Q68d807L5ebc|w_It=g;ND+Dw{hBCSl zWn^qSCZ_2ny1-cN87J4pH?&8O7h89YzOjbqvo;XwFqvfY4Vk?!pTW?=B)@*+uZm@+ z`E0KbXRRpVOuJ~Ef4H8|3pDlD<%_Hb^34&VV(sN`?E#OGeZsKqI++66Ew#zM*L}MT z{{U_6sJ|EmO)n3%ON?({9E&u@NZ{V8UOZ4h7&!$g0QK^~ zoFG}D)pWR-KVzN|FCsQ}4ZFzdZXQRo$3)uju|KMM=+6v~`4WkgRvry+Dz(fIPo_kvY&3(RLKW@eK9 z8Mw)vD9`h++G`cVW?3@LgHjW#zAnbvkG43sh1OmnQ82-czmi^0V&?_vyz*8&ru#tz6?{W{5e6=UfwpBfqz@-o* zfXKc!bMz8j($#*Ome;@|olexC-;dOla_&zR2>rlup^aOeFWV1=z!pIVIeIx~$6jcK z<-NccFv8b}@t&P;iwVcH=f!K`!}dk!0zbSxrxJCe+9=G>PG^A^JSfUyC3LRV zbB>ONKY|@GQu>uW_K)#;;Ta~qO2XvRULGEquRc4+bZHH_ICp}wg#OmH2#U&I7 zT~kI|4@I|wxNWOm$N!4U2z>Sk6m7E65 z@(fTVYzUVfC0-Lfq;o3dLbmZF4VqDen&zL*U)@T$f|D@YyPlL5Y%cv>OSMBoC>}$% z<(wg*&kSz~i@2cO816tmnrdie@(AHDb&yRThSz=z>8Hou@6feKX*7XbprSl_-O%?t zl8)IoWEqO>PGr9xuHxY$J$?lsE{~udlyf4Pn@}`mAHx4$CFF;6ZxHfa6w2vCsyq8C z1$Rs^zsVFI;)Y&w^!?BP`A#_;6~oi zGR#FSyd5&Zp}Wd6ty8m#m;B@bJ!Q|OvU0A=o|`k@P{~_=Hl3|!HmigURwEEzkEiT|HsMd4I69et)27r<65)%+1qLxEJTuk{9dA+ ztT`2&h?{PTDAxjf1DE@J`0g~~hK$Xtp!qy9w}-EOc-XsZ6oJAQutD{*PM-!5W;jRj zn$Q;M@jQXbJvI1;0ulI{0rejQfia!Q22-yhJ{4=oIt-S~2SOC#Kv4Pv9ACa+w_oU@ zbIDFMXtP+-NLef@{!ydFTi`7P-0qmLqZ?;&Z|Y`DxMy$UT9wlVcPY~=g06GM4gJHk z!MzJt0*tcHtE65T=zd0tSwRv6KU}i(z4IkY6@u>XgD!Me1H(kv5)H&2(eLG^>RlCL zG4!}ASk!FsmT-L_YL7NEt8bRD zbY^5foaBo0vgG2DV@Gdq_}_m{ocNMYd9#P;8K`IxPY5;$)SY7dltxW!rnJp8qQk3b zd{zq-yM~Mi7nU9~j~r2rFN;~FQNgSvu28o{_Wc8pZh^-;f=oWM4W_aGJ~>2?zm5hD zf;!sXP5W=li%4mCNt4~wdK;S|d>h6aP#tw-7Rh9#zJiO+Xf>iyP&O3C(Ab8=XrI>z zFr_!7A#PGi?!I&F*KTms)tIkE?LztM(^v+;Fxc~aWx16?n)T4st;Xsf;77{6-ZTei zyOXlY$?%BA4AwbLs=?995^SE{lO*dTP0$v3J6Rb{NTqwh9jrOu#LbeqK zC6fzB1CH^B@K<``luc93qeMMJTLgr}h{eXK{BZQ)CL&?2;)oTc7o$3HqC%QdhR!?v|7k0(-H!|ZPEaJ3eWF;Pe78*tLR*4X`sn9}m5?Vhy< zieG#Kw*(l8o444UvsNKo6|;D=0rPrN8Q~=j{Rt09D=gRCb4E#1&FxYQ(Zcv%PqMSD z!}Z#_rb`aSXuy^Z%~l4Ot0TE4n7SYE$09i9OUFw;O?*><{pj!o@B;{kuwB-0%-oiIBC8XWCFd{n7=?AR0T zHKlYtb+R*6#X!36M1CLF_Dv^OtXPYdR)NHS8A*E(I$8Xx4h}a8fd3v89Q_d%ddss( zfM3=<8{V#1n)8xc#|xA>6hVqX_8;lOa2&8wPsKbP zrdU`2jjul=J0-t?bfu?o2xW8$_Re4F@yFsxTQ7zy|H`#h_tH=vB%kS~hI{L$Fzrc^ z4?PWctp&y0)vl-_r&P|v1TpWagqZV^X5W?aH^wkJ?|mRrpdfA)5+T^J2cNu2hJj?3 zeeIbv1RkO8LL>02z~#)3E6M@u>Ur0l{6spc_n_FL@B4YJ1kv|wcYb(lR`GZ{#-G^) z$uH+fqBngE`fBMKqerk(Jn;U;K7OeJdyxcR)=5p7$7~MR*au1xq1y zM0Qm| zMYAW-yn{LEGEjKdpG`r^%nCaRdT;$N%_&1L_S$TYiAxSM6ZX`grv&YH1q{GN7VScg ze(zC1w8ueI2fw>{57N*B_4}^hD4{|6T~(&H-^-83Sc99hdW(O68pas$(N^c8Z2h@* zeyp^N!uUIbh*!VdN9L9BIhH*C>{dL1%npBzxW~kutt&};%dNeX5AYX>yvd=}2RPTe zBm#57Q~RsBLQBRs>9K!04^+pmkd7$a>krkwsqg*?o$%Y#sytNrO}t+CIX(VJ87;SX zLyl~|!1TLTMZxHhkN=UTXJ@nxWeXGP+Ca4MdMaBGVTOy~r3cQy(YnZN#VXTG#VV3h zhb6Vxj0m@tt=9nS@f9ceu)d%%htr`?Y=H~VGB=GhjAHJ!yF@s@F|4hhk;CLGMAyV{ z)|c*zDm0w4jM_cl){Lw{A<7n|>Clg0FWhIrsmNKhnpNlnN!ooTIi zG1?3A$z}`?8J^mIx0S``L?XcHUmQtuO@g$4>P9ovYv)rh8 zX|pU)WW~raHf}!w0#0!i%pX~>)W!dX;iOtaW9)!%MzpPb~9X_HE393_EWZA zn;NA>VqGN6lq^ZofaR2!wI92Qxj~&<8;IJEX}hfpE++=)M>TOgt4-@qgY=nR3$d9_ z&s&k=V-cQg*o&u?;7?NpZcRqOm)>|auRrpZSt~o^%DrDKY;P^HZhL<#^t8gkyo$Qv z^!1Xa{LUOK{J@U=3n>q#YXIFU6OquP`~8OqMS|VV93MhrV+Ah}*6;)`v1LFw3LmMG z<+o-^W16Gs!U5FJw8R`UH5anel-?vdw@2S-EQWYV*Et6$>}l|J6P3E+x%XTS@DSoG z(|cJJ^W)Ec(99Y~?%^AsTJ!H{83kjG6cbBn&`lAjnv1o=!Sa4}p5QCNyc9(qKD3V0 zgDR!tYx(%f=Cx-ia^eyQiz+_G1j$GmuWGr*&}a5B431{s*UYywY##Ks8boOSzLYDD zBtx=i+hKlddR26TrkZQ@i^bD@R44S6N48S!i+K5po#d7xpl&f$VYkMBq=a$@k#_a? zh@gR~j5q5;mPga@+m}y;**c+~(mF=cj!kH3!grgXz_4@5*st)EE)S*cbCbOCEGh|d z&GH=P>lKFt{p*SDBok-3zXqn+8OSy8Dfme05BJ!TKgB3-iJn6$-ig+=8Upgx46IH} zU8s);$CZ-@9X?gbC0x^hwaAhb?3^T6C~&r)4TA1a6}BEi?~tus-8UOnM=_t05|=!) z7^Zwl7N4^4!_V0%DR;3Z%~H}ET&Yjv8$}{*IBjuvR9cf$mRE7j;Gh6Vw=cQx9DhSL zqg=ja%@So0lAWIi8F9=iitF8pe(M!NSEDfbWu&F2a!P{0M+Odze6*$VSa@&j>Ab10 z^;gmX*2VfPr&|-;vHMP3sZZ~D6|(iQ5ke*@6_BJowKZ^hr!=T z{`5Ov9d(+`t~=p4u_6-tSi4RSpmI+z=xFwFUja%8Zodm4?Fd8T2Hre>^{h~tXW&hZ zMIGBA0HhzgyH8qb^8Bex7hK3^20ua&w=sIbZs#wj(hfd=vcP+u z%?M3ZWS70}p6oNM1id)Eh}^*O36R~tr0I-985N~Ake5-lkruty%3@u@p_je36c%xIq~ zKzcI|5Pw_#hOmv39m&Oa#%R0CJxRC0=wGsyB}|4WIlIJ1u~CivXdFf znp;~sZ1IgJSkV@(raMiprw1NSRBA2h7BEGe#pfxe4`^mV9bU%U@}r~)3+Oyc-fMqF zwh(IiJtxYlP+=`oj1MFun==4_`_k_Uf4vnZL2El7)I~?~E~GcJtjn^Ng$sRbv@hM| z1nDfXzrnI!%HUP--6<&I&id3|j6%NMi3GDR57#Tw>WE7`A&LjGWy^1KwQHDmrn|#O zgzoknz{h$rg6wnB_g1Iog{c(a3x(L%=`;Wy*QU+Sj=D_qx%5^n9_|&K)7*~PZ9c-u z$v#!dnah*xxbIIB%aA}zdu9STy|h@pHHHwE1lRC!`i!w#$j75P_w4VMCfnF#VS^(b zT^dz7D>Bwdg9N|7^TM|6bU&}BZFZvcdz7zHMdlb{!uOfczzM`^O*25i<*mnj= zo%*$^RSh5CVe7rlEO~sP_ z)yp2lVJEVhbud|NhR`L!SicpYfg3(#0sJ9E+OpH3L0A?2KUEw|vHR+Gm~L&{m-$ z*^(G>w4zI#K|OEr`ew?b`Nl8oe$~8?r|n3+xJny+%LNUw1itWOSDeO)=4P`k}muzi|wlTmpy={JJA-v&gFE)-so6hJigA2)Z;>YX8Nw&s=b)|BEC zw?v%g{s+}?je9yH8CzEa{k$DTy}}f4>F<uZ2ca8+Mx|StqRMCi3$WT4d4IGT= z6TKz3iOxtaSFGZ)HhhwuIKuYfH)}uW^+RnF+2U+?VXE=^ljQrhlHjB09NriesNl?Z zqFWUHD&<$OQWLV&g>Vs&sE|OLl)x`Au8-_+4IvMRdL56khO}v1Ic+EgO2EO2iMT&h zqW9^uWF4*Pi=%PWwCub>6>)ZqU}YR#uFT;2R5g*cAG@U9vwZDg_BBlZ0E6vH23X9) zi_A_4MhvswY*!Kc@0cxY%rXKpeoA17JIB3j`1#Iko1#03xKm2QhBG=)|7|N9_J{dOt=yxiqV3;#Jg5~YM~>OQ#4*U$5?S7px4xcl=Rn1{#n*IvvZpAU6E^DQgG5^Nn|9aekyB zvKO6O`khi6er7r|)z>;5$RSIRDiZ8TQ%!xWHk~d7Kma-JS=M*I{8p$^Q&n!Sh!ah=(9+$P5ULyJ-CvV2g$?PT zz1J`9jod2m6H}l48H%b%+B~c{?d4vI(q9$Azs{bST?;OlGGxt799@)-(j(?dhHcu} zIqEg`rKj04GA-k%?%fCW@>ViPL_BZbQwTJxiY@cvRoNpmOlt5IU2!Zp?^&E~X}omH z$Y)6-d$LmNL*j^(ZP#vmzgm3trUUwk`t9^zbG)ap39AEN z)o%tk?&?fVL&JDW4$Wi`zX}hff-Q zEgBmn(0HPsP@IO#P1X>pT!VB91IIW%;8S*B|Hb;dfqUTd5ssuH_0)utkagu_^pz52 z9cW}i@p`C0U(_9Lx(z{f&J?6!w1~GGr0-)j@*1|x>dLeKTYuez&Bb^w9qQBM8b6C} zFR2HI3-%yd$|z4X9p1?iJ5chTY1r!zu*-DWeu4`UemhX}5xi1x^ugg&Re&h+Q9C zS1xejE&e%<9rjxu;bZJzur_k<)1iE4E)x6)AZO@RJ%tcr2q!|#=YKtmiN%oK0}OJ%&)@`cnxlb zwO55LJVBXHH_57^ylFCHY|Cvc+K+B-Mabc~j!g9oZ7Ey+xBaI4wpO|(X+u-ewB@L< z|Gj?tKYT~q*vjV7FsJd)|6jblRa9GV+^tKCd!cC2Hc%vm;zfd$;#S<<-QA(kLW5iJ zQe0EqU4qjFE5U<1L4*Ex&fRy$+2?AHu`gCeE^?EVyz5oHG{c=onVWecVpJ+Somq4tQ2Ja3;lDUNisZEW!%Q zcXC|APnZ05QOW+RmE>oU#H@xCj{PLXXYB9F_un}%`}q48r$_$P?hf>jJ@hOen5RR@ z%cmrMb>4xqVS@BRtV7CPdvw4NL7Ef=6V}*s86Zi1_gcIWIQ~a}-F_dW!2412P`O~T zDXTEpJpDu*@6@E_>k});6)+pV2-h|(&@lO3UD7tq>Eaxi;vzeO<@L|!ri9O&Ls#;H z$TV}@)XY_os^LFnJDx26`z+Sbq9%ivZCs7$N#uqJM`;dUzar1Yz@fFvAhQ5q~6y*_V=hyQ{L*4v=EKZ zy8pD^XdN<%G2qdR*V=^`@P#ooB?{6YmbDh{x`Z4xZ)C$AdbJt{Md8KsCNcwc_M#WSS3VdQ^9vUejenKzBz_w>^^3q z1(lt2TB!a3*BxU+)n0RUQNuDGWQJN#aO@=ac z1RD^N_-1=rw|*JNgfAP(`P%LlK$bjh_v8C}L1Ch>%{sNyfpN}^?^ujcf>Aytqpk|x z05|m2CECY*YD~%_DPW|^ZOgcpL571q#o^)wB4BCoLpc6BVG#y<8;pzAh<|>y4WIuM zrG0JDWa@Upxf?p#dR$*hgjFbHfP006fdz(ILc_T3yZKFq2kV8xSQp6=4+r0usV)65 z)ae{&KGx0dC(>tXFl;r{V-y`uhOCu4z*bRaGI6xmd39e!#CiA4^6ykH)j3H@^oc6A zm@LeGuF`d01e5+8#dnArZgaNYWU$YuFltTM*&MhQ9nK_f+T!qdWwGFXUvp>-8C;<@ zntkB)D%~5Sb_QUryJA)*8YcjK;RuB!GC+)}(j8JS)8LtO3Ll9GGuXCs)nI79qG<-r z7?|#XXJhYF{Bry}?(!y4&@wCRYZ+54B=JZjWAoYZ4qTXnAZ#?}Ml0=azxAd(Zc zgVhNhYbsRRNH`hEGEKnjXleGd7yIU5^ZZ>+V%jNup5V^>fa=5Btq;#wY;~B^@z)OZ zpI*%u`EyMaS5n*>d{q;jBc<~nTT>dZF8|H>@*VgeCbGInaoG2L_Q9^AgF7?ZvrG_% zml1v}1rNvv!ifq%02w^Ecj`JWw&ZZ6U{s)mVu#FCcWq`8;S$rlCYdj_R}yxQWoTL( z4l?iZiStjg#KP~Ux%x9}s4iw3Buy@vD*NO+$>IY0!NAUD-DGIxZ)^nspd?rjX|@ji zR^7Blc9?2VEb2Hl#cl1Qlf*lMxo{eqwx{hTr#;sUGG(?91~C@jYZ^}}-`z7ACbvCt zEpBB)-o%*m30)qVjPxZKECvuq;$pWA+1sO2sDEuQj=61{euRzdv$78$aq10xLpF0~ z)YhqS9rFjnL@gzfP$Bn*PT2yVmz*?88=QYII*8d~&bEXN>iz8|LM?5)r^nl@pM?>& z>^u40SMcxg_dO7YddYIcM!b{8jml3CT+&bBpe9-4Sj7V+4!7+pksIz!0zSOFV)B)f z#tLz8T9?Fp`n$?;#$T+l+FWSO6AJYW?n|^()4PED0ukREpzH=A4Bb^k?F<9vxM`=c ziJ|i9!>!vNJ^rm|tK6tvHmR%4aS0mfpE#eqX^$AzRWRl&7}WW_NK1dez^}Uu+y9Oh zsQ*8?IkbFDfw58~aw;QNjR#=9!pW1x@Pz+|G0??kEMf5tJ|VeXOhbDYx9)>>_++Oy z#u$lY9N%N1DqXuxf%QHCXJcZx)2xH%=c%a@>k(8f1pWp%_=QJ*hmR*yXX5Sv zpZ^|R*>`qycxQ#dDaRbmh>mTDt~~|h>E#B1D8{)3A{ADoz1P@xBgRi$&E7TI3#!XKbg$E%&(i_XP&{>M-O zf+4wnk{?hn4KOd3dBLtO+L~DlU5HCisq$X;rojGot1Hpn#5bM>5T15(47c+$hQPoH zUAUJ1(@mIf?cCmlD_i~9sr~Tn>gCVoH16Gmp|uHK+*`uHO~I_4I&-{rWG*s0UNJbF z)KpZfm9eHISak-(ahAO%H6xHNiuC0_P?12fY~CiLG>sqF|8@e;u9t>ZnddEXKFM7|%TZL?wlp?W)bT9B>dQ0(i8d6Mr&EYwc0LH$>qY%r_QQ#0$p@ zhxgmv$^=0mj+?cOB{3WG_{zuh9wXNfbL7pis^0Lmp+w|9PHLHeoRXci~V>I^{SundZO`l=?^AhC}@64!z2wN0=U!dDy?QUuSu6E z_At#toJRRQQNxxrXP1ti%Pw>6X!Mk+yMCSTY~NJ04At?Ww{jnrH8giFnegO&HY{Di zgWt!T&@@(-&4?wi4ps$| zOY$X;4t40j3&8k+$K=(*4pOVpq6P;!469s5^Z?8>;%s10;!Qq#P2+yD^*&2gQ;=7I zdf;8qK*4i?_XH~?Ym3njf1iEL-Lm_~G~CW*H~2~?imT~RF!2Wtlk1-WVd08hInN5K z2@uCUmx19?>pTR0NfJ8ga$X_su08|n^6N8X`s$6hD$bQyI3hDBtljZNN0^vb{vukJBa1(y%YMCtsuc)!)%W@R>_9PJVfb31Qt!4a!$n|l- zp(g8wNg`I97875Ay5oA0(GrV;_hE9F+fDc6>y@SZwM|2zRla)NII;D+knu~!Ow5aY z&HZ0#QwPA-V(0W{t+Y7Rw}a=cHrI#xFGNRU0@P)Ea1t>c}~K zM=4XTVv_JIYZs2}k5sd@${W{5Do!Cp%4GPZ#_Ogt0xxnky_K%3m&qaJ(@O3lrv`r~ zY}bEt`frw3CDl^XwOIa63s5Z*x_m1@V3!{;XcKeJN8K&%*qF)RG!iH5K||}1bMlBW zrTS52u8UA*Lz*QVSJRQIlg=~F_VWA|7rB2oZ`)D1AE<5WTIK)kr`>q+8R-L-&x4n# z4Z1J-)zqR*luXogy8p`wo~Q)0by-Pkk&L5gfx8%Jf6UbnPbig=qX<#IsAV!kq32da z^4onJv#uC@`Xp*0gs*Nl2bsuyATQLWg97iFsvZBC4H9f~`*3g*va?~fNtXCRi82~& zNy@AiIyI0t+H=R*V)BWqv9V08qrtvAox_Jlt?fTL#$Y^HkrPg|TYly;*51ss^Pk(& zjzP(*9RQl4pz_h?8^#;1*D`;NG6eqptHWXx3unI<+f3+=sWr4eA0PXZC;BUelVqbo*k( z!CmG%Aw3#N+8%J?VRDjJsPBNMJ2lVFKWbz4<5AtPqlF=$m@5L_#;U0`mt8*0?#t1} zfbRCDGePDjZj5|iTa(4deEq>D@ecvA=hf3+YTm-{9~<=*g!z|=p=Zx?9meE5%YOys z7gieXCkfnW6~8DS2Z1ptw^lhGiyKWi1GpMTtY>YtS|%{b5;}J)=m~C5O_7WZh>qq0 z&CcxYh!IWqqTDlFO2ZkI)~v`aSfD>Z?1sxSS@Wl_-=I74{ za(*tvWElNx>sfm5t;c+mAUg~PZp1A=*0wd5NbIkykL3FIDl|{97dHd`5rS|4rqxL z<`+07^)cN@T!g3xHs)}>on}3Q94#vtTrEv=dD0!7VJM(K>^6{3@HhBfoIn-chQ++I z&3_pDlg>t!${AXt;=`OS6*N=6NLZ?EM%~M=!tdO>8|T5)G?Tvv@EN2ZMQv+< z%m=<7+MAj)s#%<0Mn%&j8r~vh+n=$>7GMxzC{#0u^{)bubk(V@Xt#;M@Lv>3X-607 z#&$`3#`y5P@z&M|U(xxb9cOaFPFY}u=r9wal?3I+2d+@OT802l198k8pt;O@5Bop^Q8A(G&nKx*Fj2cSQTr^SFkFF^mpXteus^gxRcW@}8k)#Fry@iy+Z)cDMp9x7~9=H^XmH_L465 zu@q!dP8#}`PVMYlyuU|C0kiikLMHTiaZeJ&W*exoC2G%}3O4D&@b{AUs{hKcfY60R zt(y`tUGf9hErD`hv1^{D8`($gN0=8927_fv_g<;a6`6(Ej@rlVF#A@VqKkF@bqadF z{o?|jP)=j=_m)U!Gximzc1?I5j$0;ZYgFC zBA4vWQwEUS6=2~4AU!fa~4_c~Nc`e}bc z9au5!juVLJVw0bBIc?lqA=66`^2VIi8n46ys8x~N_p)6AoR2bgaRIbiD!_ZplM>2b2zqMY7B8|L1@#cv3^d(NBey!y3zmc95?8H;~rb+GP3O z_)xcZH-dzW#T5$|Oy1VRRlCfjXT!igFXK#U*Vsw7<8yd9T*za-5pL zO?QN(K1PP6?QRIB>>N*iAtQG(2ZT9|JiW&HW$W3|nDlpA{JJB6< z2AuoSID4S;s%cs-Y7=+R4F5oG`g7+DNWRRN+vSSR$C&e4l3V23+$nkX3g3sWt@Z?; zZ)`iSZj`N}I)od}#k~TfPYD>6EK#vzAsZDLtp%yv0rI;Pwg09l^8mmNRxOky$52`> zcvcUQG-$U*pqqquD##bYo9mqR8>2SR`%UHQLGpgpQ!<$9R%$cbW~z{~RlY!; zn`b`whQ^s4D^hG;v;3EGdZPTygG{m68?o$j9e#5U-Llg!-^K$7DMz42hjUP&Xto$moXi9g8C1{-Y#*xg1qej0Gi+B64w zoB)qb<1lsS8VUbh8jl8u9$}cfFx)MSiGJ;U&#>l5>V56bhnZk!8UmafvfLZ>l-_&k zWbHrK-4upBHsIkV-U*hQvlbCK!48dinqnl#8DPYSIK{nF9SEpl5@F1m^oR6IMzvpt za+t^ruXQ)Is4vTzxgQFfChUL?0DP-CU8W{LMkKePKRcA+oY6IX+#5Alq0?nt09 zP{47J1Ja==M*nzJ^BG!(O>trIY)(GXK*cSV@m5zFlYB{Vyf8kYiz4pyhJ0%bixaIt zawt1k=Ux($XF@?t`(~f~Z7+sw`^944y|uB%wP5Cbpotq6Ov@k86xS6QjPKjJX4s!* zPS$rB5%(i$`uMhfSET7qAqb_)!iAURXmLD z!~B5(265K3!QHwd()u9m$z)?7U(kHLh-pJqcX>z{(iRc%aMT) zQmUuZ9pi|^5x;5gCno^lK_3){p0tq%%g+dW9QW{OSNRX4QYPb}Dl%u-lo=VnkX$4! z2qp?!sDJo(2W$T%6c`p8>|j@1)pb0^#^l~I5k|1y^qv+?js&_C!pA6)?S7ii6U_o= z|4Pt6DI!lblTW#gJU!Z8KDg1+SOyGUfq0uw02}7#b8S_xG#pGp|b}d5k~q$@z<* zoA&0D6kjaf_Hu(NRxo$CNu+nhQI|C#Zy$B-|1nIFV(Ez>2x$f0ldZuOV))(oONS4` zJw_>xMb7{bSO49bfU6=00oxF>Gl1Eer_0I>5N!2lp`-bOxkdO^vKebI<$~^lam(tE z&X4EP3{Hpax1V^=X{FbF%lnn}UY3#|sp+~KX`g)>?LFa$e?6jWyjxLhY0LvfZ@^;N zqMQyu``B{}; z6;9J)CW!u#!fdspMUOo_lk`MJhIrP`aVYL)W{)@I$AZENhGX>i{^Aoz=%UG6H?AzZ zPS@oI2`8jj>*PERD4O2;e~0^;28C8X@gscu%T&$icE*S%}m`ZHH;Av6Ik-11nLTY5%Fr4f_GC5AyBmgj1? z5>4a&>H{+dCPQND13g4Vsiyg~OQevjw5H^v7sCDv4v5_2gffbMQg}bTheVJO*=PAX zUHH^VylRYTvwOVi!<@8#8NkOn;qiR#d`>K_#0g*FO-;t%^uQPTz0c*t0#AQ+&EUI& zJpT#bWjB@X9@DY`9GK!iZ^Y$#=`|i@-IM7Fp46)bBUJ%A^y`{+7+$bKYIcv2X>(Qg zV%#Y+MwRvtV3jjaQe)kT*}Eis^qnT;9P+jmnNaiLWT!i8;kO;4yA$>O>~01MmyzW? z=ibz`_~9!qC9x7FdP_LGiZ}PbP(c@>GzVk$qAv;6V`w`z_#kj;XH0L%cA`)w4 z{5Mx`wZhJl2O|kjkY1^O&=Kt4r|L>ukG#o01P5QLEri#+7J6*`J0GbY-TS455DK?a zP|VvWpW|cPk#%-k0IfK-|IN{1X^y?161N z6E7|;cMww*rfO7Ou4nY*P*EHFDq58%M>0@*~LdWj{_1pn3!anAMgjT^z z8uNOl%xwTxkna0fZ)F$T2^r4JrLj6Do;&)5cYD4@5CA9^!vyBXB*=`u@7P$`ra%L`uH8RMmEkFld-5YYIpl z=qO;*N|v!=rVred+%zpLpD-+ds_>N2-uo~ z+Q-4Nm{9Ws4|L@1JyQ|&w)d!CE*B#rRNZY9I=Ki9Fv^K;s zHQTeHDjjVx0?Fx$&dtE#CiJed;vfI>1IMc$(mL#T>(__JrggPbR%cH?tJQ{M(>+GH z64Ey|YjkW+EjhUUX~Y>u1)u z1-0T%F(bv34zy$F0CP#(B~>hfP*wMh^NFtca{AtwIMlKAL~e(LN8CLCl3(2f%o8;e zg4;#k*^mHR&ejH@k)OWms`HV==tCzYin@G1)(7%aqdORsIJ@+=M;IIx7K=dEB;CJ$ zdmsCb8>R~Rebm7SuI3qh1lqnB@<>kj55r7p&#xY>ZHe3^mrdoX^-u)_;ya zyi@)Bc>DJ#Mqcsmc`=wOG%&gENEG(_#HYaOW$xf$lEgvollE43%G~wHP#Os-YC+tk z9E9b};(|-#+EnINS-nx@)5pTS`4mtrmXnd4GQo$ZdxXCgD%fOGA>Nqt_qyQPDI*Ba z8gnG1J}UBS$vcN2a~!=1QxqufW%Cf=z%0tFDe=1my}EQ?jR;oYoZ_)egZaxn;04ph^l?1G zEjqKnx@C5A-dmfwrUuE3b*XzCcMsf9KQ34&jfKft3GV&z(ZhUXyb70-hTdY0|)n|*x9)L=;#9ZBG; zE`Bl4Od41t_=A?_fXA^&!x>tKM6V-Y$VTa6kgH`Mz#Xf`^AuQByNbz3LvjmgZ&D{( zJUAOAo~u_Rd!qU*>)(?gX=mg>S@xG6KA~S15zCttLaJf7;{D2R`F752=Nm!>%A}>M zQm2k7(96RX88idZ*)XviSU6>POkG-ENAEef<$@C?qe6Nf!R+h46kgchv*(jtHHw?e z6`x4^JMVQ3HY|nGCBDPjw`OeVgBS)6JDP)))f}#bO3Z>k0&Sj zRtyI~U`)g-qqqa7B%@`qSZK6y*{L^FU1ecVx0@)^Xppy+h{PS;Z6RdHT~+Q692hO7 ziliw7i*Yas;l63?N?#-v%QifXGaZG&$wU8)eBjxnjCMh|DE*xk4f!QxkrYI#ayPF& zc%OJQ={YQn*)&mSXU?*7PML^j_inM_PepJh&<}tzq%R5p{)P;41m3Dqn zdPPlNVUas4y8EpW@!6IenS(coaIU-x?(kSXBQs)j%`+uGN7L_M!bg~31!+X z3I282P71+O~^!Vd7$-l`qD1f|)<94%a%O!Jp(Yb1GwO*x&`5URc6j-Y836I~DDr^*+ELWvYHtJCeAtU^lEi zZ_?lHn3D7x$fv9`yA<)yCdFr}iU zzw{{E{(O4~-9~6vEzLF+0`K1ggpIb`Q=vF(6lyI)g^5YCyt1G9Vc*gN=qZAWyK}YE z{pD=BcL~VeIjIOg|0sn?^Eqh2tQ-X#xDjHqDo|@qS!x#uPQ9XxsxGRljGj)vd>9SIfokoAj=}x*4w|)|4 zgK8qBm}bpQ87gjDp$Cqd4tZTc6k$&<{H=P0Mp^#iv*_Sjh5wU0eYKls!}Yh=%4$E1 z5Ow+q8J%tH5cuT-UHDtBUWK+Jz4Dreg<%QiS!U&-RP`2gV7Bhnr5VnH^=zkPS+Sne zV-YzRJN@^--tvNAtz!tKtj7}_s^X`AvWDiKp>Z>Ave$X;W8ka9D7zWPU&VS1{~O~6 zM)43A1%{@%=3gmdcDz1X#`I~&RV<VK1dpfV>=UX$jpE`z#JM9on6*Q?i)fohNxppBe!Tw~m54s!*Z#AM=hOE~|vm z!tA||qK{5*6&7joI-{mY4e#F`O3yTnbGTeB$!9BShxY~GF8KH_BuZee?In)~6xm)w zv9m~5)yE<8CDGHbLR$N1poPPZT)nPvk*bD&O;yLqO7)LhAVg)_I_F}c7y?P)4AdI*DuMkCiv?C61q5~9tF)oX;=6HTN^QNR3={?VfE_J>!t z=UbWv>+nD;u(sxErN}@3%U>HFzy8^z6{Oi!To&^~sR{G|so7KQ9S+Jaw;nUF^0A|H zqRZ3lchrKlf}mppK8aI?D!o4H=0B*o)zi-{)Iz^gcAg8nDGk6n#X~C8h&#!Jt!7Dp za0!~=H`(HHYoF)06}SNIu-DEE-M1BOB=WRnDACj5Re@F`tgi|U$>_*L^Ad$QN!uj| zQQuhBHWREeW1zx#s+L!*SV))Ld_x}y-d*jwhcYt#MpD%{mFzXdmbQ6Df3_M;1e|`@ z9rBvqXhf;{_)#UhT;Gqk8qSNb8K1I6HTv!LG>Q3eC~VX|y)i~z3}3&>1n;zV!9F1$ z3(c8%qypKYC|$H@^!~V;+aCrUV8nwVnwvc}KX_vD(2B)g_Et}m28+xbHIlwq^UuFl z<-TVB592QvKy?!ELSgzR+kBfD-gua8W_!&SFFEHV-uAEYKar!yvrpb{YMuOVHl_;J z#mXCRx}IROEY1SJNa@q3kgD&qAj%5(r&ABd>#~@^O6|=a$~{SZkcrI(`nkU)_G(4k z=g>M%s!kz*B#^#9X|Gf4`4db6G~2xv=2Ga8;odY7ef9yo&d$~?^1#uiZx>$C*1+2K zEG({8rdpwxzhYVZ7NRou@PYWG=56AJk=wEG^s0Fq0e__85iX?5!}RT$H=Lq|@_;ZX zg%2<-JZ-kCiZL!OWh~#~PMok?qk{KY?kE(b$IsO?h{YGvyXj-lG`k`cqdL$^1?)J$=h_=jPL9)NQcwy0$LGugHRGAP6R(?#v;)4{S6w2L1ynZ4A2eA`us(|7^j zS#Tv#9)*@@-jhTi6vw_5$o$Ay_OzC}%bzu?%VJ3AVo`dj)SV3rj@njP_L|AhPoGa@ z>RM?x^p701`{HhZi@To>jG7N74k}_25}`Vo&8+6Jt~0J&}bE1#c$3QW@ak5`y*D`##?EN-Zu` z+FQ8a8|(i1!3oy+(yw+|?Jn%w(Tb&-F2b4+6~_73&?xie-;8r1DUB!&hIXxAS*CJ$ z&y#a&{U>b?nu$xLO8Z|52M1v@Ht}Yv|9u^EuhFS6_Fhp!hmGNDpj&3f-kjr=K;u0+ z#&pk)HS*F6d#?zc|P!s za%ifEaQpu1^xFx|s6TRO?)A5HL)TJW z24)99q6<5~EUw2sL|H4~HEi=$Fx&Q8U)b~maKx1xw7VMWYn7sI7~V#lyD9Oj9q=(X z_@79#gX62m`9eRgxry`T>DTXu<=I&784IFqReb6<)- z6TP`PCzv3UwxpIrJFP_&fKA3L$6;SC@RD%{jNZ}FHtFx32BgvNzMS{HJ6a^Ds{ja} z$Sd8V18HkCSCavDk;5LPOIFygSw!yg*P=s2N9ZlW0jr%so4DZuZI&iVaQ5}KDb{$k zHJ(63`=0RX{44@OYj`6O+LCbb`G+z~y>f@xO3vGAI>31$qf;p$x`ge_)t+baJ*>8!A(3=0@g3A<^d$&(%TD2?l>LJt=+hOnSaiRrbWFEEs zOp2bM7g_SyTv%yLEKcORG%jDDHmBEjz2Nsjj)oGhw~j%|q;8losrl!)$%OCx`p?w4 z0PIHBWi4GV$%!gsylfd)IY3PZ4~zZ=H&^f1o+Pmk;UpuO`?lQ_i>5pEWo?-vO3%UO zdDr7nri!rsLbS$Jg>&Z1iE0o|d!q&Us)E69opGG$g#@6V5{lXf6nEnni-oaOD-j&V z?DX&5JfVJYPLTH(W=ybc>5CDT^%ga15!yTLHB|)-dD4;x?mw5MYYdUf?`7VN_uMYX zGIaWq4WmPC{PE?yamz3G;>WzEe4AthH0alzEky}RSj6-vE-+uLXL1e0y)~644Bw}B zBu^?NMSqsi9RCv)R~AwsZ9x$aeE!o4IIQY$fRm+3X_B*J>M2^#U&SDGiXCe4=Y(=d zeX}I59z0G1rMamI(r*$Eoy(sjoxq(KuxE;wMYM3pcEyiEtV~tHpY7{poa`VrN8(-r zeMWXM5A`k+F>mQi@503I(lsKo_tzU^=6r`}q>q5KdT}tePwb-yQz0OMg>R*n7UD_? zs`dsbGu1ltL+2Fbg^46rxA~@?DSJ3DL&t`@%-BKhjSFo_Nije$`FCU1Bo`|N7lnot z_WwBWrG-mMQ>CJRwLxfuW&Q@^+ov8ZSiX6XCx3u__!}aAIN{?4Z}=FA^)x+ma#G5I zW6=Cly%xU)pyc^)Ovi$F@#HwYZ|X?q`#tDX8#jgRqiQkp5tPB_<;f}VHs>8b26i_*(hYJKO zIg^&Hyd%$(occVgNrZ*VSO~f2ah-mTQjS^$;VjCUF-B zHZ&zSejfD`Ze5}wCZk^%LSL(*YEWt$Hj&4*0QHS@&+bxZJia>?a$DL`x z{d`eW(?%5efGgXaO*-8%cU2=BJ%+mBnTyuYM--h4->CB@CW9Zp*J@QZR9tCPoY*C7 zIMmovo@zKXIThX-@cvW~UztB&{bN8`ZIm*^ zYQ+!t-;)MYqRgF-jg4+om0umFI4telFhtw#mi#%c$wF%TYAs8iSOiE}Oem>Kq+e3^ z^#B=VgVk6}eURv#P_KAfCjmhH zTIzpAq<1dUO&GAi*`2?57x(=lwuK=9syK5wNg~+zyD^~;V{GV^^Yr$7S(at1Em4~Y z)|@0Msz4QK`_-Wm-ff;I^E%1mYm-qcG0nvbS6l`l-l+$A9Zsn2VVMVaeayZET+d|# z^}R<`zO{%cv7b=niy_VAgB6jFi354ht~fT)paF$nW(cbpiMiV~WFms$W)MPYEZ(xn*#5my(*05Gon4&KCMOW4={p@P2mzy8 zK&irAnCO9|qyGGKZ!=Xr-z`jy4kHlF&PU&z-1=?o)JaA^I5`BGboWok_LB=sbhlQf z{uQhP7tbd4c+*|ZIU~|Ibb(*B9#1aY=fAmGWWODd<`Zxxl^Yr6EQ>lGgiGZQAJBCe z;OuS1*V73LHr{CMzJxa6ilr8em1R%M_*BlKWDwN-K|L|6g7yfy8aqpA(=YT_wPhQ= zb(Q{>cgk~d$~iC3$MM9TJsj>Oey4^roWRKlTwS zyhj``S2Ql+?IC(;uM zGi=#^8fR7m5b=P3yy<5+o*~$Nrc@}g>cbO8{q8Lg=>bxyo z@mTHE3)={b63vX$VDy(5uvh0-kg$|oWH?*|v7PlOo{bgZ4bAl)3RFEr`;HZ&K`q*P zaM6m5QzRprxkfa(v0ZPiJl@loobC&-mps|Lo5x~mkUfk|zw&?cdF{2rIJx*O4dmw! z_P&uxFUB{h^o=zFu-O5x{A(7xxfUV$CcXNoJvUAPy`jSM1+WC=;VMPvi%C~lQOM%v zw!Ym$-F1aP*cVgQxp&+U%Q~Mp(shrfCGZ2fpm^W(4eC03s5en9fwaEJGnIJgo8(uV zl19{_4UvWGI|4qiE%nG<+_#yc$+lhLK4m$7<7=3q$tXoH6l6zC2PV_C@N8vE_(xfX z1b+TH)RKItOW-oVE05uceqb62r`a$r_z^0&XcNR0L8cf)#OB?@VttHt#;H#w)<2A& zekMW-T43EAAFwNSl^>vW=f5lm(UvP@s}4s0^O`ck=`=QRRjOoT)jMSX*A=rH8emBW zu;l7dBHWk^9A5AbK3VQMIByC<{h>n_MT$(>Tja}_^W7n+eI(~;e?CPF;;*iv>)Z1_ zPxm}@#mcDzXZ`k9E$o2FkK*bdk!8b{CGeo3SkFKqV36!WOx;G1(;AObD!E1jdYD<+ zBYHLc>R|Ovn*)S9TNNsXOL(gXFTfBaJ!Xo!bMUM^bERuoLVNz0l(JC)8XBp7vj>o< zbOJ{&JO70oC0oiU)|OiR$TcaRjSYmg`1uE#-(&=Yy>+l9Yc79lC#NbS^1OC21oTM83BEg zsP+76-e%Aec?X*%Z+!7ila5%r*Ia1;mh+$Z>0F`(TtvsQ=kv{@>OT>A$mjnA{nSt? zDPu&)_!9Re(iOoT8w3OQlkS_%F_!hOG*~)bZ-GqWjxB+u5S~bOy9`U;BOQ?^otomO z>4m%7I1|r}YObXnp1!Bw_b=hyk;=*<5g98RDKfLA6pv1F41Ay4*l;EJKQP7HBC_b4 zh0O>afM*L)8<v5*_hpzxtd^h~X=aR7Xu4)(;6eeTp;N}xUV*w5A?@oJc?0j=^ z5Gd42Qw4G(nX=QniYWFU=;j4}=b^D9Dz>Q?|7kRYRIKl#2oi zjZ}8uX`4sQ`a-4)h|B`?cwN{4^k|bnODNGn71}oGZ}7cShSn80RdS+tC0Ke{x0G5p z0t^>RaEKdhVPgoGROZVYbPp((zw4EzliDJ2T9n&MUMpkK8vMeoZ0)^MblVa!pZ`tS zN@N$5z&QxrwRqMB^?)Vzpl_=ZqtR6x1s#7r*CZAF6#PIL{h8J`HA<--qjwVxuG#Mk zaDF76FB<;yY=4iPrtH**qT{>kkwW=WIPq)d^({t`Nz67|p}{x>nj_$h1nI%|GE@Qu z5v9!t=*($+z{Pyc-wNz0>upLp8`f|Y@Ezgyk&hGHd<0VQpp;=r3HOcWZJ~MubBSK{#Tq_;s4Lf z{eRBi|4-h(W#wX1GQ@WOl?47{k2x*DHY&xy=)RgJn;XAuNW!=QJlF z00%wMM=bnO`rwrS9QJ)x%upz=Zd1 zPlMR^vrp5uWj!nxPM@bPBc50#lS^fI*`BK~^6@6Z+93F*eO|ug95HiS6^FU#2d1%( z_uqv6!>~VF>4O`W(mY#$bwd097}GVdd>;E@l`;yxSdb{#G(qW>$fws^H;K1D_vQ8% z-d9J5iKT5`XRk2C&?LyJc|L<0B5jaV%`9N^XX*!>!lRu03-E$mZSkpZM;fzB*7oWE z!S8HS3b=9q=Ba%k^z=ym`n;$zw%@gPO!!|~0KS~P;B_BFqjz;@aSM$wWhV3fXbl(F zxBtc3TSc|?#a+8WS{&K}#oe_?k>FCixI>WQ4uN7RPSHYeDWynpcXta`++BjZ6Qul4 z-tk==`_A3D*f%>@dyKuaerwG+pJ}dyu~Oiyy~(&>P7ylxi5B|CkYw*xfR~c;w(yES zVZe7d2o)3FVSDsKQ?qcgQ#Z?%c(gXi!8$GxUfBYqJY~*j>mfqf3=sX7e#+fHgMfUo zrz11gmt>QGb^2W@gfs-=fW$kCteNU^8NLxD|094r-Mhe7|2YbQF4nWRapaq3x#-#= zobBy8ZQiVWp2m$eN*PB2a;`oM%uuQsf zxFZ|who{blo%>Frxpqmn)YfEXvTY|zO3PXD=7B#C$#K32JYUR?S!a!t1WgIhK0`wG zq3I|)Fe-$3kBSd$iuEKeHUC1_<;&Y?5N^D%H;w@}lS%2WC~Xrs@Gv^f&NjQyRwX9U zzv#?|w(U0ZrVNToi!F3F$=ae{Ltk^;SiWEz{t@ptC20qheov%Y-1HQ8yskV$trKb4 z6jC0=zD>LqVY$c?kzd7R{JOc{pzp^(nVn2&+XboNbKZgwxXh8HqE-u2-tTn~nak^V zz91D37`u=zCQr6d^`Z7vago@gjuT9eD`d@0M9ch(PquQJ&XkK~?0Y5DME==?b5oYd zh4v%ukyLMNW1EAOgq2X!xAaa4Y0bh_5>5SIwHKX3#L~L%gzW>Fae_S72dbF(Q6d4MUYVATL`d5J^Kkj%uU-)6Cn8z)# zj>Jc{XU-eEFIlRBM~XdHf1M11lVbG4p$%t` zs|8uwf}96KbsLm&{NadTNgjz~x2G_$&loR-VyYu+pDCk+~1P0;v6-)pq>sa&yb z?$!RP{Rl0x5QE&Ox=eJ7l}ym;#6L^DO!%J)v$w|+Xuk-+HTrj|_o={1FvleYt96zjyzF zB(c5u%j5JR5_{~W??&MHKR}{%S*uN*Z$4;HJbwZ=vL{%35}IPV%pcfpCeWNIN;9kY zDTO%Udt_foGXr&AM)dX+DK!d9^RZcY7ocl1|3AR{08&$9!&S4uUX?#|4>wP{AHJVA zM9_EX1fT>gOW+{Z3Z?hYFZRkeZKj`g^~C&<#7;`xC!lc_{=vY(3B)^6Ou)HR=8&u1 z{WbcV0|L^jYzex6aV6S}bLDtrL3}#b=ACay4dU30jfo<;tPCHMc7MHi-JXp-UWy$O z!mm|CW_LsGB`NGVfqD#K8kO^Py4d`8OGf(4w%-S4mF<*s^QFyr%IlYS-Ow4_1LeVY z|Bh@t-CpNGa3-85scoQ_y6Lunp7b)uT#V|(LgiOn#q2Z`JJ7t3&0PFATcP*8f|xR= zJSEr)vQVGrGPvjjzS)70xtXy9h7!h_WMoyT*eiczr8I`opsf$Br)q5dsr7cHUZxXE zVS!|n&G?K79;R7S4i4chN7nPBevF@9oXM;hb>h0%Omz#>Vhzxgccb82Vbw*(x+1jD zWhb0fV_5LIuB)$Ax}U8vKoV>Ts0?sTgsy8T`?m^7WU6TCdOoH3)g=qSN)6F&bt_8(l zFRHFSVfJw$bk+DMi>WKo<1SWyPhK=1DEawOr^zCb=dUl_(!HRscF43wL< zk4VR*{-#Y)`RK0)xnwC@^WC_jCa`I4t{>^tR|S0^)&3u`6D(B?vc-SQxF#^B#0W}{ zh2KN`YTtNtq&Z}Xs}mn)kt2wi`f<2RSaB72KJmxFIts^)MSVg5!8(>j0_bU~v}^#b zwp`*-_OTPYlFB0SJRh`A7YFjt=?_2=j-lZ~9V@ zLkN$IIh04g>S1$|U(Q-lekx2e#`1AawB__ndo<;}wPk3^ID3pbIKVxWD&U^1Oz_cN zMmpi=sC)ObH;`xH$-q?Z&EH!~Q6a)jySj zs%d83x3BXWFF^YGrdH6YmHjY)Ezy`YXS>)*>IJ`COgIBqTm{_$B=CEH@Sz0VmsdN^ zMWB5$7fY7o<&JmjXB5r%J?x*q+q(16cXGEkx4g^}<_CN-t{WuVk3Rl5LGF-YW2T;{ zxI>w$mc6BDJ14c5+OFQcL0#DX>!kIzw*31gCmO~j@lmT}bbW_!;AG{r0u{1t>Echf zpIU`6 zf%rm1u654p3o`v;G@#%WiH3Gwf>TmuB$cN&?p*e#HuekGrq4PavpN#g^d%rH_9-}i&quK7SfQ$7 z`MX5H<9hp|T#-O{5MyDvX1{Y4lXM(nTj6gEpI93Fys(ZesOqZY&Q8LC4?Eckn+{%A zWw-lYWE)*@?s`(l^8{b5_6y1T<0BC;mGIAS67AHFUnn+-dq(a{)hROH#v4~3aVU%O zNt?HHp9mi=Jj{G|h?WVP_Z^l;InbI{xb^LB?yDFP z9{G)3Wxmd=Q6bMihewg1F6A>%8cb8WYmxLHr-NfOe?>eHPdcVBLN5r_OWL-2buVEb z0@$z|fym+2$pt$%l%MUT2ASV~m*Kex^i1|qksNqL~d>atOWzfYgWmORcJNld4? zo#Aa4SrL>*?tecg_9H0q-C(Ua936og*v=VT{GSIO`>k1Ag#Y;;orV|W_*ghbS`d_* zt!8I|UR#K6CdoaKmw>K*oD?$oixZcU_-@1xV0nTk6=V>eIbH+n;j z;xTDc^}Z__;|gyk9QZq~JxgwtQOStwYtK37LAO7x*t-nwHl2a8_KAnqe2iSl?H6ot zwrum4swrsVcPn@lI_pZBl(D+Q`%eVfBvPe;p7V8Vya)Z zC5e2F4LORJf8Q;CbGL#6@AqS{%P#TP2inDp5P=HQqicqvosP{5oSRT@0dquKFT5{+ zV#@a0P*HnF?7AZ1xop$Z`i@Q){S1lH1%At=w#KX{9(CUd`Kua+@p!7BOPCaLrSM7m z6#A(>agJN;fkD&&#)tAOs&8N9C%1rHsT3|cf4R+jiTwDN+bu;F1+WG05F~?7Ob{{K@f!7X+b|_dk($+t;UUri$V7KsSVlyD+?zf- zH11zyV{_vY2WUC>m7`ndC)efAGT~g1)4axpPP*++z+P&PQy2l<%*apt;{C6SeHrMW zT9gj8RT3%pdP9nGDesJ%;4^S*O|lmv*ZI4!x7t{$O^TB6Ox?o>7p6c&8w3z0-8o^vdT`wDOhn)AV7)NOtXuF;voVKpBfR&9~bSZa3LMOm+_Wp0! z;kY_+TS%yBEq|?Tys3}-*+Nv(>ExfF7TYe|miXFVhdmeAXCC3DUec*U%M5B6RV9^uaZ$g^g03h;szZ`Kf%X7&1NE zQ;K}bjYGRAPoKoxs2ZEKt)Ptwr*(hdsKlUxo|r0n?+HiEr3)pz4;LhEBT z^$*Ig-Op@5rZTe8j?8kj$R*tg5Lh2S3Ef!f*WUoXApKf98gv226@;1glC#ZgctexW z4DkVkr6&&e;H*|4wTw-#E~OP_YE$o;6u~NhS>7uJEwp_g)3eJ54>v zvspVG{~q_H34o^=kdSrxlT{{-MAX6vKgnZqs}69#O)RzsltpHjzKe(>w}+>68&Ef za+1E&4+^i=>Ad;fO*P{sLRzh&EHz3|iw^+ZL`O!u&K=_o#8mO=_jyG1TCATn;~+-= zudOu->$p98!F-ja1rBJf$AzRMRSpzj^ZnOi>hx+$wvo)>bo(!uWc@@)J97a;hrj8j zEn89LMVHqlDBTy&hO zdhe?^zodw`DTgjRCzxm!kosow_p5!gQ>j8^{Rik@{;}bp9|v|HWXhNHUWDkGrCU8M z-cJC_n0w7hBSF=a&k@-U=C$$s?`1kfLgNY?+#S}I(Dmh+nOS%n&)mRTu{QgEH}0Zz zZWtItB$9`@(2YAmzzK96WIC02z=z%{g-iVfs`rN|YG1A-I6DYD~G;4!*~Mf9cw2$?}h@ zl>Ma4IYEGVh{xo1zMN9dUnioiMLm!l}cTI)2bM$w46JObXO` zMLrdgc*R>72TQNWqYvcz?>C)xg?&diB%{6Fj#_L|piH%Tj4I|ofM??7D_R;^sGZ_b z0qLlh`;Uu`t+xUlGZ@F$Z}42~O^N27C5dJReTilic`V%xr5+c)mmV62~xtu@_=}Q6PQF)F2}0@Dxo>yi}p|{eJ*MG73rZ zhoo)s?QG%=1%G(PGzWJfJkGgAhSJHGP9uzn@w(jso32T?c(o?zs|L! zN{>Yg^DCV7A)|%^zMZ)_rU-8>!HkOhRQ?j|sUeATai7BctR6>E{sVQ?fRWSf2^_>KOrpCq@uJ!{B4zUp+z2!$%w7hP(vc&KzfgZ)<8W-jG^S=UaYjxCew=&dwj#N`H(n}`*^O5~L zU%yn&R2Rs8Y~?geOM62-2L?rvws?rvt-7w8FdFq!jM)maED-Mp);slni1=$L^wUPO zX{G{#x3knblNy+zCzcJlqFG)rN>aJNE8TaB^ZE{nM;UWSV6D4Y>DO9CkSL`xKe0aj zN_R7$cH>yA=lb%K(<0SmPj{c8$`dR6A)=A2F`UfH8Qn6GVXA_*h)fOK1t^{pD42+QQ&fCLSwBZ%KK4^Dd- zcrzq zIp=Yl$k`blUp4f}90)T>F<>CyBBe^#&|JOUjgq~<2AVL&c`+f!62_w%Bi?tPAn^*C z57-YbT&yyrA2jD856Aq~FRusUL3S7Rde;MtF)vm_$R^J1cIp*%w7*^^f92hMiNWd# z%wM#oQ>H2|vIiG72wbd1P50G)D<-Z4`gtM^t`O#ir%!7tMeRmj>COdy&Z&lIr`zql zRJ@Ul*<9em=}LuykEQQfReNCWWeXR@OK*Lh!c9z6{oNM4z12NEX!}GnGi?jxoyo%G z31oy1I06+AuBFE_ zxV;GRd>K#p{90iG6d+fnb}`t!(ss^uYcE%Cu*V8BzOJ&JeikY^s0pjBk0$V>5!#=x z|85CrDgx%047j*rQ;mD{b)rtS^S>)7`16w_TTuOH)b0MGzGA6@0Oh^LV)wN=yX?D| zw1gnE%POWz?^A&-e?03@^@IkMg00V%ZwX&+?Q7cH3M(f-zSBe>=rGIX(l@a;pS3T` z`Z}rQ4P5j!TWGFE*1|F7+Vn>x#1Yrqfm9>&iKaLluU)vDp=%rG)cN{A<}!hfeBKZ= zI15zHW2D{UW_Bx!t;-7||5@hWpJ$bAHq-fm8I`&nqKGuHd&v~vkB{H)-wj=lAX#O* zzrf5ng!FZOyNkCIlH+CS>}g(%UmyfVo4*ZJGv8$vvd#Cn#VVAyRus>!7G@Nvm1oNq)MXXr9uGosqaYMg5p;A8t zrF)O+D*fEr9X8@S@hdGhxT&fQw24Au(!y*Kx<<)Yc^Ro!J#YTU@;lo2Li0rsvwK3; z?DI25W19L!IkKEwmir_tG$v5m6v|g`OHA}l_~^1kZRl3+C{O${k=})Co7M0|VJvB*!R^z%ZJml+`E~t1}2^SzKttG!A<&rfUo>1VjD24O&XwLR8K44YqF=I@LsK%V9`Fy}Q zDw1qMJg6|5`yuFdnCgh2p_bn~#x_*dhC*J6VWvZV`fUm=jSPFxRQO3T83S4_F$7Ou zmq|Bnx(3Y!MgcGfh&$+bafLbOQ@4~<|6H_(oJ@^TQw1L=XWA}z$Pe~UybqC>qD85N z$-9JBS7FbvBm$)=821s)fcdQp`7XE&`u%`YI3`qxy;Piy#YWbqD6*5wU`15cigA{O zN{dODCiV+cc67VXrEmV>9ePZ;AMgEM+Xlh2$aMS1oP28MZiX}#>f0GwmQ2hG-pQ|} z`c|uO| z03S8tsWqSU4hSmzm|L=#sI4>0Sj|OkvnR7hI?-dJlJCgGZmVVjBQw4sLc5ncf4^B{ zoF6YG0Hp};UsnC4IM}W4NMyq&<<)9|5q#8*{(8O$p8Ks90aU=CrCLJD5|T?BMh{j^ z-i*W#3Py+xl?21IN#rS2UI5@&#kO*##QnW`{Fj>0Y*$#jNas!-_kgStjbV9~rF)z7 zguoj$cOLtv%b2Gt(dip4>E~D9Y9OG4H?`bA!0D+L9bGuE__9Iv4a&sYfUr4b(o9o@ z9a?foxpDBZA_cb~fPXqVLrfrr&8w0WU zllY|p%6q_yDsRCDB|ZDFyUZV_C0ybEK|cDmA&c{QR{EjVVqAFu31WJpUxcZlwZ%By zLiejnQKQ1H$>d@5gKSR#lQWIpcjL|hQgpVx&OcLU8OQ43wmY>u+Z~hwf%az|Q#Z|= z3iWXu2cVDBylP^T5d9qJUF4N-iS&bqDo2L*#q<|E3}iD&Y{>tnDgpKXr+esP*s8Nd z1%e@@Cr{C$(^e48gbdW}=^2jP54ekHL1A~pil#+8+Ns4c(a-Rc9 zes58!iqLRKrU_hk)CJs&p^8{^WRi6MQ#0y%dqRy$aq`FSUH5a&U6mplKtI#(L-MfQ zgJc^9nnc$=@d3QR!;%>zfL3xuQDEbMV=?xGvVEZqFD=HlBwkiLQ{L8OzJ_DM&fY`v{C7 zO!ppr0%zvvvMIZ}t|k^2kX-hhk`ih|gJe#|6yUM8C6z-*?I~XBxT*nab?W{nLH=9o zzbMTB>f6L2CXNtyd=B>)fp50BLMY>SmXU5gu1@>U*Cxqkt+q@hXe*&m30KPjqiR&3 zJ{sj_Mpzv+UuPamgFz6Fc{jLcPfb@4lmAXv^LV|#_H;<2+Hm{((nKM@GBDa!Jxd8be(xy$~(ceq>F8gu|RyFolAOV`xmm` zBTep;sEgfc+^eR>A1}`%Noab6HCWZ*_aERQ{DG^XirXz<`Y`fxX1(KRU5SP+`He5G zh(+_I+is#wyti1>9TXuW@$p&mmyA*>Me(9KS~bQVRp9Rcbw7E8Y83*_C{2Cg<5EQ> zJ!1sNRc*`_!IoL0mf=rh&K`Xr-M4vy=x2(pY(fJS`|?A*))v>5*(|(D z%~5_0uiS;{#~yIEZa&wXM>gQp;C8_A>)aGG*N*aCEkQDB4A%L*lE7vX_tFlPTff!9 zq(1M~kZkt8>8ldiJ7<|~hB+&SjIHtp`J2ZSq*rK95S#T+(Esidjl)3j?fI5B5b)|r z-UfN!RX%PtmY9U1XG!hViM@3vl&Z%K4Du8vtxy^Jg#|mY?P`F;M{DW{@2o(wT;V8t z%3JcQ@6^66(3zyg@RWB8`V2ANYc&UR!9P%CX*qcm`r*`2p091;++K!?`3RYx{d7^@6RswVCa{Ua!SGs3Hv$af zD42ToFFtg5y9nxijoQd3NvUt;SaeA$;vZ*;jT)C75J;zL_sb3|mG(Mx%>1B}yLz5M znzDz5A)O|K;Hol&xqFDrB2dCH_v74DO3ccQrAz=NW0P4KFXXw*tD&f)n_#v zPl#-<33mRS}ZukWR_E;*TZRbQK0LXPNrl0|}%BO3Nek*a_fG8!rq z9=bV3*vDJDXpFhzCdB`I5=fYFSpH$ZHbJb#py@K4W*xOYcydgm6@Vh@{*ZfKYqKACd~1y3fYPh7}CjXyaKzA z%6CZgt8o0fNP!getA-gLgoiZ%`?&%I_Lbu0r4}|)nC7zP!Hb%#ut4&KW`}^akG!j& z$S9R#k(DR}lY6!2UrEmxgr%g8^7Z#Ida_s02F!4`pvy-G4jEF1_CEc!*OSz9cecIi z%QHQaM2#!rLsJ5#D2;7y#1l^+Cg)u;x5@>~7Gzu;e17%Vi+!$e?J)imR*Bcn<+)V@ ztWH$KU42kU$ToUpgR7)y6i*gBgvz#umygd$i-5_{aq#)eg*(o0 zhKkrSh{N_@(haeu14UZrAoO1WTmzgkvFET>KI|nUG0y_nuP|B=V<@o;`tie^9`;5$E z@zWuAuqoM-JVHgA9_xgw(zYS;eU_r-YF;5f68e}Mu)$S>L(7?0G&-wOWAY<7hGRdZ z!$b3w-DOy9a4+R*kF#P{}KT=Lmq=67`EbQ zYpUh@wYWjJk6^vR{08pbF^uiTr1D}F zeaCOm%h4XnyA#Lake6#cTGy39&Jm0%$b+bM{V&DY!X|F?yEBax;0`scjRy1C6zN-I zwD8Zo@{%O4|Z$Kni?zi z4neP(k%{1xoL`)Ix{~aV1pfg{WXR+`9u__9x#eGA_-$7XS`&RHr5)LfdDOO;0}@c0Qcv)7e`#ddV*l&| zU)>M|%_nYYxOnMkfCr^@iaJ6bu!Y~D!Fok?HEqG7FZV%w;sd7j)gb^<+HsMrdXyyF z%_sNsk5%pAoW+64xs@uuMe=k_H3qccKHA|!lTUSn1X_HUVwAJ*%m#cr1mEkyiyTrb zMYBFRb1!H==_#}BBn=Bp4pwcfq$Dl_g4Cu zd)Ugf`}-QyzLg)K@=mETOS4Srjo_4$C@V}#lI>h`Y}Iy=jeaONAtm{S_EK%H)A)j9 zphA9j7(I=Liba<;Oy85UluA#e{@?r$ZPbDui`vSTlXK$#?b%nHqTg87P z&z#2lpC-QlE#{gH*_{Glex=tu<9t?a74uGXu9U5CzQ4JsWxyx28>{qlk^b;jKcMTfN$b(M6O>f7w>v-a`nV44DOJ$>(`bCj z=993rxnWhm8t~irALqdUHD029e(lTT%mSmyGF~4wytuM}wX@KOGOh3DK*8!g9|awpTM@$UvW1N{A5N*4FS}DxT3Cc-*4C&65UTz&@^v@hh(mS^f1) zv@SbfSzMgx zQ!(zJJS8j8&@KK4cq@L~itu=nSUT=q(U=`2o!y;~IXz$l7MIn@d7VJ3?#!lKPsQk% z1}+lbMncy}FYDbEX+QzGCucd7#4O^6AJ+solxxH1=Xr_V6zj;Hun$w}rva~(_qB?0 zO^5)1O^B{zF-xLP7TaGtq;0pS;#~s;E5>wzik3AF1M{(liaokF>xwaH{D)EHsUeMz zE~bKHFrNVl$HhLHNxpzKFc^`wsf@he14h^56z2L^%s2h90HMpZKe#Z~ zO|OhLk-k>r+h1-U-!m+V|CbXnG+~;zUgmqUd!+~*wNf+FJq=~ig4w-H0lOFHv^1tExd!9BWH*)yp%aO%-y`D=VZ#R1gOT(uVjFDvx@ z`gQP5#*1x#Z_{(H>9mt{%}kN&l#Y*2a6TQE_Ax1Lx+7caLbov{+RD2v9Uvs!8<$fV zNuL8?1$d!07eqDnI+ClG>_GHS{@GZ+J4%}#TU7uoqdYDY+6Pe0)Ej7tawz6t=1PA8 z#ETy*5FPEN7^-`HmB*&Hh^?>JlMnvCh6FSjw|2i$X#@T#j;VacEbR{t8DxB#r1RqT zfZBtV+A2hX-UZp^Wa4H3s=%aIjAScaKqtLdVR?t-?#42E(xh}hqih6P+`Scg&JBA~ z(1`cldbV3jPTc0aA;jEN1-kL?P~fkBx_ow?&|JMONe=;b1MoZ8!^URqPGafhmo^Eb zk4>QV$k z?+<v$1GI(U~H*EqnwgVU`*{AIHFnMZC_CP+cfoELBTQEM#tYd>w(s6 zI&)bZInSuRGoJs>lO@CGrJHTnJ2?7iFh71Hl>uQO4YFje$r%UR_1x+pc&5HKa%hcG zn_vG%Jy#k{oPZoFDyUaU;nNkw{(`tK4FxpeoW$KK2AWt0Zv%Vlxvjzn?m86YX+zc`^Wl!2%EG{jED=jekj)BtDp6}{wWl8b4d5^Up^^|s35-ju7UHV ztAgIPJ{fv&Q-a2SfZmx&8b|T1*k48IMGW()-w*6ZH^*LkaWMbF7`unAH^i0rkzRCM zM;O14mebo~VE{hr{f>+I7^_+19EctVef`pv;@Vg8Q=k2yCP=~)NR-iRH$gYoW!uJ8 zaVH9Y3#4ZwVWjR8=te|rHg@ImCUStioq$|~xNs`4nI-{KA1kwhJCFrH9?W#b%=>p> z5touWZ~AuvH&*sL(?u1B9gr+1OVN0nn!~TWuMDA+$D>%>ZN%}9YFOBk8_kN1dn2f6oW`RNd!^l@8Tg^3{)()BZ;4f2>lX-=v{*G zXQSgrO<#}a3gE8sGe@tbUP9ftxIeq9%wjuk#2!n|eW9mJ+2`|4NzfrR-Be|g>XUeX zfO>l3`&DVAk+Q#9MIhz4^c}IvYjKW4Jeoei$4o*6-(rE*Gur;5Vll!@e~t-1g^N~a ziN|e6lO{pjMSa;sg67l7DUVvdme8$lIOlH^YgQJ=gq{?`+BR*eUIWMc`CXsh_`qCo z7LVW8F0Bo_=e`WZUKfjFi36V<7Xz&bsO@C8dTRW!S*x5VtgaZ%#acG0eQ&D@zh=KZ zbeFF-W(z8wNE~i*2}~jR)et-TX9C%wE@`8K5MCh9Dsn@Ts(OQRu~qqw63@yR&aAI z+RS{uI@$(En74aZ-2=uk$5n3!$0qe!8?#%nzv>svBhnM@5ooG=3-cj>A&U%O#hxaM z__T$X8)9kUY9W!`uX8&PvD-!RD&MbS@}f{Fk?N~6b^KpAaMfqHjNgt|fj&g2%}rYT z(4DCSuZ4qJz;^4OicyO_6{Af;6gNDht;DYSz{L`4Pg!2YHb|WJ*cAR{^Y~Xsx>;Q@ z89Makc6!N&MD@phOB3|S^}O}wQO_gOvROVk-|yenIl$4BL(ce{yoyKA%#arniM#Sl za4|mEo7$5yi_k6HD|(R~|rgdONg-v|ZV=9(BuONMRrw(+y0S zE@3~mSpCMdUMRGrSIC^&kflP7`>v7M4W}n~0!xZr~e<&lmZ>ifxVg$>R2>(*iN@JI=TPfdJ4C}&^-79D++Xqd(2NUF zHIPMn>5>cfEZbN$9cHN8R>Cstf#~xyWgM|P=f@-`#pY0V&9~S_e>cf1>AvJkx>wJs zM`nc85I2qYLX+##wryIVtdpNzzMe;525cs!8l6C6| z#mL2~WriUYXu&(UTRM_&E!EvEF?X6uZV)1X@4nv9AHgLKF!-C0Tf9~Gx1KgohSVJQjR@hPSq`M@d;O^cA=O$Y32oei{Ts2zz4pF=jXIm) z3Jw*gTKjukk%4<0NP>Y1USM$gC>~SI>C3pGyYkBfOL-tMAMGmBa%T+upCEH_3~N4Gx*}afkrrhp|Mf zu_h`UxU;#sf^QD8KQqcqJ|!JziWJAHSHy$`(VD0M@XtfHcs zms6{kZK~*sLr1@Yk959PIbPtU*G`5c>W)%l$WE89_^5m~M^^(degTg;86FN7!KO+` z$7P^%g}Wnaa>XGR9`#9+UL`nhT6QYcAtB65L43o|TMJHN5N_zobi=2_^576?L{@ge z=SmF}=)b@U`D~8Y6O>*hd8$hf&84VLXS)$Vn8&PkP!H*ZnX&_W7!4cgeF^F*OI6NZ z=qD8lYkA(7dtw_Qx}X6~vn`XwK@UARofNy9g64Yhr_BUtQC3Ughrf!)aSjCRvV=Y3 zfI@zEDKgi6srT_AB)N}w`5+fMpL2~twp+^Eq7syvM4#hBY0frBQ3g~j>UJyrvS-P; z;LwvWVWId z*4qO+U2GDTz1u>}3m)GIWiZIx^O?2!JL9Ps%ApjCSfg;k18G7c9&SHjyhMW@3g!dE zmJ+N~Blu3K8^(5qLM1H`lD_$BB?f=i;58+D4`5sH`t$ze3}}Z32G{(U8H0A%Ga(>l z5HfR`-R9BvJFg?a-p}r0>B74o&tf3S@<*ahlP8P7qhn#ENAvfWl#Bh-hFqq!{%S8#)NrpN=+~HgY7IJ(!PoQ2(~Wg6rs^~RmLlFrL>AeAQBz^f0=d#b6ZI<1nMZx40af={^{bay$kwP2H3?ID>JBY(MCBYA0zdFRves z^I#9ICPc3_UEI8(THx9fK82=ecf!0x zilsT0(Iw(jjJt6ok|@e2siV`N{-{PqObqm=IezbOCWH5<$fz%P932kl!*yo0z4-i@Ssi1a^8YjtCN4g5^wCu|v`KaGlTabCG>glO zc#eg}{foGzD9AakPZFcby1lu$)K=b##x#l_?#UdVcl2dM^9H^94a=8Vn^0nG9ml18^TV%USE6{69bdpK3ZLs|GsZa%b~0m#ZC7`mvQp+kpW62sX7xvC z2pXE})!(eBdoU{*V4Xi!*uc<^Ti*r&v+Ka!OIO+Qkx}*x?2rAV+q%&yb})1qbXR0OXLI8 z6Rh0lS`Iy7T6}Ni!CDWN_N4ITgcrF@o4lWm62|m(xNLCX@c^IFd(34e{I`(VY#)y? zYoGA*lMF{i1*}nSk@;%S7{hC~EIP!Lb&=TQ(n`l@IIXB#-s^U_0V225k*~F*NAXv_ zB2p80JY1)}XdNh2Di)OMubd_}4OY6jt&~)&OWd{{8In2zuuwu4YRJLCzlXR#SY`OW zO&^ke%6qnhE*oY8><9qvurY7&1#?1yMWm9bI9b&T{%EsbMIC6Kn&n7KTBoZ{_h% z?)ERrAlAuE?ynlc@?G1mxC4!D{4usdWW>hQG(G7k|NNUm+*fW7Dm2W%Mtv-!#EHRL zJMk$$_a(>?fh9~QLL`JZ=0$FO9;R^H5-hHnz>zgR4DC|`X>?f>;DD;Dn}t)!L$jzH zc;0l5TyAl)WzHm&eLvep&K6cXQD4KV0K6q`aug%^QD3-lhIy=>HNkPU4^6KWp4FI! zRdQACSw&BOw{`9}kICGer-_z$kFecl{>fF?Qn0d?_aA^P28-mfGDJqZQ{JEbeS8U= z!Q0KhG}Cu3O3OYQ&+qGhfDkVe!vVp9i49RM&j=~68-XL?EUs<}>emUTueOW(1L!)@a^n-s%DSimH?zsl!<=0N)G?L* zHGRRlCSO7%6UdS7b@3o+qmZZ1m$Cmk#*&uCC{FE6l&kM)uOD^B|NL%C!))*Z3+EA6 z6(UUk1L$=`&o5(S*kfWx<|nGFWi{Nn_DUj{38LE#9jWf48(42Blr$9Md&QQj6)wM` z-Ij*2=^!*#k#%|;(Th{;b;*|e^rvf*B1>!h;C2IOH9;a=9 ze4Ie{&tY*-9g?{EnLhAM?yigZX+>_X#Ou#Lk~ zJDN#6z6$}1 zx1?BbcS>6vin|u~;_ehF4Z)#6fEKqvakt`7q*!ow4IZR?lQVO3&Y793nY&~^PpibP*40Al%8WJ2`WcNex5}tNY{h+}NmAU5La$+9QwDE09q+7eP(Y1M zszUUh`i=-mLh;z71jFGm?b;M&09Bo#tDf@eUkW5t+un z<_sIxz`G%p8>@e_9;#dRSX*P})Okf7rh0xd0)#9y8;L5L3GVYqNPG~Mj|I^Ps*yhV z?KvF=YBRS0S4UjLU2rkeyD8A%ETywK7L+3D=c@}1*W}aE6}C~V;K#;IiTLR5R)Q&& zo>03^IJW$RjNAmZL7IPeAC(AIrl>;%%>3OtuO3?yC~#!yU@+A{JdnMh1(Jjs@BQDB z5&oxZXkN^}&WBqf~mO9W#Dcw{ARAH{Pw!FAW>hIyd=2B4#Gkgz%3A8Ofzpbwss zAHp~6!FgHL53~c&8&O~@lv9w<64G*LuD1=4AA1S4Ax)0I!J9lA78ln^k}$|bc5H3d z?dGgN=k$@vG5h?e|2L=)V>%)O<4se+Y4h0V?HD%GbK7}gd&+EXQDlg8WjIpR{p;s) zoY7xPJkl`O1R;g$Vd!M zlb5mPI9Bh(zm$kWI4Z!vI3vFGlMRU7QWssUhnnK2D@@%ELq2I(VVaI2IYw?+(rZGz zlJcZ_IgQYhZ>W>XGDIAqbK8Fr8~&zgW;gZGM3upnhYrXS$RQQ=EPT8EyL-v`cRtxh zB+VWzWyNt~ojE<|u@FHNsNTC5j*H7u-BDmNWTEmnc z0BJ@!Cd-k=nejAQ`pehdVkI`^kz9;tN(l*ohxI0y*0BgS8jM8qaHNCM6&t` za^?@yNyB>2DzO1KLFI~nm9Y56Q>bqD%GSFAedPmw`NP#fph)xPCl8FOBt?N{ghZms zWjEQA;Md&Jy77kovn6bU!*PeA!K%r(Cb=dbSVKhq13W796W$Xp*B(!VrvEH{(wuQC zVscdGvYkNV^v(BJfyW%)Ev-lKY87%tX#9a)v4m1An)siqUVLz7EG1cRn;gwl@)|A$Emim_JU`O8O-uF9SAc@O^0hM3D7#dd}3(f0t{)I6r zVlc^f1pzc19HwYrb1GyF%)zZdd3;t$wZksYdoKP}{6owAkJwdD+pSTeAE6j&<^Y@mliFwRbN9J@V4!8mY3vSbAJ1Rm*vZzuH$6)4B#ZW1wc5C@MgBTiL4msh$J(njz3GJ>0c4rpkrI z(MWBY;<4s$*u&b*fPaDPOQq?-s-|0D*x1h@#=UmBPGxK~nNReAgt{P>qvU`OqG|ik zyt&l48L327#L6wzpm*@tEOE6Ir$pz^DgM~D}vka*t`1I zEM+wsQyp5x$h;ArhIS;crCY*F`zr={&xy33ZNlK$gg}m;Ev5SMsCKQl|GT8YMAdm{ zqFeos^zRpAuJnhEaF(?SQ%6;SFRPDT2Z|Ph4UR3sDjy|D*;xZ{ATrqgVf`sm$Clph zgR9S}4lNTwNn$lv7k<6c&V84ot}h>*Rt5Zix428gWkpE7{%yoYC z`giHen)*CBS5VB)D85k>6)AhVX>UxyaexZBb-XyzEx#Mraepo8Zo)8pY@z$4_%B~r zJ=8+x_w(9r=Gj;HSW@D<9xrpO>R{QqYspy1!*2%$V!FWGZqo+?HCvisuB&|&_f`73 zO6uF1;np3i2A3y(j{xV}#N<>r1rpY8LAYBjmuDTr+pAHpul@rZJ?ym`1&iYSy*s!Y z6B>`$jiHh0_pNYYVcf@X4s7FIaD1hV4;4^eYi|73iP7&%APg2TajNK5Q@z7I3u!l? z*(Q*FuhH&sw&}l$Fmd1Prmfwe47V7}Y)J^fkS;f!15uq8&kCtVaN*ycQ9t$DFa^#x zUEs~}^f`;x2iVx#1OWbdm|+)IIXGf050AT-au(7qk00EtZOaXvI-HloJrXWc$U~HqCdc%y8S(T>?JNRDaiZ+>KPq)NcP;&{TUr z{OJyQJv7}_U`m?goJh)@B5|Pb0KtK9P$yw=3tgGon=FXx*jVBS9XX@v+brtfvFxPV zP12ljO!K^y^rHB#=C>L$b0>i~z01dAaXVc~r&dQ^W7~)3(FITZf4yV4 zEFXWB2corF(!di7agz+AQ<>M9!@ zo#xbC2PnBL2HTE6SBQ8Kh7ZOMUE0iJ)n0yIA*8)hY+bN$m|S3DqKGRO%~>e+Ft=Ke z5s&ijj!&z85{c(}K)!(O{ zeZ5rL4nmR(k@f0u8;4UKy*&(8mOiv=n2W*Ke*m=eMo<{jz~{0Ry2(`uJO#<9$S~gd zuKf4OhO?1TQ}fXKsS#L)YtA>KgcesT*>sga?Y~BJhA`kM?XGU?gviW@Jq`;64+jkf zp{MkKG~vC`$Gs2ntT#gdeZqQ7YM#mw`X-R`BN?{qKoQ$&d1;?7@xeL3SEEh&(2TE~ zn*I!$)pyMJ+E8!$O@N8yyRz#lx-d-VHK1))Z@fULK~`-u;@G^YO&XaqS2R6P<1_c_4&K`I0Rr;*8Op>-QRV)84PqH zRRrLNayVz}c&;3S$$ejvH)v@Z{_jio|LeO@m&EjoZWX+tVr!>o)I)^nJL_Yj$`{4; zCQFVf#><@Lg6g*YueW5tC&Ug>r75^(iD@@lqoy)6z33AM^~X*LXZ;Wy;2|xgpRT5W zD!o-l-{5*fY*a9H-JlQF?73#xP-Fgt+?`w0O%0^u^TqxkqgcFQBZJmvqwnM*>@xY8 znK6v^%JEE~pJa;xCvff^|GLhf%ETZY#ctGHzHPbSjY}~UD*2{ZAC?x9zn{rioOoS> z+c8&-GSjlQWGmYyH)kd{ztnxc144sR4^^n#r7%#H2*Im~JU(nXTQ+gVn}{JP(itX| zhs=$zF9mgo9l?9&t}y5r#L$}w7CeI0%1O_t8`*L?-!+BQ5k{HDqpsm!JYQi@Z%0fX zf8ZXsE{TWh{K&w%*OEb164X*=FxksB>=b~XL(>D77X84RwNq%u9wB+_gfGL!z>J`V zqt+ba4At=Vmq1H6XuBrv0;w!B;QEzk6ry}{KHyg)o@SW@mc}U#?!53i)ei-=KPp@r zKA)8JEJM%Djwa+G7aOX18yyO%S+YN0zG^askvc?uG zehP4Y^OuP|iQeM|wkdh$NVRgS#EhS3;~psx2uT}`U3#9yDCQU_>AhNg2~c=22);q}c=kCYg6J}(q) zD^~o*#|v-pk)Hc^$vSWJ86E7Mt%*_`r)e_u;c-5rbTh$D=*{(Vcj`Rr_H|WICAX@j zpvel_UoX-@nU+J-ll@w=8yvrTWejP>V7O{Qu=EAnS8kTpnQQ0vF+0iNVJo(7(?A1m zd?`V6>)y%Gp{GX!xGYX6hlQy>Z92 zfk^T(^q;e?(^%Q!$ggnZzT>{^bP9NJt$aFWDgSlow9JdY9V}aMuxqtJpxI>~G;Wf5 zz<+zGNhF%Zm(PE%bEZF(WUh-7xvup*{?&GwLkBqRiZ3{meXA~e>xk%Iqi>Epnotdq zvqsw`%UoI=K1}}5ARYp)P+qtf-JI;p)fjr%a$E`>@WleBy0-xKy5eTStWCtZDH@4< zwcHH|e|;#HyJdR5El%pV{}7}Lu;Q;jp$t32$w~=s z07J5#NK_svY6`$M!?+Ae2c97zpcLefO0P}2TUA+=`MNzgMd1{+MwQ7(`Q08coqa8BUZ;n zRjK#kZ_my1AH~;JO&#yHbiEU(U5RGa$!F@OMtLr4kLG<}8o#;%Vu~N&fGos`DDK=&6V7YTU zv`;3c#*}E^+}k06f$+am#vu?)Fj+4)d%AqBinOY^TnZP6dYPVdDZ?-#4i9~}ua)7S zJfCC*J(==>Q)7Q!Ar2~2-@~+myT14%hoOG71=HGqf9&8o;R0&x`FF2H(WKI&i&Y04 zzIwb;_*pb6a^cjpq;#V_krbKkW)EV_A;SV(o(25_`76t}XL&Z)jvxj837IL|_&8Fz ziIh^abq1=RG-Zkq`A-maiN1u|qfF=@HLx8$+R~e~8Y~HC+Y)17ye?gn4TJIB>^k8b zDn+KL@)bIYInK|ZZy?5eyajADH)?%`+#SfHZBjk|4sGUugwzAYVWb@}eXUqG`F_ro zo*(Wn;MMJKRBpJDOB>w`+;Yw5vnkRYa8WGYw)RZ``(Z z0&f(px4MEr3^oOHASZG9UGhqPk?wbDO6!=Bzp<}mZbz|nB2fQd(^p5g(POgu#BDcq zbA3XABGMybN1Dh;4UGAgU40!13b7%5p4Enxa8SmDeZREi@5R8bDYv6>GBMTx)8|uEp7L^49+=mj#+zP&B(sI4fPGkC>B-%z z&v8p$VuW7=E}5$ zCyv2)4lQDhw(R`V=d}Y^$K+KIxEXO#i99^^R^pInxMsZgdTF}g^N0! z(;^T?{#h7Sfyoc0q}Sm9fTg8(`ELxQ&hP2%__e(wO1gLvlnzvDr?9P8rijq=IyHiK z(buCcv{jsk2OW@ufgMp+R7Lvx=x#KZG zdg4D{#`ww7mvTB+# zUE%32D{&=Dj4a{yJ-Igmqx(yTwp0~T*^Pir)bnyn{)|F@u}pczFDk#cbi=ex!a=3` zW+UUC7AG6smS5SvPfagLelsvecs4}Al?Q3R;)9l0th`Wv= zuLtm`gY#OBAq{}!q|(O@KVb=RvKvfBB83(lW}BBQI_cl}Z~(NpwsAuY0XM8|vV^8p zRJG7k@$2eOeq_4*$9au~MO`Dh=i+SOYl=zXpWmd8u+)R>h_<_iX&t`|Lo+`i(cHuP5uj(OP4ONA{X!Q7|u0Z$*;qpxC<aeQ~!-4nxI*7$+Vogig_F?~4L3Go!l zfwZnR{$gb2`lq%sutvC;`=mEN%Y8gCJz(TYF;dM>+SyiMd8DGE-NsaLJ7)5KWBPO;s zpM3CLl~H3!sUNjDnLgkl(!a(8y$k5|=SYS&y?IuJ%x^f0Mp}0Ay2c{$6?WiOhjlNY zq!w*c@B!ZNPFd?Hplk@F&abm#+wTnINgVyf{49L+IkAggx!}m_W311Y-7F=GHZLgc zgTDM|ezAMobF|}@cu{kEy<)Y@^U-x5;|Y+W$$kH@2(OA z*1_Bphb{ZWR*s2GLH%`NY@1J1r3un^p6L6+9m$?Zh|*qL4vP9?Pw7ya46meK5Ig}H zr;`_se$_fMjv^4J@U19Emmef{nh2<-q3zf9FJ|E2klU&gQPb%u3Tt!JP*J4Ok^5}b zCH)X8JmJ5kr_NEILhOIyFIFA*6W>#T-*i2pPr0zJY%IuYshvHHlwQMnJXmea1M!ch z_BQ<6mG_XeOyi$57Kc3Ix=S1UJDXPK;2|99$@^mybB?b(9h^U8$Qk}rjtp0ay0>K{ z7A=<;MM=JpyARkfsCQM1SysvB{-d2vwh}4p(=5JS97vqFwQSNub}BQ%FDX@eb1S_6 zkeBUx^GzA}#w^pHp$<#&cDkwDBXDnLgms2?S0&LDa`VYKZ~e0XA13KhVJSmJ-=7~m ze0|MQ*%!Hz{qStO=u@+ESF_q3Ah>~!r39=VEreAfuyWlgB z#udkIVF-1G3Fs@tv72xItj_j~c9qB)mCCNKV|?9+Wd+@4!I1_Hbg?~;THwpDA>$ds z3=pf0gJs=;hL;5&QCU_S&%%WPun`WduS_MJjm=-#BGyN8+|JJl<7+D3XKzl7T+2qu zU?7_28xdXUPQ5XVk~Skl?@@$y;K^aF%)y)zeFQl9x=OHSq%550OrSyx7f@tru@62q z*Pzcn)cloKd}wAzoP+kQo{`9Y(g|W@rI${(>yY)n^y5~gx`?QoI9tj5_`A$OYC}B! z=zEivN=IQkI!2Vvy|tQ=((=5^HYv#rl$%WXqA;`)c5}RA5odwlp^P|t(4FPVJ?$NC zPw@NDC!P2|`hAp7wiUtUY4s2L*_D+JP0bl~%WKARAq4ad0@b^+#+Q{F)>><{f`;=R zD^JPup9BkKaKr|2G{TBK*X>eh;+s7ECrdXie#lb(2e2VvA|3ZC_g62Nsiw}Psh#6#@kAC6-X<^gmXs4Ci1UJuKO>K$yWx6TK=6*Iy8TROrONBhI&E*t3*efQEHLuo-@4;5F`NKs$mc^>S z!02eC%_evU-utRrpIuY*!GpGD@m_A;$%tzgks{%k{=x$$UIlqQ60`>$*f~#%XuV>X zPy-1G+QVQpPwuC;;VGg&H5Fmu z&ty+WFO&ma_oc3qjn;tQPHDN%=I+1PY!F_LRNp@l?m+gzTJjXTxxN3haq9o&Gj?KZ zj$Najh6bNO8p1AhQTQWbK zeEOXtnU}uD$RB0fD>iadqtil<^=XWx!+BiFAy2KkIEoS5sWKSY=Y^sXK;sgL^2m>< zvF}SPX(dw(B=kA`z@e9%e^_UR0@XEy%cC+@Cf}&EL?Rt9iKM;8ofKOUxw@{=&g_9G zKdGfCr>Oa?1nIf2v*VZgN^_jz0c%kUg?9H1wHUhXTQ(u|W2QsXucX1S#qEnq3Ex`j=$;gD5k4UHMyl?;ZBg@?dgAg(zpY==o9LJg zgFPGwUkHfjQKhNdA`Q!WE^N~HX%Q*@Xyre)IsM*V7=F8!lIwB~@vSLn@&uidph6Fr zB0@RHzgUov91~+7OYZ%y9YS=gq~kDTvFX8(;tT{*XyLv0zrr*|JFZNTp4|?PuFWR( z^rvj`cf+#5C`N#0s7tX-ChrCdMaukWR|8|;mASf%s$GD>;w8?%2r10i)L$7>EEDx$ zp325J51yadbhT!0DRN6e%%E4P7OKd^UPsS5Md4rk5feAVH9YVxI#!EE@eeN4gg!Jk zMb`$lm4bhm*Z%lzJnp9=^%I(Mu`VmnS=l0S_sWkYT%V)e>`c-egp`>~Nip_~$+j{#nNWF76 zZV`DVS=9H-I{Bt@A&1c!$W?WuTPH zMk2OWiNZB+UNHYLq;`$39_mgYIx;igNupvB@{U)?RMC^f+Xeh!F#M@09B;?t)I@>` zd=p08CY*bcd^E8Dy4 zHI=W>yP#e@stda>%j}1T^bSqfi)%$&8;Q;`{VcinS(mm1QMlH|@qxUR(w>5>$bht< z`U~8JrocRPPQo3+)S3BgvkwcHx-_4^quQ69mnu`$u{kqX??7g+9?s$+3rxc(*s?v1+|pucAT!!x+2j$nzPXa9A{=7Q8V7M zYpELpS_fR*>rbR^nZQ`L#9enCa+Sn!N|B)y;4+;QxPl{1OMcm_`l-EKi&sxP|4MmI zQAvctt-!oRe@E0V*|(;=Lv|}fw*SG~ug&MT>Dz57MuQ_s+KtM0x*ZeWXSIdPIWVGn zScHD;wT@$r9#h*lFipSX$skgj}K)z&2}MF>liIyCy3>L)sjtL`YV=~jsPPX6fSFrD1Vs=;TLid+{ORn&$d?1z9}5X^8&w06%9oqGnG+{k7o=oyTZnURcWk}j*ELhH&wa)gU%8Ff zb!uZSUoPoQ$i$XCf&K(5KZ+dq{RfaqIxSJ6`XcWAPu+X4!F*q;OxY#4k)kn8G?^=7 zr)P!CBsu%6gKi`7)PiEUw@BvN3h(?E)0WI!=~hid-s`C~$AqsPjqjtg7h-{d>BkQS zO;04q(5@GVCDWDuv2yc-%g;yO7QA6^wB*fb6refvlDQ-wnx}-2r!aW*PU>7D%<+a^ zv(NKlX!?6a&&G9)c>B@Bb*uM#h@*hqfNZz1+QT%*PXT_V*-5S#uBw33r94zI17o9I zP`p@CfCyn8mNSHaxHImBran{+WVwBuWB^nNNU%T>s}~^-_@NE(AgX% zoNKmeB1r>O*!a`)g$co{a&sJp9@1`-sx!Mj9@4K!f~bH*wmk+poc>fQe4G5^cLf;D zY@)4{(GYr+lhZEM{T2zrbRT@Edfdg}re_2HbN+kXNj#?5q~vO8m<*sN4wL9IkolsW z9ATOY<2V~HRR8d{Lpv{xIPJ@YVU9NyxsKep7?Uw(ZjUF2qlEU9;rAb4)Du!g{{2p< zK~sQFL+EtY(kffA6FZ1_68%@O^EQD6=7A_}?gCG3VutYJL7nCWglFBo zmB`uKDk9avyw`9cButp$!-{c4LbO8I%lUTGX??{69Wuza=B#%ZE=R{y$H!D4s-OEX z1><#dEg-iuq%wU@=Cx`K8pfdrqE-@|d>LBM;&?jEL0$1F_M>2Yneb0Xpoc2Efm^8C zV6A5eF^3g!Eq4AtK<(-7?3$!+ia|2jV%MYn;n4k|g}X`00p3P7GU%3vg!k(iJ$P__ zQT#;wUyxPTR`X*N{e_mnreggU*8$VK_>Ykpts1)Q1@YL-)Wrqy07rT&6xE8eN^^R{ z?v8GX={WbF2~Tr<9* zXB!GsF*m0M<11IYbkMJvJ>5}^D_D_VLqFRrNS)PlJjHiiZQ-yD z%GH{B%+Y9%xnvR%A?$q5E6!w`mFv!*;nov>58AvNB+}_a`;?;NVN;4OvhQ$BasEt+ ztSs;^VHi9^#gY&w^rAL1X-9(&bILA0$P_+}b=is5ZW<(=#s%yrZM7yVnC; zk*+Ys%4Z3{vR6r3hdXq3*MgBd*R(P1aPQT>j`JkebHWH6+|x>Quv3{yk5@7vO4||J>hw5kr0I7{5pJ(g=*~-<5WPnJW&12PI^Ty7 z=f5tYFO8O$lEZ{j)WrJVTFcC>b=16&x5JlhWfH3-9Tqp-B8uqywKG4Ot&kxe0@{rE zW~bYfOW5)VlQ?Jor|$M2z{>EjmOW;PUDqYhFwbBFRDmgfts?Y^raj`G_^q3C(ihF&bww#~#vC%S;UeF}Y$q<(m8G(-9?8BOQO z669R*DWi=a=NFq=HG4$mgXn+-k&~KKr_u)vOx4TnV?`;{&%HDeOtC&R@68THF4Yse zD#6dMTbbg_Ur#?%Aw%b-8E54@gis~{!wp`K=28!{o9bfc5XxiJF)NXtOFi`-p7-Qc z{}>j%0RhJT5wtbd=-`Lv2ghs3d$a8XhD8XQ$@VYNI#K#_2!t>9tdzE}9jpCHm_F8K zXLyk$>W;y9GZKthmooO-V9kBGODh5jp-Lf{jXxDyK+T=6p=sJ0EDG6R7@B-<*NM@)_GV6vhzKF-dlo;nVu?-vVpK6y-g4}d>^IkH z*mdickv`u-Qu+$s#7aC2;b)$9%m{c^))#oJ>uc>LLGlsZxP4`4Z(#!}kF8BkqK)h6Yq($wCGs4jC=1^!GsF~tDy zc6AsO22(bq!296X1_suwe3f92wT>L!fa_I(RTz+f-xHsB`$@u}F<5|?H#QjF#4i-P zH}wA8P<~}1zu()ySi-qY_&J}|L&%ORB`Cfa0pFY}4et=hc8I}F&dPSAz&Xd0vX}NB z_RA6lG=j(4QtGjU zwBSyr@lX!Uat93F$iA=N-m7Jc?~td+E$GOYr@{IBYI&)e%56utF5&O*Cs|}{l|S}w z=n(TGd6l_|Nbmaf^|6H>(qiDYi*tIjy~*7uoSXWnbh^tAG1SZ8*Z-Mfr9$ZOo&Qx* z%;z81HJ*srz915O<9pw67V$C3j2`Y&-IOCsC}e=uQLu+vnjM%z&VDz%m4%7TEdKD2 z-4Gt6?>1)bU(&-a9j213AchfN8B}h3n3Uyar=;m;4TeLJiQ6ueZ?>na@}6o8*f0sBdz^t~uV2Wd zsR3`vlX_=M9u3(Nx1vTUqpCjFLD=fQKm)~~?J;Rtg?!yKzOUGntYU9ENlLXeGO9$# zyw~=%<4DoV0BGSHtF6^Rzfq+E!4_`kwydm)|7=M5N@&UyIY}}E{+@*bH6sP2$Gy9$p44~xC^HG6s?VKo_vtP5 zo1;b(B+v+zvb53(z!%46nhEKPBiaVOiWEgpEZuYJ{SVMJRi>Lyp?0zsDw7u^y{;;2 zG{Bi9$sf8~toMfbyXL1<%=R$xLVA5S1GdFgCQ5(NTfVuQT&?OSWp|-5omU>1YBb9i z2dH#9`yN@W4nf2N=JUiajfS$lEsd;^2Y65evEvY9`e^w(-Yjm_7)DYS!|9$z~((F$E0G<&Rt zueZm`FZBmyBRs@7Q}Ts`rLq@{zpk=e&1~gvH2n3!0a%Y&p-SHkHgnQillJNFq$`ik zAx!8}7C#Opz{W8VK`{x4i+2-Q7}alUGNo{Sm@YUG+eQ~Iee^?@B}Q4B?%&|Ms?*GT z0~_1dIkqea4&78o4)2LzEJNoRb1?!q4Q*V9d-f^n@uM-2a!l!-uoF+AkKeh5q=-2! zJxjq%@+DZz=!%R5dDJh#pVW;o%b{4z4===j+K3Y^AFAUU#fq^+dTG!|*}RZu|Mjve z3d2_bl@9ak3!{wngmhPa)I%PgAvR>T9p{gZov{WnJkX|*5 zjY9HfC9cw`#dhrCE-mP<>EpdPxTjvOFSWf`SlAY4CUFTB+P+L7R_w$=6tNE%tr4q0 zAuDzbzoMDXnD4ey%Wi~Pm>Ej*7E4kL{L~(G&~TUdR~}$=Mh4XP?SFfRj~t|u1R)Zr z0_n0Jn3AYPbfO!PP^~FSElxOiHFykPmw}7QCuOy?7l@LZ`Olm>DtKI~f7oCu(=ikJ z)9dVhcN5#m1IRSuEbHO9*n?jjh29}iO&k>iu?|0=eT0_hx?LvdLXkA$Nnm|$_qWolNNz{{l$Nl78