From 7f05e62e94705f33dfe77933246608b89d20cf4b Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Fri, 10 Mar 2023 05:13:50 -0500 Subject: [PATCH 01/80] Removed pressure_advance. --- printer.cfg | 1 - 1 file changed, 1 deletion(-) diff --git a/printer.cfg b/printer.cfg index e7d0049..22b8629 100644 --- a/printer.cfg +++ b/printer.cfg @@ -107,7 +107,6 @@ pid_ki: 1.326 min_temp: 0 max_temp: 300 max_extrude_only_distance: 150.0 -pressure_advance: 0.027 [tmc2209 extruder] uart_pin: PC14 From d9fb25bcd22b666bb7e021d51ef62af8c775aae7 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Fri, 10 Mar 2023 05:21:37 -0500 Subject: [PATCH 02/80] Minor change to Directory Structure section. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f95c532..bb089ef 100644 --- a/README.md +++ b/README.md @@ -132,7 +132,7 @@ This repository contains many files and folders. Some are *necessary* for this K │   ├── adxl-direct.cfg │   ├── adxl-rp2040.cfg │   ├── beeper.cfg -│   ├── macros.cfg +│   ├── misc-macros.cfg │   ├── MECHANICAL_GANTRY_CALIBRATION.cfg │   ├── PARKING.cfg │   └── TEST_SPEED.cfg [☠️Not ready for use☠️] From e3762db8b244680fac6ac736758f500965906d0e Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Fri, 10 Mar 2023 07:59:26 -0500 Subject: [PATCH 03/80] Minor cleanup in misc-macros.cfg. --- cfgs/misc-macros.cfg | 5 ----- 1 file changed, 5 deletions(-) diff --git a/cfgs/misc-macros.cfg b/cfgs/misc-macros.cfg index 643707d..caa2fef 100644 --- a/cfgs/misc-macros.cfg +++ b/cfgs/misc-macros.cfg @@ -72,10 +72,6 @@ gcode: BASE_CANCEL_PRINT [gcode_macro PRINT_START] -# Use PRINT_START for the slicer starting script - please customize for your slicer of choice -#gcode: -# G28 ; home all axes -# G1 Z20 F3000 ; move nozzle away from bed gcode: # Parameters {% set bedtemp = params.BED|int %} @@ -97,7 +93,6 @@ gcode: G1 Z20 F3000 ; move nozzle away from bed [gcode_macro PRINT_END] -# Use PRINT_END for the slicer ending script - please customize for your slicer of choice gcode: BEEP I=2 DUR=30 FREQ=8500 ; NOTE Comment out this line to stop the beeps at the end of a print {% set PRE_PURGE_PRIME_LENGTH=printer["gcode_macro _globals"].pre_purge_prime_length|default(1.40)|float %} From e972231cd1ea8ca0ccab58d7f1a857d6e5e2c087 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sat, 11 Mar 2023 19:47:18 -0500 Subject: [PATCH 04/80] Added not about e-steps. --- printer.cfg | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/printer.cfg b/printer.cfg index 22b8629..ef6d60f 100644 --- a/printer.cfg +++ b/printer.cfg @@ -94,7 +94,7 @@ step_pin: PB4 dir_pin: !PB3 enable_pin: !PC3 microsteps: 32 -rotation_distance: 4.65 +rotation_distance: 4.65 # NOTE Calibrate e-steps and adjust https://www.klipper3d.org/Rotation_Distance.html nozzle_diameter: 0.400 filament_diameter: 1.750 heater_pin: PA1 @@ -153,6 +153,9 @@ fade_start: 1 fade_end: 10 fade_target: 0 +[fan] +pin: PA0 + [display] lcd_type: st7920 cs_pin: PB12 @@ -185,6 +188,3 @@ screw5_name: back left speed: 50 horizontal_move_z: 10 screw_thread: CCW-M4 - -[fan] -pin: PA0 From b2f110df0ae0cef55da80009fb0dacd849b76895 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 12 Mar 2023 20:36:15 -0400 Subject: [PATCH 05/80] Adjusted .gitignore and workspace settings. --- .gitignore | 1 + .vscode/settings.json | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index a46f989..c90eda7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ printer-*_*.cfg .moonraker.conf.bkp +.directory diff --git a/.vscode/settings.json b/.vscode/settings.json index 06c7957..384e9d9 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,6 +3,6 @@ "editor.insertSpaces": true, "editor.detectIndentation": false, "git.mergeEditor": false, - "spellright.language": ["en-US-10-1."], - "spellright.documentTypes": ["markdown", "latex", "plaintext"] + "spellright.language": ["en-GB-10-1."], + "spellright.documentTypes": ["markdown", "plaintext"] } From 07b36315124dec5f9b188cc01fe7636b5c3cac56 Mon Sep 17 00:00:00 2001 From: Bassam Husain <61985779+bassamanator@users.noreply.github.com> Date: Tue, 14 Mar 2023 01:58:42 -0400 Subject: [PATCH 06/80] Update README.md Added Links section. --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index bb089ef..084b6e7 100644 --- a/README.md +++ b/README.md @@ -162,6 +162,11 @@ If you found my work useful, please consider buying me a [ 0 else 1 } + G4 P{dur} + SET_PIN PIN=beeper VALUE=0 + G4 P{dur} + {% endfor %} \ No newline at end of file diff --git a/printer.cfg b/printer.cfg index ef6d60f..5f12b5e 100644 --- a/printer.cfg +++ b/printer.cfg @@ -7,7 +7,6 @@ [include ./cfgs/misc-macros.cfg] [include ./cfgs/PARKING.cfg] [include ./cfgs/MECHANICAL_GANTRY_CALIBRATION.cfg] -[include ./cfgs/beeper.cfg] # NOTE Uncomment the ONE of the following lines if you're using an adxl345 # [include ./cfgs/adxl-rp2040.cfg] @@ -25,6 +24,10 @@ max_accel: 3000 max_z_velocity: 15 max_z_accel: 45 +##################################################################### +# X/Y/Z Stepper Settings +##################################################################### + [stepper_x] step_pin: PC2 dir_pin: !PB9 @@ -89,11 +92,15 @@ sense_resistor: 0.150 uart_address: 3 diag_pin: PA7 +##################################################################### +# Extruder +##################################################################### + [extruder] step_pin: PB4 dir_pin: !PB3 enable_pin: !PC3 -microsteps: 32 +microsteps: 64 rotation_distance: 4.65 # NOTE Calibrate e-steps and adjust https://www.klipper3d.org/Rotation_Distance.html nozzle_diameter: 0.400 filament_diameter: 1.750 @@ -116,6 +123,10 @@ interpolate: False sense_resistor: 0.150 uart_address: 3 +##################################################################### +# Bed Heater +##################################################################### + [heater_bed] heater_pin: PA2 sensor_type: EPCOS 100K B57560G104F @@ -127,6 +138,10 @@ pid_kd: 1343.571 min_temp: 0 max_temp: 110 +##################################################################### +# Probe Related +##################################################################### + [probe] pin: PB1 x_offset: 27 @@ -153,9 +168,17 @@ fade_start: 1 fade_end: 10 fade_target: 0 +##################################################################### +# Fans +##################################################################### + [fan] pin: PA0 +##################################################################### +# Misc +##################################################################### + [display] lcd_type: st7920 cs_pin: PB12 @@ -188,3 +211,10 @@ screw5_name: back left speed: 50 horizontal_move_z: 10 screw_thread: CCW-M4 + +[output_pin beeper] +pin: PC6 +value: 0 +shutdown_value: 0 +pwm: True +cycle_time: 0.0005 ; Default beeper tone in kHz. 1 / 0.0005 = 2000Hz (2kHz) From c967be1023514b4156ef544ac8db302534f508bb Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Tue, 14 Mar 2023 18:45:30 -0400 Subject: [PATCH 08/80] More changes pulled from personal. --- cfgs/misc-macros.cfg | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/cfgs/misc-macros.cfg b/cfgs/misc-macros.cfg index 664b32f..235368a 100644 --- a/cfgs/misc-macros.cfg +++ b/cfgs/misc-macros.cfg @@ -15,15 +15,36 @@ path: /home/pi/printer_data/gcodes [display_status] [gcode_macro _globals] +variable_filament_sensor_enabled: 0 # NOTE Enable(1) or disable(0) the filament sensor, if one is connected +variable_beeping_enabled: 1 # NOTE Enable(1) or disable(0) beeping everywhere except during gantry calibration variable_pre_purge_prime_length: 1.4 gcode: SET_GCODE_VARIABLE MACRO=_globals VARIABLE=pre_purge_prime_length VALUE={ variable_pre_purge_prime_length } + SET_GCODE_VARIABLE MACRO=_globals VARIABLE=filament_sensor_enabled VALUE={ variable_filament_sensor_enabled } + SET_GCODE_VARIABLE MACRO=_globals VARIABLE=beeping_enabled VALUE={ variable_beeping_enabled } -[gcode_macro CHECK_PRE_PURGE_PRIME_LENGTH] +[gcode_macro CONDITIONAL_BEEP] gcode: - {% set PRE_PURGE_PRIME_LENGTH=printer["gcode_macro _globals"].pre_purge_prime_length %} - {% if not PRE_PURGE_PRIME_LENGTH %} - {action_raise_error('Pre purge prime length not found')} + # Parameters + {% set i = params.I|default(1)|int %} ; Iterations (number of times to beep). + {% set dur = params.DUR|default(100)|int %} ; Duration/wait of each beep in ms. Default 100ms. + {% set freq = params.FREQ|default(2000)|int %} ; Frequency in Hz. Default 2kHz. + + {% set BEEPING_ENABLED=printer["gcode_macro _globals"].beeping_enabled|default(-1)|int %} + + {% if BEEPING_ENABLED == 1 %} + BEEP I={i} DUR={dur} FREQ={freq} + {% endif %} + +[gcode_macro ADJUST_FILAMENT_SENSOR_STATUS] +gcode: + # Parameters + {% set NEWSTATUS = params.ENABLE|default(-1)|int %} + + {% set FILAMENT_SENSOR_ENABLED=printer["gcode_macro _globals"].filament_sensor_enabled|default(-1)|int %} + + {% if FILAMENT_SENSOR_ENABLED == 1 and NEWSTATUS != -1 %} + SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE={NEWSTATUS} {% endif %} [gcode_macro M109] @@ -52,8 +73,8 @@ gcode: # https://github.com/JoeCat1207/V0.1-Purge-line-SuperSlicer/blob/main/Purgeline.txt # https://github.com/VoronDesign/Voron-Switchwire/blob/200cdae033c59ef81f67c4235469da7ca66d53a1/Firmware/skr_mini_e3_v2_config.cfg gcode: - {% set PRE_PURGE_PRIME_LENGTH=printer["gcode_macro _globals"].pre_purge_prime_length %} - CHECK_PRE_PURGE_PRIME_LENGTH + {% set PRE_PURGE_PRIME_LENGTH=printer["gcode_macro _globals"].pre_purge_prime_length|default(1.40)|float %} + G0 Y0 X0 F4000 ; go to tongue of print bed G1 Z0.4 F500.0 ; move bed to nozzle G92 E0.0 ; reset extruder From 9239a54e8b88cab8716ff6718aafa98db8e44a20 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Tue, 14 Mar 2023 18:55:07 -0400 Subject: [PATCH 09/80] More changes pulled from personal. --- cfgs/misc-macros.cfg | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/cfgs/misc-macros.cfg b/cfgs/misc-macros.cfg index 235368a..b1afe99 100644 --- a/cfgs/misc-macros.cfg +++ b/cfgs/misc-macros.cfg @@ -14,6 +14,11 @@ path: /home/pi/printer_data/gcodes [pause_resume] [display_status] +# [delayed_gcode DISABLEFILAMENTSENSOR] +# initial_duration: 1 +# gcode: +# SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 + [gcode_macro _globals] variable_filament_sensor_enabled: 0 # NOTE Enable(1) or disable(0) the filament sensor, if one is connected variable_beeping_enabled: 1 # NOTE Enable(1) or disable(0) beeping everywhere except during gantry calibration @@ -74,7 +79,7 @@ gcode: # https://github.com/VoronDesign/Voron-Switchwire/blob/200cdae033c59ef81f67c4235469da7ca66d53a1/Firmware/skr_mini_e3_v2_config.cfg gcode: {% set PRE_PURGE_PRIME_LENGTH=printer["gcode_macro _globals"].pre_purge_prime_length|default(1.40)|float %} - + # ADJUST_FILAMENT_SENSOR_STATUS ENABLE=1 G0 Y0 X0 F4000 ; go to tongue of print bed G1 Z0.4 F500.0 ; move bed to nozzle G92 E0.0 ; reset extruder @@ -93,12 +98,14 @@ gcode: BASE_CANCEL_PRINT [gcode_macro PRINT_START] -gcode: +gcode: # Parameters {% set bedtemp = params.BED|int %} {% set hotendtemp = params.HOTEND|int %} {% set chambertemp = params.CHAMBER|default(0)|int %} + # ADJUST_FILAMENT_SENSOR_STATUS ENABLE=1 + G28 X Y # M140 S{bedtemp} ; set & don't wait for bed temp @@ -115,7 +122,8 @@ gcode: [gcode_macro PRINT_END] gcode: - BEEP I=2 DUR=30 FREQ=8500 ; NOTE Comment out this line to stop the beeps at the end of a print + # ADJUST_FILAMENT_SENSOR_STATUS ENABLE=0 + CONDITIONAL_BEEP I=2 DUR=30 FREQ=8500 ; NOTE Comment out this line to stop the beeps at the end of a print {% set PRE_PURGE_PRIME_LENGTH=printer["gcode_macro _globals"].pre_purge_prime_length|default(1.40)|float %} M400 ; wait for buffer to clear G92 E0 ; zero the extruder @@ -182,7 +190,8 @@ gcode: SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z} ; set z hop variable for reference in resume macro SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target} ; set hotend temp variable for reference in resume macro - # SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0 ; disable filament sensor + # ADJUST_FILAMENT_SENSOR_STATUS ENABLE=0 + SAVE_GCODE_STATE NAME=PAUSE ; save current print position for resume BASE_PAUSE ; pause print {% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %} ; check that zhop doesn't exceed z max @@ -208,8 +217,8 @@ gcode: {% set e = params.E|default(2.5)|int %} ; hotend prime amount (in mm) {% if printer['pause_resume'].is_paused|int == 1 %} - # SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1 ; enable filament sensor - #INITIAL_RGB ; reset LCD color + # ADJUST_FILAMENT_SENSOR_STATUS ENABLE=1 + SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout} ; set timeout back to configured value {% if etemp > 0 %} M109 S{etemp|int} ; wait for hotend to heat back up From 545817dffc969050660f55e174239a26b9cc5787 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Tue, 14 Mar 2023 19:26:01 -0400 Subject: [PATCH 10/80] SuperSlicer config bundle updated. --- misc/SuperSlicer_config_bundle.ini | 250 ++++++++++++++++++++++++----- 1 file changed, 212 insertions(+), 38 deletions(-) diff --git a/misc/SuperSlicer_config_bundle.ini b/misc/SuperSlicer_config_bundle.ini index 2a310c0..b318c70 100644 --- a/misc/SuperSlicer_config_bundle.ini +++ b/misc/SuperSlicer_config_bundle.ini @@ -1,6 +1,6 @@ -# generated by SuperSlicer 2.4 on 2023-02-15 at 02:16:55 UTC +# generated by SuperSlicer 2.4 on 2023-03-14 at 23:18:59 UTC -[print:_Ellis_Decorative_45_Degree_11mm3-SOVOL] +[print:_Ellis_Decorative_45_Degree_15mm3-SOVOL] allow_empty_layers = 0 avoid_crossing_not_first_layer = 1 avoid_crossing_perimeters = 0 @@ -78,7 +78,7 @@ first_layer_acceleration_over_raft = 0 first_layer_extrusion_spacing = first_layer_extrusion_width = 125% first_layer_flow_ratio = 100% -first_layer_height = 0.25 +first_layer_height = 0.26 first_layer_infill_speed = 60 first_layer_min_speed = 0 first_layer_size_compensation = -0.1 @@ -132,7 +132,7 @@ ironing_speed = 15 ironing_type = top layer_height = 0.2 max_print_speed = 200 -max_volumetric_speed = 11 +max_volumetric_speed = 15 milling_after_z = 200% milling_extra_size = 150% milling_post_process = 0 @@ -172,7 +172,7 @@ print_custom_variables = wall_thickness_lines = 0 print_extrusion_multiplier = 100% print_retract_length = -1 print_retract_lift = -1 -print_settings_id = Ellis - Decorative 45 Degree (11mm3/s) +print_settings_id = Ellis - Decorative 45 Degree (15mm3/s) print_temperature = 0 raft_contact_distance = 0.1 raft_expansion = 1.5 @@ -267,7 +267,7 @@ wipe_tower_y = 140 xy_inner_size_compensation = 0 xy_size_compensation = 0 -[print:_Ellis_Decorative_Standard_11mm3-SOVOL] +[print:_Ellis_Decorative_Standard_15mm3-SOVOL] allow_empty_layers = 0 avoid_crossing_not_first_layer = 1 avoid_crossing_perimeters = 0 @@ -345,7 +345,7 @@ first_layer_acceleration_over_raft = 0 first_layer_extrusion_spacing = first_layer_extrusion_width = 125% first_layer_flow_ratio = 100% -first_layer_height = 0.25 +first_layer_height = 0.26 first_layer_infill_speed = 60 first_layer_min_speed = 0 first_layer_size_compensation = -0.1 @@ -399,7 +399,7 @@ ironing_speed = 15 ironing_type = top layer_height = 0.2 max_print_speed = 200 -max_volumetric_speed = 11 +max_volumetric_speed = 15 milling_after_z = 200% milling_extra_size = 150% milling_post_process = 0 @@ -439,7 +439,7 @@ print_custom_variables = wall_thickness_lines = 0 print_extrusion_multiplier = 100% print_retract_length = -1 print_retract_lift = -1 -print_settings_id = Ellis - Decorative Standard (11mm3/s) +print_settings_id = Ellis - Decorative Standard (15mm3/s) print_temperature = 0 raft_contact_distance = 0.1 raft_expansion = 1.5 @@ -534,7 +534,7 @@ wipe_tower_y = 140 xy_inner_size_compensation = 0 xy_size_compensation = 0 -[print:_Ellis_PIF_45_Degree_11mm3-SOVOL] +[print:_Ellis_PIF_45_Degree_15mm3-SOVOL] allow_empty_layers = 0 avoid_crossing_not_first_layer = 1 avoid_crossing_perimeters = 0 @@ -612,7 +612,7 @@ first_layer_acceleration_over_raft = 0 first_layer_extrusion_spacing = first_layer_extrusion_width = 125% first_layer_flow_ratio = 100% -first_layer_height = 0.25 +first_layer_height = 0.26 first_layer_infill_speed = 60 first_layer_min_speed = 0 first_layer_size_compensation = -0.1 @@ -666,7 +666,7 @@ ironing_speed = 15 ironing_type = top layer_height = 0.2 max_print_speed = 200 -max_volumetric_speed = 11 +max_volumetric_speed = 15 milling_after_z = 200% milling_extra_size = 150% milling_post_process = 0 @@ -706,7 +706,7 @@ print_custom_variables = wall_thickness_lines = 0 print_extrusion_multiplier = 100% print_retract_length = -1 print_retract_lift = -1 -print_settings_id = Ellis - PIF 45 Degree (11mm3/s) +print_settings_id = Ellis - PIF 45 Degree (15mm3/s) print_temperature = 0 raft_contact_distance = 0.1 raft_expansion = 1.5 @@ -801,7 +801,7 @@ wipe_tower_y = 140 xy_inner_size_compensation = 0 xy_size_compensation = 0 -[print:_Ellis_PIF_Standard_11mm3-SOVOL] +[print:_Ellis_PIF_Standard_15mm3-SOVOL] allow_empty_layers = 0 avoid_crossing_not_first_layer = 1 avoid_crossing_perimeters = 0 @@ -879,7 +879,7 @@ first_layer_acceleration_over_raft = 0 first_layer_extrusion_spacing = first_layer_extrusion_width = 125% first_layer_flow_ratio = 100% -first_layer_height = 0.25 +first_layer_height = 0.26 first_layer_infill_speed = 60 first_layer_min_speed = 0 first_layer_size_compensation = -0.1 @@ -933,7 +933,7 @@ ironing_speed = 15 ironing_type = top layer_height = 0.2 max_print_speed = 200 -max_volumetric_speed = 11 +max_volumetric_speed = 15 milling_after_z = 200% milling_extra_size = 150% milling_post_process = 0 @@ -973,7 +973,7 @@ print_custom_variables = wall_thickness_lines = 0 print_extrusion_multiplier = 100% print_retract_length = -1 print_retract_lift = -1 -print_settings_id = Ellis - PIF Standard (11mm3/s) +print_settings_id = Ellis - PIF Standard (15mm3/s) print_temperature = 0 raft_contact_distance = 0.1 raft_expansion = 1.5 @@ -1495,7 +1495,7 @@ full_fan_speed_layer = 4 inherits = max_fan_speed = 100 max_speed_reduction = 90% -min_fan_speed = 50 +min_fan_speed = 100 min_print_speed = 15 slowdown_below_layer_time = 15 start_filament_gcode = "" @@ -1591,7 +1591,7 @@ temperature = 250 top_fan_speed = -1 [filament:Eryone PETG - Blue] -bed_temperature = 60 +bed_temperature = 70 bridge_fan_speed = 100 bridge_internal_fan_speed = -1 chamber_temperature = 30 @@ -1602,15 +1602,15 @@ compatible_prints_condition = disable_fan_first_layers = 2 end_filament_gcode = "" external_perimeter_fan_speed = -1 -extrusion_multiplier = 1 +extrusion_multiplier = 1.02 fan_always_on = 1 fan_below_layer_time = 20 -filament_colour = #2400FF +filament_colour = #0F0EF0 filament_cooling_final_speed = 3.4 filament_cooling_initial_speed = 2.2 filament_cooling_moves = 4 filament_cooling_zone_pause = 0 -filament_cost = 20 +filament_cost = 29.36 filament_custom_variables = "" filament_density = 1.45 filament_deretract_speed = nil @@ -1623,7 +1623,7 @@ filament_load_time = 0 filament_loading_speed = 28 filament_loading_speed_start = 3 filament_max_overlap = 100% -filament_max_speed = 120 +filament_max_speed = 0 filament_max_volumetric_speed = 12 filament_max_wipe_tower_speed = 0 filament_melt_zone_pause = 0 @@ -1644,7 +1644,7 @@ filament_settings_id = "" filament_shrink = 100% filament_skinnydip_distance = 31 filament_soluble = 0 -filament_spool_weight = 0 +filament_spool_weight = 1000 filament_toolchange_delay = 0 filament_toolchange_part_fan_speed = 50 filament_toolchange_temp = 200 @@ -1663,13 +1663,13 @@ filament_wipe_inside_end = nil filament_wipe_inside_start = nil filament_wipe_only_crossing = nil filament_wipe_speed = nil -first_layer_bed_temperature = 60 -first_layer_temperature = 250 +first_layer_bed_temperature = 70 +first_layer_temperature = 240 full_fan_speed_layer = 4 inherits = max_fan_speed = 100 max_speed_reduction = 90% -min_fan_speed = 50 +min_fan_speed = 100 min_print_speed = 15 slowdown_below_layer_time = 15 start_filament_gcode = "" @@ -1751,17 +1751,17 @@ filament_wipe_inside_start = nil filament_wipe_only_crossing = nil filament_wipe_speed = nil first_layer_bed_temperature = 70 -first_layer_temperature = 245 +first_layer_temperature = 220 full_fan_speed_layer = 4 inherits = max_fan_speed = 100 max_speed_reduction = 90% -min_fan_speed = 45 +min_fan_speed = 100 min_print_speed = 15 slowdown_below_layer_time = 15 start_filament_gcode = "" support_material_interface_fan_speed = -1 -temperature = 235 +temperature = 220 top_fan_speed = -1 [filament:Eryone PETG - Galaxy Red] @@ -1851,6 +1851,93 @@ support_material_interface_fan_speed = -1 temperature = 235 top_fan_speed = -1 +[filament:Eryone PLA - Matte Dual - Pink-Blue] +bed_temperature = 60 +bridge_fan_speed = 100 +bridge_internal_fan_speed = -1 +chamber_temperature = 0 +compatible_printers = +compatible_printers_condition = +compatible_prints = +compatible_prints_condition = +disable_fan_first_layers = 1 +end_filament_gcode = "; Filament-specific end gcode \n;END gcode for filament\n" +external_perimeter_fan_speed = -1 +extrusion_multiplier = 1.02 +fan_always_on = 1 +fan_below_layer_time = 20 +filament_colour = #927BB6 +filament_cooling_final_speed = 3.4 +filament_cooling_initial_speed = 2.2 +filament_cooling_moves = 0 +filament_cooling_zone_pause = 0 +filament_cost = 26.91 +filament_custom_variables = "" +filament_density = 1.23 +filament_deretract_speed = 30 +filament_diameter = 1.75 +filament_dip_extraction_speed = 70 +filament_dip_insertion_speed = 33 +filament_enable_toolchange_part_fan = 0 +filament_enable_toolchange_temp = 0 +filament_load_time = 0 +filament_loading_speed = 28 +filament_loading_speed_start = 3 +filament_max_overlap = 100% +filament_max_speed = 0 +filament_max_volumetric_speed = 0 +filament_max_wipe_tower_speed = 0 +filament_melt_zone_pause = 0 +filament_minimal_purge_on_wipe_tower = 15 +filament_notes = ";Full spool weight: 1280g" +filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" +filament_retract_before_travel = nil +filament_retract_before_wipe = nil +filament_retract_layer_change = nil +filament_retract_length = nil +filament_retract_lift = nil +filament_retract_lift_above = nil +filament_retract_lift_below = nil +filament_retract_restart_extra = nil +filament_retract_speed = 30 +filament_seam_gap = nil +filament_settings_id = "ABS - KVP" +filament_shrink = 100% +filament_skinnydip_distance = 31 +filament_soluble = 0 +filament_spool_weight = 1000 +filament_toolchange_delay = 0 +filament_toolchange_part_fan_speed = 50 +filament_toolchange_temp = 200 +filament_type = PLA +filament_unload_time = 0 +filament_unloading_speed = 90 +filament_unloading_speed_start = 100 +filament_use_fast_skinnydip = 0 +filament_use_skinnydip = 0 +filament_vendor = (Unknown) +filament_wipe = nil +filament_wipe_advanced_pigment = 0.5 +filament_wipe_extra_perimeter = nil +filament_wipe_inside_depth = nil +filament_wipe_inside_end = nil +filament_wipe_inside_start = nil +filament_wipe_only_crossing = nil +filament_wipe_speed = nil +first_layer_bed_temperature = 60 +first_layer_temperature = 210 +full_fan_speed_layer = 4 +inherits = +max_fan_speed = 100 +max_speed_reduction = 90% +min_fan_speed = 100 +min_print_speed = 10 +slowdown_below_layer_time = 15 +start_filament_gcode = "; Filament gcode\n" +support_material_interface_fan_speed = -1 +temperature = 210 +top_fan_speed = -1 + [filament:Nuolei TPU - Light Blue] bed_temperature = 70 bridge_fan_speed = 80 @@ -2278,7 +2365,7 @@ full_fan_speed_layer = 4 inherits = max_fan_speed = 100 max_speed_reduction = 90% -min_fan_speed = 100 +min_fan_speed = 70 min_print_speed = 10 slowdown_below_layer_time = 15 start_filament_gcode = "; Filament gcode\n" @@ -2373,9 +2460,96 @@ support_material_interface_fan_speed = -1 temperature = 210 top_fan_speed = -1 +[filament:eSun PLA+ Silver] +bed_temperature = 60 +bridge_fan_speed = 100 +bridge_internal_fan_speed = -1 +chamber_temperature = 0 +compatible_printers = +compatible_printers_condition = +compatible_prints = +compatible_prints_condition = +disable_fan_first_layers = 1 +end_filament_gcode = "; Filament-specific end gcode \n;END gcode for filament\n" +external_perimeter_fan_speed = -1 +extrusion_multiplier = 1 +fan_always_on = 1 +fan_below_layer_time = 20 +filament_colour = #0E5FED +filament_cooling_final_speed = 3.4 +filament_cooling_initial_speed = 2.2 +filament_cooling_moves = 0 +filament_cooling_zone_pause = 0 +filament_cost = 30 +filament_custom_variables = "" +filament_density = 1.23 +filament_deretract_speed = nil +filament_diameter = 1.75 +filament_dip_extraction_speed = 70 +filament_dip_insertion_speed = 33 +filament_enable_toolchange_part_fan = 0 +filament_enable_toolchange_temp = 0 +filament_load_time = 0 +filament_loading_speed = 28 +filament_loading_speed_start = 3 +filament_max_overlap = 100% +filament_max_speed = 0 +filament_max_volumetric_speed = 0 +filament_max_wipe_tower_speed = 0 +filament_melt_zone_pause = 0 +filament_minimal_purge_on_wipe_tower = 15 +filament_notes = ";Full spool weight: 1280g" +filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" +filament_retract_before_travel = nil +filament_retract_before_wipe = nil +filament_retract_layer_change = nil +filament_retract_length = nil +filament_retract_lift = nil +filament_retract_lift_above = nil +filament_retract_lift_below = nil +filament_retract_restart_extra = nil +filament_retract_speed = nil +filament_seam_gap = nil +filament_settings_id = "ABS - KVP" +filament_shrink = 100% +filament_skinnydip_distance = 31 +filament_soluble = 0 +filament_spool_weight = 1000 +filament_toolchange_delay = 0 +filament_toolchange_part_fan_speed = 50 +filament_toolchange_temp = 200 +filament_type = PLA +filament_unload_time = 0 +filament_unloading_speed = 90 +filament_unloading_speed_start = 100 +filament_use_fast_skinnydip = 0 +filament_use_skinnydip = 0 +filament_vendor = (Unknown) +filament_wipe = nil +filament_wipe_advanced_pigment = 0.5 +filament_wipe_extra_perimeter = nil +filament_wipe_inside_depth = nil +filament_wipe_inside_end = nil +filament_wipe_inside_start = nil +filament_wipe_only_crossing = nil +filament_wipe_speed = nil +first_layer_bed_temperature = 60 +first_layer_temperature = 210 +full_fan_speed_layer = 4 +inherits = +max_fan_speed = 100 +max_speed_reduction = 90% +min_fan_speed = 100 +min_print_speed = 10 +slowdown_below_layer_time = 15 +start_filament_gcode = "; Filament gcode\n" +support_material_interface_fan_speed = -1 +temperature = 210 +top_fan_speed = -1 + [printer:Sovol Sv06] -bed_custom_model = /home/bassam/3dprinter/voron01-related/Ellis-SuperSlicer-Profiles/misc/SV06BuildPlate.stl -bed_custom_texture = /home/bassam/3dprinter/voron01-related/Ellis-SuperSlicer-Profiles/misc/Texture_SV06.svg +bed_custom_model = /home/bassam/3dprinter/voron/voron-0-parts/Ellis-SuperSlicer-Profiles/misc/sv06/SV06BuildPlate.stl +bed_custom_texture = /home/bassam/3dprinter/voron/voron-0-parts/Ellis-SuperSlicer-Profiles/misc/sv06/sv06-buildplate-better.png bed_shape = 0x0,223x0,223x223,0x223 before_layer_gcode = between_objects_gcode = @@ -2384,7 +2558,7 @@ cooling_tube_length = 5 cooling_tube_retraction = 91.5 default_filament_profile = "Prusament PLA" default_print_profile = 0.15mm QUALITY @MK3 -deretract_speed = 60 +deretract_speed = 50 end_gcode = PRINT_END extra_loading_move = -2 extruder_colour = #FFE3CA @@ -2452,7 +2626,7 @@ remaining_times_type = m73 retract_before_travel = 2 retract_before_wipe = 0% retract_layer_change = 1 -retract_length = 0.3 +retract_length = 0.4 retract_length_toolchange = 10 retract_lift = 0 retract_lift_above = 0.2 @@ -2461,7 +2635,7 @@ retract_lift_first_layer = 0 retract_lift_top = "All surfaces" retract_restart_extra = 0 retract_restart_extra_toolchange = 0 -retract_speed = 60 +retract_speed = 50 seam_gap = 15% silent_mode = 0 single_extruder_multi_material = 0 @@ -2499,8 +2673,8 @@ z_offset = 0 z_step = 0.005 [presets] -print = _Ellis_PIF_45_Degree_11mm3-SOVOL +print = _Ellis_PIF_Standard_15mm3-SOVOL sla_print = sla_material = printer = Sovol Sv06 -filament = eSun PLA+ Blue +filament = D3d PETG - Red From 0db62e01f3912f7df2509a906bf4e5ea6bbf2181 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Tue, 14 Mar 2023 20:22:40 -0400 Subject: [PATCH 11/80] Added FAQ section. --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 084b6e7..6295099 100644 --- a/README.md +++ b/README.md @@ -156,6 +156,12 @@ This repository contains many files and folders. Some are *necessary* for this K If you found my work useful, please consider buying me a [Ko-fi](https://ko-fi.com/bassamanator). +## FAQ + +##### How do I disable the beeping at the end of a print? + +Edit the file `cfgs/misc-macros.cfg`: change the line that reads `variable_beeping_enabled: 1` to `variable_beeping_enabled: 0`. All beeping will be disabled except during gantry calibration. + ## Useful Resources - [Everything Sovol SV06](https://github.com/bassamanator/everything-sovol-sv06) From 95897311e69b727e2c6525af3bf3f0a74736c54c Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Tue, 14 Mar 2023 21:08:16 -0400 Subject: [PATCH 12/80] Filament runout sensor code merged. --- README.md | 29 ++++++++++++++++++++++++++--- cfgs/misc-macros.cfg | 10 +++++----- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 6295099..6b7028c 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ I am creating these files for my personal use and cannot be held responsible for # Highlights - 💥 This Klipper configuration is an *endpoint*, meaning that it contains **everything** that you could possibly need in order to have an excellent Klipper experience! 💥 +- `NEW` Filament runout sensor usage implemented. - Minimum configuration settings for Mainsail/Fluiddpi to work. - SuperSlicer config bundle that contains the printer configuration, as well as what are considered by many to be the best print settings available for any FDM printer ([Ellis' SuperSlicer Profiles](https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles)). Find the differences between the different print setting profiles [here](https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles/tree/master/SuperSlicer). But basically, the 45 degree profile places the seam at the back. - Bed model and texture to use in SuperSlicer/PrusaSlicer. @@ -24,10 +25,11 @@ I am creating these files for my personal use and cannot be held responsible for - [x] Replace M109/M190 with `TEMPERATURE_WAIT`. - [ ] Get the Ellis `TEST_SPEED` macro working. - [x] Add information about directory structure. -- [ ] Create FAQ section. +- [x] Create FAQ section. - [x] Get filament sensor working with hotend PCB. -- [ ] Finalize filament sensor config and merge into `master`. +- [x] Finalize filament sensor config and merge into `master`. - [ ] Create topic in Discussion section detailing how users should keep this repository in sync with their own Klipper config using `git`. +- [ ] Explain `PAUSE`/`RESUME` extruder behaviour. ## Stay Up-to-Date @@ -160,7 +162,28 @@ If you found my work useful, please consider buying me a [ @@ -122,7 +122,7 @@ gcode: [gcode_macro PRINT_END] gcode: - # ADJUST_FILAMENT_SENSOR_STATUS ENABLE=0 + ADJUST_FILAMENT_SENSOR_STATUS ENABLE=0 CONDITIONAL_BEEP I=2 DUR=30 FREQ=8500 ; NOTE Comment out this line to stop the beeps at the end of a print {% set PRE_PURGE_PRIME_LENGTH=printer["gcode_macro _globals"].pre_purge_prime_length|default(1.40)|float %} M400 ; wait for buffer to clear @@ -190,7 +190,7 @@ gcode: SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z} ; set z hop variable for reference in resume macro SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target} ; set hotend temp variable for reference in resume macro - # ADJUST_FILAMENT_SENSOR_STATUS ENABLE=0 + ADJUST_FILAMENT_SENSOR_STATUS ENABLE=0 SAVE_GCODE_STATE NAME=PAUSE ; save current print position for resume BASE_PAUSE ; pause print @@ -217,7 +217,7 @@ gcode: {% set e = params.E|default(2.5)|int %} ; hotend prime amount (in mm) {% if printer['pause_resume'].is_paused|int == 1 %} - # ADJUST_FILAMENT_SENSOR_STATUS ENABLE=1 + ADJUST_FILAMENT_SENSOR_STATUS ENABLE=1 SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout} ; set timeout back to configured value {% if etemp > 0 %} From fdfdcd6bb5c6dd88da07aeef38ad108b01741651 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Tue, 14 Mar 2023 21:12:30 -0400 Subject: [PATCH 13/80] Updated FAQ section. --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 6b7028c..662797d 100644 --- a/README.md +++ b/README.md @@ -185,6 +185,10 @@ Make the following changes according to your needs. | Disable sensor | `0` | | Enable sensor | `1` | +##### My filament runout sensor works, but I just started a print without any filament loaded. What gives? + +A simple runout sensor can only detect a change in state. So, if you start a print without filament loaded, the printer will not know that there is no filament loaded. You should test your sensor by having filament loaded, starting a print, then cutting the filament. The expected behaviour is that the print will pause, and as long as you have beeping enabled, you will hear 3 annoying beeps. + ## Useful Resources - [Everything Sovol SV06](https://github.com/bassamanator/everything-sovol-sv06) From 77468d319fe923a6584f1de3cedbc6c49faa3a07 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Tue, 14 Mar 2023 23:51:14 -0400 Subject: [PATCH 14/80] Edited Sources section. --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 662797d..eb8a20f 100644 --- a/README.md +++ b/README.md @@ -207,7 +207,6 @@ A simple runout sensor can only detect a change in state. So, if you start a pri - https://github.com/strayr/strayr-k-macros - https://docs.vorondesign.com/build/software/miniE3_v20_klipper.html - ⭐ https://github.com/spinixguy/Sovol-SV06-firmware -- https://github.com/Pr20100/SOVOL-SV06-Klipper-profile - https://www.printables.com/model/378915-sovol-sv06-buildplate-texture-and-model-for-prusas - https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles From eaea54e330653a5824762c5d77b26d484e49fa47 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Wed, 15 Mar 2023 02:03:27 -0400 Subject: [PATCH 15/80] Added some fun gifs. --- README.md | 4 ++-- images/heart.gif | Bin 0 -> 7629 bytes images/party_blob.gif | Bin 0 -> 85253 bytes 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 images/heart.gif create mode 100644 images/party_blob.gif diff --git a/README.md b/README.md index eb8a20f..3f418d0 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ I am creating these files for my personal use and cannot be held responsible for # Highlights - 💥 This Klipper configuration is an *endpoint*, meaning that it contains **everything** that you could possibly need in order to have an excellent Klipper experience! 💥 -- `NEW` Filament runout sensor usage implemented. +- `NEW` Filament runout sensor usage implemented. - Minimum configuration settings for Mainsail/Fluiddpi to work. - SuperSlicer config bundle that contains the printer configuration, as well as what are considered by many to be the best print settings available for any FDM printer ([Ellis' SuperSlicer Profiles](https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles)). Find the differences between the different print setting profiles [here](https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles/tree/master/SuperSlicer). But basically, the 45 degree profile places the seam at the back. - Bed model and texture to use in SuperSlicer/PrusaSlicer. @@ -156,7 +156,7 @@ This repository contains many files and folders. Some are *necessary* for this K ## Ko-fi Support Me Ko-fi -If you found my work useful, please consider buying me a [Ko-fi](https://ko-fi.com/bassamanator). + If you found my work useful, please consider buying me a [Ko-fi](https://ko-fi.com/bassamanator). ## FAQ diff --git a/images/heart.gif b/images/heart.gif new file mode 100644 index 0000000000000000000000000000000000000000..e0f10b0029af8a1dab70a11df6b6bedac8cb2f32 GIT binary patch literal 7629 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 z zU@-eYx~0g1V Sk%<7{E6O#%!a_Fctp6`y{`H3d literal 0 HcmV?d00001 diff --git a/images/party_blob.gif b/images/party_blob.gif new file mode 100644 index 0000000000000000000000000000000000000000..c8fee563d9dad8e3cd073cb0a7a22220848d6669 GIT binary patch literal 85253 zcmbrlbyS>9voA_;4-&`#gS)%?;2PZB-JOI4cOTr{-6aHfcXxM4kRZe5{r0!_K6kBi z?%Ma>nLp-vrmMQEx__&yx~f`AMv{lu_y^PvsE0SGw?4pgAK(?B_hJs9(bg@00lWa( z^=PyJ0|8k0^iaA(nkcqh59af z3V`(+(0CQ^3L^1_cMwWI+C?&QLa@jVJR_hdnFao8At7V^>3RYLnjI7HpA(#mof8Bq z<6mVR17+{<2#)Ovfk%`Crzb$oLtyzC2f;KjgSfn#;OOkF_bb8q0N%hI;NH2Un{Wm~ zK-?uXcL$jNP5`jJzm37iOTJ^odwT%vMG$pW;oa@60x1A@B&i*Q`coucKM4{px`<=F z@9{qMa<;1w6L%Y$^%8XxDFCDQgWHL(_VIrg$oK>9D~W#*_vG_)GrUa$NwhjUT}g<4 zeFt?AwG%n?5jWZq|9l$-64B5;bQ1t~JKeAGrHOw+GHBv}Z+JI%+XQ}i1VG}RensH! zb06>_0dRv~2f?eK93*@m2EO$H0qGBr!B2Q^3a?JYC#rA2^=&^tKQc06;(cJSJOzQ} zwRaE&@Y)e@YflTj1sc5pt)57LKq6vt$k?X~;2Zv1HPGS>X#f273A%39jT#az`#QO(rH)|A(bOjw9Sz>Dvl*WS&T z#LM2!!IjTTkj&W3(ZrnZ{n_5!&6t^tZYJsCXixGlefg~a&!W7q_WxECvVXIh{oe&)`d=gw{XejZkukrE z!u-Cb|H~5p>!1IC%|DO-f!23izQ6nz-pw7}LGJSQ4(AVVkk^;zr@xO6_jiAO-`-qb zU0$4@ot_*Y9UkoO?e1)EZEmcut*$IDEzHl&&P-2DPK=L@jtmbC4)pi+_H_U1`q|mh z-qzaE+|<}mUsqdGT~%38URGLCTvS+)pO>4Hot2r9o|c-DoCHoxh>weniH?el2oDPl z2@VPj@c;4M@7q^jA8#*D4|g|L7iT9&2YWkP8*3{|3v)A56JsMo1ARSR9c?X54RtkD z6=kI_iVE^_vNFFH2+Rci@+{e<| z;ve{vI6Bx_JD8J5$w-pe8{3+@Kry`UAnzvj2NV<{1nLb5C|#S|6NrdSr#D=i*B6RG zE}JP`mp>5s$=CY)u5ypv{AY3yY8&i6dkg_+@~6Z)p0bbXx-135%^Ck2un~ekTiL(>4;;#Tq{vdnC4l;BmurFtDXrJ|KP-EFkf6 zMdHE@DpgL^w5Hk&B|_u`-1I~eA9v^J5=AVH8Ow}NYwD!nGP$}8b_7RviM^!c?ttOkN(;Ej~rNW zvt*nZd)^6zhGkU-uo{&%>c{jIvVjeS{M`x3L{BmJW8}@h*wTk288&@}Ni3~2Tb9qd zYEywNf=yp8@tTkf+i0e(hQVp{H$C%kr35t&q=O_@3-*VffUQoZ|DdJJb|=TkuVxG1 zL=5{kUxY=d5I3#OhElYRC7rcQx8NezvQ12ug}7nmn@%Ji-#Jt-I;tkhUO!q9Wm;C@ z%EMS1j3yEc<6AQ)K1U~(-2o;%bB1Zd85!K?HteOb=_){hmJY^{5TB??p@N9`q!?8N zn@>)R*C#~2OqOzV>D_5YeCpJGe*zsxgVIGJJV>ba;)mu$E1VLtEC^YOuq5vH~O3 zY}TS_gvrmSd^o?SDR3^fw^R($g~&8GKV$GcE)FeIQ6In5sla;Qpg*nWCP~{s@6lHV zQ+<8o6T$wDW=M|3;DR$k9jASVkWWDTFOh~ar*OKt%a#C7T1#d74#;I+cqCNdv5dcy z2L?Z^b2F@hDQ`J!Cp~r$ET0t(XM0Q2K&~bhxf$<8Rv^?xnq_u3>v|;do!m%VHC-Vh zF;LVtF9#Y5Z6Ua&S|FK;L=8prFna7Yaw{8&zo$`plvyOMRd69!)wFM-7JM6dN+^!U zu{O!<_M_-yw~^XyZ^p=C%BLFtOBkKGu{^9}91yKJbWB9nITKaS?#wRi$eh9WqZ$Q# zZ{-hG6XHaS=Axoh84CzJQa5|HWeNN#8Z7E;WdH4bzL~<6mGkp9>@Yi!jOx%wY9(bA z9s1`AgLwdRJ{*ER*N4k*Q;5{dX__>TO&a0dUvAeTksp<5?Q_ZLljwjlFc+y0oaRb0e^?8M_&5KE-{Cz$)O#*Y17FsD!F$R=~ z3ajVYCOYB@E@9y{Oq!Z(w#%R}lG<%zB&`gF;x$JwEL7yzGF(QFq0#0SXdNy50;mdi zPM%#Cx#)E=kY5?VtoJtAKE8Vh^)QLBKRTSc`;a~IHi~3Bnsi=#d_#z;Og#QvV)7iB zU~PE9xta2dCB!5w;dU7(T&5z`0aL3HYo%jIR95HSPL7TsL9rzYE4zySFcRGM$*S-| z_D;T3v+)Rn^5P)W1WYXb+LY3QCS!|lkAldDEMLRpkb6t6+1O9pMUed?w||#f*Y74W zgvK<6ZUIB&Z||5aIE%RnAQ%Ux;BB@oTZGy%oS>HqNYi`9syj z%c5(YkK-em#|kJr^n0k(^5{%lKF;ERkNkZ7BPX>MqkE|){7YFpgXJ{TyRv~`SJ^?6 zk9>BG5C-e#WSV?sMh^6F{4*YetS<`NZYl0nf^$u)X+N7eD0%^3!U1~slz*CioTX(_ zD@s>%G+Xxs?43VDW6|TEwr^AJnBk#pT+r>~1&KMhXN+x*PLI@?1)r}Xo~>Usx3ulh zUD(G4BtI`Kb?u-zo&Cwz|BF~|QUa^>W9@kadPtL=fpFtn&$Eoh#Zo5{?`bBkyz!jJ z`yMhmYD7GqjI^g2kBc7dFV?R=GCR?~SamT<1@p_|?>x8vM4jLOzIOHL zeKOBrnq#-R_>^$^?u{nN^+6QVn(k>poQL@8xX<>DV zXbHIaMp6bWgWk2WjzstbCjc337|?hVaCA8}+SRDQYA+kFjU4N}+Yuqa>ep zcFPyPw)ogEaVl2UM|KUZXC?)@W=Nm(UgJ%4 z?eZ?om$p&O$=l?PmjjmAwsA|v-|1^Fhdfhllb(~mv!7p%L_W4phbsQbCwM)U{?b01 zGWn;N|Mf&Ewtc=t(Y*u#_PLYh9!a1! z&d&_TvKS#Ho@-h!V?ByXA#y^;lWi=WDd3SQo*!u_>q`}lm(Akiq?}ApY`{nLPPCaR zRgMk0drBxrYm97D;$R3>TFpM=y2L>e3FIKJB`i?+2Y(JYy7np9z!ZC0- z>vj3XCo|g3lq_|J{pK44dNXN^Vi{LUR4zJi78VYiUX0^X?D&fr`ZLksU!KfHDaT%} z-Je+o$OMiS+qu-)clmHrUyWi`vqmyplJ)VxYZ>3vg@L%4QF~dQ)aCu+sE-r@V z9==6&anDS#m*g-)9&4VSPvnHTpHJ15I`kTg8kN+pJ$1j)G`yCZeL2~nd{^VjY>W30?kdI6fSHNXa~W zqC_QAu{n@}Y1;`wXZ3@!;=>B?0n+eI*Y77#2YGGS%v&HP7l%`gmg*Xrhcj@?&yrmx z=&QIT{=m~oTcQU|&mN>iC>j|yEpQFmG`IDV)YNFJ@Q6n3!mm>@=853Zb16pCd+Vg z+C{utykR4=DNi!EGN*~eYCtjkB{b@?<~uEkffBs6`I2Z`9Y>vwPpcw^;*z7`T` zUzjJ6Bu|`aHL5LBmN?POK9yQiPmp6kux_1+s9VH65loBwnUjD*Im9e18WY-G{1 zivv?oZiG9_mVfZ238wtZ>F9EUC))d|Y6@U3b-@yCSXB@w9|Fzf*%qXWP`^NLBNK_VT%h2n zOiUAU(!?||j0YJpCeBVCMam!auB}`^3ryq@bC?WGrx^X!KY*s{Q{?rb!vA4i1BP<( z1U3;&#ZpwJn8qTfm!6p2b9;nisg)p82;oPs=r3h{BRNo7KT{c0D^et=Z_pTCJ&4>L z8St(S)nUXp3EQWs<3StK4zFCIA4TH){Kr3AZcYon;xjnGE-~*m$Pg#=x`q-?B_V-f zKcD9G!6*XRD3O0Oavt*2|S zH_<$dI93XJX5-{9_@b(jzI+Z=YG{@j`4S4w$`c^8T40Dx>27+unKd+%z=C{Muk#*e zI>k_yY%*hfd+|zCFP(B1r(n=HBV|I(YVxIY$ z=}_2aqR=-|Wg*Q^)ARSwk6&Y{wqDTlk|kbe8pm}F$}T-gAIVw#B@Qdg)R~RpglrAk z_AqV_JsKErDwWGhRo+fD+f0A&1f!uuc=Q)>*q z=Jn~;#W^+~fOnK6+FUM^#&H7v73W5Kk*m-RSb5v?wN(Bl7n%m zZ!cZr!fBD8N8O39x?JCv0=X1@a-GcO-Z#4$)afc|b}e`3t~wF)UfQW*%TT#D;;Z?* zq@vegQ@UoYQL!R29->N|v#~jhSGtPR|E0wvbSt;eKBaIO z;xzfqF#8_0N66WgrgEJbKM{O+r}IU&bdM{DNzt9-4qc(Wz< ztkTwc?=lUD!0Q5$oH+ej;@!F?EN{6+{CRnNJ_Rv zOKRLk)L3DErEtm1&|kY$jGo<@!1F7}A`QLSZC}ZD(b;-9(a-TH=2o!zxxO*}TICk| zXWu!4IrFO3>~UJyt2ko+^)T6wH?;4f;EQm_n7+_6*k;aVC?%Y;hs)R3`?q`2`SEQE zbp9Auj7`4q<68BKj3WA^#maa66>*O?MOwqZ$*my|%ScZ_)mauwnv~R`+g3QX}ZuGihUEG zWWpBe6MQZwRj|(cPT-7ll7a=$pyinPKE!Pe+lm!3gd^hrgNoH35%Cku;}860QO-IN zf=7Q6KmZv}0EJcnl~({wY5-kp0K;+s(_;V&AdrnGkV7kw%PWv4HIT10P+&Pw=rK?P z5Cq~064wfn^a_&J0(|)J|H)meD;SC;5sLuI)bBEy^8lYFjovjdC|=Vi;`}&ep)KuoJbd|sAjh= z@(TCZFV^dT7))d|$TqiXZzbV3kWkA01`%JSb$ad|24_HiU4HfcYn2Z7+lV+bly>5z zWDmv9Z`o;c2bMOvZ6^EZdHWWwRL|)!D|k!9lqKoYk8z~qZBw|efhADjH`q_cV8K%3 zplk)NIA_8hwM;L(Y)>p5?>wtrH9D2Syr2fWmJJD=He5nwtET0AHM-N*{BN=DO$91M z=;CXXr^*SKn$u}1d*Oy?ZTaACQr<5_H4$_Y#+mSr+$H!q?b7nj07%a`Ecmay?6Y9 zj;oovMNqg`;G~JUvzy0jQL4L_7M#NJY5ONUZ7iC+9h{NrI>j6bh;_kg6^%{n+aWt` zNl~Oh12jsYDslEEt}+ut^ zsorkvOV&0^pO>Rjqk#uf-Psm#tID;0k4JKI_fuK8TT{%?&$U9d&9FHDny#(*cFD?t z$HmWxZBWYG2-+Iu2YR6p`bNap4_stMzx_cif+f|3_;LrMN1fkEf`0VEud;16dJzhQ zP-}p`4oJJ`RE?fd2eI3)Hc=Jp-;;c7$7Bk7yDJ85Pt;DYYmH@~<2Lm;!I&WkeAvvy z5`3aLlmK^cE(_HXfBxAok(md(m(VOkIv)5n6-)C(+!aYvew*(V8{deI9rSnPi=};A z(AuSC5OOi>H=c2^8(6LodTVo32-2qoq*i0G5=JSXF|y6>OUbGuyh8smGDFMTAAJ6l zU+kI+wqs(rKWHlT;!w$NBY}zoDDOq0y z`b7yt@2u4$Z6g{+v=qviK~oS^n#?FRA6`?Dn0@}IVLdW`79*oxv&Cf2nL7CDWneLQ zb_PU9$77wp2y0y1;`URvn)e$$)*dVk$UY$jZ{d^rt>0l>hsWX-C>)n2bJFHjxCjRXH9{vs=khV&m?`i#oC0R za=q%=&V7x?2*_V(d-@y}HD3bS6#Z=LqS0?@%G_9-RpIYz#gu_k7V4OO7L@C>T-HM31UE>g0jpwKD8>-O=EZ{Mt zpInZFYot5Q8ms{wI|aCU8fhLUi{Gb)eqNH>dFGq9co9S+7LG7HuT`J|Lo}b)du#cU+a#s&@7MhdMG3)cz>W%yOLaHh9 zGXh;?WsvqL7Ah{0e;mn=k*}t?+Sb(wF&7`T9zHREr+eU`o)1ZhJLW6`70WB`kB~Gu zmB_{B9fiD4(QdqJ=$wK2fAhaByyX3HiFX|5qnfS*RsA@HvZ^3$G5(h19de!l!b>qwIpcMZjfn z_jvZWZ9a3wi)~fIaHU+_9h)eo1Xk~is(sK|zd{?0P{$IVVWy|xk2Lubr(S66h`w*C znLo>>0_SemZ#JWRE1iX}NfrcfCBIo>nZ2ZQc&n(vjaMk~cCSyN>!JiA8wXZ{@A~L2q`SU$&np z!v-q{1{vEvd%vDx*ems!3Ng)ZZM0UseQgAEElqhg+ypL=`}e5g^j7$;JDr-r}pHz=t?8JqkZ@K9i>|7e^O>xsC>$1~Gm_Gd@Y zk@Y+B4e>82?_$qyeB|x}pKTe}U$E zS^C{Ndqab%CE|U{L%r93d(66h-(s~Xxd;87d9;w7{GO7Jo6!F>qx~(ije&`<8wd|Qb`~qj3Dz$s)5A>jbpQ3^DGa&FXHvIwtq3pbS{F?HknGN$*GBr zp{FW{zMgUKG^wLD$WW8z0s4;a(Q>Pu`2mZl!;4XZ4h}h7ZB5Jipfn{#w)0HGY9}Wx zK4cL8rer@RXD$Z)x%PChGKjwBl9u27C|Kw-X<%~ww4&IRPlAakOY>?%1`9TQVra8j>(jJ za$YChR&Q7IU~w=Sj8`01EVd8>citreU9Le2YK=HVN|B|^#E4|0vxz`6Mmb4EeD;E6 z#C&(`kS-*V`f8^PB)0?LW@nk49s|n2U4#!_{c+31<(u$Hv!EgaL@f7!ZYiU{8_{wJ ziQuswtPf(LEVFKw({C1teMq3~m&$R$q}rZo06K%|c<3rEU3!m=;M}};n~IUX13S;0 z0wqU;jg5h_@_VFFAW}goMj1)@u=TloV%;gqAAcGO9WpTou+JTN8Kib&<%-9Iof7DZ_`Y&aa}B9M5{mjE#|V(+=%E?s-Eue3X_pF*e@qCr&7!Lj>+1WOInB%>2xrcQV;V+kSM5sI^+olF98k(US2P25<2J;DLUHM9o5K97B%rpEoCun z7-WAde-T;HC|?;Q1=AoedIk$;hTfI#g-Yza@+7*5&#Ox#YTN^ARWtPNfyA@3w-V^# zMK(C{5y7L&1?=fGY^P}?Wf)`~JuFgc5{=kowvUPN%E%FMkrR272gnY3tU^wet0A9; z+v73glh|*FR*@fvFGn!prSQfmzu^wNIy;DwMjlitiVW#A2Z~SxYB#HCkJkp-z+|cw zt_9E%(%F%iPVVcXlv$@MxHKfIXR0!td6AmZ25mO1Sx$he5wXUkftb$`- zd(d2#%LcPR>XmvDG%J%fYIQ`MmG&xU2b;2;2li^^$P)AhH+yQ`rwcV|U(Gab+5z?L zO|kpd@A*Hrh0;xR=09V2hIuO5{SL9^&Dsi<2=st(9gXj{3dhEuTeYWznwtunCT6Wj zQCdrq7j%4zY;F3Wr`AktnyWV|!l}-(T3s58YZWS8sO3~mFIDT|4=PR1(${|x9qBh! z?OR{8Z|ohqw@-4~+~kYJSN9$^bf8t+2p(iKYiJhq>pMzttZfLTYqagB;e0ELH1v~A z;Z8kZifOdj+zKeHSrts8!=hKYtBlqW(ueVvK1?QI z5i{elpGL7RLUVi0)ZZS?uk9}dD5(#^yTbj zsu9AbLRoZmG;-xycshdVO=mr&v>86?S_5=}_1taQuzbziD`54}K~9v1i}eZuNBFt& zcWal)ItGE2YoXDJ(%Oy?9A2bc{Y9sY#U%g0DjO-sOucTS!gMf|TQymg>eaB)MR*Zn zFwuTFh?RDdzv$J{bTLIQXv(njyJ4tRJzud)Vclw*?lY;bzPzsY%~AaUS&kOZ(NJ4o zo^32c3fWPtV>HB(_|2P7d;}F@gyhZ5|M$UiPf{Q$(#-4ev8Ai%RN&Y58%v4CQ9A0o zhn(-iBTI40ZQyMZWfg6+ZU46ei);`KU#c9-C@aEDP)Q#3rV&{Jk4bocniV(zIVlc= z^g3{0EcTvyn3v_je~-TKrY{$SHD4eu1tU}i3W80}*47a{HyTFv}2EkRu-n$#54;xrBLs=216 zv`eoHsqFXl0xOR`ZRy!;(R^x(fC{iuEXExwkEOe%M}M*1Hx;i@I)d)&9t5VZwLNq_ zFL)bv5d5rz55Zb)RKb*H&!Y9keo6r?3*M{d&U>;RQ$HjpWwnupvny)q2}-3` za&Z;p4#El+8$K`+AS#1QrWahx+eX{FS!`!i{+wj=Zpg}&m-H%4_4n^|Tn%@W+Y)qR zv&vjVYk_^ryULI;*X%3evuJ$2D$du>72j6M{fF`pL}!&hz}ozkfaHW zVNu!FsKn=w@Z%d&%qczVQYyNg8YepF6xORu$uAg|KHt3Z7 zfSF9u{#)tH{Zf_s%e3ENu~Ch`gKK->sn^jn_MaAF$}o!deELBSzYw0`KPJBR97tx7 zJrjppJm$tfH2RFv{=QwzXjO;Z+kO!KRjG927;4C4tfhtwL0V>uWGS{ayz)w3uF1E0 z67Dlfs{GM`WJ(PJ=e^_s zA^CZglc_J#B$!l_BZ+|EQu%ndKdLbi3WWwF!7TN4n zX>*3f7VZ&d2`+&?-bWj~4(6hH2%W zmSm(A6FEN%Xi-G^$Xpf4mDQP{-5dN>S))iS*v_Q2#c26pr#Hi4^sG($9jV#0Dxy54 z(@3yZR=Eo6#t8Y$P)XSHOPxh{n9uAf+!5}`nuse5@$WPH09L+`>*`!4&J2x2q(E#i zNo52a+Bp!Kc3KZZbsPq5Jt!TeHDaE$*?;W^2w5!yowK1u6mr2E*rPLH5LfUen9+6- zb~xE(zR^U2k>ue?XJb{em6w4Ae#vHi8U9`=D%#FILk@3+YAIL0=+Ys_w=_T_qH0w? z+CA~Cb2-?vLx;DmtZr?IKJzssYdZe*AQPF{L4Rs`9}u*_6N&k zYuLXv{v(0guT0A|!v0r*1Ng@Kip#0`iPyo*E88S=UVT+3wV|T&q+s6UegrI5kWiEf zyT2S6o$ZY)8$;Fbu$T2^`^~HYkbXf;W@xAm$?3;e?CnSMVYX!SSVQPkf*VgJ4!?*b zkpnuRx(WeR0~d`Szdz%uRt`H^%ZY>c(!Tq*jay(gkSdTB9CCI1op6e2$UKri;#>PW z={4Dq{V;wc^!#_q10C^yVlItEsW8YvZvU!e1+dGmr~b=aVmm|u>feuo=u(Q}BlVQB zN%DH5nJY7K6B%6Ar|WGPfm1m`-pGV}7&J=x(w_LQX^my$MWR`MbS%g#*#i++3~r0ZK3uRZk_S#li}a<`;A5_N&#Z zN6iYF)bK0Fd$aOY=?_zVNqJ;j6CBo?C7rsaTG^fLx2sK_z4{|6EpBJqeUK{$@6S}3 z{k>v7B}`pEy%wp)xCd!-_=k@#f1f=Nv5`#}LLMSu_^CT(`^2wY?(X@6WM+ie!b+&q}3c@{t)c2wV zn3DDk`0r`V?1lLbcH^X<+>GL-!!HX(TEu618Yw0h+*WieWs+K7$~lS;`WK}Izbo+{i@kN~kxRIqLRgglYSS%xG7 zgr5M-C<%0iMI{EVs{2MY!_s&~bXiF=H3DyX$|S!!!7|}2Oq4XhR=$SB&JBa~$$iwR=*jK1%6g-RggaGO-< zrhR<+08E0`r&Adzp)n#LEug)p^N!{$m-J3a=d$a)GIp^(E5xgyun3E^7ol;wzULQQ zG0R0G6N_DL4dbSCdHGOpt^ZG0gBPbZ+R_e(Kov(k4 zO2>vJKW>Lux~umi(y-e_d;cuLFr{j(ei#z|H5YJ#fQmK}bo<>A%A)f(Rcv`t37x=Q zb3!(YWA7OKym#)NP-po*RYBBES4lQ~e;n5Vs1zfp7wQ`*swLBLYTsb>^iS;C(mlL| zfKyeN!y-r;f;?ZfrBA1NS1!K*jmSH)GVJ0}C$}IwAP_i>E?Kq)%$N7fEXJu)A($qN zwGpR#?&%Ih`I?}>=9RKEbHa2-le{AIgGcnH%m>m~tB&w?)03?4Ady(MK2Ci_#Cuh(-bT%U zE5>t0*g50!7^PSwQY0~dQ6q%N!Qb`>aOf56nkqy+$u&FSRzoNLBGId#v(Cr+g5@U!muygPP2cyUh+cSZ7v#IbBR^s&G^O=Od zQ4Ez3Z3aDf#S_#LenlFoBl(PD|0#@imD57bwaRLoB{MUnJSN4Pt>z2AE%s$E9vlT| zDiJz5tDw>AE`3rKKbTKI58o-pOi&NJsL;g+NkiS#%UNfYnGNj4jRs&BPyRWy z;O%HlKWVImA+&el^VNEAQ>`qoxxDFQds!ZEl?Wh4eSdbG2cAiC7iYhM_obl@j!2sfi_mPc@NPBYeo6jp4O z!?*mrEIRYtK_R`tO6*E*yb?K#G`v<~sC!kwYLF$^COugydtqepXxGq$BM0;3pkO-A zt{LE=J(Bm!T)Wx-HuNxG?pYeS4%V)xKo4Bz2R7p=^VpfZEROdhWXm`^sj8ng9&%Nl zT-%99nb5UKnsFauMQcZ8;aOU8!1ct$8L#hZ?O0SO-Nz`KMD1@A6_097)+e`&A29j; z9W%O@7Wp3?8A(ME-*0pL+Xk|NYM~2Fr4U8f{>kKU*F*zlMwqyLH+KeZt9ip zHO7J8gGc4%S56N?)6_44Pi+kbU@=Z+&Iw$X)1}G-tih*tH@n*JNpwFMdDhO`J87vY z2|Hc;Ck7OB6(@bz`VPi_lf@8xW7$4wt}q<9`MVt2ZB6Vk`WlLHgt|`qC#%FNd?RQl&i6XE4e6H;JLH}GJ?gTff z3BloEULXM9Y(R}r!-~v;|Z zuwauQO+J}GqOkX}Sj@xuke@=JOXcX+>VBAalZpQNf1p~dAj zuQ~;vzPqEFY}90BUZC_-#*~ZJ4yq56rLkQU84~UB*GkpHgLWae*ku_fCyg^=2wn=7 z9#mV|i@aAUvCyuas*s$1=2jGvhF1GeJ!sPcF3NKD@O@#Wm8TGYSvJYd2bkt11A0&s z!S#+w3zz-zLDd;AeRUb_v`c^ci3z_Q@>TDdN@%cbxvjj{c033_v}H_7F>px_W|lk$Fa6fr?BfX!{6RB7fd z0@MS|wX{_^JhA5_gbw=GV*TpnPm$}H-~Ct!8>X3`IIY}*D8TM*-hEG*VcS`WXN8PkLC{7IrP>)t5I7_u2>Vky30pU*<9sCC&@$3p~v45xat->(;RACX=)g~<_SWbCnd zmIdE@)apl0etWrRkVCs*@n>IdP`Tzy!W8xW7`Xi&dEr9hlXvFnT@?vw$7iaIlZFxzFeJ5ceHvQ}HCpy0yMFN0E$#9pl}DmyuLuh$4)Rq~hn(}{iA*!D3&ku1?ifUZg!jKfke?@Js>+PSDv9yiq;h`A`+8hIu z4Nwc|Q;Vj{sQCu;f8;!ISA^NP5mo?c<7-mPTmE!X-vvtxITzCy-NmYItm8L?*(m67 z;UHq{(WoMXm#gP}5?mM0F_S;x&>H!ZZvbatx(-GYg2V?4zu=Hj(+M#xV#AXG@bvbc zW<@-biaqa+AF_Q~zZisb^zg3>tx$ZKXmyKoC5)EmLYnw4URD$<5k+eZrPjq@E9Qf9 zo?gyf(~G{ynY#g5hgYPHYoSf9D?f-NEP(c(zx6jtcfDveOQWkL6ixpPOtey$Sl#L@ zZpzTbG3=qFDJYj|<;Rv4ebtKNY(7yDn5bfL9#U=5`Q4FAaW3y?KECI%6vH$+Z;(Zw zL)oNg7!w@_hV_~B^r!H$bgKzV1?Y>H$H=N@Qp)P$;vX~pmL1P9pHj@{>}*nOKR!t} z_*}WEmsFV=8~&-ttbXSuBr>EsJ@31}wTxBKHdCYkrp&;zPK~jb?=xYF%UF0yaBjE^ zm5+^UjqeOfBCevdX%RZ(N}Og$P5f)drtDsu40>pDPu2bv()am&`htdd+KEcP6!C`j z!6^kX&Jsw1LJ*jjr7Ps8O zRok5QXf_>vaXs%_X6qZ`+*tk36@Oxd70xaCeqo@RX4AUvl0r+kvw=&bzPPpX!rwOP zm|+OIU0G^yeZq;kJLoiQQ_Q|Hy6sY@#(l9cM!EHu=47miGMeU>L?1ptzw;$-)}En? z<8(Q$dE-j!f}!tleb2pYKB0#w|7Rb?fkl#wVYQUMycvRr=gBLX^|Qce2yi3U?(ov!Km{d5CiakB_Bn(Q}bpv1?cmcpd6t^2)8T^JX&s*u#AH z*QeVAR};QDZLmkn+y)3&<$19WF#>%*A&!|z#Iu12-l!qF5K)n+%mhT@4xcE{885f7 zN|_jif(SjjCL2k$xm=Y@tA*3F5@55(xeX5eM6lY3ti*!Tp>~rKQhW3;SM^4l&V|PS zy>gsE{a4bb*EO8;@tz^crsD##j)8Ex}muz5gEl`OQc*f>pRey2S%jQdcv<4GJ{sz6NA zC>Mwnji5Cj;c|fk-b829;f!~RY2BnuDCNhhs+2*f^OD_A$YRlNJYkypH1gM@s+5XG z6Q}QyG+=VF2n-0q#C_J)ujIPmlyV=?R=^xaK+2{`DFfT%k|jw;W1}1Yi>Mu z1&N#PqALS8B2TzpU>Wnwe5$a0ExtSd;pC@MA6nmEFVFWtJu4^EcuDh~fiEP9Sz+1kVg34fj z0-sUdS>dH7ggwQtr-x?J!uzzVQXz9TjX!LUF6a#fD#W84+d)T8(Xos1dP2ulhVNg5 z$B~#m1w;kd33nZ_e-89pHaH3F4#=6Ta;y>3KBxXmX=Qc5o>_cro+$_k zNUGNR^VA>FBF4S4NbCY;OwOW}sOKNnpL-n4C2jELDQSSxj%9mGBL#EG{P6onZNYa$JIc>2TuDQ9Fa16cFmt)w6KMLRSUipdY zoFnx>CEL9(lDI+WvY(czl1$+`^yse9SP1vF?4^ge_0>36wiZ82%jObJRFTgN(8SnQ zeeTLQ5ArTc{?0i*)~^|(VVt9amdo?G(|0m4CV(XKWqb%@rb)5ad<9Nkljh6rJy7Sc zj7exvF!TOKQ6=mM0lR&Yx?sQ$=Az8!)Rso%5;Hkwd5%qDU9O`QJ9$@%ggg9VocDJ_ zmdT+Nw8b*T_YKPUE^Kk_#f-w-cBN zKm*ssYAT{{F2`T7Ucwd*$>Z*-dx^2hOF9#mm?)&@X~18GuKP?>c`?=~ld1jcz09v= zewLx7b+{m{UU9DWl*Xhn=949BLyzALOeqCb%ZJ;xNaohl^1Djzw z6buVDsY^=LT2LGVZshPAPK1!xNl|$*i_1j8C$%NR7J74|Wv!+Ttk=VR_YNyL)fnUEpzo!{=2Y1{hxH)_YeQ?f58GiJaL7EO5)K<>_-3ls23WmuuuPeFrAB zEVNK}+r7wsxL6O%n@?1Wy=s}Sx4FRU3#a2a#dca^F3cdmVC~j}>17VK>bCakS&&FR zq4~H>jKl*t5~f#DKgU!vHtghTf54(hDvq42CD&w80~0TDorrH9uVPCw?^yUeR%(~M z!_i3O6h$$>=I3sI>(_}A!rVIR(mOo<&0h52f6kU9wm%h>8!-_ zCYJ9;2_j6W2~^jrVnRRH7NHo4UJkGLO3D%eQb<0?lELZdk{bf^vYze-r@&OstWA6m zjYg4&JOsuEuj2+Xf|pJ6NN13XBMk8c<;84sF3ted^DrdI6n;dwSp?XV`z5jbljkKi zzD=P3POO77L~HV<0S&X+k0D#t`n9UGED`0xvHB_IqS`uE9M18*a+LtS%7b05nxOjl zQbqt1TwNv2VmNWxXyfNuJ?$X<^k-=9= zSLNr78Lb|1R$_U(RSMl(_NXlRhr-Aje$)I@MP-~>F%Z;rY;mXfv}B^&a*Ezbhe~)1 ze4KBb!joqM6r^e@p447EkoKY7(Z)QsYB;WeICAQ%0iE`mL)s1Xyi=64klZvsYJWNI zVu;(H$}uj5YMu%p;oJT6Q7o_9aB_Vz{fI19(||E2cFgHwjrJFDgI_SVRlsQKz%vw} z$J7%d?3j;SBhb+w4owo%Xl<2{Ost|Bx2MQ$nZ=Qk|GgsDoUEjiYJ#ksz{CBDZItPg zzh$c8=C6(@3S{yVD!+f*Pdgxptge@p0VDM`t~`19q6K2Yt6mgtS6FJ#q@BB>-r7Z@ zY(rd3b%v(N<=~R1k&b0XtK~!|K~#t?TfB@xSe&MHsj(DmJ^N? zDGu_v3%9XTshdv~zyWjkm6VwLC6=ThL||}uPoq>9W=13;#KA4D}_fU`wN_j_! z6*}Gz%Ox^|)J^W`_q$3A=53;CU zs*1ICXtXvW{-t3O%fZae?~G{bP+A~-N2-;lYR&_QRuG$ZfvsJMZbM5q5(>YdCbzk9 zDA5?mXH{a2iCoL-O>_C1YXZAyJ^nK=uK1Fdc~;3%ZjV`oKJuaK6B;vGLG_MWPG)g5 zoD&$~*=S(jtB$j`mU;7sv47J`(m&ifr+jy;G2Mj~zh(GeV?2gyRivZO)gks|&Duu(oiv?ck0%8rV9eFOm{)=daBPmult;An6hQV_Y9 z#k*UlqR6g%5Sj-Y#p#9Sz8_r~Ev{t=8qpUn_U7sNqeH5e=uZff+-Xsw_{49OV=6bQ zSqA1-9Ajrwe6sQ||2<9DOak$L%fn+rwV3}5Pt3Fz;vW`QM!ms2d7RSe96@(_TF8gR zH3bli^1R{p5vKpJxEg(Ex*Ek8Uq0n4G<|r}S?Cl-CbcN1>Wm=GAS8arr6#f&VHrj3 zIt_M<3>Vk8^fJS4jkd$SO|OQ%?;)_L zwH!O?wLhHYDKYS)_X*qXgh34Ug8EwbcD9G!5i{%Ydp{_!jKzRiGF}=r|B>va9*-MY>)|$5_G`S zG>AxR>~jDBI)+R|l|pQAsLw#!8fgMmP)he zBAw<-4vwq_3zq*P4e!J~ZJwfrgy5p9e#xjmVP`6!BY zO=-1ewOgJfD6V02G0f4k(~*+CilXzQ`-%BPfeo;pBS-H|{oB^DVE&$IvAIIHQL*E`Etk|br}4Akt>-xszAm4eWSk?*J1 zFB3b->zxiG-9a2a(7hq$G#)u3vZzqx2b9&1#z?^BMI=}~AAadnleB*j?R@Cm#)V~bM z3a5%BgF?@1hrVN0oySl%TmGBWReS|#BLba^&0bOS?lI1+VPR(1FPoHW zM_}F8O^BzyX)f^xLZ%6r%RbFbn6h@@FzOqof&49_U#mTfT(!^AmS~HAcUtfUamVSx zW>iUD`?mOmStp^d9J~$l^clS{mk{%j@&AM4vm;va9~|0K$QYUrPi*vsQyct}X3;>? zcvQYe0{O|@*2ek`v+B@{5n6Oo{P`M}r=Z1_+%D?#EuFH2+=%fPoCnR>#>NN?lw5i< zKY&5vv#8(>viO{EPle}mt=ZpogABRcwAze1vaM>vnb?mBQ>%XS!olw;Cv|aKtMU5= zx|$cy+Tp}$1FxB*#ZiUE5VIFs|H8~qm~@gMeK7mg0;{ugY5uJ682>V~inBWEe|t0< z_+L>#$dx+!pP+8Q`2E0tP{4iMDf58>c99Ph@RUt_px{GC`>(V^I11T+^{RZJV8_QD zq7i{zsKBS|R;^V*+MvKDr1nF--l&iIgm|KKy$pM%Kuh1NZmYxPXfj{1qkgByM~i>v z2amaGW5{3OnH-+RgMMJmtmt&-y=pxd=GRa`Uv8@yFo%WqHo?RAD1aw?wO5E)rI8v~ zbE@CfdY&Kh8H|gb^eB?vJvzm(V#Ck+^CuGBhbf&hw4IGoA#qo|SWy8KH^2=Pn`${YH1=WF zJZH|o{MM;yG7n)OX}DKtk(PPuTsO6PTc$V;LwQ4M-iV)ufy*P%j2YAcrpzM!@s(EA zEu^kY$?sa1@>RyON(6`aR{<{45%rh$mnhd{dKR<td6FkG#{ zwk6A}PesVUB#N_r+lB*8AjehrZ89=N7d+<`ZqH$aHul82{6bR=5&IeO+dx~Jdhb94 z&=3i>(VX48(Q$)JXsU;LZz8KKor#$NTJ(D|v&UN-DgLyN*Y*O!xwagrs9Ig8C@UM9 zX9~4*yX&Ax5HlZ;+UD%QiZ&3&`0V%P6ujLlX=6kz_cHoN93(rBX8GNGZg3W%b(!e& zJppRC=V`ey59#7j%E|pwu0Vr%Vymw zY|FLpnk!QfDiQp}6M-@gVtdG*tte zR`a0)8$}D?(!A@xNz@xn`w0G}l4!!i!MPJDXiBstDhsN>SxKrj>+vCyRZg>aG2R15 z{RhcG_=PCBKgCGFj}_F-m@$eVGh8W+VSHsSb8SN^0D+qfz#8DsQr%ZXict4Y!7X#2xUur-7Xg*P^gD_`BlRtkM!knBT%PCE&^y>NoEsuJLi-X z6273U9DEYT`mE1wPH=20?NZzGF(GYs&<&-!H`5}x=GqEIKO}=*Cl_$j|FOT2lvm6(M)mGz# z3vZ(DAqBq-syeX#BW?c=YYDu+#+;uUwsf8@*K z@rlh2U(wF?%$Y`!p2u^3+7pO8treoyQHJ89pSv;>^C(wvR~A8-_*?<4F)1IdZgnA? z4bLOuB`Lx@idHB}+I?sfb7JY)>qmytLemQmsXIJ#c|oycGWm{HpVOxClbcp1BAnc* zmd~LQ{5r_Bn&CGsm4fw$F;a!5MA@kO4Zc?|{g98RvvMUpMw-NBQND74?Pj(pK@Ojg z$4}c1*vqZpXVBnkFEVNSC?aeRCFp##PSKTUOXmBq!e$svmAyxhC%Is)#nyO}1s2$c za8(jG;S`APq_b(s8t|O*30c&Vt3AeMYoH*fH;iP;!mDqj6L*w!8g1B-q-`epWt3+b z?ZJO$6uF>GhYE61cXD~7z94Qd8_%^s;4mmXpJ1{GWj#Qh&(scGRCm%XjmH?#AUAaE z;KKcp((NO>aMvvx1y%nQztp>VoO>;9d+Si)4rMPb^~42xgqDdXw+-{RdOCFhx__qP zV5jwqmEo|qOG{~0W<`fB$BoNdUi1cX3#fxIx5)_@eT1neomXe28-Zu5dyMqUi%$rchv-uvvUXyx&g>hdWsCi>=33-BKS|ITwp?cnbJb+UqWr&e?TusJd@Vq zxnuRe>d^j2kmG*|DOybC$$zZBa{ss3Hk#D5i4*qJmrM9qf2~xFl&CxDH?3<_tMrAn zDZE^0Hmh}U|AB6+{lNBI0b2#wRJ+Ud@iGH7qei>M9~N~rhaaNX5Qc*)YnWwgFp^A# zgOBp;Y+3WU%zAd)-2H4W4|ebGuUBsCnL>#gjJnQ-+3yu<{sn!)&sJ*!ietNf+jX0O z(L4MF$hjT&)!$Qu{0`)1XgWP@6UBmhv-rH=_$?Xk2K8NP^h)1{;J)Pl_9Wyqtn!8q zC*wXpG`Pgy=?RD<;QSQ8+5B%Dkq}NdoK*iFQbyuXdHqcGHOX-wCK&7HCxu8f+v|$L zB4Z9Yq>`X(CtZAJx)n9^SarQKBoXm% zMWc!SR@z_Ux#=e;(B?)WO68WAPPHQJ8(X0LIBn15(klAI;i4%M&n-hKQ!>{hzqPrL z`@cat22ej*rJ_?kzBR6WC_7AaF=_`u=~N&gmARw+Ibub;%dR|u95^GwRFA*?4hi}X z-2{1vp`om{amHz`|v`R+WDTzWI0}xNt=M%E_*7&c*$3*nMiA3*O*BrAJXu40u0HDQ*ua2 zbTQgGD6D^oLUXzseU7HtFhi!~Hg2l;YM+Ph&0cpoYDI>&8B{cCRg6~}$;bgGRMw`| zRAC`&tvzPfgMip>{;mDlc4q9GD`|EY_CmKoO(cDcah|$Z$tWrZC2U^BqVaN7;HpdP zk9rt`M@cU{to_|)KRleqTDza*sE9xV~Sj`0(m=6gLnLl~xt5sd#N(la^g1AP4g~ zkTbdD{2RQW*Ssr!V!sYOO`0si^FmS+GWw461^G!onxZ&1*@Z5$td|Qm7*LkGLVA!t zt2>r?o?^~O7bX8FriT8#Hj##(a*{0ro~RIq7>sctwLF|4u~b&V02_nGg>8yYm!m_a z!8F>Vlqg&m5I1MMAxB@)nDgzutE8;ai{hzQJ_ACcEt;ZH{x6`2(iJpKlZ+hRgKS-V zu>mFGB@Yg*P`20UHX|ra7YjW=6vLRY`1%@6UXXoiix01oVe1MBr}oGbW44j+@|B;} zls9ZsglKVIN?;|z2MFQNb!Dy3z2K@8#_CmZKc->vVEm8+lviOKG(%Kxu*++vtIgre z(QW>wMsSYM%LyP#)i}DrZZAW$Sx^YVda*$$GS(rK{H&Ha%eh&o=wZuvy;13>K7GV% z$C2fcEam-Z|tpi zF(0w9((5n=KW@`q{Ck3qf-JMA*riWiD07JI<_rxs9$TCht7X#BrnF3>S4WE}6idxk z*TY=s{E3nqPO9n|UPpye*`5`ny6m)=WOFaytg!{Gz<4WnM76N}W4i$W`)^Z640OXI zt3u~XOnZd784a{(jnU&ljKk0~n}n3`-p@;`ZuAT1;DOA!zeW$fgDK>)xbbptXs846 zb?ingj>fGXW!xKhx30N*6lkblyKGraqLfIoek&82HpM%meSO4bzuX3zjNLVb{e zJC>WV;u>!t#hTW7^6hT~8wb$ZJTVJ?0?U{??Zl!JibAc3+xb3N116(gccY(GIa$WH z*9uI!(Wm$0TsB+-m_@!-HgiM9?HRUoT0ol3?7iJ|{q4}YXq!k#?-zF&3=y!}LyxI3 z8&kV+(frfB4|BQey*kv=$@f36vNn(>57YnmOcfh1ttu;#i%S&udtyu~rty_aZC$Qf zD${K;W<%k#SgbQ>iOo>Zc3g|rftc3`x3j6YThB2&=6JwuS9?8fdQNq)>U6V@?xO#Cjw@D59jf)Y~k*cL6)G|TxAjo=37Rs(tgy}A8Z(XZbtGt zr0+2(?h)O4+3PLdCLAxZj9zeuEjU`=cpS6TH{2>d4MP4MTm2=V3~^}E_=pL1hM2-% z8B&qymbGc(I~6H`Np)QyBbt$ufwq7bSKbMlhRyH3iXI@#lr` zrFv!rDJu)+YL;k1D$>~-ap;Y;i^~q}SIX&PXv!KNVFEYpM!>0{CaIGm;FWG@WUMRG zVqO~&SX*7EKgt3guJI^3O?1lT0E9_#aWZ8@spQVs-Q$4WkN$xqlHuUzk*I5$>` z09B{7*;(O1qf}q8LhmnjE#o1X8 zy1m1<1yJoyZn2sj{&Zpgn_L$#qS_)Ooxtme~Q2U;t5-T2j~-$zmvT5Q#s{1&pPL@xD%OI{rx%JCR# z5SRps(P6`NbfbxvbF>}V&?ZOt@hpMko&Bky*FR>>-$mZ2PVewd!d z2jV(k&j_lE0990{T=m9B&xMPZ#N9Pil-PZyMQ5XX7-&2~3F+1=#-N^xZ~k7I$8Cqz z8^HXSmm${zNxCBS+g2a2KM_cZ?odw3mi>}aOF*B>?z@1oL{G%gYN?QNPX(2Q0MTZG) z6j6fHy)bBS1wU8jI9S8o5HWW+bLB)n^r%bH*CSf+UQi|CeYM3DRcS46Yx*u)czU~{ z7F*chBA$ai0BJ}yqmB6nQR7^rc$z($FlM;MTN{lAdcc;&(p8mlzUlEDZ?lE zkdiiZoKGq#BPGdTnt6pmCjl1@@@P&d{GxYM!owrc?7~|TJr{~4jmtM%n-NI0#Fo)M zrJb{o7JUG|QbwXKp=A^PaY4sH0_0!mN(tdJjHMmqEYQVYqMX)?Lu-?7A^hze0X$SP zP~E89I!-_o=%$yDEuXPZNXtg^utf9aX-A>vHq3o5wt$Tx%3|QU$t?Y-C_TxZ)Y4ig z9CWL6aK@z|U3j3#@hx>0&6JUG<|)|i#S_nel%5%OaUN%(Uxq@KE6(;1fS{ZT!bi?0 zfB}UNm>Es1p9KzKwb4_pxq$^d84tJE(f#_(-*CahFI92{-qg7lU~O&H3I&z;cyDZL(|pE8+1gW_@Rh z^a&V6%>c|-=;?_WfG@2;Sk(`Zn50wqKB*PTJ>xaA&1{;@hczKon+BT^>+e!lq|hX# zPTPE`iRV2{oQl#c5$N~~qd*EovZqv9dB40K=2ogNcKIa#rN)fJ9+Hyd)x@clDHsk* zUQZTEsoUmYUC#Xl00_a&uZg`9e}aB+y)9{JL)TRzHtdmq;Y^_pN&MY4oZ-gO%LoSs z2)wo7ge8>SDqf?7K)tEd(>- zjA|Qo^4A@?4ISu3Fr_+r@5>tBqX3aR)GfS8{V``m#a9gxyfT&jkZS}>Eo!4h>v~l% z-YPz+xpPq3=oH?#@h|&Hzm*KlD=Sq(O*)Pd%iF%B#K)sn67#A}3>J8^RwlZrtSi^A z^MJ%%Ue_nHj~i6F8G2k^soW`e&X+3x>TnCu^wqks*;?0n+Vb-KBvuDyLR35n^?z8e z{@y%M7TknNPOP;+INV4XKDFNH&ElmBLKMB9IqCMGGc{!9Eve2Z4vY|M5JF(_+w+JE zDw;WiwiYbfnWiEAVJ{)e4%*vv=3&XkX2LY-nwoU7P8rJo`uu7@g@fYLJh8kWuDDf4 z^w+$(PU+&4TlZ&N=nbQHz~5z!-`)*T@Q!|(#(P8pS&mfR9-xk2lS}j~IdDD_eaD-# z-;G7~r4t;dTNEvS6l)H7tA|GCL^;bS>m9D_KDGa}zSaAjRI+}9nS^7g|CL04w`Qfo zTOkS`VzSd?5J~vJEc3nDUgX+=G&gYBJf(0^G-nNA&bVC5POrhR(xaqdu`2VzauRDY z9R_=nT3@1rxJ1mz$6-tKL1{2LhVYZll@PU}JK3*_qdti= z?-qd`o;kv?t6%OM?nSm=3ukb;tD_$8^MMGxSjCqM8@qffFP^M;m5C`WePl^2dyOC= zl?O_O*1N^L0GZ}@-xpIH+}qdb?iDfRpi`USUr?1SZMVvhM#oJ zhtSIZUwTLwfr$f1*S5qkg?-jE!)LJMkO)Y4m zt+2unx$?j$2u&$YA5;SuIlvz#nnfxKjSr!*fVi`H6#CA6SpXG2hNuOxIBh{nqNq#L0a!6=n}F0AT~JiUJkxJ6z#qn|U;0J>nBcz0DHZ=Ok?O&DJxOVu?apbmZlW z1zV#2Fg#(f?Rv9y>BDk2-_cTqMQIG*fA%QdD$8|FB3x2Sm1egn#AXk1dYE?>6qN$t6>U1x@)lZ?0INcHHG0mL?y>0&zQHL9R$5EB2##?9} zGaG`t@~MC8zdaf%{JeH0f`=F1$tgJukA`<@r49CDgM@EeJkZJQg*`0De3Ur_n8F3i z2HX|8KBn;Lg{mMiWQ9?3GamXbXi^@;;B}i8quge<6)Oy6RG7L^t=ixdQ%LI`Br<5v zD_9K5JRZtJE+UJf$DEocL~?x?_oJnqBvFzyPhUe(h;s1ILurwHi>#5^g~)tQ0_8K) zl&kLsaFpM(Ht1t1ic*NY48xYw(m)g56liZs zav&tQS3MFY=|*|RB;8THOfTw-5!=!yvGod6IKoYRUQB0&^WgU=d}~Ub%XnekfLyGi z!WvnuA{~d@E1~m5-A!Wc64IDS{W#k%KEn{sWc6H>p?Y~xYk_Q}qwEZufqffJvm6Pr z|ARdh@i>vg=2w!x3c3F3VGaj{d2O5Y$|Gj8H@_m zVD&c_0BoCNdd!rDR;}tXFBrtWmp>_()TOlB-0+$Fz1|TJaV{yKmG|0WJnU3Zh7hZ& zRmu7yHYPN7y^|1rj{4s~I!*UZgdnJM%C^JX%oKK8ZrCH80(zh`dGb-4-OQIDpe7di z32aTjk6W!4eTqp6tUd~H|62e7Q~D5P&mm}N+jWP6y=F~X;u)jr+di4f4%n;>=I0dr zUiVcynx~JjlX~h}>>X_h7ugS+?~eh}stJ2Jsme(x;M9^cBn|M~!SqP0A;oEiKd zSXcll2t*%$u(W)}jrOfEn0uPa3+$1X8G%UhE>4OB?I}0R6Eot;WO*QNsyj?i&g{-y zn}_=EfSo~~%S6JR2>K6?45_|aR7(s(8u^N3=7a)v5o9g= z{T|@CA_Nu3Kud1tv1kSARU?Ypz#Pl>4cegkkGdy})BH(C?2n+JSeEZqz{%4d{gO~3 z2o3uSALx|(Gw#^ixqLRI6b+p~yK;D|5|6`|t&g_6)?{#MS$06wLqHSO_jP1vGN}t| zBprors|Sj2ouhoj+{2g&4`A*Sv;uw?dG&zS7}yOal`T7pyMCNN)9$&^F#C~3t_()v zT#`r1>PnRKvkI#o`GGLv8z|cp4IOKY)ueqM;xIZ z?Y@Ms>7y()yz(S~rG(pjsGRp~-n~%Xro{>{Ut2A*zq-Lp`;CMQUL6iRVaoFPs&eVm zx_P<$_NpIP(1Zq4^K9KP`YBz|ysX&edzQdf{UuqmQJpIJ=@w5PSHe->xYT`@UXa#s z`4zmWJ+FG@>y47!%5`1f95_Ew+U@(C>+Q@c>i%koO5ZM9W9@^;{)4q!@b&M8FcPnQ zB!6L z6H^VQ0RI#7aq}M-D|6WK=Y%OC@vXlNly!G<`v)o{K$&$w*>lG3_E0S8HF~s!X3dhfj zah}9=IZG@s@MGU5tvmoL%g5qEREi|Eev2YHUkdr?3|*5dwzCQs9`yU+<$78!k!t%+ z{+0LsV5!fEG2bSxu|eXQA0=6?z*h{9C>$E&+D;e2R=K&qeR5ikW}{hn4zttQS94YS zCCZ6{c-ymuQEKkH(|&x`Eutfl7y>zF7fba9KW6_DzidNV9VkTo+HP)+dIjF-Nl73s zVPTc~+6ldW4<}X^+<^tHubw~l3EnND`gmXWZaRl*&cw)Hj{47Fr;Jqg_^zBn&Y`e> z_}i_PJq9xD`&l{h#G-Ix6@{^tIvyElY7FycxYiq49~coDYlGSF`k}&6W&2e_*)Y1- zRurMsb<84JjeV%}N=cI}_krw%JYzWzFx@TA}AOH{j#b81l6`>x62SyBYSyB=)%axOt8Ib-VB~*F(sxb0bY+$ zc)yDBti**}V$4VFMSQXBJ>%U+hn{ruqBsg}o(f!BT4E7b(!aTAoPHY08{yrIk55x= zs@=#OYLjqC-^hba1(QFti;P_cMjxk!rebD>L1WH?tq!q(rlx6=t2Wj5SBij}&4xL| zOYFX4mq%>9bF^TtmX8$&HC|sI7XlBmyqtX^HmC;?q1+*Z_2-FrM?+VehqnG0RA-<+w|L8NR4?IvLqYS<-HW^;$820a+^XAfwz09$2Kn9?Y#m zd?3qo+N*0M^LLXcv((2x8^Z%@{-Bk7lComjExSF%j+sGZjge5rsBJ~kVbTsBZd@Ei z)D(waUsmn%g6%!x+|j*yqV(?4SkS|A(v-e$H9@(TkWZ#zJOKb@KKI!~N0y%C4J#}1u$XH6<<`k9MIypq+!OiMn zW@Ay@)X8>I!d?}`&53Gbla+f1F0f37?vFxlsSZlqcm!Qa^CodTKhqtYso6Gh7&CeOR02Hc2Ixth#GL(k}x+T zpBZ*kGyX;(C9?!Z*;2to3M$9R#M1~zb`0!hHJKul?61a$B)GobQ$B3OkRty2e7_BF zJX@zi{@O%KJ!BbZ`{EFInXRJrUtjCHeFMCm3WT%$!Ejy89bs>yW6;8dq(LhOM9MR+Q%|+=Bljj2n9ac z_aRKOrzN4P6?D6qfMqv?XvNUZW}d#Mc%$D4(Q8)r5+<5epJQz2GGso+d>T28D-D&s zr!v)STgI@~mv&m}TLqN5ofX!cL4fdG8tejcq+5R>6?;_0=LzEqK|1OJw^%5_l5(y6e#}hFx7+KJCRl6m;|~{CJMESf$=7@6?M&qm*pc zsrW4RCsuUVYLSiNEmJIk^{&~t+{>~9j}hv8GWxhzv?@K>agD6@RCAFF?c((A_0EUJ z%EqloT|wY{YNFg1Rey&NUXg;T9M?*CJ~>;oY!SBKv}K~Klrajt(u2;|+Hkt>xu5wI zm+t76OD+E9edmtFN{$(;pqOD3=FHK-Rfw9R5~?}H(U)rN zcVy{aSo2=NUy=JEHuyOHa~R!}-?{4=!p1~&1Q z7u`jT>KXiTx~)-mob0#|HP73OCvwM9ipc7m-qdAdROywPYN8CL!LX*-?4jJH5+RuKJR2L zE5=|Ep=2!|CbGPgGG68t(V`UYX^G;+VfJ0b#J7WB41?g@>wV|Qj!N;EYq{XX*9Lq_ zP8eM#o{?yLDMV+g@%tz;@um86B3&#T_KtQU&j`|4|5R8{Q|BjsVF$KD*j&HpPitN2 zr6OhR#==`rfxFV^JaoZvTkZSpKFg2juJK8~KE+LcecvUuv7zxPFZKJ~9K)QJP||Y6 z+5W7XHMw16E_6j0%NN!~_SJ?YYvFI2Z*=C>-4Kb}kt}AH%MkIy^WoMJllGG&4;NtH zc1=WX#O|8`>gjq)#I;DJ=-l_9BdP%r{*ldxUP^SE8}=M_bG5RdYcB)O$Biq+hQA{W zzX=Pcw(sG8RQU_7typRNE(i}6tV7Hftm3*k9vi&IQhUd|_w*t?jKn`L`u^?evJk;e zD@n|bQTeb_L~MKZpS{fm+x&Hp$y?;|s`M**04t)Q3=f(B{Au9Wn4-+I_O!B@e+qJu0AbAf)%yGq*UDP|kmKmE@;QNY0qgB#n0Enjl|? zA17gO?ukpyt;1b=-24{E& zS8_8GINmh5;PQ!Rc?AQlLSY-Ot=N4(iAZ>qjajk&@Wd!o zQvDlKu0gcWsx+4=4pu>mGHtPK3iUul(w1rWeCHY^W$-cWJc}acA`#FD4~18KvvT#; z(NL<4W(5Wbo<@^!QNf(qr7{FU(M7lthP#LQVatU(p96d)ZFa#iUkM_SUjlI5qZi6~ z{>WmVEO>P4cyYh_7n*^>JbY0y1Zgs35?8~W7jPSOgZB8%gCb(UNZzOX)U;Mp9WZ2{Q2#=RQZa1ZoE{bZX>cX8t2c_7b)}|3<;&0UDO5wxE%nyZQxq@;+SwD{^euB(E-n9Wip2n z-zCGQx#74)W+fA4rwV1K>t%y|v$L|ZbGowgHnI@_{};?iptT&DDlOb$( zoNt1g$w42+x&GW{2Ah&i5?!a%;L?TgKvODdLKJkl`w?As-Ua)!^y{LPhM5d7qvNpI zuQZ-yWYSpdUM(h>6H>$nn6gSeOc$yv)u7WJjUxhzEd;;|{PY?tQ4=BfGX`Gp+ z>SQ5If0oUv#YC%FqZLw~F5Amg;dQ&=ODwwrp_9s`FhtT*^8EO(WV)E>sZt3OiO$W~ zBytEG{2~Q56M5-YjZNjW>|$g~Ok@m|eA;?%FyVMrz$ z#4O;J-)0)-sbOb@{y_!jL`}s+2Q>}I03;o+z+axHu5Q;hpmw}ymtn^;XXfyZYbK=H zk1J2~1Vpzh)de=q!d|CYR|#*-rRCj<4Sf$>a@sw)o@4qJEv`1C4i9YBtQ9*CBV=KJ z0{htqBt55UOIHT`Z-&;)wbu;qf~<$TVa?)kjTZZ+ni>-p->pCKl`{c(bv6f zE3fs|VRdA0tKxQD;f5coU2x#f*5)CeokhmFm@A$^uH2(7EzqI+ox#*|I9ZM8f#v%fra z;^$nYBz+xLCDuY3S2Y@;ju^(J#z7{K>Gft!`{}!9jgT0L$j7d!u&ZD-ZGtJ#LHR}>^lfR8s zB{ZQl=aF|)aI9J-vNAR2(|c3+H?d0W=p-%d|EMnQ|1X%SNr$d3AryynQeHllK_HV% z@#I{ooXV<@Evs~6rIO1g+<|qnm!DEhZ-5c3)DBySmz8;bJ&Bb4QKYUU8?4M`df%( zB(U)Q?BxbHIr!0fU5-tc{a`eKw+lNy3*Ra+{hJA8L(b{qkNDi=SJgCY^F=-L;^2VZ zmh%}m@F#*Pz0S)%nCr^inZDr2{1^8BibVQ_wdd-RsP@?ddhWIh$Zc27ZeX_&k*4tX z#mYtX{&hz`%1vFrG_1Q?ypDcu*Ref4{@tZzGi~bm-+%8=s*N>%PijaZb5Jmi2o89! z;F~RKcKr@jVL#lCBC?4!4@R2aej^7YS3BWx$4JzWdTgKEFhY!Di_rL|H~ENskj7q; zyiTg32B}1>g&BPkky+HKb9HI7ddr;}GVSW|ei8>8Nr_$&!rHHRwrhqgeWP9`LZ!dr z%)lhB*o8g&NAJqAR2iU>naMd}kAC{6DXv4P)|O3iipe?s76buE8;u2-mNYdnN?)nO z@!9e_LZ#w+NORDoWJq^K1n!msX!rHQNv3I*w=H|byFt7 z`NxXb5JrWo&=1bFfRtin(^^w? zInGc^sjQ_l?rVAi#=J$fz3`AQ7l`zOLDkCd^Dk_*FpTGVB4?Y~8mpn)-}0Arp)2g~ z>t}{jH58Z7QQd|GQ1bqSl2?uDX+oe5oTx7A=+tKrsVE@|rylDe zo^OaDI!Y)hO)9n>gj?jr8Doec$AmXD_ER%KUf7_7WW2gB_Twzi2pN$9(2uL@ue^{% z$ub=4dX&`ypx2C-6@G@oqJIZTgjj5i&!KhRcaMpK{P*x8TbWt(TBP)`Fxu5^CfXIP zowLg6b%6@S3t$FTqT|Fsq3R7>}f?yb?Rw!rQU}hk+eT#y%(SnhX9uL@lUz z%XJtRdWD&yCr<}AX7$v+MRU}OXm>C-cv0&QR z>1;CPR1uNjMcXv>O=vHZ*} z=@j@vuoIH~)PrnLnGY6CRhK#DbS#R>^HbV$ij`#)+^S&6dj?8x$2HxYUx0l{2}q`*7noS2Sz04!tOfr<75CqGoYH`v*W!J%Y)umo` z%*2+oUvFhml>aIB(^j*V{KJO$su0YJ*maT0ooK`}e9wlY3!^D>iTAzcnf~!4n*-}K z=Od+h{AFC?(mFS!H)BP&9~IHGXLL;sf^XwYw6;ttcd{kcE=gYyu6C^o zg5ibD8{b+%ZK+LCFYsM$K=)@mi(99+Gn|##4nW-i~#;o4|bb!-j{k{~{WdA4Z8P zjgsuG8@@3{%A{{FUkZx^YX0*$Z9D9(5rpeOxKj+;e3Mbd+RT50+nKAjBsDK0^HNdWFa#PQ-5&B9KC!LekFUJMeF;v72sN4 zNJ!hv){O0^rS1W#_}rv$6lJ;<5<%QCj7YIZHhWlx?uXi=?8~5bzGBTH(A08s(Jrpc zUV1;8?#HG))o(u$S77bd#c@5JwgJI;-!g`8!=kPAI;jIjkTC@wN>1i1GUUDppXTI4 z%Xy6rN&D0zX+dopMO0eWg3VD2(T1ufdV)P6nTPgg&l|R+l&xkl?TNKe;wIDupJ*+K zUo?z=D9xVnJo(l2K7XmxLrGDu-0VEfwyooEAYKahGC9`w$#DBX2M$Q2EG*_LH~wS> z-D)A%IQN=5Wjs=w-_ZG72B)%+8;ijE@t@XSVB&q!R^@z(Zp-&-%fvjDy=*SC3!yOK z4e2V${Uj0vHC+!S!|@9Jum?=ueT(HC_wo#(3a`}ShhJh|&t$&_f|48C@poW(kf%i(nGk-;^ym2Qs$mMWk- zJB@`OR3Bxk*z=lv@&2Z7hYx3n*6ZFN8+V=+%wYfUpYNgjThL;5%c4BXHdlbK!aL_k zLyE-B+QPo(-yg6Xz)~Hgx6ILd^W+Lu^J(+?m{NAkeVZmM268we)djU8x5Wz7) z5|GaaC|Q#=FUAo0osQw_fzQg4i_eNggKdDyg!Rb1TgalbID=umhQ?pKTwfre{WNk(>2HB!lf z3%{R-C}KaK9_)4AB6mAd)R#Gtw?b9-+Xmqa>kSF(X~EGfRCCJjqmr@Fmlc?HrhT9bhjjoW`iI~*)W4HfnmW^yqplxT=Nh}xov6JAK+U0GK z?@Geh0^i!Q6B{t9Kh`0-%RzZBof4XbJel&}Rr-7-9{CU+yP|D2NhAm_B%vy%b_Ol(g};+5uo zdnhYsZCO0%g09)*z1+wn4Zr8iPEfwn$vk^^ZN?*_#)cc%*!xWY$)Nw z)AOGY%Y%Je$@ce7buPIOtCv`8^CtVOj)~+UK7OlzY!?85k5Dq zIuk^*>y{@x)c9}sxN-wBU+nYPD_luEtaP4SE)OkK;@E{-ie8v;g}Cvy^v#ic9H2ru zw9}yU(gM-Q>B?M9Ytw;%8NcRA!U!==AE%!&RIe zC})HlKetS=bW>jsO`_7av!LC~Ed146<`@08rP^14Wgx5iN5U8ZYw0)D53;BMeixp} zKHt7-$ya8*nhx}QLcQLAYa9*;0_U1Hd#Tm-A2`d_#Tw-929`q{h0TAjviw_(uhA@m z$EcV`qU6)1g{Mm8{OmXs!12}`lWgCEVv9#?^HQ8)z(l8}Uquox(wEG4PvUBZ3^K1}7nsVKQB%-G) zwA#ZYS7r7pcyEH5GQcB=6o*lbUYNNiqeZM((J_EV(xj_2MX-l%CP>$1Ro{h52uV*D zX!l6(V-dhd9r`>aL>I3!B*r#ft_3j5JTk=y}_fWL&$p)v%Gd;JPtu3eC7CcyF2p3YP z={EaK*2se(l#jG^gpyb}T&X7*O=&_L*)^se z>+8<2%pp|ywp9SrdhN-b!ZlQ(aKmX#h*Hh2v;g>MTtCX~V~0HUVSqoF!L}2~PGI?u zj3iim7FY)y#OkzAj5N-HcO(=-8#F&Mp5A|!_EhuQ`0SWh6Jf92Kv0UAtCWek_x?^1j;^^j0}84Fe+!*P--k6wifyIC7q@z+p2D5B*r5R>ebJx_+cR zlzl$nykg=!^X-7ry``%hTQo`A({Xqdb08q-29>0a#BclRtgm6v_8yEpr}v4%bieDg ztHR0==jzC+cRQi_)6l@Fsef6@%lLQ0lm`TC1d5js5dWKDDpbfpl84}cMyoJ6tjXMT z0Job!F00YM(;^%zzq_H&g2kh%v|LgHz$bgb!h(8&`K4J-#0juh?N`+jBF+(GvzBgR zfi}eZMM0W6XfJ8>Fk)&j%}u`^@b99V`NOkoTo_UU&>(I1vhT2w(L(pf;Xt~qjbT-^i-ebeD zrx~_RB`o0b8EYQ=?3H>Yjs{X?KE&CS2`}}#f?+kHfSYWy{Vcq1{*$ZbTG<%pjEGm= z(|#e^MQiJcTjFE(5Z3ixVapGxD@Gtqt)4@<-Ld_0sO(QWyqYzZ>oYd(i4WtQMO zGsyvK6}fdG8nCy(+%AaIA{BTJ8gZUhn>XlaFICoHj*x^|O3wvY6i+uDK%ESP7z`nR=2-Vs-r$ z1Z35|Kd@^-Cvmr0tLqsevCAavwwFcbA}BbjPgfmgyl;#X?lAZEB<`f3W%VFbxRCKBo^5DQxk<71^d>w_L%pEMj{38=VH z&_y4?^3rrcJ!N9eJ&V-4y`Oi1xQ0nuw;RSGLWard_rSv0zMxgS-FVT8#aPMX0xBZd z=qVq2EQtx|msVxIaQ5qRL<+q3>zi-)!ACUB6kRoasUxy^f>x~?r>Xekwd44b-~^AF zZLW>VlDGY()oJA={154-7+8w!bI7`Zv=RwZQId1!_buZMT;3Jt4RuD2JOpuO(Iw3jFBH7IclDFv=n|MVt z5YkTELE@IgF^>ZvUKOiN{9{4%{#T#LIFtcU%%yY)K!1uC7Qj`hIF zW=%B2gpI>kesg9~=`03lmQ%_sRHYUx7gDX}_ODs#>xW(! zJE2;zJ-#@seo1*o(PhCpgkrluS}CbM@i#Z#;K-U&o_Sf&m^!yJUqt1UwoNf~QtXJb1 zSZio@qEXlV9Ku7qr2FZI6K|e+rOkSt@n1(#qh7%zmuA6h+j)W*8S=TuBh@bbhj~|? zRwY6`_+`Pq_@z6mu2hPzj`nV9xl%hK9S_(0cEZGnpRhTX>)bzMj#)qYVT1d=))oyG z2DXj@0c%N)qWn(4-vnZ@`NF9gAr~tMGrgd>*3K#?7f@68tW?Te@s9S{@w}1vUVhzf zEdAbcO~c~I;he+hx2*V_fSv&9F0+}{?O?h7?7$k{vfxQa3Aw=$(H!p88q~t(!|`Gu zC1(KpfS)zv^WUYp-m2z|=0B1q!BiXZ6Enfv6GvAI8I3;3cgG&{@3)pyQN>mnFRyC; z@b!>M;VgcyH-8e4xNQ18$<_^k46zJ1XzvKjuX~>(G_cqt&T&{@@F3 zc#M5^{MvHX^WmQ{?bF!bzXS%pvM82IROKB7KM&aojsFo3VcZE^XKKQEUOHEqe=xcD z2MA0%@V6nN=D%kHFZt*bk!~n};9kBXs6nL@F8EOI$8oEtd*9(PPi%9;o^+Mu1&=h4 z2dl5o8jr`5g5&F*<)H%bpcFea35- zQ^u$;DN~xQCT;Dr&lm)ekDPC1!Az6zlJju{M!*h2Haj$O`6T=9E%+@|V7m5|;dmV# z0n~g^IY?HN73}Y6!C*YIqG34#zc5}#;w1rLFG63f<4ASeU`mivFTMXRKNub<; zUdr$chdGZ;=$<@;J4(?Rj=6YT(KbfA5HI3c=0x4DxBwO0TE-My<-J!Pe0fNCMM*F} zX}hN^M=Lx=$9EC2l30?;Yf{R(x=uPOuSlvQ0DPFt_kAKFg-jZ0y`G{I!CjHWM6nS9 z1i)+DxC}o`?}V0gKgq*bYmg?t4}?r1;*}7BwZqW08}&dO5H=Z~9^-qi@Az5B!7E$9 zPX8lyTF6c;Kl^H8)RA{tOvH9{%qPWUYtNK>R8}&9_=#hi`fdV8l$0~x_(yqs(hL^S zm{b%J_V#KP7BoxQYw!DU|0Wws78-n+_dXIrmZ!1l^<8camR3Q_@I-+Yd_iuvE)qZI z2g*rAi(;v8x$cAj7zZtYh)WZ{9%9N~6F;RHt$vuy05rvvOZUFQ=c1u<_lukw(h9ou zcpVQsCbpr`OiAa#!z)WfTlM;C8R}tcb>690eTC0>jl&})FCm;D%1r&W&12ohmWG6I zh$IJzn?lmuUN}0tpf$?K?vp?ae%yQLu_ZoUmtB#2&c{)2FJF6hn(X8!-BeOz_?YLg zN0hlB9$iZ=aTS6BWZX~D2? z!6>+3+`nKlw_v)bU}mjg?x|p&v~W?l@F%!%*}rf#w{V@Jr*LDfaO6CPI;-C(EfWJks3=?@;p5Jk3~ zDsWeFmfDNp~mZR`mpK`lYqQoEjw$?}^TSYGpKOIiX1{F8$gVRAsZOoGbn=~qk3jUyxagid& z?Q3%Uxy3lp`K(~2@^q@IxPEBZ8x=}@oz6jXeH{C#j?lYS2NcXTKs7m&g?=azV2q5J zIK{}$(Vk!+VF&J0a7ps(&W~dze8OI|VV(qSW6*eg6xK&&E{X_Hd=!d(rxKEsdYXudc;>8y6 znxOXV+TC7ZoTBQlIQEer?ubgGa34Bl;lKz zlWQ-bR0Cumr;Q1zvu)WJffox=W(MUN$Zj?it4``#^lZ>lMXSQ<8CNR`@cVUxs#LuA zC~v`XGq+O(nm+?45pXL@s(Xtz=*gfnjqoq5_ns9aKOm`UKFo_4fFtQgBp?L($3(3i zrRxRZv!jLbj`atwQatno4+ii^NUMH}z7D7QXxo)8&YO^s75824sXza_7})R~YL zZ%Y3`R67_;KMF!LHGY7*Bv+;RZkVc{ts6*VB5w!~8UB|z!KDs66qsv8zZpgo!}jKu z<4c=sl4q)T#*Nc+0&F4K`V{%*I?%P+Wi2V6B=9{2rp66a1A?Bv28_8M=jZ7pJi4%3`nH4&0{3Psl9#(j6Ilu=0loM_MAv#l~p8KkO2$k*q(An6`v zUPIC}wW_luDA^R}u?O`TGx1skGMMgEA$B$qX9evg)P)Nvz-O%vlG|*Pd{xEJlR2oC zOVtkuK-0zGM;XeJOp*?>^{}>NIqhVLq<8JuBUq-!L#ft)rdGFWT04O@tqudp(ay|Y zr$w)&&Qh-Ile>dny8wUvDweg5A$VB~W2{QV+7a(^O|x6Xu>sq7-sr9u)C12H*r8`5 z>+#gAhkG~I<$=9xi@J$CmT=p{``jbx7nZ7)^vnLXK}fmyP$#9a29VYqgF8- zcW1FqAnC`Yj(7*}#jqOIy4*{{cOp}Cf1-!msg}!Nd|GeURyAELsXJFs z>RGh_kxQ;)Gt2*g>J6KohK7Fs%Nw}`iPvLLK zHa7IB*{n9W%tL0mIUf=Td(TU+;(G~dH(B#oV*TklGF1uv*x8@z9E4!G` zuMw9qpGKR4!?*fB^Y_*Tc`t|G7gFFN>>%={hwW}oOM&7-d%tp4OcB?Vm*?xP`23a4 z6f%0Vn1f@VeCvUQ1M&c$kB^1EkCj~opi6rKeR3>hMNo)8Gc?P#P`q*{gd7&L1)@L@ z$g@I6ex$ZNb?zc|eRcOWiJ>E6FeguAj!KP+HkQw`qG@H?5AW-FTu-D;&rFN6{b)t# zRxtG=nvt!US|#}xz`sHZBZSB*MP6PJkZmCRR2nPPJ~WJgs`G}pggs)3ZP)}R40D>E zveVc;k;<;ds!Vx=VR8lieREW?xrK?b2Pl?={5A)zMg}{KR;4eM3WLa%4_s_5A5+1e-0!7`Qf1D%a@E_lE&+Mw#j$(?LCR;AmpwdnSzjl$_0y^xe8EvkQBQ zu5w@-F8o{jIx(QJr!pd{*o8T%4u;MKb*rpN5eWe5-SR*z`#8Z942G>F&z$XC6)I>)5frh^x=c`d4Vbqx80tTM*3i{Zm z2$>?MWnu?!-g`Kf7bYrq?Id=L#wrAa+pK)OjlKsia;kTnXk1#$WaGec=Erh=j5YgC zIW8!KWrx$tWcqddkHOa>_@Ck9>o3(m5u&D@N87KIFMKW0`OjhKuJDG-L&K-&KjWxI zwbz|O$LB)(-0~Me##_+?)ncv9xZp_*`{UY_J}iuTgv#fw%?RhP3%}~3cL_8m&3JP@ zsGQ||t|O-arsI;*Z_;F69@by>{;L;>W3#HN!!c48&Ztdu#NuI@XJ>Ikbs*pVkO6~$ zo3Sf|N%B{97(P$#MpBQO8S}^wu1#4;e+{4azL&VIUD5Qn-p8(Y#4pi3K&Tl5_)J^ETwO#cs_(&Qsi5e(`+>Radq!){)UZFezW_|{BM1~T}LSoqV!#v z8g8Xy@I?vJKtIK^%btcuA*vN|N6GnpKDA9^)O&WK7FP)aZJZzAUV=FkP~FQ>ga*FU zcS58>xYr6+=#Ng{afsdlm((eW|6uRrdr*+d{&I7Kpfq8M1WP%wNRAR0qLPNnuf7W9 zJUPi;rDSa&uN1!Beq|M!a^`c;o-Zvh0;gLk^mDoj%hFLT$Ih(#&Hk~9!je)}p&Vt= z@ebm&vfR19R|yA~)QQmp0~NA22ivh_yBNbt-Ek^Wg))s~v4`5=mKSW)UgFDiZj;BLbS!}kyuvL&j1_6U1$hc%(Yd;e}^zcf-zgI+5FYb!XWO57VzXUzbt!7%{Og3C4C-JLh2dHUz5_J`9>R z8n5RUoeQ;vym?SW z*-Ev@>m`Xj_MT_obXF){AO)=7-wi%@0k@biH?cP4>GHnaVhi_=$u!Cij%=}$SlDf?n zyNnOTo*qB>q88FtHY&aSDN(|@VjQp!vfdo9LY7Lu`FAzdQZ!$z8`|l!@L8#M?^n;W zpZJIFHKBjwq7CHIYVvpYFsR$R|J0mQF);eoEU7(IaJOsbQn27xv$ly%Ds?-0dHLUJ zz7R#m9mpSg_I91_TbJKYMV4AdC>sBcEL)5}Nc3w#+c?H*uMU+F~q!dpOA zQeMVxXeP*Hr=)X<5u~!ZHsBhG*|=Vl)oD(Da<5#=wVKHJ+CfoFFSSSU=bO6MSKG4- zAn`y=*3XykoNZT;)sCkf;<~AQg&rb^2A*|1qG^b?sRIh9jlhexSmU7mIr-+_Qr0Tx zQgBCe?A&Qd1&xTd1AWsGZd#VbhmVY6K4z>FxxALV;*s#W91C)Vn~jSay(5Xm6YZ;S zHa&mb=bY0QEsgIWoV>LFxOIiE*kMrDs3DuLZ;{*#g!K9z2u5_ z?<}eq&3zoLF;4d}%BeyCBDWI5R~kbiWul}{2(B{6WA@XiGN);ljkN?2N36tJ0ixr& z2~wePdEIdZt8qn-aU~@2WkT^4`tdNo_-bf;ZFhYAYJB5kd^1Txt58C_enO{TLN_#_ zw>zPKHQ~!+!r*cI|2;(cUo+inj9PI!^9?@0oY%N0tW zt2GKg1QW3bEHH@|6c#Bbfq&ZQ6zICH%jPv7&5#f{OYke}+33AZ(bM}5xadh`pXin$ z2E2dPTKy~&m&h_2Bg-XpGF(T?;Gr*)qAT6DI;6`J=&MQ z(Q38|C;~e7PN%6(YNi${5k}!C>8q?i-5KG{#0FkNDpNjtz z5x+QZL0%l_pvfbpFZ7s|`t;{f)CAEoQ9|dWs zAji^Xc6R79gjpR35c`n^>*>bs%PCOnjdKfFnaJ^z5TsbdK`o+Z!#frd_#poC_F}!H zU}v4huEUI9YA~RugSYRFxuE}TZXvQWabEPpY|LSH7xJ65*-75sSnrN``dISSI(I8m zeHOTpD|?Z3XruW>VO<+Omy5(?bUpB>gWuh&n-!&Vug_fR^ugAq;?O*^*oJ{9hXzlr zc~BZ{?n3&|qvi`4X;9==yJJ=-9+RzpDW&6lz5aOgCdq zDR}b>iH@9Eh_!~TmV=5eBU?2qA{JHsp9_x4lb1hnpliZ2Ej*ivOY8b^43@gqE9LjS z3KUo20J_lBzX&}v)rR&6IGCjaCp2VKp#=j^zf`Vu zg4Xs2UOw~-UyX3utQp=Y-FJbORIYiWzIRO{pA}x2GVw7nbHhI>%krDO&#kT*5v*}+ zotLH>lAi7~KB9!T_1zlZX8Y0%{_!kN=XjHo{cIq>>3eDZ2`gk5^P8ag^4K6dbX&lE}J4_#i{I($28+qrjDYVHj z!rGa6{WQ}!52TtOt@(=o^pr{VsiJup^)<3eV{@+Z4ls(T=H>3Y6a4m#-Sc+ zH)9U{u&esYuOw%~Xqfa{y*@jg-vJ5SY#OGIs`m)dN|(xyWd(Xn`l4UY5k2xPH3QQ@ zpO$*4k>F{p+7n+q!fLrpsK@Ofn93Nze((J493*?& zu<>;KWHUCC+`=OPW69$b5F?yG;oHRg`EsZ;|IRxUr1jy(N4blo3UpdS^LbT(WM!$M zwRa7rRP-T-SZi34=6WF&d1Uc7_IIA&@v++SniGr=fKE^Aa->Q=T*SL$8Z08ezFFJek%*9m|%Vo zhNM$Ll3pna?ZHZR(`&}+EkVTSv+5nU7v1M-gkJ1gG4ei1z6<9`i^rGMH1 z6`rXCz>(+4=y?ZOc^O26-DT2dFBs=U5@Es*Nmm-!(#54_C09E*CWGCXD=ZHy_M-}l z7iMGOkRgPK2&9GvH{(--cS5YqVKcf{0$2V=MFFT2!uPd-uC%&6jbn&uNv&44?Nc99 zVh7w|O^BDz^d7H|e8_5<#&dPHvRzr^LvrR5a-8(Cf>|1(mKLAa-?&xhHL6{ab#9yJ|trb)|wU_DUtWeDs^C$|?sp zeSJC%EBZjD9Bf6PmDtH6WO$1Gc?k@CanKa1;i%vtP&Rw7VMLt$8Qr11lua4F9wa^A z7%83H=Fq@IX#Av`iwJI9^dV_Wuu;9<9T=kvC*%miJ>J({B*IXjg?8K42 z->j0M_H6;)wP~Mgw@ss0duco(ozG%#&3E$zK=;QgHvP7Q?oFf99lJjBaV1Y_O?kTJ zP_B{7nGbxUbCwk;P)l+b z>_$wqOMq#&voebuC;2(f4a}b-Z_3R;gXY+hHMnX(BA0@~OyMXDpwRaf7Yd-4%fUPY z8c`1@m7&+zQ8d*E9prrR80*KnWHt zN~7p8@z`btu@CuKKjgxW-fgP8Ce5;`O&&U`{!lyWQ1s1d;l$-MAc|>j={ZxYj0MRv zcK>zgej%-0$vZS%ViK;As9j9rk5p!j^jk?Lat&)W3Rg)G8MsVL`Mzi^*2O`zu&_oH zxb)40RK6Ls&>7G6_|kb&*o-eoU)sjNPsgYv%1M?DDhKOH7i_vihNf%vb;P%zJz&+A zP4}A5Ck-EJ#}}b`xlxED6~wG~LNRBbpGcBjG?^2a;GT?mknhbjw;$XmV%l95 z*mc*G6Q;iY!@BVhPhBQy<+m4dsFePqA9~A^kekFdp!FYx=A2i0&ewsmDDsc6d4caO z2OodM`KBJlN%x4Jko_2%!tyKA(nNRN<;{-n3S|3aFm77zIh~YS1ISw$xVsx1LlW@p za{T^nN_CdH!+1rXk^=vri0?^1>yktqRLj_p?T7k^3d%j|)a5(T zWbJOljsvok`qnY^6GKCS&l{UV zJ&q&w4}J_;g3Q?mo;dt0z#MPPH0Fmx+Amtn+IaNq6YiWyevY?c+djDc_`!{P!4(mT zAB9|g*eEVNICJV-*Dw0$F$6*%ysu;A=%Mbh6^^Ui&IakgP62_-A(~vG5Oowo^&=`r z`4IOQ(Lf^Vss$g(YHe&#sM9jz7oPB4;s|wpc9Cu!xm7wlOSL)_h(L_owWoJuB)^`! z`wk40gBooX!}o!ZI||}G>jP5v@gs`#_*n{q+wZeXWvi-H@$HY>rLIQr+r|uDxogBQ zR7eM8GlY>ph{iksy%mTqW7u|=qXh1w2!#T8v-~5VAFhsBF||LEjKH z)KBvVcD&j~IHiPJj4D;#s@1C@2qR%qf+2QH@q=i9p+zbSeg914NL)gdeQmeO3HfD( zI2|xTHcArmyRstyAq3Gb zP!|HcC~{*sAL5GbfX6Y!;A1>o+VI32KTiY_&;Pm|>sqNo-sD|rnhPYh_6pY0aYVEy z#4t2*(PhXdKjxQ(WYIX>%g5xGq2#!|RM1eedOOc&bUf}j=4U&?p>RU=o-8YHwvB(b zU2e8RPqx!qw#!qt8)=S*aE{koX`_FRU+!DLASY-oC*&z7j1(Fn423-Xf7oaKzmDPs zb|sZ6?^!M5t?m~qXYxPVFGJ$m808E3gE2bLejd)30}?uAr+=1e6;WezIWDKyBGl?N zIXFMNG5$={9}yroTsl~7v#S%>i~oBvR%bQhQ22u92yU?0Y5jPd%>eHA9{5tRcE-Hj z?Fiz~t=6$vuaEd9oh;T3G{}@9B@d2;w%Ya20=hAZNM~A|`ZRXskJ5s&`uGTO88Vl2hzNotqAp z2`!D;4oAU|-}X3g_cc{aaDw4_M~9o(1r6Dl4Vm8q)iT%TFyB$ZL z?xRTugYpyxU|uM!=%6jy?x%9M+OEa34e%8?ilBon_4ss2^Rqb2{SS=vBy`IRh|oLH zWbC{kxw(hT#Fgq0V?t}E@VhmJ0EgtLJlVybRpY1x zo(IMflO!g>_^BkODw#Mkf*t2&21QFHE23satnTbDpN~_THZxn7mQL@?jMI0XQ*ttl|N4p++2Zv2x>{qD*VdLYlp1JV$lRCGS zw~_rp;PuUbO~G}V2+T|1Xw<$IF$y8>`ZQX4k>2jCe>RpVkQ$O z*+WKBG6~`rzh6$RZL?&5x%cF85h5|$g{p53DX1iVAEGY@LslL*=FO9o;{(DllQ@GU zduFzdgdy2lt1ynty^lV2qyobtC+)8W)r&{+^oRncv2JId)|5p+bhsH`2AfcKkMY)% z1nd3Ngv%On4c}4TUBk(4I32Ng*SSEYwKUCU{SAhblIr#Tsdn&ii|4fv@ z-Ub#J%R95kd-0n|2I@GAZcyB-RLC!uGd$!-%>yPS0Gj-fv$urL=j$pSP<5B)=4w5`uz#dvfBa%P!A}G@d ziM7IoueqCUNohZb>1VVJg%P2=60s9$AavBIIdOtzw+~|^(HmGjR9MjdJp0z;im9_> zI+4~i`a+_1>N4aXKaQGFb9;R>i{ndx{{4HzjH4x&9xf`G;&cqW^}jO35R<%6^nJGi zjYy+`Rsxo?dd18Y(xH}8WUbwG^iqwQCFnz!`p1aGHum1WBSs8qgfnz7S2KFrShPu7 z3`0a`>F;@l6{-l4&uQvbl~!}K(r&`6W$p-}@Sm_JM8(dZ*hu8BqVFg!S2%y^&afmv zfq(1KNiEZGz?ovph|jk1xWYW3rVT1=*4nZPwZB$PiwyV-M7eShF6XGAYHa_}h^3m@ zxS${l`3GAF9*RbIb6hSM<8crfsw!^oRlRN?q6yAp!TwMg#ZXH6BiDc%dSU+o3q3na zPW7kb^J$sN;$TD@!eY=EPZY|g)#B3ArPuquEMuGAPg>DtB_SdiI+wOYQI*&6?T9n9 zUhZMY1RZ6T{|{|%*;H4+Ee+y!fZ*;f!5tEUySqCa+}+_E+}+*XU4pwi1b4R(f+Qy| z&z-87Tk}@k`7kqk|Ak$>d#zsGtqaCmPC;-?S^~3eqsJjVs#vNbSGWkqTC4)0d`@no z&wk38vLQ;upqFFTl!U#~Xx2$=T~Nq-sacHEY9=4?a4`ltXZmE(1CKci3V9m6-KbQU4JO*tfvhEvtN@!63znZ)?v zU&8b=`Zar2NGFC^&vZI`lzTuINqmgvOHuh=^}oXEfkN4dVNrPXvxAIEzx{e(6V=*l z7@atwXL<<7)a&o#8vR6=_3q?&zBhxf9f=;b(6kkXK8v5bjb0h8eO%z#nE%kD70L?t zUN;8+ym!Q&fe{HeNt;`l{i5Bmk{jqm2?}!#{>{H$_NtgZ8XLQZH?T;8SWYQ{<%n9P zcib1YSmteEY2w-2&VBAK`*u{}*^fF2W7A1UXSf0Ju>(?Xhf`$2rJJ>FpdPxOq!M;B zT+#xxQzSog%?+&XecSz^C-fcJJYSR}ML^mJ)GWWyQS0_i^!KO_-cq}0HdAhCv-I^U<9pf2aO0%kb| z1BA}E+~`MD^{FtXw_UBG&{HV}E7^|R*u6K=U4uFwVfk9CPNn0tt#!iSTzgrvahmAS z`#TN3=FhibHAMsUn5s3I=~YXFkZn6Ndh?WM6KmjKS;4^WnG=liVe~? zH&!>guL^qbZEru~X9)WNON@tUKb%|3U56kAhF?1zaw$kVeh-e9Kg3@79iAXyi_?wS zg3O7J(JJ`LKB9V401_MZBhQJOxSQeAeoK7o358i(a=Y-vTbB~83iG4V1pv6qg59I4 z!7dy1@A_Br9r>eUe_W@U{q5JxwT1v?m#uzD=VIDIn-LDcJWT70#OUt%m+P4-`md)F z`K;yT_FjEQ%?n?0-+LDc=|zoqW(4L{Ht~%uCt3va#{ZC1i)y=c+r8}x%=2!mmD~=) z{?%j-Ka4nFJzgmYqhhBPD2RzS4C^tta+!I#icxn75ZXLQ=JDR6w70c%?I}CiUPWtvH_=fZ=C+GN~;MLzFW15zt6P)h?^FSsaNPJ7NvOY@od3vE`tw2m(pZ)l;-YIewB3isFlHV zn8AyPfd=@NU@KQW>X4-l{JJ4Cm`DPG7dks!yntpiAL!6VFV;L&W;&TrdVYt`Iv`$e z5Pv2}uoLuU10?(c5+MMK@q;CFz*62|nM|-;Cs@Jz{}pM&MJJMVRrx5grKi)Gfa9vJiwO&YOcjwA!PO51~R_Tz}uUP)F zU26dJgx{mIGo+@m;l~^51MecBhtegqfdFp_$GQX!Mz^hx4Q8RPSSG*_5AL zv@|JIL}0EPB9E3IO=rePg>wqfp3WBr!C2CIeqM*O5C}Kw^F7lwEY(H6o#^&-m}V(@ zQT)5o?zF~*s# z3%Jm`V>6lFe#di&Whoc@+|0%}xJq#1c-(qR6KLHFj{9|HYypE+Nuh{K8c87zkcu>x zf`~F4giX7oW{3gm&r%|yo8XFFVsH2k_1k>Bi#<6_&kxPn4cm(&Sv_QqT)uAdVgb7e zxQ=3qe9B8S5pjHiS--(#8OijEV#2VHFHq640Pb;3lRpPq#T1G1e-k;={5H&%i%i&q4I&^nJ(dSBdSCM3I?CAc0RvGJ}&jj*n8yeFu`Q&&p zUfP_Ok`E-FJAs_rwGy}liSnhsUmVhvg$FucBqDxhKY^y){=F*&`5q>6na})&)#$56nn%p(N?90Jst1?^HUI9SmV2dS4PtjbCuq zwnm26T-UPx@g?gVBWz)AFC#0gccAPQVrH4O0_L}Yu|zKr0msB!6o6RyY5}C71A@-Ci2eUhQM_JKAGWePyf=6c+mseE@P@#4)Kjh3K(9A&jU;ooSvgh+7!tv z_$BdTqOMH<5Q*yk)(mC76aYTv*Mr%_ck*%L?=G6qv;eEQ#YdF4UC5{ zXZ1d`T81sSo}FZ0eb`#sz(bUIo#ieLCEQu!=o24tUcIx}m%AERQ|#8!bYljl(Juu` zx=7-H*~|TJfECX)$*DZjL10NvV~TE0xqiS$zk|vst6Lg-Nb{|~#1*;V9(6+K;LUq- z&(E|kiDREd9+EPnPI{ASd3TQHy{CU%ge}T3iw$JDT(~Y*Y5Dy7dj+cKsrRp03_}>~ z6fe8s9P?gUz+>PYJWkMTre6G(nbB~=Q(;;rxSddKo(8YN93U>V^w25RbE=!j_zy!5 z-msP9q3a@;+!br5T4Jb{(&pIj(4RonRtPF8wE%vAVb=dStj_TG8PNGKdvroWG@cvQ8O4@0hF_ zjfEIOl{^)KT1v-bAqzP!9k! zz5Tqd32>Fz#8LM>(Ngf04C)-8J(AH8mR|dJZ%B8fmsxnr1 zECut+;;bc&5}H0nrPZqC?9+5Z0h>v|IL#~_&;~BiH5*nF===={-2jt zW`kh_EVdt~#3j;T0>Z!#6^v#)kxH@JU^1CP4w}V$isaSx1I2Od4!0+l3+M7hTp*}& z+@~KXu1Kah^+Y{Yt^x?p9IQTEu2iiGcZP90RI3#gZ_FO#DZ*}`9Hb+a=XDsVu^pb< zcze7SkJUUvD7%zcoK8i=zf^p~FWDIYWi>P9ay;yh#?A@`k_a4FOvSR%hyT&!(wYnX zs*JFs`D8s%9un{2`f_l%B2kgf^8=q(M~f1rr9Dr>(-OMJ=XdFwQ0sk;84yQ0;LGXu z=4j3jh5p>vxywBB=B@reg3sr69gvj#*S=nl3)b11Z*2a3ejT%W(-Aqo{Q)oecUR*D z-rs{DwtwjhT};rdDf}c!D@|+^i;mYr-*`H=K}o7F$zjO4G6&&1lpaN(+NMxSDFR_@ zs;GaoFF91^VT}XO8gVaV5h#;7gsRNlGBJSG>rN3QUKACo=&((KV`C8xt3y;k=Lcd- z`0vxOl)ic$JAJ|JQbB4ZZ~1MWt%3 zIzx25^s=%z#;u41IN^QNg-aiwlErj3Ev-jf61EjX)yh;=6p2)i7smkHyMrSMmnPLb zJ`;U3piWhFoW?5)zEa0Q?&_Wlk)#cLZ3=98FG@36{Vxmsn2>dMP>r`P=|1Lr&f)qn zvc;={RYsmG#If)!8y}@kDA*P=q63)Pfn{T(@GG9s+{Ts~AdU{8nXl|RD)aaoe zk*0EC-Mav8+Ue+&@SzV9jjoo%mU;blw&EM@EIX3(O<0h%e>JqbK>AK#a0)tK7(dx~ zq1n|rQ(9#FPWF+p_`wrvz4AdLp2@Wgn>|&CZg8>q3;6_qLlAcSWA3NYjBnp=nT8}bgGM4rrX%9XRDsSUOdt*T#_^8O3WQuSz=0dv ztQx;_q$c$xy#$5VzOjx9$-iud==Vw25xi)B@CfJk_?>K@Q=#{Q_6+UBy&F!n#{516 zHv79%G#VJpB>g{E!Bgl#wGT|=27Xud00xZXzJ7iha3r=I3nn6e(1E9!z}BIGTU2DP zQuF&7*9)QT?s3AH`X$v_jvo_uYy@n2sx?Pj=Hi_g8<$B^E<0?I?40yBSR$5@$NpFm zM-$F!ir!cRs_pYj>HIgmM;ttd=Y)n=E~ zf2sI_xJlFZaL@AYk4!d-EF6r$?S_a!#PqCA%(k;23?@yU9)OeF(y z{K8Sany;v8q~g=YtXRTs=}UUGWTVn-jm$dYtpVI>2-pR#H zdhQeYb-Wd2fM`5g)8=A08a*tBhf2t)G|s?mmye2VtT~&+0gGUm^;37LjI>0G)bp2Z zZoT2pxUcC4z^!z&A7fuTU1omt;$QXu5$e<&4`L)%7VKhKIFaL^4?+((cWyDo)l%+` zi1Xs@ZiA5R-lomwfAyZMF`n=5d;fiZG+m(l9ir4yT(GqsW9?)3tGMJ_dP?mMoMQ&&DJkyML5Mm}{nSAXU|qfGT$Lg5V%Y zkM{yMmi~dd3?PwsF$BX!@OqSj6knNW5rlbxr)$8}3WZ62oJEgmIn`7iHfJ-D6p3hy zWa=R8$PJrCPOx}h0@T~s^e9iWws4abT*U?BH@g7ySv4Fge&3f z8^kiIt`o8RZf9`&OXzxTy6c>bdNGL+1zk@9tMf&F4O467K*C2aMDL=fY^kfIOYb!* z1$K;m&JtuK98ehgCj^N#73HD+!jbzSTibW7d4TG3;m_ngP8zG(79!?|YFQ~}7unTx zl4}?Ru0PFn%8xBjWARiqwPp0->&Z2phqU93yyQI(g_g!+V+*5X`oMBk@<}X6f|@bi zDa>tq%xMea?>Y?Prlr4?1@?!E4E7pFI~+!S!SW}aQ*?brBqn@Q;r&^myLhr3HL*Je zd&n1bm!kcoJj8iyiMU{I-MlM%ss{s>bidg$I_W=+raq}h#Q~j%Mdej?^$V<5Ws-A8 z8Ld&@7Kt6RSS{FYy$I<(>NLp-(5&Nkh_b1krlotkkNFiRD@**Wg6OgfoF-h`9od}T zs^;b=*WS9h^1XZMnu|^*6+DTRhML>!%Ap#yc@KA9>57F5|HcPIi{! zbbiiw;Uu0XXa}L_DQ$=Vs7$U6Tdwl&OC@@NMeI&gf8?c5wVTcfoopccLh6Io_+Res z&1Lvn4WT?*#7VRqWRrhPjN)`am0YvZ_p7IL*^hr`78}tqnb}<~WDp_2jU<1v-DiWA9%6x?itL0~Sif~9c19n``GpFvr%vRT z7g>W>T8_O+qsAC8@7(ZbEao?!KC#bng5y`#UznZ;yxT{)xFNZsiKVSjuZqZSmNi!M zc!%}6Fj(N)T55^Pkdce%t8ysrPcF*VB~*S4Hud?7e*)H3`Ie_Bts$6%oIe zPhUu<>%yPTxrh-5dt7MhRL!WlGuqk%!`lovAG3N~$5fk}Wo?Ihya}CR7_~z#tLP9&(>Dzn;O*%0Xhu12BrKYYaM-`N#p>}^wAQsbJU1p zAYD2o9W9Kac2(Mx&03c-YK5r8{U#SFR7VnNrLJWRiMY=cl8fa6_Hs`!$74rNCvzk~ zNd)k)vy_%&!H}D6%TZjMq9)asf*ESJ%c7`4q2A3d=j2Kmxk}xSCaPdynD0#MdE6;3n5vE(*qBOeC;GZ*pZU-CwX>YW zCAXIV6RQ7ps#EX*Ib!(q%~WmCMd<3MLg)hNZ%@~2#g@^?_cNk6frj=L_hNjsxxZw- zF@M~-k}A9|t9rMV=zBbrq5_5-Lu41gM;y%ZUHyTg5^I@|lO$=DarUyGj#~)7@WT2o z%%#1-Xr%4zJN%52dl*}NekYfSK9tMR+21X`Y=-=0Ve{l_Q#)y)sO@W;vWZAdO@r_P zS)vBzOE3;#6c2jMZ!DrxwOjx3GBcJmkStNS5p_X?kY>ODd-eYJ88QU!TI_uM=s#*Z zv=vWT6?HWxwgxHX#|i2G!bA-&Z%3#82n>tnVG2v%n9{MHh>gy+Sd;%1r9>7W4A^wU zYB}#hjQM4BMMB{Ik63&S;W1`#&Pfo_eT|Of*GN=cRgITld(IfG^zHCX%XsfL&bOzL zyItyHXZ&?NHs4+>L*)Voric}(j?>$jAA!ahH2?F>rDzBa7L&n$n>MKi!vKW3|Cu(& z6OcIQR*?R4b4e=6B=Nyl)Q8XA9O9bMm4Bymf zmMd7e#PWO-G2yeYwAFS57pk@DO&EPG3EHoRn+Te+d181^x7xISL~FczUMY5X4DY68 zcU&9Q1RU&^5@*&d4cRSHq5FF@9gQbapS8;AJTAw&uqcym>-=2ob8+!yMd|)|o>wNV zB|OXdOLMsv*gZ$$$64~D<7}utP9uSAcK`$+SL*G2IGRZD%e~Qf6+c~&q)t#G{b&{1 z@M|ttq3Q7o+bM%cLzEz_$B*Z~@#3?DzP{djm|tdbi09-!-+s?Y`yPxJOHJO{7)~vdezYP<+mt^fVEQ5)>U$2TWuSyd_RoFj3E>N=X$!O^O@;b zGvbo6teAv7)!H27T6=yN&vePB5$VU6d5}m>!U1w*tB)ksQ&5v8vi4o^E{P-d9gig2 z`doN|`jT{potQg0xSxuKnkarJ;y>rqs!)9@auG9xTH@P2&#QrL@a_O)!z?VH&rAA%Y`mT^fHCH7F z{}VC=rWDN|$5F-~G7jJiy;LW#Sos??CM$PL5=lGjJ2cCgRAvUq8IHsduIq0 z%dUi)I>k+DC96uSjH~XME{r3~>uDkG$Z3ZjR#Px< zl3PB%Xa*ZQXx-J{;q7WaYMhScHeQ19x|5vF`L=hQ0i!VIZR_38`hrrLsm{yb%^p@a z{_5VHXz$Iz)uJmnxY`T#c}~c#R^W+M5RElpookn_)A#Im!pSD+lV#A^50tj_d%HgW zvtXt>;Rh}TneTwYtBi+z>DKouI2|FtF67j#_w!(#?-TaAKh&?U*MC5YqthmVIY;L|niZ^xP z2iM7|ju{-xK{?QqFaubuNzPmg8>kVh-#_J=M9%1w&s${n!%L}#C&?G1DrSyCVICj} zUsF91wLw`WJA@+DX?R~JB4^T=eu}hZep(Q((5QkkS7QnA_GR2G+Cb2k!5ENE+ zB`AN%Ic$8Xl~j^K1i?@tokbhQKz;?>VKn^NTtj#&VOlwrrL8F_TD!~RtP zMZsnwu~zN3iCSXrlFjd1r12T}59Lmd(w%2GgBiO|i~L8ge3p1A`4MK*Q?vI`-0q$! z1&0R2B43YjgQSkF?n%zIK`(ROk?3-2rL$p!hb{D|F+)?A;AC7ey?;q5%oX&y+^94bawN22?3G+?DuRw z_Ip1~Ch|o>qEY4CfkRZ1DNKe_tySt-y2ZkITO9I9B^oVit=$+^YYk{!W=|;X_DoHb zlj*ZWznEsBb=Lwt-g)b{yFBjF%W4`U4f{-9tz_YK>VJF>!)7*`>HH7k(o4~jY*y)i z2Qf2C3PHIsO=bH%-n!G^6tme= zP|)A#|MoIIUAODOe)$KA?ziSg{bp)3FJL9ngbA9r5`#w<*Bd94eBp2ik@a(790(oZ zEESAmBR-8Nh4C;L#kw#=5dl5affI>L$p90@P2_S2^O^VDRCRJObrgnoO@z7S=L_s7e?9TNP6Lm<8Y|J@>yLHu}PI# z$HCvsvPAmwLq;#Wxfi>}msMGkYVNYovdY#8S!2v`$IH-~@N|nZZ(WrQ8WupXtT7(@ zA35sQ#q3MWwq~^QxX>;CF8iiiVO_h32v2TS-@v?I#@eG;7pyGrO9Bp{>9@3o{$-aM z=BWL4h6bspLv4v1Jgn+#2YMAI<_2j5`=nG9QftQ)@`1tw;6Jm}nhwGr-KyiaxJ@E0 zK6Bj^a?xXQM~GW1GsUggXxAo~^yf^M9jnnV$CyM+eNSW94_^whb`bi4*IG_$4l*px zDwCE;n7W~6tg(_=}1Rypp&A=AA45=MO1 zcNy+{`DE*#B+*?o(v_op#PcHNT$PG5jF>LUE0oBW(KzbguDF|6VK7^+J0d+CTk4-^uEK%T$utkU`DH_SG4Vr^_32!?^7AsYpA4@^;(p?k~(# zgtGec2A?oScx$13;HW#=Dd)+4gAw+J5^nqeERaQ|?>?^{JamOCptDpA>X03MpnK+m zf+$#=_$7$2OK`xgNlHZN4}{^IH6xVU*@}l2Bm8VB%DW}UtgODglVv~q$0@f6e=8qvIylTvTV&eX@2 zpVu>^vF{g5F?`JE)qV2YB>-8}aJU@AXH*e5O1^7T3k=9F{24lpDd}p4e0_upn2f4< zCnOX6ZuoPS(X9Ccv8i->m5hQ>olEZIZdNoxPx7G{fDlNRMK8mna&UDE)!vtqRGkcg zs9o#=bel@aJ#p0_Dfg1rKNA5Ww%gxU!3-?t3TAI=w?(b=%(NJ? zemLr6r1TYnXw{13E2_nRG%Def6MQC01p{HELj~kfCt}blR|jbf*5Fs!KwM z{%_bUstCZ<`#;z)EQh7Vf3ab5XEcXOqwYWZNpA|Mn}xz@_X z5}6Nd)^pp)F;yth8<|kA){Gd&6YHC5Gg%9p=Jp^JvfrFAO&l{S6Li(pYg6NBntj2m zU+p5I*&vde zuQ{A!nYUMIXW*S;B>+b!-O z*o+;wmy0#zj4a7|tXEI8JynPu@bBpfslwT!`4En~$J*U~*>uKj-%p3tsGXYdZ{LId zz5Pz(+XytaIok_C8tWi+5850v48@@1-?jCu(pm#yT1D=IVO-m`K&Cdq8R0aZzjHO) zSxP5;Vs|*qqS&pZDb?RY#&<|NR#b+Od90~L6*v&876Rlj@r}j2tld7q9m5n1ptpuC zO%zp%T!}caagIQ5Wq%#akn$IafpcKAw)(*4D!TBU1HPPqO;SeD43j_%t4u&_=4rm& zv(0{xBZ}rx;)H2)Fu;?}_bemRWa6wOFxzL};RX#wOH9ze>b#saQJ1ci(59HQ)P4!S zQt7>^D~}Ff-))@s9yb@l0F1L)!AKDLByJJlo2T`KqqA*#$cq_kw$bzyoGaB2cSxdoJ2mM zo1$UqP^oc@V1w7UGTQd_qi0#Rs+2{GbgZ^PLy%G^Zeu|H(g^p+I#r5JgZ`te$*bF0 zx*N0mGB+=_G^>wR#>A!QRKrm|m$a~Fxm z9>8FktFoCsZEB|d*}^hZu7dH(W;m&G8$F(;5Y_=lU7K}@wh)e{{0{dnl`zDLeAqR@ zHeVWsfuxkeueF9Vy^en-w(P+6T$Y5iL;M|)AN*c(ri>?uh@eGw~gZAI=h;~ z)F{{sEtCddcmj;>q-JQA${v=xc4GQL-A8g-xgn>x!*OImFu^{?GK9 zlet-K+f_T}LX(YU6jvXDrxlKv#YUGxQ*La_@f|bplkq#f3gR?A77~iET~$J8FkuS61!5;XqaCu@K9Q;Qo~|%f8CBT^gy>T z0<$bJW|xFYs9SPuu+u)#Zl*HvDyHEsjWoDR4S3_ZrDIc_@v@bORUE|G3{<79S$p>z zPd?@5sauKR1D6W4W=T;~a?Th^dFOqo9lcZ1_;X&x-%Q;VVPO8pc?g7r&15j~f89I$ zM=|62uX~5_g#S{^{+sJ}I)mMO>OYFvY!1KM<@V(N_Rsy8hn6c;IE3|=u5^QeP^pTB zoNXCv4N&=-ae}H@aX>w24b9WGm}c6k=Bc)~Us;BoQ{Az&F^RSYJuYdC9|ltPgW+&& z0G>VH6&LZs3j|w;z+nyQI}Y3Kj1Sl0d~n8w%IS)ILru22ml4a$PqPu@c_uWKn47Di z4&AHWTo0auUGSzb7t=G-_5PsC-ECjbt7$8*J<^Q_FUS3lNdYdWdZ8Y(raphjGf~i2 zzsKpVuB+WSKaSuT@c2&>wim(MpSNC!z&+u{e{<`9U002Gqr%dIbN<2%g;LO183omy zJQo;LubvS)!p*g=nPgf1nnt%$pa_A(zQ!nWo&3r`>DJd|O$m_Za65X=>s zj;BAzfD47{_dZOlc^KdIJRil!_Ml&Ti6ImudKgSqUuzV%QZ%Z}_tLBP($^X8vH)pE zTBhq_(EC%IWZMQ7!lu`|j9CJ~rkh!LwU%DG-k;+xjPpW6REAUSn`Hq=_m)|}d~do= z17Gd1tmJ}5N~BphjdtC0MC?Bmx+N2g^ao~EOt7VHda|}^nvFg>XN3^3?bazGmPiS0 ze(gu&IAMxhEPDW*sJ-3M%|ktSDV57_RN-P&&nY#gq9g#?P<-_F->y$%L&c$ zZ1trK?k@^KZ6%Zw@2zxSuk?chjBv~Sl>M5C>p+O=i}8?9schM7glA8S9nO%IZ8%Au zWyKl^ij~x`OpwSl+(IfoYx9(X2zXd6@V;am-|U9m?G)0B2?_87R8fpE2T_EgqiuDx zSAIuD>B!D={o!EC!sL~uLmJoNUWv6{1-s8%(8!V(L5%=&W~pp)w%$p&YiqjXV4)u! zq*ObD&a*&uh4?n~T5spV+S7?i#XZMmHZz!S4E1O;Vw-Mq^bCj>Tyhmlu;Q*{2*N^8 z<;{6VpM9^KfLRcf(!23`T!64J97e9nGrOF3+WdP*T&wxppI9*EndG9Voa-}yVutZu zB?A}ZdS81_e5QFyt1K{!&B!o&gN?xpvxh>)>?~CKWdS&Vd@h1`V>icUKRz(lg%nUy zonta4jd^^463WP3fSR^ANF;FwhlOOCPb1QJBbd4`knzvUIHJfwhY$3smT}fs=(LexM3^xgu4)+ zOVtG@GXM&}|Pc{?kDhd)R~{DT{o%R9OAr#KQzGzKGOh3k|yJSndA;K{Q~id3f1 zxfC3pg<#$Mt$s!tut`feiQ|W|%66!urEyjd8+MU=(eijmx{fc>!$v|5sr|zq8SoLH$ zm0KzPIJ}g$#a))&I;ZHRx17JV5^v-q6X7kVQGj=6NuyXzijTb#-ubzTbd^e@Vk@_t z)1p$UjZrp3Zndg=r5a^WO^a}9RW{nK8pv{ig)Bz|vWUj}er>C!Yok?MKUcAL6^AA! zn5d8y=loAhQ@BH-^fZwtRyU1abjOxg?-;9*Y<0=>-KxmkYO(@aa^9k^ijQg41g3%; zg#N8taxD`38;ipy5z0&Aa!KqW9VW;GqCsH;!h>Bjdk?vdrY&E_SYsP__GmCOe0dZD zEayU7YX@I5IeUs*9(FRPs%)n>rhr4dF_GGn8l%AGkWtw+=FUj1$p6_ zA=%8S0C|=H97!lOyN~F;UKJ)X(=LV8<|FL5uv^1qVhiXrqQ}A&xR6m|xajz9&MF&VVjf>pa}C8<FnUxGJS@(|cfxHk`j?Pl5O+N7BsA$mVeI$s11WiuOS;oo9x5{6q&C zpv4sgW`nGR(*zsJW$;WaLgL+>XYKM`;?aB;5b``(@#@#7-yUx7=}Ps2vz&w|Hge+} zv_TXU(Z)iVB2U6U8mPxms5Pz11Ke|q%NvEPcN)0qO*_2C z*)7_9FZ=g%ro^(muM5w95j>ZLHR^lAEFI_QfFSMol4^Il5o>k)43K)5V@0r2ZO+rY zNg1NI9UgKL$WzXOOsyX_mrla%;=m-T-Vn&HsAT2Y*o9r7Ka%R+XkW!WUQylFOQ)F^ zKpB^_HMqKv1uo}=gkp?~U7-gR6jPX2tWYm+3MQM_<*yO=>I@p7B23~oZYg-!j_Yl1 zdZ@jMGN5nbDl7EIYt5*7L?5@`OvoM9Z`4bEJ?8k$#wD*K(`8425mb?LBqo^QA0aP^ zA+fo!N{TyNK;~#eTwjPHy3h69ee*6<{#5okqwp^8SzpvfT43C}pB85D+a60Y@WW!P z>sEz5U}7#0=mKBfY*fUPE*bPNl_n|d1jy;{U*aSeI(k0N%f}wrk8#e6QW~$jO0oy!3F~4%&hM54aW)Vx#cvK{S4z_yj@HfJ6(MyjEKl zyb$zCj8AG--5&1lKqFi&Cr2z`+L##yKW1f!u^RxUG|i|0JW_z_1&%5r8*QYjd+Lqv!{^8;?hXs)l>> zf0&*LbPZj7sGb1roOY+924RZ;U2V~TC&S|mm*nxtL?l*40tY?@he;4->UpRO6)-u& z{{>#0Fg5%PR+wWLFI+}dJQ5`L+pm$|K}t(6)g4T9_C=Q?+7Bcv>G_4N*utGBAmVq> zr&8O%mzYRsG73?0NU_CYt9vf5->Rj8*E-ohpg*izM5%W;?1Xa6P%J)=I7Wun6h6ri z0oIYKDw0loRHu!Ub_h;*;KHw<2XCx>)fjUNFhB}CKEZVe{wf?vpve(KhM8autqcJM z^&(O_yl_*V#UmVI9YGW1ue(!A1%7)8X`(hLd>}v-z(RjboTl}L*^H6#j@A|Pz@7NUUe-?lT|39MNs^NY4U-chRgFj^ALY9E%C!1hkpD*dJOrC*dBg0gtt73au zO(?}Q!@BHLrmb3ide)0F)EnJ4@4m~~X|D$DGNppeU_38VHsYz&MUTslhNH2B@n@KY zHs?V-IX|9Vl1;nA`9krZWwuAU2T*M|^v`dAJKM!Z^J#>eE*qN?o%LIf%cqvJ%|^dz zyxW}1gQBv6Cac(v-$wg`-vIyeGWmDQc!SN#09kL2=Pf}H^@b0pnPIltNXV@f%n}({!oX%yVQCAo2Joo)+2$icF_nPukEpe>br%vfiwcpmsyOc*2IIfY8f(Lo;*DYxkSbmkn3f+|3g;|J`$FR??}1U z>6LA6AzgQ>j9Fig$sm%Q@3|fP?(gZcCdcmE(f8=_`{IADk{RYhadyrVpfxC9>=W7t z*`+VdZ7gh+=)4;uL{ZqYHTKnr0p6}=WfJn2$WFsSFm0~jGy%3!ktW~d4V_ZoYGS3i zJ+B^t6ehm+*`b$ELvg*ekO=nx zAi*46C@t8QF+Tp$UuoFH7?7HxIIVIX`P(jzmWd|^=ocCnI7T-t5fE+99JaIY$3mYo zmD&y)^VyGrZ=z24c8LLpB;zD(JUpn*T7zUPWN;j|BNd%wMnIL%0HV&e9!rZ7Rc}w9 zg2Q|-;*(1d8tcc7CAd4zxMBojKscS9FpBw)=jVp&xL&W_7TL13Fw0OU**skp+x6%> zZw&!H&~Ky2Pk7Azq!`YIYBQ1uUW0!b8~Ao=){&LqLQ(z>nc&olf(19~4Eh>^ZA=e3 zv1s!V;7#>f6O)Uqi$K_mj$9BCee6*|-0ymZ*1^CMq~~aF0j;lB_*R)vmkipp$o}(z zKPT5xcD2ej`(k{)5EoSSVzorVeK=io=bog(x=9XeqcOG>L8acIg83qdR+;+gBpwwT ze-3SME=b)g)tNRdn5~7LR1?&sxh1M1{jeix8nRc&t#vsis_;Z5r;Sva>r_}bZEuCd8kRBPjgkdLJ0$64* zk{;ETKqJw3{|GX~UwM?{1LZ1YG#M2Fh-yB?vRAddT2G>6t0geCRlwRXC6IWj`P#CS zNlR7*r#>(0b50=ad`4QdWe;H}jx1!AKMl>zEJ}cJE*qH27hJVv=&}Ta8j;!*OuVsz zv^a~sIPFZ|-Me=Fir0vCV)B%r31-k3)9x#|cTcd=I9NY0=7+E5H{U+N& zb3{uQDD`w%nW&GR75jdtf3C2_l|V>K(Ti`8togq^^5i&#d{KqlycF`u?S ztL56Kt7F(0i;}FvZV79aH^!gpW0&Js^W{hNM&PrScV3A>`Nt);EkEY$K~05pjYA>% z`jm>2t+}hQ#_sw2yUfBx2`{rp&$_>X>QB6RBq#aCDn69t!65*CS`1Vye^o{@0wCl! zUpdQd*Wx=*GNDP>xpI9RkF#lH5yH@9s(ON3=`wFs3jw$=&twGW)9Pes`?l-%N{yf@eqC_C9QwCUs~yeT;s|)&0}0nI&$O1z*8Quqr&RZV#OBl z_>h#O}{_Ky_(;_X46_r1FMg&`~posNfyt~IlbWN=X;pN zK1df}%fPPtDDs&uR+yo{aePEZ+5fG!*nAJ;%djwDJ*s7Nzhu3#Fr~bb~30Fxr9f z+iRlwXNBp*$-3-iz6&(bU3T<7FjQL+$8_~B9XB(|r2n{(si_uX=W}n8$i(YA_36xz*Nc%$OXs!De5dryWYOD*=?!p&| zgAOEE1Xzh06k3LEw7Hqkdk15KM))lJMfvZK!r7aRzx;GZMKV&!2=9=JH1x&|_QvdM ziOw1S2zey)^z^=I4#Mq>mh+|{Pr~8SF=^Hb3+>>=7$fWknlXGNW@lo$HL<`D7@2W{ z_%d8gPIP%sW1y%5Gb2M2)xBCqqh|5r(CO{x@v+F3;(k4tfWmFpT$*xVOmDIRc35E3*P;tkG?V$x&hUE>*&J^^VGa`+QgCrqFj zDWV5Gn3Bk*Ty(BvOw&^>tE@x5z$dXBB-QCC9BJxEg~iHRr;G4C;F=|cLQ36ykdh-| z@xnc^HKgzl=?#NGffTr5H##KHjp)xW*g!aorFGpQdQbv1j9gc$*aL;BDlQqdKLMu~ zfbcVU7u;(jdKgDyOi`L^xM$26gG~~SjU^$RD!#5LUUUiF z!IbZ2<6=#xJ)Pu&`vG2}JaZ+E~ad&qQ65QS0 z-KFtvtZ{dDC%6;b-931a-~SH?daurt)XKtnQZ~~(?Wmzd zMKb>P|9Urlb(OWQ2ndiVE4Uo|17m0(l^c3Izy5Na-VsO`_11*idK4 z9eNDBa~&x5ZM5SXQ7EYmBk?TxfdS|_RY%dnpUZPKjQgy@Vmtpg_T?eE1Er8JV8gqJ z-ZPY&4dg#7Cb0zR{$#hI=sM0+S~D|Cvr++?s4-z=Eoq@&APu3&gI{S`Kdxkc<>zQu z@3NPc(`e^9C{sx0Dc~y{!B>&m*qHV6TvVlPi`s^9(Z6?{u+tOPoTtdjnN?Ve~RvI_@-sYo;DJ z3rv;uodqZ>?80ZagGIar9H0`drAmtcO8qJ{o;!Jp$`+d}0!CyZ%sZ!4RR=!P(uGi@ zl+L?0>xPzyB{&NoTPPK5>di&c2IQQQk5LX`tRtiAbjrT5+x9w?rXT9@me~Q**qvNE zZP5`9z#>*q?8fEqaGhMw;k2kpZuT~n{VsI5maDX;P>OLcAImr$;lljARZZFEyG-C< zPTqjYl)NIk_g~)%E(%P8dw4pyiPMj6>k1y9OFreJW$%<+E>8)V_wof~9Oq4TML#F3 zWWJuZFnIdoAW0}X_P1S6&#AK6n@pRR3g#fm)g?lisWNSTA0r0=Q1#ubU%|e(t{L9`_2In!laeFRnCAbaJWgt_peUfOzJn{=H zx4+5xlHJ%7cn)f!XM=}`Ep~vGI$H<^tSNOSK`{?sWs-x)F3mF{Q@MZKXHm6Qkp1?>gj1%iwB7bId2t!ya9$r;?)(o>zv58$QdhLNwywOWCpD%0|rBx8p z7V*gPXWMI}RolcfNSfgKHvrol`%X62+kgK(r@S3CPfacVS>1_qU!V3<~KkZ%4aBVR7vCfqjT6?fD z#QX*NS#L0>ph2cbw^NK4roo^ZOJ!hWCF8VNp>5NN*>=tU3AfU@YunjfQOz8b(UIP^ zqiNidStQodDf6yns5xacbdB3WC;i>rSB=SJ@Z6p>#vFZzQPkq(bJtP4eLAv6DN$%< zrO&FPtLsrF%<$8IyR&1QldzP*S&>%M>aMfu0>5;VPS5nak;Gp|CX2_qj)~oKO(~l7 z-UJ4nW!io2h)QyY$&X{BCt}BUu1$MJmtm5IqrIGfsYVU25|{H7)W?cXQ_7J>FS$3| z%yq^w2pOt7b&Fxzu|I$3`Hj?ya`;~nQN#V^4Bg`hnN(3=$=RhP=H|O5?RR zPCq*D%H^8o(dn0V#ySD7d#w=rc-yxSFwW2pm8u52+UQ*zeIBL^=G5&6O>8V;osnyZkCEOmiQMpOTrw6x*sINzumR|^-&KaomNajwBv8&7%Ulh%IE9Nw{ljs zZ4i`ySKIj6+!P6l_B1Ib)tf>MR5HAci__(%yLL)+_$(UYq5NjMOx68-Gx4_g_R9yM z%f?m=*NA;OmF1hs=HC_+nqJK&~pg@1gX|Mi=k8D$IM|8fHiC z_7IfSKI!xhhC6TbZ$j6~uGb||R$dpu7pK&1hsTJ4h&nlhtWeqBoeha>G$g8={^Q z?(TCd^o_qWHpS`Httz*9Rt$onXex=l;KaGFzbepp|omv_( zI0VPF!_IFk6Yu_G|J;*2i+a4J8qAxY4-MB=WkYrgmtdnbIzaq7#=TLh zm~*WC)dUo5SB;mMojHq9T z<~EpY2&4V<k%gZScA5dmIq;(Q6<^q8KP7Dr*UKJn|}RO-?dr?gS`*_@-aT6n%0-CZUn}r(k%Th9z+b2&}ap ziG>UrlLLn)C! zDapu}L4sFUM%>q6q?ecmO5BE}1Yu4*Ppq&$Aj2RzLoGW)Mk4EI5g}+0FKN*}0f21-3!?~=BNk4Vub)!^%)!CJ{69>$ z*mDlBTf?TYF217WG@HUYAr{I1F`YA!OBOS{uUk*4RLbUa&iMnFE0$JgD&2BqR7lG!iCw$bL$_=XC^qE&ExNXYKDagHHeq*UyJ|U-pDl!L1ISi(anzU z$4y_oNPno@7|HtLIOjy@YSh@4@dtdl;85RTHR$nk#^3v}Q=IhKU&erPX};ROrapNXS)G8I z)!3t&hSi1zdBE6mjj`PCHr@w2c1#-?oMG6$d4hzarE6=^e~CF#^7;N{+QU!O(nKD% z)z7E|+?`F6ik31-1QJ?tlSD@znkWqs6b)OIYl+C(f`{ffDA-kEfIs3aQFE6$I?e)+ zJ}EAFrN*~kF3G;aZA!n^km78BE|aGq=_nfG$3&Xk)Sp8K7wi!x23A2L|9p5SvH(k` zMi9~gI|XkWYX```RtmCzRFf4T0T-7%CfCy`6-na501Huj zBM6_*i7|^bWJYDpmf4(Ax{N?lF&q1FW8%vPoswB-cJ+DJnejuxp(m$?3L9eQVl{b3Q;{i9un4KBI4(KO*SO4}PO{y#B zbE7e*Nfg!N!7KLoxkemJr@IPLK@Ul*!McQYG*f5@L%XFS0`xDmnCcC&kWh+FGVVru zE$o4LRR{jk@ak*-Tf@BSU-0PgW3DPton&O>)=|kDaZ5Pf1qrk-FF3G~pKa;jf13Nt z4KcOPgkM)TvK=N95h;sip;S4cgm34G)OK$CNRnMM*a>!Omgpv zFa$Sp2w+3Q9YzjOjLYaFRv`GM8xp#`dgEi}U;J+!OGiIbPhyX;vkV(fytu$u$oStR zYLwAXUzq%(y!cO1*lf=X_lY-Z5QAYrr%gZ+3`P;Kl5=GD}C?I-xJCvbGjLA}e zj%-YAi_3SE0m`WT!X_^wuKxh|5I7#r_|iG_u4)<0Ak8F_QDq0@qXAtV zPdIAlL$9sPHZkujX^yExj04#rw=LK7@3?~~b-zle?h)P7?--5#byAEn#;BXmp#JLR z?wPUrP2NBQm+GM~t|}>S+bt2F0OvbO0HQ#q_-2dTVvxCcWh*Oz4N+FT<#856srOR< zeHq8yeI4#i31TBDx>~uNuk9IMMa`wtn4UwuJY$qj&UhdmY6axaxqm= zq~9a|76NQEk123IY9m)u@EYWHHLVOa1n@29F-a+NlYMR9`%0z7|T&zl(jB zjW7de!6~ZnULB-4L(H(Z+MVMR!a*!!XCv{X{#_=lVRNucl^5#Kpin07?V^E1)hhxW zZ%p60G&}ge+@%3`oqBLrV#^=m@LG>`)x|cBIQ8L0tsmuiC|H98Kh!=UL<_WiG^u2D z_n5RgU`(2J%|pH3*X6wUwi@}VhF?nv# zy?rxsmrwL4V+h{vE(CsVt?jzbH&xNWkv?E-MFQEAv zr+iiV^!e-whpVmC6n^7Hw2QhK;kgzyYN46x2%b**gyBGi<1=AZ`$gLvkH%VFkJnQ6 zr&czP>M+v1@rI7gK2Oi8u_TaH-#E&x-legM~xFWpLQ`4nQ_xTJzGVW_j)c zJ2>%sNWN>Gtq0Y=Zuh3_K8`--Hx)77KY>yr$0a@aBT}WvM>SWTG{Qe73JZmY?vUJ^ znF;S?#`zBbL+r$E7UO4kOx^7|29oOwJ$XovCMnSd zzQwX`(94?bxfIVI>Yy}TU$hQS%yGYYe0+lYuZfSgEqDaTa#&H+nqYc&9|9{qT@UX& zeN!Ksm=0iU%pFex{`i8$5CTIjtzUdN=btgpB%Iigy%PxZsOUYDWmr!T z{h;N(H|{`!MXKbduvQ(fa+xseG4J6ho8yW=KS~;W*r;ruU?17AmCWFE0)40ua#%i} z5%D6P>W9Wk&M`oa)F~>Yjyr5`jF0^jVS=5_Ym^SXPBf8^3j)N0N;k;1Gd#4IX$mQL zjX%2X*(2oC@ny`3UCzgK(Ht=B^ure1P#Nkc5Zhek{aw~~4huV94u~ZHiLwi(+=vSu z4u*6@Q!J8VLckGKapZbI^MpR{Ct)m05qS_7{tZv=j(8j27)CokU%xn7^Z4yU+bev? zdxqZ}#KxN;ys$Wih7&L2&dqw*)A!@`1MyDq^{9O$U-84VKjO8wz+ z`*Oked+b4+1M;&XHS{Rk5h0sImPJc-4OsIJVGRNSmCT>B-|g+^S};_Q!j zA=reIj)EP9g)31^q((`kIKYV|om~#dZ5GUJ)z57Q=5}W1c6a5r1O5+%`&YNg7F#x0 zhOn-(ifNcBH$=C|X4_$tDVTxFN2iL#Qt9L$fihZjn$}`LKXCtQ=+D*av^eZK;MuNM z!umg^;IGoCS@(IFXfxwf&U82))o2T++v_LsLEs*9R-G66-9CNFAbze&-dZ8qnp?X4J)VKCNrI1+xz*`Dt20n_Cd%?*p?T5a4~j znnStV+SIj1rqaW8o!yu5M@Ejv-feTFl)zQ^K|k{ZK3gb+EwJ17+#wli`JXJ$)Axr{ zOGQ)DJhq!PRq6lWny4Y!6vE;VoB5C@_WT@HophZ>#)oMP9J!)lFm@KKBq#_gax)xT zM=r;3z7anieH&nh7lgg?5%b9d#TC(U&Il+YSadc@Ow-QOidBKx9Ur6MK(p`!+F&;@ zz_9P^Fez&l(M+|?%MQkqawwF)ESKBZb}7>g>;}g2&B>6FYAFeXKq8aQ2MhZiwXmSBE z%}M131kd#G9N1^B7FoM3YWzuR=Tu5}Azs@hf!7I-Od%-4>a;f0L(PgUKEaNRvtV(X zeSD8(*i90Rx9MpPj&()f_7L6$31Pa|r?tk_GWK)%v@g1lY1GbO>>UP34w0=tDPqPZ z)L9nbHlL=Wle+)%&{0mYt4PEyLfIX+f!sD?0g3czrp^!>vD67PQNgt|30Y1{pV>t~ zW9u0+l`a1?I&x(eF#1+OpVufl{&!!{uD!@v_W(_6-FPQ3)H<^IG(gCB-p)k<&pBBB zx*Ol&yAVoo@soVQkj?uYw#q}=PVkz~{~_m@!l`ms$tRmm0Y*85vm|!0JL)UadP<5Z z(Fm|?Hj}zH{f1)s#QqB+#R0B9;H|+`-QW_1_bin0yc{p6K9La)QS^89yN3GXxaQj% zMty?*VYJ!&(|zB;+@JB4QwS$vi3OezdAn(SA(UAI`G zy6xT+{-Iyl=5dq4W^h<91P$;54hW#qov|_&p23C${@zmj;-)Z#NEMDyAu8nj^dW5o zkJNX4tOjH*F|zh4;1}>1^>;n-PX~?Z-+7e%v9rECF{&qpr%fIWrO4sri%ZA1eC9bL z6lTGfi@ms;zu6&>RP*P`3}dtkh368pCgsi;5y_*;#GSrg@JPz+A)_dc&YJ7|kSvNQ zpto2knag;5ow_{c+N4+IuHn$OgGwB~IGA;KH7rN!Ih8XbTqx^vEehC4&5J6g5(ibN z*tsR9H~6d}g5Rq9}!%PEFa9m%_aZCWWo z%?t~|*BY7&wRqI+ZIhYsI4R+&By8gil)VY=C{wb~o2oTmHvL-mr63bxI@? zQhRC7U8~dQa}1P6=1cLezRu`i4rfFQU0tG)aY%A`Rj&oG+nIIYFC}5lMN9s;g@uEz zIJd;dnT8FR;2zLt!N^=91N6miWFX(wjVE{;DA{3<#z+3(u+{vCNgX+W^nY3Uq9R>d zPO+mGG>$UoDIBqd@*75(AdD^Ud_42kXoh){bTJu~hUU}m<@kwklePR?92K|KbhDsI ziaJX!J@HxaTk1YE2krQX6L>p9_bW}0%;P7LVMe>bm}gnu%nn@$vTV8`zKx&JM6SDX zBm$LliaGaGT!PR0*j{?Yez?f-XPkXBG9vVvgYX{Sp@)?iA)A(`+ zv!}CbTDc805^iZzJvHZKlDFGjq4<3uQtFHPW6|`#RgNQrRp0B!__9m>e(@X?Qe)nR zj^h*d!sn%1k=5wmfqWN5&ofm1H>Iy!=M=N6adRd-d0=H1E?@d>Cud&&cacouE@0%f z%X6*THq0|WepNiTyfSG=A?xj>t??C89~q1F z3&EgKyPrXSUR{Kf=ZfdTzDP#y-sl$YY}D$wggV>Z;2h+(X3IR4X0BOB&vfn}@ZY68 z1l>hP$@lD}KONwT658eGP==9px2PiASw$l8>X~EbwB-E+6Zak?=6HTXymYz0=)J50 zU9aqq$z2Ei-PEoW>L$9vl*rB&KCj3eT8_=>Ya!{0Dljj!5Ow-K@Qq4>?lp`#_HYwD zdmfvh{kU~nN~aLb4VzrR0Q0N+Y--Ti%~K0oI!j?vNc>7-|HDs|_>9UBz%RC_hl8iN zKcLlr69aAE_XXA zH0*+=biV1?Uzo9rZN44)YcY$is-OCHU5T{)`K8YclKj5avFi=1yM0)D`7o3H2!&DY z`)GWow2nQop5LGw3XF!`kV&FxWi5x^U&)ss^zz{+91U~ zb)KgWTN?8MTVmmV0tZ(5KhpcY5d^|!_#FBIiRh_MPBCpct*9BC(h<#dsscuAgP>nF z{F=w;gI+Mjll^Z0LaI0#feG9xT{ULlbkqgAl{FNKe0%{0Sf@6P)f0j0Fq3ZxdVW_ zA;G*6{k$*)k+muQFs{UVB}hu&^Z18W^HMP zHE88qE;m{%denk+Vk>m&`3r@D6m+sTdwd=a%Nf_o)@}LH`r=VK&$Rj=&mTcZheeH8 z3MoKKr}n~pEDO(Z&Ji0%eG(9r(~IWaay}CqlHIz9>NRSTR0yRqCVD*I25PTcT@hLA zRI=D_lO^;tHJe5R@LRF|^Kd_0(Dv0%P_tg#oGlgG6Wb|MzCdt>ra%!&M4qa5mMt-2 zaeBq`)aO(8IE#ZZF;9!1q^CnZY~8uZt=}A129eSOCFIfwi?Sfek{I zTR+QWS*mjIzNNEm&Lb-DB%8lDcESB|M&0o<5?o$5ALF1=9;FVY#e;m&a4F6u$9Bkk zvR0asVS+7Ume~{|o-c(`BL$@Of18NZg3(h?-qAEhXDD{>Bx5uVJiWCS1%uqk$E-Zm zv?lfte}KKuixOMq)%Yn6zJ*VII&4eYb_^vVg`v{r&0QBqhdeqnpQ}k{+X{UWU-l*UJDHjkn$eSM$8L4u=>jnyX5 zDC2ze%QUW}M`4jDvM>+1=-Y(4D_;wJL0dkrfc& z$w`v`dhLslu6+MSKcMd*zR-Kxbfp3X2&>%TT1pP$mU(<^0L;A(B@b9;z+0%2pMVU5 zn92Xf{bDK)rK$wRVR@rQ8B*4Si9zV2>!#z@HCU>*5q# z_X2z{1JuglHDB-VeQ2#tC;?%7r>mh7yj2n;>jJYMg}=a35fBOLv(mxkXoAnoZ2mnD zEVGH5#FkNRK`+W2sEh-79Li|RZn*h_g6BqxTdTCRp<0ZWFDV1~&qmUVMuqo*Hf2@L33kH@#2IrGZztYE~jeu8bVG<7Gz6vSS+ds3zGn_A!mgY`$xr zBwFL(;kN>{JsJK&v%^)|KYf&yhU^U`NWuITY)XjaqkByZHaMoNkauX-0?SySY_)bb z_;l2Y&bWez>X$K|D}j^^wxl$M_|d!#>&GrWEC^!}-*mh0bFcN2nYT=hRP&a4w0}#U znw%c!2-E^6fVH_lr{iSm0<_s}=&SnLu^4;2%=ZwVQMKxM;d?r2l(ho@yS4T0Y`*^N z=;;vCwyDSt?2IKRn3nCm68u5>0uDD;VWM%RYNhVnA_4VumPfdHV|KFZtVlfEC?(%+ zMln=Kb*v@6u3zU{sp)eY$QJ2=2 z1~0NbKnOIQ+G!WpH?pJuk;_qAk*v&~PXW`16YNc5mKIz&vZBczsvWn_@&G7rR`-Ab z5L=0s`VO(BWG3cb+VDhm&e~;o8pj0|aSZcmll}T0^`E0YWJjRK^+%(XH0ddwRM#}; zj~0Vx?qkUiU~5Y7ZEY9Hu|et6x=ck|^7*vJkp;bBO}l$?^}Vh5_ou1qiiT!SmK_n) zE*d*cHMsN_s~SGwS1C`vYC&U1%uj}M?Cni%i8%1zKVz&wOniH(NvYq=(x6U%SH zA?%;N*{bhnqQYYuUrmvF6@#ykzxeNH4)HH*&w7OEzVG35Tpp8gc|#R;enBwWOMFBq zS1y3(83%` zp7i!e?$~MnCwdINxy|(aF;c~DbpomIarT&bQ!mwBK;Qdw2q4?djp8~$-+ZlQg}z(W z6BF&#yFC7J-LbVI&*7n|?vsisu}4|%esjOkeRF2@n+OR0eK#MJ9M_+;k(d9AGt)-} z-@SR<>`SGuOQxUZPzahi;qAEBR0r^k-`8Z^tk}}-M915;1E)+Hi%;Eed)*DYD&$x< zsLPg)g3qPq#B0U}>y|Rei9b+Q$DcCNOQ$1XO(rBP(?wOCh44<9mLcpXLD=T1EeeA_ z%nK00=|^!!igrf)i{5WSI*frXlqNIObq(@xwHTF)QPJdsasOs9ee^gdY=Sc;22;bVdMmF^`O9_E?B zG9|Qvl&;;CfexAAw>JNxXL3QTSXXx(p+$o*f)L&g7riR$L4NfKY1}b5vVKl=)>Mat z4L>7-ARI1S{sS`jCfw{4o!I+evUdOf2I$^@kp`~B;B!6{~pJnSp#2Omx)f? zXEBA=b)2n~$!Y%d7XdDOs!$vYG1*>fGbQ;$u=YW!pSRfZnj_uy(+L9`;T9 zH64uwQl~1{d7~T*!Z?T$XZxKW%_m8G{n@kV#%`S%)}6xkCqPh^)@S>}o(E(9ScQw+dL~DoPcFw{Vq!mpI0TP< zMghuaFId-NhsBIE^XSjQ`c*7QMhUX;nZ+mO!QqjcuAwjUJIH{pi}G*SgV|^YD?9Jy zYJmMpZbL{^FaZ`Z@%OKa%1#lwwe_7~qHn+^AAfMMMX-3a)g7<3R7K5ZV_m&$sQ(#? zXaSNW`XQ4%TjXZK$}iPypfp*{`BF7Q>um8>U6!yK@^9c)IYM#@IWl}5GS$N2KKyeR z{}P60u>TOo!v6FQJKtLF5&VK0@_rLou5RwynF{s;yQE0v!d|I(EuT;Y1JB4tU0v%@UpsXf^emuy+p`uS1!lAdZQ}*;P zc4gSNr|LWF2tIUotP&TWGXdFQe*8w)ANanEeb7<7SFmG2jZhpGhJC3fV%JXt5Mf>W z^s>diO~vEn(Jp*rV%&d80lOV66%=G=f;dmjGeZ1jD`%JVn+5uN^lI-b<(5QEj!!9$ zn~S$dD$L|iYcH$BC(u)B`imJIeih7usJW&_>X3Aaj{7C|xh6#xg_Xcx>Dz#|vmtnU zP;=wI56uFl)}&IqI0>T@QXz1^G>(pun=ru(`t^@VXv}>#PLe#MDu~jX!-ngVio#bk zi|rb_ySk06aJPt~NepliIrnXpkL1Yo!M$ygxkNRsf>8;~tERy4W4N1Ic&^=9NAtgL zF?Q0qTKLou!W4$GFzs(ssLNTnsY&I2j&LQiIW1D{f^z06UgYHRhsj@aE={NbG?b}S zyzAm)NtoZrF(0UdtBzRhl9Uf1_~dpD3pivUBJ`6-;JwHgk}ePB|O@67b+3w`*c6r(p2N2YZRn z{{*;-e_bX)ePzT?EYjp`H=@5&lItbC)d2SYDHi%ID}pJfnuQTDA36cSBq%zI!_}4< zB|B49MbyesT1@ymBBNA5s1fH|eI%d0DO!J3Mk%Ygg`oQ@oy^)xQFT@kbFESdMevt@ zJJ0zaTpiJRgvfG~Vq+!dnD%5C9*{;IeVoo%)hefS?GO*i&!yI-NC=*p@bsAsE5XV} zXlOCHTupX!7;E>fRh4BbW)6q7u4*JF7+9Lbh5Q#*_tmc9%&=;EMvaIG^d%cj{W48Y zib=%$Ojg9+mIcXiE8#dQ)6x>^9E*62xmi-3?Kzr+4^S9dYo=>UX(j`GpQPf9nt)>jN^SP2cWjTUUy+Zi|J{uE1* z^<~yzv-C+fkd65xT9(7^5!I6&d3n;Qu#%)-I>KGRfh)Zhpq>U_w|A{F!C@vU7hw6> z^!i$N0Iq<|iMn-vnJY%Uz{%D0<<}m{7XfEHpT-FNQtkqVq=>v-9CP8+tlfXl#;8rP z-07cok=FgjHeq)_-V0xuBxG175ft5Vns;%fm|3=iZexBBXK!Xp#CRy(g#5RC)UZ%V zNmt-{Sb|oG%k4Li?|uihK_cE0qZ1r?8+A`8&C9z2uTOScas(!amG#mHE*@?-|kw5k1p1EK`2i4V+I(zbt(t=;)&brWt_qc-=E`+ch`#CWk< zm{&#uK9>|adFS?L?*kuvX2Qf=z+dwZw@}bZ3X9!N{Q3@jf`$B==B^VQ{jc+uVx*jw z+yWE-9x|D5#=4+i{Ll?t@V?%hA<+1dCM>ox^Ay>qG=+=SFoWW=rc z-|QE$8w*d;$0+&|sRdhy;#{&z)PCT(>X$(2htB%$|K?Pdn4K3xOb+5rx)b;l4qu?X z?4n^4*bUGTCkkKF(?`00M)~AHGqK&*+$Q&uY0?JCmV7&J_#LmJ=x?=}dABoLi`l9U{fJKH5!S<>m{;cQ!O(0?bN&JWa;N=J48uTU0u=9P6 z{P_5#zJp1;kPWIiA)e}B>wauVqHvv5 zKu$eXa~!fxvM}VB%*ViJJ@-Sp7?!1&t^>*^ESy|WREM@*#JUXu9j*K^w#q~-5*FbV zrDymAK|8O(j|h??2AqVdI80cwD-fRih;cowq3C_A?;Y-eIbZ{V4U(X#bjLlQOgLol zTuJ^`KcS?y2sxD_l#xi#12N*mqCSm0@DqPcuDUNH?A_*A#foy1uz8WxFD)@(xI%=BB* zvwXT#4vDSFKBc0$61G4gU%}f!t6C{!3nr=6anzR20uBMDt*p6LyIRILpqiu)pWnpmR-KP<1FG$I zZEQeTqq*+S|M4SX7&!3B2EG^hG8j;Ub0CVJ{n98ptVN`-Z+;4Rio7~4{fvYr5F1Sbv^84zHCXwNq zf7fMIpMe~icfs#Cx%F~@BF(IzbKkj(ay=&^S)F$4SkBG9jnm(O5CzYKA3}{m|8=o2!lRPEezgf z$M(?k=W3ar@(Ievc_tLcteX}M8+nbuYw9DFMRAhd4Wi(12yJ9toct>M#zU0GBEhR3 z^8td(ILd@&fQqDA`w`Xg4RJ-c!P=VmXRUALF)*3NXG+XE@OS_%Ek(1k@F6bH(T zt;fn2i6mkHuOFU7WZHSV$iD3ZL-%-zv(HD9k5@%4<1f~_m0T2r^3Az_!2j|JS$hC1 z;VakLs8WQkf15yoLUc|!9%6Vm3p^fy%)S&fq@~C>1A**LsDgoD_&^P&G_4)%&oCJ> zbRQ?7pPy!op_oQUe}AoF`SuuW^@GnYMjQ}+(ijMzHJVpBvey)H1ro579^~`w>adPe zX;CAeS!iqTd`;CZ03gu4H2uucE%-AW>-Zycrr<%iz7{xG-k29K2SIq(M6((&!7x$rU8=yTUVapuNJu*pO^7PDT% zhHsWT=5u_z%cRf>`Hy08#^c)xZP3brQ=9N6=Cqj20w@_G&Stjwg{T0Wyys*^{&yqF z`+N}RK*g=Frb<;D{&LsK41ozaDF=^M2fAPx#^L@~ZOp_I2Jav)1;2_EI0DG~&#tw# zIuJ7)ik1@xJ9!`5-KOMhf;}^ijokII#?t*)GP)%mHGB}~%7(ItjZ}R<{Fu(>ryv6Q zcTCSt1e#C-GXX6$c*50{F=olgDWelI=ErUtuxSg|` zlxmQ8#cT5Ev5;oebRy{Y1JebTJ($mpn=ZEH8;I%V{V)1s$c807&z6doL-VA@kJ7|XjG zIDdi>dI!(>NqX214oNN-vpmi%u+mOygJjq!a_fxtr` zwtK2D7}r+7Q7Grt$T2?_?nqAd^Voea#B?E0Jy2Jug}Q&W9|&en3qT7 zK%t6Pr6Q?UPX-td>cz-#HlE^d7n)punG_I^h+0K{kI!Wj)qF;5B%95W($-p!2=oYj zGjcHC5h7;BKX+MH_|35{w0^HPZ$Kghs}@16)pPw2WU73{k5seadi~gzmJgl6Ad8Zn zfL1l3bTNyQ*KGZi{8NwEW9%A&1y35v;8o$M$Q~Jkxx2Q~vA}AQQG;R}f!M-=b5!Gy zYG}M#!QDD^#fI5bZG0W`+`C~<+m9Xn^Ral8vX9p_;Pq99@yYFn!>fwaZLY~_aGT#k zH}T(>T7vHD^{RjISAVk%us1uCiagK@eJ93~YOUfsDtGr7_6Rl-b2Nu<0=7W34-5TT zI$v|VVjFD&)-WRNzeO{vKVVxN&}FN9qetX?L-u2i;KR`i4Y*kmY7=6U=MPzM3%;`U{|R|Lt{oi0B|Iu{B5clNC#!+d`e5Kb-KXBG{z< z;P+C~#Ai@ejl0O{%LU#tzei{%3}Lnit#!uP!?EM>s03Ze&xa$KzXB+#}L4G>(?S+izaVTX0X6lZ1CV2?s*e7w1 zaF#*DesPW|O_hh{JR(XstJ@;SIcMn4CrVzRHLD2szvWGU^jw~JyA zK?1KRU;h3ENC=c1{1CYTFVOv~Yq{+ndt&DG!a`PHy$71qfhT-Lo{70lt&y5*m)~#q zEGU<9ozt-^nl>fX?)v)avefO{>aN&xzj3|MkAP8roBw(kKJ_1s9(7)O%Eq{qq`k0e z7W~W{pAHHCqd1bPz1a!vjeG@X&J;$|B?;aCUjeEBRsX1`?Qaudo Date: Wed, 15 Mar 2023 02:13:29 -0400 Subject: [PATCH 16/80] Minor change at the top. --- README.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 3f418d0..dc42113 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,7 @@ This repository contains the Klipper configuration and firmware for the Sovol SV06 3D printer with completely *stock hardware*. -I am creating these files for my personal use and cannot be held responsible for what it might do to your printer. - -❗☠️ **USE AT YOUR OWN RISK. YOU HAVE BEEN WARNED.** ☠️❗ +I am creating these files for my personal use and cannot be held responsible for what it might do to your printer. Use at your own risk. # Highlights @@ -156,7 +154,7 @@ This repository contains many files and folders. Some are *necessary* for this K ## Ko-fi Support Me Ko-fi - If you found my work useful, please consider buying me a [Ko-fi](https://ko-fi.com/bassamanator). + If you found my work useful, please consider buying me a [Ko-fi](https://ko-fi.com/bassamanator). ## FAQ From 140ff8cb30e78c327f5de93c2548ebbe21dfb247 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Thu, 16 Mar 2023 15:55:18 -0400 Subject: [PATCH 17/80] Added KAMP to to-do list. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index dc42113..edd1e52 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,7 @@ I am creating these files for my personal use and cannot be held responsible for - [x] Finalize filament sensor config and merge into `master`. - [ ] Create topic in Discussion section detailing how users should keep this repository in sync with their own Klipper config using `git`. - [ ] Explain `PAUSE`/`RESUME` extruder behaviour. +- [ ] Integrate KAMP (Klipper Adaptive Meshing and Purging). ## Stay Up-to-Date From 3551f307aeac3ba4cacda4c7286c61a2ede77362 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Mon, 20 Mar 2023 01:04:36 -0400 Subject: [PATCH 18/80] Added beeping on colour/filament change. --- cfgs/misc-macros.cfg | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cfgs/misc-macros.cfg b/cfgs/misc-macros.cfg index 73ce691..053e748 100644 --- a/cfgs/misc-macros.cfg +++ b/cfgs/misc-macros.cfg @@ -178,6 +178,9 @@ gcode: [gcode_macro M600] gcode: + CONDITIONAL_BEEP i=1 dur=300 + CONDITIONAL_BEEP i=1 dur=100 + CONDITIONAL_BEEP i=1 dur=100 PAUSE ; Pause [gcode_macro PAUSE] From 7571e95a5a0969800d6e3c45c5d5c7ebe64e5728 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Mon, 20 Mar 2023 01:12:05 -0400 Subject: [PATCH 19/80] Updated FAQ. --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index edd1e52..ed80f86 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,7 @@ I am creating these files for my personal use and cannot be held responsible for - [ ] Create topic in Discussion section detailing how users should keep this repository in sync with their own Klipper config using `git`. - [ ] Explain `PAUSE`/`RESUME` extruder behaviour. - [ ] Integrate KAMP (Klipper Adaptive Meshing and Purging). +- [x] Add `BEEP` when filament needs changing/`M600`. ## Stay Up-to-Date @@ -159,6 +160,14 @@ This repository contains many files and folders. Some are *necessary* for this K ## FAQ +##### When does beeping occur? + +The printer will beep upon: +- Filament runout. +- Filament change/`M600`. +- Upon `PRINT_END`. +- `MECHANICAL_GANTRY_CALIBRATION`/`G34`. + ##### How do I disable the beeping at the end of a print? Make the following changes according to your needs. All beeping will be disabled except during gantry calibration. From 1e13d86eca87b77c35ab899d77073c43da1af707 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Tue, 21 Mar 2023 02:34:54 -0400 Subject: [PATCH 20/80] Updated FAQ to include SuperSlicer related questions. --- README.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ed80f86..3234f33 100644 --- a/README.md +++ b/README.md @@ -160,6 +160,14 @@ This repository contains many files and folders. Some are *necessary* for this K ## FAQ +##### How do I import a SuperSlicer configuration bundle (`SuperSlicer_config_bundle.ini`) into SuperSlicer? + +Please see [this discussion](https://github.com/bassamanator/Sovol-SV06-firmware/discussions/13). + +##### How do I print using SuperSlicer? + +Please see [this discussion](https://github.com/bassamanator/Sovol-SV06-firmware/discussions/14). + ##### When does beeping occur? The printer will beep upon: @@ -168,9 +176,9 @@ The printer will beep upon: - Upon `PRINT_END`. - `MECHANICAL_GANTRY_CALIBRATION`/`G34`. -##### How do I disable the beeping at the end of a print? +##### How do I disable beeping? -Make the following changes according to your needs. All beeping will be disabled except during gantry calibration. +Make the following changes according to your needs. All beeping will be disabled *except* during gantry calibration. | File | `cfgs/misc-macros.cfg` | | - | - | From 37be3998d8621ffd36ade7ef366e2574b4d73f76 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Wed, 22 Mar 2023 14:43:39 -0400 Subject: [PATCH 21/80] Updated flash firmware section. Added marlin.bin and updated klipper.bin to latest. --- README.md | 23 +++++++++++++----- ....bin => klipper-v0.11.0-148-g52f4e20c.bin} | Bin 24244 -> 24244 bytes misc/marlin-SV06V2.0.0A_2.24.bin | Bin 0 -> 233988 bytes 3 files changed, 17 insertions(+), 6 deletions(-) rename misc/{klipper.bin => klipper-v0.11.0-148-g52f4e20c.bin} (99%) create mode 100644 misc/marlin-SV06V2.0.0A_2.24.bin diff --git a/README.md b/README.md index 3234f33..28965b5 100644 --- a/README.md +++ b/README.md @@ -50,17 +50,28 @@ I work on this repository all the time and a lot of new features are coming. Wat ## Flash Firmware -💡 *If you have already flashed klipper onto your motherboard in the past, you can skip this step* +💡 *If you have already flashed klipper onto your motherboard in the past, you can skip this step.* -1. Copy `klipper.bin` to a MicroSD card and rename to `anyNewFilename.bin`. -2. Make sure the printer is off. -3. Insert MicroSD into printer. +💡 For the sake of simplicity, I will refer to the klipper firmware file as `klipper.bin` even though the actual filename is something along the lines of `klipper-v0.11.0-148-g52f4e20c.bin`. + +### Prepare the microSD Card for Flashing + +- Size: `8GB`. Accordinig to Sovol, the largest size that you can use is `16GB`. +- File system: `FAT32`. +- Must not contain any files *except* the firmware file. + +### Flashing Procedure + +1. Disconnect any USB cables that might be connected to the motherboard. +2. Copy `klipper.bin` to the microSD card. +3. Make sure the printer is off. +4. Insert the microSD card into printer. 4. Turn on the printer and wait a minute (usually takes 10 seconds). -5. Turn off printer and remove MicroSD. +5. Turn off the printer and remove the microSD. You may find this [video](https://youtu.be/p6l253OJa34) useful. -⚠️ **Caveat**: Flashing will only work if current firmware filename (`anyNewFilename.bin` in this example) is different from previous flashing procedure. The `.bin` is also important. +⚠️ **Caveat**: Flashing will only work if current firmware filename is *different from previous flashing procedure*. The `.bin` is also important. ## Download Klipper Configuration diff --git a/misc/klipper.bin b/misc/klipper-v0.11.0-148-g52f4e20c.bin similarity index 99% rename from misc/klipper.bin rename to misc/klipper-v0.11.0-148-g52f4e20c.bin index 87c01e2e3e658ad8ca0da5fcc73ae013017e8598..b0bf091455bbecd0ddd0152348383392ceb7c69f 100755 GIT binary patch delta 33 rcmV++0N($!y#chn0k8#H5<$G2Zjx{v^Kh0=UjGZGAwf{+YRlHM7h0VJ5?~Ng diff --git a/misc/marlin-SV06V2.0.0A_2.24.bin b/misc/marlin-SV06V2.0.0A_2.24.bin new file mode 100644 index 0000000000000000000000000000000000000000..fd450efe132bf83c46746abc355d562b68e12516 GIT binary patch literal 233988 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 z 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
  • P|yhg3)Ed}n)`~P!pS_F50-~axe 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 literal 0 HcmV?d00001 From 1e80ff171acf157760778261b65cc70b4bcd4cf7 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Wed, 22 Mar 2023 14:49:57 -0400 Subject: [PATCH 22/80] Updated m503 output. --- misc/M503-output.yml | 111 +++++++++++++++++++------------------------ 1 file changed, 48 insertions(+), 63 deletions(-) diff --git a/misc/M503-output.yml b/misc/M503-output.yml index e40e282..a24e829 100644 --- a/misc/M503-output.yml +++ b/misc/M503-output.yml @@ -1,63 +1,48 @@ -Recv: echo:; Linear Units: -Recv: echo: G21 ; (mm) -Recv: echo:; Temperature Units: -Recv: echo: M149 C ; Units in Celsius -Recv: echo:; Filament settings (Disabled): -Recv: echo: M200 S0 D1.75 -Recv: echo:; Steps per unit: -Recv: echo: M92 X80.00 Y80.00 Z800.00 E691.50 -Recv: echo:; Max feedrates (units/s): -Recv: echo: M203 X200.00 Y200.00 Z12.00 E120.00 -Recv: echo:; Max Acceleration (units/s2): -Recv: echo: M201 X1000.00 Y1000.00 Z200.00 E5000.00 -Recv: echo:; Acceleration (units/s2) (P R T): -Recv: echo: M204 P1000.00 R1250.00 T1500.00 -Recv: echo:; Advanced (B S T J): -Recv: echo: M205 B20000.00 S0.00 T0.00 J0.01 -Recv: echo:; Home offset: -Recv: echo: M206 X0.00 Y0.00 Z0.00 -Recv: echo:; Unified Bed Leveling: -Recv: echo: M420 S1 Z10.00 ; Leveling ON -Recv: Unified Bed Leveling System v1.01 active -Recv: echo:Active Mesh Slot 0 -Recv: echo:EEPROM can hold 2 meshes. -Recv: echo:; X-Twist Correction: -Recv: M423 A0.00 I110.00 -Recv: M423 X0 Z0.00 -Recv: M423 X1 Z0.00 -Recv: M423 X2 Z0.00 -Recv: echo:; Material heatup parameters: -Recv: echo: M145 S0 H200.00 B60.00 F0 -Recv: echo: M145 S1 H240.00 B70.00 F0 -Recv: echo: M145 S2 H205.00 B45.00 F0 -Recv: echo: M145 S3 H260.00 B70.00 F0 -Recv: echo:; Hotend PID: -Recv: echo: M301 P23.48 I2.99 D46.09 -Recv: echo:; Bed PID: -Recv: echo: M304 P163.96 I28.03 D639.32 -Recv: echo:; User thermistors: -Recv: echo: M305 P0 R4700.0 T94162.0 B4160.0 C0.000000000 ; HOTEND 0 -Recv: echo:; Power-loss recovery: -Recv: echo: M413 S0 ; OFF -Recv: echo:; Z-Probe Offset: -Recv: echo: M851 X28.00 Y-20.00 Z-2.02 ; (mm) -Recv: echo:; Stepper driver current: -Recv: echo: M906 X860 Y900 Z1000 -Recv: echo: M906 T0 E550 -Recv: echo:; Hybrid Threshold: -Recv: echo: M913 X183 Y183 Z41 -Recv: echo: M913 T0 E60 -Recv: echo:; StallGuard threshold: -Recv: echo: M914 X65 Y68 -Recv: echo:; Driver stepping mode: -Recv: echo: M569 S1 X Y Z -Recv: echo: M569 S1 T0 E -Recv: echo:; Input Shaping: -Recv: echo: M593 X F40.00 D0.15 -Recv: echo: M593 Y F40.00 D0.15 -Recv: echo:; Linear Advance: -Recv: echo: M900 K0.05 -Recv: echo:; Filament load/unload: -Recv: echo: M603 L0.00 U50.00 ; (mm) -Recv: echo:; Filament runout sensor: -Recv: echo: M412 S0 ; Sensor OFF \ No newline at end of file +echo:; Linear Units: +echo: G21 ; (mm) +echo:; Temperature Units: +echo: M149 C ; Units in Celsius +echo:; Filament settings (Disabled): +echo: M200 S0 D1.75 +echo:; Steps per unit: +echo: M92 X80.00 Y80.00 Z800.00 E691.50 +echo:; Max feedrates (units/s): +echo: M203 X500.00 Y500.00 Z10.00 E30.00 +echo:; Max Acceleration (units/s2): +echo: M201 X500.00 Y500.00 Z100.00 E5000.00 +echo:; Acceleration (units/s2) (P R T): +echo: M204 P500.00 R500.00 T1000.00 +echo:; Advanced (B S T X Y Z E): +echo: M205 B20000.00 S0.00 T0.00 X8.00 Y8.00 Z0.40 E5.00 +echo:; Home offset: +echo: M206 X0.00 Y0.00 Z0.00 +echo:; Auto Bed Leveling: +echo: M420 S0 Z10.00 ; Leveling OFF +echo:; Material heatup parameters: +echo: M145 S0 H185.00 B60.00 F255 +echo: M145 S1 H240.00 B80.00 F255 +echo:; Hotend PID: +echo: M301 P15.95 I1.30 D48.96 +echo:; Bed PID: +echo:echo: M304 P110.38 I6.12 D497.30 +echo:; User thermistors: +echo: M305 P0 R4700.0 T94162.0 B4160.0 C0.000000000 ; HOTEND 0 +echo:; Power-loss recovery: +echo: M413 S1 ; ON +echo:; Z-Probe Offset: +echo: M851 X25.00 Y-25.00 Z0.00 ; (mm) +echo:; Stepper driver current: +echo: M906 X860 Y900 Z800 +echo: M906 T0 E550 +echo:; Hybrid Threshold: +echo: M913 X183 Y183 Z41 +echo: M913 T0 E60 +echo:; StallGuard threshold: +echo: M914 X68 Y70 +echo:; Driver stepping mode: +echo: M569 S1 X Y Z +echo: M569 S1 T0 E +echo:; Linear Advance: +echo: M900 K0.04 +echo:; Filament load/unload: +echo: M603 L0.00 U50.00 ; (mm) \ No newline at end of file From d628b6e9ef29b1100be7aa2375d241ddf0d7d73f Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Thu, 23 Mar 2023 12:05:36 -0400 Subject: [PATCH 23/80] Updated 'before you begin' section to let users know that is assumed to be the username. --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 28965b5..3a6c6d5 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,8 @@ I work on this repository all the time and a lot of new features are coming. Wat ## Before You Begin - Know what you're getting into by reading this documentation *fully!* -- There is an assumption that you are connected to your host Raspberry Pi via SSH, and that your printer motherboard is connected to the host via USB. +- It is assumed that you are connected to your host Raspberry Pi (or other host device) via SSH, and that your printer motherboard is connected to the host via USB. +- It is also assumed that the username on the host device is `pi`. If that is not the case, you will have to manually edit `moonraker.conf` and `cfgs/misc-macros.cfg` and change any mentions of `/home/pi` to `/home/yourUserName`. - Klipper *must* be installed on the host Raspberry Pi for everything to work. Easiest is to use a [FluiddPi](https://docs.fluidd.xyz/installation/fluiddpi#download) or [MainsailOS](https://github.com/mainsail-crew/mainsail/releases/latest) image. - Your question has probably been answered already, but if it hasn't, please post in the [Discussion](https://github.com/bassamanator/Sovol-SV06-firmware/discussions) section. - If you see any errors, or encounter any issues, please create an [Issue](https://github.com/bassamanator/Sovol-SV06-firmware/issues/new), or a [Pull request](https://github.com/bassamanator/Sovol-SV06-firmware/pulls). @@ -56,7 +57,7 @@ I work on this repository all the time and a lot of new features are coming. Wat ### Prepare the microSD Card for Flashing -- Size: `8GB`. Accordinig to Sovol, the largest size that you can use is `16GB`. +- Size: `8GB`. According to Sovol, the largest size that you can use is `16GB`. - File system: `FAT32`. - Must not contain any files *except* the firmware file. From 38cabc75133b0ef5ab10e688102ee4cd79984b9d Mon Sep 17 00:00:00 2001 From: Bassam Husain <61985779+bassamanator@users.noreply.github.com> Date: Fri, 24 Mar 2023 20:36:06 -0400 Subject: [PATCH 24/80] Update README.md Before you begin section. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3a6c6d5..d2e5cce 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,7 @@ I work on this repository all the time and a lot of new features are coming. Wat - It is assumed that you are connected to your host Raspberry Pi (or other host device) via SSH, and that your printer motherboard is connected to the host via USB. - It is also assumed that the username on the host device is `pi`. If that is not the case, you will have to manually edit `moonraker.conf` and `cfgs/misc-macros.cfg` and change any mentions of `/home/pi` to `/home/yourUserName`. - Klipper *must* be installed on the host Raspberry Pi for everything to work. Easiest is to use a [FluiddPi](https://docs.fluidd.xyz/installation/fluiddpi#download) or [MainsailOS](https://github.com/mainsail-crew/mainsail/releases/latest) image. +- It is assumed that there is one instance of Klipper installed. If you have multiple instances of Klipper installed, via `KIAUH` for example, then this guide is not for you. You can still use all the configs of course, but the steps in this guide will not work for you. - Your question has probably been answered already, but if it hasn't, please post in the [Discussion](https://github.com/bassamanator/Sovol-SV06-firmware/discussions) section. - If you see any errors, or encounter any issues, please create an [Issue](https://github.com/bassamanator/Sovol-SV06-firmware/issues/new), or a [Pull request](https://github.com/bassamanator/Sovol-SV06-firmware/pulls). - I would recommend searching for the word `NOTE` in this repository. There are roughly half a dozen short points amongst the various files that you should be aware of if you're using this configuration. From 73f15169b6db0e771655100ccdf39e2d4c2d5590 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Mon, 27 Mar 2023 18:33:48 -0400 Subject: [PATCH 25/80] README: minor change. --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index d2e5cce..a9d639d 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ This repository contains the Klipper configuration and firmware for the Sovol SV06 3D printer with completely *stock hardware*. +If you wanted to use the One-Stop-Shop Klipper Configuration for any other printer, please switch to the [any-printer](https://github.com/bassamanator/Sovol-SV06-firmware/tree/any-printer) branch. + I am creating these files for my personal use and cannot be held responsible for what it might do to your printer. Use at your own risk. # Highlights From 862c45b88fe0c1201119c0e1f6ab8de178703416 Mon Sep 17 00:00:00 2001 From: Bassam Husain <61985779+bassamanator@users.noreply.github.com> Date: Sat, 1 Apr 2023 22:48:49 -0400 Subject: [PATCH 26/80] Update README.md Added firmware location to Flash Firmware section. --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index a9d639d..b31e092 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,8 @@ I work on this repository all the time and a lot of new features are coming. Wat 💡 For the sake of simplicity, I will refer to the klipper firmware file as `klipper.bin` even though the actual filename is something along the lines of `klipper-v0.11.0-148-g52f4e20c.bin`. +💡 The firmware is located in the `misc` folder. + ### Prepare the microSD Card for Flashing - Size: `8GB`. According to Sovol, the largest size that you can use is `16GB`. From 98a1cd7fe66fe25427223c064736ddc501df1368 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 2 Apr 2023 18:31:58 -0400 Subject: [PATCH 27/80] Purge_line macro adjusted to print at the front of the bed; printer agnostic. Print_end adjusted to use safer speed. --- cfgs/misc-macros.cfg | 36 +++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/cfgs/misc-macros.cfg b/cfgs/misc-macros.cfg index 053e748..934314d 100644 --- a/cfgs/misc-macros.cfg +++ b/cfgs/misc-macros.cfg @@ -75,17 +75,32 @@ gcode: {% endif %} [gcode_macro PURGE_LINE] -# https://github.com/JoeCat1207/V0.1-Purge-line-SuperSlicer/blob/main/Purgeline.txt -# https://github.com/VoronDesign/Voron-Switchwire/blob/200cdae033c59ef81f67c4235469da7ca66d53a1/Firmware/skr_mini_e3_v2_config.cfg gcode: {% set PRE_PURGE_PRIME_LENGTH=printer["gcode_macro _globals"].pre_purge_prime_length|default(1.40)|float %} ADJUST_FILAMENT_SENSOR_STATUS ENABLE=1 - G0 Y0 X0 F4000 ; go to tongue of print bed - G1 Z0.4 F500.0 ; move bed to nozzle + + # Get Boundaries + {% set max_x = printer.configfile.config["stepper_x"]["position_max"]|float %} + {% set max_y = printer.configfile.config["stepper_y"]["position_max"]|float %} + {% set max_z = printer.configfile.config["stepper_z"]["position_max"]|float %} + {% set extrudeAmount = 26.6 %} + {% set movementLength = 100 %} + {% set movementSpeed = 15 * 60 %} + + # Set safe speeds + {% set maxVelocity = printer.configfile.settings.printer.max_velocity|default(200)|int %} + {% set maxVelocityAdjusted = (0.9 * maxVelocity * 60)|int %} + G92 E0.0 ; reset extruder + G90 ; Absolute positioning + G0 X0 Y0 F{maxVelocityAdjusted} ; move to purge position + G1 Z0.4 F500.0 ; move to purge height + M83 ; Relative extrusion mode G1 E{PRE_PURGE_PRIME_LENGTH} F500 ; pre-purge prime LENGTH SHOULD MATCH YOUR PRINT_END RETRACT - G1 Y140 E35.0 F1200.0 ; intro line 1 + G1 X{movementLength} E{extrudeAmount} F{movementSpeed} ; intro line 1 + #G1 E-.5 F2100 # Retract G92 E0.0 ; reset extruder + M82 ; Absolute extrusion mode G1 Z5.0 ; move nozzle to prevent scratch [gcode_macro CANCEL_PRINT] @@ -125,11 +140,18 @@ gcode: ADJUST_FILAMENT_SENSOR_STATUS ENABLE=0 CONDITIONAL_BEEP I=2 DUR=30 FREQ=8500 ; NOTE Comment out this line to stop the beeps at the end of a print {% set PRE_PURGE_PRIME_LENGTH=printer["gcode_macro _globals"].pre_purge_prime_length|default(1.40)|float %} + M400 ; wait for buffer to clear G92 E0 ; zero the extruder G1 E-{PRE_PURGE_PRIME_LENGTH} F400 ; retract filament G91 ; relative positioning + # Set safe speeds + {% set zVelocity = printer.configfile.settings.printer.max_z_velocity|default(15)|int %} + {% set maxVelocity = printer.configfile.settings.printer.max_velocity|default(200)|int %} + {% set zVelocityAdjusted = (0.95 * zVelocity * 60)|int %} + {% set maxVelocityAdjusted = (0.95 * maxVelocity * 60)|int %} + # Get Boundaries {% set max_x = printer.configfile.config["stepper_x"]["position_max"]|float %} {% set max_y = printer.configfile.config["stepper_y"]["position_max"]|float %} @@ -155,8 +177,8 @@ gcode: {% set z_safe = max_z - printer.toolhead.position.z %} {% endif %} - G0 Z{z_safe} F2000 ; move nozzle up - G0 X{x_safe} Y{y_safe} F9000 ; move nozzle to remove stringing + G0 Z{z_safe} F{zVelocityAdjusted} ; move nozzle up + G0 X{x_safe} Y{y_safe} F{maxVelocityAdjusted} ; move nozzle to remove stringing TURN_OFF_HEATERS M107 ; turn off fan G90 ; absolute positioning From 8346c79f351f85ced239f35a93f27c41e83600f9 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 2 Apr 2023 19:00:47 -0400 Subject: [PATCH 28/80] Adjusted start position for purge_line. --- cfgs/misc-macros.cfg | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/cfgs/misc-macros.cfg b/cfgs/misc-macros.cfg index 934314d..e9a3d16 100644 --- a/cfgs/misc-macros.cfg +++ b/cfgs/misc-macros.cfg @@ -84,20 +84,22 @@ gcode: {% set max_y = printer.configfile.config["stepper_y"]["position_max"]|float %} {% set max_z = printer.configfile.config["stepper_z"]["position_max"]|float %} {% set extrudeAmount = 26.6 %} - {% set movementLength = 100 %} + {% set movementLength = 100.0 %} {% set movementSpeed = 15 * 60 %} + {% set xStart = 0.5 %} + {% set yStart = 0.5 %} # Set safe speeds {% set maxVelocity = printer.configfile.settings.printer.max_velocity|default(200)|int %} - {% set maxVelocityAdjusted = (0.9 * maxVelocity * 60)|int %} + {% set maxVelocityAdjusted = (0.95 * maxVelocity * 60)|int %} G92 E0.0 ; reset extruder G90 ; Absolute positioning - G0 X0 Y0 F{maxVelocityAdjusted} ; move to purge position + G0 X{xStart} Y{yStart} F{maxVelocityAdjusted} ; move to purge position G1 Z0.4 F500.0 ; move to purge height M83 ; Relative extrusion mode G1 E{PRE_PURGE_PRIME_LENGTH} F500 ; pre-purge prime LENGTH SHOULD MATCH YOUR PRINT_END RETRACT - G1 X{movementLength} E{extrudeAmount} F{movementSpeed} ; intro line 1 + G1 X{xStart + movementLength} E{extrudeAmount} F{movementSpeed} ; intro line 1 #G1 E-.5 F2100 # Retract G92 E0.0 ; reset extruder M82 ; Absolute extrusion mode From 5b5ce8df576d11e73d2d08698b782876dc0322da Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 2 Apr 2023 19:11:43 -0400 Subject: [PATCH 29/80] Adjusted readme. --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 3fe0575..8ab65a3 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # 🚨 *One-Stop-Shop* Sovol SV06 Klipper Configuration -This repository contains the Klipper configuration and firmware for the Sovol SV06 3D printer with completely *stock hardware*. +This repository contains the Klipper configuration and firmware for the **Sovol SV06** 3D printer with completely *stock hardware*. -If you wanted to use the One-Stop-Shop Klipper Configuration for any other printer, please switch to the [any-printer](https://github.com/bassamanator/Sovol-SV06-firmware/tree/any-printer) branch. +If you wanted to use the One-Stop-Shop Klipper Configuration for a *different printer*, please switch to the [any-printer](https://github.com/bassamanator/Sovol-SV06-firmware/tree/any-printer) branch. I am creating these files for my personal use and cannot be held responsible for what it might do to your printer. Use at your own risk. @@ -23,7 +23,7 @@ I am creating these files for my personal use and cannot be held responsible for ## To do: - [x] Replace M109/M190 with `TEMPERATURE_WAIT`. -- [ ] Get the Ellis `TEST_SPEED` macro working. +- [ ] ~~Get the Ellis `TEST_SPEED` macro working.~~ Does not seem safely doable on this printer. - [x] Add information about directory structure. - [x] Create FAQ section. - [x] Get filament sensor working with hotend PCB. From 371e0d604af5c8af5d284f4b78d979658b3b0afc Mon Sep 17 00:00:00 2001 From: Bassam Husain <61985779+bassamanator@users.noreply.github.com> Date: Mon, 3 Apr 2023 08:09:36 -0400 Subject: [PATCH 30/80] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8ab65a3..351c6c7 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ I work on this repository all the time and a lot of new features are coming. Wat ## Before You Begin - Know what you're getting into by reading this documentation *fully!* -- It is assumed that you are connected to your host Raspberry Pi (or other host device) via SSH, and that your printer motherboard is connected to the host via USB. +- It is assumed that you are connected to your host Raspberry Pi (or other host device) via SSH, and that your printer motherboard is connected to the host via a data USB cable. - It is also assumed that the username on the host device is `pi`. If that is not the case, you will have to manually edit `moonraker.conf` and `cfgs/misc-macros.cfg` and change any mentions of `/home/pi` to `/home/yourUserName`. - Klipper *must* be installed on the host Raspberry Pi for everything to work. Easiest is to use a [FluiddPi](https://docs.fluidd.xyz/installation/fluiddpi#download) or [MainsailOS](https://github.com/mainsail-crew/mainsail/releases/latest) image. - It is assumed that there is one instance of Klipper installed. If you have multiple instances of Klipper installed, via `KIAUH` for example, then this guide is not for you. You can still use all the configs of course, but the steps in this guide will not work for you. From c1427d94183e20612a5218e7861f336ad4204066 Mon Sep 17 00:00:00 2001 From: Bassam Husain <61985779+bassamanator@users.noreply.github.com> Date: Mon, 3 Apr 2023 08:28:35 -0400 Subject: [PATCH 31/80] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 351c6c7..750884f 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ I work on this repository all the time and a lot of new features are coming. Wat - Know what you're getting into by reading this documentation *fully!* - It is assumed that you are connected to your host Raspberry Pi (or other host device) via SSH, and that your printer motherboard is connected to the host via a data USB cable. - It is also assumed that the username on the host device is `pi`. If that is not the case, you will have to manually edit `moonraker.conf` and `cfgs/misc-macros.cfg` and change any mentions of `/home/pi` to `/home/yourUserName`. -- Klipper *must* be installed on the host Raspberry Pi for everything to work. Easiest is to use a [FluiddPi](https://docs.fluidd.xyz/installation/fluiddpi#download) or [MainsailOS](https://github.com/mainsail-crew/mainsail/releases/latest) image. +- Klipper *must* be installed on the host Raspberry Pi for everything to work. Easiest is to use a [FluiddPi](https://docs.fluidd.xyz/installation/fluiddpi#download) or [MainsailOS](https://github.com/mainsail-crew/mainsail/releases/latest) image. [KIAUH](https://github.com/th33xitus/kiauh) is another excellent option, though it's not as simple as flashing MainsailOS on a microSD card, for example. - It is assumed that there is one instance of Klipper installed. If you have multiple instances of Klipper installed, via `KIAUH` for example, then this guide is not for you. You can still use all the configs of course, but the steps in this guide will not work for you. - Your question has probably been answered already, but if it hasn't, please post in the [Discussion](https://github.com/bassamanator/Sovol-SV06-firmware/discussions) section. - If you see any errors, or encounter any issues, please create an [Issue](https://github.com/bassamanator/Sovol-SV06-firmware/issues/new), or a [Pull request](https://github.com/bassamanator/Sovol-SV06-firmware/pulls). From 758a3f8b77e2f784c0b213dc4383930b4e40520e Mon Sep 17 00:00:00 2001 From: Bassam Husain <61985779+bassamanator@users.noreply.github.com> Date: Mon, 3 Apr 2023 12:51:49 -0400 Subject: [PATCH 32/80] Update README.md Added instructions for adjusting slicer start/end gcode. --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 750884f..72a7360 100644 --- a/README.md +++ b/README.md @@ -140,6 +140,10 @@ You can choose *either* of the 2 following methods. 5. `BED_MESH_CALIBRATE` 6. `SAVE_CONFIG` (once completed) +## Adjust Your Slicer + +You need to adjust the start and end gcode in your slicer. The relevant macros are `PRINT_START` and `PRINT_END`. Find instructions [here](https://ellis3dp.com/Print-Tuning-Guide/articles/passing_slicer_variables.html#slicer-start-g-code). + ## Directory Structure This repository contains many files and folders. Some are *necessary* for this Klipper configuration to work, others are not. From 4b90c7abc584ff8f11788745032f59c875aac8d7 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Thu, 6 Apr 2023 06:22:01 -0400 Subject: [PATCH 33/80] Added G90 to steps after homing. --- README.md | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 9d437a6..f7165b9 100644 --- a/README.md +++ b/README.md @@ -103,21 +103,23 @@ You can choose *either* of the 2 following methods. 💡 I recommend no filament be loaded for any of these steps. -1. Do a `G28`; home all. - 1. Check to see if `X` and `Y` max positions (`G1 X223 F3000`, `G1 Y223 F3000`) can be reached, and adjust `position_max`, if necessary. You can probably go all the way up to `225` for `X` and `Y` both, however, I would not recommend it. +1. `G28` + 1. Check to see if `X` and `Y` max positions (`G90`, `G1 X223 F3000`, `G1 Y223 F3000`) can be reached, and adjust `position_max`, if necessary. You can probably go all the way up to `225` for `X` and `Y` both, however, I would not recommend it. 2. Do a `G34`; mechanical gantry calibration. After the controlled collision against the beam at the top, there will be a 10 second pause for you to verify that both sides of the gantry are pressed up agaisnt the `stoppers` at the top. You will hear a succession of beeps. - 1. Figure out your `Z` `position_max` by baby stepping your way up to the beam. The range is 250 to 261 from what I've seen, could be even higher for you. Adjust `position_max`, if necessary. I can go all the way to 258 over and over again, however, I would not print anything higher than 255 probably. + 1. Figure out your `Z` `position_max` by baby stepping your way up to the beam. The range is 250 to 261 from what I've seen, could be even higher for you. Adjust `position_max`, if necessary. I can go all the way to 258, however, I would not print anything higher than 257. 3. Pid tune the bed, but first move the printhead to the center. Ideally, all Pid tuning should occur at the temperatures that you print most at. 1. `G28` - 2. `G1 X111 Y111 Z40 F6000` - 3. `PID_CALIBRATE HEATER=heater_bed TARGET=70` - 4. `SAVE_CONFIG` (once completed) + 2. `G90` + 3. `G1 X111 Y111 Z40 F6000` + 4. `PID_CALIBRATE HEATER=heater_bed TARGET=70` + 5. `SAVE_CONFIG` (once completed) 4. Pid tune the extruder while part cooling fan runs at 25%. 1. `G28` - 2. `G1 X111 Y111 Z10 F6000` - 3. `M106 S64` - 4. `PID_CALIBRATE HEATER=extruder TARGET=245` - 5. `SAVE_CONFIG` (once completed) + 2. `G90` + 3. `G1 X111 Y111 Z10 F6000` + 4. `M106 S64` + 5. `PID_CALIBRATE HEATER=extruder TARGET=245` + 6. `SAVE_CONFIG` (once completed) 5. Adjust `z_offset`. Make sure your nozzle if very clean. Do the [Paper test](https://www.klipper3d.org/Bed_Level.html?h=probe_calibrate#the-paper-test). 1. `SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=60` 2. `SET_HEATER_TEMPERATURE HEATER=extruder TARGET=180` From d0b426d5b0bb31de92f3fe9fb1d6159d5da30fec Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Thu, 6 Apr 2023 06:44:26 -0400 Subject: [PATCH 34/80] Updated readme. --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index f7165b9..096f3b9 100644 --- a/README.md +++ b/README.md @@ -103,6 +103,8 @@ You can choose *either* of the 2 following methods. 💡 I recommend no filament be loaded for any of these steps. +💡 Find explanations for gcode commands at [https://marlinfw.org/](https://marlinfw.org/) and [klipper.org](https://www.klipper3d.org/G-Codes.html). + 1. `G28` 1. Check to see if `X` and `Y` max positions (`G90`, `G1 X223 F3000`, `G1 Y223 F3000`) can be reached, and adjust `position_max`, if necessary. You can probably go all the way up to `225` for `X` and `Y` both, however, I would not recommend it. 2. Do a `G34`; mechanical gantry calibration. After the controlled collision against the beam at the top, there will be a 10 second pause for you to verify that both sides of the gantry are pressed up agaisnt the `stoppers` at the top. You will hear a succession of beeps. From 953daefa329d76e568dd12bbb733b4089814c50c Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Fri, 7 Apr 2023 09:52:06 -0400 Subject: [PATCH 35/80] Adjusted PRINT_START sequence to save time, and to prevent oozing. Increased microsteps to 128, and added square_corner_velocity. --- cfgs/misc-macros.cfg | 18 +++++++++++------- printer.cfg | 9 +++++---- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/cfgs/misc-macros.cfg b/cfgs/misc-macros.cfg index e9a3d16..64ecf79 100644 --- a/cfgs/misc-macros.cfg +++ b/cfgs/misc-macros.cfg @@ -121,19 +121,23 @@ gcode: {% set hotendtemp = params.HOTEND|int %} {% set chambertemp = params.CHAMBER|default(0)|int %} + # Set safe speeds + {% set maxVelocity = printer.configfile.settings.printer.max_velocity|default(200)|int %} + {% set maxVelocityAdjusted = (0.95 * maxVelocity * 60)|int %} + ADJUST_FILAMENT_SENSOR_STATUS ENABLE=1 - G28 X Y - # + G90 M140 S{bedtemp} ; set & don't wait for bed temp - M104 S{hotendtemp} ; set & don't wait for hotend temp + G28 X Y M190 S{bedtemp} ; set & wait for bed temp - # TEMPERATURE_WAIT SENSOR="temperature_sensor chamber" MINIMUM={chambertemp} ; wait for chamber temp - # - M109 S{hotendtemp} ; set & wait for hotend temp - # + M104 S{hotendtemp} ; set & don't wait for hotend temp G28 Z ; final z homing + + G1 X0 Y0 F{maxVelocityAdjusted} + M109 S{hotendtemp} ; set & wait for hotend temp + BED_MESH_PROFILE LOAD=default G1 Z20 F3000 ; move nozzle away from bed diff --git a/printer.cfg b/printer.cfg index c29a092..1d08719 100644 --- a/printer.cfg +++ b/printer.cfg @@ -23,6 +23,7 @@ max_velocity: 200 max_accel: 3000 max_z_velocity: 15 max_z_accel: 45 +square_corner_velocity: 8.0 ##################################################################### # X/Y/Z Stepper Settings @@ -32,7 +33,7 @@ max_z_accel: 45 step_pin: PC2 dir_pin: !PB9 enable_pin: !PC3 -microsteps: 64 +microsteps: 128 rotation_distance: 40 endstop_pin: tmc2209_stepper_x:virtual_endstop position_endstop: 0 @@ -54,7 +55,7 @@ diag_pin: PA5 step_pin: PB8 dir_pin: PB7 enable_pin: !PC3 -microsteps: 64 +microsteps: 128 rotation_distance: 40 endstop_pin: tmc2209_stepper_y:virtual_endstop position_endstop: 0 @@ -76,7 +77,7 @@ diag_pin: PA6 step_pin: PB6 dir_pin: !PB5 enable_pin: !PC3 -microsteps: 64 +microsteps: 128 rotation_distance: 4 endstop_pin: probe:z_virtual_endstop position_min: -4 @@ -100,7 +101,7 @@ diag_pin: PA7 step_pin: PB4 dir_pin: !PB3 enable_pin: !PC3 -microsteps: 64 +microsteps: 128 rotation_distance: 4.65 # NOTE Calibrate e-steps and adjust https://www.klipper3d.org/Rotation_Distance.html nozzle_diameter: 0.400 filament_diameter: 1.750 From 1f3707123a74c9c727a72c0d6d7c659403d8dbf5 Mon Sep 17 00:00:00 2001 From: Bassam Husain <61985779+bassamanator@users.noreply.github.com> Date: Fri, 7 Apr 2023 13:47:17 -0400 Subject: [PATCH 36/80] Update issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 34 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 20 +++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..bb8b451 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,34 @@ +--- +name: Bug report +about: Create a report to help us improve +title: "[BUG]" +labels: '' +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**What kind of device are you using to host Klipper?** + - OS: [e.g. old laptop, PC, Raspberry Pi] + - Version: [] + +**How did you install Klipper?** + - Manual install, KIAUH, MainsailOS, FluiddPi, etc. + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..bbcbbe7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. From 8c6ebbca2cd96f414554ae05d3289275f8e8c5f2 Mon Sep 17 00:00:00 2001 From: Bassam Husain <61985779+bassamanator@users.noreply.github.com> Date: Fri, 7 Apr 2023 13:56:28 -0400 Subject: [PATCH 37/80] Create CONTRIBUTING.md --- CONTRIBUTING.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..30a0878 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,8 @@ +# Contribution Guidelines + +When contributing, please ... +- provide a clear and concise explanation of your pull request. +- try to make small changes, ie, make many small pull requests as opposed to a single large pull request. This allows me to check your work more quickly, thus merge more quickly. +- try to follow the patterns I've already established. + +Thank you. From b3040f424486d30d94bd2b647922231404cbdb4d Mon Sep 17 00:00:00 2001 From: Bassam Husain <61985779+bassamanator@users.noreply.github.com> Date: Fri, 7 Apr 2023 14:04:00 -0400 Subject: [PATCH 38/80] Create CODE_OF_CONDUCT.md --- CODE_OF_CONDUCT.md | 128 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 CODE_OF_CONDUCT.md diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..4769dd0 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,128 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity +and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the + overall community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or + advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email + address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +bassamanator.2cj4t@simplelogin.com. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series +of actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or +permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within +the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.0, available at +https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct +enforcement ladder](https://github.com/mozilla/diversity). + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see the FAQ at +https://www.contributor-covenant.org/faq. Translations are available at +https://www.contributor-covenant.org/translations. From 9e68610908f2a4e4c2f233b668527f870d43cebd Mon Sep 17 00:00:00 2001 From: Bassam Husain <61985779+bassamanator@users.noreply.github.com> Date: Fri, 7 Apr 2023 18:07:24 -0400 Subject: [PATCH 39/80] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 096f3b9..1ce7fb5 100644 --- a/README.md +++ b/README.md @@ -231,7 +231,8 @@ A simple runout sensor can only detect a change in state. So, if you start a pri - [Everything Sovol SV06](https://github.com/bassamanator/everything-sovol-sv06) - [RP2040-Zero ADXL345 Connection Klipper](https://github.com/bassamanator/rp2040-zero-adxl345-klipper) -- ⭐⭐⭐ [Ellis' Print Tuning Guide](https://ellis3dp.com/Print-Tuning-Guide) +- ⭐⭐⭐⭐⭐ [Ellis' Print Tuning Guide](https://ellis3dp.com/Print-Tuning-Guide) +- [Simplify3D Print Quality Troubleshooting Guide](https://www.simplify3d.com/resources/print-quality-troubleshooting/) ## Links From 6dc119cf99e9f4b2bdf6d29cdd96192f0b895e1b Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Fri, 7 Apr 2023 19:44:30 -0400 Subject: [PATCH 40/80] Added pause/runout/m600 to faq. Reduced speed in print_start. --- README.md | 29 +++++++++++++++++++++++++++++ cfgs/misc-macros.cfg | 2 +- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1ce7fb5..9683c98 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,7 @@ Although I've made switching over to Klipper as easy as is possible, it can stil ## Before You Begin - Read this documentation *fully!* +- Make sure your printer is in good physical condition, because print and travel speeds will be *a lot faster* than they were before. Consider yourself warned. - Follow the steps in order. - If an error was reported at a step, do no proceed to the next step. - It is assumed that you are connected to your host Raspberry Pi (or other host device) via SSH, and that your printer motherboard is connected to the host via a data USB cable. Note that most of the micro USB cables that you find at home are *unlikely* to be data cables, and it's not possible to tell just by looking. @@ -227,6 +228,34 @@ Make the following changes according to your needs. A simple runout sensor can only detect a change in state. So, if you start a print without filament loaded, the printer will not know that there is no filament loaded. You should test your sensor by having filament loaded, starting a print, then cutting the filament. The expected behaviour is that the print will pause, and as long as you have beeping enabled, you will hear 3 annoying beeps. +##### What happens when I put in `M600`/colour change at a certain layer? + +1. The printer will beep 3 times (not annoyingly). +2. Printing will stop. +3. The printhead will park itself front center. +4. The hotend will turn off, but the bed will remain hot. + +##### What happens when I pause a print? + +Same behaviour as `M600`/colour change *except* there won't be any beeping. + +##### What happens when filament runouts out? + +*If* you have a working filament sensor, the same behaviour as `M600`/colour change will occur*except* the beeps will be fairly annoying. + +##### How do I resume a print after a colour change or filament runout? + +*Do no disable the stepper motors during this process!* + +The printhead is now parked front center waiting for you to insert filament. You will: + +1. Heat up the hotend to the desired temperature. + - Use your Klipper dashboard. +2. Purge (push) some filament through the nozzle. + - Use your Klipper dashboard, and extrude maybe 50mm (for a colour change you probably want to extrude more). + - OR, you can push some filament by hand *making sure to first disengage the extruder's spring loaded arm*. +3. Hit resume in your Klipper dashboard. + ## Useful Resources - [Everything Sovol SV06](https://github.com/bassamanator/everything-sovol-sv06) diff --git a/cfgs/misc-macros.cfg b/cfgs/misc-macros.cfg index 64ecf79..47225be 100644 --- a/cfgs/misc-macros.cfg +++ b/cfgs/misc-macros.cfg @@ -123,7 +123,7 @@ gcode: # Set safe speeds {% set maxVelocity = printer.configfile.settings.printer.max_velocity|default(200)|int %} - {% set maxVelocityAdjusted = (0.95 * maxVelocity * 60)|int %} + {% set maxVelocityAdjusted = (0.90 * maxVelocity * 60)|int %} ADJUST_FILAMENT_SENSOR_STATUS ENABLE=1 From 238091d860f5e2397711adbdac7cf61f742a1d5e Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Thu, 13 Apr 2023 17:28:55 -0400 Subject: [PATCH 41/80] Minor speedup in print_start. --- cfgs/misc-macros.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/cfgs/misc-macros.cfg b/cfgs/misc-macros.cfg index 47225be..45ba93b 100644 --- a/cfgs/misc-macros.cfg +++ b/cfgs/misc-macros.cfg @@ -129,6 +129,7 @@ gcode: G90 M140 S{bedtemp} ; set & don't wait for bed temp + M104 S150 ; set & don't wait for hotend temp G28 X Y M190 S{bedtemp} ; set & wait for bed temp From 5abaf73b9c826617e080830ad8a28457c2f1bb66 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Thu, 13 Apr 2023 17:32:44 -0400 Subject: [PATCH 42/80] Comment cleanup in print_end. --- cfgs/misc-macros.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cfgs/misc-macros.cfg b/cfgs/misc-macros.cfg index 45ba93b..d33af02 100644 --- a/cfgs/misc-macros.cfg +++ b/cfgs/misc-macros.cfg @@ -145,7 +145,7 @@ gcode: [gcode_macro PRINT_END] gcode: ADJUST_FILAMENT_SENSOR_STATUS ENABLE=0 - CONDITIONAL_BEEP I=2 DUR=30 FREQ=8500 ; NOTE Comment out this line to stop the beeps at the end of a print + CONDITIONAL_BEEP I=2 DUR=30 FREQ=8500 {% set PRE_PURGE_PRIME_LENGTH=printer["gcode_macro _globals"].pre_purge_prime_length|default(1.40)|float %} M400 ; wait for buffer to clear From a30d367d1dc47254997b014deb9251703355ca5f Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Mon, 17 Apr 2023 00:21:03 -0400 Subject: [PATCH 43/80] Commented out raspberry pi temperature section. --- cfgs/misc-macros.cfg | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cfgs/misc-macros.cfg b/cfgs/misc-macros.cfg index d33af02..7356d51 100644 --- a/cfgs/misc-macros.cfg +++ b/cfgs/misc-macros.cfg @@ -1,8 +1,9 @@ [force_move] enable_force_move: True -[temperature_sensor raspberry_pi] -sensor_type: temperature_host +# NOTE If you're using a Raspberry Pi, you can uncomment the next to lines, optionally. +# [temperature_sensor raspberry_pi] +# sensor_type: temperature_host [virtual_sdcard] path: /home/pi/printer_data/gcodes From 807c91507a96dc8310d4a1c37eabdae3f73bd64f Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Mon, 17 Apr 2023 00:41:03 -0400 Subject: [PATCH 44/80] Pulling in from personal branch. --- cfgs/misc-macros.cfg | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/cfgs/misc-macros.cfg b/cfgs/misc-macros.cfg index 7356d51..6872a33 100644 --- a/cfgs/misc-macros.cfg +++ b/cfgs/misc-macros.cfg @@ -1,7 +1,7 @@ [force_move] enable_force_move: True -# NOTE If you're using a Raspberry Pi, you can uncomment the next to lines, optionally. +# NOTE If you're using a Raspberry Pi, you can uncomment the next 2 lines, optionally. # [temperature_sensor raspberry_pi] # sensor_type: temperature_host @@ -124,24 +124,28 @@ gcode: # Set safe speeds {% set maxVelocity = printer.configfile.settings.printer.max_velocity|default(200)|int %} - {% set maxVelocityAdjusted = (0.90 * maxVelocity * 60)|int %} + {% set maxVelocityAdjusted = (0.90 * maxVelocity * 60)|int %} + {% set bedtempAlmost = (bedtemp - 2)|int %} + {% set hotendtempStepOne = 150|int %} + {% set hotendtempStepTwo = 170|int %} + BED_MESH_PROFILE LOAD=default ; NOTE if not using a mesh, comment out this line ADJUST_FILAMENT_SENSOR_STATUS ENABLE=1 G90 - M140 S{bedtemp} ; set & don't wait for bed temp - M104 S150 ; set & don't wait for hotend temp + M140 S{bedtempAlmost} ; set & don't wait for bed temp + M104 S{hotendtempStepOne} ; set & don't wait for hotend temp G28 X Y + M190 S{bedtempAlmost} ; set & wait for bed temp + M104 S{hotendtempStepTwo} ; set & don't wait for hotend temp M190 S{bedtemp} ; set & wait for bed temp - M104 S{hotendtemp} ; set & don't wait for hotend temp G28 Z ; final z homing - G1 X0 Y0 F{maxVelocityAdjusted} M109 S{hotendtemp} ; set & wait for hotend temp + G1 X0 Y0 F{maxVelocityAdjusted} - BED_MESH_PROFILE LOAD=default - G1 Z20 F3000 ; move nozzle away from bed + G1 Z20 F3000 ; move nozzle away from bed [gcode_macro PRINT_END] gcode: From 8bfed9c57301ce70cfffb550ef576e7cb766e16c Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Tue, 18 Apr 2023 07:44:09 -0400 Subject: [PATCH 45/80] Spelling fixes. --- .vscode/settings.json | 13 ++++++++++++- README.md | 6 +++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 384e9d9..cdb8a73 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,5 +4,16 @@ "editor.detectIndentation": false, "git.mergeEditor": false, "spellright.language": ["en-GB-10-1."], - "spellright.documentTypes": ["markdown", "plaintext"] + "spellright.documentTypes": ["markdown", "plaintext"], + "cSpell.words": [ + "ADXL", + "gcode", + "hotend", + "Klipper", + "Klipperized", + "octahedroflake", + "PARKBED", + "runout", + "Sovol" + ] } diff --git a/README.md b/README.md index 9683c98..9c7f2a3 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ I work on this repository all the time and a lot of new features are coming. Wat # Preface -Although I've made switching over to Klipper as easy as is possible, it can still be a challenge for some, especially considering that most of you have likely never used GNU+Linux. Save yourself the fustration, and fully read all documentation found on this page. Also note that Klipper is not a *must*, and is not for everyone. You can stick with Marlin, and have a fine 3D printing experience. +Although I've made switching over to Klipper as easy as is possible, it can still be a challenge for some, especially considering that most of you have likely never used GNU+Linux. Save yourself the frustration, and fully read all documentation found on this page. Also note that Klipper is not a *must*, and is not for everyone. You can stick with Marlin, and have a fine 3D printing experience. # Installation Steps @@ -108,7 +108,7 @@ You can choose *either* of the 2 following methods. 1. `G28` 1. Check to see if `X` and `Y` max positions (`G90`, `G1 X223 F3000`, `G1 Y223 F3000`) can be reached, and adjust `position_max`, if necessary. You can probably go all the way up to `225` for `X` and `Y` both, however, I would not recommend it. -2. Do a `G34`; mechanical gantry calibration. After the controlled collision against the beam at the top, there will be a 10 second pause for you to verify that both sides of the gantry are pressed up agaisnt the `stoppers` at the top. You will hear a succession of beeps. +2. Do a `G34`; mechanical gantry calibration. After the controlled collision against the beam at the top, there will be a 10 second pause for you to verify that both sides of the gantry are pressed up against the `stoppers` at the top. You will hear a succession of beeps. 1. Figure out your `Z` `position_max` by baby stepping your way up to the beam. The range is 250 to 261 from what I've seen, could be even higher for you. Adjust `position_max`, if necessary. I can go all the way to 258, however, I would not print anything higher than 257. 3. Pid tune the bed, but first move the printhead to the center. Ideally, all Pid tuning should occur at the temperatures that you print most at. 1. `G28` @@ -239,7 +239,7 @@ A simple runout sensor can only detect a change in state. So, if you start a pri Same behaviour as `M600`/colour change *except* there won't be any beeping. -##### What happens when filament runouts out? +##### What happens when filament runs out? *If* you have a working filament sensor, the same behaviour as `M600`/colour change will occur*except* the beeps will be fairly annoying. From 1823d0ca37ef9b2140a1052a20daa3469a67f98b Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Wed, 19 Apr 2023 22:59:32 -0400 Subject: [PATCH 46/80] Updated readme: Download section. --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9c7f2a3..11160d4 100644 --- a/README.md +++ b/README.md @@ -86,8 +86,9 @@ You can choose *either* of the 2 following methods. ### Method 2: Download the ZIP 1. [Download](https://github.com/bassamanator/Sovol-SV06-firmware/archive/refs/heads/master.zip) the `ZIP` file containing the Klipper configuration. -2. The parent folder in the `ZIP` is `Sovol-SV06-firmware-master`. This is relevant in the next step. -3. Extract **only** the *contents* of the parent folder into `~/printer_data/config`. +2. See `Step 2` in `Method 1`. +3. The parent folder in the `ZIP` is `Sovol-SV06-firmware-master`. This is relevant in the next step. +4. Extract **only** the *contents* of the parent folder into `~/printer_data/config`. ## Initial Steps From 5e342261c8e7bad6ac9f57249b04476fb707cc34 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Thu, 20 Apr 2023 12:19:06 -0400 Subject: [PATCH 47/80] Pulling in print_start from personal branch. --- README.md | 2 +- cfgs/misc-macros.cfg | 21 ++++++++++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 11160d4..64147ac 100644 --- a/README.md +++ b/README.md @@ -275,7 +275,7 @@ The printhead is now parked front center waiting for you to insert filament. You - https://ellis3dp.com/Print-Tuning-Guide - https://github.com/strayr/strayr-k-macros - https://docs.vorondesign.com/build/software/miniE3_v20_klipper.html -- ⭐ https://github.com/spinixguy/Sovol-SV06-firmware +- https://github.com/spinixguy/Sovol-SV06-firmware - https://www.printables.com/model/378915-sovol-sv06-buildplate-texture-and-model-for-prusas - https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles diff --git a/cfgs/misc-macros.cfg b/cfgs/misc-macros.cfg index 6872a33..e959bde 100644 --- a/cfgs/misc-macros.cfg +++ b/cfgs/misc-macros.cfg @@ -5,6 +5,11 @@ enable_force_move: True # [temperature_sensor raspberry_pi] # sensor_type: temperature_host +# NOTE If you're using a an Orange Pi, you can uncomment the next 2 lines, optionally. +# [temperature_sensor Orange_Pi] +# sensor_type: temperature_host +# sensor_path: /sys/class/thermal/thermal_zone0/temp + [virtual_sdcard] path: /home/pi/printer_data/gcodes @@ -122,9 +127,14 @@ gcode: {% set hotendtemp = params.HOTEND|int %} {% set chambertemp = params.CHAMBER|default(0)|int %} - # Set safe speeds {% set maxVelocity = printer.configfile.settings.printer.max_velocity|default(200)|int %} {% set maxVelocityAdjusted = (0.90 * maxVelocity * 60)|int %} + + {% if printer.configfile.settings.safe_z_home %} + {% set startX = printer.configfile.settings.safe_z_home.home_xy_position[0]|float %} + {% set startY = printer.configfile.settings.safe_z_home.home_xy_position[1]|float %} + {% endif %} + {% set bedtempAlmost = (bedtemp - 2)|int %} {% set hotendtempStepOne = 150|int %} {% set hotendtempStepTwo = 170|int %} @@ -132,18 +142,23 @@ gcode: BED_MESH_PROFILE LOAD=default ; NOTE if not using a mesh, comment out this line ADJUST_FILAMENT_SENSOR_STATUS ENABLE=1 - G90 + G90 ; absolute positioning M140 S{bedtempAlmost} ; set & don't wait for bed temp M104 S{hotendtempStepOne} ; set & don't wait for hotend temp G28 X Y + {% if printer.configfile.settings.safe_z_home %} + G1 X{startX} Y{startY} F{maxVelocityAdjusted} + {% endif %} M190 S{bedtempAlmost} ; set & wait for bed temp M104 S{hotendtempStepTwo} ; set & don't wait for hotend temp M190 S{bedtemp} ; set & wait for bed temp + + M104 S{hotendtemp} ; set & don't wait for hotend temp G28 Z ; final z homing - M109 S{hotendtemp} ; set & wait for hotend temp G1 X0 Y0 F{maxVelocityAdjusted} + M109 S{hotendtemp} ; set & wait for hotend temp G1 Z20 F3000 ; move nozzle away from bed From 4a38d34a0e56f8ae8a13f721946b5dfe9353e87b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Marschollek?= Date: Thu, 20 Apr 2023 22:14:33 +0200 Subject: [PATCH 48/80] Add a minimum bed temperature of 0 degrees If the bed temperature is less than 2, the print job fails with an error message complaining about an invalid temperature. This happens, for instance, when printing ABS where the bed is not supposed to be heated. This change makes sure that the bed temperature cannot be negative. --- cfgs/misc-macros.cfg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cfgs/misc-macros.cfg b/cfgs/misc-macros.cfg index e959bde..b952b20 100644 --- a/cfgs/misc-macros.cfg +++ b/cfgs/misc-macros.cfg @@ -135,7 +135,7 @@ gcode: {% set startY = printer.configfile.settings.safe_z_home.home_xy_position[1]|float %} {% endif %} - {% set bedtempAlmost = (bedtemp - 2)|int %} + {% set bedtempAlmost = (bedtemp - 2, 0)|max %} {% set hotendtempStepOne = 150|int %} {% set hotendtempStepTwo = 170|int %} @@ -307,4 +307,4 @@ gcode: G4 P{dur} SET_PIN PIN=beeper VALUE=0 G4 P{dur} - {% endfor %} \ No newline at end of file + {% endfor %} From 4df5ef2db319d591f35f03d641878409d6d824c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Marschollek?= Date: Fri, 21 Apr 2023 20:26:11 +0200 Subject: [PATCH 49/80] Add config for 2 ADXL345 via RasPi pico This adds a configuration supporting two ADXL345 sensors at the same time though a Raspberry Pi pico. Resonance measurements for both the head and the bed can be done without having to change the sensors. --- cfgs/adxl-rpi-pico-2x.cfg | 42 +++++++++++++++++++++++++++++++++++++++ printer.cfg | 1 + 2 files changed, 43 insertions(+) create mode 100644 cfgs/adxl-rpi-pico-2x.cfg diff --git a/cfgs/adxl-rpi-pico-2x.cfg b/cfgs/adxl-rpi-pico-2x.cfg new file mode 100644 index 0000000..f2a2e43 --- /dev/null +++ b/cfgs/adxl-rpi-pico-2x.cfg @@ -0,0 +1,42 @@ +##################################################################### +# Config that supports a print head and a bed sensor at the same time +# This requires a Raspberry Pi Pico. Instructions: +# https://klipper.discourse.group/t/raspberry-pi-pico-adxl345-portable-resonance-measurement/1757/9 +# +# Recommended mounts: +# https://www.printables.com/model/385334-sovol-sv06-adxl345-mount-printhead-and-bed +# +# ADXL345 related Settings +# https://www.klipper3d.org/Measuring_Resonances.html#adxl345 +##################################################################### + +[mcu RP2040] +baud: 115200 +restart_method: command +# Obtain definition by "ls -l /dev/serial/by-id/" +serial: /dev/serial/by-id/usb-Klipper_rp2040_E66138935F154C28-if00 + +[adxl345 head] +cs_pin: RP2040:gpio1 +spi_bus: spi0a +# update axes_map if your sensor is oriented differently. Note the print on your sensor. +# -y, -z, x means that +# - the x axis of your printer corresponds to the sensor's negative y axis +# - the y axis of your printer corresponds to the sensor's negative z axis +# - the z axis of your printer corresponds to the sensor's x axis +axes_map: -y, -z, x + +[adxl345 bed] +cs_pin: RP2040:gpio9 +spi_bus: spi1a + +[resonance_tester] +probe_points: 111.5, 116.5, 30 +accel_chip_x: adxl345 head +accel_chip_y: adxl345 bed + +[gcode_macro ADX] +description: Shortcut to ACCELEROMETER_QUERY for both sensors +gcode: + ACCELEROMETER_QUERY CHIP=head + ACCELEROMETER_QUERY CHIP=bed diff --git a/printer.cfg b/printer.cfg index 1d08719..a72b668 100644 --- a/printer.cfg +++ b/printer.cfg @@ -10,6 +10,7 @@ # NOTE Uncomment the ONE of the following lines if you're using an adxl345 # [include ./cfgs/adxl-rp2040.cfg] +# [include ./cfgs/adxl-rpi-pico-2x.cfg] # [include ./cfgs/adxl-direct.cfg] [mcu] From 51fd3f0b19f74b52ab559c2fea155f2312f1c3e3 Mon Sep 17 00:00:00 2001 From: Bassam Husain <61985779+bassamanator@users.noreply.github.com> Date: Fri, 21 Apr 2023 16:41:26 -0400 Subject: [PATCH 50/80] Update adxl-rpi-pico-2x.cfg Minor adjustments to adxl-rpi-pico-2x.cfg. --- cfgs/adxl-rpi-pico-2x.cfg | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/cfgs/adxl-rpi-pico-2x.cfg b/cfgs/adxl-rpi-pico-2x.cfg index f2a2e43..363a301 100644 --- a/cfgs/adxl-rpi-pico-2x.cfg +++ b/cfgs/adxl-rpi-pico-2x.cfg @@ -1,7 +1,8 @@ ##################################################################### # Config that supports a print head and a bed sensor at the same time -# This requires a Raspberry Pi Pico. Instructions: -# https://klipper.discourse.group/t/raspberry-pi-pico-adxl345-portable-resonance-measurement/1757/9 +# This requires a Raspberry Pi Pico. +# Instructions: https://klipper.discourse.group/t/raspberry-pi-pico-adxl345-portable-resonance-measurement/1757/9 +# TLDR Instructions: The two sensors should use the spi0a (GPIO 0-3) and spi1a (GPIO 9-12) buses, respectively. # # Recommended mounts: # https://www.printables.com/model/385334-sovol-sv06-adxl345-mount-printhead-and-bed @@ -31,9 +32,9 @@ cs_pin: RP2040:gpio9 spi_bus: spi1a [resonance_tester] -probe_points: 111.5, 116.5, 30 accel_chip_x: adxl345 head accel_chip_y: adxl345 bed +probe_points: 111.5, 111.5, 20 [gcode_macro ADX] description: Shortcut to ACCELEROMETER_QUERY for both sensors From 835e990d888cf6605e42e1742751cae4e70823b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Marschollek?= Date: Fri, 21 Apr 2023 20:40:04 +0200 Subject: [PATCH 51/80] Avoid cooling down the extruder in PRINT_START The current `PRINT_START` macro heats the extruder to 150 degrees, then to 170, and finally to the target temperature. If the extruder is already hot, this unnecessarily cools it down and wastes time. This change only cools down the hotend if it's above the target temperature and then only to that temperature. If the extruder was colder than 150 degrees, this change maintains the current behaviour. --- cfgs/misc-macros.cfg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cfgs/misc-macros.cfg b/cfgs/misc-macros.cfg index 007bf92..e987a76 100644 --- a/cfgs/misc-macros.cfg +++ b/cfgs/misc-macros.cfg @@ -136,8 +136,8 @@ gcode: {% endif %} {% set bedtempAlmost = (bedtemp - 2, 0)|max %} - {% set hotendtempStepOne = 150|int %} - {% set hotendtempStepTwo = 170|int %} + {% set hotendtempStepOne = ((hotendtemp, printer[printer.toolhead.extruder].temperature|int)|min, 150)|max %} + {% set hotendtempStepTwo = ((hotendtemp, printer[printer.toolhead.extruder].temperature|int)|min, 170)|max %} BED_MESH_PROFILE LOAD=default ; NOTE if not using a mesh, comment out this line ADJUST_FILAMENT_SENSOR_STATUS ENABLE=1 From 940ea48541bd4ef621e8fdf43755a58e28bffa55 Mon Sep 17 00:00:00 2001 From: Bassam Husain <61985779+bassamanator@users.noreply.github.com> Date: Sat, 22 Apr 2023 15:00:45 -0400 Subject: [PATCH 52/80] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 64147ac..3c07c14 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ This repository contains the Klipper configuration and firmware for the **Sovol SV06** 3D printer with completely *stock hardware*. +For the **Sovol SV06 Plus**, please refer to the [sv06-plus](https://github.com/bassamanator/Sovol-SV06-firmware/tree/sv06-plus) branch. + If you wanted to use the One-Stop-Shop Klipper Configuration for a *different printer*, please switch to the [any-printer](https://github.com/bassamanator/Sovol-SV06-firmware/tree/any-printer) branch. I am creating these files for my personal use and cannot be held responsible for what it might do to your printer. Use at your own risk. From 6eedc4bd60aa67720bd055913b89a97e5a1d3143 Mon Sep 17 00:00:00 2001 From: Bassam Husain <61985779+bassamanator@users.noreply.github.com> Date: Sat, 22 Apr 2023 16:53:46 -0400 Subject: [PATCH 53/80] Update README.md Edit Adjust Your Slicer section. --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 3c07c14..aa9803b 100644 --- a/README.md +++ b/README.md @@ -149,6 +149,12 @@ But first, adjust your slicer. You need to adjust the start and end gcode in your slicer. The relevant macros are `PRINT_START` and `PRINT_END`. Find instructions [here](https://ellis3dp.com/Print-Tuning-Guide/articles/passing_slicer_variables.html#slicer-start-g-code). +If you would like to print a purge line before your print starts, at the end of your start gcode, on a new line add `PURGE_LINE`. Here's an example: +``` +PRINT_START BED=[first_layer_bed_temperature] HOTEND={first_layer_temperature[initial_extruder]+extruder_temperature_offset[initial_extruder]} CHAMBER=[chamber_temperature] +PURGE_LINE +``` + ## Directory Structure This repository contains many files and folders. Some are *necessary* for this Klipper configuration to work, others are not. From 6ede72744901d0a021ea12d48406c6b10b84fb98 Mon Sep 17 00:00:00 2001 From: Bassam Husain <61985779+bassamanator@users.noreply.github.com> Date: Sun, 23 Apr 2023 08:57:17 -0400 Subject: [PATCH 54/80] Update README.md Flash Firmware section. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index aa9803b..073c518 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,7 @@ Although I've made switching over to Klipper as easy as is possible, it can stil - Size: `8GB`. According to Sovol, the largest size that you can use is `16GB`. - File system: `FAT32`. +- Allocation unit size: `4096 bytes`. - Must not contain any files *except* the firmware file. ### Flashing Procedure From b0d122a1c1ab85cf04b74c47e0827cd0abc0ade3 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 23 Apr 2023 09:39:20 -0400 Subject: [PATCH 55/80] Adjust Initial steps, step 1. --- .vscode/settings.json | 12 ++++++++++++ README.md | 12 +++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index cdb8a73..3e14150 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,12 +7,24 @@ "spellright.documentTypes": ["markdown", "plaintext"], "cSpell.words": [ "ADXL", + "cfgs", + "Fluidd", + "Fluiddpi", "gcode", + "githubstar", "hotend", + "KIAUH", "Klipper", "Klipperized", + "lrwxrwxrwx", + "moonraker", "octahedroflake", "PARKBED", + "PARKCENTER", + "PARKFRONT", + "PARKFRONTLOW", + "PARKREAR", + "Prusa", "runout", "Sovol" ] diff --git a/README.md b/README.md index 073c518..260aeb9 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ Although I've made switching over to Klipper as easy as is possible, it can stil - If an error was reported at a step, do no proceed to the next step. - It is assumed that you are connected to your host Raspberry Pi (or other host device) via SSH, and that your printer motherboard is connected to the host via a data USB cable. Note that most of the micro USB cables that you find at home are *unlikely* to be data cables, and it's not possible to tell just by looking. - It is also assumed that the username on the host device is `pi`. If that is not the case, you will have to manually edit `moonraker.conf` and `cfgs/misc-macros.cfg` and change any mentions of `/home/pi` to `/home/yourUserName`. -- Klipper *must* be installed on the host Raspberry Pi for everything to work. Easiest is to use a [FluiddPi](https://docs.fluidd.xyz/installation/fluiddpi#download) or [MainsailOS](https://github.com/mainsail-crew/mainsail/releases/latest) image. [KIAUH](https://github.com/th33xitus/kiauh) is another excellent option, though it's not as simple as flashing MainsailOS on a microSD card, for example. +- Klipper *must* be installed on the host Raspberry Pi for everything to work. Easiest is to use a [~~FluiddPI~~](https://docs.fluidd.xyz/installation/fluiddpi#download) (⚠️ `FluiddPI` is not under active maintenance) or [MainsailOS](https://github.com/mainsail-crew/mainsail/releases/latest) image. Alternatively, you can install `Fluidd` or `Mainsail` via [KIAUH](https://github.com/th33xitus/kiauh). - Robert Redford's performance in *Spy Game (2001)* was superb! - It is assumed that there is one instance of Klipper installed. If you have multiple instances of Klipper installed, via `KIAUH` for example, then this guide is not for you. You can still use all the configs of course, but the steps in this guide will likely not work for you. - Your question has probably been answered already, but if it hasn't, please post in the [Discussion](https://github.com/bassamanator/Sovol-SV06-firmware/discussions) section. @@ -98,7 +98,17 @@ You can choose *either* of the 2 following methods. ### Step 1 1. Find what port the `mcu` (SV06 motherboard) is connected to via `ls -l /dev/serial/by-id/`. + 1. The output will be something along the lines of +`lrwxrwxrwx 13 root root 22 Apr 11:10 usb-1a86_USB2.0-Serial-if00-port0 -> ../../ttyUSB0`. + 2. `usb-1a86_USB2.0-Serial-if00-port0` is the relevant part. + 3. Therefore, the full path to your `mcu` is `/dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0`. 2. Adjust the `[mcu]` section in `printer.cfg` accordingly. + Based on this *example*, your `mcu` section will be: + ``` + [mcu] + serial: /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0 + restart_method: command + ``` ### Step 2 From d062ee5bcce51c89128f872cf79c361d7c36421a Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Wed, 3 May 2023 15:23:19 -0400 Subject: [PATCH 56/80] Adjusted initial steps on how to find the mcu. --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 260aeb9..6319b83 100644 --- a/README.md +++ b/README.md @@ -97,13 +97,13 @@ You can choose *either* of the 2 following methods. ### Step 1 -1. Find what port the `mcu` (SV06 motherboard) is connected to via `ls -l /dev/serial/by-id/`. +1. Find what port the `mcu` (printer motherboard) is connected to via `ls -l /dev/serial/by-id/` or `ls -l /dev/serial/by-path/`. 1. The output will be something along the lines of `lrwxrwxrwx 13 root root 22 Apr 11:10 usb-1a86_USB2.0-Serial-if00-port0 -> ../../ttyUSB0`. 2. `usb-1a86_USB2.0-Serial-if00-port0` is the relevant part. - 3. Therefore, the full path to your `mcu` is `/dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0`. + 3. Therefore, the full path to your `mcu` is either `/dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0` or `/dev/serial/by-path/usb-1a86_USB2.0-Serial-if00-port0`, depending on the command you used to find the `mcu`. 2. Adjust the `[mcu]` section in `printer.cfg` accordingly. - Based on this *example*, your `mcu` section will be: + This is just an *example* `mcu` section: ``` [mcu] serial: /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0 From ad4c893fbcc2d29588bf1069dbc48c99fddd8dee Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Fri, 12 May 2023 00:53:25 -0400 Subject: [PATCH 57/80] Moved images to correct folder. --- README.md | 4 ++-- {misc => images}/cup-border.png | Bin {misc => images}/logo_white_stroke.png | Bin 3 files changed, 2 insertions(+), 2 deletions(-) rename {misc => images}/cup-border.png (100%) rename {misc => images}/logo_white_stroke.png (100%) diff --git a/README.md b/README.md index 6319b83..50fd699 100644 --- a/README.md +++ b/README.md @@ -197,9 +197,9 @@ This repository contains many files and folders. Some are *necessary* for this K └── README.md ❌ ``` -## Ko-fi Support Me Ko-fi +## Ko-fi Support Me Ko-fi - If you found my work useful, please consider buying me a [Ko-fi](https://ko-fi.com/bassamanator). + If you found my work useful, please consider buying me a [Ko-fi](https://ko-fi.com/bassamanator). ## FAQ diff --git a/misc/cup-border.png b/images/cup-border.png similarity index 100% rename from misc/cup-border.png rename to images/cup-border.png diff --git a/misc/logo_white_stroke.png b/images/logo_white_stroke.png similarity index 100% rename from misc/logo_white_stroke.png rename to images/logo_white_stroke.png From d5de6866da51c685056b353f4f0c2df9e6b80ce4 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Fri, 12 May 2023 01:04:01 -0400 Subject: [PATCH 58/80] Adjusted directory structure. --- README.md | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 50fd699..7911d23 100644 --- a/README.md +++ b/README.md @@ -176,18 +176,23 @@ This repository contains many files and folders. Some are *necessary* for this K ├── cfgs ✅ │   ├── adxl-direct.cfg │   ├── adxl-rp2040.cfg -│   ├── beeper.cfg -│   ├── misc-macros.cfg +│   ├── adxl-rpi-pico-2x.cfg │   ├── MECHANICAL_GANTRY_CALIBRATION.cfg +│   ├── misc-macros.cfg │   ├── PARKING.cfg -│   └── TEST_SPEED.cfg [☠️Not ready for use☠️] +│   └── TEST_SPEED.cfg +├── CODE_OF_CONDUCT.md ❌ +├── CONTRIBUTING.md ❌ ├── images ❌ -│   └── githubstar.gif -├── misc ❌ │   ├── cup-border.png -│   ├── klipper.bin +│   ├── githubstar.gif +│   ├── heart.gif │   ├── logo_white_stroke.png +│   └── party_blob.gif +├── misc ❌ +│   ├── klipper-v0.11.0-148-g52f4e20c.bin │   ├── M503-output.yml +│   ├── marlin-SV06V2.0.0A_2.24.bin │   ├── SuperSlicer_config_bundle.ini │   ├── sv06-buildPlate.png │   ├── SV06-buildPlate.stl From be1711cb68f451d2d81c542352ee5875e78c63c3 Mon Sep 17 00:00:00 2001 From: Bassam <61985779+bassamanator@users.noreply.github.com> Date: Fri, 19 May 2023 21:40:27 -0400 Subject: [PATCH 59/80] Update README.md Prepare flash section --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 7911d23..0888711 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,8 @@ Although I've made switching over to Klipper as easy as is possible, it can stil ### Prepare the microSD Card for Flashing +⚠️ Many users have reported having issues flashing Klipper using the Sovol microSD card. + - Size: `8GB`. According to Sovol, the largest size that you can use is `16GB`. - File system: `FAT32`. - Allocation unit size: `4096 bytes`. From 24a4262af21eee47ad4dd72cad95fd666d253bfc Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sat, 20 May 2023 19:59:18 -0400 Subject: [PATCH 60/80] Pulled in print_start from personal: prints start with higher bed temp now, range 10C. --- cfgs/misc-macros.cfg | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/cfgs/misc-macros.cfg b/cfgs/misc-macros.cfg index e987a76..6e0d4be 100644 --- a/cfgs/misc-macros.cfg +++ b/cfgs/misc-macros.cfg @@ -127,6 +127,9 @@ gcode: {% set hotendtemp = params.HOTEND|int %} {% set chambertemp = params.CHAMBER|default(0)|int %} + # Other variables + {% set bedtempSlicer = bedtemp %} + {% set bedtempRange = 10 %} {% set maxVelocity = printer.configfile.settings.printer.max_velocity|default(200)|int %} {% set maxVelocityAdjusted = (0.90 * maxVelocity * 60)|int %} @@ -135,32 +138,40 @@ gcode: {% set startY = printer.configfile.settings.safe_z_home.home_xy_position[1]|float %} {% endif %} - {% set bedtempAlmost = (bedtemp - 2, 0)|max %} + {% set bedtempAlmost = ((bedtemp - 2, 0, printer.heater_bed.temperature|int)|max, bedtemp)|max %} {% set hotendtempStepOne = ((hotendtemp, printer[printer.toolhead.extruder].temperature|int)|min, 150)|max %} {% set hotendtempStepTwo = ((hotendtemp, printer[printer.toolhead.extruder].temperature|int)|min, 170)|max %} - BED_MESH_PROFILE LOAD=default ; NOTE if not using a mesh, comment out this line + # If bed-temp-almost is higher than bed-temp by a maximum of 10C + {% if bedtempAlmost > bedtemp %} + {% if (bedtempAlmost - bedtempRange) <= bedtemp %} + {% set bedtemp = bedtempAlmost %} + {% endif %} + {% endif %} + + BED_MESH_PROFILE LOAD=default ; NOTE if not using a mesh, comment out this line ADJUST_FILAMENT_SENSOR_STATUS ENABLE=1 - G90 ; absolute positioning - M140 S{bedtempAlmost} ; set & don't wait for bed temp - M104 S{hotendtempStepOne} ; set & don't wait for hotend temp + G90 ; absolute positioning + M140 S{bedtempAlmost} ; set & don't wait for bed temp + M104 S{hotendtempStepOne} ; set & don't wait for hotend temp G28 X Y {% if printer.configfile.settings.safe_z_home %} G1 X{startX} Y{startY} F{maxVelocityAdjusted} {% endif %} - M190 S{bedtempAlmost} ; set & wait for bed temp - M104 S{hotendtempStepTwo} ; set & don't wait for hotend temp - M190 S{bedtemp} ; set & wait for bed temp + M190 S{bedtempAlmost} ; set & wait for bed temp + M104 S{hotendtempStepTwo} ; set & don't wait for hotend temp + M190 S{bedtemp} ; set & wait for bed temp + M140 S{bedtempSlicer} ; set & don't wait for bed temp ; set temp to sliced setting regardless - M104 S{hotendtemp} ; set & don't wait for hotend temp - G28 Z ; final z homing + M104 S{hotendtemp} ; set & don't wait for hotend temp + G28 Z ; final z homing G1 X0 Y0 F{maxVelocityAdjusted} - M109 S{hotendtemp} ; set & wait for hotend temp + M109 S{hotendtemp} ; set & wait for hotend temp - G1 Z20 F3000 ; move nozzle away from bed + G1 Z20 F3000 ; move nozzle away from bed [gcode_macro PRINT_END] gcode: From 5ada85f9648572ed2cfc9ef9598e3b75f78edaea Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Fri, 9 Jun 2023 17:28:07 -0400 Subject: [PATCH 61/80] Bed temp over now customizable. --- cfgs/misc-macros.cfg | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/cfgs/misc-macros.cfg b/cfgs/misc-macros.cfg index 6e0d4be..5ca1dc1 100644 --- a/cfgs/misc-macros.cfg +++ b/cfgs/misc-macros.cfg @@ -28,11 +28,13 @@ gcode: [gcode_macro _globals] variable_filament_sensor_enabled: 0 # NOTE Enable(1) or disable(0) the filament sensor, if one is connected variable_beeping_enabled: 1 # NOTE Enable(1) or disable(0) beeping everywhere except during gantry calibration -variable_pre_purge_prime_length: 1.4 +variable_bed_temp_over: 10 # NOTE Start print if bed temperature is over by this amount, otherwise wait for temperature drop +variable_pre_purge_prime_length: 1.40 gcode: SET_GCODE_VARIABLE MACRO=_globals VARIABLE=pre_purge_prime_length VALUE={ variable_pre_purge_prime_length } SET_GCODE_VARIABLE MACRO=_globals VARIABLE=filament_sensor_enabled VALUE={ variable_filament_sensor_enabled } SET_GCODE_VARIABLE MACRO=_globals VARIABLE=beeping_enabled VALUE={ variable_beeping_enabled } + SET_GCODE_VARIABLE MACRO=_globals VARIABLE=bed_temp_over VALUE={ variable_bed_temp_over } [gcode_macro CONDITIONAL_BEEP] gcode: @@ -129,7 +131,7 @@ gcode: # Other variables {% set bedtempSlicer = bedtemp %} - {% set bedtempRange = 10 %} + {% set bedtempOver = printer["gcode_macro _globals"].bed_temp_over|default(0)|int %} {% set maxVelocity = printer.configfile.settings.printer.max_velocity|default(200)|int %} {% set maxVelocityAdjusted = (0.90 * maxVelocity * 60)|int %} @@ -142,9 +144,9 @@ gcode: {% set hotendtempStepOne = ((hotendtemp, printer[printer.toolhead.extruder].temperature|int)|min, 150)|max %} {% set hotendtempStepTwo = ((hotendtemp, printer[printer.toolhead.extruder].temperature|int)|min, 170)|max %} - # If bed-temp-almost is higher than bed-temp by a maximum of 10C + # If bed-temp-almost is higher than bed-temp by a maximum of bed-temp-over {% if bedtempAlmost > bedtemp %} - {% if (bedtempAlmost - bedtempRange) <= bedtemp %} + {% if (bedtempAlmost - bedtempOver) <= bedtemp %} {% set bedtemp = bedtempAlmost %} {% endif %} {% endif %} From 9c9eb1b088b91139c6a5d0cd7f55e738140e8670 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Fri, 9 Jun 2023 17:57:27 -0400 Subject: [PATCH 62/80] Added link to sv06plus official github. --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0888711..f89b542 100644 --- a/README.md +++ b/README.md @@ -71,8 +71,8 @@ Although I've made switching over to Klipper as easy as is possible, it can stil 2. Copy `klipper.bin` to the microSD card. 3. Make sure the printer is off. 4. Insert the microSD card into printer. -4. Turn on the printer and wait a minute (usually takes 10 seconds). -5. Turn off the printer and remove the microSD. +5. Turn on the printer and wait a minute (usually takes 10 seconds). +6. Turn off the printer and remove the microSD. You may find this [video](https://youtu.be/p6l253OJa34) useful. @@ -268,7 +268,7 @@ Same behaviour as `M600`/colour change *except* there won't be any beeping. ##### What happens when filament runs out? -*If* you have a working filament sensor, the same behaviour as `M600`/colour change will occur*except* the beeps will be fairly annoying. +*If* you have a working filament sensor, the same behaviour as `M600`/colour change will occur *except* the beeps will be fairly annoying. ##### How do I resume a print after a colour change or filament runout? @@ -294,6 +294,7 @@ The printhead is now parked front center waiting for you to insert filament. You - [SV06 Official Marlin Source Code](https://github.com/Sovol3d/Sv06-Source-Code) - [SV06 Official Models](https://github.com/Sovol3d/SV06-Fully-Open-Source) +- [SV06 Plus Official Marlin Source Code and Models](https://github.com/Sovol3d/SV06-PLUS) ## Sources From 6399c70309fdb53ee379e5990ad7efdc2b6d29a5 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Fri, 9 Jun 2023 18:07:42 -0400 Subject: [PATCH 63/80] Cleanup in readme. --- README.md | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index f89b542..b14e59c 100644 --- a/README.md +++ b/README.md @@ -106,6 +106,7 @@ You can choose *either* of the 2 following methods. 3. Therefore, the full path to your `mcu` is either `/dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0` or `/dev/serial/by-path/usb-1a86_USB2.0-Serial-if00-port0`, depending on the command you used to find the `mcu`. 2. Adjust the `[mcu]` section in `printer.cfg` accordingly. This is just an *example* `mcu` section: + ``` [mcu] serial: /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0 @@ -163,6 +164,7 @@ But first, adjust your slicer. You need to adjust the start and end gcode in your slicer. The relevant macros are `PRINT_START` and `PRINT_END`. Find instructions [here](https://ellis3dp.com/Print-Tuning-Guide/articles/passing_slicer_variables.html#slicer-start-g-code). If you would like to print a purge line before your print starts, at the end of your start gcode, on a new line add `PURGE_LINE`. Here's an example: + ``` PRINT_START BED=[first_layer_bed_temperature] HOTEND={first_layer_temperature[initial_extruder]+extruder_temperature_offset[initial_extruder]} CHAMBER=[chamber_temperature] PURGE_LINE @@ -230,12 +232,12 @@ The printer will beep upon: Make the following changes according to your needs. All beeping will be disabled *except* during gantry calibration. -| File | `cfgs/misc-macros.cfg` | -| - | - | -| Section | `[gcode_macro _globals]` | -| Variable | `variable_beeping_enabled` | -| Disable beeping | `0` | -| Enable beeping | `1` | +| File | `cfgs/misc-macros.cfg` | +| --------------- | -------------------------- | +| Section | `[gcode_macro _globals]` | +| Variable | `variable_beeping_enabled` | +| Disable beeping | `0` | +| Enable beeping | `1` | ##### I want to use a filament sensor. How do I set it up? @@ -244,12 +246,12 @@ Make the following changes according to your needs. All beeping will be disabled Make the following changes according to your needs. -| File | `cfgs/misc-macros.cfg` | -| - | - | -| Section | `[gcode_macro _globals]` | -| Variable | `variable_filament_sensor_enabled` | -| Disable sensor | `0` | -| Enable sensor | `1` | +| File | `cfgs/misc-macros.cfg` | +| -------------- | ---------------------------------- | +| Section | `[gcode_macro _globals]` | +| Variable | `variable_filament_sensor_enabled` | +| Disable sensor | `0` | +| Enable sensor | `1` | ##### My filament runout sensor works, but I just started a print without any filament loaded. What gives? From a5f72beea48903199aa388102dda70be3fd42610 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 11 Jun 2023 00:38:45 -0400 Subject: [PATCH 64/80] Minor update to readme.md. --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index b14e59c..8f2f83a 100644 --- a/README.md +++ b/README.md @@ -123,6 +123,8 @@ You can choose *either* of the 2 following methods. 💡 Find explanations for gcode commands at [https://marlinfw.org/](https://marlinfw.org/) and [klipper.org](https://www.klipper3d.org/G-Codes.html). +You will be pasting/typing these commands into the Mainsail/Fluidd console. + 1. `G28` 1. Check to see if `X` and `Y` max positions (`G90`, `G1 X223 F3000`, `G1 Y223 F3000`) can be reached, and adjust `position_max`, if necessary. You can probably go all the way up to `225` for `X` and `Y` both, however, I would not recommend it. 2. Do a `G34`; mechanical gantry calibration. After the controlled collision against the beam at the top, there will be a 10 second pause for you to verify that both sides of the gantry are pressed up against the `stoppers` at the top. You will hear a succession of beeps. From a6afa97f888ad154fd8a48f3c0b98df46a2ffdf3 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 11 Jun 2023 00:53:39 -0400 Subject: [PATCH 65/80] Changed * to _ for italics to accomodate the linter. --- README.md | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 8f2f83a..4bd03e6 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,16 @@ -# 🚨 *One-Stop-Shop* Sovol SV06 Klipper Configuration +# 🚨 _One-Stop-Shop_ Sovol SV06 Klipper Configuration -This repository contains the Klipper configuration and firmware for the **Sovol SV06** 3D printer with completely *stock hardware*. +This repository contains the Klipper configuration and firmware for the **Sovol SV06** 3D printer with completely _stock hardware_. For the **Sovol SV06 Plus**, please refer to the [sv06-plus](https://github.com/bassamanator/Sovol-SV06-firmware/tree/sv06-plus) branch. -If you wanted to use the One-Stop-Shop Klipper Configuration for a *different printer*, please switch to the [any-printer](https://github.com/bassamanator/Sovol-SV06-firmware/tree/any-printer) branch. +If you wanted to use the One-Stop-Shop Klipper Configuration for a _different printer_, please switch to the [any-printer](https://github.com/bassamanator/Sovol-SV06-firmware/tree/any-printer) branch. I am creating these files for my personal use and cannot be held responsible for what it might do to your printer. Use at your own risk. # Highlights -- 💥 This Klipper configuration is an *endpoint*, meaning that it contains **everything** that you could possibly need in order to have an excellent Klipper experience! 💥 +- 💥 This Klipper configuration is an _endpoint_, meaning that it contains **everything** that you could possibly need in order to have an excellent Klipper experience! 💥 - `NEW` Filament runout sensor usage implemented. - Minimum configuration settings for Mainsail/Fluiddpi to work. - SuperSlicer config bundle that contains the printer configuration, as well as what are considered by many to be the best print settings available for any FDM printer ([Ellis' SuperSlicer Profiles](https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles)). Find the differences between the different print setting profiles [here](https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles/tree/master/SuperSlicer). But basically, the 45 degree profile places the seam at the back. @@ -36,13 +36,13 @@ Although I've made switching over to Klipper as easy as is possible, it can stil ## Before You Begin -- Read this documentation *fully!* -- Make sure your printer is in good physical condition, because print and travel speeds will be *a lot faster* than they were before. Consider yourself warned. +- Read this documentation _fully!_ +- Make sure your printer is in good physical condition, because print and travel speeds will be _a lot faster_ than they were before. Consider yourself warned. - Follow the steps in order. - If an error was reported at a step, do no proceed to the next step. -- It is assumed that you are connected to your host Raspberry Pi (or other host device) via SSH, and that your printer motherboard is connected to the host via a data USB cable. Note that most of the micro USB cables that you find at home are *unlikely* to be data cables, and it's not possible to tell just by looking. +- It is assumed that you are connected to your host Raspberry Pi (or other host device) via SSH, and that your printer motherboard is connected to the host via a data USB cable. Note that most of the micro USB cables that you find at home are _unlikely_ to be data cables, and it's not possible to tell just by looking. - It is also assumed that the username on the host device is `pi`. If that is not the case, you will have to manually edit `moonraker.conf` and `cfgs/misc-macros.cfg` and change any mentions of `/home/pi` to `/home/yourUserName`. -- Klipper *must* be installed on the host Raspberry Pi for everything to work. Easiest is to use a [~~FluiddPI~~](https://docs.fluidd.xyz/installation/fluiddpi#download) (⚠️ `FluiddPI` is not under active maintenance) or [MainsailOS](https://github.com/mainsail-crew/mainsail/releases/latest) image. Alternatively, you can install `Fluidd` or `Mainsail` via [KIAUH](https://github.com/th33xitus/kiauh). +- Klipper _must_ be installed on the host Raspberry Pi for everything to work. Easiest is to use a [~~FluiddPI~~](https://docs.fluidd.xyz/installation/fluiddpi#download) (⚠️ `FluiddPI` is not under active maintenance) or [MainsailOS](https://github.com/mainsail-crew/mainsail/releases/latest) image. Alternatively, you can install `Fluidd` or `Mainsail` via [KIAUH](https://github.com/th33xitus/kiauh). - Robert Redford's performance in *Spy Game (2001)* was superb! - It is assumed that there is one instance of Klipper installed. If you have multiple instances of Klipper installed, via `KIAUH` for example, then this guide is not for you. You can still use all the configs of course, but the steps in this guide will likely not work for you. - Your question has probably been answered already, but if it hasn't, please post in the [Discussion](https://github.com/bassamanator/Sovol-SV06-firmware/discussions) section. @@ -50,7 +50,7 @@ Although I've made switching over to Klipper as easy as is possible, it can stil ## Flash Firmware -💡 *If you have already flashed klipper onto your motherboard in the past, you can skip this step.* +💡 _If you have already flashed klipper onto your motherboard in the past, you can skip this step._ 💡 For the sake of simplicity, I will refer to the klipper firmware file as `klipper.bin` even though the actual filename is something along the lines of `klipper-v0.11.0-148-g52f4e20c.bin`. @@ -76,24 +76,24 @@ Although I've made switching over to Klipper as easy as is possible, it can stil You may find this [video](https://youtu.be/p6l253OJa34) useful. -⚠️ **Caveat**: Flashing will only work if current firmware filename is *different from previous flashing procedure*. The `.bin` is also important. +⚠️ **Caveat**: Flashing will only work if current firmware filename is _different from previous flashing procedure_. The `.bin` is also important. ## Download Klipper Configuration -You can choose *either* of the 2 following methods. +You can choose _either_ of the 2 following methods. ### Method 1: Clone the Repository 1. `cd ~/printer_data/config` 2. Empty entire `~/printer_data/config` folder. Unfortunately, for safety reasons I will not post this command here. However, in linux, you can delete files via `rm filename`. -3. `git clone -b master --single-branch https://github.com/bassamanator/Sovol-SV06-firmware.git .` +3. `git clone -b master --single-branch https://github.com/bassamanator/Sovol-SV06-firmware.git .` 💡 Don't miss the period! ### Method 2: Download the ZIP 1. [Download](https://github.com/bassamanator/Sovol-SV06-firmware/archive/refs/heads/master.zip) the `ZIP` file containing the Klipper configuration. 2. See `Step 2` in `Method 1`. 3. The parent folder in the `ZIP` is `Sovol-SV06-firmware-master`. This is relevant in the next step. -4. Extract **only** the *contents* of the parent folder into `~/printer_data/config`. +4. Extract **only** the _contents_ of the parent folder into `~/printer_data/config`. ## Initial Steps @@ -174,9 +174,9 @@ PURGE_LINE ## Directory Structure -This repository contains many files and folders. Some are *necessary* for this Klipper configuration to work, others are not. +This repository contains many files and folders. Some are _necessary_ for this Klipper configuration to work, others are not. - **Necessary** items are marked with a ✅. -- Items that can *optionally* be deleted are marked with a ❌. +- Items that can _optionally_ be deleted are marked with a ❌. ``` ├── cfgs ✅ @@ -272,11 +272,11 @@ Same behaviour as `M600`/colour change *except* there won't be any beeping. ##### What happens when filament runs out? -*If* you have a working filament sensor, the same behaviour as `M600`/colour change will occur *except* the beeps will be fairly annoying. +_If_ you have a working filament sensor, the same behaviour as `M600`/colour change will occur _except_ the beeps will be fairly annoying. ##### How do I resume a print after a colour change or filament runout? -*Do no disable the stepper motors during this process!* +⚠️ _Do not disable the stepper motors during this process!_ The printhead is now parked front center waiting for you to insert filament. You will: @@ -284,7 +284,7 @@ The printhead is now parked front center waiting for you to insert filament. You - Use your Klipper dashboard. 2. Purge (push) some filament through the nozzle. - Use your Klipper dashboard, and extrude maybe 50mm (for a colour change you probably want to extrude more). - - OR, you can push some filament by hand *making sure to first disengage the extruder's spring loaded arm*. + - OR, you can push some filament by hand _making sure to first disengage the extruder's spring loaded arm_. 3. Hit resume in your Klipper dashboard. ## Useful Resources From 817a6771f6ebb3b81d8cd77ef979113c0cec42c2 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 11 Jun 2023 01:15:21 -0400 Subject: [PATCH 66/80] Cleanup with linter. --- README.md | 43 +++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 4bd03e6..02ad668 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ I am creating these files for my personal use and cannot be held responsible for # Highlights - 💥 This Klipper configuration is an _endpoint_, meaning that it contains **everything** that you could possibly need in order to have an excellent Klipper experience! 💥 -- `NEW` Filament runout sensor usage implemented. +- `NEW` Filament runout sensor usage implemented. - Minimum configuration settings for Mainsail/Fluiddpi to work. - SuperSlicer config bundle that contains the printer configuration, as well as what are considered by many to be the best print settings available for any FDM printer ([Ellis' SuperSlicer Profiles](https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles)). Find the differences between the different print setting profiles [here](https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles/tree/master/SuperSlicer). But basically, the 45 degree profile places the seam at the back. - Bed model and texture to use in SuperSlicer/PrusaSlicer. @@ -30,7 +30,7 @@ I work on this repository all the time and a lot of new features are coming. Wat # Preface -Although I've made switching over to Klipper as easy as is possible, it can still be a challenge for some, especially considering that most of you have likely never used GNU+Linux. Save yourself the frustration, and fully read all documentation found on this page. Also note that Klipper is not a *must*, and is not for everyone. You can stick with Marlin, and have a fine 3D printing experience. +Although I've made switching over to Klipper as easy as is possible, it can still be a challenge for some, especially considering that most of you have likely never used GNU+Linux. Save yourself the frustration, and fully read all documentation found on this page. Also note that Klipper is not a _must_, and is not for everyone. You can stick with Marlin, and have a fine 3D printing experience. # Installation Steps @@ -43,7 +43,7 @@ Although I've made switching over to Klipper as easy as is possible, it can stil - It is assumed that you are connected to your host Raspberry Pi (or other host device) via SSH, and that your printer motherboard is connected to the host via a data USB cable. Note that most of the micro USB cables that you find at home are _unlikely_ to be data cables, and it's not possible to tell just by looking. - It is also assumed that the username on the host device is `pi`. If that is not the case, you will have to manually edit `moonraker.conf` and `cfgs/misc-macros.cfg` and change any mentions of `/home/pi` to `/home/yourUserName`. - Klipper _must_ be installed on the host Raspberry Pi for everything to work. Easiest is to use a [~~FluiddPI~~](https://docs.fluidd.xyz/installation/fluiddpi#download) (⚠️ `FluiddPI` is not under active maintenance) or [MainsailOS](https://github.com/mainsail-crew/mainsail/releases/latest) image. Alternatively, you can install `Fluidd` or `Mainsail` via [KIAUH](https://github.com/th33xitus/kiauh). -- Robert Redford's performance in *Spy Game (2001)* was superb! +- Robert Redford's performance in _Spy Game (2001)_ was superb! - It is assumed that there is one instance of Klipper installed. If you have multiple instances of Klipper installed, via `KIAUH` for example, then this guide is not for you. You can still use all the configs of course, but the steps in this guide will likely not work for you. - Your question has probably been answered already, but if it hasn't, please post in the [Discussion](https://github.com/bassamanator/Sovol-SV06-firmware/discussions) section. - I would recommend searching for the word `NOTE` in this repository. There are roughly half a dozen short points amongst the various files that you should be aware of if you're using this configuration. @@ -63,7 +63,7 @@ Although I've made switching over to Klipper as easy as is possible, it can stil - Size: `8GB`. According to Sovol, the largest size that you can use is `16GB`. - File system: `FAT32`. - Allocation unit size: `4096 bytes`. -- Must not contain any files *except* the firmware file. +- Must not contain any files _except_ the firmware file. ### Flashing Procedure @@ -100,18 +100,18 @@ You can choose _either_ of the 2 following methods. ### Step 1 1. Find what port the `mcu` (printer motherboard) is connected to via `ls -l /dev/serial/by-id/` or `ls -l /dev/serial/by-path/`. - 1. The output will be something along the lines of -`lrwxrwxrwx 13 root root 22 Apr 11:10 usb-1a86_USB2.0-Serial-if00-port0 -> ../../ttyUSB0`. - 2. `usb-1a86_USB2.0-Serial-if00-port0` is the relevant part. - 3. Therefore, the full path to your `mcu` is either `/dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0` or `/dev/serial/by-path/usb-1a86_USB2.0-Serial-if00-port0`, depending on the command you used to find the `mcu`. + 1. The output will be something along the lines of + `lrwxrwxrwx 13 root root 22 Apr 11:10 usb-1a86_USB2.0-Serial-if00-port0 -> ../../ttyUSB0`. + 2. `usb-1a86_USB2.0-Serial-if00-port0` is the relevant part. + 3. Therefore, the full path to your `mcu` is either `/dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0` or `/dev/serial/by-path/usb-1a86_USB2.0-Serial-if00-port0`, depending on the command you used to find the `mcu`. 2. Adjust the `[mcu]` section in `printer.cfg` accordingly. - This is just an *example* `mcu` section: + This is just an _example_ `mcu` section: - ``` - [mcu] - serial: /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0 - restart_method: command - ``` + ``` + [mcu] + serial: /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0 + restart_method: command + ``` ### Step 2 @@ -175,6 +175,7 @@ PURGE_LINE ## Directory Structure This repository contains many files and folders. Some are _necessary_ for this Klipper configuration to work, others are not. + - **Necessary** items are marked with a ✅. - Items that can _optionally_ be deleted are marked with a ❌. @@ -225,6 +226,7 @@ Please see [this discussion](https://github.com/bassamanator/Sovol-SV06-firmware ##### When does beeping occur? The printer will beep upon: + - Filament runout. - Filament change/`M600`. - Upon `PRINT_END`. @@ -232,7 +234,7 @@ The printer will beep upon: ##### How do I disable beeping? -Make the following changes according to your needs. All beeping will be disabled *except* during gantry calibration. +Make the following changes according to your needs. All beeping will be disabled _except_ during gantry calibration. | File | `cfgs/misc-macros.cfg` | | --------------- | -------------------------- | @@ -243,7 +245,8 @@ Make the following changes according to your needs. All beeping will be disabled ##### I want to use a filament sensor. How do I set it up? - You can find information about the physical setup [here](https://github.com/bassamanator/everything-sovol-sv06#filament-sensor). +You can find information about the physical setup [here](https://github.com/bassamanator/everything-sovol-sv06#filament-sensor). + ##### I have a simple filament sensor connected. How do I enable/disable it? Make the following changes according to your needs. @@ -268,7 +271,7 @@ A simple runout sensor can only detect a change in state. So, if you start a pri ##### What happens when I pause a print? -Same behaviour as `M600`/colour change *except* there won't be any beeping. +Same behaviour as `M600`/colour change _except_ there won't be any beeping. ##### What happens when filament runs out? @@ -281,10 +284,10 @@ _If_ you have a working filament sensor, the same behaviour as `M600`/colour cha The printhead is now parked front center waiting for you to insert filament. You will: 1. Heat up the hotend to the desired temperature. - - Use your Klipper dashboard. + - Use your Klipper dashboard. 2. Purge (push) some filament through the nozzle. - - Use your Klipper dashboard, and extrude maybe 50mm (for a colour change you probably want to extrude more). - - OR, you can push some filament by hand _making sure to first disengage the extruder's spring loaded arm_. + - Use your Klipper dashboard, and extrude maybe 50mm (for a colour change you probably want to extrude more). + - OR, you can push some filament by hand _making sure to first disengage the extruder's spring loaded arm_. 3. Hit resume in your Klipper dashboard. ## Useful Resources From f921823acf8cd9a49c17a59402d071aa0581c7b5 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 11 Jun 2023 01:21:53 -0400 Subject: [PATCH 67/80] Adjusted settings.json. --- .vscode/settings.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 3e14150..1a48344 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -27,5 +27,8 @@ "Prusa", "runout", "Sovol" - ] + ], + "[markdown]": { + "editor.formatOnSave": true + } } From baf505113dff9a4eb27d9e6336dc880fe6f23a79 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 18 Jun 2023 13:45:14 -0400 Subject: [PATCH 68/80] Update readme minor. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 02ad668..de64954 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ This repository contains the Klipper configuration and firmware for the **Sovol For the **Sovol SV06 Plus**, please refer to the [sv06-plus](https://github.com/bassamanator/Sovol-SV06-firmware/tree/sv06-plus) branch. -If you wanted to use the One-Stop-Shop Klipper Configuration for a _different printer_, please switch to the [any-printer](https://github.com/bassamanator/Sovol-SV06-firmware/tree/any-printer) branch. +To use the One-Stop-Shop Klipper Configuration with a _different printer_, please switch to the [any-printer](https://github.com/bassamanator/Sovol-SV06-firmware/tree/any-printer) branch. I am creating these files for my personal use and cannot be held responsible for what it might do to your printer. Use at your own risk. From cd59efe4c142e2d12f72cfc091799411b3fa80ee Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 18 Jun 2023 13:50:37 -0400 Subject: [PATCH 69/80] Update readme minor. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index de64954..b236660 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ # 🚨 _One-Stop-Shop_ Sovol SV06 Klipper Configuration -This repository contains the Klipper configuration and firmware for the **Sovol SV06** 3D printer with completely _stock hardware_. +This branch contains the Klipper configuration and firmware for the **Sovol SV06** 3D printer. For the **Sovol SV06 Plus**, please refer to the [sv06-plus](https://github.com/bassamanator/Sovol-SV06-firmware/tree/sv06-plus) branch. -To use the One-Stop-Shop Klipper Configuration with a _different printer_, please switch to the [any-printer](https://github.com/bassamanator/Sovol-SV06-firmware/tree/any-printer) branch. +To use the One-Stop-Shop Klipper Configuration with a _different printer_, please refer to the [any-printer](https://github.com/bassamanator/Sovol-SV06-firmware/tree/any-printer) branch. I am creating these files for my personal use and cannot be held responsible for what it might do to your printer. Use at your own risk. From 61eaab3221117f00302c747b449ef9b84827a2d8 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 18 Jun 2023 14:38:18 -0400 Subject: [PATCH 70/80] Updated readme minor. --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b236660..72f722c 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,11 @@ This branch contains the Klipper configuration and firmware for the **Sovol SV06** 3D printer. +For the **Sovol SV06 SKR-Mini-E3-V3**, please refer to the [skr-mini-e3-v3](https://github.com/bassamanator/Sovol-SV06-firmware/tree/skr-mini-e3-v3) branch. + For the **Sovol SV06 Plus**, please refer to the [sv06-plus](https://github.com/bassamanator/Sovol-SV06-firmware/tree/sv06-plus) branch. -To use the One-Stop-Shop Klipper Configuration with a _different printer_, please refer to the [any-printer](https://github.com/bassamanator/Sovol-SV06-firmware/tree/any-printer) branch. +For all **other printers**, please refer to the [any-printer](https://github.com/bassamanator/Sovol-SV06-firmware/tree/any-printer) branch. I am creating these files for my personal use and cannot be held responsible for what it might do to your printer. Use at your own risk. From ccdde22c5776b588102051b66845d7de389a6275 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 18 Jun 2023 14:51:18 -0400 Subject: [PATCH 71/80] Added table for branches instead of text. --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 72f722c..7713dae 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,12 @@ This branch contains the Klipper configuration and firmware for the **Sovol SV06** 3D printer. -For the **Sovol SV06 SKR-Mini-E3-V3**, please refer to the [skr-mini-e3-v3](https://github.com/bassamanator/Sovol-SV06-firmware/tree/skr-mini-e3-v3) branch. - -For the **Sovol SV06 Plus**, please refer to the [sv06-plus](https://github.com/bassamanator/Sovol-SV06-firmware/tree/sv06-plus) branch. - -For all **other printers**, please refer to the [any-printer](https://github.com/bassamanator/Sovol-SV06-firmware/tree/any-printer) branch. +| Printer | Branch | +| --------------------------- | ----------------------------------------------------------------------------------------- | +| Sovol SV06 | **You are here** | +| Sovol SV06 Skr-Mini-E3-V3.0 | [skr-mini-e3-v3](https://github.com/bassamanator/Sovol-SV06-firmware/tree/skr-mini-e3-v3) | +| Sovol SV06 Plus | [sv06-plus](https://github.com/bassamanator/Sovol-SV06-firmware/tree/sv06-plus) | +| All other printers | [any-printer](https://github.com/bassamanator/Sovol-SV06-firmware/tree/any-printer) | I am creating these files for my personal use and cannot be held responsible for what it might do to your printer. Use at your own risk. From 9c79ca81bb3cced3a941ae51f770690615f0f07e Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 18 Jun 2023 15:31:57 -0400 Subject: [PATCH 72/80] Adjusted links. --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 7713dae..18c8e9c 100644 --- a/README.md +++ b/README.md @@ -300,11 +300,11 @@ The printhead is now parked front center waiting for you to insert filament. You - ⭐⭐⭐⭐⭐ [Ellis' Print Tuning Guide](https://ellis3dp.com/Print-Tuning-Guide) - [Simplify3D Print Quality Troubleshooting Guide](https://www.simplify3d.com/resources/print-quality-troubleshooting/) -## Links +## Sovol Official Links -- [SV06 Official Marlin Source Code](https://github.com/Sovol3d/Sv06-Source-Code) -- [SV06 Official Models](https://github.com/Sovol3d/SV06-Fully-Open-Source) -- [SV06 Plus Official Marlin Source Code and Models](https://github.com/Sovol3d/SV06-PLUS) +- [SV06 Marlin Source Code](https://github.com/Sovol3d/Sv06-Source-Code) +- [SV06 Models](https://github.com/Sovol3d/SV06-Fully-Open-Source) +- [SV06 Plus Marlin Source Code and Models](https://github.com/Sovol3d/SV06-PLUS) ## Sources From 7aecb64bca601e803b938183702ca43eed6a0b3d Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 18 Jun 2023 19:43:03 -0400 Subject: [PATCH 73/80] Updated readme minor. --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 18c8e9c..20968a0 100644 --- a/README.md +++ b/README.md @@ -4,14 +4,14 @@ This branch contains the Klipper configuration and firmware for the **Sovol SV06 | Printer | Branch | | --------------------------- | ----------------------------------------------------------------------------------------- | -| Sovol SV06 | **You are here** | +| Sovol SV06 | ✨**You are here**✨ | | Sovol SV06 Skr-Mini-E3-V3.0 | [skr-mini-e3-v3](https://github.com/bassamanator/Sovol-SV06-firmware/tree/skr-mini-e3-v3) | | Sovol SV06 Plus | [sv06-plus](https://github.com/bassamanator/Sovol-SV06-firmware/tree/sv06-plus) | | All other printers | [any-printer](https://github.com/bassamanator/Sovol-SV06-firmware/tree/any-printer) | I am creating these files for my personal use and cannot be held responsible for what it might do to your printer. Use at your own risk. -# Highlights +# Features - 💥 This Klipper configuration is an _endpoint_, meaning that it contains **everything** that you could possibly need in order to have an excellent Klipper experience! 💥 - `NEW` Filament runout sensor usage implemented. @@ -25,9 +25,9 @@ I am creating these files for my personal use and cannot be held responsible for - Load/unload filament macros. - Purge line macro. -## Stay Up-to-Date +# Stay Up-to-Date -I work on this repository all the time and a lot of new features are coming. Watch releases of this repository to be notified for future updates: +Watch for releases and updates: Raspberry Pi @@ -214,6 +214,8 @@ This repository contains many files and folders. Some are _necessary_ for this K ## Ko-fi Support Me Ko-fi +Please ⭐star⭐ this repository! + If you found my work useful, please consider buying me a [Ko-fi](https://ko-fi.com/bassamanator). ## FAQ From 28ac5d526062adc47cb17c6df833c57f86dadb95 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 18 Jun 2023 20:16:09 -0400 Subject: [PATCH 74/80] Update dir structure. --- README.md | 48 ++++++++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 20968a0..dda1da0 100644 --- a/README.md +++ b/README.md @@ -184,32 +184,40 @@ This repository contains many files and folders. Some are _necessary_ for this K ``` ├── cfgs ✅ -│   ├── adxl-direct.cfg -│   ├── adxl-rp2040.cfg -│   ├── adxl-rpi-pico-2x.cfg -│   ├── MECHANICAL_GANTRY_CALIBRATION.cfg -│   ├── misc-macros.cfg -│   ├── PARKING.cfg -│   └── TEST_SPEED.cfg +│ ├── adxl-direct.cfg +│ ├── adxl-rp2040.cfg +│ ├── adxl-rpi-pico-2x.cfg +│ ├── MECHANICAL_GANTRY_CALIBRATION.cfg +│ ├── misc-macros.cfg +│ ├── PARKING.cfg +│ └── TEST_SPEED.cfg ├── CODE_OF_CONDUCT.md ❌ ├── CONTRIBUTING.md ❌ +├── .github ❌ +│ ├── FUNDING.yml +│ └── ISSUE_TEMPLATE +│ ├── bug_report.md +│ └── feature_request.md +├── .gitignore ❌ ├── images ❌ -│   ├── cup-border.png -│   ├── githubstar.gif -│   ├── heart.gif -│   ├── logo_white_stroke.png -│   └── party_blob.gif +│ ├── cup-border.png +│ ├── githubstar.gif +│ ├── heart.gif +│ ├── logo_white_stroke.png +│ └── party_blob.gif ├── misc ❌ -│   ├── klipper-v0.11.0-148-g52f4e20c.bin -│   ├── M503-output.yml -│   ├── marlin-SV06V2.0.0A_2.24.bin -│   ├── SuperSlicer_config_bundle.ini -│   ├── sv06-buildPlate.png -│   ├── SV06-buildPlate.stl -│   └── SV06-texture.svg +│ ├── klipper-v0.11.0-148-g52f4e20c.bin +│ ├── M503-output.yml +│ ├── marlin-SV06V2.0.0A_2.24.bin +│ ├── SuperSlicer_config_bundle.ini +│ ├── sv06-buildPlate.png +│ ├── SV06-buildPlate.stl +│ └── SV06-texture.svg ├── moonraker.conf ✅ ├── printer.cfg ✅ -└── README.md ❌ +├── README.md ❌ +└── .vscode ❌ + └── settings.json ``` ## Ko-fi Support Me Ko-fi From 9ee603e74d8ac2722db38373757ce35f5e714c3c Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 18 Jun 2023 21:11:17 -0400 Subject: [PATCH 75/80] Many adjustments to README instructions. --- README.md | 52 ++++++++++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index dda1da0..64187c7 100644 --- a/README.md +++ b/README.md @@ -11,10 +11,10 @@ This branch contains the Klipper configuration and firmware for the **Sovol SV06 I am creating these files for my personal use and cannot be held responsible for what it might do to your printer. Use at your own risk. -# Features +## Features - 💥 This Klipper configuration is an _endpoint_, meaning that it contains **everything** that you could possibly need in order to have an excellent Klipper experience! 💥 -- `NEW` Filament runout sensor usage implemented. +- Filament runout sensor usage implemented. - Minimum configuration settings for Mainsail/Fluiddpi to work. - SuperSlicer config bundle that contains the printer configuration, as well as what are considered by many to be the best print settings available for any FDM printer ([Ellis' SuperSlicer Profiles](https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles)). Find the differences between the different print setting profiles [here](https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles/tree/master/SuperSlicer). But basically, the 45 degree profile places the seam at the back. - Bed model and texture to use in SuperSlicer/PrusaSlicer. @@ -25,19 +25,19 @@ I am creating these files for my personal use and cannot be held responsible for - Load/unload filament macros. - Purge line macro. -# Stay Up-to-Date +## Stay Up-to-Date Watch for releases and updates: Raspberry Pi -# Preface +## Preface Although I've made switching over to Klipper as easy as is possible, it can still be a challenge for some, especially considering that most of you have likely never used GNU+Linux. Save yourself the frustration, and fully read all documentation found on this page. Also note that Klipper is not a _must_, and is not for everyone. You can stick with Marlin, and have a fine 3D printing experience. -# Installation Steps +## Installation Steps -## Before You Begin +### Before You Begin - Read this documentation _fully!_ - Make sure your printer is in good physical condition, because print and travel speeds will be _a lot faster_ than they were before. Consider yourself warned. @@ -51,24 +51,25 @@ Although I've made switching over to Klipper as easy as is possible, it can stil - Your question has probably been answered already, but if it hasn't, please post in the [Discussion](https://github.com/bassamanator/Sovol-SV06-firmware/discussions) section. - I would recommend searching for the word `NOTE` in this repository. There are roughly half a dozen short points amongst the various files that you should be aware of if you're using this configuration. -## Flash Firmware +### Flash Firmware 💡 _If you have already flashed klipper onto your motherboard in the past, you can skip this step._ -💡 For the sake of simplicity, I will refer to the klipper firmware file as `klipper.bin` even though the actual filename is something along the lines of `klipper-v0.11.0-148-g52f4e20c.bin`. +Please note: -💡 The firmware file is located in the `misc` folder. +- For the sake of simplicity, I will refer to the klipper firmware file as `klipper.bin` even though the actual filename is something along the lines of `klipper-v0.11.0-148-g52f4e20c.bin`. +- The firmware file is located in the `misc` folder. +- Flashing will only work if current firmware filename is _different from previous flashing procedure_. The `.bin` is also important. +- Many users have reported having issues flashing Klipper using the Sovol microSD card. -### Prepare the microSD Card for Flashing +#### 1. Prepare the microSD Card for Flashing with These Parameters -⚠️ Many users have reported having issues flashing Klipper using the Sovol microSD card. - -- Size: `8GB`. According to Sovol, the largest size that you can use is `16GB`. +- Size: `16GB` maximum. - File system: `FAT32`. - Allocation unit size: `4096 bytes`. - Must not contain any files _except_ the firmware file. -### Flashing Procedure +#### 2. Flashing Procedure 1. Disconnect any USB cables that might be connected to the motherboard. 2. Copy `klipper.bin` to the microSD card. @@ -79,19 +80,18 @@ Although I've made switching over to Klipper as easy as is possible, it can stil You may find this [video](https://youtu.be/p6l253OJa34) useful. -⚠️ **Caveat**: Flashing will only work if current firmware filename is _different from previous flashing procedure_. The `.bin` is also important. - -## Download Klipper Configuration +### Download Klipper Configuration You can choose _either_ of the 2 following methods. -### Method 1: Clone the Repository +#### Method 1: Clone the Repository 1. `cd ~/printer_data/config` -2. Empty entire `~/printer_data/config` folder. Unfortunately, for safety reasons I will not post this command here. However, in linux, you can delete files via `rm filename`. -3. `git clone -b master --single-branch https://github.com/bassamanator/Sovol-SV06-firmware.git .` 💡 Don't miss the period! +2. Empty entire `~/printer_data/config` folder. + - In linux, you can delete files via `rm fileName` and directories via `rmdir directoryName`. +3. `git clone -b master --single-branch https://github.com/bassamanator/Sovol-SV06-firmware.git .` ⚠️ Don't miss the period! -### Method 2: Download the ZIP +#### Method 2: Download the ZIP 1. [Download](https://github.com/bassamanator/Sovol-SV06-firmware/archive/refs/heads/master.zip) the `ZIP` file containing the Klipper configuration. 2. See `Step 2` in `Method 1`. @@ -116,6 +116,10 @@ You can choose _either_ of the 2 following methods. restart_method: command ``` +3. Do a `FIRMWARE_RESTART`. + +If you've done everything correctly, you should see no errors or warnings in your Mainsail/Fluidd dashboard. + ### Step 2 ❗☠️ **Your finger should be on the power switch for most of these steps** ☠️❗ @@ -124,7 +128,7 @@ You can choose _either_ of the 2 following methods. 💡 I recommend no filament be loaded for any of these steps. -💡 Find explanations for gcode commands at [https://marlinfw.org/](https://marlinfw.org/) and [klipper.org](https://www.klipper3d.org/G-Codes.html). +💡 Find explanations for gcode commands at [https://marlinfw.org/](https://marlinfw.org/) and [https://www.klipper3d.org/](https://www.klipper3d.org/G-Codes.html). You will be pasting/typing these commands into the Mainsail/Fluidd console. @@ -132,13 +136,13 @@ You will be pasting/typing these commands into the Mainsail/Fluidd console. 1. Check to see if `X` and `Y` max positions (`G90`, `G1 X223 F3000`, `G1 Y223 F3000`) can be reached, and adjust `position_max`, if necessary. You can probably go all the way up to `225` for `X` and `Y` both, however, I would not recommend it. 2. Do a `G34`; mechanical gantry calibration. After the controlled collision against the beam at the top, there will be a 10 second pause for you to verify that both sides of the gantry are pressed up against the `stoppers` at the top. You will hear a succession of beeps. 1. Figure out your `Z` `position_max` by baby stepping your way up to the beam. The range is 250 to 261 from what I've seen, could be even higher for you. Adjust `position_max`, if necessary. I can go all the way to 258, however, I would not print anything higher than 257. -3. Pid tune the bed, but first move the printhead to the center. Ideally, all Pid tuning should occur at the temperatures that you print most at. +3. PID tune the bed, but first move the printhead to the center. Ideally, all PID tuning should occur at the temperatures that you print most at. 1. `G28` 2. `G90` 3. `G1 X111 Y111 Z40 F6000` 4. `PID_CALIBRATE HEATER=heater_bed TARGET=70` 5. `SAVE_CONFIG` (once completed) -4. Pid tune the extruder while part cooling fan runs at 25%. +4. PID tune the extruder while part cooling fan runs at 25%. 1. `G28` 2. `G90` 3. `G1 X111 Y111 Z10 F6000` From 089ad6a4bd8279f13125cc1899c4ced1caac5fee Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 18 Jun 2023 22:05:51 -0400 Subject: [PATCH 76/80] Added outline. --- README.md | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 64187c7..a74f774 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,26 @@ This branch contains the Klipper configuration and firmware for the **Sovol SV06 I am creating these files for my personal use and cannot be held responsible for what it might do to your printer. Use at your own risk. +## Outline + +- [Features](#features) +- [Stay Up-to-Date](#stay-up-to-date) +- [Preface](#preface) +- [Installation Steps](#installation-steps) + - [Before You Begin](#before-you-begin) + - [Flash Firmware](#flash-firmware) + - [Download Klipper Configuration](#download-klipper-configuration) +- [Initial Steps](#initial-steps) + 1. [Adjust Configuration with MCU Path](#adjust-configuration-with-mcu-path) + 2. [Configure Your Printer](#configure-your-printer) +- [Adjust Your Slicer](#adjust-your-slicer) +- [Directory Structure](#directory-structure) +- [Support Me](#support-me) +- [FAQ](#faq) +- [Useful Resources](#useful-resources) +- [Sovol Official Links](#sovol-official-links) +- [Sources](#sources) + ## Features - 💥 This Klipper configuration is an _endpoint_, meaning that it contains **everything** that you could possibly need in order to have an excellent Klipper experience! 💥 @@ -89,7 +109,7 @@ You can choose _either_ of the 2 following methods. 1. `cd ~/printer_data/config` 2. Empty entire `~/printer_data/config` folder. - In linux, you can delete files via `rm fileName` and directories via `rmdir directoryName`. -3. `git clone -b master --single-branch https://github.com/bassamanator/Sovol-SV06-firmware.git .` ⚠️ Don't miss the period! +3. `git clone -b master --single-branch https://github.com/bassamanator/Sovol-SV06-firmware.git .` ⚠️ Don't miss the period! #### Method 2: Download the ZIP @@ -100,7 +120,7 @@ You can choose _either_ of the 2 following methods. ## Initial Steps -### Step 1 +### Adjust Configuration with MCU Path 1. Find what port the `mcu` (printer motherboard) is connected to via `ls -l /dev/serial/by-id/` or `ls -l /dev/serial/by-path/`. 1. The output will be something along the lines of @@ -120,7 +140,7 @@ You can choose _either_ of the 2 following methods. If you've done everything correctly, you should see no errors or warnings in your Mainsail/Fluidd dashboard. -### Step 2 +### Configure Your Printer ❗☠️ **Your finger should be on the power switch for most of these steps** ☠️❗ From 52c721226f72585ba1bcb970ff0738f3804b36a8 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 18 Jun 2023 22:09:17 -0400 Subject: [PATCH 77/80] Adjust readme.md. --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a74f774..fbc6c80 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ I am creating these files for my personal use and cannot be held responsible for ## Stay Up-to-Date -Watch for releases and updates: +Watch for releases and updates. Raspberry Pi @@ -244,11 +244,11 @@ This repository contains many files and folders. Some are _necessary_ for this K └── settings.json ``` -## Ko-fi Support Me Ko-fi +## Support Me Please ⭐star⭐ this repository! - If you found my work useful, please consider buying me a [Ko-fi](https://ko-fi.com/bassamanator). +Ko-fi If you found my work useful, please consider buying me a [Ko-fi](https://ko-fi.com/bassamanator). ## FAQ From 3c8a5d6a4241bfebceb562e6a72db74917ffd151 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 18 Jun 2023 22:21:27 -0400 Subject: [PATCH 78/80] Adjust readme.md. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fbc6c80..078dbef 100644 --- a/README.md +++ b/README.md @@ -246,9 +246,9 @@ This repository contains many files and folders. Some are _necessary_ for this K ## Support Me -Please ⭐star⭐ this repository! +Please ⭐ star ⭐ this repository! -Ko-fi If you found my work useful, please consider buying me a [Ko-fi](https://ko-fi.com/bassamanator). +If you found my work useful, please consider buying me a [Ko-fi](https://ko-fi.com/bassamanator). ## FAQ From 12ed1d3a9fee3964b1f8d516ba78eccf99827b6f Mon Sep 17 00:00:00 2001 From: Ed Ropple Date: Tue, 20 Jun 2023 18:28:50 -0400 Subject: [PATCH 79/80] replaced manual PID/calibration steps with reusable macros --- README.md | 32 +++++++++----------------------- cfgs/CALIBRATION.cfg | 39 +++++++++++++++++++++++++++++++++++++++ printer.cfg | 1 + 3 files changed, 49 insertions(+), 23 deletions(-) create mode 100644 cfgs/CALIBRATION.cfg diff --git a/README.md b/README.md index 078dbef..aaa8b6d 100644 --- a/README.md +++ b/README.md @@ -157,32 +157,18 @@ You will be pasting/typing these commands into the Mainsail/Fluidd console. 2. Do a `G34`; mechanical gantry calibration. After the controlled collision against the beam at the top, there will be a 10 second pause for you to verify that both sides of the gantry are pressed up against the `stoppers` at the top. You will hear a succession of beeps. 1. Figure out your `Z` `position_max` by baby stepping your way up to the beam. The range is 250 to 261 from what I've seen, could be even higher for you. Adjust `position_max`, if necessary. I can go all the way to 258, however, I would not print anything higher than 257. 3. PID tune the bed, but first move the printhead to the center. Ideally, all PID tuning should occur at the temperatures that you print most at. - 1. `G28` - 2. `G90` - 3. `G1 X111 Y111 Z40 F6000` - 4. `PID_CALIBRATE HEATER=heater_bed TARGET=70` - 5. `SAVE_CONFIG` (once completed) + 1. `PID_TEST_BED` + 2. `SAVE_CONFIG` (once completed) 4. PID tune the extruder while part cooling fan runs at 25%. - 1. `G28` - 2. `G90` - 3. `G1 X111 Y111 Z10 F6000` - 4. `M106 S64` - 5. `PID_CALIBRATE HEATER=extruder TARGET=245` - 6. `SAVE_CONFIG` (once completed) + 1. `PID_TEST_HOTEND` + 2. `SAVE_CONFIG` (once completed) 5. Adjust `z_offset`. Make sure your nozzle if very clean. Do the [Paper test](https://www.klipper3d.org/Bed_Level.html?h=probe_calibrate#the-paper-test). - 1. `SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=60` - 2. `SET_HEATER_TEMPERATURE HEATER=extruder TARGET=180` - 3. Proceed to next steps after both temperatures have been reached. - 4. `G28` - 5. `PROBE_CALIBRATE` - 6. `SAVE_CONFIG` (once completed) + 1. `DO_PROBE_CALIBRATE` + 2. Follow z-offset setup in Mainsail. + 3. `SAVE_CONFIG` (once completed) 6. Create a bed mesh. - 1. `SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=60` - 2. `SET_HEATER_TEMPERATURE HEATER=extruder TARGET=180` - 3. Proceed to next steps after both temperatures have been reached. - 4. `G28` - 5. `BED_MESH_CALIBRATE` - 6. `SAVE_CONFIG` (once completed) + 1. `DO_BED_CALIBRATE` + 2. `SAVE_CONFIG` (once completed) If you've made it here, then your printer has been Klipperized, and is ready to print! diff --git a/cfgs/CALIBRATION.cfg b/cfgs/CALIBRATION.cfg new file mode 100644 index 0000000..2cf7e4b --- /dev/null +++ b/cfgs/CALIBRATION.cfg @@ -0,0 +1,39 @@ +[gcode_macro PID_TEST_BED] +gcode: + G28 + G90 + PARKBED + M106 S64 + PID_CALIBRATE HEATER=heater_bed TARGET=75 + +[gcode_macro PID_TEST_HOTEND] +gcode: + G28 + G90 + PARKBED + M106 S64 + PID_CALIBRATE HEATER=extruder TARGET=245 + +[gcode_macro PID_TEST_ALL] +gcode: + PID_TEST_BED + PID_TEST_HOTEND + SAVE_CONFIG + +[gcode_macro DO_PROBE_CALIBRATE] +gcode: + SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=60 + SET_HEATER_TEMPERATURE HEATER=extruder TARGET=180 + TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=60 + TEMPERATURE_WAIT sensor=extruder MINIMUM=180 + G28 + PROBE_CALIBRATE + +[gcode_macro DO_BED_CALIBRATE] +gcode: + SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=60 + SET_HEATER_TEMPERATURE HEATER=extruder TARGET=180 + TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=60 + TEMPERATURE_WAIT sensor=extruder MINIMUM=180 + G28 + BED_MESH_CALIBRATE \ No newline at end of file diff --git a/printer.cfg b/printer.cfg index a72b668..bd391d2 100644 --- a/printer.cfg +++ b/printer.cfg @@ -7,6 +7,7 @@ [include ./cfgs/misc-macros.cfg] [include ./cfgs/PARKING.cfg] [include ./cfgs/MECHANICAL_GANTRY_CALIBRATION.cfg] +[include ./cfgs/CALIBRATION.cfg] # NOTE Uncomment the ONE of the following lines if you're using an adxl345 # [include ./cfgs/adxl-rp2040.cfg] From d405db4922a4c6511312c2b78c858ace962c6f5d Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Wed, 21 Jun 2023 18:18:21 -0400 Subject: [PATCH 80/80] Adjusted mcu section. --- cfgs/CALIBRATION.cfg | 48 ++++++++++++++++++++++---------------------- printer.cfg | 4 ++-- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/cfgs/CALIBRATION.cfg b/cfgs/CALIBRATION.cfg index ddae194..006e30b 100644 --- a/cfgs/CALIBRATION.cfg +++ b/cfgs/CALIBRATION.cfg @@ -1,39 +1,39 @@ [gcode_macro PID_TEST_BED] gcode: - G28 - G90 - G1 X111 Y111 Z40 F6000 - PID_CALIBRATE HEATER=heater_bed TARGET=70 + G28 + G90 + G1 X111 Y111 Z40 F6000 + PID_CALIBRATE HEATER=heater_bed TARGET=70 [gcode_macro PID_TEST_HOTEND] gcode: - G28 - G90 - G1 X111 Y111 Z10 F6000 - M106 S64 - PID_CALIBRATE HEATER=extruder TARGET=245 + G28 + G90 + G1 X111 Y111 Z10 F6000 + M106 S64 + PID_CALIBRATE HEATER=extruder TARGET=245 # TODO test this [gcode_macro PID_TEST_ALL] gcode: - PID_TEST_BED - PID_TEST_HOTEND - SAVE_CONFIG + PID_TEST_BED + PID_TEST_HOTEND + SAVE_CONFIG [gcode_macro DO_PROBE_CALIBRATE] gcode: - SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=60 - SET_HEATER_TEMPERATURE HEATER=extruder TARGET=180 - TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=60 - TEMPERATURE_WAIT SENSOR=extruder MINIMUM=180 - G28 - PROBE_CALIBRATE + SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=60 + SET_HEATER_TEMPERATURE HEATER=extruder TARGET=180 + TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=60 + TEMPERATURE_WAIT SENSOR=extruder MINIMUM=180 + G28 + PROBE_CALIBRATE [gcode_macro DO_CREATE_MESH] gcode: - SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=60 - SET_HEATER_TEMPERATURE HEATER=extruder TARGET=180 - TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=60 - TEMPERATURE_WAIT SENSOR=extruder MINIMUM=180 - G28 - BED_MESH_CALIBRATE \ No newline at end of file + SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=60 + SET_HEATER_TEMPERATURE HEATER=extruder TARGET=180 + TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=60 + TEMPERATURE_WAIT SENSOR=extruder MINIMUM=180 + G28 + BED_MESH_CALIBRATE \ No newline at end of file diff --git a/printer.cfg b/printer.cfg index bd391d2..f7462d9 100644 --- a/printer.cfg +++ b/printer.cfg @@ -15,8 +15,8 @@ # [include ./cfgs/adxl-direct.cfg] [mcu] -# NOTE Obtain definition by "ls -l /dev/serial/by-id/" -serial: /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0 +# NOTE Obtain definition by "ls -l /dev/serial/by-path/" or "ls -l /dev/serial/by-id/" +serial: /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2:1.0-port0 restart_method: command [printer]