diff --git a/Pixels Composer.yyp b/Pixels Composer.yyp index e22c50a1b..b351d2d0b 100644 --- a/Pixels Composer.yyp +++ b/Pixels Composer.yyp @@ -14,7 +14,7 @@ {"id":{"name":"buffer_surface","path":"scripts/buffer_surface/buffer_surface.yy",},"order":3,}, {"id":{"name":"sh_dither","path":"shaders/sh_dither/sh_dither.yy",},"order":33,}, {"id":{"name":"panel_data","path":"scripts/panel_data/panel_data.yy",},"order":0,}, - {"id":{"name":"node_3D_obj","path":"scripts/node_3D_obj/node_3D_obj.yy",},"order":8,}, + {"id":{"name":"node_3d_obj","path":"scripts/node_3d_obj/node_3d_obj.yy",},"order":8,}, {"id":{"name":"o_dialog_menubox","path":"objects/o_dialog_menubox/o_dialog_menubox.yy",},"order":1,}, {"id":{"name":"s_node_blend","path":"sprites/s_node_blend/s_node_blend.yy",},"order":7,}, {"id":{"name":"libdlgmodule","path":"extensions/libdlgmodule/libdlgmodule.yy",},"order":2,}, @@ -117,6 +117,7 @@ {"id":{"name":"textBox","path":"scripts/textBox/textBox.yy",},"order":17,}, {"id":{"name":"node_statistic","path":"scripts/node_statistic/node_statistic.yy",},"order":15,}, {"id":{"name":"sh_draw_surface_part_tiled","path":"shaders/sh_draw_surface_part_tiled/sh_draw_surface_part_tiled.yy",},"order":32,}, + {"id":{"name":"sh_blend_subtract_alpha","path":"shaders/sh_blend_subtract_alpha/sh_blend_subtract_alpha.yy",},"order":14,}, {"id":{"name":"o_dialog_add_node","path":"objects/o_dialog_add_node/o_dialog_add_node.yy",},"order":1,}, {"id":{"name":"s_node_curve","path":"sprites/s_node_curve/s_node_curve.yy",},"order":85,}, {"id":{"name":"sh_blend_normal","path":"shaders/sh_blend_normal/sh_blend_normal.yy",},"order":1,}, @@ -168,6 +169,7 @@ {"id":{"name":"draw_set_text","path":"scripts/draw_set_text/draw_set_text.yy",},"order":1,}, {"id":{"name":"s_node_array","path":"sprites/s_node_array/s_node_array.yy",},"order":108,}, {"id":{"name":"s_node_warp","path":"sprites/s_node_warp/s_node_warp.yy",},"order":23,}, + {"id":{"name":"color_function","path":"scripts/color_function/color_function.yy",},"order":9,}, {"id":{"name":"node_color_data","path":"scripts/node_color_data/node_color_data.yy",},"order":4,}, {"id":{"name":"node_noise_ani","path":"scripts/node_noise_ani/node_noise_ani.yy",},"order":7,}, {"id":{"name":"s_node_transform","path":"sprites/s_node_transform/s_node_transform.yy",},"order":30,}, @@ -175,6 +177,7 @@ {"id":{"name":"node_display_image","path":"scripts/node_display_image/node_display_image.yy",},"order":4,}, {"id":{"name":"node_chromatic_aberration","path":"scripts/node_chromatic_aberration/node_chromatic_aberration.yy",},"order":45,}, {"id":{"name":"node_pin","path":"scripts/node_pin/node_pin.yy",},"order":2,}, + {"id":{"name":"sh_noise","path":"shaders/sh_noise/sh_noise.yy",},"order":16,}, {"id":{"name":"sh_bw","path":"shaders/sh_bw/sh_bw.yy",},"order":1,}, {"id":{"name":"real_comparison","path":"scripts/real_comparison/real_comparison.yy",},"order":1,}, {"id":{"name":"s_node_stripe","path":"sprites/s_node_stripe/s_node_stripe.yy",},"order":36,}, @@ -194,7 +197,10 @@ {"id":{"name":"sh_blend_multiply_alpha","path":"shaders/sh_blend_multiply_alpha/sh_blend_multiply_alpha.yy",},"order":4,}, {"id":{"name":"draw_sprite_ext_override","path":"scripts/draw_sprite_ext_override/draw_sprite_ext_override.yy",},"order":9,}, {"id":{"name":"node_noise_cell","path":"scripts/node_noise_cell/node_noise_cell.yy",},"order":3,}, + {"id":{"name":"node_noise","path":"scripts/node_noise/node_noise.yy",},"order":21,}, + {"id":{"name":"mtl_reader","path":"scripts/mtl_reader/mtl_reader.yy",},"order":6,}, {"id":{"name":"sh_scale2x","path":"shaders/sh_scale2x/sh_scale2x.yy",},"order":32,}, + {"id":{"name":"ds_priority","path":"scripts/ds_priority/ds_priority.yy",},"order":3,}, {"id":{"name":"node_vector","path":"scripts/node_vector/node_vector.yy",},"order":2,}, {"id":{"name":"node_palette","path":"scripts/node_palette/node_palette.yy",},"order":2,}, {"id":{"name":"buttonColor","path":"scripts/buttonColor/buttonColor.yy",},"order":3,}, @@ -238,6 +244,7 @@ {"id":{"name":"node_blur_radial","path":"scripts/node_blur_radial/node_blur_radial.yy",},"order":29,}, {"id":{"name":"node_bloom","path":"scripts/node_bloom/node_bloom.yy",},"order":15,}, {"id":{"name":"sh_bevel","path":"shaders/sh_bevel/sh_bevel.yy",},"order":3,}, + {"id":{"name":"sh_blend_overlay","path":"shaders/sh_blend_overlay/sh_blend_overlay.yy",},"order":15,}, {"id":{"name":"node_sprite_stack","path":"scripts/node_sprite_stack/node_sprite_stack.yy",},"order":4,}, {"id":{"name":"sh_shape","path":"shaders/sh_shape/sh_shape.yy",},"order":3,}, {"id":{"name":"draw_line_width2","path":"scripts/draw_line_width2/draw_line_width2.yy",},"order":2,}, @@ -294,6 +301,7 @@ {"id":{"name":"node_image_animated","path":"scripts/node_image_animated/node_image_animated.yy",},"order":2,}, {"id":{"name":"s_node_solid","path":"sprites/s_node_solid/s_node_solid.yy",},"order":39,}, {"id":{"name":"string_hexadecimal","path":"scripts/string_hexadecimal/string_hexadecimal.yy",},"order":1,}, + {"id":{"name":"sh_vertex_pnt_light","path":"shaders/sh_vertex_pnt_light/sh_vertex_pnt_light.yy",},"order":4,}, {"id":{"name":"surfaceBox","path":"scripts/surfaceBox/surfaceBox.yy",},"order":22,}, {"id":{"name":"s_node_array_length","path":"sprites/s_node_array_length/s_node_array_length.yy",},"order":107,}, {"id":{"name":"string_splice","path":"scripts/string_splice/string_splice.yy",},"order":5,}, @@ -302,6 +310,7 @@ {"id":{"name":"area_function","path":"scripts/area_function/area_function.yy",},"order":2,}, {"id":{"name":"s_node_statistic","path":"sprites/s_node_statistic/s_node_statistic.yy",},"order":3,}, {"id":{"name":"sh_blend_alpha_addition","path":"shaders/sh_blend_alpha_addition/sh_blend_alpha_addition.yy",},"order":13,}, + {"id":{"name":"s_node_noise","path":"sprites/s_node_noise/s_node_noise.yy",},"order":118,}, {"id":{"name":"sh_erode","path":"shaders/sh_erode/sh_erode.yy",},"order":20,}, {"id":{"name":"node_pixel_cloud","path":"scripts/node_pixel_cloud/node_pixel_cloud.yy",},"order":19,}, {"id":{"name":"sh_alpha_grey","path":"shaders/sh_alpha_grey/sh_alpha_grey.yy",},"order":9,}, @@ -375,6 +384,7 @@ {"id":{"name":"s_fx_pixel","path":"sprites/s_fx_pixel/s_fx_pixel.yy",},"order":0,}, {"id":{"name":"gradients_function","path":"scripts/gradients_function/gradients_function.yy",},"order":0,}, {"id":{"name":"s_node_border","path":"sprites/s_node_border/s_node_border.yy",},"order":101,}, + {"id":{"name":"d3_vector","path":"scripts/d3_vector/d3_vector.yy",},"order":1,}, {"id":{"name":"s_node_pin","path":"sprites/s_node_pin/s_node_pin.yy",},"order":16,}, {"id":{"name":"s_node_9patch","path":"sprites/s_node_9patch/s_node_9patch.yy",},"order":112,}, {"id":{"name":"s_node_blur_contrast","path":"sprites/s_node_blur_contrast/s_node_blur_contrast.yy",},"order":102,}, @@ -386,11 +396,13 @@ {"id":{"name":"node_3d_prim_cylinder","path":"scripts/node_3d_prim_cylinder/node_3d_prim_cylinder.yy",},"order":7,}, {"id":{"name":"node_grid","path":"scripts/node_grid/node_grid.yy",},"order":20,}, {"id":{"name":"node_edge_detect","path":"scripts/node_edge_detect/node_edge_detect.yy",},"order":44,}, + {"id":{"name":"node_anim_priority","path":"scripts/node_anim_priority/node_anim_priority.yy",},"order":2,}, {"id":{"name":"s_texture_default","path":"sprites/s_texture_default/s_texture_default.yy",},"order":1,}, {"id":{"name":"FileDropper","path":"extensions/FileDropper/FileDropper.yy",},"order":4,}, {"id":{"name":"directory_object","path":"scripts/directory_object/directory_object.yy",},"order":3,}, {"id":{"name":"node_dilate","path":"scripts/node_dilate/node_dilate.yy",},"order":34,}, {"id":{"name":"sh_stripe","path":"shaders/sh_stripe/sh_stripe.yy",},"order":10,}, + {"id":{"name":"sh_blend_contrast","path":"shaders/sh_blend_contrast/sh_blend_contrast.yy",},"order":16,}, {"id":{"name":"node_3d_prim_cube","path":"scripts/node_3d_prim_cube/node_3d_prim_cube.yy",},"order":5,}, {"id":{"name":"node_3d_transform","path":"scripts/node_3d_transform/node_3d_transform.yy",},"order":2,}, {"id":{"name":"node_display_text","path":"scripts/node_display_text/node_display_text.yy",},"order":3,}, @@ -404,6 +416,7 @@ {"id":{"name":"scrollPane","path":"scripts/scrollPane/scrollPane.yy",},"order":14,}, {"id":{"name":"s_node_normal_light","path":"sprites/s_node_normal_light/s_node_normal_light.yy",},"order":18,}, {"id":{"name":"node_transform_single","path":"scripts/node_transform_single/node_transform_single.yy",},"order":1,}, + {"id":{"name":"s_node_3d_extrude","path":"sprites/s_node_3d_extrude/s_node_3d_extrude.yy",},"order":119,}, {"id":{"name":"buttonGradient","path":"scripts/buttonGradient/buttonGradient.yy",},"order":4,}, {"id":{"name":"s_node_texture_map","path":"sprites/s_node_texture_map/s_node_texture_map.yy",},"order":34,}, {"id":{"name":"s_node_level_selector","path":"sprites/s_node_level_selector/s_node_level_selector.yy",},"order":63,}, @@ -470,6 +483,7 @@ {"id":{"name":"s_node_3d_transform","path":"sprites/s_node_3d_transform/s_node_3d_transform.yy",},"order":113,}, {"id":{"name":"s_node_output","path":"sprites/s_node_output/s_node_output.yy",},"order":56,}, {"id":{"name":"sh_atlas","path":"shaders/sh_atlas/sh_atlas.yy",},"order":31,}, + {"id":{"name":"node_3d_extrude","path":"scripts/node_3d_extrude/node_3d_extrude.yy",},"order":9,}, {"id":{"name":"node_scale","path":"scripts/node_scale/node_scale.yy",},"order":9,}, {"id":{"name":"sh_displace","path":"shaders/sh_displace/sh_displace.yy",},"order":7,}, {"id":{"name":"node_group","path":"scripts/node_group/node_group.yy",},"order":0,}, @@ -529,7 +543,12 @@ "Folders": [ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"animation_curve","folderPath":"folders/animation_curve.yy","order":14,}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"dialog","folderPath":"folders/dialog.yy","order":5,}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"animation","folderPath":"folders/dialog/animation.yy","order":31,}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"color selector","folderPath":"folders/dialog/color selector.yy","order":23,}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"graph","folderPath":"folders/dialog/graph.yy","order":30,}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"inspector","folderPath":"folders/dialog/inspector.yy","order":33,}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"preview","folderPath":"folders/dialog/preview.yy","order":32,}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"widget","folderPath":"folders/dialog/widget.yy","order":34,}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Extensions","folderPath":"folders/Extensions.yy","order":11,}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"font","folderPath":"folders/font.yy","order":8,}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"functions","folderPath":"folders/functions.yy","order":7,}, @@ -586,11 +605,6 @@ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"sprites","folderPath":"folders/sprites.yy","order":10,}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"texture","folderPath":"folders/sprites/texture.yy","order":2,}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"widgets","folderPath":"folders/widgets.yy","order":6,}, - {"resourceType":"GMFolder","resourceVersion":"1.0","name":"graph","folderPath":"folders/dialog/graph.yy","order":30,}, - {"resourceType":"GMFolder","resourceVersion":"1.0","name":"animation","folderPath":"folders/dialog/animation.yy","order":31,}, - {"resourceType":"GMFolder","resourceVersion":"1.0","name":"preview","folderPath":"folders/dialog/preview.yy","order":32,}, - {"resourceType":"GMFolder","resourceVersion":"1.0","name":"inspector","folderPath":"folders/dialog/inspector.yy","order":33,}, - {"resourceType":"GMFolder","resourceVersion":"1.0","name":"widget","folderPath":"folders/dialog/widget.yy","order":34,}, ], "AudioGroups": [ {"resourceType":"GMAudioGroup","resourceVersion":"1.3","name":"audiogroup_default","targets":-1,}, @@ -686,7 +700,6 @@ {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"NotoSans-Black.ttf","CopyToMask":-1,"filePath":"datafiles/data/themes/default/fonts",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"NotoSans-Light.ttf","CopyToMask":-1,"filePath":"datafiles/data/themes/default/fonts",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"graphics.json","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics",}, - {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"graphics.ai","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/tool",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_canvas_tools_bucket.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/tool",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_canvas_tools_ellip.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/tool",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_canvas_tools_ellip_fill.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/tool",}, @@ -846,12 +859,16 @@ {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"graphic.ai","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/UI",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_dialog_bg.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/UI",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_refresh_24.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, - {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_junc_visible_strip2.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"Collections.zip","CopyToMask":-1,"filePath":"datafiles/data",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_icon_tile_view_strip4.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_preset.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, - {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"graphics x2.ai","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_animation_stretch.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_visible.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_junc_visible_strip2.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"graphics x2.ai","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"graphics.ai","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/tool",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_path_tools_circle.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/tool",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_path_tools_rectangle.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/tool",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"default.zip","CopyToMask":-1,"filePath":"datafiles/data/themes",}, ], "MetaData": { diff --git a/datafiles/data/themes/default.zip b/datafiles/data/themes/default.zip index 8dc561807..4b57a65da 100644 Binary files a/datafiles/data/themes/default.zip and b/datafiles/data/themes/default.zip differ diff --git a/datafiles/data/themes/default/colors.json b/datafiles/data/themes/default/colors.json index 07892d150..c3b036404 100644 --- a/datafiles/data/themes/default/colors.json +++ b/datafiles/data/themes/default/colors.json @@ -26,6 +26,7 @@ "_main_text_title": "blue_ltgrey", "_main_text_sub": "blue_grey", "_main_icon": "blue_grey", + "_main_icon_light": "blue_white", "_main_icon_dark": "blue_mdblack", "_main_value_positive": "lime", "_main_value_negative": "red", @@ -42,6 +43,7 @@ "dialog_preference_prop_bg": "blue_white", "dialog_add_node_collection": ["white", "orange", 0.5], "dialog_palette_divider": "blue_grey", + "dialog_notification_bg_hover": "blue_ltgrey", "dialog_notification_bg": "blue_grey", "dialog_notification_icon_bg": "blue_white", "dialog_menubox_highlight": "blue_white", diff --git a/datafiles/data/themes/default/graphics/graphics.json b/datafiles/data/themes/default/graphics/graphics.json index 201aa948c..97fa04b9d 100644 --- a/datafiles/data/themes/default/graphics/graphics.json +++ b/datafiles/data/themes/default/graphics/graphics.json @@ -235,6 +235,13 @@ "yorigin": 24, "slice": null }, + "visible": { + "path": "./icon/s_visible.png", + "subimages": 2, + "xorigin": 24, + "yorigin": 24, + "slice": null + }, "junc_visible": { "path": "./icon/s_junc_visible_strip2.png", "subimages": 2, @@ -1030,6 +1037,20 @@ "yorigin": 24, "slice": null }, + "path_tools_circle": { + "path": "./tool/s_path_tools_circle.png", + "subimages": 1, + "xorigin": 24, + "yorigin": 24, + "slice": null + }, + "path_tools_rectangle": { + "path": "./tool/s_path_tools_rectangle.png", + "subimages": 1, + "xorigin": 24, + "yorigin": 24, + "slice": null + }, "splice_draw": { "path": "./tool/s_splice_draw.png", "subimages": 1, diff --git a/datafiles/data/themes/default/graphics/icon/graphics x2.ai b/datafiles/data/themes/default/graphics/icon/graphics x2.ai index 36ceb711d..e5e7a6227 100644 --- a/datafiles/data/themes/default/graphics/icon/graphics x2.ai +++ b/datafiles/data/themes/default/graphics/icon/graphics x2.ai @@ -1,5 +1,5 @@ %PDF-1.6 % -1 0 obj <>/OCGs[33 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream +1 0 obj <>/OCGs[33 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream @@ -23,22 +23,22 @@ Adobe Illustrator 27.0 (Windows) 2022-11-26T09:16:08+07:00 - 2022-12-10T09:10:16+07:00 - 2022-12-10T09:10:16+07:00 + 2022-12-10T17:41:26+07:00 + 2022-12-10T17:41:26+07:00 256 72 JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgASAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYqhr1Zz6ZjUyI CfUjVuJII2326ZKKqlosy26CY1kA+LevfbfvtgPNUn1C01XUdV+rkm306CjGQAgvVQdiGG9SQNqD r4ZhZYTyTrlEOywZMWLFxfVkP2fj7eXenuZjrXYq7FXYq7FXYq7FXYq7FXYq7FXYqg7y4Mc3EziB eHJSQDyNTtvkohUTCzNCjNszKCw9yMBVBrdOZwvrgsZWQ29BUKGIB8egrkq2VHmtDTr2yCpLpMGq JqM7XEiGPcSUjZeRO60Jkf8AVg9fUxPuH7S3TOOtoyB85A/70J1haXYq7FXYqsmiWaGSJiwWRSjF SVYBhTZhuD7jFVDS9NttMsIbC15/V4AVjEjtIwBJNOTkk0rthJtVmm6LpWmG5NhbJbm8lM9zwr8U jdTv0+Q2xJtVOFb3/EF0Wkc2YtofTiIIQSF5ORBpQmiiu+BXktxd+bv+VkBhc3H+8zqLUB+Hr+uv E9OH2NuNentmiOSe/wDqnH+B7nrI4cVDl4Xh/b333/a9g1G+a0VCI+fM060pT6D1zfxjbya2fUJY pFQW5bmAU+ICpPYfLCIqjATxBI4mlSPDIK2CCKjcYq6orSu47Yq0zKoJYgAdSdhirgymtCDTY0xV vFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq04JUgHiSCA3gfHFUp03S763vJJZZaoWJNCTzBRRvX 5YBzl5n9AbckgYxHcP0lN8LU7FXYq7FXYq7FXYqklt5hmm8wzaSbbjFFzpdgsUYqqNwHwgcxz+IV 2w0ryqXz550+oXPnBdUULbzvEvlcQQEtClyIeXMt6/D4qM9OXPtxyD3seydLxjS8HOIPi8UufDfd w35cuHze4ZJ4JB3OntPMJfXZONOAAB408DkhKlb1AUgj5ktGHX1j4oOtadsY81UbZrYXaCyasbBj Mq1Kjb4djsN8Jut0LhYRCIFSVuQD+/FQS3i1Oor448SUZwEkPCUBuS0cHp03yKqNjZC0WRFNUZuS +I26HDKVqiH+w3yORVZA6ejH8Q+yO/thKrbsSGA+n9vklKVP7Q8MRzVWwK7FXYq7FVFJZDcNEwAA jV9vFiwIr9GGtlVsCuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KpdFr1jNq8mlQ1kuIlLSsjRsq 068gG5jc0+z1w0rzSa+8um8l84y+U7VVjuSFvJDIJZGDgeqqemYGkrvXlWoO+S4A7AdraoYvCGSX h8qvp3d9eXJ6Jda8ljbR3l7JDFbTEhFZuL+O1dmooJORnKMeZpxcGnyZTUImRTaORJI1kjYOjgMj KaggioIIwNRBBo812KHYq7FXYqtkkjjXlIwVelT74gKh4prs3jRuoEfEsKA7CtFq3id9skQKVE8E /lH3ZFW8VdirsVdirsVU5baCYgyIGI2BwgkKvRERAiCijoMCt4q7FXYq7FXYq7FXYq7FXYq7FUHN qHp3yW3pk86Vavj7ZIR2tUZkVdirsVWiOMMWCgMerAbnFWO2n5d+UrdUBsvXeN/U5zO71blyqVqE P/A5LjKqmu+TrXVo4V+tTW72/qiFkIIVZ4zHIoBHdW8cpzY/Ero7DQdoS0xNASEq2P8ARNhONPsY LCwt7GCvo2saQx8jVuKKFFT47ZKMeEABxM+Y5ZynLnIk/NEZJqdirsVdiqlc24njClihUhlZaVBH zwg0q6KNYoljWpCigJNSfpxJVRg1CKZ1VFajVAY0pUCpHWuExpUSxopPWgrQZFVkUhcElGSnZqfw JwkKvwKpyzLGVWhZ2rxRepp1O9MICtJcBnCMjxs1ePIChp8icaVVwK7FXYq7FXYq7FXYq7FXYq7F XYq7FXUFa9/HFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXEVFPHFUNBYRQyK6sxZRx3putKAbAdMkZ WqJYVUjxFNtjkVWRRemCOTNXuxrhJVfgVD3BZLiGbizIqurcQWILcabDf9nJDkqyRmuWURK6FQx5 urJQlSopWnc9seSu0i2ubXSbK2upPVuoIIo55aluUiIFZuTbmpHU4CqC8v6XrNhJftqWpG/W4nMl spWnpJv8P9g2GJIVOMCuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2 KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV//Z + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgASAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYqhr1Zz6ZjUyI CfUjVuJII2326ZKKqlosy26CY1kA+LevfbfvtgPNUn1C01XUdV+rkm306CjGQAgvVQdiGG9SQNqD r4ZhZYTyTrlEOywZMWLFxfVkP2fj7eXenuZjrXYq7FXYq7FXYq7FXYq7FXYq7FXYqg7y4Mc3EziB eHJSQDyNTtvkohUTCzNCjNszKCw9yMBVBrdOZwvrgsZWQ29BUKGIB8egrkq2VHmtDTr2yCpLpMGq JqM7XEiGPcSUjZeRO60Jkf8AVg9fUxPuH7S3TOOtoyB85A/70J1haXYq7FXYqsmiWaGSJiwWRSjF SVYBhTZhuD7jFVDS9NttMsIbC15/V4AVjEjtIwBJNOTkk0rthJtVmm6LpWmG5NhbJbm8lM9zwr8U jdTv0+Q2xJtVOFb3/EF0Wkc2YtofTiIIQSF5ORBpQmiiu+BXktxd+bv+VkBhc3H+8zqLUB+Hr+uv E9OH2NuNentmiOSe/wDqnH+B7nrI4cVDl4Xh/b333/a9g1G+a0VCI+fM060pT6D1zfxjbya2fUJY pFQW5bmAU+ICpPYfLCIqjATxBI4mlSPDIK2CCKjcYq6orSu47Yq0zKoJYgAdSdhirgymtCDTY0xV vFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq04JUgHiSCA3gfHFUp03S763vJJZZaoWJNCTzBRRvX 5YBzl5n9AbckgYxHcP0lN8LU7FXYq7FXYq7FXYqklt5hmm8wzaSbbjFFzpdgsUYqqNwHwgcxz+IV 2w0ryqXz550+oXPnBdUULbzvEvlcQQEtClyIeXMt6/D4qM9OXPtxyD3seydLxjS8HOIPi8UufDfd w35cuHze4ZJ4JB3OntPMJfXZONOAAB408DkhKlb1AUgj5ktGHX1j4oOtadsY81UbZrYXaCyasbBj Mq1Kjb4djsN8Jut0Kv1GIRAo3C5AP74GjFj/ADeO/jjxJRTIskfCQcgwowOQVQsbIWiyIpqjNyXx G3Q5KUrVEP8AYb5HIqsgdPRj+IfZHf2wlVt2JDAfT+3ySlKn9oeGI5qrYFdirsVdiqikshuGiYAA Rq+3ixYEV+jDWyq2BXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUui16xm1eTSoayXESlpWRo2V adeQDcxuafZ64aV5pNfeXTeS+cZfKdqqx3JC3khkEsjBwPVVPTMDSV3ryrUHfJcAdgO1tUMXhDJL w+VX07u+vLk9EuteSxto7y9khitpiQis3F/HauzUUEnIzlGPM04uDT5MpqETIptHIkkayRsHRwGR lNQQRUEEYGogg0ea7FDsVdirsVWySRxrykYKvSp98QFQ8U12bxo3UCPiWFAdhWi1bxO+2SIFKieC fyj7sireKuxV2KuxV2KqcttBMQZEDEbA4QSFXoiIgRBRR0GBW8VdirsVdirsVdirsVdirsVdiqDm 1D075Lb0yedKtXx9skI7WqMyKuxV2KrRHGGLBQGPVgNzirHbT8u/KVuqA2XrvG/qc5nd6ty5VK1C H/gclxlVTXfJ1rq0cK/Wprd7f1RCyEEKs8ZjkUAjureOU5sfiV0dhoO0JaYmgJCVbH+ibCcafYwW Fhb2MFfRtY0hj5GrcUUKKnx2yUY8IADiZ8xyzlOXORJ+aIyTU7FXYq7FVK5txPGFLFCpDKy0qCPn hBpV0UaxRLGtSFFASak/TiSqjBqEUzqqK1GqAxpSoFSOtcJjSohm4qWoTQVoOpyKtRycwSUZCDSj dfwrhIVdgVTlmWMqtCztXii9TTqd6YQFaS4DOEZHjZq8eQFDT5E40qrgV2KuxV2KuxV2KuxV2Kux V2KuxV2KuoK17+OKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuIqKeOKoaCwihkV1ZiyjjvTdaUA2A6 ZIytUQy8lK1IrtUbHIq1HHwBHJmrvVjU4SVXYFQ9wWS4hm4syKrq3EFiC3Gmw3/ZyQ5KskZrllES uhUMebqyUJUqKVp3PbHkrtItrm10mytrqT1bqCCKOeWpblIiBWbk25qR1OAqgvL+l6zYSX7alqRv 1uJzJbKVp6Sb/D/YNhiSFTjArsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV dirsVUrmWSNFMYDOWoEOxbYkge9BhAVQhuJXliZZBJFKWBXhxKcRXfc7g7YSFRmRV2KuxV2KuxV2 KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KqVxA0hRlfg8ZJU0 qNwR0+nCCq2K1Ecnq8yXYUk6AMexIHcYkqr4FdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdir/AP/Z default uuid:65E6390686CF11DBA6E2D887CEACB407 xmp.did:7647d1b0-ea83-ca49-b85e-bbc9513ca4bb - uuid:29eccc16-12ad-4ccc-8fe3-1f545afc1b9f + uuid:b877a85b-0c5c-4b1f-80bc-487e2cc46c14 uuid:673f9e21-4d80-48ad-ba53-812ef9241a78 xmp.did:efa7ff44-b17d-d449-8cbc-4cf525bcc8d1 @@ -70,8 +70,8 @@ True False - 40.000000 - 12.000000 + 24.000000 + 24.000000 Pixels @@ -295,17 +295,17 @@ -endstream endobj 3 0 obj <> endobj 35 0 obj <> endobj 37 0 obj <> endobj 5 0 obj <>>>/Thumb 870 0 R/TrimBox[0.0 0.0 40.0 12.0]/Type/Page/PieceInfo<>>> endobj 867 0 obj <>stream -H1@ Dާ0z#*HHQ_4D[4+JVʧm>OV2V]lQjo EP8?ݮˢ> endobj 870 0 obj <>stream -8;Xp,*=)WH$ig^-">g~> -endstream endobj 871 0 obj <> endobj 873 0 obj <> endobj 874 0 obj <>stream +endstream endobj 3 0 obj <> endobj 35 0 obj <> endobj 37 0 obj <> endobj 5 0 obj <>>>/Thumb 927 0 R/TrimBox[0.0 0.0 24.0 24.0]/Type/Page/PieceInfo<>>> endobj 924 0 obj <>stream +H10 ݧjqvR  Ƃ–* N3~[t-Z ZYŁzloZSP7E6H(6^\SftHfsF33Ü Y +endstream endobj 925 0 obj <> endobj 927 0 obj <>stream +8;Xp,*=;cJ$ihU'#ES~> +endstream endobj 928 0 obj <> endobj 930 0 obj <> endobj 931 0 obj <>stream %!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 24.0 %%AI8_CreatorVersion: 27.0.1 %%For: (Makham) () %%Title: (graphics x2.ai) -%%CreationDate: 12/10/2022 9:10 AM +%%CreationDate: 12/10/2022 5:41 PM %%Canvassize: 16383 %%BoundingBox: -23 -168 574 0 %%HiResBoundingBox: -22.5 -168 574 0 @@ -334,9 +334,9 @@ endstream endobj 871 0 obj <>stream -%AI24_ZStandard_Data(/XNƤ ,m -m/a!DfI)4 Uo:h 1zK jGڑ Ȏ$=4~'I4jṔUWKBE,:G>j6Q/9$!BF{Gp:-IRnhT=K{FlhP7Iwv+\fFؕ&ET(}M`ZG&kS53*҈#t3X%cᙐutIJB9b5i|s&ՕgίNdh~M:EK*􇣃 6ڰljZʃJGI%c ⠶F~Q85SG#3Yz83ÎkNV͡LG5c]E^tb'o$W7ˬCdyuJ_hYt=ʏW6HTĦAr&IMeFV鬎~GNl&'2"A4tUuiP6VFuiTSƭCug+MY^g^MTiggrӸ4i=}Iy:I9BĊkXt$e\D:YU4rH3"Tn#%#땻qiE:QdҰ7~2Ж(F8%yJ?H[00.1eM[D7gTyI94,F<&`hD 2 A (Tp!B₅L@ &`h`H1p p`"$Dĸ/)ťq骬S}ČF&ʗdY=aLL45a! -AT'twiM%ˑUU'f8FU @e'Ѐ@7 4+;WF zn\YCÂ!HЂ24@<04ȇ"&8s}Vp`hx>8IԹ 614,ehâ dIiLs ?p348Т P,O8(Cdh`h2c>᠘!%B1 %chb13Rj^]Dv:a<`NKePSviL24~C@-kcE ĂaРH-l`h-:BaUn '.Q RC%"K:%ȁUեân -RpP'%&pŽ -Q BŃvT_^8g!P,:a.!1 - ?%j --lQ BX( -"8*8)LQ*ÃÃpP@P dh\04M,0 I(Euųe}#oi+?nh+ e8pnյ噻},WeF_39M͍'Qb`ЇyX,""^$C  E."BS0HѮѶR N3HTCB伯C|MTD& qA\|X, }{?8<,  -QpX@@@04Xa -#CaH048$!89@𰐡 /]S$!- -E5CCC%j Ѐ}Tt=>$qx>;A!Ype&CC|V I@<, VE*L*) cbV!8K,aVr(@:*"kpdh@34904t C!x>%I@ +}~TC&2 \0GD!aq^Xom&9\^ޝ=!ahgUSċ-(n̨`f - à &`117<:ESǒ.z'dFҬA+ &H8$E!:C99 aU8H BX(YtAZ \04aX, <H<8<(Q(8C DB"X@<@@@14=%>tQbh˪8Q=048,!/wgPG7a09Xlgfe1zE)ʡ^YX+*)z9Pd:bh0** AtQEuhoZUj;Q$t Р  td00 -*@0`FkA `&DH`B4@„ -Ѐ  -&DL \ - <0*lA$t0a!$t D`B -P8Ð0a.DaB.P P0Hh".@,T AB  Ha,D&D ,T@ l P0*Ȁ(0(\@``,T04TlA  !&DA>! -.P`!*<6B dPaB  !\A *(00 p8@(Dpk^?} @<`˂ (H@DB&@D`  (<.@`!… )uFȶ,(Ӓd9fNGҳ`qA @ -60BB\ -$d HtP B*pA"d`\!L -x "L1XЀF.HP &t  \xp(Tx@$ ,c``d &lA --FZ0\4. hA q/`Q U2b#]S3NBP00op~CA eƌ<*Ss6'3|YyB (@Pqodm4 $Lx`g*.kZc%, ON3ϐ. $L`yޠd3e2 aUwʴu.H -L^}WbAhnGcM0m*K>fLzQ\42D=sQM=O;j0 S;{s B8@9hƖ([;]&p@PA "H@̸ (Hp!"dA0%u\ +endstream endobj 932 0 obj <>stream +%AI24_ZStandard_Data(/X\ ,m +m/a!DfI+4 Uo:r BciěAy)brwV{'o$L#;f^hh293݉$4 +9вjIh>ځT29r&f7Cb6tvDP9:=Fp:-Ixh7jK{TGRzm<3b1v"\Fyl edmfFeQQi«vX%cwCutIJ.r,)kLݫt-ok^lu:Sodh{ՙ$u 5N*GyуM#ygXwh<T2N%K* jkt/%d=gf4}dɽ00*``x,$`DP04T 7Pِh~4e4CǟZs.ߧ[FJH=%٢򸻉#Z,sDHŪ'lUzMl^H4@Pj)yԁA<)a]NeQ,4,+M09yrmr~NZF2an>uI"OF3U/*pdvTAc^%d4΃b7N6hErVJ6\8fEgwݝ'&c4l'u/chdur1tTfwWE^d'=E㲮Ԃqe!t.ehg_y?krG& GU7&aY%U^ilIe rUL)u4uAM+MhTSƭCV~6uD淞Q]n[Kn%% o'K9"Ve~#':aWD:YU.i\&m XҋdRI8G:ҕ8#F+pZN%4wA;[G7'{=I┤m}5 ' ?2c4,Fx0CCL0 <0Ad@A" 8xOajUU'f8FU @eO8( '@b40 +ڨڐnF\ּ:湡gᢔt,3ЊZvs\<(ЇŃb`hH,34\Q P*!H$2Kij>14g#dh$Q3 l24$514, QpEȒ23 +C@2* X04<\>X(  d [ LY*P2S, bSV{bCg9:) ijʌpf@C=CY!@-kcE ĂaРH(prA +C=؃a +Aa8HC$   1CC-NYCeh J\Y4*?"q6ՙ04gP&!0KXڙͬ6Q(E9+ eUE5A JPL FE!.MbjN!a0|rpn<C4Ѐà1 4@B(\A, h-D &aB  D@$L H0!0aB.XH\ +"lPTpAB"`@AB& be] ONrWOQH."E ɒ%C-Y -+w lQtti؞֠P$\tBU)CGTO*WOdW Sj@'II:DiPF%o,{3^f[&io63D/?dP($MT8ST5rP] EzW%urɕNovw٣'vi磈i^~{{w2B1f%ޱAY׼'"c"_RԣjlҾ$,HD":PDlҚR*KSe!M0FÈĚLQ-SXbw>w~TPUjFw<(sxҏJF:OǬT#=Ϩb$LCNr?[[VXfBmTWIeV4dt+QuҪs1*C/˪i+Uu8srgoMr('}*_`Fi@ɣGCkvNW9lK6t]o7$tM:#GVyՐܩQ͝'-:L++r+zffєx!ɳ{'uwFhf7kDѝF0Ky'g+Fص -Hh85{,3YM(FfsEf|u:o\O"z%Kո+WZTEK|Giut Ď~XhrW$5Uk)̤&!NF ƙVݦUdTj;H` .,4Jt3R&b%>oM0Jٙl(WrfrҎؒ4oYS?_}Jpn$,۳J!Q3,e1{mJJ3ҥ+%KZ[̵{e~?"4Վ'TΑ!gvjt8vgYŹ(76V刌d&ϧ$FE2_oR՞&-SaQ~ddM%%)/SVQݗ/s;t̲um:IHl~MfwCX}8Vcw.VxGcD}G}Jݲ̼ohFGS22//"6%;"DyvݯjXd{=YW׳+mčk'XVuwƼF¶MYE4eHtF4Ieir6wՕpjsD>իD:\7wuf?ᡩ%Κ+aQVNY;#iyV:$}, |TΨ3xEp#[[֯ٱjV:Uܥ6uNXxRaޑTirON >|<,cٜݽfi' R/ ZR9f<+ݍan"6iT){o弖kڋk zx9$9%+''{_%X4dYզD h4]QNR}N72R_ޤ1u,g,7=;'忼(8u_F} |VN=~#UM#S>Ul5^p ("O#C1,,B|G4IFW|w!IBmgW8dF[ HT7qpdU߰Vb}̖PE `=+v&c[N}8dz㻧[jӗϦKtbyA"I,eRgNZfFE+gwޞd&4*ݮ&z{ %mJf6D?ɞ#}.-Ft"G j*-*'zZ\lIJd7uw*SvgL gdSE>R+יBVC) Vkծ3߉,5gPM?V[X.{:cºat5w76`+E;X{YQ]݌,sH߫ikn$bku[vr3/"ؕ>MzNRJ*ͭ"zwz">ut=)7H3㑡8=KSz49pi6BIՉ}u:%4:ɼUJtԤᡊ]+mI270}E:&,=_&93`#Ӛ$45ORүz;Ak;T6^G:{9G=xhcX:["jHuvV`{$yAd*r)mNX$Kޱ'd.:"|f|Zʧ_KPt'~jM3u\]̊6!+ݴx2?HjM̻Ĭ?UJyxb}~>tk,v>BߩSR8%mmraG+h%gt3+d$$AiI)kҖT擻5kٽ&^Oҡq3'w^ϿP/2hBCH9blUw$<,u:))WkmnbJ)-@;-\ɻAbKÑhN}'V굉w -FMr hv+.T9'́x3ݠ?ݐenͦb~;St?Ѳ߇dz}y< mҾB'VYݎI'3tf%8̼߳|͗0]R^'eg{'Fݞ$;pw|H*_'7(nfR#uvԩBAbb682ؑg&ԠL æ03:J̓gN[se&IBtߜ2}&i7ZFSCv,;ҡK76g&/QLsD:j- %M♕es.6EdDL+J$l.eTbvrOc"!]օYi ZZz[WXErRU~֕5gAF6 e d$[F_== -ˬ蚣Va}ldZhW·d"هeL.&/˷HWI(3+ߙ*=Z7Ӆɺ(S:+{VX<3^= I^i&%ʬZjg<<^/We_EcE.f^ M4)FvH6'3yNv:YN - n"#jPly.wч$b4+0>FM O.L}|m ڦiE6}:"gM^|YӻV:7#tC<,+?ҞG4U6X5LIMu5 s&CG&49=\q|0Os\daaQK]츾ɟD:4)>,֎U|$UP_hCL[/s\fpEbуF<^YSs<RJQ:?IG?Vň~LewhK[%7D`6eWBI k[2sCvL]%Q'2!FtI,{H7dr-2:|{/+qҷ2+a:"=;3g:І322$ը)m -}IW+j,4DޡOh&I!zNNVr VdQaOxvgrVt3QG녔sHtXϣ&^ݎ\ˊHLީ,IZ v&m+'6UY*㵱dGf#h2N'@2*s ̵ vzu-~'LNc]Lpu&Eg.MvʧlL){lRudѤy59+).D$A(tk;`J"|VE9$"KR gJUmTA##"3zsU(9. a/dIcC' &Imط[ﷳdM2Z/mԴI4Z$~IRKTOB~m,Qx&ٰKxhFkcdMuƿS83(V^jQOKG#̑yKr﹋W>͝s|\'oUsf¾=gٞǑ-of/{slYPyؔF^ϑIm}xMwҼq[6թac;zީ~B7r=L[]f -2y!c)//ywy|nds^݈Uհ`hR~AMq$ zR5h3T5yKة>3*FZ84fhh ݋ըzR#Gjj2kr*-#Y QήJWyfsu,{itRD>lyf4) SN=oP Gm1ϲkLږmv>b~ܥL;"m.i-W+đ 7$ͪUӗqϤ8c<Tq௮zJݽ*. "Ie)Zȣer|FND'ڠy]HUڰBlV]ɻVN!繌kh(Y£ԎV)l6GCcROtH$2ľǑsw\s8졣*.W -sf -*ܣ|ާhm&VepL>Keمә;Qfsܙ֔$۔//2Kʕ$gr=ڙLy49#u}υ&8U8ױn,6[Eoʒ̐Uh,{-M?IZZ3|gPIŪ9ِdsGIwTwtY%gLtn Z%Ǧ4U=K3Thi x-оYkДH͎R4 -Vx>\O2Qf&EWeZ&=O?[i)bJwkIG1M]XBNT?yRKB$.?f=1N>Y<˷' M] M{8B3Xߚ'=W\XϘ%fmF2"L?gs{GwWg> -I5VuǞ'ˤrP:?**O$#ksEgQġr~ִ,Ԋ8Z!+&0q*x3[ȕ0|#1,v8Ftiu:Ohic?)GS08 a -HXDHm/rI*H0p@!Bx Ё `BŃ#A<Ѐ8 .PPQ` 6@(wB:+Y>q'H^LdA1ybBYd朤 dŊE_K2Y"Nﷷ_fOg>al26VAt=,~iH\_铘c;֧-v5^?g-|Dɲu<`k~T+ldjوxj<,Picsż*ƮJ >Ί|8v[%jRDuʼޥVQPzNtTtԣ`zEGɦYS̩cS2NLuoWᴷY' gZhڪX4_,$8fcUd$3Z|D !9hZùl4E+]=ma;E7۱ 2i)ݟSm<ȷogg mw7;SͺV -e ^,XTBh˟!}xi!!FI dB73rk55D,NsԺnZyue=6YXw8ONݝh]&̰c -̈́9-D£Jb=kҮ8^i{)¬)l<-|AntJvdgWj5dKVu5oWFRKWUee - -Ud!PȑrtB".HYYiQ% (1JLH%DI2d؈F1ɘLQQ鿓|Aȭ N].e2c2%c6r-KL7tr_.qkJ9%UNwO9TY[%Y7!rv؉]Yz$sw;#&iMK;+getd;݈Hzk, Gc ͊ IrR(=?쥿(rhrħɱuFvURhBﮎL~uJݥܥYaŇGjIIUʤ s!_"J!g$',x:;}K%T!y:N=g, a6+αdW۠cx<»6oƗ9xj13{ٔ<;]+Sf$!ft_!Йx.BI2[Qthtk_k2ڟY$kFGҲ"fh$FB*mTNqln*6S,xy"iC;zC*ݙgJ(^ztC޺7dQJUvHc5ڢՙ(-NagV=nInoEL n_4zѯWO#TL&Min"zҐrP -T갍]Z֜Rc])*1U Ei٪|J|DMنvSλ*ꔍ$O-GmAUM^oEc֕E9˙k}tKս)d|PQ5z$C5,Aļ5h$yb4L8e7)d7ysIvd*I;eQ&ƕaMSxSfwa^rf3,Gr2Be,#Z4;5?*4gXdn\̨ylU峓v5 O96V|#Wf[MXH8ב{G>l)MT6ys|1 J)UQMi:kʺ)AW1h$2L<]jcsT=q.JΈ:»Ϋf}Gdgg\E&+ݥtj>c2L*3aelYEK<*ATR&[cUKOe^é#WDYTYM$3úN4XIyeAL2 =Pn4DzIsXG_M;:򓔿Uݸp8TRF)˾)g,鵣7;Uw"1˱cyMWQV4fd>,SGTt)kσŻA#ɇ<./'(:D⇪TOA_XZ?Ͳ --g?D:ZyQT%.u乼mE{O,8?[ -LOhX)wl Jw'|oU桻aNZN2kh9de;"L+5D) -.@PAtpp`d@A  ~PЁ匧;GH~yhI=nLHxUR7"rٹRt.;͍QVȅJqBvmFQ -}uGI|LnJM ifB -s`@<ɌzŜ@F@ʼnc`Lar8< *SpO1Xd%Ķc\߈S#7b2C_T$9\>Zbž(Y-*66_:+NUc]x\ _LPxVWq鱈29#-c#f C\WNmshƺ {8F4Z'gZ7:yLJn~FQ#`Y{ -qoԘH k1# E8f *q| ״Y7oٺl LubT7Ɂ0j MYr =G,x ~͸InM EcH1X, BX&4f.<>%Ld#F,v4 -);7l1J&ɏ1b͖j*S5Gݑǧzc<y2S!i[zX|yɡ>G1zH.z ->=^m<e+iy7X8q },1ۥ1 -&NGzN ۱8B+dq0{ *hqysmSyl&%TC JI<1%" w\̄EcWT<`J0<^ߠLҐ%iTE;TT@es9.LMB{\j/닞r lTJXm9>`w񸳦.U (U\M$BNI)t8'*ژ_c&ᖾS@);R!]1ːyP  A!gf)jT?I 9_|C\;Ӑ=YH44#!S1>xNC6Yf0 Yq!甑Mҙ\/6BH6k7q#c0#rߴ[bD~@|ceDXǼBWU"`%nWA"#LRJ#fFX ˏ3 7Xҿ_gG 2^Q߇Fn -r5t&4 FF%:K  %mxߎ18m,%ێ4mLM֠ݪLуdAZʷ=,x{{q)"d)S z%-y)0uƗdܑ'L"fO#eGA@s<2j4KLyv<H - "k@=LüLy$X:9SISFXPMO*gxV~!LV,ǭ1ƲY[*bc. &qF^n3V! 0xb]rr lHWX1i2rI|ޭ;Sf^]t=j,ny/fͬmEgY圡Cҙ`ƻnx7Dgb+x瞻[0Ap&xO>>,\CR?g-/Y"D;hRW>PNaЏBH }HlCeD%"Z)9h٬WtUDъ+%3ĭGKg!-:H+[3s8+SapJ`*J~.,.L#n25~CHRw7{o`g4փ -%]1 >9*4ʹ@^@o3\f@ plLe,iu5ņ ' - fF$5 LtL>R_sCYj#ur6henH/IWba>؝B A{1Y /WV},~_ KqW`b.Y%@zxB(Qw`5\(...WwtT#Qc;njGI`ĦQA#kD 䛍v1#oP#*p3F5j!4}eɞKRT@c/gR Q_BOQ{_u_Xeԏ=gA ]1HiADx?ł5 -ݨ3TPK%GZ'^?dhn.m4 {zsymhIQRB:DhheTQ7RZȑ&Q"&iO$nШ1X^09Qh\FMb` -"0D5eo>5SվBcgե+r-¢KNPkǖ)4iaݨH\nKWhőFW %[G^b?Xnf)^ʾtz=d!j<جT{ǰŋ'"AΊ-X{$sf/B=wI ƾ"l%ۤnxoČl -+$$ztt*業m(iʨ]ao1}bK#C6eMlfk{4ԺInZ -W*xۍ$m"W²մpoI&<-ܹ@n ш0j–tX{ =Mwc|7W&8T@o[w[uC`v}ڢd7! (|cr[oVUu{i\ y8H - - bltB^0) g16͞=1 V`p6BR)!~g[ atʇM EϘb;zOU" )5Gά7Y+K84/< -Q:Vxn.U:8M/JF{0/8pڽZs}[s +?zO24 -yA8& \L(ܑ` - &xҗ{ -YE/aW-JrZ_H WZs򸁻A:hcGd#%8|t1`IJ"pID{ej4s;)i*)*nTG )*A*g|;Iύ )iLߋU o-0- -@*j! !z!5rJuߚ`\;bVe% N+)7 ܠ V{e1-xϑоEu:ԩAƿCЮo+ 5W{5쎄}[=cwl OXf~ϦIe4v"Jcݟ[.MW~`cED#߀pI7o.ؙXK K;.#R눾}E3ΑڣJ:#Gqo̶x3[ڿG{@GN=RWebB\)qR NbϱȬ4@.Rkcum\wѮ琽 b\R&vCbo^um@tɮ2>\onlvڳ^njoPxwȔw3A(vf3 ԊkoyºQ%߽{޹ih|7qZ Sr-DGJ~Un.z]4ӫ}_Df /AҗR^!zi֛b/?5{$hh@ -k{$}{q;]A:t/DJ쾕~3.X^"@&'NX*w'ynߙVag/$(V"?,O%O{CQMRJqw07LP?ZDAY_CBMоH;ߋ (E }yǂ#K,簔HLT-nxkNn2=7iבK"0GgחʖG:j*q$ { {@~"1oo!r~? h'~-`o-)yO$?nc\ʅ~Z h@Pe=aա_49RV-3:DKYDw/ W'HGk~}:'ujAE7jC{*hƌDhprhLƹwEԤho;tQ/C <>!T$p`rݯ9 e`o aanA-řv,Z tREV4~`dc^|$u3$OGj\)SI&Q  - LNX HN)71E7Iaj3g8(S,IZE7 $xMeDHx*s6}dOZ;lәu"6wj -&>(B^ S"Xf#(TWv6ʏ9WO C- -{ۜ td$~HV,gb(cFt{1&VWc}B;?$Bk~x`(0(nz6 Z8G5^q.E!fKgYFԦ,\RQ3⹧]V:?pqެ ͜ˆ@k#POj_iF#m >i 8̂ճ ='8&@߄Ȭ@sc'ms΂YK;yE" -_E!7bvÅyϨ'Ⱥx8Dk%Q3cm7y UySId{ufC`]}T;|/WA+j`zt9.%႑8m]`5ٝ:Rcb|v91#QYzo{·ɓEim&l,f!3`KБo}Cqbp2G0m} Mqo]Rd? -y4 0b+Ŕ -i_A5lO2!'6j:'yδ.Zz ƚuzt\C&")*=:렽񽷗Qi/|)=*eDbEF=R9j"i!Z}S%6h/MU;"+Ka~v+~!F~0~ sG|=K`|=x0f4⬲2 -o<YRA$GFތP2qUR뵜f.b͚ CI,:AdT^sݏ,\O.C39ҮI `. -m(JO #L\ϰD/u~ ~H*A-xu\\<*ϕGgʻT8 E.b5#WU -䛭DH9E0QRacJvI=tU/EM ,FS$"3 xQp `j;ywcy^0䯑P 2ZPw7xLJ/( RLV?:]y(#yR]ijv.u3%> ,K -J&an=glY鿒0wu&zp ]DDw{n=\Ђb-Ge 4d;'T֗|*͋HRhƁ|BUR 1*UoȤ>˸"M:aeMv q{SRiB4('`ڸ3\59_ {Ytz 5$t nb;'t8- ܱ43tq{DP? --LhF( -q^7,3=3Һx90`jo$|^a0{8C} -i&]mPG) -Ax2 7k# !~J=-MsԍHy#Վ q*ZX_ \?!+@Iv}]aePA T6SQM+Hǜ V'5U /7j :膫z8_?mZ{`a/L~A0r8x$uTr8nLLgY6 cV -|eBY.vx|wx)c{<@S4!>Y(B_xZq -S~7\wyc!]y0fn@096ڊRYG}܀5d]xka5Vsc T>`D;H>e \!mC5_B|bQ6RpbP?ƹGx< eSLvI>Ra ->)02mTgs3"7T>"莀Nٗ} +R~M^y7g-:0)".CעlV桍ίG‘-e{GokoQ;aDq'$WxlZIn3q(c͊r'̆DK#i 3ꃁk< 2/k48<o?ms}RwWJ2hhdϮŅH ܜ~(V47ChKէG_qҌ>!4iϢb3*Șw4|6?ܬpu)䑥ar%IkH$.;͇/p?)"(un&sssE.޽o3")D’F}*Kkh%…HUc&U deV}<lc;!8-2EF4 j E.*GksuN+K'B9Av@D9Nd9W Fa0vT鼛> 16to<\k|Y-FmHQ{UYUp]B(#,d&7aq Z&`9c5(0$"WyԔ)h5@n†ь<"f&{6k3bn 뻰 g28̣RW#^8*cx(1.qn@ܰHSjP($slVg]nȷ|%/iRzccKz-ָeO𖞣K)qN+y03œ9@%"Bج39QA(8+s=̿'˘戛;ZܾjrաJ p u뻎Qc;+ 3awBGG ̺.- D~ [Kr W_=0E]UH"َZG02ulN[w -S lBF /ƃ?:e ܷmੵd@L֓'>MX0_i'.{8W 1 ۴-WUtOٲ?\h ( f҃5q?p -فLg&5 Jsz\)sYG.P'NG3Bbʎ3N1ۋ&?ylnZ度ԣF/ӹb-.~׾峳ы&0_Lt, Ia3*OQGhb I7H_'$ױk29^^a>{:#Qba -O14Vlq {d؂QTV fuL~aXv!(D ZB#dTj9!{aXI4P>+::(/ќz#M1O<+^; y7Ȇ 5h:Zx& -6ꤱVAm[=45T>}ܔk)9}4DfưxD;VԄM .y_=*S 1o,hu''р־(S: @['qӚd7}aű<˜G59dQD}vƯS=7~s%:͌Ʒ&Ix!Afk_=m;7gp|-a~cKǼm <5[ѱK2t &o/ZR\a#< -/4Qό4b\Q[? -0BX"6<΄2]3+n'<}0Jw)`kk$+i>PdE͵|X3cKtÑ8@נB{6!K[;0}ɳ!] =8^/2S]q^!j$M]4vbʒ>zfPp " XC☙?`wc>įdv`OƐ-]*VqF#+R8=U2gm\mM@j]JjAuzb*"LZzҌkɴg)[0Uy10Xvw2MaGѯFcr$|tqŏ Y30W C]MVk8_:N煁1`ɝY [t<8]WWi n0[]-6mh?PlohVQj,F4i[zs>A"KDVZPtɰ)} ha&{, w^R)WH;ˣ0*!)%x뤼ۜ,&;f=!r} -6ܔ"nwפo EEL[ Zp$< R).Y IsؓG8}Q$="0OK5'k:C&htv:MNl -lnn")-xDm$c/m}4 yo\NϴJ^'`V? o6 C/DJI@N4 vSĖsT#x@ _ ¦lȄ;CeW>l4rmĿ, W -r|zSgmB_NPf#ͲQUz_+0PF?'/ \o[ciH%U֥ne:t f ;l1?Is)7O",!R|%y*_%[O.VZp ڜtpE`6|rFc%B3v] py8Q ]/[Cld9젼 -آ=wE(#NC$l*<=KSfn",p -v|&Y`oycQ1T~)ex27a6 f>啜CyC($μr\IO 4o|[Ɠ.2N,sUZbg~; &=6洊6R؂_0f UH&%JP6WT\!gtT4$ 0CGZ_QCz8xYb+nNCXS{eJ0(v)N;q -)xzV:6|n\Tc;BtsԵ;B0\Z@R#AIekX})U&رwTr7х]2 $%=7#3c|t +,RF*•.uwx_ʽyXN5̟%!k"!+6oŃ9#('3,@avVe[jﱚAWƧsuDJ!n电njXYTrü!TU)/T|!Qe/S 4Qfe~ܱ H=4_ؠ9c:ǃɴy -!jV# -iQ!1#(ZЮPu /;G*:ZfSfh=1oL}7Gta`l waCSIkF A{!*?/`bibP9WNS҉fk47să)&s_0!w=^7%U\(yXmYFR1 P>Kdr@3.c'UKÓee(rTgƇ>m[nM"{@) -5.y[Z 8TQ -J[Xu"6 93DZҧlB01}[b ح;qto|9+_4dJ))T)d~={WBM) FKEgW!U.qK5c}3, \ d:p m _MgŇqsFFiFЮO39w)iDuij lQ Dʆ c*phŴ&yx/)cIeTHy?=zo ZWON W4>${U$]B5^Y~&^;%MUQXYоN-(;ɔ/N* ->t5CnM|0#dH'|>-}KQec3cCK-Р{֠C|%i0Zf05T*s_vv#4cљ-:ZFc,DZ_JOH_PS=Յ(uasjO9 yс|Aq9`3H=b,W=Dk)Hc"Mgxn!֥"ndZ ظ67E-oRދ yzCJJU"XT0lΟREJq@,X80%vf+&So;ϩe)+WqqgMb-z6+p1ňgM4H)j7=FNK 'sqp_*c))ʴHx+ +/\CT:؂xc)+ Ҽ@f['x+Re;K.-@ /[Uz . {?T,SwsD3<.RA<*Hcb~< "0z5CbN(XjP4M"喂!Hvׅl /ĥyn*[Rrso =$yx?j[9JK$FddiKX!:cQsk\)NFL xSvD!Zm^ >,;^&;qm&sDs/ja#Xl 'n<{ڜ 0Wc'(Zޚب AK)vT E0G|"L=Sfk{\Ot%A_6EkjR8jٶŇ^ <Q1b!Jn J nK Mǩ,,$ҙX & Ad1.㭄Mey&!5Cfp7jl& tᱠcbxrnF+9hଥUp ~2Rh[JmZR(qY'|5T w@AD(Zg -zۖa#em\ΐͨ RYEk-fϢG!b4cv:i#DkWKxxeSvhg$FVϐ~!P[,u;P6iw -Z@s_|:Z[[U O^3B.Wc3~ݦ鏡U -F9AZDB;΀riVn! /dxG<͋/,rٲiR D-|fZUr<ZYfQP5U M&!գ#AAz - 2,QWDCY+e&jbG(A ħ@SbHHRhŌ UDm}3Ԡ,[=oRN.;U6eФ\GM%P\g>@0F,wBσdYBݍ6˛LacpY -1T4 8 I>JLP}Y  xHQf.5$&̒< Qd|ړ۸}Qy*WxAi :ARd .1ޠTXN}z?2WWd.`m j*⋀r>Lm>"N,iw;=% m=-OkB0Y{12 .'vB82с@Y*HtJMňǻ`$_.ס:="0<:v>в{QD+S({}1'髺:G=JaqaJcQjQeN$C/Hy{eVV࣢FlbF6BC((n'䯤 97X8ɢX]{6 -GYDFsGpbMB'@69VM52,koMb^9lA!;޷mpӰAuc %Җ`;Jli_#e:9,f"26q“r*ܿ4e0Ĥ䑓C#Y /=N#g5~rX/xL(kO]ΙsnV#5t޿b:C:ƚu|I6+vtT7ui$1b;hW?$WmP+>DKN67 tM QU*X i}s\ВO܄nv-9hH$O@q=a#Y|#.ɩP KIS촟]4pfxaTL ^$Pѹag#;9)ka߶2')GDO EyPԸ +4-U -*Z=ufqg+PѿȔ IIԦJSue/[@$x$qd4sߞڞjFxe M͎F~=^e'w'jJeQ,> i_+ !1֟!:e-!("~XRȾ;C[BBQ<:\EzvK%\ uycPZ%yBV/R*Ux o';70rn-LJW`O ͮs7_SM,=~%o"\:V,;@_0 ^5JlK$>PqUqʗh+5Vd vm2\,̝FФfAX3lY !aeOY-G;QN  -e K^i -+L177HSk>@O!zț[3f<~`}7:u"<53 Gc 0qkFiP~J!LEa<C ? g>7tXj*;u@TV.49% _8 9Bu-!34}3 YX(`У^]BY/Uɓ405-jZcde{s,Nq%Q{G)tsM)i -*J™C0VNoAL:d^RyX;$EC =rsDbj&|vHM>)$ 9覴$/lGq(@P0Vd G!68<#O("QHё(ԋvEspE?[E896EDwK&%-{HR"*^Nj]DTH}3[/;s_"&94Dq ` 8gG>pЩ͉hKAYS:/Dhkd~kȅQ fxC w%0 uw#΄pN_EsmHA -}C ~]3vnb2ŋ"dS[:5lBHϋH{cQ=JuzfIPXBS'T#f') t5q --Tu3 բaotBJ^՞bYR6+FY¡33L7 cpC -<Ae5.$SR7BoqF:C&HǺ)/k [  VTLx jSϊrb8 + D`1RD@ L  pA(((T񀂄T咰'=v>Fx̒|:#M$c.r -e?EAL]Z#V\_<"dPDK'A_}tiZz֠PISfbfWd|f#qe*rU Sj@'IIŲL4Q(#F;)^oexr4I=R fA;&/)KeRXHҴIeJF8Jd(](E%c]~77$͖eM3v~=-4)bW-S-<hq妟h'1~Ք&t_N"bZF(E6iiM)Օ%ySe!M~uf0CÈĚLQ][42Yb:U*L(*wn5#q7(cohrF5u9ǬTC?mT10gx72Kv#n=˪e&t:?{I*NCAb-L%SV>LR}%䬚R%X.sANl~M29ki*U R^`5&2??ݸٱ^^ե~H%S}{󐐛guFLVZjHשQOHSKil#Z+zfy͢B4-eJ #4fژQf)mQP*an֑pjLYfu[M(̰fu2]tS)SD.Yjw]EUԼd\lJ+Lbn,4zFӫHzT")Lj1iĐ*y8ӻL/6"RAjKHw4r+kD2ˈ(y;q='oQ֦l6vuu%i4(:+I+)eY:tnY.0]b#MbGbzɔ=tC"V3՘*9ԧZ>fd*,Ckʵ8(X#"ɕ(m"3UÚg]O)uFx%U>̟;id/umɚU$LsEaި&7Q6~+6\S|W[׫D^"]yUh<4dv=Nge:/|DtgitMrr!RzϻlVZJh9<%#~Vm>e$@TGO*Yv˚]Effwv9Fx7u9/9هGv[/G1NSc/Ι庴UbW_~I^MF珳6u=XN~tV$^uԅhvd+鎞k39*V촻͕{)"G;H ӦkRХψ'}rl#Vffi' R}/-x>WnݝݥIdan"lzR M]bw7>"֥[׳haaZO/&Jt]fwNҐ]-.n)5K<<*;T6>l_+ݏZi{1˙Om +N/Qu|VN=T5|Xr:h"HJzȐ&g ()&ɰce|"2$R^%4E RzfûR;L]nW+zzoqVc*b{"jg~]n9=w5%n*+:4FrQyNyV^by'嬃y:vywӐ:^-tuW:dCIfM7YukP"M̆';N1<1"eEt&LJ5i#JD'7T8iOj6bY2O٧aq=wŽD'nT[_2XS./W6eDRĚ3fPM*>V[tNNr9X,al_V/++wUft9d~#}]=[=^ﷷKEƲh>ObN񎮰# +dmiCsY##$AiI)kNIͷGn:|i?g.>){V',%,L:pBTscc~kJ|=!S"xu _FG]riy@~U?z'>j(vc;|C"㡽*84M'3GV:jWγ) p$ebM82C7/؎ˣ~^\^ɧg̈́5Œf Ŷ:U;OJXɼ_9֓y|,*2<//H8T+p;~>qaf('*B{c ;;ph.}+Lh~SDuIޑƇνZ=Kl{ XQ_ooA4abǷ 2G͟GBeӁ#ǧ`DnSWK*qkŔS[f%ہT#{\n=%qqd"ObMɵ +FMr hv+kMyȲi*fӌX)rfOo?wﶕQHYg/A<[Ey mVA4&Z4h,3dD[k3Vk+|Ipޭ뷔8{>] QjZ_$|H*_J2@ʳekN Btmpd#˺G2xA93F-6 g븬+yf7;ikA]82<8Ss5I~SĘvf'd֩!D;ZdcɣXyvGD䅒6I"}nN$Ski(m!ڬ,cHdoL+J$ {ș"g6^"S_FeXVg/e?\ػ+RU,יu&ƃ΄q#s79IXnOH{JB#Cˡr"x޳]]k-wˤ9m%_ٔ,(=#UJKD$JMXUesQ{RW.2f^}>iJrYXhWגKhO:˖(α ]eVJ|h +>wF%ioL>D(cBw%|t6'A90omVssBd~M]XrRl_4Vf5y9|zX2&WչKUvInӯ|UDYDzwu7)aX3]Czr|&AkQ dG7C'3R'˛PL2]lЫeCc䥺WVD:h~X9Bijٹij3F Vf3SR9j9i'Ʉd3oy~s+B9հlXFԫҍ3;׻ɟD2I'YTq>CRug/C38|x?i5|uYS9o:RY{Ǫ޽Le6I[n&6e. I kwo%ʌ62"K;ՈdͲD[d^ϵ$U_V2KÖuEzvf|1$#D3IQjˆshT#e녔c$2DtZ]YXbUՑEFRԞ ag榫F;aFYڜdGf#xdW;Qe3ڬ. vvti}P.Gpe"ەLt̯ʧ04 "IjI!+CVShULLP5nz(%KN8fF8%NF%_U~N#F$ VRUL*vJ ^7aN +%JF aҎ  .h1KmJ|ve]JZgԴI<$sf4I:&IXG=:'= Q6'WV7?GmLahFk41=;U3mk3izt4$g7XriIWQl:]q7LTطk8UnfjC%qGi4\~oL&Z9td4=~VMuzbw3=}[#?0Y932M7BG鼤+ﴧuCGg.XU3LMMg!Ԕ+Yp\K0>T~Mʾ<ڮT1ֺRF ͽ,8jKjpY\;[fMN%a[ڪd⻪H9+v1,4ѝNgi;4)xQN==(|h;12 &Suۺ3wSn&&,%uJ]đAސnV%9%\mR94;q]R*ǫn{90gI*K hY_jFPF//h?&x=I5QAVͪ=xoRopWFV[(A$!lfbh*u##GaK! k b9ծr8v+WW%)T\oԞOzӪ $q<9OaMI8:W<$l5NvTGiĺ9ue>?>l68~*ً]ٍrXlZd!~$3d0e= ~dAKrFmH2qñɘdSd`쇒3G:ȷLxQ Rzʯ-ͬTx>{/|9e>4j]ZaOW,Ay9[KR9Ɣ*G| +V8YӒfx'w88IqtmWo#.{aU3rj9ɻG61{yBL#y{s|i* (<<"Hؠ@x6]I*H0p_!B<@B `/t B8PA$aBTXIՔQ\GJVY+/GGG9(GmZL$$&(ٓKJz$'7'b"p^KC["N ^[uawx$V:+tY o &RI&)T2gC9DCbb~Xeb7%v7b'v95bGWXM9%r84F_S6 8=|yƄcD˹:ՙzwTkTojWԦ\V|ָ# kFy!mM!˚ټ*롋Jjyu kI3t㩞|xy#n +rɦX*+6=xLHH4խS{"6W|ۤE)/s ^]sӄa b;8diR:OuYҡo5bIfQZTZIeeeǩMs$O$~}AtklwϑL<ۻ투Ni#^RSc Ԫ:ާId&]|W-ԓf'YE%r Z9t WU)TT(TTId2Be2LU,T/¹Xl삔%U"ʌBJQe*G*)'J#3@&kdLȨT}]//Vld.H,ct2u2c2Β19߫r$Wr!T]]O\)~ʩF*ɺ M5{b6ik]Fgb\m5M&M Xjо#9"rt㔣+PImv2&cgdRדW5,7-;'Jz&%}hukl >](x<^(tfϡpesvY5ev<s6s_cI8=S#H=J$;;JoO鍽8 S496rtgXh#<9db˕r;m3Ԓ22IBfw"J!֮%9/XBI#,QO"@qFm=r潗O: ٺ8ǒgWC҄͘]ѡ19oع^f}{vGiOwqeY& 4/$ߜ NK2x9Bku7thwxy+K6eQ}կe&bfV6kf Γ}MFlx7kC2#RhYMfQ=:96s6=x5/еYb剔G3Q}:(#~gJP=u=UM,r|>W~{{2GaJ:Wv\$ctEu,XD$ϬK?зߦNuĤ{SgWsn;O2)4X[r#2w) )GU;*:ղ攂7wEesW)S}U}ϱ3,V^Y#Ny7,oSwK:uFtHzY=[#khrI()yF+U碌WWh饻Mag U=XVg 0 "o:Xvdw7xL8)`y$$YBe$*)2I4\e,K!$CO밯; ]<a]& u8wB-#hSf_ZDv7ٰ:(sȮvQʹ:Y<5WA750_vӑ.󙫤[M]tXLH 0f;tUߑOם&٤x/@w'hN^SiYa(XlAvaѼ+5<1OcB+MYj +T6TLHT5O]^fu[eZjZJb$L2VJM\E=#[[5WHE{sDQU\}죯sT={W\ٙU%6[Y\b'k"B7sUtdE7;CTcaR١ 'sUtbۮi9ήrի;kUO2}|y zx&WDY!̩,Ifeg{XYiX{bYYe*#=UbԑOlr9$aa5vֹ*')JUn]eg!\d8G:ፓRSdX;?rȒ^;Jd/٩r,Ǭc9f397*9vco^Њf=c&a92Qo]CCB7I{2C*~JEQ>xqC4'՛+ ~!eZ~ %^Ld霵4QT\Cҝ9ҍ>;+ +Ν' T'8YDž7=z M-rSΝԆU%N&ުi왒aN-Y5:3Q&s5D) +.@PAtpp`d@A  n (@iǎ,;3 DŽ]%uCѕ*Ex򊈮YQi ȽiJ!l< ifBHs`@<Ɍ|Ĝ@F@c`Ոl?_Z4|m0.97[w i ނ3D p#R+t$1װҖX7b 8 tpҼqb:I5ÿbxܬ.+bu28.W@Ƹ}crĖa +Ը;Gl|g7Fӱ@بxP"c|<1cA72?(,D@&{}h:]l r>fp$ak-A&h'&av\S%J)3 g;+ȅYw2"S~jFcAV)Bgy2ѭ ri<2?Bc +3G@اLk)+Oh?o$ǤB#bBE^J8?髄\Sĥ8Ul7?<"&2b{\-|5׵Vl3Haֻn0㞛9j<j{|#ǩRׂQ6c| w,Tϴ.=Vmd㎿g4m;/6鰅: }۱Ɯ( 1NRW=_98l㆔`Rjv[bE%??S厳U (-c5qLyexD? r +n. Q}UcEe`YF_R>bD'FYcLEBp6 1=m+! OpB.j({QiHwc>@V6HcA2? 8M@ b.pz< hop, AÍjUgecsk 99힅:؄rd]9s(2BYЛ>B?{T +N4DF +)}="-#9qoEA><r [#F\wsjQWdj({"!cl#q3>P*2@:6$eqafVȡ*VfAV a1`Q!\{ +yj*W^ȅ S.Pb5R(DNն"e;2dr/2dVpАGozkȘZOn8LCno8!> WH.2u?_Chv jȯ +T,C.md>ؘ m0!;!"F0Hl?"<&QcD6%%2xʼnA@i*$h%+9DQofV\Hxe!dx"&!ǾO1Q{8Uq=F5j%SKfC6y279t~鰒:P$!:o:l%uj"%$*e9QN_%j8X⮧ *xD 65julwk89Qi8Tc]_DͧL.Hh5r""eF(/,U'_x־B SŔ`'uGYl> \S5D۵ jV ^A?5_a~<<42QP"*~kTPo~7Ԩ!s1CҠ -),ALE?ANoF/FJJ>0un8jJJYH|iE8헟Ш~BQ]%O -c7j] ҨTaԗ`MYS1ˣzW U_cDV_-Bhe^%o_}Xzi Zp] 8t5DS5%%s}6kgu\mƟM9?^_3L݃=H <^<u_il}H4MbWv9$Iͧ&Ud~!fgWhǡ%hmpsT9?.轴]%A}}v#[B$ Ŗbg;fm4!⠱WP@ߤ"@:NRӷ\W.W=Ý|Z9n/e]g +vyspNI-F#Y[*ݜlw ݭ!_Pxw Iv@)8]ϵФ{ܽ/Eo +l7뻃}քTFbx6 +댘+U߲ U_ 8*0"wbk1_pV. Hj ދ=BWw36=b@U`)!KRVF κd&V + M Lgd(6oo0%dњ͋.́mxx A*o<Ű|6~7.Ur8ODao"B0G\^#وZs]_ל¤O0*~S)I{P8Q1^δ 1x?*+KC!$O4mZon! 1\{!HdIsZ.r0bYh_;5o8gV + [V!%h _  |u=lCS3([KQO +"yHF|SFͪEd [n.ou +>f#,ÿP < +,siFFOѬ7h[ +oU +(ȕyw]F-otGex^ 7h" ޘ}[+7?^/{Noe=7xQlш7Eub+<3y:',kl֜D"E_Q'3o[oزQ侓/^Rܷ.c`Q7!V%*66oÆﲙO2<r溗SA@ f]+n7M ݑ]{jfN(*/=][1Ϊ'a,!q÷-Yd~h /R8oupI3+pk?~6Slwn!VuNa~$a#uܛaMq+}bJ<"d3nGI%:w/[`;Nbq쳕`ī.3ޔ fjUL90w'ג#.{n !x(a)J<DЊ M58p{ޕqgFtJqccNdZKJ>(jR'DMđuIKqLIG ()[k%iN?x Iew+8(o>x9GȅbN[a&XWܰRY}gspPy]8dSW/vtySmabO +37G!4CUsdT#A摌d``fpk9=GRJ>;rB6ٵ8|hߜ4CCt,l]={h5}[G.&0LnI(6?vS;d2өʠ"dQ׋ :ugm̀YmzrKaaԩj6YaIͳ5En ^W<.[Kud::=⽉_qron\) +hGNkjk;ssR,۽䶷Pآo:̔;D+\;÷Oo`yĺ;ڝe{3 dP@4D +z#ty%~ ob8~t<|[#M Pk#G ^<^5Kzg rF@"oaJonvvE'#Ɣ+Nc΂˷*<ʃ2/ ܼH\ϲwH|z +)/!Ezʷrx8zA>ϲ_K0h\O 0:/HғR Yz_Fsbo#OT&)*:ڃn^֠eߞ}ܟMWWUx6c? qa=g%oĉ|x`{D0H/k˫Lj'_%oؽ9VT4.__%|8eWz`v~>onYTWӬ]?eH=h߳w!DsJL}FX1~ !)AULTeI>Ͷq׼6YEoK3G*Ty{豸хɑl8a6?q%BԜB dmJG +nÅ1n Vɡc).zLR&L[NI&d +g +ibR] +Ug + x"N *J4d Y#W^ڎ"xuk6\on0H+t8 &CC_5]op1Ԭaj#S~Vd›FcV }Zc0, pd5q"[](]n1aGb ų ߺhY$콁Q ++zOF1VMCYS8į3TϽ؍\=9VW)X>& P|̸ -\`.Ȉ%qE~uI6A\@DTx0K'i^s[pQi3+b6aA^WX 4N +#Zy}%.X?d5>͆%i2܆PG95. +2ތAk[?:v2CMnJ^@:)V񬧍*)5 a d7/id/R%ĤA[,FM8k_ +?J`Bey,#gAAѧxG y]B:P>#B +0zXza>vbpJI>թ"BFYƛO~2=灁\z[ô*Eԡd߁yO 1֪ᨕ"k>przky_qĠfM+kf8e0w^v”$ĘA c>\W4XOcפƸEB L41KiX ꍩ"GyM; `Lp9 N}œc!t8/\{jh<p7-&)~=1|X89غe1bQ 2%fQF$o"i)zɲV;pqW~L󀸑z '^ǹ6uJqJC i=+ C9AfQ\`}< +`s?EdFNFYn1 ]axRXC%G';"jWU,ӣM:i1^gke]D{o@3^H07RI32iTr:myaCcT4Y|In-SAQ`5q5zv+ÍY .pHaL/m h6qٙ:21ֻ¢bUW~eB"6lj>^/qޠp[<`1l2:#QJڶ,~cDP +pK½+E󆴯RiؗOwgqȅX?݆pr:yj\j4Ѱ ܚYVXo9RϦ5%m/j !Y 1DvͽGÿ1~/p`,70>I J +^L Mb7@ʬ~983{< xW 5ʄe\Kpgg8y3EO0 5UmzIuLĂ6?%KGoT up8AG]7 lY\IPf~m0iawI_>_3-=q5UA+"Z*0X75q9M?ԂPyX&f%=x06+n+@[ b`(rCNo.$d[vrG p7۬>8H2v2[n h%,`ͯVfV^aQe,j!GӢ" :8}A6B~IuIJO11P@cV&- +ںf\BT>ؓ` @SRfa+8$iԓsqzVd@HszMX JYpe\/H_A agJhF(ș 7PN+v9@Lk͠2^狥AZѵnpFûȄA"pXS̢=;3> ]s$# +Q{#V  8zC+槰F8n~=gYOPڻߍrt +pH6 W=WEna +Hbzֈ?Gfi>j +P88$KNe/b'l8jV *bݞpHv7;egԥ,ԥb|U} Z)'mtG@m⸵Ao)uooՃPB!Dž G}=T4p +Giwfcܝ.F 0Չˬ+<՗:Xkં~C{0vBK'ԫ{D3!&xN!|[Yen4H%\^ʌ\6y[usk#gAnռLM$*c~'hsUF,AT(K/GƓyugcbd&,vY!g(s=lMRV԰Es䣙_ޖw۷H7b=HAGț>k+>s:[h̾xcGSk-)pH"A&\!_!,S t[âF=$iYc^p\ѬZhk|U7´A3xx!{?<³n ;7"Έ8Gƫ#k8^Tqy*(<5Fz6`*}d`OQH*,dIsͭD.>o]sNmdK}h*t+zCӢAi{l)NlF7ǩF_& kYH `zWHJ8kBܢip0sB;N#vh9Flg,/=8`viq?Zb +6:9HWٳ:f* +`TyG[(8lo{:zN=xO=!uE5 ʸ}VɵC -;v9GguV7ž\u0*ZZ^%i=#ə\o);ʜyd4"/xAm*l;lM]pGx6dw#ܓ[NP>'M> X{G +P)Ψ&S.С3HBخ#p7]bM@\^?" 1lpl UnrW9mc[7vjt?hkx0% +.s!N)mj>`NrsD1?eM`6V'fߎrH1X ܶN~Қ+֟Ej}HN^qE{][9&\gG9Mv k̲T^2uƔϸqCYV%%=)}?%R`TC*y`1ZrdVa\pDO̫t`­SK4m&,1;U\#\ium9Ui¤ sx:``픆;<J#;Z02}7r5KcݥZŔQd*P"n8X}6 (Ck=#r-iՔ;n=WgBiу7S:-8+YB> T]d?䑘>.!5Ar.f kŮ֑ qI\ksԽԞS!O_*M윭gJ/^nF1,mV9XhH]N-^GaW<|%5+i(ᄉ+~T6M\ 覎jC +H; ![C n)^z +S\w9$ح" djrsf+PDPY!Q{z #*dlAtj{Tàb`I3 OQEWA,{ZzjJ6cH#x{1g) __*_0L(- IVV0r_lY +~3rBD?#Pdrh;C{S9wv=bdZ, lL +hT̼g<U||J[0fexpmNik|"860ZM  +ggXU/( +T@{FYe25HxE}FDAImϦocrż@fG-%#8sV/I<0"oqp!tApup7±+[s%c"$M@,}S)e|4ux>ݠ<)GPEA֧VO/`2,@"B)q'1P;{~XurT"G h58!:Y>FZRr 4?tkM-f`G +Ø,H!׭T/e~Z3**L/ gJ8%0n01d[JQ:D逘Λ(Λ6#~:Mo>cَw nVQ C$PQh}x!ɭPLCN&r@,x]ZpD~'|"J |L0@UNn"H9AR})SЇvo&A:SWikM Gnl׀PmNJ{s-YU +ym`\PY#n4>d;!>1]Qc^O'1OWYOf@W_5Ϻw)0)xZ(ŹvSL be`Z&N9v4ݳ A/awٮ[B&\}i nG;8DMfȚ.T3ݩqȚRSX]eS:8c6 GcLc@91Os"SNJQcؕpw'BL&XJ n?|uZɟ lZl0beZtjW2nT>m 0ss`MBaM!{u\/Y!I^qlDʇLƦ~$aSfªԢHӋw,c0@߉er$+=h\K='ҥ*05ٵU.k#>{>VQzdp4_~}-ҴJ1VI_tvTAM >>®.V}_s(`Nkk B|A]GNt l#¹^ridvVrDirǢ%#ʠ_UŘ$h}r:=(Ye3ww8 +sX,SfONK(`5`l-'{9zbdcC],YΨA,p"XpV=D$`b[B ~Qܜ x-OiiĨH DN_# \\LN2IRCܤ|w-ͅѺuqc橶"0~_F8MmVsD9;ɎK70J,3A L{ZB2Pi[0#}jL}SEYgvZC w"b=ka.({5&ȨW>R*<)Egؾk=weԒm($@PCKf Dx*k$QB]AZf.N62\p@ UV[ %,Y%J jz>i>he<6xȾ;oǦɱV#Z!͔-bubxy0j"*~ xG;RNl:JQCC⺚JګQ6exhD֣m踈.gxT-ƨˁXhg0KnyKu@tpljnPf.0f"`v/ (-sF.κ>*hX4ȞB묔VQ()}vҭB'ܻ O!ٶ/_cn#ٵxz*)"BQw4DkMn{$!|L[|l_\.gb=3Vتz< _Yê$X ]CtHA8IOʫVlX6*yjzZJPPs|C.p.V)®MDbG[G ܕ9˅<.Qr!hA3Lj-I5+&(5"hxYCWY`5N66h` -1YyާIzKpOgX`D r$XzN֊cve@c_wD b|)HDzbh/7 xLĥD'8,0E\q;[t`Â( +^0hLdR'a,fȉ1;k Bgď``g̾)S$ >ޛl2Ql 43@P3u3:74^3z6ҎC'^ c$>BsհOIeMsY0/gt7lRnH:y568HF[`sa\ڦF vY5Jl HX* ZVN +qQiڌ B"N[h(Hs +ƙ 8 ?rp>Hȩ8j8 tKfc2jUTdO:Hl^[ɚs+9}ΡjІLzhT8FuFbG1r\;uM@S*CrU j㰓ݡLR.di(UUGh+^EA8z+3Ÿ 2^jqD;ǖS:~6;& yq"2{A9J"[C^9&Mn=$( 5GnNW[џN!v G`{_a Τ1$8")!Pq\ +Pq*\7>77;['U΍:eP=/LPDh*WBAI+ \e#G\Sm"wGLHu1ϳ6>ũ X ML^|&Sy>J,Wwd*[bDR*;shx*{R}GYr +8CZǠsM_x0Zp][:ެ[`Iwɓ[0c$g k'*,'̬7r +oG 'vIۿaJf+yaDE;1S׽^F56L ^tSBb}ĕeT meGvwyYheED:Bn(^*YR+^(iY 3鵫41RK`׼x1-r'7}-vqmnW(\"0}r Tlly*gP7 +Ԫ *qlB3@"o0X*aN.}74$(8[{!J6TwFe4H +!>:]Er! Fk~T¡-u,@W0B )U3eqK䫏|4wɮrQb\*;PU/wAPL3j1dU^{FI*_ $%EJ֘T p)d6{<3TƮdҀUы`\ّ'P +hG\dӑ{bSuIM&˚8h&H.)bX ]o@>=+5BO<%(r!p[IH,=]'tyU3]],ͥNjxPp|7#:(TVŲYHiWA/J@zPTaD :wH -y )S=n9sAibgM !2 k-?ե|(N]rҧrgϩPiHl"+K^RPW,*-b*D6P(%0MQ*́Gt9$$@ΤAkoؾCIv<$8GEai {Hæ B!e>6 W!(>ʘ~`GpcQy.ty~D4?TF0FA FG$B/‹/.u@ o}0Bۉ:2QZ(Iۣxyw_QM1OZZ=b^*֥KaМs%MJ0;DJ9O(2#h;eM*^Hѐ=!\TET@ʗlҘ-BT`g@ܕDUW׹Io<)1}jεs+Va.$n#t.tŋ]J4j,!Dх6}G6jzJqz6_$o3BMM,ϔ 9OUF XTzB$s P(gYr5C +i8N݊Q: (4dM8Īf @z Te#h2Ab(e< 9߬RRpF=ӸǏ +nlV鴈 +& +6Rg"@*̮ `̚\2nD(A Mp0uFZن֋dZSo AL&z +D'UvMv!lQ?pT9VG5DNRiBP ibr?i*w5;!P9vc&m`fッ;B~`jLO Jͅ7(B}G*ιQ -0ˍ%"H~/#Y 5bX_D&H!S* +(Cs7Ъ6Z|B">+,o Sa%0\!P-2"| N1dk_9Kբ!TFڠ^a x"0 (8jt=ccxeaZX W1!ʻbV:~~O@&+r=kq?NMPDkc&{;;^֟ >DDl|(>V[̐&ZnYU.'J)ª=J'{RғF?cPe⃨p$P GI"nlw- xa6*8sC0l? &'`A A[Yٳi?ǩɠ{q + P,Du@[>k1uKj@r ߚ]LK+-Nw:>Smβ'LFc0$Q-TFGC:d5<ܮAftբ)ptŷ\o桦=U i]Fi\TU~I /N(Ґvߕ"x {6O !8"* ٧7ANu(L4b.R TN{7󦲳PK=Vu-p$u e )-MP.&q,vd{Zt[թo+TO5(ENG0Q*S5rq ߲XZ>г }wUF'C65%cn0%I 1P+ 0kO-[ZK\(ɩ9:J(~ɹdÀX Ǧ;w&H /_"oi1 +zUtc(nx̣Š(㖿z)̍EerhEVw-y(ыq>BO8 "r)|}e| *J篌4 vbR0vImRɒ\N1HP߅߿:_hEE<+I5Mي]sU/--K4vM3~x%"-{IR؍ u ڑ^ª ^& M,bN!/oF ;v +VK}ʗJkbÕ;{}i85Ɣ}) YTE &/`c+?"o.`$gaNKOֵmB1U҅6 Y@XK^'EO^yryᓣo{DEn8MMϟq VgBzهeb~4Eqʂx2NM$_JB,'v,zKe> +RP PJ(rKI2#a(w8@GTeD,B#)c 'PRUݠp O0a͝fJ{?~ '\ +r&"|H 09Y=`n>R&54`)Z+4 {X$h}zq8quYRQR$3w$Mp37ǘz԰DVtD(i([6ylVj1;1tr@b?!3X74)# 243m[H ̊(cƒ''i9o5;CzVC8A8ZʜY=kek͙=R? ++pQ"6WU:lqD.Q4ݙny 9TcxjcТH?wAg}9դ1twz$Kׄ +x#Nd + "mGqtf v:# UJC'a\=c1 ړgm=g2X3?PU֍(70OW;ae=M] ׵kSPnb~幹8KqMS/|>?l}&b=<^|!F:K'G+(8X#qvOM\c-54(Z߯'/jVEBXB;F\3 t.ZWr +k;9_}buc+LP,f +3Ո*goB:J18 : *G/)(:tJ:{-n +Iz!M7Ck@ֺm^Z(Xy=D Uř apu ׿Su WUǿb`67ZRW,R@'UP{'>L7470H+!@3e_O EH!B$N$▟QcIlYo2/wJښ0`N&ZȨ ÀL`~Q"TwLe> 4LK ]I OYJ\PDm_:lO T3x!5s"x܊|xBMp_gg/*:hs1 8O_[Ig9fMLKm戗fL3zw7=[=Hl +<*ph㸉sܵuH ~Ǣd&Pq3Ƕ-_Cc]uqg~Lfش^9L>׫eYю01hr<Ͽ!m>bNtwd ͢.V_E#A +43v5{U1 džW#\fƜIA͞!D?wɇ9,H/hRQ i=$՞:tk[)^)jLx*Is5|M꟱A 9SJ`|~d4w٧5u :UʎgJ0&N/Q#yW(X6'mF$k[Q5שXW5%f3dxZX!?}J ?>R7<>A$Q]?:ZSEPqd]PT{)zA"j"\23610U:ޯ#s7P׸o@^*[ҧ/BŘίxa8ǧa|6hK>e: (G}vn&ΞٵEp[tW)/K},1XWR5b&QG +*O pƚ(V{~S~4'T* 7uI"8 +8s1;*428` sE{-tbRSYjAM"c]8}D "Z/05GKzTqgH#c gUM|c#V#ڮ%ώ~]š d %Dv4'Ws{O޳C3KU7߭{~&:9q6fX8`9p&Q+EvG\ +;#-Ā !-O4@<Ճ=63U'u@ ~Րި>P&iB7;FƭP'N>'05N'9>Iʘjly#=R}ޙdsKZ3xoW,]HbVW-<#h PnVOgBB @xGa\>5hSjoͫxF̃yHqz8kɒj`pNt:v8d<!F4Rf-^!`yyBv$t2OipY^0:5\3p6˷b+WSq +geqIQCTh}P)\ /gҶY4#~7 RCuG'BY?@4t1<<)[ @ c6j[Xx8 |ъգBjPO{㤭 +Ԭ1ț窱Q6\L.7#;QIfB+~ΝOs7PB%ܵ N0l5ušlz*A9Y\Jpz҈^!64%wu);om[_x^7 odw O^~p':nӕ_zҕ>Rp3`e%g네[m8 (g?(%M#uk@( C+}ax@ȠDžBF^זz5013YU{2fd SGձ+Dkr4NPQzS[*0~Dx]/.gbW@RPW) + L6^aX]_>$}0iO'm"]BY3q:Q;\̶w0?$pZ$En;dQoe|pv3< +dH}o܅{' '/@Yc9dGDI{2sVzXRWbݫEKlT*AsvhW ̌,q`rG|f#*m5TS)8z4x.#fc]?Sdh+=`$"*?kLZ.$T8:kR,Zv_Wf%^AI54 +N'?LO@ x1U04 ͖7re(! E]Y #UQm7}V\*_;N,TԝUUͤ@Y+;\]gă3_C4WG8xCuDža80+mV:6UHȶ?yW!2ma A~!DgԹnU= 5gݟ%.:zy.VNq\zmښ(x"5Ku,&hi6?wwqT=,jOGfKjcXRuѕȈJv-4؏LHkwֈZf%[(B  r.{Yz-kuKYJKڧ/Tz*#ɠ4%+r)T + ܁eno*F{Óu˄Wg7N#$VxtɩVV׀aWS)4`ԃc,NS +•hKѶm۶mz`0tQ3P]u>m{o?cs0>3339ݭެkwq7]ճݹ#;FY/Tȝf5_mgu{׌~GZּ_֓]n首wjk##[/FZ:=\py\"vZWnuh\{zwm[smjr[[Nsn{xkzif]WKn[mŗ^{+Ƶ{yߎ)fs^7ukKo7_N7ڋηw/VJμRk-ŝlλR)VʷZub7ݕb\ݶ^~/sZ{wNW;ݸ+Ǚq_o7k5kf};jkߝ~3Sw͸oڊ3[slK5ϙ[st7Ϝ{u:W\K~ڵ[\y}ҫ{/Zjqfy]ki8_{bmVmq^{"on1om9׮9'|syf+m[wj˵Ƙubw;޻y{qVurnUgj9׵V|sƕ[yor;θ΍޳ߊŔnq[5Ι~k5sjޜOyՙrgߵ޻w^kޝ_ڱ[oΔn3[Zi4g+8j7u޻物ŚN{:߾9޽ozo){jj7n7ֹjwTj\wkjO^\j;c\ߝ5]SW/ګ19=<ӫ93Zjm[}qZޫ7Wwyڼib;V㾷Ιۯz\_{1j7W3kM)j֚y掫-}"RMyO-buzg1X3[kƓnytwʏ읗yJ'sϜSgvsι8kŞE +uy!.҇p18_Pc +c +R (bCYچcPi3yI>Ysf5x؍4~eٰ(MQԅ$Á܏Qe,Dv_?HnˣR$i"ֲ]_ф=Ik`y+U}!9VUeyIJ"VYS4|I7'f .oR'HaQlĬll8J[%a% 6%MWD1AqZEEς*uȠ<ׯ孔ŭ9bOcNؓ]}-'Uh*Y,!+[0A+u¢̑*4VB:gL՗*1 t BL T଼MQ m}5Gj"yҨ< +&](˟ *jJۧqϸ643ќEa}:_'Q$*l'&i *溆?lW Q:dRވ R +pF8#E|p!Q})u s12hjHtU=} S4SUw֞>8CUM0A$ 0C4A}%smD'̓2s5LAc"Ȝ'/D&8`0AYyڤ"2##0IfQ +0QDduD&5L)M G(!Ɨ@̓BR@yLB5LY|1;4@&E"FD-}(!"OPH q}'M|lsF)hm˷hb6ArOeyQLq&YAtZhen'۠qbVd BǬY6ZFF q3_Gv y{e +&cSVEP 235c$yBxZ]Ӧ%##a\I- OipWCσU5$`CWxФ~VфSi|1lÄ2XEoF-# ">Ʉ`RZU#E`d-5WLB-'!?䊜!@d(m7ZNƊi2"h4PDF"?hBI4aDduDi;cU"\*Ү>kSJ6XK$BU+Ezb(gyb|=}1)EIy4ِ~+Uܕ8^M^',hҰ>!ZTYVp6 )=G_hG8mƣzNՑ,!@rUʏ,j5Ǒ)tzN9ƖoggZ>ڗG3۝zfډ/Z]-ZΣWUW{4_K5v~yϞqZmoݧRK\[mwny5;Ro1"ƴi9jKou{n̻>1|bz1齚^ޯێu{^gǽ{ڑ#u\gRRJogz:yު}n{ޱ|q{;u-]Gμs;w;}=bqgN|})[t=misܳw1n\o9oLSvn̷{5뾵v51ցN17cozgVol1Ҷcֺmc+=7œbM[;)wR)ONI1Ϯ1y~5zWϭ'ktj/wתivogm9|On-:O{-F{ڭ^l#kJ/r鵗)Vv;8:9'ϓgmnwj-ۙ}rkt⍑8b|n<ޝ=OYmƝ[{}j3N5:WkKyR/T:;fZ\Z[Io^>ݛc$uxbk's]s]mX[9Ft[or3ϗ~+ߓnzgvg{^udotbޮu{;kֶKު_^m9w~}9[9͔bK1Y:;ϸb|YoZJkgkb8UOovo̘iƔk-gשs㻳֘XcK7wrlu#YM{l1Rf9W'oҩ35۩3wlNu[gyiNn;u[)F7t潹b$:z[;{Ow{m1=;9xœo}'g;M5ޓ)}M/{ifi{w:I9sKi}V^-Vb$n1Rr>+ߔZwa_nwݝb9t3\w3sygԼunY5^w^;{Ϫ9Y{Zonn56;N9N9NݵSm+NK/rҋ:=Z9Vqw{k5jszwj٫[uX{|okc~ܻg͗{:9ou>hX~kgjU~?b=J:"bԆ5TEHBI&Jc@(!8 810JR?@_p#OtLIr0/oܰJ"" VgMH2tԗ45*"8)%L) m4VCJ 7aN+ ƈ0ԣGjDG5#(FA*U, ʰ67`Dy~pLx ʾ`|Hamئ"<2YPF X{|&,ȑ.CxZOA|&b-p?D%DEi}\ֆ8w!ؒ:"a)91+gDaSR7Veo4I;ePL*#f +. 2HںjH(%7̉2")@;Ҿ7F;*@lXJeSAr\|Pt>OW@k\E] 'eZ\H#'f`O E +mف=hSeԨ#EM:dP_2MdϚ9$`FTץt9OAOAy#9Q1@$$PӪ/Dv__',Y 2n*j u(rJIX5$5=6]MA!:/ +Z6%8dnT.U4( u {3Wpk5]F;kNd.sb'J\Fx>=Aqɰoh>cY% ,m[9DUx9!ZUiĬQ, &bCkZÝ2#E 0Oм_TᎤ@C?~PY<C<gHVH!$\>E1R0u8 u!(Ny.XeTi/GP>eKFq:`R? A)9,!;IV$A%oX"L, +t^נdh"^F}h:hO~JJg-P4_eD8cUw֢FI~>qr3?J?3+L00L@=kS&HЧJ%n<5L1b"k04抈H-|!E܍;'B`<)l?G9\܄~iGklq+q@G[!w{R(i% )j Y8)/J#'eAsXCyd% )iã(iIƆAp[%ZVID5T'6LdDl(d僐`y7OUh5D)["oΖ9cQ XHHa%)#eYF!Eyb_6F(אl6tgk2K%&JȘSwФ̔(ˣ`Ui)> '`JF|g 1"oFK|0q~p'@ m;jS#Em9?rV x$xBt](/(kL@gsl4YA*"s"-0B +` p`Gȡ;b + :?<_tW{ت)rr߰GbA3#*lϛc$ aTi#u|  %H[H2 Cy]dԀQD ̑AuZ$`B +?’6N7F"GryʮH 6q(kx yCw` /s"+S.ppGʰ6Y;eT>(.|!mk`y=jUߧ-+{а SP6YNRP2VK+ql7!hlXV]tX1 B/ [ ?2kC&oƟ6GMa3kX5;eS_Ϋ|gdĄlx%mx$lbۖ2"5N@H 2LHRR*% XGF yp`PI@bxeX"]8?$ (i.JOΆ@N>ge=k4TJfi2B%Hc$h$2"iq"d ڄ 5qU)DeI2Rä-*&x 4I1#| ѝ(gQ_:gS[֨?pVGO|*kџYX)dȠ<- Xj\ ',JP_@IDz\?G,r +{ҰD/'i+y(y +" dJ<e\a#g`#캼ZUs65TU#Cs_V9dU*!;!OZmH')Զ /Vq uJ!.JД Y압*ȆjTi1*_s$2 "m w$#w5(4WGDIV0!0='It`/@@`Ǭ"1OaB )jC%g x5%#D==mS +!cD13D}4ZB;jS"H5 X$DFQuhsʞF+#@ JH0ii?rWP^oOƎ%E5YEpY_EςY(TeJ &L0+XU$X%DhbH !&>sV%aDx^Gjقx AK$Xb(ITx$~ |uD_HKF \#w,q,a ,T-C!Y?J%Az6Z>tUA"?fѱ(l!!$0.+0pu J;Cވk#50bP`I8B˨C +)`Cg@d@ x%d $BNQX*,J  H +(7=@2%ˆD $@AHBN +AE!Z(`B̀T} " a *dK\50b FC%aZJ D/WH"jaHp7b(A P%/B +$B~`c`!F3,P@&9(&c)TXBR +㸀/$$( OLPĖ<0|"I@z!!H# .c ++؁O 9M7$0s_GBm1~cEDg 0lp'~?)1 +A28"%Y )( X[kXNF(|>=% )h% ?_q$Ex1 Ca^| aH*FYp"xj< +" _Fo +h +d Rz"V#'F#b(ŀ~%b?@`H*IA|=+x G0x 5HbpDwh"V_ +/xP$ J#<{`#9`_PD<6G +ppqㄸ',a, ea,I\f` . !{|C bGP? 1D=qdy0 T I "^|7^ao#SB5dg)C=P!{2D8%EH!i v +o +s(g?EZI)р ,7 ha*b2C/"X#X@HJ H5h@>A$.b<_&A +pu $ y%P'cG¸6[(x,JYQ:jMc,d%G}خ|x"$2EO!%]%@xJڧaB5Xb%cXaz\ M1'ARS(`!@EdID_H]DC=<j0' H. 0%%( ;qDxP0`0Ǘ1"!4 +< -o.u82n#)$㾡op"4,NwF + /̔Py }ڨ MD@ǖRH^(pF:O#}!hO!E6,'PV0D33.Y8)`:Z +_'oHB"+oh38KF|d2aDlv> w{℁N1̫PRg#'cGpBF@"$msVg$L@ L}&ol!Am6_LA  U#@"OA6\K#sD|=;jPF}8ĕ1H#?ו7F#,JVe}O |R:='@"-32Hd7V'`Ϋ#OeCIH$]??D ^7U /qZ{|B$Q5򅕵q/CX(O`"eXq8̑`G zd yɢޘREoX",WJIJ{bCx["1O *wȨ -_#72#w0 AT/Vu_kD1emps 4u­dф˸s 剐tŸ&TUADza# ھ+l ܯa["=5 YCw[q[Мg7vm};aS3QÞ4*#*cކ?ro2LA83SBYe knFQpĝ(4`U,ʼ+]R0 S0 Q u]ن$aϐ< y#,o=jTGX͓+%ixy~&gCKrpZ`C8 +s^ɖ}Y K&B)y]-q0)Ƽ>ϐ84itq#p=qTB"%_".p6@__FUЦ}0w 7JBa7jbVM@QߚG +cGVCZ9{ec,`(# ,lx+#L$!%hmg`iBT;'e;5Ĺxida" LD$/w^?W.-(Б|4P`H /a,fPDqDx\HS}.r^ٗHkE* "^9Te+11$\ e!G RF` {7}Fq +ά +c + +=!ЛUoC1)4o[ވKNM鍕5ݟ%JsȚ|ؓQ*Qu)ɠq WҸUa6-I䋄w6 ܗ`:o8!$^HO] sh4U)M4TCDD>!G vرchPl ˆ8҈a)xs$1؉< FJ/ q@(Ip~ܰhހ'PĔANcF#)Az$l4BFx!nA ''H7b R<b +QHnÒg/#)he֐ KF’cK\,qEZY[y +P7#q^Kآ *k .H + Dp)?8b +uh=A"}ڬNԸc6E+b_yÞWF "5@ Š/!aBʸcJ >bx0H(^P2< Alq`Gh"辆As\;bV *m(*?kY| |<ÖOiC+W,;ZD孤 ݐ!&kJ..̔|7Nx+ IlC!x9E {=hV;O>,rX4),J2oB#F̓E[ҾXq*2*v%]~_0ԉ.!@|,cAD\%~khK jkQ,D ~#/ 9Ph*װʀ7Pan`FzCЂk}YHkx3":xBቿ ?njd-9_NLJ/r%!O v%)pC6҈>!kysԞ6^M&aōԠ+A$E ,<"2$g6]Ys%3G^8L+ʞ4+ߓ%2G"˨Tz%d>D@z2̀>!+\FB +HPJ#'h~^m#)gJ=g`khyP#Z9omxc ܇AE$*i1 &M9D_ Y4U} B$DOeօ$^%|=ei@ "2 + n0)KX!;HBh [B ؍.p+s`BZq?t%3NBD%o4UqlnL H-LA'6tMiƔa )l%> -pC(y +p73e~ 1AJfk}c7ˠd5kp#xXDC_=R&qeT )o% +;/%2E) B0z$ +pFOɘuaHY/!0RӰd0Eyb?lW.m1 wĨNQfk#mkdirfsudc)N] iigӬt,zk=sxW3_CVpYY|PS)t+K)zDN3w}}wgs{ ?H$"pzP;R:/~[O'mx˾Y>qWnF- Np=7.G+G?,{F]?D"ؿT/'aǼ!7mQfz +pG n>a#kkz?'g~}=9LOuG/K/oЊmx#toucX=㷳;c',Pn@]%wƸݓ'};[]pAx׬VRT/ft3u:?&g$冊fELtc`Q>QAg`gt |_,%1ݛ9( nY_¬(|= +쾱1T:AY2n eE~weJy\\, K"܆S<쩤& +77CX"i }<:LM׶B֜ ͟kSbBE+# #G5!?lR"n+]{:iZqGGϟJ`xK@vٗV&<|fczկ9NO,/ܸ-v,"ү(O~P2r} E O sJ\ T)0Ǔ}{av>_)`lt2ܾX+z{u@ @C`Q׊~/&l _и,pi*/i8Qhe |z7-"̫ g-yIu25aQ0ֻǺLm]1z=QوzA`Ia>uq cA/Ha+l,zc- ;puވJLk.J +_֪i4 !A p?[Obȝ>s;`"q|r`Vx+Ky&>PѠvg8[%8BǖܣbOvb7nԎ>#}JTroJ3-Ļ{ ΫGpJ#^66 {b׎gk[L@)a$M7X@qV8fGB +op[+]O`~pZyq/S>pS˧b[\8nuO4-tHxbwjox7B!"7VH$_ +9!lR<8\mT {:.){nqfjX۔J&koN8:*&ۣf_cXrx b-͍LvP2YGm;FKswze86uat`j4,CjTjbJ.g G&wb6Oͺ w\6 6u`k}߽7p|,q-;$!cRom,w @ȹG/R=Au~Er5~6qmӛ6 !F/ˋ1ZK8C`(F"BI\&% 3T]@;"{cٗ&,Q' ML#DXHY H-\.J8 &rRez/8qE :}^L_Nu!gNDWa尠Q! +p@5I#錀àLۂ(/b&U"3 r3C^Xa69v Ezm)$8fkB|TkKo9/zP)rD`C. 056&DP3\NB|ʻJaos[ҀV&XhG yMԸoTvX h[; +_mWPrhش1!_+O)d.C"||]"nPsniIc|M." Cdu&Ll7_d +m8mK5 5x:.8YC翦T [8hrifͥ_{J0ۉq8嬙T,toLxF"+$JS $wxme#㍆Z)!HoMqT7!~.t(E.PҸ͐йo(НVy)CTuk]}aT;@ @+0A q:1UZ },E8 ޅ$ $A]# ;"J@G֢˚:c`ԡGEXWՙKew y!ǒr'GkqU>4߅XDy `M% 4AfHM͈6=t UaḪqZhq^v+uCՉ<"[⑰@pK$Z-s!ٵ1誄I_&bi}:idRݞ)jdE厀fP6 -M$w~7[܁s~s@@z6+b5t`lxԘ%@G**87/7O30}04wdFƗa&H2]0h-t@-*O'2"[qKoır aTG)?<ŠQB5YsݼIGE 옲 y 8tB(2윏W +;BC#k mا-+km cwF&hĆҜ+3Gw&+ ʚİPiCmO 4fhy:/ v;aI=TB P +!Nk$ PsZ߭a$\Dv@eEԈ]߄ށւ? yʾ™9V +K5Ԍ( HMI Y 6sS3p*;Q GXqQ1 :xj?Á,{Z#^o5>u@:t)SF ܫXCn9e*.{?*]޽xܭX?pc7p\UEu@zYs`ao֞zQwljFʓ)gݍs +D"WKޡ + +UӇĴA|s"?1 ye@vn[Me =d^SD#= )դ#4~!/p_DwFĤCk bKH9^k-p~ Zaңtkt? NS&.Gw?[8T")laR5;d^qUGҽRƌ# +_Uthk5 cWu|.ҫtBtZŕ7br~53G?ϰZQ{D(mtf@/ZlA`,>i4KOk#AeFv/Ff#3f֋2lO7j:r ;юxSX=)0FF# \)Uȸb"Γ5Q<9\w0~Yu6,)j ]-WYc)-.d]>stream +U>L~ԸNR|Gz!\U2`e֔m&@Xc_*8x_yta: +5 ;}L]I -V XF -BC?e;AYw{Vz <@굸Qge]@ <|aI FLq">CYg#ba -pcTFr-C$^5A˼)d waG+qVv -\zŎ?7~*N8,]1FxdS3.xcH76+Z' ݣeD S\o\Ϲ+&ِr0nFQ4|pلlro -ytb{ Mct -35v!fIlIJƚpQ F5l^ iF_41%r?ӈ4U E1Uh2zl+T;}5&$ hU~2KC(F'%xG*жQ+1%H<^ #Mx4[eHo:E}PeА%p7.#gV"9>X -RzqSa15z!-:`֢ZO 3޼R;e5۪E; UFڥ^#x -3aْ -U zljSd8b7+(Fq-1[c)c j_ =DE N0ɮ}cׁV)x{&~j?f<_l:\rX~:Mc9 [V #8[l'\҅5k˕}Prq$1a\<ć /"؆-J<.,S0 B?`%'M6DeӃ>XC+B䲻KicvĩtNK>%UQx0ÛBr;^.SNpu%?8an'h]#AS=)MR\pd>mWՠf(:'Xwx8< dE턨\%'LQtNV:T[!XQHKX@fyd$.i۷%|lYHZ[&fLs [B.8Pl~iqWRGUt9:}sszwN<"Ħ_Hh42q,mC%\pSKT)Z!x%-6Bn+;@챾jh-3`'Bre/&I[)B $X4VHtkSs5 -'z"'d8e%M!e1fjгP _U6)יVmPLI Iq1Yt+~W :}ۛpn[Z+f.8 967<ה-ѧʉ59}9!A,ƱlTQl<{ RBzI -d^٤٨>m3؂]69+a#&,w4b@荻~Ӯތ^B ,&ыq>K*lQՇ,&S$Wٷ^Lę!*!BNR6ۿNəw4?kb904Ԫ3-v["6u b4:t/mz=\h)0cy{`a+\&*SCcB9EY0e?ZvT<4rr0e t5Ӿ ͸Aʎ٢نj)OE$w|MHrš{15he - )s03]_o(!3Y%Ӏlt7F ìKݐ밊x> )fiI\' VC~Ih͆ 7|ّ)y]^!09Ȇ{Co/PиI26 eO8d: AF;:I%v?:rVuU-㫪EVS;A_m5 YGfoK^P)Ʊz06ӃafXwTfR>we -rhHVkd~P&4[Xy\Uyo -4ʣStRSNsQT* -ᩀ -8/Ow N L敀fOA:|ZX<3SBAe4"ueEP]`U(ѰО> (wʾT> 'èwR xsQDGq,L (I[ljCMLLf(-,f)/$xj-{Ⱥu줲5rX0)GTFm˜)av1I:|@>I^xxA9P"u -@iRo<\8z^ZX\hu =$YZD$5=kB hE 'a=gzRP^$&{j[?MvnxљW 5c1GV"-o"<+30pJU7t+-0QiwI!`|;GgO YW5)a >-@R _Ɛg>KG*H2F%I0Ec^џ CX~7Uk;yt?mbp3PFF(,˴ULaRf1,4*&Ͼēgt -v~}ddžuSb镬?$jKAJQv|ssRRpZ wM)1U8I+ ["pP:-&8Y@9l_Ph.F -'!3$Big h-lIgEEyU1c x}إᙊ]B? Jv_N-N̘DvxJd5-uyVѤ3ҵ5Z\vH_Ӧ߶ՈN:{LKҳh:S<>M+n\7.&"c8"@R}Nsc2~@uFmƪƨòvyʯe|PѦ*oHPuX4wOM>^覆d~egM,_/HP3QW֨YnX %T#S0pCk}kߊ tS#XyH2W nAb4G^A ~/zP]&{BhsdY*3W gr7!ďC&(+_+OSO0^ei1JV^HYNRA᝷0>a #(otY?M1! I4I~F#q䯻ɫiai{Kw$:-@Uű o"Tg?EqHmʈ C5ٞ!`l -]*C JOQJ\Pz}&Onn/! >Q{lE>P_;gƳ}}f'瘎VqR\3VW&'dbDS޻-W,6]`4|zmn(Ntph8~9n:vRktjH>~Ʋ'1 \KKL3sz3\Z.}2l>2h`O4mw<|cH\1b:zOdtQW4#a|ϝdȚq?I1K}\MNYJMaĻ?G<j֣{$q7tQ[}j-RLx]CD9ˋ<&u!wJsX>R/bw|T fJZ!18 1f(..SUYݽ(uSѳܹFHuWtˌ# l>/%6:Op.2{Qr[~ZziZ^zau2 qƇpT^7 Q)\MT頯}^۪4uLK1E秗#ᘣU޻$ET[~jI3SyWSlsnCsCj$4sC]}$3%wOU]N}B@CL96<ͪ_j1硤hcZ:MԯCQ"ǐ <t PMKXZ6#{(0vTgm JWg9Z{=0A™[ߺhtWJ{G6HJ1|Mau ozp(oPo*k [Ԙ&u{ǟ#qv#u3 -A1z'> 9V~͝@ K&8:# k aتHʍt}͵Kzt3`lXBi }`6`RUWOQQ&f2vR nf+c~k6L&!`؃a"hz7)V~qbq$b7L&wnm;T^&<_)5 Av> +psvă1Gò0RƂ)VګU[Ox?0s?/DjRw+Jb)yfq R<J2ؙ^KOIj]/Pݦ*Y0_+*;z<3v.E3!uanͽ4R -߰^!6K)U)ØB}݃_w:0٦_:w_ -K] -Qp:Aayɹ42W2[u9fBj(PUi1T'o6ur"Lt lEqOr5>Wy'>-,w)fS@^Z Jj}pќcy![xNwikxvu8p|It<='*HV&loT"/%^?,}Bnz0U_UM7<ۋ9jz{Zf>K*&J;-AE*W'<5gf^D L9Wk߱OcQ)=n_S;sਉ5Қ8m^ -ޘn2ƪ]ˤVWv$k5>< /AHc67ƒ%/-(f}xƝZЃF ٔU2Ɲ5 aWEe^)ΖGL/7m}G0pII-51S _Ig6~d/esorhHJN I(='1;1{o0*ݴ}.2B%Җ4|N /+U\[&ĿB?wy%BÃ"NONH K3XbԷ OTES -•hKѶm۶mz`~otQ3P]u>m{o?cs0>333O1ݵnf]_3j-a1NϒN~1ZG4kGj;;s{fm'=|תjrK7S[z1h=t\uT3REw=w"rCc7R}ߛջn"kn{V[r3ts;[K{4]mZZvj+|/[15[uvL6۞[[z;r^u~)ZWwb}X_k)f-wޭL)R-Z+ӾJʷն{wڻwj7ƕ^9Μ\sZog{/Z-\Sw1gmlbmR3f{osڊ6y9^\;wZZZNιi5W;1͹~﫷ŕWj6+[;Wk4wӭU[^z׎q\/zmߖfKZ/:׮msJotw:mqtך+i5~ysl3b{_ͼj{{cj/W3g9uz5skf+[mjkg\uo)_{_ZWo}vkuJu^{Vk7n3yWjwՙ_ܩn͜wϻɯLqڽ➭E.bus][sOj綽mVWliͷ[:Ֆkk+]ۍ1vJkwVwy<~9jrk+j7ֳڷVwq׽gk)X5޷j3kޛ9y^]f}5:Wim3:s{7mow^-ʹ6WZn}iַks4˵iu]5ι]g+}kUSk;}yobmo'֜7<]uw;ݕ^m<5j+}w=/_Okb1|q4[w֝M'\>Z[mmƜSuV]w㚹>jֺ;sztk7׺W]ܺ1Kļ9j7;\;qY޽uδrijgUmmw{һVM9w[im;k\ƓzugֻR]Լ˯W)x]{[[qLi6zJsvګ[WqZgSMvƝrvSkvczWLu-Zn53j};kbM_Wcs{RkyW[sg<ʷ:W{9]o~'VW7:iyLw^}o3_mb;b;o\g7|W;R[5ܫWM'[nEv5b-[lTz6cgZӍ'ݸ<;5ޕ;/ϛn둽No9xܫswosq֜כy6;NʧޛkyY]Y{'9ws6qqꩵnl{{ۍ{uOxRigǸ>58۾gy͜yカ:wS|4"JcҍWHo|O' -i*4UClUކIS}}SДZ@6$䌿J۟ͫHRy̪H34n++}NΆEydhڧ.$/ zd_~*keў'Ar[ޗ%aO[&dIڐ_[bO y}.ˣHUyrXH9"oMqJIs6>OYcVEA4o̧ -ξrj!yԬ*̫HBaPQ3T>+n):`SX) -Ш|1ee`QGOԆ7l%! +pƕ7$ Bs\_nIfQ -3o$8?d١2G4)E1&jD yʤBr^_hp=@nZ'gà%5M@k[Ea *lE.52Md0'J E{d .s;8%+lDQ@mXEFwĬtVay1qLʣP5_])'ڶl]gjXcudbey,D`5:cQ~tlBYVsƖOZW'64Z2.!uʠ~Η*"84)kk4TE>hX~(kb.l8$5Y) -rćM ߚ )lCOҔ~ܬJ(2kb"sHudC4FLȆ9`P^YrpE?iWá8!&bCt_!:!%d呔! r<)e@)^,P)=6]K"MP -$3R?&lIhBHGL"xDR!P@5,nx MBBL8$옱*(T&$CJ ̓0fH&=d<."@7c4A$G L "3X$RS >L,S(đ Ї!#@M#`b &(Đ`"&ч Ä$bDD!A1!0p+>`H֐GqzD#zdhH=:=%G#$8RiH0#7tzda +ҜW~dqUլ!>LywZ1|<87Ծ<Ԟl53ۍ-N|9jZuvrwZ{jm_x>Zn{3w3 9wqwo}Kݎ5O˹WsL^zsK/wc5iӋxOM~v+ݳ:;ߋ֎ԯ:;j$Rz3=KwsVgsM'=O|w[wy3n9:rv+߹1w'w㍻=szKbmi{ynwkߴמiL;^s[vm{}w߽秊N)uc:Zgךν͵\[a1ߺb/[k>wb$ܺkͧ[om魺c;Usz^N)=o;{=[3{uSMu֙ם֔3s;m6׬kϚi]sIs枵ݽitz31|cܘꍯsc{qX5kiwg|vb1xӛ8[x^zc]'m+\1)k禘IqM)xroN9}vͳ)֓_~7zn=9XS[}VMޞյc|=SLgn{rkixk1R߳nbK/WYSz9SLON9IƹIovigݛc$uxbk's]s]mX[9Ft[or3ϗ~+ߓnzgvg{^udotbޮu{;kֶKު_^m9w~}9[9͔bK1Y:;ϸb|YoZJkgkb8UOovo̘iƔk-gשs㻳֘XcK7wrlu#YM{l1Rf9W'oҩ35۩3wlNu[gyiNn;u[)F7t潹b$:z[;{Ow{m1=;9xœo}'g;M5ޓ)}M/{ifi{w:I9vn)+ֳrڹzVn1[^9oJ-r/N1c:iyyә<3wj:7ڬ|kw;Tg[SZw=ַ{7o̝sJSMjZz~{ߋ}{nk{ntӛu;'w:{uҪݻZܭ{vviWVjudq޻RK;yZ\+һg:J޳﮳>+NK/rҋ:=Z9Vqw{k5jszwj٫[uX{|okc~ܻg͗{:9ou> -t$eϰ6lCu]e,ke (k,؉>I0 r )e_DS&o~"סc ܏Em }CxZ!wl#mCwXJFNQؔT>eY?+d99aRN!)}¯G-&,J ͪs"kwʤ(/-b-ξ -%e$RT_)y2SFծ>GQI?c9r6ȉc6EiBu[v`eT35E:aSW*Lij&E)}a-u)0ASSGPH~CGL!'P Ԇ y$ Hn *ʠ8B -0uR| E8bOMWSP΋Ae%h^F" -ZyES`W&s~1R -R]]*`ATن%BXNr@5zM+MP \ ey*}C<WkgJZԨ" ϑ'θV`bgXiGf f hgm\ڄ U6č}0 7[Ld4\e/@7R qDsp" 12g"~-n%HY| ?D~O%!Em}< 'eZi,hk"!%mx%m"0nR*辆*Ć), |,Fim8eK0g,J4;#Ax+|Ip) {¢$ed)?iYߧ,h1;dR(OFV%M;bUކ.̔r~QfD sʚRPyyLʠ:-2EgLɈ1:fPM҈b &D(yqGmJ1"uĢH-'`Gjboo[^yI Ta&+XCED!8`NFH,NC9t]LAPgq~[6EP2VnH " ?q~.xDyq̞Av[#*mƁAi IF}a~(t6r0 (A92N"1sWHGXFRH_HQ>O 5y Oqy!:/rlePs;cJۿHVԆ?kYe/Tھ| ,oCs_GY%`CxZvber -9^R&i@jYJi%-pC[2 +5?a#Q腑7aKB2I1C%$OL W%PpG7}AObJ23$ތoDK *i_yÒi& '1"eH 1IFjT%C3Wä/!@&2)fD r4+#At[^lJaU@pYIQe<3+[<+<EúkY+E3RB8`PJ (iHE6\NAv\cO41?mUE28CV?0 AӐCVֲ+l0w ,p]Y*yΦybDz]hp*Jw^W9d5)5UKMVDU:eRږ?ʠ7NU#V5$B¥B !REPYy 63Fk5WFAuZ%']&J QL> ,lcOI0#X ~,BBVU]@ē B4Lh!Emha}&qĜmt53UA4YCC?d=fFKpGmJ1ci$H>jm?qXcNHceHS"X ==mSG"W ؑ9&x.hY01QeʠS 4D&`kkM 0!DGa"wΪD :,Q7[PB#1(笊s"s Ȟ1y.[ I*pD&ah$ -Dev%yFk4YC|FV^19aOiZyάF^؅ kGQ> )l~U;fSdݖ/( -vI/1'A(%q|X"olT$!9*o|TOV9! -u})2G,yr"w̦YDt!Ŭ$;hS  :,$eFP/ -8/X~AXr68X~!;0S6شrX9BwY?YoF'$&"Cƫ)f5 -q:kOB(2D裆'Jʘp_ٸ¯lJƢ&c#,j-ԍ4y!$At\Pް) -t3zc0o>nT8383Ug@d2O#CF2(NYy{bp-g$9;gQdZA"z`ߨ̣Y'цI"edY+oxDyavEE&CD]F~d0v (i?G Z -t5sƢġ<./COA>kW䉺 -Hh9R22h #Ƞ9_'ʢ1%mH 9 -HD -Z%Pn|lyΨX:"`-Cu]  +mRH˷`V"X*y̪ȝ(FOi}ߣF>hOqrlI>mV~](߃f< -0_OΆ0)Vھ\WUa3;h[y"Nl-&!ZUY9J -&a /45 rI&Os%Dx490)k~H)}y_c"qx$C9Z#H7?C7p7vӅ9ksvE]}*rL3y -`3uN1R:!w5*خտgg=jT2(NHBy Ц3IOm8D}خq\㉷-߃V{֮F,B FH"F]9eOODHʢ$aʐD́B -Z)d{تtXŔ3K1e-#Y8)EKH|b/r#.9T#ox#ot0}LocX9"%`ho̯hB]0}TJL]W$$]%%dQRpa*wʤʮkH[ɢFkP g 5VBseI2K%;FN#(gA`PQ+|YUD$7})/})HFH̉<5yM>O[(ä5A7YMd {"wʪț-QƩ 8 8^Nk|!i4TC:dOi41$3,iJA(1`o7&] 1hV^8BH pJH ! B #dn,I:"*GU~6#_iz={/p$%`.ȑ;B*^L,ß  K|U<@xp-@ V3RDXR}BAHYJ;Cވ Gj`2pQɇS9 d+aR π A!"T^0@2B8D/bH"GP*% . +'D - $#@ \{T! 8Ac(Ip@Qh; I!"74 JF==OZ6,!* c QeO CX+H@'NH y=!e a(C~ O_H RTd(K .A@ODe<(a1H Y@b@B,2@jxP4TQ# [43XC1Da *TH/}~%H`!lQ|1c'p.! "`>N  RbdpD1OK쁳9P@2װ%P =+z+;KRJ~d -oH`+b0""@BÐT"D4 xQH!EA$> A0DG$N#+LGPJ58 K0~, -T 2z"V@8a-" jD@<V_ 1H@ GLyq0"+"FPraH y" .m$~H! q%OXX~AL!58(YD"*A -\@Bv{&A1A r~"A@b! 2z*2`%lE '2 o'*G4DkI'SyBep-J:B ޼ DQ~<v5 R-94!AXo,8UJ!0d22^H&pE؁G@H KؒTB!X`K|aXeLx"O+- 0tc.j4C JlΣP*ee .gG-5AH4 QaArZDHLeli#CJ[ƕOÄ7j!JPưV3$"A"c\+O胈-$PB) -q(gٟ#P7b8ȑ4:&A xx"`"N\@aK\KP RՆ;qDxP0`0Ǘ1"!4 -< -o.u82^#)$㶡mp"4,wNwF - /̔Py }ڨ MD @ǖRH^(pF:O#}!hO!E5,'PV0D33.Y8)`:Z -_'mHB"+oh38KF|d2aDlv= 7{℁N1̫PRg#'cGpBF@"$msVg$L@ Lƍ&%BɃF5h-m:dSA# I5]G4TEmF :,R̉2"d{"wԠph+cF|g(+oF7[Y ,(&?C$t*" GָQ̅?gVBRu1MIͪdG7!Br_䉷-ow%CBX ĦZ}ؒV%9dM>gY(캔dPi8L+i\q*~ذOb$JE;JFKa/o鮆9_OF jrԪvƦJ! "H#G;bz14u(` l ˆ8҈a)xs$1؉< F~haH%8w D_c[$b8^O?nX?4_mA(b׀'Qexbed s=Pʈq`lg6I!#s7 @m1O)1($aX[3Q2NkHdU{%naɿ%F8O孼qNႛqhKB%lQ$b`VB"194 RЂU>mV^Lj1"U1 /мaO+DLr@ Š/!aBʸcJ >bx0H^P2 8L#O}Dt_à91+OKFaJ{`ß, {p>!yeqZ/KNm!<Qnpy+)C7Amɚ&i >3%&_B1$heH28adgsž|%ׁ'DM 9,Vؔ -qC}aN7!d#Cq"kpy{c-i_kZ -8?LTIa}殂AxZb -/QDD GX@1 |.?T54%x55]F(vz>ЄqEm(4sVkXcXeq07A vb 0n#!OhA5N`FP>,jAO( "j):zx/Oqŭ16YKbΗ!\ctG}iFxiy]Ic - 4#+/(O`(`WI؃fg`q#5(J d@?! I'GWaF ̑$"ʡ:'a6̑;2ja AQ< 3؁Fj8tG0Šq2 _WqF-Hʙ&305}6àVq4QDƘaLR𦋉/І, }֪> UOY"'޲JB'ܕ-Ɔ8YOÛ*RK2eԟXDBbC63_'6Tբ5 `' :,FI4S -d>hOEae?=b~ B :62N%.K%IY$b +l~?oTC'4bbV0y'k~jzwЦD"W v5z9_O@lY1EA,Ƽ-i L`pV2VPv ܿEʠGvDaq<}ጓFkh1?jUA\89SR*SЉ ],AS1mC -[ mxC  -q܍-F_BLF&+# DD2(55đCH ,j"/AIX)2 *Nr"P\!k=?J[yԧVd̺D,Q]Yc[iX2ZȢ< g;bTjqƚ"͖A E^X#Gؒxr6*"!$AFDQ!B0#U -F"pP1_V"P {d -oވˠghe|RN)4Dž X9D4AdL""mxQ4"kfJ`H1!`At#5Y qœę*% SP'i4AdL>z4 6]EY%k!G?l\גƊg jj@mXe -RlQ=gZ)"i"S$#  ER;D}ftY3rc6L5 _D9:21z^J'ஆ4SB4WBF2GjnL>4!,ʡ8ϙpE!Q]qR0,AFI(T*JUU6[FF*# .15oX"kH*T<ÒQFI|ڨ:_Rnju#2G -r8[QDw])mnC)?TU[+mdBcXYMd 40 bX49h2JAXX`@~PVeF7^ǶϝdzwcbuncfvOxNGz>$z#${Pm9^rBY> gǪWlol(-oںb{X6{?cOPd^h?Xq5ݘQ7ӳT EtG;y>cgeQr-? uFu~zSfM-/[i[Dý]Lռ9Vbo/w6~Ad }<ۋ/iC90}܈Zwh @ŸXx1&ݴQZ/:rC `C {ϰ U=nI<1ݡY )cqFgc^ԦA4 8c̛~ө;ҳwPҫ9]z~ZmQCOq!.L?] ܯ?ۍOSkoL-p' wS:{]Ko+?CCޑ?DoHBzë}qm=k@u^fF]iv_p3g8 -]=E]p`~<{?ti|%迄f`o5g=~Ctc\ק+}o5uX{ݿ(ͱ]b?!zگK/GU/A_ló8{ۍaAm/͟쯇BL/I7힤8ZY*üFڽv1G7S71NNMus/7T6+bJ#ar%T8~"lg@>3}l 1DbPo~ĈTT}ѴCXz:( 3 DY,tG* jf'uK(+"TFdIr0*$s*O=G~%4Qye,aҏu_J_Pcl>:;B(}^Ad =بIaS%R`v^ -caVfBem<=x|Tb_qž7E{=|/3 {- |t2IR_oSУFQT2Y` 2390)7eG',հſv:-Xw'؞L:K0p5D#nw.QlI6sm[Y?5pYL4'Ë'.4ÖE]!HYei&fx@-iXl;-$nៃU0:WjVyU} _vMn҄{1UKgYs@)СniF7elmyc3f˯m2ƥ3C|Q΃E-<+fO^?mաtwN᳍lr>/n#їHM - hllhxHhB75b[- -iL7h%)fI0!@ѿ -IDw40 W(A}  %‡fR㳦:нԣF={YUF%?MN9p4* K!IN)($m{] Z K/g{t2?JFSh̤DfiAEc2-(3C2`)`% +RNC;2DG}i5̮SX>6jEwI\5tG}F>ޜ -`63|<\&p v|lT`wǴƱ{f!m]G=&`4y[}2Xx> OP:̤hL^dg;[-k1 D0p΃&1هux,anV5TRNP4i&.%oQۑVΛ& df+nכ =+ b6C~q^(DLF\Eq'Bv8ern 8zGQ_|{ln0Z~> F@HlaB >/C3W֛iZ*a^m Uk9Oө ]VdfI{쇍ȏ͞!'򡭨r7 _X`ch +(CBxF'N8y,F"Ub?EiQcCVE gY = `| F1|;丐D-u\H]oRlʓ5A dl -u)\,+A 6sl4X߸@9ST'hqCr(!}[|^]B|0NYAor/5U0wD,?c\D>⤦+L s&Aʾ:޳ı;NRxweE]mK+EXJ2Ň{Z>]o[SGbQ>|f-[Q? -owwtRXfn[E ~Sᒲ{h8RIX]js·b%jv* p]ok}HnSN*߶jz7'žWin:NQIք CH0b0Htv},ryBpZ sט(viX@{e BSeA8ݓ9\~e]/o aLj6 $6{T-sgWP']'ݳFz&!l3|"s=5 gh "PWq%!^~t^(Г*L -+-4cGx,RpEK0F^ 3=w-v!Z19kCapMvD]0 S۴};ޤJTx'@nhP%.8F`Le.#HʛEDuM.z EA|T64&W6Fw Pܮ7CyQ)Q<{JƿJ˥m=(bH͌.k5#7^Ϗ:2ַGŇG`f]@f"~3er9 IZ& 9P?^ePiJDNWd.n7Y{( -KXqPp"9%h v4%ۦS6C^*`@"[{0NhGeq)6cJ9,/vBYq585_z DaiӰ 5|nJR*uP[ --^ ?읐a*aߑuB$-hӝnI7bW5BZ*b Q5a7:E \i!8(#ǺwP "5[y`!R{}y֤@qn -1?v̰4ENd'Fa}zD<:THnKr8#s_шۓoO$^.]Tׇf*[L{ O2BPm;^%3_nWSnTKBXdUsB/=;DRy5eYwwBVZ  69QcBOL0!`M-[o+#V[de)}"~xKmfԎe:QH&NOTh4Y8']py_Eұ31W8SǙE#V@<R,# fRXA>Z?5AѤiusW9Ŗc>Qx;T[8aγ.W# W K 1xf*%q -rLiW!UBEOI"jn\ʇcl9dYe`A[+mv6^sp0y#Yܐ9Ÿ23:0gU9ewhk%pgI5d=9hǖ )Bmr|ޑw2ޱ{d H|2KW鬯m~2i.sjVYU ~J\+>stream -"ss|$WB!`[APY2#>7.f]Ѽx!.:j&T 1#\<udU9 :a{_dK,`+yX%w=qBm) Z3o%L5#5x~xcB~npAPξ H9@%KF[g+^!hyPDpwAd 1dES;k cOۂ=LwQ9/Oޚptq4;`P2sŕi>`o$${Y7hO&-# Q[. |v"A_ Jd0#f`J Q|~j2˄EoCO.PN{WZɥ a?AԵrξr@ ~10g>eY,;'rh]U9%VOζ7Puep͓.#$d1F$Λ#:7*qX̞ V0YNLm\D?sϠ+AP ;z$y$cV{R?N E+Hv%cLJ)W@_ y4-Ց!h KaM jg]ō.\Pj_6VYMn912dnHNd f]OH - 6Ֆ#Jsf-]L946q$Aj> LVBaDnӤ*d.#YDI5qt2Y!7e&*g|2aC4Au} [_EkҕP(޿'P=E#~j<95^'g2p;T9nCbWiœm<9ؖcކS -`g#4AW0! @ϡׂ0!7`AlWsan%TwĨNo)W0oGqӿ44+i Fl  %bn.%hx{Yq5UM%hPdU]O 8kD0TodE5Zr‡R -}i*B1mF`=ҵ\3ٜaߴ[gՅK f1`9RzR$DE7IENXNv@H2>V63gO%62~(7@N?W)F%p\XΣw [ӦW&R5)CYc9X2i֮r0nŁwU4mصuW5S%o*Bw(j_Gjh#: FZfS(~?UHq8zA-F|I$' Ei4*W˭֜GĶD][H9(g߅6s pSǮ,ySͫ( mȖ(?Gxo)4)!< 80QWMʧN`;bEW-^2: -/Jq,R"q΃#c$!=qF@)6n3IuUdr -p'iN[(Xb ?;^Onk#\lBvk$қ3Sku! IwU|)iكqb6re$IEYe - ȵяΤj){ QBې ; -*xkگLq&?WA3X &}n=Y f̺ w"=jM* -?Bw] -~ W"~5]6ʘO]۬&s8T$nVl![3hrKkԱ`а -slMTuUhV{!i>BpurMRg{+x;䊚)i-3HO-Z2ȡ&%iϤdFn+s;5.rT7?/|r^ETF'ͦ8yMJ} Jn" -!%N*5E;BKDLjCLs Fڅ;r/ӺH,_u![ڼw > tG4&Zd*T2I(씏-`/KŃ[e8g̺wqwHD@#/| Aq_`3@J@ /eW~u6b H~h#@eI7^ ÁL,pq둉j Κv -ݪYs+" ~q!fGr|tE"^Ζ& :|V0xbQy!'t?U$ #̯AX3ŢmFAoڱ!\U3E}`]m ̑ q3u3[ -jȋЅ6UXt%B$:Hr s0N8ox#U mJbo!+G;-aIѶ C:Rь k0J -$]cpDoOB-jPoaXi5l~A -_S15Sv>n`(;5zE|'g172Ly$P0oģH -14߃x򙪆vcK8*((-ojʤh[)RSbн VvdBԞ[=37Ha/N\(.xMFV6:@,~ -0^6 ;ߌXK!Bte Zxp!$ V($}u s@ǺӘȅ^EAǢeׅ4qA]=V%]FH[^5Dl[~#+Y 6 )nzꪟtL ƼNQ E'-4@5s&W`SnӾy]QTB0x%eg{x6 p닏ة\lB>~%I3yqd4\ RzZC?vϴ8`(B"qgQTKO{/sAİPŏtkSǰ4˖UW fKI]k 5* GU6-w:$x:V *t2Ȥ!:l!0Ǚ}I`"z[qǢTƆ)biAAscJπ.K LDňfe5_촦Ǖ 庛!1ջcu8;#BCgyk[5xe)GV re*B׋DeuAQ -hQsTܯa/ EMOB#+Czɍ%+ N64VTעĿ#T.9Il{6D؈], 3f@Ǟ^s׃:[z XI27f93{2K@\탖v7#^@Ƞ^9ɟaI wn  "zD "ф`@M\c=gЈcgv"z"2u9ɝYj"oBQ[Za#.˶<6d*2ذiOF$ .4h)`٬\NKΠ З$5H3-j* :gQD gI餏z0DHIFr4u -=cD <$c@ %A0Ss8 ;]pjg]j ;fX3&므}4UbX#ԉm -=K-fCAX[mfPCC(? Qeɭ H4% w&2KzG,YQ%%d3a~%b)džmɭsxQ,8K -$YR{T%OLE*j -5 J,8kLV2oԨ+Nd8ȐJ.VڔRHrzGGiq{v#p ! 2&>> mI>n# #{r X! '=>AhɏvGTDۏ8:C?4.0"W|^|{N z)UG @A -!^QrBtkT'h 2c؄P;@>;de>яMر3d^GS:о|=#I M9QTHN -Ie:Y) LB1:6w* :Vb?G^9,+$!f =UCGz!-/fxԒrorNIV"] S}B;l!jl?{~11S,ڭa!@"YB'i~eR;0 !"GWFDZxDRMa8q@V>[ h4~ipG"j=F7D70u%C%73(x(p7EutdUD%V$"'ƍYn;y^$xFR#26<#j;MHHw66,AbiApgsu$ zG ~y5$50 ; ֨% \5]aQH^ ըT5UF7J$2Sc"z1D4$I^A,%mW$7FLrDm 'i~H(n4X!%ƃ)9J4PơB#$^֌ BӼ!&͒/) -k%3tIԜA'/3f%7fi3(Ijb"͘}LN͌*1LÌ*gNq&IԖC52g62IM 'uP%w~ɐ'GA[ΐQ69ј c9D\cI0scH'g:y1D1;RC1I&fcbXX+ -SdZ -{+ :8a?0=c8:Y0TE0f3DB`\;X ~1N^/(]"|^xNT[qd̑^tn^P 0 yx \N] .`a $P9Wt]d;burbqٚ I KD.IEy qX' 8Nz I'' q'I$:H-h-`kQ:%"RF-"Hbi!*hn!Z4O$,ehrP(/SQ -Qc]H)257R,uw(e|aѦJ)Emesr%ҕbخ0BeZ+\ -}%+yx dH vc!GXv,d,7QJdGvE*xweGu`fIi(v8KBLx@1^Jl@qA-ğ'zON{d';-O\SWJˋv_LME!%Q8I rbP}i;-S,es --NZ5E% BRfWWbԢIi?Ԣ f!'`euÉojykF* 8%5Z>PcMt4e3LOX&)DYcb1E8- I˵M%Z@1.hX[b-uYbCj`JDJ,xD%qE)UJ܁?9vFMwkg$o) IGY$C#ܝ%!!v"$V$ >͢SvfkF#wgfq,ɿjF"7KguYP49EWp,HKiַ -ӒZX ZVlA~-2⵶!vKB̌u?`i[6-D-q`Fb6)4bq3#\di2^Y.p -vm+jDJs+X.c+D#[-̈40 Fnf˥RrQ$єGdЈ䢘ƴ0#"SH#6F@5KFGшufPn߯Yo.aUKIQET$iˁ\wAr G 'D+Y"pG/ET#6"!D_A_b!@Eq_BM9!˓ b~!0v]-q&oSٍ)hB`R8FAx0D氃X0).&!LÈ a 0Gb(8uxS@Ĩ%71b #X7Ak1^̥p(c̫r#6&Ljc?lCvo0V |Ƒ[e?f}hd~u!>\M#3m>d"FgY=8"X q!PmeX^2[m/]/ zX3&4;/LA'񀒤4Í̻TeIw3srvd3Y_Gg2t>=:0}fî 6:@>!t Y <JrYDsbSe6 9/Y4X+S%DMDjB ՜X5C\$#W3 khΚހր [sn`k ԇaygP5jC/lVwg6+lr!>Mz~ {&5/Nq6dn5LJ^#6PCihJk8^ CMyK4<͑P%nvNOn{LF gfx4H%oO$ V¶O%݈77$CKdxtNK#1#Qa[ _tj8U Za@ s=} >08Rz1`Ɓ2ϼP$qZ1L g'_ < 9A09)H('@̈́B}]l10]xΜ|kNM(a9֗c\9#K{[XtD- iPJy-T:cBLgv<¥=uDaY9Y(@s;|bu - |D#+̎]e+A;ɊIM+6q'w;4x -2wΔU0U\a&1*p -Fr'T6*[Ꭽ/w8חJRhgL -FIH"p/Oέn)P랢0A -;s0޻Ou, <'IDǿ'Y'0^|( X$}N3}tE .?ʞxfCCKxc .a/ap 's@I{%L?*tYfP”u -L(dcJHTz pːJo@_$P;(7]Q=2T  gR`㐵#A@xMv+<,5m -/GZ˘8ky@[#$ F2* -8$&lFXP+2Dsh".r+FJ{. -zER*n}f3 $yNvV=鰊!}&kF^q׺EQ^bJEX -He*` -‹  -s^~w=‰X]EiDAς%DӮ &(SS!Xh*7Amp>)yTODzνԦ",{T*T:)t["pT -^EHh˺^M3@6LdH%Q@ c@A钡O,<@ ա!R"Wn<"0VK' 2"W1i$szChV1dK(-yA㮐d:VdL[ Drdf˂ -IMXDx:Cq|˭OBWfR̮id._QaT/|ˠB_tR|jL[Q[lA@ ǥ~?D"֍`j]mQU's+JVHJӁpŗDz£ M`*3Qa~hI- ϣ= - ^&iPC& o5T<aS` w&-A- cťBAcvQ&Lx E [&Ӣ/Du ,uM .Dj.j+y$PNrŖ%|2AKd g4!vA] -eݭ< /P$t@OT:ݢU zsBU?{ ^AsAzIBLԶk?Jt uG^# Dͨ䁲t7APԙܠaZ+r-=7^m<"wԖ6؇?6&4,d !ۀ WF_={ʦGRR>F7 ogI`eYFL4 bA c3QcEZ2{==/l\S&ep&pHܲ:'i*w 2J7~ ju eb &`R 0@|OO\ - ;Th-`tûъuE(X TkucLS4/>tJu)ȑ_s5RssEqXo#_ڧ-˦W %C蘭`5P~uXꂁk$cY(:ȾYeBjY[{շ(H -\kب+ƮLC% -2.W ~jC78<_@gy*&$|~)`yÔ%5S:`huCs1%6(3,PmpC= 3R1);A<5 f9 -6CtĎV] MնLp(<MBLyg0C"9[%Vyfy)*D3 uO*?XJDY6"Agת -@(-yd)'Fyt p.qFiķfsx2[ T߬a~oK"f!#L!BNQ?'C 0ΊbF^q9כCr >b- 8}]pF|Ipw?Ј}@~/xEMHX0>Xg |JXR -~Uj?l PĔ pǃ+t C`h#+nM*I5TЅt͐ \ -'\oMr1! ˝9@C0&S,]T槨 -D+,6e&uQ#~l]aP q#FePTO;R6ڳl~^. ~a&ӬձtdJIpQï`N`8IcqAHd;`Yn}Kг dN\ 0t~4$jJ - k -@ΩGp`5D)<3";ĒmD3J 095||.?&>d_P,/v::Y#ޞ>dC? -v[#$d8)ɬEIpQ[.u@G J-AJCA\..>5uP,eQXFQ|طLEz2Exu0>?&girǢ) QzVˢAf+hwT`nf%nDR_\K!Aظ:)=0 Ͽ_T|X7O+jt@ME'z-&/9"UWUa$TZhh&ub'Mfofk%"h@&MڡKJb2+w{|ԏ#g:UTj/卡KEG!11aks\$y"41U:>c3%=/8qב&CK׬4Tbཧ)T9dnJSͷپ[}7cy Կ޿WZ $ ã,hw'!RPY>ŏ%+B --c:?Wך%YUOTc tyulfZ3"ŭzMl]LuO|Өj7˾ƏK囡_ 0mIfF ιbE*/.[>߇FwW$H}w~CS xMĆWKV~vڧGnڳAH®?f**!}04+cIr,OQu6(rߍ6+ѠNo´Ch8$^'e>(/0޻S#v7c7)k">`xy%'p\'ZX/>\BqǎCEߢq[ !}^cW`_QEԬK־he=4l}d!`Jwlzׯw 9>dc7I>,s&"(bC>/JTXml iOh'W9^&zho`>a(&}z t }3'v#ac(1C9].6~}@?_hL/t,;IVF1$ bzc Ju5HlQBZ͂/ޚ|f{Ad8@Y>') _jʟӒhl3ECy#*jOIȲKWB~BM`cO q X."i|$XF9=/9%nע\GݣHgYķ١iBAjYal/r5,m&~=%NWa[6VkT#lK+ @l2M `s8<JҚ,$v?GzkdP]^e!R ' j2.gғ#V3(Aav҈ jO]lBzo]5="-]'r| &dv2P7"3==<1d[7l5I6OЎaoC d>.Z\=eqiW}UAR"de37t/UKnkJ}u)Vgԗ.ɷ 껺:"[Nvzz<#,0=5P2M?J{vu Z)m!$O$2!H t&&NX][&Tro4J*YH ++6u --vj65ܿ`",:+O)'n1%]&^v[GhJ}eC3;+R͂9Q|ɞrxP~aٷ&^bBTA P.i$B?Ļl&#{r[+kR -Elx͎GÓ-ޑ87iAR -=³^B?}ó N (EHvH/wx(i/}9-+o9!G#PuK| KW"'B{aXt7H ,L|!CY9nL~ޭƆ`p{ Jw;J/[)ݎwE0`yKK -\*5_7캻m<,+v?0}*GA?y3"OY]SwjFΈύtOS+*B|ʰH-52g?Jk\*wtGg=rR.{EN< c[멃d YLYppW L"uR܃X?y.'+d /lp479Qu!v5=jau\\O#bKcZKl?j^8aPW^[)w Nއƶfqԯ"҄ĠeGyo:72&Bԑi3hoQnu/nӺsKڙA%ԫ* A9o*F?M`fi*ASiuxfCA݀]ATɽ -wqg$ -Iiٯz:ްjN -#9znHT8f[_Mh>d)iop9MƼk麊U+^f_\B"Jx:>q_t/ iBnFHzN{jH9G'uIѝ."4Tvρ箉hdtCEo\T{]ёG$d(t}5jC f ^;>>PYބEU hg@gJۆF}@&S^Q?pHfy_xR!ceH逜:"91-yhx{0 wyxZ8\9?m޳5{//"0Y/ȿ\mTpp|Gun_`%E(ŬI>{JMeZ/W@%9EP^Ͽ\#}a^Z'SbsH #}q0A A }G36S |Qw|a8Wn7}w.=S*1Wy% R!iab>|@%jI/ \STA̧!s_7Ȁ1ӗ 1O3ļ,2 -1g=(31*ΘcIxuqgC_xqTF$3oz1CgEՓ>bgB0Id̓r'`F-1 -faa#(9a0i-D?Kڂ5#FyVi0v`NIQ9vwy`n0)q7s [TH$a|<|2\d]B27k<%|I1gl@̽kRb,M`{f% oLYSi"TRM0.i]U;rױ1YuW] ̀KӇ.NE:>VqQʲ2#2PSL#Kfw` tMv!*G{ fl( _r7g'/"66ySG&'<ϞiVg%񩎙ApT$⁷$6"R}\-rRwFyDG=Dg9Nr a| GFE%`q8ׁpq`x$.'(cbȃqX7BdF&zq eZ*4=v1BNP\ܳ erۘWYOnP?X$S}$H:ZYy/4W?"sEXBGZ|˽IHRA]F< -ڈ)Q_{dD_rEЋIB~zGtKfe)bwΈiG^_t?KY B 䆫_D*ęF~SÏ%_HgCƌɔ轌ǖU|"|@<.pԫ;h[N"PO{1InLx ٿn@H;fzc")zN񚗑t2ve^taD #5m)NebNq!Ʊ{aԁE"sbEGts>:Ua~Uql73<A4 -,U18fP)ibb/g{!( aU:{Z *UT"X^q~Ǚ߼'ͻ*ME"Rވ@(',ψ|'M!74 "Cd|C{!ؤ`TI#1ʭvs'#zWr:wX<'bN^汨g޳@ {&t0sv-F<xWdвi{`´9x]*]p cAmoED^'8Laޢ4,a!]3r\EG,/UnrO؝Lüu$Qѵkn]Ј6ﱉ;'7bY/ѭCl?}N͍3)sDoKtw(Ex[US1" 5޸dHHWfY 7슔pLSw吆,i n&oC^,fL6[1ҽ-JLhIZ AdFrRۋo=JVYT" _KWdwH&+)\P6ԉP^~fԓlhwp6'T6qv51D?b!BƲ {pmkrH,;dmcV͐/};{®CGBmUPS'p Ӧk"Mһ zqIuFh5(LU-{WA#S ?#⯣.كB7LU%JjFxrGVIb^f{EpfߘNj3fo$,ܗAcel^Ųl @e[?)PO(PY@5Zx OHdkcoߙnl[V!e;ڐ,\lhNM!i 1Sb!ogL$}\tBy,5ugѩ?}Z/cܙׄ=lD!׃X 87$jFcM4WSJ߼HZ9˨N-2`LvFAVD'p\u<XB5C( Qx5CR (uQ藳XBX=b7]l|{ -*Ldv0 %ta&Z,끁nc.pu9}YDU!"N0[(u:XTOX{sMV?w,?f5=IX <_L4=~{ώiXu]YYa: mZm+;[YbA5iQ 0p9Xk҆AROm%*§~5fIk4u@K45OԐ=闒Z>{bhBl(+:ۋQ(Eg]__Q Y3Xh$6 -@"ЛS>KCF&qXOLI/J/Ns6R~|S -C`VoJ[5Q['ܸt<^*8&? hg݌齰x4c:4CEi -dnSQ8qVDUzCP (|p3<"I@GဣݤF%g?P@e PG`QA<"XTN Q9 68aHIeaHa;[0s* *4a *~Buӡ8&-S#TPNv<c|˳]es5%詬 Ou>r> -}1zVXA -A` U8ĚKsV(zid7+ʼYgR -|d椕 -R+cZ/bVL[zۭe lCIRhO>#wGWo0ӨMv^{Ss,6^a~^˜(+Zo^);R_w&Q(JtHFIB+ +H_'=(CuͰ6a7$b0N,=Ht,\ c-́!cywmcmD29߆͗,kZRYš[\R5dr-r@E%cAcgVB`,~8$Y7X~,X Dd1ČEk#:-iktܔUJ+Lۑ`OwZ?8B e&Bڲ>kyN[:`$[%'-y50HgۑF@1jm/Ԧ*7 nE jUnyM٧["R7 {}0BSTMp/2+qo@-& 0Fl@.ኂni cnvRK>jrɶsvї\$ -fBVOeٮ̨Dh jbIJlLyv_aG5-.lHýn>1r/C?!8^4Wb䅨Og{˛ -6/'A7RV=z*#=%+2Q讽C#hBl{gw2J|}o`W}/K2} .?R/3/۞X~` )oIkkH` -`|"` ՘>S(H"S /YjLi4LfojDJ( EN`E|@K @EhJU%|ʍ -琳O2]m͏9(3(A/(+)_%i~XdOӼgd3GM7d>SM=.rnИ QBpF&!XމP|zd{̟!Y>o-)a H~ d )IɽcYM?d cT dSK?fX򤧏7duAR"'|?滤4>/)(*SvxZ> VعӱuA\Y#ɪgGֿ2-ڤnY<'&)*VM0u1T"Nj>U`oD+5 |*(*|OSV~O+aLwS{WSBpBo*'+ 9^QcEa&J.N2R: w4pؘc/c~8^HsaB%c&8Ml=Ԍk_OGo%H|? -O5lUjeVx6Wʄq;ɗk&pQ0QUǦ5$ms|J8M=%MA'lؠ;_$Ik"eԊ-"_壤|(og>w1) oFgasCrZ/1-$cJFYCY䉵́͡xljH>-}%*{:8v^l|CZCw +o(}3MyF-h:WHV[j'D(|x ηJ-UGS}yi}Y;e[^rZPT,TA83M82ToD9jIDGxRFg}!P1#@CP8eF|N7.Hԫ)x!.]td]M8 +7G8bz_l\%$DƏtpQ% ք%TDѾNpvJKՖ +*ܓOMZ2P$"yÿ]*O>ykTv&$U5Q{i]a\Z< =u%\fn)svb<UJq|]Hʒ*ing^jHAa,30_8Ń̀tݘ K4lx:*)$Nd8sk9ϖoq8'`P!P#!QeU[?d揶rB "J̧D +2*ɩxu ՚Y&FMwvAr콫տ  k-t~~"qj'B(Zρ(tVΉհXDmߐ+Ι?7}EL8oʨn!3;$Z?d:!3ŵ)KT:rU9$=뮤L%!R0ZY) ,HH3 #>W#J1)K\Ϡ>[ҴVGC,eߩ_GXM\8os' ~EBbdܒU\bb ̺`=E 0h/-ۏ,柛4QshmrWI.r12(k}-"roO{U_60!4j.~Pp@Xr/ z\}x# dFh-ph!Vu}ul}Pb)Ch8 R%^ޥ *d HwB;Ϥj1=ueՃ%}ž3me+,ѻʯ~d^={"7 3K%tXA#d< -9aj!zQ! O~%\*-Ajve,_[>Y~W)Y.)|Om~71i^z\I9!8hmPN5@mĉnxK@n2o/i)whS8W9V]7ot -RPx 77z:؂ܼUKvOp{E9ZJV_N=USȱX2_j _'2_ @SP3 gOG2`Ne % "hCFf%:"n8#]Zb #)+bnu~̟.w0|*;(G$>UՒJ$Ͽ<B?qU7{TWhsп=$B?%ESZjBU{@Y7Ącu1Ԑ$z>`&9uLA*y<4\u w>a{يex$W?ʲQ*N&p,vJ8KBo$7ĦP1(@T͋)Z ?Q8$|( -I?ʉPA_E5} !jQo멗%$ಎ%`4r}+0`e4Ŗb_8͢R~J(bkL@S"tE]e87sߪ^j2g2#bH(M,OaPGNMH(SQ&@4[l)N~w$H$ ),Zd`uDOճIJ|TRFcӒX[=X+sk6/Pϴrk+A.5ރ)Cm0!_ɜ@93i(Kq&MA&eaV3qyq:d$'} se~=@1 Y͛{(j ]|ѦcU -Ysj=yRttK>ɕ# -IHW_D @WnߏyH">.Y-=.L/ -mp 5 l mW~HW1f~Frq 0'c3 ŢF潢$zF磆c]c])#\V56,-R6&dWonZ .TkDmy6-13s6 DOsRlicYZ/7GܘgGWّoPQ5Qr0z+Ūu<5=n&f\=xKq("R H=z#d3bK?h}@nF$a6?X3SrNXcT$_8r"Qs2IQԔ8ՓQ)&J"BpeT!`cN@װؓ8S^NVG̶OϊRH@RJDi7=2u"j_*7ZnpX$Տx*c&bD~}=<%|pq$A9JۦIfIJFXܮ_>ewъoZ9Zl ~p[lZl08[7#y$#aA$ [͇H{+_,daMؾ$`p@n0"US0S6SV.ru+]qVl)2UpFA=XGHJy󵮆V[ք૘vLZ/+[0 ԫ BD{X;Qiژ;`aW)Ŀ\ODR0=;0IR!i,% -)`Om/ -q?> S-ܤd|,|Mkc<֮ `p@-'% ?@pU+o.$12\W:NH+&dnA{Ĕ^M];)ꐮ^/Uʸ-;t" ACpBPe7F}{]IW jg+vJbqEi>)IآKqW'7i$T=c(d= +@,5h~̱ˌd'-$"C@KJEVAJQ[5?!Z,^[" h!>KN+tmaj/Lhq%l$m܊)ۻeXƾ dz[`x۱d`ebCΖlz <w -*g~d@d>:o?b(Z`U+ xd ވCgM7JXJ qm$l;L<5EA QͿظ^WwZJE0CYkϕGj}G/~ɪ<. ^6;bCOu!a&K#2 &[R#/[roUnao!a#|YY3Y$[":OjXꪗq+ -6TlDsP&B.% QE;AcP2A F -2J?>Y}6T2_~:D~B .B zZR[c׫ q[C|$O3C#3a )s;\Wrw֙u.lĸhsygđV7,@# J 37oZ- P26r4ʘ7+gsX(j.kG& 2;qg/8hk9QW9A_ o]PJ>k3 -2-$԰LPY7Xz3t]͇@6&$-$:hK!]KX2f -AenC8:ʀ`5!8t7!}dI(X߯5۫6G-$w>IXX;y^n.$G, k+$7X~ӞuXb%#̀J7sa6^'2/'f08S)`NPtom򎾡Nr -ὑs|rY,]vq[O}[Z٥]R*06K:ȳ׹sOp8Oa7s5Rj~bI}9{Q0O~Xh$<dz1#{K)uoUQuCWz~֗bw)7.ުϥAÊXQF } +>X٪{Z5L -(;hI7xXWR vx:kjI'~aH&J) eWf=bdI V,g8AmhW -B$J9.fAJq!ο=fͧC(]c_n}1[`F?zXR}6F NQ_ԟbZOS CN(yKMRN3.*`DfJ -MռУð#zɒۛzd$6qw&čc̏GxO"жi'01HEf؂3x/8<䛧r| } -j5k :Ə A u H w mMڇSAU¾)lIU>R"Dd9@GWx)bpԚRBZg)q[Ļ]<:w6R7"l&&[/U"քuK"E: *'wȊ+ k#YӌnlR'4(ha (z 5pt^{~gDkrW0'R:Ԫo<x|S%_^UKϦ e]=fʼn?ҰP G«ui/ xx 0V'k!mb^Z=?>w 뾆D:ҰԓVZ Vym `<1rYN%х7$<Ն~vt $}/9?1k R2(2wB(DžW+QxO- # -nHQ᜚Ыߨ:OP2B<)}0_o+}YAs’N..T%^n/pEW910˞yg@ODؑ\&"PQ.RHO` -(_뵶h]J1xϠޘn~$…ʹ vM*xz%Rz5*ȭ/1_,pojU iѳ *gM)fN6< -5@Tc}. 7S#o{+ώp9$8>u YnYHHglƝƮ\(!}*Lu"1cR/`)+je,BJh}^{%WerЧBoz}49Ĩ| J`pX F x EBRR{!D]C| z΋: |^AII8(i\a/JǺw`r2j^Ɋ|L=,Ayب -8ހIrF"i(; "ϖvhq } #O(O3-v~O -_Q)J<[Me] !ma&xT<'{CU@B IiRR޼7sL]HR6Zx`@zn9z\O} -X^}+W&1lghx!WE -\Gr𫞚jF6oI_O}g$Yo.qaaϰ O '80"/)&mh=U@:ѮUU^5"(& -^-F[P^N zje@Y\GZ!%8brƥc>MrJpKĖ"tcũzY:*Y88䀡re!d`X TH1};| 4'e$_Ra$Xc ]GС3Bd`E^9;V](n -403k$|IQ{ +Tj@Ҭg&Ar d ȶ\j}.^ -jYuca>o svB7KKDh|Wb|7AbN(Id5{hXyۑl@Ou*Bg)4kgEHI>Jh rQ=8(,Tzojگƒ=rz -GڝКLM{@Ugހ+>YvCS#J߬ 3i'F࣢Ϥio`Q-50p;)4_0-!4;e&n*Ev 'zcoH4e%r '"W  > NzlkcЅ aIP5uh餂fNfkUIkO|p~Oͯ/KA(%RwBiýN 8.YWl2FX"lΦ$[wσۯj)"j^=@(; ]W@NC xRZ]=+ޕ*: -9kBI)|ƒOed,~UWc_POبDGkR~sKu0'0r0X] ͡ -Io}VKjh֜#C}-9COd*wJZ 2d +!֜PbGH EP$BDGRʨ ȔÄG/XCnQ HOO;:I+ zJrOJm}VDx'/QZV{sQ>NES?%`{,UV-Irh.QGV --8(رp q@{T^E p -8E0HeރXF߭c9H!|ooT\vTnnTRzOJ>q,dȽ2$ɦ.S|:`Dh1iX}clL7Mz P5sAvml-W) PF}  qĠ2mŸ0#/buVlQ1VplˋΧaqB{$̀vHz%S]z8<<ʮE(26 -dY #y>_'[4:&8SW܂ߠ. \ ?CG6> p 2PŘ: I’Wܠ>eyP]~Baz]W 0V~7^LMQ=qi0BBdaGqzӨ:/.*uD"/,ߤ!) >W3 ϗ҉0Rpx7/]Jn?3r@WLL=4hX6qs%I2 }6Zˀ3Jm82v` 1$#>R ^`%ʎ~E_A ?'7`p>?.ο7~?Ђ!:_Q1姨DQЛxd/YA#z[5=[Ɲ {09fHq D3P+f!85S?$\ O3B $ȯǛ -wS@NÁOR~]aЯr| Ϗ|#30?8_to> n t*X^yroVr/uUr|BOyOV`a }VO5nv{͵[50u HCQpYdBeԗ>2:SW Z_F?np;G59AF7 -^|>Kί6?&|ogP~ki(peDRU %"=g?6.r^R (1ƥ"'k -Y1VUOd*ŸFt |;.v72Cӂ>R3EB-rZ{+hjWPVl4h6v/,h#^9s[qἊDy3XFM9Oҋg:k^r>ø=. 4' <҅2;wNeؖi݂Wfia{mKjL9 [.AsU:4J8M^+&siĸ3P,41C&p9du ^$pH~SYj4WZX CV8;y7l -T%4y=|y[z KdT*3H1LC"s,#*$ZiO^^PF*m]3qA,Qgh̥h9 D8o PA&1.G?Zшc5м(;3@ޙjGrQ7,f؉F-|e a=JWIK DBӫ$uӆ#Q1ûg/]y# f8R(>c]_ޠt_p?80.,1rVD]_q_R;N"A4P5/CXm@~-riJ}@z-ܘ1l]o 'n@GPAQrkeax0ۦpN2׊{]pC| BSK:$*"xT&NDJԕݵ0'r.gZ}/ZG/se|en˂gVDÉBN6Ԭ'V}[ͤ2 .7uZ-3*jN;M@~1i7R,P R3q'I|2_+_-(  ^Vе0yl\Ń RuLLrŹA7sq*>`5"iZOLοݥXXݶ0X1l-뽉,wǪ+Ȥa$x̥\7 |'/ U޾oq5poc8wv_oM QF6sv%YPS‘_*bRK~e27F,ueuBN_;n} V?ǒOG0Jh;fTNDkXLA -2n5v[BBw."#p(x*4?J`̓`qj#ą8H @ǑNg -?4o9KfqO) ^s˃4Ш840mw4<+#dKQr0 3@+rcJ"v@1owʚWA\ztM;*mH=x5c}&ǻݚ>GhyK+b8D0 SPԝNͿ 'pΉJ(Juq[ C ]Bi$ESɗ4r: ߛ!:E$ҽ=*jdvK\^6y -۽kUłg@{Yo0iZ;wx8Oe6Uo+ K 6} PoavDx)lXu#7b!81')6 -Eۻ{9H0UJ[B7Z~u E"@Fs(lB8{F7swJu(d${ UsnKr>F]5 [GxŘAwCF@Gh`Db?n`ASUN0ׁal -퐃[ŸoF㹺to풷fwoBnyzN.C膯_n}\ }u޵1wP9;yy]BvgxWwm™ÛZ/i u5]NAaZ9wL`[7Vt"oEA9~RO yC0M"~cx:xO%(Db㲖`-",tdiOki̙;g'sO9_?6ۅf1)1j0ZCq6*5ćF.|j5 -u(KyH>Љ“O/ =ƹ[:\<TUYS04DZ?٧H7r_ 8*nDŽ2w:1um}1.,0o-̅RFg)(Aorp{}H13^HeB2Mް(;Zm5Ž8ly؆ۂiղ1TQ`Q#X +D\/0q?H;0+4ԋF tX*ɻ]/ _PQpcUȕc_ >= G@U=dfЂ$T)#'3 7tVpl>cE˵kC>j{Iclyju-cf$A}!5TOdmTjhl2ZX+v_J寭bءVvn77ƐBAXK=Q{3~JHo0 m 35RD$uŻg8:wN~ѦbBZc-a[ͤ0nE "hDb97W1<^(zPT;2F!yD8;&?KgiQK~QPτĒilU¼(cUMyW@Ŕ}HPV xޕ[Vq Dyt& mԓкh=$:BkK0; +BYP!V8(Bno]k]Y(V߰aO`G b p>Vy -F:vi) "53䳆RJ/@x3uvM:G_ K@IdnCxjۢ~JB=I_ݤrE`#)-6TOzʈEdu+⎢ݼ-Ȭ.ɼZ Cۇ|.|j8{ -I !wvޅvs4pvMf ݳs=QrSh77 LH NV'k o#7TPC.G[Ǭl ` JO'>x[hݤ3nXsH&îA} H08G, -6(wd.LK̓Cq - "%AoFj} ߂Rӧjp!о+BŚ[BG[sgBfz- JF$7/h}0PvKuD -E -lXgT -]EN| ;#x]t6mcmsl:ܘ-nD~ - *I%N f#UĺX,whߏgQ@ON`zù4UUq)Wa+'6P(NqZ/kuTD|$0lJ|IVfCp_50[k&QA?% #Ddjqwv"}Hdo!mh %Y[h+8TID|ÐM/ӟh- -A*NLB]b< ĜQXZBjZaR2''' aMĎƚƘȜ&$MH0& lBX#% cMGNNeJGHLHbGNȖƚ˜$L ɭ@  M $)e5QXд$$AYR1&0 bIGIeNNGIIKJGHbŽČޠ$ YA Yb%H:K 6́}֬<5-IXBBZ4a鈂X22#2%% Gc`IcM`9H sxJJn)da<5r6C*o#a 9 qv:#(u +FuPyȎgP,U9LI[0Hbc Cr3K V,': Q Vowh,3dqi%.{As{"dJعG.VGjM"66;^SޙW\Uxդ R0Ty[ +<Ai +`fyE c>A,t~kr5'nKh.(L Nia#0R, OSMQ\3CQQQ/]GO,MV +mZYS,5z#XT[ג$w(;HQ0K?e)!XUٞ ֙/]mꌋDV-/^7kMV͑"q+NÒF: +"$r`Z1q3E&j|- :xY +S4jpd;cph*me%/n}0m"2V+UJ96VwɝLvq܎HVޘi VL;IґMyPʼCP7bC#AMn :p039:#޺B 02{%OjD0>W^Ws8"]m-jm|E3F/GʩEI=c|,#wq- N$O@mcxXj>*)&d+_2K,tE6=q[S]2?oԲ|wFgW׵!LV>{rޞJ -IPcQp8+) tNDA"M(oYVBPNˮw, +]"N!ڈ +:N>Z/P\EG2t&W_;LA:Ih!8sW<}sC5][zF w:SRcK)3.1p%S<6$^6yP u1fkw93vպ.QƭH~¹fqhB_KY.~ɡ;/X,uPG ++ȁ8ܑv[H'Y +ViMpq[Am#\LoY#=E/`vm}> L4ry?g](tM۵**E,?@6ElRzY.z}iW@(Tv_e(?~мD?$c'Ao7% Р#{<5+EJg!wU ٢qI &LtDK@$<'< 8~NZnnIGy|hްz\uVjm;N$_bA<#T+$NlWDti> .a@0doZ]^T(͇Z'Ix"eH=teoeas6;ǡGfj9kb%wGihbAʈ ɱW/iF)N)+[b72yMƈQEdP@l5O쎼.yNŦ7|>>E4saP3/o.G 6*}e7|H=RB |lz{l Z3_-;dkņؙW!%Ușw?TݳK%G5.l)葀K<3C3B`G kl|~غjI$D$8{{W)I" % JN0sI۶2 1xHFseh(WKKt qpOC f[o}@QA#$*[O1,2Ao뽞('*SdLzHqq1QʺiH3UvSPY(T%jIQ xK75,vz^-y1[񅌮%ͮ¢ u cѪkAվEVP '>T9#wk2 -nٶCG R +UoB V0}sdG8T9VzB漝dO:/vሃGQi7?(&5uXUᑃlƭbr3^]h +n/+sS#jdOdԄQx=v$,@D>"b{R$^Awڴo-lfsib +,$~~nfVA'Kyv?U `lA/869IukK'`2\sG[ s63}[0֕>-%`yRA J!ۋ1͞niy9W69U7DzhxwYj!:Gh>GC  -jЍ~7-S8uy9=1=)ΤIK!Т 昩惸]-_ПQuV x J@ ͜ch+BEwWG\r l{ɻmh#ofGA]|u͉/TsOoO0@Mj\_Eerh?/5&";D"Dž^g:>F\'>ѩ@9LEs]tCItmHUXh.2Z+M0AС&x"kXc[vHhwTˢx4{t"$)BjƥKaʡiꈍ z=R3l _ xTג`7)KRpop@OXb^G(On{gS5~$:)LݤK"7FO>[ }rğB"F4:>gʦ8%;n&(-hkֹuu}J]-95'yY UL<@ʦ{a˳S-r}rc +TY-$/#\ e9"ws N*5DuPA:9;zCtEx_CpR=HiaN= 'wRb1IJ^EBS"_+J S@}hA Dai|O8֝MBìE4 mBL2V[|4@%-NXpq!<%a 'x1u!$-P1lxN /H,GRz1O#qE G/\,&DF$~gLO#D +I߃BH04@HF$*lAj#$#O`4ЊbNe %=r1r#dh#uĝPKG,d!Eʐ#[8ۖq_Fo64C$o3Ʈ.3*5X53H"4/h'#Hct4bԚF04#Qct|jr)to?"q kL@ڶ` 7bxr;R4 4HKjclÎO#C'uy@^DIP[A4\!X6C16:Iy8C9P@![v_qa`u#z1iSgQ[*nB¿ԅH0wBǖU~Ԋh?@&v!9!j:`A.?4nwp G;!}riD{V%mJG};A p>AZԦA5zdC;pHqpߣcE{1rBhI{A(gA҃:&Pszpߔ;3)4uاDTH֝Dt0S: Q\ctL: :&h?G tjs`K9`VHt6ȄV!1D r{!/"x\$9D0&$8Bšr-r8BvLA`ʾC=hUdivYlƨqvCa=d*lă4k]3"rk! +H-]h,wYpT5P.ZB1p@w4h,RoԕbJdD '"n)׍S9WscXX7Zd=Qn.rml{nII)he$1[6P4o a#YnDe 2esDظՑ 6^y׀GI~$204FDuwNb K!yj;$FPC5)Hd(H֡,$8$: DnӸڒ\dud; IB) dv ${A]4d,(Jфd[2hx% Xg|n%w-Zg\% DLKnތ8QDf&tt4153:(Qd3fOΤ[:9/)4Iv&y[j,˸]+dMeo\)c7It&#e*N;""CFyr1Az鿙ɉ1~ 5Ljh:,D8H'ur1~1"N";bIrL e#3İN(XA|;I6m'Wuua̅{0 +I'cxt`b` '։@;|G'b79~Qcj_,)q^x03:G@E!ݼ3'pY"l;bxA]9.`Ch$vs.tх/ȶŞurqG'5,D.kVEN o|'z vǓ?'Gk1'l IR?Q-Vkk"y@Q$JP[%x"Ŝi!^\FHO,>#ʑz]u@bQb?SRȦ CSHd,H/)՝P¢*𤢥x^J¿Ɣ辂L+^r+ʟD,Ev8OA?~RPi+C%Z^Tr +HeЬD)SyʳP鯍T*Ə+ +X\ZtfVɓ*Uer4zӲxii&M,D11-"L ^N-@xJD\[b&Dː-:,1%b0h%LJl1S®EBJj@Ob9&0Y$Q$~j$` ΒӐp,GKN6:hf5yn;}\Ԟs5Yd3]_#ifwt͒F; (hmaiI>O-RւGZg`E`nE@[$I׌TȌȰ[p[f͈!\ȘZqψqҸ$3#\t2WZX.ܰ\ +ш)X6ȵ+jD-,Y6fD*C#@tU˥)H+ˈ¹,4"eXm=he\ш)V#\g%T#rIcш:3b(,Cx7a&%_ß ̕(JX"Pe.T@E ]GQy1DyX"XБEQ#_Q2"//8k8܅B\@#3m>d@/ 0'3=8BX !0eFãvA[_34;^AO1tkFI6w0'rv'0pgRZGrdt>}OCu1o$4vK jtv!t 3R 9h Jrx4q4IY=6 or-ih+mDM d X X5B\j<WsknΚ8ր [tn9 <'oyfP5j+ B.lVwf6W!ph.&5/Aq6X;h#n5WmJ/^#GNmiwk9V MyI4<͙%n>Lnғ{p F gfx4Ē&oOXޤ VGP$݈7$CKd;N1<#QPf-nj8V Za@ s=k~ 708}1j}2ϬP$Z4!l >N_^ 9!19PN^^Ʉ v]xrp1.ΜsלM(XC9ݗc.49JIy[:t-}] Pʼt^Bcs~TStm7*gS8;8 +MAKa[)4@I/O5TGau!Pם0HA +;Bػ9(xOY <POxJDǧ'<%N %sF&|?i6$"yv)hy%c5G*w<ʆtGMzY=|D,Ufng&0m5H=gLaP9⣨@g\i>GY&0Op^TxhXX%pjf(ZĽC.9~{fϡ%K8N?c\Xs?s/$'@J?*xL ?P‘It +\#@bcjH8SːJ7OX$P;(7>2T Y fRc{ՠ@xN$5 ,Wu5mY(kWZd1q~07hF`@*yx%&hF&+N?sh"i.FX!{m"R*r}f.3Ë$չ~NvV]i!'j%/r~k"8BR"`)/H%*0Epa[wh @l.x?pwAFhƂEDӮV| SD.0ԟ l)9f*'"=RR@-l*šRZI-;dmL$vc2d '>0w/:uO=,%==U]|;sK%Y̟/ÃU5RU%<uq15b +_ݭ|AW_PIt@OѨtE[ I\Hr9H&`撃07AeNԶZVY?Bxi:zj׏ <}-DPes7QSPYwĐAQô)r}zq;o? +/m0 Д6xM5Yh !? 䍫: s>9VV<2MޤJK}m8#O-i ,0 h@lU=t1A(߅hgWCBNJd@v3=77Tei5Ye4M(H\>uY(%. 2n DTX#bnFKlb KN{غ@|2^8oA'd1-F,'`ƀvՉߊ</jubLϠ T/>%tJu(<ߌs5RséצSqEXf#\_h-MW OKĀ×D蘭@d 2PrӃu@' W4#4}WYer\L'u(%kبN+]YJ$ +B]W ~RTC7rR{@*& |)y&y%`kuiuP cP$6QsJ,PPmcmgR ;AH| nhf9 p7A3C:JY;K<<9@a"j!j"]suEhgZ$`kQxZ\y+'$8st p.؈[j/3HY+Tq3#D^CC z/vQ3QA6eF^q֛@ b \@}]Q+jw?1ըt"L<֪N[[Z+*V5KYp&Hq[S&Hi1V ]Nځҡfum1eϺ)́f#y}9=`6D"=B xahlXte,]lPXPèJPXWi`樀_AXPe" <}ܮW=3༨K( #O͖ۘ<6/ϑ|k AĀߚZFF .4Wo7ʢ|_ bB=BRB + .hcw pqM2LII-03kM_7G5~X ?9QWcf@[i.ռUg:[1^) D(|(p/F^AToL6^8̂6v'γO&0j9@=,qqK1^"YIqOEڵIW7' ʯ.2 "0wEpL4?(1)l3"+ҠSSC?@C&nကu.`xV`7%("̛HC}8cI׊Z}@s#9`)p9㼄1ز 8mJD>iY)|",`6fqǁډ+1g¦a tUd쑝@5Y1B̦X[;5Xb4ƶJ~ GeGP@R+nBZh7ds R@nsr'@xQxլBYNr@m|8}4%Z p4-ЭJ) rY|'sk+0,JG)W83' mQr'GVkzӟ&jX.-$=&)㢚GȵaA;JTc"b%O0QOQ+ gUcEFqb@+XuHɷUPTE_=Otj 6PɄ?GL8?BIJ$M@V#˒O;rmegK:))hQ.yUh*ѝ/ گU.@. +|`Q|Ȥ7@fS=6TYl +^Sxf `}^"f`rӛ~;G)LZu,6K{: $3*t+JRRӲE8k;ny^T }btUֆXpQ|42þd2G)bx C 4\+gb{?#7D` [.F/ƾ1_@~N1q Y-SҾPbԱM-<&ˢ=ź=ʭkUOjK?'Iʲ`?q] +9_A%BUg@Gl){qm.g=0]Lp@4)xTz:a}_2ۣuSE|mX-4?:QgRY"(::M >RIlq_G+aظ551Z_GxǙ U"OS9p~_C+Ů]`&) Uw`rXRP?w$]]k~d;b~g;o>8n5S 5z/u=1b J.5~̕oJ!g´2d5p5?A"C` ~F^{Ai"[ rfM&d>MձCؖ+F̣~Dr8Ҏ' mX<"vC}Czog + >;=F7iߤ!:3-:Xs3_a_|0-ܹ'v%AEv}礷79~-QsX VF#'z{2h˷uّ} +!y2_?̾Ch(sTGѷf AHb&]`~><%#xa8~{hx^bfŢp=U=BXvM}D ɫĴOl|o*|1^Daձ(F4!U#.狔66\i{ Ej 4 T3?^};1{kNam$W=]~qA>%|FSKܩ77S%'^+WS.FNT>%!d7ƈu_ %6.j04DT%dIv2WszN4rd3 q/K": /S57j >3`L`ԗO X-==k{^hH]W~;~MNJwU-t'r"}gcw;B?+ LFGiѐC*{TU,} 9r1S1 }]9yᢓ `pe9ߟm`S6}U(2׾Upd鹗 ,FB\(0zr7k6?m~sޏ^Yh>y5ܠVU 2+ɔ<̣9sјUarr[ ]hMJYc,~n>_wl\ZycF/E J|*]~Et&O`CZhc-% _GY$IԄd^"oS8 į|1qڱ:,@ޘ@?@~PSǏ>LQ~x?WjWug(axaox\Jww1xy3FxzUVJUu\X|6 GM{ʬ$rexs#€+.B 2/Y(LJ)~xS :#{ȼP(e ;`]ho O$FPxTzG ހmDȊ+* h "łw"dɣE jdBơrR/}Z9" +ߣ-hxφ 3ctqw2ezw>VB_m*LwBl9.WB!}=(]߈U/밨 +/ Ysj=w% -6ͨ>A^>MiT!DG>6ҽkg ݵԭQn)m [YQZV-Uq^"r0S3hYxlkk"y:XrX):S2}'M _JD`؇εWVv6Fjܮ1Wv5bGI{D3Mo>^,8 +P(chjnHvax+gi].ѸX)B䀿h"o@<;{'kM:. ux.Я: 46_PZ(RuU`VXi=3Qi` 7E {'b.啊O/`q#q),9]MC-v=׫&Qa\1nď$կ5ϾZrYH,ZraȰ @( gHW%dI-@¹/DVw0 N!a uhKE ] [U_OF >M}?~2Mb2__0ԁZ/w*beC20ʠޜDi9iTPoTq.w t4ac Xry"zmO97x65KdPE t&#+ !DOO7{ AT }PHu=NO뾥P_)whuQpjzP4`qP]7a3KxUНb;۞k4u# + +zPovH?D6?#CTO菮Kp'i)Q>]OxfW7;Fq#R5_'9^o>B5y&xAI#~4RK* +X94+Km:nx5bz;UW"yXC0yz˛|KiٞoCJr@IPwIO+<}ҫ3)7?H!̍_0Z [5d0;{3 Ǎ罣|'g|^p`q-\4@̿1TQ \b~`> "q1 +֨.f)߆3ou] s2=."TfW/{Ռ"Θc'/{{u2EܪȜd0c~7 ٨iQ~B=*A̍쯿VxJ'߇g0b=7Is>0%왖ނ |G\`sm4~SV~sH|2hϢa>jnxcys=2U0`~>'̋1t>z\"C R=I1 g\xg8s,̻59cNY6i2sv晣?oEu UAy;%)9}`V.8̐I:˰Pz92j8B +Ce?6F10-`9jZt?~Ӄ|낮 JhIrЅѩ`,[cSYRZRbjʽD]vHyXd,c0% '\2}v+iYMqF[@|%fmtcU4J11$m3/Y9@DeX5s'8gg ǺbZ/ǾR o'ύv#͍ݗTRxHSWЇqk1 /ЅĀ -mqZҸQDu79^%-1I18!# 0BջwZ37ֆhqݽIۘxB} +Q.?ZS2}4IjF{4vwOVXrZlܫJ$N`A]x +߈N&=2D_vTBmZW +Saؽ|Kw J4s#XaPp?X BAsÅ«|B~Ӷ^HX?3OCbƁdJ*j>m ` +Wm꥝p-J '(a}o$`7F<_"#0qhha(ؽ0$! m|Dmr k~B|*-ìeJ&qY{yǸV*r +)v®CI N%BmNa ONh"M̻AbNzq&mK͡f59FQIU'iXhW/<h@;#-_*w@7LjS; W7+J#& GIbb̖fc:|esځ9^$ĸ/bǩ橗/T(eY 6:@)3)'{.(Y>%zZ&5Zh A + ᰑ?'awS'<: LNa z.qGk{K,Fuo]|HàG3׶[m+[kyaE)bgşNsDej]Р¢uE"r=vjh5\Ck}T`9d]c}ҵ`X/N"kѣ_zdXφt";XQC, k-Ӽ,bM |rv,ࡃ5?N.X2M9:g٤Z%K'\/|,+֤ :s\})iqW?FO:g9W3\XF7gZfQo#֧ذIMK*b=OFXA_caR~9Xrg(X/Ϛq#Xk&˲aܢc5f}GaUnL+X+B5eXV{f*3բs/ EQa,]] .DP?j5H񯇲eVk󯴇w''i[]9/16,+q nSRA@:VK̯|F؍*mTzjD>5u^*,u$\ Tqh+Y +}K]ɀRזsWA5N )&/EFQhz񀂆K-ՎE@R5SF^ja'4`{Fq5u+ʣRs[ܮ % vR-52$Hxe)maaJ-2iIDşSPwgX14.*<֯9n٢Eƥ:1R1ASr0Ex bL?ڳP5FjLci;yM_P6BS4g'[%_?en8 TV2. }<2M[nRr]Tֽ`zO[@È +ʢ{7ad sF*X% O*{Ke S߭)S1hPO( CX-T C?h23U!uSïP [B YJ$#+mxɒEk$nڸ`oz _s?L"[pY HY!_vhr̲N~]hZ<6K퇳KurMrVe~Ckgea@PDNŎ^ޢOIio2ȴv~]ZPS*ЮZn0$«Y 4vK퐩cV ݓ] )c HrPŸw`&v%i4NBmmXV8Afԙce!bl[J>solX)˽rH_ܽIK?uŅ8m\Jq5xQH`ϕ-7P\0lK*`v.R JRcv#A*k0۵WuHӺN8.I5gœ?|n饓M' ;^5 +/b|e'eJ%/鬴`o4^ͣzY^V^ha]~Ķ)`W}/ q7\F)ח& KÈV}K]b .Y)סկϞ}`i'z[5H`š ` ~|iE;дO Չ>s8(0';I 4L:ӈ4""=Cq+ iEx{+|'X5ƅ/R|P@R@U3VI5&;r;P:tǦ;|qaDhIԗP4?rw#OG.7A7R1|.ͷ2uTjЊN̟+%eBu[]AID_#;r9v OIBKs 8Ύk%d[.tCK"P9=LG*%|/6?B Ηlr>t+ 2;_W(]PD7@K2.RvD$,mY/wiD5zP7#t0A̪-P╸ʄtd% MfBs/Gnr'kh9.5(E|+7@|c~J1wPj,JWIZ_j,;V1YS4/#Y̑{@M3tŹTF8uu/G˾g4&i4IH"wԃb@''^+?g|[~K_a71~XR_%)z)gBr| +c|jcrXuVO%5H$Tǫ3<1E-Y]o>GPH;85I49.)`>͟~ t +vG:(OU.E"vthck;WH*ّLj6i~DahD=O"8<;IrƶI +`UJ1| +o-S|? DޕA۠ JfFWGXQɭ}e>6&jAcrCE0&og)BZO@()_?w1?]~'_~g|Y&ܐܰ +rL GĵQPVyb-tsms`1߀'C; ~!}*ByUgqdR+ OHv(bӢawe#brcP[:2i}|Er. $TQYCQ;-A)xy3Ypurҏ53roG{{_mNNԎ#@Z],38h-mޥCE~o>?5EP!O\D=/o~Ͽ??9* ЏcIє븖jC 1X'cl G; 5$ɭ8xu0,xq d4yJzO9/ W-1ĝO؞Azϡl9ˀ8Βf#$ kxF>% Bҏr3TPWQMc}mHi;aze` c $ܱD= 5gxet|$t}Z1Д@`Qf,.iܷ*̷$*/3"d;S}:J#Tk:P`.<1V67[b5 *IG-1*XCQS,vR"."_>ꇔk$V%~ +ڇMKD g 3\ +#eKe{ pP[5LW2!DLZ9RܲIS#bIgeA"ǧ-$LG\}aF3Aľ1|ɲADFœgٻ_PLBV&4C_wvU»`֜Z|Oԁ䁮q]o=]b-OrH},?тU&[&'x-aH iVs 's&n ĭBz\8xF;5A6[BաUnDLĭ٢k\.G!LG3r(O1e }3Ί@eZBhÊDGFuEi&75M}QA<,) }$#]_$71 IZg6 #f{uy("ɬ{?FDXkXk +׃Uc'K !t"k# 5[VK?/Qb[M,lu̜4ѓDD=[X$a{~."7&"k"%`jѕ|vdC,8;DOeIWe>'$Rcǩ4y=jDqRu2Rq-ZۼQ5IX3 LĔ,52>2$ܱHܯLB65edg=Ndf + zUgǘ515,GĔ&mӳQMtLV/"d+IC`<zŘ2чd_O>1<v8pX'kñ.BG#ed$ \g2%e , W>M$L:+V{ͱDb`>ry$qQr;6ak苳aU. ~ĽLF`@_.C|U7HEv6\]4Fjcu<ZM\QdW`qD(YA#},F23#j^px|;8I܆5IЮeҶi~ҾYҮ! 뗀e]"E#[## DΖ xHH$e:Dj!+2uޫhy +: 9Yp1# -06̩+xsTT Ĕ\]%JdW\[5Ao6\/QGP-t0R#`G^|aV5!5*&6vV3LkCz6VdŎeDgZ'6XUJivl2-),XX鐯%8&2tOBjJ_)5ٴ<X|JY7P%)*YSMV3H\e'm% 4r"O|nBT/$6]7dRE3B0OID+1+&Z[2!5 +EeZlM <[lFƨD^m  +W0Yk k X;WIَ`pXsFjoDZ&<% 2G&a%z"7ړV Ly79k4iAhaEne57Y|[#Gps $u_Ѯ򋩵_u< ͎j]z~?)鬣 ɖ˖pU[qvHX_V5uVAČq O[`JEVANZ4U%< %8!&!.C"MtEKxE&I-V@j +鵒)o${O*kϖxӡևeC [-+ KIC@|+yQNjX ~Ђ pQ6Ǫ#-ե {)+mgۀޙ%xd7 XbR5l=6>6iS45M$ΰ8̰n}pDZq6\UmȎ mQڵ-\ɉ6m LVۚеnC]%nքޡ T_f-\BBu[K(ǦfW}mK M@l5k%7} FDn:$\jn큃51'5hnd0ќmY7Yxm\l =Gpqn:tq7E5Z,p,k֚nAWB@SC:o[c`OwVtߪ կ|d-og%+|ÐM/ӟh- +A*N2?uX,wg`I<< ZΖAV9wJ^_aul m2 4"8Ү "DVpu%aQK17v6Pd U$jikOa+vrU]+A@)I\dn LBRpص؎sgpV9m EKE]i#3n Z&09 VCwGXQOF +:aQؿnsRIB|H5޽cwl rK}B"zeI7\U)v+\R; ڨ~c8lu"r|h> D L8.<!.; +۩1g  .@kWԗn90EA . ]%u M Cg(Neَ@ϣ_XAQ@0"N/71m.ߚQVUM0T}O9`})& ǚ1}S[?\4eaԚЗ\[aU+Rtu/J|`w썧Ctdl-$ypXvn#FK4ior.6vL! Dba3n|/+ 8=FMunӬ%շlC.xm58I)48䄒zD!t=R +FjthT = = <(,HF"mw'!x;nILx;vMaX}j_D*mFUe:/QOXlPхcV! K1!p/ZQ:c^^au2]z P NF+scw3-q`.}kHԯ) [iO=i0n7/0&#(GȝuTyz]x;@ۏ\mghLPKG| EP,B*W/r\8yԒ8T^7XZW~W)4p:Ea*p\z%= F2T]01 ſg08 zD@!LRīXW82ʥET" ę؅`+oUΩ = +#cJ58R?I+ H0(,R"+AU+Q Wt ^;wvQ DLt%k.um"TF@ ^k+f{zO=AѥÌ ػ++!WqO.\phT鉧W.WCB+OɒQ7/fXQvZ="z֔idãPTJ5 r-1@>Xoh6^ +NSnS BNv됅tF1 oai@lJ8g= .| ߇AY[G,s <&>1aݯ:_߮𿲬VȲ*W{ܬWrU;:l+} -$.6_Ag@WK +Ǡ$ `"xǹP$ +!!@/;:7P 缨 w*4 *h evXz«jq  +V ++'敬Ǵ?YXTS{ X$\a, l `9zπ1"(n4ӂ?aăi]1eTul^Ms7[-Z@P.EM\ + |C9W[ ݅$Eas87skԷa ޷r)abKt +2CVl1}o>*L:Aˬo fRN/ H3cnaASl֬Rmrۻg 16tkMX˪\"װ~r(rqqc=Yo金7*V,v?@ ]x0oU^N*jkV&(||>G@ X)5 +xڊ(Hv:ܫ~މC5p&c lJbi{z 2L)!:L{?X?5{tԁt /:ݿaʜ gEw"e7壏T<>u!)xjIc_٬͢ XU=lՂT*viBuԻiЂ{K0A `h +\ZA]\TXN TV=e mݪ>Bi6FeGFu,7S}*1BX!Cl<>uɧF$eK7HQl}[ߤ _Uz :'dƦrh^XлepG *3&9 C ?B+6_gh˼|,$G jh׊GHX9謇s3 γZ"c@IК"9ws%[Q=) }ḘcRJ3!|- ϵon|>d!} /_Ijː ?>LJ=/,,)%A *SZ'dHf͡Wu +3`,w3ky#$@A^xNh*79BPBZG$=+"M2hI s%O:@?CϿ)| +;>i;| vD| to̟-MBC\}Ut^؇< N4fsNAI6u!9հpTLxVUO?Z!&q)DU8$|*:G_>IAc|) 3:?({q2忬t#9#tEC6%lG;W"z<`@q$"g 8Yц#cCk=S+/V['^![D!!e>ؑпpr~#xC/;c-8?"^ _~JL242GȼUӳlٰcc$@4ebOQ3\OŠ4#Щ K}74d)e(& :!+/:L7r?]?c~e~O#`:)8,XO"-Mu8ڞXq)Vm%RW%ǧ.$TY:\cTHE:5MRso~U4^C6o3[ +^F%-")$:?rw3+tmr}7'tm>͟k@VoT3/&mM\KU[XGʾ?΀4de GL(QF}S .S +1oxEHe_lxTlt~ocR>̧6wWf@TK>zJxI(ZP RCqa/Gߍ 2xc\*r #lUDb`.o E< lkݬZ@嬵^?.V0jRiZm^X9F.ls8B(y +J=fiӽ|-k"_ 4́,Z6&9|![1+%c72N0܀!n|B+paM$9 e?=eyL4px8Mb}i;W/N#-$Uqs!1tceq9_d.xiyXo:ijZ= 2&1#/ ȯzQXNIV vQoa`߀ + b;cjH9Dw[rY+AÐp +1~I&;c% 1f8s8O[Hs07"3ᠼV1M|x9ƗtHUD@ZMg+ka0N\δ_^(tؗϬ./ ̝X+mYO*7I;e\ +ov0Zf]U$L+(' Hw#9 c~Aun2Y@5fNdWv=Z4Q60L-" u4}%vka-pg1?_w.Va{!8s3nUU.|jDRϙK냱ma b۽c+Z{7X \UWIIXKn^9s#N$_.3}ZikG=pn.\(w(m50/J>#T,jen~TYꮇ˅Vv?T~%`v[-Nt9dSk\DFP<4&ULi#~Q?J'(T?4w+(OکGX q2;#~Iw~ir3Sp9·ȽiQ?>hqi|a~ixJWF- RV^a`B7gROǁW앸1EpƁc5:ŃӛvT8{ kb{yLw5}&nщWHŴp9va7̷;;; NஃYP#.0|- Aۇ:H‹ۧ/!|it7]Cu0W7͋I{{U언2m197[{תk`Ӟ1כwVp<*mDW:m% O?Hߴ!:RF$$o:}C5+pb6N"/d'1S_e.Na`[.{9ZN:!U u!# 5_3~ 3q9gn\RBj,hdl3( iF" 5mHwx7t$gHD%sǻL5O1vm/0"m J@-1vUCBM6f̩ݠ{ %Q`+A`[PP7tt`L>[CZiրēΐk I,y#.pw"P(!+ +=Ț7v_\Qw ~Cv^KY;.vf^9D '^vU̾l|卌o7s;=.D}utL .73 D$FJ-QIFO~;M _]:Ua +zaqΏXlP44^]010&GEJ.jߜݍ2*@}) +OOI՜C4=}_3^WTӓ/5 @ZUI>o_)\`xy45tx]'FX7vTG̭*lb t1[}2p9` +2| NTԓJBGVuܥYоϢ?:H7W*rm-T(si{SV4 0VNDmPE˵^I`T͆ȿrka\FM~JG&I(LE:$ +B$K5(m)JjyWqƩLB]b< ĜQXZBjZaR2''' aMĎƚƘȜ&$MH0& lBX#% cMGNNeJGHLHbGNȖƚ˜$L ɭ@  M $)e5QXд$$AYR1&0 bIGIeNNGIIKJGHbŽČޠ$ YA Yb%H:K 6́}֬<5-IXBBZ4a鈂X22#2%% Gc`IcM`9H sxJJn)da<5r6C*o#a 9 qx&t#(u 2*g\IF=aF"1WI8MaƑZ8h;{ōN#! >{ENω˅4v9 ȩ0d6]/gnQi}*!@^N$`Ģ"rwP"/A l˃2vA1C'n7a e1l Zkpbq>z2?PCg(L:y E}IN~cg?X4pu{5Ů 7Y3@130a+܍FfD FavA7E t}.v"w-onɱAVWZ*iedHy}+p>6<-qWG<qn_ U0ԡP1w& ZnS(ǼQ 0xcҍG2aEQ!٧OQ/^jLM8.kxՐЛAļ%FdwC%n4BOH:X/ a @@ -802,75 +772,93 @@ E t 4.)>! ԥ-qh/5"A<0{(cvuș,qe?c'r, 0C y#::嘅,OY^y-rlaļpS0<F`6- ]6~닷R{xuQ7Jzb54lz5m"qPy`bv,E''[ϚK4rT6 `ܙ^|mlL5&$/|mN#8QH|XNLo#].xfavdazLwj닷~2t7`SY)/1zvmZλ=q. D9 g?~Qn0ݘ ӷ~{6tySG}(߾6F|\(aVW6qy]Mb3xK=.mb?B;vrZ*, /d6'́83m{ G&_mT慃.6lw;MEZs ?j8rzGթ×lHJm8A$q. mic݈kżh9*!,}5sW; U{ˋD #(c8[lL ه0*90іZ"{ #,7cXSg!ntPc.R!x#>` H>zJfIֳrħ~xWV릗kfx w]Z0Cxac^zQbB~; ^U0饏Q -|1o%FPr:MO:t0!Kw"(>w }+sb`5EmnQiuY1A ٝVː?A} E< lkݬR"Ygdc"0\ A ``| bH DAQ -Jߠ@FP G0C?+)Z |rjZu_?l2M=63%7[y90Cl01rd^x#E7h" ;A6 z-aD/)*Ϣ -upl!^|.d|O'}zGGű N19zg?@,xNvaQHTxB?k^$Vxp=o3"?k[1Q(s.Z{훎'rW{>}ğ*m =?kwb$,YV(kBȑW͚scY<텈a˖?+чCI~c:. Wu1Xv?Ȓ|1z#$}F^}~ ͜~0Rwq;|a= -܍3~VfYk>dfp$ l~1_A:l3'q`L=fOr:8OtToJ|]~B}}p{}w) G$/ELn,>nkIft.X[w~EOGu?}~^qّ\Og^xcm.s;O :<趖*f<[?T俼tbӵ'qÈ.zu)j/TߗNOa)l{SG#L5S\G9wwJ *l" yl˱p@]@G9~4xF%- -}CgGTuI)}՗u BmqDkd-Mc:U v)J? <  5)k _\khT#Dߚ;n4QQUyAp4a<^uۇ5|ε'D"Q݀5Lh˂)+(C -T%$336d1063-e4b3-4c2c-bf11-1cab41a000d99172551d9-9ef3-4ed2-bbc1-3f2ea79f1f84 670.25284f846b4-97b6-42d5-897a-4f6e51d87d6483fe3bec4-4b95-4332-9b12-a4179f8af2da5546125237-dd9630ac-5672-464b-bdb9-a8e30fa3deb5e287865f-b4ad-42d4-ac77-1898149a59c43.ml10SVGFilter +|1o%FPr:MO:t0!Kw"(>w }+sb`5EmnQiuY1A ٝVː?A}R2Ygdcadc t A ``| bH DAQ +J +AFTg0;i1⤅`يȎEfkz-3lzv8&sIM7ݲ}E./6'/+JC0X[N"F99*\: j`QqL&CZH)V9Қ\Z UQԳrf+bv,d}D8g+ߜ !UnTb_yX>bMI҈ZCY)yݺ:B'aaȯnY*;"qI=*x!ELW!Ě;G?NG/l:^czQ`u{3Kd?A}30gC%](0 ԏT/V|Wt +o_@8א{X)1"Dt^R2sdi7+ҥ ~;; %]狿%BnQYge>~pNMKG.XydžgF{k97fPM&_=߈/i& epQMoqGFwʂ^GK[>3KV³+,r l>'8wI4X쌆YgGa3| p<'%z<5g(\$Vp=oxߓ?k۟.gv7Q\ԟ7e/^r>wzyb43d߁:$g d}u˷m8;/f՝6f[Xx`?6Ns5l0be'"Gv]AgB9 d_n1|ZoPmS,D<3\YQ>| KGC}x&vY7~w\Yg%Ɏy,7NgܫoПs_ /ëqJyլ?ky-Iͯ3+[ݜ}fd҃6pIYNɟ*M)k>_OhornO@1/ }a# ̋Dn%'K[Z4֝_Q]!{__{+edv$X􆮎9ZRyAvC/4!tIs0:K^fq8e^jRi}" :%|7uHq>=YI3Mu4s4T:>⠂6Н=@o lG}^Ox3]7xQMgdPҢ-\lo|}DU4"W{ C .\6O6o_;elVq/?:O)_z1~]pOra+!}4!Qq%XoA6?Ðsu[5}IwB"ܨn_~z&\merUjrV!Z-T%336d1063-e4b3-4c2c-bf11-1cab41a000d99172551d9-9ef3-4ed2-bbc1-3f2ea79f1f84 670.25284f846b4-97b6-42d5-897a-4f6e51d87d6483fe3bec4-4b95-4332-9b12-a4179f8af2da5546125237-dd9630ac-5672-464b-bdb9-a8e30fa3deb5e287865f-b4ad-42d4-ac77-1898149a59c43.ml10SVGFilter / : -/XMLNode(fxmlnode-nodenam/ArrayeTurbulence;childrenstitchTilesattribute2nodetype(noSvalu; ,numOctav2baseFrequency0.05tresult,1feCompositoperator2(inSourceGraphicinin2object0%xw10wid)AI_Alpha_yheigh/Def ;4fractalNois4GaussianBlustdDevib1feOffseodddSpecularLightfePointL-5000-yz2zspecOustyll-color:whsExponent2(1Constaurface5arithmetlitPai-$ɰs&v@p@`D2 @ #`"$)Br+a ;h 7#?ab/c"<ėO\eVV<_yo(*Ɇ.((2DuTZqBg&O%xtB6 rS #nu.491 ``F-l{'Ylw+ S`v}eP=e9Vjp~e -8.8(rj1F QW7v(iF̀0M?~ Ij>`i WnSs:H ;c K#7aLtD gk;K4"A&VB'{e/_j8Q;0;^CPqz@K$jK,;4ĝM#lG"2lN^x;D>tٛ5,YtM^ޢ[O[^ka+BBKϧK=rc:ݮk?5@_Cׄh$JcxUu]\E߅+QT !U ƧM٩r\S|Ea +ps[lv#0~/tJ 4@_Pz=Vα̈́"vSޕ.G *?*5(pZBgK=T‚ CccC藅m[1MX-r7 $ &| p8 +l9P+H[92XQ'B.q}GPK<&ڡvaYElU>ԉ+S^ %֊T>^+@ȼ 3] 1|V>ʰL\@>LT|m-x/C5l=bBp }/e#dW{)ǯ1"Qvb#Q1B_-ƈ[|3j4?&%ڨA$ `BǸ#,A6mjN a'y^dqi&1T)|ym' q)SA"$JdϾK 'j?7skh*.PhijYbEzuuzWw|$MVHDz˗OR'([<{S&%tz;ɟwBSpd. X==UVZ ڣ:'i3030332Ffwm1+o_omb)ɔ2!"cž{ݚƫ d2YUu [c bӕ(F>+;9~>}]@GTQM>‚D#tg2`HSA<@*j Ht3AtFp&HÃT Bj䂍4yZH(G4*<%=CQRD=ӺE< dɑm{@մ;e>P%=#Z*$Qф=SAA$AH1(bBcv"tr$IS=ShRTT\lEUh\EP +rWA!QB{8:q8ں1QqP5=i"A=$" RS5 rPT=HRPM#CEI"H H45,",XcHô^S` +j@P@DE9D 4)C9 e^]6MXX %*N_w:$`{}pw&DP`Da8Rv*/mn?{\>S*r~g$UsY2Cg/=./\^_Zxm@`2& +$ +z< tU ( <$ʶew7£""dk2 8cecx֖+sMF{-]c}iajL,,,,,,,,,,,`fDy$`b.?We3d;m,k+QX^ʫwqKt9]-l+Q53 c.Q筬۹&xyM[1v-~lھ{Xfmx7Z5M5dDa4c{/;KvoWymkj} c +G웾WNB^wx3˿S[aPL"j Ԡ訨 @OE9PeDY.gJno}cf + ꉠ*f5۩ӅΥ
xKn:<9s7sv̝(o i&Y77YweVe\fg]:ߟ/| ;…m->^[O[^ka+BBKϧK=rc:ݮk?5@_C|`$ +cxUu]\E߅+QTU ƧM٩r\S\ }%ʢ۟Y?X:mXj]f{fdXYDYqgִcV,3Pn-Ek+ؿ{;zd3&*H BY Eh`fafa +fa@2ADD$-F#1qNyF{˛l?<`D $4 q'kirttaf` +(`Me^b2.f4faYRf&LcD0@w'vnNg5ޗ ;gYRBj4 ݬhF WTZ}V<6j(}!m2[AwҌ KUZ?ɔ, /c[F.MW6g_Ăs5_2P^G@F3W"1ZYڡdxsv}; VYfBG G4VL104茗؋?q>E{7ܣuo`u޷[W=H o~ .sP-H[ @WFqb`룩eX)\B3>IN]u"H2(f/Ԁ)Z4}`3jP˂Ƀ5?*>ֿY -xFpWMp;V ZC>"Ŵzhgf'YCu& cR</Gܤ㇍DiȖLzWHVLDs)GjZkL(2(kZh~or/D뚩F$/tY_:7{if єrD-f7?Yc(F"Z UE{҉q+ -jGO=|3U4v zJUts$sד.0: D[&RhClN1kR?P %bǯ)\썁j} - p'`Sx^48C6֭dxi{Sb69[ *s9)C`߀o3r7-s^Fɮo범R%C#J !1s" }"Q6 m^ŮHf#Q6NYȐ.ȇ kV;t1g>%lA-a~ +JgnǹAX{dٰ<Y8xm^Tk.pkDB5fDAW֤Ѐi4/]#A CXr%٘ŵv^\}NH-~] o:H}> APE%"Y@6ӓ-Z @XKt*'%X4+W.`捝7"&hL]Ib._}ٖ1GkT1z}K yg=$5⸲x_( ;m5V6[r W(SB1pN!_;F1c⇰.Q[ٳ`s7#GӳI8MӍ طh0 z0K.#&o28g@EES)Iu"Z~>Էr[K;R-q@\E2N7KrA^ ]8'mrd DEpk.{t<2OymTRWۧU+"7 쪋ԟ 2GCML1Gp#پǁucd1E,GKyG= 'DQp2W?Glo1Lǜz)^NJf^%vR@VqE"|dƼi)UmX(.!z$N!+]ps@>lJ.pP6 PctPd[~BF/)*߱d~G(8gojg$[7`L^]m \5,8'TGzai8 ѿE,|Z*:4 H=GVfRr;to̤3@έ_&@&;HgɁf} -Nƣ><4}ѐ4;@J<+q*]'j7Rj ½Iïs 5~Fw5[!Ps>CZ/tA# _7:#^pe*9IN@H'g'ңQ5酙?MT5i -1cڋ\ǜZE&yqtrn5v51H t4Vh XdhG !T=/?ρ(TG^gO]Hnj0<,cǎ:ŦEaE<B&Q p v6dLZj -I(7u,9\fͣxt 8@(_ .V(̂JFsZ~ܹ+IXkm@!?`v\v8^`2H~hxQ`ta$g=wIS K!Ζ@><{kpgп{C -kRazއdTqݾa(X@> k1HLTE՗L$K63.7dK@@Ũ3ꍨ5y⍏ZGc/ ݫ*ʖHDCL/b\Wӷ^ NIeRL[9c9hhY_{j*-!mI'C/7ͮ]ѴgMK`:8Mg{NJG vCu5#pPѴ/KF-gAЅt"$ۼx~eHtY=- pCF%Y圈 ,cj5+Eoͤɹ3#3ѐ1zӂaպe,ϫ~- u^Qiyv!/6;ݝE7հVXXA>|*87i([@~EC VlH^tPOBX&UƚdDqca+ЁPy0_ Ѻi8LCixAc`[ͧL̞bXd6Ȯ(MɾST; qioKh# qF+iX|)H/6_$ ,Pyô%/-LF -gnoMCtG]HR :4 vR8~lQ9M8[4~6 &!$mʯNtTx__S|v@TM(ȈR su0(I"kg㿦3 Ƒ%/\^,aS)bqF̢ha|)ߋ|T31>/BE&8{vAxjPwfe*DYVCb Nb]&H'MThQz_7/< &&ft~LQR\4 2.ݎ<^$Lsr0*Xj?Nˇ)[oS[-Kܓp>%H?y2<(ֿŭ.LClzqpY76hU-<`AAGjCzĕd"!Uᴪ )i:ZAT5ţnO1TP&pw ?)Yѷ >Vʹ/@>m4}up &³n)Q=PsynǴH5mC|2M=%E8_JL!;gsM^^">;WdIYؽ>Pvg/Z6JO[-; DefIB(bvOAsKu0욯{A.t%p( 4=W`<﷑ -&m|O ,Sx=jVÕb{"QID-_gVǹ^e+9_0Mr>lz.U U>'پ]- 0KN7J7Ղ D$ Z$kݐGRJhJy"%m>Tg:춐`~:"%Zr OqPSmÈƗN &+q2.IG \87FyM Ǭ# s#c&Յ,3eQ=48b %b<[@gCjv]]fOЯ9)d}t'gGz؈H.. $y \#t-˛Ц&_E=stHINtR)!#QŇ8qE<ħ+UĞRLFLY #}&B>X©P0OɌQvw 'EI2nbN7*4a13:V_:-nL !zB0%6w \j~..Eq^_6bwwꪫ.?0|~z<<*E% `$uv5ն8P;mwVjv9L+ٺ9sZOF'cs´YX eIkM7`YZC4liSd]"t\ݯ3JWgz%͗fle4g:kn,I2A¶-uIXv,c{ &tba-ʶ)TQ>zϔZ+m4ie9OyO[g573R3c[-ͷZl>SzbVl)y>QozJ+3֟O|2Jr:^k+/o׫g:iӯky=wooo -ӟ H7YHoڃFՍؠ06!N[Tp&i@mB*\i;Xѹmc[yA7Pet9tӮXٗ<`G?,ðFvpX* B{ h>7'CuY Ձ.Y# -8ݦ=4bxO*:(օL+P&݅\Y$ N^O/FSV6-qzQ>EY9NYosr݊+~3:ׇ eχo~t7]!iNw+Qt_Zk:e(>Lg~_D)ŶF+OG2Nh?P9fkQ~)#vGZ)'5c]@et}N7t;FR9}>k _Nkh6G%1t98MM\93eg:~G -?3ڊEceƇ8QI(4:\?Hit};Q^ձSLо͚"N:S mQkk䉳sjrx _nVT?Ná?NBxm>!F̱)G -OJv?~F'W9ʇ#tkY߾ic\c(OX~jQ狪F̣:"gWV,8‡?R^.>|Gٱyr>zc2X>/0C77oيE2|vl.8kc#/}^vƛʏN _/?Ket78Og+|SNQ?|DGRr>|>t.E䞝V._KBe>UJf,yU]Sy‰w7V fZܗc9_a|>χS|>߯_'y118s~^|V/?#Sp^vpLKMI^u_Qz;2Ϲ+w)RN8jq3靨-)pKV7NNu_JwdUW‰ʟ\Km.mު%)Sޯ}1^VoJ햎g%%S(DANQ-:\v*(ϰzLBtRsgk$:{:Ik7d1ySx)p*OYqřڔSg(IIÝX^aڷ-RI%;W -1ӳ$M^dsNRvC_ï& -*ڲz:;$ueeKͽ :)/v+dI"]N -}nwOSs]esZTu0\zϩҷj YֱD)i -'I;juv):V*cx1pW$ՙߥ})JWz k%emPZ_b8ק(힝rӪ1v uŸnNn*g7wpWVC&VjRҪ\Nʥ3j-1)̒tb}Vnu8c -gL\sEtT%1RPRPOzOZgmh( cjPJCKM -eVWʺCo\VB!ƖՅ[I+|~6YP5鱭9+)-An-WZzOmuNR5tP¸Rdu ,xNmNSh+;KWZrЦ2lS™kUJf kTL5|JsCLםB -ukf)K-)|,ZK_Zl]|?3[|1Ym8W|r~|秹kVKK{,e=*+g,i2ۛ_Q>/?2C.ь&63+љ)9$~dl.KAY9)KcÀDxQ -)$B2"b+XPF4ŢNd(4`ȏ4D#lP 3J&AIfvjLpX0F'# <tOB-rDVZ'WŔsd4rv!#"sԉ̅ʦmQqF'dyblEBʬ2L]W6evE)cOt24 Rິoa+qY5 tq`S 8 ̓Mem7;Ϥ>Ѣ 8hl6e趍(:v-4eXƱE@sk2T&"~AD672"vӝMSBʦ9,IQHdwz<Лˬzh6q"b0l8FҘ8Bӈ{ui~({Q{co=زa='aQ`sȋ L?N}Y;{qo76C"OK<^AaԱx`̢ʦ9D&YKӜ,Աpؼe]dUֶI:MoM\רClZ` m{ -MHYYeӬB<.26=c6,MӤi,Qm6C\4lmMبڮɖ&""M2j}6eSM!"Ux@80+&i"䊜fI"}EN)jҲ9lJ/K84٦, "+nN_Ui2͍:9EN˪MaUe\p'ޗT+XUiQDhDSMV9v6j۶9h4O.޶5KwEKMҚ"m+Qi|4a.A\Q +)ca]Lk+Ik)ݞ- ]m©3P($? e/ē!T['j22 +mnɀHS[&4K ,8Wf`x]U38NC'D~O6g.#yt_$Fj,չj 3uh-x17U ^Ddu^. +,cz)SZ^'M?[uyx$XU4H2iԂGSEp3ve#:'=Ajb~e|g`*vx _QoQ4mƢ{C ,OCG +?% N|2%L{ILuab IGgj QRkJhalHo'e0wo<64TEX`.xC }qPS,n ,$QmPEPN-wh3ڨK]ܤ!iOxgZ313hֹY? Wljbxm PG)Be0o3ÿYvQI/BX`[LΝf9kֹ9"/,6dh$V5͂N{%ڗZ2Y/IHY@մtwdIM +WܒdBZysH5£Ql ZxŚۏH`/ u]P^_YX)f3si 2SH%H9.(0FE|{Ģ0PdQ$| +*E'䄗B'bOd Uy TM4d[ {t[kax Ol㩈5ō41P {OA|1! +4仏lh0j ,{ ܼ^<!D(a^o#QU6e4;S#ȰtjCgǎt|'{ &O_Q1f Ae (KLgܼ>W>ښTQbiwQVy+qGH65\& _fbĮ X2Ƭҵ-LYyh y,TҸ175y L-DDL:Rɢ@M).s e] +?*+eƁPG؎GMs'L\tSLN͆>vCX*}#6 +vVF#G@CQ[Q ˅@U6K+.rB@n{R( -pc-Z@?t{ f4uF+8^cUUG+nΤQv}S5-|lhmY~Dv+w)qT~vŸXS P>*E FcEP ?|1TgoLvD +RD\T^Z/^-?]0'>%0_e6_`~GkB9sʒHa[6H^I" @} )ۖxqа^u'3 R~̏>gy3au2A'Qet@8>?Uf+gXso3PR#Epxʃ~oM/GX|wC,tJ\JȧzM*'TM-nZp/|k_xQlY}O@jЋ-dǰw/Qg߄r&l9w@ +uNj`Y蹞(,p@qL1fxU@=kCiG@S D7um=e F=e`{H_D%C +hCkD +Z༞Mfn)GЇ-D82yl~N3wYצN;:9Đ#rCGqT ^)7HN ޳"(Dr@mݟK?Ss!佁3Ƌ#G:>غT>V.U,5#"tt$J略B#K%>eD+K eʕU*h0Ae72Qb/U¹$o2!XtyW4퟈C;έ]0 Qq U_1yxAkxM]oEs{ZNAM061 ꭯DA S gϰpZX>,+](}HrHqu>nW+fXoE + Y2~\*WiHb2QoII $x2W8{Iy8$=nd|W?ejǭuт8 s'Ck!mJf'}]4J)WDR&EH%Al; f?X>{:BJ#F,)Lq|;j.ÒZ[B%LS`n;G9q C;3)c3=Oڙ]am";R֤R.BP,Ptj¢Ұ%I_s^mI쿟6P +UYKW[2a wޚ~ҝ6ij"Ute2 M|KٛpVSm -ԺMEHjo[-NGU_ؙtWM;)Ȉ2Gv0>HGЩS r_ Q8LL$al}QUf~0ȧ^Χ4Lٮ]&wUooYb\4/5>#ag7'6.k +TakE"i.8U(zɾ;SպU*ռRa~&U7BJ>MmHmoB5 "ZDrpd~xM,N fF7Prl˿ذU(ڋK)eX+x9R3ʧ$`. +Hjx~Lş{>L,]0 +㢁``y +񕚑U/h(yGcJ*\W]yv^H\-#LӮn7v]d)Xadm.-WlO#K_Ցk.I8+,A(7}t!Y)4FMl/w%`hAI!A'{3Hu5w!g+d;>95?; +^C?z"Uqsףxknmj2g#:ę kڠOו B8qV3ʇ52,:EݫFHDd !4QιK-$xIRuz6@ʹ/ssa 9:dGiϜbI 1T 2v0u/2u!RpuȨ-s~6>zSKudHRy/t;>23;xg&;-nqc@<ԁvLVd'4 8 \M;gs K,(rKҶmJ۳.}J +.VQ'Oj6~U&}kH*/έ,TGRqLŨO"QeZ0@+G,k4w[;tUquee/̋,*$O4(XMrASS@T$ V5d6=-M p5dDXGaC@z_tg>f +L+*.AT~&5.wgލL{I-nMo)K pHFYjFLlz68E]vO˧}n~X4|j^ݚ*\ie)-^ksKG#'KJCMU=S4R^ WlYhBm 8 F801r8~%H.&;HOvm@UbK_3q~t YnCh^Ji7^WrӅUqS~u~s +</nS +?G,-*dIGb +; l"RPIn@4{Z7ԟPzj) MS6`YDD;A@̳eUVD uէ$qTy$6N%Ǝ48u; %ttļ{@d,ϤY4V%0n3?\`l WSLJb;AaZNBrŒds't)t8Iϐp~(q$~iX{=6Ӗ}&t]ŧ4ʢB ?)Oɼҫ _!Jo`iyJ߆Cg[gӕyMPi0iir肬LG@#ԾQBJ,TPԘħ͈hF2υ)~ 61Ϥnݘ7^4]Kd:B0%6w \j~..Eq^_6bwwꪫ.?0|s9PooX*8$8$bqM[`*=F>4ic*LFwvG'X&NsBh.k¶ǃٴiB\he":/vګ1 | +e /vڛOömDcㅸVсY'jtbOGO{qsZlS:zy^bn4eHm9"^WO哟Pv:'gѭ8sz}h>Ph|GIwpyYo?t'~*bO6}<C ?\f|q.ct WOQlkYbztP/[+|cvG2bx3F]7oןfgU4C ǭqq#~+[Hsp5c973z|?_%stj3qVhqWڊE4; m} LJ>Zj}4I[c}>}OOks~5_ފepGS?N9..ujmק;x5w'|yY=NrvZG>*);ngo(4mzoN9N)ߘ_W MFqzGJÇeӏژef5mu֩zίNh#Z[k0$$OS+{fjt{W^OevIpks 7bNN?6V~U?;|5?T>)C\+?MEy?oSވ'?_T6eit<+b>wY;@Oώ>ϓ0g~}×ayg_—mysV,öcs]xh3T~pbޏ}Y,7GUOP?Xr2 p8#|8ϔ.|8 t."rZ,3P0cɫJN3̾)J0t|>}>~r>1ϋiÙ#Oh}16SRSW]WANseEu;c +Ω0e̸rz'jK3ܒհMӆSj]>Y땴pt'6WR[K[Fv+r_ U~k[Rc\IޥNڍ:C=Y u^'&_Se\q6JRR(p5;gWuX6vKrRnΕªn ,IS>%PB- +%2 t]6qRsi+|1PW!ŔvS: +f]̢(yT5MԧWjjS)}+Jұ=eTY[:IΗ$(M!L%ef~VuEiVᶓ45vstԕU9Sۭz5)PWO VrR.D%Pk!O!% g4e+Mt)KVV8c*Ot+o5**jz{:մl@F, eW66OSSRZjR(3尺ReݡIO7\~~+cKaBk$L}W?,PӚVҜtݫ[-=AȶMcZTQ(a\Aiv):Y{d"yP[7iiRvyL _vep[ \z>Sfik`Dga#]?C7 -*8ٗ5dY`.36Iwlq=ld +tYOe eUAmItхNQƹ`ރκ`VXDc!lӶ Ӻjs ͙/-pbƬe˦`SXƶumN?\tٲ\\)Y:,tF![0 :ǾPMc!Z&/Ȭvl]u:eؘ<(Š 7Mqmw;cY'{{YT=yY!4I:@@yŝuYllZ`6?y(C2 e_۝2΢֍:^=Nރ ۛ8Lon]ڞGm:MqO]^ymcFyO4q=U#ʺ.X`s}`T fQ%u;d rQq%M7qDp%r;m/M u;d_6@wa@Jh@L?cs`ONg֛'8?jqճ>q;^K4issfIWwo:{;An9,%}|U;e_kK˛of/?/Q>4WzZZJz)rbio^ӱGłrTޙ%Vf{sk7G!,&@`p9-L^*B"6I\\$ňR$N!Y l[$0*(u"CC~\!dU +84! J2ScʀKł1:1-L~2h9&@0P˘b](Xx`Hm*ny&medXA;-e۴q- @mDֱ[m)2-2]@o7 " tltP6aiLB"ƶ/퍲F^X`q˪ f5v({;Խ鷹||_H}=\ZWauܶ + +8{6dP6!6X`VgQ{($ MұlzkF`B8#Y($oۣVhB:(Lo3Ҕ!5Ti*WX~{S9i +%)+IV}%I[* _R+QXjoj)̮lmӔt z(ĹT[+ed!.qZ:%8린NXB*[SUVb W}4ְ& -;)k%JU/uhr_Q+^IZ J9[XmQj'^U`d){~ -o'-AYٟ9WJgv,/Z -֯iWxglE)WTs ˰ll'5%JDa-;=sY?MSRj ]aX'PW+֯)SK!RJZWwKKjIkʖঢ়eӞ$o/v -[U8IKt:ve> -kk>l|yW٩UNzwj])i7PެaUw%m9?oUmV|XPBm -޿iuSiN, -z~ S -'+%{⼩L9ם' -w~ S:6*PaO[k%7jHUBw:́zZ+Lѻ$ JRhi$v5ˮ;'*KNpB,UީʱatktK4çtOjʒutvM+MK^+ch1EZYYZ @6b|ZoUJyp Ry5*sn93U7J %Ho[<<Sz@ H s4B#%/K2p +:tt>3Ҕ!5Ti*W+ݗ;UMjIcX)Ia%'U_IR>{뾒tW/) (vPZ~7fWiUI=O\IP +2P +q8jI muSX',!*}+]YWJ[kXQ֝Xm4(T$adzK +-6jiY"' +r.k:J%ΔZR2e%|gVo9*k ':e+8+-ss|ʶ>VV*3Jʯh֥q Q+/B\Q~I秺'ж;lObJ*aH蘿_aOW +ʯ++Yib%vIOTl۶9q7ŒB8C( +yK*O0 t͔{?7̓OwӜ+^;MӗT-V W ++V|ܫg9eX_%}{RVZ +k 坞9b,)jԮ0S CJQTƕlI甩 C)Y +%k-ď%x5eN2iO÷C +;խ*$ҥtwTvtSsj q~ +zݵt v>E"p܆AplXփ9MT, z>p$pfa@KryDD -=G<  d@< P](י.,CEN!0`9<D84@vE y$c>J7@4HPJ" h ʄrQP[5[N,~DB.H0 -c00 b0! RpX$Uo -endstream endobj 877 0 obj <>stream -8DW ׫{} ,MHe~$|GC?+quI@AnTUa: [dI^}VŽ9r/c gw YqDl?Xƒ-A +2ʇ7Z0תS[f+o5OS'M"ѐ -Yu4 `t:8X(~D6^+8 O^ƠZQz&p~jB -zx8Em`klj۬6&Yu2, ~'= 6Q7Qߩ!X:A҇Ewb9O'>4Gc2Χ>w bsoz5m!Ea~Kp">-Վ>LSt ȆvCI 2G ҖGB1k7YC]g}ˡí= 3W~Ks`ˋ(s'մNظK;r:{.-/ -\q0uh 4UL4'$097R9:q,Ww Gj1h;uvUӠ\&Mj0;|y֊(#Ĥ{ gZ6.dc4|c9=~jИ81s]%eu'F"{lx>EWA,Cj^Es t0? -;<`xa r7$L#Ρb0|bə|8 $Z[whᇂǗY&ZyYl tg2]'^V2UK}8/ -]{*Ԕ4Z -FxX^Ҿ m{+8. ?O7rikY3^bBpj4K$%$ -Uu=RXQd U9(5\ K&KKB ½U[ -g qPl<0NJ9wa( @K4Em~m"Oj _z8M`Kc~%_1RZoKEyaܗyn mIB I\0,\S9R]jg/v#-,|5 $0.퓻T+a$LWƂgJr*EMTˮ.B]#pVoMXxK0i?d]1:.^6Kt -*"tnY;g]f%#r|ʅlŚt Gpf~va19q8pk$ -Ģ\s<(,9\j֡!J''t gkb抵@}RBC8$̟~FIJE\:TՍ>h)Q$z8<9RI|)bf⥤CA30sg.. -A!7EjΪYHiMi$ls۴rj.pT|.gmoкu=xKARX=/͌sx`ɢƸY}.ȕa^l`R$Zs"0L 6vĐ`=)"٪|u9I4Çy=dGΩ0E`7,xf0U_bu䃠oH8V4mmq-no푋z?mir4 a9\yEUe9bzs}Mdk[Z: w)MEWSFF_?3ż+ebÈVX;f3S߫/6fe0[4ArS3׉?o(|m.g8|%ѭ.xV-!iA đ vmdw8V8fL̙KCpm)O=Q鈍ҽ܂cJĦoww&iPB6}~Eϴb -DkyF8!# ׸]h>5B`I)W.t79ޑgSք1JI3۱WQ4;''F]*Ćf&4\瓔' eooV|I^<<3 "XAu. -=׫S?`>{zBZ}f9b*`F9.itv)s Lǟ”DӕŜZe>wW>k`4k?_(hHPsWK;`B+cl`Ifpm-P,AC͛!=Ta-iH)\DRDLB -$Fr'*e>gIģ7yaqS(/SIS1p׺YOre E˜F\Ϩ~FHQk:`ucﻙ[qj^ F;dIi%wlê6mi愳X?e[@X; -ps͜@=>"H XeO`5IYڼ4!7f[T)NRʽMthڴs-=v6' YF# -ùW'9s Â_hgN*~ۄ/mʆ@b ?1 h\Õ]!z=@ ? S bK-v - IZXQu<%3 ]ՇDn91@,ؗukLUo;*5 [V5# i& ᑻ}cٰ|ϒk,x|ɩ"eDn$UKS {痏yśP8rap0)TG\f^8KڎI[MY4.T Aq90xl=>l]j\/"Z boΩހnj2cW\/ϨB/Ms5=`>j  ߩ6"^$~Gx bD^Y076_omwf"Կw \|%^?y@BB_^aCSƋ U3خC31I灔TLWPŏYaACR1E(Mqn6`,I ];:CB;(<w8С -9>|]AmH&^ ->j4_[Ukp&DZh%p&9n4JU - 3"'(}SNQ>Bk+6k'\]ϙ#w%eP-8>L7c :k'ݤ33TTEQ7ѰS z`ߙ.kHOy)S;ҩGAa*ڷ,d L ڎ&`eٯ$* B9ӕƅ¸/G^my;<%k}9yBos@8 3D}*D;eC(=8 wTE3]_->c[%yY$QdEI79YD,t&4vѕ5&l*+P&8i D˽rN CӆeRZR%4aLQdٲUfT&%Z0فNx$>D΢ΘDg&]<gYO&`{C>בA[䆜4γ!<57WYd|CjPMx+F1Wcee3X9IMw&U̴REfbbF$Ib˗^&.A!AZiRj6^2m Ncִ1,3,ch@ajii?ll4W6\zw} U݉Oi3E6VHLAͷEۜz32$9 SfL u-9l&1qsoP*XBIߞi2dC筢8YTƒ6(NJ$tD*d5sC ³Ťv# GgRRH$kcra (7wjwon;#lB˫Zn +dhFM'|^}ۢ4Xc/>@>[@ZelʰTZ$ -OH6XL*jM%4 TwA8Bs"2% 9N e%Y!?mE'V~yDզ@EJxC_Vs)6b.UM %}Ě{oNDmfԿ J -Y%BY-f h0:ڲ)L~]x^z7DG՜SrUO ( _chV3f &߲_n(Lgfv)٣gw:xsG']P$4[jm .Y1sjbd{k IWd `F AZ#{oʳϹyi~,|+nHp _pǬu>܅U\Oj]-[ ^)vkc !@F܊X:3$*'\~Pb -l=dǟڦ'+ -l mBL,bZ --'z"Fސ,mmUak4 ܊FDN`a*S/acI*RZ&Æ4\nJ_U̍HL2eېHN#H<9FDLCݗD1!!LYAFG - -Mz#}dw&YP<#V-!b -@.tTϚ<'l4ǒe4y=K@shMbكqre͎ v8#j:2l(cx'[6se#ZW0򵆄o1 &JeDkʼnz bЩE7!nzKLfQ`Z+AoV4Mqؚ06.篋$6c<3Ak#~]2-;pzBsVT?%#Z:txۮrVkqN{afqBFǢ`󡮦F ;R0; s:kcg}G*G,#.Ũ\daй#xZhCAؔͅ}nJPMsWxkMw%; z!j^`#2_O5|r%>DRUMa\_$]lRxp47].'剎"i"Y-!)=`w{:)w2`7Pƭo:L}%‹[ -]yg`Jrm=6Xǘ|1^LKsIJ˪hA -VXXf[qO͊E~YR1 4;fB~m[l8M,Z_TӔ2Ϣ% 涸{*:A !c.NZ-Y5XWcZlPB,LK1=)D &()SPm$.?*8Z]=CttM[X*uhq_yU3B }0:͋B3KTDޑƚJQYQLeH-̈S(Cg fVRC0` pu }z5 &hsbBvRfH1AZM崆H9$p-$ZaRG k-n vAn(*Ay,GS_|\~nA,iP^"|kf5FO.G,:-I+'˒~):=MQgK1J;uNL -![/ŴJt"{0I*}4uJH -f`DKF)8V>at_ۿ `gSHIjDjx3ECFw)w2~?Wj*<_5vo4mk@WWR>~Ԫ.F_X:"7K6My^9o)('ք7r㸑%Z l)KϏ Dt(ćP'U%d%c6HvL Q7d%v R2 \2hu ,F"9|4pCN%^2/k#qH -t ڲ,PCQpIJ?fZ$16 -wgUnej͐N2{ a Y :jʢD!"aVAGK\u΢ۇ%WxMm-; @3 -axزB0="tгǞ -BHӺ2$t;tE;`!TiȂ94nvsZаU(Ha(&iŴNtMyod+؂t+KaWԻݓD;OF W fdI&hy)qJ,ah cGnvtƔ4L8s_YcojpE8HRRr~#BmcQ@S`=hҌe[L_^iׄ`+RTv3XϲV -:2BDbՆrl0cY^LT!|O9Y@ו*zY8*EzHk3fICrH8m&Js(M.g<eJOȆ^ ydK`\^u%:P#QbGUl'*Fqٯ*4tMɴ {e7zjL]~w;keUJCK [_ӴMg5ow1:m]"fDIbmKYwHdl9V˹B3L#ÜT0!Η -1 ncvgRYTb2\%|rS2C_e Ep/IeKmڗW}H\ːQ] -զ`(, p'bQW_X̀ov5 sV~؆eE ]߃"ΉrVqfP=+L4nմO ւG7d;; -%\"C|U;N>|Źcdf~e$FS -fSj5QMfA2.a7|b -#*` U^xEj%2X(ݍ.9x IKْز -_Wa /IXoPpX*-nDC gװ-?HnwE_X`T@QeaU] #M< i nQ|H=0&1`z_]%@JTTO¥OTC5E*#X W 8X%>[ k`Ⱥ^]Rhg-c'!-$4p4}5t.F2Rρ [/ʘfV͐@ݚ9 n!Df%T/͂}.IpjY4?P$6K_׊L~hD6Gxk-(m"\;У9V5Xm(_"U+3Ǎ@!wOЩN%1 HȈ|eYvq St/:,0,U. mݾ&c(XOrj@$4b$ $KiUg|ڀW9Uʞ`,f[Oxm|]Q*%U@?}8==HGWf`f~FKI&ze)vQ Z8x&F#"Lլ;͘Clj9Kϳj&Y. e@wUWC/r$+JmF̽\#@Wٵ/RsfhUsq U:ph[^f[6轖X(8 P/OLxш~&N"|#.Q=LͶ; :VW| G&0_Hf2:@|{.0w.#[S%r.2x;޷zǐ<*Xщ9Y]O%Αa5jx< -6)j |Q#CStRT^ԅ0xjCN)GzK -JCd$oA}%riJg)-|:3iC2MYh|hT0 VXHi2%#+ M.DC@q>4ޚQ,;5uL?;OA$K\;mHMIZyF Dο>t.t]P#u"8_uwS4pةL$>xX+e" 󶘗WܝaRZN*$ةΉr]\kPЧ%FSYb[PhUG"ZE,vS٭7'NWlJIZZF'8[ u>'mrr__v-h3 - -gZʴn]] gP85F]PT&z,[ll8Al7+$Z Sb3 2^2X$. OsH#Z^j׈ZL+4 ~d#a¸{}uhϪbaa}LJGXh3Ly9Hot!*AE 0$,m> -*t9XL7@v #U;&DdJ I|hm!c3SD9-׆3Y6{Q*i-j?8P]QvJLh'rh-kg)]pA pq3Öi`8M8Ѕ~R #^SHfFjLހW|kE9liEI{pTC=[-II7hQ\0#/fWv*!,?^ZJIb3YE4nJ0#91 l-ÓO -d9.Pa;ԥZhIjԒ3 OH|Dcmѽ@p88Gύ= 9*j-9!# Zix/ea<|芛CapPe8閜m3<.E8 ױȷsOSӠAx#b%ʵsi]B2fO! w џ6FBn#ܹrx12_a0sR -> [Ya\YuЁLGt;&%x9ھdEK;$ -6‡*ŀ8y5~am8˜_"ˈ| WZFI{Oɴ琝:V vghqmQ`!T:4 )ա6bNrtިțDg O(6O4I+*i4YҐC.wk$YҡZ]RSb.q~i0:La&L= n @<߃29&mLp86XyÃi:><ÍrU#>_0PUmpV!1JZIp(ޝ(-tqMNRe2`uZ5ϥF_&!7bT]p# gCCq9*';S#h'ϟhҰ;8pz"rj*$j=.~5I)!&6]?@g㺫 "gr-xD>[8W:tWv!Y^&MDaׁwDβt#aLumZrPu˂9+oNF4g~fGHp'W B )@3B#Sꄚ(g~ dZ -"Z+gŧ2V&SjaȒ2(/DA A - ]N`&4z`fLD( -0ꤝ:5FÔ KF`44g(y @-zEGKr2KrDJ}y1@UbEE)Dlh5Cz л,B@d f1!pمgTbF]f !iF^B6L)HP3Z4 -8L'#U`mQ| zPЀ2 V~ f6V>%<,}TAKء^g&Y4X) dL -jN uaP6( -Y2Mu+e6b`eH+1&U~ӃinFs -?|c3s4')S&%HZ†i4[GM7vo4بF'49E(-wLv*umxB {>f?vŪye9?k ,K@`V5m,+ʹb`(!1dbc( F -fH>cg:Sϣ8_2`V#$0o<]RPV#Jy|9JpۆF'͍Ū!T()c=zle[§BHS/301jh-&d -2pGF 9N`g2wR(DtB7Cpb+rh膄4E_7P, e"RqXӍjhQ S}Nd QS#(O1u`5(2JB n (1qJF8 U858ӌEcTs"hj$,Pˌ&WRSD(h٨"xF (99UF|>bXJTYxq]59Y4*aB„RYlH^#40G1v%~vC?%x$.ˍ #YYKSHS+ 2X)񔟇3xjD0!)x`V,v$.x2L$DhrOuXnS}*25鸧誩'ht@AŠBЭ< ә~: ZU/;4H\ -5fhe $ɱRY`H D GPk 빲$lʹI2lehʊ3`; qc l^ PV($gSlE3O)KNx,C%. *Q(И36 ҦfS|-E.&mR"A[ O@gș@Vt܊8vL d Td=x0b5"F A090G+zqo债mwJ,7N3aYqJ9n&7(U fN LC ZT 3A0a:< (<[hcG4Z  -gFIU DE4FM40 Cj$|j$l; g7mMOh Z쩌6TLe4dE4%|0 HdHΐp=ᵄ -^sb&JȢZd-{JMlJgtx,ngM7 -0Tv kmrT$CxO(1&MPiHz GPz(Mxb=hxˇS@Bbٌ)uK6 %e2 xJ9ALݏH/9I GA)H 9vjNS&(͋UP_A I>X&&Ҙx+5fVZ2.oA%F:=XYBU N$#FЏ& ppb$ h06<E8ފD*C1"")44摲q_DOJE-e|\"齧Wǜx_z1uܲo -W2jOYZك/gN7u;5)U7'IƞJ uCs)2C`e*RdX̔ G:uV!ц8ץ(Mq]A"īQ@M  `xي3RF"(&0( U6׺d30M 1/j^@qzX--!$("w u2 5ڏ*@5GD1o.qJ'My&J)nD\7YMvPh2Xh^6A)YZYhnD*939ւQ؅&͏Q^ĉ1ZfmF,8t| 2xVV*@ M:Lq_EOPBo ZI[8+ɖԽX ` tGlF貘puvu:Oq#! b㺐Me/ס7WLD~\Ǩ8" * Iu)B::O!7S,_@4xPm, >z2  ј b32D_AIc)+sUicH8lLVFF2ᆷTieicDa[M| A(=JI_x"1@/:Se@ۮ bsHxjpH1<0`DИfUD%GPm"N1x 5No^a†?ݾ<:Oyg59&Rx18<s`Z\ |5X4l&O. {%i&ye# BУ)øH,Ff7X86zixq['|q5\vCdp:*Xe0=Ϙa]0@+xP([Jy< D0#2\ʼ QjlN Z#M45N8)лH#y -ѫ 0CΕe4Rw#esKF*_HCy۩c hT|RXL`yþa3Y(1X{"L2p8a@\ن:|ī}\'>gS ye#-^ -lZȆ"&bMdᙹuFCʡDP FA?aV<DBxoEB?CPF$6;# GiLKC A q6 pӐB bW$ԴLޭKAE0ZTm̦~Bd$(Rn35'^0׼Z e3P80n7u_5jϹ.e7;cyU8w_9ok~]m~oͽڎ{˹qy3]1}qݼ֜fKkmuco1s}w[[X~ŀSxkn;___b꭭//~~/~=s^?ߵޮkzsOU^^ru{^ڽ==cڱT^{{|_Yπ;z/`,A?O-bcۯ={\"槾\?_ů矋;_ŽOo]췋{VŚ>3wb^w{~hͷ/ECyֽn{3Uן\wWݳV_w^{Ƽs|ygW/ץ+Wݾ^߸ow[.Z竷ڟ717sg]=4w^~kSמunb|^oγ]qw\ҿ׼zkmjkܭ_kwzcwޘmhslλ.5ǸoZu-cu{EnC;oo3?绽Wnjkﻵ܋6bucm =έݾno>}ߝ?Wn5׽Vou'sv \7>Se2{F& wmg,`εr+Z [pb -n `{mC%-yۛ[un3 G P?8} o? >1{(!UCfĚDipSR$)KP93LI9x8V~xnXc~[)fc=&W Qn4,# ϤE:,P4H}UHFn35gqX|%heb7(T%>;j%tFd'[Cc$4\gd?`pMn)בԂ.WGKI "=Ű|z8BK=FT5f׿|Eތm(D(9-$&(QIb-$;[ڛNok1\Lqv -ء]ct[I$qSpysoxdT3PVjA?37v&e(Yo&x{bZ]ax8ڔv5ss3y2`dKr|t/~ dPZlCFQE/^9?m%V繽ڐEi8_:_0,хL5+ aG+;PuKHp9a-|ECA c!e5#v$"7D$9(/\&mQ*l>"RY9\#7/Ѱz<+Q -_d9W}R!4 *0\ߴpF/7NU0(MOE8h[m~cK, -rMҒP(lQzd]+ŒfgCOk:̺7nd֝3.E㐛Cko+H>C,D?))L*s%!Nl?F|̴2Lh]( Z_wa#cq*[E\(ɑeХ8>җ.$rLvXOe1C1FodPx`%Rly0ys};57/[?RL_@s@Y^V/R-ZqRڙ-RrQetjt -Y"˩f詽5 FAjs4T,b谶+E_ ,BUuXstA*<8_}f5v/H~eE.Ų#VУAr+N6F~\_pWِ-Ҟ߹XWz6U x,hcԨg9WTt2qu[gG7X:S@ {뻙 %ό !P+Y8((PEIضY ϡ8f%`=|U75ҥQ*R(mQhO00H"uxyK M -=^C ^yߘ0C^ЧJxA}e_NP,soxOqWJrĻѮKdozB+dN̆:XN/TM -\I8֙1'yZwm $ub&j/,4U w7.`UDkkKJijSlr)?l>rWxxlt((RځhB]jL-نGgfȿ 'x"gXBt-`"M06mxC"霈r|f^h.&WVOqvr *aF?KP>}x7\l&=f1y - t1'XS2>hCDYo"q6=iϱw`oR\'ߧ&qSyXX)ч&Y{%l-κG5G'?GaÇՑ!'xmޣJRCBp>ѬM;g: j nױC푤{)ޤgZRSE(lI<~W3a1j xMȾ^"] 4Rh'jg&VA~(n4 +Ja)oMȁ 2e>.:ֱ1O!PL+j&nA\E? 8F!O=o#ZV{RFN+JFF -`psqn,]ף/$rx@r. -^5?w7,Ԋ} //#|sP+6|GVѱbמj4Y NH(sB0҅TLA}qI?#@8Ֆlu37j;J3U NGjﳗrw婪Ew -$tN?VF -tYp|PLMa'k F(~ O9 /:v;D'8G@!_U4ĵm- .Ժ;ikbAT%+O*'('G*@ ;ggSա0k̟y6MxrWGD t}~A(=`rI5ǎ.J*Lej`ƭ6()P^h³'9kP3mg9G!;avO#;'4k(a_,GBoAP\(ؽt-j>h0$X3KwOWDci$1$(@lFN"|/\R -Yz= {ohV,xuqcp7/4%_~]M* -Agf&֤gFbH?kRgVDX,M 8ߦaSOMl)'QDV7.\HQC6|5|jf,3Io" u8braJo.AC~`ԆE d(=Ԥ%&%3(pegN+cl qU1w 1R| e*@*[R,K:ɠG@]kbլ6–!th7:OV܆ؕJf^ۭ|[ e 8^eóE&1pӼ<f/՝ z@pPZC:^ JL.fW$vUvsWW*+k%[e[P^$U\;ڝ9΂5!nf)Q0 bauۣ w)!N[rd-Ӡ %d4A -4vOm0q -f?|kU0+/GQzs[T -J֘h8(nMEB8 JHN"2}JaTO-1~U%7!$urAh\s.$Yꤺ -sAFIO r)Hv=mծe-ʾ$pJ>c5 얢&:Ͽ-'lQ~cnV;kܢeZu/w[ -e{%BP0[tBoI (=VY@X8KsdިXO#y_.5jo (:iL VKj) ,;ڻYT{Sl, M7x h,[-c.D*AeLPˆ,^R*uͳ,{_2Fbe]^B-? e|^PڻO,cޛ -s` t EAa*ːRga'\|C-˿OÚW<=_)<-#2"T*[̋IDK> Ҁ |8WgSJ6ZQDՑrE$Ej}e|4aOP郬sq~Zޏ<(%$H f \ͪ!Ēs{+Sp1>HEI'A!mR* - vL#TWOu"%e?bxߊd2"5'0)dp$18u55敹6N<SYԿ -Paj#; )d0~7UFO/)=q;b/qJ̻) .gVSgThH4'p~Z`ƅ|UN㿭Pæk6H=NWs7` - Q8_r-6v]Uޅb37r!LjHeA!}*pNRsJ=D_TmNcswD,MNlj'YYd|z F(Ke7TI%~JZ\] e 9P]pd.]WkJ -v l#TkP)25ÃRml$l* Ɲtw¡L+A:@9pH~/ocnRǓ; Jgɏ; .+J*&BP_T -~-NՂ(sAa̵ðh?H;uvsnftP?IF nSʕjJɂlnꟻH}P\><_>Ҝ*㡖 -H:ms0Rj~ -= cDXGJT1OWJx(FZ? +}rЩe<; A&%O5㭨A.ʒ޹4|JسOh|28Eh+ 4M[Tdh3iVpUiBC蛜࢒W(a6Kp4i ɻ '-]E$oTbw1R&(~iNY&;r c]n6-Q**C+RѭOW.nevEcnJߞ,s}xA..>ů*E'fh$7ܻ0?A~ D'QE#k ra'̨=n{G(pg%l@pM?"%L#5zv$aPND<XVЋ -*NokyqFD.;Q)Ef<<]2B#V]2"IBƞ}k"oRv4A3n)`1McOݥ]eϬk-[N s؋z@=ZS(3IRMS]ᶓ &V&-pW_ez > DhexFj?s?j9!??2&8gK/ߩ -G,@]`g"{8o[ߚzpX!0  WMG+ة7Rh?~JT9?eU |TQGս8*<`&*Q;g:*fMCL)oNZFqZy7`9 4Un` dVb?8& a`X/b7eի400ZLd``63`?w ba_Ȧ2Kzeh q nU r) :&>{R >)R $>FMMa[^>e'SW7jЬC]{;y']L-驎%&ekg]ѸUΐ0~C F_>RH#%7#=dT|\a,:H3dC{cYCʛj(mC 72@{$%h` -y53>C *C>-o+=ӯfIE+?|G0{3!ԙ(:\ϩ77AXi"Q's̱6?ɆR bUz) -:nI ջ{Xulv4aR/h9 :>陴(uNWuB|J⼯ͫx%w&ã&=ы$P[_UkFAb"S*4=/'Hf=o6NwGMmmH }npnSb#'&'`C^eDDg2(́!EA_ח2SQ]dJ峹370BJBt*1Dn!A+w`f]!G~| #ma-^9)W@PS/Wو~> KU33V, ɨ7ޝmg>.PW⟸f#YV)+ʫŒ1(IuDa>coʐ/-EVOH%|Ў 1{FV~oƑ=pcďsW'jdHX^~VdSY]_zuY!"P4 |vsq,8g 7F\ ::_qN"9$Z䊂ma?̻J[y"⍐! %^9ԣJ*x}͌RvY4 *A24TׂV[Q [sy&( -_b\GLb|5%4ǼZļHFc4> -`ja Mtq&? $?[_+fo9gpHZP\|2Ad'Gb%e |F}H@`X`>N,8aXt aW KCҒoGzʊ;=μP(%=>FEU?w%8 $M@tIm͏` -ݛa:uQ!赹HUR&Cb>1 _)H;h}8 QUW-󰗈c,=v;^L3ڹ굴L|7nv7 T4q -`ZT@ه,noU로U-#b_k SdE(Bp➱nu: 29ɿNqmY0wP >c7sIkiI਼wk&qϼ!/|T{ ,h¹])f@V֣5<9O.V%VݭCSuMuҗs6[okݘ0SlwKRl82!` a]U(Sq-b4w!PY!*QC}}`َBFgw> $I;dQ֎$ƶxMų2{P aKyDgum| #a,|ʭ --Ζ|*cr%{lC*1ͥiAx#Tp nlm4^]ż~(;x[IfԎu`?W#7ꇔ ;veH_nh`@&tH'k'OZAݬ^41fbI 6(k}Q ›1a`2VkAփ׷'puMAJ(34.M . i> -5I o05HR/6H'؇bRR PsbMMP$SǐIMRR@Y 7% -d.m~ؗP"H,H[>-,+#1 c X*@X(t]¨;Q RSz~>3w!$M&WzDw@ʒBqKȥ=1\-W"zn8;NW7rpYiW6(I&o*فAAf׉,]4g>[Ypnw $*paK#{+ڷFZu^z*☆hAWGϬ156zRbpJ#47G_d[%($$XGeon /INW/gbqlʵEd}r0&7 -0Y>oFWو2Mbnϟ/k'3 O3%Jf朙!_8WE2<"c{e1jl(7v\XGQ,4WT-!kJo){i< -B ?LfSF@ ز_-ԘIzNMeJQpd:P%(Kg ㌓ÜLz 3UHG ݡs0}stTyGB4p ,d_IِC;YvƤj ʮպ!JӖx{I٘BdZoi7IoFj1))f 4)OpVKzX"J?Y,ȱ -e%WNi͏TF989** Ym]'z=f5J IIVDn3#1^,yp7iVQe+#_5S۰ChyV0mL! a<*l`_ ol -[3yf+'SD5!NT27GZ% V: YOi-wv(2Smj<V.f*'n8Y!D[#zc8U K F+r٩7tmԯ*{.7\VzQ~K?~IDƨAU<[S`U0>$Sm)-v5/'DQZ:LkئM6L GM=}!!}.\谍N^`c;E%՜. j]ڎ u˧X.|N5#!|w(:1L/D+?ʓ9q 5nq]G~ws6|֗*JN:emJrF*a/<1co0j4F 1SBIW47$6MIH{W9k{6Z>I)_6y2y+6P^r|"Gتy092K8Som:BG(g;I۹É%УфX gEB$[ -ˉq -Dٶf eKi*fk#֟P` E&T DNeFַOm' tf]z*3@=|_2K_WBbA-' ZGiǷ%8FF[>e|Q++]f,m=hӵp5C—7ae.FՂCm2~ --+`X!lfÆf@E⋎)F0;Ztk`.bIT.]z$p;աR۟v7 o1_|ߘϙiJvх -(‡&<Ռ$ > c5v2MC/{p?[WƒfpB^sjO -d̄ޖr'{$s -WxH%U-_\TL}nlA ҴR%H ZE@t=:#x41S& -{5۳0j)_2pW'X0/-5g%ˋpȹsZY5DQYDD؃7o@5Rt>Pa1LS- !SZK[Ksd5L!ŞxwILJ* -Vw"7^0@0${I`FMB􁚪Nn65kHg#0IS^JbEnо bYSvKhUφ$&p)uP$\$v#zP7]TAN1 -cx4=|~Ey9*>YZ)vM_NdLTp | -Z^y T׻|"Yc^8  &AN\f ~eOSq?_ˍN,> @#vA5)ݫ|ܚTR1O L߳(8ݾ\(Y6b 9WefrGo @P3AQjO .۲ZVSg+v8-yӖc-^Ðgp:9vM?4T#;p3ĪVzm/E8D3WceSQ"sֳ Ih@ -CRp)}]a$Aj -#TiJk@8 nk2++-Ef?m~:Df&M[1[fT˱-5p @4 < Dq( ěCX4&QSLy$ŠbQ&N#L$c}i-d[MNN:!r5U+VԔ)ij`bN\Xva8 T½׫*}_yrm~Q/~t,Mm|NO##n[3kqF-˝+Z2 a7%7PJbC.WĦ)5x[DDOkrjZ'1K0La*S’jt>c - vy?cORkktgl30#qq8{3a@(<1AHaOzGY:BUi)q{E +, -QZ)eEcRDƱJj Ѕj\+? -IbLhT&q, E Hb;/TbWuaJ\F#vbw? Qʫj@Ījmw*ۍ=RI;x!jh[wWrI|GG WhRГLLT쿼 LdL L%G怅bՖ,2 z|J#=O0r*1g|8ΉjJ=F9#E&vBжԶmmJ&,x"A5^:2sHͱ.HEEUE9FEEDEm - Q9P*^qɓt"*Zw7D66؍8\wDlVHDu]/?V% -.P=c?6Đ"Ly^w@? ]d$ -+g7qJ7 ?Tl@( = M{[; Wh<z;K/]Y2F! EUĶ,>$YcٮpZ>I*uS&O==LEo欪o;<}lSy`A A,CUYr&w+z9Wg;)09U2)V>_JƖySKU*IUҔE(qd2Jdc N:rD&*'颺ޝ~vȅ-KȖ2!O9ewy&NMݔ"4LP& -02]˪AT@:RX ilp0Ol"62>ccJlRfVFV[ -Nߡľ',CTB8&kTDX=~x<g_jxgA/"탶ֻiO\?ͰJY2,-Mru'vFID+U"ˉĘH(Zdw=Bx:DWI}iaJ::&|ȟ̬lr\$D5e5˚N<3) -,tC A}hI9T?w 8Eqx Z? cY݇( >33vh>^'QɓZ|{pSDU)UU⨢ĨTab/ ]\ض#3+wwCЇFlt%6c5 tog$2q64!qQ)"Z7BBp@8@yd& - - ~uTV5uat~OOF$c~5#RQ$$ THrUQP3^U0v".O5'H٥Ѥ٢t*tUW`';t8ih%sD%kWKhE3j4}96ӧB/^J-SSɳ>юJܕ=v!4G2x765xO^N 1ً #KXt"5S`4! Xz)s EY"v:csc&k'q\ -oOD3鍷 V)T4#@4&¡(̈́5h2D646%2y ! ! {9bBWnbh¢|D`s[ !] \毽],?ۤܛm`H njv(nEYJxi5"]]hǿ@kDN}Ju(c -nl1T5C=T!P y[cXiEY2A>R%5& -{6JTjHL "q3<ڣEVdrÏ#dA򶴩bEFim3_p=i8Ω3TS|P 5wK3op+aN~6nl'\%Iw {N QJDr.v͡''7B-!Am?RGzB= f~vO0@y15|5fqgΞ|N};V_XfZt&21r7#y+zG=%=}t򝃨TRX0K!a$~v̕(5's΄yH5D $)\|^u!i} ˒Rl~'k=I2dQ7WsK'RO˾/Rܺ+o]4?))e/sKSGDV: ;ZN4']\G٨S~8|]%Z'#YFt('nYku"bKIjN ej8)Vw N#A~5xx VMA%Dzi_Զ| I>Qe;f\C~ZQ3V`Z,.KipM'yf1sΚI&rY` d`Jʘ+s% M :ܝOTYDhs{*j0`E ,D)F,j2;DD -1&PZ&'=qF7sXֻg|o@*_#eǯl"صJGN QٱVS.h7rk!͉mQ$7HX'Sn@5Q];YdáWIk}k (AU.I?d ,ܛWQ;y[ w$1'ߎm4FeJE_qhx._2j@ O _N>2$}AKc8ŀf&,{{_ޜґha'r/C6J#]~IC BBƙFe/aXTu4j &T%8icz}&yC1![7s mi˗d5`r^{xƯj]1-JvF]Dx%u޻Rc Z@q LA ;lσiJ#4H9z|I:9,8C@&< aS`m! pLAmRWSă߲A䴪%O%}a+ŶZu3-hDNKY;v2$VS{Jcd -فa$I?* 1Gsx<"%}`w#ğ-?%<'K]B;>Lx㛲B5AcqG4'`4#Ȯ Cbra~e)"D-1&S_EͿ:ñEƞSآԮ]kݬ2QӼg!G0,må=DZ'U?3M^qR63j|q#ZmDPU2Lŕ4Vjz'n^ -p0~ ]LvnVd4>&/iםöL;HɟPjw=a94_yDMͺjUGqDJOdnȻ*$\q#}1ωz_cdoMjoB4N!hֹЀVy[8.QJM$ˋ%+zke$P{49>oP4!hD' t ( f;߀ӹ(|XeVSr%)f1.knےx 8iҵd.Y}ϛb`>B>}dȦ954򣂨i텮E?H_q  -uz]snmF]`vcWЃ(rAMPo[!M D"C(;XF$$9 R>f4T4 |Q_9TAI s=܅6CI ͠?7PpU5 7 O㴺-):V柊sI01Qmձ?4IxNCD8E.=%cMZY"Nm[}o^; V&fNJ&bq?stTO|ZhlJ j@zoC[ OW9UPS=16`R -}ڷ4P@|`op < 0yXp ^WH|.fj7{k|:!MA7s:_ahpwpifX>o/1<6Fm!2j OrhcQ<aL1S>1%11ƚ)&7r2)nzeR ++Q{)!uՏT=ˀS::Ԏ4{c-iE j<   ;4, >=I#m|œF01w'7X,u?MS&_R` -奲$x;VPBv8 0Y '@7fNucqr2C-GR"J͊%A۞nWfl s){B&H֐/.EG@ ~6`D_Rʻ^VDO1vT a p)oI# Li~PXM -B?'Eԗ7>Ol<).GG[W*bV)L|A/Rq,TmDQ*<3 _~YX06ethm)UubjLJ?M\UOM`d^*c<{sS%) C:ppFK D̈%1IsJwQ]ړ`a/=؍m&]p,{e# oMLzXSje#Z&r, -r?Vn%VRTY|4Z#(q{ᩴqXw1u t_}B@jAC(!X&Q›2^\ƕ+(OQ9\/ĩPJxmKn | fEʽg9FTLA+L)Dd-c|}Sq%b=J=8 ,J(6gSd_Yni39rH#6Q)EצC,rgIQcN7LrĔsrVުZVJE*Xؔ P\Kh{_"K6٪_'c뛶7[r "ed,jtDy4^3*%s}E BAs8 t$S g"yGz򡠾LL8:$g^4쿏YcXF58"5ERz_N?yc! -mD57DU"V6&Iߘݵ)Of"ʄ#f;e0"}^d.=1Np̚5[u*1buLHup:KߥʑTe o29w1u|/Eʋvh∧E" /W$ -7y0bkTl>"z*5YvX3|hQN) -LN>j`yksv[h( dEҜ {4K_&.(9wOcVK̅{>&|1dzZ*:4@6hBxp$EP@[ ֐1:*I8lk %83(d1w6) >Kt!-rߗ5Vi2L}tR^%$2zӘQ Ah!ʏԐN/%J+ꀮCCi;\)EJ߭rٻM>hvpr38#i`AȰǕ5֖:` ك*q ƘiF\_) z!(uj M5`1E+FGqƷ8~>\UxuBQĻ=/9)Ap -c !/6~)AhBrjZ-\bJ҄{Wxn"a/"51qg:_s9.d6VRYz^&DÙ<@*Edʩb@)@"Qjz{hojީ5[z:WI[6HZ/jS"Ԧl"a/"b,p>F-d7Lр{{kC)٨\o4Y\T!Ґy s_Zۯ/EBD?כVs^BL-aLp!1@UnSE/(.f6 K_\I4?õsZֆ-*.5F{ S5A~%tzfHWRYj9n3N$)Кw޵ڐeQRlbv"l$Y!h#YƼpik:]%IG*KѼlhE1}|)<:㴥-Pi|75# An(F@0daQ"xN\ӧ4K7!)nC:P~a O%oj6mMBNl@+w>iOsL3[ g6d&Cm84s>8&}%* 3FJ6vۈ@>GÃrnc@{^l%Wv=)/=sG3J736BՓ43QWTp!KtXtRG{JN}z 6@J&I-fE~>!txf{ǚ, Efhԋ6Y6QY:4]T{ h\KalTB7N&p3IET$d0X f:;ou=J8$NyKmpID!Kց0i㰱FʴI ?S䙓,3Ƹ7SRopH9K%E!P76Lw*z^'|x`B[YB2/ȑÝb̤ N:[:%w3eP40Qk]동ʹ{(bLls{?ywh͙⿁߾~ '] ,j߀Z,wS \vRǡHYQ y,<ꦁM&;m.A%BH +ul=At4=h֣B ovW$t]%rx䋕;7U.ش?QtU~U`wu -/As ]1zPP -3mNl9CˉVL0^2GNCpĶDVY.Hlì}ơ=v0s@3x=,duh i}:Ŭ9@iPmT !ցlוdy<܏4i8]Ϣ}tes>;􍜛LH{r}3_=2#Ÿ)?w*'f,2M0\M@*i.n)̠*6{C:|(uJDٱKpG(#(u|܅D$;1gj.K G'# r}?"<^K |s.侗XBNR K.3/>1Gj%;mZR( ?yKd~ybֻ X#~$@yIR%POYXqh'.[ci8ҋF]Uc 4dNoY(O55Pڙ-*Hl?LXE$ kPGG.l͹tMDw!,X%2|kR2-Nʦ"n6F!B$f(Zͼ顤yأ>$8(n6n"{Civ&d t~r17ZKf=6c`wGh 6=7.A -(yy5u֬j 6r8r?%f_v^\U5YWR@"~ jd+tsJ& -jي=A:Jt# eꇞ|c4$yQ퇌Bx(w`P(sL\ _KE2-wO Lz31W6R";7> @ۿ)$R%QJq=Y'%a[EZl -^^GޜKhn9,4!Hp%rgzs -~5s `gkn5Di5؂.1Wze?m*s'kC2"xƸBkqGh">NL}kIP繣Yq瀢{"#aF,.Bz g0nװQdz}t! <*ϋFR _ -Tk4h%pג+>LBbM?@XX^~}\Z.V݂{v՘{4tY+sR3mb H׌mn$Ix(IL4rIW9 { -e4^ t}#^74CҪ?FZJy,2s|ݭb@Q~pE LX/:s}o΅:{G55\}"7y\A҈{ wǹ a +bU/t T9{OA<]'4 S .m2_Bѓ[`F|n@ͣ "JwQ'K=_'zЏ:-Dr΅ʆ,*]M,B~Z,)E,urDMfʴB?ay4|A/cp|-`tHCuzA1X|ҹzjv (-])̚o pSUUܘЬ}+- "1>3Xtذ߭7OС_Ņs_5;lH/ !0iQb390~il+[Χ_T3|7j*Mn7hKz;X -Z #/-wBvb36>;iqaV.;Hux0=BKRx%MHim3>q|6FJ' Z f&G|A2Qv:*n&Dv%dF$Y^cاj)Ţ+d}9-̓4 -~LpqTʢ7| !y!>aw}!9;z>{?? 2Rnz/TG ,{gimNw3b;]&G!Dg"Eo>O#m5>$g!Bߡ#ʯ]P퀄 0L6KU} !;ܡJ5ZZIjjkxDB(/.KB`XI%I.wOZ}E-r"{ -qNb^mJx4ÿ́h !o YǮĞP0|؎:x7bD-$&LtZzC.EA5lr|Iq1R̆gà+ -sIɿ{Y·G,2e pXֳWdPw_'IY^l.Zo6( -FV<8RTWT4<|&:ό)p mNCٶܺ -f`n[Mr&Y"KߙuF,!$# -ЫI5VfڰzR( Աhy+=IN.S%{ R8yދ3Kծ" 286cX>l;tRzyQb燢 2& -wѻ^tE2R0NX9k|%Xq)bHjy)i f;Ql 3g ̔B8S-[Nğ;c䯩i,&ew[ѻJ#Ifu4v?t|X 4ͨ*:sX0<M ~šlEVDbSFp @fO-"u_^s*WilL<|V0T -1E$N/XȿPlǻI/һP1SV|Or$9>^#m3Jl+?fGVrOMMrdžȣeK1Tp?Fڗ^.iH^IcExbC̗_|&p?|Dyj/ (ɬ3H4a| - :@ZyA EDAB)XmCpy(cѯ7's$FGEjmBNSs6 a>і@EP#@f!NwUͮ)c?oMcxZwVYPo%FK_ nM5kso>0Tr:E%S,29‡LLL--fXꔁxGW'MK(pf[(4kXђїO|]@=8L^ząd;^tA4P3i pJðT_!Il )RʸQ=|?#R 7TG/J\GWyn(՘-d#{LK L SyO*?CEwTF+B?LK+,lh 'ѣhlB,8y7+܇; 9QO3p/C\@f͑`D>7F)Pڮ -R-u*6XEwv3jM0w\/-Ž YT!dÔAkhvB&u+ g}6G"m@,Pb[>yc )h'ce$hAp(qhpGRLHbhjc(2aC↏w3/gor=tjs)8ؤՐO -lѯLd[!Cy[%PB"BFPDZ&WS(B)l.!Fz,Jx|?""LF"dj (Y'zI] $ D 5|&L @ 5~gs gJƌ ߁n/TZ i`yf)9 Y +?d׀]Z i" Y6 ͜P -$nff@{ -iHgnN>uI9L}MtFnwZm-D0?ͨDs ~!؄NABqur\!};ۋYԳU$`7k*&u?o6U<ˠqzIn]+T,}q/+:@i1,# $$&)qN`P)dg qI #ow\hLDp8ψr%KJn e8M5\#5Pyz 5vuw饻`WJa JvQs2E5Uϵ5F8y~Yra,x# ("qV,nQ|qls.& zҨɰ@l@oHeh+b/'lsp~>Sm)),I#\0ե_@wD+-b ﮵ KW" ͽbv1zj96 9`vXqTʼnBdH- bwRߐk`?a) T5Pi,(O7m]w(ɧasAk,FKw[0 -ʈS|gAlVEn f42a&&A@`}5{x'_IO Ip?S/g80u :&Qrp^,SK䄿Bd{X%DzubOcY"Bڱ|C@"tyTs6?c"y\4CO^7[XZN-]z! E+;rIYš- ol5t&RLh2Xjbg`usP)CUE>"sG_|O!!nxK^(8ڇX>H)zDDIkvq#(|Khf5:|6}H̗8whr3AӚXD!tD0g^@60L*^FuPTQsk"LCxlxA4P-wK <{W" w۶_VosK4*N7neWl &qKeƲubGd|Žnx4l-9dFN.e>-GaxJrhimZ*y&0 h;?TSw1"2$HMS71@u.C6G3Q}@h)/b(drH#Q:ʏ*"OI9Q%?M?( ϓ -ulc9-WpR]D/$ !tO ~o%*񗇒\W.f_j8%~gGF-6rJ+lLתQJ;cmF"ZZzS~t[IhT;3CQUA^5HهH?]fF I,PrA ݫ F&Fao -F[*11x--'n"% "\E\-}* Kߠ~!]̵͉Ĩƃ;aHGƱV:,`=gNv(>ov8,ݮp"V -'!\+(*dxr̲Y#5@ra'&ێ]t$ rL)"JnFϓ@!H]h@P;=rRRW"C@1-Lr{2yp]SJbRA7OPA+`dyFfr~;>RlFk>& yDh'b\Ony{^q(Xʁoժ I>[y -@ tқ:]$:*(xȵ(XRvyԲ/ȴU-I,Jyn"Il=_Mr,J[HMnAJW$?Vo6sXOy ʡ4&q<<_>T o3T@îp6EVIy)M_% Ћ8K+VE&F{7Zn:po@}jr}cN:v_'x-qT?n` 2-+- Xu½,i12Izl少)'섊V9 }tZA%:6~>@4X(%hҳ5<[nLySnA(eeε9O>Sκ G~'̱ MZ=H _ /t=Q&gu4)q -Z@B@|DR2><+:FMI [ -@} u aB*0g"Q(<lj@ِa* 7n𯷂Kδ/?{:]c]ɹ*o߱bn즂IXJ@d -gSi{y&gLeҥ/2;Ή cwCKiJx QN^ -idA]?Q2." qCLkOyXQY /7Yjd"30l77C9QV7nVw=QѬLXҡ>`Mvlilă`|*5y#JcM!2n)\uk{~/6P)+[r~(S܀s'2(ꂠ 4]JWJx r "ʇ:{Ds -"`Q^W4*۟}aah/p1ZF1vj1(I~p7dQ3[T$E8EccY(s}Ű-/ -V73$/A[cއ>T3CX@CO{4WrG7YW_VW~Z=I/a!,-R]rw}Jڭ`X"%5Y$ԑ;39*ĜhC]ZX@C]ަV܋J{8K{E['7(a{WBYl>m1@%FzA1x[d(GbbE{[i׭ %; -%> ZDSYUH-v`ΪȠcnBgBhgmóq^܅VJRAX+B|P39GetwE">r; -SV9 [d%S: \.> Kkepic {bԔls>̮~ .$p!ը-\b(br X*2a8>.'nxO`]^)N=@M8CM-'9DwkؿH&F:9!BTk7TWuX}ExQ*ʁ{;_9gX^: 6]D=7#V x2(6OSͧLcS&e~g'`r ̪ A"3PTp^2mm_  l^ - ./'u3+O|2su n|Ȣ}=_k43qn#⟁&i41fыa]3Ҙq+L%^d;?Qa/MD̶1$z9&9[f0ȅZ -~vP8j2i-e*P"0m/9jOn& {)rO*R@s)>Dխ~ƙӋ|N7_\wvBSSSЁTϢ64_0z=>v'S$Ig1*۶m&L|鞦mX,VqНpD@VKO'HN*?Z> -"IJ m 3P`qJbGȣ#h,!DK3iDV.D!QCsYPԔDցBP,8Â4,H"N #/+$Sa!a!=d0:jI1?Za?N3 t6-f -%4}>}UdؤדrZեn>6 :m\qujF>a=I]H f4^D:\(qLA6~oa[8> ֑e`Crr,HC|[E&bGʄntDj\exˌn{2 KCw/d gDH84!R++z ) - +bk:/C I1 %.DHX0! nP(*汳"bws0esИCT2d*!ZBnJj>q!7j44s 3c))8YĴ]fl~bzV2(Ң"$<,di?kd"5~9f: *!#l)ZJAK amlp2nqlǂתZ[jrxEDK5(kXm "3m۶} -O2b8PqX-V4 -pWk8oؤ7 ?8x3A s8_3zx=G (@ 0h`xh<D hX`D <!`@ 0@A1ce HMQ]1R3$-){m۶m۶mV9,Ϣ2H$)22:HԲ*HFjEE ! 0( -FUX~+ az~J69PVg%X}|`#UNP*= M"k -cQ$@k#iϧP`jG,}U=Tgd[Kw ^rْ:cɮ4X,NL櫧;//+AN!,B3s"g@UvW`n+hzޕhK._@ |=+j!}{esX̶DjQ'fg/n3̦fm樐TvZ %5ۿE&lmKƽW\֍̺&%ZVYTM6V,[R혈\,AS4Ù<}e[zX@W0q@ `K49^5¢\($Ai_#h."]t[m?*v+xkP@H]Ca­\ϼMJ68zs[ׄ‡*tp@%b׆ 3qgr qeu>(BءrF2m*SAƁRwfT"U~vaLxfˆטLN \Q~-wP4+G@$}3ugkiQ؝7i,^7aē,Yb58n*LhWRE(H%<a'T+v~[NS=Lb@vuP[d ;wK,s#s(:$'ܛ>0ƛ.@}DrYl]ºO!z9uٲef>6]R z?n`&ղBmzaцxы#ؔW-1 7@&YYbY4[`I~A̗&5D+yW 5"2SǔLRYBF8=,kMy%-\.!/k\nȱP Nq^i=+j6o:1X`fVw5\;S[;@8[G]ev}mH?Y @ބc -HU5GcNjUiĪwyeZrtcTZ#K쫽ngz<9=cSvW,rzvFFYSfBp\YCvh1qե`Z ?9CU4ۧg+osJ|E,Gq@iNZP;,Oy߮߳ޖRd&jʠ x=Bc1 QCVUw0ޓjan ~GdcyVHZr"SʛGQNc\6@R9ƉkEyف`&],52sK -_ڄE#E=s6=ۆo)[ V`9R% JQ= -7]#.W+ |ͦ,| Fg!ěuɓPG'rр-[>fQ82ɻnf.xBTEd:)T7.t`~H>z{PuԡMncNۮ1cYn;ryubLJ3Hm Ed M9Mh3=gJ:9qBZ.f!'9@!>Ktf6Mɳ ݘTDy p>+-p1Ce BcݨƑ-kpww -o2R/t6\b풔` i@lU}Me9w_em+8d_`ҕ`~1I <=Z -dVcc|4c0(_s $ُ-2ڑz ZyT➪Vͷ*PmpDͽD:l!` -\_mTvi p\GvOEZ.W?I` #eN9Nm"hs } zt*8ǧz o"nB%Co ǵ_s -&y83aG\C:t.dGrXMZ^9=TmUyJN.]W"څ Ћr֥T.<.a"/t9iQRM]21\X.T(̈́\Xަ_ a e k3ҏmCVp.Nv"^#r_LF[{3xf4l*H8up;<S׭4 EY:7g Z?89tw;c%<+谏C]]Ö)ȸtLsuw)*%AS)k$6?wT}ogMlfZ-ADOgLh.#@8[쭕1h٧87Մ.K]YF\tÓ*yqb׋U:*vtQz6̓(#g`8&G}NXQKp@JUe9-l{B"`L zG92( -bu7A/B?a`/ `xOXz`x<{{wݩUZ^oeF@gK -nC:oהgK|m~6<j# W8ٔDUeJڈ\BfBdr]A]Mw(iCm&~N#6uM);<Av0DnEp9!FEN$ؐ(ebnDl b/B(0l{*r0룾^XڭsSNSJT ! -RB7. Ix_2D/rAk1ɽ!VNLh;PI[ZinGqXa`jϱLxNz lݘzHp*v֋nL$w:_kS`,~ft.cdN:EureB-~CiC!r!jpeQ_"agi )/R(e3۲oX EИ=#yJ.`yaA-<)lR-s"bxM6Rx큐d_ zGu m"`8R,ިGo;;^/b GV` :`.,rb{'?Gj*E0{?WˁL JbGh\×<6`n ŝkp;2.;iznxYY R -endstream endobj 878 0 obj <>stream -1ŠlO8 cAfHdik"+pS}.f **UJΦJ6|gs28^*4%dN^\@th<nO9 ~}XCX:gAF~ŭ#sV/faaԵf29OUYhC[iXavI!{ޱ,LZZG@`q)-$tWṂҿϿ \q 3qY 7g*:{./r(hnMy?սA"4Chi\~YI^s RӦ &śo4SL^Ssi}{_msvqxLãdLs&zYJKCo|%:Eh0L[oa x]1t+ȳ[h)0 Lu7rOUr,8,vzX|j*CɭO}o[b<.nRl8Bj)'`-@3?LM܄( =LGĝBUXr"iy5cJpȁح -c;yWTN Rqbb"!huNάK{й궲5Ҏk<80K0)ۇ=ɹEN2= -Ʋv:x\(Қ幦wOSÄ -sF5{DzzGpM\x7FvrUT|&w$B00!D0H3Q!k.M7+4jJ-fc?XTkhspFG5Kc (lƼ"Pn4d˥jKzF,jӕlvm/7U('k2C- H? RCf9gdWμcrH(| j^D &Ҭ,tPL4Njj!esG=$+;%> N+~`($W6H>p~ 剈OhA]H*2)‚T_n- ^91Z g@"ߢ@Q`ӉtTta,˅voSѽYʮg;g > Lؕ2HA6]1]d-xio%UQZ\\FRMoz\9K/E{ sf -r!8Ϥ1G$@!ᵨJ6%4Ƅ4x<D*6賣: 7*-Q bϙ`tv :5 Iei!MwqiZ ᛵ3ȧoEZ*&{~GtJtL|BNe\.Z3r)h9㉏7:T(ޗ{s&H1|L}ETTXb>: 'ʌqdnT[.mw8 )'GN;sj\' (M#4%j,R#ޅglL#h8XHEx H($ZpNnZ]~C;R yƯWq#9PQluL$5bmt$*Ɛ&~imqQ,;\x-\rt1Sg{Fg;,bg+,,H@'m:nU0Y@vƊ) [>Q(e2V"*q b) ʁwp?V\\Ofϣ?4ko&ZЫj6v_ :&$@<'(E(,A!pDW0ŏ6p7/,CWO! m:10HO}o,c`t2~MU$7&pri~Akcz uGpg'fb@ o]ߚ O}TWEaeHƥ[`}"|a*Z$(C yv$IY]e/k 8 DJ.ٍۙh{nHAOP;,C*(f6txЁ9?Bw^RPФ쇅hBQ? nl1: 搞~"&.PW D%$w,3VR^Nt I'&|bODx7OmB 0g@fSpT-x7ߎzuG%ga`'Ag+_ѳ,/2 ҤУ½/bʏ@ȢS@9!jVn*-$ ~XqM!(s"v-CMdKoc9ȸջp7`O},6w;* -Y3#5kN:c, r(F~I52TmD3h -w1Ǥ\2?'jߑX= w6 @, 3.$ZfuMy=I]N#I4^k 3ksڃE-8pP3U >7PnR9`yh]e)P`S*& ]J(cR&ưʍ),KKSGj֊ :%(,+ ~A7:rϽ } >#2Zɜ̋ \n$ӯ:Aw 7 6gQ扷CNp_u(R`v!8'NcD=\+8k?-jA%0i뒚ƬkÅد{$ۭX'vhk7{z6#=RwɂtkޣB T$4L ȡI,.)Wmσ491))}Ϩ7M=D|%-SqK*eZ džg( eBp ?>%*@;Xє1y|,pȢgPh͈.<P켓dhC=,נ*n׻_"H,FFcH$`MIuƗ [7|1^֐9!!UzzlEQ-eAO64`? IkjtkZny' \h^e5Eb;m^}͎Aoc/p:wHyV{6+1=8B:"P澪M\LU?]|ԓB)C’$/8`G BS ar8OvAs]^?ei㨣H<=gI+}CMBYˁY5&mo[><ǧ mBԉ%abU`y1D)5+Vx_u7LN2[bR|H 4O^էNz< g5&f TM kE ̕LΜՈy b"nѪA jm׍\ʃ_f -D pH̀p[Y - -endstream endobj 872 0 obj [/Indexed/DeviceRGB 255 879 0 R] endobj 879 0 obj <>stream +=G<  d@< P](י.,CEN!0`9<D84@vE y$c>J7怆̐ @4 +ttfJ$HO!D#  h ʄQP[5XN,~DB.,#8a`a`B AWt<{]1yPQ#|mʌۅ +$ >J}.k3./NRKD9\_6$fw[&ZoK +endstream endobj 934 0 obj <>stream +zvGծE +< w$UV|?a5t.cv2xgsyF`UC}С&pvoC $hA<'\W(V| KNk*nu &ڍ`0*Y\4w=Ȳ0 Fuź +!zW}cq٬P nu\5A$&B߅,?sWF΢ƒj:MBR@NM;4x0kY*L:&ngե']rlR(xɨmolmNQj>Ǖ$%htu|# '-E؆Ek@ws-\Yҭ}k*dvRy4l,Y-(TJyy`դoJ1OkE3ܩN?N9HgVy&c9*1u% ~sw&d&"!R`-BJ;oJ$Nw۝|ZN\́u0,,)U6UP{0_{DEfcDyp`y̩?wT$^uenhshOSb7R-1!z\"%ڍA9jE(Ns_Ƌai] `x,̠:\MK T64lŨbh>Bʝee <% \\Mu7*<>y軑S\=h~TcǤ6%UKhwH' ]`U+f^S ]],gVD}jу AP|3+$?s\vQl jdF,hxV_Cc>p邨ލ*٢)d]dO;D [jS8\LwM*5+'F1%m-B GYޣKD h$FTc,I_:UvL urI] AF!E(Y)w +nq9$Zr& IFP&Ji'f.4$J;a$B;JM#3žRQcBΘI37N/gee+(Rlؗ'2ł0ֱZSeo=E2Bkq7/IMxkٻ 8C tiQ\3yhIFݘ;h+!TJG喚u r:*)ad*R։q;L-^!q2ϤK u[˅7,DjOZ4f5-M^j{>7?\!4JTI3|v'!9#NܶIS,Ds' X(-o*5- +鶭XUÜWj`J&wHm AVX/p(8g6 %lEכxLXt'![U*KBg)gQ"Ɂf1͢F4_ 0c23s19;;?wjRװV4y%Gݥ +owI)vwwk6ew$zm>^Q%&/B'_rL#'F3Q(&0&3ǩާο/9Ұz䊓\ @j]z|MN&#-HД7$qHnC26J0>̡:p&a,Ы* X_"nRj$bl`DP6ǀY@EEV[j2/HѬ30m-{"Q[8y|MGlgt9gS`y 0[\Oڈj7j=̆@vLOƠ2Ǐ$zU kf,ԡNA z@0>n.v0'5*3=2^3ʕZ! ڃ-ygu?!}[Hf+̽7Oo-h ߅5ƽCj{qۅ[Bv*ܠX'张d䝚Zh%@Aҙ#.EF8Ċ MwIpӒ|~w+^[td앖"xIͰғC!jf +:ut4'z`1`kȴŢ +H#\Z@Gm#0K e_eXҿ|] V9q*HA% ;UE`챉 ]C.3ρЧ`O̐ |5X9ɑm:"u7^'9l!Em2 K(%MPx{/F@x3ߢf%-JGv>)bQ6Y'/ؼUcLSV"q|\61p͕nI@T3؞+`A=Ǟ=# 9;x+"RJ<^sT;(" &#Q&:/ S %3) iiHbtݱw@ +AxJA*\.I)P@3MP<[ +}[f6傾`e@i54MD`F意u55E\&\U {+dFʕ8YqTY $OS&e[g fp 5|PZt[f1تb}eM|W¬ 8GF$'A3j0~:=8}l+grR ~5ȈcJ,7IHCw8khvB +~`/-`B~6gF̷R1Rļ2?>*gw/Hӆ/XƎ3x""Ffc"Bg[~25.a5q_et{+բJ4v R^5 XɊn0۟ԣbJ'"XIbP%y4Ƙ4Bg?IwEDC22L M EmP!ϟq/ .ٶ-<,:ur6m6U]R@5JV5 +O 1/@,zsB ɆI Zv_k &]2CHF+V[L=% hHJK;tBq]Yp{]֧BdISmsJ>(lDw˿' Mb?j&|˜tQ"̭ 5}f__qo{ԋ +0_p c`pӲ>(3"=Ӟ=m#|ZZ{x= zK&hM< \]ًl͏-滴޻|FAvil?`:RМmFًqB~ͻfDB)Guh;>0ҽ¯IE9+PwItKYH5I'~ 5&W}2"1ez"DBs:U<. aPa ] bYxYL ~x4Ld0:(vU-Wx$m2S@셓MUp pYwg7 qUX5ǒtAPDjբ 2wҨs w,19V=2#4vǥʚ 5pATI: ~W*Twْdՙ?S.WeXԕ*rqI~H+A0aC )2:j ߴL-JCS1UZ5*Щ.n&nºK +@!X٭V j5P?'6 +9 .h{KFX;+--e=;6.&fK#>:Jx!G4tUp;YdsOlY(#͇ǡ5pY ;Rtg9k:9k #t]K\(àXeQQ ;цBeg̔MؔMٹsb͛B5mJ}ܢռODdB§Her%>=\MaW^V%\,Rx67 +)]NDGD.Zh"ZHpһ=$>`7Q$V7h.d^l$6uuyPa/ 5Ů;tmOڎO$ + uLVp,ßlJr4@Scu{ N9dZ::G bX`@AX)ZfĂwK2xpcU]$tO d9FS(HOȣpE}0B3":띢&WC/xV/9b#CPC,"V28rDlq'ء޶uM} RZni߬=VU4+HZ@g{#yu&jTt3LG N/ ,ɰ(6bFAdLk"X&`\65DtvZNfQݪT>vR`48>fi攊07j_"aKi7\єF]ؽ22Sta\1ہtzz]m(Zk5o*qΧfz5ѩ)-4JTi Sy`L=K X= b'1Q[NZ|D}MmXHg`c}hu;?_)Bd'>f veLF`U"hɜdeƚJ,ː-*N(g۫+`Ħ4puTjZ8 vRqc8KM)rZH9$,AaR1`WP_"lP95 GiTTwP`v3.VHWU_p\ZL <#a;o8^TR~Āe @@[놃+&ZC2Yx33Bt($36>0S8jAyli͐y \Q[+bQ]ܢqPzG-(!kA%jA:F5~:jLlob ոm p$n<CyC +g*iBhi'=]InGݳzp3On+Frxljr*3#WR[5~euA!z\]O"kΒ҇m[s1n4pz"?[+۷mX۟|Rҙ7_',ŵc*a&nWpVS/omBW(X!; 0ILPm)=P=* +q `@ȡ0CoqB{^7Fv|Yģ8qF%2S&BsSnFv.E5Fuwd Z_[BE.!=TL_Za&d҃p- m$A#2 6V* {l{m.7@|#kt\采ތ. `(wVLm3סUQ1#b${.@-Y1G ՙT4$/IQah5PF 8BP xE*MɌbo4!^;$u9Þی"n=ZK%iXH; è?Ylm@k(t7:"/5ݭ n V0jhOjat\y$0=sK-%{zJưdK޻Ȑ0v"B fn"W2竱 BP8J!|sÓ7X ;x ͋>AcbXy4_ #OUpqOp .1g4U!m!|dk&17( '{igKWi@U +^^[BɃУm|9R(*P%/ qH;0' G'Gf*KbíFKTj]Q@:p2&?"NDw׭4B늂`&YgL{vބ8=+ +Sq)2-"R;X}H0 n0'+gtTs28,[ig z"b(B bCxPz(y[i wxqmf{qq Y '=q?v=ðhI bw +WHQ:Styزiߚ"?dz&bBFsxR) U kZ:.,M!|yk +rr}AQϘwOȾ5dǴTN2uΆ(@һ%ß+Zoz+q|g[ʅ\;@\s>ۉ,w>Iuk~F*I.`z|ղ>J&g7 #/wDǶG*JL,\$Y4 USltఄ0' X*;HC'UrWhs:+bf~R]jק&;'庈JbӠ$v@ѣF;nAS=MNV˯xOXK2`DkնNʛ_) }iER(@*I)Ӻw7/dABݐƛH~0}_{ 苡t[`DYle6tͣq_Kh&hq6̉gWh:E.fVht{1!uVrDbl BW~cT?<5@L> ]0=!a4؞юlL9A*xB'9fw#BNs-=U*tVp;Ĭw+2ZbID20|߃Tϟc  s\6}n>%i/[J(ӔmĎ1^صib]8 qY.\┡OqOfb/UJ?)xʥ'o+*5hxon(fJD18#r3':1ÍR gKG\qA) Bfr@-bWręY"ΕmgRrm Rܣ?䉎B1lpf2Qܩp,i uWo mД⠚sqfbZLiĘ\ijx 0I =9 jvW!|4Q {Hn"F i ewK;yKB'PAҧ-G/hMx5ˁ˧9d-L3p\ ݇:C;EwGBo+ӹsf1p_jۊ@e:߻h( {|F4 + +!LrOt 3ex3p͜0D'Ae %ܨ 6>+ȥZZ=i=^pdEKy:%:mh%Em\Qʤ D'+Y:x-!IS%ժX[5P#=BW+Ե֒G=YxI$E`衪4[^SBk I2!DtEa AsyF?t573ZLS9n?8Sy虝kߦ73n7K^ jeFryXвE%6,3X*GTfq޶uPVLxc+^XS{"S1\Y6z+L)W|xK^AJ6B qH`ل#~$dj&6\ة +UHCf%40M$% 9H MM$!oa`煘Dҳ#eH ]ua켛+FQQصY#RZT7FH<a iC:#Sꄊ nhφjmPsgCH\9;Gq` +ix +1DY(%CRaSsV KV$A9VԱ58T^P.XYYPJ?sUB:7L[^L.(r7<̰}3UxW oJ_l "6BE.[_}پJ[[u$K iJ3R0I;RN(TUxwm*F0+a,T/cSBa~I6,NAe*Z^MxF63^`d0\)#CUyhIQ@\Dw o8SΦ@&'u1X -Зv^il S%.@F/ +dG~$hCrA%*f67C]D j`睱)ʓ"۸1k6 T HO}1 hGS0"CB| &"ˀ9W?jטe U#9ltQ`N7ҧ]J v@ hptspsW~\5T0ebkP.wɽfr,D.  u_3B4~`RC8!PTb2#OWą#$Pg<&~JP Vs#J:\)0h 2.U k&f&$E7hյ*P( +LWQm2 PT@ᴀW7$.RUED&Zb>ZnPP݌H .E$\0TzaBB=7m&PZ Na\\CWb??*aҺQlJEBǭSfVV>)R>B~Zs!6*xSo3Hsi(EntSM:9q$!KFkUbu+$AxP~T꒯' Ju-4zZfYXМâ-42WXE!Wb7Xh* +~}Y]JSW&P Aph"qh}3' e +(:`(2#H"8REf)E(C=`LB"')kqM(R,+}U, ]|UH:?C׉`[^J$NMRD =;N9hq;̵$dQTC8` چ>S) +A_Ŧ -E~eJH#~&lX`q\fd r`tꍆi-)J59?#'ɤMWMW +`ӕ(L!hlE#+#h"&*FjFZbu?GTd $(릺c)eB^JuM(hBnl3Ċ3q3 +y{c E# /x,oma/%~9 )dsvNK@SΈGPIO$Cb  !kͰ3LJ4,H)|EY4-]tsZ7kLa̒@)s8* DzA@͜c|E#a9d&(s 90ɍ!kuJ`3ybD; VQBC< #A6g&AB Oi͉&D<@^ghfCrHm}&m]߉ +c렑\S)2B"~Nhu x<9l`灝w; xVg̜ :{`*..x'gChhкL2dBhj@oL[;ЈR&MD ;3|;ofns#Fф0gS[uRP-"C B$CJ +G29 U*r9B B +1zDZ8\"!P_ 0`/ͽFi4$h\m@j*o8U\KBQ d"ZCd8)4͈ Hijo.Ţ&QSqV~3 )\eFl(Yd4sxVy +"E&I +v^ &;\f,O IZ}R% +%"hJ +W(PP2$)|]hj0켻ڀJE vއș֘;/S +yj5`)&G"lBD;o5THiB%&7|  ő'GbZeʩq`3!.,4Yr1dH䜶bĴ$8A͠C!aFXGeMk3_w뚘1;3I@֪L켚V Зc2QG"`ڙtMF(ML@("bsZ!`>k?3 Ԕ!1es`jafH;#LGXm9y ꂝg& 7dAoY,^_۾w"K(:gS uIE@dh``@j5 +) ‡SX*0'/[Pjώ1%|,r/K"pN͚zP)2)Sx1- Y<XB۫i˝JƵA5m)Tx&%E U,}Qpɢ0 N +7L9켛J ;ЙT/bȆfY@F!{5'|,J1`@K40pСL"ml.21]BDJ=@16aln +Yxe L{g<+͚ 7C 5y+$>TS6C$ F Yi^LOh$6G]Zb3^7b剕4{qs4 <PRU@9~,FŁ0иDLsD!bt)uH` ɐQLjb2/`4:$@r=%vR< Y94&a$jT]CyTlVda`Q9}kq9A^gFÐ p[#AGEsꮁvSWyGgEﻱU, +RvЛ; )'%y1CPw\+ʠϪisV-Y์6#d!9©9)B. U <h~^cW;".C0d: %p)m_$C'[ = +6$G#-6BJ}30hc7#Xațϗ.ڼ~)3Y@fy% 2 aL."Fpus !D q)HM:a0> +v $E^7r;OG@-TNࠅb ;p"0Xa j3C CZ0s#eh;&&yF *J0A " v '1P5 C3^l'0$%jHmΐ + $ `Ϋ^fih5;xh &~Y]J¯4 COVCEiP}3 Y +]pAV[ Y'So!yț8}'l SG (p¯ )52 Nj'A,AI!4mD%3R]a?LQGJ*y[^c%'fB-\ܗyjs!-˅jE!4G & 6j``"#k"-sy0d.:Яk0>"~W Cy`M}I\RlYynK;}Y]~ɷBk-"G1E'D$ܲ,9?qO+?qEiͧ|s+Qaܴ)ƱWIm$I7$y!yER;Od,\l`djnYĢR(8;ϊb(4:A" $kǬ>RAvr#:p`Ie"3̆8mdPJC^tq3Ԧ~BLbJ,= +"5s&.6A7 +&PТȑ! #.qд0l.s<]p3$ p3mi3|ۘ)]? ʗD,`I^$IZxz4Ӓ|9nԨйAtjr=p0d[Y"׿ۀVƽ"ngĮVsFQ$/Hco>Rϥh}TygWpH͡lX[b\/5X^ Ux*Ol D*CAQ&Lt7Ր*rt "iSE<8[灱wrNj;֤yHQ3רБB^0S7򟪳mC-[O%oz&2X6FhֲFO;ыvEr`g=I(9x٪ȓ,tHĶOeK<|IRlQ8V U^վ@u3 Y_mg.}L6F + PUox.~fmɆomzp(=١)'J'b<=P̫B2Tgbxh47>?} .*+jPХA)ZLu@J>PZ6g!y]1q;5EXd;e ? 1IʅTn,z!MUퟗ1DUJP1KkIpG5<1U:* Jircj])6iN,jDV &׵ +s *\-{twӟqU4_UR}p{Anę_yNe4}t3,Z:ە/m$i֫|H bjz2JUнr*)jGzh 40e#1 y$&4{ˤH!MY(7f95F.k>N)Rk_&CVmm +< 1W/BQPF `x5>DrKʅ}y-1gRQ708l;e[:9M\0ȳgS_.\[)Ƣ5q?1=#MZ XG n|/'R]HAkwEF}QAޒEYkŁ۽hipVu:^ցbKAhu#~pH{g]'vyx Ј\Vv_EjZ`)S#y_ +_zY TtTGpGJHQU nGDZӪN3Me` |톇mBlAT˼L%ɹzC|4fQn{'=r,QQ*>3 }!]aGm )5BaNBM*)*v%T6]CڰrI2XmXҠZʌD2rƊOtiKQgcǽGL(S=> W,H,B,&$`CHnwbcR81]U-; + `EE -_lEЫM|~;y7x^;}1a5p,NHļ5TC wBD"8xR͎iHֿ:t:g`3Gn1>7gO棟V:I>sG +Hv +{8 +ϬTojZcLW37.e@i lT%G~T'~o"(l>(~@{-ݴA:9 x~c0pg?P#˃opȝGeNvAOn;i'\mwϙ1( 0BP/ldcm"$Ւ(R3pI:_[/~n`*HV{_]nV3aBC)ET,IWֲ6ZY.İ8x=u[Ō@1 +ʲϭnY!ln +kjSRO(e + }BnFO1}ő'5IU%`֊k̀_4Kns92s+`ky~xcŠGҸzL4Y/B +c!w a'2_,$+LY]C?:ߊ=w(i#еw/K0Z#C Gv&!O +0HcGK#~r2IT4Y̷>rHnabczm >^C>.')ypUbgB,%jiLDz@eeV{%)mi$jeҮ=1ŵ=g~H۞Jq+;w>tḡxYՌaM)ⱓn(xq3x[: `BF~wJ-y5g  [fh: KS+J1>)Zv<{A q7!?r? + "|Jt]7ko}xTy 7IJ?o,QR%,<ȉG&!ќMlF^<[⌎pfӭ(tRweopMNb +(o +v#1J=F^ѧ2wcEdfly.% 9ƌ#pM lNu¿B<T 6!?6!Ŕw+Ap\?cXD$'tWf&ev:bh=qXQn(-&Cxw}sG9о㤋0u] ^MӤ/fYwrMo0G> +ys)ӡ .M}VrLK䣴U^A.Ny,1hP5bZseF[yբxee?!l̃ q1%Ue&ڈiy%}k!뒬] F>2mN}G<cjDdiՀr)xrDpN}/Z]`P0E442Z*!qW7״!3b* *"펧UB*%8G̺fiD<¤SOn{ry7vU>k2ܟwPI 7jT^I\ MԗKC؎kVK?4ZBQ#/vBUN޻6mF 5 a*Yقx}44;gCD͇;Mg +GYUvĪc:kT*zFU-p6dэrJhcUϋ?^˔];%ͯvW60x{}]̱/nΩ1ġ P&ђW7j$]%`34"!`f&{sD$TpڊJՍlU;cE\T"* xP) ׇM` :Szq9o.ϩat!k銳nEQOeCҚ"=紎4:<[}^Kn +ЅxiP2:9 ..=&mܱ o,XiO$T#O]<,VI(mcft3Z3;~%yQ8mNpqH:cSK +Sw3}@unAh)}h.u?.e3AS ^M=L v g-MUen Dpz!cI]PʧLQǞ]5ny>[c\ۚ޾zNsE^=BooBja@(3M=Q$5PCXc9Q^ql!1j?Ecb)Ʋ5&VִEty{d ,B +і@uF^^]⠯RYZ֣E(G2 W`E,[P-Cm{;E*AeOPˆ^OajݐR_ܰ˔"-eOwT́3<z_/ U-*D#"3"TU&:)/-J$F> _RU +|><JBᄡ +슀0Ejj1}#S]eY'Q:u4ꏇyD!HWEﬨs UD䢏%w*T0LgJ*9*d?c-SdDodKheN:5= -p#sL1PM(Ljenƈ[d`E,egDۆddOނj@/Y9Ѓf4^ 9!qOEipIF>pCJ3`6KW'}M:]Н߻%Z*EnxtPzph2:MEQٖQZ$TĀBKCD=z65q-ܡuBĄ% jfB1$ܭgqU!"_*K캤%QsSЀ^[h \ \uosbYЉIBi5BfBak)k$tg$^ov(.KqC}sE+["ļ|r4o$<Cg Q=Kw"!}>bߋџXǤNL:UGx^26w>9S}-s3:| CE:%>w^tfVov%JZvZBT"eI6#ǥayk~K;oE`m,^E*ޝMឰm!ܻ_y˱?jyEgTn\i2u5xUKMcLV~]l㭥[!<: ?h,Q6C yݼ_6jʖ +8ǒ2Wrt ` +,O-OJ54wېe" lK_rvE˘Q#Y{|֠K8d@>{?觖#*5#Dɓ}COgcgZA5J+/7954vgyG|E. +% r)ٵﺕ'KU`8@rI}6i3~ﺹ~*T>0 ( },r-qetec5𷅫Z*i .L;柏3}SC=X*ۇP5pB*?9\]}! >`; i|;iTb}OiiϡMh Zei{lhXɬC[)R=unS0WMP`C5I7n&;R>QXYd~}l]t#B|@˺E&w W.?ް0za)1KOdwaB.Ies[q/ej-- K  ;*qznS3IrS]^I>L>-pDcU=IJ +"tAEF~CDe24 q.FSEL$ǡ5TLF0Іm$I4_#KlWYQH%+R##Q Gy5D88*|܁$**BĬs{TFU/#;``:ئ܀Q6=kX +)Zp ܀ʲ)3v3NeY>`53{Ma`>0hQ L6`k 76w N}mE d_B% +Zw֡7B kAt6FՖ@aԍO/p^yT@ʼO5VӦdB>˝OBWs2po_ ?pl_-냩`Hyy!so+gaBcբ.n\&őH_.o3Gu>nER52b*p݉g9 [&B}!f'ئ<ؗtW,2L$%Tby>$AYgR!XSWr!I@0,9X*jm=$moF"%OaUv+pD+BX)o`=VPG]]MnNAv +XZ1ZC)Y9 @QIŒIwA&lԱ|[R}J+JbnѼ/.TT]CH$s'm1mDy Ӏ4+ #2D' h[壚4j pۖ3wQ=!k +@FT4G\0`.}s GIFԋ7ޝm>}]RJOA\$V +3bzQd&m$g_'ؗ!OYiZ.?vQH?D9V:U~ CBOtZ~f //I݊i7hM%Y~'u!KSuY ]⥡Os_}83TŽU+[xuZ1lgB"9|Z Wrs6"[y"0.[fJ8+@}nrF3 ~|-&VRBP[ + +[\s9kd _n]pn&!A%0nާT\&~(H.psZJA{q.Y "ך-n[͠cȷEX["JH +iV\[DVe>_. p!P8}N.gDH:<}ba!А>QeƝxYd6" =>멢(-H;AH< e-JCz&!0sC\xvVRI>!Sxt _igKr;+[+DX ê*"?|ct [xO(=vX6qDq4~7 j z3LLM3ƉSԉ聊MمOR 7whVb'N#b~K)#!po\"8ؼ[MK뽾`oko%;y?@}c(jIB2Ч&@E_`EYj$:*ft@ݴI'$cg(I => +Z`Od`SO3,3/p¹̀0n ݽR"),U0yH嬞;^vVcLZ*ktbwE|H̢-bXjX!hYHť%,5*ˤJ HnO{B(Y;4qz,-d3zJNcƲ7/h nDaesZn%m{^ -n|T6Ε;?"V 9]͎F1zbTz(jGSaH~&j"/'OM?8Y%aU +65_Rd)} +25V&|XZ$A} >0hIH[={2 ǤtĦ߬@3!bɐь/Hj*BSdvR*oz^ .ưjIFNzqm`~y dΈۣ j?E"0L{Ոz["xMRQk$KK^D$imm@$ɵ}j0 +go+%1$lBJ1f*Mm]RΪA,of>UuX7 +u-Ezzu}:h7GPL8*hXE6 vc"Ԅ˚}H&o, 硰{ 3&sLIM(dcHT?h!RR`Y6JǑ5\RubE@HHW`n$PӀ#M˖e4[Q,@x@[I6Vu赮S䮖G#G7uxw3Cwϭ5;r]wUAީuq(ȭd `j;5Nnu[sHr\eڮD]i`mp&DR;jT̳ +m=$QiGd/G}λveƹ xR 0l$ޛ鯈OCLh)iBHȸBA`Tc} q;ƨ0x%VתBy=kEfk[NiN U2;O He foU*R|~puf?!ZM&qvD-jz;# )8mKo#( +v %j +Gͽ|E듐!12 ڊı(vJRRI )*)tJuZѩ-kRju >-[Ѹ>wU,EҭU+a؏`eF2 owt>bEgTSuקrꤰJ^ ZZeܿB w2>n8On'%ci5C\[NnJ}H3;:7ֳe3 m̊8=MXhl>-7nrERrNZito=Q.=cxTss +(? Z +2NK\Ccc\Tc`8$)˾GE\ixq[dw/$YR3¶rc'XR5_R)3 7_R5\]FbF~4xp^40jwH~ +MGd +5~?ӱM%⌮="l{?{|fȟPpdѧ/K[XNG:9a E; +LN:| _cZl +SD3W#r$>|^QD1~.iBϖcI{R|O7>xꃑsw/@_$=KS"7#\M珁iKj<"NӳP5PjG 󌕀!&v 5 8Ǔ ȿKDw뵟Ӥ'ǡ!W0(fhR|h՞cNLjDZ5b6C Cm)*1/VqNS00MX<H<&N +]&&\PE*o e=QEyYnW!I`7*$:DO}"2PҮM;Jtj,ao +lD;$W:"WMFY`$ +ܳLeE &1t +ІX3k[xo[(A]cKvBwyp tI{qrrs?+La6}a8Q;dܷk;d̕v0H"Te`XE0!}Bw ) +8MQa^jio(°7"OTX(xIPI0vd!"8\qC}J`]-pij Q{SMg& S&eȗ@aHǐްˬ=Li|΄^ N͔EjN\.h.c;$ *J7F'H+$N0ʓeqA=ry˷0ypD!Q{Ssj6k((oC F[%YIݱACBtIb5RlK݅ ve?4E~CPyޠj; Z4Itv/ br-xa8^Ik!^wiqȶѝb#5;1.2*2Uu񃣀P6i!z<$!>b'-Zҽ%tۗn%p=Bٻ|ׄi a\7uANn)S^ư +!XK 7-οSͼlYQBqbVi심J y vŒߎ˅@\32E&vegYo\P͜j?p7ĔyR $ljL'˚8f4W?z/&稝#K{)0 $Y S^LybT,I$mO +nj3U8wKITJw%Up*xϛaW< :KcygT?4I :e&raH]yȠT_C@B + @to ddY2ѓ3ߌ6L';7%y6TeŽI>pd IV`Jf¦61A&ʼSQqD0z@9 Sk Ñ`+KH~U +(.-.SO Ra;Pd r^ɿ #w;ɖF'C,X^RHN}͏uuML}k0Α7;N4a + +AU.9{&D'qٮxf:FXm!Qc%{ΒUY9@NR7Al0!X'S[o (0K^ ;C*ꁚc_XuQ-bEC~VΈm&spakfP:0b]&^zF"'r53eo'pKAyWH %o_~(Q2Z-xUU⏕KPHG=@6ˀ/Q',Tӆ W9qblH%4ٸ+'UG/}_1{Gʊgՠ OUy%ԓ5YKg-{jB;f}JYUhĹ=kFf\RMq# ڹ`("Oé"Jm\}"08x| ዋ.Kҁ:0mbfBg]O|#_y}0";x#SsR( 001U#lun L2J."d@[ŃŊYzRanJu%K1VLS:Z`l}SA9[lhߎ?eM+d;~¡ڪ'!Jh)LC߽{(0L[S +эĐ\ +q8Z( QGQ. uS`8qEHq7Ҳ=z?tK? ? +˿]=.}S 5J9 ,5(&z%ΡT$05# +>xزÐ" }OF:{!}i.DwG}),JҗY0n6ɯyI-ެwQBWMpUJ]Cpµar +fnJdr6V~Rj!dDa-OLn -i@!<&Ҕ-|&l>&_UEF88  ԕ3jh,4zMRm|]Іk/U¢45vv\k4ݯLw/&;f`f{h5ZًjzcIZDʘMbnC|phnVd鬺9եGl/{]ݗ$%9Esvg%cX.!6*$"3KLвe%L: +2M: yedyUњNH\6X^^WZA+L؍l?P]OXTAg:mԐTև̶nwrD \3mL@D`= `` @ +0˂dY?q:s+&ġ69V?7iי79yi;̷*.[/H{@(@d74P0g,]$W+Q d4(Ih_ ]Bg. P ɔ!JD2zտvDPbkomu|ȨhSaKdk"} /ّYVtJSdf) @ > +BxЄa!HHfkkH^).b&0ʃHTK)舄p@(GU8 PL݀@@n@rԍ=QgV˒؀Pü]c6Ea(Gd ҇[1 RcIJ wӞ~aHdb ; Xű[s%vFI}rvב[lqJh7F6wv&Yȓ\o Ls[1s= +\m6( q"grvx, ~*@dzp9I CARЗCRpdžs`PpP}j@Ħ+းʬ~t̤i8fL7`j9ֲfu@x fÁ(8D!,ޜʩE3ie0=EDG(!et:D2ևzٝ ^/~<;:odXh&sr"s̤k AEʤ$)@8$:dIbj`bN\UaXva8yW=MWdN_^Vʓk+edl:oSNwz(<aLu3:YCK5jr +W̕skE@B3Ė@* U\I MB5.Zr3:Ҩɩi,1'0L Kj iLB]OT!ZOs2$ٚ8ɲKG*li\^qPCLqYYk/`7)0;tÁ(I BA E +{x;O۽H[t+ZXqfUʲ1)m"PqBI^ $P+yG!I)8ѨMJXjAX9iTl' U݀@pwX<D,OU 4r@(և:"~r@(lr12P% L&khN~[sO+.h +ZKbYXK,|b̻4 +W ^nCe^pԪ٨Ffh6 u@ 襝l6A梲2# 6z(i6 za(]y +sʐ@F/%C*ug}.T·`>JpH@q4A|^hRГLLTM`Xg('Kvgied:.92,-wwxe z|JDtUJ=F9#E&vB:0Nj66%srph);4 +TsL*щHD9BP NVUU"ud*ȔTTS̑w99rȑŴ(9 YIb();aq "␦8R(/2gǬ =9d9&EL;d"YfF}wd%Zv֪mkTܺ.vy  V(zbH`&ec/; WۑEf3yu8%yANBm1ݔ; Wh<QoXzgʒ1 1t4$YT=۲de2_ӳoi4GL<$C֝Tŀ DoSћA9"N=C4dffffffffffffffFwfVUfvW֯N.*g~ϕMBYSVTʮLk3m¶,EI0OE`FS Tm +8$U6e*3Rݝ̰TL!~xv(W̲8ͷ]VW4?|BTZf0)PU$"Rl2\Nʟ߶VST;LP0*PҀp-AҩN 35 .6 BPIfS_diNbPk; 's(Ty*6YC3-Ez,$*rl j[syQ"0務uifhCKBH̡oc)# CK,ƿ? cY݇(IC&'׉'d*ʌI->=8)GH^*ĨT&6qJ) hs..ul쉈xwu۸ {͌( cT͸SM(ODDSL|!8 BB2quF~tUBBB*FmdD]kFF/2IBI媢 0/*3".O5'H٥Ѥ٢t*tUW`';t8ih%sD%kWKht<#F{{ۗc3}*m(2NM%fD;* ϗsW='3PSl=yY8y7d/@Xxi|nNf_b*:,1F1 $K7tb.-;ĊKl8F.N{7'ƛ F-T4#@4&á,df2F884K!=MR +!C B$)/6<~|c3R!ѱBE#X!Dp,1wF"`Pt{_Ʀ5di=F s4_W7Hy)T1loA fWz霒 I>њd#GFOX*Jr-躞P $oʽjZsgNДV@# +Xx6r}/K7&0D""U@PI,<л +U>܊K/!BԈMPZ%ԃ~?q'=tASR&wp.e fR֋_+)VSA[8XXUVդxNy-4Ƭ--QJ8EL7.$'n[4"]"9qi3&A7Bí~r7f#G>LIq nkxChdNTtqFMY]v' Y.ֹ]m"&4&Yd͙`S +G P%,:9I3;Q~Kvq9gEruN~8BC6& vġ? {?[ #͙?eh[;_ d#`MyL3;]|4}4hLInÔ}<}B#5̩gq:yR3ʥY0M ,Yi[A6jk _\rt;.%%VI)H!P cqh2%jU%i9逸2YЇ.VbnGPf;sT^C@,yt`(hJ@$;Q/#k#)eti! 27`7܋ hHySϥ7{$Ezn43kɴ~G`2p4j`|e^k#ЊnD&h[xD^ [}MU2DxVϮRo֛Kߡ#X @1 +v}.pI78TG4Z0RvUn˺u`3% @űFb*DojP~+O$RL;$ kf +FddaH?Y\ 'L/f7%#_J7Wpdr@cJUNIϘ:i2ְO. #v=F +lLkZd%Aa2}h|g  `YoyBrUG} x}[+lz):b:"Zxۍ|%}0DP#\ [l⟐/ls KDΣ3scqLLT +3 +tx,J/ƫS֡AA fzw{![jΗa](k扛"gLT c6--+PVpA6h`p͛za:K!"]8 XxqQ\wbJvT-e_uzSWp=lIRUYF_iW]g"ېPο L++n R`@5u&!s7Bn+rsO^)╙/]O[kx#&1,>yq>o +rep6 .\Qly^}/|مz!̗>U^Z,S(F5$=l;m/cu,=,E#0v +E(b ;IHbUwxTiղ4[`y3M<%n c3`.AdFsX + RĂaK|6!&bU*2.gwnߏin謝KSG33/JTdڞv1I,H:[8CS5- TpF9,I#+J_h>u[_y:Sj|v[Lɸ8"+㩅HNعCkE7uI֏k -_RGIavį6vOQs0EԹ1+ "T}"$36%7!G"D~GpK?WG6ik +?dmkXAk128`Xs[Q:&z|/zw>34\[2fGpŰ1-NznkID-!j>wL2IĖrQtAϥdlzԃ_zL &PSRҖޝ:RZ*1|-QKBa[ٌ$K ,+#rǬxeKt̗P"Z!$ B՘KFܽ,-5(p: 5iciLer5ZwरЌq:tbhXIdsݯ *Uh.35G{ [< Dи/3 ]y%4i7о}x~ \"}GXI*;˄.$99qX8o\hVo16M'!b|qeqe`CaJh)+B۞7`0vG7:A-x:EYEx韻Xrkk?bfw)](Kx[ITjUS:4`huW$FE&g1S|f׽!c72=Z(}A%qVdm(8l404C/L!:=x-2ڈOZvut 0ǫ\&Y5G|'Cf]'KU0eAPhoonT@?M07RŠq%!=` 퀠f|EjŰ! [r̸3w'x_3Tl9]QSk3ZG#_BDRZLzX+F2;I?LQGcיc #(}1o'Z1MΪ\R9+7K,DZ2Ř<&MI_I&/$-nSnkc{wobKO8Qkǖ-BT!aH/ſoUpXr`ix#'ԃ|r0O$e3[tPXojWnql5]bc{t?zy8r-j N:͟$+&v7>!o5$Eݖʪ* +-sH†z N5<k@M Ns 8FGy>A@:2z;cC/Ԕ3LN{L}EZ6N7MM:wS2ۉAs?nB +Œg"CGlnC`|hIϑ+ذԀnl?HaSJE?~F<ߧ֭k A5;*JE nX6pXNLRi+`3-]TFd|h@aLx/uF-֫ }N=&4lW1(ȭ*.5 ۔s!<QE=X#jUcRv/4{B7ݪᥗb:wL41tuzLyy4`RK.3ԼVu7Q^_4I+_ܹ@ fRrp8UKᡒ{I+zHcO6ǡ;V|3o["{>1+6OSjq Z{܀1C^i韴A`zh`M]-V󯉘=j ii-gധ-xZw?ͮc*Uz低W喐3Yz`}`(F@U:ڠ{jz +J

?Byb3.<ھ/GE0{٬Vdru!f.0RLA/#5 |.e-EʐAw(֐AhRo[uK껡f.ʿKl{-V~e}R" =L5N=UOpr4bS4i6AM7_kU2d4W5#}K8Kk gj9~<)MDѨ3b#QI]Z /

% U}ΑBz³Cxհ{c8+3DZ+8<[E#[=q.z!:`xnkr̋wBsUAUWdhQN +1᷇9uX{^jbBƸRz^7̸)*6SK%+4qh9 +A*QE2s4ӝ)LBϺnGFrmnV1M#ZsizbG"fc=`"2?xYQ/qbf{l3,31^6$g`||> )<"|2Sr<.gT8Ty9zEtQlR@R0AACaK2uھ`?[(URW@'+hb1bjd?ΓDiy((1xT$fG[։ +bl'. yo*7C)Rĥ,1/8o G-Ks*ʘ-^ +yx$t6-2P g+S/,|;Su_3 ֞zb9v^X!0SN@r&X6ҏ +tF' d* h9W8E3b iŽIA+J;r6bxO#U + aF`a8rL[!A,~%4i~<ܨpYzGMeLWIu<٫ei&vmLIX;VLch$Ea`Y +.Nlm' +, LZ##3M3zt{BF$`!A@dZ%9@9! <N_ AC"߳$]{aIdiE*oq1>7tnk󌿁T43]פ%[tѱ9 ~V*Bm*~6u~xAb@պ\Thva23Ѐ ,e{[-f *'@*(5A-GtEsPTwp#LiϬ[EɓLB.Ɣ(,O8pfTQ+,#ew5ȒisV@Ђs\CvIׇ@+238A!!<&{XTWpu@h^F0Ѥ\V 鷆EJ]Z!5w`e]qe4mhhZ!Țl8FG)1fi8Z)trp9Ud*`̠Ev35#4, +nM@Pb8{eR5zi-ȆvA => "ɌڞlBQiȏhjc`ԫAv~;6̔Pj](hc-$SK +ʬ@+|TUeg\ x xb8l:о˕%vWQh6W]1mGGLJfG"ֲȀ.|)y}\#/FL<ӿSCy{MbEňkI]#)3v&1zp~2@( 4AGWtFrq +~U^B ܶ[Gl"v8@i|r.Ċ,hʛُ]cv_9DFUQ=IGRPNB|1%j< d%$ GgvyގUfKt-A-k`eG@,KꑤF{X2{AK.NOhUiae H3!vko Inz{tCen)E(1Y5׵v'l='NIдsHWs2YxŖW@e@0d{RC-/ g(I!){,—GX*'? +fMh~юAq)pP7XǶ@ =Q?v{.on17xU-`W2Zx2'$^!!OPE)x:Nv8gNO0gl[NV+2ɧ2&h܋,\R3Oqۤ-~dW| 9 \;A[UF8@)|{b[>ZovuuCa,l);7Z9sd#{@آzIoiavDNużAH444aX&K>g~%\Ps@m;due>: oHRc#1d+dq~)?po=]Q0pf(>$R;!|Ǔx)S衪5C> +9|]"Ke>'"$pUB""d, Rj=lҋc`Buc;vhWK&_ vӨ71HgQ!A|mL-O|BYo9p>Q"T@iD z)˒Iv<pЧQFxYrd6hv8CE,["ml;WR[ăluّ@~Вu ¼g%V_[eZAt 5^_U~qɀ xjA`4f ./ozxBʳ#\u#S tRmv|JЄEb璻1TRlIJ)CD[=V Nfӌȕ0bx'ј|˗~W,fEv}bG#gYO,ʒc:x,-^+H_R*^FO +.W|~j/au-A>SPa!$J#.!,LWl4a嫶;GB;ׄ w-gԔ8&22 @8$"IGӍ!,.eD4Ұ28.l@&0ᅮYk@Z-6Rif5B f-D$~ +nK:,=$/. 󸉣Hm ?IW mQ#<8+. _bq +*-9FS2r^¼^:D詀2Pao-Cs;݅<~=.=XXSOq֣@J6II#sHʖbGoBԢl:+Tq`~G;4E͛uX/l+iq=W|* P7 +ۆJD~LPwޜ?λ1`QMZ.v[ ´Dd"<<, Doe\,>\1N>' i5WlIiwh6 K-āwQJ8+2rs\ L7!g,dⓘ*?w&;&+J§\#52xJ垏,ĸ/u +xY}!1W̸8R֢3y-\Pcүڡ(PX$Ycۜi5x 9bTqo8EJLĆń9,ߺJ& 8g/!׬(@0}7c_EuU?.,T*|k%MhG +_| RuӪUZߪ޺sq]\ 79NY E]RGø ?rHE/jbF1  LiO@P:w,27p]$%>a4C|l:qm!ݠGt)rtR%/jR/} '%~'"۰cƃI0裕{A6b\vdFl7o.1qml+&gR:$2Z *k@1p_쓉8{a! I"kO/#oϘ3megӟ{\F_)U&YCsa*Lʣ7s +iC )ah(ۯ^Q7@xZZ~qkCJ+&[H8b(3\Opk4fE:_8:ӀnUC1;CRljYVx\|:$o_ Ʒ 1B )ȣ&hjz'B23LHS][؝vsĎ 9Ѡ$]Q)H/} +P|(k΃e|=q+'-H?G!M:aicN8JDc!xK1m+ d]B.כ"Y1}N 3Qtײ?;ﯤzsD vJscT։Bғy9ޥLM%sXS|=D8/dQapvBb< T=T (E|EAAu!=jFit8l(E:"mQ`1kwt}+i{sBJ}M1UI ]`w'k6չ,Ȕ]b@s|@K |+XgMX0$F΍e|%|TdF}HB)u'9.U1 +RϤ,w2YBqh?!S&R0z|Jɠ9M\(>\Ⱦf߾R14lΡ!Y)\N r`L.d,PڞT +4qZF%^sC;Qm((T4VwOKTV_xt\X !`bXyR +45$)L)W:z֠`nןy\Y0E#6)vy +2)y{,}bw )BTRh L:ߛvBXgkiyI|B$`C.JMDkI= hCehqR1͚=d\f^.# %fDv&')x4rM4NANN0$7y,!@ bz\z Pӵ+růŔ s?b@+lbvg0?40qP\:⻾>?D[}.΂D: I텺#r|(գ h5{qyM$12}$JovِDrͶA"ȅq >r K& d,w%:)E6}]krD4b2`Ie\x st [ oig?ɣ32?Q 42p1x MI-d%߆,KVNw;[0R`%#ٹ  ~EwF'MHFeݸ25YaV_n,1PPie]!MB+HsJqI<8Z)#ɖ-Qp{%9%&VMLWgn'6хàlWɠ00G\(zs×KM7AzL5a9E Ḥ$Xہiv_`DĭRUeiwV%:x(K=THoFǼѮgngki%*9ƣ=DԩX3Cl%.DnG(X$6\gt +kfvOdD{3g7H\<ȮCUurJ ߆S|p~J6ѳ8%.-t+BE gl&tB!\q1] vE:= bҀ JaGȎ)s4fDWjji0* +4iy0x.lWuOu6Brt)rLo|v)H23kqW.eȭ*M4M9y@mD܋d!`*8ςr(`#"U(?頚98?@~(=Za!ߐ-!>UbPpT+ · Xf/+̲xrOS2GX J|,)TEZeNSAÙ4*Մ\1nu|APHms5]I g6$:}V˕>RNDvQ2"s_C x ,;]] prwwG_x:Xt)ZPvË5ʈaVʉc=b+Aubsc6P0UtT0? 0b<s``؉!/$V\C?u]5:$Ex`T Eڋ5Cjғۧڇhlt2Խ+칟Cu$Hw'p#0 JxSTgVBBPK 5 '=j \+Q(YxZEʩfwlH ZET -2 ܜ:YC}l+h~c㎯2ZhE2r>?*]i.&ӕu&Y}ǁ z +|ı]ae R6k^$_M 0HcA'`"a/#@<H^ߣ|d̬:n`r *kۃo+#m9' -qثջÐ%kW.]`JwR[ +=BH(Xr=ZZ8?ʅ XÍ{g%l1R= CdU(\(yI4h=UQ@!pé)\ts.~E2>:.!c-7A4)pE +I.KP;KWzлd@=Ϳ.STXӜUldR/jx +`i<1Vp,TCu$8eP ZY0Wp(bm]NFFˍga*aTydW7З;#8.%SCL@>V#DdB$0ˑ%d/!|A@NF=*õN#q:6M6h#Έ".yr] u a.S^ylcO"1 rJ,z=4l/{cرZuf L/Y^C-Tlbr%aKl j԰ Wpvau2XkCeNxɃܩ{۫ptD MiRAaP~@$s078$B/niYB GF9Cn +F*[ +V)t}Z(i=ف&-hrAZ qԏ !y}@c.%cTFR,:Dyq2P@*pn2`R @֮̆k3)}AȲO_`g:o2p*P-/ۓ!6:stѭ]FhK|G'VL39Ǝm۝q-\pqsW I.2xqmOAg[VAx(I0ǘZqS!}Zಠ_ר-` Va$ !ةaKXa7„[1Jw9sXQr}2F4qAh\&C!W|rrh:Bl-'A 1t.:߹' ~K=Y +߁XPij"#uiEq|>j_ +@Q9rSڳ*9Z'I}Œȿ+|'cmh|`mPER*Μ{@v²Ɲ["UhTXsjvر^`eŅ}4dE + @TKPQiaT\v R? VBNBWh;U1QĽnjn7϶VQ͈,31C`;AZONp=E^-KGB YkkPMe +%0q#,:!E?PD!Ttkj\ x+wĖ U3-izZ˰W2m,UxTa(V-8ۓW' 3.Q'چ`.)⣩3݉ Ph{똖IsJ@ij?π\GZ*GO5ϷD_BˀRʭTiP9o͑V!H1*%b@W [9{+44\Ly +oU Ґ/z,$8HQJ P}}"3~\k̏RH 淚.F%Ɣtpt)^Q0y `ȕx#t+lf6Fe} + vnhD~韕};~~!/׫.IREv]T7zx헂Lma`qe>h&m"d!Z*yӥI +/Lfv 4=!k%UŘRμIrKtWI~+WzjBs#GL$889c<6wMIp z +]'Dۖxa,V};2fN,x3(sX׭$@En{Y!uWb6pL P^9 iSGaښFH]GF-?uH> wk o5FM=Pjg҉x˷$ŗ5fV/cL0!w =t5@bq]Q&k7P 0wUG2 +5K?Ybf=*(L#ۍ]W+Iڭl ~ +0!V=GR?1X9FHdFOO BM!wz922v+X8^*kKoL1[LOЄviTbۃ27\t;Sdžbvɼ 0W tV +eJ5#-6:q +B؊7(w͜q65OMzmz''QK((n9foÎ X~Ϟ@+@<=%)1$/6~kyF 30@7% .n5%,a!}آm&LL"cJ͡„@Րa.'jd7r+^F)zo +] ߰xr6;2e + %иWo^pٻ^Ba P|Ps嶥?ܡ#Iwx'6_Tveprz N{gQCPE9Š(M~gx`Sc\z⎥z0?uoDQV/xACuyt37'~9[q2vHVqRxf@ ]wvʼ7幚Lv) +v,_ %Os)UK@^2,Y]e+9pQu ;Ph#" YkZ)jKtsO\'.`#zg޲/9`h&\) 4Ap +sS:kL7&+r،zA.ܪD,V*\Y`ܮSӰ2qsAX74A" +l0:-MVNX^xwj1#7J5 }t9/>Zܾ;>&Nե( D#C 9 9eɍ+=)82H/L%Pիm;:Đ]6XQ*OqF*ýltOL]:ԕ--x?N\ο9P6Ĩ <\u߉7@AY8gE/>U{5w更ߋ9g QQRr~*\Ssifۃ`~cMƥ^=S8Zr"ɊmS/&2}? nd?k) *a2 cGBd+zHdEl5J!7@)d{R`*HL e0ތ3ٌ ${8>v>97gHxmDx$0m2rIx25sN"i `P^EI:SHM Mk8$$tJM$xD"`&%11J įWD)Τgg7 +ՕC:+x-SAFF-EXK:G_⿓#w#WE)m_#TB~W>|=xl۶ɏZVSS *!DКYFvݸ ;{MXWŨV;Bqka6Oyv"qp+ѡ!muBYkFS9e2aqnHNuySLO1q{t.y u4Ϯ>Od;um`{jfDa|T/?< p)_ Q(PpXh $Xx,*4<%zAcd +D`fXFtOX9 BX?SE C|&$J_?H{jpL!ݲDI7h_E8= +woނ9)!F_L~)V\k^eH;k⊊ Fώz|>^Z][&\29xlrs+r`zO?~ vf7'45^ԋTŐPP٨7Cb UBGqP^81O$an)(9g 9cm%Axdn(] 0Q YXqLd:JAv1t̋xǍya~6wX5Fe;M dzo{W+d8wky3[!t=D3Qdю1&<,ԓ093L$ַtm[8-PY}ar-HR|bXcQDΑ<\fY|\܎^k KV̌= :@_O_O89_vY`kC7sk  XM\h,╜յwœPފ !umbRڡn,*@[h^A0&KZL| +S XZ*`3. jŶ + *mljS1p'E2cp.)^PP2x|a90Y;ezOGJ[Y/8khxVh}6V,F 1+~@xRk«VRbGeCvs*'F*qbc#|X\{Eաb\h #zC"9v'Œ~M|6G.'Vk|GкBz]\ADz>lfU?p}k98ca(f+HDyNBCB|+q/P:* H'BԿ.#n^7it:U_B p2nbrRN`ڃh1;^Otݢ4f*@ue(_StՁD^a.s*U"X3TCB0e2xpu4_v>zICs2)c&$upֻA.sE$\|;ًN1 =3$K-ZXSOv/;Sn +oNL鋩m֕g + Ž⾙Im +"#z)ݭ%4jfz 75]:? |=҈߫EU8c"-^?Dn6p㫺s2rC,f Lܒ;X]XXpEՒdpM:˲^Z ݤkPʲ|qC&cmW]ɕiayρ) e^\Լ+*^<[If9zu͌33@ꃌQPKuaHc1\Jd輢&ju& +x +fԂ1 sClyNz'Q%iE" + ~~'nr 'NwB%b;#K΃kCl8>'%9(uj<Sn< +kԶ)+R஠E=#x;&@4 #Hsv92sD"p*粁ɄQdzId$el0B%` &C_ 5l+98k_ݨ&7zL} oK +-$`z$kwGi{1IW^6|DjK:'_={w?!}ے e@# +Bxc"wěF>]ͣ +4>d":ѨiYI~메I*=0u9#F>V%k\>Na#z7Lkk}06m2&_$rכ'ea@]{ji\v+,i`m>GT/ sY1{eႯ-+d <ҡ8l7H8Ol\la[uD\j)0f1 +!=&&RVB33Tc(soiWHI7B |{\egVlj8N7'9=贵 %~ \hGjXw&^H4yw?vn%ah, 4ӌy㫠ׁ݅kAXns_nWNyD7 R|_ϗ@:u^FK#~Uk/0qГaAZZᾘɋ}eunzC9U@~ >oI-Rؽl@ O;T_( ZR`CO %rCБqYDcFÙQwHղCn&^gCdmܱC85Y.wFazcz%,D2oJcZr%amڳcNNי|ic!K09RHAz߹`~@btL=\QMX0r~ۭh8XQUTQWKB4^mo<>SvnF*Gm:rUhSbW/>iRVa\^5!|8e^,*W x&Pd=}ozzL̆B\ZQDSuCO&vtݖˬŽsfH'3(DrryKHt2H~j0v<lv/a)6CSG_*Q[pT6Kܭ5HO| ;^A3YV.]40v=>t7"E&ZN RI` F?'aKڙ|LؤW"H}٫b"do%GZ(C\y*$ @ FOg/b39BRٍ]`[A:Ӝ4ʈ5} [ +IL#;>J%]C-H݃w(r +Z&Q݁=.`sV&݇֗HV>LB`-7|D~`ؾN{;֝]XCg@ꍍ-VQk Lq~ +tenQrV8I`x!T4 +d5uڻJvy30Hk0|3rroU?Cv$T @~:gC0 +aMrp@Љg/]t#;Ah{-HՊC;[q +B #ʂ#E+(:ulgK5Iz$ 8|Q(Z><%XQz\+V.]Xk\9hmMTNp]ƺ9iB̺b9eN7–Ʃx7CFP˭ +[R&KK-t 6h FX?#I$4@蛺_Ljn,;`= 9J ťJf̅m<#9)9D}\G0Ux':^VT +i@2.\Y(#gC)'OZlIGE۹ +piָ͝t=(ءkb& S$d& {I ~$z<*Aqjif =3e¿n HIzԺWAfZxX#Òz' s\Qνn7;@M-!ǀ?}6l2ʬ+^g*d,sE ר)熒~Hϛީ**[&M +3#X`7I-v}n|9{Iz +9^祢y$<}gS>>;e>6\,t xE y£XwNFb8?dԆ_tH\b h / +endstream endobj 935 0 obj <>stream +g) 5 wԱ3 YwY@ VAԬ|m8Io񲓨6-"ʃrzbq|pa#Wjt5LdT|<^ya',Hv$p?D*mDsvŒJUgPⒹ/;p9I L D"T*=3F6`rF1 @sEX󳯮RiQHIp]׺#yD2Zڍ j g(:'ŢVJЯʅM9 ʄmKaOoG@ ++v8-ɩ]{kc21uo>s'zAͪnzI +efѹ(D~XG8k He V%Q6/%Xh*}fcwP ξdtsCхCxyD X*֔ghuTBt!:8mK 5wEc*E0j/m܂T0"wݨck'(û1lV㋠*j,. ?cp$hQtJ53=h!LB'ELFӓKOSOYϤ}Rgg]jZu@Ias1̾˨:x 8(Wgsbiɛ=$s R2rKN +U]u]bV߄9@;2u@`PUJi=:+23jPf @J)>q&(!I.O ~ `ReJjQula1΁TKU5Ff߭@' X L%h/5mIrsPAХV*"&Hazuڎ3b7b/kͅǐ^ffmS@|~y 2Ph]iܩ@bO쀈Zb/屿pv֬`5.^cB[8tiCl-G*\GD8m +Ȧ7['b%BӎsN0B  kz"P9|*>%Q|z䞅sl`6Y/0PJ^,G.*fHCinz9^G{Р-F1w $Wѥ >٭R *nDxJkGSԅ(/5tP|Zm(b_?gr:+дO1ë|qǿh4⴫2b +x픖ݕt':#,ⷴ U.\:E8zḲE22}ןC`w+Uveh$y~_i=~;brrZ*=S&}4qg<.=7HAV {{8щG\l+$T4iteJR66c8'Cx@#.C[ ;F4T1cd݁#\l.n%)ouE`Y7AS O^%+ERz:Ao=LIA$ BQ,H cޛBv3TNwӥ[v dQ^ Ee/Pe$mJgDTnɇnWk1 w-9zWYW +}۹&(%AAQOdhpOqkO0L(j>Ώ!, ZALKG#o0VwB՜hs:pwՀ&: Nt/p$3=&.XXL)TAJQFP244x ,yʿ\5B;(c^aj"^ObhIE3bUlVJlg­"KS:vU@纄a zh +*ho4>ka b#AC*13dS ^)7ϣ +\_]ٹl~ڎoI:dA\ҡ_y+?'uSEkbPHrØHPd-$Pp +\[$?a_hᬹi%q G w P՗0^'1zg6g-oZV߶K4N%䧯AgLÍ1MCGKC?rku"M50`MIEO&,(m54ƾ1 ?P$H³>DHڸN `!Hpvq"-ʒ"pJ68| Lx1!@c6~^q݆Ϭ'}oPJ;f2¸wlu/qԅ0_، +dĦlJՖ`rQ + Ogi8!TXܸ1oM6{[W Z + {`̐ڶSɽei6)qb"f֒6VԲP'uDy2V}8dL:A6%+yZ*_"PK3 POU7=S #o,;j(#pFaB]c)ȹ(1H~hINN̜c]az2neY? iM آ-"%33@ ۭ[QztNTܺ?ݺU|O\Y3bOB 78Fpw RTʹQ&Er)y;e>1"-8 -mk*B]h{0vSG%B'mLwOढvOMIK+kQ 9.HtJd< $@K|7>v n5Cc|Y'a߰hO"f1 :eӥX1|)3hXs p<`\f$b@rv2?)a;whS*ԑ7ئ/?`9v/T[eqD~jCL"NrpJ*'\J_zCPksu~S=uO1__=`G1"C4aW0K5NwX9\ y>Lr]%PT`־b;=IźߵΔt^4.4]wwO UZ +*HɷWX\<Zu@n+4s*54vgt05yK+^rXffڄ4ZYAG#=Fa0ޡ⦘93L̋@D^ 6:Taviw$ܔפ`#pR[4AFTӦk|2>3C8k *oP_"wP#X0lpS0/ D-|Jsc¿ ^aC e0"kE ǎCTCDYy饜Vu3dXJ͔/}&}]Wʃ+[X#Fo +IikX%s̔mV8zuJ@ՓWsOf|.^?`*|lhǢW& =E|NWd7ˆM?' h FvF4*8Kk͠B =.齙<;-PiQ`u}qU׭FG6e/$_D:/)6 _mc10p[l0iR7z }XNpYpo|9}t$b<>stream 8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn @@ -1200,7 +1190,7 @@ E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> -endstream endobj 869 0 obj <>/Font<>/ProcSet[/PDF/Text]>>/Subtype/Form>>stream +endstream endobj 926 0 obj <>/Font<>/ProcSet[/PDF/Text]>>/Subtype/Form>>stream BT 0 0 0 rg /GS0 gs @@ -1227,27 +1217,27 @@ BT [(S)-3 (a)8 (v)10 (e A)6.1 (s c)5.9 (ommand)10.1 (.)]TJ ET -endstream endobj 866 0 obj <> endobj 881 0 obj <> endobj 882 0 obj <> endobj 883 0 obj <>stream -H|TiPYA2횩jAgTVtu:˩530E Z!TE99ZOœZnpIXW=h5rpuD/J'!4rRTk'6J+TJOH J߃WOF.F'FgbP\/'Io2^b klje\bB3=5_|Eǩ Zb+8~溄](|G)Q$XanBEI oxNiL~rJGH_&b4Ywonp}|if-#] -ϳ@B2YngfpNv=wBygc11@h Gq9 p2?h* - pgx@kif_A)~}\uy۰kNZm+lQNNQ;y&x^|ȇfU>e}Y]}f;l" GV`^ܬբRhy+xHZ[QAr5ڧ̕AS,},G^"6]4QK&_N&%vt|JBr+w;`o|n3\>MQvX -x 8AK#=;_6ECrKX]8>XwgZ.n9qP3P.g3L#'?zz!h6]|".D(PH0m\+Z}^B5#e?}">[)65|!6h ̅Okt/Qnm/a׉#>˴gquځADw/jz:CQ3K'e3dTE!=fCPK楝9ȭ͙C%CeCul.::^ml&;aPbc~|I߀k7+~sC4iJ^JJ, -swtl/e݂2=B}=fBA99ϰ5ٕ5MRO]FInFnf{-ӆCEP!v$D1X.@T1d4u4ݻ5³Y[\X60jݔI7:!|nٲ9> -~ ~VQMQ"BL# 1-?=N~ci*,->͊rwND£aڛe_Iqqۺ>J2WFB_/d 7?F$i@N}qd9Y?} 2cj~-sѯz) -gE]+n> endobj 33 0 obj <> endobj 115 0 obj [/View/Design] endobj 116 0 obj <>>> endobj 34 0 obj [33 0 R] endobj 884 0 obj <> endobj xref -0 885 +endstream endobj 923 0 obj <> endobj 938 0 obj <> endobj 939 0 obj <> endobj 940 0 obj <>stream +H|TiTY +S)ZSUTFeFt WDq $vHB@ Q<: +4( - *!.C(+ا>T?k;{};DVS6[q7vi"ʵo׫K"4r? /N߹=bq\p?\vuX1,w={u)BU]Z*F+_(t*/:Z>kTZFo*yVЩUBHG5*\Q(U1 +M<ΒpG,yPl% + Z"V9K@c Ki"TZYvūsJN Å'+æ#}a0w[da$v`/ +[N`X >߆OVV"x$Z J ɉF2Nb'&).I2V} v "[g$!ݣ/[-,!(m_$$@[ٸ(^֚B?9C eIx@ V]ОQ5 ;K+9 +=[EvҤ|t'R&RF<$xl~ ҷ.|䒵<<vbcq2"څW!3uq#:ް?ε繒qncTAX(xX{"vJ}M<7k22\Ê!Fqkdm#׿>x"-C+f8Q9y,[^'`]?܃Ý0蠬 NRD?4P0+H=WAW\D "SWlnNŢ:k @$z/F}xkʊjSvtOAN'Ijcz/~COceha"X0& [azpDARĢ|i S`G CE6SҬ3̫grEכdw~V{0K6dSptމjCWZdJOww f9Ok:[p{1u\B˛eW+4%dK;ą1! ޹u=X)M[\׬/.UTF~Îv t(HJolCvP-*@Jj2Λ.`d8rZ.%!-^'>Yqx0.]8D62i?5TTesIj{M{԰fw~0qccJCTҤ~`>q.N|;}ǁcx'P͙h@ôɾ +xn̻sذpttڐcx ;=!7@A/JVqvM r049w-7 OqTC},WBـwLbbH9:!99M˷ϲfѩYii~ Z=?z׏o <s FeJoЌW>tNjd ++$h18fUp54S#U`krC{Y…?u`ٜ!3oÎOvMH?ՎxQ:mtImysY\4P06[x-#x)ꃘ>t 08x=~yRˡ+} )-gxQ¡}P-5+F%ƲId!DՇ\Z߶ck<_&>+-ij² 9DWL5 v˖Xxmm~XöulfZLoHM9w;3L36PٔVD`iY iV~K;(^qW3B9?#gnr~Cb8\b|)~yH en))Ⲹ=">z:cN; 1b⨻Mli#q76 DBix+_P.7LcC=3acΒ@B"c'ŧoa2o!*ۺ7\x >(R}e^iq_Ŭ0$'MK$ɽZፇg~1^}: f`=_;1eʈ[-(, `'2QrǍ@?@p;AVj?_Ϟ7 #yYW=3!zd# +Nk}'+~A߀i|4eH* օv. Y@9N瞟#}\(-hosNC:) L-vcxM$yZL< cZ!b֐(g㭶ve7Ւu KJ>4b;ƦFnH0TdEZ;yӡC +o ^ddwj;]}n;kkVOU>17 +endstream endobj 937 0 obj <> endobj 33 0 obj <> endobj 115 0 obj [/View/Design] endobj 116 0 obj <>>> endobj 34 0 obj [33 0 R] endobj 941 0 obj <> endobj xref +0 942 0000000004 65535 f 0000000016 00000 n 0000000147 00000 n -0000020426 00000 n +0000020540 00000 n 0000000006 00000 f -0000020610 00000 n +0000020724 00000 n 0000000007 00000 f 0000000008 00000 f 0000000009 00000 f @@ -1275,11 +1265,11 @@ endstream endobj 880 0 obj <]>> +<<22AFA28E1386164F97422C0F946A26CB>]>> startxref -231272 +232344 %%EOF diff --git a/datafiles/data/themes/default/graphics/icon/s_junc_visible_strip2.png b/datafiles/data/themes/default/graphics/icon/s_junc_visible_strip2.png index f781f52bc..66be3dc47 100644 Binary files a/datafiles/data/themes/default/graphics/icon/s_junc_visible_strip2.png and b/datafiles/data/themes/default/graphics/icon/s_junc_visible_strip2.png differ diff --git a/datafiles/data/themes/default/graphics/icon/s_visible.png b/datafiles/data/themes/default/graphics/icon/s_visible.png new file mode 100644 index 000000000..7e0817a65 Binary files /dev/null and b/datafiles/data/themes/default/graphics/icon/s_visible.png differ diff --git a/datafiles/data/themes/default/graphics/tool/graphics.ai b/datafiles/data/themes/default/graphics/tool/graphics.ai index fc457c37d..001b9416a 100644 --- a/datafiles/data/themes/default/graphics/tool/graphics.ai +++ b/datafiles/data/themes/default/graphics/tool/graphics.ai @@ -1,5 +1,5 @@ %PDF-1.6 % -1 0 obj <>/OCGs[30 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream +1 0 obj <>/OCGs[30 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream @@ -21,24 +21,24 @@ graphics - Adobe Illustrator 26.5 (Windows) - 2022-09-23T10:50:41+08:00 - 2022-09-23T10:50:41+07:00 - 2022-09-23T10:50:41+07:00 + Adobe Illustrator 27.0 (Windows) + 2022-12-11T13:03:02+08:00 + 2022-12-11T13:03:03+07:00 + 2022-12-11T13:03:03+07:00 256 88 JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAWAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq0zKtOR AqQBXbc9BikC28UOxV2KuxV2KuxV2KuxV2KuxV2KuxVIvOnl2bzBobadDMsDtIj+o4JFEPtlOfFx xpz+zdYNPl4yL2VvKWiS6H5etNLllWaS39TlIgIB5ys+wP8ArYcOPgiIsO0NSM+aWQCrr7gE3y1w 3Yqw/wDMqPzW+lW48vmYESn60LYlZuNPhoVIaletMxdUJ8Ppdz2KdOMh8auW18k68prrK+XbFdZJ OpBD65Ygt9o8ORH7XClffLcPFwDi5uFrziOaXhfR0/HvTbLXDSXzkmuP5cvF0QsNRKr6fA0fjyHP gT+1xrT8N8qz8XAeHm5vZxxDPHxfo/FWl35cR+aE0SQeYDKZvVP1f6wS03p0FeRNWpyrTlv9FMr0 vHw+pye2DgOUeDVVvXK2V5kupdiqndXMFrbS3Nw4jghQySyHoqqKk4CQBZZQgZyEY7ksf0zzXYeZ kmt9EuTG0dPrMrqVkRGrvGp6k0pU9PwyvFmjPk5es7Py6euMc2QW1tFbQJBECI4xRakk/Mk7knxy 1wlTFXYq7FXYq7FXnP5eCTWPMOtarqcjXVzZTelZ+oarErM9eC9F2UDb+OYGm9UpSO9PSdr1hw48 eMcMZCz58ub0bM95t2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVKdSZ NUabR419S3dTHqU37KIw3jU95GB/2I38ARKIIos8WQwkJR5g2hfKvkjSPLTXD2TSyyXNA8kzKSFW pCjiqjvlOHTxx8nO13aeTU0J0AO5kGXuudirsVdirsVQ+oC6Nhci0NLoxP8AVzt/ecTw67fayMro 1zbMPDxji+mxfueb/lDpvmGz1LU2vrea3tJEAk9dGUtOH2I5UJopauYGijME3yel9oM2GcIcBBl5 d34p6hmxeWdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVU4LeCCP04UW NKluKigqxqT9JOKqmKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2 KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KqT3drHOlu80azy CscLMA7AfyqTU4OIXTMY5EWAaCF1fXtH0eKOXU7pLZJW4x8qksRuaBQTtkZ5Ix5lt0+lyZiRCPFS MgnhuII54HWSGVQ8cimqsrCoIPvkgbFhpnExJB2IX4WLiQoJJoBuSelMVSzSvMug6tNLDp17Hcyw byIlagVpUVAqK9xlcMsZci5WfRZcIBnExBTPLHFdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVdirz/AMx/lxqmqeck1qG+jitS8LurF/Vj9IKKRgDjvxr1G5zCy6WU snFez0Oj7Yx4tN4RiTLf3G+9OfO3ka380R2vK6a0ntS3CQL6gKvTkCtV/l2Nctz6cZK3qnC7N7Tl pSduIS+Cd6PpkGl6XbadAzNFaxiNWb7Rp3NPHLoQ4QAHB1Gc5chmecijMk0rJ4Umhkhf7EqlGpsa MKHARbKMjEgjoxPyd+XNn5a1G4vku3upJUMUQZAgRCwY1oTyPwjfb5ZjYNKMZu7dt2j2xLUwEDHh A3+LL8ynTuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kv/2Q== + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAWAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq0zolOT BakKKmlSegxSAS3ih2KuxV2KuxV2KuxV2KuxV2KuxV2Ksc89+VrjzLpENjBOlu8dws5dwSCFR1pt /r5RqMJyRoOy7L1w02QzIu419o/UmXlzSpNJ0Oz06RxK9tGEaRQQCak7VyeKHDEBxtZnGXLKYFcR THLHGdirCPzNh84yQWP+H2nEQZ/rQtGKy8jx4V4kNx+10+nMPVjJQ4fsd52LLTAy8bhvpxcvNlGg rqa6NZLqhrqAhT6ydvt03rTavjTMnHfCOLm6vVGByy8P6L2R+Tcdjf5gJ5jfy640AyC79RTL6J4y +lQ8vTIoa8uPTemY+p4+D083Z9knAM376uGuvK/Nf5CTzCnlyFdeLm95tw9Y8pfT/Z9Q9a9eu+HT 8XB6ubHtU4TmPg1w+XK/JkOXuudiqG1LUrPTbCa+vJPStoF5SPSu1aAADqSTQZGchEWW3DhllmIR FyKTabr9n5qtnGk3DRWqMFvHIKT7ioRB+zyHV/u33EMWWMxYbtZosmnkBMc2QRRxxRpFGOMaKFRR 0AAoBlriLsVdirsVdirsVedfl1z1fX9a1TUpGuruzm9K0aQ1WJWL19Nei7KBt/HMHS+qUpHch6Tt isOHHjgOGMhZ8+XN6Lmc827FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY qkepwQeYo7jSSpbTPsXlwNqupqscR8VYAs3QUp1rSM4CQot2nzywzE4/UF3lfylpXlu2lgsDI/rs HllmYM5oKAfCEFB8shhwxxig367X5NTIGdbdydZa4TsVdirsVdiqF1Vb1tLvFsTS9MEgtT0pKUPD r/lUyM7o1zbcBj4keP6bF+7q87/KDS/MFne6m99bzW9rIqq4nVlLTKx3HIVNAWqcwdFCQJvk9H7Q 58M4wECDId3c9OzYPLuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVxAIoe mKrIIIYIUhhRY4oxxRFFAAOwAxVfirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdiqD1XUlsIEZYzPczuIbW2UgGSRgSBU9AACzHsATkJz4Q34MPiHnUQLJ7h+O XmhFs/M0i+pJqMEEp3EMdvzjX2LM4d/n8PyGR4Z9/wBjacmAbCBI7zLf7qH2qum6ncvdSadqESxX 8SCVWjJMU0RPH1I67ih2ZT9nbc1rhhM3R5sc2GIiJwNwO3mD3H9B6ou/meGxuZk+3FE7rXcVVSRk 5GgWnFESmAepSuztdeuLOCc6txMsaOVFvHQFlB8cqiJEXf2OVknhjIjg5H+cVl+NcsI4bhtSE6G6 tYXiMCLVZ7iOFtwaj4XxlxR3vqPvZYvCyEx4K9MjzPSJP6E+y517sVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVSjU2EevaRLJtC31iFWPQTOisn0lUcD7u+VT+of FzMAvFkA5+k/Ac/vCb5a4aT3ckUvmbToomDTW8Vw9wFO6RuIwA1OnJqEA9ae2VSNzHxczGCMEieR Ma9+/wByO1b/AI5V5/xgl/4gcnP6S0af+8j7x97tJ/45Vn/xgi/4gMYfSF1H95L3n70J5mIGnQ1P W+08D/pNhyOXl8R94btF9Z/qT/3Ek1yxxHYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYqoX1ja31q9rdJzhelRUggg1DKRurKdwR0yMogii2YssscuKPNL103zBEv pRaurQjYPPbCScDt+8WSNCfcxnIcMu/7HIObCdzDfylQ+VE/aq6PoFlpTXMsRaW7vH9S8upaGSRv fiFUAV2AFMMMYjfeWGo1cstA7RjsAOQTCWNJYnikHKORSrr4gihGWEOPGRBsJWvlbRlUKqTKqiiq Lm5AAHYfvMq8GP4Jco67Ke7/AEsf1LJfKGgTPC80Ekpt5FmiEk87gOhqDxZyDicET+Cyj2hmAIBA sV9Mf1JzlrhOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVDyajp8d0lnJcxJdyCsduzqJGHiqE8jkTIXV 7tgwzMeIA8I61shNb8y6HoaxNql0tt65IiBV3LcaV2QMaCvXI5MsYfUW7TaLLnvw43X46phBPDcQ RzwOJIZVDxyKahlYVBByYN7hx5xMSQdiF+Fi1JIkcbSSMEjQFnZjQADcknElIBJoJXovmnQNbeVN LvFuHg/vVCuhAO1aOFqPcZXjzRnyLlanQ5sFHJGr/HRNcscR2KuxV2KuxV2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KsB1n8tLrUPOSa4l8I7ZpYppEIb1VMQUcUI234bHtmF k0plk4reg03bUcem8Ix9VEeW/enHnLyLY+Z/qzzXD201tULIgDAo1CQQaeGxy3Ppxkpw+zu1J6Ww BxCSe6bYQafp9tYwV9G2jWKMsasQgpUnxy6EREABwM2U5JmZ5yNonJNSleWsN3aT2k4JhuI2ilAN CVdSrb/I4JCxTPHkMJCQ5g2xvyf5AsPLNzc3MNxJcyzr6alwFCx15UoOpqOuY+DTDGSbdl2h2tPU xESAAPvZTmS6p2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV//2Q== proof:pdf uuid:65E6390686CF11DBA6E2D887CEACB407 xmp.did:058a54bb-53a7-e74c-8ad7-dddcf8e9afcf - uuid:5a7cb0ef-7e2f-4052-baea-89c3ed15448e + uuid:cc1698e4-c7f3-4fc7-92bc-07ea42cbb94e uuid:bad0f4a6-3d4c-43ba-870e-7ad0281d44c1 xmp.did:bb3a5c06-6927-6f4e-b81f-8de03347aa02 @@ -592,38 +592,30 @@ -endstream endobj 3 0 obj <> endobj 32 0 obj <> endobj 33 0 obj <> endobj 26 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 24.0 24.0]/Type/Page>> endobj 27 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 24.0 24.0]/Type/Page>> endobj 28 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 24.0 24.0]/Type/Page>> endobj 29 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 24.0 24.0]/Type/Page>> endobj 34 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 24.0 24.0]/Type/Page>> endobj 35 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 24.0 24.0]/Type/Page>> endobj 36 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 24.0 24.0]/Type/Page>> endobj 37 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 24.0 24.0]/Type/Page>> endobj 47 0 obj <>stream -H\RAN0 @v$͕8*R4JxIqrzYt^ 0oq"S llx]-l+\Pm*% ~n7)XXHv -7wndۜvYFb+|+hUK&-jtS(QT@)hD9uT6A=U w?S9+d*)acיӭl$sU#u&sQrjQ-Js{SW6MX vk ['wPD\Hs0rU/]phxx%էW`Ή -endstream endobj 30 0 obj <> endobj 48 0 obj [/View/Design] endobj 49 0 obj <>>> endobj 40 0 obj <> endobj 39 0 obj [/ICCBased 50 0 R] endobj 50 0 obj <>stream -HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  - 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 -V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= -x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- -ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 -N')].uJr - wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 -n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! -zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km -endstream endobj 7 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <>stream +endstream endobj 3 0 obj <> endobj 32 0 obj <> endobj 33 0 obj <> endobj 26 0 obj <>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 24.0 24.0]/Type/Page/PieceInfo<>>> endobj 27 0 obj <>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 24.0 24.0]/Type/Page/PieceInfo<>>> endobj 28 0 obj <>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 24.0 24.0]/Type/Page/PieceInfo<>>> endobj 29 0 obj <>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 24.0 24.0]/Type/Page/PieceInfo<>>> endobj 34 0 obj <>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 24.0 24.0]/Type/Page/PieceInfo<>>> endobj 35 0 obj <>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 24.0 24.0]/Type/Page/PieceInfo<>>> endobj 36 0 obj <>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 24.0 24.0]/Type/Page/PieceInfo<>>> endobj 37 0 obj <>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 24.0 24.0]/Type/Page/PieceInfo<>>> endobj 38 0 obj <>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 24.0 24.0]/Type/Page/PieceInfo<>>> endobj 39 0 obj <>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 24.0 24.0]/Type/Page/PieceInfo<>>> endobj 51 0 obj <>stream +HRKn0s +.`;M( gVR!LfRP}Wx/8Cq@UD1Ƣ(5!Σ>.FN$%( q&P YņխP8SZ;9*Moo+Y˳5@c +Kl"eft3RQYfm;|,w9TEC'ɩO%t)Tvx5,="+/t%i^;8ʵ7 +m6$k?իkkw~kކ t2V kѦtN ~< +endstream endobj 8 0 obj <> endobj 9 0 obj <> endobj 10 0 obj <>stream %!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 24.0 -%%AI8_CreatorVersion: 26.5.0 +%%AI8_CreatorVersion: 27.0.1 %%For: (Makham) () %%Title: (graphics.ai) -%%CreationDate: 9/23/2022 10:50 AM +%%CreationDate: 12/11/2022 1:03 PM %%Canvassize: 16383 -%%BoundingBox: -35 -24 198 53 -%%HiResBoundingBox: -34.5951051953625 -24 197.527512441982 53 +%%BoundingBox: -35 -24 199 53 +%%HiResBoundingBox: -34.5951051953625 -24 198.224273610836 53 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 14.0 -%AI12_BuildNumber: 223 +%AI12_BuildNumber: 620 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) -%AI3_Cropmarks: 50 -25 74 -1 +%AI3_Cropmarks: 175 6 199 30 %AI3_TemplateBox: 8.5 -8.5 8.5 -8.5 -%AI3_TileBox: -244 -409 368 383 +%AI3_TileBox: -119 -378 493 414 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 @@ -633,9 +625,9 @@ endstream endobj 7 0 obj <>stream -%AI24_ZStandard_Data(/Xt> *&6@X"2fm\;K2MQ0 Qt 6 b ʯNN.{Fi/<х"q7!DL ]ˬ̠ڗ5!T_|tso?ʢYQdF*a,O%_mߝfrՂfAP(WI0|; po<7 EFVD 8IO U`xᦤ#X7ō2iԜQ[Fϴ$3ʬ7@&Ɗy_X-|@( EMtAZFQ=͋Vˌ=uʪ=Uy5_+1-R8 X&{R4Vz㆝4?Rqc2=3ˡj:v7Tvw+W֌/,*hfb`+bnAgP0, ĕ4d#p"pVQr< /k֐.aT q@<8+< 'ѠȚ"q@z SXZD1xᄿPE6f`f@wH?e]hAgYE` ,x@,U A} 0 -; 8 u[O< 􀠲 rq@TtuW͇W+b @`s@4TĂa0CC逰' tO, ޢih`8 y>  +< ?/4ِHBZi` 1bJ,n1tz@hX, B8^a8f@ < VA`̗$_9kޑt2C춼; 2~4Sa^M,7f@ [ BHT(EYax"/q MmX| :;_pc,  T.p餬< 2TB.!r+I4%*aK`"O$Bb`H4$QTa)JaS"W$ -łb`P4(f ^Z\baaahQ [D.H,bhX C@ ` ǀ pb`kL4( 05.bTvO(? NXXSSaXX040L7 404, DC ـ ` P nhC`X`P0 ɀ ` `24, \Eu1‚b! P t@ta bAP\ -Tb "P$DL`Dh8Ÿ7$C.R|b^ZV: T1Xl-<<:_oh-؂%vVFFVk(ZB%*QYXVUT)ZtJB:*BĹ7]Ȫ4Xp‰"F+rp@,(;ǻU}@n2,f(&1''8Vs@ uB}> + 2bх*M$>^VNhY bF1 怰"wX0s@pb8  (0$@@qA "|HPk -`@ -*!*Pp0 6h -@8Al 2xP -($DP$HCJ@` %` -LPA$D*8@&X ,0D ((F 2p -$8`$Dp -$8`DxTp -PP! -*Tp0N%؀ `BN A -@a! P$C! -< +@aB0b$0&@A"L *H@a&DJ` -* L0 Ba - hH`,`` *TpA719@A``T $DA -Q!0B(@Ab(PVa[O8vxbVu6u9:., B $F -! $@ a" 40A 2 -T -,A @|\!*!< 6A(@@ - B@y4>UQd$ 0LB@hF0` 6 `t@„B  -`HP -@  P Ld - \$:*8Ѐ„Dh ( -&d $@ T0.؀„ &,l(Lr m>צv",F\aTqA -&(B !$` J 88H l Tp0!"8 DA PA2Xp@ C8 @  -L "l@0H$,)P &Tp@& q @`@$ -P ڍ~gÚĎN)*Ep$W4K5͡;#5)Reg*꒨ʼ*J^d5׿5rG&}̺]RY>VK"2Y'u,–֕ͻIEcϲVd|ғΖYb5"i~k}[Smʳ}dc4#`Y<")%l]yK]Qanrʎc{Y_;;cINN_,DթWUJɖG, soOj͇ 8軍T*y = 7^ۈfD6VUƻ9p -\:;W棓ѫDRW;KOhGgT"ps+&J^Gԓl%g;+fY#]ևlGw -4Үlӟ"3;)ӐʺtNUC,յ]j)}k l<.tÇ4Y-^N]N]7_?e}nT׵rg^f*SJ-2~.ef{כB)*YrĦV&? -N'rt|Vy{flԡ;UzHWNN"ꮍ =9SHv:x3']HX:%IcWVV?0ߩ.ɲ`h{ewJIרU#^S)|"7qEhw,2MΤsY_se3ITErN9M^Ysnϳ4vTc)uJs^!ȳR끛quLABue\wή^-ֵ̈_N~_lVͽD7[iWSWؿ-lvgwyNהuE)@̍kN3q OyrXɳj^dR=_B=? -YmtƕF80>ޕy*1NB˙9; 6iK-Geu{Rj`Wީ%}L֑9&M9KHHþ gw:wom)*H[q%#{ܝrd/z'dG6I)-v(Mny!|J%+F}}?ykʼ\ʽ-^+41 -?xCٽ n%.U;T3mJx&KiFwYzC2*VŬND\lLA^i*egƳCR0qv5Ib5BvpVx&+$oL#6_>ra'ZzE&*+'_I.s_1)4$v9xt&gr i2M`>j=+/X&ǛHWwRA %a/p'3窯nӋK'2jXx8i*ϯ8e7~lF~syS$-I5>mNw尣MٹF_'~d9x2gCdwL2YP -[<;^^8 ]G9:,~F;1BnU(z#΄\ڋ0cQR%]NF4>:MVޫ&Z_wa3&f~q /eQfc* 2G-ȎFʺF>O[J]Z.k|uĺ~NXϺ4Gf~[~Tltf"Xm3#e6eTz ٕ2#[9&xY72 ʢs{UJ%ivVH%]s!"݋IBgJ>^%XycvsTϒN R\;\Xw+IwdI> iGyцͲ+;7Oks$!4\qmNv{%͐yir2!`*(`($0 - 0؀xtl񃪫qwbU3$m99I4I.fLHx;HډU}gp;1 D-:>BE"s=x JA=AcgIv+ٳL֜`dGU#xkw@FuUQKuҺ:_V-[J< -JVBW2ύ-O|Sa JLU7T'EvSG]bFҸQV'AqeҿAFS,"i $M)MauIyf1*u+X4U8tsD(9W ~Pکx._0PLZErUˮ!O/RjyfLҞ˰$}]KҙHsχ4%_srQt ȇi .Y=fFtGi0Z׺o풮ݎ#IWКqUcԎIƝ<1[/_iUFM3e~M7/a+2͗7sZ^~QlJ[ڳFƕ>rL\M$c5!eyη5N[_c'HGns)A5ӕ z)RMh*"y%Iޛ9[Iqp`J>8|NlN(p:c3ì$q\ - HzVb5ՙiD9t--?Vv%aUcQ^X\%rkfM?eUTZO?W-KVM3(si"Xn5L<0mf2J -f]?9[KȌ72JΝI9xӉ7MeUQlZv4c;j䒛)x{j XU<'٩BWC2 ?3v&]s(3u%)dZNs%5۝Y--xo9O!Q 6GM'D§ -MG-h,?U5;\dWswyRϖo O2Ok83{5MjG9u:LաĘؙ>zvnYjеefX;}EA* ѽ(Mʑ4rql1 U4%imKoa\,*w+p8i8وQ0ΨiaMNz.,:f/Ū̚g>$@p&<BpP!*H`F=8\{c -WiSc4%c.d$7)Ō #hY.=\_TxO:,lM|Ҡ8 -)tURUG61Q(IY2rer:U)xiIX$I&\rڻinoS'7Vx) TwURbeuf.$2HG!$4kr2i q,hd|"HGbT˛$*I˚g41eٙLs53*1ߧXp5ub"reﵴ_t'Ev#~PrMVVSj:*;Ii\~GWf <,|ؒ!ӵlRJM] -eUMyՋfd>n3Ie MA7G,e:`Y{ZRQe^.y>YURHUhw"P&zW(CvuRj畉SSIlI4mj$ǹ|`+X7]rզi.}{ :~/~0Y}Quzk7T/?t{v;ec51=HkB_E6IɆYbl*dSg%}/LڝU^ H -hU6)#uJt FɜT[ʙWKosT VWڷiuL%sIHe̜Ef3N$e!aTG7L5iMBWp72.%U5%rn;vF{$^Wil+2vc%Ug"RN|N6'r[C.]eҝ3uĒdy8fZw#EB±IY%]=,CvzkH9)Yj|,]ʌZ]lO)r>y"au41s}G$ Np9*fXIڃ3ԉek=%31?%P:e_J%^Og9=qU_vSCLfϤygyxwVb[{Uh?#43B݇O U-2QUDt2]4c<8T6).t٤kT6iSٝEQ!MRѥ:brfGg#ZΉUa]ĝ9C,f2VOhT*_JvVAXg +$Ul\׺ 9]Y(9ߴ|0OuӑFugWF$4\jڽhjVeڍа+Du'-|4z40&mwV;;byO;Eb[ Yj=h(-!ǎy'vU ⚩gFhnw24+_"sչZZjx;#UCJ)zʈsZ)l2x'N{i&ڝģJMYh zF4CsTWF$":V_/쟫5~E~tlC hHx2WIJQ1+UND7 Wd9˼C1̅mb&ƘCIU49Ud]"%f弦ޛJJS}{SbYe'fx9R,Q0o46U,?QڍȆ|#2KBLl":I]: tgsΐ+QzY]Nrr*j&1<"3l3|TN&ۍԥZˢ!ڠfcgV..'˽Y{N7GXBJ"1~/̉fU++6we7fWsWE{ItsϬē6CJ!|NnjD]%if3uaNM-&er\t5eRph$LPA $H@B 0@ljΙvXAҰ sUfSb[.ш^hd*ʮBFN#G^ZU}ز ^ȽiN\7y5YY6l ,Clΐ-gYen?ãݝzwƚ3B0=BLɌJL -<4?U Mo*B^6 -yYQȶFLe~Sfl*[Jz:yijjX*AB} M^ǴɌ jzLˢkEoygаF gk᯵K3Kv?X(O&6T63geuˑ^e0⠥Ըa vFK ^ht=LQ+̔긤VnXhtǹlpgԴ?;0QO\lա1b+ ˎ6cmHyuGDU %k?,液PۼB*lN2_#lIO2hy )eȖ8Th)UΔ,G}&m#pn`eFo{wd1a&=K:3Zw._YQu{JҸ:1 +di`wz֑kMRIsV8c۬j;9mF(.h{HDT-ۤ Yԟcy{Aogj{)6jҧ!a]IVc!>}Y-7 -TU'y>%SB"]dJXVGk+Ӫ2%-:ҨI7s4¼ٙ\fU;X-=9IF&nFHA2:?6V~eLj"xCRt+z0m><_v& ]Q$͓B6I3NyIG2I! S+fgz9>Ms`5L8\/Cue ݕ/Bf̾5|*8qew."NXK)$c!^M M#LڜAc{wf9/i:T OJx#>J~!oϏ+Y'?gy}!+W~/ OT&`%}צ?"*073#\c6 >YGM*V+ _ŇGtKm~mȯHMAqN7;Iy${83$'^$:o03="9nw)6J@d~cjUq*dp8QwF)|5R[=#8>m1Y@5qHX1B~E)wL\,i#XJJŪ3kmb@,b|3Rg<,K` -qy>  Kn9 - Aq,c]<\BЩw'7 iFW]4t-aYTE" u DfDX4,[1`Gm\.4M+0㸺 -=VVc6 6:NM6<5d@_aqP&66)~h@YspoNCSpv_D -ؕ~Q|$fA+6iAzD<5 JZLIx2?@._cn9Zͣ&5Y94s~e&ՠQirٚml%Xwwm^*Q/cNk8z<+PUB7ex 79 ]mz5C٧$9oBdf7k%g݆r#Y =k{GЪ^sg>0c GJQVmu*CV[!qe71- ɨoDǙ9ٌvgR5Eqbdd{37>1a8_uO 5UWHxdovXԍEAoP7m\Aą2З+Y\Owz<a{з&]MRnKa=w;<'8>>yxZ_cK+Wq1)!;E9V7V籔[׷OjN;׽9OX*nr&P W B, B1MeEMijx>h'5b(na"FӿEȦ'{};J u>[TgўîU-6Ř|ҥS AM) OL/G5|5Ҭ̇X)*1:6ȃ?܀) @8@K#B9G2i"4h| iZAΆ^Kak/5@Lu3EփWkE)xt-}Ыd@@8 4kA]qYtUY {/fHghF <,eGeiE7$oc*T `92lX\C8 {n&dE5 6j`E.%,agP^Ř@HRl?RbBP!3/WM6d:#[3Wgyl^߾ˬECP7x\,yª$xZk~!Hl| CpIy}=&cqg@Bu -F)!w{6>;ASMf%\Є#t)n=IϜ&OIG-" IFQ}wazc ~A̾CkHj#@}4S^bû.]9raãO`ؒ]"Ds+iX*+$:¸>w^͵DW*0&?D+OPq'abՎH0hX s f'|}3](/Rq"kbzv(6BЪ5d1Zx3;JxJyK?B)ׁC2Z,6'x7%-/4lq 6 M[z3l7^ DJ Ev5ğ'v'د&b9 3 Id F<Y5  V:dL,a7`doqN |eIFfN33" rq5i-OPEǟSc9~ rF0q-Ea">= x@g-)k' !Az.:ق/}( D$"Q0A.AQEdoƆL*EvxTeo2Tp672۠F(@dog*oFwuMLMz1B MT+D=,HvxiXĺpl |;yV飺{j0&"j4݈*nd͏XzEri96ick?m#dfE0y::LVO>҆x:ǿA֢ ftʼnUN9("+v?js ;&͈,r6&%"0.t6iXԕee_Z2m\$iʜk{rZ_vX:X":3a3p1l yrdXW۰v}%Uߞ}(:iPt/vdN<PR feQU$tJ9r)p3mPBD;(3JDK .Bn+$ҷq8O -,sf<CmwCt`kv"cAzC-N`<U)[&#*Sto#U礸r}?M4sg }dޓzhob_V4S&E*9UҒ\wɡ8SB8!ZH8L3s" uD^ahHcuw22 L{τUtUPç4ID)2a /yHIśmp>GHB8/  D5m~m!޳@Y[wH7| Ua6+r`PTR`嵘̒-?Au\8[ ZƼ݄Z?e;hںخ"IzrTp6lCHOqL戌fQ_]!%IEnl({FĪi b)D5G~*Aanw77ast_j%CC xum¬@6qMNZڲL5CHطysluу'!ښ ;'k/c<0ȟ62G}}Լ#p}.ҝx·7.׿|vSBտ:.G\T9'm FjVQ]2A>E <$/(Ƈh=>& -$Xɴ>P!,RA&_~) 7SqT؝T+)yul]>vNZEz';?>jiʧcFﯗ⎭^U=pӞa;`uXAC\YEBZc#}Ӯ -CN\t8YPQ,^ e+᪚9a<͕Mg\5hPaSi -[(C pd" x&RK8.)іd )Z;o1[̤W`~i87'2%ͪM56 VPEv0qU2eJJ8O={A>gF^޹vx.8mH=&0Sh\=ps12UFtP'CC133gi >0mzFE~fL~SKp^m a_ze޹bl&~YK}r,DZDI,e6SHvbAWJ CM^cÆ%Pf( =M@D0hTDgCz'2Vao{l [glPY ^H&}z5RלQъUw][n@i"nwC,;d S#M.v;c)ɉ7.i׊VZs3YMA80xK\aA* alG3G ,ۇBz^1 Yv+WFk90/.`r/D&uXo[ N*21.bΨt,O}[._b.9#t0[.HPc؋x)?WK /%#iepA(X+ǡJ"xEM5 6FkFlÀS#1>lU%fS.Z#i])>k/54 ŕׁ#Qv̵&[|?Ot-ti=&$)oe=κV6@>u G5pBjjC`JKC|+GA3?'z4%P'8'2]H 0a`O?Ȥ mL -#n-p]6K% p PᓌKfǩ0txUTcie>6lUB@O6=Wrh(Ulv4>h59k:Fz-lҵ &x(5B}td xG2_u>#6dnx<>3"ɜmV:F9 Lʙ}X(.mnv":jR ckQ\cn6:t(9vOXQgpH=1?@E?{_dM~CT#"Em` uLqD98qU(k`9BPF*0XEuRYkRs* _57¬%feǔ< c j6_CalTE`=zX,L -MVJUݣ4Ӏ,&V ڣry`9Yhu -۷m 1}@4LygB6&,"^ۥc] -%AE^JAUaLk!v( NF Dy\+bTew,fԕcT1@%:F ~ !,K&H q*%a"I75QZ͙̀3K۟A|Cdjh<锽 9Öڧ#BRoT^Cyu/DMz8f x ـui?*ldֳjn@Y$P*0JW@JI-Z/0GuXq_|!9Mi8q@CzZjp':uv˩ b9okJW$)KPЙP84yVZ ::/IP!6x*v*8;q@kK@:@#*`sU j) 3"0*3lV4btYUE2bVE :'Hcࢗm$t UjaOtiBZ;, -st눗=\H}6ë\7Do.m i_$$JD*v:n59ʐ;o[ղ\UFDC-Q; `fHSEDsZhYBb!Vz 72*Xg}}J)[Xԩ6>P8(II* -UƆH%Αi/JF6{tST#6CM"qgs8A"=>3mYDm <{ca)Tf[TFގ+I^qĬaYN͎xTmoz BƋ(B+:y՜ft%^ۦJˁ/C2){Y`&vz468/k==qfuekMUGNҌRty 0M@D;&1`B) 9[1AZ^f}?E QtF%#]9N%t='|).Sɛs L_ם.ʡ^$)ʌj3CD[>+o ֣DPH -ީE%[MY.VԠc0<.sbcbGSuIrJ|vB&ShXT ?6%`I WbEʡW)KS)E@uJ_9NZxEɟAi7%̡ONY!w&ad~öJ"p$<VB"p9G -{PH<Ç)Շ -pZj怄 rQN(c;z|tUl9xDFo=#[ʨH("z@"b -Ѣ `VM";1Q&ҝe=:F㋨,7:`M&i1`:L4U[Sh ʚHAe`r -4qIpTqS)/p1*jX]W*/"ܽY7H=hTZ/.dQh]Bs5 Ŗ @sM_f(]/ ČmTxn E:)L{j At!22ĆSѢ`@Q=! ɶjx;օqJG dO!䦻XSn-P'$hCI9 UXL=!aD ܣ7lgf.'dᑖqܣcBy= \t<+`M ګ$D?XUc%G!.βAVs,?! TɠXBvk=rWZg>Y0"( `K -i;Ҍ"+(!,% :<,|GBĐ@ (w| CP-kXjOP3B^s/b oO!ҥZVdt仏ACq7Py~^C"cQKMHg,!Hu>jW_PVӸɼiEsVdp=0@fNq[A5q1eҡwW+:P%5ϴׄ>Ljj>8Q3Qc̼@i ڪ_b&rJ^~4`? ʏVTVe \ي#; h,\Q{C o*ppKB0c JfY7hUEPA`V;--6(Չ3։95|c?$b -. G(0Fė .T/aCpuOT]h LW]@MFM5>Ajj"R"`֍1]긧XD>R jg0Pf|-1K#hѧxAXX$|cE)0Gc:į 8i +b;Znl+&6-VXZRٸ\ 䤉U0|q<>#{\lN^ ;)gM.G;s,]|pEH]gj:+ݪTf+:jeUCOau[CpQ2yU2L/$@t? -{M8Y*AĽ Oa *)eyU*p-Δ U3='9XGZ&VA7yill6ѕ~&e/Rv!#lfʬ'P% 1'u4C tVL`2hmCl\pTH'|}2f噌x$Ĉ9@IEF7TG % *o{,\ݿls1*;',EX:|y" -CڧwY ?E[ì0ӢEADxiL䪇UF+fIq\3 -,il%uUw%RĄ&oK -[VҎߍo㇃4M~R/]i<̓zxqhVWAco~jX}Z琁_Da y1o+Kyjn ' ;dE`:I/99hܓhε]hJZ؇bU0Q1Ά:UW먅-ViyѪ <mHB߁q&UC5|rC 0PX)ѩh f 1J64snTMFghrGtS 6-Yq(:֟UK\+qI>K0rn29*LY l;dN/MV"oiKb%M{D9I_CI51^REMG}0\#TCG5~(P -k6Y<370]w ߃F}&Ɏ߱7~"! ikOQNyl\C"s57/|K*Y> ǼO;]ڠ">a Y6U((TX 6`uh'T._30 FR/'야ٚ2p8gq5\ ϣrUt/DyttAMY8 b,Xx~/k@N5fctcE3Z kEaE,2)t -|;o. gM;wixCc~ptrPuI,IM!B --a Gi*<̢rڹ 1}T[: X -)B\ P\bXԛAPf%,&\j:iWQPxcovPѰj22\Z +I /`Ӓk0qTs !׺Ec3T]S}80y1M7]N *@ZEaYз#ӟ8y:usJ1hVW@ݠN+2j$M`kAIiY";7g"_VTe=XJ?x>:ej|Чbo1o׹4 p qcYhqa9 "Ƿ]d䌕Ꮭ٪2M=vOѻ]piDh^YC*5yšM®'o*4_>֫Bi}t^ňmvհǞm5cD  8 ->KQgjDIj6Wjɡ_3֍ Aĩd8s羚`(hhZVܹ;a$ 9$^07 WrbNgY8$n@rra0k5v:eJ,*WZ9hn&6)6:gLj:w@UMbÕWNb44զL|:~"6!^(Z)? Ѳ^=!X - -El-ec$V37#:5g({O 6@$v̸h2D|<%5NDv5a[X2uF"՚>JxRM.v{G]aPf)vw]3ȆOC;;gJHLjeFJ&#M_WR3Kħt%yAijh,7l{(CE#ܸ2eh찼!D#& &\$PEyG%>"+ƀ8QŠ9b)py.j]@, -\JG.m1e|7LAp°)N ji僊/>JmǵM:c#l7;S\<);L/]ܙ2_Ul:ґAKx\}+7B=^_1sMyQSk:c3ile`i)E1n_6ɖ!윗 -5Άw9"hkt c,> bm/qZTXU%/}$'|aW/gk!Lտh2S߷C_á>DWT0% 9eF0Ϊ tݨ#4+6-{ WC0>B]Wi~d_^B! -Pbدݖ^y˪QJ2DJ`[.6eslߟϴ,G˦g,4& -iP.{|3 F>R;R:#m& -N?IϦ (ӝ:eQ$P7R6BC큐ǾCØ\E;!V} xNv1} -!/U$aTKȂD]hFbN|0C[DȻ@Ί -oVR͗k:EUKʣ&~rtggL'C,1/@%]5~-mչ1 駱n蕦V`SԝޙT''*F"&}z[P.>0j#-}|[P[< -=V55G{1/(a^Hg@^m@@!#+\bs| g $DdXJUCU?& 5frz߀"=#|fsЯԙ 1Uhkz~p&,q fߴtԍ`6 zA_΄Yqy=/-[6T˸ -R ,^&nO2sMUJc!=0~+K8J8uftDE^8$nlL,aus -RLCe dk 1a Y k.=/Tm @\fYeb/D%7&T3\xGMMh\z r\-;7԰}+~tN+չ/^cE( @*wtfM;iXྶ9ixldE%HNf ?Q?S7#UU!iFuC2HкQh`[|Ӥ௾mih%DȜ~eF|~RHt}vF;#Vn9,~>>B:b `0BYvAōk -P")<#!s:?yPkMQ+\/b5'nUM1n*K'^Xߘ Sudfr~-~p;TQuurʂέ=a/6 *mHJABϲ;?u7^ZelV -`b=e) a5)b Rt 8uJ: -z[ʪ= ZʟJmKϰ;'_CI3ӒJj}z{c -{6ӚI7uFq̌ԭ)Pʺõyt#lNSpQ s5skjX'ʗZhW +iu`R lOmIT1YQ3 K8+tY|AE!wJXq]Q œ4Z"Cp@4~'Uޙ{uu[},s 7lZ+`ڶeǵ+B:ҏT4ɶIl$'oO-ஂigZy9Ėi>B3` WFT`=sh{zcꉭ.X݄6G@Ð/»amS#n] --&Ba1UQbpdg6\&k95VR 37ԫIQmE~U He.[ 3tH9zGZ/WaDB -Hpă:)㵕2cQDV~Dm}حn"2hӹ (@U_U?= *4L)ÊT-teA\Scˊ* 5ޗ__{r<3VZc[՜Y{οnPZy-h̹Q ()V Udѭf)Ǡ;1TA4)mE[GHd4-[,h9̃RvET/"opV$eO@3Qjۊaqd}k.INiWꢜo3cH_gw١n͔H!EzEYzfVëf 4sn :$"QT9% -/)& °V\ (~B7j:<0L^s`'V\!fƕ-d $9͗' ) #|_GXDسP35od+q8;ByABre6xqzzI;JY:d:y v=zlC~<O*䯒̣*!N$6i:xV=Jc?ܹ~hɩz.zC칈dW.7u'Am;E8xT3ߢnba;E5r@JS.O\ F hȫ@y啕w~6SKDfh۩M]/kiȢR>%4X>H(nl/Ei{?v+4{?ψg,9 j(JD3dxwS<9ei9Ūy|^kQscN@#{I)I(#tXp=g џ0O{aG|>;aі@ ^fY-v>WS\n\:g3SL4Z%ƺu@MJ jWrF9`Ml&PH$ @DG 7fn[:SG%|Zm[ t69q-΀-vvF%h,$8 -̀I=xQO5#/G,3,@hMaLb)~c1zpz*I:f0t?ϯW}2&C)>Z k/Y x3{f!3D2jb9?K A|2uEWxw0F;)o-7~d -eDc9k,,3\|gXcia] -d[#⎡)[P1ص -_ٺqUw%b8YPB)(pAHub<<~-Out*T51,y& .DHѲ[vN$d:Zϗ^"SP5 -)ZaFQ2(Oc$3w ô=~A i_d2ݸ6ʡB)x%FT5Lےg&@K{|1d1*VDM*#F-k<5o&Rk}NCSkjuGN&idLscu1e+}k oOl vm~:,cF铴4W:KmI='iދ[~t%ԂFWmsйl3W +?.P/!qW%#mj#pm[R998OZOFgpq7c$;2ZWʋ/LuHZfFAI"}Xù-q&Mbe5C@k *3ĞZ6E7-]J^=p"\IU 6]0".T#g]',x#"nTȓ`:O+?ryf~/GsE/\̮t kNOS8y2!8^7_Pq8>oB0fM"i4q1xk"rľn/[Q5G9kxID5NĉNJ&;_2 gZE%BiF". 8AYSA/[򪭦r+vK<ꭗy +k[\YK1q4kR[b|)l[ ȥ6U"(rȮdK9#rjth6g@\.DRp}L=0 Ӓ$(Q$L1\${DR@SI{뉂 ]0F4 N|&RqNk^ʼ4 tn, EZ+@gU7`hEzA#P`7JKbU#C" uXuØWLo]Soy+C5_9=+܍TwT.SHWO0ۥ`˧Ppch?/'AI60V u!+v -a/{]p;= _"Z}21ջ)l{k w:`Hj14:(;|nY 0 scX)gQ|[dkw֫A syjS0"ȴa# O}"NZ*)MsccF7a[<&(VEpJK݆F -Q[sŴIT"sɘTIiۉLK[^?ǧT_o$qwZ~)dgt Q?j{+|PWb --G^3mڋexe!Mʱ%N9rS$5 QB䄢xq -ᤀҊA'0 -*.T]s1RG* Hx$v ˂yp`CcO88jU*35%E6a` -<t˜ -'z(Ur6 }ڜek?h`: ` EPϪiݹ=[ ~q3Azf*lXkSosE. 3չƱrJ9&AU .YR zk+% Z֖c&X|wdbrPO77q@*+9I5ߘdye'oޱr߃҃DK.ߦu[@R?;4NnAר@ocӐ gEB5 t@ovvf6hM3lkϳMA(;֙,CcحԦ(<)9oSX^X/<.Ze2B"MΨL_,ǰzyvLˈg[Sh!C a i{I_9uȓ21 - tc W낧umx&pb9.-vd50nGU`KB fshG8)LI&ֱ\?661~*h}jsϣRsvVتr*X -=(m5V7R4j]p/jUMMU 5s2&4UOmG#"U"Sf=#gdxjv T0!C3U_U5ªU)_P_5B݋uy-Ob6eس 6]~ erAEe5\P,. sIR~C0D@\vzzMϽ_iyXo=zw"j"w͐ .c8_LlBsfC4{gH-r}f A<Lj *ݟU&"Ze&qPU(Frs -n8 z71|f2gii+$:8jIiI &'!59);n#KdN"j +%E"Jd f>d% -Ely@d e$ Y^VCzQK!CoL -2"i"I ! Q d9=[&r)-M}XjdYEE9+cS/Cr8R$lݧD,R<%DAV;wB$N]xu؈w^6Jr2瑡0^4%O7OLTG#u,Y] WhB ]ip}Zg+E mJ>١Ld6 yTujV] 7#x*#35 -]d Q @i#҅dT*x355D6#2VL̉.Qpf&vhLl8ՋBf1O3Y쭸FBBi`7ɷjpRejZ~(1bE-c(ɚ5C.&$46Eh A1Lwf+3q,9' -CL 8 M/Hm~DtK&vZQ>e^uh(X_*o[o(5FƠi^1Hlqw;H垖}3tFʴeC!M rKښgJ#p;-M"%NB)QGKGcw蛩#) LMZ 54D@E -R ,˲13.gf 9~J,BKJ\&> -/^AJTd-?} !(O?e Z*j*F|]ciWF!4]BCTB0 7)-p #a68DL8(Ej0w% 6 ^0iCgahaPX( ^Z @R]:yĜ8JzJ6U ͦn!̺/ 3# ]1-2i!bPm´5DADL "E%R#ԚP5#P+ Y!p#d`0;h(( 40aj_h#LIEpIV(K9h=A3ST[(X9>!#F-Òf˛ +S(I*FW O|d*E,ܲFZCfC%~B 1"4S'$  `  `\b@Aj/+Pp((K!VAR8QU *jҨz.!I<չmFp-BW|5NX>TĐM,*NDv]FFg.~C~8-{1?8)&0ɊA%dWO25kY -97\?<pQ̒؜ʿ3HhP.rRxò%?D[htҳf1g6<|b^'MBc61W b&')cu!.?[PUM]5|Wҡ+ţcR5@ҬY)QWūiX2 %ݛ$%[@rD'2_Pa%sDD%F^"VZB6u"UmsCmq)X5詪M= QRLS%(]zyHfQ] -׼iq%ӰJ<]hAs-jDNňZM.OڐF|պF󄂲 3<1Jj׬ Y+xnGDTsHXKhӒ%.UL6.CǼfQcY3uܒ -60b 3ʰER6n(rz3k, k/H&4v;4Σg,Sꥪ.͂ԢƄ((Cl)S}ILl!a2*25q0<"1{kB)((9I/"N -$w6.Ng.՝&U3&G,^q:Hi-y`wZX0J\V9T1 )PD݋/Jʋ)HQJQ֎bWSd> $)ļ]6K2>b4P^M<&Q[Y1 5eՕ7۬V*X#߼=ż8/0gG\IhErQVդH!*Ugq]1ՙ s5Pf[WZZa>S[ );KҒba_{e4mgQ!PJ(6|:3 Ǹp9SQ5*8˄Dӵ*ȡRUSm!^ JPLQkp *$DOn yFZ|ԄFj5FU 55Aj9OXҁ/H-0B- -}R:HT9ȁů\rEQQ5!xN@ct0DCO!v`*Sf\"/m4*C=p -}{C/_mxǵIӘN3AC;JK3;L  C6U6yE4g(|YC 111:#hs9LȧSWx<|U;qSF%1 KN}&5n{f m[qYMy|\ -=GIBth4PT*%rVddH&|fk$pFM=Ȭ:RN""@ -) vP[q(2,(!" PXB@dQHn 2E|1%T R#PI8DI*j )n) ۅH0:Cj!uVbPA -A##)ȟ:P%OB5ᔔbRfÅV(Z%5Y%bXLBXt؇D:fDD&u #Ƚ0"~E:ITHD6*J~]$T%D2 -Gцܵ"aRadD-A*HE8A*+H=vC7F -7h, @ja:R=SNJUv FCW -m;㠙aL%aL c*w@.b -3C,<3b>mijb((UfjbL*yIɋF }A9d?;˔@K#^^*@.rz08(?^5FQ1Bl #v@H# -G#X!~h1rh0y&L0T C҅S(мZ-&' {FgJQDDf))):LD"LHx*> U_M|Hf iB)Pł&QD6!Q^PP |Za!"!$2#bC: pƯ - ŌP\2,R!Bb_: "h -"?.ӨTÇ=1,T$ωah<0:(:*ýbRCZ]BRa%x)To14. bab -lfqXGhf&؆b͡c M-P|ufQaeʖfA!ER"B;DJTr׸P䚸ӯ _*QZj|\D<%P(/"tH $P1SdT -B`@ Crp4H!qPXZ Dfbo6x 7Kΰ`YHKTC#< ,`SWG A,xvGԷ@G=?,)X\#" -)&7=i\W+t8FbjzEƉ]CL^&|C _8s{[/õA]XFh<1Ci^C$;HI׀'1ie/T 1 2f:C%T<6VFS1:i)_En-43X˥3%v=]PIG"wΰgl-L1mkuDW0nX+Yŭb[D8wf=t*7,D|o̊ƫK:BhoEƖ,| dA@ >0$-PFSț&]?> -Y욲>= }fGX'UA }>=\.1+A\ TS]~BxQ -澠_F~Z( -kʌ]c=~D:u"sK\qj!O9jñO*pƇ.v5LC~A2udU~q:Bx9BEwJqW:q$\vvh : ƣbC=jۉ %S-MV͆ Qe@LfkЌK04fڿ_|8 Uab;4O9&4gzd_? sM`WZwD Ez\7̗=r)vA39L0]0kK7Ϙ[&(f9BO<$ּ`r aDxE˜#ouKAIG܋PZWcM#|J'XL\dxϰCu"n7@ǶmBBavEna{,ͼMO _H`qM2(3pj &C{M"iC*h-h1v^btIr!b Ry8 M&`@]fɷ;ԩD F-C65 b_ -ZH +Qa|Α޽T <9Yhz-.wד"@Tdj"8'ryCKT7ЩDk֡@0=KRC -N,{)ltM4mT/):[0p1(9Bgǿ -o%E@[#l@&aLaPŗhO` -\6~H@TjH0hSfH7dkXO N9uQ% S}]kuG#F -_H$(0CL -Ͻ4Z"#f=P-`lCI2RhyӜ L#y!Ew+F ŦRj4O;vyB{J8.+V c:&o>q'xGl7T/jN<6rPf':/T~t#`daBI@R.&T\}c:TCg?fmy&XW zJLT&`ЖG UYF{^Z̈́:,cEIMO.#ڽy=_WVC@sԵUBOߝ!B'[v?̬ R Q+9p }h+:罚K7t3rA%0԰MQk<)!SZ d?D=c3HrhuT*C#D`ݗ@MYR`fniFdp|u%ǘ|$HҤ" 0 X«{SRm4ann4#}ӧ V}ٹjUC"FKJ9<@Z+Shwj{d - YLa}@=vܩd%A3 ܪ>|!vAf j"uB5`Oj0(`#AC"zT]L( -Ň{ Q68$r29#vkEV}p!'QdzN3"Nǧdwajރfn!p`==?V}L%,seJ1?B#[eM>˻^"ߝ`8@'-KPsRg|@F}h9(( A  -8b_ⲨvT%Z͙dACSVuaxL{X9*3i" \Tnj*w9oR-vKY-ȋzm׳Tyϔ@v&mkӤƍvz{C7齀˝^|젨(C@A^kEݴ '@L";?{Vu/d*i3;e'ߏ9Kz]* .nK ?L5 -^p DUs^CB??gzy6V~@O k\l7Em-A@ 6wiC}Yevl"\hfao L8N3-_K kҁ/.`Z]HZˤw 4:|ݍY]ZTOMGJPi~ $m}xݡ5"DTt$&D],=qE-~4zCH-C5%#66XaaPN;.csU[dٔh&_MH4sdDUVzJ,QEw#YKjD{"̡R`G?%omlfpjJOhNDbz#`j?ʇ"͍aSZ.|Z-X(igW.o+ .83"K=$ ߾6!4a>_议;g]^쯸7@C\O(Dʐ""~~eN+h7Pl+_PmyԌژ~qgGR~+x{{EpB#-ID(α)c!QȍllObD{.pp<'0+f0isYPH,<]p]87Rݍ= <ݭƲms4p=w*/&O D0\p$1>f̯c6u *mĆg^y9S02+~,X= >9N`i{+H,|&rNL/BilK!DØۚ6cZRLT\lФ3}֨X -~8U&LQ:4DxydtYh`2` DEdol&j]bo ]Whnq0nnwF 7`&"kƛ%XNbF(:?"# :Y9譗ylX2cat" Ғ3Ւwu8=&݃0zMNc*6W*I jFv=ƢgQʗ{Ha#q|)-cid̹GqԠCd 7E~u -Gp+|2H~'.+tqNUc//Uܷ< MRнPr": -W>O̧G򽪳1aj8=$^AvR - 'vPT;_'p;NJW' zy\A@al"5D$} k4?G@LlV@@L@Hx&zAwNZqIwN$#A -.L\98Xd;hh@NRl&E.NbVBZ"RȈ7hD:@p:#D\8) -WR[2߄&.gؘ8)LGmsDz /uR(6KI*!5Eq%lYbz5n@ɒD8 &-29D?ir\4S 8p&=ai"&řDIay&U''V&2dCdr2[$nO)&3RI_ P8'A;IEj\NB.j&v"lL2-bF`y1\C.HDl}< C^ 2A䇪 %@x8N D?2@G` BHEt+J9,H"eԀdF#ʎhIU?HHf=A> md`n9?pi?:b'?"A,"p`QD6JD7!:i?'2@yMGEQ+Rt4c-B N#@ȳՃ~J2~s!;#G}(K GliP>A>;ZkNEj;#!*@| DŽߣH{xl=ϓ(`<A#BxIReӣh3LylydN.8ޙ1r'xyKBU&Q < ӄs<5?&dăh9! -s&DdCVÍwywq;L}eZ%QmBj3ώLȲHl0J -ÙB">O!>'$}|=1mQc5uXN!K:S! ;*B2t|pːwCo1dhx9|}u8esH9f+}1d|9ʡ#H[ !992Z3-n yZZ QRd -/S@ 8Dc@Q!P'a2!2!alŃȇBDfkf3"L$rj,x6Y3G)p p`#ZH< -(H$C؇doI y,p%"¨a7j3)x"׍9Us#<R 7Zddp\dm`"Ɖ016JkRtXmԧմAD0r#Ƈ%٠8Q6#:r,6a`GE(aɤklrt!]@^:k,LbBՈvHY UU# Y"Qfj\$"u# jI>? QӠJINmA[LC&mNrM`I^ Ph0< L +ѸB%1Ƴ)4$U%ʏn2'`+!bW>Y2<շok.y%(q{_8Ej& ae1F34>& eLa3Kg:gbp&o ٖF5 ʕi6A2oT)cÛDN&#%W;Oå.A QBONǸ-<Ɲ<18'?ptr1C(bvbo&vrhbx8G* OvrNXWZh0N4 ͂qO,X' )>qD_+_D'/ Pȁ|^xNU gt7vbpE'"%WyeNtE-ċzDw̉,BA>N`:y;]ޢ _D]cHsq Ssc)tL"+q!B\X'yoz Ǔ@'ۘ\k!l )~[Rc"iPCP"f"&B5-n H fE;DgQrrI6 Ep -yj}j:M,(ÎER62)2unf(徰xJIXxri)V_!1%p_=SĦR28]"J7v74t  [h+`bdE+RQV@*fZ}Ry+1_Eթvl*f -Ϊ2ܪV@ nUFIJ"S1U5ߤBd|:*MQQƳ-TSkSVBoJpN'W-l-]Aɜ:0L8֊Kqb_ɵp -2&X<L#{,u)y2č"}m"YCT [D%G8fi(b8BB@'E%d9D>DJyBiyN흀(h'EhC'0,Hea#_?Ntiq;-aS 9F`vj#XfJFpdUjiL-.dSz|P@/LfpkzEmFw(ds8@:sv gvHLyr/=c աǀtjOJh,x ͯѡR`4>E`žy2ͱH#CsXAiޗ>Ksr`!bӐbⰂi4)HPS.ƣ*&8oFojXmw&7 5)I:7:oCf57X`6_VlW(lPaùcs5ؙlNu 9c kAAjE$8mjj 7 ǵ6\E o46QFMh7 ='vFgufhn74$3&o00z32 -JZ!tdob$7D8X; -,TR hc Gm]>qj}$ ,N`hƙ̓)8W QaйLr3n/ Wdy  -YΉ.9tu:N6)GAJ/OV¾_90¡C'ֵ 㵀JgZ3‰-TuD: N&ž9,؊uXt‚IN`(4]s+vVEM3N+``'K4=܉+1wtKUI@`|@UHg*,wD -)FAP$)˝'N늦`RL -DH)E<uXG.QP; YNw -{ğ@}OhxN=b“Ty8'-/tm<,s&,PZGcMhA*ҝfY<% 'ӌz&zZTѤ"{̄=yh{㞽A=Ȅ38#>G4P==k7k.>kɉ&a3gLx>$l)H/9~xfAAgN?2#1@~K˟YIO+ȫO)s %?oh ~艒 A>K@"0$R7 9 $У{^WT[i}w ˲O8VRFSI8Bn{2kmi;Sl5e8K 5YUa&k-K0| f=5rՖ.$1B:R&x"$ewٳBPT$/"gH^;R]x~?S ^:D^,Uϋ^_nEsa/x.h#,ċp]b[= E{BBlJ]yh?EC"ǫC#,|Xܧ/"(5S9!6 R&)TN*BMD-Sl@~ -,8!N)ӔJ‹Red>.j%j7/ݵ W?.RS DnRcȏM`[;$ -P7}o*D@V4 dX"D(i$ie=_\Q"|z%cCx?Ȱ+LZC(ieg%"Zh7;~,Nr]D -#jD  }u9q|P@ʭjO8xw#f]U|0~p -:%M[t/!6bRc0K5AP?eO<5K<3Y]Byx=^ml}]DF\ -h -܈ƤUUp's*M;h2S_[ L b4UDt$;+$ 6^M9S@!ɡyBE`ܮ1:q[&\~ YRÉ@}h(.R<ȁA$֌s ]wD$*雤j z,=]W\4._ _EB 0:$  $.hú@8&|ĠI6F h:!'-+ XVZ5`l5?jQX6| L+Hu UXIⰽ6 -1PބyKƲ`Fy%I[mL0Ե hWNJ gҶ28CD ?ѺM`Hɵxa&[Fp<`#P dN kE@Wl2%Wisװo8z|QFLm 42P2fu꽯_!]y}*ktS2>U>> @: A'A+@6,i:`eu^r/1س,\,9f6F~"FTɷ>Eb/pC``10jo a&AD˫ 8k`$ ۵uZMXښ[qΚ=ЌDQv4-X+oe%S$+"A:%W FA9 p5nFj, Y<|X-j1"D>:љ *>pS XSNjOBdGid,'`R9܊@5ϖ&j"-P&(5߈`A wnJ -L+n/"XTI5V1W|&_1IX3$`Ei?Wq^u{V%F-lSRE@ȋU6moAl]) hl4MR4'?Y1@GʒN;-o:)>VςRhZ~LK T-7t`I5aFw5c ԅYNT㽦1+k*Q0h'ЕX 'b(N9;;"D0wg\2@\in`Hj B/q `$EăDJ(6+3 rObp( *$g|T .<^,_~ߟ ,WsYFtتRzv"1v&Vc厂JcH&zۻ9FQP-1-_^g_&cK+vlW6ivqc_OjSb]ؿ}pNL[!et]T? Xzlo {, z[i$Gוk i폹 ^JY͵.t3 4`H}ߔG11Ex3~S3O)#R+okΈ1uh? s >h9ǹtpG) .p(B1-d_)7q\"ߦ/Tt]?.5MY? +A;dP?b0p{POr9s_p"EH}Z8( Ek~$z;b~R9cGq7?}ne:8P~[}M9.'|qCr[Ou@Y$K q#-O\QpTA蟁Jӳ0OSKOo>dѸ+9 lT0k;i*n!)7J\ jW30m -+崿hEӻ"݇toZyvEԷp/\_ȉKv,aKa-@_XX6@X< b>]ڑ6_)odl8[9^6CW:uS}q&U-⡢AwUCOb.[NMưK}QPyApXC} -txgf(`& ю~[^.YF ʋ-^3П+Ÿ[MR49+U[ǛeAX8 bn)EWBaE)CAbqHf|")}j)e4a- 2YvjW"!(!znl{ˡ8T]CӣJƧeƯ'L)fTt5]ub#孿t N%V;ß0 -V -e)w Wi2CKc|m\pI0\mkmR2N]'1y8{UYD`#)QƬ}fȲ_׭&`gK SD& ~oG\ %?:Bxϣvݗ»C7/C3Zqf ?D'MyհLF=‚CWΏFN@op -rC8x#uC(D:@IE}8Kx{մ1~Iv~O!Ar͋%){(ʞCRKDԬȞޓ 3*́O}I~=~@V!)>+k~3Vpm)91Nő𶭿 8>h3WUAfLnWtƜL7 mW8smɫ ᖈJ$ ЩͧĈROZ]$+SgI0/Wu{i/UOOÚVrz#FtqkP13 jNJ[KD84תP+=-㐤 -tKQ7r!H -!Z G3^2zU!B?{iFT1eBUKD%4u6VZSWxnDXt%ct ^^vv$ŷҖBfʹ$F='Cy -KcM_20T#5.3<]8lI{zV`;oQBǎĘaKqwQX[дhBU=^49*؁<_ܪ^X0]J ]ih+ -FML2~a62w: Uc zK+E},/@KF(}–Pێwa`yHh;H-*;#Uw/}OY`lCR/eFڎ>țMbt/㞺_:g嵌+ ސ"݇>/)i#{BI(n>Sh_:{<* JĽP"tny'-0)fO<. s1ߣj}V.@!0T4꽢Eڮ餫!XlwvQCz8eL˭MmY]r|X# B9&vd!OiGeKӽIyvM9dBCahL^v" -ʞ^r=BHx]W4$9χPʱc,䦨 nW1RZ6~ru~d}+8nݴc_yA -sj1j'\_B3Zy跮 S40ޱ0SW('* Z ]cS_YuuT>bq ZIF4?rwzH"VTUC7B狕h=eVhqJ0h^IJ]J,8:\>גM{p|d<]-ukMؠ`v mOTDA Hk:m='JoĜ~NEOg'qM6׶xVu},:ʼnhQ_ IVjAAݷAXN[d>nusAw3NrP("luzQ&85{Po@Xir?uF9&ޖiqZ@xKYn.S9hqz*~;3c=7lgaJӋAH3a$MUxtT04}y7~kLchlJ*;tE3TKX#GVHkjn/NM p4Q9ˮINK鋜}1HvtK+Ɓsȟ -2zdE\Qt=,tW{HSIECgȲsjـMU M#B MZo}xKtf N6bUWr֨~N!iOsI>hC甍9+Zc^YK3#`^vi|꿏﹪9ߪ+ȹor8~{1[vs`Up8m>0E"~k)4J*cc$ղdqȞP(17ׯacA!)1ɞ̯+i2zQR#}|91ьgĿ<YV*/?4%_9?V}iX䯺m}[f+^HV+8aIHTӎҵaGs2f` ܟSBj1)sDR!jFuW`6_dYqi?$sP0*p sb8v2 b.=v7C̻boaj'9.'c>:}/fS{ '|3te̸.y[MXeof_SYzc1gY']A -yRߡHm0/<&0_ Fִ$7iienu ʢa>+,'X6$!󵕅 f0MF}/J-\8v`~Z*iT'>׽/9)5F|]V̿61)RasϘo]ù1w''ekȜ2G^ ۤsMz3B̟^bv vs~0LP~'M,CCi ;ĩ҆+]ul,Uh(p,UdYRit*Yyr[*H.ABeI56Q`Az|N,0!(>Q@I<*v@ 6yqLnjfK4d%UOf*H3QUp(VnǞ>RG}q̓DvEF"gnX y^]T ,x!ȷR,RA|?9I~({H`xܜ-FV]MDj;3O1>-aX%M-*ǩ&,+6^a˄B844+>6UE;vQ x7XFY/P\œ3ІgxNg0fӨ-Tfy5zE3Q|n -uT= -aAI\4Ue#u%x8ږ8)toEď#`zs⅄xe"ϼG&J)>stream -R>`88RC{PY)~>xnL[$p=s&evsMu3L s:yI,S3"D/۳MYCL0G*%ůo|z7uC^q R"an1je<1bEӌ{m]+Ev8o ѵ/P8SNgAgPlmIȿ/| (k [TVQnF3~7f]ۖw#o DLzK2o ,3{=5uoG ^ !Dz2N,|C{= -tuC;Š -ֱYjoFکs O*|ӛܑ1sFop |UXy^3 9 7mپ򆫛r-v`cIƻ'.  zq%L˂'Zˀ Цdwo!:ظ0JMt_Q-ڽȤ3 - -uD''eU;q+''3qyW+4KfTb#c% п P+?TB_(IZd{V-7 ci>ʭ¶ghvx;yDk7K> JP1Lvwߪ6ܣ4)Rfp[CA<%{뺷͒ש큰81Dqw9Yf b/%tܶL~-HCFYIBMfbe/mE65!Evd{^%q9<$Qߪʁ%b[B㊍ec!M4dm=#( -&(_;auRsɸP; *%ei4 | !j/>cҦ9ɺy;(YavzKo 1jv P0b\R mtl٧4_Յl7U -nDOXjH-2*b63#tӛUu &q}N.{HljzI(} (`% 4*9aRaO'Phd=#JûȾAD@d#TxcLm+uᇨ-c[TՆ6:gSl~HJldDAl(ۅ6Cp?&"뎪&FXN#!k~l#NT;lm,',H!mKӡC۲Y|yO~ݷxfm2qK^2*gYC5G:M2i^WPW[m0:^w̱*bob6,E]$@ߠm#\_D-cu{S%5 ,#S ͷask~陁Wc]uU[;BX\WKX3i svS\ RF6(Ř(sVEy$㯾9.^5hEZ+շDhYT 3G6zg/b\'bƅCp,65T(D5O(#eE]LN_X7+cv(ȸ@کib U1ZcVk)hS^뻁.ޣs]=̲fH?5[mW:$j9ouyʚ>2צ;3VsϯVt*=0{zX}:VWذ|@Ury~e\pW28s:L/_6LT#[^A -b@Gzhj`ؿhjE> vT ǵh.EBqDU!n=ūB DUqEI!ךQ߶h 7q)N|LRɯ^(z%i} pHUl9H ]I1lla]2%eFL -A;)MA$wRC}gJox<}W90bbq'|Y/8&l/g8cHŊL7e_S'ן9nS(dpJq6L?܊g{fPs÷%]eL!!"[>(nZA=S檢T ) 5ɶ΢x7Q-CQ pjU="6Ksf"L|+ AT 4p4Y fJ䗎꒢e+U?!uSja|*gNjHX dس rZ.ZS(Uz8N*b{EKZ%M GaE@"XZͱƜݑ+Vfť8h h - "VZ(H~1mk!mm}M#N"׬0iѵ_ so&#:3O᪍"xyakX81E)T;6Oxn2``CQT !Xap~UvMljͰM=yؙ͚"6L)bHst ࡫|lɅ*ʑum+/lb(l NRw`2v"mzZjU^UBl$ mԹ:nQoZ{l};#wѐ a%Y^p]Z\} Dڸ -KPa{/C@)MnR̅mnv.p@=JR.t g Y$Mc0tԥiu_z]I[o+4vq 7b[k_ rwbK^CZ@_oJ%!t$VМm yoU -ZY/x b\-63 _oEFU}=at]\k/Ȝv[淐oOl/[ F[6j-ytkE:ch_՟>>`r$ -lMSHg 1%ar]#և iD"D*<:oߨ -wx<8.b)a8a+J8Kt+j#Ž EhL0yÀH IOgg1-'ޘ14x݈C\ވ+<+aI/-q} -(%ও͛l*A~Nbx!bT]g*b>xmrĊC -4.\/A dcN+qqu, m:QuƟ''Bw:_7?.cP`-+%]ߤ19K'e#QG 2|vu>m&0xT& +endstream endobj 11 0 obj <>stream +%AI24_ZStandard_Data(/X$E *&6@X"2fm\;K2MQ0 Qt 5 a Y 5j:_򫡓Ӱ^zlϻ,jP~^$GڛLzm97!bhT#}QWDEKDy L_t Nln>H,W̆e};I2=wA,_x''Aw*?-qH҆HK40 ]i/l+KaZ:eb: ,8 ( "XH@`DF&( 0CHƒ +B00`P1 Pl $Pīl[:ayDI7}ʃJGp* q1 aq@$h8 5"p@,~@*DAo%caLΘxАҿfȌ x"ѐ; Ys@$3 ^oa +KK!/ (P<=+*uyNeeakEr@4$PT1v +-(@G h@ mi_>GK3/QS]Q; j6^q@+2 !p@Pvx@ <  žX0a>`0zPXP,0,OxӐfC" iqKQ1*q@\^ap@$~@4,EcX,(8+4C-uP&3eGz&e=(WNZ(gwd-NC̰_,TW,$_2t+x)N*MfsUǎ̸zghFsE“!2Ăဠ'ĘP )a+DB`q@8 d8  bJ ưH$,֊: 000( +STDX]XH/p` [qf+kbAѐ`؂A[ĝ7אvVJ,pqİp@ ],fVM$h gH\C.XY3Pc!Hƍt;9 ڬӕD#w1" |@Bq@lGK'JAlQ2#*qMtOJ;:eղeZ卒F2diY{?wl̨9pʆB_Օ6X(3)-׈\̨#U9 Xp@T@% `X"xb˰p@aAP(WS(+< O%.ap /|!_YH3JJgA <&aa!1~@fe_YUT./~@ D"ł""Yh8 8 m8  E | DDEEGt: +Rb1@Ue% eeggi[5X[h8 Zx1SdH_8@8  gC-aq@4,o퀠sp@,\eKH,,L|bXXtq@\^l5,0'Ja(AP P3,Z7PV/`BHЯ Іih`H0$а`XX(fipC5`J.+PǵM. ^ *S@ bj^RB-jf#+3;CK%La 0kb磫%Nq 8k1@.'NJK"HE."!O _ DNP&2D"H,$ DCEV8*RqEBP,( +EbZ˅/,,-pq@BXX, 0 P p Ȑ gH, kDaa0 SS- O(8 Le 151vO(Cp0p@H`@!Tp  +$x);05PQwmL D HP `0 *`T H + Pq * @@!XdАL;. +AT  d` +TUA„ P! Tkk$Rd$ 0LB@l@ +4( +耄 "8(@q!B0@ . x@DD0 +40B00$,8 HA daA BC, 60! l + &x0aq#tْ>צv",Q.0* !L0Aa%]Va @L`\a @`!aBDp < 8 dP!,@4p 8@&4X`QA $L b<@PP + 0&Tp‚c +>(@& qU%tv#ٰ&#tdJl|{+c3ɢ).RMshH}JTi桺$2o>ʺҡhyYMz`muD\F-I_=zWFVlt0r,uekjRј峬!_la/pZcewZTDȪ&?XvgJsIm/[3_nWTر)#☫iX tu>odUu~RaFۓZ!C#Nn#3ժzxBMW6UUwu9nrN9;2;<׭z90?w;)*NΕd*Վڑ$qDz5+wm?,IҭQ#Ī#$[IYk&NŊYֽz![h*~t{45My8+'zNwD4C2{n]SP+xvFu9uwuflfdjzǚ}CD#1w7vDK+]u!MaVzwSWOwz_?8[}2Uu{j脗xx& +'R}LƾKY-mPJe֩!:8)χɲ'=w^wY>!ueUWJ}OOUfywXJdtW:lz|\$Us'э%!u'U5yK1OXm4*o'ĺSn\qMVFS"?1 f=Fhj.2ɗ{vv vhgd3nӜLqijAj.jY9g+4WA96M\*K-٧sbY{-3݆h~ؤ[SڋxRAjکb)j#Bl^flϱJfk/uѴ{#kK6o4vϜ>A#sY]ީn5e]iAG5{JwwyĦ<3s#SqzBwtSj8VGfGCǗУsOhV2q.NWi^a }+)&Tb3svmӖ\[i[~/7lSKV5 #sL(X'seˑf%}e!1YuRTʑfI_ +&JG$~K)";/BO_NLl6>R>yo%[Q&u?C4f`KVX<և~^y4 Xs{[̽":Whb~e{_UJ;R]wnݩfU۔h5=MVӌdTdUYF>ۙЃTΌgwax'Yx#H{kjiTⷵ4Yy'yc4=g.>R+6W9]Y%26UY9rhDv4T6q| +>ZU$ KWf%ہ[U/ GAs5ZXc[zT*Ǫu14f+lN26:f^̮[Iڣ7㖘 J֩<@}$,A{ɱeXY7ӑ(L֯bQxojxR~ڬ^mflئV/!Rsu+do0+F^AY>4}nuT$ԽJ\4Kq#D{1IybL֫t+onY>Aݛk Nt%t4ɧ7$=(/YS{t pmݔ$d& -Ɏu\zġ2=>^X40qL@%p 6`P@0Xp@\`-~Pu5zbB?+ ̹K|e,‘6!ɒNK٢הɜ.=$>[9 ,3ӳm+tR d#hCOad3$+WK0}朼d\:8]*U"?РIo26Q9H=~R7!:N˒ÑT5Fs $o04I8qtgblTJ)%6©=z&IFwWrAE񙻜%SV'xf{/Sa=utPfwGA'6qY7cWy2Jg_t^,֑3ޒ;OD7DJ"iڊͣLFEO2d)t.]FsP-nC̫,_Kgp|x?Ù;,ˢAX(T>X^kZuN!gms{#U»7R, -^%akƚK [w/%ʌ52dJn>컚T͉q\h$;k&M={Qa]S/ٙNˈW8SrIr φ +^C(DT$dV|ќxS{7(V5ûJֱDtrlh&ʄ7IXwv +LOCې*M4zآ*#T$":׃n4v&jnhlr={xo HvtZ5} tZhT+ZULT'}ee +ڲܡd]Σpd%d}%c܈ʇ0v ]uC5{R\Th7u-*zQ%a,%JmuxZ/;Ahd<"2~ȐO4jTVgb[]QeL]C1'Ks`{q'Ώ eʤ5^$W;.Wn'+9 K۵$y$<|xOc{Q5'WE7?£0QFYޏjU}_5s! JF3xtjX;IoRcv9iDwݮm u .隭8T{Y.Z5vIؘn9sIk}򕦍_կNOnԔ:StϿf޸"L(|y#/>L<%G-ͦ=;.lh\y0sX+5ܔM8VQ|kZ4i5v({JyT6rT3;]h A{/ՄFhzYeTJRz(vGV*JuҊ*kY6}}V%dž9A)dx'IebfP-UN;b~J S3%5Q+tOGC}}"Wݜ}余g 3iw&ǁ72c, O|TvGs44jQ'`$^FfWQؤ ^x ޸iѥo8iGo%0>$EA ]J#E#zpOxE$AŠqЮA=}tYؚziAqfZS lbQ>3Te(&u Sn5pӒx˱H&(M烑w?ަNnW2S<9^$|p۫ڑDfLʻbQDХԺ+\ؒh +HVsfW:*3toM_\""tN^`ޕɣG?׎o٩^ѥ՝ͩv4bkի3b.z*NlS )ټUAɦ$ۯ5Cgċ=vgճoBf9hpnMklffb4B샲!m¡G2'U9V-r敫vo5sFR=?2?HՕmk*%yI\Rl:3g̟"IoHX>э,=SMFBfiġczЕ<̯KIU~M\w49xs[LXIՙT ֐˪nW(Fgtte$YΫٽ:&GH7dpls{`IWO"nku>%}zΪ1{i~z}KW2#9V"SOބxXnMLn\hѪ&k)e>yǦj~QljΥه3C:~2ub%ZOgIL9b4?r?5N9-ׇҪ|IYNuOe/bM-O֟It$4Ķf~x貱FRUY5i7ɑ#fұ;.ڼphNrǗM&~$/Otg>vkq_L +ǶFTa6X9GFXs0od>Xцsh{#[dUeJD۝%?h^9F{$M{mڟC__{0iW;+EXfvv 통G73 F TYwH1'kxT7x?D)yTY_!#Y%pΘ6cOr`ޕgC|:﮺Se[i4x=بi? hTL˘FUo1AtIfi8P٤`leIS٤MeweFT6IEbІu%vFhy8'Vyww qFX=gR%~+u7[eaZ&3\Wq]2(stEDgeb>|uOv$V.¢!V\38]hM^UtKdn}ZUUWK82]9=٪%)Ɇ,w©ṮvaN<Ԕ~Ɵ;ygoD34GuedK"+;c% +I>Y\YJǦ1$LPaЌ'sD>D[r\QDt|)I(s?Yh[8[\xz&fo9TE#]UHf%RaVYk*I$9%QGI7 f Xvb7P^#E?_FcYu݈lX7"$4ȅXD1 ޸BGr!yr:J\/!2)"WNYNTܠiA#PMyeM k&b\MSt}D!gMY_]GKxʦ>cٮz,wE dS"q +kLYqhNlpjH&E]Fld1U'_ǦԧgSHcW)1:CIS)Z႑FmS2UE+F!OQ:: +ٖ(̯aʌM4yk[IB']9OxV-Ve#HhUaIՃq6!VM/TOciYtv|H6OBL?7ql vif'? Ćffn9˶l"F7\zq g)4jrXyeRTJ^MڝqZ8 gsgf#kМ:4Fc%aцum)(*9dUXß%VJbWVE)[k5oIf-a6E29S +-2ԙ刳D-{ R,-a,33$'Ig\nvVuc383!7{OIW'3ra,L?W:25v@*is +glUmGu= Х3tϡАSVEt4#+W}3vv=Bm/FmV4$+Ij,ħT5 WAģ1ϧdJH+?"L j||meZQw5yXE'Z5`9fF7;ˬ*5aet>'D@Lv֩ʴ]W#qPAiNUҠeVzt +Ї4Uk̐b @ 1~3OG Y#'myM= mIl8j Irb8d +ђF:5̘4x #LSj)k9 MA"f-.ĩ1ʈ8T:[?V1;6e {ڈtB~ ia 3棠z"Κ+1XJN6Zbl +Kϟ:hX 4=T]/ƾ~‘8-0==+XEJkhD= !^F'H+41iýgw >jq!d9"#'^9Er`ReY1rOsj<)DC]_g-:·|pg.`pʮKpHOv0Abj d_u5HmqxWy6[c + | öagcя em-żuhx1ndrG"1m X=1{$4&\ <`>46:ɋpHzby"hg'WrAܔy-Η8`Q 垣۽(l^DNfgkj%řv됩BNyt?<3 +gعѳr^iZn3\QϾꦎ:oSѻ ]C8̾a< .?eJKhƺ̩P+Ue-7S, ưW)᧋Xf ʽBIJGsӁJlȸ+"|V h6n0 \6Ele (xN?v ߰>&k5u3 +9G&?T ?)ݰ4*=3g9lV}x9ejpCo Sjڑ꩷H+e׺| ZK̓> /7`Y!<(QX"ISjj$m^Oj译X\?"tump)8,oY&*ne)HsM1t:@&,f^s@6fz.Gq|}ඬ̲pW.;MN"DA|%QQ=|CkA1)t|:jZdWZR6zkbÛg.V.nv qƓڛ[}pEŇuZ:6*7>!]1ASg?%rO)n9V]4qkm8̏UWƥ<14`'C᫜4nirY tx H{`%M-@NDX&a;u|tgt ^gC@nG(dB"g8{MN=`H[ĈB:ҽo+ +FYgCkuhEW;8!xftePht.O +-$BbؓC!ja%?"1wBYy.YVj'ZMi#A;yM?ipղ6:~KƾYUr$1J+7׬LЀ +^,ܜc!a7\0*&΁hԬǏJN'AyprTBKVXnC4%rAq:L alO/^LӀ]2ax3BءОtFH;{B5K"-sh뢁l8DЛ$w߰^O'_޿L +Ur:Zٞp+]so0c HQԅ+Tu22#8?q)oauWD ߅_rSLfnVbnC<%X(x34T>.J\eCkɱkyxz&Q-?_\%d҃Խ/Wj?վhPh\Юn@)REehALL) bOF +e'șOb Tcεu&n~Qڲp$QY6.WD$wM,>]к0'2 +9's Q!F9$Ceͥ=DUowK20Peo=o$O<<%\w +ΤT0:Rl14~q\ ̑2''> 컢c7hE5Ĥ:qa)Y<$;^xef1f9#dg>zބ:Kvbk #WO[e +7Z oUi$J BX6[ +ڑdD!][ur$M eɎzT?j)JUgו:4 Msk^[ Ꙙf_+θh":wpT8U>/ ]wըAd(JѱE5}Ešmmgrƹd["",CO7!=BM#<-q{6tˇK'3^2@t**B^Y (]<ɳ[682r=F ]NH +s FimopmѡQ  83=}w֖+ꄜl%**r_ kX +;Ni2ْ%:`!gp5CksAB*uG0Fv*P+VҾ}Xo4(] +{=V^ *m|jȘ u֝0=L>n2 4/BcJj3SVXF$$<:V&o!NIv9c-fu@>DW08aY/{<.slUWr%b6|j@^ C[O#`6}dI;thr[(gޮS<G.bd$DD:K]XJH ?Rv8ke~~ к0~/\~Y(QA M]6)"Y9a 3:EaswsYQW"`%}y_85O0aWOCɪLk!bF 3ü_GfI  Aͨ-/[~?QAcU9L_t՟Y NL٬c.€gߚg˧Ԇ(@z@5Y(Նk<"t0![e/k{$(f'rs}ʎ44rZiٞ6RHiUj%%l`7ay'4* u9 ㌶T0hlS3n]PgՄe5\n~`.t@ #hI̳0nF[>~]'=3">ݘה_c 9^'p³^WynržX3$v&JPFr۸1BKߺ<ûfxk3Bْl'/ c. ]Ja`LncB'*k.,Q,̺ٞ(mj1(!T_UƜ +#'w}z9 AiΠ!-V!5q&FwWj6Z lrc{c8D׻h[A ]mj/p"Ħz(6J֊`1O87XGxD購JBd@2b% ,i՞Ըx%-"}@ ԢNM[k76^ :K vb/b`L49«TӟBF"#dA M;gL)ÈГݯ#qpbxū 9A3K7"uZPr{1pi"2=1lKC:UrBȭE5y@G[𵀲S#)E׈MPRGlf*^=U5Iuj$)?2NS~Ц;8 %T'Rbc3dV,<&v='.2L*.VwZ"CK,~ \($ׁV̡9t ^ hH2zeGT հ{T˄tyaDI%s"mTCm^27mA -)WQj%EW/aM Agr5 H?,VXwqN@ǬRA8iyhf2Q<0~$a;b-oBOŌral]zh1n,j9A4\<'C9Ju 31WOdvcy~?IRt,'jϞCڻxX 2ayQU/?az9w&M`Sl50RtF6^iM Q'TaGNb,Y)&5 $>a[7SI%fK̾ޜTw΅0Zş~(ɑ@8D>VEV۲ūR>ءLӡ+pʯPiX*朓E@ cJ(',U;O^, }&EIꍊPX#̧1f! E6āD0 .(9 +DA[\J4Y'J +]Ľ:?=?DYt)j7,C?aO$B(&SMX)QQ.a!,Y =dYG~-|RJ,ݛ(أqZ.bC la?-ڧoʑ`N*a)#L%5@h ֻ6fOp)^؉>*6hYBf衬zYM\4/*#kdF>M-c-2IO3 1V$wڢX7..4 *Mb ]6's+_Mh^3:xm`>9ŧ+~&s"j_QFBӝka-^Q] 6a!ɞ6hhe~oOJ4,%N"`%1tQPj2CK22d{p;NilR5 ^ɺfѠE71Bk嘂UpB{Xo5[*cuQJ;.7,gP^?G^[2!~h{Үb Իܶ"͖%5p5F ?Mh@6Ҿ['^o6)UdPkcN]o68h𘁜#{) +F(2IgV+ETD`}A/xf">1ި)xb ^T Xt^ +P0rMcŎԊ!Uf@%T=; x$1^h>-GJ $hnZ}D_J5+Hxɩcg7YǼ ^An +"%pp$y4:'Mm2F4{\ADi3Z("4> VaU +B0ZrhornՍѵ0d䟫Cx@, 3Z'9 frL9vԍkUPܮEgyS^+7u *į+0@!Z-OaˑS@҂s,_̘sFyzEbr 3"_Zҗ]y"%0k%8Tm݄-=3C"(2e\mZvh"^uX3\7($aN 8+Q!&/1FF0:16ء&b`d N4Uqvvebljz[r\T//HƦ57z't giޢ3ͬ>-h: +sȷp_4C8~o"ShٲrB˗u_91aMAHXeBM>Q.=م Q\zHP"m+%4^Ц j >ܵ&a0쮨1;am#6!dp9Be[ nJŵ/ͭ2jNv,uy&3@\@Ůl3 ^#AAp"`i䃓Z3?z'Ml) t!1z1o2m wT4,= ЈHMM͐b%R{NMlh JX>U#uɫlj%EQ'$ +l:/Pp}sJqI35weD]hx鴰rwhfd|5XEpv;cQ!)0kkE7[QvQ˦Py|i) +a*:3-rC?Cz{PlX[x+v6}5L vMd${:g;Q(H|֚J'+3ʫBӏ0[ ]Er KrڈUC@DtSE>TΨUz6EZa5cC !60eb*z /eX4e sВK/q1nHz0J}m!zJXI_@BjL:<,cZRVRICM<.!콳F)7J^QPca`[z4BCUd5I69D:h_'A# :.mBk&TD4sj10X +T֨* ;li:9aPbȿ8AG@W?w8Pl \YJ\F]9#mMzmtӟ)Do'#N=+ +M!8Jqz%'viNhO:Fy,Jjtz0p3I$#`_y{H~V5r ?[]ZGdj"~ %$ ֢x +'lmG"P)#Ibip0L+:c~DfkMT \@G߳U +DST>v!R>s7hQ2 p2ymTUYxB8Bbʹ˚$@J<cSa%4Zfg ^D˝,d:=a0 *b@KJ+ ;8+x8(MK +$\4taaJ(;<ېx!wuA)1 SUTW苡sC,pQo20_+bh0,wuQc.@I#?F@D&J2 (SJX?'$R& fN۹ sww(khi~IчNqO=l},4N"Q֬O~k8+`A6 l94㡫c jdCV 6 i+sٰk9;*!03l49_0p IWAX9~ -X/tcArX8^>Nbz + +3qz8KAˀP ڡyrɡb9N0ptEZ:>ƆףB1P'EiOuR4T ~^'mP@@NKC:9@~prU j Qwބ1"^hplQo <"2nI$ pKn4Nw&?ҝ'z։(-Ύ#YNe9:u˟i*<Ƣ*Wltm4BK–wB o$ _f'LEXoWmT-3BN؁D+`p i {F }M\1"@*`{FVFK 2EI .NdAvS$Y93dB?yPv5sTr弴KMӠiN`L?9?ۨ ^.eR MQFz `}fe{RTe#GE(R=mCx=*X,N!\zsULr%QW!]nxLp}eK^ݲցN=6Mn{$ͼrJLYoddCSH&yT@hw; Se=G-q*k5<0-#H_UZ0 h}q,CMu [5栬-A/'\|3AQ`$HI{ +s@~kqǁGޢ! +m)}TN0}XHZ/!Ų8ډJC@Rj4P/YVBaSߖBL42=~j XTB\ȃݰ{Θx4&D4/vMK3Bمe̱cuΈ"qօ#i!N{J GRYG* + + 6+A@\%ёDh&^ -.cC8ʅ?Y-=*ǻ +{ f,0PcIP͝7%z*9\r<q2JA ~WנndC=SwiC/َz%րx\U$ :$K,n`(BRL7{kՃڊr2:q" uGo;2FQ4V1 "(] 8ldZ9-+d8T;rV+G+m}.**?BɅ-2S`5u2q0Vbj*!ym*XdHT Ϲq2ʊ덝1z7Z q/Fp?81vS}#aDlћ'ś{}5 q 9J1FY4@~n;)|/y`փ2 [ku ,@-ZMi _|e]Q[(]cC%lM~9Fэ5uWDD56ϰwGM֧kI0.iz5؜ bSK 1ȹ<?2[*u *I^|jp¥,ͩ`8ST=F >/8; -nŨ" d'Pv +043Z_tu4M'&lKRqXL,7TxaԀnKJЃG=)K3HJ#8x[-V ,e$G6"!S9 ,*T~}ib9U!NOJ*v`c?{;~2@#,`VR'p6@wz fuX'>i:],/|wb= Uvajqx :o'ܥQ_5ɍ A _MwVLq`0.~U9)HUly +ae=8'v쯽>UY.ǝs| .2||΋r;D_h$=[isZ Gyl>qPX5ZCUU=quɋQ֮38lэv<\ b\9A:$8/n ySƼu݇\3jԝ'xBM ]8&@ҲOfb_?"3F&InG޸vPʀΨA-20XyIU9e]X^IkVfAShRUEU;/lH:iEje]RiԋTlI}MjySX9q/Il'Ch&~,X̵p`鶵SwpA\SO{O#U2V!wY/JY>%-lZ +Dn_J$ؐ$I+P̥Į 葵J\Ϸv,:7 r0~da7xC~I5 )r  0zPbOW'G~oP^%vaRA|=Ւ#K-q@ȫ+WN O T5<,4NdSqHp? aSPZ7,} TD #iZLr$4qf_fDuuJ+eHvD,U=$mHQH=pGiA Sٛ}3z1T^_j._9eD+L7saNx^R3=< /M8eC;TXR1sa q_R[ñI& \BǮWjB>E9,tf |I$GTo1]/FXbtnCx0xSQy7JEYi4W ס_,,IF +~Y*WU!rƼԺ}}PZIM͂]l -YD5YEGa!\ XD*ҽy +?"Yw>UmKF a0B `j#vR. ",~Co.ABoIuNܘFZ.L^7zp%!>9LHoG .=e%v=:H +xiPn}*c2TSw~yOBRbRX;%RC Q[ -@-a![V!gaQX tO%77Zzu ti r&l9O{ 8Ķ5~Ӎ.~=f#+E`\ܕ,<-8RHU. ^-%w;;3]V*h]h]1;1|*#4nkF_k[  ЬI bɉ>xal/MD`|!~x]$9D+G;3MO) o,th;c_ .C60Xr[3CzEVfZ1v)K eK͵d?B!vCLT¿+/-z^ +[ וnʦ_ ?UXVݓ.Cx`0\ Sm# ~Ud +W?O tB@-bdD6}`xZ(,a[S PG5R5hF{7mW[PTanEu?Y48yVbQ,%}1\Z6bysTJY=i4wȬ))M/W5Joz]{9\^" Ka5}6Ruc<(5󢱙9at4AHir\1<$;}Ǫ>C˦'6Xk$}cc d`oP\YjAds0lgyAyk^htuW@@ꘒ(f:0lGxL9$?&^ }Iɀ>aeΓr;MɽZ +ߕOOI*bML:@2 3`L&vLZ=Ot5CS)߻8uQ&5khj \^?w 4u׍dsƷC%wV;(s"J12 :T`F< +_:g~Laj +C02c:M4(>*wb?5TDk tz t41|l?fh(8ZHX^*^B4* 0(tN+ @hj2hmFpa]Nu]P+5bt 1Y%l.˶MsAtbM68x^ /ZSa}C|OA1 u܄7#f KD(k +Efԩ?'Z#) PӨ$ ?Ub G$(IEl$]Sa}aMߴri + ՌRQMy5ᘡe߈)mJMӈ.>ZZJԔBEN[;ţj4qSHL!+ +$_5f؋Eq:sF5wmKed+;Ue +L.v󗞢N@/-,{e W5ty@]Ot)G0>-kU} + -H"cYVF{);F0g"_ǧx +چMTV^" +%zX6څL, N𝑑j{i_+*I Riz"^\*p/o;]uOb.p gu$(ǡjAaj}o5[`4@3Vs̛,Z$%g򞙠ؙWm9KPTڪ 8p`82(?3F^~*X +5-ebViY&ǯ({}ң~F ;Mɟh2D|܄@NDGv`mX2uf"6s%<|v{1W N+,f?\l|7{?Nè1.< 0n;Ze8u#ll+7`=zTҊlz]E $J`+ShLgpg\d\u?Jbj+1B|oeD($]fGḼ?#ч|)f_FG^ޣrMF3C[wkRsl-6Mi0;8I2źtPw >Wpqꁸ+T,<-Cbe|nV%Jl:-`bG{5B +i=FV#zxXY< 6ykQL`WDvEHpǮQ-U;].9M׫'|^ ~y0 s/ EKKO@ \ÊPp1&gWn:R7z4hP6V4<xНRfᜄ UGd`*M⨻r,LpsZU]P}d_ DtZeelmMXl.nuWnwk6\v#mEJWYNEP$/!ԿDk̪-x$G&Q=i~~ZԶ +}?]Kr-N,xEN @lQV|i5eL|lC/f"xKQ#KʔF8MlԹ/4'PW|[=bdWp뾦[p\®h-0ٯWߖQG3+jCpY6]TOHg+R}S2dcΔgy?$y #gMDzl&ϕg{ƸN\Y0\@.s6x@cOhmW1N/0O!Dg<Թ f g +8DC dbŸJ\h[V6|2ϒ'zX)(_ i'U24愖jo:( yJ-L] iqB$iZaU" -s<0]xje'ڡT$հ T_DAr79gBWYIE}m BuZbi d,Iàv"8,}i4Ҫ! v7S~X3=Dfy'w@Dυ\ұkLpξ_k0[B~~ųPA-7=+Tʨmׁ@֝%l}œ%L#uC}VA`atAg S]\SthFk0=nj<٪ouqN޷*岰(R3 쌣2%@l(ѡj}sZcN-pGrDDk"pGU]Ă;烵x1 L'ś#FU0 WAwmv1D:A&p|y€LS"`dpbcLh h@O[d,bhGѬ!A +9nZOwOE|"y.5d/ޥrFI\?} |7HSO\le'zu9$kQA4Οan:;H'螉?\/ewY;xCnaHlW&[YÛҁ +6%Գ?*S5YQ%CUJ10IpQ5Z.%KuJOիv  +Z*`7oܛa $)"X893dЂb bq4ЍE5i9O( cCU/{oNJ',܂adꍤB]awx7{02~p'GtBS2J._ `aٟ& +\=- >zGމˉl pQvYO0c'UunJlJۚyVϑVWw]mv t+ X6YZX[ئ@Ke/Az h$PJ e %VS7ⲹ5@S GWaKHkoȸaҷ=noBf 0}u_"Y{7s#l,{Yn;a Hѿ̫*5g:3a{wYoh[7rdRc⭲^[ DvbHV^e' `tJm A?1R2U3 1yˎ`OM}ۯ&09_`.Ǵ; k +äs0th~mTbFXp-ա}Vq<2GȴtSe_߰+wݍquIo'%S -8#PDР8+x<HTvuUғ#S ʂք\4p,`ŏ:Pn@+c%mzeh=_zP:NA+zEˬX?@IHޢ/ XbxZMIF}ꢽßl01ff4-w6q96JFǟRX$ᖈdDe"̙ݤʘ!@X9[{VW $~$4K֓a)/}nmtP٧piOJ7?ڰ'-s6-jHnRWm>]W Pbх ]\$v.7/˅Y/'W1ry>.VZ\E=\^F^pUo !|ppq=5 K[%)50>9v |p$oUSD0xY3l + Ї*}X'@4c˜ˢCq͡;$[C4 'ף Ң |Y_f/L0yT'l +'YY}{60e8_'nZFh$"!'28hĖ7j˖TOzkh2.% /nq +jR[ +bx)ܳ^KmHwQ$"&"X"UIH3T 55J* +yQ wЯ)8ك2-Aez`Fg $*(6*Twz bx0. C aa2$*)s5V\UBmKGIMӕư"¿ +^!HZ&h<6dX%"r"u<(tw&x-Xlj5/%f.z9TWR3dP5q{NOea܊G6J^?L'II620V u9+~H /]x;nu{D_d.T1:TtSc ,sqHb" 'yuR)+nz4*GscבFa[<&U D0DK ˆ }Qa[biIT""ɐHIriIB`p{U?O)$[ww:>vgt;(o~+|PqWb +-G^u~몋 !֔&꤃aY>y˴c*'#%nWY`{vyx dZEA,/fVBY/is& ,` JȠ^7]2bz(!Wu u3ƭVqbkDhY"g*nhmS_a@G#P"po/wܳ}ש݋Zs2d}l2*6'#5yd^fxUb Œ.,FYGbH0](5D^eR+!mPw{jYn\'=J6lng mUV}Dq9$+)T-?{<R:V͙"WQLw44.l!y宰"W|ئ<s#C2q ʲ.lPM9u i (?V!BQxJR@0 ܄8R#oУ 䒻e;C31l \.pk*Yxʃٹ"|P0p~eNE +oK` T*EH>AlNײ\ʵ$H(p"*A^g4L`s _8șT={:~,[z]1 m sjX\{>&!Uq ":ө +; cӍnۺF ׵ SCZC-Cm[DeXa]^B +kiYʌfVkK^b[s?%ֆP29x*פTwJF|){r"Aj$PnT '2,ۯ Ti6H +vhui̭3SJC1 +@3rnP 87 Ň,LZ4h5`Xc0MӞW 8>.eNd&܉z =LBRLGtح(<)9s Rܴc \+f+q׿cH`v +B{b-53b*;ƄaTR ߎX\>oPXWX/<.Ze55!bi..Zh᜝)yU4 +Vsϡ(ck0J۷EUwpz,rǤZ>&ZUSSucC~{d̩ 7MzS!36Oӌ +VJE'Jg>22'|? %46jٺJf_ =^+*Y f6ūp(m171}?hedl"~nhOЪO1ySeEU CjXONJ.Ȥ_JPKL%S( ]L 7<*¾HB'Q!D0d[5::Ñ h< + , +VzP(c5U̬j/~bKa^~K1Yxi7$d62:bW<~(9ܑi)F#-qB <1ٴ/8ᨐ}hO '~ˋ]6D"3y~'Vd%.rcFx5B>9ZgK3oڹĿŃ}*&HIu(HMsW_JJ $ +U(U1Zpdp֎׳-24VS:MGTmmUWNfjVh1ERʼnx(OHEeY.S=k'YIs(eXiDDH@@1M`)ӁRǬh$TL(C I%BEXP$1a"Hb$!BJ̱0 +F>B +(turB2!!L=C,Tajc C,A3F8 bP$.P!!"&H|Uzu]dO a{i)Fmꨁ6M6]_p4n)ؔ]0ZK0EBhuB4Dl~6zϬj)J ;y3M+&zFr+ ԁUɍqQҨň,!mաhU,;ƭW%>V'"Ͼe{U:7 BaLaբWaU aթ`t +5WP"B]^ƶ uY ^M|a|I2H ҿ2?{.Cc( +@Ԅ$ ) LM`50'lڔ܋X\QڬqF٣w'&y pr13&1j6Dsٱw"glfːHsP鉱U!?Tt'kygCU{ +&S:(0>J\t?q0Hq +$5'=d$R`r︍,1: H+J*B$t +iR%,*>:$! KjH/;*:x dIZA[$MD? $$a8j?gˤP.%Y =+^ YO83ge,<}sHCT÷\ͿpE38H4*vGN(Yĩ PN]˦vT\O.SAf<2ƋF1Q)*##cHx%:k +X(r78ORl h"uMG0;I١̦!N-1٪+fOedFAL5A:*ԣs4:mY잊?BeofDƊ9% +$\ zQL=*dBfj[qEno{2⩵PcĊZP5yk2\dMPIil;*,4&c|1 VgX>rNv!@qP_2"*L 1飪?>V}˼`'XQ)&(T + ҷ;p4Mѫ4 4naFHy2$uCA>tBTP[s@VbbEId8iU(%*h)hL}3UzDX#e!5@4"B DbHAʲeY6f&sӥvL!"8ݯ~4@ B>QqEhIIDXŋT4HI!LB/0i D+ZUXMUш@k2jBh(.X,D0D%naq +pr0&mCɄZsh"P@~xWx`fh(a84~f) )pa $eܥKA)aI<\aSPlv¬RK03rU N"㘆hq,F**L[J$DD "",/PTH,0B %^0 pNUa8R< 7r~L69@ <”Tعm'>TMmU#~4SҨ5)V\Bxs5:v% +snguy>=ἣ%$ѱ9We5gX\,ԋ"8eUKjηD+2gbb#,ly0ļ>O$clGcHxMN,Se]tOTUSF U`thJEM=4kVJGFLBIi& eI(щFX$/fiIo$iHnۺ\Pc[Ae +2VM8zjSBu~TE.ST J{^n`nW5oZA\4 O9;ZFS1B6Q<_!yG +'!>4eZrB䐌 hJt1oRL,!zϫIqV:DDV EBuM*DYu6UE57o{1/51 Q/GRk/Hi/S.]4U#,IVc`".gT?a  xu*R% GwЪC˭lߢ) $U@*r`+WGEQuTTM^ą.9A8& a4JTH q>!P/5C9EÐMa x^,B,_PEdr0~xL'r"<\aS?._jN\T:Q o+S`̈́޿ٺ-A/CV\CBk"O +T3|@Dj$jՋs̗PBuL(4ҁ:@  @SdT +B`@ Crp4H!qPXZ @/>i|#|8I5uف  Fz3M·l3n^k3uh$B$ Ց}bxo' ^a(p'+mvv.FaGQD:D,6?{% +J~[QTBM]Kz ++`#(\L8Iqku󈺣<?oC9rVpܑP7Wq2OAW4:ERru W:LDZrً&UBu r1G̽Y.6; z<(RƁIZˍe\d$Ŧd E"9&C>cCXݫ6_úq4 D+nr) "蹑!xm % کh0F۷jjR֎54@rJթ$+\ e0l~|"9wᤓ_WwSc IQI/pA+6/%o $5+ + ЫqihbW"a lu^ VsLIHlOb#3sm6Rx |'xcLڀtqGsoJxFbl}+1e8{3nʍ Q_ Ւ`*kq)K[_]Q'P… IљstûZN*P;' +ZZ ;//'~:;$ym愤0tb;H swYu*(тQ@m}ޭŏrRA?#X),qh,.#H=)OLV@򊶋53 NT s Ma!(ٙ6'O +z±g +ky<[UDLA& +p \'7 +uTPOtzЊ6%r֔sdZ=-R6a&D?+(\,n>s=OO~Ddpe(>je oȅ}wu)MfFؒh1WTuӒdFW}g\Yt*0({ם~MV?]ȳm+? AG(՚|E]{b8Mƙo\xVXa& Va? +ȬvӚfk7^Y`%ah/LKc0'M ZF[V,P+[` +i$6qXB%(=jZZy9dfkl{iOL\c̀ 72 (t҄C$+E#m]uP+jQ <ʜʱ+:\)'5`{ >`ѓIGTc`とttU @9$Ƹ:wE<@?Q|ēp)\Ta*չZ1@|apSs/h< +Hb$h.D +[diP:m‰l1uƳtk4&8.!^ٸP4 5(Z{wjknTo +\1i Z/$Q^buOGRz-Xx@崦鄮Z>l ̽R'BGcPl"*aBuSf/jӖ;;Ԗg e>+_ԯĊ XҲ(:ǁWL2XɁ wr^C5J}?`x];[%TpXDpkjOR"W훣s3M>D!l` ]~ҙeOCxU ]gsp +41LAK'a8DĔs,^۠W P HHt6]d"ؐtf ۝+(w#=W2Yd2<*zILHϐ&=I1|` ZojfpQ7Y0=rxTV40]%^oZb]k?E 4-#S *Q#~h)ګN]%ȝdP((bdT7yu_F f.QMۅ@taePa#!QK@WvD\8{x7L۞L[O8P-qOvVqۘR)笻FFf䡶aE(zjƸ}eZt'sHJQsHkdQ¨gxc1M(r`9{ĸ8,hEϴh-93|Goi_jg$!Hi 0>؜Sl_9#t8u cE&JQ \>D 30baЈ! )(9? +aOU?~3iVMb鄥>6X -=AS~ݠi^kFDK쎣,L|3<蘓 w7/&xp +RA9Q98 -ΠaM rf|;ed`\:Dn ˲%kAQNO-A8 BaV9 h!B@ΡA~ q,SOH`#u?'htS -q:2_LЖs^gQe##.yY>c+c{zq -A5VߔH39+i.1OFFɝX"/Q0(rw}pKU2qܱ[厧KÉA{;ִ /=C8aYBo'sB<4tpk?]Q=GڸxaR{[b8wL韩"=?f1aN'7n1܂pǗ'qFT|(d-ne8H3 J<Vx`<vQ <1û 1Pj/C+_> QmѮxf$`ezi7Ӣ/ШpU(I-cT_.H(c9j p' l p- rS0أ'odz(7iI W.eBPd_M++u#KYmL 34E l)ÕxF 9cfL|_2e (#@̜&w . -K!u5=Ly\lk4<3)I"l9Ţ $V#ʏT?^byge)o,[=n,-]ل˒MU ek}rDD0̘xS1Hriri -NO,OqlbC>/K$yہi>qT5FLnlVl~fu7 kxIdq~VT3lqLe9gDg鼬kftۙkXkeDD4[%cٮ'y. F 6lGg~ѣMύNG aIk'JjVOi4Vb(cK,@62]R1/;2:W4ZgA&>]%|{ #z)QXaʀ06%y 'mCPXƢmZJ^NmTr2ҴB]トIŕA*ORW$cE~坰QHjT![\es5y"Fs6dS$5.0Xn~KY23n-uV]6fI}IջRA.}]Fq5WO8 -uG=5^lհp~{::ϱrDd3IJ0o#Q#RhVf:5[gH -Ī} )Pc/'-)LQoi Ew5KXs5{8:U;LA]CB*5 і^A{lwc>s#!񳬓)uFrQwKq-7tX5қC-X.@gF LfhGK7~Q Q#4L5רGlDVnnkڪ\F}M5U~zVSs_= -B:W=aVXI/duu8L9ǵ_=l%?rYwHzHѐ:ߎ'v6Ʈx$5,lv;t~}0Y -?Pa%T+6ihll豧&#.ңg\>0`%$&e3y3a{g/: yJ.mDuN\/m6%lT;Nk3dFk[, ۃzζqmC m6ijmVbADlos$&}ȵd̃'*]q_#J":^7U1y~|шW-ai݇lw~1T -o`0M?S zZް}H+S`nG}($.1Nr:CԯZtc -7" - nGn WC~p=}s`ހb_Vu)o‹ٳ -9TG*-9V)`F" ?Tte%6h!:Ï.}mXl $)LnXI\!d)ژ - +<Ҫ8ˢF^@g&'W;4F7d$AB}d"T ¾B9H4dZ  9S0@Ϥ@utݍY]ZAbGGEPQi)I>\k +IsFŤ떍>ĭ6ˎȤFLLEԳ1_bswA + l-ѷ>B2j& d>"\Tq*thNx},)޲l?5d!x)`Zҡ*֑;S>Tc(\I98*ɫ dCٔG4óɄ9ޯ$sEUgogB~iY"E;+%,=DPEgR`Q3ێ% @QP*1]UtUZlc~}9VSA (ݿZku2s7_ +%y!7u^AmiIW,>`]m\-CUS]TG ?M9.ΑHf [te@:>V3kX)߳Չ\1*_1D> d~͔O~E&c я ̅eٱY%3yX@d\iՅ~=~g -vY\c,de-t>c H,/x}&rBL/BilK2!Bǘm61\RL\Y]\|ФglQuFFY +~ڐM(54F" 7wAHmu  5A_,'@(:?z 1Y9<6*Aau: 5ij:f&]0=etpChm+K+/z9];p8϶hM0A~3=3 3mPQv[%6;%KU9(2 p+LiCv-i"Ju_g)Ii3CUMMvV,`DLy͸%K|8܎ƮS}"-CgUO 27+ðXdzFw0 #B;Fv9آ@6Β 'R?.$ ]K"7߸Wd@"Ր"l=aTG7D,h=~' ]~qTQ30֩&Y) G~x>"{MCl%uJދ a٭&go B0=VfQF-Zrg1~JsB!56x\:iAo({斱[kiŚ%o`iGq(xFg g?V`S~r惰"' h"}мTN)t5 KƠ(8_ٯh8mz˫E6,J`0|I' zZ&$ t@ݫJŹ0?Нde=%H3!x6M4CW&:c[ #c: :K,s_4KT(8҅ XAv?=rY37xAen>X &*U`ATXNݗ*(T>|=rxT'o,N9`i'G ~i'(P}*09b8IuR=wat!:aSBXq=%Ω>lN')9?@dY$An1 +VMԎeN 9tRB\fĆU#;DI-jbr"Lx(^"$ح # '76bb;MuĜG(Nv~ĵp$'JD|MhHHb27SnLAmRIeP,%6aUB}~JRe{5%"&Dh(0A8M&&d:DˤMhM4LLDqM0ęDh&=ꙸ՜[&)GdN\vL䉋I=1SLh!m)/A0Ɉ,_Q`QƼ-K.Q C +\1"e0\Fb-?B+-If,aĒdL,a U|ȠGF HIaJ0C[HDV*bUVWR%Ӽ"@*YԂĦqX-%/7 8Hhʢ(Q۩5]iq -(Iu'ZL`5jE|7xq[ZcAk@f^#9UvW lH"F*4ٸ3*m96KmcjA#r#91\e5-&8?(}$V_c&Y98B-i8"Gh 2%rC q7Ù9ctDI!!7$;N!K5k .1q:!Xb8ÎL`#RvhH<;BB/#|x/!? 2y!.GvH.BD#recbRv# bI||A|<#Tb1AxЌ  Xsc:a )mz%bd$A~hǁ"4J`x,b/HW6 ĿPE ӀdŽӃ?x UϿ2r l}"| &d9 B/ODXI‡ P6B0ˢ3k?Xa?h7آ?Y$NQ] -[pvB %V"Jm \l!I3 +~ x;ua{8~D'䋔}HDrCi!7 CA6>ԕJndkM+Z|3@8>Dnce(0=|]rAI{tAA0=D ѿt@^Pqzt# +DcӔMG6ipȟyEBa&/IUA܄< +ҐaM.3oBN>] GLnC @`،Dͦ dܽV"T"Lyo&7`<wc(n\"1\ExtnĊ +7Baq#S npE h/mFR5#$Fm96`Fy6hAynlX, eC9>6#!6Nh_#G*#yƊèݫx25FW#CjpTy$T"S#t 5$qH4,IO+%yiےl2 V2əPhRvs4C{AR\40%t$84Ph*Qb ;2 WH%|FfFZ}g% &]5g//}I7㑞10i3Ijb43(QdF3Y37gr,!|v,KG[Fje&+k ʸ&o8A=⛌DK_8xdu2+2G$+๏0Fywrrc1*dNv34b \ /g;bXVH[bQL 4#FkbR:NUnvrRh0̭ ßփC:y4G' Fb0|J}iD~N/*苁F^$:0`oN֋ uB9QIE 9 ˉvEfy܅Pv8]0' Bu(j.\ft:Q>MFFE,0E.0LƅVqq`[B-'l6 |O>h 9'Q_el@Pb3(ĨELB4-8DbDIr\6X,0(4N(PHYd,rih /)jPʺ8JYx21%bL9VǦRm98-KRv7 + -%^\nPCJn/5Q|ANz΍f 2 .KP/L}J ȃZ!_#Ae(ꀹ8DoIe(hygv QbÊgWHPPfE[όVnKjZ; - Wwnk(hw0l~e-wH~MDd~ܷ)R~{FW.rP>ܒ7lZ)̖1{el(n`7 O6 -t|&-]­97G񁪱5Olq߮ޔřqKuw@ؚJA!oQ3QqXJ}!ps7]{|K:oڃf}É+{>)Xk-~?O]s*1 .;@X[ȀOVwuz}Qh━3Bt$CUCF.3a e!4Թv&~ Mu&N<x(tg&0&hKY/ҊkA&u-QCj8>&N{(M\cɳ&^,қ^U]loSn"Ni.|HM X@XՅܢ3xI&+qkg*ٔy`-3;o'(^@ +'`q*#*#/}>#0%'.핖#w3TbBCFݹ8Ho/~c ߲:/%~qX!eL=+q^SZGKRj.jK$D)*DWG]Jq0%+^'/604ءaj-8I0C87æ~cX]s~z‡ Ce -\CHP}9?Vt?љmn_IHQnr2+e#̷tG/К(W frz"x/O**:`;:tsL - ] -4F'듣nzJޮ1?Oab(=Lp#ի.G-6qCn8x&كZ^5GX6{Cv?S{ -;d-M[q -6];LpVOyM]=Q<=:>y'${hH rB~}w-5> p^@qZ<|xn"OېKU|ĈexxP8>by8b̶]Z_o5뇒W&G.>4m7x =vm7|FW(O +շGv&uCFz$@>vǵ\w>1qb>an^oVBg|JS DXGD|-c>bo&+5)ͿW->0dG}>ragi0gZR9=_*Fu`/ar9jydr9C~[T֜HC4) .C7o舌g^!/*A$9oхW2'`~С@udn؂a=pYpLݯBe9v? "͆~lxZe9k;p:C<5ɏUg,G[D#)WdIZhO(:[11AD.&Abԧ3Bk$G+QOWЁVBa,lr` ;DꋷۘL: -ȚVOj~ RjY}8 6.{my/ ui3fLLgItp `Ρfl'TGۃ, u]" '/&B 37ueRq$WLb*xl?-,1ɊI2'$ hvZc< -p~x܀ (QrBa zoDdnyL3 ?4c'7qOV %Yԟ82edes,KNjew1P4w'wt캈r&slŷhǒˀLbr޳]'nu͝"/ʚjINZU$ffwID:?F؞h pYkLcrq0z^@vt -dt8W,.JQ)C: -OGk^_nXɈ+D֧6 `A6:0 cKG}x\ȗz,4+ %rJ*e[iva?uĎcz}yӮ1F9ݔ-uYT@5 sXmPًG(Dz-,\@~B@)P,2|j4#F]P.#çFgۗ,Fml ܜ7g<_`.m۱?6c^-)hW i -K^#8cz.#mWyUυt11h4R_+ ٩VXz[ID\v^b -:oxJ6%7$ T\~\>SibȲ95s_fo!]AHC:)S(Խu\Ϧ1yk!]ʅfj@U'~aI<-0H6u·> I}~&R bG -o]Y?}vή)m`]1][:LIu<<*"h32v\ LN;GQDUAfpy>ۧܳ}XH -Y@bםc\MCG? Ul3pٷ^h73~T  -DcG0#pĢIŞ$#4|3&~)EfW}<@ AH-5U?dx}4؅!ZA>_r/`i!<4~ ?B;:W bZG0B:301J2j \-Ēz/#Ka ̿Xý?T9x49<4cc8Li-*#y~?&Y|㝳@ C/6]u)&WiwdtY#?_g}%Qyw]M7S)mYx4<=;(2.$(NgPyFƕDi̷[S8G#~{+sW  -Ly}V qy)JEW߄h\!<}sg>..o "g60{ft]mc(iXS.Nԋ>C ہ*)/(!TXS$,=QI7nYho^B@M 504޸gnJUZ;@T,2AtוTk!5(G5^8T3"S+({T%pO`+~?a^IF? ؁*y -E7pB4)jC;g/mTŏ@je 9ữ8,IB;g|~ كm>Ox6, " >4 >4L47堽{" ԋ.9gld/vg KBVؖ3 Ҩ;{'ump)AvTƯ`MtIgeމz7L Cg6ugõӘk zV޾[Ig) -QTg NR,4Vx Q -4quϣ_:GB:@e,,,o[hR&4G^{IN -=I'D}cHgE< ?['qu;bųgڼ [9?Rix3"P7>+uǻnٶͦ,ݽyK޽|'RoFmaī:4s FPnK?u?8I:Q i74 H8z MV2')5֌Kû#X}ݩMy쳇. 0>dY쳁&lJ@(2q|]-i:;>ߓmF!(I.R}yh]acyMscdInecФwjq2: Skbet%\0,5"2㽃dTpD~d8GQ6OCoqvb{/wf\=4[]^~Yv7:F f6KgqeG0[ܵ0rh4 ޙ\sW(Ǽt׍B =] _c8W={suzsxu͖q6ŭksFόScf4yl.sq}H ]>&P6rpy8=OIh ]E>[gA9I?)h#}?߆F=E~;z+z KA2~lsOg2)'~?&"SkcM AQhR}D> G@QwT}I=GlWY66ym֮|sKn#s}Vqs"H6=0Kzh&,\} Ģ@~~aQ%tZ -FEVԙq_lKݭl\Z6{,Wk]#YE?q_ζ5^8;sw\}"G -z0ehǻ~UlGpAN]Y6suƼI3P1ٗH \ke9h]^;x>uyGF"O#k${ar@}"M_ hizR3@AI7`I/8!Y/~o?6s>Fk@6iU Q -?>lGxR+""l_yE;uw?'ly~MI}~ξD*Nb޿0BhS#݄ -J}^'18=}>|sy5Nb$9Ἲ0Q?|?&Pm}lLĻNGpKbOI؏>?'a/%Q&-,k' {7QgHbXDhSiz#Oï -N>z?4yD;,=)Tx,D<è6 NmYh@}Ǽhk;&Rv&gF@[,0o]!;x6/ (l]B~f7,< f8 m$O]TixE}E=!G?$'TFȓk0vh =7Yzm@~_]yCkքF0A~?ʄGP/~?b&4pѯ&,EGκukAzf~sxg,-gygFء6qFvA.z;FY6&7[Cqw'4¹FЮs&N^Y?g$y?7&P Mn)x7`AٝTTԺ2?|QR1Y?*$C4>7ѥg:  ̮Dg`HD?h2-@$P#OTguAPM~(WE;F@k8w>  {#NC;l ,2 ޙluu~vΖy ;x^揍Ⱦ#qx]AB4y0];_n˽1;{u!-#Fg2 {;б/qh\u:5:vsm77&Omk_,9(й3}n7tf~8ߺq:0,C?)>]mc8WĻd)2 j;.~u;o$P96u> -"Hҩh 4>4~'DH~zO߉+ $D<9޼߳g@AvOQD6h'h?&DwO11xk5M\ͳsMyE% x0M|hVPQo%ODh ??VD\H ZHz"M/ he8zfqܳ ļϣolC:i؅ZmB8z!JnC8ef?.$ kB:2oqΌκۗ;{#4ruI㎹m^n094m+e,\/yK޽̾^So}\25 f˵8tt sHw<HOy@چ|6Jqٷ[D<'iv kf?Lv# yE/ hC*O_ik+mF=oShWyM{ʄ_ {Ŀ#cj:q0y.Fy ?[>:w "L;T9h6r&ԩ/pf[W[ch;5Yo!˻sEfL($*0MF;x6M\2xnoIX., MG-7ļ>$"oHf2G6PuYB 544Q8t7Ζkanl .g2^eٹ_8brHy@%Mہe}|bޭ#y7;.7ytn:t Yf ,~ą,+* Gpc 2|k8 0g /pax 4\pA/ 0k,bp \?59.ȍ i*e.RKH$`yGe,DŽ MND >p`zq(@M>jhhuS#U3ユꦢPPI""EBb+V-K<$+2Fqu2c1$m )^Հ38&ćx5܆p~sx wb LNNK -' -,@0&aB&;00J@ /k/ֈB,_Ț/u2\#&XOECG#0~*vv"!4ra:pxujrv61` -׏tx0!HHc~G'$H &Eę`Q "ËG4/ YB{*'܈FLą1fGp,cB!a %Hfp~^0LK؟A:7?! !NܒKܕKܚ0Qtei$o4 ^MP!D )]d97^@K,epc+d*=KTq4Trz dG& EBda %G{@x Jzg)m"y,"AH)%tRx 0v0EZBJiKRXM$;>CLzx7^ݎk}LG!Dz{~Z~Z w>yɹCSVJHPxM_$R G61oz)ܥMFGBA#ZB[9<GLW>)VDMOy`ZӤʊzzvbg$ *jFJY.11i&&:_7j,?h+=sN$B"7}Dr>a <Јk'$J<=AB3hrJQ)<"&<8:/v(_VJ7*n0arZr -hYqވB̰3:k%`OJo.V3ɇ/;&'~?k)_ V8 ZR3')@@E-qzpjDosEH' -'I'ؗB=QPi5e7Ji$,h$4,D1'k8j6&XV"ct1eSƕ/*F|NsNxs\2ؚK'GIdʽɣJZc)6&PP@ HIVLJXe8).=#/4$JCr3,:sjQRsΘ$M9$) f -*lZNS&wa&6?\=`j"!\aE2-f&q2șCS29%P:o2&>@rFLI_LFt7$/c$f+.#񄎓55$)?F @[1 -1vpcNR:aHaqMJP޶ਵ 0%[*5*Z=4i,L+=!?z ɺVh`+ŌՉgvɌީQ\t H 35"(fJJlBRta֦?vDfY܀F%MRVAEBO`{fIQOh@.!ܶ cv(N%UF&X|*n%*]$Os+$VF>O( 5a~ܸȸȰӦԠۤyKlwGt#3n>&> "gD~܁CvzNz|:&5lʋzނvB5i=nT\-3zۖ#4d,[[GOQ(ch9EHy\ *D8JX- #(x[lI^j -eJhkѤ7dI_XP UR WVi& #9#169|wэ#bMnݰ;P`tuœ%-Ņ\#09" XP~2ZqRRx *r V?y`$Huz*j=)@] 6.Lb (! ČG[¦|˨&$]2܄9iaN\DGUaPVtZʉ?I/*GxR*oJsѢP}@awTh}3f -ԘcC@G}wGWG%v:ɍ߱W`qTlx'9|7 Jpȸg)lmt)5 e a6dj,5i`UV;%tWY"QN8~%*wz@1# -3#$w?OɌ`v\> 5hۀs$'o@Q&҅RO"b{xye-7X,t,5`LfȍSx#Y?Xʍc8لj#(Juk)! -zX% IeC"JkФhB -kz:=;q?vJ -oVĿ R@0 /^:w2 Z ]~C#C~WIodT+*JeeS=7Xi;0yCJu<^qF8s=bgu3Fp! Pl7`N1AMV4&+n~~R&#~ -~cUTiW`n$9h!!wހ啾öVyBT HE=W-O\rgKR|ىǒXH+Ak'"|EM'%G׋UQcXUv$+ -VbJPx-5WBՙyÓv0DTPdtvPDTPtT栄Տź~ tXԹBUY'%B'(^T%pnbHZ#zCW -Y3J Edm D3@!MS,$&Kߏ6ڇR3"A^'1<= 2:wU>(vhqYGxXş㲦Pt0u6S78nvDt&S[pr`e_pV*~wzMR1$k,t)D#S~dtIOdtPk껈T8.*֎RWY ɺuDA -k'O] 3 -N"Ikfp[<>+5!u)ubx >H.&v#|JOV.2>Fg# Κ5~ؕ㓾aٝXm%)?<\"70?&.юzuND0*F5 %(/tglͅ3:- :qv _,&2~l6揍 cgƕky"͉q&,6ؑ@u'he ->{hG`oŮ;é={(wCW &D_<ѯP!=L@~]je!:?R*_णBDVQ#;j"*wVDzp_Z[:Be MZ MTiҩX] F@v(&{+fA٣F@#O/V zSy9 L;.Bv&!eߟJ17,Q>}]3J, 2X׺y T -Bq\X&q[IѦZQxYGkWPqG( $#B0<( -D-W|x0 OcSkczeJ`ߤ* RH"@ w=}>(2о{sP =5VJ3qrLe/ugڜE|J itcfǻ~$zq99XuB?W32} &d\\O9aP$XX*:'y~#NC 7Bk( e)ub N9k眠ģGG}plJE, R(ƒٹrxO!;P_q6֏PYTyeݔ ->ER**)Ə鵉4  -HDBHXXJ?Kހ7&@QKFx0"J&͚fWNA}ZX9X+(@ ??>*O ±s4lHUH?3mu_|E FDv߉5|(6t?Ora'> -N9wf [Saf:cFuϺy[f@Uч-IAǶ bdR,$}f 8'k 5Gg`Zs} >η)C# uՋԚhB8$=BO҅͗KF|/$uSkbW3=)tYOluvjUGR CH?!5(?&Q }VNZjD?jAPTzN$ -HDv&$I[,6a~rp RLQ1 y’Rz+2GlW]!L#׍4ğD׺'()_OPUmt !&oM61QqcEBl>4~* A;_?SpaijD אZCѮV O10y$_"hID6+rQ> @|0-4=xxX&NQB=(37~*Fo%G ȼ&02{pN{SXgء.i_opA~ MNi.rҨGRƎ -9azAI31I{Y]#ⶣm6"_8R>,e,%UaIgXr)S)& Ҩ ZiXsX;:$Uodjp T`P$k,GDiX/#kHiYWNRi3mF;h2vRe\78k-?#_ - Pvkd`Wb+(y(%TqvÔdU109Y<<,0i!KA:x搮"MBA -Z;4 5%3 RȪ3z_q&~nk8 a P8v9X5"1|#&{b` } n|_)UV@.w{zx/"Џ50$G%QmY,J@0 RDOwh+zvFEfuSYGG^_3sxW6* Q<=&vP8G͡w9 6ڝEgЬ |@?~u _\2;mNb'XCgF+b{Zk0Rbpz @ J??Fq8i4!gwb ?~9߻!c]òNpI*bMr~DTH k[!)'))1-v BF=뢍2{mtM ܿ1[0ƂqLHIQԳ@ mKBiHJetM8N|9`<Ժ),Y3dqǜ~0*^*Ff$bfb -TD T@t6$sh ;ךBYKg k`AajJǘ\xrNPv6'i~@Zϭf2vl`.8*>4&԰Tg̥/o]yϭE%P}Yx>ٜl[0V-.J;)ًgl@:;ngӼ|cH3Li7@IL4 $Bv :2|ob]VLM[ϭ;}n_dtPnZ>2l,x Y8[{y*fK?FNFZ5Y>2iFͦtH^JeW]=G߀/ h_ǓGAAJ+}$Z|@^ZNg*D{hS0*Dxw`?iUT闍 -e.,H[u:U &Mwk㝀oP@eꭳv_[#.HhƊYk@8v J@cPV[dh Mvm>"_TKګT`h3( ZpT+,REv f'$Ĩ@gso<Ρ]8i꘻:5%m[i޼i쳅.4oa8 ƁC}XJNm޺մYM c /tUCހEBUem@U+~(-BoP O?PpUO.fb XP^YX vҢ6)Qwp3Hy=$U L“TG&ԊXC`rZ0V +~[[Pi+JZ1dD+bVL @bի>xM<+Șҩ +j UڤMB\aUت(UtJdkn*㤊JTEĩ*їeRaf:*peJQ L)PZ)n+1x+p%>(+2,&p^P{a +CkEΥxh_Wӿs ,T% L!i,uE(6)̎9K֍"(Y~am"Ȼ#̒XY4%EB!i@@(J`@d?Q.ZD%R& XtZ b\ +,@~шBhhD~wfoanFd 1# Z`-"˓\0`F@\>fD*U/y4!k9&وW%yr̢ccfDYž_t +\DÈ.P6$]0B(FlCJ,9n_#,T q^~}" /oM2/K8b4"6$ED4}/RK:‘}yC@{6_0Kiٿ0CNeA-X +QUs3) >DB<4"/< T0 +sb0i} G9 \ +bkI 11jx8"#TѾF1yFUt Z9`USV0I?l93~(vse`sf 2~!>LC9sHG|3@^2{ NF%{$C2Fe~+ct,3 WhˠlJ2_|<H3L*,:JS<՚yl3 A;whAlvŠ 3Nq Gjvpj/X5B\k5Ws7kjΚ4d oMv7(K mP6P5fZ]SfÒFA ٯAk95P}g#k !TCh‘ߩ4hk!̗m&hؽd%RIDvMn>{$vF;ΰuf(n4xMfx&o>aRf2XZJrt#0ob$oD !p"nPw 59,imJ G]}8L +9DPѐ0,NB1`(w'+q(>`P<rfo/@ ӡ3 + /ij@/{]@9̉;>s͉6)GAJ/V9>pe-`N‚ ڵ kJZg:Ӊ -tutO ,xu bS, :‚_'++\뮀*W@;wEjgN+eГ%v49 +d1w4 Jx VuBUH&?;ږ +b¦'TH$)%NcCS.RpR &PRw?RJQ/OcQ`YQ NQPAB»vPXؽ'`|'@{3NxzP/ Qq]467A\gEwxg&hFycMXh0s2} ' e‰#٭By~&y ӏ蘠~RvgK@@ip)\᠐6C]$ѻf"J T$]_-ԔzBC`r{yy_R*/2ꠖR;TZt,,p *`;cVuHyH[uGZݦ&38_M"@1פJ.詠⦢vܛ՗(sMk{OD\xV80#!~pE{_:lגJTӤa0`Aa(T +74ovr +6zЕ62e(Rk_IAHڸ kJ|MR `mZH]`u]˺팩ŶʴV`y?/7gp#mkJsQ\F4QQQ)"%Oĥ 6.oENjb$F(tmL Ti_JRac5_T~d;Z  *m1` FD LuV,A{ C|A^Y1Ev_ +^}$uJuK(Y#?sk^sTb=Zq=t3|_`li8W %aɋ!>Tzu@.tY|,8sn g/60ŵ+ Ǖ` +J*\d|wUӓ5+v R1mW+ +jVTk@e2 Ͼ47Y7P%I@IGY_ wƾ +wӕfEbGmr`~8P7D/DH~ o}6Ele::]l&ZcوW +DhfP7J5PrkDh9ICzHon'su b SpieeȀ\| 6@{LF hjD;ڀW_p͊h\]QC5/V"ٽ]!%8R .IXfd>SP }$ s4Hp Yy+T@r5&#VW@|z_)pJ,"( TJ@T_(@Li:v,]vfGOOoHp$ư@]L^mwR2%p٨ +AbܗG 7" ⅛lY:`yX],8YXD-)'YZcm:Pgjgjob 0+(}%)~,SkcMhBMdԙ g: [Q7BWu@u(/%󒁇\cϹ8`mU0or9F9$QI}Ȫ0߶)ІNmD xwϨD,'l . "k^A",/7_3L8]%ޮ+lZs췬.M.|CnZD++j& o4 +*]*žR +i#qitWHgCTO?ՕQʡ!0/ hi)`LR/|`Psg򺐉pNLj]`Q$qFPĝv3(UjmbLIz\PhZ~t,Ҹ}IKؘB\' +,8@XJJO)'@&jyL`IFtV.@_s= @\uNE{<`eh +գ3 +z]Es`;*Ob?:"G LU 0Du,-6F&{?J?QT cNRDv*e]sw.SKn| 6VX9#=v,Ծk_2x5el^?a?Oan7W6B,/dϧNJ7u[Rd +:IdTl2uLzCEs&PeF(\gLp^@ i‡zTBο+tC +? 6 DNOt4+} NF5țg_Oi1N*50Eݟ1ёey%l%틧_L!Vq]A [?}xR kB.Ft@+ +Fݗ +fy#N׫_fc.\'ݔo.2Iz wxX!ήoICFT}r֩ft lTr:^8WozSnOp , +ä~=07BqbkQ6%T?9h_~Eȫh/|Dӽ8>SAx>'T=X&8_^r=bzÂڞ6(ak~gA7n <Un)9etPб9I(@DOJ:rKm`rP~#MH䤼jbqncQJB'3LocЌ'F{Y.7}S^5<QE~ \Dn)A5HݴU8`4`Rkjy8<ՠ4W#%D{R w#aJ\\EGeO=Eeϐ)FR jV"gIP@{ s`U b?廻S^v|E_do K! 89ϥ}pӵuOqᕰچ +YQcamf>ͭB;|oa>ঢ+%(}}Uh͛qCXJ&نgiǺS/_ +@Hy䉕| \&eVw[>q'Vǂw| lX1dQ=RoB.Y)&zBީd8X7N(%䵿އ|Tl pgZ*Z#vx_"uƧRݪ1l /^v[kʢſ|3f2@v,x͞6G|%&^_20A15.A.l=UUg7QBl + ]X~ErQ-hڋh~ݮ`;G^M|؁_ nU^S,xhxά.JBE!2VGqVeA)*->[Εw%Q: +c=E)VK%a}p461To-Wn_(‘ۯjݚ&PWWH=tx<ƒN#j?vY8_wM.w5<€x-ji^.I(YDChl +ړ_ؚg:Ѥ?xJN :f#\Ƥn)*@oA%#%JMC<0_;c_n[O}#'N/8o3RGq+,I/'͗j+&QgX jqnH>q%]6PU34%/u~J2z38k5? 3jrrqBpuЕ]z4*@xOFѤR7d`!?^€@O c;Ё86Ck8`#t>2M +!`#*M0N? fk1I_ɂcZS~0AZ `W›Cגքf֠Dԫi.SVPh!!k~\) X3)n\/$z#(`9Q8 0Wn1;bQ $澣b P,!%!,`ٛ#!Sn1끷0pZy̜9f}V-c:e̳I4e.R<[ KIf7/,1?žgD'ϮQa~USɦ3_MNtsbht.0!)OkZPc0W,3X`zMbz(B|,tg0s ld<|Ԃ暌`c g2|ғsݣ3Pc6 ã.Ib.ڌz5srRyŚ1Mc?Go B!ݎQnIJ%+2e0n7ԤX27^NٰIz!mR' &n70BH`m̍ }Dv3)*_:NעJ\rܢrA,pk:n;&LtK㺂KQJ/TtZh_8bE#fzCr-.NϱԆ48û?qYOnlŠ_4)N>0,F񫲺pꉗ4Ïz"{,A۷YNx+HAO]F/$l/Yw/Va/!˾ZSH%[.X(xN+sOx/_tr(qBT4⮅-ᯓk'$\W +endstream endobj 12 0 obj <>stream +ᐻoAДvŃ*fN^MI7㹁f +z>MS 4RjM(A8&̃9~x 2.(Lgp E&^p%;fTG_&v=2 3Nj¥5Ёb9c,LҰNXXqp?cF_lquO9b(M'{iBoQd^` TX_'\!ۆo! KS®. +vst{o!׀7v?!sNd{ԙ9U@s],|[8y?*` %s*XNeiNZ dSΚ'QNzA:$OorGxMý\T<&cyP7"tewʵ% ..qhY|x6v0-<ݧK2wH9{h@[3**96}9$fhn#n(f%VE ̴έR2՜^ꞛ|`Q Q!t'>IJtJn@}p.ZL;$b2܋Uh菥(mYz*7*&>m 5A7nv.$ +Be%0$^p^$JҤH,vܿm ~j]o#KVvK +^,o/btnd9 %8ݞAґQ6ZN!mf w(+Ih׶L Ց^Ⱥ&Hlkw$6k[U9Ķ}l;}k5X7Xa\ ~=˜F= }"Ykg! 4dNjp(jgA9&"{EL432yW?׎6$kT"8QToz)}l 8"vF5FX*gwtamMFţ=14e=Iaţ^frfv$xz4fIp_>R/^e bDHdE./k+P9%;S[=+t +g#2!jf4U!B.Na:5bM27i^6MNC]p_STS \Qׇ}6t=k`3HkKPKNr^䤄pMTUu4lڨ_zfXW jkk%-bk9/z,qZq\3ToCL .bLϚHYRSYX.>\!ܢP&Wc-9R k*h KcZ/>CNn%oH b*F8gQXnd [!igA'9^z K`mYE$`=|ezNXe/'LWKF_,|,* +!H_}s*j"=VONٞkFzXut^x 7'Tz_X-b=HuE>Jmݮ^u%\>F +>k&d1X(cbNApYV!-XߦP r.XE7}e]*!~{)o_YDW?`m eP)kG|NWpP$[}{7Zem!Oaau +[4nǴXu"XFò]*|S \Ak/s*UF5ezQ5u \jvwPRS?puV>1rCl/<Х$8uHshZmIQ&+js@Ԣ^WABRct5[F^±QdG49IGÅCy4_c!2?#3"$PvÔ-,Q2i%vRsJa ) `x_IsAK#rǥF#ziLGe;)i e+43ݗiZY\V(CMaM)04r+)A xT~Eo3B긧QUrj|(VjU'fYY%GMǭ +Ŏr]5xp`fʄ>Ј,$*Kk9;6tá;H_nV滖AIipum\o`m[ 8?5f^^!661J-h0`jdD u)?\5,AܟWԦ Ur2(~x_Mܿ{tH"c0a'W߄e` [Y3/b:XB +d2G.X5=YfXY m&j03Uhz_O~{f34.r9 U:9\h55lJȳo1~}&(hXdQv̻hAZOg*ij;Z]`bպoØ}6H-+ɾ|ޡz&[lWmS|m|VuY%npNBMLw nQ3{};Al2lp )Ipy*2d{6\t tkqyE@K@~J0O-wzk\hsݽ%svTEtc6#]LȪiգ$/kO:5fWBJ\zk^.8n' +e1۞]3HwW'p;;/} ]eM1)b[PK1chb +h9Wx#~WfqV4=YZryPLK'̚7TlU/C6%\ceS*-6IwŨ7!!9.Ę3s}~uh\ ^96ƤN+1wu,8ı u()#?N|XuFn"=ƌ(Q-^Sck=;ݝYc o;G0l;d|Na`YbMAÚ6&]Xw*Q=Tu@re%J +9[Ah@@fsĭ r1C&93[C,HY Wݧx)`Fj,#?)]u7ԩc +5ٛ,?搽1 +)8:8Ϣ˨94FF\k\=}>ȚJVd<֪=u ]b 3D㈨ q[+*J29X6{2-(.3ű.c8O˪V '\sq0#X1[ɍGY֛7`EؘcC֙H4C#|fjFenl٬~Z7ce_t>6>Dsf48ə˼rΊyX'W:c31xnV=96#/23>3fb3#}煋6w`R~o1h + +ޭz"Ѩ*J0G f\GDA0:@!kk|ԠG-!mjk陎ƒ& O"Y?Ni>tQK7Qj)nX.@6eD cNw:2:4A׵nA>>]1;4 F(SMƀ36jK +SlCPmZYJ=2lTz}e Q}I=ŕT +Hj;S ԸCH3Rjg1&Fl#5a+Hj^!H\nI͗l1)EsHX%Y 咚F3:w \p%jW[OI7ICq +َQW5jؾaa>)uIW:ԯc刚f͙va#oH"p9FѨMeujdϜτ^RPc/OZRT^(K Tޥ!w5KXs5{8:U;LA]nCB + j ї4RA={CF"񳬓uFrQwKi-6tf5CMCmvXn@gF '`74ꋣ6mQ QqL5kdr#vCVn5jڨ\F5Uz#]r_>{ +j-W=wVX$rA cuu8L9Ǵ_l ?rYHzњ̑!:ߎNmǮl ,5.lV;~}aد~Qa!+6ehlʤ豧!#.ңd\0f%$ϧ&e2y6Q{g/%: yj.mtuN\/]6%lT;M k3do[-ۃzζdqmC6i*mbB Elo$}ȵ d܃F*Rd.qJ":f7v~@ш WalwК^;U o6x͟)M zZRo߿ H/S`N}GG=($w.1F9:CVt|$x7GqR 1M_{ 8]9c^ADb+w)mca|Y*CeZ#pT[Y%@q(\V\3 LFGU&b 8_:M]">r~E8J$Wo +ZٱCl>́.L$8E¶&;08qk,g#8p(jN}F/O_nS)$W{Wpo@N \OoôK [uSU3GH+7lQk_`c7p6|O%MX8Z_CĂ(~dD{¿P BTi)^.Y>ȕp] ~[펐 )^‰߯dhpo}ۊ"p=ݟhCVf[0Q(l3*/^Ɔ2 v Fp:rߜ{9AuM5'*qb+*a!}MlY }/_ }T}'Q-y(Q6${R+ 7߳2t Pw、M=ho ~gwbP˛FZ>o?SHI5BK1:)2l۞P4;&ӏRXߴޥO::M7pxMF>gY,$IA=7tљ'6.Lpǐ 3ooho8QWSÚjL=xeQR^H+:wsYDyDc+8#<qP'g{Mܽ-X7q/,&^S%Ni^aXW +U҉INǸ%e+myd˖*3{s'+^?'`Q+#n#+/"#7-̈eˆ-]bezΈskYho _VgRR +cW9qƻ'ȎxLxPz8D_"iJBt5"/YK)1]᩷xuQkّq| +H#j;Ng!ѬL839GX#rbNZ#?sט,9S*l[+Yȯ#B1E,'Ja-;NHρuA@>G;L 5ta +ÈjEG[YJzFz(&'8/;;bޘy{qϰnrl;/gy[WVaކ]ԇlk)_n9bWfά<W٥21˔+*;,]Jdݵݗx/COh#;Mmc4PJFWz"xa + RX1SXO#v!M 9_'IHv.ۋG 58pqW) o" %O$vS#:榼}IPDh\yP8\Օy,K4|3,TƝ$=?|`CΉۛ6CS1NJIHΥ?1DxK },\w;7Aғflz[~+y@gRkdosVvXW8ˊZkS cp3=ft*ZXZuygYnr`4Ijey\)}/ ˍިʚf' B8!F>S$8%@uVϨ'j>+fRØq-CƻO3:~7CV~Q|Ѯ5z}.epCWεW1t=~>h ï#%AeDX1 i"3>ϪK*soDh(#ed|Su@]PtFXum䚠H% +J: +2@"r Dbe;h\ԗAF\H(LnuYwyxOTj(,%%Rg8l@&{6D(گ8u@ya#\5?}L{ HA@elV`> 9/&e +X75֤tW`= +{xnlrZL!IÅ'H&@jv^8,7hu HERG܀ HTTCLO5g&FkUChkT3L$rB?&Y4ZxO7"Q\9YeH܀ܚ9ZKMJ[2kH$'{dpα#EǸRYS䤱m& . qG5d[/X"{혀IY|LN8__+ڎ/ZzEEYT7# sGyhr] K;ZM,j^&2uLu(0QkXO5L24de5HwxSNSPEl5.qԶ1vX.o]D)[<0l

F6}e?5PBԙ wj/m铫i<=i}A:;|}(WѸU/*O$qs +!F{x/~ejA? i̻af EgMೣK x|nL;Hr,u.k\,M69Ho(-1, m¼gLZ s&D^>+'s} : Ulg2 un@:>ITl+(H7Tg;*P7B6;k7*@{sMݯ 3}ouNqͳgecPI4|ةuybw.#2qnO߇t*{1QHE Ah#*"zE=[O3st(rc,\wRםeh<휭s欜r ̥m;y̫4sj!Mckz [E`UCr:oPp7t>F += R@ +DLFHg&&Ri@}ZOAVXRe$/1}i5PkOs*F8Fsyl,')z^[:Be$'$4q=֕osh}cHef˿.łt=" k$PG0IvbeS.*itUD𝌟[ '?'NKMb?Lu>O"ͣg<{~r _ƽutQ);“q_BL+q;^NMԪTm?ο:;kHu[Ci׳xXv HF&PL¾@dmUfBIh ƽ RR)f" ~AG4g@_#(su]H.Ф߽ PP,V>)DײYkb`J`p;;=ⷀdWj/}LgsosuQWPJ;.F^ﴪT6o9ƕdu$h&.PY+GllϭMbi1yi3Ox^2 ,"4*3ϙAHtDb'} KCf*E2 o>'gEE}IxLyJ=haԸ2h4a[qk +h$o`u*A9@ASМ2ϣ9;{_pCOtI*v(WE(39oSo%PoF6 3wV0raҸA^CSD+gj!N? QI# 4pm6sDZS<2~n_">`%!3_A9fόKm > \kɝz1٧`H"~;PW:%$ +z'<9w\׍6 -=QKҡI3&F>7LM]k(wBSEf]:.*b5d^Hu4 G +zVzje +Ѹd Lh2Ў +p. wlL;Q;afLcy|!\Ϫ{#mj<3/5stN扼|]hmE.#F2jtM 78xov5 \d 6qyV̝2|k5M \rgsyC 2svlS/&A K԰7=LP_Ь`@6D[0B) ]aWB-,k KL4*cf"OŽuòoCNosGQX{5e[!lIꜥCF>o!JA0y\=@AHEeMtx M +Dhk/"I?)>8"Qo [$g>ηnGsx^{7u^ +v: oRDUf2G=}>Fom~;, XPHߞuZݎu8aӰc9@B}}Gdd]Q)l+~o8_S} 1]wlg53. ,6/s_~rfzY,3&8bɻe5_Ͷd施2M=SFB~ F羼ue?xmr=ֹٴz1}Y;}ɻ1g[0 *J6Ra%6:z'q.2<{~iTHL^;i Go\C0Eƚqcxw{ko;6v?#qu@}%a =}6Ф-T hE@~7Ρke:`\uCz'{w8ww_7iE<4K;lq ~4;z=w#ځY+Phc:3K}Y^8[fejK[]v Uq;xHY6ٶ G|zO$_H^3qx>ri:yݦpyCØW#~*&)!1xmߛ\S8G]xG8HHicc/<>}@vHOI+m"BTx?6v((,0'$qvަp2zmHF;*~!JA'u(^jE$P䟍79h{>c4 O7:Hu<~2ļ7t;./$I5r&o]1wNbޟѓ_93:'l(mG_i>qceh89qa>~'$G|8aCuxUC='W:x'QDâm#V@"/?x{"|?2~T8 '$E=cݠedأB8&/,@B,zߛHm +~"BoiBvioBG^gVom u}K?yh3~͚P(=5:GPJ4Yc>5F8Ds(Yn͠\]3(WA9_3oL\,=y6/ah;0.h֥[og K@?s|d f0wh2D=_C8W5ut"I;zgLu;/FCM"%\,(*7Z}Qu/^4 +R*&Wş$zh3&4LO" L@~bHM~>/X9h(Fi~zUPv&y:;q eAQ= +9߼>qlEO7cj@:w+z( Ϡh'yz픪h/qG6D5{i*lN3}~>{68qv5Nށ8v^]=1g-u7tq9eZ]ƹca/tg\:%+÷V?SFgnn2m.|!Wsah0e۾6GW:z@Ɛ̝/v[}>]AC~r'~?}m j0x׃,}QoB 'oU?.~'8xFX]$P)^:5Fwԇ駱hiOi;2z%Q$9 dqu?Ǜ{Ⱦ;I=|TD(3 7t>o yz")8_;wl0-ej'$Tv +;hmAAJw IA IOI2̾?G>{6߽y͠mcH: PAG/DImL,օ$Aw }CHg@A 8ؙY7{rgsoqP~.i1-ً-6r|^e8}ɻ5`k +|o]|]&u6b9GTg j4nf۾we2y+6/u] ab܋uy-^Wrrr0}6Fk9 8 Y6OvH׏J {\ۇ;qGi:"__>_HWuqOPR4y·:ַY{GD}"MÎd sXq89ϣ2m(WEI+zm%Qèm +C:/wO B8Cwbݓuvw [ S64y=O#eh9$g+G^[G}=_Ix#qv*müP:5l~y1wkr c&<#-9x=7yw!^2Ќ ]wDw(bwgϦ5u]ϭ"I˅i#u5rH6ew9GPd wqLHٸ.7vsqu]r/Ff<|2m4Mmp^~[L&c6pa^,;˲v5GLWP:/Vi; V3Wg-ߊeڗ.qDzs^ƵYmh/쒶%.|N!ַ2js oos5q:dٹ.[={6Y ̥leb.lX&˶}Y_fo;x ZWuz=aOyFvQg8wMRwxh Kc{&jE>԰7"QûǑ48ߺk\ZUKw溬[@6ZG<{A̻uu]6OfQE^*C}B:_#8m +f"T&&C "AafMt9h/}o&PphVI`R9w郫gîI +v"oo-63^n ue\A0o1hwYYߙv&ƅSfOʹa1lc6q\0rVǦ;dmd42 Ðeb.r6p &1,Mӷ!lqg fCW^}.jeb.hX6wȺdY7emہ68A͆&KK +څ*&**&,&.*&JK馒bbb69b5SX`M B 5SS(<==4m;-.*.&+*;/=42/ ˊkK+kJ ++ +kʊkJnCTVTԕ֕VהVUWU*.**+++*-.++,,++-+-..+:X[Z][SVWtmZV\]V]\S[Y]WSY]\YT...:.-.,.EU5eeEuŅEeuuEuuEuUuuEuEuեEuu5EU5Eu%ŕu5EuuEuuueՅUE5U5Յuu%eeeeU%ue5%ՅU5eUE%5EuEEEuEuՕEuEuuU5ŕUEuuU555uE5Օ5ŵ5ŵՅe5ŵե58R9q|n.tѩxCsOHX1 YVTiLKO/p_@a0 YIX PE!@N1 }⨡Qa=V1 }<т3xGf8M MED=EDRV[xH*W~e,fh ebHS3 lgqA/Lk 8 "$ 8O0`YH*`L<$ÄLvQ aa*4!b)^bI$I_%+XH5_\IdTqGM:HE+ FaTD Bi L:0 up!~mc3`CC +,OHc!S?L3q,zE#i^+TOF .ę7? %.c3!-?&X:4*)@B K%0, +Ial'c?tn~xDT2t4 g'oB9Z?[yJY쌼a)Ɓh榸FN^( H0$8@W /CyӢx,*e+tiq 8X.no#d.ܽeء,0. OY9uʸ9d/ d_K9$;<r7^L;nkHĖGvL02pȏM0ea<^|B +y\aE sMS:TQ 33%U)"ԞOF1|O@2LAG5 YPiM3#L"^RU%yJ!H $$R>\"u1ȦfQM9d^+9MI,((LmC=Xq0{lxJ4EPiD,^b:Epʕ HYUliؒ H,Z4m 1{L%_qQcHdt 6^sS"SH!Gj ̨ٞ,-\%:~f(h;{8cVrNˢZNx6K2?q@3r"'bRN0TNMD`XaĆ%KhX*qxdf!"M;EPq-Aͳ*l;ܜLY[mewژ$,gD܌>bsFn|9 + y;SԚC]}G rmy$-2+6'c}R`=j&3էIaV6(fHdMT h4y*tòfª$2pHKA"ETq9(ǥ ~K`-,(jXU ʏnJJSF5V X%ˢ:a,XXp0½C+@T:W&wLB=0c8޲}\b/cLLt8%0l"9;%39%0n4-vY~b+Vz ++iI8Dn>| ¸"y($WM/ND%IM-5ydA{f>< &R:*yDL*y$qttI_&3E#Q$nhTDaDy -/>4R9(=2E +a9ag0u9K"\$fr_vMN)*~Xz SQpgNRc -[l1[`A$.t*kNON/$p{6jdoHXH$hX'bO&tqՆmM( .-dWET2 E!lbZ+k_$T7p*0dh5;NJ:Ȕ{G$SlD%M<&+f. 푈n@)")pR\{F^iH`r!PfXu0V Ԣ1e-IrHST(aܝL8>R7?Ll~z.DBŠZeTaDeb 3чdEO'sKt:%2dM }Gl럙nH^|IFW4KM]G: ' )jjHRM!X5^cbh 4u'j:mQk`JTk Uzh`YV;WzBy,)uWleK]iC%yG@G2DSƕLUξEt<'>4د(XD ŔNFKDAqHl['"ns2)*jrJjPZ|8'.:$2l;%7~[S!w5fjDPt͔ل 2ìMI +:֑̀͹JJǥj?)GhX(d+*g(Qb2sT2"'*;MW'qZl1-5#G%xG*Q?ؒ>\!@w(7i +IoȒڿbMX}cGsFb؃?lsH5 ܑGܤaKwV'K[Z F`7LrDl1 dh 㾥A+UR4h;*~,yI:h3&T0. xٮԨ$P2hLJؘ>)N|Mk7hba!s-E]SQQZbyR{QvT|zR*<:l],2 + y %,?;PB@ M?!;H@QAMHx9 /z=d as-HaÜ]ɉ¶贔u_8@UTްŕZ)AE)&2;r7>1fp1 ʏ-Kuܓ] JcaAwxOrn472)qbS&$ RTk0' +*A*-Œm4n.YkvKB"|ED3;p2JU9a`hcFhgFHt&%~]$=*6|jж1!HnQO4L9L" ʟD $N5[nXXjv dG•jq pFP Uە%땀BSzC%g J0>f DI#0؅8-;X.V1At{vz("ެ.`f_ru"d>4'LJ4 GB;,ȘVTz-f{:oZw`Zwx8Ap{ĐfN#B@ +nn"biLV$*DMF)*6 ܫӮ,-1H 1sBB@%+}am+(rPyB,鬡 +jP{:c0Z{!!׮V?oZ9QZ>8iu$2*TS.(ِ_5#*nɉ[*&hJ^\f@Z %1-&z +~bkr$1hig(~ ɋFMR$E/Dvt`tIgجj`'ְYem@@OYUҚʹKBi E$Q1aFwEw.I Z\mWbxC#BlD ](;ϊ&5c*0'86>m +ܠC1s 5>AV̀DyNjD5ԉ:G& +'CIKp\?8R@~=)yh-' ',) +xQ)?UJTi"%ֆ0sf* +MJkE{2v0V!ѽQkgd +D ? I+wVZ6ភjETrF`} +zZ.%2˹\OAϖ%$WND ڍ NJe7ưI(WԭD할Z&"j0+t(3(ϙˇ'` 절 !I\)A ubY +s(NK bOPW J(hsŐ FN;&*yB,ܠe +:ozbO_RT LP!#!#!+<)aV\kQZ-Bҙ|K8ZC(2:WŰE @|៰kaO i?+ڌkai1`H@J?tIyy ]tϞjmKaQ-a!qžTF/-Z^EfLXRpa+%L=|gN9A@pgHC3H1ٛXXHzM@#Rm '2&SFZ 謥ZA A謡 ++-քw p\U8*3&\(ub=a*W$+O '!Z\7@g**EfÓ9_षx|W2.kB@&(R+d x(e%1|\2MF46ha\\d|^GL5?jA+'}%ò;.J%RyEoB a~"LB-]JţV` T4~Qjx4lvIx>Q-t +IO,,GhJFegb}v!JQ;{_ζ: g&u[@:i+uj6Y&M1e;mN-Ό+VDu/\ \MX)4m@U#~?eO0&} ("]wS{$|Q*4M:xϣ_?-B0z+"}(aܫ2 +Ct~0TIGzQF8v&Uq IDT +:KLᾴ*tZ5:S? PL,3V ^%GG^!%sΙjwb]2"MB ˾?boX#}CgCXbQe(u# +I_cL Nŷ(A+M+(׳׏< įxQ` HG8`:9X?yPX=D[*R1i+ha~>FIUD {|Pd}3X2w !z#kg䬛6 ^δ9x99n;#6#79/V:wH/@y5rs4&fdY72M,4W\sv?'lH URu%OG +@8n P@>_S8G4u'*r 9AG ؔhYzP%#sB,vLh7mO!"˺)|TTS*,%$=ki20!h#h?.&~&UR1 yo Mʝ`DR? +L,5׍ͮã $n˿sWP#~]٣&|TG@c Si>h3&~&g;4 R)"kQm~"'4O"}O(s(>sFԡ0th!|89u ̀[%,14 7m)H[ȤXH hpNJ@kCdDI@}o?*-S0$4 eG5@$v&$5>-p >Hz($= j /^HJGfz{ RVXS&Ԫ~ CF >Dk(VGQrM@<ԈJ5\ՂOJb;I4 LH'5Ymt3+orKb,%V9 +dخCGi?AƯu#OPRJIW38i'$bۨK39CLޚmbqNJVIG}hT*0;kwxgCfMn&Ègz!$]c`aH߿ Edf͓0 mW;}@2~ᛯ);a<[h{U'h?."MD=ׅ4{Pf`oR T<("=8: J@ywM`ܟᓫe]ΆC]Ҿ1 \6DQ/ sz)`=%fcAFmGlDĿpC}X$YK`_ÒΰSRLHQZ,~MAvtI԰+pXwH0TX^_FNאubaTg2>|wdnpZ,8G(WGZ(ŢWPc GPIK: +%)ɪ<+ac`rڳxx X`B|u!]}ED~IvhbYk +JNg.2XU/fD`M֒qpr.kDbF> ~"jس|dV];v7_M3֑:6ˮ4*7`z0A_(݁q&0'qVH`UV(5Ц`T*f~N/3Z;;3]$Y C'tx0MB; Gߠ:I[g7 黷F]‘к'cֲ*Cp@~5Ls 1HQǠ[%!ɔ}E.a WO)Uf + QZऩVXPm NtIj6yCp1wm1ujK,ӷVyAg ]ui:8pMaF7L;u1icƸ^9f&2ڀbW"%QD[ +¡١^}O?PpUO.fb XP^YX vҢ6)Qwp3Hy=$U L“TG&ԊXC`rZ0V |Dzo䗼m\2<#'Pos]+3E25B=36=}Q,ovs͠XyX/i?:R[TC5LI؝F$v KA'La~9OȜ\Z+[m, zkZ:S>D MTi&5#%WypnR,0Tpή_fFf aup RDz. ;P&㷖jaܴ6w3qj[1封kxpw1 T<+3B=j`?k疅qD,pVʭɭuKA-R*"so;Dj4 Wnܣo}Ó[f"{+I׆͈Aq]?JR,,r9y3 l㥛uR:dJ^"P;B7;)5콘bOV,,i\ة7`z1ةq20 | N^;m4\b6 .p+7$ũ\q4 >~ sPUKCtQ")kVز*{ii"0IqwgLLґEuRG=dG)d񠕊ɅkV9AQ1{MY~UqǢä+01! 8 '5s2uW *=ucVj J_Soe.paS7F1dc5mkXvtKSi19QIAoNNeNDYr*#EbpE~T~DTzq9m;y8ndu;[!7 Pb5t`Lr%0Vl#Lϓws(a5\-ݙOA,.^2 LTүY[Y8ālp)(9g 58 X\eso{@F$+X9X֠B*&$&i3b$eD60/"{10OءmI*=TY{"*$ TViHR>3\6m+!a)yU/.{S5pfYm켌ڜmCxh=s5qZ. VMS+iyGbrp!mIؘCRWdІ>`A␼7 :'~32&N ڟŌ#,*d7(6ٕMKLBe\EHnplr4ɿF"O"&גUPC9DŴ6=FA K}.6LFm;9X ( :|2 @@ -1095,7 +1084,7 @@ p 2FaaE 01=4r%;$*U1+`PTo0I pɈCt31 NGD$G,iK{j׬U6@*LJO3@*g!S+"D3sb .Y"~=m@L&GBd2,c3cuSu3Gfxia8X5Uc&eh15 dɈS+WL7;A D/: f?,?>p!ĉ\z 2܆p+ ư`#itj"Hݜp33f"/`z{"" D#8c2P6FCҘ5˨}($\MˇCeL 1?9APuq*pF!#^9bE;zw !hFC,O4aWJC`u)VGF-/$$$çe'pF;!8n*i$yՉ&k9$YTA3aCM=SL'9pNa^ 2Yg wD\kAV h֘1bXL/lM &6BX9Lv:RzZ k:۠щ8#G'N/.<mx)Aq(%A Tv%? S\̀4#9w,=M sc,d},CXdB R:{(hbӻ N19>7qr&`DAÓ科?NM2 h69JWъ6"`+#>'a 4܆]%kx ᜻p~Ãp8WH58/Ѝ0eI(%M7[m&(y&XPJ .}N -_Yc&"ͰVL bE2bh[d |-k3!AE_0"Ҷ!9w];.5u=B8z&R0pi4e\6sF DDyG%TDuDLߛGwx_ "CF0ot0pcOpV*MX6:e-rTʙ)5u~ѨqRȤtLb/&1B5zgQozU*44cg2MD~HSUMRDy6ENE&ͥcTJY+6 @ mRjc)&oB 3*."8uŐ-Wk,U7bI,} ʮ}"^GLi=F0 i⏱YPM&F o) #OCɾN94 2  IUwb 7v~GgZy(!]=Va&$ӫ @@ -1131,299 +1120,323 @@ E SLiH:.%^ a1MJ|W@X>? ]6fo_9'WC`F`rE`"r ߨCaLbH@a@BbAk1308 Ăp<@Tɐ!HPP2ԣƇҥj:M ;Qp% .5Dº&qMB*E?Մ$v pw&2:s4;ҵ"Ic}Fs$d\\!&) tL+mM( V蜽zp9XQpAlt9]`іfW1_*FVtܔV3E+~{+^z2ɞxtUoj8`)+V ,\ߔ/j0s:)ILUl=5۱ g=JtG$vI H)Ÿ!$_#Q7r}6//Kza Sy/'*'F}_wr4_O(GG]]Ȫ[֧ <> -FXCi/_Uto򍽖K˂:ⒹW% h.M1ƚsѷzܞŨTR -wiZ\來gɭ"!|wևϊ>--?kxVȩ9?e0oGZbl"av/=#o\Sox% obr<w՗Yє-i%űU+@vgr!#tgIێ厎Hxœ{3Y04=Dj3guK; -cՈzOO]8A?ppsTzlB -_ ;z{} 8`~L oMAώ-yONJ۶sXzp?볚m]\5Has0^y8G 0?1Ka4-h[,M,4VhG>nȋXΎϊ2kύó8-QaU(" 3\ :(W^@'x/)l"eYA5 7\_e ~eA. fg,G諟EFi;K2b.$,=n7=nlF?k߼Ƈyt$ fu*WZ s'>hQ?Hs}~)^zr*㐈?i~7 y]WO'ofoܞ͊}wJ6PG:#r/v(y']7eYk?ug+2Kqt]Ǐ?B&ҁp2^HOq慷>asLjO:AkGP! /tb=.:zgqVj7ߗM(ae*92+]5S=\9L!y-~A2;dg~[ ̮hiß:gT3IN#1D^$e*iNvnQV["\q $k8KXn!q!>Qmũs8)HpZj?iBI@$ -=8(wRY*LXֈ"qu6o8|PQlAaIM.0 -Yw)U(Si}לz+Ow Ӊ9y<_]ge(fQR8L6a! -oŦMW$m!х)Jz=4 j;2z6:kMW[NS -M֛t)ϯ!.%9^y*3b^sAc÷ -g2O~m> ߗxeǐ:S7<Ż趜GHkViْWm<6 k|m8Vl(O{ػ-[w=c`G+ؕ/8Ю9ȓ[Xg]57R$Zl<7>gܔkp!{KuTNhd#7Ws/YX)jjap w ω]GٶioxkO--,M?zTmWW6*ZUBnYT{g%|i^,q!I@n|+YB#"8ijve?hfТw Z V-rc-=#?뢍2H~fv—\_/0oUN(KwJd.ʊ IBatʂE΄ے[BA)qɃe%bMd'n-8ad ewYyL:_3G9f/%@)۽*3'[;ՂG;HMx+UapeNnEt=s/ <3뫤7+y_t( ˧x3o G:<U0+RAzTp?ME8}Vt\c۸p?M,m^ 谗K͏Ůk&nE9EǓP̴i~D4L߹ I Sy3yO3T:X~@wAEd|UVLZ5^i s5t9A{QB,÷jƄDӢ%82\;8 7mNDb\Fk7*Yi2ʁ=r~LP2}L1EGM%7p @f{YBM,>)P&}L92R< UCbghA#VW̼JI=aNt7[l9q354I!dm-B.E!" eC?k\P: N7VH8*Qs4C7iLkfPӖA߽y{.Kʾ:>TG"m ?_$Xd*7paMj45= Vt'9߱"= -ĹNi ¨<%e11I_,|rf%!ЅlL j gċ1n>!AИ֥*Sf-f S90*a~bE@2E #J^]ּ7ߧE)sZo)`29s$қ5d&}هyg-/2 ^v?L  Xo@zE,1\$339cX /*s*J7-ۙGS˛CE6F^UB]o~qRz`6KHb^(Qt+&QPϓ Uy$Z|Xe5KbQ?:0MMj1&MCӠaUD8&kZl3ZWSJ4'Ւ:!v^چ9ޅyl4nJ?QD~-hrЖ-P^pTLIC`[lvBx'LwpeZu* b*0EW(~+j?ACFn)o1 ֟OQN >>IoJn>&h:6oaDž |.q5ip9]aPJ'BdM)G#S|Z`±X~RZ4o8QL۠#ۚJh@Aq0yЊٻ=Y)n9I^>s`#oT0;Ca.My4=Tax /I#tV?qdI -HwZN*]{o*.\VqIE.ӵ_ۉ),ݒ`4Ge0p.˲[^IT"xa84d}RU6C ',<`KE5\x".iGCZctj+2'/QR9, -.vu784ԍmw ^Yפ" 9dITSJm{+ Ɣ2†k1Ql_{IJD_L^8Fg -s/9Z?>^ d -9336d1063-e4b3-4c2c-bf11-1cab41a000d9172551d9-9ef3-4ed2-bbc1-3f2ea79f1f84 670.252884f846b4-97b6-42d5-897a-4f6e51d87d643fe3bec4-4b95-4332-9b12-a4179f8af2da5546125237-- ! !#H&>_~)zqx*NsY? ]6fo_9'WC`F`rE`"r بSaLbH@a@BbAk1#08 Ģl<@Tɐ!HPP2BƇR{ CFH|pf{⴮#q]37$`?4or#Iv8rl4hFsCɱ(d~hsnQ ;Zq: @2r%\T:g/s<b4e7*ӅpzKp? +ScOO%* U&ܦsSS;̳}X@ﲤɷHlmNViOdI_y3p˳ls}Sҧd1\W3ILkԻn׺. ,*)쒒R?=C;Gol8",#?^g^^UOx+h?TzeZt{@f|pͧy|,s_D;{M'FuEsD:{\Eзjܞ/㇋P+ԫ%#wiZ\IYϒA}w֏>)-?xRȩ >?e0GZblbaV/='o\Sld% oBr=UYQ-)%٪x]TO>@vcr!# G:΅k ێ厎J}†U +{3<Y0hÓg=DsVXguK3 +c(Czoo5z09GsԟlB4_ vW<+p~LΊ2,5Ys$B~ּgǚV쨗y;GA)?9ۂt`kaF=~&6/~g"@c^0umf M巯U^G-s-?Y|nCnw j_pI.T~VC{ɞ ŪӬqSʫl(Wִ~t7ckp%ҼY>g^E/s.r:#Mv?+^5gkk|<Ζ$6_]u0gm釓O?.3@4x.xrfO-M)K^׳KYۓY1N*H H⋶"K(dZ~tOvݙDRGItt=,NƎ)F8+^k䄮`TzrD@E!Ͽ [{:1S|=i.$91xWpܢA I.}IkqCtN ipI}> 2S&Hԑ='tqpQ_ $tKcEz7PeaFz-ƧZ3<誩]5 RBBnBL!\d S!,jG!<1JRz]aS 3DzF}=u]DAa!m}r<Ć͡3OrƌjJ%wL[u)~ɚNQڞ9,gKZt8.U,CQvW]al qVi$i. Xx̬FaT9#`7Ѷa/Hlp~4E,&hxKI~2j0+u)QZ̋1cFtt7|+]q]f\N}+?iX9>~=`[n}fVjɓh+fӰjԮNÞG 2ߺ;K.H?GXǨ|S?Mơ euF +ǰԮQz&c1>;\{ӀuF#1}9eX_ߡS dkKxNw/޹7u5coojc@/E^GccƜ ?sh&`kx &"1U- t((Cx< 鉃NꩽNވ}#t 25_Um9czo5įJ 3>o*XQS,v5{|h[4>Ɩ݂6%66W! g@&fX^nq\P|GG=}H-}g:עZ>K'73Qۮ+mT>>9MnD:|rKӾXDpAɓ@֤Yy]P/B@ק +^$zQmo՞(wD0`_ǟm/ t9GR*Wz7t]w"(o؍;\\L\=2P]0.bt:^sY썳^0ծAV`e6IZ.Ly?rmOQ""uc] rP+Fr gP46Ed\Xsx絽h.ZmnjFBߐFPfZ_斐QVD7)T:,Xp%`8'H>s݄pp]Vaէ g9a_G|&ÚZcu)6ehf$B>Y?ډ5Ct0jyؐDb*R[XzǜSqRC"ֆc큜O=7{I a_gJJ}#Xz {'q^>N,r6OzJMKQm4X~ūuA4C@$\vng6/"ѰI]R ?jؿ6LkIl|Mq\XbR:m`@>IID|gkeMl Οf.iPu#嘲h 5]AgW=`fXu4gvjo0;W ~Z2fY Kr ,s8av%# >lv! mLjUZd}(1QЭT2&1O5-cƽc˂D|m8PL ̌^~#Sd_L2;PE/t]1şUVBړ5ҝ(xg3E2Z޸AD&YtT`. >.s($8]=_!a¨j-nҘfЖ!OBmT&D~A~v$xa`=XY~*Xˉ xRJqib=aJwޒp{Pʨ69SiT8U9GHjsܖM)஗Vw!agey1?ͣodt6$@4N68Q4f +,V~X,BYE*!9S8✈ɚͮSd:?-jI Ow| my*!̤Ws|\>hðJ$/Y7Ln{fv<%(9(hZ'ûA&cv:OIɇ,dxߎqX!($cȍ}PѫH[kgKgKNcm#FK]aΈr@F6Fdvt\0|MO06Ex0/(5K*)%&ONKv_H^V=O +K :] Kӣ`ixd畝"߷氚V`ҫEZYKN pὄb>ȴue>Fnr("?6-h416-*vSV`IAJvjBx'dwj/6UB1}>E@_( ~%lVk5a{A1X?6`G w*>cG +<N}|?[C=kBwQ]G2BdAV? >[J-?qZE7Q;lϿϠJBspXy7(mD[*BǩK OKc#oT|;C1?b,Mj)NqzRa ޟ}S:Yr⸎"({`i&R4Z d.Sm~CS?bCGeנ;oeT.; o;߀G 7TE톄 ݃AN4󊃯H&#}˥|):qx*NsYK^~~b:6GX2BsD8Pز,, -bX>L gDH_ChNq!UmIA3qK:QNߩ -VO"0 /î+17rj%!$ޓ眖ǺCi9zp(pIr$t_%%Vh'9sYg@9D|S{æmDbDQ\ K cZXZiJxCVk D!g8X [R=A(I_;qT*] 38>z z)KnN(wł@Q"z%ʼnu~KG)5Ȥɂ}Sȅ3qH<_K/Mh[SIt!ٴLʝY:6D",v5ֲ XhMnP F >3e: -W23U@'_tTtDnӟB Ոv8{7loibB$HAE1񞕲p͞%ugUkusOʐ;1lѢ]! [11/uYV+&A}SA eoqL|'`k'xI=3K SWOQO#+R/Hwy\Bq5\'^=jBtNp2z #4zƜ$W]C aFTͷS@6Z3jvVuPLz;9FF(!OJa[뤁(-̱y; qA<7CPhYzJ[uc`f# 2cF -eqp -YQ5q FbwCCV J w^2o|c]ٗ -cS~ *ww{~ȢHHqN"t)Wtd ^:+b$i^>MBaIx"kLP9T.+x==q-"G2P5rЊy1C?+v!_*b?*q_n<7\ .7 2j2.b˵NXnLdgcOW ֛ -^'Ծxz<YGd%ߓ3eȢL 2ixɑAUy|>4YhAԒ$K_f)Xѩ dR߃~ԋf ]TjzXp.GfWh?Jw`hWmgN/V#?sϝvFz4J_)2ݦ-:~n=^*@`yX0#llHA(#{tje /]8q0BJuQhvkqFU1GӫH(TkMԖAaIIx7$.@h8)@svEATʰj s=Nj"W kPLϸH֣eyYS{B*N%kdU~ ^{ItɺqjoJDdM{x!ȣD?W=ތV-¢Oq!|ũ(眳YI$ tTj~FkhQ} D_-GQw e4Xk|BʱrlWD,!خ$>7\EiLdX&X#؆pZ3pdY1/uuGq1*:JEx:S e~]ADC-7}6&eT?ָY9cVN<{!(9b oMb{dmB.E&>)VnXCBɎ+秃z^Qz*M~5ւ! -h}ц  -PQ-Xgo0 q9:g$fj*IN[A&3 U, "kQ9ElBuRv2lҪkaU6|IњDt)2V0=æU1?SVWVL|K`f,#ضOc_?l]^JWe^3yv=h$׳,xL z{xUg$R-v~'%_Np00 gSV%<-"BV[*q&ȏ/rlic%АXNTUN ѪxAڤ-FՎi ^m0!.̫L"mg"죁n/mȵSÆ0X惱6pfR3l旰 O\FAW"{mTd.V%y㘲z[!pTKh2dgSGlZɴLddZ*< Ͱ =sŇKHvJed#|"D.< -5/ZZ42cDP~h(2DrٝRu& M!VDx ^H1JbA3bJ8K"Uzwa4'|9>,UjEECi6V0C8-+ĮW}Z-2ŵe]$ݪfq] qz e0Qoi㧆mt6X!h%c̎Հbk - Y|CXkZ,e,3ݛڙЯ7ol7?Jq] ~9⼖^VߚV۞]ޞ͟gT[lZr`k4ۻWr}@`ySlWV5m -oYkg0ZZ_zwaDkL@JS]?/ale׺R-wҬ׾͝?3mVڼ3)%噾k?>t}wy? ˟rzN/ˮuyVbyoŗ>uf>WzZczvvEu|)yoeϚn{Z-eRgZZ%b;;ݶ72l/Җ8[+z>Om_jKmmYkMw-ՙr׻g?S8Sm%[S+[S>9}s9/\PX򧘫9ܺӿ)~I)[o/O){>vR'ϙOimjygګ$S^Kj)ska d)?_jaw}@Jr:%sjRo ~?Si%sJ-r?ݒ)|@J.)OywS&\7t"}R_L4oq֗ZֹKV+r2m}{SkoK^KϧJO+nR)R[T*}RRjKmr'kjᩪUjmճXYV;/sV͎[vޜzeCr^JRJRDߟwsikiT_R:sﶵ-圗_> JYK3cZkZ-֯ڒK>+3lf/ŏgikٚn_LZ?KϒŜgϙsVc[ioTB v8HR<QjKm-6UԖ6L}1>'zHmW*eyuZSsO||_" 0`&W]ձVҙ57^eU%R^iĘ.ԖJml3ںW+Dn!#랫~=U޻7޻-S~M[]ƹ)u՘wycoom;޻׼rs\oyΚӼV-Xmb|S>|@`.j?Viu<͵o5ל];jZ[nRӹYyk_~>֭Kȇ|j=ק|r}@T5}1:"`ԯ:V2dYy@>|OM+1S=KL KK~5?{WȂa׋;Ε 7竱{sz뫷7? VkkxʾZnkն{{J{նZ}9{z8ӟҵ[^_s=%w}S9[~sROLoO:O {=Sj=7Ul{qޕV{͹^L+Um:OԍHr,V)Y/nJ{Ni-^y|@`ZV}豺s%Y뷷k=e+YNdϬ N~#[ ?V=S~ڧ<HIsSn|ʿS{]ڝ5rW^z@>2٫^r;e~.;vOn Y? K b8<t -,/m oWje u*XjKm-ԖR[jKm-ԖR[jKm-R[jkBVY?jӚziV挿S-uKmwR|K;w΋+?Ocqt)YmY_Y;n1zK?o'vܼv피[3:ߎKޜ){kNSN? l)[{q? |4[;iǖwZ3ĚWzmǵj)Ƙf:%S&Oo7/ϻWm2F/DTT -?'+r~ J|b ,*(NdeLVWZ Nc+' .}3Yw8<)>%!bѵX]yVTC>nD)iFPIISn>P68_+0bU 9Qv9dAvR^_*/%'_d6b\Ifcy*nX!9=.4RŽ ?˯~kewrM?[iwl{s~NnbNgV+rww][vu*Y'kVwŭVwU5ܴugvus -rת5UNx.gcu V+N1Oxf]{ -7fXX׮-s]®ٝ5s9v_qՅlYwVlSnf_̶sN\UݩšJ㙱fM1fqf۲]Ku*O9<_:w\_: ovvuw|wO[@oDtt%mrj ;cbxf9b*%VX΍;-q8 GPW@0W'jP!'o߬~/K+Y[7{3ێ?qշ-7f$_^qֶk9Lތ͹r]yZkvsiy=~/=oicz7~[έ}{1-VK7y3u7Wu#f$yVo׏19c/y۱ޯsm5~m{\wx3>_no[[zۻs7Ymߎy1v^_ۛ5ƛx?w-|}3{7yڍGͩoX[w͝W9uϳlq޸^;g]YIzFJE2= Ȁ EEe8vgbBNl 7Zb, qڭm묹뽶wyk|eS&tx bE.[Gb)L8V"אa>Uq!Zr' ;,e`vLVs(mu\#g|~^7޸s];ǽ㛻 םjȊu4H!vc<(vXH)5՝8T #׆ ;>g;zwŕ_Kk_g1ֺ^mݫ|iZ]oowָיּ*w3;s}7~_˱Zil3|SqZ_{η^]3޶^~oun{k_&|kUnlkw }-EŰGYC1=de\uVHvx%Y>OV^X ٪# y@V<,VC ԉ2suS^-dDFoƊ1LHIPd†v/0Q+O<7>'zȀȘǹ>, NcH j`L!]D[OUf'U@ȩRzR2*UbY+^yu]X^VTYefˌRy@,TZ20Cɰs\Wf1AYa}*֙ptZ -VYp:umAfԐ9,4 8SI`2p ^9 &2OP. -  h Fdf6օP̍FEre*8>YR ( ,@@6F(4#HF4 -(ಎ!iWȡ"&nRl qqNǞ! p;*/`/ˉ -= "o/.{B;WT::=hT#ϵr2Б\eKC"o(GDɢ(@Q2#<= A"Ft٦ ?WÂ@K:Fu,; KQ_X ecml !Uo7 #˂|= -i\|TUQ%1lP_[ :JUe:2"d$@Tdid >,at|"@(pTA%* -t{@u@?D ֊tk.H\h{#&DCgvfO gL -6k O$,Y0@$U}800Ă 0`ZUQE0)[ ƆłH{].Ou@ N.E0/ `:@%ò= ϢO„&Ya`Jb|2UX" -竔d ʊLP -YLBsl*uehEp(18x`(tePdOb0QX -bD`D)!N(9P Plb *7Q*&$X(Dd{@*`b&̈́ DЉE`M`l3i86qחMnf(,l.hCgL -6Lg[c2l%ɶ= (/BKBL Jlā@,E<#8.вAp20@ˠ!"љlP$L$"EB! v0I6/DTQt ihHD%;Nq_QS",HBTD!(cd{@H$`$H$VTJE"_"BUC9|^`5D.JA` Qur}"Ap"1 ABa Gllo[MjD &\DD<2IdƑU6 AiuFti% &Xv9dhbB&U -1 &*H(44 ƀAKm\I̦&5 نtD@8 i)G]4 mca5$p8ږlW+-ChXԵp0[ː h-`5 1(ZLmf*q.1y"(\4hAEU Eܰhko -c4ЀD`L"D4m M =r"haTMtE`h%i6&h' ii+V6" ,,x@b@:yGE`fQˆ<6CuѴ0 Uع-1j˟~g{@($ dЧiI(: -5 $mi)d^ Ub }b&!Ñ^V3Df :h6'buIT mNkx<e6/ѱA+2`dB9UPxFO..7@9xDѴTi4-Cia FӴDn(P ,6`Á2l|^l2`#4Bd. d]qg - YhT!J^%c܈ypuƱ\BNvbzHBn` \ϾU4r*0\ulk7:?}> - *Bp1P:@- G/-*lļcR"ԉd̓`LvT+u1Ȱb(SO)$u9<>opULodx!H.:Pت'[BY(m e*SƘGa+LcQQmt1* ;WYO$=XY=KRױ@Kַ6!`jE(("qpqe1C >chRQFxayT(@#a -fLԜR|^fbŢ=R*#b@8'PhɧVzq05mSEU΃dL<Ks59Z Yd"e*FTM"iUXI1LDl(VW4aꆩQEӪņbiE3PѴiFU.D8"\[#΅DG)=fb@%M,!]AiKUĮn0+O?%# &.ܹg{xxX,sc@§L#ih ԏz( Jf{@d -4̲0P)1sA~TI@n_} -b!qpJʜNI!۱q`N2Ufh4>V\si< 10ɸlB!k,V|&L:B'4\&ڤRVۄ-8p0[G9xl Af9vƦр.$j_P&*A|zAiZEZ *kÔVۑhJiOD\1R8>&bN@6 ꊀB3TfL Nq]}#Zu°T\ -h -`W -o#3I= T@V@z -XpDc  7VHQK^RrUҡjhbh`^BPhJtlRa~"F"Vҫ!#, $jQ*"  [*)D4\%b`"PuZԋ.ub9DA -^[ -RٞIBsjA.B I= 1ؕҩQ> &" QmEjU +/XMLNode; (xmlnode-attribute/Arrachildre2nodetyp(0%valuxnam; (xyyAI_Alpha_idid10wwhof,turbulenceresulnoStitchsTiles0.05baseFrequenc2numOctav1feTSourceGraphicin2operatorComposit1/Def ;4fractalNois1-2yyAI_BevelShadow442(blustdDeviGaussianBoffsetddddxOspecOulighting-color:whstyl5surfacespecularConstan0Expone-2000zz-5xx1yy1PointL1S2kkkk411133litPaiarithmet11MergeNod-5AI_CoolBreez141.radiudilaMorphologbbb2-1b5sbAyChannelSelecRxDisplacementMap1matri3ColorMb542(0begffilltotoalwayrestarfrom5dreadditlineacalcMnonaccumuNanimc-8ccc118cccc1cccccc21nnAI_D_2(166Eroder66_4_71PixelPlay50 5R1 1;20 15;200 200; 15 20;1 1 remoindefinrepeatDsplinnc12;20 20;diffuyellow2;green;blue;indigo;violet;red;oran518azimu6elevDiDular15re2l010224411k122redxx12121-1231288AI_Stacc50.yyAI_0t52(-yyAI_Woodgra155dd44floodblack; opacity:1FloosC2312(0Gray1O-xxCompBlurT1CompXferFir2(tab2VFunc.7 0G1s#<)IH`4Iѝ<p .b @ H,$  c C̢IQZq7E#HL`1Ϲu0]#3yV_noVgVS?-lb8WMkH +Áh9 ['ʏhZr ms"˖/y Ed#--ѪH^ cH0ilh걚wPgֺ ,@Ss\fqէsńy~UDUJ)la. )ZϪbEŁ1SɬbL܅IfQVbYff'%*U g +tNV^7VF\}dYƙNt*%A )F>^~zRMHsZ"=D.p?raӵG4=D5.iܓ,Y* YeM'Vs%:i,wk\ +lle= ))shg`Du mIIH=39N64?4rNCQB .1f;:6g8݋amҡUrjmDv-w۪gH%a z0  gQ}XL[8iڊ\OXmGM&X%|Df@s.rTT T ]OzaEaLZBjiiX)$4"tFYSKe_0{2rw@AD 0 +kFB(,TU5G qDqo,~`Dzv$L# L |9+A6H@f/0]8UB̌"Y 7CQ?vesԻORjEғq3n,Ak,a9 R/ؽV\f$UԀgGѪVuR@8-@nXH(ﻘQPMfl(3Jf@j,W25$#tv+ ""Xz4>^N_{?d溞-SAW/)t񩼴 A.@x}1,c pL@ةb6[8iш5ejtuo[8}ܑwdjyjxEȇ1"vYi;{_+$9&S^5>w35>;m9m yJ2|.꧐σ֔fr`gրՑ}wAdԒGKՂ'3'88ݎ(Jݵ)U))w|h>1P83p]jÑq*҅h8i%GPu($'I劵kOsD/VTC E " zo 9,* $I%KFr]Ѷ%[2$߷{vx +e + BJD0[ )/+BH:)/a +dup/AXqxy_EHd;2Z*nsXf7{S_s-7[on!Ruag$8[ի[]۳6sb;jS^KQ8C΃"l͛f{wj_nq+omj۪-OMO>7+vywjFUb3zRk'~ale׺R-wmkNϟZ{v+mޙVKV_wL_nr >Kwҍe~OOKS|/g;S-֙Z_ʗ6יwXw\Sk2۩!A"Zj=k%bji}KkK[ik8gmTtۚsiސH %~ۖ8[+z>?iI;i'-YkMw-ՙr׻g?S8Sm%[S+[S>9}s9/XL<[oe~25R=9SsZvD\kjޕ޹/V/SO;%϶s1)ym/~iݚvJ/sOݗ +śԏu.-9Si}}+nL9ZO3~ji9ϴWK)&S^L5ޔ9\a0g/.oB"N-ŜڼjԿ-[۟gJ=sN\[r>e&R>kw>D\OɵC'u/Tit/q˧soV+r2m}w?y[ Ll'ms}knm;iI۶m4_I;ixr'kZቪQZmJ_ou:gxek9Wv+5$g۶m@"ڶ߿?wsiki}HdΜmݶ ZN/$U!Oκ_z_j~nzy&:4OHqq?>1לOH5ݮe\jnsWk7=g~{ϕ[mUOt 'U'@؉(Oc#IIxD'v0FyNIp/QO=SqT;T^Ea>5WD]VST)NU?GML鬚\29Y1餝4 [Te^11NZ\8:i't ئ3/R8Ֆ1hDwsϟZj{{WuϚu8<Sݻ3>u)B"A"SJD>zggT͕?Tt/yakbU^f^/8W~ޜƺj꭯ jV[)j-${Vj)Wj|)/][-o5S)qN9%S깹7)tqL)ʬzN# kS=ssZͶW]iw]ݜ[^Ŵ\uϪDȁX_m6_ڗjiZ+Z-ۄD\ZU}詺WUK|뷷k=e)YNdϬ +N +~O#l +skSZ;WZ!}^.lZ֟s֟rۜ5S;iU˿o ,eֻv;ʫ];w^휐On!YC"1L ^8ο3yq;S |,Ηn;%tC"2C"z'-^[/$I|OxzizkNɻL[sz-vIeK+Ol[i8_Sڟk^Jkڧc[LN_⟐_?r<^腠HT $(WTBw`._\z$qw[QMWwlw_E^ G `ǡoA)偺Et.R&Ha7H)4r _gȂդs#5Jqm.pAݽ۟S{mLK@`%ڱ39P\H X$((3T/?!'I|Q,'Ms:؋itEowu[n{uonV8[ߍGvuZ+wm7[ֵoŵׯհ$vc؍GzmϙVk^?o;ZI\9]s=q{ڷ޹j[\s曳ߝͯ-oa>}]=Ƚ7#wZگ<ۿ-כ#?o ,v3_|WkZ[[-׼w]t㑵$_^\幕V5wnލ7#|\y]ֿcoilvs[bםgno늯^}f$~޼~{nZyջގcwfk~ޗ_ZqZߛv-q͏=lUo7#򊳶U_qvޯfZexf|mΕ3\s׿[L[{yyMֻ97rnۋioyZZygkq}wys7Y7#onWw{+vm-3s]V~;sƯm]oF֧u͜sk[o{w5W3޵#1?k{x3\ŷ^oƺ#[߿Z_5޶ֿo1ƹZݻ1|֚kmxl;G+Unsn5ۯ+7WڻƏκ{j+G>H|ך׷o3?֊s~gok[yͺ+ΛHZ)f9q3V٩ݺomnw:*xƏtji-ߵʫokH><~WoZv3|kwmc|;ޜV[Z3xd7\n]iؾƖo{߹~n|uU?U?o>_ofo|9W~?.YyV[؝-kqr笫BaI Hd@EÂ*n+^S'u4q1dHs}Y6ou^;μwqʍ)}Y:<1&d#U/F@HlR'R`Br*CB1 9h$ Aڎijnuy 6O4z1 !WHH@D$f tlєDJqCy7 H|yz4ޘh ٹF'|-h [YYb +hp6\LhH& `)&Tƀj,gbW,lT5lEПC "B4Nx<ޘ\;f*_4Y|FY)z1LE +,X(`6g` ;6 5gG\ e]ne}mTvD1b`ȱڎىRϣnP*GzŴyͥ_D6 Idx|P1Q'Q|P[[ :KEm>4"l(H\hHH}4y\{)|4AbL,P 0PM0<Z/:bA["cތ<1շ0)>:3 p9[/ɤh\ˑ% rDbh $LN 1C9GF%\&`|̪r2(IBAr\2'p`hx-L0h@ N8|44fAHd}\4H ]2BQZtA 7.mۗR棹:O"Y]=e),).#B1",PRQ +YF-}E-نShBkHЫ ++QY<'TQH .x*1+nV&HP\fB)@/ +F:(ث5zl(W0G t< +Ɨ()0RT +sJ`ZiC} bXhtfAc=FiU=`e:^\kXF*(lbFG#L &rX + 'Pd(Fٹ }2G\YX(FF3PX8H::q@&$`=&.SG7 7ƤrXL#b2JMb)a\x@ LVsIR[ܟ$hӜP˄u)$h( /$Ka!I,`%I.䔙NɐpB11JH^3$ #i$xaC$1A>AbU8ARi, _IP%8%HT,C0x`I#e;0flDÂ%TJ+9m*U2*YmLDXE+2Gl"f 2zHR.q[։ͅls e0-!C(2NOx̿Ad4HdL +L K]d@g +iͺ-~PrluhD#1#yd`%,٨T2 J2V k L2 $dYi3˲""dITZD,2 K6@eN>*.DsdY +Y CY)@Y摠dfͿL8 ͘+NAU>~g!OLp0u$Y6`Foe +;w%jFihH"0d<>":B'6PQ!T 3Mˣ#Z]؁('õ5HdTux€Cd +-̀ -٩BH-h@bѢ4Haa@Ep SRB 0O4!@с6d\~`zlR%NYHVe , l2Y9H&YvCf%qɲ A",d/,fF` ~`,%,+t2$r7nl%TV TH@`1H?":\vi'2Ij*Ă =`\YG X֓{ea~fY&N +ʡ&B>,˲,nCKAH,a,HD"6,V%1dY&dY"H]D 8)P 8BJe eYƢ:ψK,{в,:4v'"˲,ȲI!Ͳ,2 %$L8.Y6`6X1 > A"SJfYC& +gj'8h@ñNR,T`eN"}L<98݄THz 뭉ԑIRG^$ ǗGQGq +DN.(8=LQ!rבHS)$52}Fd)Sd),]^q/+ƊF.^[!v_CE:R>/.e;@M:QD5p^D'J؇0¼0%v |^1)z+PvbL~E"'Y(Sqrp˓'%8JU׽d , '_(_1N%$^9}J8DXHc'JXBNvbNJQ@r D-`ܧ卞*}v_zl_ C\8zCaV0~5H%^ǂk@T'u2m"ů4ycL!`:S]K# ~׿Tya, B&p9V +|%@S,cic1 ;s(Ґ0,0$.6 IR=UHt%O.ST9Ե]=Sjgjd&@ ,Yv"3eߤaBKAec% /& +:'fDEbᡟUK? +;OĦb <4ꈱXj!*Ĕ~epA 0H8ɯ>2>2F M}f$bGeQ.!eQYUGeU5HȴĮn2 Kς?%# '$*0G\.s sH GŸJ#Widp$ԏz*Z, e F`w6&qp5Hd,drL' .p"&n k9@^A'CbVT2#Ƀ4IK5B\EUIΙ"g\Xc+=%'-܄BrI*<68Ё7*<3r2UGe5ytUuu$& +cG* ji޲ GXX iB".c p2 aQ-Y4 0l*;z}X5HDD8hpI,.l%v5AqFLH=BKd"(m2ӌ hZp2!؀H9`yBA"0@A$)a;1<@dk@h AN@K:` Z(d6pYƤhQyH-<4Hrx88 ꀡA"dt(6" nA"#LX. ]‚DD$NzM +endstream endobj 13 0 obj <>stream + B ! u CmT=V5H)j'.AjpEglpAeZhd -thc`TëMHCCT B`w$ v@82+l.ѱ&FfT (\m!X vr\ +\ +!%T(p8 A"=O!5؆A=ƹ# 3?у׹p7t.GPC"`& ե9l9i9E! +c8l@4&DLtAd;P)!d*A"<>Dq]Y :|h4a /`@jP`uBa4M@x#VE m2'sP)-p4@@tTfҠQdרa$q%\H2zPb?>ԢVE] $5+g8[ޑu0d4U8l@"#]?tש@ +o_<Ƞ;7AuRT7@Wvup.ƹFEQ }+ +@0㾰{yߪS4R"Љxua78 +#JVȹUSF8 +;u YJ@NC^ ;ƗG]) +#`ԕ"IBR1U[Q1T4đT`0XaW}+*RF a0~)>@T^HUa +t|m:\/0EEX +RI%{&4׽ #a)3pWEm)РaGoJ8Gp Q2 d*& 8(HqpS5WWBJT^ +"r \W}!yMT6+a JCD*[ x +. ǚpiJee8QLkoEXV -pPapqe#`Թ$"Vb rAP' m\aJL< ZXJE(Ru.aTR ?)F(fPl,aL@<= O!Æ-\XpU\y. PċFśŰl#ORbȠ$M#B$CńUe_'ڈҥb]i +bqӥj34Pq>a= bI.u3ҥU:L" " d7zQŀt8Ndž*AK + -endstream endobj 20 0 obj <>stream -2\F@\t.||"dj -0z0sG2?׹z`3tQ!`. -K\a @ -{{@PAc6MF dQ#CH/!v2LELtAW,e;@1h= ݹ<Ѱ>5Y<T & M98ufѷDW,Um3 T5NYӹDvtO`" m"GˠsOGf+*$ (P#txxH#6fY(s0 u3Թ3 C&A“`#oH`#PSZ96' k[ `p ơLe,`250l< #?XE.B2U}RqNTK\'uo&Pt/@׸@2 ̍HvCclA>S68ڗTAŽ^-p$a@F -eIpT.P"$#fVb^D6C8B'_xImH2AZ4PJ 1BX.˘\1@񵑚6Hލ{zf Um>_ؘ\pgºr`ql hGRW/V12Iu UVd:L2Tp܅$F >3h`\ -))2ZZCDs8c F 0`lȄbh>jc2XW"ޢd *@CAɥhyV -D40A0'BV(xDk#= Hp&k!79EB8* 4 -Ij ?`."ڃҐR2#Ĥˠ `' 8mkpLdјlEaƌ1e]LeMWa`h5@ Z $K0Xt1 cz Y޲a*]:Ti{@<6)QR=B纓BDFFAh(pWt;$A, HKQx m|'@x&GWЂ-6`,Qyh86DA]!AQ.^]@, yI&ZА:.  aX PH$#)^g{@0P摌<9JƸ-^5RMo' *,#Ν6DڗLa'2?H/7Zc+KەեQ3SIMVQR 4g0R8'u,.zZe O m2+&$'UB AMIˣDیC) -I(>Kz6T~ K =L~2Kf4; ^,A0r=FҒMOAjNrfkkNs9Zq{Sru|5tBz^c14|8s쎇 -ex륶>ʵtN*.oDswļTP<>"`!h#zjc/#H#zWl%`%# ~ Pd 5m>ڊ -`7rSzS J!%F s+O+%[1 3>5į*>-!;]ރ> |gjQ%ԡDpJjk&| 'Y wICpyFxmo=Mp@ Cm@ӟK>tw|:/y fHl^ nڠ,/١D H``> zұKWcYLPv|bĪfSถ0SQ3DgiVOf!2˂6syǚ)"ebrHPriHc== `@ƧVgI(/h9L;ٙpdGLCTgUZQz'&9d=1'ͽJP!M6?x-Wm*C0-ʼ(f$n"NTCt(ZM?eJR&AI}*L- eSwsv@{RDݷ#elQ&ϫmL:J|O4#%}kjH+s\P?}b6 -[0N \5A>4o V@\$t&8@ K3-ʺi iG$:;^1R#򙦁wX1[&'7Ҹ[E^;Wp7܃] ;_E7'pl߂@5UNO&[[="zk)ykv(^.(j,p.^XN:0ATH>8a!e 4oKrzu5cE.pjD?69E5nQyD9ií6]{M3rqCzL' b" we,އO>>y_;B N]qnG&4lW/UhW`2̢O.mfҊ?k~V#d΅".߁c^PaՀEvR*R\un2! 0w-+lWbB -)!rTؐZD6Sp)* ٰDl~9k1ƶ#Bfb?VTJX>'lC9=-oR.B FY A#Rh%{4ryg1eƀ#w8n+*.Ƌc' SS:!h1wpJ3b_Z}^F.e"wz5RQt*Wj"y5@E& ;h@`_U͞tU,0/+ݣ -ښHM& 8UJDs:6KK=Fxyrf7/‚8QCPt th9.EbêD ``X,  KT{yX29x}g* RDD!9ԉU$*~t׫.*jQ1ͬI~b5XBĬ[V\oB7L=NM{Sm,sU%MoXo "<1QEzbKqű8姍ԞlJTq1"C¾L>:`nR[I47-\u#k$Ѐ_6OM2a7BAOpy?$2h|&&ڪU dBH/˂wZ/w2Q1jkX;@>1ɡr ɛ2v% I@؆Q:fnEp -RGOZq~ @70NpjZxF4+ĭ0{'i;i `@p>\ 0cAj΋.G6BU_?//HUkC0iy?t5e}qkE*̫Hcū)x/ƗyBlb%_(Eƴ9[v$ܘ\ 'tjWR -B"]QAvwhv\5!g,w0)0ٹLN;_W'b;y<82"<--dFU]N7L1fy"[S]2>dì&WEvirvǐ\@*I*ej!Ieћ0ckP*S÷[O 7DŽFÂiWמJ=DrJؔy5+|)8piVKȹHۍwd܎u gJZ)a(4:"LQo%1B%) -w-d&ǔ;n”b)4 `N<,SeFc9W*F.擁?-tCVY>#\Fk uVݚa1X+WaɦeךE3hȔBȍY Q|naWҥMآ0vMKìW )/0'U34&/k%A&b $X4_#dZK!T;0ݵ٬sT>n 'vZ;(͐ŋ\6<Ӵ2w`GAG& [`5\y[g-Cv }:>7Ae`w:9g)L}3,33a47!=v@*Jr -*WwYպ:1;$`i- |h"PVGU&VR_zܥHR t$Yc^r% "u0 7JpH/p\ٹyypmV Q)^@Q\# +=p傋 K2st 2κu5NpD4H.\7Vhk-2kUC"d-zx\m9"KY6ݒ)\Q| )Rr.-&J?7êF&ldF/~41OqO(&tg$@vM$۰R{,uic*wQC9J}e_! -3ұjm†HP2D s{(8 Ό h|ykf7ߘX(US'7*i+T mj{" qi70rΙC5λSOOlEE"ȪbƩC˜]оԛ+m!~F]+t$CxE>ܩu}㎇f81qʑs`27fsL iG(Y(-/_>w|%͹Xes})~&4G&EWwwf߉#@WbY_c7@&T5UpVu>*dJENlJ))~{ڬytZ$7QwNѰIQt"Jk08}fe0QAޫ@-'tPB4;V>40=EF"@ 9t F -蒦cL}$~/mvJf!VvBsp~[Hݴf0,6/:U7rD6!^/ -chaj+a+9R1B^`Z*$u҆ -0V=c~^ɹz4ހVrx:$BIdޥC$JT [TҮU*Z hꂡY~FnY4Z}R9_ M4'Ȋd ̿ru\.OĿ"j`Ud@׶Vv -'V};D@AiZofPR˻%֠y<PÁ\V"WUd wu<^ (vUAL-*A2B d(rlAX]WVwۆ܏ -'.@ϯ[[̳e1{Wn3kT,{LkJń7W|> -_\.W -q8Kb{MxD)EBXdj#,i%.JVY8zڳLn}TJrO@b34V+뮝 ƙܻ.Y)&^E)JX2INee7HUG6vb&.(YFB.+ tHC9P -Yy.ǯ[B/R (wpkisbm=' .`|?yeD^z=*F1 -Έѳ@c<%Ӳ@MO8H&EƭJ^ViYkScvՈvMUCOԁt@1p+q4D-y]k<j `^007I^4)KOYE )|AΘȸMBO;:=wb~N+^Z8s{CK\֑*)U̡Bh+n$/]<_uG|B eC/]8J,W@2 @`_ h詔޸S`7 1DE' O u+WX۲6 m7=JpVw3qi;-$Гykcs`poZezwvJ {Hstp(bяF,\ Sf\Y2y\^n&|O>~m>'O ~G05܍_D%_'D\#6๲"-j# #JDkQZNN!/ F%ѝSdBNoWxeRMVj.ȸ"a)`{v@GO -tE294y OxWKLNs]?O1oPP-&t'Qi#b^vTRşDFR>4* -WRp-߭1tJ˓ 5L>N#7u`W֗^|r*_54sXYm!EC1&nwjT^J,rC0V{}žہ_R Xm{(%Q&NB#ѽsX60L3#XNSŤd*Kk[A)7$ -(Z@:KJi2WV']a?w\AEQR"qX MĘd BW$qpYsi'smYSM*֘) %_g^c^T_ziy(籘^nDӰ~IZM -11}@MXUg|Yz`\lXDkM`](\L裨FJ.* &_I*]}7%}ޮی˽I\euMX]Σ>V-H5*BWV#vŇiؖ9FYfѰB -aN[ G$UDuА6CH51"&8]YPAR9r+\Y2CGĺB+7֕~nkCӁ ql8 -UPWj4W`:yqIʀo.!m1&?V k "QNj -QiPIzO芑Ae:"mչ'Qx\J;$-QxP[÷Rz:p~oEMW -!+Hua@X#Pa4w2хS}%a/|vVdרP20uEඐrnr=7yK(L&]Y/UJ0+a=ܛBlC>g$+#ñB20w0*$EF! -|464"L!_a`7M`zx...^0m% 0 !ɽ\^a[o ~/_A:^!ㆊ'Щ-0AۜZ,)X:w_jbnINN㍠b[ 3OI3N֥Ad -?Vf2GJ؅-\`Wh*$.h!SsPWچ - -H[ -'%J]`CC/MwnѬo !D:\-X9y*8ch\BG%zV@NcudeLYwhk;ZS~ -bB -}$r4ʧA9V14TTЈGėAVzCA[Ǖr*dQR#юEQ$,ʟTqB-|H F?%XG(ذo欲lCx4XǾG`==, -abQVOX[(:N#IImx<+@<9oܵ*` ,7l=_Lva "a\MBsJ,,1]v1Є!m;T-iŎ<ǰ=3Т5 y]U .󠏤GF;玼)m` ʝŲkSty؀Ic4m FTpzAl!rr:8I}L!j8ִsx &{JH}v?I2Ew"f >jR4 2t #Q xbmɲ7I=V6p-w/$W x~wYƜe筿s#j 'hpuA@>@eЎ;ԧnDАօ{MWzm4|PC)7mE6J߳3.:@5k,O%@Er V4Djީd=vQ _3PӑDu|!Ȣn!U~fZ) rV?#C?.^ sFtkAc;grf ۀ+[H0-^ٍN%0_@1נum`\65ԈV4g#Wi*/gf {qe,ZN AH&1lџ**.hg-LHyd2$V2" ; Jὑ#qV )^WDzuY6ɥ%x2_WߦjZ>61sߜ;e RQ)ʬjVqKIzLϘ-094S01altPN@97be32DS3p iqP܅u>*ό۞],$wtNVNJϏ# Z|31#yw:QSʴ$-w.$ĂXR.` -sRh.% 9^3R3 ^Z3 -ο*bgGgXn5a׺/'&Ň6I%v۸ KxR01:DJ&`MR\3hCc "y,rV bb"@߇ ćfC~zVa /(5raxuLQFsBK q lgE@ƿ{Tǖ% ٕ3q$[mTMPr;HCkCpi'\-" Bl.d g d6"tsC0IlysתP~:o,)F\gbtٛcI$+aB̢ioG-1DFP/:Ǒ6[=j"7fϟm1mE\>71O":+*M2ᖗAb|3Iq@c-008z{DT -w\sb/x;7x'%-69N?W:$?,sTG7=BgaR NK^TӍ\XG0Ҥ8&[esYofI -/V n:r3GqE";{??Q4dS?,vZng!mt/%!e`o>b'du*nvH9 c' -EK+,q" ku( IjwA\AA<]]Gga/7|&xB‚Q& #7@ й&XtpezG̬m8 1J_v8̦M#wki1E0G+hdh)TL#[(D1cx`FΞw_ kni7zR ;86NUrAjrJJf=qk `x'pmޜy4'<ޅ =#uH(٪@{u3zMB @L*g's ="Y|}ccLg. ^E2!WdEbgp/cެ B9=ox6VAD< ԆLC k)AĔ3DH!4\ -Q;NLm#ØHɪNP0GFdl3NȊ<]49~n11'OHcdw&gxhq*9 =RDhVᨔPBw@Gpi?/RigG@5(a -WWАf!9ӱ"{T~U51a->"\)pUcۛW$%Rv"GF-3h/ր+b1 0ͤxA<^$imUtF45ffѧNHgFJlx-b-u1:z7 Nfg#Yl@ۯ/6)]%B)Ӥ1y$c$b?3)_5kjUD4,5Vh- xD^ ZG$/=Q&8ve? sP[c00:ݐRF|G̠ 04`6}7@p˶TMϴVf t.M{-'AG8|}@)[))N'YώMS5b`Աn -:9Z=Sg@L8d# -8[1󂸧o$(Be?5hEMח{r B$yhIHAԃ$ ]D㑋\dO cAe^TkEr9 -c0??&$*uc DP/ be= -]O%_"J 2[2H' >m5l6k`{EsiLz΁+7y(w t?FZ7,r’Qg!GpWHX߯pKy^tȹ$Dݼr  -.=8H:kХR'^,Öj@{C\ kT*0 -.1sT7#?`n&@\([ /yF0pӳ8m<{e^OyԴI{R%AEP|bФ[=B|ڸT'\q>(}ҁgl\rX f3PT1qj -nRAB+#vya8欼DՅM?(fg׈rHPt -[iEZ@<t5QE>cѱ<= Ó?_dwc~O ́ARӚQ i؛#Qє;EYHE27 P[WpUzV<7L5wJBǴ`*½i)N6Gtx7zڇdeJY-$&J"f$`~ O -3+!C &hV1^Yts?CoΝ[zDe+&w1iF6Y# ss :tζk1i4QgI>bh4Sդϻ%xשM$OX-;AsF0jM -Kqh\6#hئfqjPڌ ? Р_8yξ)< ]*F( aDSQLRRɨ -Eغ4TF|0([$oƥ)Sv8 TTT數y!@ 9(,NmKMy"_ap>++8oHtunXv52hx6utyT}^_F\gYACsP>]Z*T*o - zD[>Ejh=ú3k nEpVk\2w< ,7ÂU.`rzKu uSk`K Ou<[ϛ8)bB7N+(˦j+N¼fNJ1V2Zm\U@ۘ*ȓ`ACBrUd$'K6+XBPhfGhd#PBzįnH'h0V7&D1u ZjUסrP]XmX4T4 B!h*(e>/Sm!$c؂CZJ |1ebhdp$Gm&r Ϻw؎( -D/ar*DUv%D`Þ-8śAOT0< KH`+q+,jQ䁲#$Nd)*F(fxA;0#*AaJ[]P%;>&N  h| ']0M9*\4*AEbιh}I`iDI`fd#ˈ#e# P?,#'|>h,cX, c:ժZꖭVu3hB.ÄR݁<@l`pO$<"y V0yd٩ah<Ghά`!,$q"4/RCiela+(e֏"t-!eZEhV:Z?pP5%T(F6a֒,ajS0OHJ -l #a~NEDKCG01T edD) C s$OيX bE0d*R;ph=щČ^)>g*xC  6LXOK!<0tJJSXʄa5'HhxdUmD!1 -d% -)xƣV0$w4">D|LD1B4ZB0ZB =">ǂz&_FuVu=!9_ $ B^JuM(hBfWR٩ȹFv*q5G0d1ة-#% -%X4hFX/BKl}+"4D -Jqb^-  i,moYJUճa%ĵX)c1֒DWQ4mKQHҘB2QBh}RUO&N-h(YNAXJʈ4C+A`jA& -7cWIOq3(\j$fb@H/v@..J(@ }0B) |fpA/@ )`Q< zD-;DwI*fdT$H -"9)oВ+$|;NykS^q'4{R[u%KygGiR> >,'3(\xQᛈq ^WT ]KeR+Yn4 ٍFU JuKq/Td*Pgxe(6^SQzF9(-4>rFcu5' 9,tA eS&@RӱbA%ÃZ04@ j1hAT9I G)H+es2Y8ai«@y0ث%E6yBGEHR$[Gܙĵ6n -!f۸ ,*yDB0M2O6 ;dJ L z z 8r[ID/.czQ8 -'iJLtU868ơ&-j(aL}.8J5,f(C-86!M:YBʥ@!= FK-1 2BSsHkFM ;x,%w K6,!sx f, JQ|. *z,^% im۬:i@Z -s؜$USdS!=8Cz1 p`DܔN[+`H8`HQeA=W_#kk_.E'=WZO۸6*(`E@Ƶ ! kGd6k 0Ow@3U.O[[M Zi'HSP BћhaDO pl*X$d*N }gBN_GAue[NK<%*9> c 3ɂG۸~~uP A6Z*]&m\%5IK5<&Y-ym\zPR49PMI~d#U(L4 `})! 8G *P&-V1,Tb|of -k: -$а8\Bz -R6DRL1#W^X2(qYt;Ϙ쭌#f5E$KacAd,_BH^_ 3⃯h`ܴDLCz -(X^g )a-/񿍻XWBjW><P2~W)uNc@o\$ ዀUDYAYeCyKd($05lfqpzjlwiUx*C"_Ky/LC)SF3X~ѐ`o: me*` ܔ -+c2HdE3&)Jrgu RP1Q- >:E9),fʼmʯiR1ɪC#Mm#Z!@0M Tr#ˊb[S -iFKWt }BPN -_+UEESd -8(R/YxBӒqs޷qdA+PfeJA(k(fk@`~GU(`=Nk Da-2f=)|i*RƱ(ZhdLn: h]ҰTT`(3)' ^Y}8i8y'f 3`[ -B(/=6Qj090b`zUsĵ*HU0cFzjBk{h1PRxvzEdҼMbP:0MI2E6.PF5LEI8> 9-H -M)3T?8ilTM` IgXlܪNkpieܕ;TYlؕudq n5a7&"يTXTb>O>}b'|qƣC7: 'f3._!ʲ6nom,AN@~)f9 Z,HA5i6Pi % pu*rmjFiD`ID(- Lg a(62h)0F=(BC8 3Ifԓ0PD3ԒOHKM"OX1`~ qYX̢rBr#TRY"(Eg$\Y"i <GʩyH.}Ǣ*7 G򛍆#Ynx,<[9D:MGë%+/KRhI1A PO$%?׳ЈO$,40k"U.h!V)%y)rP1Xi!٠9;P1hPGH#z!ѫUH؋|)e.4_Nx#\MCN ,R(Ш̓=.oi4ܤPD =h> k(?vgB>?va=vtow]&?]<]]7{.'&>9ynϗ_l|w[sڼ\?v꿷qO7s4M:i_>g?yƯM_w7ަirιiMxܿq޻~r~lzc<3ޘ5oy?7}3Ə/;?kƹf1?{y癿{b'w&9g6qϚėiu'k7wo67zyk86Mlsٳ{73>ɋ17{f<͜?Ϝ?;ߌ8~~Mf:Y?<Ɨ<{_.Ls\|s3w?ƹo\ux$w|ߓԽs>O$s8Wߧ>K~:ϽnNvɬM;翏35XG>P3ئq] /-t;_7.՝wqwݙݝo{wswsw|YﳓzokwoS?ϳ?>ƥ6.7q3kݝifn[s+r]anno E3P8/lU+pX4ZU,+@+sMDPc\BfƸͻ֟uL&sqO6I3w㙼^}no7WoZk5cݍw;|޵ɻ;\{N۷}|j/X=߼z繵 =Nq›y}fNr7uvu:w|bv}׹vL͹4ϞMs: pכlnʵB*7hTʘYcz2 5?s6aw?n&M+Ӂ56Nawߝ|*q &N i2Nyco./dR ax2Yq(ⴃF@0Aܢr4  @ -F通K6,H2<"."(( ( `0( IJ2!m("_-΁K[G{z9>L8L ͊޵\r_>"ݠJᨏ[4{<001c9QpA*bsj_UJ]0he$٪Jw9e%6؂.N)s5ѨOFIר9̭Gl+t6gyJBg5- 1/fqc%$ - .yaKƸɝ~#wG\gL^@]˰6!ev_ަ]fkzuJKd:Lhb{ʇ2}!E[{,klYL^>sBu-h -'[vf3|J$7۴cUs -s{TDxMSьԜ͌?!FyZgȢUqKk-yO#l~-rF/}ZRjadae -AOP)b+q/}ݺWe6z5fZv*^'. MWrHȀ4!NVYiR8Bt iC@ZjX>ڰ&ɌIPhP/tȈ[㐓w5_5GqydC "~A'. !"+dE(˒}mO ֽk -w!e1Fs=9mAV -Ma,\̋.kS*gl>u A+YtУ7L0@.0_"hA˓MXVTxɁAgNDD3q14[*_cRR$`0 oc;P tSDa*_.?78Ao,]RsR$KyAYSPT,ô38ži^ЗⰦtc|qD5uf0(]ۘvo2s[(ׂ\*hEW?3elhSdbVd+v'=A>P#X=H̥]$YONҝ~J: -9 %?1Nb<َ~S7m[^NcA@Oq -y*ڎGf`ӹ=Z - -dN-~1Ci!Ő9+H8t󲊩yZyP=:6l!2Na>w7풨Ls4,h-*̽&q߹V*_,]H\u!&ܔ>6ҢɈtK wxʬ# -X졊\ѤKMp6{Q8><WpWvOp4^2b%֧ h&5Gkd6nӘ;&0hl,tLh9/,P“kPXIy Ibad$&kpā.%*Zn,!K OSBޱNkW45ufV31rJ7\ʂ"Sb'(eG8GnV52)hGLo O9`MURY,L!^PO2.t3=WlFJ\|c(&aμ^seP>e\_khpָe] -o9fsK/6%'ȐS6XlbW~*rN 7ą7[Wwp6wI"| J<ؤ͠'ʉ"Ir@K {26 9 {PXY@er}0(UE -$*Gi4Q(?]9҅o5lvxO~何@̤? Ɩ]*(V|7©DZXEcZ30Q0WfYwV|^up$}ʗZ 6=tZؕq-ŠDQF6 -2PR;i7ۇCX;R LݱV[3/#gM ubYAE+՛7 -Q`s=_DC䴅,'w >Vw!ĢIup]0u̶* elFH)tۻe@čGU+t8um {a[O/hE*ӁX vX-;K=ݎhƊS-wmv%H#} -*{gYNE./hue &!@V=5ƳjsT*7{n[P{ -kE9Ij5x(*VbA6'YBP"o CI$a+4~L;ݸHSgxxJF]@Nw u<)'siΆDiqX!$900kGĐG }DF8 +&4Ճ%vFD1 +|.bpG?Ђ}21\b!ZKdZ2$C1fjuc43gѴ/b2tAFfNx,'""p9:G#XD$:zsqCI}>Ju_r zxph.Ksl:&R/װtC =a?ƲEE隊)XeAӲ];ʥ)hmbu)yLw VҒF˹0X"_ -lZD)ҜVT1QWZx25 BwwQAy(Z`f|9E #]DU[h+|TQ7cx>hn% 6\ isxnUM( nmD^z3+:? j$CRTgf]AxP~D`A+-`V̹huL\@.c?Ff_4>n·1R;dAFTc 1BIf. W w8\k-]JHOu}fsp}G5Yc<18jm_N&5qML3(zCz\x銩Ѽ9arBrU% =շ0OhC܄!NҜŘw-\ PoC_5R)&p QG<pů$W-+aV*IZ>R%J)9}Q\O0.fJlZTڶI%l GS\JS y<𕽏hIe2P^Ͽ*.-__Byԇ -y/ g8YF/{n!G/v_2B3x̿aMJ- * y\ UF ƒ%?ɲl  42_.RC1>.TC :v ]f% p#Ak5G;F+*T`Vʼ⤼1GeKG}HK!`Q!ӆGJ)tm8"(z! D7c?m bTde9 sE6-) -]aZl+`JbIDc`G7Ӂ_)`i+{4z_ɹ΀S$_1\N\זŋLRHSju5k[Usa{/4D?X^g_k?$:E{ѱ+V"@CAtGnwÉ802@~&gau -|&.#HxAWh9/&w߱QaW1oTeG NQEQ;+!B;[ec+o">:һ,Pwгs|rT.W@؟+V˔ -B#1oJW/xZ,{BO'w o^SػFg`)#21ba㸐qY()@/6fU2gIᤡDwmWƣ4̽=JrRA2:]Wŷ'=[XăEAVzp/;Oҵ(/^('v7KsvWr\0Εd׃mB{^kQ) 5rHo?hT]`{ZN+%$@-:ϓؑ7ߐcnnp%Ty7iRJ%@I,Y| #x#\W;bEfgJ_왧@{.>ǷٲT[Qs$E#% aOFN |}m/T`KS/0^im:EEʈ7MoWtFP`;dtmU̸W'Jٜy.o1 7B4$\WX|1dh/Q 헲ރI<ߺK OxI -mهeoA/5I DB5n Lg˽Um#&N6_Z=J5 DE ?yai߹\Msu|jrr= o84[o͇q]~ mX;aXQB+=%^Ap&&*{QG[ZGD]8%%~@2:Zlc`N m9a`q Xz-2 L3Xv9;` lY&b1`T}~Ҵ 1ƀ풏;o` S/``QM0/<} -yBAk}魩% - r'1RJ5AJ`7RK<52; Q43qӊ1seOƬ7…5lo -^7E:w8@ HXꃉĿ( . Ng@ɢAOcL]*Xi?(7qS3;O6KV;elU`r>"nX}n-/Kk+ɭɕ<>Jb2/S)G\*Lu]΍謒LHF`aU#98m,3PD WWkNaB6JQȔ2!ͣ -< ;>^$׎m%|#TMrjm 0vJdG9]S(]ZYq[nO_7B/ǍGk*I8H]Po.0Ӭ\P VxM<3pgUBr\y'HEr@(6>{*Bk HfZN #bH*}>#e)|“{@% ĵ–\2< ck$yW#UBW:µV%x/*wu`ي+I-DOlv%CI(Wͷ. ,X[2H>haH5P%qzvDbiM IrnkREO]ΰ^Io}B}7$N#U֒q<$;`ZA $\YoI67aJ>Z?BeF,jεv3^BQK𬪤@0ʢ DaYѵڦd"Kmaqj{˿M9YeɭyHjʾF !02*os)^._n -#Cq u։Oɽ&EqRǤ+ RCK3?,w<+@OCsrCgrWy {hFpp|P]bN=x{IĨ_AkV KUpߎGhϚq!}} -fLb撮WmʬK"yk6w Ǭҿ{,F.;`M\)$Uf\L\ dyCۍQe4#|MBk>ïiD_WX ᥔ&yBR:t{ sMH9rJ&cPjtS E#ԯrr͹zMu;ޅ@3a]ɨ~ &u2v x̬[6\eÕgZ0Y?#8w!;xF4%"ܻmNbj{{n,ܐK#5़vK;pTlqIS]wp\} ݇~1ntʹD*Mkܽmp|i -)yETTD9̢b/@>V2kj1g=z$MP11wK+{hB5GIW( -6"FAHU:`>!zm83֕CUV !"m-A"6'{*WkDt= `Uo#{HSu}6|ۢb()GJO&Aceo 7`_M 7s OBP<[C2c В$Wp!JcM8S; a{CoFI@RDng 88c.՝*Ji9 4r6ƀ>Oz%ƧyESu@*&>T=_"9-zoNN3Krd;ZIt`~Hhԃ;l6 M؅8=1M\֖+dE,ߩ!ra֭q۸jX. h!Qq y*lXI- -(R"K[dK\q1\#cѼt(E8IDRF}O%"˼|8hW/)Up0YR~֞%UQ2%5NaPj‹QL5j\{ӥAYZSsrxW]m9Rq)_9"G᷹ȿV([ d!;o\cs aaNM̚4O~E Sx_;xzɺO#Sl^g Ha>ZcKtQے2ɱ7IoL2hWGo-a5Wp=󢽐=#v8R_T)H l/8bjoNxmBis9Lbjj'# R`4 <%'#;LˉJMiR' :(lmohRTQ^*؟_L0}ulS|a(n[zwbRj{$!&B#4)< SoAlzxŤ6pФ1x\B-b!XQ'#4iRB3P=z **Sj'"ILfa~.$IUd_ڒTi%*43gmInuX -VWgd##0^ڎ($vYa<ɾ}OiK"X8(Gz95Le -1T&fJbe)=2ڤWJ6z+ USђsOŤ LP2BQj,B;Ȋ rU >:9p#۸YfǏ4ImYf~ڿ~_<jNJ(uLum l8gzrYi^.J&ݦ %cQeD+9\n+Zơӊe2 FEKeUac^b{Gp8s;B],rN{ۡLu$X3v}M'ĉe\<J~bQ9!݀?=I*!-CINey)FI -DLMDC6݄8L8JUbnn:vȘꙒbe]QkC <ㄗ =zu^h:`SO68X)D81pDFB̡`; }|F$[b( &H>E^wObk8>ڏjX2 -{m])g5!B k`CXghz/K@Rs]Xi ҄qaN/[+2sIf~e3Lf^F&P!R3ErvrUKQH~;q٠t_#!@z#$$? -]lTkQѭyBy H& )u9խS2PXle9&ƳHh ȝL]aաZ{!݅//i&* b5h# -ԖM2] 5 c%֔pidVbHM$Z:D1q(4 W0Tj@ ۄc *Fa7!ݎ=KX h|| ^j03t!tݱgp&CND." "j0pk$H8EGmoLf MaėLJ&{YsNq7}8,Dc ׵UmT͵Q7 -y6t%rڔq }eh~! IH;_ɵȓS - 'lOeק6A 5|ΙqLȟKKl}Oyܴ{?}C]Ï.x^u҄_ؐȈj1>0{)&"F)Jڮ}2yن -D;$Y<0$FE\nN8袋:##3kg{[C U7%Ғ vElUOG7rB`!ьP-e"Gӧ#G&H X}j2. XSm@ ~e: 7?u#;J,l 3+S|ҳI#bd_A+?ۂ<6!(1 xBԦUEF [zμ:?p^;34/y;ee:;Pӭ+OF}b:?25}!0)(ynэPPAb]$WJ48QJFe< jtW G\~{PS)^x2o&sV։=$s)_蘱KpY;XG` akb48HJ^ /zBue/ui=NI3v1ۓ`q52jSJn"y N_V#Q C/`?__](Lʈ76c;ۭ| ^Qɹpb}>sX+p/\.ma|ڀV#/Vn ؆lO$p9[MP855-_/BOzIĆs-ZQ@/@X򤿣vZh]usxK}RsFCFz;I*?ƛCE LTht #䊼#̄fVFaM0An\C]d>\' .F]h!FptSC`"OZ-MOQkDq,wZ րvX~!V&iX& +}uKvJ_4BB#r#}` -SoZl7$3H_mNz'~*bAH_Kx|cW/EŻ%] Ɖjc5/zB~<>>NX^f!!&lC s4-&,H8QT&q<:XI1i\`緱bU邿[ $dGs3NhS\H;No~9s2͘~kmC̨PKpnR1JzxWp^͖gjMiε(!vDWjVEv2s ׼|!2M(@ij4Pd7q}wܽ||;?ocK{7o9wo'57'3]6/ޘwzzs;~n֜_m>9Y9??f8cs7Ka|=_Sg}O|r;eMys;ߛ W!X6Nŀ5jCb@T4T -2lLbf*˘ins>;Ӽ5Z䛛ir31˷i}e|wƹ6ޛ pC]d&>;s=94#""$I!1c bJ`Qc(RL!BB dW!t-z8Vk}MOWHOD$dy֗Nʉ)CbY }u/luQ #=Q B2AAÏ{+vơ+BEG7F|S˹dEMp3 ށY,8z(:܉X _fށKeqtPDaB,G"es4D;FpMf`ob^s) " :K 44X[J.l :ov|dp'--B#sa{o(YQ`\ylH盦r珣[A7OJg+ r6ն)dW+Bf>du76s x Xa?'ҟ*1rm}5|DNW7 ֓ -ޏtW{0yh؄o3'&<5B8MYj\>HZ h~#zL=Qw#&Mt#G"wVxNZsh,N n_ZI헗*D`$`6i!w[":$R~ChQ WB<n=U]#VVvRo -9fK3uҖ}2c9MyPZHxXxfHUދ~ -pdVH] *o -|?7q/H&8mF*TucpH+nzأf&R GaNl>Ǧ>stream +U# +>_ؔ\pwpšzPyt hGZS/R$216 +J TQz(bpQL p(168ZpH‘aUN-SHB$0X]dEABEPA"ip` Odd%Palt zr]bq( XZCFqV!D`B&8,lVAD(` XHL&R jp" "xD&CE.&fdtD @' =%3 ,ACl=8 &˖*Ї@L`]RsDSf@H0(BE2dgZ2ND4"q@#)0d!CEe`toz~kglW-`N53u{[5R# %oqEDV .z quW69<4GY +-qi y1NAcYk;582s!<.XIb*B0Y"5^C1g,x쥳F +:,K}RQW+QFڀ1Π9=H VL!'5CD5AAptCbOuaoѧTlc~8佰 a,iznkT=>Mn֒]R0! 'krpFPˢI%i4-DD-Mh Jݧ0Byhea`TÎW5{ԯ Gt)~@m(_ )k&B|W#v)ddw*#L\%\$ҚqR0>#wO'aί{p"fE8+DD>~vJh5e.#_5TAuɱTpQlJ.+I&Рsg|N$uY7žd: o-8#q`tI&'E8w!aܳI8*ڤ9)L(\`i[z>7L]5Ⱥ;qQ8fPhRa/.Q?7#zJuTUl=?2 <,KVpgB$sS={2s $_ͥ%ƅ,ԨbN^Q"Ug94@i>,N'%rrN'qC{*=>.ڣ/?q؂qX,:{9/sC 1۟TȵnN Q,79)UiБCHKLi>$zbg<@׫,쑵? H#!2}U?(ONf+Mw[֗g=۹"r\ ]?\.Ceubv|r$tƫPĭrA{EisWނ4bH O9tSZ/zYc8}O0bgFp,cooEnsMs);g!Gf%`R BX"[Fk\'6< `$6%j:[wk#ϦApg&ipDqБFSt? 2a!DhgVM{\+Sŧ=hc}"D|`ae3V cX D[bet}Cu +\5ogK +ɛH`ܖW㺙yVKNCW}0?׮o-4̽9? PhDn z* 5;z;Kl4C55הq@u\6yEh,ZpO dQ!:.F-^ {?} 6?q+:D}(:k pl$ͨ3},ʲEi7m;Q%2;6PX1RUWϪǜ1"t;ssVա2L&ff ]+I=LQ:P\TF=IYg2Г_Yn]8xO852 -=dV"ԗ 9PIwgw,@K%Q="骸b^:rQJ?cu&bW޸g62~n=8epo<:v;!C#s^3P(ۚ@[l%rxA3ӯ9 fH[+xu:gaUsҬyzX*ii8q7]5!T!Q'N^#åƽ5WI P8 +lJ +DJ Er: 2o!xs*j0ރ8mINlR_W#'p6PlBcތR%\Yj~J짅@2h 4Akb2v@|H76֖%)S6mWf$U9x&Zϒ\oY:=h=.DFP&pH{GD?k;iG=ɫVh.5>SysUdV!LZ%V>p)xD͗( Sao˥/ZcJH'6"'1Ԧ2}2&%My Z&ljY@fpr9{%&?/P:H}ޤ6n,mޝroҨH8/)V 8"!K-_aUF#>P// U-9!)14r!WGٻ:Y3B%Ga"¬7/;F%_.ϝLSL70h1:)' +u?*`c6<1rBf%Nj? H (;paR`Jݏ* El6|1=-KAdܴ =RP=)ըw15JPЅT!1y2`5}dKEJ{n UXy)T Gd-  %s8! ̓kHY%t̥4eĦ3r1\ vp$ԓ+`6MQ7Ls/St6({=h,3᭡N`?54sVXKt;Z<3a$L5 ݵ]n+##aCZ哊Ҋ=sc\4\v C9XUpp*3>lA (SPfS)<5[?u^Yeͺ1Bp9eS +U0"rE xTC]:Jt [Y[~=R]uEw)nPM:n8_RcN C.55 Ύ:LLl,}i o|$,eLl {lByr=3km1M6n6,l64FEf>x$ui +,S9>XN~%$W/O [eӮ2i"yV~-,VvD)I_i[h5)O2_\`.p\&x4Dk^B\>找XjДb ؒɲ8'2#&n5li rB|ˀ~D&z#A|< Yޟ /}tS /L I$N)N @\Kٓ3y ˹u榍MNؼAٌ:t S!Or}&\"E[Ojj7/SѪs TJh +gӵy'wř4h ^g/MgfF=x|f +,\ b`2Nޢ"DTMBk|L/3L,OG ]!}i yu +KU9p6 +YUоS4@ǰfnVd[#4#fPM&4Z9o+=P$wg>*Qŵ~g$2!bdy:䖎;!ϾرA{!# + B ZSy"Ř!S$^RgT|w81PJ+{|0{%BYyda@|=v)q>f Cp)rX5^A?m6a,P!b3V0hLhh,; 4d /g )4J*|i6Bvh~8me4ZrW4KyZC73R^34;!t'<Uz#3NBY7]܏Mÿ<*'7(~bZr9 i+3B& 8I㧘pI*Pj?mg|6Cc?.H[X:do$a=TO,UG0THu'T>;ϗAlv9q EЫн.(I꧋H2{FϬP)/,$- egv)eS\Mπ3)4댾}GNm499@caTܖc/%\vh@؎93LcPa⾻:RaMe4J*"؆h@8cYWU[i;)jEUо1H^?\JN87q7}AX@&xd +, b V4&1UCbm~T"ION&9#W]#Z0aZZoO` 8ѬrȝR˷'I)~䩾J2L KՅF1Cg4dѳbiXKny:N2hl^c;K*v4<>s CĂPQUOVE2^ 5 S?ǒ:͕H/ ssI*qcf o\sB{M^,p1vtB# +0S >"ޮ:60IZ#.-e2,z dnXTvi9m2 +x|h5z<)UJD@^< =PGiW)iY"4 c.+4r/&gL=gf,(cqa|\Wq$<(ٺڤCu'_ΙD֫[XlC鈚&]'02]dQ"+Bn/4"AL;;1P)J3<u KSO<H'1N]m0&Yi(a?3>D.N#t+5q1"FZɉfȌx0;/"Roml" Ckz<;idb a kĬt]N6?n.kj}!a@ ʻGAw̬'w\/$A/ +I`~ۑKy!*w/zI{X2ƒL8 :7U?hx5'fcFT5֪"x,sJ(%8Y"Q&zS}DDһ7r8nCS~&٨J-x"9=DyAF$?Pqɹ7$N& (ER8įނ)f2 9Iɢlsr_@4RƼѿ' 5#<"]%n2Bn^E̊*iGqe: a.PRj8I!Ȟ]uk%5^?[O1Js`> c-FfCL1Qs~+ͳAHQme-%d reoe15'-`4(q/="%r2r|K0HomH߷pB}sJ-' Cxx0>mg%[A~Dq1b_Ih01W_CgҔp+T*Uo SPż J$6>^%,Z:(ߜֱ2{_SR܌r@ŤƋAT2NaẂik^) if6U__yq|z4e~@%$'l1a٠Ye&Z(U߬JN){)6!_uDC27 qb MXd)mRp_srvjeq+2dC2صޮ\"xg>lvIOH4vK1Jαnf~%X@@VxibhHo]R$3+4XTF#(-iF*z͗w3r3[ %eOJeNy\C uD4~ @ б cVwQW.\j<\FHu$; f2$!~,NɰJ'ɪ`P M >z72uF9cPU{TnS.jhQux#b^&D-s{㼩K\;NTmNٞOBY4E1̏9]tsNnz0e{S`0s+ +2D#Ltm3R+cR͌:5|lՍ- Lۥ0}b }؞?H__EFj +N8Jo#|_wٿ«|o/ kU@?jiwٲx?%kj-bng bL^jN=PjY6m 0rZ,{ãAo^*uIn5ƺIXN-P;>Omw7aWBDY/Ϗ^-3%i.O$T-(2 +^~^j!`[,. KQg !4C Ӱ;Q]E~:&,n#kIfE&A;Ѥg}A{!q]P/Qܳ]jQ1%RPilHо+(UcY[& i^7<ɢM0UMBi1X9/袛4JFh&Q Z2B]4znؓ{|.LH>S&ᏄE5y9 `d ";AznA*ޅ +: fуKzr>TȵdY@+ +@M,Sλl}Er XMMfM +B)ҝ tƷkgwx97{5=.S!y6! $9PƎO#KeB[Y,}GT mP_ҵiLRw>]*:\P@N} 1Y.o5l +r{bhH} +Fgv:/ % :yO9^Ud\  +07+Ř=A<wqYqMfCxcҴz&ŗrap(Cls#s̚Ty*}\tU(P(BUߗYΣѷ"T𵥮x.?.wUNvca t>'~9y3_ktv`@e+Z(?A朕1Tr\@Nm}0̱n]>ck"WtGLR۪eGYH7;+2u ]j0 QmHh,t6GlMw%E +F/8P(A1F/J Qslt*~*" +M',8u{(jP!citvV_jH ;Z(j4F8g*mB=(wgw q" Yl鉨fsK-+w_Y[;+Eukzȟ&+"US~zq[Z{M82ъhAJrv6 v'Iz}Imÿv 9uBXL''uF!W4*-G|/LZ_~J{ 񧔀ޜG5cetJYj4L)"@%Fc|^1i0}(G;pL[1=ʴC@Ơ˒%N +Mo8 ;B (:&QKPUft?9L!{zw,OXtab9a00%8u/] +Cng<(`cGg(\G_qo?>nMBfW\#Qi۳#wu8H˶pҾ%vĞt)v9l(b3 +K󹠶P%> ^43I{o^B;݀C؜091 ?\D]Q'Ͼk00S LN|&G8 ibgϙՑK #ZLWC c]8G6-hᝅr2l4@>^}4wu}XhXEj9!Ѡpy\H>۷8~tW8}jJ^zҚ4&AV nmq#݆; (O'Apr.MGiDkb'IL.#apͧ'zO'Gkb ֪fgp݅vO +L.RtaurD.C~Jσq$ +MEv81X- +bNN%W8YB2dʞg!zo +Ů*mF*QPiT#N,:PK숅lpq䅳$5VL,'/%Ře\Onc*"OC1075]/3h6ӍK:.|V-H)9'/$tl}`d=4%3%5X)e'+mk G6zAɒ$SE_u.ko + A֜0~Pnx1Ck[@ȧL>|}"h2xӑxiĥ7oJ2Cf&6w#dO,ލYýÌD A6C>oJE33 6{r D)|;#9[hq|3n3φiـ~wQ!4D-zf X&ãY ٨A'&  6?bO` KP"쓆wLC0AF?ZL C# ?N)m4/l:}4-H俐Jwre!ٿc ;~wWWA7AJ{2<$B=5sXo"u]݁(+#2‘(SV7DAm/>9˿sywUȠr\>aC^ +RgJw٦S.(%U'AAKYq7>yD)tR{b"DWDs W D.Z=D4Bіu (&1@a'}2Emľ͡!0VT]hjW\g9o!^暔 +vL8tn ԞH欋@r G'bgSU'~b5P>ŧqH *U2 tۯF.ju^Fr QDC ]/D~7BYA%QzR`ެ1xwD,qA>c &SHY_z*DPYtj#>=0 R(,}^1FqUb*gMPX?>aoǁJ%DO,Y +qxaбQXAWR~ ؐv1b֡(KM{,Ëe-]Ѡ-Q IR~TN#Pt?lKJZCDW圿]4DDX`J[,F&niOLq#HU~4+qLBv":Ƨq~hOx!8{ks?7ٳ"UV"Hʡ́R*T T9pbX+MgʓCXN'VL2.HKџfOIK۰)^gש~Q+6c(k|I}R$0LjmcEe,y擌;K%(7-j^H:QbANIlX'kI,DGHoIh痽cn*#neMQ2HØ*^)*-F)C)r%ЉY}Iʮmn -P:Kke:ƵWACu(5y IK;F2mk6V C}!+ՄB~d:)j /b{;\<+."$i8W|$6lkvY mqexNۙ\{_b" +ZRKl5h 8JB`5" xƯ|b"$ɧt' +Ӛ"}ꐇ5U +lKd/+s#-r;r\cySll:| +owɾ)֋f]_Wl!KI 6 u_{U8IQ 2WK~E}xR/3|#BS# +G.4)cc F&Sj$ ]t@1f e9+lgTc~3T5 Ζe'ψ~*|m}_=͹8X0z%*fH;װh:-tSmE;F c4 $z˃cXs ZM5v#ވ7/~\ao߉`U!AewJ6G[9xTK)^8FL&BUc3z~oo~a'ùu"hS鍊aQD/W]lEl LB:#\$">gf]_h<@*c6NA+ICul~q.O! XA`Z.2ES } =y6(,BqkPmsfq(}~」C׈t*kք_FӸ+DieK7^Ҽ~wkXòpij3S/ pƃ|!( ܑvrI,YcA(}M,P%XަAO{ kTlB +.%&eblc!VHk媪tw'(-&/#5C Eɸl.;;gf1Rf4kn봷9Hdv@,IJ >m##xonwڄkcgQlzdmV+P47IL UQ q >ɪ_]c7`%7XqrW܀?p- +W9nA=DG{ED atec4PqZRt.Sd _Rʱd׌ Thtv)[OmӐ"A=2#oC] +"(<z˽#:sî:^3(=YJf4x?\f`W!-eCѲ>ApF\ ){"I7=?Ow?NM79"qjG4g぀g8m2 +:I;isŜ,!=?=Š7}~Bz)Fޣ0 "178X@i8RN?r_*/c7C-$U,]3WHYD_@C(gaɼ8,"sy҆:?G2}>ŧ=W =*XvxnNq;u>:9ɩ1P8D\=Q['Fc=(E +Az%%4\@ʏ2؀tC[oU%MYujѽ[ 8)k1;G 1Z{ +.eLL4ckʖV*%LP8V]L*B1 k]:)]$Lo BQtpoD&~bnURIG +6bp8PH8-1ү^`n|N. +s!sX`SP}ҠR yb k`P{R'`!6'~h%D`+:w5[1]2&_h7awo$Qrl3SSk67Yr<vE$b&JlW,LlRM sw)Jy٪qk}ƐX;#%'Y {0slkBqѬMw7<=No+$b DMAրHD7{`#@ iT'%P :$@d:)R. ʍ(f xj̤#Cp5U1e" +(JСPud<&#$iP0cS<,V Y'/, l189 S)LBLTђb0>4q@FDL8nFX *g d>%/BXTW Z,qLVF֒n!pՅBiV뭀=ZLR_N b 2&=ALJC<@^cC36 +`3igC0f&(u2@7{Jhb/ky/Wb)!(F4Ob!a@-^L-uѱDSj,Fխf}`Xx3k-D Z NA YFdsz!``IN sb,TfX8?02="]Vڸakfd\ +E 0<խ>?X +c`l2 ǀx *Ćj&nQo)ZFjtUvC"PCpD©>D!BuăzFVGŐ1v +*CS\h8Uy0B0RɆ˥`/ +; }E5 >ύ4_4՞Ye +m%[𰠕(/xBZż,z(IÆ +ZQbt0@ևPW!'Aup0p/aQ96 l*!:?WHDJd%C%rw|0zZjJd}L. DT!=OHO@d9 D a>!V@dZ(C|dHN5aE@uyhFd(rJ¨5aW _Pj) IAdvuED.\# K5\eZ*9:j=02FP\Xw#228m:pOћp$@o E[VިA<<qՎf2APdX,ljzXsC$0qAP +H%INH堣H6 CGCp!F1 d1~ +3:93ery"BtdnV +/ɇo҄-IJT.pbp˸AV%Yd\LYeO8(Z> px=<Q@M3+lJ6L֣5`u΂To?9[CpK=1""=*ʵ"Lfyԯ~Hك" +U"f觖6 T|H4XЇX)ԃd6iR?'Cx) M@R' BLѭ2 +ՆaSc- Ǝ**k@PqwՆΔ#{8k\) Y/U1Q<(_Ly CpAc9ɓf ^LTnDDB Wd]ueu>۱vuX|y{koW @gy8ok:~[H /x{j-[Um 'i^H=o..zK=s .w%).lDE3U7 +)N,񙬒 + KE(% !L8%臅Y5LXdEFzq/X CpцѲfChbD42ˈx!(!$8'% F`hT5b̃F<@fkVf\VJ[CpdD0$LH|!VUH\=j1}**mi), ފY԰46HEJlY Nf3ZQTq'~r}O7癏֨P46 +a\EYbcC~ f$Jriͩ2]QI!thSf:hTo] :(yŌY + +8q@ls,H@!цOa c +" J$!81~CprYH"'hE7;ҔuF8˦@Â2:~g(!z)?GHZ, TC$jɆA4"4dOKdH`^ yS:d$蜉q7U“4s@RCpm>3Z-Dzl8PYqk:E}X釭5,FYd6Us6E "ׇb~nh`$6T^腵ڣ`l1j("GAv>:Pq@/ )*=䦛]hoσsѲ іbyzz 1CjT?lhhVF`M)[bO3`9tˍRkY/bi Z }J0C +(d=R)MqDX|hI0`}w揵{ﭵgWu{Z[k~-ߣ%qW~G+Qw-֞[wk;ow6W_߻m^3oko{κZ9Ys]};5k}3cqU3jv5:ǝG1Z"1j|k^z^7Ϲ=w{1wλ+~\~1[l??;_qkқoV{[sn5Z[c}kG~c]Gfkk3xcuv֪{6s<ηn{sq]Ο_;l-ݿ1Z֗ +1 8}] ]ݶ[[muFp:d_/c{kߎیswڻ[]j濙Wwιy]]\/Ν8#85:A[k>~XڋX}Ÿkm1b}t@q;Y..ت8^WLj+[A5 +%s>;ࡆn1䛘i9g1PοR@&@ TGđPXCr12Ib>0b6\+?leD`v&t#"~򴻧dd'˼qdNR)XNO0A\Gb%65,("ԼC_x]~NVR1;uuj^4WTeJKE̛M24yS̡jJ4h + ۛZ7 Oҵ'ïuDΚB\ѭPNj2|yRX3r8ЩsFWJMǖ|r?Zܥm%߸2q +lf Hn+|=J3t8DQuOm`ueⰰ3 +n`>~Xߥ) lv&%|t*L2 OzDU)R{'( I1Vcɠ 4;lް,XY! G;Qab6JF#>9]w":DtEN$񨎝+Jϓ!4XbUnB ?iy .$BC#Ykʏ*DBփGHT787c?qBiQbM xjrEO* GҀI3YkytNYaQ@c|}Y"-. 5.ZO UlPܫwiL_ s?ɫCy$ZP^BH>CB(`0N@kUʍi%=zz[q(SZ([1ҵYW^E@L0.dmb! ~ F905ԒU`S-#Fi.\1swkc{:ʈDO˾/u^8f55W̦bw %4B}ddQ˘ܐ}'[TaPv>]t61RJ`jS}py'HTk8|z(+&ťl +i}`zn͍ Wq*,IWΪ062q{!uї[c=lXs@x~ +C$)[ߘ99^H3%y(:ܤ`sQ,@#QQ#ZitnҍLsDz@U6i|]DԻ:0ԵIoLzFaÄR!I|mFs(Yk\57a,8=1fCATE!{E:+P3ZlYf9't#C{i .!6}]fXtH(m0֒ɇj-2;7Y5zqYtMI5D~ D":,IS9 GW솥r-*Ocƻ5R.`I/=r9BdZaj!n-GN/z,~ ?o9Ç29o'f_gOꟖmnspغ56lۖksõoRE}((mWx%(u(z]:GQ:)OuU؊aDĚZ@c=Cf V)_ ¯ |?Z}qN;,q(R+Yy%C6UŸk3d6< .ވcjs=dW K1U;# +oDukRH' +UcA,gVԢ~k jKg&*j+6k2$ а@%!ª& "Kz ^D9847fHWf]B >/rپmF4n\p[AƷ:Jڌ_Bn[ݻ7q\+=AtlzM#82\:8su_WBl¬% +3!Q$ W 'AE/*@tb<g)WD% EO\htm5,[,|Q+  i~ +$ah5@g#BmȪ,LbKNmw1[CPO:x^wjQsw\ox$-a0}pV/t$ۘ E%Uɝcr۳R`h_ÐgI=R `̲Qjy'66p705~ {33eBmBX!m1Ȉ##<-'afJiR `zaA~Yձ[_ fXUbD ʀjl ij]2;S;G>UoZ ; +nkE\T^!*jI +0|;@JV2`]v\c&`S{^s)E;ݘhS]ۋtЫ%wdeV{7E_n2jֶS.^ղ YT-[]DNee^7xŤmVuLokղ}ۋFbgY?/S +!^2Xm/Y(P{T-dy j5!؊रcKxMHoܰ +R)-c $Tp΁K.gI_Jxf/W[^\/::=X"ݷӮ>Aȑ{Z4Cn q60Y44x8j H& 柮Hjײ|@ܷ/5ӎzE^C٢"4"x! +.mS$}O`M8~P)_ (&tUan$t8ԡQ ŮRW^_ f>(Ov:=׉]*ZoE5CCWķQ?FH MIb.ȒQVJ$Hy f[/@}d%t8zZ\t8qUq9e'N<`8|EHmE&5e4+6 `̼S52LtI}L9Y<+1 wyheqNa{xHͽ@IFP]< +AZ2c G&xv`ϐ[$ef"X,J`!Vg1`J8qva8ΊH.`m{!E8*ʼnd H˔mɸXQGwIJW/r.ߛIǭS2|{Qw)ц_g`)72V{b,a]XBpE0{oIk[6(XV2$Ӫ+$IN, j_ڤyȪlKsAtLUwCVRo1Ea6qPl9Z/BN{rS誥kQ^ PliI'v ܭҪaKBz\˕մ:4P)Pŋ55o)iРM!x#Y7\-jJdOy ,s33P&*nImS +4v'o?+'+*ͱ(ʰ[pj7s!xTa3 )Jh6#nyx(l:;؅[T=fc\\FfN>Jn6}°d$>Z޴?Z`pљDsf +PHV@3t|SsR\$5tOyg;pw#1Ɇ3uQu/ѭR@ds0|i9εʒ\ {*s;qeI9 +*\IY[-Oh3ӷlw Pf$xT2hӤep4 @ +p񷍪*[P]kAPh+ML7X [fR%+E^Q8_d/\s,zqh1R5mec¼yx_ P? ofx<usZ[9ɴ1@~+3(<-Ziq  {XE:'ף`AՙQ˗Q{? fK-@">kSK2SIvj G)֡X] TeiԔv'NPp"WE@n>IĻ.)>]y!Z*Apt4Kƴ_MvNsHo|/ 0)u0+_m31mWKELqmwv,cty +km S?[~oJb/LLվ@5auf'{}3l90j˄Ul-Ƃ(JlTah˛o2VeVzn5`"rK|mRkN-8sy|P `L6*'M #IXg !.Jctۙ?87%.jn;`n 2M=|ǩTY@ B Id]ߋMѥ 4K.}@I>ǡyk>TUMu 00agvp%y]eߞ{/ە9kEt.QGejxTհNT*xZ8Dͺk V)DgD4lK-JF^цLc`CXf,O0l`6T6ހmYo`Oև/ar7NĀUW #``*ڐ=`?UBO}&Sw ~Z| DW0B413Q7RW{jpOsZ z2"'˜uͦUae+:*bյ5UN{Q@HZږP5!NRr7@ tTCc<^$, 4Pu-O3; | Z! sݵġP $x/@oP K%gyf?&~`zI>ClU4>o>cL=%m`Pd؎3>UG𼼯]-B Gm*8\Z;@!`ljr/." @)͚.U'DH-mqBaL8;!M.'@%-Ζ=_qFpFUE\,6'M@JOjk5ט8̃:J\$2e!MK#3ޖMZi(bM4sm`zѭ۱jq\5GQd R!h@!&dA0m)}٫ c+Ie뚄ɯnJNQo3 ϊ6?D`nc͡[$=dkҤ P+)-WHLytI|h)5ARjU`,8-q2?ͮwC HX$6f&p1 1oҸ#uǙKS@gHU;'Ԛ ё$$ͧЮ/ߢ~ÌxKI6btΌ.`&b>۠:_NQt b¨.#IpnsSi!_p2/94.{?R,!dž$r. +ůL/װJ8ajS?MON ܡ^|ڀ +,Yx&3Xs;D_d:pd+ԝDrh=thWU3i7le 0eڻphL~޴ )(G 4RBuA-9s y@IbbIV UWrWvV^WJ 'NvKC: eg,6̷V:9cmXP+2¢G"NJWL=? QvXpS0G?SMX?w$hto}3a+^nHG N#UVqS<%{alcC I){ŦoI'a@ )tEF,"g-C-L&>/ţeT_m7V7uN>c^M5%*X. {'إVc9)굇2q5 n% '+Aɕ*НVp-w?,.ReN|#HU~:LZBYwȬR.?w'Nu{zˢh}.e'Y !IV9i^!O}<`HbPmK$ +66I'piP?%x-$ +@ciU nR8H3X!T @1:IBqi J*HT \N؜(^m 誂!j3W1Q6EQwnYi"n$#!ԅ74pf=2"e&HG׼!4jmp{F+}()_gL1z^%IJJ6*hKfZtN[GtIν2%s՝ӵ䘎>"u@PwyME5Yp>B伐J$a5IVΚ{pz%+IOQ˒ۄF> g o,"\[(6eܖJ@'يVU5>gU|^ngwxByJJ mL;fl] J ·cQHbnk1{^wW>I0dqy#AV tB!$4s/mUX= +$JHT u|>[723Mj.xDuA"8͒:-fW8ԟW*ΉIl5V6yx4F\ `-*8|T H 䖴je%7TI>i=f.эI+Њqp\zQߟ>tU2̊:uhW͐+7F5yZs@e"|sM1j,1ͩEjH&3!.%gKa^=O%*gak "*]he$\% #cgd/X<6 ?:dX`2 vP_=lr,f_Aݙ;s{g7 ].e2jV r߄G7'VMuʨSm[ qSR> pC|®}JL9;M!x'M,(#Schr R0kF'3,Yaۍ"k8؜#(As,Zyﭿ#gE(wz2vFQX"zF#pw+֔gxUnB 1EX)>M_BSiX#=ڢNq9SJTOMJ+E`nnG<q +K~1󵉮2H e5S($O7Y.;hNIAM6OR8jK5 +Iw߷az+ב֣N[CM>5ccDxBh] Yg=nɷ.-Y4,1djX0ϗ S1yI@A~z]bOeIa6`(U{ ZS+CB~MU7h1|3$;wn{kq5@x⇜T[*iheoŧoDO;+b!I +sfJ |?(dpW@{z/"F"+PU,%^R2_[Me E@S">!p,}`ۚuJc{Β ~WnY,jD/);M#CqWIU#k +]Y5cB)MW؜jkD^ZusCmSpm{q4,78NMD#B` ē-b~=pgqP*Qr;mr}me;:j[3f$l$UPDAPoH{3c1#R$AZQ}VNoI]9|4 g1}W4%sQ V3D&X$-8=Z_JX'P%mU0XrqN TGs=tTH ̗|f{IjY,cRYYh5 C3 &նbcR+q&YpaZxp,П bװ:&g +.&\Z U[DćPj={d4䜤Y J_Ce[XgzfP%1kONA%<˽M]Iɶ .!1 \#~6ҌIO̒+& jCa␛6q;lΐuGzazo hQf՗+% +y| +`tKϬ{ 9D9+E A}M0L(-ű`ۗo/gǵ`HN&2 sl57*G)P8X-F-K[0.nW a!ŋARFB*ꑧ0!Q֝;h *.{wMW(h0@Ͳa%"*,\(*z+.aߐgWr}T z?D0'X}R(VKVi֒) Z[znj0.1Pn:*{!̗rm%áՅ1ab%X %$6"i'Sy\px. -b58r(KTcM+6~.*@nі$_,39VhG}hX~I  0T2e]HpYsQ"ySiʷ97:jf@˹D+ϹlJ8ɓ$ᴁ +QK`ϟ@}ʨl¶yF1Dd́4.eyWkzm`=4>'#&YH8& H+Eq3^gOqm#Y?z~-.Z=*@dJ7jcP#ChPB*bܫO-p{Kٶ/bs=j]P +CچIKgG&Nȷ"JsIy3G{*ae3_KOt9OF.ιgDvBtޕiIs!@GB,!E({ԅsRm(yg~.Szr8wŶ,!"TK2ɔ1Zлκ J5X.św M؈ -k%4QL"$u˧%_(ӉDFKpdJ`0{ݨ>6]ce_Ad =L;)k$ŃS%8V +N/% fuL,KT$xB) 2DQ^~ . +.lH,sėJI$@b0 e/뢵ٽhx5HE|_3p 6ڼVb OeH$3UNITe6 +JASajd +"iYjsSJb3""UyVc̱.(7 `[!Br0pu..v]KI +eɫ uX +|`(|pֻ 1!C,$0( R.X0Vxmu 4xC HvaIJ/zNCՊ\ +}AZ. NA* r/Xl_L` WI;wq]#/C&: (&.s%)~=T4\, e>|zm_'/sLf w6FaMx?~[D._*{o bG r9*zL_dɼoME/J7`ĜcO{-K_Tߜp|Y^#Is\”s[=E\GjٴfBΚ.0An$TCj]vCE>z{#\F]pԡ,A!Fp[%EcZi8R,AI.%fBx"RMIN`do E5V&lz'0j5H<_[lwHeGaz3TbK`|äҷ#v_l5?6:ZDϗYBhY =N Y^ GC(rY&Oc"~FLV~Je2G'Eɑ^FKJ On94|FV92 <ʔhɥ"xi,$.޽DdnFٙ$f9`(#ur +[N :&VGŧy2T İnd9e;=Ŋ5 WCF MkB HYFiH&>HE> Yʗcw+ ,T1z-$Xx7O""*3f?b$^t;<$U[cԴX4&?.)[ޫMяJ}uю*~ +tfK4{ kQs\+EN$ MIV>"^HYŸ]{B(9vr I97_/\$pE}OyvS;Ud÷1]a~"SpP +Hp:Cs;m+2Qvap„p8j}p@vd3/ +Nmլ߹9 8jw v'[ª/X8K¸Mu.,2x5sMGwHPH?3VZmvǢ>W:vI'֟ާV(v" "ڋ"lq*x-`R 4ߴc.BI *p]"c5Z0(qq'_US7ΡQ +HYJSb!dy6.226Bh1k=]<:Qxu .x? x!NLKXF^;PÆST%if[AP]hbU|x8ǖup#o ]E7ö`e oj@u=N׾w@pZ~m^[KZ: 8}Z-ԭ~$r @7ۿw־ؽbgW v=NҗvجxuŗW<qߺ;m>uWn+79=k[wgڽﶸVuzymu~\֣j9_ߑk+zWڑcǺuWW?֪ן[7Z{gl}ţŷxs:ϺۭCGロW_oZj{wC޹C9s׊{h/v6]㬹8]{1nW͵3޻bױb#P&~!^6{FBT&/'jX7TO R#v9DB-T +IW oHa02kkN1caO%F'%!R7VC'Ԟ~]yBnd6w/.Z_QG^ef Ҋ +m[xwQ/]Uʅm:6h#ʕ{R ǂ#o\g/r2J``kY!>CyČ۵XaL 1HG3MG^G9-M~F/C&.A1XaC8,, ?N^*'c5؋:N|Iժmv͏fW!$G;Yk$\\x/8LXNhOџTg{D^7C!_aI/#slУ:[z6_1uzȇES. +9u,ZuÓ`d+$N2|]G#d/ +yxG&u :E-A)St>_R6I?@z8IA>fˋ,/RG|k-> endobj 52 0 obj [/View/Design] endobj 53 0 obj <>>> endobj 42 0 obj <> endobj 41 0 obj [/ICCBased 54 0 R] endobj 54 0 obj <>stream +HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  + 2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= +x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 +N')].uJr + wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km +endstream endobj 50 0 obj <>stream +HSKN0 @=q>M V͂T|iKq3mj<8:.G};_0NWtT ! E~ 2:y9)@)Os:G%v,fJ`8NW {JI:AͰo 񷕴 Nړ56q +=&d(1T(BT6K?QrxwMN!R`-^sK1,zWzUgMq8OO[BrT V9Jm[u_vsSBN"q(`+^L\=ڑ,oK [,8KGN#ڣ +endstream endobj 49 0 obj <>stream +H\RAN0 @v$͕8*R4JxIqrzYt^ 0oq"S llx]-l+\Pm*% ~n7)XXHv +7wndۜvYFb+|+hUK&-jtS(QT@)hD9uT6A=U w?S9+d*)acיӭl$sU#u&sQrjQ-Js{SW6MX vk ['wPD\Hs0rU/]phxx%էW`Ή +endstream endobj 48 0 obj <>stream H\SKN0 @=q$͖f*`SYp}|#ٯyII/ û 3o pbYA:ӟ8#(Fn01i&\{W[sͪ.3.۷wOX^F~Ik>stream +endstream endobj 47 0 obj <>stream HLQn +!`B7V=mU!6~f^B΄iJrʸw3+B#FmHOhH-U=i 9mj0lPdya+&{v-ޟeb@! S,1~V & r t+73^,dKBv:t҄5?A c -endstream endobj 44 0 obj <>stream +endstream endobj 46 0 obj <>stream HLPI0 qJ@U=E^b93c'- 1d2D;JCkZXS6\)=k7V&G!{FOCbL/v\(Ɉ)\)3pi\z( I(qתv;JJ!3si- MA;ZzlT)`HOy"OfL -endstream endobj 43 0 obj <>stream +endstream endobj 45 0 obj <>stream HRKN0 @M V#4b*>0B(cןz4n?zN1$}_=NgBcZB>stream +endstream endobj 44 0 obj <>stream H\P;0 }w] DRJM(A?y ֛qThf;50'.|iahu"HGRVN(I][T"7suOSmBi+2L)[b.t̒B䷊!=y>stream +endstream endobj 43 0 obj <>stream HRKN0 @q> P SOQ B(N0 tóqFO=Zq?{NP `[KMK2Š= ++BR_,Sim?MYx;-ŴhR*FK Qn.YN{E^{1S~Ck-Y,_n/?8sLX7D^ee}/KǍr}Z]OKuzW -endstream endobj 38 0 obj <>stream +endstream endobj 40 0 obj <>stream HRN0 +qs% N ZD<ݕ}+fq<3\q:UƻpFgt} ^a3cQ>/Q+ܴq I\*.0b8pSw"LI " }Btz1 8?A$C.ʲ#Ī즱myX5:R֧mx0y×]bE/XÁ;$#( ¹$9t&6u^#[~IrtojI3| 0svq -endstream endobj 5 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 24.0 24.0]/Type/Page>> endobj 22 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 24.0 24.0]/Type/Page>> endobj 23 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 24.0 24.0]/Type/Page>> endobj 24 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 24.0 24.0]/Type/Page>> endobj 25 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 24.0 24.0]/Type/Page>> endobj 55 0 obj <>stream +endstream endobj 5 0 obj <>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 24.0 24.0]/Type/Page/PieceInfo<>>> endobj 22 0 obj <>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 24.0 24.0]/Type/Page/PieceInfo<>>> endobj 23 0 obj <>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 24.0 24.0]/Type/Page/PieceInfo<>>> endobj 24 0 obj <>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 24.0 24.0]/Type/Page/PieceInfo<>>> endobj 25 0 obj <>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 24.0 24.0]/Type/Page/PieceInfo<>>> endobj 59 0 obj <>stream HQK )mFqUM?֤vZyfxLBu:o?xbkRZ|0δKpN3& F– tQX'uiM+^؆څ9F$T+io7L#Ql.'2h_{)"W>dQÿDco`P$ -endstream endobj 54 0 obj <>stream +endstream endobj 58 0 obj <>stream H4O;0} _ͧ-*+1Te!E* \K8!XaR_0!ZH1\KfuiϖiB9MgqS;IW}(τªnm~c%%26ٗ ^"k_'"FoO#- -endstream endobj 53 0 obj <>stream +endstream endobj 57 0 obj <>stream H̑K0 D>\ l UAU dqW@N,yls0g4(+]"#&HQQ=(%, C|R9Z7[TNIJ/̶^J. `Z<+LhLD>S  `eMF -endstream endobj 52 0 obj <>stream +endstream endobj 56 0 obj <>stream HD10 E$NSڲSAUP!X@* \'-Ev,KvHGn ªi 0&LooLJEó8>AVT/#ya]JY./qȢyG€CW 0|,G -endstream endobj 51 0 obj <>stream +endstream endobj 55 0 obj <>stream HdSN0 +I<+qZЪ> .ݕ@=v,JĎǓa6xw?#\(~?^0̋yA* ,~! …aE$I>2M7 iF6P ⭄@u0Qjd-.l'O-%\i~/ } +58q{Vv87d"6?{NQ3~j -endstream endobj 31 0 obj [30 0 R] endobj 56 0 obj <> endobj xref -0 57 +endstream endobj 31 0 obj [30 0 R] endobj 60 0 obj <> endobj xref +0 61 0000000004 65535 f 0000000016 00000 n 0000000147 00000 n -0000036338 00000 n +0000037233 00000 n 0000000000 00000 f -0000219978 00000 n +0000224349 00000 n 0000000000 00000 f -0000042910 00000 n +0000000000 00000 f +0000041551 00000 n +0000041623 00000 n +0000041818 00000 n +0000043194 00000 n +0000108783 00000 n +0000174372 00000 n 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f @@ -1432,49 +1445,47 @@ endstream endobj 31 0 obj [30 0 R] endobj 56 0 obj <]>> +<<954E5E8A852A66429EE0631A765203DE>]>> startxref -223346 +227717 %%EOF diff --git a/datafiles/data/themes/default/graphics/tool/s_path_tools_circle.png b/datafiles/data/themes/default/graphics/tool/s_path_tools_circle.png new file mode 100644 index 000000000..e18ca5407 Binary files /dev/null and b/datafiles/data/themes/default/graphics/tool/s_path_tools_circle.png differ diff --git a/datafiles/data/themes/default/graphics/tool/s_path_tools_rectangle.png b/datafiles/data/themes/default/graphics/tool/s_path_tools_rectangle.png new file mode 100644 index 000000000..dafcdfd4f Binary files /dev/null and b/datafiles/data/themes/default/graphics/tool/s_path_tools_rectangle.png differ diff --git a/objects/o_dialog_add_node/Create_0.gml b/objects/o_dialog_add_node/Create_0.gml index 4a6c0af86..fbb5cf155 100644 --- a/objects/o_dialog_add_node/Create_0.gml +++ b/objects/o_dialog_add_node/Create_0.gml @@ -255,7 +255,7 @@ event_inherited(); search_string = ""; search_list = ds_list_create(); keyboard_lastchar = ""; - keyboard_string = ""; + KEYBOARD_STRING = ""; keyboard_lastkey = -1; tb_search = new textBox(TEXTBOX_INPUT.text, function(str) { diff --git a/objects/o_dialog_file_name/Create_0.gml b/objects/o_dialog_file_name/Create_0.gml index 30cefa799..300ff38e4 100644 --- a/objects/o_dialog_file_name/Create_0.gml +++ b/objects/o_dialog_file_name/Create_0.gml @@ -23,5 +23,5 @@ event_inherited(); }); TEXTBOX_ACTIVE = tb_name; - keyboard_string = ""; + KEYBOARD_STRING = ""; #endregion \ No newline at end of file diff --git a/objects/o_dialog_image_array_edit/Create_0.gml b/objects/o_dialog_image_array_edit/Create_0.gml index 14dc5923c..95bc5848a 100644 --- a/objects/o_dialog_image_array_edit/Create_0.gml +++ b/objects/o_dialog_image_array_edit/Create_0.gml @@ -15,7 +15,7 @@ event_inherited(); target = noone; function onResize() { - sp_content.resize(dialog_w - ui(150), dialog_h - ui(64)); + sp_content.resize(dialog_w - ui(150), dialog_h - ui(72)); } #endregion @@ -24,7 +24,7 @@ event_inherited(); dragging = -1; drag_spr = -1; - sp_content = new scrollPane(dialog_w - ui(150), dialog_h - ui(64), function(_y, _m) { + sp_content = new scrollPane(dialog_w - ui(150), dialog_h - ui(72), function(_y, _m) { if(!target) return 0; draw_clear_alpha(COLORS.dialog_array_edit_bg, 0); @@ -58,6 +58,7 @@ event_inherited(); draw_sprite_stretched(THEME.ui_panel_bg, 0, xx, yy, ww, hh); if(sHOVER && point_in_rectangle(_m[0], _m[1], xx, yy, xx + ww, yy + hh)) { + inb_hover = index; if(dragging == -1) draw_sprite_stretched_ext(THEME.ui_panel_active, 0, xx, yy, ww, hh, COLORS._main_accent, 1); @@ -70,17 +71,6 @@ event_inherited(); } } - if(dragging != -1 && dragging != index) { - draw_set_color(COLORS.dialog_array_edit_divider); - if(sHOVER && point_in_rectangle(_m[0], _m[1], xx - pad / 2, yy, xx + ww / 2, yy + hh)) { - inb_hover = index; - draw_line_round(xx - pad / 2, yy, xx - pad / 2, yy + hh, 4); - } else if(sHOVER && point_in_rectangle(_m[0], _m[1], xx + ww / 2, yy, xx + ww + pad / 2, yy + hh)) { - inb_hover = index + 1; - draw_line_round(xx + ww + pad / 2, yy, xx + ww + pad / 2, yy + hh, 4); - } - } - var spr = target.spr[index]; var spr_w = sprite_get_width(spr); var spr_h = sprite_get_height(spr); @@ -88,10 +78,8 @@ event_inherited(); var spr_x = xx + ww / 2 - spr_w * spr_s / 2; var spr_y = yy + hh / 2 - spr_h * spr_s / 2; - if(dragging == index) - draw_sprite_ext(spr, 0, spr_x, spr_y, spr_s, spr_s, 0, c_white, 0.5); - else - draw_sprite_ext(spr, 0, spr_x, spr_y, spr_s, spr_s, 0, c_white, 1); + var aa = dragging == -1? 1 : (dragging == index? 1 : 0.5); + draw_sprite_ext(spr, 0, spr_x, spr_y, spr_s, spr_s, 0, c_white, aa); draw_set_text(f_p2, fa_center, fa_top, COLORS._main_text); var path = arr[index]; @@ -107,15 +95,14 @@ event_inherited(); _h += ch; } - if(dragging != -1 && mouse_release(mb_left)) { + if(dragging != -1) { if(inb_hover != -1) { - var val = arr[dragging]; - array_delete(arr, dragging, 1); - array_insert(arr, dragging < inb_hover? inb_hover - 1 : inb_hover, val); - target.inputs[| 0].setValue(arr); - target.doUpdate(); + rearrange(dragging, inb_hover); + dragging = inb_hover; } - dragging = -1; + + if(mouse_release(mb_left)) + dragging = -1; } if(menu > -1) { @@ -131,4 +118,17 @@ event_inherited(); return _h; }) +#endregion + +#region function + function rearrange(oldindex, newindex) { + if(oldindex == newindex) return; + + var arr = target.inputs[| 0].getValue(); + var val = arr[oldindex]; + array_delete(arr, oldindex, 1); + array_insert(arr, newindex, val); + target.inputs[| 0].setValue(arr); + target.doUpdate(); + } #endregion \ No newline at end of file diff --git a/objects/o_dialog_image_array_edit/Draw_64.gml b/objects/o_dialog_image_array_edit/Draw_64.gml index 004d32c03..2a965636a 100644 --- a/objects/o_dialog_image_array_edit/Draw_64.gml +++ b/objects/o_dialog_image_array_edit/Draw_64.gml @@ -14,7 +14,7 @@ if !target exit; #region content var x0 = dialog_x + ui(20); var x1 = x0 + sp_content.w; - var y0 = dialog_y + ui(44); + var y0 = dialog_y + ui(56); var y1 = y0 + sp_content.h; draw_sprite_stretched(THEME.ui_panel_bg, 1, x0 - ui(6), y0 - ui(6), x1 - x0 + ui(12), y1 - y0 + ui(12)); diff --git a/objects/o_dialog_notifications/Create_0.gml b/objects/o_dialog_notifications/Create_0.gml index bc5ef89ce..cd980cd8b 100644 --- a/objects/o_dialog_notifications/Create_0.gml +++ b/objects/o_dialog_notifications/Create_0.gml @@ -35,8 +35,27 @@ event_inherited(); var _w = sp_noti.w - ui(12); var _h = ui(8) + string_height_ext(noti.txt, -1, txw) + ui(8); + var cc = COLORS.dialog_notification_bg; draw_sprite_stretched_ext(THEME.group_label, 0, 0, yy + ui(2), _w, _h - ui(4), COLORS.dialog_notification_bg, 1); + if(sHOVER && point_in_rectangle(_m[0], _m[1], 0, yy, _w, yy + _h - ui(4))) { + cc = COLORS.dialog_notification_bg_hover; + + if(noti.onClick != noone && mouse_press(mb_left, sFOCUS)) + noti.onClick(); + if(mouse_press(mb_right, sFOCUS)) { + var dia = dialogCall(o_dialog_menubox, mouse_mx + ui(8), mouse_my + ui(8)); + dia.noti = noti; + dia.setMenu([ + [ "Copy notification message", function() { + clipboard_set_text(o_dialog_menubox.noti.txt); + } ], + ]); + } + } + + draw_sprite_stretched_ext(THEME.group_label, 0, 0, yy + ui(2), _w, _h - ui(4), cc, 1); + if(noti.life_max > 0) { var _nwx = sp_noti.w - ui(12) - ui(40); var _nw = _nwx * noti.life / noti.life_max; @@ -65,22 +84,6 @@ event_inherited(); draw_set_text(f_p2, fa_left, fa_center, COLORS._main_text); draw_text_ext(tx + ui(4), yy + _h / 2, noti.txt, -1, txw); - if(sHOVER && point_in_rectangle(_m[0], _m[1], 0, yy, _w, yy + _h - ui(4))) { - draw_sprite_stretched_ext(THEME.node_active, 0, 0, yy + ui(2), _w, _h - ui(4), COLORS._main_accent, 1); - - if(noti.onClick != noone && mouse_press(mb_left, sFOCUS)) - noti.onClick(); - if(mouse_press(mb_right, sFOCUS)) { - var dia = dialogCall(o_dialog_menubox, mouse_mx + ui(8), mouse_my + ui(8)); - dia.noti = noti; - dia.setMenu([ - [ "Copy notification message", function() { - clipboard_set_text(o_dialog_menubox.noti.txt); - } ], - ]); - } - } - yy += _h; hh += _h; } diff --git a/objects/o_dialog_preference/Create_0.gml b/objects/o_dialog_preference/Create_0.gml index 39372febf..0ddaa80f3 100644 --- a/objects/o_dialog_preference/Create_0.gml +++ b/objects/o_dialog_preference/Create_0.gml @@ -63,12 +63,30 @@ event_inherited(); ds_list_add(pref_global, [ "Double click delay", "double_click_delay", - new slider(0, 100, 1, function(val) { + new slider(0, 1, 0.01, function(val) { PREF_MAP[? "double_click_delay"] = val; PREF_SAVE(); }) ]); + ds_list_add(pref_global, [ + "Keyboard hold start", + "keyboard_repeat_start", + new slider(0, 1, 0.01, function(val) { + PREF_MAP[? "keyboard_repeat_start"] = val; + PREF_SAVE(); + }) + ]); + + ds_list_add(pref_global, [ + "Keyboard repeat delay", + "keyboard_repeat_speed", + new slider(0, 1, 0.01, function(val) { + PREF_MAP[? "keyboard_repeat_speed"] = val; + PREF_SAVE(); + }) + ]); + ds_list_add(pref_global, [ "UI frame rate", "ui_framerate", diff --git a/objects/o_main/Create_0.gml b/objects/o_main/Create_0.gml index 48527b09e..0431d02ac 100644 --- a/objects/o_main/Create_0.gml +++ b/objects/o_main/Create_0.gml @@ -20,15 +20,19 @@ draw_set_circle_precision(64); globalvar CURSOR, UPDATE, TOOLTIP, DIALOG_DEPTH_HOVER; - globalvar RENDER_STACK; + globalvar RENDER_STACK, KEYBOARD_STRING; DIALOG_DEPTH_HOVER = 0; UPDATE = RENDER_TYPE.none; CURSOR = cr_default; TOOLTIP = ""; + KEYBOARD_STRING = ""; RENDER_STACK = ds_stack_create(); _cursor = CURSOR; dc_check = 0; + kb_time = 0; + kb_hold = false; + kb_hkey = 0; //display_set_timing_method(tm_sleep); @@ -88,6 +92,9 @@ case ".gif" : Node_create_Image_gif_path(PANEL_GRAPH.mouse_grid_x, PANEL_GRAPH.mouse_grid_y, path); break; + case ".obj" : + Node_create_3D_Obj_path(PANEL_GRAPH.mouse_grid_x, PANEL_GRAPH.mouse_grid_y, path); + break; case ".json" : case ".pxc" : if(_new) NEW(); diff --git a/objects/o_main/KeyRelease_1.gml b/objects/o_main/KeyRelease_1.gml new file mode 100644 index 000000000..0412ac559 --- /dev/null +++ b/objects/o_main/KeyRelease_1.gml @@ -0,0 +1,5 @@ +/// @description +kb_time = 0; +kb_hold = false; +kb_hkey = ""; +keyboard_lastchar = ""; \ No newline at end of file diff --git a/objects/o_main/Keyboard_1.gml b/objects/o_main/Keyboard_1.gml new file mode 100644 index 000000000..16ed90ac0 --- /dev/null +++ b/objects/o_main/Keyboard_1.gml @@ -0,0 +1,24 @@ +/// @description +var trigger = false; +kb_time += DELTA_TIME; +if(kb_hkey == keyboard_lastchar && kb_hkey != "") { + if(kb_hold && kb_time >= PREF_MAP[? "keyboard_repeat_speed"]) { + trigger = true; + kb_time = 0; + } else if(!kb_hold && kb_time >= PREF_MAP[? "keyboard_repeat_start"]) { + trigger = true; + kb_time = 0; + kb_hold = true; + } +} else + trigger = true; + +kb_hkey = keyboard_lastchar; + +if(!trigger) exit; + +if(keyboard_check(vk_backspace)) { + KEYBOARD_STRING = string_copy(KEYBOARD_STRING, 1, string_length(KEYBOARD_STRING) - 1); +} else { + KEYBOARD_STRING += keyboard_lastchar; +} \ No newline at end of file diff --git a/objects/o_main/Step_0.gml b/objects/o_main/Step_0.gml index dc19edf93..89d4853c5 100644 --- a/objects/o_main/Step_0.gml +++ b/objects/o_main/Step_0.gml @@ -10,7 +10,9 @@ #region animation if(ANIMATOR.is_playing) { - ANIMATOR.real_frame += ANIMATOR.framerate * (delta_time / 1000000); + var fr = ANIMATOR.real_frame + ANIMATOR.framerate * (delta_time / 1000000); + if(fr <= ANIMATOR.real_frame + 1) + ANIMATOR.real_frame = fr; if(round(ANIMATOR.real_frame) >= ANIMATOR.frames_total) { switch(ANIMATOR.playback) { case ANIMATOR_END.loop : @@ -26,13 +28,9 @@ ANIMATOR.setFrame(ANIMATOR.real_frame); } - ANIMATOR.frame_progress = false; var _c = ANIMATOR.current_frame; ANIMATOR.current_frame = round(ANIMATOR.real_frame); - - if(_c != ANIMATOR.current_frame) { - ANIMATOR.frame_progress = true; - } + ANIMATOR.frame_progress = _c != ANIMATOR.current_frame; #endregion #region hotkey diff --git a/objects/o_main/Step_1.gml b/objects/o_main/Step_1.gml index 6b7e63e0d..06392c8e1 100644 --- a/objects/o_main/Step_1.gml +++ b/objects/o_main/Step_1.gml @@ -44,12 +44,11 @@ if(dc_check > 0) { DOUBLE_CLICK = true; dc_check = 0; - } else { - dc_check = PREF_MAP[? "double_click_delay"]; - } + } else + dc_check = PREF_MAP[? "double_click_delay"]; } - dc_check--; + dc_check -= DELTA_TIME; #endregion #region step diff --git a/objects/o_main/o_main.yy b/objects/o_main/o_main.yy index db3bb3919..dae7c4ccd 100644 --- a/objects/o_main/o_main.yy +++ b/objects/o_main/o_main.yy @@ -35,6 +35,8 @@ {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","isDnD":false,"eventNum":2,"eventType":2,"collisionObjectId":null,}, {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","isDnD":false,"eventNum":3,"eventType":2,"collisionObjectId":null,}, {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","isDnD":false,"eventNum":3,"eventType":7,"collisionObjectId":null,}, + {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","isDnD":false,"eventNum":1,"eventType":5,"collisionObjectId":null,}, + {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","isDnD":false,"eventNum":1,"eventType":10,"collisionObjectId":null,}, ], "properties": [], "overriddenProperties": [], diff --git a/scripts/_3D/_3D.gml b/scripts/_3D/_3D.gml index e2528ccdd..9064b93a3 100644 --- a/scripts/_3D/_3D.gml +++ b/scripts/_3D/_3D.gml @@ -1,11 +1,17 @@ #region setup - globalvar FORMAT_PT, PRIMITIVES; + globalvar PRIMITIVES, FORMAT_PT, FORMAT_PNT; PRIMITIVES = ds_map_create(); vertex_format_begin(); vertex_format_add_position_3d(); vertex_format_add_texcoord(); FORMAT_PT = vertex_format_end(); + + vertex_format_begin(); + vertex_format_add_position_3d(); + vertex_format_add_normal(); + vertex_format_add_texcoord(); + FORMAT_PNT = vertex_format_end(); #endregion #region plane @@ -26,61 +32,76 @@ vertex_end(VB); vertex_freeze(VB); PRIMITIVES[? "plane"] = VB; + + var VB = vertex_create_buffer(); + vertex_begin(VB, FORMAT_PNT); + + vertex_add_pnt(VB, [_1, _0, 0], [0, 0, 1], [1, 0]); + vertex_add_pnt(VB, [_0, _0, 0], [0, 0, 1], [0, 0]); + vertex_add_pnt(VB, [_1, _1, 0], [0, 0, 1], [1, 1]); + + vertex_add_pnt(VB, [_1, _1, 0], [0, 0, 1], [1, 1]); + vertex_add_pnt(VB, [_0, _0, 0], [0, 0, 1], [0, 0]); + vertex_add_pnt(VB, [_0, _1, 0], [0, 0, 1], [0, 1]); + + vertex_end(VB); + vertex_freeze(VB); + PRIMITIVES[? "plane_normal"] = VB; #endregion #region cube var VB = vertex_create_buffer(); - vertex_begin(VB, FORMAT_PT); + vertex_begin(VB, FORMAT_PNT); - vertex_add_pt(VB, [_1, _0, _0], [1, 0]); - vertex_add_pt(VB, [_0, _0, _0], [0, 0]); - vertex_add_pt(VB, [_1, _1, _0], [1, 1]); + vertex_add_pnt(VB, [_1, _0, _0], [0, 0, -1], [1, 0]); + vertex_add_pnt(VB, [_0, _0, _0], [0, 0, -1], [0, 0]); + vertex_add_pnt(VB, [_1, _1, _0], [0, 0, -1], [1, 1]); - vertex_add_pt(VB, [_1, _1, _0], [1, 1]); - vertex_add_pt(VB, [_0, _0, _0], [0, 0]); - vertex_add_pt(VB, [_0, _1, _0], [0, 1]); + vertex_add_pnt(VB, [_1, _1, _0], [0, 0, -1], [1, 1]); + vertex_add_pnt(VB, [_0, _0, _0], [0, 0, -1], [0, 0]); + vertex_add_pnt(VB, [_0, _1, _0], [0, 0, -1], [0, 1]); - vertex_add_pt(VB, [_1, _0, _1], [1, 0]); - vertex_add_pt(VB, [_0, _0, _1], [0, 0]); - vertex_add_pt(VB, [_1, _1, _1], [1, 1]); + vertex_add_pnt(VB, [_1, _0, _1], [0, 0, 1], [1, 0]); + vertex_add_pnt(VB, [_0, _0, _1], [0, 0, 1], [0, 0]); + vertex_add_pnt(VB, [_1, _1, _1], [0, 0, 1], [1, 1]); - vertex_add_pt(VB, [_1, _1, _1], [1, 1]); - vertex_add_pt(VB, [_0, _0, _1], [0, 0]); - vertex_add_pt(VB, [_0, _1, _1], [0, 1]); + vertex_add_pnt(VB, [_1, _1, _1], [0, 0, 1], [1, 1]); + vertex_add_pnt(VB, [_0, _0, _1], [0, 0, 1], [0, 0]); + vertex_add_pnt(VB, [_0, _1, _1], [0, 0, 1], [0, 1]); - vertex_add_pt(VB, [_1, _0, _0], [1, 0]); - vertex_add_pt(VB, [_0, _0, _0], [0, 0]); - vertex_add_pt(VB, [_1, _0, _1], [1, 1]); - - vertex_add_pt(VB, [_1, _0, _1], [1, 1]); - vertex_add_pt(VB, [_0, _0, _0], [0, 0]); - vertex_add_pt(VB, [_0, _0, _1], [0, 1]); + vertex_add_pnt(VB, [_1, _0, _0], [0, 1, 0], [1, 0]); + vertex_add_pnt(VB, [_0, _0, _0], [0, 1, 0], [0, 0]); + vertex_add_pnt(VB, [_1, _0, _1], [0, 1, 0], [1, 1]); + + vertex_add_pnt(VB, [_1, _0, _1], [0, 1, 0], [1, 1]); + vertex_add_pnt(VB, [_0, _0, _0], [0, 1, 0], [0, 0]); + vertex_add_pnt(VB, [_0, _0, _1], [0, 1, 0], [0, 1]); - vertex_add_pt(VB, [_1, _1, _0], [1, 0]); - vertex_add_pt(VB, [_0, _1, _0], [0, 0]); - vertex_add_pt(VB, [_1, _1, _1], [1, 1]); + vertex_add_pnt(VB, [_1, _1, _0], [0, -1, 0], [1, 0]); + vertex_add_pnt(VB, [_0, _1, _0], [0, -1, 0], [0, 0]); + vertex_add_pnt(VB, [_1, _1, _1], [0, -1, 0], [1, 1]); - vertex_add_pt(VB, [_1, _1, _1], [1, 1]); - vertex_add_pt(VB, [_0, _1, _0], [0, 0]); - vertex_add_pt(VB, [_0, _1, _1], [0, 1]); + vertex_add_pnt(VB, [_1, _1, _1], [0, -1, 0], [1, 1]); + vertex_add_pnt(VB, [_0, _1, _0], [0, -1, 0], [0, 0]); + vertex_add_pnt(VB, [_0, _1, _1], [0, -1, 0], [0, 1]); - vertex_add_pt(VB, [_0, _1, _0], [1, 0]); - vertex_add_pt(VB, [_0, _0, _0], [0, 0]); - vertex_add_pt(VB, [_0, _1, _1], [1, 1]); - - vertex_add_pt(VB, [_0, _1, _1], [1, 1]); - vertex_add_pt(VB, [_0, _0, _0], [0, 0]); - vertex_add_pt(VB, [_0, _0, _1], [0, 1]); - - vertex_add_pt(VB, [_1, _1, _0], [1, 0]); - vertex_add_pt(VB, [_1, _0, _0], [0, 0]); - vertex_add_pt(VB, [_1, _1, _1], [1, 1]); - - vertex_add_pt(VB, [_1, _1, _1], [1, 1]); - vertex_add_pt(VB, [_1, _0, _0], [0, 0]); - vertex_add_pt(VB, [_1, _0, _1], [0, 1]); + vertex_add_pnt(VB, [_0, _1, _0], [1, 0, 0], [1, 0]); + vertex_add_pnt(VB, [_0, _0, _0], [1, 0, 0], [0, 0]); + vertex_add_pnt(VB, [_0, _1, _1], [1, 0, 0], [1, 1]); + + vertex_add_pnt(VB, [_0, _1, _1], [1, 0, 0], [1, 1]); + vertex_add_pnt(VB, [_0, _0, _0], [1, 0, 0], [0, 0]); + vertex_add_pnt(VB, [_0, _0, _1], [1, 0, 0], [0, 1]); + + vertex_add_pnt(VB, [_1, _1, _0], [-1, 0, 0], [1, 0]); + vertex_add_pnt(VB, [_1, _0, _0], [-1, 0, 0], [0, 0]); + vertex_add_pnt(VB, [_1, _1, _1], [-1, 0, 0], [1, 1]); + + vertex_add_pnt(VB, [_1, _1, _1], [-1, 0, 0], [1, 1]); + vertex_add_pnt(VB, [_1, _0, _0], [-1, 0, 0], [0, 0]); + vertex_add_pnt(VB, [_1, _0, _1], [-1, 0, 0], [0, 1]); vertex_end(VB); vertex_freeze(VB); diff --git a/scripts/animation_controller/animation_controller.gml b/scripts/animation_controller/animation_controller.gml index e2de9b36f..4fafe7b74 100644 --- a/scripts/animation_controller/animation_controller.gml +++ b/scripts/animation_controller/animation_controller.gml @@ -10,9 +10,13 @@ playback = ANIMATOR_END.loop; static setFrame = function(frame) { + var _c = current_frame; frame = clamp(frame, 0, frames_total - 1); real_frame = frame; current_frame = round(frame); + + if(_c != current_frame) + frame_progress = true; } } #endregion diff --git a/scripts/append_function/append_function.gml b/scripts/append_function/append_function.gml index 01c3e945a..cb4d0f9c8 100644 --- a/scripts/append_function/append_function.gml +++ b/scripts/append_function/append_function.gml @@ -1,14 +1,14 @@ function APPEND(_path) { APPENDING = true; + var log = false; if(_path == "") return; + var _map = json_load(_path); - var file = file_text_open_read(_path); - var load_str = ""; - while(!file_text_eof(file)) { - load_str += file_text_readln(file); + if(_map == -1) { + printlog("Decode error"); + return } - var _map = json_decode(load_str); if(ds_map_exists(_map, "version")) { var _v = _map[? "version"]; @@ -27,12 +27,14 @@ function APPEND(_path) { ds_queue_clear(CONNECTION_CONFLICT); ds_map_clear(APPEND_MAP); + var t = current_time; for(var i = 0; i < ds_list_size(_node_list); i++) { var _node = nodeLoad(_node_list[| i], true); if(_node) ds_list_add(appended_list, _node); } - file_text_close(file); + printlog("Load time: " + string(current_time - t)); + t = current_time; try { for(var i = 0; i < ds_list_size(appended_list); i++) { @@ -45,6 +47,8 @@ function APPEND(_path) { } catch(e) { log_warning("APPEND, node", e.longMessage); } + printlog("Load group time: " + string(current_time - t)); + t = current_time; try { for(var i = 0; i < ds_list_size(appended_list); i++) @@ -52,15 +56,8 @@ function APPEND(_path) { } catch(e) { log_warning("APPEND, deserialize", e.longMessage); } - - try { - for(var i = 0; i < ds_list_size(appended_list); i++) { - if(!variable_struct_exists(appended_list[| i], "collectionDeserialize")) continue; - appended_list[| i].collectionDeserialize(true); - } - } catch(e) { - log_warning("APPEND, deserialize", e.longMessage); - } + printlog("Deserialize time: " + string(current_time - t)); + t = current_time; try { for(var i = 0; i < ds_list_size(appended_list); i++) @@ -72,6 +69,8 @@ function APPEND(_path) { } catch(e) { log_warning("APPEND, connect", e.longMessage); } + printlog("Connect time: " + string(current_time - t)); + t = current_time; try { for(var i = 0; i < ds_list_size(appended_list); i++) @@ -79,6 +78,8 @@ function APPEND(_path) { } catch(e) { log_warning("APPEND, update", e.longMessage); } + printlog("Update time: " + string(current_time - t)); + t = current_time; ds_list_destroy(appended_list); @@ -101,11 +102,13 @@ function APPEND(_path) { } if(!ds_queue_empty(CONNECTION_CONFLICT)) - log_warning("APPEND", "Some connection(s) is unsolved. This may caused by render node not being update properly, or image path is broken."); + log_warning("APPEND", "Some connection(s) is unresolved. This may caused by render node not being update properly, or image path is broken."); } catch(e) { log_warning("APPEND, Conflict solver error : ", e.longMessage); } } + printlog("Conflict time: " + string(current_time - t)); + t = current_time; APPENDING = false; PANEL_ANIMATION.updatePropertyList(); diff --git a/scripts/array_functions/array_functions.gml b/scripts/array_functions/array_functions.gml index bd961105c..ed9bbc753 100644 --- a/scripts/array_functions/array_functions.gml +++ b/scripts/array_functions/array_functions.gml @@ -21,4 +21,9 @@ function array_remove(arr, val) { if(!array_exists(arr, val)) return; var ind = array_find(arr, val); array_delete(arr, ind, 1); +} + +function array_push_unique(arr, val) { + if(array_exists(arr, val)) return; + array_push(arr, val); } \ No newline at end of file diff --git a/scripts/buttonColor/buttonColor.gml b/scripts/buttonColor/buttonColor.gml index c6691f017..19ca1f865 100644 --- a/scripts/buttonColor/buttonColor.gml +++ b/scripts/buttonColor/buttonColor.gml @@ -24,16 +24,16 @@ function buttonColorClass(_onApply) constructor { b_picker.active = active; b_picker.draw(_x + _w - ui(32), _y + _h / 2 - ui(16), ui(32), ui(32), _m, THEME.button_hide); - if(keyboard_check_pressed(vk_alt)) { - onColorPick(); - is_picking = true; - } - if(is_picking) { - if(keyboard_check_released(vk_alt)) { - instance_destroy(o_dialog_color_selector); - is_picking = false; - } - } + //if(keyboard_check_pressed(vk_alt)) { + // onColorPick(); + // is_picking = true; + //} + //if(is_picking) { + // if(keyboard_check_released(vk_alt)) { + // instance_destroy(o_dialog_color_selector); + // is_picking = false; + // } + //} var _cw = _w - ui(40); var click = false; diff --git a/scripts/buttonGroup/buttonGroup.gml b/scripts/buttonGroup/buttonGroup.gml index 876c4ec10..ca686d41c 100644 --- a/scripts/buttonGroup/buttonGroup.gml +++ b/scripts/buttonGroup/buttonGroup.gml @@ -15,7 +15,7 @@ function buttonGroupClass(_data, _onClick) constructor { sb_small = new scrollBox(data, _onClick); - static draw = function(_x, _y, _w, _h, _seleting, _m, _rx = 0, _ry = 0) { + static draw = function(_x, _y, _w, _h, _selecting, _m, _rx = 0, _ry = 0) { var amo = array_length(data); var ww = _w / amo; @@ -34,7 +34,7 @@ function buttonGroupClass(_data, _onClick) constructor { var bx = _x + ww * i; var spr = i == 0 ? THEME.button_left : (i == amo - 1? THEME.button_right : THEME.button_middle); - if(_seleting == i) { + if(_selecting == i) { draw_sprite_stretched(spr, 2, bx, _y, ww, _h); } else if(buttons[i].draw(bx, _y, ww, _h, _m, spr)) { onClick(i); @@ -50,7 +50,7 @@ function buttonGroupClass(_data, _onClick) constructor { } else { sb_small.hover = hover; sb_small.active = active; - sb_small.draw(_x, _y, _w, _h, _seleting, _m, _rx, _ry); + sb_small.draw(_x, _y, _w, _h, data[_selecting], _m, _rx, _ry); } hover = false; diff --git a/scripts/color_function/color_function.gml b/scripts/color_function/color_function.gml new file mode 100644 index 000000000..3bf3f3f82 --- /dev/null +++ b/scripts/color_function/color_function.gml @@ -0,0 +1,10 @@ +function colorFromRGBArray(arr) { + var r = round(real(arr[0]) * 255); + var g = round(real(arr[1]) * 255); + var b = round(real(arr[2]) * 255); + return make_color_rgb(r, g, b); +} + +function colorArrayFromReal(clr) { + return [color_get_red(clr) / 255, color_get_green(clr) / 255, color_get_blue(clr) / 255 ]; +} \ No newline at end of file diff --git a/scripts/color_function/color_function.yy b/scripts/color_function/color_function.yy new file mode 100644 index 000000000..63a989d8b --- /dev/null +++ b/scripts/color_function/color_function.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "color_function", + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "value", + "path": "folders/functions/value.yy", + }, +} \ No newline at end of file diff --git a/scripts/curveBox/curveBox.gml b/scripts/curveBox/curveBox.gml index b7c806858..487625ddd 100644 --- a/scripts/curveBox/curveBox.gml +++ b/scripts/curveBox/curveBox.gml @@ -40,7 +40,8 @@ function curveBox(_onModify) constructor { if(node_dragging != -1) { var _my = -((_m[1] - _y) / curve_h * drag_range - drag_max); - + _my = clamp(_my, 0, 1); + _data[node_dragging] = _my; if(mouse_release(mb_left)) { diff --git a/scripts/d3_vector/d3_vector.gml b/scripts/d3_vector/d3_vector.gml new file mode 100644 index 000000000..cd0da5f7f --- /dev/null +++ b/scripts/d3_vector/d3_vector.gml @@ -0,0 +1,17 @@ +function d3_normalize(vec) { + var vx = vec[0], vy = vec[1], vz = vec[2]; + var mag = sqrt(vx * vx + vy * vy + vz * vz); + vec[0] = vx / mag; + vec[1] = vy / mag; + vec[2] = vz / mag; + + return vec; +} + +function d3_cross_product(a, b, result) { + var ax = a[0], ay = a[1], az = a[2], + bx = b[0], by = b[1], bz = b[2]; + result[@ 0] = ay * bz - az * by; + result[@ 1] = az * bx - ax * bz; + result[@ 2] = ax * by - ay * bx; +} diff --git a/scripts/d3_vector/d3_vector.yy b/scripts/d3_vector/d3_vector.yy new file mode 100644 index 000000000..77898d4eb --- /dev/null +++ b/scripts/d3_vector/d3_vector.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "d3_vector", + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "3d", + "path": "folders/functions/3d.yy", + }, +} \ No newline at end of file diff --git a/scripts/draw_surface_blend/draw_surface_blend.gml b/scripts/draw_surface_blend/draw_surface_blend.gml index ef3d34420..f03898e1c 100644 --- a/scripts/draw_surface_blend/draw_surface_blend.gml +++ b/scripts/draw_surface_blend/draw_surface_blend.gml @@ -1,10 +1,12 @@ globalvar BLEND_TYPES; -BLEND_TYPES = [ "Normal", "Add", "Subtract", "Multiply", "Multiply keep Alpha", "Screen", "Screen keep Alpha", "Maximum", "Minimum" ]; +BLEND_TYPES = [ "Normal", "Add", "Subtract", "Subtract keep alpha", "Multiply", "Multiply keep Alpha", "Screen", "Screen keep Alpha", "Contrast", "Overlay", "Maximum", "Minimum" ]; enum BLEND_MODE { normal, add, + subtract, + subtract_alpha, multiply, multiply_alpha, @@ -12,6 +14,9 @@ enum BLEND_MODE { screen, screen_alpha, + contrast, + overlay, + maxx, minn, } @@ -25,10 +30,13 @@ function draw_surface_blend(background, foreground, blend, alpha, _mask = 0, til case BLEND_MODE.normal : sh = sh_blend_normal break; case BLEND_MODE.add : sh = sh_blend_add; break; case BLEND_MODE.subtract : sh = sh_blend_subtract; break; + case BLEND_MODE.subtract_alpha : sh = sh_blend_subtract_alpha; break; case BLEND_MODE.multiply : sh = sh_blend_multiply; break; case BLEND_MODE.multiply_alpha : sh = sh_blend_multiply_alpha; break; case BLEND_MODE.screen : sh = sh_blend_screen; break; case BLEND_MODE.screen_alpha : sh = sh_blend_screen_alpha; break; + case BLEND_MODE.contrast : sh = sh_blend_contrast; break; + case BLEND_MODE.overlay : sh = sh_blend_overlay; break; case BLEND_MODE.maxx : sh = sh_blend_max; break; case BLEND_MODE.minn : sh = sh_blend_min; break; } diff --git a/scripts/ds_priority/ds_priority.gml b/scripts/ds_priority/ds_priority.gml new file mode 100644 index 000000000..93f959f45 --- /dev/null +++ b/scripts/ds_priority/ds_priority.gml @@ -0,0 +1,13 @@ +function ds_priority_to_list(priority, asc = true) { + var l = ds_list_create(); + var amo = ds_priority_size(priority); + + repeat(amo) { + if(asc) + ds_list_add(l, ds_priority_delete_min(priority)); + else + ds_list_add(l, ds_priority_delete_max(priority)); + } + + return l; +} \ No newline at end of file diff --git a/scripts/ds_priority/ds_priority.yy b/scripts/ds_priority/ds_priority.yy new file mode 100644 index 000000000..af0a14be0 --- /dev/null +++ b/scripts/ds_priority/ds_priority.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "ds_priority", + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "ds", + "path": "folders/functions/ds.yy", + }, +} \ No newline at end of file diff --git a/scripts/globals/globals.gml b/scripts/globals/globals.gml index cf3cccce1..6dcfa770a 100644 --- a/scripts/globals/globals.gml +++ b/scripts/globals/globals.gml @@ -74,6 +74,8 @@ #macro sFOCUS FOCUS == self #macro sHOVER HOVER == self + #macro DELTA_TIME delta_time / 1000000 + #region color #macro c_ui_blue_dkblack $251919 #macro c_ui_blue_mdblack $2c1e1e @@ -107,6 +109,7 @@ #macro PIXEL_SURFACE surface_create_valid(1, 1) #macro print show_debug_message + #macro printlog if(log) show_debug_message #endregion #region presets diff --git a/scripts/json_file/json_file.gml b/scripts/json_file/json_file.gml index 6393f98ee..2ddadfbdb 100644 --- a/scripts/json_file/json_file.gml +++ b/scripts/json_file/json_file.gml @@ -1,5 +1,5 @@ function json_load(path) { - if(!file_exists(path)) return {}; + if(!file_exists(path)) return noone; var f = file_text_open_read(path); var s = file_text_read_all(f); @@ -15,4 +15,11 @@ function json_save(path, struct) { var f = file_text_open_write(path); file_text_write_string(f, s); file_text_close(f); +} + +function file_text_read_all(file) { + var s = ""; + while(!file_text_eof(file)) + s += file_text_readln(file); + return s; } \ No newline at end of file diff --git a/scripts/load_function/load_function.gml b/scripts/load_function/load_function.gml index a5422b795..7b7abb6f2 100644 --- a/scripts/load_function/load_function.gml +++ b/scripts/load_function/load_function.gml @@ -106,22 +106,13 @@ function LOAD_PATH(path, readonly = false) { log_warning("LOAD, deserialize", e.longMessage); } - try { - for(var i = 0; i < ds_list_size(create_list); i++) { - if(!variable_struct_exists(create_list[| i], "collectionDeserialize")) continue; - create_list[| i].collectionDeserialize(); - } - } catch(e) { - log_warning("LOAD, deserialize", e.longMessage); - } - try { for(var i = 0; i < ds_list_size(create_list); i++) create_list[| i].preConnect(); for(var i = 0; i < ds_list_size(create_list); i++) create_list[| i].connect(); for(var i = 0; i < ds_list_size(create_list); i++) - create_list[| i].postConnect(); + create_list[| i].postConnect(); } catch(e) { log_warning("LOAD, connect", e.longMessage); } diff --git a/scripts/mtl_reader/mtl_reader.gml b/scripts/mtl_reader/mtl_reader.gml new file mode 100644 index 000000000..2ec257165 --- /dev/null +++ b/scripts/mtl_reader/mtl_reader.gml @@ -0,0 +1,41 @@ +function MTLmaterial(name) constructor { + self.name = name; + self.refc = 0; + self.diff = 0; + self.spec = 0; + + self.refc_path = ""; + self.diff_path = ""; + self.spec_path = ""; +} + +function readMtl(path) { + if(!file_exists(path)) return []; + + var mat = []; + var cur_mat = noone; + + var file = file_text_open_read(path); + while(!file_text_eof(file)) { + var l = file_text_readln(file); + l = string_replace_all(l, "\n", ""); + + var sep = string_splice(l, " "); + if(array_length(sep) == 0 || sep[0] == "") continue; + + switch(sep[0]) { + case "newmtl" : + cur_mat = new MTLmaterial(sep[1]); + array_push(mat, cur_mat); + break; + case "Ka" : cur_mat.refc = colorFromRGBArray([sep[1], sep[2], sep[3]]); break; + case "Kd" : cur_mat.diff = colorFromRGBArray([sep[1], sep[2], sep[3]]); break; + case "Ks" : cur_mat.spec = colorFromRGBArray([sep[1], sep[2], sep[3]]); break; + case "map_Ka": cur_mat.refc_path = filename_dir(path) + "/" + sep[1]; break; + case "map_Kd": cur_mat.diff_path = filename_dir(path) + "/" + sep[1]; break; + case "map_Ks": cur_mat.spec_path = filename_dir(path) + "/" + sep[1]; break; + } + } + + return mat; +} \ No newline at end of file diff --git a/scripts/mtl_reader/mtl_reader.yy b/scripts/mtl_reader/mtl_reader.yy new file mode 100644 index 000000000..6c45f848e --- /dev/null +++ b/scripts/mtl_reader/mtl_reader.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "mtl_reader", + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "importers", + "path": "folders/functions/importers.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_2d_light/node_2d_light.gml b/scripts/node_2d_light/node_2d_light.gml index 4991244cf..6dd12cfd7 100644 --- a/scripts/node_2d_light/node_2d_light.gml +++ b/scripts/node_2d_light/node_2d_light.gml @@ -59,7 +59,7 @@ function Node_2D_light(_x, _y) : Node_Processor(_x, _y) constructor { ["Render", false], 11, 10 ]; - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { var _shape = inputs[| 1].getValue(); switch(_shape) { @@ -68,14 +68,14 @@ function Node_2D_light(_x, _y) : Node_Processor(_x, _y) constructor { var px = _x + pos[0] * _s; var py = _y + pos[1] * _s; - inputs[| 2].drawOverlay(_active, _x, _y, _s, _mx, _my); - inputs[| 3].drawOverlay(_active, px, py, _s, _mx, _my); + inputs[| 2].drawOverlay(active, _x, _y, _s, _mx, _my); + inputs[| 3].drawOverlay(active, px, py, _s, _mx, _my); break; case LIGHT_SHAPE_2D.line : case LIGHT_SHAPE_2D.line_asym : case LIGHT_SHAPE_2D.spot : - inputs[| 6].drawOverlay(_active, _x, _y, _s, _mx, _my); - inputs[| 7].drawOverlay(_active, _x, _y, _s, _mx, _my); + inputs[| 6].drawOverlay(active, _x, _y, _s, _mx, _my); + inputs[| 7].drawOverlay(active, _x, _y, _s, _mx, _my); break; } } diff --git a/scripts/node_3D_obj/node_3D_obj.gml b/scripts/node_3D_obj/node_3D_obj.gml index ce51e6219..9672e5c30 100644 --- a/scripts/node_3D_obj/node_3D_obj.gml +++ b/scripts/node_3D_obj/node_3D_obj.gml @@ -4,9 +4,26 @@ function Node_create_3D_Obj(_x, _y) { return node; } +function Node_create_3D_Obj_path(_x, _y, path) { + if(!file_exists(path)) return noone; + + var node = new Node_3D_Obj(_x, _y); + node.inputs[| 0].setValue(path); + node.updateObj(); + node.doUpdate(); + + ds_list_add(PANEL_GRAPH.nodes_list, node); + return node; +} + function Node_3D_Obj(_x, _y) : Node(_x, _y) constructor { name = "3D Obj"; + uniVertex_lightFor = shader_get_uniform(sh_vertex_pnt_light, "u_LightForward"); + uniLightAmb = shader_get_uniform(sh_vertex_pnt_light, "u_AmbientLight"); + uniLightClr = shader_get_uniform(sh_vertex_pnt_light, "u_LightColor"); + uniLightInt = shader_get_uniform(sh_vertex_pnt_light, "u_LightIntensity"); + inputs[| 0] = nodeValue(0, "Path", self, JUNCTION_CONNECT.input, VALUE_TYPE.path, "") .setDisplay(VALUE_DISPLAY.path_load, [ "*.obj", "" ]); @@ -19,19 +36,34 @@ function Node_3D_Obj(_x, _y) : Node(_x, _y) constructor { inputs[| 2] = nodeValue(2, "Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, def_surf_size2) .setDisplay(VALUE_DISPLAY.vector); - inputs[| 3] = nodeValue(3, "Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0 ]) + inputs[| 3] = nodeValue(3, "Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ def_surf_size / 2, def_surf_size / 2 ]) .setDisplay(VALUE_DISPLAY.vector); inputs[| 4] = nodeValue(4, "Rotation", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 180 ]) .setDisplay(VALUE_DISPLAY.vector); - inputs[| 5] = nodeValue(5, "Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1 ]) + inputs[| 5] = nodeValue(5, "Render scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1 ]) .setDisplay(VALUE_DISPLAY.vector); + inputs[| 6] = nodeValue(6, "Light direction", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0) + .setDisplay(VALUE_DISPLAY.rotation); + + inputs[| 7] = nodeValue(7, "Light height", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.5) + .setDisplay(VALUE_DISPLAY.slider, [-1, 1, 0.01]); + + inputs[| 8] = nodeValue(8, "Light intensity", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1) + .setDisplay(VALUE_DISPLAY.slider, [0, 1, 0.01]); + + inputs[| 9] = nodeValue(9, "Light color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_white); + inputs[| 10] = nodeValue(10, "Ambient color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_grey); + input_display_list = [ 2, ["Geometry", false], 0, 1, - ["Transform", false], 3, 4, 5 + ["Transform", false], 3, 4, 5, + ["Textures", true], + ["Light", false], 6, 7, 8, 9, 10, ]; + input_length = ds_list_size(inputs); input_display_len = array_length(input_display_list); outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, PIXEL_SURFACE); @@ -46,23 +78,47 @@ function Node_3D_Obj(_x, _y) : Node(_x, _y) constructor { function createMaterial(m_index) { var index = ds_list_size(inputs); - inputs[| index] = nodeValue( index, "Texture " + materials[m_index], self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, tex_surface); - inputs[| index].setVisible(false); + inputs[| index] = nodeValue( index, materialNames[m_index] + " texture", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, tex_surface); + inputs[| index].setVisible(true); input_display_list[input_display_len + m_index] = index; + + if(m_index >= array_length(materials)) return; + + var matY = y - (array_length(materials) - 1) / 2 * (128 + 32); + var mat = materials[m_index]; + if(file_exists(mat.diff_path)) { + var sol = Node_create_Image_path(x - (w + 64), matY + m_index * (128 + 32), mat.diff_path); + sol.name = mat.name + " texture"; + + inputs[| index].setFrom(sol.outputs[| 0]); + } else { + var sol = nodeBuild("Solid", x - (w + 64), matY + m_index * (128 + 32)); + sol.name = mat.name + " texture"; + sol.inputs[| 1].setValue(mat.diff); + + inputs[| index].setFrom(sol.outputs[| 0]); + } } - VB = noone; + VB = []; + materialNames = []; + materialIndex = []; materials = []; static updateObj = function() { var _path = inputs[| 0].getValue(); + var _pathMtl = string_copy(_path, 1, string_length(_path) - 4) + ".mtl"; + var _v = readObj(_path); if(_v != noone) { VB = _v[0]; - materials = _v[1]; + materialNames = _v[1]; + materialIndex = _v[2]; } + materials = readMtl(_pathMtl); + do_reset_material = true; } do_reset_material = false; @@ -82,14 +138,14 @@ function Node_3D_Obj(_x, _y) : Node(_x, _y) constructor { drag_mx = 0; drag_my = 0; - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { - var active = _active; + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { if(inputs[| 3].drawOverlay(active, _x, _y, _s, _mx, _my)) active = false; var _dim = inputs[| 2].getValue(); + var _pos = inputs[| 3].getValue(); var _rot = inputs[| 4].getValue(); - var cx = _x + _dim[0] * _s / 2; - var cy = _y + _dim[1] * _s / 2; + var cx = _x + _pos[0] * _s; + var cy = _y + _pos[1] * _s; draw_set_color(COLORS.axis[0]); draw_line(cx - 64, cy, cx + 64, cy); @@ -101,7 +157,7 @@ function Node_3D_Obj(_x, _y) : Node(_x, _y) constructor { draw_circle(cx, cy, 64, true); if(drag_index == 0) { - var dx = (_mx - drag_mx) / _s * 6; + var dx = (_mx - drag_mx) / _s * -6; _rot[1] = drag_sv + dx; if(inputs[| 4].setValue(_rot)) @@ -112,7 +168,7 @@ function Node_3D_Obj(_x, _y) : Node(_x, _y) constructor { UNDO_HOLDING = false; } } else if(drag_index == 1) { - var dy = (_my - drag_my) / _s * -6; + var dy = (_my - drag_my) / _s * 6; _rot[0] = drag_sv + dy; if(inputs[| 4].setValue(_rot)) @@ -123,8 +179,8 @@ function Node_3D_Obj(_x, _y) : Node(_x, _y) constructor { UNDO_HOLDING = false; } } else if(drag_index == 2) { - var da = point_direction(cx, cy, _mx, _my); - _rot[2] = da; + var dy = point_direction(cx, cy, _mx, _my) - point_direction(cx, cy, drag_mx, drag_my); + _rot[2] = drag_sv + dy; if(inputs[| 4].setValue(_rot)) UNDO_HOLDING = true; @@ -134,7 +190,7 @@ function Node_3D_Obj(_x, _y) : Node(_x, _y) constructor { UNDO_HOLDING = false; } } else { - if(distance_to_line(_mx, _my, cx - 64, cy, cx + 64, cy) < 16) { + if(active && distance_to_line(_mx, _my, cx - 64, cy, cx + 64, cy) < 16) { draw_set_color(COLORS.axis[0]); draw_line_width(cx - 64, cy, cx + 64, cy, 3); if(mouse_press(mb_left, active)) { @@ -143,7 +199,7 @@ function Node_3D_Obj(_x, _y) : Node(_x, _y) constructor { drag_mx = _mx; drag_my = _my; } - } else if(distance_to_line(_mx, _my, cx, cy - 64, cx, cy + 64) < 16) { + } else if(active && distance_to_line(_mx, _my, cx, cy - 64, cx, cy + 64) < 16) { draw_set_color(COLORS.axis[1]); draw_line_width(cx, cy - 64, cx, cy + 64, 3); if(mouse_press(mb_left, active)) { @@ -152,7 +208,7 @@ function Node_3D_Obj(_x, _y) : Node(_x, _y) constructor { drag_mx = _mx; drag_my = _my; } - } else if(abs(point_distance(_mx, _my, cx, cy) - 64) < 8) { + } else if(active && abs(point_distance(_mx, _my, cx, cy) - 64) < 8) { draw_set_color(COLORS.axis[2]); draw_circle_border(cx, cy, 64, 3); if(mouse_press(mb_left, active)) { @@ -163,6 +219,8 @@ function Node_3D_Obj(_x, _y) : Node(_x, _y) constructor { } } } + + inputs[| 3].drawOverlay(active, _x, _y, _s, _mx, _my) } static update = function() { @@ -171,19 +229,24 @@ function Node_3D_Obj(_x, _y) : Node(_x, _y) constructor { if(do_reset_material) { array_resize(input_display_list, input_display_len); - while(ds_list_size(inputs) > 6) - ds_list_delete(inputs, 6); + while(ds_list_size(inputs) > input_length) + ds_list_delete(inputs, input_length); - for(var i = 0; i < array_length(materials); i++) { + for(var i = 0; i < array_length(materialNames); i++) createMaterial(i); - } do_reset_material = false; } - var _dim = inputs[| 2].getValue(); - var _pos = inputs[| 3].getValue(); - var _rot = inputs[| 4].getValue(); - var _sca = inputs[| 5].getValue(); + var _dim = inputs[| 2].getValue(); + var _pos = inputs[| 3].getValue(); + var _rot = inputs[| 4].getValue(); + var _sca = inputs[| 5].getValue(); + + var _ldir = inputs[| 6].getValue(); + var _lhgt = inputs[| 7].getValue(); + var _lint = inputs[| 8].getValue(); + var _lclr = inputs[| 9].getValue(); + var _aclr = inputs[| 10].getValue(); var _outSurf = outputs[| 0].getValue(); if(!is_surface(_outSurf)) { @@ -192,28 +255,35 @@ function Node_3D_Obj(_x, _y) : Node(_x, _y) constructor { } else surface_size_to(_outSurf, _dim[0], _dim[1]); - TM = matrix_build(_dim[0] / 2 + _pos[0], _dim[1] / 2 + _pos[1], 0, _rot[0], _rot[1], _rot[2], _dim[0] * _sca[0], _dim[1] * _sca[1], 1); - cam_proj = matrix_build_projection_ortho(_dim[0], _dim[1], 1, 100); + var TM = matrix_build(_pos[0], _pos[1], 0, _rot[0], _rot[1], _rot[2], _dim[0] * _sca[0], _dim[1] * _sca[1], 1); + var cam_proj = matrix_build_projection_ortho(_dim[0], _dim[1], 1, 100); camera_set_view_mat(cam, cam_proj); camera_set_view_size(cam, _dim[0], _dim[1]); + var lightFor = [ -cos(degtorad(_ldir)), -_lhgt, -sin(degtorad(_ldir)) ]; + + gpu_set_ztestenable(true); surface_set_target(_outSurf); - shader_set(sh_vertex_pt); - camera_apply(cam); - gpu_set_ztestenable(true); + shader_set(sh_vertex_pnt_light); + shader_set_uniform_f_array(uniVertex_lightFor, lightFor); + shader_set_uniform_f_array(uniLightAmb, colorArrayFromReal(_aclr)); + shader_set_uniform_f_array(uniLightClr, colorArrayFromReal(_lclr)); + shader_set_uniform_f(uniLightInt, _lint); + + camera_apply(cam); - draw_clear_alpha(0, 0); - matrix_stack_push(TM); + draw_clear_alpha(0, 0); + matrix_stack_push(TM); - matrix_set(matrix_world, matrix_stack_top()); - if(VB != noone) { - for(var i = 0; i < array_length(VB); i++) { - if(i >= ds_list_size(inputs)) break; - var tex = inputs[| 6 + i].getValue(); - if(is_surface(tex)) - vertex_submit(VB[i], pr_trianglelist, surface_get_texture(tex)); - } - } + matrix_set(matrix_world, matrix_stack_top()); + for(var i = 0; i < array_length(VB); i++) { + if(i >= ds_list_size(inputs)) break; + var mIndex = materialIndex[i]; + var tex = inputs[| input_length + mIndex].getValue(); + + if(!is_surface(tex)) continue; + vertex_submit(VB[i], pr_trianglelist, surface_get_texture(tex)); + } shader_reset(); matrix_stack_pop(); diff --git a/scripts/node_3D_obj/node_3D_obj.yy b/scripts/node_3D_obj/node_3D_obj.yy index edc9802e5..8ef8b4d43 100644 --- a/scripts/node_3D_obj/node_3D_obj.yy +++ b/scripts/node_3D_obj/node_3D_obj.yy @@ -1,7 +1,7 @@ { "resourceType": "GMScript", "resourceVersion": "1.0", - "name": "node_3D_obj", + "name": "node_3d_obj", "isDnD": false, "isCompatibility": false, "parent": { diff --git a/scripts/node_3d_extrude/node_3d_extrude.gml b/scripts/node_3d_extrude/node_3d_extrude.gml new file mode 100644 index 000000000..26eaeea55 --- /dev/null +++ b/scripts/node_3d_extrude/node_3d_extrude.gml @@ -0,0 +1,318 @@ +function Node_create_3D_Extrude(_x, _y) { + var node = new Node_3D_Extrude(_x, _y); + ds_list_add(PANEL_GRAPH.nodes_list, node); + return node; +} + +function Node_3D_Extrude(_x, _y) : Node(_x, _y) constructor { + name = "3D Extrude"; + + uniVertex_lightFor = shader_get_uniform(sh_vertex_pnt_light, "u_LightForward"); + uniLightAmb = shader_get_uniform(sh_vertex_pnt_light, "u_AmbientLight"); + uniLightClr = shader_get_uniform(sh_vertex_pnt_light, "u_LightColor"); + uniLightInt = shader_get_uniform(sh_vertex_pnt_light, "u_LightIntensity"); + + inputs[| 0] = nodeValue(0, "Surface in", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone); + + inputs[| 1] = nodeValue(1, "Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, def_surf_size2) + .setDisplay(VALUE_DISPLAY.vector); + + inputs[| 2] = nodeValue(2, "Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ def_surf_size / 2, def_surf_size / 2 ]) + .setDisplay(VALUE_DISPLAY.vector); + + inputs[| 3] = nodeValue(3, "Rotation", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ]) + .setDisplay(VALUE_DISPLAY.vector); + + inputs[| 4] = nodeValue(4, "Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1, 0.1 ]) + .setDisplay(VALUE_DISPLAY.vector); + + inputs[| 5] = nodeValue(5, "Render scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1 ]) + .setDisplay(VALUE_DISPLAY.vector); + + inputs[| 6] = nodeValue(6, "Manual generate", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0) + .setDisplay(VALUE_DISPLAY.button, [ function() { + generateMesh(); + }, "Generate"] ); + + inputs[| 7] = nodeValue(7, "Light direction", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0) + .setDisplay(VALUE_DISPLAY.rotation); + + inputs[| 8] = nodeValue(8, "Light height", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.5) + .setDisplay(VALUE_DISPLAY.slider, [-1, 1, 0.01]); + + inputs[| 9] = nodeValue(9, "Light intensity", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1) + .setDisplay(VALUE_DISPLAY.slider, [0, 1, 0.01]); + + inputs[| 10] = nodeValue(10, "Light color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_white); + inputs[| 11] = nodeValue(11, "Ambient color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_grey); + + input_display_list = [1, + ["Geometry", false], 0, 6, + ["Transform", false], 2, 3, 4, 5, + ["Light", false], 7, 8, 9, 10, 11 + ]; + + outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, PIXEL_SURFACE); + + VB = vertex_create_buffer(); + vertex_begin(VB, FORMAT_PT); + vertex_end(VB); + + static onValueUpdate = function(index) { + if(index == 0) + generateMesh(); + } + + static generateMesh = function() { + var _ins = inputs[| 0].getValue(); + if(!is_surface(_ins)) return; + + var ww = surface_get_width(_ins); + var hh = surface_get_height(_ins); + var tw = 1 / ww; + var th = 1 / hh; + var sw = -ww / 2 * tw; + var sh = -hh / 2 * th; + + var surface_buffer = buffer_create(ww * hh * 4, buffer_fixed, 2); + buffer_get_surface(surface_buffer, _ins, 0); + buffer_seek(surface_buffer, buffer_seek_start, 0); + + vertex_begin(VB, FORMAT_PNT); + var ap = array_create(ww, hh); + + for( var j = 0; j < hh; j++ ) + for( var i = 0; i < ww; i++ ) { + var cc = buffer_read(surface_buffer, buffer_u32); + var _a = (cc & (0b11111111 << 24)) >> 24; + ap[i][j] = _a; + } + + for( var i = 0; i < ww; i++ ) + for( var j = 0; j < hh; j++ ) { + if(ap[i][j] == 0) continue; + + var i0 = sw + i * tw, i1 = i0 + tw; + var j0 = sh + j * th, j1 = j0 + th; + var tx0 = tw * i, tx1 = tx0 + tw; + var ty0 = th * j, ty1 = ty0 + th; + + vertex_add_pnt(VB, [i1, j0, -0.5], [0, 0, -1], [tx1, ty0]); + vertex_add_pnt(VB, [i0, j0, -0.5], [0, 0, -1], [tx0, ty0]); + vertex_add_pnt(VB, [i1, j1, -0.5], [0, 0, -1], [tx1, ty1]); + + vertex_add_pnt(VB, [i1, j1, -0.5], [0, 0, -1], [tx1, ty1]); + vertex_add_pnt(VB, [i0, j0, -0.5], [0, 0, -1], [tx0, ty0]); + vertex_add_pnt(VB, [i0, j1, -0.5], [0, 0, -1], [tx0, ty1]); + + vertex_add_pnt(VB, [i1, j0, 0.5], [0, 0, 1], [tx1, ty0]); + vertex_add_pnt(VB, [i0, j0, 0.5], [0, 0, 1], [tx0, ty0]); + vertex_add_pnt(VB, [i1, j1, 0.5], [0, 0, 1], [tx1, ty1]); + + vertex_add_pnt(VB, [i1, j1, 0.5], [0, 0, 1], [tx1, ty1]); + vertex_add_pnt(VB, [i0, j0, 0.5], [0, 0, 1], [tx0, ty0]); + vertex_add_pnt(VB, [i0, j1, 0.5], [0, 0, 1], [tx0, ty1]); + + if(j == 0 || ap[i][j - 1] == 0) { + vertex_add_pnt(VB, [i0, j0, 0.5], [0, -1, 0], [tx1, ty0]); + vertex_add_pnt(VB, [i0, j0, -0.5], [0, -1, 0], [tx0, ty0]); + vertex_add_pnt(VB, [i1, j0, 0.5], [0, -1, 0], [tx1, ty1]); + + vertex_add_pnt(VB, [i0, j0, -0.5], [0, -1, 0], [tx1, ty1]); + vertex_add_pnt(VB, [i1, j0, -0.5], [0, -1, 0], [tx0, ty0]); + vertex_add_pnt(VB, [i1, j0, 0.5], [0, -1, 0], [tx0, ty1]); + } + + if(j == hh - 1 || ap[i][j + 1] == 0) { + vertex_add_pnt(VB, [i0, j1, 0.5], [0, 1, 0], [tx1, ty0]); + vertex_add_pnt(VB, [i0, j1, -0.5], [0, 1, 0], [tx0, ty0]); + vertex_add_pnt(VB, [i1, j1, 0.5], [0, 1, 0], [tx1, ty1]); + + vertex_add_pnt(VB, [i0, j1, -0.5], [0, 1, 0], [tx1, ty1]); + vertex_add_pnt(VB, [i1, j1, -0.5], [0, 1, 0], [tx0, ty0]); + vertex_add_pnt(VB, [i1, j1, 0.5], [0, 1, 0], [tx0, ty1]); + } + + if(i == 0 || ap[i - 1][j] == 0) { + vertex_add_pnt(VB, [i0, j0, 0.5], [1, 0, 0], [tx1, ty0]); + vertex_add_pnt(VB, [i0, j0, -0.5], [1, 0, 0], [tx0, ty0]); + vertex_add_pnt(VB, [i0, j1, 0.5], [1, 0, 0], [tx1, ty1]); + + vertex_add_pnt(VB, [i0, j0, -0.5], [1, 0, 0], [tx1, ty1]); + vertex_add_pnt(VB, [i0, j1, -0.5], [1, 0, 0], [tx0, ty0]); + vertex_add_pnt(VB, [i0, j1, 0.5], [1, 0, 0], [tx0, ty1]); + } + + if(i == ww - 1 || ap[i + 1][j] == 0) { + vertex_add_pnt(VB, [i1, j0, 0.5], [-1, 0, 0], [tx1, ty0]); + vertex_add_pnt(VB, [i1, j0, -0.5], [-1, 0, 0], [tx0, ty0]); + vertex_add_pnt(VB, [i1, j1, 0.5], [-1, 0, 0], [tx1, ty1]); + + vertex_add_pnt(VB, [i1, j0, -0.5], [-1, 0, 0], [tx1, ty1]); + vertex_add_pnt(VB, [i1, j1, -0.5], [-1, 0, 0], [tx0, ty0]); + vertex_add_pnt(VB, [i1, j1, 0.5], [-1, 0, 0], [tx0, ty1]); + } + } + vertex_end(VB); + update(); + } + + drag_index = -1; + drag_sv = 0; + drag_mx = 0; + drag_my = 0; + + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { + if(inputs[| 2].drawOverlay(active, _x, _y, _s, _mx, _my)) + active = false; + + var _dim = inputs[| 1].getValue(); + var _pos = inputs[| 2].getValue(); + var _rot = inputs[| 3].getValue(); + var cx = _x + _pos[0] * _s; + var cy = _y + _pos[1] * _s; + + draw_set_color(COLORS.axis[0]); + draw_line(cx - 64, cy, cx + 64, cy); + + draw_set_color(COLORS.axis[1]); + draw_line(cx, cy - 64, cx, cy + 64); + + draw_set_color(COLORS.axis[2]); + draw_circle(cx, cy, 64, true); + + if(drag_index == 0) { + var dx = (_mx - drag_mx) / _s * 6; + _rot[1] = drag_sv + dx; + + if(inputs[| 3].setValue(_rot)) + UNDO_HOLDING = true; + + if(mouse_release(mb_left)) { + drag_index = -1; + UNDO_HOLDING = false; + } + } else if(drag_index == 1) { + var dy = (_my - drag_my) / _s * -6; + _rot[0] = drag_sv + dy; + + if(inputs[| 3].setValue(_rot)) + UNDO_HOLDING = true; + + if(mouse_release(mb_left)) { + drag_index = -1; + UNDO_HOLDING = false; + } + } else if(drag_index == 2) { + var da = point_direction(cx, cy, _mx, _my); + _rot[2] = da; + + if(inputs[| 3].setValue(_rot)) + UNDO_HOLDING = true; + + if(mouse_release(mb_left)) { + drag_index = -1; + UNDO_HOLDING = false; + } + } else { + if(distance_to_line(_mx, _my, cx - 64, cy, cx + 64, cy) < 16) { + draw_set_color(COLORS.axis[0]); + draw_line_width(cx - 64, cy, cx + 64, cy, 3); + if(mouse_press(mb_left, active)) { + drag_index = 0; + drag_sv = _rot[1]; + drag_mx = _mx; + drag_my = _my; + } + } else if(distance_to_line(_mx, _my, cx, cy - 64, cx, cy + 64) < 16) { + draw_set_color(COLORS.axis[1]); + draw_line_width(cx, cy - 64, cx, cy + 64, 3); + if(mouse_press(mb_left, active)) { + drag_index = 1; + drag_sv = _rot[0]; + drag_mx = _mx; + drag_my = _my; + } + } else if(abs(point_distance(_mx, _my, cx, cy) - 64) < 8) { + draw_set_color(COLORS.axis[2]); + draw_circle_border(cx, cy, 64, 3); + if(mouse_press(mb_left, active)) { + drag_index = 2; + drag_sv = _rot[2]; + drag_mx = _mx; + drag_my = _my; + } + } + } + + inputs[| 2].drawOverlay(active, _x, _y, _s, _mx, _my); + } + + #region 3D setup + TM = matrix_build(0, 0, 0, 0, 0, 0, 1, 1, 1); + cam = camera_create(); + cam_view = matrix_build_lookat(0, 0, 1, 0, 0, 0, 0, 1, 0); + cam_proj = matrix_build_projection_ortho(1, 1, 1, 100); + + camera_set_proj_mat(cam, cam_view); + camera_set_view_mat(cam, cam_proj); + #endregion + + static update = function() { + var _ins = inputs[| 0].getValue(); + var _dim = inputs[| 1].getValue(); + var _pos = inputs[| 2].getValue(); + var _rot = inputs[| 3].getValue(); + var _lsc = inputs[| 4].getValue(); + var _sca = inputs[| 5].getValue(); + + var _ldir = inputs[| 7].getValue(); + var _lhgt = inputs[| 8].getValue(); + var _lint = inputs[| 9].getValue(); + var _lclr = inputs[| 10].getValue(); + var _aclr = inputs[| 11].getValue(); + + var _outSurf = outputs[| 0].getValue(); + if(!is_surface(_outSurf)) { + _outSurf = surface_create_valid(_dim[0], _dim[1]); + outputs[| 0].setValue(_outSurf); + } else + surface_size_to(_outSurf, _dim[0], _dim[1]); + + if(!is_surface(_ins)) return _outSurf; + + var TM = matrix_build(_pos[0], _pos[1], 0, _rot[0], _rot[1], _rot[2], _dim[0] * _sca[0], _dim[1] * _sca[1], 1); + var cam_proj = matrix_build_projection_ortho(_dim[0], _dim[1], 1, 100); + camera_set_view_mat(cam, cam_proj); + camera_set_view_size(cam, _dim[0], _dim[1]); + + var lightFor = [ -cos(degtorad(_ldir)), -_lhgt, -sin(degtorad(_ldir)) ]; + + gpu_set_ztestenable(true); + surface_set_target(_outSurf); + shader_set(sh_vertex_pnt_light); + shader_set_uniform_f_array(uniVertex_lightFor, lightFor); + shader_set_uniform_f_array(uniLightAmb, colorArrayFromReal(_aclr)); + shader_set_uniform_f_array(uniLightClr, colorArrayFromReal(_lclr)); + shader_set_uniform_f(uniLightInt, _lint); + camera_apply(cam); + draw_clear_alpha(0, 0); + + matrix_stack_push(TM); + matrix_stack_push(matrix_build(0, 0, 0, 0, 0, 0, _lsc[0], _lsc[1], _lsc[2])); + + matrix_set(matrix_world, matrix_stack_top()); + vertex_submit(VB, pr_trianglelist, surface_get_texture(_ins)); + + shader_reset(); + matrix_stack_pop(); + matrix_stack_pop(); + matrix_set(matrix_world, MATRIX_IDENTITY); + surface_reset_target(); + + gpu_set_ztestenable(false); + camera_apply(0); + + return _outSurf; + } +} \ No newline at end of file diff --git a/scripts/node_3d_extrude/node_3d_extrude.yy b/scripts/node_3d_extrude/node_3d_extrude.yy new file mode 100644 index 000000000..a48cabd6d --- /dev/null +++ b/scripts/node_3d_extrude/node_3d_extrude.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_3d_extrude", + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "3D", + "path": "folders/nodes/data/3D.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_3d_extrude/node_3d_prim_cube.yy b/scripts/node_3d_extrude/node_3d_prim_cube.yy new file mode 100644 index 000000000..9d30547ce --- /dev/null +++ b/scripts/node_3d_extrude/node_3d_prim_cube.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "3D", + "path": "folders/nodes/data/3D.yy", + }, + "resourceVersion": "1.0", + "name": "node_3d_prim_cube", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_3d_prim_cube/node_3d_prim_cube.gml b/scripts/node_3d_prim_cube/node_3d_prim_cube.gml index 14d82c1ce..6d5978f00 100644 --- a/scripts/node_3d_prim_cube/node_3d_prim_cube.gml +++ b/scripts/node_3d_prim_cube/node_3d_prim_cube.gml @@ -7,31 +7,52 @@ function Node_create_3D_Cube(_x, _y) { function Node_3D_Cube(_x, _y) : Node(_x, _y) constructor { name = "3D Cube"; + uniVertex_lightFor = shader_get_uniform(sh_vertex_pnt_light, "u_LightForward"); + uniLightAmb = shader_get_uniform(sh_vertex_pnt_light, "u_AmbientLight"); + uniLightClr = shader_get_uniform(sh_vertex_pnt_light, "u_LightColor"); + uniLightInt = shader_get_uniform(sh_vertex_pnt_light, "u_LightIntensity"); + inputs[| 0] = nodeValue(0, "Main texture", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, DEF_SURFACE); inputs[| 1] = nodeValue(1, "Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, def_surf_size2) .setDisplay(VALUE_DISPLAY.vector); - inputs[| 2] = nodeValue(2, "Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0 ]) + inputs[| 2] = nodeValue(2, "Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ def_surf_size / 2, def_surf_size / 2 ]) .setDisplay(VALUE_DISPLAY.vector); inputs[| 3] = nodeValue(3, "Rotation", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ]) .setDisplay(VALUE_DISPLAY.vector); - inputs[| 4] = nodeValue(4, "Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1 ]) + inputs[| 4] = nodeValue(4, "Render scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1 ]) .setDisplay(VALUE_DISPLAY.vector); - inputs[| 5] = nodeValue(5, "Use textures", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false); + inputs[| 5] = nodeValue(5, "Textures per face", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false); - inputs[| 6] = nodeValue( 6, "Textures 0", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); - inputs[| 7] = nodeValue( 7, "Textures 1", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); - inputs[| 8] = nodeValue( 8, "Textures 2", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); - inputs[| 9] = nodeValue( 9, "Textures 3", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); - inputs[| 10] = nodeValue(10, "Textures 4", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); - inputs[| 11] = nodeValue(11, "Textures 5", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); + inputs[| 6] = nodeValue( 6, "Textures 0", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0).setVisible(false); + inputs[| 7] = nodeValue( 7, "Textures 1", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0).setVisible(false); + inputs[| 8] = nodeValue( 8, "Textures 2", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0).setVisible(false); + inputs[| 9] = nodeValue( 9, "Textures 3", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0).setVisible(false); + inputs[| 10] = nodeValue(10, "Textures 4", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0).setVisible(false); + inputs[| 11] = nodeValue(11, "Textures 5", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0).setVisible(false); + + inputs[| 12] = nodeValue(12, "Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1, 1 ]) + .setDisplay(VALUE_DISPLAY.vector); + + inputs[| 13] = nodeValue(13, "Light direction", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0) + .setDisplay(VALUE_DISPLAY.rotation); + + inputs[| 14] = nodeValue(14, "Light height", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.5) + .setDisplay(VALUE_DISPLAY.slider, [-1, 1, 0.01]); + + inputs[| 15] = nodeValue(15, "Light intensity", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1) + .setDisplay(VALUE_DISPLAY.slider, [0, 1, 0.01]); + + inputs[| 16] = nodeValue(16, "Light color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_white); + inputs[| 17] = nodeValue(17, "Ambient color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_grey); input_display_list = [ - ["Transform", false], 0, 1, 2, 3, 4, - ["Texture", false], 5, 6, 7, 8, 9, 10, 11 + ["Transform", false], 0, 1, 2, 3, 12, 4, + ["Texture", true], 5, 6, 7, 8, 9, 10, 11, + ["Light", false], 13, 14, 15, 16, 17, ]; outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, PIXEL_SURFACE); @@ -51,14 +72,15 @@ function Node_3D_Cube(_x, _y) : Node(_x, _y) constructor { drag_mx = 0; drag_my = 0; - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { - var active = _active; - if(inputs[| 2].drawOverlay(active, _x, _y, _s, _mx, _my)) active = false; + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { + if(inputs[| 2].drawOverlay(active, _x, _y, _s, _mx, _my)) + active = false; var _dim = inputs[| 1].getValue(); + var _pos = inputs[| 2].getValue(); var _rot = inputs[| 3].getValue(); - var cx = _x + _dim[0] * _s / 2; - var cy = _y + _dim[1] * _s / 2; + var cx = _x + _pos[0] * _s; + var cy = _y + _pos[1] * _s; draw_set_color(COLORS.axis[0]); draw_line(cx - 64, cy, cx + 64, cy); @@ -103,7 +125,7 @@ function Node_3D_Cube(_x, _y) : Node(_x, _y) constructor { UNDO_HOLDING = false; } } else { - if(distance_to_line(_mx, _my, cx - 64, cy, cx + 64, cy) < 16) { + if(active && distance_to_line(_mx, _my, cx - 64, cy, cx + 64, cy) < 16) { draw_set_color(COLORS.axis[0]); draw_line_width(cx - 64, cy, cx + 64, cy, 3); if(mouse_press(mb_left, active)) { @@ -112,7 +134,7 @@ function Node_3D_Cube(_x, _y) : Node(_x, _y) constructor { drag_mx = _mx; drag_my = _my; } - } else if(distance_to_line(_mx, _my, cx, cy - 64, cx, cy + 64) < 16) { + } else if(active && distance_to_line(_mx, _my, cx, cy - 64, cx, cy + 64) < 16) { draw_set_color(COLORS.axis[1]); draw_line_width(cx, cy - 64, cx, cy + 64, 3); if(mouse_press(mb_left, active)) { @@ -121,7 +143,7 @@ function Node_3D_Cube(_x, _y) : Node(_x, _y) constructor { drag_mx = _mx; drag_my = _my; } - } else if(abs(point_distance(_mx, _my, cx, cy) - 64) < 8) { + } else if(active && abs(point_distance(_mx, _my, cx, cy) - 64) < 8) { draw_set_color(COLORS.axis[2]); draw_circle_border(cx, cy, 64, 3); if(mouse_press(mb_left, active)) { @@ -132,6 +154,8 @@ function Node_3D_Cube(_x, _y) : Node(_x, _y) constructor { } } } + + inputs[| 2].drawOverlay(active, _x, _y, _s, _mx, _my); } static update = function() { @@ -143,9 +167,17 @@ function Node_3D_Cube(_x, _y) : Node(_x, _y) constructor { var _pos = inputs[| 2].getValue(); var _rot = inputs[| 3].getValue(); var _sca = inputs[| 4].getValue(); + var _lsc = inputs[| 12].getValue(); + + var _ldir = inputs[| 13].getValue(); + var _lhgt = inputs[| 14].getValue(); + var _lint = inputs[| 15].getValue(); + var _lclr = inputs[| 16].getValue(); + var _aclr = inputs[| 17].getValue(); var _usetex = inputs[| 5].getValue(); - for(var i = 6; i <= 11; i++) inputs[| i].setVisible(_usetex); + for(var i = 6; i <= 11; i++) inputs[| i].setVisible(_usetex); + inputs[| 0].setVisible(true, !_usetex); var _outSurf = outputs[| 0].getValue(); if(!is_surface(_outSurf)) { @@ -154,50 +186,58 @@ function Node_3D_Cube(_x, _y) : Node(_x, _y) constructor { } else surface_size_to(_outSurf, _dim[0], _dim[1]); - TM = matrix_build(_ww / 2 + _pos[0], _hh / 2 + _pos[1], 0, _rot[0], _rot[1], _rot[2], _ww * _sca[0], _hh * _sca[1], 1); + TM = matrix_build(_pos[0], _pos[1], 0, _rot[0], _rot[1], _rot[2], _ww * _sca[0], _hh * _sca[1], 1); cam_proj = matrix_build_projection_ortho(_ww, _hh, 1, 100); camera_set_view_mat(cam, cam_proj); camera_set_view_size(cam, _ww, _hh); + var lightFor = [ -cos(degtorad(_ldir)), -_lhgt, -sin(degtorad(_ldir)) ]; + + gpu_set_ztestenable(true); surface_set_target(_outSurf); - shader_set(sh_vertex_pt); + shader_set(sh_vertex_pnt_light); + shader_set_uniform_f_array(uniVertex_lightFor, lightFor); + shader_set_uniform_f_array(uniLightAmb, colorArrayFromReal(_aclr)); + shader_set_uniform_f_array(uniLightClr, colorArrayFromReal(_lclr)); + shader_set_uniform_f(uniLightInt, _lint); camera_apply(cam); draw_clear_alpha(0, 0); matrix_stack_push(TM); - gpu_set_ztestenable(true); + matrix_stack_push(matrix_build(0, 0, 0, 0, 0, 0, _lsc[0], _lsc[1], _lsc[2])); + if(_usetex) { var face = []; for(var i = 0; i < 6; i++) face[i] = inputs[| 6 + i].getValue(); matrix_stack_push(matrix_build(0, 0, 0.5, 0, 0, 0, 1, 1, 1)); matrix_set(matrix_world, matrix_stack_top()); - vertex_submit(PRIMITIVES[? "plane"], pr_trianglelist, surface_get_texture(face[0])); + vertex_submit(PRIMITIVES[? "plane_normal"], pr_trianglelist, surface_get_texture(face[0])); matrix_stack_pop(); matrix_stack_push(matrix_build(0, 0, -0.5, 0, 0, 0, 1, 1, 1)); matrix_set(matrix_world, matrix_stack_top()); - vertex_submit(PRIMITIVES[? "plane"], pr_trianglelist, surface_get_texture(face[1])); + vertex_submit(PRIMITIVES[? "plane_normal"], pr_trianglelist, surface_get_texture(face[1])); matrix_stack_pop(); matrix_stack_push(matrix_build(0, 0.5, 0, 90, 0, 0, 1, 1, 1)); matrix_set(matrix_world, matrix_stack_top()); - vertex_submit(PRIMITIVES[? "plane"], pr_trianglelist, surface_get_texture(face[2])); + vertex_submit(PRIMITIVES[? "plane_normal"], pr_trianglelist, surface_get_texture(face[2])); matrix_stack_pop(); matrix_stack_push(matrix_build(0, -0.5, 0, 90, 0, 0, 1, 1, 1)); matrix_set(matrix_world, matrix_stack_top()); - vertex_submit(PRIMITIVES[? "plane"], pr_trianglelist, surface_get_texture(face[3])); + vertex_submit(PRIMITIVES[? "plane_normal"], pr_trianglelist, surface_get_texture(face[3])); matrix_stack_pop(); matrix_stack_push(matrix_build(0.5, 0, 0, 0, 90, 0, 1, 1, 1)); matrix_set(matrix_world, matrix_stack_top()); - vertex_submit(PRIMITIVES[? "plane"], pr_trianglelist, surface_get_texture(face[4])); + vertex_submit(PRIMITIVES[? "plane_normal"], pr_trianglelist, surface_get_texture(face[4])); matrix_stack_pop(); matrix_stack_push(matrix_build(-0.5, 0, 0, 0, 90, 0, 1, 1, 1)); matrix_set(matrix_world, matrix_stack_top()); - vertex_submit(PRIMITIVES[? "plane"], pr_trianglelist, surface_get_texture(face[5])); + vertex_submit(PRIMITIVES[? "plane_normal"], pr_trianglelist, surface_get_texture(face[5])); matrix_stack_pop(); } else { matrix_set(matrix_world, matrix_stack_top()); @@ -206,6 +246,7 @@ function Node_3D_Cube(_x, _y) : Node(_x, _y) constructor { shader_reset(); matrix_stack_pop(); + matrix_stack_pop(); matrix_set(matrix_world, MATRIX_IDENTITY); surface_reset_target(); diff --git a/scripts/node_3d_prim_cylinder/node_3d_prim_cylinder.gml b/scripts/node_3d_prim_cylinder/node_3d_prim_cylinder.gml index 75fe2fbcd..bd584eda5 100644 --- a/scripts/node_3d_prim_cylinder/node_3d_prim_cylinder.gml +++ b/scripts/node_3d_prim_cylinder/node_3d_prim_cylinder.gml @@ -7,6 +7,11 @@ function Node_create_3D_Cylinder(_x, _y) { function Node_3D_Cylinder(_x, _y) : Node(_x, _y) constructor { name = "3D Cylinder"; + uniVertex_lightFor = shader_get_uniform(sh_vertex_pnt_light, "u_LightForward"); + uniLightAmb = shader_get_uniform(sh_vertex_pnt_light, "u_AmbientLight"); + uniLightClr = shader_get_uniform(sh_vertex_pnt_light, "u_LightColor"); + uniLightInt = shader_get_uniform(sh_vertex_pnt_light, "u_LightIntensity"); + inputs[| 0] = nodeValue(0, "Sides", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 16); inputs[| 1] = nodeValue(1, "Thickness", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.2); @@ -14,23 +19,39 @@ function Node_3D_Cylinder(_x, _y) : Node(_x, _y) constructor { inputs[| 2] = nodeValue(2, "Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, def_surf_size2) .setDisplay(VALUE_DISPLAY.vector); - inputs[| 3] = nodeValue(3, "Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0 ]) + inputs[| 3] = nodeValue(3, "Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ def_surf_size / 2, def_surf_size / 2 ]) .setDisplay(VALUE_DISPLAY.vector); inputs[| 4] = nodeValue(4, "Rotation", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ]) .setDisplay(VALUE_DISPLAY.vector); - inputs[| 5] = nodeValue(5, "Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1 ]) + inputs[| 5] = nodeValue(5, "Render scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1 ]) .setDisplay(VALUE_DISPLAY.vector); - inputs[| 6] = nodeValue( 6, "Textures top", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); - inputs[| 7] = nodeValue( 7, "Textures bottom", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); - inputs[| 8] = nodeValue( 8, "Textures side", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); + inputs[| 6] = nodeValue(6, "Textures top", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); + inputs[| 7] = nodeValue(7, "Textures bottom", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); + inputs[| 8] = nodeValue(8, "Textures side", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, 0); + + inputs[| 9] = nodeValue(9, "Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1, 1 ]) + .setDisplay(VALUE_DISPLAY.vector); + + inputs[| 10] = nodeValue(10, "Light direction", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0) + .setDisplay(VALUE_DISPLAY.rotation); + + inputs[| 11] = nodeValue(11, "Light height", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.5) + .setDisplay(VALUE_DISPLAY.slider, [-1, 1, 0.01]); + + inputs[| 12] = nodeValue(12, "Light intensity", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1) + .setDisplay(VALUE_DISPLAY.slider, [0, 1, 0.01]); + + inputs[| 13] = nodeValue(13, "Light color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_white); + inputs[| 14] = nodeValue(14, "Ambient color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_grey); input_display_list = [2, ["Geometry", false], 0, 1, - ["Transform", false], 3, 4, 5, - ["Texture", false], 6, 7, 8 + ["Transform", false], 3, 4, 9, 5, + ["Texture", true], 6, 7, 8, + ["Light", false], 10, 11, 12, 13, 14, ]; outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, PIXEL_SURFACE); @@ -43,15 +64,15 @@ function Node_3D_Cylinder(_x, _y) : Node(_x, _y) constructor { static generate_vb = function() { var _ox, _oy, _nx, _ny, _ou, _nu; - vertex_begin(VB_top, FORMAT_PT); + vertex_begin(VB_top, FORMAT_PNT); for(var i = 0; i <= sides; i++) { _nx = lengthdir_x(0.5, i * 360 / sides); _ny = lengthdir_y(0.5, i * 360 / sides); if(i) { - vertex_add_pt(VB_top, [ 0, thick / 2, 0], [ 0 + 0.5, 0 + 0.5]); - vertex_add_pt(VB_top, [_ox, thick / 2, _oy], [_ox + 0.5, _oy + 0.5]); - vertex_add_pt(VB_top, [_nx, thick / 2, _ny], [_nx + 0.5, _ny + 0.5]); + vertex_add_pnt(VB_top, [ 0, thick / 2, 0], [0, 1, 0], [ 0 + 0.5, 0 + 0.5]); + vertex_add_pnt(VB_top, [_ox, thick / 2, _oy], [0, 1, 0], [_ox + 0.5, _oy + 0.5]); + vertex_add_pnt(VB_top, [_nx, thick / 2, _ny], [0, 1, 0], [_nx + 0.5, _ny + 0.5]); } _ox = _nx; @@ -60,20 +81,20 @@ function Node_3D_Cylinder(_x, _y) : Node(_x, _y) constructor { vertex_end(VB_top); - vertex_begin(VB_sid, FORMAT_PT); + vertex_begin(VB_sid, FORMAT_PNT); for(var i = 0; i <= sides; i++) { _nx = lengthdir_x(0.5, i * 360 / sides); _ny = lengthdir_y(0.5, i * 360 / sides); _nu = i / sides; if(i) { - vertex_add_pt(VB_sid, [_ox, -thick / 2, _oy], [_ou, 0]); - vertex_add_pt(VB_sid, [_ox, thick / 2, _oy], [_ou, 1]); - vertex_add_pt(VB_sid, [_nx, thick / 2, _ny], [_nu, 1]); + vertex_add_pnt(VB_sid, [_ox, -thick / 2, _oy], [_nx, 0, _ny], [_ou, 0]); + vertex_add_pnt(VB_sid, [_ox, thick / 2, _oy], [_nx, 0, _ny], [_ou, 1]); + vertex_add_pnt(VB_sid, [_nx, thick / 2, _ny], [_nx, 0, _ny], [_nu, 1]); - vertex_add_pt(VB_sid, [_nx, thick / 2, _ny], [_nu, 1]); - vertex_add_pt(VB_sid, [_nx, -thick / 2, _ny], [_nu, 0]); - vertex_add_pt(VB_sid, [_ox, -thick / 2, _oy], [_ou, 0]); + vertex_add_pnt(VB_sid, [_nx, thick / 2, _ny], [_nx, 0, _ny], [_nu, 1]); + vertex_add_pnt(VB_sid, [_nx, -thick / 2, _ny], [_nx, 0, _ny], [_nu, 0]); + vertex_add_pnt(VB_sid, [_ox, -thick / 2, _oy], [_nx, 0, _ny], [_ou, 0]); } _ox = _nx; @@ -89,14 +110,15 @@ function Node_3D_Cylinder(_x, _y) : Node(_x, _y) constructor { drag_mx = 0; drag_my = 0; - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { - var active = _active; - if(inputs[| 3].drawOverlay(active, _x, _y, _s, _mx, _my)) active = false; + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { + if(inputs[| 3].drawOverlay(active, _x, _y, _s, _mx, _my)) + active = false; var _dim = inputs[| 2].getValue(); + var _pos = inputs[| 3].getValue(); var _rot = inputs[| 4].getValue(); - var cx = _x + _dim[0] * _s / 2; - var cy = _y + _dim[1] * _s / 2; + var cx = _x + _pos[0] * _s; + var cy = _y + _pos[1] * _s; draw_set_color(COLORS.axis[0]); draw_line(cx - 64, cy, cx + 64, cy); @@ -170,6 +192,8 @@ function Node_3D_Cylinder(_x, _y) : Node(_x, _y) constructor { } } } + + inputs[| 3].drawOverlay(active, _x, _y, _s, _mx, _my); } #region 3D setup @@ -199,6 +223,13 @@ function Node_3D_Cylinder(_x, _y) : Node(_x, _y) constructor { var face_top = inputs[| 6].getValue(); var face_bot = inputs[| 7].getValue(); var face_sid = inputs[| 8].getValue(); + var _lsc = inputs[| 9].getValue(); + + var _ldir = inputs[| 10].getValue(); + var _lhgt = inputs[| 11].getValue(); + var _lint = inputs[| 12].getValue(); + var _lclr = inputs[| 13].getValue(); + var _aclr = inputs[| 14].getValue(); var _outSurf = outputs[| 0].getValue(); if(!is_surface(_outSurf)) { @@ -207,37 +238,41 @@ function Node_3D_Cylinder(_x, _y) : Node(_x, _y) constructor { } else surface_size_to(_outSurf, _dim[0], _dim[1]); - TM = matrix_build(_dim[0] / 2 + _pos[0], _dim[1] / 2 + _pos[1], 0, _rot[0], _rot[1], _rot[2], _dim[0] * _sca[0], _dim[1] * _sca[1], 1); + TM = matrix_build(_pos[0], _pos[1], 0, _rot[0], _rot[1], _rot[2], _dim[0] * _sca[0], _dim[1] * _sca[1], 1); cam_proj = matrix_build_projection_ortho(_dim[0], _dim[1], 1, 100); camera_set_view_mat(cam, cam_proj); camera_set_view_size(cam, _dim[0], _dim[1]); - surface_set_target(_outSurf); - draw_clear_alpha(0, 0); - BLEND_ADD + var lightFor = [ -cos(degtorad(_ldir)), -_lhgt, -sin(degtorad(_ldir)) ]; - shader_set(sh_vertex_pt); - camera_apply(cam); - gpu_set_ztestenable(true); + gpu_set_ztestenable(true); + surface_set_target(_outSurf); + shader_set(sh_vertex_pnt_light); + shader_set_uniform_f_array(uniVertex_lightFor, lightFor); + shader_set_uniform_f_array(uniLightAmb, colorArrayFromReal(_aclr)); + shader_set_uniform_f_array(uniLightClr, colorArrayFromReal(_lclr)); + shader_set_uniform_f(uniLightInt, _lint); + camera_apply(cam); + draw_clear_alpha(0, 0); - matrix_stack_push(TM); + matrix_stack_push(TM); + matrix_stack_push(matrix_build(0, 0, 0, 0, 0, 0, _lsc[0], _lsc[1], _lsc[2])); - matrix_set(matrix_world, matrix_stack_top()); - vertex_submit(VB_top, pr_trianglelist, surface_get_texture(face_top)); + matrix_set(matrix_world, matrix_stack_top()); + vertex_submit(VB_top, pr_trianglelist, surface_get_texture(face_top)); - matrix_stack_push(matrix_build(0, -thick, 0, 0, 0, 0, 1, 1, 1)); - matrix_set(matrix_world, matrix_stack_top()); - vertex_submit(VB_top, pr_trianglelist, surface_get_texture(face_bot)); - matrix_stack_pop(); + matrix_stack_push(matrix_build(0, -thick, 0, 0, 0, 0, 1, 1, 1)); + matrix_set(matrix_world, matrix_stack_top()); + vertex_submit(VB_top, pr_trianglelist, surface_get_texture(face_bot)); + matrix_stack_pop(); - matrix_set(matrix_world, matrix_stack_top()); - vertex_submit(VB_sid, pr_trianglelist, surface_get_texture(face_sid)); - shader_reset(); + matrix_set(matrix_world, matrix_stack_top()); + vertex_submit(VB_sid, pr_trianglelist, surface_get_texture(face_sid)); + shader_reset(); + matrix_stack_pop(); matrix_stack_pop(); matrix_set(matrix_world, MATRIX_IDENTITY); - - BLEND_NORMAL surface_reset_target(); gpu_set_ztestenable(false); diff --git a/scripts/node_3d_transform/node_3d_transform.gml b/scripts/node_3d_transform/node_3d_transform.gml index 33de11dff..907b25ee7 100644 --- a/scripts/node_3d_transform/node_3d_transform.gml +++ b/scripts/node_3d_transform/node_3d_transform.gml @@ -49,9 +49,9 @@ function Node_3D_Transform(_x, _y) : Node_Processor(_x, _y) constructor { drag_mx = 0; drag_my = 0; - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { - var active = _active; - if(inputs[| 1].drawOverlay(active, _x, _y, _s, _mx, _my)) active = false; + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { + if(inputs[| 1].drawOverlay(active, _x, _y, _s, _mx, _my)) + active = false; var _out = outputs[| 0].getValue(); if(!is_surface(_out) || !surface_exists(_out)) return; diff --git a/scripts/node_9slice/node_9slice.gml b/scripts/node_9slice/node_9slice.gml index d496d72b1..ebd3964af 100644 --- a/scripts/node_9slice/node_9slice.gml +++ b/scripts/node_9slice/node_9slice.gml @@ -32,7 +32,7 @@ function Node_9Slice(_x, _y) : Node_Processor(_x, _y) constructor { } } - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { var _dim = inputs[| 1].getValue(); var _splice = inputs[| 2].getValue(); @@ -69,10 +69,10 @@ function Node_9Slice(_x, _y) : Node_Processor(_x, _y) constructor { } } - if(!inputs[| 1].drawOverlay(_active, _x, _y, _s, _mx, _my)) { + if(!inputs[| 1].drawOverlay(active, _x, _y, _s, _mx, _my)) { if(distance_to_line_infinite(_mx, _my, sp_r, -hh, sp_r, hh) < 12) { draw_line_width(sp_r, -hh, sp_r, hh, 3); - if(_mouse_press(mb_left, active)) { + if(mouse_press(mb_left, active)) { drag_side = 0; drag_mx = _mx; drag_my = _my; @@ -80,7 +80,7 @@ function Node_9Slice(_x, _y) : Node_Processor(_x, _y) constructor { } } else if(distance_to_line_infinite(_mx, _my, -ww, sp_t, ww, sp_t) < 12) { draw_line_width(-ww, sp_t, ww, sp_t, 3); - if(_mouse_press(mb_left, active)) { + if(mouse_press(mb_left, active)) { drag_side = 1; drag_mx = _mx; drag_my = _my; @@ -88,7 +88,7 @@ function Node_9Slice(_x, _y) : Node_Processor(_x, _y) constructor { } } else if(distance_to_line_infinite(_mx, _my, sp_l, -hh, sp_l, hh) < 12) { draw_line_width(sp_l, -hh, sp_l, hh, 3); - if(_mouse_press(mb_left, active)) { + if(mouse_press(mb_left, active)) { drag_side = 2; drag_mx = _mx; drag_my = _my; @@ -96,7 +96,7 @@ function Node_9Slice(_x, _y) : Node_Processor(_x, _y) constructor { } } else if(distance_to_line_infinite(_mx, _my, -ww, sp_b, ww, sp_b) < 12) { draw_line_width(-ww, sp_b, ww, sp_b, 3); - if(_mouse_press(mb_left, active)) { + if(mouse_press(mb_left, active)) { drag_side = 3; drag_mx = _mx; drag_my = _my; diff --git a/scripts/node_anim_priority/node_anim_priority.gml b/scripts/node_anim_priority/node_anim_priority.gml new file mode 100644 index 000000000..22d583437 --- /dev/null +++ b/scripts/node_anim_priority/node_anim_priority.gml @@ -0,0 +1,25 @@ +function rearrange_priority(node, newpri) { + if(node.anim_priority == newpri) return; + + var prev = node.anim_priority; + var down = prev > newpri; + node.anim_priority = newpri; + + var amo = ds_map_size(NODE_MAP); + var k = ds_map_find_first(NODE_MAP); + + repeat(amo) { + var _node = NODE_MAP[? k]; + k = ds_map_find_next(NODE_MAP, k); + + if(!_node.active) continue; + if(_node == node) continue; + + if(down && _node.anim_priority >= newpri && _node.anim_priority <= prev) + _node.anim_priority++; + if(!down && _node.anim_priority <= newpri && _node.anim_priority >= prev) + _node.anim_priority--; + } + + PANEL_ANIMATION.updatePropertyList(); +} \ No newline at end of file diff --git a/scripts/node_anim_priority/node_anim_priority.yy b/scripts/node_anim_priority/node_anim_priority.yy new file mode 100644 index 000000000..6f8de73ff --- /dev/null +++ b/scripts/node_anim_priority/node_anim_priority.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_anim_priority", + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "animation", + "path": "folders/functions/animation.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_area/node_area.gml b/scripts/node_area/node_area.gml index 920bd1739..ab42cc399 100644 --- a/scripts/node_area/node_area.gml +++ b/scripts/node_area/node_area.gml @@ -25,7 +25,7 @@ function Node_Area(_x, _y) : Node_Value_Processor(_x, _y) constructor { outputs[| 0] = nodeValue(0, "Area", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, [ 0, 0, 0, 0, AREA_SHAPE.rectangle ]) .setDisplay(VALUE_DISPLAY.vector); - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { var _pos = inputs[| 0].getValue(); var _span = inputs[| 1].getValue(); var _shape = inputs[| 2].getValue(); @@ -44,8 +44,8 @@ function Node_Area(_x, _y) : Node_Value_Processor(_x, _y) constructor { break; } - inputs[| 0].drawOverlay(_active, _x, _y, _s, _mx, _my); - inputs[| 1].drawOverlay(_active, px, py, _s, _mx, _my); + inputs[| 0].drawOverlay(active, _x, _y, _s, _mx, _my); + inputs[| 1].drawOverlay(active, px, py, _s, _mx, _my); } function process_value_data(_data, index = 0) { diff --git a/scripts/node_blur_directional/node_blur_directional.gml b/scripts/node_blur_directional/node_blur_directional.gml index e64201656..c57c04008 100644 --- a/scripts/node_blur_directional/node_blur_directional.gml +++ b/scripts/node_blur_directional/node_blur_directional.gml @@ -19,7 +19,7 @@ function Node_Blur_Directional(_x, _y) : Node_Processor(_x, _y) constructor { outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, PIXEL_SURFACE); - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { var _surf = outputs[| 0].getValue(); if(is_array(_surf)) { if(array_length(_surf) == 0) return; @@ -29,7 +29,7 @@ function Node_Blur_Directional(_x, _y) : Node_Processor(_x, _y) constructor { var ww = surface_get_width(_surf); var hh = surface_get_height(_surf); - inputs[| 2].drawOverlay(_active, _x + ww / 2 * _s, _y + hh / 2 * _s, _s, _mx, _my); + inputs[| 2].drawOverlay(active, _x + ww / 2 * _s, _y + hh / 2 * _s, _s, _mx, _my); } static process_data = function(_outSurf, _data, _output_index) { diff --git a/scripts/node_blur_radial/node_blur_radial.gml b/scripts/node_blur_radial/node_blur_radial.gml index d353bde7b..f033ff21c 100644 --- a/scripts/node_blur_radial/node_blur_radial.gml +++ b/scripts/node_blur_radial/node_blur_radial.gml @@ -18,13 +18,13 @@ function Node_Blur_Radial(_x, _y) : Node_Processor(_x, _y) constructor { outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, PIXEL_SURFACE); - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { var pos = inputs[| 2].getValue(); var px = _x + pos[0] * _s; var py = _y + pos[1] * _s; - inputs[| 1].drawOverlay(_active, px, py, _s, _mx, _my, 0, 64, THEME.anchor_scale_hori); - inputs[| 2].drawOverlay(_active, _x, _y, _s, _mx, _my); + inputs[| 1].drawOverlay(active, px, py, _s, _mx, _my, 0, 64, THEME.anchor_scale_hori); + inputs[| 2].drawOverlay(active, _x, _y, _s, _mx, _my); } static process_data = function(_outSurf, _data, _output_index) { diff --git a/scripts/node_canvas/node_canvas.gml b/scripts/node_canvas/node_canvas.gml index f8d817d96..331ffeec2 100644 --- a/scripts/node_canvas/node_canvas.gml +++ b/scripts/node_canvas/node_canvas.gml @@ -330,8 +330,8 @@ function Node_Canvas(_x, _y) : Node(_x, _y) constructor { surface_update(); } - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { - if(!_active) return; + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { + if(!active) return; if(keyboard_check(vk_alt)) return; var _col = inputs[| 1].getValue(); @@ -384,7 +384,7 @@ function Node_Canvas(_x, _y) : Node(_x, _y) constructor { mouse_pre_draw_y = mouse_cur_y; } - if(mouse_holding && mouse_click(mb_left)) { + if(mouse_holding && mouse_click(mb_left, active)) { draw_point_size(mouse_cur_x, mouse_cur_y, _siz, _brush); draw_line_size(mouse_pre_draw_x, mouse_pre_draw_y, mouse_cur_x, mouse_cur_y, _siz, _brush); diff --git a/scripts/node_checkerboard/node_checkerboard.gml b/scripts/node_checkerboard/node_checkerboard.gml index 4503ba463..43c6700d8 100644 --- a/scripts/node_checkerboard/node_checkerboard.gml +++ b/scripts/node_checkerboard/node_checkerboard.gml @@ -39,13 +39,13 @@ function Node_Checker(_x, _y) : Node(_x, _y) constructor { ["Render", false], 4, 5, ]; - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { var pos = inputs[| 3].getValue(); var px = _x + pos[0] * _s; var py = _y + pos[1] * _s; - inputs[| 3].drawOverlay(_active, _x, _y, _s, _mx, _my); - inputs[| 2].drawOverlay(_active, px, py, _s, _mx, _my); + inputs[| 3].drawOverlay(active, _x, _y, _s, _mx, _my); + inputs[| 2].drawOverlay(active, px, py, _s, _mx, _my); } static update = function() { diff --git a/scripts/node_chromatic_aberration/node_chromatic_aberration.gml b/scripts/node_chromatic_aberration/node_chromatic_aberration.gml index 1365f225f..62f538a3a 100644 --- a/scripts/node_chromatic_aberration/node_chromatic_aberration.gml +++ b/scripts/node_chromatic_aberration/node_chromatic_aberration.gml @@ -21,12 +21,12 @@ function Node_Chromatic_Aberration(_x, _y) : Node_Processor(_x, _y) constructor outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, PIXEL_SURFACE); - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { var pos = inputs[| 1].getValue(); var px = _x + pos[0] * _s; var py = _y + pos[1] * _s; - inputs[| 1].drawOverlay(_active, _x, _y, _s, _mx, _my); + inputs[| 1].drawOverlay(active, _x, _y, _s, _mx, _my); } static process_data = function(_outSurf, _data, _output_index) { diff --git a/scripts/node_collection/node_collection.gml b/scripts/node_collection/node_collection.gml index 023830695..9ba498df4 100644 --- a/scripts/node_collection/node_collection.gml +++ b/scripts/node_collection/node_collection.gml @@ -9,6 +9,27 @@ function Node_Collection(_x, _y) : Node(_x, _y) constructor { custom_input_index = 0; custom_output_index = 0; + static setRenderStatus = function(result) { + rendered = result; + + if(result) { + var siz = ds_list_size(outputs); + for( var i = custom_output_index; i < siz; i++ ) { + var _o = outputs[| i]; + if(_o.node.rendered) continue; + + rendered = false; + break; + } + } + + if(!result && group != -1) + group.setRenderStatus(result); + postSetRenderStatus(result); + } + + static postSetRenderStatus = function(result) {} + function add(_node) { ds_list_add(nodes, _node); var list = _node.group == -1? PANEL_GRAPH.nodes_list : _node.group.nodes; @@ -107,7 +128,7 @@ function Node_Collection(_x, _y) : Node(_x, _y) constructor { static preConnect = function() { sortIO(); - deserialize(keyframe_scale); + deserialize(load_map, load_scale); } static sortIO = function() { @@ -164,20 +185,9 @@ function Node_Collection(_x, _y) : Node(_x, _y) constructor { static resetRenderStatus = function() { for( var i = 0; i < ds_list_size(nodes); i++ ) { - nodes[| i].setRenderStatus(false); + nodes[| i].setUpdate(); if(variable_struct_exists(nodes[| i], "nodes")) nodes[| i].resetRenderStatus(); } } - - static collectionDeserialize = function(scale = false) { - sortIO(); - var _inputs = load_map[? "inputs"]; - if(!ds_list_empty(_inputs) && !ds_list_empty(inputs)) { - var _siz = min(ds_list_size(_inputs), ds_list_size(inputs)); - for(var i = 0; i < _siz; i++) { - inputs[| i].deserialize(_inputs[| i], scale); - } - } - } } \ No newline at end of file diff --git a/scripts/node_color_sampler/node_color_sampler.gml b/scripts/node_color_sampler/node_color_sampler.gml index bfd83b71b..324faf7ad 100644 --- a/scripts/node_color_sampler/node_color_sampler.gml +++ b/scripts/node_color_sampler/node_color_sampler.gml @@ -15,8 +15,8 @@ function Node_Sampler(_x, _y) : Node(_x, _y) constructor { outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, PIXEL_SURFACE); outputs[| 1] = nodeValue(1, "Color", self, JUNCTION_CONNECT.output, VALUE_TYPE.color, c_white); - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { - inputs[| 1].drawOverlay(_active, _x, _y, _s, _mx, _my); + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { + inputs[| 1].drawOverlay(active, _x, _y, _s, _mx, _my); } _input = -1; diff --git a/scripts/node_composite/node_composite.gml b/scripts/node_composite/node_composite.gml index 9ed1595c0..d58f2768a 100644 --- a/scripts/node_composite/node_composite.gml +++ b/scripts/node_composite/node_composite.gml @@ -233,7 +233,7 @@ function Node_Composite(_x, _y) : Node_Processor(_x, _y) constructor { createNewSurface(); } - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { var pad = inputs[| 0].getValue(); var ww = overlay_w; var hh = overlay_h; @@ -366,7 +366,7 @@ function Node_Composite(_x, _y) : Node_Processor(_x, _y) constructor { draw_set_color(COLORS._main_accent); draw_rectangle_border(_dx0, _dy0, _dx1, _dy1, 2); - if(_mouse_press(mb_left, active)) { + if(mouse_press(mb_left, active)) { surf_dragging = hovering; input_dragging = hovering + 1; drag_type = hovering_type; @@ -376,7 +376,7 @@ function Node_Composite(_x, _y) : Node_Processor(_x, _y) constructor { dragging_my = _my; } } else if(hovering_type == 1) { //rot - if(_mouse_press(mb_left, active)) { + if(mouse_press(mb_left, active)) { surf_dragging = hovering; input_dragging = hovering + 2; drag_type = hovering_type; @@ -387,7 +387,7 @@ function Node_Composite(_x, _y) : Node_Processor(_x, _y) constructor { dragging_mx = point_direction(rot_anc_x, rot_anc_y, _mx, _my); } } else if(hovering_type == 2) { //sca - if(_mouse_press(mb_left, active)) { + if(mouse_press(mb_left, active)) { surf_dragging = hovering; input_dragging = hovering + 3; drag_type = hovering_type; diff --git a/scripts/node_counter/node_counter.gml b/scripts/node_counter/node_counter.gml index 5465de576..f8dbd970f 100644 --- a/scripts/node_counter/node_counter.gml +++ b/scripts/node_counter/node_counter.gml @@ -14,13 +14,36 @@ function Node_Counter(_x, _y) : Node_Value_Processor(_x, _y) constructor { inputs[| 0] = nodeValue(0, "Start", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1); inputs[| 1] = nodeValue(1, "Speed", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1); + inputs[| 2] = nodeValue(2, "Mode", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0) + .setDisplay(VALUE_DISPLAY.enum_scroll, ["Frame count", "Animation progress"]); outputs[| 0] = nodeValue(0, "Counter", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, 0); + input_display_list = [ + 2, 0, 1 + ]; + + static step = function() { + var mode = inputs[| 2].getValue(); + switch(mode) { + case 0 : + inputs[| 0].setVisible(true); + break; + case 1 : + inputs[| 0].setVisible(false); + break; + } + } + function process_value_data(_data, index = 0) { var time = ANIMATOR.current_frame; - var spd = _data[1]; - var val = _data[0] + time * spd; + var mode = inputs[| 2].getValue(); + var val; + + switch(mode) { + case 0 : val = _data[0] + time * _data[1]; break; + case 1 : val = time / (ANIMATOR.frames_total - 1) * _data[1]; break; + } return val; } @@ -28,6 +51,6 @@ function Node_Counter(_x, _y) : Node_Value_Processor(_x, _y) constructor { static onDrawNode = function(xx, yy, _mx, _my, _s) { draw_set_text(f_h5, fa_center, fa_center, COLORS._main_text); - draw_text(xx + w / 2 * _s, yy + 10 + h / 2 * _s, outputs[| 0].getValue()); + draw_text_transformed(xx + w / 2 * _s, yy + 10 + h / 2 * _s, outputs[| 0].getValue(), _s, _s, 0); } } \ No newline at end of file diff --git a/scripts/node_crop/node_crop.gml b/scripts/node_crop/node_crop.gml index 89f547d26..b8632ff2d 100644 --- a/scripts/node_crop/node_crop.gml +++ b/scripts/node_crop/node_crop.gml @@ -18,7 +18,7 @@ function Node_Crop(_x, _y) : Node_Processor(_x, _y) constructor { drag_my = 0; drag_sv = 0; - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { if(array_length(current_data) < 2) return; var _inSurf = current_data[0]; @@ -54,7 +54,7 @@ function Node_Crop(_x, _y) : Node_Processor(_x, _y) constructor { if(inputs[| 1].setValue(_splice)) UNDO_HOLDING = true; - if(mouse_release(mb_left)) { + if(mouse_release(mb_left, active)) { drag_side = -1; UNDO_HOLDING = false; } @@ -62,7 +62,7 @@ function Node_Crop(_x, _y) : Node_Processor(_x, _y) constructor { if(distance_to_line_infinite(_mx, _my, sp_r, -hh, sp_r, hh) < 12) { draw_line_width(sp_r, -hh, sp_r, hh, 3); - if(_mouse_press(mb_left, active)) { + if(mouse_press(mb_left, active)) { drag_side = 0; drag_mx = _mx; drag_my = _my; @@ -70,7 +70,7 @@ function Node_Crop(_x, _y) : Node_Processor(_x, _y) constructor { } } else if(distance_to_line_infinite(_mx, _my, -ww, sp_t, ww, sp_t) < 12) { draw_line_width(-ww, sp_t, ww, sp_t, 3); - if(_mouse_press(mb_left, active)) { + if(mouse_press(mb_left, active)) { drag_side = 1; drag_mx = _mx; drag_my = _my; @@ -78,7 +78,7 @@ function Node_Crop(_x, _y) : Node_Processor(_x, _y) constructor { } } else if(distance_to_line_infinite(_mx, _my, sp_l, -hh, sp_l, hh) < 12) { draw_line_width(sp_l, -hh, sp_l, hh, 3); - if(_mouse_press(mb_left, active)) { + if(mouse_press(mb_left, active)) { drag_side = 2; drag_mx = _mx; drag_my = _my; @@ -86,7 +86,7 @@ function Node_Crop(_x, _y) : Node_Processor(_x, _y) constructor { } } else if(distance_to_line_infinite(_mx, _my, -ww, sp_b, ww, sp_b) < 12) { draw_line_width(-ww, sp_b, ww, sp_b, 3); - if(_mouse_press(mb_left, active)) { + if(mouse_press(mb_left, active)) { drag_side = 3; drag_mx = _mx; drag_my = _my; diff --git a/scripts/node_data/node_data.gml b/scripts/node_data/node_data.gml index 31165ff3f..30b699190 100644 --- a/scripts/node_data/node_data.gml +++ b/scripts/node_data/node_data.gml @@ -6,6 +6,7 @@ function Node(_x, _y) constructor { icon = noone; bg_spr = THEME.node_bg; bg_sel_spr = THEME.node_active; + anim_priority = ds_map_size(NODE_MAP); if(!LOADING && !APPENDING) { recordAction(ACTION_TYPE.node_added, self); @@ -122,16 +123,14 @@ function Node(_x, _y) constructor { if(update_on_frame) doUpdate(); for(var i = 0; i < ds_list_size(inputs); i++) { - if(inputs[| i].isAnim()) { + if(inputs[| i].isAnimated()) stack_push = true; - } } } if(stack_push) { setRenderStatus(false); - UPDATE |= RENDER_TYPE.full; - //ds_stack_push(RENDER_STACK, self); + UPDATE |= RENDER_TYPE.partial; } if(auto_height) @@ -150,7 +149,7 @@ function Node(_x, _y) constructor { static onValueUpdate = function(index) {} static isUpdateReady = function() { - if(rendered) return false; + //if(rendered) return false; for(var j = 0; j < ds_list_size(inputs); j++) { var _in = inputs[| j]; @@ -176,8 +175,9 @@ function Node(_x, _y) constructor { var jun = outputs[| i]; for(var j = 0; j < ds_list_size(jun.value_to); j++) { var _to = jun.value_to[| j]; - if(_to.value_from == jun) - _to.node.triggerRender(); + if(_to.value_from != jun) continue; + + _to.node.triggerRender(); } } } @@ -186,6 +186,9 @@ function Node(_x, _y) constructor { static setRenderStatus = function(result) { rendered = result; + + if(!result && group != -1) + group.setRenderStatus(result); } static pointIn = function(_x, _y, _mx, _my, _s) { @@ -236,16 +239,18 @@ function Node(_x, _y) constructor { draw_sprite_stretched_ext(THEME.node_bg_name, 0, xx, yy, w * _s, ui(20), color, 0.75); var cc = COLORS._main_text; - if(PREF_MAP[? "node_show_render_status"]) - cc = rendered? COLORS._main_text : COLORS._main_value_negative; + if(PREF_MAP[? "node_show_render_status"] && !rendered) + cc = isUpdateReady()? COLORS._main_value_positive : COLORS._main_value_negative; + draw_set_text(f_p1, fa_left, fa_center, cc); if(!auto_update) icon = THEME.refresh_s; + var ts = clamp(power(_s, 0.5), 0.5, 1); if(icon) { draw_sprite_ui_uniform(icon, 0, xx + ui(12), yy + ui(10)); - draw_text_cut(xx + ui(24), yy + ui(10), name, w * _s - ui(24)); + draw_text_cut(xx + ui(24), yy + ui(10), name, w * _s - ui(24), ts); } else { - draw_text_cut(xx + ui(8), yy + ui(10), name, w * _s - ui(8)); + draw_text_cut(xx + ui(8), yy + ui(10), name, w * _s - ui(8), ts); } } @@ -466,7 +471,7 @@ function Node(_x, _y) constructor { active_draw_index = ind; } - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) {} + static drawOverlay = function(active, _x, _y, _s, _mx, _my) {} static destroy = function(_merge = false) { active = false; @@ -595,23 +600,36 @@ function Node(_x, _y) constructor { var _ou = outputs[| i]; for(var j = 0; j < ds_list_size(_ou.value_to); j++) { var _to = _ou.value_to[| j]; - if(_to.value_from == _ou && _to.node.active && _to.node.group != group) { - var output_node = noone; - switch(_type) { - case "group" : output_node = new Node_Group_Output(x + w + 64, y, group); break; - case "loop" : output_node = new Node_Iterator_Output(x + w + 64, y, group); break; - } - - if(output_node == noone) continue; - ds_list_add(group.nodes, output_node); - - _to.setFrom(output_node.outParent); - output_node.inputs[| 0].setFrom(_ou); + if(_to.value_from != _ou) continue; + if(!_to.node.active) continue; + if(_to.node.group == group) continue; + + var output_node = noone; + switch(_type) { + case "group" : output_node = new Node_Group_Output(x + w + 64, y, group); break; + case "loop" : output_node = new Node_Iterator_Output(x + w + 64, y, group); break; } + + if(output_node == noone) continue; + ds_list_add(group.nodes, output_node); + + _to.setFrom(output_node.outParent); + output_node.inputs[| 0].setFrom(_ou); } } } + static clone = function() { + var _type = instanceof(self); + var _node = NODE_CREATE_FUCTION[? _type](x, y); + + var _data = serialize(); + _node.deserialize(ds_map_clone(_data)); + _node.node_id = generateUUID(); + + return _node; + } + static serialize = function(scale = false, preset = false) { var _map = ds_map_create(); @@ -644,11 +662,11 @@ function Node(_x, _y) constructor { } static doSerialize = function(_map) {} - keyframe_scale = false; + load_scale = false; load_map = -1; static deserialize = function(_map, scale = false, preset = false) { load_map = _map; - keyframe_scale = scale; + load_scale = scale; if(!preset) { if(APPENDING) { diff --git a/scripts/node_dilate/node_dilate.gml b/scripts/node_dilate/node_dilate.gml index b6a3f4faa..2c4b696e7 100644 --- a/scripts/node_dilate/node_dilate.gml +++ b/scripts/node_dilate/node_dilate.gml @@ -23,13 +23,13 @@ function Node_Dilate(_x, _y) : Node_Processor(_x, _y) constructor { outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, PIXEL_SURFACE); - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { var pos = inputs[| 1].getValue(); var px = _x + pos[0] * _s; var py = _y + pos[1] * _s; - inputs[| 1].drawOverlay(_active, _x, _y, _s, _mx, _my); - inputs[| 3].drawOverlay(_active, px, py, _s, _mx, _my, 0, 1, THEME.anchor_scale_hori); + inputs[| 1].drawOverlay(active, _x, _y, _s, _mx, _my); + inputs[| 3].drawOverlay(active, px, py, _s, _mx, _my, 0, 1, THEME.anchor_scale_hori); } static process_data = function(_outSurf, _data, _output_index) { diff --git a/scripts/node_frame/node_frame.gml b/scripts/node_frame/node_frame.gml index 46279cb29..c7992e594 100644 --- a/scripts/node_frame/node_frame.gml +++ b/scripts/node_frame/node_frame.gml @@ -67,11 +67,13 @@ function Node_Frame(_x, _y) : Node(_x, _y) constructor { active_draw_index = -1; } - var _re_x = (x + w - 4) * _s + _x; - var _re_y = (y + h - 4) * _s + _y; - draw_sprite_ext(THEME.node_resize, 0, _re_x, _re_y, 1, 1, 0, c_white, 0.5); - if(!name_hover && point_in_rectangle(_mx, _my, _re_x - 16 * _s, _re_y - 16 * _s, _re_x + 4 * _s, _re_y + 4 * _s)) { - draw_sprite_ext(THEME.node_resize, 0, _re_x, _re_y, 1, 1, 0, c_white, 1); + var x1 = xx + w * _s; + var y1 = yy + h * _s; + var x0 = xx + w * _s - 16 * _s; + var y0 = yy + h * _s - 16 * _s; + draw_sprite_ext(THEME.node_resize, 0, x1 - 4 * _s, y1 - 4 * _s, 1, 1, 0, c_white, 0.5); + if(!name_hover && point_in_rectangle(_mx, _my, x0, y0, x1, y1)) { + draw_sprite_ext(THEME.node_resize, 0, x1 - 4 * _s, y1 - 4 * _s, 1, 1, 0, c_white, 1); PANEL_GRAPH.drag_locking = true; if(mouse_press(mb_left)) { @@ -86,17 +88,18 @@ function Node_Frame(_x, _y) : Node(_x, _y) constructor { } static pointIn = function(_x, _y, _mx, _my, _s) { - var xx = x * _s + _x; - var yy = y * _s + _y; + var xx = x * _s + _x + w * _s; + var yy = y * _s + _y + h * _s; draw_set_font(f_h5); var ww = (string_width(name) + 16) / _s; var hh = (string_height(name) + 16) / _s; - var _x0 = max(xx + 16, xx - ww); - var _y0 = max(yy + 16, yy - hh); + var _x0 = xx - ww; + var _y0 = yy - hh; - var hover = point_in_rectangle(_mx, _my, _x0, _y0, xx - 32, yy); + var hover = point_in_rectangle(_mx, _my, _x0, _y0, xx, yy) && !point_in_rectangle(_mx, _my, xx - 16 * _s, yy - 16 * _s, xx, yy); name_hover = hover; + //print(string(_my) + ", " + string(_y0)); return hover; } diff --git a/scripts/node_gradient/node_gradient.gml b/scripts/node_gradient/node_gradient.gml index 9ae935325..641e14aa7 100644 --- a/scripts/node_gradient/node_gradient.gml +++ b/scripts/node_gradient/node_gradient.gml @@ -52,8 +52,8 @@ function Node_Gradient(_x, _y) : Node(_x, _y) constructor { ["Shape", false], 2, 3, 4, 6 ]; - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { - inputs[| 6].drawOverlay(_active, _x, _y, _s, _mx, _my); + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { + inputs[| 6].drawOverlay(active, _x, _y, _s, _mx, _my); } static update = function() { diff --git a/scripts/node_grid/node_grid.gml b/scripts/node_grid/node_grid.gml index d46dc5f09..c4330557b 100644 --- a/scripts/node_grid/node_grid.gml +++ b/scripts/node_grid/node_grid.gml @@ -54,8 +54,8 @@ function Node_Grid(_x, _y) : Node(_x, _y) constructor { outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, PIXEL_SURFACE); - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { - inputs[| 1].drawOverlay(_active, _x, _y, _s, _mx, _my); + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { + inputs[| 1].drawOverlay(active, _x, _y, _s, _mx, _my); } static update = function() { diff --git a/scripts/node_group_input/node_group_input.gml b/scripts/node_group_input/node_group_input.gml index c680b0447..da24b0b25 100644 --- a/scripts/node_group_input/node_group_input.gml +++ b/scripts/node_group_input/node_group_input.gml @@ -76,6 +76,8 @@ function Node_Group_Input(_x, _y, _group) : Node(_x, _y) constructor { case VALUE_DISPLAY.slider_range : inParent.setDisplay(_dtype, [_range[0], _range[1], 0.01]); + break; + case VALUE_DISPLAY.rotation_range : if(!is_array(_val) || array_length(_val) != 2) inParent.animator = new valueAnimator([0, 0], inParent); @@ -130,9 +132,8 @@ function Node_Group_Input(_x, _y, _group) : Node(_x, _y) constructor { break; } - if(index == 5) { + if(index == 5) group.sortIO(); - } } static createInput = function(override_order = true) { diff --git a/scripts/node_image_sheet/node_image_sheet.gml b/scripts/node_image_sheet/node_image_sheet.gml index 7e46981ad..56d181fcc 100644 --- a/scripts/node_image_sheet/node_image_sheet.gml +++ b/scripts/node_image_sheet/node_image_sheet.gml @@ -119,7 +119,7 @@ function Node_Image_Sheet(_x, _y) : Node(_x, _y) constructor { return [_y, _x]; } - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { if(inputs[| 0].value_from == noone) return; var _inSurf = inputs[| 0].getValue(); @@ -200,7 +200,7 @@ function Node_Image_Sheet(_x, _y) : Node(_x, _y) constructor { draw_line_width(fr_x1, 0, fr_x1, room_height, 1); draw_line_width(0, fr_y1, room_width, fr_y1, 1); - if(mouse_release(mb_left)) { + if(mouse_release(mb_left, active)) { bound_drag = 0; if(row && col) { @@ -210,7 +210,7 @@ function Node_Image_Sheet(_x, _y) : Node(_x, _y) constructor { inputs[| 4].setValue([ bound_sx + _off[0], bound_sy + _off[1]]); } } - } else if(mouse_press(mb_left, _active)) { + } else if(mouse_press(mb_left, active)) { bound_drag = 1; bound_sx = _ex; bound_sy = _ey; diff --git a/scripts/node_iterate/node_iterate.gml b/scripts/node_iterate/node_iterate.gml index 65d3206c4..0b0d2a71a 100644 --- a/scripts/node_iterate/node_iterate.gml +++ b/scripts/node_iterate/node_iterate.gml @@ -1,3 +1,9 @@ +enum ITERATION_STATUS { + not_ready, + loop, + complete, +} + function Node_create_Iterate(_x, _y) { var node = new Node_Iterate(_x, _y); ds_list_add(PANEL_GRAPH.nodes_list, node); @@ -16,15 +22,14 @@ function Node_Iterate(_x, _y) : Node_Collection(_x, _y) constructor { custom_input_index = 1; loop_start_time = 0; - static setRenderStatus = function(result) { - rendered = result; - if(!rendered) { - iterated = 0; - loop_start_time = get_timer(); - } + static postSetRenderStatus = function(result) { + if(rendered) return; + + iterated = 0; + loop_start_time = get_timer(); } - static outputRendered = function() { + static iterationStatus = function() { var iter = true; for( var i = 0; i < ds_list_size(outputs); i++ ) { var _out = outputs[| i].node; @@ -34,14 +39,14 @@ function Node_Iterate(_x, _y) : Node_Collection(_x, _y) constructor { if(iter) { if(++iterated == inputs[| 0].getValue()) { render_time = get_timer() - loop_start_time; - return 2; + return ITERATION_STATUS.complete; } else if(iterated > inputs[| 0].getValue()) - return 3; + return ITERATION_STATUS.complete; resetRenderStatus(); - return 1; + return ITERATION_STATUS.loop; } - return 0; + return ITERATION_STATUS.not_ready; } } \ No newline at end of file diff --git a/scripts/node_iteration_input/node_iteration_input.gml b/scripts/node_iteration_input/node_iteration_input.gml index b890ea959..fe8f78713 100644 --- a/scripts/node_iteration_input/node_iteration_input.gml +++ b/scripts/node_iteration_input/node_iteration_input.gml @@ -100,6 +100,8 @@ function Node_Iterator_Input(_x, _y, _group) : Node(_x, _y) constructor { case VALUE_DISPLAY.slider_range : inParent.setDisplay(_dtype, [_range[0], _range[1], 0.01]); + break; + case VALUE_DISPLAY.rotation_range : if(!is_array(_val) || array_length(_val) != 2) inParent.animator = new valueAnimator([0, 0], inParent); diff --git a/scripts/node_keyframe/node_keyframe.gml b/scripts/node_keyframe/node_keyframe.gml index 1e75b641e..95b69736c 100644 --- a/scripts/node_keyframe/node_keyframe.gml +++ b/scripts/node_keyframe/node_keyframe.gml @@ -78,9 +78,9 @@ function valueAnimator(_val, _prop) constructor { if(prop.display_type == VALUE_DISPLAY.gradient) return processType(values); if(prop.type == VALUE_TYPE.path) return processType(values[| 0].value); - if(!is_anim) return processType(values[| 0].value); if(ds_list_size(values) == 0) return processType(0); if(ds_list_size(values) == 1) return processType(values[| 0].value); + if(!is_anim) return processType(values[| 0].value); if(ds_list_size(values) > 1) { var _time_first = values[| 0].time; @@ -274,6 +274,7 @@ function valueAnimator(_val, _prop) constructor { static deserialize = function(_list, scale = false) { var base = getValue(); ds_list_clear(values); + for(var i = 0; i < ds_list_size(_list); i++) { var _key = _list[| i]; var _time = _key[| 0]; diff --git a/scripts/node_line/node_line.gml b/scripts/node_line/node_line.gml index f7af37414..2ccc3d9b1 100644 --- a/scripts/node_line/node_line.gml +++ b/scripts/node_line/node_line.gml @@ -39,18 +39,18 @@ function Node_Line(_x, _y) : Node(_x, _y) constructor { inputs[| 10] = nodeValue(10, "Color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_white) .setDisplay(VALUE_DISPLAY.gradient); + inputs[| 11] = nodeValue(11, "Width over length", self, JUNCTION_CONNECT.input, VALUE_TYPE.curve, [1, 1, 1, 1]); + input_display_list = [ ["Output", true], 0, 1, ["Line data", false], 6, 7, 2, - ["Line settings", false], 3, 8, 9, + ["Line settings", false], 3, 11, 8, 9, ["Wiggle", false], 4, 5, ["Render", false], 10 ]; outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, PIXEL_SURFACE); - display_reset(0, 1); - static update = function() { var _dim = inputs[| 0].getValue(); var _bg = inputs[| 1].getValue(); @@ -65,9 +65,10 @@ function Node_Line(_x, _y) : Node(_x, _y) constructor { var _color = inputs[| 10].getValue(); var _col_data = inputs[| 10].getExtraData(); + var _widc = inputs[| 11].getValue(); - var _rat = max(_ratio[0], _ratio[1]) - min(_ratio[0], _ratio[1]); - var _rats = min(_ratio[0], _ratio[1]); + var _rtStr = min(_ratio[0], _ratio[1]); + var _rtLen = max(_ratio[0], _ratio[1]) - _rtStr; var _use_path = _pat != 0 && instanceof(_pat) == "Node_Path"; if(_ang < 0) _ang = 360 + _ang; @@ -94,10 +95,10 @@ function Node_Line(_x, _y) : Node(_x, _y) constructor { var _ox, _nx, _oy, _ny, _ow, _nw, _oa, _na; if(_use_path) { - var ww = _rat / _seg; + var ww = _rtLen / _seg; - var _total = _rat; - var _prog_curr = frac(_shift + _rats) - ww; + var _total = _rtLen; + var _prog_curr = frac(_shift + _rtStr) - ww; var _prog = _prog_curr + 1; var _prog_eli = 0; @@ -110,13 +111,14 @@ function Node_Line(_x, _y) : Node(_x, _y) constructor { _nx = p[0]; _ny = p[1]; - if(_total < _rat) { + if(_total < _rtLen) { var _d = point_direction(_ox, _oy, _nx, _ny); _nx += lengthdir_x(random(_wig) * choose(-1, 1), _d + 90); _ny += lengthdir_y(random(_wig) * choose(-1, 1), _d + 90); } _nw = random_range(_wid[0], _wid[1]); + _nw *= eval_bezier_cubic(1 - _prog_curr, _widc[0], _widc[1], _widc[2], _widc[3]); if(_total <= _prog_curr - _prog) { _na = point_direction(_ox, _oy, _nx, _ny) + 90; @@ -124,7 +126,7 @@ function Node_Line(_x, _y) : Node(_x, _y) constructor { var np = _pat.getPointRatio(_prog_curr + ww); var _nna = point_direction(_nx, _ny, np[0], np[1]) + 90; - if(_total == _rat) + if(_total == _rtLen) _na = _nna; else { var _da = point_direction(_ox, _oy, _nx, _ny) + 90; @@ -133,7 +135,7 @@ function Node_Line(_x, _y) : Node(_x, _y) constructor { } if(_prog_curr > _prog) { - draw_set_color(gradient_eval(_color, _prog_eli / _rat, ds_list_get(_col_data, 0))); + draw_set_color(gradient_eval(_color, _prog_eli / _rtLen, ds_list_get(_col_data, 0))); draw_line_width2_angle(_ox, _oy, _nx, _ny, _ow, _nw, _oa, _na); _total -= (_prog_curr - _prog); } @@ -156,9 +158,9 @@ function Node_Line(_x, _y) : Node(_x, _y) constructor { var _l = point_distance(x0, y0, x1, y1); var _d = point_direction(x0, y0, x1, y1); - var ww = _rat / _seg; - var _total = _rat; - var _prog_curr = frac(_shift + _rats) - ww; + var ww = _rtLen / _seg; + var _total = _rtLen; + var _prog_curr = frac(_shift + _rtStr) - ww; var _prog = _prog_curr + 1; var _prog_eli = 0; @@ -174,9 +176,10 @@ function Node_Line(_x, _y) : Node(_x, _y) constructor { _ny += lengthdir_y(random(_wig) * choose(-1, 1), _d + 90); _nw = random_range(_wid[0], _wid[1]); + _nw *= eval_bezier_cubic(1 - _prog_curr, _widc[0], _widc[1], _widc[2], _widc[3]); if(_prog_curr > _prog) { - draw_set_color(gradient_eval(_color, _prog_eli / _rat, ds_list_get(_col_data, 0))); + draw_set_color(gradient_eval(_color, _prog_eli / _rtLen, ds_list_get(_col_data, 0))); draw_line_width2_angle(_ox, _oy, _nx, _ny, _ow, _nw, _d + 90, _d + 90); _total -= (_prog_curr - _prog); } diff --git a/scripts/node_math/node_math.gml b/scripts/node_math/node_math.gml index d246ca685..f0090aadc 100644 --- a/scripts/node_math/node_math.gml +++ b/scripts/node_math/node_math.gml @@ -69,9 +69,9 @@ function Node_Math(_x, _y) : Node(_x, _y) constructor { case MATH_OPERATOR.add : return a + b; case MATH_OPERATOR.subtract : return a - b; case MATH_OPERATOR.multiply : return a * b; - case MATH_OPERATOR.divide : return a / b; + case MATH_OPERATOR.divide : return b == 0? 0 : a / b; case MATH_OPERATOR.power : return power(a, b); - case MATH_OPERATOR.root : return power(a, 1 / b); + case MATH_OPERATOR.root : return b == 0? 0 : power(a, 1 / b); case MATH_OPERATOR.sin : return sin(degtorad(a)) * b; case MATH_OPERATOR.cos : return cos(degtorad(a)) * b; diff --git a/scripts/node_mirror/node_mirror.gml b/scripts/node_mirror/node_mirror.gml index 310e125cd..957986467 100644 --- a/scripts/node_mirror/node_mirror.gml +++ b/scripts/node_mirror/node_mirror.gml @@ -20,7 +20,7 @@ function Node_Mirror(_x, _y) : Node_Processor(_x, _y) constructor { outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, PIXEL_SURFACE); - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { var _pos = inputs[| 1].getValue(); var _ang = inputs[| 2].getValue(); var _posx = _pos[0] * _s + _x; @@ -34,8 +34,8 @@ function Node_Mirror(_x, _y) : Node_Processor(_x, _y) constructor { draw_set_color(COLORS._main_accent); draw_line(dx0, dy0, dx1, dy1); - inputs[| 1].drawOverlay(_active, _x, _y, _s, _mx, _my); - inputs[| 2].drawOverlay(_active, _posx, _posy, _s, _mx, _my); + inputs[| 1].drawOverlay(active, _x, _y, _s, _mx, _my); + inputs[| 2].drawOverlay(active, _posx, _posy, _s, _mx, _my); } static process_data = function(_outSurf, _data, _output_index) { diff --git a/scripts/node_noise/node_gradient.yy b/scripts/node_noise/node_gradient.yy new file mode 100644 index 000000000..fa813bb58 --- /dev/null +++ b/scripts/node_noise/node_gradient.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "generator", + "path": "folders/nodes/data/generator.yy", + }, + "resourceVersion": "1.0", + "name": "node_gradient", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_noise/node_noise.gml b/scripts/node_noise/node_noise.gml new file mode 100644 index 000000000..f4574c7ae --- /dev/null +++ b/scripts/node_noise/node_noise.gml @@ -0,0 +1,45 @@ +function Node_create_Noise(_x, _y) { + var node = new Node_Noise(_x, _y); + ds_list_add(PANEL_GRAPH.nodes_list, node); + return node; +} + +function Node_Noise(_x, _y) : Node(_x, _y) constructor { + name = "Noise"; + + shader = sh_noise; + uniform_sed = shader_get_uniform(shader, "seed"); + + inputs[| 0] = nodeValue(0, "Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, def_surf_size2 ) + .setDisplay(VALUE_DISPLAY.vector); + + inputs[| 1] = nodeValue(1, "Seed", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, irandom(99999)); + + input_display_list = [ + ["Output", false], 0, + ["Noise", false], 1, + ]; + + outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, PIXEL_SURFACE); + + static update = function() { + var _dim = inputs[| 0].getValue(); + var _sed = inputs[| 1].getValue(); + + var _outSurf = outputs[| 0].getValue(); + if(!is_surface(_outSurf)) { + _outSurf = surface_create_valid(_dim[0], _dim[1]); + outputs[| 0].setValue(_outSurf); + } else + surface_size_to(_outSurf, _dim[0], _dim[1]); + + surface_set_target(_outSurf); + shader_set(shader); + shader_set_uniform_f(uniform_sed, _sed); + + draw_sprite_ext(s_fx_pixel, 0, 0, 0, _dim[0], _dim[1], 0, c_white, 1); + shader_reset(); + surface_reset_target(); + } + doUpdate(); +} \ No newline at end of file diff --git a/scripts/node_noise/node_noise.yy b/scripts/node_noise/node_noise.yy new file mode 100644 index 000000000..9e3c70a37 --- /dev/null +++ b/scripts/node_noise/node_noise.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_noise", + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "generator", + "path": "folders/nodes/data/generator.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_noise/node_perlin.yy b/scripts/node_noise/node_perlin.yy new file mode 100644 index 000000000..c2db638a3 --- /dev/null +++ b/scripts/node_noise/node_perlin.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "generator", + "path": "folders/nodes/data/generator.yy", + }, + "resourceVersion": "1.0", + "name": "node_perlin", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_noise_ani/node_noise_ani.gml b/scripts/node_noise_ani/node_noise_ani.gml index 331b295b1..093982ef2 100644 --- a/scripts/node_noise_ani/node_noise_ani.gml +++ b/scripts/node_noise_ani/node_noise_ani.gml @@ -30,8 +30,8 @@ function Node_Noise_Aniso(_x, _y) : Node(_x, _y) constructor { outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, PIXEL_SURFACE); - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { - inputs[| 3].drawOverlay(_active, _x, _y, _s, _mx, _my); + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { + inputs[| 3].drawOverlay(active, _x, _y, _s, _mx, _my); } static update = function() { diff --git a/scripts/node_noise_cell/node_noise_cell.gml b/scripts/node_noise_cell/node_noise_cell.gml index 66d746add..d708dd372 100644 --- a/scripts/node_noise_cell/node_noise_cell.gml +++ b/scripts/node_noise_cell/node_noise_cell.gml @@ -44,8 +44,8 @@ function Node_Cellular(_x, _y) : Node(_x, _y) constructor { outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, PIXEL_SURFACE); - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { - inputs[| 1].drawOverlay(_active, _x, _y, _s, _mx, _my); + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { + inputs[| 1].drawOverlay(active, _x, _y, _s, _mx, _my); } static update = function() { diff --git a/scripts/node_noise_grid/node_noise_grid.gml b/scripts/node_noise_grid/node_noise_grid.gml index b6992e5e5..8d3af1cc1 100644 --- a/scripts/node_noise_grid/node_noise_grid.gml +++ b/scripts/node_noise_grid/node_noise_grid.gml @@ -40,8 +40,8 @@ function Node_Grid_Noise(_x, _y) : Node(_x, _y) constructor { outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, PIXEL_SURFACE); - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { - inputs[| 1].drawOverlay(_active, _x, _y, _s, _mx, _my); + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { + inputs[| 1].drawOverlay(active, _x, _y, _s, _mx, _my); } static update = function() { diff --git a/scripts/node_normal_light/node_normal_light.gml b/scripts/node_normal_light/node_normal_light.gml index 54f40fba6..c5ba963ad 100644 --- a/scripts/node_normal_light/node_normal_light.gml +++ b/scripts/node_normal_light/node_normal_light.gml @@ -40,13 +40,13 @@ function Node_Normal_Light(_x, _y) : Node_Processor(_x, _y) constructor { outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, PIXEL_SURFACE); - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { var pos = inputs[| 4].getValue(); var px = _x + pos[0] * _s; var py = _y + pos[1] * _s; - inputs[| 4].drawOverlay(_active, _x, _y, _s, _mx, _my); - inputs[| 5].drawOverlay(_active, px, py, _s, _mx, _my); + inputs[| 4].drawOverlay(active, _x, _y, _s, _mx, _my); + inputs[| 5].drawOverlay(active, px, py, _s, _mx, _my); } static process_data = function(_outSurf, _data, _output_index) { diff --git a/scripts/node_particle/node_particle.gml b/scripts/node_particle/node_particle.gml index 246504400..b2088ffa8 100644 --- a/scripts/node_particle/node_particle.gml +++ b/scripts/node_particle/node_particle.gml @@ -514,10 +514,10 @@ function Node_Particle(_x, _y) : Node(_x, _y) constructor { } } - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { - inputs[| 4].drawOverlay(_active, _x, _y, _s, _mx, _my); + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { + inputs[| 4].drawOverlay(active, _x, _y, _s, _mx, _my); if(onDrawOverlay != -1) - onDrawOverlay(_active, _x, _y, _s, _mx, _my); + onDrawOverlay(active, _x, _y, _s, _mx, _my); } static onDrawOverlay = -1; diff --git a/scripts/node_particle_effector/node_particle_effector.gml b/scripts/node_particle_effector/node_particle_effector.gml index 1925dcee0..c79de9ebc 100644 --- a/scripts/node_particle_effector/node_particle_effector.gml +++ b/scripts/node_particle_effector/node_particle_effector.gml @@ -61,8 +61,8 @@ function Node_Particle_Effector(_x, _y) : Node(_x, _y) constructor { current_data = []; - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { - inputs[| 2].drawOverlay(_active, _x, _y, _s, _mx, _my); + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { + inputs[| 2].drawOverlay(active, _x, _y, _s, _mx, _my); var parts = inputs[| 0].getValue(); if(!parts) return; diff --git a/scripts/node_path/node_path.gml b/scripts/node_path/node_path.gml index 614d5dc46..4c80718ff 100644 --- a/scripts/node_path/node_path.gml +++ b/scripts/node_path/node_path.gml @@ -32,7 +32,9 @@ function Node_Path(_x, _y) : Node(_x, _y) constructor { tools = [ [ "Anchor add / remove (ctrl)", THEME.path_tools_add ], - [ "Edit Control point (shift)", THEME.path_tools_anchor ] + [ "Edit Control point (shift)", THEME.path_tools_anchor ], + [ "Rectangle path", THEME.path_tools_rectangle ], + [ "Circle path", THEME.path_tools_circle ], ]; lengths = []; @@ -45,7 +47,7 @@ function Node_Path(_x, _y) : Node(_x, _y) constructor { drag_point_sx = 0; drag_point_sy = 0; - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { var sample = PREF_MAP[? "path_resolution"]; var loop = inputs[| 1].getValue(); var ansize = ds_list_size(inputs) - list_start; @@ -54,40 +56,108 @@ function Node_Path(_x, _y) : Node(_x, _y) constructor { var dx = drag_point_sx + (_mx - drag_point_mx) / _s; var dy = drag_point_sy + (_my - drag_point_my) / _s; - var inp = inputs[| list_start + drag_point]; - var anc = inp.getValue(); - if(drag_type == 0) { - anc[0] = dx; - anc[1] = dy; - if(keyboard_check(vk_control)) { - anc[0] = round(anc[0]); - anc[1] = round(anc[1]); - } - } else if(drag_type == 1) { - anc[2] = dx - anc[0]; - anc[3] = dy - anc[1]; - anc[4] = -anc[2]; - anc[5] = -anc[3]; - if(keyboard_check(vk_control)) { - anc[2] = round(anc[2]); - anc[3] = round(anc[3]); - anc[4] = round(anc[4]); - anc[5] = round(anc[5]); - } - } else if(drag_type == -1) { - anc[4] = dx - anc[0]; - anc[5] = dy - anc[1]; - anc[2] = -anc[4]; - anc[3] = -anc[5]; - if(keyboard_check(vk_control)) { - anc[2] = round(anc[2]); - anc[3] = round(anc[3]); - anc[4] = round(anc[4]); - anc[5] = round(anc[5]); - } - } + if(drag_type < 2) { + var inp = inputs[| list_start + drag_point]; + var anc = inp.getValue(); + if(drag_type == 0) { + anc[0] = dx; + anc[1] = dy; + if(keyboard_check(vk_control)) { + anc[0] = round(anc[0]); + anc[1] = round(anc[1]); + } + } else if(drag_type == 1) { + anc[2] = dx - anc[0]; + anc[3] = dy - anc[1]; + anc[4] = -anc[2]; + anc[5] = -anc[3]; + if(keyboard_check(vk_control)) { + anc[2] = round(anc[2]); + anc[3] = round(anc[3]); + anc[4] = round(anc[4]); + anc[5] = round(anc[5]); + } + } else if(drag_type == -1) { + anc[4] = dx - anc[0]; + anc[5] = dy - anc[1]; + anc[2] = -anc[4]; + anc[3] = -anc[5]; + if(keyboard_check(vk_control)) { + anc[2] = round(anc[2]); + anc[3] = round(anc[3]); + anc[4] = round(anc[4]); + anc[5] = round(anc[5]); + } + } + + inp.setValue(anc); + } else if(drag_type == 2) { + var minx = min((_mx - _x) / _s, (drag_point_mx - _x) / _s); + var maxx = max((_mx - _x) / _s, (drag_point_mx - _x) / _s); + var miny = min((_my - _y) / _s, (drag_point_my - _y) / _s); + var maxy = max((_my - _y) / _s, (drag_point_my - _y) / _s); + + var a = []; + for( var i = 0; i < 4; i++ ) + a[i] = inputs[| list_start + i].getValue(); + + a[0][0] = minx; + a[0][1] = miny; + + a[1][0] = maxx; + a[1][1] = miny; + + a[2][0] = maxx; + a[2][1] = maxy; + + a[3][0] = minx; + a[3][1] = maxy; + + for( var i = 0; i < 4; i++ ) + inputs[| list_start + i].setValue(a[i]); + } else if(drag_type == 3) { + var minx = min((_mx - _x) / _s, (drag_point_mx - _x) / _s); + var maxx = max((_mx - _x) / _s, (drag_point_mx - _x) / _s); + var miny = min((_my - _y) / _s, (drag_point_my - _y) / _s); + var maxy = max((_my - _y) / _s, (drag_point_my - _y) / _s); + + var a = []; + for( var i = 0; i < 4; i++ ) + a[i] = inputs[| list_start + i].getValue(); + + a[0][0] = (minx + maxx) / 2; + a[0][1] = miny; + a[0][2] = -(maxx - minx) * 0.27614; + a[0][3] = 0; + a[0][4] = (maxx - minx) * 0.27614; + a[0][5] = 0; + + a[1][0] = maxx; + a[1][1] = (miny + maxy) / 2; + a[1][2] = 0; + a[1][3] = -(maxy - miny) * 0.27614; + a[1][4] = 0; + a[1][5] = (maxy - miny) * 0.27614; + + a[2][0] = (minx + maxx) / 2; + a[2][1] = maxy; + a[2][2] = (maxx - minx) * 0.27614; + a[2][3] = 0; + a[2][4] = -(maxx - minx) * 0.27614; + a[2][5] = 0; + + a[3][0] = minx; + a[3][1] = (miny + maxy) / 2; + a[3][2] = 0; + a[3][3] = (maxy - miny) * 0.27614; + a[3][4] = 0; + a[3][5] = -(maxy - miny) * 0.27614; + + for( var i = 0; i < 4; i++ ) + inputs[| list_start + i].setValue(a[i]); + } + - inp.setValue(anc); if(mouse_release(mb_left)) drag_point = -1; } @@ -168,7 +238,7 @@ function Node_Path(_x, _y) : Node(_x, _y) constructor { if(keyboard_check(vk_shift) || PANEL_PREVIEW.tool_index == 1) { draw_sprite_ui_uniform(THEME.cursor_path_anchor, 0, _mx + 16, _my + 16); - if(_mouse_press(mb_left, active)) { + if(mouse_press(mb_left, active)) { if(_a[2] != 0 || _a[3] != 0 || _a[4] != 0 || _a[5] != 0) { _a[2] = 0; _a[3] = 0; @@ -192,14 +262,14 @@ function Node_Path(_x, _y) : Node(_x, _y) constructor { } else if(keyboard_check(vk_control) || PANEL_PREVIEW.tool_index == 0) { draw_sprite_ui_uniform(THEME.cursor_path_remove, 0, _mx + 16, _my + 16); - if(_mouse_press(mb_left, active)) { + if(mouse_press(mb_left, active)) { ds_list_delete(inputs, list_start + anchor_hover); doUpdate(); } } else { draw_sprite_ui_uniform(THEME.cursor_path_move, 0, _mx + 16, _my + 16); - if(_mouse_press(mb_left, active)) { + if(mouse_press(mb_left, active)) { drag_point = anchor_hover; drag_type = hover_type; drag_point_mx = _mx; @@ -219,7 +289,7 @@ function Node_Path(_x, _y) : Node(_x, _y) constructor { } else if(keyboard_check(vk_control) || PANEL_PREVIEW.tool_index == 0) { draw_sprite_ui_uniform(THEME.cursor_path_add, 0, _mx + 16, _my + 16); - if(_mouse_press(mb_left, active)) { + if(mouse_press(mb_left, active)) { drag_point = ds_list_size(inputs) - list_start; createAnchor((_mx - _x) / _s, (_my - _y) / _s); @@ -229,6 +299,22 @@ function Node_Path(_x, _y) : Node(_x, _y) constructor { drag_point_sx = (_mx - _x) / _s; drag_point_sy = (_my - _y) / _s; } + } else if(PANEL_PREVIEW.tool_index >= 2) { + draw_sprite_ui_uniform(THEME.cursor_path_add, 0, _mx + 16, _my + 16); + + if(mouse_press(mb_left, active)) { + while(ds_list_size(inputs) > list_start) + ds_list_delete(inputs, list_start); + + drag_point = 0; + drag_type = PANEL_PREVIEW.tool_index; + drag_point_mx = _mx; + drag_point_my = _my; + inputs[| 1].setValue(true); + + repeat(4) + createAnchor((_mx - _x) / _s, (_my - _y) / _s); + } } } diff --git a/scripts/node_registry/node_registry.gml b/scripts/node_registry/node_registry.gml index 953da9a3d..f948bb66f 100644 --- a/scripts/node_registry/node_registry.gml +++ b/scripts/node_registry/node_registry.gml @@ -133,9 +133,10 @@ function NodeObject(_name, _spr, _create, tags = []) constructor { addNodeObject(threeD, "Normal light", s_node_normal_light, "Node_Normal_Light", Node_create_Normal_Light); addNodeObject(threeD, "Bevel", s_node_bevel, "Node_Bevel", Node_create_Bevel); addNodeObject(threeD, "Sprite stack", s_node_stack, "Node_Sprite_Stack", Node_create_Sprite_Stack); + addNodeObject(threeD, "3D Obj", s_node_3d_obj, "Node_3D_Obj", Node_create_3D_Obj); addNodeObject(threeD, "3D Cube", s_node_3d_cube, "Node_3D_Cube", Node_create_3D_Cube); addNodeObject(threeD, "3D Cylinder", s_node_3d_cylinder, "Node_3D_Cylinder", Node_create_3D_Cylinder); - addNodeObject(threeD, "3D Obj", s_node_3d_obj, "Node_3D_Obj", Node_create_3D_Obj); + addNodeObject(threeD, "3D Extrude", s_node_3d_extrude, "Node_3D_Extrude", Node_create_3D_Extrude); var number = ds_list_create(); addNodeCatagory("Number", number); @@ -182,6 +183,7 @@ function NodeObject(_name, _spr, _create, tags = []) constructor { addNodeObject(generator, "Particle", s_node_particle, "Node_Particle", Node_create_Particle); addNodeObject(generator, "Particle Effector", s_node_particle_effector, "Node_Particle_Effector", Node_create_Particle_Effector, ["affector"]); addNodeObject(generator, "Scatter", s_node_scatter, "Node_Scatter", Node_create_Scatter); + addNodeObject(generator, "Noise", s_node_noise, "Node_Noise", Node_create_Noise); addNodeObject(generator, "Perlin noise", s_node_noise_perlin, "Node_Perlin", Node_create_Perlin); addNodeObject(generator, "Cellular noise", s_node_noise_cell, "Node_Cellular", Node_create_Cellular); addNodeObject(generator, "Grid noise", s_node_grid_noise, "Node_Grid_Noise", Node_create_Grid_Noise); diff --git a/scripts/node_scatter/node_scatter.gml b/scripts/node_scatter/node_scatter.gml index e1a00ca47..f7d0e67ff 100644 --- a/scripts/node_scatter/node_scatter.gml +++ b/scripts/node_scatter/node_scatter.gml @@ -50,8 +50,8 @@ function Node_Scatter(_x, _y) : Node(_x, _y) constructor { temp_surf = [ PIXEL_SURFACE, PIXEL_SURFACE ]; - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { - inputs[| 5].drawOverlay(_active, _x, _y, _s, _mx, _my); + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { + inputs[| 5].drawOverlay(active, _x, _y, _s, _mx, _my); } static update = function() { diff --git a/scripts/node_seperate_shapes/node_seperate_shapes.gml b/scripts/node_seperate_shapes/node_seperate_shapes.gml index 283bde829..ec8581dd3 100644 --- a/scripts/node_seperate_shapes/node_seperate_shapes.gml +++ b/scripts/node_seperate_shapes/node_seperate_shapes.gml @@ -6,7 +6,7 @@ function Node_create_Seperate_Shape(_x, _y) { function Node_Seperate_Shape(_x, _y) : Node(_x, _y) constructor { name = "Separate shape"; - //auto_update = false; + auto_update = false; uniform_it_dim = shader_get_uniform(sh_seperate_shape_ite, "dimension"); diff --git a/scripts/node_shadow/node_shadow.gml b/scripts/node_shadow/node_shadow.gml index 7f5039049..443debfc9 100644 --- a/scripts/node_shadow/node_shadow.gml +++ b/scripts/node_shadow/node_shadow.gml @@ -28,7 +28,7 @@ function Node_Shadow(_x, _y) : Node_Processor(_x, _y) constructor { outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, PIXEL_SURFACE); - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { var _surf = outputs[| 0].getValue(); if(is_array(_surf)) { if(array_length(_surf) == 0) return; @@ -38,7 +38,7 @@ function Node_Shadow(_x, _y) : Node_Processor(_x, _y) constructor { var ww = surface_get_width(_surf) * _s; var hh = surface_get_height(_surf) * _s; - inputs[| 3].drawOverlay(_active, _x + ww / 2, _y + hh / 2, _s, _mx, _my); + inputs[| 3].drawOverlay(active, _x + ww / 2, _y + hh / 2, _s, _mx, _my); } static process_data = function(_outSurf, _data, _output_index) { diff --git a/scripts/node_simple_shape/node_simple_shape.gml b/scripts/node_simple_shape/node_simple_shape.gml index d04a66d1d..4367f9539 100644 --- a/scripts/node_simple_shape/node_simple_shape.gml +++ b/scripts/node_simple_shape/node_simple_shape.gml @@ -28,6 +28,7 @@ function Node_Shape(_x, _y) : Node_Processor(_x, _y) constructor { uniform_aa = shader_get_uniform(shader, "aa"); uniform_dim = shader_get_uniform(shader, "dimension"); uniform_bgCol = shader_get_uniform(shader, "bgColor"); + uniform_drawDF = shader_get_uniform(shader, "drawDF"); inputs[| 0] = nodeValue(0, "Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, def_surf_size2 ) .setDisplay(VALUE_DISPLAY.vector); @@ -62,16 +63,18 @@ function Node_Shape(_x, _y) : Node_Processor(_x, _y) constructor { inputs[| 11] = nodeValue(11, "Background color", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_black); + inputs[| 12] = nodeValue(12, "Distance field", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, false); + outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, PIXEL_SURFACE); input_display_list = [ ["Surface", false], 0, 6, ["Shape", false], 2, 3, 9, 4, 5, 7, 8, - ["Render", true], 10, 1, 11 + ["Render", true], 10, 1, 11, 12 ]; - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { - inputs[| 3].drawOverlay(_active, _x, _y, _s, _mx, _my); + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { + inputs[| 3].drawOverlay(active, _x, _y, _s, _mx, _my); } static process_data = function(_outSurf, _data, _output_index) { @@ -82,6 +85,7 @@ function Node_Shape(_x, _y) : Node_Processor(_x, _y) constructor { var _aa = _data[6]; var _corner = _data[9]; var _color = _data[10]; + var _df = _data[12]; var _bgcol = _bg? colToVec4(_data[11]) : [0, 0, 0, 0]; inputs[| 11].setVisible(_bg); @@ -141,7 +145,7 @@ function Node_Shape(_x, _y) : Node_Processor(_x, _y) constructor { shader_set_uniform_f_array(uniform_arange, [ sin(range), cos(range) ] ); shader_set_uniform_f(uniform_inner, _data[5] / 2); break; - case NODE_SHAPE_TYPE.capsule : + case NODE_SHAPE_TYPE.capsule : inputs[| 4].setVisible(false); inputs[| 5].setVisible(false); inputs[| 7].setVisible(false); @@ -154,6 +158,7 @@ function Node_Shape(_x, _y) : Node_Processor(_x, _y) constructor { shader_set_uniform_i(uniform_shape, _shape); shader_set_uniform_f_array(uniform_bgCol, _bgcol); shader_set_uniform_i(uniform_aa, _aa); + shader_set_uniform_i(uniform_drawDF, _df); shader_set_uniform_f(uniform_corner, _corner); shader_set_uniform_f_array(uniform_cent, [ _posit[0] / _dim[0], _posit[1] / _dim[1] ]); diff --git a/scripts/node_sprite_stack/node_sprite_stack.gml b/scripts/node_sprite_stack/node_sprite_stack.gml index 46b5ab37d..39d5ef9ba 100644 --- a/scripts/node_sprite_stack/node_sprite_stack.gml +++ b/scripts/node_sprite_stack/node_sprite_stack.gml @@ -36,13 +36,13 @@ function Node_Sprite_Stack(_x, _y) : Node(_x, _y) constructor { ["Render", false], 6, 7, ]; - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { var pos = inputs[| 4].getValue(); var px = _x + pos[0] * _s; var py = _y + pos[1] * _s; - inputs[| 4].drawOverlay(_active, _x, _y, _s, _mx, _my); - inputs[| 5].drawOverlay(_active, px, py, _s, _mx, _my); + inputs[| 4].drawOverlay(active, _x, _y, _s, _mx, _my); + inputs[| 5].drawOverlay(active, px, py, _s, _mx, _my); } static update = function() { diff --git a/scripts/node_stripe/node_stripe.gml b/scripts/node_stripe/node_stripe.gml index 49c141af9..f5abbecbd 100644 --- a/scripts/node_stripe/node_stripe.gml +++ b/scripts/node_stripe/node_stripe.gml @@ -50,13 +50,13 @@ function Node_Stripe(_x, _y) : Node(_x, _y) constructor { ["Render", false], 3, 6, 7 ]; - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { var pos = inputs[| 4].getValue(); var px = _x + pos[0] * _s; var py = _y + pos[1] * _s; - inputs[| 4].drawOverlay(_active, _x, _y, _s, _mx, _my); - inputs[| 2].drawOverlay(_active, px, py, _s, _mx, _my); + inputs[| 4].drawOverlay(active, _x, _y, _s, _mx, _my); + inputs[| 2].drawOverlay(active, px, py, _s, _mx, _my); } static update = function() { diff --git a/scripts/node_transform/node_transform.gml b/scripts/node_transform/node_transform.gml index d531acd88..fa5b2e342 100644 --- a/scripts/node_transform/node_transform.gml +++ b/scripts/node_transform/node_transform.gml @@ -149,6 +149,7 @@ function Node_Transform(_x, _y) : Node_Processor(_x, _y) constructor { var ww = surface_get_width(ins); var hh = surface_get_height(ins); var _ww = ww, _hh = hh; + if(_ww <= 1 && _hh <= 1) return _outSurf; switch(out_type) { case OUTPUT_SCALING.same_as_input : @@ -249,7 +250,7 @@ function Node_Transform(_x, _y) : Node_Processor(_x, _y) constructor { overlay_drag_ma = 0; overlay_drag_sa = 0; - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { if(array_length(current_data) < ds_list_size(inputs)) return; var _surf = inputs[| 0].getValue(); @@ -424,7 +425,7 @@ function Node_Transform(_x, _y) : Node_Processor(_x, _y) constructor { UNDO_HOLDING = false; } } else { - if(_mouse_press(mb_left, active)) { + if(mouse_press(mb_left, active)) { if(point_in_circle(_mx, _my, bax, bay, 8)) { overlay_dragging = 2; overlay_drag_mx = _mx; diff --git a/scripts/node_transform_single/node_transform_single.gml b/scripts/node_transform_single/node_transform_single.gml index dbad1fc47..d8d6754d6 100644 --- a/scripts/node_transform_single/node_transform_single.gml +++ b/scripts/node_transform_single/node_transform_single.gml @@ -53,7 +53,7 @@ function Node_Transform_Single(_x, _y) : Node_Processor(_x, _y) constructor { overlay_drag_ma = 0; overlay_drag_sa = 0; - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { if(array_length(current_data) < ds_list_size(inputs)) return; var _surf = outputs[| 0].getValue(); @@ -154,7 +154,7 @@ function Node_Transform_Single(_x, _y) : Node_Processor(_x, _y) constructor { if(mouse_release(mb_left)) overlay_dragging = 0; } else { - if(_mouse_press(mb_left, active)) { + if(mouse_press(mb_left, active)) { if(point_in_circle(_mx, _my, bax, bay, 8)) { overlay_dragging = 2; overlay_drag_mx = _mx; diff --git a/scripts/node_twirl/node_twirl.gml b/scripts/node_twirl/node_twirl.gml index 28be4a65e..d0c24a79d 100644 --- a/scripts/node_twirl/node_twirl.gml +++ b/scripts/node_twirl/node_twirl.gml @@ -23,13 +23,13 @@ function Node_Twirl(_x, _y) : Node_Processor(_x, _y) constructor { outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, PIXEL_SURFACE); - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { var pos = inputs[| 1].getValue(); var px = _x + pos[0] * _s; var py = _y + pos[1] * _s; - inputs[| 1].drawOverlay(_active, _x, _y, _s, _mx, _my); - inputs[| 3].drawOverlay(_active, px, py, _s, _mx, _my, 0, 1, THEME.anchor_scale_hori); + inputs[| 1].drawOverlay(active, _x, _y, _s, _mx, _my); + inputs[| 3].drawOverlay(active, px, py, _s, _mx, _my, 0, 1, THEME.anchor_scale_hori); } static process_data = function(_outSurf, _data, _output_index) { diff --git a/scripts/node_value/node_value.gml b/scripts/node_value/node_value.gml index b19896e6e..0b8930772 100644 --- a/scripts/node_value/node_value.gml +++ b/scripts/node_value/node_value.gml @@ -368,8 +368,7 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T case VALUE_TYPE.curve : visible = false; display_type = VALUE_DISPLAY.curve; - editWidget = new curveBox( - function(_modified) { setValue(_modified); }); + editWidget = new curveBox(function(_modified) { setValue(_modified); }); break; case VALUE_TYPE.text : editWidget = new textArea(TEXTBOX_INPUT.text, function(str) { @@ -490,9 +489,9 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T static __anim = function() { return animator.is_anim || node.update_on_frame; } - static isAnim = function() { + static isAnimated = function() { if(value_from == noone) return __anim(); - else return value_from.isAnim() || value_from.__anim(); + else return value_from.isAnimated() || value_from.__anim(); } static showValue = function() { @@ -598,8 +597,11 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T //show_debug_message("connected " + name + " to " + _valueFrom.name) node.onValueUpdate(index, _o); - if(_update) node.updateValueFrom(index); - if(_update && node.auto_update) _valueFrom.node.triggerRender(); + if(_update) { + node.updateValueFrom(index); + node.triggerRender(); + if(node.use_cache) node.clearCache(); + } MODIFIED = true; return true; @@ -679,7 +681,7 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T drag_my = 0; drag_sx = 0; drag_sy = 0; - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { var _val = getValue(); var hover = -1; @@ -717,7 +719,7 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T if(point_in_circle(_mx, _my, _ax, _ay, 8)) { hover = 1; index = 1; - if(_mouse_press(mb_left, active)) { + if(mouse_press(mb_left, active)) { drag_type = 1; drag_mx = _mx; drag_my = _my; @@ -764,7 +766,7 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T hover = 1; draw_sprite_ui(THEME.anchor_rotate, 1, _ax, _ay, 1, 1, _val - 90, c_white, 1); - if(_mouse_press(mb_left, active)) { + if(mouse_press(mb_left, active)) { drag_type = 1; drag_mx = _mx; drag_my = _my; @@ -810,7 +812,7 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T if(point_in_circle(_mx, _my, _ax, _ay, 8)) { hover = 1; draw_sprite_ui_uniform(THEME.anchor_selector, 1, _ax, _ay); - if(_mouse_press(mb_left, active)) { + if(mouse_press(mb_left, active)) { drag_type = 1; drag_mx = _mx; drag_my = _my; @@ -890,7 +892,7 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T } } - if(_active) { + if(active) { if(point_in_circle(_mx, _my, _ax + _aw, _ay + _ah, 8)) { hover = 2; if(mouse_press(mb_left)) { @@ -1007,7 +1009,7 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T if(point_in_circle(_mx, _my, _ax, _ay, 8)) { hover = 1; draw_sprite_ui_uniform(THEME.anchor_selector, 1, _ax, _ay); - if(_mouse_press(mb_left, active)) { + if(mouse_press(mb_left, active)) { drag_type = 1; drag_mx = _mx; drag_my = _my; @@ -1019,7 +1021,7 @@ function NodeValue(_index, _name, _node, _connect, _type, _value, _tag = VALUE_T if(_val[PUPPET_CONTROL.mode] == PUPPET_FORCE_MODE.move && point_in_circle(_mx, _my, _ax1, _ay1, 8)) { hover = 2; draw_sprite_ui_uniform(THEME.anchor_selector, 0, _ax1, _ay1); - if(_mouse_press(mb_left, active)) { + if(mouse_press(mb_left, active)) { drag_type = 2; drag_mx = _mx; drag_my = _my; diff --git a/scripts/node_wiggler/node_wiggler.gml b/scripts/node_wiggler/node_wiggler.gml index bd1baf12f..679c66e2a 100644 --- a/scripts/node_wiggler/node_wiggler.gml +++ b/scripts/node_wiggler/node_wiggler.gml @@ -7,7 +7,7 @@ function Node_create_Wiggler(_x, _y) { function Node_Wiggler(_x, _y) : Node_Value_Processor(_x, _y) constructor { name = "Wiggler"; update_on_frame = true; - previewable = false; + previewable = false; w = 96; min_h = 0; @@ -15,8 +15,8 @@ function Node_Wiggler(_x, _y) : Node_Value_Processor(_x, _y) constructor { inputs[| 0] = nodeValue(0, "Range", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [0, 1]) .setDisplay(VALUE_DISPLAY.vector); - inputs[| 1] = nodeValue(1, "Frequency", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, [ 3, 5 ] ) - .setDisplay(VALUE_DISPLAY.slider_range, [1, 32, 1]); + inputs[| 1] = nodeValue(1, "Frequency", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 4 ) + .setDisplay(VALUE_DISPLAY.slider, [1, 32, 1]); inputs[| 2] = nodeValue(2, "Seed", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, irandom(9999999) ); @@ -37,34 +37,27 @@ function Node_Wiggler(_x, _y) : Node_Value_Processor(_x, _y) constructor { var fre = inputs[| 1].getValue(); var sed = inputs[| 2].getValue(); - var _fmin = ANIMATOR.frames_total / max(1, min(fre[0], fre[1])); - var _fmax = ANIMATOR.frames_total / max(1, max(fre[0], fre[1])); - var _val; - - for( var i = 0; i < ANIMATOR.frames_total + 1; i++ ) { - _val = getWiggle(ran[0], ran[1], _fmin, _fmax, i, sed); - random_value[i] = _val; + var step = ANIMATOR.frames_total / 64; + for( var i = 0; i < 64; i++ ) { + random_value[i] = getWiggle(ran[0], ran[1], ANIMATOR.frames_total / fre, step * i, sed, 0, ANIMATOR.frames_total); } } function process_value_data(_data, index = 0) { - if(array_length(random_value) != ANIMATOR.frames_total + 1) { - array_resize(random_value, ANIMATOR.frames_total + 1); - onValueUpdate(0); - } - + var ran = inputs[| 0].getValue(); + var fre = inputs[| 1].getValue(); + var sed = inputs[| 2].getValue(); var time = ANIMATOR.current_frame; - return random_value[time]; + + return getWiggle(ran[0], ran[1], ANIMATOR.frames_total / fre, time, sed, 0, ANIMATOR.frames_total); } doUpdate(); static onDrawNode = function(xx, yy, _mx, _my, _s) { - if(array_length(random_value) != ANIMATOR.frames_total + 1) { - array_resize(random_value, ANIMATOR.frames_total + 1); - onValueUpdate(0); - } - + var ran = inputs[| 0].getValue(); + var fre = inputs[| 1].getValue(); + var sed = inputs[| 2].getValue(); var disp = inputs[| 3].getValue(); var time = ANIMATOR.current_frame; var total_time = ANIMATOR.frames_total; @@ -73,7 +66,7 @@ function Node_Wiggler(_x, _y) : Node_Value_Processor(_x, _y) constructor { case 0 : min_h = 0; draw_set_text(f_h5, fa_center, fa_center, COLORS._main_text); - var str = string(random_value[time]); + var str = getWiggle(ran[0], ran[1], ANIMATOR.frames_total / fre, time, sed, 0, ANIMATOR.frames_total); var ss = string_scale(str, (w - 16) * _s, (h - 16) * _s - 20); draw_text_transformed(xx + w / 2 * _s, yy + 10 + h / 2 * _s, str, ss, ss, 0); break; @@ -81,16 +74,10 @@ function Node_Wiggler(_x, _y) : Node_Value_Processor(_x, _y) constructor { w = 128; min_h = 96; - var ran = inputs[| 0].getValue(); - var fre = inputs[| 1].getValue(); - var sed = inputs[| 2].getValue(); - var _min = ran[0]; var _max = ran[1]; var val = (_min + _max) / 2; var _ran = _max - _min; - var _fmin = max(1, fre[0]); - var _fmax = max(1, fre[1]); var x0 = xx + 8 * _s; var x1 = xx + (w - 8) * _s; @@ -105,10 +92,10 @@ function Node_Wiggler(_x, _y) : Node_Value_Processor(_x, _y) constructor { var _fx = x0 + (time / total_time * ww); draw_line(_fx, y0, _fx, y1); - var lw = ww / (array_length(random_value) - 1); - draw_set_color(COLORS.node_wiggler_line); + var lw = ww / (64 - 1); + draw_set_color(COLORS.node_wiggler_frame); var ox, oy; - for( var i = 0; i < array_length(random_value); i++ ) { + for( var i = 0; i < 64; i++ ) { var _x = x0 + i * lw; var _y = yc - (random_value[i] - val) / (_ran * 2) * hh; if(i) diff --git a/scripts/node_wrap/node_wrap.gml b/scripts/node_wrap/node_wrap.gml index fb7c2f32d..b465ef6c7 100644 --- a/scripts/node_wrap/node_wrap.gml +++ b/scripts/node_wrap/node_wrap.gml @@ -28,7 +28,7 @@ function Node_Warp(_x, _y) : Node_Processor(_x, _y) constructor { drag_my = 0; drag_sv = 0; - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { if(array_length(current_data) < ds_list_size(inputs)) return; var _surf = outputs[| 0].getValue(); @@ -60,8 +60,6 @@ function Node_Warp(_x, _y) : Node_Processor(_x, _y) constructor { draw_line(br[0], br[1], tr[0], tr[1]); draw_line(br[0], br[1], bl[0], bl[1]); - var active = _active; - if(inputs[| 1].drawOverlay(active, _x, _y, _s, _mx, _my, ww, hh)) active = false; if(inputs[| 2].drawOverlay(active, _x, _y, _s, _mx, _my, ww, hh)) diff --git a/scripts/node_wrap_area/node_wrap_area.gml b/scripts/node_wrap_area/node_wrap_area.gml index 84f3737e0..46b049adc 100644 --- a/scripts/node_wrap_area/node_wrap_area.gml +++ b/scripts/node_wrap_area/node_wrap_area.gml @@ -13,12 +13,11 @@ function Node_Wrap_Area(_x, _y) : Node_Processor(_x, _y) constructor { outputs[| 0] = nodeValue(0, "Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, PIXEL_SURFACE); - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { - inputs[| 1].drawOverlay(_active, _x, _y, _s, _mx, _my); + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { + inputs[| 1].drawOverlay(active, _x, _y, _s, _mx, _my); } static process_data = function(_outSurf, _data, _output_index) { - print("update") var _inSurf = _data[0]; var _area = _data[1]; diff --git a/scripts/node_wrap_mesh/node_wrap_mesh.gml b/scripts/node_wrap_mesh/node_wrap_mesh.gml index 82a208107..81a1c65bb 100644 --- a/scripts/node_wrap_mesh/node_wrap_mesh.gml +++ b/scripts/node_wrap_mesh/node_wrap_mesh.gml @@ -53,7 +53,7 @@ function Node_Mesh_Warp(_x, _y) : Node(_x, _y) constructor { attributes[? "pin"] = ds_map_create(); - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { for(var i = 0; i < ds_list_size(data.tris); i++) { data.tris[| i].drawPoints(_x, _y, _s); } @@ -63,14 +63,14 @@ function Node_Mesh_Warp(_x, _y) : Node(_x, _y) constructor { var hover = -1; for(var i = control_index; i < ds_list_size(inputs); i++) { - if(inputs[| i].drawOverlay(_active, _x, _y, _s, _mx, _my)) + if(inputs[| i].drawOverlay(active, _x, _y, _s, _mx, _my)) hover = i; } var _tool = PANEL_PREVIEW.tool_index; var _sub_tool = PANEL_PREVIEW.tool_sub_index; - if(!_active) return; + if(!active) return; if(_tool == 0) { if(mouse_press(mb_left)) { if(hover == -1) { diff --git a/scripts/node_zigzag/node_zigzag.gml b/scripts/node_zigzag/node_zigzag.gml index 0c34744a2..d1058b9b0 100644 --- a/scripts/node_zigzag/node_zigzag.gml +++ b/scripts/node_zigzag/node_zigzag.gml @@ -37,8 +37,8 @@ function Node_Zigzag(_x, _y) : Node(_x, _y) constructor { ["Render", false], 3, 4, 5, ]; - static drawOverlay = function(_active, _x, _y, _s, _mx, _my) { - inputs[| 2].drawOverlay(_active, _x, _y, _s, _mx, _my); + static drawOverlay = function(active, _x, _y, _s, _mx, _my) { + inputs[| 2].drawOverlay(active, _x, _y, _s, _mx, _my); } static update = function() { diff --git a/scripts/obj_reader/obj_reader.gml b/scripts/obj_reader/obj_reader.gml index 804a48760..edebc15f8 100644 --- a/scripts/obj_reader/obj_reader.gml +++ b/scripts/obj_reader/obj_reader.gml @@ -1,13 +1,17 @@ function readObj(path) { + if(!file_exists(path)) return noone; + var _VB = []; var _VBT = []; + var _VBN = []; var mats = []; + var matIndex = []; var v = ds_list_create(); var vt = ds_list_create(); + var vn = ds_list_create(); var f = ds_list_create(); var ft = ds_list_create(); - - if(!file_exists(path)) return noone; + var fn = ds_list_create(); var file = file_text_open_read(path); while(!file_text_eof(file)) { @@ -22,7 +26,10 @@ function readObj(path) { ds_list_add(v, [ toNumber(sep[1]), toNumber(sep[2]), toNumber(sep[3]) ]); break; case "vt" : - ds_list_add(vt, [ toNumber(sep[1]), toNumber(sep[2]) ]); + ds_list_add(vt, [ 1 + toNumber(sep[1]), -toNumber(sep[2]) ]); + break; + case "vn" : + ds_list_add(vn, [ toNumber(sep[1]), toNumber(sep[2]), toNumber(sep[3]) ]); break; case "f" : var f1 = string_splice(sep[1], "/"); @@ -31,14 +38,18 @@ function readObj(path) { ds_list_add(f, [f1[0], f2[0], f3[0]]); ds_list_add(ft, [f1[1], f2[1], f3[1]]); + ds_list_add(fn, [f1[2], f2[2], f3[2]]); break; case "usemtl" : - array_push(mats, sep[1]); + array_push_unique(mats, sep[1]); + array_push(matIndex, array_find(mats, sep[1])); if(!ds_list_empty(f)) { array_push(_VB, f); array_push(_VBT, ft); + array_push(_VBN, fn); f = ds_list_create(); ft = ds_list_create(); + fn = ds_list_create(); } break; } @@ -46,16 +57,39 @@ function readObj(path) { if(!ds_list_empty(f)) { array_push(_VB, f); array_push(_VBT, ft); + array_push(_VBN, fn); } file_text_close(file); + #region centralize vertex + var cv = [0, 0, 0]; + var vertex = ds_list_size(v); + for( var i = 0; i < vertex; i++ ) { + var _v = v[| i]; + cv[0] += _v[0]; + cv[1] += _v[1]; + cv[2] += _v[2]; + } + + cv[0] /= vertex; + cv[1] /= vertex; + cv[2] /= vertex; + + for( var i = 0; i < ds_list_size(v); i++ ) { + v[| i][0] -= cv[0]; + v[| i][1] -= cv[1]; + v[| i][2] -= cv[2]; + } + #endregion + var VBS = []; for(var i = 0; i < array_length(_VB); i++) { var VB = vertex_create_buffer(); - vertex_begin(VB, FORMAT_PT); + vertex_begin(VB, FORMAT_PNT); var face = _VB[i]; var facet = _VBT[i]; - + var facen = _VBN[i]; + for(var j = 0; j < ds_list_size(face); j++) { var _f = face[| j]; var _f1 = v[| _f[0] - 1]; @@ -67,9 +101,14 @@ function readObj(path) { var _ft2 = vt[| _ft[1] - 1]; var _ft3 = vt[| _ft[2] - 1]; - vertex_add_pt(VB, _f1, _ft1 ); - vertex_add_pt(VB, _f2, _ft2 ); - vertex_add_pt(VB, _f3, _ft3 ); + var _fn = facen[| j]; + var _fn1 = vn[| _fn[0] - 1]; + var _fn2 = vn[| _fn[1] - 1]; + var _fn3 = vn[| _fn[2] - 1]; + + vertex_add_pnt(VB, _f1, _fn1, _ft1 ); + vertex_add_pnt(VB, _f2, _fn2, _ft2 ); + vertex_add_pnt(VB, _f3, _fn3, _ft3 ); } vertex_end(VB); vertex_freeze(VB); @@ -82,6 +121,10 @@ function readObj(path) { ds_list_destroy(v); ds_list_destroy(vt); + ds_list_destroy(vn); + ds_list_destroy(f); + ds_list_destroy(ft); + ds_list_destroy(fn); - return [ VBS, mats ]; + return [ VBS, mats, matIndex ]; } \ No newline at end of file diff --git a/scripts/panel_animation/panel_animation.gml b/scripts/panel_animation/panel_animation.gml index 731579a60..47d409f15 100644 --- a/scripts/panel_animation/panel_animation.gml +++ b/scripts/panel_animation/panel_animation.gml @@ -30,6 +30,8 @@ function Panel_Animation() : PanelContent() constructor { dope_sheet_y_max = 0; is_scrolling = false; + dope_sheet_node_padding = ui(2); + ds_name_surface = surface_create_valid(tool_width - ui(16), 1); timeline_scubbing = false; @@ -59,6 +61,9 @@ function Panel_Animation() : PanelContent() constructor { keyframe_box_sx = -1; keyframe_box_sy = -1; + node_ordering = noone; + show_node_outside_context = true; + stagger_mode = 0; stagger_index = 0; @@ -70,20 +75,17 @@ function Panel_Animation() : PanelContent() constructor { addHotkey("", "Play/Pause", vk_space, MOD_KEY.none, function() { ANIMATOR.is_playing = !ANIMATOR.is_playing; - if(ANIMATOR.is_playing && ANIMATOR.frames_total) { + ANIMATOR.frame_progress = true; + if(ANIMATOR.is_playing && ANIMATOR.frames_total) ANIMATOR.setFrame(0); - ANIMATOR.frame_progress = true; - } }); addHotkey("", "First frame", vk_home, MOD_KEY.none, function() { ANIMATOR.setFrame(0); }); addHotkey("", "Last frame", vk_end, MOD_KEY.none, function() { ANIMATOR.setFrame(ANIMATOR.frames_total - 1); }); addHotkey("", "Next frame", vk_right, MOD_KEY.none, function() { ANIMATOR.setFrame(min(ANIMATOR.real_frame + 1, ANIMATOR.frames_total - 1)); - ANIMATOR.frame_progress = true; }); addHotkey("", "Previous frame", vk_left, MOD_KEY.none, function() { ANIMATOR.setFrame(max(ANIMATOR.real_frame - 1, 0)); - ANIMATOR.frame_progress = true; }); addHotkey("Animation", "Delete keys", vk_delete, MOD_KEY.none, function() { deleteKeys(); }); @@ -129,6 +131,8 @@ function Panel_Animation() : PanelContent() constructor { var l = ds_list_create(); for( var i = 0; i < ds_list_size(anim_properties); i++ ) { var prop = anim_properties[| i]; + if(!show_node_outside_context && prop.node.group != PANEL_GRAPH.getCurrentContext()) continue; + for(var k = 0; k < ds_list_size(prop.animator.values); k++) { var keyframe = prop.animator.values[| k]; @@ -265,9 +269,10 @@ function Panel_Animation() : PanelContent() constructor { resetTimelineMask(); function updatePropertyList() { - ds_list_clear(anim_properties); + ds_list_destroy(anim_properties); var amo = ds_map_size(NODE_MAP); var k = ds_map_find_first(NODE_MAP); + var pr = ds_priority_create(); repeat(amo) { var _node = NODE_MAP[? k]; @@ -278,9 +283,12 @@ function Panel_Animation() : PanelContent() constructor { for(var j = 0; j < ds_list_size(_node.inputs); j++) { var jun = _node.inputs[| j]; if(jun.animator.is_anim) - ds_list_add(anim_properties, jun); + ds_priority_add(pr, jun, _node.anim_priority); } } + + anim_properties = ds_priority_to_list(pr); + ds_priority_destroy(pr); } function drawTimeline() { @@ -343,7 +351,8 @@ function Panel_Animation() : PanelContent() constructor { for( var i = 0; i < ds_list_size(anim_properties); i++ ) { var prop = anim_properties[| i]; - + if(!show_node_outside_context && prop.node.group != PANEL_GRAPH.getCurrentContext()) continue; + for(var k = 0; k < ds_list_size(prop.animator.values); k++) { var t = (prop.animator.values[| k].time + 1) * ui(timeline_scale) + timeline_shift; draw_sprite_ui_uniform(THEME.timeline_keyframe, 1, t, key_y, 1, COLORS.panel_animation_keyframe_hide); @@ -397,7 +406,7 @@ function Panel_Animation() : PanelContent() constructor { } } - if(pHOVER && point_in_rectangle(mx, my, bar_x, bar_y, bar_x + timeline_shift + bar_total_w, bar_y + bar_h)) { //preview + if(pHOVER && point_in_rectangle(mx, my, bar_x, bar_y, bar_x + min(timeline_w, timeline_shift + bar_total_w), bar_y + bar_h)) { //preview if(mouse_wheel_down()) timeline_shift_to = clamp(timeline_shift_to - 64, -max(bar_total_w - bar_w, 0), 0); if(mouse_wheel_up()) @@ -410,7 +419,7 @@ function Panel_Animation() : PanelContent() constructor { } } - if(pHOVER && point_in_rectangle(mx, my, bar_x, 8, bar_x + timeline_shift + bar_total_w, 8 + 16)) { //top bar + if(pHOVER && point_in_rectangle(mx, my, bar_x, 8, bar_x + min(timeline_w, timeline_shift + bar_total_w), 8 + 16)) { //top bar if(mouse_press(mb_left, pFOCUS)) { timeline_scubbing = true; timeline_scub_st = ANIMATOR.current_frame; @@ -592,28 +601,39 @@ function Panel_Animation() : PanelContent() constructor { var lable_w = tool_width - ui(64); var key_y = ui(24) + dope_sheet_y; var _node = noone; + var _node_y = 0; draw_set_text(f_p2, fa_left, fa_center); - + + var hovering = noone; + var hoverIndex = 0; + for( var i = 0; i < ds_list_size(anim_properties); i++ ) { var prop = anim_properties[| i]; - + if(!show_node_outside_context && prop.node.group != PANEL_GRAPH.getCurrentContext()) continue; + var aa = prop.node.group == PANEL_GRAPH.getCurrentContext()? 1 : 0.9; + if(_node != prop.node) { + key_y += dope_sheet_node_padding; + + var _ky = key_y - ui(10); + if(_node != noone && pHOVER && point_in_rectangle(msx, msy, 0, i <= 1? -ui(64) : _node_y, lable_w, _ky - ui(2))) + hovering = _node; + _node_y = _ky; _node = prop.node; - - key_y += ui(6); - if(pHOVER && point_in_rectangle(msx, msy, 0, key_y - ui(10), lable_w, key_y + ui(10))) { - draw_sprite_stretched_ext(THEME.ui_panel_bg, 0, 0, key_y - ui(10), lable_w, ui(20), COLORS.panel_animation_dope_bg_hover, 1); - if(msx < tool_width - ui(88) && mouse_press(mb_left, pFOCUS)) - prop.node.anim_show = !prop.node.anim_show; + + if(pHOVER && point_in_rectangle(msx, msy, ui(20), key_y - ui(10), lable_w, key_y + ui(10))) { + draw_sprite_stretched_ext(THEME.ui_panel_bg, 0, 0, key_y - ui(10), lable_w, ui(20), COLORS.panel_animation_dope_bg_hover, aa); + if(mouse_press(mb_left, pFOCUS)) + node_ordering = _node; } else - draw_sprite_stretched_ext(THEME.ui_panel_bg, 0, 0, key_y - ui(10), lable_w, ui(20), COLORS.panel_animation_dope_bg, 1); + draw_sprite_stretched_ext(THEME.ui_panel_bg, 0, 0, key_y - ui(10), lable_w, ui(20), COLORS.panel_animation_dope_bg, aa); - if(prop.node == PANEL_INSPECTOR.inspecting) + if(_node == PANEL_INSPECTOR.inspecting) draw_sprite_stretched_ext(THEME.node_active, 0, 0, key_y - ui(10), lable_w, ui(20), COLORS._main_accent, 1); var tx = tool_width - ui(76 + 16 * 0); if(pHOVER && point_in_circle(msx, msy, tx, key_y - 1, ui(10))) { - draw_sprite_ui_uniform(THEME.animate_node_go, 0, tx, key_y - 1, 1, COLORS._main_icon, 1); + draw_sprite_ui_uniform(THEME.animate_node_go, 0, tx, key_y - 1, 1, COLORS._main_icon_light, 1); TOOLTIP = "Go to node"; if(mouse_press(mb_left, pFOCUS)) { @@ -624,10 +644,19 @@ function Panel_Animation() : PanelContent() constructor { } } else draw_sprite_ui_uniform(THEME.animate_node_go, 0, tx, key_y - 1, 1, COLORS._main_icon, 0.75); - - draw_sprite_ui_uniform(THEME.arrow, prop.node.anim_show? 3 : 0, ui(10), key_y, 1, COLORS._main_icon, 0.75); - draw_set_color(COLORS._main_text_sub); - draw_text(ui(20), key_y - ui(2), prop.node.name); + + if(pHOVER && point_in_rectangle(msx, msy, 0, key_y - ui(10), ui(20), key_y + ui(10))) { + draw_sprite_ui_uniform(THEME.arrow, _node.anim_show? 3 : 0, ui(10), key_y, 1, COLORS._main_icon_light, 1); + if(mouse_press(mb_left, pFOCUS)) + _node.anim_show = !_node.anim_show; + } else + draw_sprite_ui_uniform(THEME.arrow, _node.anim_show? 3 : 0, ui(10), key_y, 1, COLORS._main_icon, 0.75); + + draw_set_color(node_ordering == _node? COLORS._main_text_accent : COLORS._main_text_sub); + draw_set_alpha(aa); + draw_text(ui(20), key_y - ui(2), _node.name); + draw_set_alpha(1); + key_y += ui(22); } @@ -635,6 +664,7 @@ function Panel_Animation() : PanelContent() constructor { var tx = tool_width - ui(72 + 16 * 3); var ty = key_y - 1; + if(pHOVER && point_in_circle(msx, msy, tx, ty, ui(6))) { draw_sprite_ui_uniform(THEME.prop_keyframe, 0, tx, ty, 1, COLORS._main_icon, 1); @@ -726,13 +756,29 @@ function Panel_Animation() : PanelContent() constructor { draw_sprite_ui_uniform(THEME.timeline_clock, 1, ui(22), key_y - 1, 1, COLORS._main_icon, 0.75); draw_set_color(COLORS._main_text); + draw_set_alpha(aa); draw_text(ui(32), key_y - 2, prop.name); - + draw_set_alpha(1); + if(prop.animator.show_graph) key_y += graph_h + ui(8); key_y += ui(18); } + + if(hovering == noone && _node != noone) + hovering = _node; + + if(hovering != noone) { + hoverIndex = hovering.anim_priority; + if(node_ordering != noone) { + rearrange_priority(node_ordering, hoverIndex); + + if(mouse_release(mb_left)) + node_ordering = noone; + } + } + surface_reset_target(); } @@ -797,18 +843,16 @@ function Panel_Animation() : PanelContent() constructor { draw_sprite_stretched(THEME.ui_panel_bg, 1, 0, 0, bar_w, dope_sheet_h); //base BG draw_sprite_stretched_ext(THEME.ui_panel_bg, 1, timeline_shift, 0, bar_total_w, dope_sheet_h, COLORS.panel_animation_timeline_blend, 1); - draw_set_color(COLORS.panel_animation_timeline_top); - draw_rectangle(0, 0, bar_total_w, ui(16), false); - dope_sheet_y_max = 0; var key_y = ui(24) + dope_sheet_y, key_y_node, _node = noone; for( var i = 0; i < ds_list_size(anim_properties); i++ ) { var prop = anim_properties[| i]; + if(!show_node_outside_context && prop.node.group != PANEL_GRAPH.getCurrentContext()) continue; if(_node != prop.node) { _node = prop.node; - key_y += ui(6); + key_y += dope_sheet_node_padding; key_y_node = key_y; draw_sprite_stretched_ext(THEME.ui_panel_bg, 0, 0, key_y - ui(10), bar_total_w, ui(20), COLORS.panel_animation_node_bg, 1); @@ -829,30 +873,12 @@ function Panel_Animation() : PanelContent() constructor { } dope_sheet_y_max = max(0, dope_sheet_y_max - dope_sheet_h + ui(48)); - + for(var i = 10; i <= ANIMATOR.frames_total; i += 10) { var bar_line_x = i * ui(timeline_scale) + timeline_shift; draw_set_color(COLORS.panel_animation_frame_divider); draw_line(bar_line_x, ui(16), bar_line_x, dope_sheet_h); - - draw_set_text(f_p2, fa_right, fa_top, COLORS._main_text_sub); - draw_text(bar_line_x - ui(2), 0, string(i)); } - - var bar_line_x = (ANIMATOR.current_frame + 1) * ui(timeline_scale) + timeline_shift; - var cc = ANIMATOR.is_playing? COLORS._main_value_positive : COLORS._main_accent; - - draw_set_color(cc); - draw_set_font(f_p2); - draw_line(bar_line_x, 0, bar_line_x, dope_sheet_h); - - var cf = string(ANIMATOR.current_frame + 1); - var tx = string_width(cf) + ui(4); - draw_rectangle(bar_line_x - tx, 0, bar_line_x, ui(16), false); - draw_roundrect_ext(bar_line_x - tx - ui(2), 0, bar_line_x, ui(16), ui(2), ui(2), false); - - draw_set_text(f_p2, fa_right, fa_top, COLORS._main_icon_dark); - draw_text(bar_line_x - ui(2), 0, cf); #endregion #region stretch @@ -930,10 +956,11 @@ function Panel_Animation() : PanelContent() constructor { key_y = key_sy; for( var i = 0; i < ds_list_size(anim_properties); i++ ) { var prop = anim_properties[| i]; - + if(!show_node_outside_context && prop.node.group != PANEL_GRAPH.getCurrentContext()) continue; + if(_node != prop.node) { _node = prop.node; - key_y += ui(28); + key_y += ui(22) + dope_sheet_node_padding; } if(!prop.node.anim_show) continue; @@ -982,11 +1009,12 @@ function Panel_Animation() : PanelContent() constructor { for( var i = 0; i < ds_list_size(anim_properties); i++ ) { var prop = anim_properties[| i]; + if(!show_node_outside_context && prop.node.group != PANEL_GRAPH.getCurrentContext()) continue; if(_node != prop.node) { _node = prop.node; - key_y += ui(6); + key_y += dope_sheet_node_padding; key_y_node = key_y; key_y += ui(22); } @@ -1157,6 +1185,32 @@ function Panel_Animation() : PanelContent() constructor { var stg = tm - ts; staggerKeys(stagger_index, stg); } + + #region overlay + draw_set_color(COLORS.panel_animation_timeline_top); + draw_rectangle(0, 0, bar_total_w, ui(16), false); + + for(var i = 10; i <= ANIMATOR.frames_total; i += 10) { + var bar_line_x = i * ui(timeline_scale) + timeline_shift; + draw_set_text(f_p2, fa_right, fa_top, COLORS._main_text_sub); + draw_text(bar_line_x - ui(2), 0, string(i)); + } + + var bar_line_x = (ANIMATOR.current_frame + 1) * ui(timeline_scale) + timeline_shift; + var cc = ANIMATOR.is_playing? COLORS._main_value_positive : COLORS._main_accent; + + draw_set_color(cc); + draw_set_font(f_p2); + draw_line(bar_line_x, 0, bar_line_x, dope_sheet_h); + + var cf = string(ANIMATOR.current_frame + 1); + var tx = string_width(cf) + ui(4); + draw_rectangle(bar_line_x - tx, 0, bar_line_x, ui(16), false); + draw_roundrect_ext(bar_line_x - tx - ui(2), 0, bar_line_x, ui(16), ui(2), ui(2), false); + + draw_set_text(f_p2, fa_right, fa_top, COLORS._main_icon_dark); + draw_text(bar_line_x - ui(2), 0, cf); + #endregion gpu_set_blendmode(bm_subtract); draw_surface_safe(dope_sheet_mask, 0, 0); @@ -1179,46 +1233,48 @@ function Panel_Animation() : PanelContent() constructor { } bx += ui(36); - if(buttonInstant(THEME.button_hide, bx, by, ui(32), ui(32), [mx, my], pFOCUS, pHOVER, ANIMATOR.is_playing? "Pause" : "Play", - THEME.sequence_control, !ANIMATOR.is_playing, ANIMATOR.is_playing? COLORS._main_accent : COLORS._main_icon) == 2) - + var ind = !ANIMATOR.is_playing; + var cc = ANIMATOR.is_playing? COLORS._main_accent : COLORS._main_icon; + if(buttonInstant(THEME.button_hide, bx, by, ui(32), ui(32), [mx, my], pFOCUS, pHOVER, ANIMATOR.is_playing? "Pause" : "Play", THEME.sequence_control, ind, cc) == 2) { ANIMATOR.is_playing = !ANIMATOR.is_playing; + ANIMATOR.frame_progress = true; + } bx += ui(36); if(buttonInstant(THEME.button_hide, bx, by, ui(32), ui(32), [mx, my], pFOCUS, pHOVER, "Go to first frame", THEME.sequence_control, 3) == 2) { ANIMATOR.setFrame(0); - ANIMATOR.frame_progress = true; } bx += ui(36); if(buttonInstant(THEME.button_hide, bx, by, ui(32), ui(32), [mx, my], pFOCUS, pHOVER, "Go to last frame", THEME.sequence_control, 2) == 2) { ANIMATOR.setFrame(ANIMATOR.frames_total - 1); - ANIMATOR.frame_progress = true; } bx += ui(36); if(buttonInstant(THEME.button_hide, bx, by, ui(32), ui(32), [mx, my], pFOCUS, pHOVER, "Previous frame", THEME.sequence_control, 5) == 2) { ANIMATOR.setFrame(ANIMATOR.real_frame - 1); - ANIMATOR.frame_progress = true; } bx += ui(36); if(buttonInstant(THEME.button_hide, bx, by, ui(32), ui(32), [mx, my], pFOCUS, pHOVER, "Next frame", THEME.sequence_control, 6) == 2) { ANIMATOR.setFrame(ANIMATOR.real_frame + 1); - ANIMATOR.frame_progress = true; } - bx = w - ui(40); + bx = w - ui(44); if(buttonInstant(THEME.button_hide, bx, by, ui(32), ui(32), [mx, my], pFOCUS, pHOVER, "Animation settings", THEME.animation_setting, 2) == 2) dialogCall(o_dialog_animation, x + bx + 32, y + by - 8); if(dope_sheet_h > 8) { by -= ui(40); - bx = w - ui(40); if(buttonInstant(THEME.button_hide, bx, by, ui(32), ui(32), [mx, my], pFOCUS, pHOVER, "Scale animation", THEME.animation_timing, 2) == 2) { var dia = dialogCall(o_dialog_anim_time_scaler, x + bx + ui(32), y + by - ui(8)); dia.anchor = ANCHOR.right | ANCHOR.bottom; } + + by = ui(8); + var txt = (show_node_outside_context? "Hide" : "Show") + " node outside context"; + if(buttonInstant(THEME.button_hide, bx, by, ui(32), ui(24), [mx, my], pFOCUS, pHOVER, txt, THEME.junc_visible, show_node_outside_context) == 2) + show_node_outside_context = !show_node_outside_context; } } diff --git a/scripts/panel_collection/panel_collection.gml b/scripts/panel_collection/panel_collection.gml index 2ab8d9bc5..a5aad5bb8 100644 --- a/scripts/panel_collection/panel_collection.gml +++ b/scripts/panel_collection/panel_collection.gml @@ -82,11 +82,11 @@ function Panel_Collection() : PanelContent() constructor { draw_sprite_stretched(THEME.node_bg, 0, _boxx, yy, grid_size, grid_size); BLEND_NORMAL - if(point_in_rectangle(_m[0], _m[1], _nx, yy, _nx + grid_width, yy + grid_size)) { + if(pHOVER && point_in_rectangle(_m[0], _m[1], _nx, yy, _nx + grid_width, yy + grid_size)) { draw_sprite_stretched_ext(THEME.node_active, 0, _boxx, yy, grid_size, grid_size, COLORS._main_accent, 1); if(mouse_press(mb_left, pFOCUS)) file_dragging = _node; - + if(mouse_press(mb_right, pFOCUS)) { _menu_node = _node; var dia = dialogCall(o_dialog_menubox, mouse_mx + 8, mouse_my + 8); diff --git a/scripts/panel_graph/panel_graph.gml b/scripts/panel_graph/panel_graph.gml index 3380f51b6..2663eaddc 100644 --- a/scripts/panel_graph/panel_graph.gml +++ b/scripts/panel_graph/panel_graph.gml @@ -153,6 +153,8 @@ function Panel_Graph() : PanelContent() constructor { ds_list_add(nodes_select_list, nodes_list[| i]); } }); + addHotkey("Graph", "Duplicate", "D", MOD_KEY.ctrl, function() { doDuplicate(); }); + addHotkey("Graph", "Toggle grid", "G", MOD_KEY.none, function() { show_grid = !show_grid; }); addHotkey("Graph", "Export", "E", MOD_KEY.ctrl, function() { setCurrentExport(); }); @@ -316,6 +318,7 @@ function Panel_Graph() : PanelContent() constructor { #region hover node_hovering = noone; + if(pHOVER) for(var i = 0; i < ds_list_size(nodes_list); i++) { var n = nodes_list[| i]; if(n.pointIn(gr_x, gr_y, mx, my, graph_s)) @@ -392,6 +395,10 @@ function Panel_Graph() : PanelContent() constructor { [ "Delete and cut connection", function() { doDelete(false); }, ["Graph", "Delete (break)"] ]); + array_push(menu, + [ "Duplicate", function() { + doDuplicate(); + }, ["Graph", "Duplicate"] ]); array_push(menu, -1); array_push(menu, [ "Add transform", addNodeTransform, ["Graph", "Transform node"] ]); @@ -549,10 +556,18 @@ function Panel_Graph() : PanelContent() constructor { } else if(nx != node_drag_ox || ny != node_drag_oy) { var dx = nx - node_drag_ox; var dy = ny - node_drag_oy; - + for(var i = 0; i < ds_list_size(nodes_select_list); i++) { var _node = nodes_select_list[| i]; - _node.move(_node.x + dx, _node.y + dy); + var _nx = _node.x + dx; + var _ny = _node.y + dy; + + if(!keyboard_check(vk_control) && node_drag_snap) { + _nx = round(_nx / graph_line_s) * graph_line_s; + _ny = round(_ny / graph_line_s) * graph_line_s; + } + + _node.move(_nx, _ny); } node_drag_ox = nx; @@ -629,6 +644,48 @@ function Panel_Graph() : PanelContent() constructor { #endregion } + function doDuplicate() { + if(ds_list_empty(nodes_select_list)) { + if(node_focus == noone) return; + node_dragging = node_focus.clone(); + node_drag_mx = node_dragging.x; + node_drag_my = node_dragging.y; + node_drag_sx = node_dragging.x; + node_drag_sy = node_dragging.y; + + node_drag_ox = -1; + node_drag_oy = -1; + return; + } + + var dups = ds_list_create(); + ds_map_clear(APPEND_MAP); + + for(var i = 0; i < ds_list_size(nodes_select_list); i++) { + var _node = nodes_select_list[| i]; + var _cnode = _node.clone(); + ds_list_add(dups, _cnode); + + APPEND_MAP[? _node.node_id] = _cnode.node_id; + } + + APPENDING = true; + for(var i = 0; i < ds_list_size(dups); i++) { + var _node = dups[| i]; + _node.connect(); + } + APPENDING = false; + + ds_list_destroy(nodes_select_list); + nodes_select_list = dups; + + node_dragging = nodes_select_list[| 0]; + node_drag_mx = node_dragging.x; + node_drag_my = node_dragging.y; + node_drag_sx = node_dragging.x; + node_drag_sy = node_dragging.y; + } + function doBlend() { if(ds_list_empty(nodes_select_list)) return; if(ds_list_size(nodes_select_list) != 2) return; @@ -1032,9 +1089,9 @@ function Panel_Graph() : PanelContent() constructor { minimap_w = min(minimap_w, w - ui(16)); minimap_h = min(minimap_h, h - ui(16) - toolbar_height); - if(point_in_rectangle(mx, my, mx0, my0, mx1, my1)) + if(pHOVER && point_in_rectangle(mx, my, mx0, my0, mx1, my1)) mouse_on_graph = false; - var hover = pHOVER && point_in_rectangle(mx, my, mx0, my0, mx1, my1) && !point_in_rectangle(mx, my, mx0, my0, mx0 + ui(16), my0 + ui(16)) && !minimap_dragging; + var hover = mouse_on_graph && !point_in_rectangle(mx, my, mx0, my0, mx0 + ui(16), my0 + ui(16)) && !minimap_dragging; if(!is_surface(minimap_surface) || surface_get_width(minimap_surface) != minimap_w || surface_get_height(minimap_surface) != minimap_h) { minimap_surface = surface_create_valid(minimap_w, minimap_h); diff --git a/scripts/panel_inspector/panel_inspector.gml b/scripts/panel_inspector/panel_inspector.gml index 5f0bd3758..a69b23e15 100644 --- a/scripts/panel_inspector/panel_inspector.gml +++ b/scripts/panel_inspector/panel_inspector.gml @@ -21,6 +21,8 @@ function Panel_Inspector() : PanelContent() constructor { keyframe_dragging = noone; keyframe_drag_st = 0; + anim_toggling = false; + min_w = ui(160); lineBreak = true; @@ -35,6 +37,7 @@ function Panel_Inspector() : PanelContent() constructor { addHotkey("Inspector", "Copy property", "C", MOD_KEY.ctrl, function() { propSelectCopy(); }); addHotkey("Inspector", "Paste property", "V", MOD_KEY.ctrl, function() { propSelectPaste(); }); + addHotkey("Inspector", "Toggle animation", "I", MOD_KEY.none, function() { anim_toggling = true; }); group_menu = [ [ "Expand all", function() { @@ -184,7 +187,6 @@ function Panel_Inspector() : PanelContent() constructor { var _key = jun.animator.values[| j]; if(_key.time > ANIMATOR.current_frame) { ANIMATOR.setFrame(_key.time); - ANIMATOR.frame_progress = true; break; } } @@ -229,7 +231,6 @@ function Panel_Inspector() : PanelContent() constructor { } } if(_t > -1) ANIMATOR.setFrame(_t); - ANIMATOR.frame_progress = true; } var lhf = lb_h / 2 - 4; @@ -284,7 +285,7 @@ function Panel_Inspector() : PanelContent() constructor { jun.editWidget.draw(editBoxX, editBoxY, editBoxW, editBoxH, jun.display_data[jun.showValue()], _m, ui(16) + x, top_bar_h + y); break; case VALUE_DISPLAY.enum_button : - jun.editWidget.draw(editBoxX, editBoxY, editBoxW, editBoxH, jun.display_data[jun.showValue()], _m, ui(16) + x, top_bar_h + y); + jun.editWidget.draw(editBoxX, editBoxY, editBoxW, editBoxH, jun.showValue(), _m, ui(16) + x, top_bar_h + y); break; case VALUE_DISPLAY.padding : jun.editWidget.draw(xc, _hsy + ui(32), jun.showValue(), jun.modifier, _m); @@ -384,6 +385,12 @@ function Panel_Inspector() : PanelContent() constructor { if(pHOVER && point_in_rectangle(_m[0], _m[1], 4, _selY, contentPane.surface_w - ui(4), _selY + _selH)) { draw_sprite_stretched_ext(THEME.prop_selecting, 0, 4, _selY, contentPane.surface_w - ui(8), _selH, COLORS._main_accent, 1); + if(anim_toggling) { + jun.animator.is_anim = !jun.animator.is_anim; + PANEL_ANIMATION.updatePropertyList(); + anim_toggling = false; + } + prop_hover = jun; if(mouse_press(mb_left, pFOCUS)) diff --git a/scripts/panel_menu/panel_menu.gml b/scripts/panel_menu/panel_menu.gml index e74b62a6f..df8517a01 100644 --- a/scripts/panel_menu/panel_menu.gml +++ b/scripts/panel_menu/panel_menu.gml @@ -62,7 +62,7 @@ function Panel_Menu() : PanelContent() constructor { ["Rendering", [ [ "Render all nodes", function() { for(var i = 0; i < ds_list_size(NODES); i++) - NODES[| i].setRenderStatus(false); + NODES[| i].triggerRender(); UPDATE |= RENDER_TYPE.full; }, ["", "Render all"] ] ]], diff --git a/scripts/panel_preview/panel_preview.gml b/scripts/panel_preview/panel_preview.gml index b9b171b34..87c99dbaf 100644 --- a/scripts/panel_preview/panel_preview.gml +++ b/scripts/panel_preview/panel_preview.gml @@ -471,8 +471,7 @@ function Panel_Preview() : PanelContent() constructor { } } - function drawNodeTools(_active, _node) { - var active = _active; + function drawNodeTools(active, _node) { var _mx = mx; var _my = my; var isHover = pHOVER && mouse_on_preview; diff --git a/scripts/preferences/preferences.gml b/scripts/preferences/preferences.gml index b51ceb319..eeddaaf6d 100644 --- a/scripts/preferences/preferences.gml +++ b/scripts/preferences/preferences.gml @@ -5,10 +5,11 @@ #region pref map PREF_MAP[? "ui_framerate"] = 60; - PREF_MAP[? "part_max_amount"] = 256; PREF_MAP[? "path_resolution"] = 32; - PREF_MAP[? "double_click_delay"] = 12; + PREF_MAP[? "double_click_delay"] = 0.25; + PREF_MAP[? "keyboard_repeat_start"] = 0.50; + PREF_MAP[? "keyboard_repeat_speed"] = 0.10; PREF_MAP[? "show_splash"] = true; @@ -30,7 +31,8 @@ PREF_MAP[? "node_show_render_status"] = false; PREF_MAP[? "node_show_time"] = true; - PREF_MAP[? "shape_separation_max"] = 32; + PREF_MAP[? "part_max_amount"] = 1024; + PREF_MAP[? "shape_separation_max"] = 256; PREF_MAP[? "level_resolution"] = 64; PREF_MAP[? "level_max_sampling"] = 32; PREF_MAP[? "verlet_iteration"] = 4; @@ -249,6 +251,9 @@ hh = PREF_MAP[? "window_height"]; } + if(PREF_MAP[? "double_click_delay"] > 1) + PREF_MAP[? "double_click_delay"] /= 60; + window_set_size(ww, hh); window_set_position(display_get_width() / 2 - ww / 2, display_get_height() / 2 - hh / 2); game_set_speed(PREF_MAP[? "ui_framerate"], gamespeed_fps); diff --git a/scripts/random_function/random_function.gml b/scripts/random_function/random_function.gml index 1ace338ad..2b77796f5 100644 --- a/scripts/random_function/random_function.gml +++ b/scripts/random_function/random_function.gml @@ -1,23 +1,22 @@ -function getWiggle(_min, _max, _fmin, _fmax, _time, seed_shift = 0) { - random_set_seed(GLOBAL_SEED + seed_shift); +function random1D(seed, startRange = 0, endRange = 1) { + random_set_seed(GLOBAL_SEED + seed); + return random_range(startRange, endRange); +} + +function getWiggle(_min, _max, _freq, _time, seed_shift = 0, startTime = noone, endTime = noone) { + _freq = max(1, _freq); + var sdMin = floor(_time / _freq) * _freq; + var sdMax = sdMin + _freq; + if(endTime) + sdMax = min(endTime, sdMax); - var _x0 = random_range(_min, _max); - var _x1 = random_range(_min, _max); - var _t_prev = 0; - var _t_next = irandom_range(_fmin, _fmax); - - while(_t_next < _time) { - _x0 = _x1; - _x1 = random_range(_min, _max); - - _t_prev = _t_next; - _t_next = _t_prev + irandom_range(_fmin, _fmax); - } + var _x0 = (startTime != noone && sdMin <= startTime)? 0.5 : random1D(GLOBAL_SEED + seed_shift + sdMin); + var _x1 = (endTime != noone && sdMax * _freq >= endTime)? 0.5 : random1D(GLOBAL_SEED + seed_shift + sdMax); - var t = (_time - _t_prev) / (_t_next - _t_prev); + var t = (_time - sdMin) / (sdMax - sdMin); t = -(cos(pi * t) - 1) / 2; var _val = lerp(_x0, _x1, t); - return _val; + return lerp(_min, _max, _val); } function generateUUID() { diff --git a/scripts/render_data/render_data.gml b/scripts/render_data/render_data.gml index 2f89930da..31799c033 100644 --- a/scripts/render_data/render_data.gml +++ b/scripts/render_data/render_data.gml @@ -11,7 +11,7 @@ function __nodeLeafList(_list, _stack) { var _startNode = true; for(var j = 0; j < ds_list_size(_node.inputs); j++) { var _in = _node.inputs[| j]; - _node.setRenderStatus(false); + _node.triggerRender(); if(_in.value_from != noone) _startNode = false; @@ -32,7 +32,7 @@ function Render(partial = false) { repeat(amo) { var _node = NODE_MAP[? _key]; - _node.setRenderStatus(false); + _node.triggerRender(); _key = ds_map_find_next(NODE_MAP, _key); } } @@ -62,39 +62,49 @@ function Render(partial = false) { } } + var log = false; + printlog("=== RENDER START ==="); // render forward while(!ds_stack_empty(RENDER_STACK)) { rendering = ds_stack_pop(RENDER_STACK); - if(rendering.rendered) continue; - - var name = variable_struct_exists(rendering, "name")? rendering.name : ""; - var txt = "rendering " + string(name) + " "; - - if(LOADING || APPENDING || rendering.auto_update) { - rendering.doUpdate(); - txt += "| Updated "; + if(!rendering.rendered) { + if(LOADING || APPENDING || rendering.auto_update) + rendering.doUpdate(); + rendering.setRenderStatus(true); } - rendering.setRenderStatus(true); + printlog("Rendered " + rendering.name); if(instanceof(rendering) == "Node_Group") { //Put each input node in group to stack + //if(!rendering.isUpdateReady()) continue; for(var i = rendering.custom_input_index; i < ds_list_size(rendering.inputs); i++) { var _in = rendering.inputs[| i].from; - if(_in.isUpdateReady()) ds_stack_push(RENDER_STACK, _in); + ds_stack_push(RENDER_STACK, _in); + printlog("Push group input " + _in.name + " to stack"); } } else if(instanceof(rendering) == "Node_Group_Output") { //Group output in-junction connect automatically to parent out-junction + rendering.group.setRenderStatus(true); var _ot = rendering.outParent; + printlog("Value to amount " + string(ds_list_size(_ot.value_to))); for(var j = 0; j < ds_list_size(_ot.value_to); j++) { var _to = _ot.value_to[| j]; + printlog("Value to " + _to.name); + if(!_to.node.active || _to.value_from == noone) { + printlog("no value from"); + continue; + } + if(_to.value_from.node != rendering.group) { + printlog("value from not equal group"); + continue; + } - if(_to.node.active && _to.value_from != noone && _to.value_from.node == rendering.group) { - _to.node.setRenderStatus(false); - if(_to.node.isUpdateReady()) ds_stack_push(RENDER_STACK, _to.node); + printlog("Group output ready " + string(_to.node.isUpdateReady())); + //_to.node.triggerRender(); + if(_to.node.isUpdateReady()) { + ds_stack_push(RENDER_STACK, _to.node); } } - - rendering.group.setRenderStatus(true); } else if(instanceof(rendering) == "Node_Iterate") { //Put each input node in group to stack for(var i = rendering.custom_input_index; i < ds_list_size(rendering.inputs); i++) { var _in = rendering.inputs[| i].from; @@ -102,28 +112,28 @@ function Render(partial = false) { } } else if(instanceof(rendering) == "Node_Iterator_Output") { //Check iteration result var _node_it = rendering.group; - var _ren = _node_it.outputRendered(); + var _ren = _node_it.iterationStatus(); - if(_ren == 1) { //Go back to the beginning of the loop, reset render status for leaf node inside? + if(_ren == ITERATION_STATUS.loop) { //Go back to the beginning of the loop, reset render status for leaf node inside? //show_debug_message("iteration restart"); var _ot = rendering.group.inputs; - for(var j = 1; j < ds_list_size(_ot); j++) { + for(var j = rendering.group.custom_input_index; j < ds_list_size(_ot); j++) { if(_ot[| j].from.isUpdateReady()) ds_stack_push(RENDER_STACK, _ot[| j].from); } __nodeLeafList(rendering.group.nodes, RENDER_STACK); - } else if(_ren == 2) { //Go out of loop + } else if(_ren == ITERATION_STATUS.complete) { //Go out of loop //show_debug_message("iteration completed"); + rendering.group.setRenderStatus(true); var _ot = rendering.outParent; for(var j = 0; j < ds_list_size(_ot.value_to); j++) { var _to = _ot.value_to[| j]; if(_to.node.active && _to.value_from != noone && _to.value_from.node == rendering.group) { - _to.node.setRenderStatus(false); + _to.node.triggerRender(); if(_to.node.isUpdateReady()) ds_stack_push(RENDER_STACK, _to.node); } } - rendering.group.setRenderStatus(true); } } else { //push next node for(var i = 0; i < ds_list_size(rendering.outputs); i++) { @@ -131,17 +141,23 @@ function Render(partial = false) { for(var j = 0; j < ds_list_size(_ot.value_to); j++) { var _to = _ot.value_to[| j]; + if(!_to.node.active || _to.value_from == noone) continue; + if(_to.value_from.node != rendering) continue; - if(_to.node.active && _to.value_from != noone && _to.value_from.node == rendering) { - _to.node.setRenderStatus(false); - if(_to.node.isUpdateReady()) ds_stack_push(RENDER_STACK, _to.node); - } + _to.node.triggerRender(); + if(_to.node.isUpdateReady()) { + ds_stack_push(RENDER_STACK, _to.node); + printlog("Push " + _to.node.name + " node to stack"); + } else + printlog(" > Node " + _to.node.name + " not ready"); } } } //show_debug_message(txt); } + + printlog("=== RENDER COMPLETE ==="); } /* function renderNodeBackward(_node) { //unused @@ -152,7 +168,7 @@ function renderNodeBackward(_node) { //unused for(var i = 0; i < ds_map_size(NODE_MAP); i++) { var _allnode = NODE_MAP[? key]; if(_allnode && !is_undefined(_allnode) && is_struct(_allnode) && string_pos("Node", instanceof(_allnode))) - _allnode.setRenderStatus(false); + _allnode.triggerRender(); key = ds_map_find_next(NODE_MAP, key); } diff --git a/scripts/string_cut/string_cut.gml b/scripts/string_cut/string_cut.gml index b42dd2064..f56a15c9a 100644 --- a/scripts/string_cut/string_cut.gml +++ b/scripts/string_cut/string_cut.gml @@ -1,8 +1,8 @@ -function draw_text_cut(x, y, str, w) { - draw_text(x, y, string_cut(str, w)); +function draw_text_cut(x, y, str, w, scale = 1) { + draw_text_transformed(x, y, string_cut(str, w,, scale), scale, scale, 0); } -function string_cut(str, w, tail = "...") { +function string_cut(str, w, tail = "...", scale = 1) { var ww = 0; var ind = 1; var ss = ""; @@ -11,7 +11,7 @@ function string_cut(str, w, tail = "...") { while(ind <= string_length(str)) { var ch = string_char_at(str, ind); - var _w = string_width(ch); + var _w = string_width(ch) * scale; if(ww + _w + tw >= w) { ss += tail; diff --git a/scripts/textArea/textArea.gml b/scripts/textArea/textArea.gml index 47307dfc9..8c2c9adbf 100644 --- a/scripts/textArea/textArea.gml +++ b/scripts/textArea/textArea.gml @@ -76,85 +76,87 @@ function textArea(_input, _onModify) constructor { static editText = function() { #region text editor - if(keyboard_check_released(ord("V")) && keyboard_check(vk_control)) { - keyboard_string = clipboard_get_text(); - cut_line(); + if(keyboard_check(vk_control) && keyboard_check_pressed(ord("A"))) { + cursor_select = 0; + cursor = string_length(_input_text); + } else if(keyboard_check(vk_control) && (keyboard_check_pressed(ord("C")) || keyboard_check_pressed(ord("X")))) { + if(cursor_select != -1) { + var minc = min(cursor, cursor_select); + var maxc = max(cursor, cursor_select); + clipboard_set_text(string_copy(_input_text, minc, maxc - minc)); + } + } else { + if(keyboard_check(vk_control) && keyboard_check_pressed(ord("V"))) + KEYBOARD_STRING = clipboard_get_text(); + + if(keyboard_check_pressed(vk_escape) || keyboard_check_pressed(vk_enter)) { + } else if(keyboard_check_pressed(vk_backspace)) { + if(cursor_select == -1) { + var str_before = string_copy(_input_text, 1, cursor - 1); + var str_after = string_copy(_input_text, cursor + 1, string_length(_input_text) - cursor); + + _input_text = str_before + str_after; + cut_line(); + } else { + var minc = min(cursor, cursor_select); + var maxc = max(cursor, cursor_select); + + var str_before = string_copy(_input_text, 1, minc); + var str_after = string_copy(_input_text, maxc + 1, string_length(_input_text) - maxc); + + cursor = minc + 1; + _input_text = str_before + str_after; + cut_line(); + } + + cursor_select = -1; + move_cursor(-1); + } else if(keyboard_check_pressed(vk_delete) || (keyboard_check_pressed(ord("X")) && keyboard_check(vk_control) && cursor_select != -1)) { + if(cursor_select == -1) { + var str_before = string_copy(_input_text, 1, cursor); + var str_after = string_copy(_input_text, cursor + 2, string_length(_input_text) - cursor - 1); + + _input_text = str_before + str_after; + cut_line(); + } else { + var minc = min(cursor, cursor_select); + var maxc = max(cursor, cursor_select); + + var str_before = string_copy(_input_text, 1, minc); + var str_after = string_copy(_input_text, maxc + 1, string_length(_input_text) - maxc); + + cursor = minc; + _input_text = str_before + str_after; + cut_line(); + } + cursor_select = -1; + } else if(KEYBOARD_STRING != "") { + var ch = KEYBOARD_STRING; + + if(cursor_select == -1) { + var str_before = string_copy(_input_text, 1, cursor); + var str_after = string_copy(_input_text, cursor + 1, string_length(_input_text) - cursor); + + _input_text = str_before + ch + str_after; + cut_line(); + move_cursor(string_length(ch)); + } else { + var minc = min(cursor, cursor_select); + var maxc = max(cursor, cursor_select); + + var str_before = string_copy(_input_text, 1, minc); + var str_after = string_copy(_input_text, maxc + 1, string_length(_input_text) - maxc); + + _input_text = str_before + ch + str_after; + cut_line(); + cursor = minc + string_length(ch); + } + + cursor_select = -1; + } } - if(keyboard_check(vk_control)) { - if(keyboard_check_pressed(ord("A"))) { - cursor_select = 0; - cursor = string_length(_input_text); - } - } - - if(keyboard_check_pressed(vk_escape) || keyboard_check_pressed(vk_enter)) { - } else if(keyboard_check_pressed(vk_backspace)) { - if(cursor_select == -1) { - var str_before = string_copy(_input_text, 1, cursor - 1); - var str_after = string_copy(_input_text, cursor + 1, string_length(_input_text) - cursor); - - _input_text = str_before + str_after; - cut_line(); - } else { - var minc = min(cursor, cursor_select); - var maxc = max(cursor, cursor_select); - - var str_before = string_copy(_input_text, 1, minc); - var str_after = string_copy(_input_text, maxc + 1, string_length(_input_text) - maxc); - - cursor = minc + 1; - _input_text = str_before + str_after; - cut_line(); - } - - cursor_select = -1; - move_cursor(-1); - } else if(keyboard_check_pressed(vk_delete)) { - if(cursor_select == -1) { - var str_before = string_copy(_input_text, 1, cursor); - var str_after = string_copy(_input_text, cursor + 2, string_length(_input_text) - cursor - 1); - - _input_text = str_before + str_after; - cut_line(); - } else { - var minc = min(cursor, cursor_select); - var maxc = max(cursor, cursor_select); - - var str_before = string_copy(_input_text, 1, minc); - var str_after = string_copy(_input_text, maxc + 1, string_length(_input_text) - maxc); - - cursor = minc; - _input_text = str_before + str_after; - cut_line(); - } - cursor_select = -1; - } else if(keyboard_string != "") { - var ch = keyboard_string; - - if(cursor_select == -1) { - var str_before = string_copy(_input_text, 1, cursor); - var str_after = string_copy(_input_text, cursor + 1, string_length(_input_text) - cursor); - - _input_text = str_before + ch + str_after; - cut_line(); - move_cursor(string_length(ch)); - } else { - var minc = min(cursor, cursor_select); - var maxc = max(cursor, cursor_select); - - var str_before = string_copy(_input_text, 1, minc); - var str_after = string_copy(_input_text, maxc + 1, string_length(_input_text) - maxc); - - _input_text = str_before + ch + str_after; - cut_line(); - cursor = minc + string_length(ch); - } - - cursor_select = -1; - } - - keyboard_string = ""; + KEYBOARD_STRING = ""; keyboard_lastkey = -1; #endregion @@ -435,7 +437,7 @@ function textArea(_input, _onModify) constructor { if(mouse_press(mb_left, active)) { TEXTBOX_ACTIVE = self; click_block = 1; - keyboard_string = ""; + KEYBOARD_STRING = ""; keyboard_lastkey = -1; _input_text = _text; diff --git a/scripts/textBox/textBox.gml b/scripts/textBox/textBox.gml index e4def2708..3cb214559 100644 --- a/scripts/textBox/textBox.gml +++ b/scripts/textBox/textBox.gml @@ -65,18 +65,18 @@ function textBox(_input, _onModify) constructor { static editText = function() { #region text editor - if(keyboard_check_pressed(ord("A")) && keyboard_check(vk_control)) { + if(keyboard_check(vk_control) && keyboard_check_pressed(ord("A"))) { cursor_select = 0; cursor = string_length(_input_text); - } else if(keyboard_check(vk_control) && (keyboard_check_released(ord("C")) || keyboard_check_released(ord("X")))) { + } else if(keyboard_check(vk_control) && (keyboard_check_pressed(ord("C")) || keyboard_check_pressed(ord("X")))) { if(cursor_select != -1) { var minc = min(cursor, cursor_select); var maxc = max(cursor, cursor_select); clipboard_set_text(string_copy(_input_text, minc, maxc - minc)); } } else { - if(keyboard_check_released(ord("V")) && keyboard_check(vk_control)) - keyboard_string = clipboard_get_text(); + if(keyboard_check(vk_control) && keyboard_check_pressed(ord("V"))) + KEYBOARD_STRING = clipboard_get_text(); if(keyboard_check_pressed(vk_escape) || keyboard_check_pressed(vk_enter)) { } else if(keyboard_check_pressed(vk_backspace)) { @@ -115,8 +115,8 @@ function textBox(_input, _onModify) constructor { _input_text = str_before + str_after; } cursor_select = -1; - } else if(keyboard_string != "") { - var ch = keyboard_string; + } else if(KEYBOARD_STRING != "") { + var ch = KEYBOARD_STRING; if(cursor_select == -1) { var str_before = string_copy(_input_text, 1, cursor); @@ -139,7 +139,7 @@ function textBox(_input, _onModify) constructor { } } - keyboard_string = ""; + KEYBOARD_STRING = ""; keyboard_lastkey = -1; #endregion @@ -406,7 +406,7 @@ function textBox(_input, _onModify) constructor { if(mouse_press(mb_left, active)) { TEXTBOX_ACTIVE = self; click_block = 1; - keyboard_string = ""; + KEYBOARD_STRING = ""; keyboard_lastkey = -1; _input_text = _text; diff --git a/scripts/vertex_function/vertex_function.gml b/scripts/vertex_function/vertex_function.gml index 8bf30dc8f..94c7afffe 100644 --- a/scripts/vertex_function/vertex_function.gml +++ b/scripts/vertex_function/vertex_function.gml @@ -12,4 +12,10 @@ MATRIX_IDENTITY = matrix_build_identity(); function vertex_add_pt(vertex, position, texture) { vertex_position_3d(vertex, position[0], position[1], position[2]); vertex_texcoord(vertex, texture[0], texture[1]); +} + +function vertex_add_pnt(vertex, position, normal, texture) { + vertex_position_3d(vertex, position[0], position[1], position[2]); + vertex_normal(vertex, normal[0], normal[1], normal[2]); + vertex_texcoord(vertex, texture[0], texture[1]); } \ No newline at end of file diff --git a/shaders/sh_blend_contrast/sh_blend_contrast.fsh b/shaders/sh_blend_contrast/sh_blend_contrast.fsh new file mode 100644 index 000000000..a7192bea6 --- /dev/null +++ b/shaders/sh_blend_contrast/sh_blend_contrast.fsh @@ -0,0 +1,39 @@ +// +// Simple passthrough fragment shader +// +varying vec2 v_vTexcoord; +varying vec4 v_vColour; + +uniform vec2 dimension; +uniform int tile_type; + +uniform int useMask; +uniform sampler2D mask; +uniform sampler2D fore; +uniform float opacity; + +void main() { + vec4 _col0 = texture2D( gm_BaseTexture, v_vTexcoord ); + + vec2 fore_tex = v_vTexcoord; + if(tile_type == 0) { + fore_tex = v_vTexcoord; + } else if(tile_type == 1) { + fore_tex = fract(v_vTexcoord * dimension); + } + + vec4 _col1 = texture2D( fore, fore_tex ); + + float o = opacity; + if(useMask == 1) { + vec3 m = texture2D( mask, v_vTexcoord ).rgb; + o *= (m.r + m.g + m.b) / 3.; + } + _col1.a *= o; + + float lum = dot(_col1.rgb, vec3(0.2126, 0.7152, 0.0722)); + vec4 blend = lum > 0.5? (vec4(1.) - (vec4(1.) - _col0) * (vec4(1.) - _col1) * 2.) : (_col0 * _col1 * 2.); + vec4 res = mix(_col0, blend, opacity); + + gl_FragColor = res; +} diff --git a/shaders/sh_blend_contrast/sh_blend_contrast.vsh b/shaders/sh_blend_contrast/sh_blend_contrast.vsh new file mode 100644 index 000000000..d4b316559 --- /dev/null +++ b/shaders/sh_blend_contrast/sh_blend_contrast.vsh @@ -0,0 +1,18 @@ +// +// Simple passthrough vertex shader +// +attribute vec3 in_Position; // (x,y,z) +//attribute vec3 in_Normal; // (x,y,z) unused in this shader. +attribute vec4 in_Colour; // (r,g,b,a) +attribute vec2 in_TextureCoord; // (u,v) + +varying vec2 v_vTexcoord; +varying vec4 v_vColour; + +void main() { + vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0); + gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos; + + v_vColour = in_Colour; + v_vTexcoord = in_TextureCoord; +} diff --git a/shaders/sh_blend_contrast/sh_blend_contrast.yy b/shaders/sh_blend_contrast/sh_blend_contrast.yy new file mode 100644 index 000000000..173175afe --- /dev/null +++ b/shaders/sh_blend_contrast/sh_blend_contrast.yy @@ -0,0 +1,10 @@ +{ + "resourceType": "GMShader", + "resourceVersion": "1.0", + "name": "sh_blend_contrast", + "type": 1, + "parent": { + "name": "blend", + "path": "folders/shader/blend.yy", + }, +} \ No newline at end of file diff --git a/shaders/sh_blend_overlay/sh_blend_overlay.fsh b/shaders/sh_blend_overlay/sh_blend_overlay.fsh new file mode 100644 index 000000000..644388009 --- /dev/null +++ b/shaders/sh_blend_overlay/sh_blend_overlay.fsh @@ -0,0 +1,39 @@ +// +// Simple passthrough fragment shader +// +varying vec2 v_vTexcoord; +varying vec4 v_vColour; + +uniform vec2 dimension; +uniform int tile_type; + +uniform int useMask; +uniform sampler2D mask; +uniform sampler2D fore; +uniform float opacity; + +void main() { + vec4 _col0 = texture2D( gm_BaseTexture, v_vTexcoord ); + + vec2 fore_tex = v_vTexcoord; + if(tile_type == 0) { + fore_tex = v_vTexcoord; + } else if(tile_type == 1) { + fore_tex = fract(v_vTexcoord * dimension); + } + + vec4 _col1 = texture2D( fore, fore_tex ); + + float o = opacity; + if(useMask == 1) { + vec3 m = texture2D( mask, v_vTexcoord ).rgb; + o *= (m.r + m.g + m.b) / 3.; + } + _col1.a *= o; + + float lum = dot(_col1.rgb, vec3(0.2126, 0.7152, 0.0722)); + vec4 blend = lum > 0.5? (1. - (1. - 2. * (_col1 - 0.5)) * (1. - _col0)) : ((2. * _col1) * _col0); + vec4 res = mix(_col0, blend, opacity); + + gl_FragColor = res; +} diff --git a/shaders/sh_blend_overlay/sh_blend_overlay.vsh b/shaders/sh_blend_overlay/sh_blend_overlay.vsh new file mode 100644 index 000000000..d4b316559 --- /dev/null +++ b/shaders/sh_blend_overlay/sh_blend_overlay.vsh @@ -0,0 +1,18 @@ +// +// Simple passthrough vertex shader +// +attribute vec3 in_Position; // (x,y,z) +//attribute vec3 in_Normal; // (x,y,z) unused in this shader. +attribute vec4 in_Colour; // (r,g,b,a) +attribute vec2 in_TextureCoord; // (u,v) + +varying vec2 v_vTexcoord; +varying vec4 v_vColour; + +void main() { + vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0); + gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos; + + v_vColour = in_Colour; + v_vTexcoord = in_TextureCoord; +} diff --git a/shaders/sh_blend_overlay/sh_blend_overlay.yy b/shaders/sh_blend_overlay/sh_blend_overlay.yy new file mode 100644 index 000000000..4d9bc6e34 --- /dev/null +++ b/shaders/sh_blend_overlay/sh_blend_overlay.yy @@ -0,0 +1,10 @@ +{ + "resourceType": "GMShader", + "resourceVersion": "1.0", + "name": "sh_blend_overlay", + "type": 1, + "parent": { + "name": "blend", + "path": "folders/shader/blend.yy", + }, +} \ No newline at end of file diff --git a/shaders/sh_blend_subtract_alpha/sh_blend_add.yy b/shaders/sh_blend_subtract_alpha/sh_blend_add.yy new file mode 100644 index 000000000..63fc46ff6 --- /dev/null +++ b/shaders/sh_blend_subtract_alpha/sh_blend_add.yy @@ -0,0 +1,11 @@ +{ + "type": 1, + "parent": { + "name": "blend", + "path": "folders/shader/blend.yy", + }, + "resourceVersion": "1.0", + "name": "sh_blend_add", + "tags": [], + "resourceType": "GMShader", +} \ No newline at end of file diff --git a/shaders/sh_blend_subtract_alpha/sh_blend_multiply.yy b/shaders/sh_blend_subtract_alpha/sh_blend_multiply.yy new file mode 100644 index 000000000..9cad89d11 --- /dev/null +++ b/shaders/sh_blend_subtract_alpha/sh_blend_multiply.yy @@ -0,0 +1,11 @@ +{ + "type": 1, + "parent": { + "name": "shader", + "path": "folders/shader.yy", + }, + "resourceVersion": "1.0", + "name": "sh_blend_multiply", + "tags": [], + "resourceType": "GMShader", +} \ No newline at end of file diff --git a/shaders/sh_blend_subtract_alpha/sh_blend_normal.yy b/shaders/sh_blend_subtract_alpha/sh_blend_normal.yy new file mode 100644 index 000000000..186ec2c33 --- /dev/null +++ b/shaders/sh_blend_subtract_alpha/sh_blend_normal.yy @@ -0,0 +1,11 @@ +{ + "type": 1, + "parent": { + "name": "blend", + "path": "folders/shader/blend.yy", + }, + "resourceVersion": "1.0", + "name": "sh_blend_normal", + "tags": [], + "resourceType": "GMShader", +} \ No newline at end of file diff --git a/shaders/sh_blend_subtract_alpha/sh_blend_subtract_alpha.fsh b/shaders/sh_blend_subtract_alpha/sh_blend_subtract_alpha.fsh new file mode 100644 index 000000000..d5c4d5e9c --- /dev/null +++ b/shaders/sh_blend_subtract_alpha/sh_blend_subtract_alpha.fsh @@ -0,0 +1,40 @@ +// +// Simple passthrough fragment shader +// +varying vec2 v_vTexcoord; +varying vec4 v_vColour; + +uniform vec2 dimension; +uniform int tile_type; + +uniform int useMask; +uniform sampler2D mask; +uniform sampler2D fore; +uniform float opacity; + +void main() { + vec4 _col0 = texture2D( gm_BaseTexture, v_vTexcoord ); + _col0.rgb *= _col0.a; + + vec2 fore_tex = v_vTexcoord; + if(tile_type == 0) { + fore_tex = v_vTexcoord; + } else if(tile_type == 1) { + fore_tex = fract(v_vTexcoord * dimension); + } + + vec4 _col1 = texture2D( fore, fore_tex ); + + float o = opacity; + if(useMask == 1) { + vec3 m = texture2D( mask, v_vTexcoord ).rgb; + o *= (m.r + m.g + m.b) / 3.; + } + _col1.a *= o; + _col1.rgb *= _col1.a; + + vec4 res = _col0 - _col1; + res.a = _col0.a; + + gl_FragColor = res; +} diff --git a/shaders/sh_blend_subtract_alpha/sh_blend_subtract_alpha.vsh b/shaders/sh_blend_subtract_alpha/sh_blend_subtract_alpha.vsh new file mode 100644 index 000000000..3900c20f4 --- /dev/null +++ b/shaders/sh_blend_subtract_alpha/sh_blend_subtract_alpha.vsh @@ -0,0 +1,19 @@ +// +// Simple passthrough vertex shader +// +attribute vec3 in_Position; // (x,y,z) +//attribute vec3 in_Normal; // (x,y,z) unused in this shader. +attribute vec4 in_Colour; // (r,g,b,a) +attribute vec2 in_TextureCoord; // (u,v) + +varying vec2 v_vTexcoord; +varying vec4 v_vColour; + +void main() +{ + vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0); + gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos; + + v_vColour = in_Colour; + v_vTexcoord = in_TextureCoord; +} diff --git a/shaders/sh_blend_subtract_alpha/sh_blend_subtract_alpha.yy b/shaders/sh_blend_subtract_alpha/sh_blend_subtract_alpha.yy new file mode 100644 index 000000000..811a06602 --- /dev/null +++ b/shaders/sh_blend_subtract_alpha/sh_blend_subtract_alpha.yy @@ -0,0 +1,10 @@ +{ + "resourceType": "GMShader", + "resourceVersion": "1.0", + "name": "sh_blend_subtract_alpha", + "type": 1, + "parent": { + "name": "blend", + "path": "folders/shader/blend.yy", + }, +} \ No newline at end of file diff --git a/shaders/sh_noise/sh_noise.fsh b/shaders/sh_noise/sh_noise.fsh new file mode 100644 index 000000000..d2c68030d --- /dev/null +++ b/shaders/sh_noise/sh_noise.fsh @@ -0,0 +1,17 @@ +// +// Simple passthrough fragment shader +// +varying vec2 v_vTexcoord; +varying vec4 v_vColour; + +uniform vec2 dimension; +uniform float seed; + +float random (in vec2 st) { + return fract(sin(dot(st.xy, vec2(1892.9898, 78.23453))) * 437.54123); +} + +void main() { + float n = random(v_vTexcoord + seed / 5000.); + gl_FragColor = vec4(vec3(n), 1.0); +} diff --git a/shaders/sh_noise/sh_noise.vsh b/shaders/sh_noise/sh_noise.vsh new file mode 100644 index 000000000..3900c20f4 --- /dev/null +++ b/shaders/sh_noise/sh_noise.vsh @@ -0,0 +1,19 @@ +// +// Simple passthrough vertex shader +// +attribute vec3 in_Position; // (x,y,z) +//attribute vec3 in_Normal; // (x,y,z) unused in this shader. +attribute vec4 in_Colour; // (r,g,b,a) +attribute vec2 in_TextureCoord; // (u,v) + +varying vec2 v_vTexcoord; +varying vec4 v_vColour; + +void main() +{ + vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0); + gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos; + + v_vColour = in_Colour; + v_vTexcoord = in_TextureCoord; +} diff --git a/shaders/sh_noise/sh_noise.yy b/shaders/sh_noise/sh_noise.yy new file mode 100644 index 000000000..aaf14e8a6 --- /dev/null +++ b/shaders/sh_noise/sh_noise.yy @@ -0,0 +1,10 @@ +{ + "resourceType": "GMShader", + "resourceVersion": "1.0", + "name": "sh_noise", + "type": 1, + "parent": { + "name": "generator", + "path": "folders/shader/generator.yy", + }, +} \ No newline at end of file diff --git a/shaders/sh_noise/sh_perlin.yy b/shaders/sh_noise/sh_perlin.yy new file mode 100644 index 000000000..00d0f003a --- /dev/null +++ b/shaders/sh_noise/sh_perlin.yy @@ -0,0 +1,11 @@ +{ + "type": 1, + "parent": { + "name": "generator", + "path": "folders/shader/generator.yy", + }, + "resourceVersion": "1.0", + "name": "sh_perlin", + "tags": [], + "resourceType": "GMShader", +} \ No newline at end of file diff --git a/shaders/sh_pixel_cloud/sh_pixel_cloud.fsh b/shaders/sh_pixel_cloud/sh_pixel_cloud.fsh index f3682201c..1bfb5ecb0 100644 --- a/shaders/sh_pixel_cloud/sh_pixel_cloud.fsh +++ b/shaders/sh_pixel_cloud/sh_pixel_cloud.fsh @@ -95,7 +95,7 @@ float frandom (in vec2 st, in float _seed) { } vec2 vrandom (in vec2 st) { - return vec2(frandom(st, 165.84), frandom(st, 98.01)); + return vec2(frandom(st, 165.874), frandom(st, 98.601)); } void main() { diff --git a/shaders/sh_shape/sh_shape.fsh b/shaders/sh_shape/sh_shape.fsh index bd2b2abe3..932f6312e 100644 --- a/shaders/sh_shape/sh_shape.fsh +++ b/shaders/sh_shape/sh_shape.fsh @@ -8,6 +8,7 @@ uniform int shape; uniform int bg; uniform int aa; uniform int sides; +uniform int drawDF; uniform float angle; uniform float inner; @@ -82,50 +83,37 @@ void main() { float color = 0.; vec2 cen = (v_vTexcoord - center) / scale; float ratio = dimension.x / dimension.y; + float d; if(shape == 0) { vec2 cen = v_vTexcoord - center; - - if(abs(cen.x) < scale.x && abs(cen.y) < scale.y) - color = 1.; + vec2 edgeDist = abs(cen) - scale; + float odist = length(max(edgeDist, 0.)); + float idist = min(max(edgeDist.x, edgeDist.y), 0.); + d = odist + idist; } else if(shape == 1) { - if(aa == 0) - color = step(length((v_vTexcoord - center) / scale), 1.); - else - color = smoothstep(1., 0.95, length((v_vTexcoord - center) / scale)); + d = length((v_vTexcoord - center) / scale) - 1.; } else if(shape == 2) { - float d = sdRegularPolygon( cen, 0.9 - corner, sides, angle ); + d = sdRegularPolygon( cen, 0.9 - corner, sides, angle ); d -= corner; - - if(aa == 0) - color = step(d, 0.); - else - color = smoothstep(.05, 0., d); } else if(shape == 3) { - float d = sdStar( cen, 0.9 - corner, sides, 2. + inner * (float(sides) - 2.), angle ); + d = sdStar( cen, 0.9 - corner, sides, 2. + inner * (float(sides) - 2.), angle ); d -= corner; - - if(aa == 0) - color = step(d, 0.); - else - color = smoothstep(0.05, 0., d); } else if(shape == 4) { - float d = sdArc( cen, vec2(sin(angle), cos(angle)), angle_range, 0.9 - inner, inner ); + d = sdArc( cen, vec2(sin(angle), cos(angle)), angle_range, 0.9 - inner, inner ); d -= corner; - - if(aa == 0) - color = step(d, 0.); - else - color = smoothstep(0.05, 0., d); } else if(shape == 5) { - float d = sdBox( v_vTexcoord - center, scale - corner); + d = sdBox( v_vTexcoord - center, scale - corner); d -= corner; - - if(aa == 0) - color = step(d, 0.0); - else - color = smoothstep(0.05, 0., d); } + d = max(0., min(1., d)); + if(drawDF == 1) + color = 1. - d; + else if(aa == 0) + color = step(d, 0.0); + else + color = smoothstep(0.05, 0., d); + gl_FragColor = mix(bgColor, v_vColour, color); } diff --git a/shaders/sh_stripe/sh_stripe.fsh b/shaders/sh_stripe/sh_stripe.fsh index fe3c9f3d8..8a44c757a 100644 --- a/shaders/sh_stripe/sh_stripe.fsh +++ b/shaders/sh_stripe/sh_stripe.fsh @@ -17,6 +17,8 @@ uniform float amount; uniform float rand; uniform int blend; +#define PI 3.14159265359 + float random (in vec2 st) { return fract(sin(dot(st.xy, vec2(12.9898, 78.233))) * 43758.5453123); } @@ -103,7 +105,7 @@ void main() { else gl_FragColor = vec4(vec3(1.), 1.); } else - gl_FragColor = vec4(vec3(abs(_s - 0.5) * 2.), 1.); + gl_FragColor = vec4(vec3(sin(_s * 2. * PI) * 0.5 + 0.5), 1.); } else { if(_s > .5) gl_FragColor = vec4(gradientEval(random(vec2(slot))).rgb, 1.); diff --git a/shaders/sh_vertex_pnt_light/sh_vertex_pnt_light.fsh b/shaders/sh_vertex_pnt_light/sh_vertex_pnt_light.fsh new file mode 100644 index 000000000..090be1bd3 --- /dev/null +++ b/shaders/sh_vertex_pnt_light/sh_vertex_pnt_light.fsh @@ -0,0 +1,19 @@ +// +// Simple passthrough fragment shader +// +varying vec2 v_vTexcoord; +varying float v_vNormalLight; + +uniform vec3 u_AmbientLight; +uniform vec3 u_LightColor; +uniform float u_LightIntensity; + +void main() { + vec4 dif = texture2D( gm_BaseTexture, v_vTexcoord ); + vec4 lig = dif * (u_LightIntensity * vec4(u_LightColor, 1.)); + vec4 amb = dif * vec4(u_AmbientLight, 1.); + float intensity = min(v_vNormalLight * u_LightIntensity, 1.); + vec4 clr = mix(amb, lig, intensity); + clr.a = dif.a; + gl_FragColor = clr; +} diff --git a/shaders/sh_vertex_pnt_light/sh_vertex_pnt_light.vsh b/shaders/sh_vertex_pnt_light/sh_vertex_pnt_light.vsh new file mode 100644 index 000000000..089c86b95 --- /dev/null +++ b/shaders/sh_vertex_pnt_light/sh_vertex_pnt_light.vsh @@ -0,0 +1,24 @@ +// +// Simple passthrough vertex shader +// +attribute vec3 in_Position; +attribute vec3 in_Normal; +attribute vec2 in_TextureCoord; + +varying vec2 v_vTexcoord; +varying float v_vNormalLight; + +uniform vec3 u_LightForward; + +void main() { + vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0); + vec3 world_space_norm = normalize(mat3(gm_Matrices[MATRIX_WORLD]) * in_Normal); + vec3 world_space_ligh = u_LightForward; + + gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos; + + float illumination = -dot(world_space_norm, world_space_ligh); + + v_vTexcoord = in_TextureCoord; + v_vNormalLight = max(0., min(1., illumination)); +} diff --git a/shaders/sh_vertex_pnt_light/sh_vertex_pnt_light.yy b/shaders/sh_vertex_pnt_light/sh_vertex_pnt_light.yy new file mode 100644 index 000000000..24ee95306 --- /dev/null +++ b/shaders/sh_vertex_pnt_light/sh_vertex_pnt_light.yy @@ -0,0 +1,10 @@ +{ + "resourceType": "GMShader", + "resourceVersion": "1.0", + "name": "sh_vertex_pnt_light", + "type": 1, + "parent": { + "name": "3d", + "path": "folders/shader/3d.yy", + }, +} \ No newline at end of file diff --git a/sprites/s_node_3d_extrude/304b9b7a-4d75-46b1-a759-8de78996708d.png b/sprites/s_node_3d_extrude/304b9b7a-4d75-46b1-a759-8de78996708d.png new file mode 100644 index 000000000..3112502a3 Binary files /dev/null and b/sprites/s_node_3d_extrude/304b9b7a-4d75-46b1-a759-8de78996708d.png differ diff --git a/sprites/s_node_3d_extrude/layers/304b9b7a-4d75-46b1-a759-8de78996708d/13d64784-7479-4a67-89b2-9d989141e3e0.png b/sprites/s_node_3d_extrude/layers/304b9b7a-4d75-46b1-a759-8de78996708d/13d64784-7479-4a67-89b2-9d989141e3e0.png new file mode 100644 index 000000000..3112502a3 Binary files /dev/null and b/sprites/s_node_3d_extrude/layers/304b9b7a-4d75-46b1-a759-8de78996708d/13d64784-7479-4a67-89b2-9d989141e3e0.png differ diff --git a/sprites/s_node_3d_extrude/s_node_3d_extrude.yy b/sprites/s_node_3d_extrude/s_node_3d_extrude.yy new file mode 100644 index 000000000..7a4eaf637 --- /dev/null +++ b/sprites/s_node_3d_extrude/s_node_3d_extrude.yy @@ -0,0 +1,74 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_node_3d_extrude", + "bboxMode": 0, + "collisionKind": 1, + "type": 0, + "origin": 4, + "preMultiplyAlpha": false, + "edgeFiltering": false, + "collisionTolerance": 0, + "swfPrecision": 2.525, + "bbox_left": 9, + "bbox_right": 55, + "bbox_top": 3, + "bbox_bottom": 61, + "HTile": false, + "VTile": false, + "For3D": false, + "DynamicTexturePage": false, + "width": 64, + "height": 64, + "textureGroupId": { + "name": "Default", + "path": "texturegroups/Default", + }, + "swatchColours": null, + "gridX": 0, + "gridY": 0, + "frames": [ + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"304b9b7a-4d75-46b1-a759-8de78996708d",}, + ], + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_node_3d_extrude", + "timeUnits": 1, + "playback": 1, + "playbackSpeed": 30.0, + "playbackSpeedType": 0, + "autoRecord": true, + "volume": 1.0, + "length": 1.0, + "events": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore",}, + "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore",}, + "tracks": [ + {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","spriteId":null,"keyframes":{"Keyframes":[ + {"id":"279104a9-85a8-4376-b39a-383d1b242c0e","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"304b9b7a-4d75-46b1-a759-8de78996708d","path":"sprites/s_node_3d_extrude/s_node_3d_extrude.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, + ],"resourceVersion":"1.0","resourceType":"KeyframeStore",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"modifiers":[],}, + ], + "visibleRange": null, + "lockOrigin": false, + "showBackdrop": true, + "showBackdropImage": false, + "backdropImagePath": "", + "backdropImageOpacity": 0.5, + "backdropWidth": 1366, + "backdropHeight": 768, + "backdropXOffset": 0.0, + "backdropYOffset": 0.0, + "xorigin": 32, + "yorigin": 32, + "eventToFunction": {}, + "eventStubScript": null, + }, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"13d64784-7479-4a67-89b2-9d989141e3e0","visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default",}, + ], + "nineSlice": null, + "parent": { + "name": "icons", + "path": "folders/nodes/icons.yy", + }, +} \ No newline at end of file diff --git a/sprites/s_node_mirror/s_node_mirror.yy b/sprites/s_node_mirror/s_node_mirror.yy index 3d451334a..720bb7a6d 100644 --- a/sprites/s_node_mirror/s_node_mirror.yy +++ b/sprites/s_node_mirror/s_node_mirror.yy @@ -48,7 +48,7 @@ {"id":"d33ee729-7c87-437e-bbb9-37ba2f8e36e9","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"5e66354d-b33e-4411-aae5-a12392d1b28c","path":"sprites/s_node_mirror/s_node_mirror.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, ],"resourceVersion":"1.0","resourceType":"KeyframeStore",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"modifiers":[],}, ], - "visibleRange": {"x":0.0,"y":0.0,}, + "visibleRange": null, "lockOrigin": false, "showBackdrop": true, "showBackdropImage": false, diff --git a/sprites/s_node_noise/9a0b9b1c-be27-4016-9847-958094072f94.png b/sprites/s_node_noise/9a0b9b1c-be27-4016-9847-958094072f94.png new file mode 100644 index 000000000..50294241c Binary files /dev/null and b/sprites/s_node_noise/9a0b9b1c-be27-4016-9847-958094072f94.png differ diff --git a/sprites/s_node_noise/layers/9a0b9b1c-be27-4016-9847-958094072f94/0e14c719-8539-4c85-a020-a8a561a8fa2e.png b/sprites/s_node_noise/layers/9a0b9b1c-be27-4016-9847-958094072f94/0e14c719-8539-4c85-a020-a8a561a8fa2e.png new file mode 100644 index 000000000..50294241c Binary files /dev/null and b/sprites/s_node_noise/layers/9a0b9b1c-be27-4016-9847-958094072f94/0e14c719-8539-4c85-a020-a8a561a8fa2e.png differ diff --git a/sprites/s_node_noise/s_node_noise.yy b/sprites/s_node_noise/s_node_noise.yy new file mode 100644 index 000000000..59046c7e1 --- /dev/null +++ b/sprites/s_node_noise/s_node_noise.yy @@ -0,0 +1,74 @@ +{ + "resourceType": "GMSprite", + "resourceVersion": "1.0", + "name": "s_node_noise", + "bboxMode": 0, + "collisionKind": 1, + "type": 0, + "origin": 4, + "preMultiplyAlpha": false, + "edgeFiltering": false, + "collisionTolerance": 0, + "swfPrecision": 2.525, + "bbox_left": 0, + "bbox_right": 63, + "bbox_top": 0, + "bbox_bottom": 63, + "HTile": false, + "VTile": false, + "For3D": false, + "DynamicTexturePage": false, + "width": 64, + "height": 64, + "textureGroupId": { + "name": "Default", + "path": "texturegroups/Default", + }, + "swatchColours": null, + "gridX": 0, + "gridY": 0, + "frames": [ + {"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"9a0b9b1c-be27-4016-9847-958094072f94",}, + ], + "sequence": { + "resourceType": "GMSequence", + "resourceVersion": "1.4", + "name": "s_node_noise", + "timeUnits": 1, + "playback": 1, + "playbackSpeed": 30.0, + "playbackSpeedType": 0, + "autoRecord": true, + "volume": 1.0, + "length": 1.0, + "events": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore",}, + "moments": {"Keyframes":[],"resourceVersion":"1.0","resourceType":"KeyframeStore",}, + "tracks": [ + {"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","spriteId":null,"keyframes":{"Keyframes":[ + {"id":"6486222f-8d53-4ac5-b1f1-7b5d2bafcc59","Key":0.0,"Length":1.0,"Stretch":false,"Disabled":false,"IsCreationKey":false,"Channels":{"0":{"Id":{"name":"9a0b9b1c-be27-4016-9847-958094072f94","path":"sprites/s_node_noise/s_node_noise.yy",},"resourceVersion":"1.0","resourceType":"SpriteFrameKeyframe",},},"resourceVersion":"1.0","resourceType":"Keyframe",}, + ],"resourceVersion":"1.0","resourceType":"KeyframeStore",},"trackColour":0,"inheritsTrackColour":true,"builtinName":0,"traits":0,"interpolation":1,"tracks":[],"events":[],"isCreationTrack":false,"modifiers":[],}, + ], + "visibleRange": null, + "lockOrigin": false, + "showBackdrop": true, + "showBackdropImage": false, + "backdropImagePath": "", + "backdropImageOpacity": 0.5, + "backdropWidth": 1366, + "backdropHeight": 768, + "backdropXOffset": 0.0, + "backdropYOffset": 0.0, + "xorigin": 32, + "yorigin": 32, + "eventToFunction": {}, + "eventStubScript": null, + }, + "layers": [ + {"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"0e14c719-8539-4c85-a020-a8a561a8fa2e","visible":true,"isLocked":false,"blendMode":0,"opacity":100.0,"displayName":"default",}, + ], + "nineSlice": null, + "parent": { + "name": "icons", + "path": "folders/nodes/icons.yy", + }, +} \ No newline at end of file